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

@@ -31,6 +31,7 @@ if (uni.restoreGlobal) {
}
(function(vue) {
"use strict";
const _imports_0 = "/static/metal-bg.jpg";
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
@@ -45,16 +46,22 @@ if (uni.restoreGlobal) {
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: "" }
]
};
},
@@ -64,11 +71,29 @@ if (uni.restoreGlobal) {
},
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 = "";
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "home" }, [
vue.createElementVNode("image", {
class: "home-bg",
src: _imports_0,
mode: "aspectFill"
}),
vue.createCommentVNode(" 顶部统计卡片 "),
vue.createElementVNode("view", { class: "hero" }, [
vue.createElementVNode("view", { class: "hero-top" }, [
@@ -110,47 +135,105 @@ if (uni.restoreGlobal) {
])
])
]),
vue.createCommentVNode(" 功能九宫格 "),
vue.createElementVNode("view", { class: "grid" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.features, (item) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "grid-item",
key: item.key,
onClick: ($event) => $options.onFeatureTap(item)
}, [
vue.createElementVNode(
"view",
{
class: "icon",
style: vue.normalizeStyle({ backgroundColor: item.color })
},
[
vue.createCommentVNode(" 公告栏:自动轮播,可点击查看详情 "),
vue.createElementVNode("view", { class: "notice" }, [
vue.createElementVNode("view", { class: "notice-left" }, "公告"),
vue.createElementVNode("swiper", {
class: "notice-swiper",
circular: "",
autoplay: "",
interval: "4000",
duration: "400",
vertical: ""
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.notices, (n, idx) => {
return vue.openBlock(), vue.createElementBlock("swiper-item", { key: idx }, [
vue.createElementVNode("view", {
class: "notice-item",
onClick: ($event) => $options.onNoticeTap(n)
}, [
vue.createElementVNode(
"text",
{ class: "icon-text" },
vue.toDisplayString(item.icon),
{ class: "notice-text" },
vue.toDisplayString(n.text),
1
/* TEXT */
)
],
4
/* STYLE */
),
vue.createElementVNode(
"text",
{ class: "grid-title" },
vue.toDisplayString(item.title),
1
/* TEXT */
)
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
),
n.tag ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: "notice-tag"
},
vue.toDisplayString(n.tag),
1
/* TEXT */
)) : vue.createCommentVNode("v-if", true)
], 8, ["onClick"])
]);
}),
128
/* KEYED_FRAGMENT */
))
]),
vue.createElementVNode("view", {
class: "notice-right",
onClick: _cache[0] || (_cache[0] = (...args) => $options.onNoticeList && $options.onNoticeList(...args))
}, "更多")
]),
vue.createCommentVNode(" 分割标题:产品与功能 "),
vue.createElementVNode("view", { class: "section-title" }, [
vue.createElementVNode("text", { class: "section-text" }, "常用功能")
]),
vue.createCommentVNode(" 功能九宫格(玻璃容器 + 圆角方形图标) "),
vue.createElementVNode("view", { class: "grid-wrap" }, [
vue.createElementVNode("view", { class: "grid" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.features, (item) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "grid-item",
key: item.key,
onClick: ($event) => $options.onFeatureTap(item)
}, [
vue.createElementVNode("view", { class: "icon icon-squircle" }, [
item.img ? (vue.openBlock(), vue.createElementBlock("image", {
key: 0,
src: item.img,
class: "icon-img",
mode: "aspectFit",
onError: ($event) => $options.onIconError(item)
}, null, 40, ["src", "onError"])) : item.emoji ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 1,
class: "icon-emoji"
},
vue.toDisplayString(item.emoji),
1
/* TEXT */
)) : (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "icon-placeholder"
}))
]),
vue.createElementVNode(
"text",
{ class: "grid-chip" },
vue.toDisplayString(item.title),
1
/* TEXT */
)
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
])
]),
vue.createCommentVNode(" 底部操作条 "),
vue.createElementVNode("view", { class: "bottom-bar" }, [
@@ -158,7 +241,7 @@ if (uni.restoreGlobal) {
"view",
{
class: vue.normalizeClass(["tab", { active: $data.activeTab === "home" }]),
onClick: _cache[0] || (_cache[0] = ($event) => $data.activeTab = "home")
onClick: _cache[1] || (_cache[1] = ($event) => $data.activeTab = "home")
},
[
vue.createElementVNode("text", null, "首页")
@@ -168,7 +251,7 @@ if (uni.restoreGlobal) {
),
vue.createElementVNode("view", {
class: "tab primary",
onClick: _cache[1] || (_cache[1] = (...args) => $options.onCreateOrder && $options.onCreateOrder(...args))
onClick: _cache[2] || (_cache[2] = (...args) => $options.onCreateOrder && $options.onCreateOrder(...args))
}, [
vue.createElementVNode("text", null, "开单")
]),
@@ -176,7 +259,7 @@ if (uni.restoreGlobal) {
"view",
{
class: vue.normalizeClass(["tab", { active: $data.activeTab === "detail" }]),
onClick: _cache[2] || (_cache[2] = ($event) => $data.activeTab = "detail")
onClick: _cache[3] || (_cache[3] = ($event) => $data.activeTab = "detail")
},
[
vue.createElementVNode("text", null, "明细")
@@ -188,7 +271,7 @@ if (uni.restoreGlobal) {
"view",
{
class: vue.normalizeClass(["tab", { active: $data.activeTab === "me" }]),
onClick: _cache[3] || (_cache[3] = ($event) => $data.activeTab = "me")
onClick: _cache[4] || (_cache[4] = ($event) => $data.activeTab = "me")
},
[
vue.createElementVNode("text", null, "我的")
@@ -199,7 +282,7 @@ if (uni.restoreGlobal) {
])
]);
}
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "D:/软件/配件查询/林林林/pages/index/index.vue"]]);
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "D:/wx/PartsInquiry/frontend/pages/index/index.vue"]]);
__definePage("pages/index/index", PagesIndexIndex);
function formatAppLog(type, filename, ...args) {
if (uni.__log__) {
@@ -219,7 +302,7 @@ if (uni.restoreGlobal) {
formatAppLog("log", "at App.vue:10", "App Hide");
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/软件/配件查询/林林林/App.vue"]]);
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/wx/PartsInquiry/frontend/App.vue"]]);
function createApp() {
const app = vue.createVueApp(App);
return {

View File

@@ -1,78 +1,160 @@
.home {
padding-bottom: 4.375rem;
/* 深色奢华背景:暗金晕光 + 碳素黑 */
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) 0, rgba(180,180,180,0.12) 0.0625rem, rgba(255,255,255,0.0) 0.0625rem, rgba(255,255,255,0.0) 0.3125rem),
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 0.75rem 0.75rem;
padding: 0.625rem 0.6875rem;
border-radius: 0.625rem;
background: rgba(255,255,255,0.78);
-webkit-backdrop-filter: blur(0.375rem);
backdrop-filter: blur(0.375rem);
border: 0.0625rem solid rgba(203, 166, 61, 0.28);
display: flex;
align-items: center;
gap: 0.5rem;
}
.notice-left {
flex: 0 0 auto;
display: inline-flex; align-items: center; justify-content: center;
min-width: 3rem; height: 1.375rem;
padding: 0 0.5rem;
border-radius: 31.21875rem;
background: linear-gradient(135deg, #FFE69A, #F4CF62);
color: #3f320f;
font-size: 0.75rem;
font-weight: 800;
}
.notice-swiper { height: 2.25rem; flex: 1;
}
.notice-item { display: flex; align-items: center; gap: 0.375rem; min-height: 2.25rem;
}
.notice-text { color: #4b3e19; font-size: 0.875rem; line-height: 1.125rem; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.notice-tag { color: #B4880F; font-size: 0.6875rem; padding: 0.125rem 0.3125rem; border-radius: 31.21875rem; background: rgba(215,167,46,0.18);
}
.notice-right { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; min-width: 2.25rem; height: 1.375rem; color: #B4880F; font-size: 0.8125rem; padding-left: 0.25rem;
}
/* 分割标题 */
.section-title { display: flex; align-items: center; gap: 0.5rem; padding: 0.3125rem 0.875rem 0;
}
.section-title::before { content: ''; display: block; width: 0.25rem; height: 0.875rem; border-radius: 0.25rem; background: linear-gradient(180deg, #FFE69A, #D7A72E);
}
.section-text { color: #6b5a2a; font-size: 0.875rem; font-weight: 700; letter-spacing: 0.03125rem;
}
/* 顶部英雄区:浅色玻璃卡片,带金色描边与柔和阴影 */
.hero {
margin: 0.75rem;
padding: 1rem;
border-radius: 0.75rem;
background: repeating-linear-gradient(135deg, rgba(255,255,255,0.04) 0, rgba(255,255,255,0.04) 0.0625rem, rgba(0,0,0,0.0) 0.0625rem, rgba(0,0,0,0.0) 0.5rem), linear-gradient(145deg, #16181e 0%, #0e1016 100%);
color: #ffffff;
border: 0.0625rem solid rgba(236, 203, 116, 0.6);
box-shadow: 0 0.5625rem 1.125rem rgba(0, 0, 0, 0.35), 0 0 0 0.0625rem rgba(236,203,116,0.25) inset;
border-radius: 0.875rem;
background: rgba(255, 255, 255, 0.65);
-webkit-backdrop-filter: blur(0.4375rem);
backdrop-filter: blur(0.4375rem);
border: 0.0625rem solid rgba(203, 166, 61, 0.35);
box-shadow: 0 0.375rem 0.875rem rgba(0, 0, 0, 0.10), 0 0 0 0.0625rem rgba(255,255,255,0.60) inset;
color: #473c22;
}
.hero-top {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.75rem;
margin-bottom: 0.625rem;
}
.brand {
font-size: 1.25rem;
font-weight: 600;
font-size: 1.3125rem;
font-weight: 700;
letter-spacing: 0.0625rem;
color: #f2d58a;
color: #B4880F; /* 金色标题 */
}
.cta {
padding: 0.25rem 0.625rem;
padding: 0.3125rem 0.6875rem;
border-radius: 31.21875rem;
background: linear-gradient(135deg, rgba(0, 212, 255, 0.35), rgba(0, 153, 255, 0.25));
border: 0.0625rem solid rgba(0, 187, 255, 0.4);
background: linear-gradient(135deg, rgba(255, 220, 128, 0.65), rgba(255, 240, 190, 0.65));
border: 0.0625rem solid rgba(203, 166, 61, 0.45);
box-shadow: 0 0.1875rem 0.4375rem rgba(203, 166, 61, 0.25);
}
.cta-text { color: #ffffff; font-size: 0.8125rem;
.cta-text { color: #5a4712; font-size: 0.8125rem;
}
.kpi { display: flex;
}
.kpi-item { flex: 1;
}
.kpi-label { opacity: 0.9; font-size: 0.75rem;
.kpi-label { opacity: 0.9; font-size: 0.75rem; color: #6b5a2a;
}
.kpi-value { display: block; margin-top: 0.375rem; font-size: 1.4375rem; font-weight: 700; color: #f2d58a;
.kpi-value { display: block; margin-top: 0.375rem; font-size: 1.4375rem; font-weight: 800; color: #B4880F;
}
/* 功能容器:整体玻璃面板,增强融入感 */
.grid-wrap {
margin: 0 0.625rem 1rem;
padding: 0.875rem 0.625rem 0.375rem;
border-radius: 0.75rem;
background: rgba(255,255,255,0.55);
-webkit-backdrop-filter: blur(0.3125rem);
backdrop-filter: blur(0.3125rem);
border: 0.0625rem solid rgba(203,166,61,0.22);
box-shadow: 0 0.25rem 0.5625rem rgba(0,0,0,0.06);
}
/* 功能九宫格 */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-row-gap: 1.5rem;
grid-column-gap: 0.875rem;
padding: 1.25rem 0.875rem 0.625rem;
grid-row-gap: 2rem;
grid-column-gap: 1.125rem;
padding: 1.25rem 0.875rem 0.875rem;
}
.grid-item { display: flex; flex-direction: column; align-items: center;
.grid-item { display: flex; flex-direction: column; align-items: center; text-align: center;
}
.icon {
width: 3.75rem;
height: 3.75rem;
.icon { display: flex; align-items: center; justify-content: center; color: #6b5a2a; position: relative;
}
.icon-squircle {
width: 4.125rem; height: 4.125rem;
border-radius: 0.875rem;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
background: linear-gradient(145deg, #1a1d24 0%, #0f1218 100%);
border: 0.0625rem solid rgba(236,203,116,0.55);
box-shadow: 0 0.3125rem 0.6875rem rgba(0,0,0,0.26), 0 0 0 0.0625rem rgba(236,203,116,0.18) inset;
background: linear-gradient(145deg, rgba(255,255,255,0.92), rgba(255,255,255,0.70));
-webkit-backdrop-filter: blur(0.375rem);
backdrop-filter: blur(0.375rem);
border: 0.0625rem solid rgba(203,166,61,0.22);
box-shadow: 0 0.3125rem 0.75rem rgba(0,0,0,0.10), 0 0 0 0.0625rem rgba(255,255,255,0.65) inset;
overflow: hidden;
}
.icon-text { font-size: 1.4375rem; font-weight: 600;
.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);
}
.grid-title { margin-top: 0.5625rem; color: #e6e6e6; font-size: 0.875rem;
.icon-img { width: 3rem; height: 3rem;
}
.icon-emoji { font-size: 1.875rem; line-height: 1;
}
.icon-placeholder { width: 2.625rem; height: 2.625rem; border-radius: 0.5625rem; 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) 0.25rem, transparent 0.25rem, transparent 0.5rem),
repeating-linear-gradient(0deg, rgba(180,150,60,0.20) 0, rgba(180,150,60,0.20) 0.25rem, transparent 0.25rem, transparent 0.5rem);
box-shadow: inset 0 0 0 0.0625rem rgba(203,166,61,0.28);
}
.icon-text { font-size: 1.4375rem; font-weight: 700;
}
.grid-title { display: none;
}
.grid-chip { margin-top: 0.4375rem; padding: 0.1875rem 0.4375rem; border-radius: 31.21875rem; background: rgba(215,167,46,0.16); color: #5a4a1f; font-size: 0.6875rem;
}
/* 底部操作条 */
/* 底部操作条:浅色半透明 + 金色主按钮 */
.bottom-bar {
position: fixed;
left: 0; right: 0; bottom: 0;
@@ -80,24 +162,24 @@
align-items: center;
justify-content: space-around;
padding: 0.4375rem 0.5625rem calc(env(safe-area-inset-bottom) + 0.4375rem);
background: rgba(12,14,20,0.92);
box-shadow: 0 -0.1875rem 0.5625rem rgba(0,0,0,0.35);
-webkit-backdrop-filter: blur(0.25rem);
backdrop-filter: blur(0.25rem);
background: rgba(255,255,255,0.85);
box-shadow: 0 -0.1875rem 0.5625rem rgba(0,0,0,0.08);
-webkit-backdrop-filter: blur(0.3125rem);
backdrop-filter: blur(0.3125rem);
}
.tab { flex: 1; text-align: center; color: #aaa; font-size: 0.8125rem;
.tab { flex: 1; text-align: center; color: #8a7535; font-size: 0.8125rem;
}
.tab.active { color: #f2d58a;
.tab.active { color: #B4880F;
}
.tab.primary {
flex: 0 0 auto;
min-width: 5.625rem;
margin: 0 0.5625rem;
padding: 0.5625rem 1rem;
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: 31.21875rem;
font-size: 0.9375rem;
font-weight: 700;
box-shadow: 0 0.3125rem 0.6875rem rgba(203,166,61,0.35), 0 0 0 0.0625rem rgba(255,255,255,0.45) inset;
font-weight: 800;
box-shadow: 0 0.3125rem 0.6875rem rgba(215,167,46,0.25), 0 0 0 0.0625rem rgba(255,255,255,0.70) inset;
}