周宾
9 小时以前 b54a94b098a5a0a3375bab0d6493bacf45dd0a58
src/pages/index.vue
@@ -11,8 +11,7 @@
      <view class="hero-section">
         <view class="bg-img">
            <view class="hero-content">
               <text class="hero-title"></text>
               <text class="hero-subtitle"></text>
               <text class="hero-title">双奇点</text>
            </view>
            <view class="hero-wave"></view>
         </view>
@@ -32,7 +31,35 @@
      <!--            </view>-->
      <!--         </view>-->
      <!--      </view>-->
      <!-- 仓储物流模块 -->
      <view class="common-module marketing-module">
         <view class="module-header">
            <view class="module-title-container">
               <text class="module-title">仓储物流</text>
            </view>
         </view>
         <view class="module-content">
            <up-grid
               :border="false"
               col="4"
            >
               <up-grid-item
                  v-for="(item, index) in warehousingLogisticsItems"
                  :key="index"
                  @click="handleCommonItemClick(item)"
               >
                  <view class="icon-container" :style="{ background: item.bgColor }">
                     <up-icon
                        :name="item.icon"
                        :size="58"
                        color="#ffffff"
                     ></up-icon>
                  </view>
                  <text class="item-label">{{item.label}}</text>
               </up-grid-item>
            </up-grid>
         </view>
      </view>
      <!-- 营销管理模块 -->
      <view class="common-module marketing-module">
         <view class="module-header">
@@ -123,6 +150,36 @@
         </view>
      </view>
      
      <!-- 生产管控模块 -->
      <view class="common-module production-module">
         <view class="module-header">
            <view class="module-title-container">
               <text class="module-title">生产管控</text>
            </view>
         </view>
         <view class="module-content">
            <up-grid
               :border="false"
               col="4"
            >
               <up-grid-item
                  v-for="(item, index) in productionItems"
                  :key="index"
                  @click="handleCommonItemClick(item)"
               >
                  <view class="icon-container" :style="{ background: item.bgColor }">
                     <up-icon
                        :name="item.icon"
                        :size="58"
                        color="#ffffff"
                     ></up-icon>
                  </view>
                  <text class="item-label">{{item.label}}</text>
               </up-grid-item>
            </up-grid>
         </view>
      </view>
      <!-- 设备管理模块 -->
      <view class="common-module equipment-module">
         <view class="module-header">
@@ -152,14 +209,17 @@
            </up-grid>
         </view>
      </view>
      <GoodsDetailPopup ref="refGoodsDetailPopup"></GoodsDetailPopup>
   </view>
