104 lines
4.7 KiB
Python
104 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""Rebuild redmini/src/data.js from backend mock data (offline snapshot)."""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
BACKEND = ROOT / "backend"
|
|
OUT = ROOT / "redmini" / "src" / "data.js"
|
|
|
|
sys.path.insert(0, str(BACKEND))
|
|
|
|
from app.data import community_data as c # noqa: E402
|
|
from app.data import digital_content as d # noqa: E402
|
|
from app.data import mock_data as m # noqa: E402
|
|
|
|
|
|
def main() -> int:
|
|
meetups = [
|
|
{k: v for k, v in x.items() if k not in ("mirotalkRoom", "loungeChannel", "meetingUrl")}
|
|
for x in c.MEETUPS
|
|
]
|
|
details = getattr(c, "DISCUSSION_DETAILS", {}) or {}
|
|
payload = {
|
|
"brand": "nomadro",
|
|
"tagline": "用一行代码环游世界",
|
|
"offlineNote": "小红书小程序无法联网。本包为官网内容离线镜像,收藏/计划仅保存在本机。完整互动请打开 nomadweb.nomadro.com",
|
|
"site": "https://nomadweb.nomadro.com",
|
|
"stats": {
|
|
"destinations": len(m.DESTINATIONS),
|
|
"visas": len(m.VISAS),
|
|
"meetups": len(meetups),
|
|
"blog": len(m.BLOG_POSTS),
|
|
"faqs": len(m.FAQS),
|
|
},
|
|
"ticker": [
|
|
"🌏 全球数字游民正在路上",
|
|
"📋 签证政策实时整理(离线快照)",
|
|
"🎉 同城活动与社区讨论可先浏览",
|
|
"🎓 游民学院免费课时可学",
|
|
],
|
|
"rings": {
|
|
"explore": [
|
|
{"id": "destinations", "emoji": "🌴", "title": "目的地", "desc": "发现下一座城市"},
|
|
{"id": "visas", "emoji": "📋", "title": "签证指南", "desc": "远程友好签证"},
|
|
{"id": "matcher", "emoji": "🎯", "title": "智能匹配", "desc": "按预算气候排序"},
|
|
{"id": "compare", "emoji": "⚖️", "title": "城市对比", "desc": "并排看成本网速"},
|
|
],
|
|
"connect": [
|
|
{"id": "meetups", "emoji": "🎉", "title": "游民活动", "desc": "同城与线上"},
|
|
{"id": "community", "emoji": "💬", "title": "社区讨论", "desc": "签证住宿经验"},
|
|
{"id": "voices", "emoji": "🗣️", "title": "游民心声", "desc": "真实旅居评价"},
|
|
],
|
|
"grow": [
|
|
{"id": "digital", "emoji": "🎓", "title": "游民学院", "desc": "远程工作课程"},
|
|
{"id": "blog", "emoji": "📝", "title": "博客", "desc": "指南与攻略"},
|
|
{"id": "tools", "emoji": "🧰", "title": "工具箱", "desc": "费用估算等"},
|
|
{"id": "faq", "emoji": "❓", "title": "常见问题", "desc": "启动资金与保险"},
|
|
],
|
|
},
|
|
"lifestyle": [
|
|
{"key": "morning", "emoji": "🌅", "title": "清晨", "body": "咖啡馆开机,时区对齐,列出今日三件交付。"},
|
|
{"key": "work", "emoji": "💻", "title": "深度工作", "body": "联合办公或家中安静角落,异步协作优先。"},
|
|
{"key": "explore", "emoji": "🚶", "title": "探索城市", "body": "傍晚散步、夜市与同城 meetup。"},
|
|
{"key": "collab", "emoji": "🤝", "title": "协作", "body": "和同行交换签证与住宿情报。"},
|
|
{"key": "social", "emoji": "🌙", "title": "社交", "body": "社区圆桌、兴趣局,或安静充电。"},
|
|
],
|
|
"planChecklist": [
|
|
{"id": "visa", "label": "确认签证/停留天数"},
|
|
{"id": "flight", "label": "预订机票"},
|
|
{"id": "housing", "label": "首周短租/酒店"},
|
|
{"id": "sim", "label": "当地 SIM / eSIM"},
|
|
{"id": "cowork", "label": "踩点联合办公"},
|
|
{"id": "insurance", "label": "国际医疗保险"},
|
|
{"id": "budget", "label": "写下月预算"},
|
|
{"id": "meetup", "label": "报名一场同城活动"},
|
|
],
|
|
"destinations": m.DESTINATIONS,
|
|
"visas": m.VISAS,
|
|
"faqs": m.FAQS,
|
|
"testimonials": m.TESTIMONIALS,
|
|
"tools": m.TOOLS,
|
|
"blog": m.BLOG_POSTS,
|
|
"blogContent": m.BLOG_CONTENT,
|
|
"meetups": meetups,
|
|
"discussions": c.DISCUSSIONS,
|
|
"discussionDetails": details if isinstance(details, dict) else {},
|
|
"course": d.COURSE_MODULES,
|
|
"lessons": d.LESSONS,
|
|
"jobs": (d.JOBS[:8] if getattr(d, "JOBS", None) else []),
|
|
}
|
|
OUT.write_text(
|
|
"window.NOMADRO_DATA = " + json.dumps(payload, ensure_ascii=False, default=str) + ";\n",
|
|
encoding="utf-8",
|
|
)
|
|
print(f"wrote {OUT} ({OUT.stat().st_size} bytes)")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|