/* ========================================
统御IP项目管理 · 前端逻辑(本地存储版)
数据层:浏览器 localStorage
后续可升级为云端同步
======================================== */
const STORE_PREFIX = 'ty_';
const State = { view: 'dashboard', user: null };
function loadData(key) {
try { return JSON.parse(localStorage.getItem(STORE_PREFIX + key) || '[]'); } catch { return []; }
}
function saveData(key, data) { localStorage.setItem(STORE_PREFIX + key, JSON.stringify(data)); }
function loadUser() {
try { return JSON.parse(localStorage.getItem(STORE_PREFIX + 'user') || 'null'); } catch { return null; }
}
function saveUser(u) { localStorage.setItem(STORE_PREFIX + 'user', JSON.stringify(u)); }
function getNextId(arr) { return arr.length ? Math.max(...arr.map(x => x.id || 0)) + 1 : 1; }
function esc(str) { return String(str || '').replace(//g,'>'); }
function showToast(msg) {
const t = document.getElementById('toast');
t.textContent = msg; t.classList.add('show');
clearTimeout(t._timer);
t._timer = setTimeout(() => t.classList.remove('show'), 2500);
}
function loadingHtml() { return '
${latest.followers || 0}
精准粉丝
${fanTrend ? `
${fanTrend>0?'+':''}${fanTrend}
` : ''}
${latest.consultations || 0}
本月咨询
${latest.visits || 0}
到访客户
${latest.contracts || 0}
签约客户
本周排期
${schedule.length ? schedule.map(s => `
${esc(s.title)||'未命名'}
${s.date}${badgeHtml(s.status)}
`).join('') : emptyHtml('本周暂无排期','点击排期页面添加')}
`;
}
// === 选题库 ===
function renderTopics(container) {
const topics = loadData('topics');
container.innerHTML = `
${topics.map((t,i)=>`
${i+1}
${esc(t.title)}
${TYPE_MAP[t.type]||t.type}${t.elements?t.elements.split(',').map(e=>`${esc(e.trim())}`).join(''):''}
${badgeHtml(t.status)}
`).join('')}
${topics.length===0?emptyHtml('暂无选题','点击右下角 + 添加'):''}
`;
}
// === 脚本管理 ===
function renderScripts(container) {
const scripts = loadData('scripts');
container.innerHTML = `
${scripts.map(s=>`
${esc(s.title)}
${TYPE_MAP[s.type]||s.type}${badgeHtml(s.status)}
${esc((s.content||'').slice(0,120))}${s.content&&s.content.length>120?'...':''}
`).join('')}
${scripts.length===0?emptyHtml('暂无脚本','点击右下角 + 添加'):''}
`;
}
// === 日历排期 ===
function renderCalendar(container) {
const schedule = loadData('schedule');
const now = new Date(); const year = now.getFullYear(); const month = now.getMonth();
const firstDay = new Date(year,month,1).getDay();
const daysInMonth = new Date(year,month+1,0).getDate();
const today = now.getDate();
const tasks = {};
schedule.forEach(s => {
const d = new Date(s.date);
if (d.getMonth()===month && d.getFullYear()===year) {
const day = d.getDate();
if (!tasks[day]) tasks[day] = [];
tasks[day].push(s);
}
});
const weekDays = ['日','一','二','三','四','五','六'];
let calHtml = '
${calHtml}
本月排期
${listHtml || emptyHtml('本月暂无排期','点击日历日期添加')}
`;
}
// === IP素材库 ===
function renderMaterials(container) {
const materials = loadData('materials');
container.innerHTML = `
${materials.map(m => `
${esc(m.title)}
${esc(m.description)||''}
${MATERIAL_TYPE_MAP[m.type]||m.type}
`).join('')}
${materials.length===0?emptyHtml('暂无素材','点击右下角 + 添加'):''}
`;
}
function toggleMaterial(id) {
const materials = loadData('materials');
const m = materials.find(x => x.id === id);
if (!m) return;
m.status = m.status === 'done' ? 'pending' : 'done';
saveData('materials', materials);
showToast(m.status === 'done' ? '已完成' : '已标记为待拍摄');
renderView('materials');
}
// === 对标账号 ===
function renderBenchmarks(container) {
const benchmarks = loadData('benchmarks');
container.innerHTML = `
${benchmarks.map(b => `
${esc(b.account_name)}
粉丝 ${esc(b.followers)||'未知'} | ${esc(b.notes)||''}
${b.scripts?`
${esc(b.scripts.slice(0,150))}${b.scripts.length>150?'...':''}
`:''}${b.url?`
在抖音查看 →`:''}
`).join('')}
${benchmarks.length===0?emptyHtml('暂无对标账号','点击右下角 + 添加'):''}
`;
}
// === 发布视频 ===
function renderVideos(container) {
const videos = loadData('videos');
container.innerHTML = `
${videos.map(v => `
${esc(v.title)}
`).join('')}
${videos.length===0?emptyHtml('暂无发布视频','点击右下角 + 添加视频链接'):''}
`;
}
// === 更多 ===
function renderMore(container) {
const items = [{view:'materials',label:'IP素材库'},{view:'benchmarks',label:'对标账号'},{view:'videos',label:'发布视频'}];
container.innerHTML = `