feat 首页页脚

This commit is contained in:
Ironsp
2026-10-01 11:04:30 +08:00
parent 1601bdd82c
commit d856fb623a
3 changed files with 150 additions and 56 deletions

View File

@@ -34,20 +34,17 @@ const coreBusiness = [
</div>
<div class="app-footer__col app-footer__col--core">
<h4 class="app-footer__title">
核心业务
</h4>
<h4 class="app-footer__title">核心业务</h4>
<span
v-for="item in coreBusiness"
:key="item"
class="app-footer__link"
>{{ item }}</span>
>{{ item }}</span
>
</div>
<div class="app-footer__col app-footer__col--nav">
<h4 class="app-footer__title">
快速导航
</h4>
<h4 class="app-footer__title">快速导航</h4>
<RouterLink
v-for="link in quickLinks"
:key="link.label"
@@ -59,19 +56,26 @@ const coreBusiness = [
</div>
<div class="app-footer__col app-footer__col--contact">
<h4 class="app-footer__title">
联系我们
</h4>
<span class="app-footer__contact">商务合作:{{ siteStore.siteInfo.businessEmail }}</span>
<span class="app-footer__contact">技术支持:{{ siteStore.siteInfo.supportEmail }}</span>
<span class="app-footer__contact">客服热线:{{ siteStore.siteInfo.hotline }}</span>
<span class="app-footer__contact">工作时间:{{ siteStore.siteInfo.workTime }}</span>
<h4 class="app-footer__title">联系我们</h4>
<span class="app-footer__contact"
>商务合作:{{ siteStore.siteInfo.businessEmail }}</span
>
<span class="app-footer__contact"
>技术支持:{{ siteStore.siteInfo.supportEmail }}</span
>
<span class="app-footer__contact"
>客服热线:{{ siteStore.siteInfo.hotline }}</span
>
<span class="app-footer__contact"
>工作时间:{{ siteStore.siteInfo.workTime }}</span
>
</div>
</div>
<div class="app-footer__bottom">
<p class="app-footer__legal">
©2026 虫子智造 研发智造一体化平台 版权所有|自营研发生产平台,所有项目源码、图纸受平台知识产权保护,禁止盗用、复制、二次分发
©2026 虫子智造 研发智造一体化平台
版权所有|自营研发生产平台,所有项目源码、图纸受平台知识产权保护,禁止盗用、复制、二次分发
</p>
<p class="app-footer__legal app-footer__legal--icp">
{{ siteStore.siteInfo.icp }} | {{ siteStore.siteInfo.police }}
@@ -93,10 +97,15 @@ const coreBusiness = [
.flex(row, flex-start, flex-start);
width: 100%;
max-width: 1920px;
height: 332px; // 页脚顶 → © 行(y1942→2274)
margin: 0 auto; // 视口宽于 1920 时整块居中;缺这行内容会贴左、右侧留白远大于左侧
height: 250px; // 页脚顶 → © 行(y1942→2274)
box-sizing: border-box;
padding-top: 54px;
padding-left: clamp(@spacing-base, calc((100% - 1609px) / 2), 155px); // 设计内容 x155→1764 = 1609 宽
padding-top: 30px;
padding-left: clamp(
@spacing-base,
calc((100% - 1609px) / 2),
155px
); // 设计内容 x155→1764 = 1609 宽
overflow: hidden; // 防列内容撑出横向滚动
}
@@ -132,9 +141,18 @@ const coreBusiness = [
// 设计列位:核心业务 @922(列宽 193)、快速导航 @1257(80)、联系我们 @1511(253)
// 用 modifier 类定位;:nth-of-type 按标签序号计数(about 也算 div),会整体错位一档
&--core { flex: 0 0 193px; margin-left: 142px; }
&--nav { flex: 0 0 80px; margin-left: 142px; }
&--contact { flex: 0 0 253px; margin-left: 174px; }
&--core {
flex: 0 0 193px;
margin-left: 142px;
}
&--nav {
flex: 0 0 80px;
margin-left: 142px;
}
&--contact {
flex: 0 0 253px;
margin-left: 174px;
}
}
&__title {
@@ -170,7 +188,7 @@ const coreBusiness = [
width: 867px;
max-width: calc(100% - 32px);
margin: 0 auto;
padding-bottom: 87px; // ICP 盒底 2336 → 页脚底 2423
padding-bottom: 20px; // ICP 盒底 2336 → 页脚底 2423
text-align: left;
}

View File

@@ -24,9 +24,7 @@ const FALLBACK_ILL: Record<BusinessType, string> = {
<template>
<section class="home-business">
<h3 class="home-business__title">
业务服务
</h3>
<h3 class="home-business__title">业务服务</h3>
<div class="home-business__grid">
<RouterLink
@@ -41,7 +39,7 @@ const FALLBACK_ILL: Record<BusinessType, string> = {
class="home-business__ill"
:src="line.icon || FALLBACK_ILL[line.id]"
:alt="line.name"
>
/>
<!-- 设计稿卡片右上角选择圆环(31×31) -->
<span class="home-business__check" aria-hidden="true" />
<h4 class="home-business__name">
@@ -89,7 +87,9 @@ const FALLBACK_ILL: Record<BusinessType, string> = {
border: 1px solid @home-business-border;
border-radius: @radius-base;
background: @white;
transition: transform 0.2s, box-shadow 0.2s;
transition:
transform 0.2s,
box-shadow 0.2s;
&:hover {
box-shadow: @shadow-base;

View File

@@ -27,15 +27,61 @@ const router = useRouter()
const dialogVisible = ref(false)
/** 设计稿固定入口名目(设计稿没有的接口入口不展示) */
const DESIGN_NAMES = ['工单需求池', '案例库管理', '客服工作台', '合同台账', '财务台账']
const DESIGN_NAMES = [
'工单需求池',
'案例库管理',
'客服工作台',
'合同台账',
'财务台账',
]
/** 接口不可用时的默认入口(与设计稿五项一致,tone 对应设计稿五色) */
const FALLBACK_QUICK: PortalEntryCard[] = [
{ id: 0, label: '工单需求池', route: '/demand', groupType: '1', icon: '', isImage: false, tone: 'cyan' },
{ id: 0, label: '案例库管理', route: '/cases', groupType: '1', icon: '', isImage: false, tone: 'purple' },
{ id: 0, label: '客服工作台', route: '/service', groupType: '1', icon: '', isImage: false, tone: 'green' },
{ id: 0, label: '合同台账', route: '/contract', groupType: '1', icon: '', isImage: false, tone: 'blue' },
{ id: 0, label: '财务台账', route: '/finance/bills', groupType: '1', icon: '', isImage: false, tone: 'amber' },
{
id: 0,
label: '工单需求池',
route: '/demand',
groupType: '1',
icon: '',
isImage: false,
tone: 'cyan',
},
{
id: 0,
label: '案例库管理',
route: '/cases',
groupType: '1',
icon: '',
isImage: false,
tone: 'purple',
},
{
id: 0,
label: '客服工作台',
route: '/service',
groupType: '1',
icon: '',
isImage: false,
tone: 'green',
},
{
id: 0,
label: '合同台账',
route: '/contract',
groupType: '1',
icon: '',
isImage: false,
tone: 'blue',
},
{
id: 0,
label: '财务台账',
route: '/finance/bills',
groupType: '1',
icon: '',
isImage: false,
tone: 'amber',
},
]
/** 设计稿切图:蓝湖整稿 97×97 方块(含底色与白色图案),按入口名映射 */
@@ -52,14 +98,17 @@ const knownPaths = new Set(router.getRoutes().map((item) => item.path))
/** 卡片展示的入口:接口数据按设计稿名目过滤,最多 5 个 */
const entries = computed<PortalEntryCard[]>(() => {
const list = toPortalEntryCards(quickEntries.value)
.filter((card) => DESIGN_NAMES.includes(card.label))
const list = toPortalEntryCards(quickEntries.value).filter((card) =>
DESIGN_NAMES.includes(card.label),
)
return (list.length > 0 ? list : FALLBACK_QUICK).slice(0, 5)
})
/** 入口图:接口 iconUrl 图案优先,否则设计稿切图 */
function tileSrc(card: PortalEntryCard): string {
return card.isImage && card.icon ? card.icon : (DESIGN_TILES[card.label] ?? '')
return card.isImage && card.icon
? card.icon
: (DESIGN_TILES[card.label] ?? '')
}
/** 解析可跳转路径:优先后端 route,其次同名默认入口,最后回首页 */
@@ -80,9 +129,7 @@ function onMore(): void {
<template>
<section class="home-quick">
<div class="home-quick__head">
<h3 class="home-quick__title">
业务服务
</h3>
<h3 class="home-quick__title">快捷入口</h3>
</div>
<div class="home-quick__list">
@@ -93,15 +140,44 @@ function onMore(): void {
class="home-quick__item"
>
<!-- 设计稿:97×97 彩色方块 + 白色图案(蓝湖整稿切图),接口 iconUrl 图案优先 -->
<img class="home-quick__tile" :src="tileSrc(entry)" :alt="entry.label">
<img
class="home-quick__tile"
:src="tileSrc(entry)"
:alt="entry.label"
/>
<span class="home-quick__label">{{ entry.label }}</span>
</RouterLink>
<!-- 设计稿:双箭头图标与入口方块行垂直居中(@y875, 32×32,距末位方块 20) -->
<button class="home-quick__more" type="button" aria-label="更多应用" @click="onMore">
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 6 L18 16 L8 26" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" fill="none" />
<path d="M17 6 L27 16 L17 26" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" fill="none" />
<button
class="home-quick__more"
type="button"
aria-label="更多应用"
@click="onMore"
>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M8 6 L18 16 L8 26"
stroke="currentColor"
stroke-width="3.5"
stroke-linecap="round"
stroke-linejoin="round"
fill="none"
/>
<path
d="M17 6 L27 16 L17 26"
stroke="currentColor"
stroke-width="3.5"
stroke-linecap="round"
stroke-linejoin="round"
fill="none"
/>
</svg>
</button>
</div>