This commit is contained in:
@@ -1,23 +1,12 @@
|
||||
// app.js — 入口文件(加载模块 + 初始化)
|
||||
|
||||
// 恢复上次的工作台和标签页
|
||||
const savedTenant = localStorage.getItem("opc-active-tenant");
|
||||
if (savedTenant) {
|
||||
state.tenant = savedTenant;
|
||||
const label = savedTenant.replace("·无界", "");
|
||||
document.querySelector("#workspaceTitle").textContent = label + " OPC 工作台";
|
||||
const tLabel = document.querySelector("#currentTenantLabel");
|
||||
if (tLabel) { tLabel.textContent = label || "工作台"; tLabel.title = savedTenant; }
|
||||
}
|
||||
const savedTab = localStorage.getItem("opc-active-tab");
|
||||
|
||||
// 初始化
|
||||
applyUserTenants();
|
||||
updateSidebarTabs();
|
||||
load().then(() => {
|
||||
if (state.tenant === "总览") {
|
||||
switchTab("home");
|
||||
} else if (savedTab && savedTab !== "home") {
|
||||
applyUserTenants().then(() => {
|
||||
updateSidebarTabs();
|
||||
return load();
|
||||
}).then(() => {
|
||||
const savedTab = localStorage.getItem("opc-active-tab");
|
||||
if (savedTab && savedTab !== "home") {
|
||||
switchTab(savedTab);
|
||||
}
|
||||
}).catch((error) => {
|
||||
|
||||
@@ -119,9 +119,9 @@ function renderFinance() {
|
||||
|
||||
document.querySelector("#finance").innerHTML = `<div class="grid gap-2">
|
||||
${finFilterTabs}
|
||||
${isOverviewMode ? '' : `<div class="flex items-center gap-3 px-4 py-2 rounded-lg border" style="background:linear-gradient(135deg,#dbeafe,#bfdbfe);border-color:#3b82f6">
|
||||
<i data-lucide="lightbulb" class="text-blue-600 flex-shrink-0" style="width:18px;height:18px"></i>
|
||||
<span class="text-sm text-blue-900"><strong>执行提示:</strong>先关注确收,毛利确保业务运营,再关注回款,回款率,最后逐步优化成本与支出</span>
|
||||
${isOverviewMode ? '' : `<div class="flex items-center gap-3 px-4 py-2 rounded-lg border" style="background:linear-gradient(135deg,#fef9c3,#fde047);border-color:#eab308">
|
||||
<i data-lucide="lightbulb" class="text-yellow-700 flex-shrink-0" style="width:18px;height:18px"></i>
|
||||
<span class="text-sm text-yellow-900"><strong>已发生模块:</strong>只记录,已经发生的确收,毛利,回款,成本,支出</span>
|
||||
</div>`}
|
||||
${state.finFilter !== 'expense' && state.finFilter !== 'overview' && state.finFilter !== 'quarterlyOverview' ? card(`<div class="flex justify-between items-center"><div class="flex items-center gap-2">${finHeaderBase}</div>${finAddBtn}</div>`, "py-2 px-4") : ''}
|
||||
<div id="financeModal" class="hidden fixed inset-0 z-50 flex items-center justify-center bg-black/40" onclick="closeFinanceModal()"><div class="bg-white rounded-2xl shadow-2xl w-full max-w-6xl mx-4 max-h-[92vh] overflow-y-auto" onclick="event.stopPropagation()"><div class="sticky top-0 z-10 bg-white/95 backdrop-blur border-b border-slate-100 px-8 py-5 flex items-center justify-between"><div><h3 class="text-xl font-bold text-slate-800" id="financeModalTitle">新增项目财务</h3><p class="text-xs text-slate-400 mt-0.5">填写项目财务信息与月度预算</p></div><div class="flex items-center gap-2"><button class="btn btn-ghost btn-sm text-red-600 hidden" id="financeDeleteBtn" onclick="deleteFinanceItem()"><i data-lucide="trash-2"></i>删除</button><button class="btn btn-ghost btn-sm rounded-full w-8 h-8 p-0" onclick="closeFinanceModal()"><i data-lucide="x"></i></button></div></div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// projects.js — 重点工作与台账(项目管理 + 任务管理)
|
||||
|
||||
function applyUserTenants() {
|
||||
fetch("/api/auth/me").then(r => r.json()).then(data => {
|
||||
return fetch("/api/auth/me").then(r => r.json()).then(data => {
|
||||
if (!data.logged_in) { window.location.href = "/login"; return; }
|
||||
const user = data.user;
|
||||
const avatar = document.querySelector("#userAvatar");
|
||||
@@ -15,6 +15,13 @@ function applyUserTenants() {
|
||||
});
|
||||
// 缓存可用工作台列表,供下拉菜单使用
|
||||
state.allowedTenants = data.tenants || [];
|
||||
// 如果当前工作台不在权限范围内,选择第一个
|
||||
if (state.allowedTenants.length > 0 && state.allowedTenants.indexOf(state.tenant) < 0) {
|
||||
state.tenant = state.allowedTenants[0];
|
||||
localStorage.setItem("opc-active-tenant", state.tenant);
|
||||
var label0 = state.tenant.replace("·无界", "");
|
||||
document.querySelector("#workspaceTitle").textContent = label0 + " OPC 工作台";
|
||||
}
|
||||
updateTenantLabel();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ var _loadingSteps = [
|
||||
{ fn: 'renderProposals', label: '正在加载业务方案列表' },
|
||||
{ fn: 'renderProducts', label: '正在加载产品迭代列表' },
|
||||
{ fn: 'renderPerformance', label: '正在加载绩效管理' },
|
||||
{ fn: 'renderFinance', label: '正在加载执行模块(表格+总览+图表)' },
|
||||
{ fn: 'renderFinance', label: '正在加载已发生模块(表格+总览+图表)' },
|
||||
{ fn: 'renderPlan', label: '正在加载预算模块' },
|
||||
];
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@
|
||||
<i data-lucide="calendar-range" style="width:20px;height:20px"></i>
|
||||
<span class="text-[10px] mt-1">预算</span>
|
||||
</div>
|
||||
<div class="sidebar-tab" data-tab="finance" onclick="switchTab('finance')" title="执行">
|
||||
<div class="sidebar-tab" data-tab="finance" onclick="switchTab('finance')" title="已发生">
|
||||
<i data-lucide="folder-open-dot" style="width:20px;height:20px"></i>
|
||||
<span class="text-[10px] mt-1">执行</span>
|
||||
<span class="text-[10px] mt-1">已发生</span>
|
||||
</div>
|
||||
<div class="sidebar-tab" data-tab="projects" onclick="switchTab('projects')" title="Focus">
|
||||
<i data-lucide="file-text" style="width:20px;height:20px"></i>
|
||||
@@ -76,7 +76,7 @@
|
||||
<header class="topbar border-b border-slate-200 bg-white px-8 py-5">
|
||||
<div class="flex items-center gap-3 w-full">
|
||||
<div class="flex-1">
|
||||
<p class="eyebrow text-xs font-semibold uppercase tracking-[0.18em] text-blue-700">OPC Manager <span class="ml-2 text-xs font-normal text-slate-400 tracking-normal">v1.2.0.8</span></p>
|
||||
<p class="eyebrow text-xs font-semibold uppercase tracking-[0.18em] text-blue-700">OPC Manager <span class="ml-2 text-xs font-normal text-slate-400 tracking-normal">v1.2.0.9</span></p>
|
||||
<div class="flex items-center gap-4 mt-1">
|
||||
<h1 class="text-2xl font-semibold" id="workspaceTitle">科普 OPC 工作台</h1>
|
||||
<div class="hidden sm:flex items-center gap-1.5 bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-100 rounded-full px-4 py-1.5">
|
||||
|
||||
Reference in New Issue
Block a user