</template>
<script setup>
import {ref, onMounted, nextTick, reactive} from 'vue';
import {userLoginFacotryList} from "@/api/login";
import { stockinDetail, detailManagementByCustom } from '@/api/inventoryManagement/receiptManagement'
import modal from "@/plugins/modal";
import useUserStore from "@/store/modules/user";
import GoodsDetailPopup from './components/GoodsDetailPopup.vue';
const userStore = useUserStore()
const factoryId = ref('');
@@ -184,6 +244,30 @@
      currentStatus.value = statusList[statusIndex]
   }, 3000)
}
//仓储物流功能数据
const warehousingLogisticsItems = reactive([
   {
      icon: '/static/images/icon/xiaoshoutaizhang@2x.png',
      label: '入库管理',
   },
   {
      icon: '/static/images/icon/kaipiaodengji@2x.png',
      label: '出库管理',
   },
   {
      icon: '/static/images/icon/kaipiaotaizhang@2x.png',
      label: '出库台账',
   },
   {
      icon: '/static/images/icon/huikuandengji@2x.png',
      label: '库存管理',
   },
   {
      icon: '/static/images/icon/huikuandengji@2x.png',
      label: '产品扫码',
   }
]);
// 营销管理功能数据
const marketingItems = reactive([
@@ -253,12 +337,41 @@
   }
]);
// 生产管控功能数据
const productionItems = reactive([
   {
      icon: '/static/images/icon/shengchandingdan@2x.png',
      label: '生产订单',
      bgColor: '#FF9800'
   },
   {
      icon: '/static/images/icon/shengchanpaigong@2x.png',
      label: '生产派工',
      bgColor: '#FF6B35'
   },
   {
      icon: '/static/images/icon/shengchanpaichan@2x.png',
      label: '工序排产',
      bgColor: '#E91E63'
   },
   {
      icon: '/static/images/icon/shengchanbaogong@2x.png',
      label: '生产报工',
      bgColor: '#673AB7'
   },
   {
      icon: '/static/images/icon/shengchanhesuan@2x.png',
      label: '生产核算',
      bgColor: '#3F51B5'
   }
]);
// 设备管理功能数据
const equipmentItems = reactive([
   {
      icon: '/static/images/icon/shebeitaizhang@2x.png',
      label: '设备台账',
   },
   // {
   //    icon: '/static/images/icon/shebeitaizhang@2x.png',
   //    label: '设备台账',
   // },
   {
      icon: '/static/images/icon/shbeibaoxiu@2x.png',
      label: '设备报修',
@@ -266,6 +379,30 @@
   {
      icon: '/static/images/icon/shbeibaoyang@2x.png',
      label: '设备保养',
   },
   {
      icon: '/static/images/icon/xunjianshangchuan@2x.png',
      label: '巡检上传',
   },
   {
      icon: '/static/images/icon/guzhangfenxi@2x.png',
      label: '分析追溯',
      bgColor: '#ff9800'
   },
   {
      icon: '/static/images/icon/zhinengpaidan@2x.png',
      label: '智能派单',
      bgColor: '#ff6b35'
   },
   {
      icon: '/static/images/icon/zuoyezhidao@2x.png',
      label: '作业指导',
      bgColor: '#4caf50'
   },
   {
      icon: '/static/images/icon/jieguoyanzheng@2x.png',
      label: '结果验证',
      bgColor: '#9c27b0'
   }
]);
@@ -343,6 +480,31 @@
            url: '/pages/cooperativeOffice/clientVisit/index'
         });
         break;
      case '生产订单':
         uni.navigateTo({
            url: '/pages/productionManagement/productionOrder/index'
         });
         break;
      case '生产派工':
         uni.navigateTo({
            url: '/pages/productionManagement/productionDispatching/index'
         });
         break;
      case '工序排产':
         uni.navigateTo({
            url: '/pages/productionManagement/processScheduling/index'
         });
         break;
      case '生产报工':
         uni.navigateTo({
            url: '/pages/productionManagement/productionReport/index'
         });
         break;
      case '生产核算':
         uni.navigateTo({
            url: '/pages/productionManagement/productionAccounting/index'
         });
         break;
      case '设备台账':
         uni.navigateTo({
            url: '/pages/equipmentManagement/ledger/index'
@@ -358,6 +520,54 @@
            url: '/pages/equipmentManagement/upkeep/index'
         });
         break;
      case '巡检上传':
         uni.navigateTo({
            url: '/pages/inspectionUpload/index'
         });
         break;
      case '分析追溯':
         uni.navigateTo({
            url: '/pages/equipmentManagement/faultAnalysis/index'
         });
         break;
      case '智能派单':
         uni.navigateTo({
            url: '/pages/equipmentManagement/smartDispatch/index'
         });
         break;
      case '作业指导':
         uni.navigateTo({
            url: '/pages/equipmentManagement/sop/index'
         });
         break;
      case '结果验证':
         uni.navigateTo({
            url: '/pages/equipmentManagement/verification/index'
         });
         break;
      case '入库管理':
         uni.navigateTo({
            url: '/pages/inventoryManagement/receiptManagement/index'
         });
         break
      case '出库管理':
         uni.navigateTo({
            url: '/pages/inventoryManagement/issueManagement/index'
         });
         break
      case '出库台账':
         uni.navigateTo({
            url: '/pages/inventoryManagement/dispatchLog/index'
         });
         break
      case '库存管理':
         uni.navigateTo({
            url: '/pages/inventoryManagement/stockManagement/index'
         });
         break
      case '产品扫码':
         scanQRCode()
         break
      default:
         uni.showToast({
            title: `点击了${item.label}`,
@@ -412,6 +622,73 @@
   });
}
//开始扫码
const scanQRCode = ()=>{
   uni.scanCode({
      onlyFromCamera:true,
      scanType:['barCode','qrCode'],
      success(res) {
         searchDetail(res.result||'')
      },
      fail(res) {
         uni.showToast({
            title: res.errMsg||'扫码失败',
            icon: 'none',
            duration: 1500
         })
      }
   })
}
//谈框相关
const refGoodsDetailPopup = ref(null)
//查看详情
const searchDetail = (barcode)=>{
   if(!barcode||barcode.indexOf(',')==-1){
      uni.showToast({
         title:"请扫描正确的二维码",
         icon: 'none',
         duration: 1500
      })
      return
   }
   let barcodeList = barcode.split(",")
   let barcodeId = barcodeList[0]
   let type = barcodeList[1]
   let detailApi = null
   if(type==1){
      detailApi = stockinDetail
   }else if(type==2){
      detailApi = detailManagementByCustom
   }
   if(!detailApi){
      uni.showToast({
         title:"请扫描正确的二维码",
         icon: 'none',
         duration: 1500
      })
      return
   }
   detailApi({id:barcodeId}).then((resp) => {
      if(resp.code!=200||!resp.data)return
      // barcodeDetail.value = resp.data
      refGoodsDetailPopup.value.open({
         type: type,
         ...resp.data
      })
   }).catch(() => {
      uni.showToast({
         title: "获取数据失败",
         icon: 'none',
         duration: 1500
      });
   })
}
// 定义方法
const click = (name) => {
   if (uToastRef.value) {
@@ -433,8 +710,22 @@
   background: linear-gradient(135deg, #f8f9fa 0%, #e3f2fd 100%);
   min-height: 100vh;
   padding: 1.25rem;
   padding-top: env(safe-area-inset-top);
   /* 为所有设备设置基础padding-top */
   padding-top: 40px;
   position: relative;
   /* iOS设备使用env()函数处理安全区域 */
   padding-top: env(safe-area-inset-top);
   /* 为安卓设备设置更大的顶部内边距 */
   /* #ifdef APP-PLUS && !MP && !H5 */
   padding-top: 45px;
   /* #endif */
   /* H5和小程序平台的通用样式 */
   /* #ifdef H5 || MP */
   padding-top: 30px;
   /* #endif */
   
   &::before {
      content: '';
@@ -462,11 +753,13 @@
   }
}
/* 本页不再定义 .safe-area-top,已移至全局样式 */
.header-section {
   margin-bottom: 1rem;
   animation: fadeInDown 0.6s ease-out;
   /* 为安卓设备额外调整头部位置 */
   /* #ifdef APP-PLUS && !MP && !H5 */
   margin-top: 10px;
   /* #endif */
}
.currentFactory {
@@ -492,7 +785,7 @@
.bg-img {
   width: 100%;
   height: 8.75rem;
   background-image: url("../static/images/banner/view-background.png");
   background-image: url("../static/images/banner/backview.png");
   background-size: cover;
   border-radius: 0.75rem;
   position: relative;
@@ -526,12 +819,12 @@
.hero-content {
   position: relative;
   z-index: 1;
   padding: 1.25rem;
   padding: 1.25rem 1.25rem 1.6rem 1.25rem;
   height: 100%;
   display: flex;
   flex-direction: column;
   align-items: flex-start;
   justify-content: center;
   justify-content: flex-start;
}
.hero-title {
@@ -539,6 +832,7 @@
   font-size: 1.625rem;
   font-weight: 700;
   letter-spacing: 0.03125rem;
   text-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.5);
}
.hero-subtitle { font-size: 0.8125rem; margin-top: 0.375rem; }
.hero-wave { height: 2.75rem; }
@@ -548,6 +842,7 @@
   font-size: 0.8125rem;
   margin-top: 0.375rem;
   font-weight: 400;
   text-shadow: 0 0.0625rem 0.125rem rgba(0, 0, 0, 0.5);
}
.hero-wave {
@@ -736,6 +1031,10 @@
.collaboration-module {
   --module-color: #4caf50;
}
.production-module {
   --module-color: #FF9800;
}
.equipment-module {
@@ -944,6 +1243,10 @@
   --module-color: #4caf50;
}
.production-module {
   --module-color: #FF9800;
}
.equipment-module {
   --module-color: #9c27b0;
}