Dongchuan United Document Administration System —— 一個架在 Cloudflare 上的虛構政權文件管理系統, 涵蓋行政(市政府)、立法(立法院)、司法(法院、檢察院)、監察、考試等權力機關的文件查閱、編輯與管理。
| 層 | 技術 |
|---|---|
| 前端 | React 18 + Vite + React Router + TailwindCSS v4 + TipTap 編輯器 |
| 後端 | Cloudflare Workers + Hono |
| 數據庫 | Cloudflare D1 (SQLite) |
| 檔案存儲 | Cloudflare R2 |
| 會話 | Cloudflare KV |
| 整合 | @cloudflare/vite-plugin(一條命令本地全棧開發) |
政府 · 立法院 · 法院 · 律政檢察署 · 廉政公署 · 外交事務署 · 龍東聯絡署 · 駐軍部隊 · 情報和地區安全對策局
- 公開閱覽 + 登錄管理:訪客可看公開已發布文件;登錄後依角色編輯/管理。
- 本地上傳:docx / pdf / 圖片等上傳到 R2(≤25MB)。
- 在線閱讀:原生文檔直接渲染;docx 用 mammoth 在瀏覽器轉 HTML 預覽;pdf 內嵌;原檔可下載。
- 在線編輯:TipTap 富文本編輯原生文檔。
- 文號自動化:建立/上傳時自動生成
{機關簡寫}{年份}-{序號}(每機關每年獨立遞增,例:立法2026-004;手動上傳亦計入)。 - 一鍵範本:選範本生成新文件,填
{{占位符}}後發布。 - 用戶與權限:super_admin / organ_admin / member / viewer 四級角色;super/organ admin 可屬多機關。
- 可見性:公開 / 非公開兩種;非公開文件由機關管理員逐用戶授權(per-user ACL)。
- 篩選分類:左側 iTunes 來源列表選機關 + 類型 / 狀態 / 可見性 / 全文搜索。
- 介面:早期 iTunes 拉絲金屬風;文件標題與正文採繁體中文新細明體。
npm install
npm run db:init:local # 建表
npm run db:seed:local # 機關 / 類型 / 範本 等種子資料
npm run create-admin admin dudas-admin 系統管理員 # 建超級管理員
npm run dev # http://localhost:5173預設管理員:帳號 admin / 密碼 dudas-admin(登錄後請立即改密)。
需要先
npx wrangler login授權你的 Cloudflare 帳號。
# 1. 建生產資源
npx wrangler d1 create dudas-db # 把回傳的 database_id 填進 wrangler.jsonc
npx wrangler kv namespace create SESSIONS # 把回傳的 id 填進 wrangler.jsonc
npx wrangler r2 bucket create dudas-files
# 2. 初始化遠端數據庫
npm run db:init:remote
npm run db:seed:remote
node scripts/create-admin.mjs admin <強密碼> 系統管理員 --remote
# 3. 部署
npm run deploy
# 4. 綁定自訂域名
# 在 Cloudflare Dashboard → Workers & Pages → dudas → Settings → Domains & Routes
# 把你的域名(或子域)指向此 Worker。db/ schema.sql / seed.sql / create-admin 產物
worker/ Hono 後端(index.ts + routes/ + auth.ts)
shared/ 前後端共享類型
src/ React 前端(pages/ components/ auth.tsx api.ts)
wrangler.jsonc Cloudflare 綁定配置
- docx 在線編輯:目前是「上傳→mammoth 轉 HTML 預覽/編輯→下載原檔」。複雜排版(頁眉頁腳、分欄)會在轉換中丟失。若需像素級保真,需自建 OnlyOffice/Collabora 文檔服務器(非 serverless)。
- 編輯後導出回 .docx(html→docx)尚未實作。
- 全文搜索目前用 SQL LIKE;資料量大後可改用 D1 FTS5(schema 已預留
documents_fts)。 - 標籤、分類層級管理、操作日誌頁面、文件版本歷史可後續擴展。