bigcode 5ff5f9d477 v0.10.20: G3 询价弹窗/表单(原站 Elementor popup 1129 + CF7 604)
- 新增 InquiryPopup:全局委托拦截 #elementor-action:popup:open 链接(全站 24 处,id 1129),
  按 Elementor 弹窗 DOM 渲染(遮罩 rgba(0,0,0,.8)、700px 白卡、关闭按钮 20/20、Esc/遮罩关闭、
  打开时锁定页面滚动)
- 表单按 CF7 表单 604 重建:Name/Company/Business email/Phone/Product/Interest/Annual Demand/
  Message + consent 勾选 + reCAPTCHA 声明;样式取 popup 生成 CSS(padding 2em 3em、
  48%/31.3% 两列三列、#C9CEE8 边框、textarea 134px、按钮 #ED6C00→#FFA11B 圆角 10)
- 提交走 submitInquiry(form_key contact-form-1),字段映射 + interest/annualdemand/consent
  extra;成功显示 CF7 原文提示;弹窗内 5 个社交图标(20px/间距 14/品牌色)
- app.css 补弹窗样式与 FA tiktok/twitter 码位;Layout 全局挂载
- 实测 1436:700×737 居中、两列 289.9/三列 189、消息 604×153;390:全宽、移动端三列退化两列;
  首页与 landing 页触发器均生效,提交入库验证后清理测试数据;bun test 11 pass
- 版本 0.10.20
2026-11-02 11:37:28 +08:00

DusunIoT 重建版(TanStack Start + Bun + PostgreSQL)

将原 WordPress + Elementor + WooCommerce + GTranslate 站点(dusuniot.com)重构为单体应用: 前台 SSR 1:1 还原、后台 React + Ant Design 功能等价实现、PostgreSQL 关系型数据模型。

方案文档:docs/dusuniot-rebuild-tanstack-bun-pg-v2.md

技术栈

领域 选型
运行时 / 包管理 Bun 1.4+
前台 SSR / 路由 TanStack Start(Vite)+ React 19 + TS
数据库 PostgreSQL 16(Bun.sql + Drizzle ORM)
后台 UI React + Ant Design 6(仅 SVG 图标,禁 emoji/图标字体)
后台任务 jobs 表持久化队列(scripts/jobs-worker.ts,独立进程)

快速开始

bun install
# .env 默认 DATABASE_URL=postgres://dusuniot:dusuniot@127.0.0.1:25432/dusuniot
bun run db:migrate            # 应用迁移(src/db/migrations)
bun run import:wordpress      # 全量导入 WP 备份库(需 MariaDB 容器 dusuniot-mariadb, 端口 13306)
bun run dev                   # 开发服务器 http://localhost:3311
bun run build && bun run start  # 生产构建(Nitro .output)
bun run scripts/jobs-worker.ts  # 后台任务 worker
bun test                      # 单元/集成测试

WordPress 数据迁移

  • 备份源:dusuniot-full-20261029.tar.gz(站点文件 + mysqldump)。媒体已硬链接到 public/uploads。
  • 导入脚本:scripts/wordpress-import/import.ts,支持 --only=step1,step2 分步重跑(步骤:reset/media/users/categories/attributes/products/contents/views/orders/flamingo/elementor/forms/menus/filters/redirects/languages/final)。
  • 导入规模:148 产品(含属性/筛选映射)、674 内容(含 Elementor JSON)、53,101 询盘(Flamingo + Elementor 双源)、108 订单、8,210 媒体、493 条 301 重定向、104 语言、4 菜单 283 菜单项。
  • 旧 ID 映射存 legacy_id_mappings 表;WP 旧密码(phpass $P$)保留在 users.legacy_password_hash,客户登录时透明升级 bcrypt。

与原站插件的功能等价映射

原插件 新实现
WooCommerce products/orders/order_items/payments 关系模型 + 购物车/结账/账户(PayPal 回调位预留,幂等键 transaction_id)
Contact Form 7 + Flamingo inquiry_forms(表单定义)+ inquiries(统一询盘表)+ 邮件任务队列
Filter Everything filters 配置表 + product_attributes/values/map 关系型筛选(复合索引 + EXISTS 交集查询)
GTranslate /<lang>/ 前缀路由 + UI 壳层字符串 + content/product_translations 真实发布版本(缺翻译不生成伪语言页)
Redirection redirects 表 + 请求中间件(301/302,支持正则)
Elementor(前台) src/components/elementor/Renderer.tsx(section/column/heading/text-editor/image/button/image-box/icon-list/tabs/toggle 等 20+ widget)
Rank Math SEO contents/products 内置 SEO 字段 + sitemap.xml + robots.txt + hreflang
WP Rocket 设计上按 URL/语言做服务端缓存(Cloudflare/Nginx 层),登录态/购物车禁共享缓存
Dusun Flamingo Reader 后台询盘模块 + REST API(保留给 AI 线索管道)

URL 兼容(SEO 硬性要求)

  • 页面 /<slug>/、文章 /<category>/<slug>/、产品 /product/<slug>/、产品分类 /collection/<slug>/(与原站 permalink 一致,trailingSlash always)。
  • 493 条旧重定向规则原样生效;canonical/hreflang/sitemap 由 SEO 模块输出。

后台

/admin(默认管理员见导入输出)。模块:Dashboard / 内容 / 产品 / 订单 / 询盘 / 媒体 / 语言 / SEO 重定向 / 筛选 / 用户 / 设置。 所有接口 requireAdmin() 权限校验,敏感操作写 audit_logs。

目录结构

见方案文档第 6 节。src/server/* 按业务域拆分(auth/content→data/products→data/filters/orders→commerce/inquiries/translations/seo/jobs)。

版本

版本号以 package.json version 为准,每轮交付自增(patch/minor/major)。

S
Description
No description provided
Readme
3.2 GiB
Languages
TypeScript 93.5%
CSS 6.4%