txw/txw-mhzc-web/src/pages/index/components/footer/index.vue
liulong 1beb24053f feat(mhzc-footer): 页脚按Figma精确还原 & 邮箱/友链文本去除hover
- 重构首页底部信息块为 Figma 150904:8642 精确对照版
- 邮箱、上海浦江数链数字科技有限公司改为普通文本(不可点击)
- hover 变绿效果仅作用于真实链接 a.footer-text
- main.vue 统一渲染 footer,各页面移除重复 Footer 组件
- home2 缩放容器不再包裹 footer,修复首页页脚宽度与样式问题

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 23:28:05 +08:00

366 lines
10 KiB
Vue
Raw 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.

<template>
<!--
首页底部信息块完全对照 Figma 150897:8486 · 审核版本
节点150904:8642底部信息块
Group 29 (1440×144, #F0F7F2)
底部信息 (row · space-between · align center · padding 40 20)
Frame 235 (1200)
Frame 213 (column · gap 10)
Frame 208 (row) 标题"联系" 1px 底边 + "我们"
Frame 209 (row · gap 32) 邮箱 + 地址
Frame 212 (column · gap 16)
Frame 208 标题"友情" 1px 底边 + "链接"
Frame 209 (row · gap 32) 两个友链
版权 (1440×80, #E2EDE5)
Frame 219 (row · center · gap 20)
Frame 221 (1200 · column · center · gap 8 · padding 16 0)
Frame 210 指导单位行
Frame 1898 (row · gap 20) 版权行
-->
<div class="portal-footer-shell">
<footer class="site-footer">
<!-- 上区底部信息1440×144 · #F0F7F2 -->
<div class="footer-main">
<div class="footer-main-inner">
<!-- Frame 2351200 · row · space-between -->
<div class="footer-frame">
<!-- Frame 213联系我们列column · gap 10 -->
<div class="footer-col footer-col--contact">
<!-- Frame 208标题行 "联系"( 1px 下边框) + "我们" -->
<div class="footer-title-row">
<span class="footer-title-with-underline">联系</span>
<span class="footer-title">我们</span>
</div>
<!-- Frame 209邮箱 + 地址row · gap 32 -->
<div class="footer-contact-row">
<span class="footer-contact-item">
<span class="footer-icon" aria-hidden="true">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2 3.5C2 2.94772 2.44772 2.5 3 2.5H11C11.5523 2.5 12 2.94772 12 3.5V10.5C12 11.0523 11.5523 11.5 11 11.5H3C2.44772 11.5 2 11.0523 2 10.5V3.5Z" stroke="currentColor" stroke-width="1" stroke-linejoin="round"/>
<path d="M2.5 3.8L7 7.2L11.5 3.8" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</span>
<span class="footer-text">{{ contact.email }}</span>
</span>
<span class="footer-contact-item">
<span class="footer-icon" aria-hidden="true">
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6 1.5C4.34315 1.5 3 2.84315 3 4.5C3 6.8 6 10.5 6 10.5C6 10.5 9 6.8 9 4.5C9 2.84315 7.65685 1.5 6 1.5Z" stroke="currentColor" stroke-width="1" stroke-linejoin="round"/>
<circle cx="6" cy="4.5" r="1.2" stroke="currentColor" stroke-width="1"/>
</svg>
</span>
<span class="footer-text">{{ contact.address }}</span>
</span>
</div>
</div>
<!-- Frame 212友情链接列column · gap 16 -->
<div class="footer-col footer-col--links">
<!-- 标题行 "友情"( 1px 下边框) + "链接" -->
<div class="footer-title-row">
<span class="footer-title-with-underline">友情</span>
<span class="footer-title">链接</span>
</div>
<!-- Frame 209两个友链row · gap 32 -->
<div class="footer-links-row">
<a class="footer-text" href="https://segg.sh.gov.cn/" target="_blank" rel="noopener noreferrer">上海市企业走出去综合服务平台</a>
<span class="footer-text">上海浦江数链数字科技有限公司</span>
</div>
</div>
</div>
</div>
</div>
<!-- 下区版权1440×80 · #E2EDE5 -->
<div class="footer-bar">
<div class="footer-bar-inner">
<!-- Frame 210 · 指导单位行 -->
<div class="footer-guide">
<span class="footer-guide-label">指导单位</span>
<span class="footer-guide-item">上海市数据局</span>
<span class="footer-guide-gap"></span>
<span class="footer-guide-item">宝山区政府</span>
</div>
<!-- Frame 1898 · 版权行 · gap 20 -->
<div class="footer-copyright">
<span class="footer-bar-line">©2025可信碳信息网版权所有</span>
<span class="footer-bar-line">技术支持上海市宝山区大数据中心</span>
<span class="footer-bar-line">基础设施国家区块链网络基础底座</span>
</div>
</div>
</div>
</footer>
</div>
</template>
<script>
import { mapState } from 'vuex';
export default {
name: 'Footer',
computed: {
...mapState('settings', ['contact']),
},
};
</script>
<style lang="less" scoped>
/* =============================================================================
* 首页底部信息块Figma 150904:8642 · 审核版本精确对照)
* Group 291440 × 144 · #F0F7F2
* 版权块: 1440 × 80 · #E2EDE5
* ============================================================================= */
.portal-footer-shell {
flex-shrink: 0;
width: 100%;
background: #f0f7f2;
}
.site-footer {
display: block;
font-family: 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif;
}
/* ── 上区:底部信息 ───────────────────────────── 1440×144 · #F0F7F2 ── */
.footer-main {
background: #f0f7f2;
}
.footer-main-inner {
box-sizing: border-box;
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 40px 20px; /* Figma 底部信息 padding */
}
.footer-frame {
display: flex;
align-items: center; /* Figma 底部信息 align-items: center */
justify-content: space-between; /* Figma Frame 235 justify-content: space-between */
box-sizing: border-box;
width: 100%;
}
/* ── 列通用样式 ── */
.footer-col {
display: flex;
flex-direction: column;
align-items: center; /* 列内内容居中 */
}
/* Frame 213联系我们列 · column · gap 10 */
.footer-col--contact {
flex: 0 1 auto;
row-gap: 10px;
}
/* Frame 212友情链接列 · column · gap 16 */
.footer-col--links {
flex: 0 1 auto;
row-gap: 10px;
}
/* ── 标题行Frame 208 ─ row ────────────────────── h:28 ── */
.footer-title-row {
display: flex;
align-items: center;
justify-content: center;
padding: 0 0 6px; /* Figma Frame 1900 padding 0 0 6px */
font-size: 16px;
line-height: 22px;
color: #000000;
margin-left: -10px;
}
.footer-title-with-underline {
font-weight: 600;
border-bottom: 1px solid #000000;
padding-bottom: 0;
line-height: 22px;
}
.footer-title {
font-weight: 600;
line-height: 22px;
}
/* ── Frame 209内容行 ────────────────────────────── h:14/20 ── */
/* 联系我们:邮箱 + 地址 · row · gap 32 */
.footer-contact-row {
display: flex;
align-items: center;
justify-content: center;
column-gap: 32px;
font-size: 0;
}
.footer-contact-item {
display: inline-flex;
align-items: center;
column-gap: 4px;
}
.footer-icon {
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
color: #555555;
line-height: 0;
}
/* 友情链接:两个链接 · row · gap 32 */
.footer-links-row {
display: flex;
align-items: center;
justify-content: center;
column-gap: 32px;
font-size: 0;
}
/* ── 文字通用样式 ── */
.footer-text {
font-size: 14px;
font-weight: 400;
line-height: 20px;
color: #555555;
text-decoration: none;
white-space: nowrap;
vertical-align: middle;
}
a.footer-text {
cursor: pointer;
transition: color 0.2s ease;
&:hover {
color: #00b96b;
}
}
/* ── 下区:版权 ────────────────────────────────── 1440×80 · #E2EDE5 ── */
.footer-bar {
background: #e2ede5;
}
.footer-bar-inner {
box-sizing: border-box;
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 16px 0; /* Figma Frame 221 padding 16 0 */
display: flex;
flex-direction: column;
align-items: center;
row-gap: 8px; /* Figma gap 8 */
}
/* 指导单位行 · Frame 210 */
.footer-guide {
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
line-height: 20px;
color: #555555;
}
.footer-guide-label,
.footer-guide-item {
font-weight: 400;
}
.footer-guide-gap {
display: inline-block;
width: 10px;
flex-shrink: 0;
}
/* 版权行 · Frame 1898 · gap 20 */
.footer-copyright {
display: flex;
align-items: center;
justify-content: center;
column-gap: 20px; /* Figma gap 20 */
white-space: nowrap;
}
.footer-bar-line {
font-size: 14px; /* Figma style_ERXFUQ 14px */
font-weight: 400;
line-height: 20px;
color: #555555;
}
/* ── 响应式 ────────────────────────────────────────── */
@media screen and (max-width: 1279px) {
.footer-frame {
flex-direction: column;
row-gap: 28px;
}
.footer-col--contact,
.footer-col--links {
width: 100%;
}
}
@media screen and (max-width: 767px) {
.footer-main-inner {
padding: 32px 16px;
}
.footer-frame {
row-gap: 24px;
}
.footer-contact-row {
flex-direction: column;
align-items: flex-start;
row-gap: 8px;
}
.footer-links-row {
flex-direction: column;
align-items: center;
row-gap: 8px;
}
.footer-bar-inner {
padding: 12px 0;
}
.footer-guide {
flex-wrap: wrap;
}
.footer-guide-gap {
display: none;
}
.footer-copyright {
flex-direction: column;
row-gap: 4px;
}
.footer-bar-line {
white-space: normal;
text-align: center;
}
}
</style>