Files
OPC/Demo/assets/store.js
T
freedakandDevin f307e877c9 feat: OPC 社区运营公共服务平台 Demo v1.3
一人公司/超级个体产业社区公共服务基础设施 Demo,包含:
- 18 个角色页面(运营商/OPC/企业/个人/学员/培训机构/服务机构/政府/审计/金融)
- 暖橙活力主题 UI(渐变毛玻璃 + 暖色侧栏)
- 五步运营闭环(选方向→育人才→建平台→立SOP→聚产业)
- 华强北硬件供应链接入
- 蜂群式交付 + 产业集聚效应展示
- 需求文档(REQ-001~118 全覆盖)

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-13 09:07:23 +08:00

64 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Demo 数据层:统一加载 assets/mock.json
* 页面定义 window.renderPage(DB) 后由本文件回调渲染;
* 交互函数直接修改 DB 并调用对应 renderPage 重渲染。
* 交互产生的数据变更通过 localStorage 持久化,跨页面/刷新保留;
* mock.json 结构升级时提升 SCHEMA_VER 使旧存档失效。
*/
const SCHEMA_VER = 4;
const DB_KEY = 'opc_demo_db';
let DB = null;
/** 徽章 */
const B = (pair) => pair ? `<span class="badge ${pair[1]}">${pair[0]}</span>` : '—';
/** 进度条 */
const BAR = (w, cls = '') => `<div class="bar"><i class="${cls}" style="width:${w}%"></i></div>`;
/** 步骤条 */
const STEPS = (steps) => `<div class="steps">` + steps
.map((s, i) => `${i ? '<span class="arrow">→</span>' : ''}<span class="step ${s[1]}">${s[0]}</span>`)
.join('') + `</div>`;
/** 标签 */
const TAG = (t) => `<span class="tag">${t}</span>`;
/** 列表行(key-value) */
const LI = (l, r) => `<li><span>${l}</span><span>${r}</span></li>`;
/** 将当前 DB 持久化到 localStorage */
function saveDB() {
if (!DB) return;
try {
localStorage.setItem(DB_KEY, JSON.stringify({ v: SCHEMA_VER, data: DB }));
} catch (e) { /* 存储满或隐私模式下静默降级 */ }
}
/** 清除演示存档,恢复 mock.json 初始数据 */
function resetDemo() {
localStorage.removeItem(DB_KEY);
location.reload();
}
async function loadMock() {
let fresh = {};
try {
const res = await fetch('assets/mock.json');
fresh = await res.json();
} catch (e) {
console.error('mock.json 加载失败(请通过 http 服务访问,勿用 file:// 直开)', e);
}
let saved = null;
try {
const raw = localStorage.getItem(DB_KEY);
if (raw) {
const pack = JSON.parse(raw);
if (pack.v === SCHEMA_VER) saved = pack.data;
}
} catch (e) { /* 存档损坏时回退到初始数据 */ }
// 存档优先,但用 fresh 补齐新增加的业务域
DB = saved ? Object.assign({}, fresh, saved) : fresh;
window.addEventListener('beforeunload', saveDB);
if (typeof window.renderPage === 'function') window.renderPage(DB);
}
document.addEventListener('DOMContentLoaded', loadMock);