Files
guoju0808/proto/html/components/admin-project-public.html
郭庆泰 cf5790229a refactor: 合并 biz_support_unit/biz_execution_unit/biz_service_org 为 biz_org, 删除 2 张孤儿表, 改 biz_person.work_unit → org_id FK
主要改动:
- SQL: biz_support_unit → biz_org, 加 org_type, 加 business_nature; 删 biz_execution_unit, biz_service_org
- SQL: biz_project.support_unit_id/name + service_org_id/name → org_id/name/type
- SQL: biz_meeting.support_unit_name → org_name
- SQL: biz_person.work_unit → org_id (FK)
- 后端: 新 BizOrg entity/mapper/service/controller
- 后端: BizProject/BizMeeting 字段重命名
- 后端: 删 12 个 BizSupportUnit/BizExecutionUnit/BizServiceOrg Java 文件
- 后端: BizPersonImportVO.workUnit → orgName (导入时查 biz_org 取 org_id)
- 后端: BizAuthController.registerExecutor 完整实现 (原 registerSupplier stub)
- 前端: 新 admin/Orgs.vue + manager/Orgs.vue (原 SupportUnits)
- 前端: RegisterExecutor.vue (原 RegisterSupplier, 单页 2 步)
- 前端: sponsor/executor/manager 多个文件 workUnit → orgId/orgName 重命名
- 前端: 统一 supplier → executor, 业务命名 sponsor(赞助方) / executor(执行方=供应商)
- 前端: 全工程 execution → executor (company type / role / person unit_type)
2026-08-15 12:41:10 +08:00

