This commit is contained in:
2025-09-15 22:09:29 +08:00
parent 9569326c37
commit 3cb3a58dfd
20 changed files with 8678 additions and 158 deletions

View File

@@ -1,5 +1,6 @@
<template>
<view class="home">
<image class="home-bg" src="/static/metal-bg.jpg" mode="aspectFill"></image>
<!-- 顶部统计卡片 -->
<view class="hero">
<view class="hero-top">
@@ -24,13 +25,36 @@
</view>
</view>
<!-- 功能九宫格 -->
<view class="grid">
<view class="grid-item" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
<view class="icon" :style="{ backgroundColor: item.color }">
<text class="icon-text">{{ item.icon }}</text>
<!-- 公告栏自动轮播可点击查看详情 -->
<view class="notice">
<view class="notice-left">公告</view>
<swiper class="notice-swiper" circular autoplay interval="4000" duration="400" vertical>
<swiper-item v-for="(n, idx) in notices" :key="idx">
<view class="notice-item" @click="onNoticeTap(n)">
<text class="notice-text">{{ n.text }}</text>
<text v-if="n.tag" class="notice-tag">{{ n.tag }}</text>
</view>
</swiper-item>
</swiper>
<view class="notice-right" @click="onNoticeList">更多</view>
</view>
<!-- 分割标题产品与功能 -->
<view class="section-title">
<text class="section-text">常用功能</text>
</view>
<!-- 功能九宫格玻璃容器 + 圆角方形图标 -->
<view class="grid-wrap">
<view class="grid">
<view class="grid-item" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
<view class="icon icon-squircle">
<image v-if="item.img" :src="item.img" class="icon-img" mode="aspectFit" @error="onIconError(item)"></image>
<text v-else-if="item.emoji" class="icon-emoji">{{ item.emoji }}</text>
<view v-else class="icon-placeholder"></view>
</view>
<text class="grid-chip">{{ item.title }}</text>
</view>
<text class="grid-title">{{ item.title }}</text>
</view>
</view>
@@ -60,16 +84,22 @@
monthProfit: '0.00',
stockQty: '0.00',
activeTab: 'home',
notices: [
{ text: '选材精工:不锈钢、合金钢,耐腐蚀更耐用', tag: '品质' },
{ text: '表面工艺:电镀锌/镀镍/发黑处理,性能均衡', tag: '工艺' },
{ text: '库存齐全:螺丝、螺母、垫圈、膨胀螺栓等现货', tag: '库存' },
{ text: '企业采购支持:批量优惠,次日发货', tag: '服务' }
],
features: [
{ key: 'customer', title: '客户', icon: '👥', color: '#3EC1D3' },
{ key: 'sale', title: '销售', icon: '💰', color: '#00C2A8' },
{ key: 'account', title: '账户', icon: '💳', color: '#21BA45' },
{ key: 'supplier', title: '供应商', icon: '🚚', color: '#FF8C66' },
{ key: 'purchase', title: '进货', icon: '🛒', color: '#F5A623' },
{ key: 'otherPay', title: '其他支出', icon: '💸', color: '#F5C451' },
{ key: 'vip', title: 'VIP会员', icon: '👑', color: '#FF9F43' },
{ key: 'report', title: '报表', icon: '📊', color: '#6C7BFF' },
{ key: 'more', title: '更多', icon: '', color: '#BCAAA4' }
{ key: 'customer', title: '客户', img: '/static/icons/customer.png', emoji: '👥' },
{ key: 'sale', title: '销售', img: '/static/icons/sale.png', emoji: '💰' },
{ key: 'account', title: '账户', img: '/static/icons/account.png', emoji: '💳' },
{ key: 'supplier', title: '供应商', img: '/static/icons/supplier.png', emoji: '🚚' },
{ key: 'purchase', title: '进货', img: '/static/icons/purchase.png', emoji: '🛒' },
{ key: 'otherPay', title: '其他支出', img: '/static/icons/other-pay.png', emoji: '💸' },
{ key: 'vip', title: 'VIP会员', img: '/static/icons/vip.png', emoji: '👑' },
{ key: 'report', title: '报表', img: '/static/icons/report.png', emoji: '📊' },
{ key: 'more', title: '更多', img: '/static/icons/more.png', emoji: '' }
]
}
},
@@ -79,6 +109,19 @@
},
onCreateOrder() {
uni.showToast({ title: '开单(开发中)', icon: 'none' })
},
onNoticeTap(n) {
uni.showModal({
title: '公告',
content: n.text,
showCancel: false
})
},
onNoticeList() {
uni.showToast({ title: '公告列表(开发中)', icon: 'none' })
},
onIconError(item) {
item.img = ''
}
}
}
@@ -87,76 +130,142 @@
<style>
.home {
padding-bottom: 140rpx;
/* 深色奢华背景:暗金晕光 + 碳素黑 */
background: radial-gradient(120% 80% at 100% 0, rgba(214,175,85,0.10) 0, rgba(214,175,85,0.00) 40%), linear-gradient(180deg, #0b0c10 0%, #090b11 100%);
position: relative;
/* 明亮奢华背景:金属拉丝纹理覆盖层 + 柔和浅色渐变 */
background:
repeating-linear-gradient(0deg, rgba(180,180,180,0.12) 0rpx, rgba(180,180,180,0.12) 2rpx, rgba(255,255,255,0.0) 2rpx, rgba(255,255,255,0.0) 10rpx),
linear-gradient(180deg, rgba(255, 255, 255, 0.75) 0%, rgba(255, 255, 255, 0.55) 40%, rgba(255, 255, 255, 0.35) 100%);
min-height: 100vh;
}
/* 顶部渐变英雄区:深色石墨 + 金色高光,并叠加金属拉丝纹理 */
.home-bg {
position: fixed;
left: 0; top: 0; right: 0; bottom: 0;
width: 100%; height: 100%;
pointer-events: none;
z-index: -1;
}
/* 公告栏 */
.notice {
margin: 0 24rpx 24rpx;
padding: 20rpx 22rpx;
border-radius: 20rpx;
background: rgba(255,255,255,0.78);
backdrop-filter: blur(12rpx);
border: 2rpx solid rgba(203, 166, 61, 0.28);
display: flex;
align-items: center;
gap: 16rpx;
}
.notice-left {
flex: 0 0 auto;
display: inline-flex; align-items: center; justify-content: center;
min-width: 96rpx; height: 44rpx;
padding: 0 16rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, #FFE69A, #F4CF62);
color: #3f320f;
font-size: 24rpx;
font-weight: 800;
}
.notice-swiper { height: 72rpx; flex: 1; }
.notice-item { display: flex; align-items: center; gap: 12rpx; min-height: 72rpx; }
.notice-text { color: #4b3e19; font-size: 28rpx; line-height: 36rpx; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.notice-tag { color: #B4880F; font-size: 22rpx; padding: 4rpx 10rpx; border-radius: 999rpx; background: rgba(215,167,46,0.18); }
.notice-right { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; min-width: 72rpx; height: 44rpx; color: #B4880F; font-size: 26rpx; padding-left: 8rpx; }
/* 分割标题 */
.section-title { display: flex; align-items: center; gap: 16rpx; padding: 10rpx 28rpx 0; }
.section-title::before { content: ''; display: block; width: 8rpx; height: 28rpx; border-radius: 8rpx; background: linear-gradient(180deg, #FFE69A, #D7A72E); }
.section-text { color: #6b5a2a; font-size: 28rpx; font-weight: 700; letter-spacing: 1rpx; }
/* 顶部英雄区:浅色玻璃卡片,带金色描边与柔和阴影 */
.hero {
margin: 24rpx;
padding: 32rpx;
border-radius: 24rpx;
background: repeating-linear-gradient(135deg, rgba(255,255,255,0.04) 0rpx, rgba(255,255,255,0.04) 2rpx, rgba(0,0,0,0.0) 2rpx, rgba(0,0,0,0.0) 16rpx), linear-gradient(145deg, #16181e 0%, #0e1016 100%);
color: #ffffff;
border: 2rpx solid rgba(236, 203, 116, 0.6);
box-shadow: 0 18rpx 36rpx rgba(0, 0, 0, 0.35), 0 0 0 2rpx rgba(236,203,116,0.25) inset;
border-radius: 28rpx;
background: rgba(255, 255, 255, 0.65);
backdrop-filter: blur(14rpx);
border: 2rpx solid rgba(203, 166, 61, 0.35);
box-shadow: 0 12rpx 28rpx rgba(0, 0, 0, 0.10), 0 0 0 2rpx rgba(255,255,255,0.60) inset;
color: #473c22;
}
.hero-top {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24rpx;
margin-bottom: 20rpx;
}
.brand {
font-size: 40rpx;
font-weight: 600;
font-size: 42rpx;
font-weight: 700;
letter-spacing: 2rpx;
color: #f2d58a;
color: #B4880F; /* 金色标题 */
}
.cta {
padding: 8rpx 20rpx;
padding: 10rpx 22rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, rgba(0, 212, 255, 0.35), rgba(0, 153, 255, 0.25));
border: 2rpx solid rgba(0, 187, 255, 0.4);
background: linear-gradient(135deg, rgba(255, 220, 128, 0.65), rgba(255, 240, 190, 0.65));
border: 2rpx solid rgba(203, 166, 61, 0.45);
box-shadow: 0 6rpx 14rpx rgba(203, 166, 61, 0.25);
}
.cta-text { color: #ffffff; font-size: 26rpx; }
.cta-text { color: #5a4712; font-size: 26rpx; }
.kpi { display: flex; }
.kpi-item { flex: 1; }
.kpi-label { opacity: 0.9; font-size: 24rpx; }
.kpi-value { display: block; margin-top: 12rpx; font-size: 46rpx; font-weight: 700; color: #f2d58a; }
.kpi-label { opacity: 0.9; font-size: 24rpx; color: #6b5a2a; }
.kpi-value { display: block; margin-top: 12rpx; font-size: 46rpx; font-weight: 800; color: #B4880F; }
/* 功能容器:整体玻璃面板,增强融入感 */
.grid-wrap {
margin: 0 20rpx 32rpx;
padding: 28rpx 20rpx 12rpx;
border-radius: 24rpx;
background: rgba(255,255,255,0.55);
backdrop-filter: blur(10rpx);
border: 2rpx solid rgba(203,166,61,0.22);
box-shadow: 0 8rpx 18rpx rgba(0,0,0,0.06);
}
/* 功能九宫格 */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-row-gap: 48rpx;
grid-column-gap: 28rpx;
padding: 40rpx 28rpx 20rpx;
grid-row-gap: 64rpx;
grid-column-gap: 36rpx;
padding: 40rpx 28rpx 28rpx;
}
.grid-item { display: flex; flex-direction: column; align-items: center; }
.icon {
width: 120rpx;
height: 120rpx;
.grid-item { display: flex; flex-direction: column; align-items: center; text-align: center; }
.icon { display: flex; align-items: center; justify-content: center; color: #6b5a2a; position: relative; }
.icon-squircle {
width: 132rpx; height: 132rpx;
border-radius: 28rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
background: linear-gradient(145deg, #1a1d24 0%, #0f1218 100%);
border: 2rpx solid rgba(236,203,116,0.55);
box-shadow: 0 10rpx 22rpx rgba(0,0,0,0.26), 0 0 0 2rpx rgba(236,203,116,0.18) inset;
background: linear-gradient(145deg, rgba(255,255,255,0.92), rgba(255,255,255,0.70));
backdrop-filter: blur(12rpx);
border: 2rpx solid rgba(203,166,61,0.22);
box-shadow: 0 10rpx 24rpx rgba(0,0,0,0.10), 0 0 0 2rpx rgba(255,255,255,0.65) inset;
overflow: hidden;
}
.icon-text { font-size: 46rpx; font-weight: 600; }
.grid-title { margin-top: 18rpx; color: #e6e6e6; font-size: 28rpx; }
.icon-squircle::before { content: ''; position: absolute; left: -30%; top: -40%; width: 160%; height: 70%; background: linear-gradient( to bottom, rgba(255,255,255,0.9), rgba(255,255,255,0.0) ); transform: rotate(12deg); }
.icon-img { width: 96rpx; height: 96rpx; }
.icon-emoji { font-size: 60rpx; line-height: 1; }
.icon-placeholder { width: 84rpx; height: 84rpx; border-radius: 18rpx; background:
linear-gradient(135deg, rgba(212,175,55,0.18), rgba(255,255,255,0.0)),
repeating-linear-gradient(90deg, rgba(180,150,60,0.35) 0, rgba(180,150,60,0.35) 8rpx, transparent 8rpx, transparent 16rpx),
repeating-linear-gradient(0deg, rgba(180,150,60,0.20) 0, rgba(180,150,60,0.20) 8rpx, transparent 8rpx, transparent 16rpx);
box-shadow: inset 0 0 0 2rpx rgba(203,166,61,0.28);
}
.icon-text { font-size: 46rpx; font-weight: 700; }
.grid-title { display: none; }
.grid-chip { margin-top: 14rpx; padding: 6rpx 14rpx; border-radius: 999rpx; background: rgba(215,167,46,0.16); color: #5a4a1f; font-size: 22rpx; }
/* 底部操作条 */
/* 底部操作条:浅色半透明 + 金色主按钮 */
.bottom-bar {
position: fixed;
left: 0; right: 0; bottom: 0;
@@ -164,23 +273,23 @@
align-items: center;
justify-content: space-around;
padding: 14rpx 18rpx calc(env(safe-area-inset-bottom) + 14rpx);
background: rgba(12,14,20,0.92);
box-shadow: 0 -6rpx 18rpx rgba(0,0,0,0.35);
backdrop-filter: blur(8rpx);
background: rgba(255,255,255,0.85);
box-shadow: 0 -6rpx 18rpx rgba(0,0,0,0.08);
backdrop-filter: blur(10rpx);
}
.tab { flex: 1; text-align: center; color: #aaa; font-size: 26rpx; }
.tab.active { color: #f2d58a; }
.tab { flex: 1; text-align: center; color: #8a7535; font-size: 26rpx; }
.tab.active { color: #B4880F; }
.tab.primary {
flex: 0 0 auto;
min-width: 180rpx;
margin: 0 18rpx;
padding: 18rpx 32rpx;
background: linear-gradient(135deg, #F6E27A 0%, #E6C65B 40%, #CBA63D 100%);
color: #212121;
background: linear-gradient(135deg, #FFE69A 0%, #F4CF62 45%, #D7A72E 100%);
color: #493c1b;
border-radius: 999rpx;
font-size: 30rpx;
font-weight: 700;
box-shadow: 0 10rpx 22rpx rgba(203,166,61,0.35), 0 0 0 2rpx rgba(255,255,255,0.45) inset;
font-weight: 800;
box-shadow: 0 10rpx 22rpx rgba(215,167,46,0.25), 0 0 0 2rpx rgba(255,255,255,0.70) inset;
}
</style>