gaoluyang
9 天以前 f523d27d06577ab5fa447787a013ddfa79d823ac
src/pages/index.vue
@@ -1,8 +1,16 @@
<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">
@@ -11,10 +19,10 @@
            :key="item.label"
            @click="handleQuickTool(item)"
          >
            <view class="quick-icon" :style="{ background: item.bgColor }">
              <image :src="item.icon" class="quick-icon-img" mode="aspectFit" />
            <view class="icon-container">
              <image :src="item.icon" class="item-icon" mode="aspectFit" />
            </view>
            <text class="quick-text">{{ item.label }}</text>
            <text class="item-label">{{ item.label }}</text>
          </up-grid-item>
        </up-grid>
      </view>
@@ -47,7 +55,6 @@
                </view>
              </view>
            </view>
            <image class="card-icon" :src="imgSales" mode="widthFix" />
          </view>
          <view class="overview-card purchase">
@@ -64,7 +71,6 @@
                </view>
              </view>
            </view>
            <image class="card-icon" :src="imgPurchase" mode="widthFix" />
          </view>
          <view class="overview-card stock">
@@ -81,7 +87,6 @@
                </view>
              </view>
            </view>
            <image class="card-icon" :src="imgStock" mode="widthFix" />
          </view>
        </view>
      </view>
@@ -199,9 +204,6 @@
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";
@@ -209,26 +211,22 @@
const quickTools = [
  {
    label: "生产报工",
    icon: "/static/images/icon/shengchanbaogong@2x.png",
    bgColor: "linear-gradient(135deg,#3b82f6,#2563eb)",
    route: "/pages/productionManagement/productionReport/index",
    icon: "/static/images/icon/shengchanbaogong.svg",
    action: "scan",
  },
  {
    label: "设备巡检",
    icon: "/static/images/icon/xunjianshangchuan@2x.png",
    bgColor: "linear-gradient(135deg,#22c55e,#16a34a)",
    icon: "/static/images/icon/xunjianshangchuan.svg",
    route: "/pages/inspectionUpload/index",
  },
  {
    label: "设备保养",
    icon: "/static/images/icon/shbeibaoyang@2x.png",
    bgColor: "linear-gradient(135deg,#f97316,#ea580c)",
    icon: "/static/images/icon/shebeibaoyang.svg",
    route: "/pages/equipmentManagement/upkeep/index",
  },
  {
    label: "设备报修",
    icon: "/static/images/icon/shbeibaoxiu@2x.png",
    bgColor: "linear-gradient(135deg,#a855f7,#7c3aed)",
    icon: "/static/images/icon/shebeibaoxiu.svg",
    route: "/pages/equipmentManagement/repair/index",
  },
];
@@ -248,6 +246,28 @@
}
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 });
}
@@ -451,8 +471,116 @@
<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 {
@@ -460,7 +588,7 @@
}
.scroll {
  height: calc(100vh - env(safe-area-inset-top) - 10px);
  min-height: calc(100vh - env(safe-area-inset-top) - 10px);
}
.section {
@@ -472,27 +600,47 @@
  padding: 6px 0 2px;
}
.quick-icon {
  width: 44px;
  height: 44px;
.icon-container {
  width: 36px;
  height: 36px;
  border-radius: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 18px rgba(15, 23, 42, 0.18);
  margin-bottom: 0.375rem;
  transition: all 0.2s ease;
  position: relative;
  overflow: hidden;
  animation: fadeInScale 0.5s ease both;
}
.quick-icon-img {
  width: 26px;
  height: 26px;
.item-icon {
  width: 36px;
  height: 36px;
  display: block;
}
.quick-text {
  margin-top: 6px;
.icon-container:active {
  transform: scale(0.97);
}
.item-label {
  font-size: 12px;
  color: #555555;
  text-align: center;
  white-space: nowrap;
  display: block;
  line-height: 1.4;
  font-weight: 500;
  margin-top: 4px;
  margin-bottom: 6px;
}
:deep(.up-grid-item) {
  padding: 6px 0;
}
:deep(.up-grid-item__content) {
  padding: 0;
}
.section-header {
@@ -570,13 +718,16 @@
}
.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 {
@@ -915,4 +1066,15 @@
    color: #e9edf3;
  }
}
@keyframes fadeInScale {
  0% {
    opacity: 0;
    transform: translateY(0.5rem) scale(0.96);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}
</style>