| | |
| | | <template> |
| | | <view class="page"> |
| | | <view class="safe-top" /> |
| | | |
| | | <scroll-view class="scroll" scroll-y> |
| | | <!-- 顶部 Banner:放入滚动区域,随页面一起滚动,不固定在顶部 --> |
| | | <view class="hero-section"> |
| | | <view class="bg-img"> |
| | | <view class="hero-content"> |
| | | <!-- 预留:如后续需要可在此放 logo 或简短提示 --> |
| | | </view> |
| | | <view class="hero-wave"></view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 快捷入口 --> |
| | | <view class="quick-section"> |
| | | <up-grid :border="false" col="4"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <image class="card-icon" :src="imgSales" mode="widthFix" /> |
| | | </view> |
| | | |
| | | <view class="overview-card purchase"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <image class="card-icon" :src="imgPurchase" mode="widthFix" /> |
| | | </view> |
| | | |
| | | <view class="overview-card stock"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <image class="card-icon" :src="imgStock" mode="widthFix" /> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | import { computed, onMounted, ref } from "vue"; |
| | | import { analysisCustomerContractAmounts, getBusiness } from "@/api/viewIndex"; |
| | | |
| | | const imgSales = "/static/images/index/xiaoshoushuju.png"; |
| | | const imgPurchase = "/static/images/index/caigoushuju.png"; |
| | | const imgStock = "/static/images/index/kucunshuju.png"; |
| | | const imgNum1 = "/static/images/index/num1.png"; |
| | | const imgNum2 = "/static/images/index/num2.png"; |
| | | const imgNum3 = "/static/images/index/num3.png"; |
| | |
| | | label: "生产报工", |
| | | icon: "/static/images/icon/shengchanbaogong@2x.png", |
| | | bgColor: "linear-gradient(135deg,#3b82f6,#2563eb)", |
| | | route: "/pages/productionManagement/productionReport/index", |
| | | action: "scan", |
| | | }, |
| | | { |
| | | label: "设备巡检", |
| | |
| | | } |
| | | |
| | | function handleQuickTool(item) { |
| | | if (item?.action === "scan") { |
| | | // 生产报工 - 调用扫码 |
| | | uni.scanCode({ |
| | | success: (res) => { |
| | | console.log("扫码结果:", res); |
| | | // 解析扫码结果并跳转到生产报工页面 |
| | | try { |
| | | const scanResult = JSON.parse(res.result); |
| | | uni.navigateTo({ |
| | | url: `/pages/productionManagement/productionReport/index?orderRow=${encodeURIComponent(JSON.stringify(scanResult))}` |
| | | }); |
| | | } catch (e) { |
| | | console.error("扫码结果解析失败:", e); |
| | | uni.showToast({ title: "无效的二维码", icon: "none" }); |
| | | } |
| | | }, |
| | | fail: (err) => { |
| | | console.error("扫码失败:", err); |
| | | } |
| | | }); |
| | | return; |
| | | } |
| | | if (!item?.route) return; |
| | | uni.navigateTo({ url: item.route }); |
| | | } |
| | |
| | | |
| | | <style scoped lang="scss"> |
| | | .page { |
| | | min-height: 100vh; |
| | | background: #f5f6fa; |
| | | background: #f6f7fb; |
| | | min-height: 100vh; |
| | | // padding: 12px; |
| | | /* 为所有设备设置基础padding-top(包含安全区) */ |
| | | padding-top: calc(env(safe-area-inset-top) + 30px); |
| | | position: relative; |
| | | |
| | | /* 为安卓设备设置更大的顶部内边距 */ |
| | | /* #ifdef APP-PLUS && !MP && !H5 */ |
| | | padding-top: calc(env(safe-area-inset-top) + 45px); |
| | | /* #endif */ |
| | | |
| | | /* H5和小程序平台的通用样式 */ |
| | | /* #ifdef H5 || MP */ |
| | | padding-top: calc(env(safe-area-inset-top) + 30px); |
| | | /* #endif */ |
| | | &::before { |
| | | content: ""; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="dots" width="24" height="24" patternUnits="userSpaceOnUse"><circle cx="12" cy="12" r="1" fill="rgba(41, 121, 255, 0.02)"/></pattern></defs><rect width="100" height="100" fill="url(%23dots)"/></svg>'); |
| | | pointer-events: none; |
| | | z-index: -1; |
| | | } |
| | | |
| | | &::after { |
| | | content: ""; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | background: radial-gradient( |
| | | circle at 20% 80%, |
| | | rgba(41, 121, 255, 0.02) 0%, |
| | | transparent 55% |
| | | ), |
| | | radial-gradient( |
| | | circle at 80% 20%, |
| | | rgba(156, 39, 176, 0.015) 0%, |
| | | transparent 55% |
| | | ); |
| | | pointer-events: none; |
| | | z-index: -1; |
| | | } |
| | | } |
| | | .hero-section { |
| | | margin: 0 12px; |
| | | margin-bottom: 12px; |
| | | animation: fadeInUp 0.6s ease-out 0.1s both; |
| | | } |
| | | |
| | | .bg-img { |
| | | width: 100%; |
| | | height: 9.25rem; |
| | | background-image: url("../static/images/banner/backview.png"); |
| | | background-size: cover; |
| | | border-radius: 14px; |
| | | position: relative; |
| | | overflow: hidden; |
| | | box-shadow: 0 10px 26px rgba(17, 24, 39, 0.08); |
| | | |
| | | &::before { |
| | | content: ""; |
| | | position: absolute; |
| | | top: -50%; |
| | | left: -50%; |
| | | width: 200%; |
| | | height: 200%; |
| | | background: conic-gradient( |
| | | from 0deg, |
| | | transparent, |
| | | rgba(255, 255, 255, 0.1), |
| | | transparent, |
| | | rgba(255, 255, 255, 0.05), |
| | | transparent |
| | | ); |
| | | animation: rotate 20s linear infinite; |
| | | } |
| | | |
| | | &::after { |
| | | content: ""; |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | width: 7.5rem; |
| | | height: 7.5rem; |
| | | background: radial-gradient( |
| | | circle, |
| | | rgba(255, 255, 255, 0.15) 0%, |
| | | transparent 70% |
| | | ); |
| | | border-radius: 50%; |
| | | transform: translate(2.5rem, -2.5rem); |
| | | } |
| | | } |
| | | |
| | | .hero-content { |
| | | position: relative; |
| | | z-index: 1; |
| | | |
| | | padding: 14px 14px 18px 14px; |
| | | margin: 0 12px; |
| | | height: 100%; |
| | | } |
| | | .hero-wave { |
| | | height: 2.75rem; |
| | | } |
| | | |
| | | .safe-top { |
| | |
| | | } |
| | | |
| | | .scroll { |
| | | height: calc(100vh - env(safe-area-inset-top) - 10px); |
| | | min-height: calc(100vh - env(safe-area-inset-top) - 10px); |
| | | } |
| | | |
| | | .section { |
| | |
| | | } |
| | | |
| | | .overview-card.sales { |
| | | background: linear-gradient(135deg, #e9fbff 0%, #d8fbff 100%); |
| | | background: url("/static/images/index/xiaoshoushuju.png") no-repeat center center; |
| | | background-size: cover; |
| | | } |
| | | .overview-card.purchase { |
| | | background: linear-gradient(135deg, #fff4e7 0%, #ffe7ce 100%); |
| | | background: url("/static/images/index/caigoushuju.png") no-repeat center center; |
| | | background-size: cover; |
| | | } |
| | | .overview-card.stock { |
| | | background: linear-gradient(135deg, #eaf0ff 0%, #dbe6ff 100%); |
| | | background: url("/static/images/index/kucunshuju.png") no-repeat center center; |
| | | background-size: cover; |
| | | } |
| | | |
| | | .card-left { |