feat: 执行→已发生+默认工作台+tip改色

- 执行模块改名为已发生
- tip改为淡黄色+新文案(只记录已发生的确收/毛利/回款/成本/支出)
- 登录后默认选择权限范围内第一个工作台
- applyUserTenants返回Promise,app.js先await再load
- 去除总览工作台残留
- 版本号 v1.2.0.9
This commit is contained in:
mac
2026-07-10 18:22:54 +08:00
parent 07fa3e6e10
commit 9ca5b11e20
5 changed files with 21 additions and 25 deletions

View File

@@ -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>

View File

@@ -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();
});
}

View File

@@ -123,7 +123,7 @@ var _loadingSteps = [
{ fn: 'renderProposals', label: '正在加载业务方案列表' },
{ fn: 'renderProducts', label: '正在加载产品迭代列表' },
{ fn: 'renderPerformance', label: '正在加载绩效管理' },
{ fn: 'renderFinance', label: '正在加载执行模块(表格+总览+图表)' },
{ fn: 'renderFinance', label: '正在加载已发生模块(表格+总览+图表)' },
{ fn: 'renderPlan', label: '正在加载预算模块' },
];