feat: 生产部署 + 会议全链路 (执行方分配/费用结算/签到脱敏/H5相机)
- 生产 nginx 三路径: ry-vue3 /hg/, ry-h5 /camera/, API /hg-api, .env 分环境 - 签约链接/摄像头 base-url 走 yml, 不再硬编码 /hg 与 localhost - 新增 biz_project_executor_assign (镜像 sponsor_assign) 执行方项目级分配 - 会议费用后台汇总 FeeCalcScheduler + 结算回写项目金额 + 状态流转调度 - 签到表拍照高斯模糊脱敏 extra_oss_url, 新增 PosterService/StageDeriver - 清理 biz_support_intent 旧表 (6 Java/XML 删除) - ry-h5 相机黑屏修复: 显式 video.play() + 动态 apiBase 上传 - 资源: simhei 字体 / logo.png / qrcode_1.png / favicon.ico Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -52,13 +52,20 @@
|
||||
<div style="padding: 40px 0; text-align: center; color: #9ca3af; font-size: 13px;">暂无数据</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="notice-header">
|
||||
<span class="notice-header-no">序号</span>
|
||||
<span class="notice-header-title">项目</span>
|
||||
<span class="notice-header-date">开始日期</span>
|
||||
<span class="notice-header-end">截止日期</span>
|
||||
</div>
|
||||
<div v-for="(n, i) in pageItems" :key="n.annId || i" class="notice-item" @click="goDetail(n)">
|
||||
<span class="notice-item-no">{{ String((currentPage - 1) * PAGE_SIZE + i + 1).padStart(3, '0') }}</span>
|
||||
<span class="notice-date">{{ fmtDate(n.date) }}</span>
|
||||
<span class="notice-title">
|
||||
<span v-if="n.projectNo" style="color:#909399;margin-right:8px;font-size:13px">【{{ n.projectNo }}】</span>
|
||||
{{ n.title }}
|
||||
</span>
|
||||
<span class="notice-date">{{ fmtDate(n.date) }}</span>
|
||||
<span class="notice-end">{{ fmtDate(n.endTime) }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -111,9 +118,7 @@
|
||||
</div>
|
||||
<div class="footer-qr">
|
||||
<div class="qr-image">
|
||||
<svg width="52" height="52" viewBox="0 0 24 24" fill="currentColor">
|
||||
<path d="M3 11h8V3H3v8zm2-6h4v4H5V5zm8-2v8h8V3h-8zm6 6h-4V5h4v4zM3 21h8v-8H3v8zm2-6h4v4H5v-4zm13-2h-2v2h2v-2zm-2 2h-2v2h2v-2zm2 2h-2v2h2v-2zm2-2h-2v2h2v-2zm-2-2h-2v2h2v-2zm-2-2h-2v2h2v-2zm-2-2h-2v2h2v-2zm-2-2h-2v2h2v-2zm0 0h-2v2h2v-2z"/>
|
||||
</svg>
|
||||
<img src="/qrcode_1.png" alt="公众号二维码" style="width:100%;height:100%;object-fit:contain;" />
|
||||
</div>
|
||||
<div class="qr-label">公众号二维码</div>
|
||||
</div>
|
||||
@@ -168,7 +173,8 @@ async function load() {
|
||||
}
|
||||
return {
|
||||
annId: r.projectId,
|
||||
date: r.publishTime,
|
||||
date: r.startTime,
|
||||
endTime: r.endTime,
|
||||
type,
|
||||
projectNo: r.projectNo || '',
|
||||
projectName: r.projectName,
|
||||
@@ -257,7 +263,6 @@ function fmtDate(d) {
|
||||
const day = String(date.getDate()).padStart(2, '0')
|
||||
return `${y}-${m}-${day}`
|
||||
}
|
||||
|
||||
function handleScroll() { isScrolled.value = window.scrollY > 10 }
|
||||
onMounted(() => window.addEventListener('scroll', handleScroll, { passive: true }))
|
||||
onBeforeUnmount(() => window.removeEventListener('scroll', handleScroll))
|
||||
@@ -304,7 +309,11 @@ a { color: inherit; text-decoration: none; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.logo:hover { opacity: 0.85; }
|
||||
|
||||
.logo-icon {
|
||||
width: 36px;
|
||||
@@ -393,6 +402,21 @@ a { color: inherit; text-decoration: none; }
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
/* 已登录: 右上角人员信息 (用户名 + 头像图标) — 深色 navbar 上必须白色 */
|
||||
.user-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.user-link:hover { opacity: 0.85; }
|
||||
.user-link svg { stroke: currentColor; }
|
||||
|
||||
.login-btn {
|
||||
padding: 7px 20px;
|
||||
background: #fff;
|
||||
@@ -408,6 +432,20 @@ a { color: inherit; text-decoration: none; }
|
||||
background: #f3f4f6;
|
||||
}
|
||||
|
||||
/* ========== 页面骨架 (sticky footer: 内容少时底部仍贴屏幕底) ========== */
|
||||
.pub-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
main.container {
|
||||
flex: 1 0 auto;
|
||||
/* flex item 的 width:auto 会塌成 fit-content (margin:0 auto 覆盖 align-items:stretch),
|
||||
导致版心宽度丢失; 显式 width:100% 配合 max-width:1354px + margin:auto 恢复居中版心 */
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* ========== 主体容器 ========== */
|
||||
.container {
|
||||
max-width: 1354px;
|
||||
@@ -528,11 +566,57 @@ a { color: inherit; text-decoration: none; }
|
||||
color: #1f2937;
|
||||
line-height: 1.7;
|
||||
transition: color 0.2s;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* 表头: 与 notice-item 相同的 flex + gap + 列宽, 保证列对齐 */
|
||||
.notice-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 24px;
|
||||
padding: 12px 0;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
background: #f9fafb;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #4b5563;
|
||||
}
|
||||
|
||||
.notice-header-no {
|
||||
flex-shrink: 0;
|
||||
width: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notice-header-date {
|
||||
flex-shrink: 0;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.notice-header-title {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.notice-header-end {
|
||||
flex-shrink: 0;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
/* 右侧截止时间: 等宽数字 + 灰色, 与日期列同宽对齐 */
|
||||
.notice-end {
|
||||
flex-shrink: 0;
|
||||
width: 100px;
|
||||
font-size: 13px;
|
||||
color: #6b7280;
|
||||
font-family: ui-monospace, "Courier New", monospace;
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
.notice-item-no {
|
||||
flex-shrink: 0;
|
||||
width: 32px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #9ca3af;
|
||||
font-family: ui-monospace, "Courier New", monospace;
|
||||
|
||||
Reference in New Issue
Block a user