新增全局协作台账并统一工作台管理界面
新增与项目平级的协作台账,提供空白模板、独立账号授权和在线编辑。 复用共享库的访问权限与历史版本界面,拆分信息维护入口并统一工作台卡片样式。 补充在线文档字体构建支持、数据库表结构升级和回归测试。 不包含本地台账内容、账号授权记录或历史文件迁移数据。
This commit is contained in:
@@ -53,14 +53,10 @@
|
||||
<div class="project-header">
|
||||
<div class="header-title-block">
|
||||
<span class="section-eyebrow">Project Workspace</span>
|
||||
<h2>选择目标项目</h2>
|
||||
</div>
|
||||
|
||||
<div class="header-actions-block">
|
||||
<span v-if="!loading && projects.length" class="project-pill-badge">
|
||||
<span class="badge-dot"></span>
|
||||
<span>{{ projects.length }} 个可进入项目</span>
|
||||
</span>
|
||||
<div class="entry-title-row">
|
||||
<h2>选择目标项目</h2>
|
||||
<EntryCountBadge v-if="!loading && projects.length">{{ projects.length }} 个可进入项目</EntryCountBadge>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -155,6 +151,7 @@
|
||||
<h3>未检测到可用项目</h3>
|
||||
<p>您的账号尚未关联至任何研究项目,请联系系统管理员进行项目授权与分配。</p>
|
||||
</div>
|
||||
<LedgerPanel />
|
||||
</main>
|
||||
|
||||
<!-- 科技感转场遮罩 -->
|
||||
@@ -191,6 +188,9 @@ import type { Study } from "../types/api";
|
||||
import { findFirstAccessibleProjectPath } from "../utils/projectRoutePermissions";
|
||||
import { isSystemAdmin } from "../utils/roles";
|
||||
import AccountConnectionStatus from "../components/AccountConnectionStatus.vue";
|
||||
import LedgerPanel from "../components/ledgers/LedgerPanel.vue";
|
||||
import EntryCountBadge from "../components/EntryCountBadge.vue";
|
||||
import "../styles/entry-cards.css";
|
||||
|
||||
const auth = useAuthStore();
|
||||
const studyStore = useStudyStore();
|
||||
@@ -327,7 +327,7 @@ onMounted(() => {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
padding: 40px 28px;
|
||||
padding: 24px 28px 40px;
|
||||
background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-right: 1px solid #e2e8f0;
|
||||
box-shadow: 6px 0 30px rgba(15, 23, 42, 0.02);
|
||||
@@ -537,7 +537,7 @@ onMounted(() => {
|
||||
z-index: 5;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 48px 48px 48px 40px;
|
||||
padding: 24px 48px 48px 40px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@@ -550,7 +550,7 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.header-title-block h2 {
|
||||
margin: 2px 0 0;
|
||||
margin: 0;
|
||||
color: #0f172a;
|
||||
font-size: 22px;
|
||||
font-weight: 800;
|
||||
@@ -577,33 +577,6 @@ onMounted(() => {
|
||||
content: "";
|
||||
}
|
||||
|
||||
.header-actions-block {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.project-pill-badge {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
height: 28px;
|
||||
padding: 0 10px;
|
||||
border-radius: 999px;
|
||||
background: rgba(59, 130, 246, 0.08);
|
||||
color: #1d4ed8;
|
||||
font-size: 11.5px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.badge-dot {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border-radius: 50%;
|
||||
background: #3b82f6;
|
||||
}
|
||||
|
||||
/* 网页端特有步骤条 - 已根据用户要求隐藏,保留 HTML 结构供测试匹配断言 */
|
||||
.workflow-strip {
|
||||
display: none !important;
|
||||
@@ -663,8 +636,6 @@ onMounted(() => {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 168px;
|
||||
padding: 20px;
|
||||
border: 1px solid rgba(226, 232, 240, 0.85);
|
||||
border-radius: 12px;
|
||||
background: #ffffff;
|
||||
@@ -870,8 +841,6 @@ onMounted(() => {
|
||||
|
||||
/* 骨架屏 */
|
||||
.skeleton-project-card {
|
||||
height: 168px;
|
||||
padding: 20px;
|
||||
border: 1px solid rgba(226, 232, 240, 0.85);
|
||||
border-radius: 8px;
|
||||
background: #ffffff;
|
||||
@@ -998,11 +967,6 @@ onMounted(() => {
|
||||
color: #94a3b8;
|
||||
}
|
||||
|
||||
:global([data-ctms-theme="dark"] .project-pill-badge) {
|
||||
background: rgba(59, 130, 246, 0.12);
|
||||
color: #60a5fa;
|
||||
}
|
||||
|
||||
:global([data-ctms-theme="dark"] .workflow-item) {
|
||||
background: rgba(15, 23, 42, 0.45);
|
||||
border-color: rgba(51, 65, 85, 0.4);
|
||||
|
||||
Reference in New Issue
Block a user