Files
OPC/Demo/assets/store.js
T
freedakandDevin 6027898fbe feat: 新增智能体服务订阅功能(REQ-131~134)
企业、个人用户和 OPC 均可订阅运营商提供的智能体服务:
- 智能体服务目录(6 个智能体:电商视觉/AI漫剧/企业智能体/数据标注/硬件供应链/跨境文案)
- 订阅管理(月度/季度/年度套餐、用量跟踪、续费/取消)
- 调用记录与账单(按月计费、算力券抵扣)
- 新增 agent.html 页面,opc/enterprise/personal/operator 角色可见

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-14 09:07:04 +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 = 6;
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);