218 lines
16 KiB
HTML
Raw Permalink 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.
<!DOCTYPE html>
<!--
============================================================
角色: 🟦 后台 父级: admin.html (iframe#contentFrame)
来源: 原型/项目公示.html + 原型/files/项目公示/styles.css
============================================================
按 top 升序的内容区模块:
面包屑 (T42) → 工作台 > 项目公示
h1 标题 → 项目公示
Tab 标签 (T125-212): 邀请函 / 支持函 / 公告文件 3 类 (u15597/u15605/u15617)
工具按钮 (T193): u15539 发布公示 / u15541 删除公示
表格表头 (T279) 3 列:
u15543 标题名称 / u15545 发布时间 / u15547 操作
数据行 (T337-T1109) 13+ 行:
标题格式: 【邀请函】【会议通知】【支持函】【通知】前缀 + 编号 + 主题
操作 (T333 起): u15549 删除 (每行 1 个)
发布弹框 (u15551/u15588 T250-403 hidden panel):
- 文件名 / 发布时间 / 公告文件上传 / 标题名称 / 确定+取消
============================================================
自检:
✅ 全部内容区按 top 提取
✅ 无动态面板 (ax_default_hidden = 0, 但 u15551/u15588 是发布弹框, 需保留为 modal)
✅ 框架区排除: 侧边栏 / 顶栏 / 竖线(u15448 L220) / 横线(u15537 T305)
✅ 4 类公告 (邀请函/会议通知/支持函/通知) 按原型文本
============================================================
-->
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>项目公示 - 后台</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;color:#333;background:#fafafa;min-height:100vh}
.content{padding:24px 32px}
.breadcrumb{font-size:13px;color:#8c8c8c;margin-bottom:16px}
.breadcrumb a{color:#1890ff;text-decoration:none;cursor:pointer}
.breadcrumb a:hover{text-decoration:underline}
.breadcrumb .sep{margin:0 6px;color:#bfbfbf}
.breadcrumb .current{color:#595959}
.page-title{font-size:22px;font-weight:600;color:#1a1a1a;margin-bottom:20px}
.card{background:#fff;border-radius:8px;padding:20px 24px;margin-bottom:16px;border:1px solid #f0f0f0}
.tabs{display:flex;border-bottom:1px solid #e8e8e8;margin-bottom:20px}
.tab{padding:10px 20px;cursor:pointer;color:#595959;font-size:14px;border-bottom:2px solid transparent;transition:all .2s}
.tab:hover{color:#1890ff}
.tab.active{color:#1890ff;border-bottom-color:#1890ff;font-weight:600}
.tab-panel{display:none}
.tab-panel.active{display:block}
.toolbar{display:flex;justify-content:flex-end;gap:8px;margin-bottom:16px}
.toolbar-btn{height:32px;padding:0 18px;border-radius:4px;font-size:13px;cursor:pointer;border:1px solid #d9d9d9;background:#fff;color:#595959}
.toolbar-btn:hover{color:#1890ff;border-color:#1890ff}
.toolbar-btn-primary{background:#1890ff;color:#fff;border-color:#1890ff}
.toolbar-btn-primary:hover{background:#096dd9;border-color:#096dd9;color:#fff}
.toolbar-btn-danger{color:#ff4d4f;border-color:#ffa39e}
.toolbar-btn-danger:hover{color:#fff;background:#ff4d4f;border-color:#ff4d4f}
.table-wrap{background:#fff;border:1px solid #f0f0f0;border-radius:8px;overflow-x:auto}
.data-table{width:100%;border-collapse:collapse;font-size:13px}
.data-table thead th{background:#fafafa;padding:12px;text-align:left;color:#1a1a1a;font-weight:600;border-bottom:1px solid #f0f0f0;white-space:nowrap}
.data-table tbody td{padding:14px 12px;border-bottom:1px solid #f5f5f5;color:#595959;vertical-align:middle}
.data-table tbody tr:hover{background:#fafcff}
.col-title{color:#1a1a1a;cursor:pointer}
.col-title:hover{color:#1890ff}
.tag{display:inline-block;padding:1px 8px;border-radius:3px;font-size:11px;margin-right:6px;font-weight:600}
.tag-invite{background:#fff7e6;color:#fa8c16;border:1px solid #ffd591}
.tag-notify{background:#e6f7ff;color:#1890ff;border:1px solid #91d5ff}
.tag-support{background:#f6ffed;color:#52c41a;border:1px solid #b7eb8f}
.tag-meeting{background:#f9f0ff;color:#722ed1;border:1px solid #d3adf7}
.op-link{color:#1890ff;text-decoration:none;font-size:13px}
.op-link:hover{text-decoration:underline}
.op-link.danger{color:#ff4d4f}
.checkbox{cursor:pointer}
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:999;align-items:center;justify-content:center}
.modal-overlay.show{display:flex}
.modal{background:#fff;border-radius:8px;width:560px;max-width:90vw;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px rgba(0,0,0,0.2)}
.modal-header{padding:16px 24px;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between}
.modal-title{font-size:16px;font-weight:600;color:#1a1a1a}
.modal-close{font-size:20px;color:#8c8c8c;cursor:pointer;background:none;border:none;line-height:1}
.modal-body{padding:20px 24px}
.modal-row{display:flex;align-items:center;margin-bottom:16px}
.modal-label{flex:0 0 100px;font-size:14px;color:#595959;text-align:right;padding-right:12px}
.modal-input{flex:1;height:34px;padding:0 10px;border:1px solid #d9d9d9;border-radius:4px;font-size:13px;outline:none}
.modal-input:focus{border-color:#1890ff}
.modal-footer{padding:14px 24px;border-top:1px solid #f0f0f0;display:flex;justify-content:flex-end;gap:8px}
@media(max-width:768px){.content{padding:16px}.data-table{font-size:12px}}
</style>
</head>
<body>
<main class="content">
<div class="breadcrumb">
<a href="javascript:void(0)" onclick="navigateTo('admin-home.html')">工作台</a>
<span class="sep">&gt;</span>
<span class="current">项目公示</span>
</div>
<h1 class="page-title">项目公示</h1>
<div class="card">
<div class="tabs">
<div class="tab active" data-tab="all">全部</div>
<div class="tab" data-tab="invite">邀请函</div>
<div class="tab" data-tab="support">支持函</div>
<div class="tab" data-tab="notify">公告文件</div>
</div>
<div class="toolbar">
<button class="toolbar-btn toolbar-btn-danger">批量删除</button>
<button class="toolbar-btn toolbar-btn-primary" onclick="openPublish()">发布公示</button>
</div>
<div class="tab-panel active" id="panel-all">
<div class="table-wrap">
<table class="data-table">
<thead>
<tr>
<th style="width:40px"><input type="checkbox" class="checkbox"></th>
<th>标题名称</th><th>发布时间</th><th style="width:80px">操作</th>
</tr>
</thead>
<tbody>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-invite">邀请函</span><span class="col-title">2026第2323号 "恺启新生—胃癌 CAR-T 细胞治疗系列会"项目 邀请函</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-meeting">会议通知</span><span class="col-title">2026第2277号 北京同仁医院建院140周年系列学术活动之2026年第三届北京整合医学学会急诊医学分会学术会议</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-invite">邀请函</span><span class="col-title">2025第7276号 "整合之光"慢病防治与管理多学科融合新计划 — 慢病合并真菌感染多学科交流会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-support">支持函</span><span class="col-title">2026第2127号 骨领新生—骨质疏松规范诊疗临床病例实战精析会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-notify">通知</span><span class="col-title">2026第2577号 深圳市医学会2026年感染病学分会学术年会资助项目通知</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-invite">邀请函</span><span class="col-title">2026第2323号 "恺启新生—胃癌 CAR-T 细胞治疗系列会"项目 邀请函</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-meeting">会议通知</span><span class="col-title">2026第2277号 北京同仁医院建院140周年系列学术活动之2026年第三届北京整合医学学会急诊医学分会学术会议</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-invite">邀请函</span><span class="col-title">2025第7276号 "整合之光"慢病防治与管理多学科融合新计划 — 慢病合并真菌感染多学科交流会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-support">支持函</span><span class="col-title">2026第2127号 骨领新生—骨质疏松规范诊疗临床病例实战精析会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="tag tag-notify">通知</span><span class="col-title">2026第2577号 深圳市医学会2026年感染病学分会学术年会资助项目通知</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
</tbody>
</table>
</div>
</div>
<!-- 邀请函子 Tab -->
<div class="tab-panel" id="panel-invite">
<div class="table-wrap">
<table class="data-table">
<thead><tr><th style="width:40px"><input type="checkbox" class="checkbox"></th><th>标题名称</th><th>发布时间</th><th style="width:80px">操作</th></tr></thead>
<tbody>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="col-title">2026第2323号 "恺启新生—胃癌 CAR-T 细胞治疗系列会"项目 邀请函</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="col-title">2025第7276号 "整合之光"慢病防治与管理多学科融合新计划 — 慢病合并真菌感染多学科交流会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
</tbody>
</table>
</div>
</div>
<!-- 支持函子 Tab -->
<div class="tab-panel" id="panel-support">
<div class="table-wrap">
<table class="data-table">
<thead><tr><th style="width:40px"><input type="checkbox" class="checkbox"></th><th>标题名称</th><th>发布时间</th><th style="width:80px">操作</th></tr></thead>
<tbody>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="col-title">2026第2127号 骨领新生—骨质疏松规范诊疗临床病例实战精析会</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
</tbody>
</table>
</div>
</div>
<!-- 公告文件子 Tab -->
<div class="tab-panel" id="panel-notify">
<div class="table-wrap">
<table class="data-table">
<thead><tr><th style="width:40px"><input type="checkbox" class="checkbox"></th><th>标题名称</th><th>发布时间</th><th style="width:80px">操作</th></tr></thead>
<tbody>
<tr><td><input type="checkbox" class="checkbox"></td><td><span class="col-title">2026第2577号 深圳市医学会2026年感染病学分会学术年会资助项目通知</span></td><td>2026-05-06</td><td><a class="op-link danger" href="javascript:void(0)">删除</a></td></tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- 发布公示弹框 (原型 u15551/u15588 hidden) -->
<div class="modal-overlay" id="publishModal">
<div class="modal">
<div class="modal-header">
<span class="modal-title">发布公示</span>
<button class="modal-close" onclick="closePublish()">×</button>
</div>
<div class="modal-body">
<div class="modal-row"><span class="modal-label">类型:</span><select class="modal-input"><option>邀请函</option><option>支持函</option><option>公告文件</option></select></div>
<div class="modal-row"><span class="modal-label">公告文件:</span><input type="text" class="modal-input" placeholder="点击上传文件"></div>
<div class="modal-row"><span class="modal-label">发布时间:</span><input type="text" class="modal-input" placeholder="YYYY-MM-DD"></div>
<div class="modal-row"><span class="modal-label">标题名称:</span><input type="text" class="modal-input" placeholder="请输入标题"></div>
</div>
<div class="modal-footer">
<button class="toolbar-btn" onclick="closePublish()">取消</button>
<button class="toolbar-btn toolbar-btn-primary" onclick="closePublish()">确定</button>
</div>
</div>
</div>
</main>
<script>
document.querySelectorAll('.tab').forEach(t => {
t.addEventListener('click', () => {
document.querySelectorAll('.tab').forEach(x => x.classList.remove('active'));
document.querySelectorAll('.tab-panel').forEach(x => x.classList.remove('active'));
t.classList.add('active');
document.getElementById('panel-' + t.dataset.tab).classList.add('active');
});
});
function openPublish() { document.getElementById('publishModal').classList.add('show'); }
function closePublish() { document.getElementById('publishModal').classList.remove('show'); }
document.getElementById('publishModal').addEventListener('click', e => {
if (e.target.id === 'publishModal') closePublish();
});
function navigateTo(href) {
try {
if (window.parent && window.parent.document.getElementById('contentFrame')) {
window.parent.document.getElementById('contentFrame').src = href;
} else { window.location.href = href; }
} catch (e) { window.location.href = href; }
}
</script>
</body>
</html>