zongzhibin
2024-11-26 570046df69aeffbffb3efe8ddecaf523ca492a46
Merge branch 'master' of http://222.71.245.114:9086/r/LA24030-LuLI_PackageLine
已添加11个文件
已重命名6个文件
已修改22个文件
已删除10个文件
已复制1个文件
9179 ■■■■■ 文件已修改
LA24030_LuLiPackageLine_Print/打印模板文件/包装条码模板_二维码.btw 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Print/打印模板文件/打印实例.jpg 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/storageView.ts 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/WmsConfig/wmsConfigPrint.ts 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/WmsOrder/wmsOrderPurchase.ts 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/WmsOrder/wmsOrderPurchaseDetails.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/api/main/wmsConfigPrint/wmsConfigPrint.ts 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/theme/index.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/home/index.vue 255 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/ContentView.vue 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/CountView.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/备份index.vue 399 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/index.vue 605 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsBase/wmsSubstituteGood/index.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsConfig/wmsConfigPrint/component/editDialog.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsConfig/wmsConfigPrint/index.vue 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/editDialog.vue 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/index.vue 491 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/manualFeed/component/editDialog.vue 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/manualFeed/index.vue 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/editDialog.vue 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue 490 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/component/editDialog.vue 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderAsn/component/openAllpropAsn.vue 1774 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderAsn/index.vue 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderPurchase/index.vue 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsSystemConfig/wmsConfigPrint/component/editDialog.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/WmsSystemConfig/wmsConfigPrint/index.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/inventoryWarning/transitionChart/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/wmsConfigPrint/wmsConfigPrint/component/editDialog.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Web/src/views/main/wmsConfigPrint/wmsConfigPrint/index.vue 280 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Const/ApplicationConst.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/Dto/WmsBasePlaceOutput.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/WmsBasePlaceService.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanInput.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/Dto/WmsConfigPrintInput.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/Dto/WmsConfigPrintOutput.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/WmsConfigPrintService.cs 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/main/WmsBase/wmsBasePlace.ts 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/main/wmsPlace/wmsBasePlace.ts 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/wmsBasePlace/component/editDialog.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/wmsBasePlace/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/wmsPlace/wmsBasePlace/component/editDialog.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/wmsPlace/wmsBasePlace/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LA24030_LuLiPackageLine_Print/´òÓ¡Ä£°åÎļþ/°ü×°ÌõÂëÄ£°å_¶þάÂë.btw
Binary files differ
LA24030_LuLiPackageLine_Print/´òÓ¡Ä£°åÎļþ/´òӡʵÀý.jpg
LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/storageView.ts
@@ -1,6 +1,8 @@
import request from '/@/utils/request';
enum Api {
    STORAGE_VIEW='/api/wmsPlaceContainerInfo/list',
    // STORAGE_VIEW='/api/wmsPlaceContainerInfo/list',
    STORAGE_VIEW='/api/wmsBasePlace/listView',
}
// å¢žåŠ åˆ†æ‹£ä¿¡æ¯
LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts
@@ -3,7 +3,7 @@
  AddWmsStockQuan = '/api/wmsStockQuan/add',
  DeleteWmsStockQuan = '/api/wmsStockQuan/delete',
  UpdateWmsStockQuan = '/api/wmsStockQuan/update',
  PageWmsStockQuan = '/api/wmsStockQuan/pageView',
  PageWmsStockQuan = '/api/wmsStockQuan/page', //888
  PageStockQuanForUse= '/api/wmsStockQuan/getStockQuanPageForUse',
  ListWmsStockQuan = '/api/wmsStockQuan/list',
  DetailWmsStockQuan = '/api/wmsStockQuan/detail',
LA24030_LuLiPackageLine_Web/src/api/main/WmsConfig/wmsConfigPrint.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
import request from '/@/utils/request';
enum Api {
  AddWmsConfigPrint = '/api/wmsConfigPrint/add',
  DeleteWmsConfigPrint = '/api/wmsConfigPrint/delete',
  UpdateWmsConfigPrint = '/api/wmsConfigPrint/update',
  PageWmsConfigPrint = '/api/wmsConfigPrint/page',
  ListWmsConfigPrint = '/api/wmsConfigPrint/list',
  DetailWmsConfigPrint = '/api/wmsConfigPrint/detail',
  ImportExcelWmsConfigPrint = '/api/wmsConfigPrint/importExcel',
  DownloadExcelTemplateWmsConfigPrint = '/api/wmsConfigPrint/downloadExcelTemplate',
}
// å¢žåŠ æ‰“å°é…ç½®è¡¨
export const addWmsConfigPrint = (params?: any) =>
    request({
        url: Api.AddWmsConfigPrint,
        method: 'post',
        data: params
    });
// åˆ é™¤æ‰“印配置表
export const deleteWmsConfigPrint = (params?: any) =>
    request({
            url: Api.DeleteWmsConfigPrint,
            method: 'post',
            data: params
        });
// ç¼–辑打印配置表
export const updateWmsConfigPrint = (params?: any) =>
    request({
            url: Api.UpdateWmsConfigPrint,
            method: 'post',
            data: params
        });
// å¯¼å…¥æ‰“印配置表
export const importExcelWmsConfigPrint = (params?: any) =>
    request({
        url: Api.ImportExcelWmsConfigPrint,
        method: 'post',
        data: params
    });
// ä¸‹è½½å¯¼å…¥æ‰“印配置表模板
export const downloadExcelTemplateWmsConfigPrint = (params?: any) =>
    request({
            url: Api.DownloadExcelTemplateWmsConfigPrint,
            method: 'get',
            data: params,
            responseType: 'blob'
        });
// åˆ†é¡µæŸ¥è¯¢æ‰“印配置表
export const pageWmsConfigPrint = (params?: any) =>
    request({
            url: Api.PageWmsConfigPrint,
            method: 'post',
            data: params
        });
// ä¸åˆ†é¡µæŸ¥è¯¢æ‰“印配置表
export const listWmsConfigPrint = (params?: any) =>
    request({
            url: Api.ListWmsConfigPrint,
            method: 'get',
            data: params
        });
// è¯¦æƒ…打印配置表
export const detailWmsConfigPrint = (id: any) =>
    request({
            url: Api.DetailWmsConfigPrint,
            method: 'get',
            data: { id }
        });
LA24030_LuLiPackageLine_Web/src/api/main/WmsOrder/wmsOrderPurchase.ts
@@ -3,13 +3,22 @@
  AddWmsOrderPurchase = '/api/wmsOrderPurchase/add',
  DeleteWmsOrderPurchase = '/api/wmsOrderPurchase/delete',
  UpdateWmsOrderPurchase = '/api/wmsOrderPurchase/update',
  PageWmsOrderPurchase = '/api/wmsOrderPurchase/page',
  ListWmsOrderPurchase = '/api/wmsOrderPurchase/list',
  KittingList = '/api/WmsStockQuan/KittingList', ///api/wmsOrderPurchase/page
  packList = '/api/WmsStockQuan/packList', ///api/wmsOrderPurchase/page
  ListWmsOrderPurchase = '/api/wmsStockQuan/list',
  DetailWmsOrderPurchase = '/api/wmsOrderPurchase/detail',
  ImportExcelWmsOrderPurchase = '/api/wmsOrderPurchase/importExcel',
  DownloadExcelTemplateWmsOrderPurchase = '/api/wmsOrderPurchase/downloadExcelTemplate',
  DownloadExcelTemplateWmsOrderPurchaseAll = '/api/wmsOrderPurchase/pOOrderExcelOutting',
}
// åˆ†é¡µæŸ¥è¯¢PO单
export const pageWmsOrderPurchase = (params?: any) =>
    request({
            url: Api.ListWmsOrderPurchase,
            method: 'get',
            data: params,
        });
// å¢žåŠ PO单
export const addWmsOrderPurchase = (params?: any) =>
@@ -35,14 +44,24 @@
            data: params,
        });
// åˆ†é¡µæŸ¥è¯¢PO单
export const pageWmsOrderPurchase = (params?: any) =>
// é½åŒ…
export const packList = (params?: any) =>
    request({
            url: Api.PageWmsOrderPurchase,
            method: 'post',
            url: Api.packList,
            method: 'get',
            data: params,
        });
        // é½å¥—
export const KittingList = (params?: any) =>
    request({
            url: Api.KittingList,
            method: 'get',
            data: params,
        });
// ä¸åˆ†é¡µæŸ¥è¯¢PO单
export const listWmsOrderPurchase = (params?: any) => 
    request({
LA24030_LuLiPackageLine_Web/src/api/main/WmsOrder/wmsOrderPurchaseDetails.ts
@@ -3,7 +3,7 @@
  AddWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/add',
  DeleteWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/delete',
  UpdateWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/update',
  PageWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/page',
  PageWmsOrderPurchaseDetails = '/api/wmsStockQuan/page',
  PageWmsOrderPurchaseDetailsForRelatedAsn = '/api/WmsOrderPurchaseDetails/PageForRelatedAsn',
  ListWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/list',
  DetailWmsOrderPurchaseDetails = '/api/wmsOrderPurchaseDetails/detail',
@@ -33,7 +33,7 @@
            data: params,
        });
// åˆ†é¡µæŸ¥è¯¢PO单明细
// 88888888
export const pageWmsOrderPurchaseDetails = (params?: any) => 
    request({
            url: Api.PageWmsOrderPurchaseDetails,
LA24030_LuLiPackageLine_Web/src/api/main/wmsConfigPrint/wmsConfigPrint.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
import request from '/@/utils/request';
enum Api {
  AddWmsConfigPrint = '/api/wmsConfigPrint/add',
  DeleteWmsConfigPrint = '/api/wmsConfigPrint/delete',
  UpdateWmsConfigPrint = '/api/wmsConfigPrint/update',
  PageWmsConfigPrint = '/api/wmsConfigPrint/page',
  ListWmsConfigPrint = '/api/wmsConfigPrint/list',
  DetailWmsConfigPrint = '/api/wmsConfigPrint/detail',
  ImportExcelWmsConfigPrint = '/api/wmsConfigPrint/importExcel',
  DownloadExcelTemplateWmsConfigPrint = '/api/wmsConfigPrint/downloadExcelTemplate',
}
// å¢žåŠ æ‰“å°é…ç½®è¡¨
export const addWmsConfigPrint = (params?: any) =>
    request({
        url: Api.AddWmsConfigPrint,
        method: 'post',
        data: params
    });
// åˆ é™¤æ‰“印配置表
export const deleteWmsConfigPrint = (params?: any) =>
    request({
            url: Api.DeleteWmsConfigPrint,
            method: 'post',
            data: params
        });
// ç¼–辑打印配置表
export const updateWmsConfigPrint = (params?: any) =>
    request({
            url: Api.UpdateWmsConfigPrint,
            method: 'post',
            data: params
        });
// å¯¼å…¥æ‰“印配置表
export const importExcelWmsConfigPrint = (params?: any) =>
    request({
        url: Api.ImportExcelWmsConfigPrint,
        method: 'post',
        data: params
    });
// ä¸‹è½½å¯¼å…¥æ‰“印配置表模板
export const downloadExcelTemplateWmsConfigPrint = (params?: any) =>
    request({
            url: Api.DownloadExcelTemplateWmsConfigPrint,
            method: 'get',
            data: params,
            responseType: 'blob'
        });
// åˆ†é¡µæŸ¥è¯¢æ‰“印配置表
export const pageWmsConfigPrint = (params?: any) =>
    request({
            url: Api.PageWmsConfigPrint,
            method: 'post',
            data: params
        });
// ä¸åˆ†é¡µæŸ¥è¯¢æ‰“印配置表
export const listWmsConfigPrint = (params?: any) =>
    request({
            url: Api.ListWmsConfigPrint,
            method: 'get',
            data: params
        });
// è¯¦æƒ…打印配置表
export const detailWmsConfigPrint = (id: any) =>
    request({
            url: Api.DetailWmsConfigPrint,
            method: 'get',
            data: { id }
        });
LA24030_LuLiPackageLine_Web/src/theme/index.scss
@@ -3,7 +3,7 @@
@import 'common/transition.scss';
@import './other.scss';
@import './element.scss';
@import './media/media.scss';
// @import './media/media.scss';
@import './waves.scss';
@import './dark.scss';
@import './iconfont/font_2298093_rnp72ifj3ba.scss';
LA24030_LuLiPackageLine_Web/src/views/home/index.vue
@@ -1,12 +1,12 @@
<template>
    <div class="home-container layout-pd">
        <el-row :gutter="15" class="home-card-one mb15">
        <el-row :gutter="15" class="home-card-one mb15">
            <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" class="home-media home-media-lg">
                <div class="home-card-item flex">
                    <div class="flex-margin flex w100" :class="` home-one-animation${1}`">
                        <div class="flex-auto">
                            <span class="ml5 font16">当日订单总数</span>
                            <div class="font30">{{state.orderNum}}</div>
                            <div class="font30">{{ state.orderNum }}</div>
                        </div>
                    </div>
                </div>
@@ -14,13 +14,13 @@
            <el-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8" v-for="(v, k) in state.homeOne" :key="k" :class="{ 'home-media home-media-lg': k > 1, 'home-media-sm': k === 1 }">
                <div class="home-card-item flex">
                    <div class="flex-margin flex w100" :class="` home-one-animation${k}`">
                        <div class="flex-auto">
                        <div class="flex-auto">
                            <div class="mt10">{{ v.num3 }}</div>
                            <span class="font30">{{ v.num2 }}</span>
                            <div class="font16" :style="{ color: v.color1 }">已完成{{ v.num1 }}</div>
                            <div class="font16" :style="{ color: v.color1 }">已完成{{ v.num1 }}</div>
                        </div>
                        <div class="home-card-item-icon flex">
                            <el-progress type="circle" width="80" :stroke-width="10" :percentage="v.numA" :color="v.color1"/>
                            <el-progress type="circle" width="80" :stroke-width="10" :percentage="v.numA" :color="v.color1" />
                        </div>
                    </div>
                </div>
@@ -33,7 +33,6 @@
                </div>
            </el-col>
            <el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="8" class="home-media">
                <div class="home-card-item">
                    <div class="home-card-item-title">快捷导航工具</div>
                    <div class="home-monitor">
@@ -50,36 +49,34 @@
                        </div>
                    </div>
                </div>
            </el-col>
        </el-row>
        <el-row :gutter="15" class="home-card-three">
            <el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="8">
                <div class="home-card-item">
                <div class="home-card-item">
                    <div style="height: 100%" ref="homePieRef"></div>
                </div>
            </el-col>
            <el-col :xs="24" :sm="14" :md="14" :lg="16" :xl="16" class="home-media">
                <div class="home-card-item" >
                    <el-tabs v-model="activeName" @tab-click="handleClick" :lazy="true">
                <div class="home-card-item">
                    <el-tabs v-model="activeName" @tab-click="handleClick" :lazy="true">
                        <el-tab-pane label="日" name="1">
                            <div class="home-card-item" >
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName=='1'"></div>
                            <div class="home-card-item">
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName == '1'"></div>
                            </div>
                        </el-tab-pane>
                        <el-tab-pane label="周" name="2">
                            <div class="home-card-item" >
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName=='2'"></div>
                            <div class="home-card-item">
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName == '2'"></div>
                            </div>
                        </el-tab-pane>
                        <el-tab-pane label="月" name="3">
                            <div class="home-card-item" >
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName=='3'"></div>
                            <div class="home-card-item">
                                <div style="height: 100%" ref="homeBarRef" id="homeBarRef" v-if="activeName == '3'"></div>
                            </div>
                        </el-tab-pane>
                    </el-tabs>
                </div>
                </div>
            </el-col>
        </el-row>
    </div>
@@ -91,105 +88,105 @@
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import { wmsStockPassMap,wmsHomePageQuery,wmsHomePlaceQuery,wmsTransitionDiagramQuery } from '/@/api/main/inventoryWarning/inventoryWarning';
import type { TabsPaneContext } from 'element-plus'
import { wmsStockPassMap, wmsHomePageQuery, wmsHomePlaceQuery, wmsTransitionDiagramQuery } from '/@/api/main/inventoryWarning/inventoryWarning';
import type { TabsPaneContext } from 'element-plus';
import { useRoute, useRouter } from 'vue-router';
const router = useRouter();
// æŽ¥å£æ•°æ®
const loadingwms = ref(false);
// æŸ¥è¯¢
const handleQuery1 = async () => {
    loadingwms.value = true;
    var res = await wmsHomePageQuery();
    if(res.data.type=="success"){
        let result = res.data.result || [];
        state.orderNum = result.allOrderNumber || 0
        state.homeOne[0].num1 = result.outtingPlaceNumber || 0
        state.homeOne[0].num2 = result.allOuttingNumber || 0
        state.homeOne[0].numA = Math.round((result.outtingPlaceNumber || 0) / (result.allOuttingNumber || 0) * 10000) / 100 || 0
        state.homeOne[1].num1 = result.warehousingNumber || 0
        state.homeOne[1].num2 = result.allWarehousingNumber || 0
        state.homeOne[1].numA = Math.round((result.warehousingNumber || 0) / (result.allWarehousingNumber || 0)* 10000) / 100 || 0
    }
    loadingwms.value = false;
    loadingwms.value = true;
    // var res = await wmsHomePageQuery();
    // if(res.data.type=="success"){
    //     let result = res.data.result || [];
    //     state.orderNum = result.allOrderNumber || 0
    //     state.homeOne[0].num1 = result.outtingPlaceNumber || 0
    //     state.homeOne[0].num2 = result.allOuttingNumber || 0
    //     state.homeOne[0].numA = Math.round((result.outtingPlaceNumber || 0) / (result.allOuttingNumber || 0) * 10000) / 100 || 0
    //     state.homeOne[1].num1 = result.warehousingNumber || 0
    //     state.homeOne[1].num2 = result.allWarehousingNumber || 0
    //     state.homeOne[1].numA = Math.round((result.warehousingNumber || 0) / (result.allWarehousingNumber || 0)* 10000) / 100 || 0
    // }
    loadingwms.value = false;
};
const handleQuery2 = async () => {
loadingwms.value = true;
var res = await wmsHomePlaceQuery();
if(res.data.type=="success"){
    let result = res.data.result || {};
    nextTick(() => {
        setTimeout(() => {
            initPieChart(result);
        }, 500);
    });
}
loadingwms.value = false;
    loadingwms.value = true;
    // var res = await wmsHomePlaceQuery();
    // if (res.data.type == 'success') {
    //     let result = res.data.result || {};
    //     nextTick(() => {
    //         setTimeout(() => {
    //             initPieChart(result);
    //         }, 500);
    //     });
    // }
    loadingwms.value = false;
};
const dataAll = ref({
    arr1:[],
    arr2:[],
    arr3:[],
    arr4:[],
    arr5:[]
})
const handleQuery3 = async (val:any) => {
    arr1: [],
    arr2: [],
    arr3: [],
    arr4: [],
    arr5: [],
});
const handleQuery3 = async (val: any) => {
    dataAll.value.arr1 = [];
    dataAll.value.arr2 = [];
    dataAll.value.arr3 = [];
    dataAll.value.arr4 = [];
    dataAll.value.arr5 = [];
    loadingwms.value = true;
    let para = {DayOrWeekOrMonth:Number(val)}
    let para = { DayOrWeekOrMonth: Number(val) };
    var res = await wmsStockPassMap(para);
    if(res.data.type=="success"){
    if (res.data.type == 'success') {
        let result = res.data.result || [];
        result.forEach((item:any,index:number) => {
            dataAll.value.arr1.push({value:item.inWare,stationName:'s'+item.time})
            dataAll.value.arr2.push({value:item.outWare,stationName:'s'+item.time})
            dataAll.value.arr3.push({value:item.stockNum,stationName:'s'+item.time})
            dataAll.value.arr4.push({value:item.aveStockNum,stationName:'s'+item.time})
            dataAll.value.arr5.push(item.date)
        })
        result.forEach((item: any, index: number) => {
            dataAll.value.arr1.push({ value: item.inWare, stationName: 's' + item.time });
            dataAll.value.arr2.push({ value: item.outWare, stationName: 's' + item.time });
            dataAll.value.arr3.push({ value: item.stockNum, stationName: 's' + item.time });
            dataAll.value.arr4.push({ value: item.aveStockNum, stationName: 's' + item.time });
            dataAll.value.arr5.push(item.date);
        });
        nextTick(() => {
            setTimeout(() => {
                if (!state.global.dispose.some((b: any) => b === state.global.homeCharThree)) state.global.homeCharThree.dispose();
                initChart()
                initChart();
            }, 500);
        });
    }
    loadingwms.value = false;
};
const handleQuery4 = async () => {
loadingwms.value = true;
var res = await wmsTransitionDiagramQuery();
if(res.data.type=="success"){
    let arr1: any[] = [];
    let arr2: any = [];
    let arrA: any = [];
    let result = res.data.result || [];
    result.forEach((item:any,index:number) => {
        arr1.push(item.receiptNumber)
        arr2.push(item.deliveryNumber)
        arrA.push(item.day.slice(0, 10))
    })
    nextTick(() => {
        setTimeout(() => {
            initLineChart(arr1,arr2,arrA);
        }, 500);
    });
}
loadingwms.value = false;
};
handleQuery1();
handleQuery2();
handleQuery3('1');
handleQuery4();
const activeName = ref('1')
    loadingwms.value = true;
    var res = await wmsTransitionDiagramQuery();
    if (res.data.type == 'success') {
        let arr1: any[] = [];
        let arr2: any = [];
        let arrA: any = [];
        let result = res.data.result || [];
        result.forEach((item: any, index: number) => {
            arr1.push(item.receiptNumber);
            arr2.push(item.deliveryNumber);
            arrA.push(item.day.slice(0, 10));
        });
        nextTick(() => {
            setTimeout(() => {
                initLineChart(arr1, arr2, arrA);
            }, 500);
        });
    }
    loadingwms.value = false;
};
// handleQuery1();
// handleQuery2();
// handleQuery3('1');
// handleQuery4();
const activeName = ref('1');
const handleClick = (tab: TabsPaneContext, event: Event) => {
  handleQuery3(tab.props.name);
}
    handleQuery3(tab.props.name);
};
// å®šä¹‰å˜é‡å†…容
const homeLineRef = ref();
@@ -200,7 +197,7 @@
const { themeConfig } = storeToRefs(storesThemeConfig);
const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
const state = reactive({
    orderNum:{},
    orderNum: {},
    global: {
        homeChartOne: null,
        homeChartTwo: null,
@@ -211,7 +208,7 @@
        {
            num1: '0',
            num2: '0',
            numA:0,
            numA: 0,
            num3: '出库单数',
            num4: 'fa fa-meetup',
            color1: '#FF6462',
@@ -222,7 +219,7 @@
        {
            num1: '0',
            num2: '0',
            numA:0,
            numA: 0,
            num3: '入库单数',
            num4: 'iconfont icon-ditu',
            color1: '#6690F9',
@@ -254,7 +251,7 @@
            // label: '浅粉红',
            label: '基础数据',
            value: '库位信息',
            route:'/wmsbase/wmsplace',
            route: '/wmsbase/wmsplace',
            // value: '2.1%OBS/M',
            iconColor: '#F72B3F',
        },
@@ -263,7 +260,7 @@
            // label: '深红(猩红)',
            label: '单据管理',
            value: '上架单',
            route:'/wmsOrder/wmsordermovement',
            route: '/wmsOrder/wmsordermovement',
            // value: '30℃',
            iconColor: '#91BFF8',
        },
@@ -273,7 +270,7 @@
            // label: '淡紫红',
            // value: '57%RH',
            value: '库位视图',
            route:'/reportCenter/storageView',
            route: '/reportCenter/storageView',
            iconColor: '#88D565',
        },
        {
@@ -282,7 +279,7 @@
            label: '盘点管理',
            value: '盘点单据',
            // value: '107w',
            route:'/Check/wmsinventorycheckorder',
            route: '/Check/wmsinventorycheckorder',
            iconColor: '#88D565',
        },
        {
@@ -291,7 +288,7 @@
            // label: '中紫罗兰红',
            value: '跟踪码打印',
            // value: '57DB',
            route:'/printCenter/wmsstockquanPrint',
            route: '/printCenter/wmsstockquanPrint',
            iconColor: '#FBD4A0',
        },
        // {
@@ -328,7 +325,7 @@
});
// æŠ˜çº¿å›¾
const initLineChart = (arr1:any,arr2:any,arrA:any) => {
const initLineChart = (arr1: any, arr2: any, arrA: any) => {
    if (!state.global.dispose.some((b: any) => b === state.global.homeChartOne)) state.global.homeChartOne.dispose();
    state.global.homeChartOne = markRaw(echarts.init(homeLineRef.value, state.charts.theme));
    const option = {
@@ -410,21 +407,21 @@
    state.myCharts.push(state.global.homeChartOne);
};
// é¥¼å›¾
const initPieChart = (arr:any) => {
    if(arr==null) return false;
const initPieChart = (arr: any) => {
    if (arr == null) return false;
    if (!state.global.dispose.some((b: any) => b === state.global.homeChartTwo)) state.global.homeChartTwo.dispose();
    state.global.homeChartTwo = markRaw(echarts.init(homePieRef.value, state.charts.theme));
    var getname = ['空库位数量', '空容器库位数量', '存货数量','总库位:1000'];
    var getvalue = [arr.emptyPlaceNumber,arr.containerPlaceNumber, arr.stockPlaceNumber];
    var getname = ['空库位数量', '空容器库位数量', '存货数量', '总库位:1000'];
    var getvalue = [arr.emptyPlaceNumber, arr.containerPlaceNumber, arr.stockPlaceNumber];
    var data = [];
    for (var i = 0; i < getname.length-1; i++) {
    for (var i = 0; i < getname.length - 1; i++) {
        data.push({ name: getname[i], value: getvalue[i] });
    }
    const colorList = ['#51A3FC', '#36C78B', '#FEC279', '#968AF5', '#E790E8'];
    const option = {
        backgroundColor: state.charts.bgColor,
        title: {
            text: '库位占比  æ€»åº“位:'+arr.allPlaceNumber,
            text: '库位占比  æ€»åº“位:' + arr.allPlaceNumber,
            x: 'left',
            textStyle: { fontSize: '15', color: state.charts.color },
        },
@@ -506,7 +503,7 @@
    },
    tooltip: { trigger: 'axis' },
    //legend: { data: ['入库','出库', '库存', '平均'], right: 0 },
    legend: { data: ['上架','下架'], right: 0 },
    legend: { data: ['上架', '下架'], right: 0 },
    grid: { top: 50, right: 80, bottom: 100, left: 60 },
    // grid: { top: 70, right: 80, bottom: 30, left: 80 },
    xAxis: [
@@ -514,7 +511,7 @@
            type: 'category',
            // data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
            // data:dataAll.value.arr5,
            data:[],
            data: [],
            boundaryGap: true,
            axisTick: { show: false },
        },
@@ -568,7 +565,7 @@
            //     { value: 2, stationName: 's6' },
            // ],
            // data:dataAll.value.arr1
            data:[],
            data: [],
        },
        {
            name: '下架',
@@ -595,7 +592,7 @@
                color: '#3bbc86',
            },
            // data:dataAll.value.arr2
            data:[],
            data: [],
        },
        // {
        //     name: '平均',
@@ -637,22 +634,22 @@
};
const initChart = () => {
    if (!state.global.dispose.some((b: any) => b === state.global.homeCharThree)) state.global.homeCharThree.dispose();
    const chart = document.getElementById("homeBarRef")
    if (chart!=null) chart.removeAttribute('_echarts_instance_')//解决切换页面echarts不显示的问题
    const chart = document.getElementById('homeBarRef');
    if (chart != null) chart.removeAttribute('_echarts_instance_'); //解决切换页面echarts不显示的问题
    state.global.homeCharThree = markRaw(echarts.init(chart, state.charts.theme));
    //手动赋值
    option.xAxis[0].data = dataAll.value.arr5
    option.series[0].data = dataAll.value.arr1
    option.series[1].data = dataAll.value.arr2
    option.xAxis[0].data = dataAll.value.arr5;
    option.series[0].data = dataAll.value.arr1;
    option.series[1].data = dataAll.value.arr2;
    // option.series[2].data = dataAll.value.arr3
    // option.series[3].data = dataAll.value.arr4
    // ç»˜åˆ¶å›¾è¡¨
    state.global.homeCharThree.setOption(option);
    state.myCharts.push(state.global.homeCharThree);
}
    state.myCharts.push(state.global.homeCharThree);
};
// æ‰¹é‡è®¾ç½® echarts resize
const routerJupm = (v:any) => {
const routerJupm = (v: any) => {
    router.push(v.route);
};
@@ -675,21 +672,21 @@
let timeInter: any = null;
// é¡µé¢åŠ è½½æ—¶
onMounted(() => {
    initEchartsResize();
    // initEchartsResize();
    timeInter = setInterval(() => {
        nextTick(() => {
            handleQuery1();
            handleQuery2();
            handleQuery3('1');
            handleQuery4();
        });
    }, 15000); //调用频率改为 15秒一次查询。
    // timeInter = setInterval(() => {
    //     nextTick(() => {
    //         handleQuery1();
    //         handleQuery2();
    //         handleQuery3('1');
    //         handleQuery4();
    //     });
    // }, 15000); //调用频率改为 15秒一次查询。
});
onUnmounted(() => {
  clearInterval(timeInter); //销毁
  timeInter = null;
    clearInterval(timeInter); //销毁
    timeInter = null;
});
// ç”±äºŽé¡µé¢ç¼“存原因,keep-alive
@@ -727,8 +724,6 @@
        immediate: true,
    }
);
</script>
<style scoped lang="scss">
@@ -832,4 +827,4 @@
    color: var(--el-text-color-primary);
    border: 1px solid var(--next-border-color-light);
}
</style>
</style>
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/ContentView.vue
@@ -1,61 +1,63 @@
<template>
    <div>
        <div v-for="(itemW,indexW) in storageList" :key="indexW">
            <p> å··é“:{{itemW.laneCode}}</p>
            <div v-for="(itemIN,indexIN) in itemW.rows" :key="indexIN" >
                    <div class="content-view" >
                        <!-- æ¯ä¸ªåº“位方块     æŸ¥è¯¢åº“位全部库存 -->
                        <div class="mask100" v-for="(itemSmall,itemSmallIndex) in itemIN.rowLocations2" :key="itemSmallIndex">
                            <content-item v-for="item in itemSmall" :key="item.wareLocationCode" :itemData="item"
                            :index="item.wareLocationCode" @show="show(item,item.wareLocationCode)"
                            @click="openDialog(item.wareLocationCode)"
                            :class="'laneCodeBox_' + (item.showInventoryType)">
                            </content-item>
        <!-- åº“位列表 -->
                        </div>
        <div v-for="(itemW, indexW) in storageList" :key="indexW">
            <p>巷道:{{ itemW.laneCode }}</p>
            <div v-for="(itemIN, indexIN) in itemW.rows" :key="indexIN">
                <div class="content-view">
                    <!-- æ¯ä¸ªåº“位方块     æŸ¥è¯¢åº“位全部库存 -->
                    <div class="mask100" v-for="(itemSmall, itemSmallIndex) in itemIN.rowLocations2" :key="itemSmallIndex">
                        <content-item
                            v-for="item in itemSmall"
                            :key="item.wareLocationCode"
                            :itemData="item"
                            :index="item.wareLocationCode"
                            @show="show(item, item.wareLocationCode)"
                            @click="openDialog(item.wareLocationCode)"
                            :class="'laneCodeBox_' + item.showInventoryType"
                        >
                        </content-item>
                    </div>
                <div v-if="itemW.rows.length>1" class="stripe stripeM"></div>
                </div>
                <div v-if="itemW.rows.length > 1" class="stripe stripeM"></div>
            </div>
        </div>
        <!-- åº“位悬浮层 -->
        <teleport :to="'#item' + count" v-if="itemVisible">
            <div class="item-detail" v-if="!detailData.isDeleted">
                <p > {{ setKwStauts(detailData.inventoryType) }} </p>
                <p>{{ setKwStauts(detailData.inventoryType) }}</p>
                {{ containerCodeSHsow }}
            </div>
        </teleport>
        <!-- è¯¦æƒ…弹框 -->
        <prop-detail ref="propDetailRef"></prop-detail>
    </div>
</template>
<script lang="ts" setup>
import { ElMessage } from 'element-plus';
import { ref, defineProps, computed, getCurrentInstance } from 'vue'
import ContentItem from './ContentItem.vue'
import { ref, defineProps, computed, getCurrentInstance } from 'vue';
import ContentItem from './ContentItem.vue';
import PropDetail from './propDetail.vue';
const { proxy} :any = getCurrentInstance();// è®¿é—®å®žä¾‹ä¸Šä¸‹æ–‡ proxy同时支持开发 çº¿ä¸ŠçŽ¯å¢ƒ
const { proxy }: any = getCurrentInstance(); // è®¿é—®å®žä¾‹ä¸Šä¸‹æ–‡ proxy同时支持开发 çº¿ä¸ŠçŽ¯å¢ƒ
//props
const props = defineProps({
    contentData: {
        type: Array,
        required: true,
        default: []
    }
})
const containerCodeSHsow = ref('')
        default: [],
    },
});
const containerCodeSHsow = ref('');
//库位列表
const storageList: Record<any, any> = computed(() => props.contentData);
//每个库位详情的显示
const itemVisible = ref(false);
//详情数据
const detailData = ref({} as Record<string, any>)
const detailData = ref({} as Record<string, any>);
//当前选中的库位
const count = ref(String)
const count = ref(String);
//显示 éšè—è¯¦æƒ…
const show = (item: any, index: any) => {
    // console.log('item:'+JSON.stringify(item) )
@@ -64,18 +66,18 @@
        itemVisible.value = true;
        count.value = index;
        detailData.value = item;
        containerCodeSHsow.value  = item.wareContainerCode;
        containerCodeSHsow.value = item.wareContainerCode;
    } else {
        itemVisible.value = false;
        count.value = index;
        detailData.value = {};
        containerCodeSHsow.value  = "";
        containerCodeSHsow.value = '';
    }
}
};
// æ˜¾ç¤ºåº“位状态
const setKwStauts = (type: number): string => {
    let status = ''
    let status = '';
    switch (type) {
        case 0:
            status = '空库位';
@@ -87,13 +89,14 @@
            status = '有货库位(物料)';
    }
    return status;
}
};
//打开窗口
const openDialog = (type: string) => { //托盘号
const openDialog = (type: string) => {
    //托盘号
    if (!type || type == null) {
        ElMessage.warning("不存在托盘号!");
        return
        ElMessage.warning('不存在托盘号!');
        return;
    }
    proxy.$refs['propDetailRef'].openDialog(type);
};
@@ -135,7 +138,6 @@
            margin: 5px;
        }
    }
}
.stripe {
@@ -150,21 +152,20 @@
/*斑马条纹*/
.stripeM {
    background: linear-gradient(#dbd4b4 50%, #f5be6a 50%, );
    background: linear-gradient(#dbd4b4 50%, #f5be6a 50%);
    background-size: 100% 40px;
}
.laneCodeBox_0{
.laneCodeBox_0 {
    visibility: hidden;
}
.laneCodeBox_1{
.laneCodeBox_1 {
    visibility: visible;
}
.mask100{
.mask100 {
    height: 100%;
    display: flex;
    flex-direction: column-reverse;
    flex-direction: column-reverse;
}
// #item3-4-3-3,#item3-4-1-3,#item3-4-2-3,#item3-4-4-3{
//     margin-bottom: 104px;
@@ -173,5 +174,4 @@
//     margin-bottom: 149px;
// }
</style>
</style>
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/CountView.vue
@@ -1,45 +1,45 @@
<template>
    <div class="count">
        <div class="count_item" v-for="(item,index) in  countList" :key="index">
            <div class="square" :style="{background: setBgColor(item.type)}"></div>
            <span>{{item.title}}</span>
            <span class="count_num">{{item.count}}</span>
        <div class="count_item" v-for="(item, index) in countList" :key="index">
            <div class="square" :style="{ background: setBgColor(item.type) }"></div>
            <span>{{ item.title }}</span>
            <span class="count_num">{{ item.count }}</span>
        </div>
    </div>
</template>
<script lang="ts" setup>
import {  defineProps, computed } from 'vue'
import { defineProps, computed } from 'vue';
const props = defineProps({
    countData: {
        type: Array,
        required: true
    }
})
const countList: Record<any, any> = computed(() => props.countData)
//设置背景
        required: true,
    },
});
const countList: Record<any, any> = computed(() => props.countData);
//设置背景    æ­£å¸¸ = 1,  å°å­˜ = 2,   ç¦å‡º = 3,    ç¦å…¥ = 4,    é”å®š = 5
const setBgColor = (type: number): string => {
    let color = ''
    let color = '';
    switch (type) {
        case 0:
            color = '#A2A2A2';
            break;
        case 1:
            color = '#F18201';
            color = '#F18201'; //橘色  æ­£å¸¸
            break;
        case 2:
            color = '#2BA6FF';
            color = '#2BA6FF'; //蓝色 å°å­˜
            break;
        case 3:
            color = '#FFFF00';
            color = '#FFFF00'; //黄色 ç¦å‡º
            break;
        case 4:
            color = '#FF0000';
            color = '#A2A2A2'; //灰色 ç¦å…¥
            break;
        case 5:
            color = '#FF0000'; //红色  é”å®š
            break;
    }
    return color;
}
};
</script>
<style lang="less" scoped>
.count {
@@ -70,4 +70,4 @@
        }
    }
}
</style>
</style>
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/component/±¸·Ýindex.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,399 @@
<template>
  <div>
      <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
        <el-form :model="formModel" ref="queryForm" labelWidth="90">
          <el-row>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="formModel.searchKey" clearable=""
                placeholder="库位编号,容器编号" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
                        <el-form-item label="所在库区" prop="areaCode">
                            <el-select v-model="formModel.areaCode" placeholder="请选择所在库区">
                                <el-option v-for="(item,index) in arr1"  :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
              <el-form-item label="库位编号:">
                <el-input v-model.trim="formModel.WareLocationCode" placeholder="请输入库位编号" clearable></el-input>
              </el-form-item>
            </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
              <el-form-item label="容器编号:">
                <el-input v-model.trim="formModel.WareContainerCode" placeholder="请输入容器编号" clearable></el-input>
              </el-form-item>
            </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
              <el-form-item label="库位状态:">
                <el-select v-model="formModel.inventoryType" clearable placeholder="请选择库位状态"  style="width: 100%;">
                  <el-option v-for="item in storageStatusEnum" :key="item.value" :label="item.title"
                    :value="item.value" />
                </el-select>
              </el-form-item>
            </el-col>
            <!-- éšè—çš„筛选条件 -->
            <!-- <template>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item label="锁定状态:">
                  <el-select v-model="formModel.isLocked" clearable placeholder="请选择锁定状态">
                    <el-option v-for="item in isAutoEnum" :key="item.value" :label="item.title" :value="item.value" />
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item label="巷道:">
                  <el-select v-model="formModel.Lane" clearable placeholder="请选择巷道">
                    <el-option v-for="item in LangEnum" :key="item.value" :label="item.title" :value="item.value" />
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item label="所属排:">
                  <el-select v-model="formModel.Row" clearable placeholder="请选择所属排">
                    <el-option v-for="(item, index) in strorageRowEnum" :key="item" :label="`第${index + 1}排`"
                      :value="index + 1" />
                  </el-select>
                </el-form-item>
              </el-col>
            </template> -->
            <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
              <el-form-item label-width="20px">
                <el-button type="primary" icon="el-icon-search" @click="getLocationPage(2)">查询</el-button>
                <el-button icon="ele-Refresh" @click="() => formModel = {}"> é‡ç½® </el-button>
              </el-form-item>
            </el-col> -->
            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center">
                <el-button type="primary" icon="ele-Search" @click="getLocationPage(2)">
                  æŸ¥è¯¢
                </el-button>
                <el-button icon="ele-Refresh" @click="() => formModel = {}">
                  é‡ç½®
                </el-button>
                <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan"
                  v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px">
                  é«˜çº§æŸ¥è¯¢
                </el-button>
                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan"
                  v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px">
                  éšè—
                </el-button>
              </el-button-group>
            </el-form-item>
          </el-col>
          </el-row>
        </el-form>
      </el-card>
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
  <div class="msi-content" style="height:calc(100vh - 200px)">
<div>
  <p>1#立体库</p>
    <div class="storage-grid">
    <!-- éåŽ†æ¯ä¸€æŽ’ -->
    <div class="row" :class="'rowMy' + rowIndex" v-for="(row, rowIndex) in storageList" :key="rowIndex">
      <!-- éåŽ†æ¯ä¸€å— -->
      <div class="cell " v-for="(cell, cellIndex) in row" :key="cellIndex">
        {{ cell }} <!-- æ˜¾ç¤ºæ¯ä¸ªåº“位的内容 -->
      </div>
    </div>
  </div>
</div>
      <!-- ç»Ÿè®¡åŒºåŸŸ -->
      <count-view :countData="countList"></count-view>
      <!-- åº“位展示 -->
      <content-view :contentData="dataList"></content-view>
    </div>
</el-card>
  </div>
</template>
<script lang="ts" setup>
import { nextTick, onMounted, ref } from 'vue'
//import SearchBar from '@/components/SearchBar.vue'
import { getStorageView } from '/@/api/main/ReportCenter/storageView';
import CountView from './component/CountView.vue'
import ContentView from './component/ContentView.vue'
import { ElMessage } from 'element-plus';
import { handleSlectDataWmsArea } from '/@/utils/selectData';
const showAdvanceQueryUIWmsStockQuan = ref(false);
// æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
const changeAdvanceQueryUIWmsStockQuan = () => {
  showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
};
const LangEnum = ref([  // æ‰€å±žå··é“
  {
    value: '1',
    title: '1巷道'
  },
  {
    value: '2',
    title: '2巷道'
  },
  {
    value: '3',
    title: '3巷道'
  }
])
const isAutoEnum: any[] = [
  {
    title: '否',
    value: 0
  },
  {
    title: '是',
    value: 1
  }
]
//库位状态
const storageStatusEnum = ref([
  {
    value: '0',
    title: '空库位'
  },
  {
    value: '1',
    title: '空容器库位'
  },
  {
    value: '2',
    title: '有货库位'
  },
])
const strorageRowEnum = ref<any>([]) // æ‰€å±žæŽ’
//列表请求数据
const formModel = ref({
  Lane: '',
  Row: '',
  MaterialCode: '',
  inventoryType: '',
  ShelfCode: '',
  Code: '',
  ContainerCode: '',
  Status: '',
  isLocked: '',
  areaCode:"A2",
  PageNo: 1,
  PageSize: 10000
})
//库位列表数据
const dataList = ref([]);
//统计的数据
const countList = ref([
  {
    type: 0,
    title: '空库位:',
    count: 0
  },
  {
    type: 1,
    title: '有货库位(空容器):',
    count: 0
  },
  {
    type: 2,
    title: '有货库位(物料):',
    count: 0
  },
  // {
  //   type: 3,
  //   title: '锁定库位:',
  //   count: 0
  // },
  // {
  //   type: 4,
  //   title: '禁用库位:',
  //   count: 0
  // }
]);
// æŒ‰ç…§è¡Œåˆ—相同进行分组
const sortClass = (sortData: any) => {
  const groupBy = (array: any, f: any) => {
    let groups = {};
    array.forEach((o) => {
      let group = JSON.stringify(f(o));
      groups[group] = groups[group] || [];
      groups[group].push(o);
    });
    return Object.keys(groups).map((group) => {
      return groups[group];
    });
  };
  const sorted = groupBy(sortData, (item) => {
    return item.lane + '-' + item.column; // è¿”回需要分组的对象
  });
  return sorted;
};
// åˆ†ç»„前
// console.log(listData);
// åˆ†ç»„后
// console.log(sortClass(listData));
//库位图列表
const getLocationPage = async (param?: any) => {
  if (param && param == 2) {
    if (formModel.value.Lane == "" && formModel.value.Row != "") {
      ElMessage.warning("请选择所属巷道!")
      return
    }
  }
  if(!formModel.value.areaCode){
    ElMessage.warning("请选择所在库区!")
    return
  }
  var res = await getStorageView(Object.assign(formModel.value, {}));
  if (res.data.code == 200) {
    const { data } = res;
    const result = data.result;
    strorageRowEnum.value = new Array(4).fill(0);
    countList.value[0].count = result.emptyLocation || 0;    //空库位
    countList.value[1].count = result.emptyContainerLocation || 0;   //空容器库位
    countList.value[2].count = result.materialLocation || 0;  //有货库位
    // countList.value[3].count = result.lockedLocation || 0; //锁定库位
    // countList.value[4].count = result.disableLocation || 0; //禁用库位
    debugger
    if (res.data.result.lanes) {
      res.data.result.lanes.forEach((element: any) => {
        element.rows.forEach((item: any) => {
          item.rowLocations2 = sortClass(item.rowLocations)
        })
      });
    }
    dataList.value = res.data.result.lanes;
  }
}
getLocationPage()
const resetFormModel = JSON.parse(JSON.stringify(formModel.value));
//重置搜索
const resetForm = () => {
  formModel.value = JSON.parse(JSON.stringify(resetFormModel));
  // getLocationPage()
};
let arr1:any =ref("") //下拉读取接口
// é¡µé¢åŠ è½½æ—¶
onMounted(async () => {
  nextTick(async () => {
    arr1.value = await handleSlectDataWmsArea({
      page: 1,
            pageSize: 1000,
            total: 0,
            IsDisabled:false,
      isVirtually:false,
      areaType:1 //立体库
    }); //下拉读取接口
  });
});
//==================88888888888888======================
const storageList = ref([]); // ç”¨äºŽå­˜æ”¾åº“位的数组
onMounted(() => {
  initializeStorage(); // åœ¨ç»„件挂载后初始化库位数据
});
function initializeStorage() {
  const rows = 3; // æ€»æŽ’æ•°
  const cellsPerRow = 20; // æ¯æŽ’的格子数
  for (let i = 0; i < rows; i++) {
    let row = []; // æ¯æŽ’的格子数组
    for (let j = 1; j <= cellsPerRow; j++) {
      // æ ¹æ®è¡Œæ•°å’Œåˆ—数生成库位名称
      row.push(` ${(i * cellsPerRow) + j}`);
    }
    storageList.value.push(row); // å°†æ¯æŽ’的库位数组推入总数组
  }
}
</script>
<style lang="less" scoped>
.msi-content {
  overflow: auto;
}
.storage-grid {
  width: 48%;
  display: flex;
  flex-direction: column; /* åž‚直排列每一排 */
}
.row {
  display: flex; /* æ°´å¹³æŽ’列每一行 */
}
.cell {
  border: 1px solid black; /* æ¯ä¸ªæ ¼å­çš„黑线 */
  flex: 1; /* æ¯ä¸ªæ ¼å­å®½åº¦ç›¸ç­‰ */
  height: 50px; /* æ¯ä¸ªæ ¼å­çš„高度 */
  display: flex;
  justify-content: center;
  align-items: center; /* å±…中显示内容 */
}
.rowMy0 {
  // background-color: #f9f9f9; /* ç¬¬ä¸€æŽ’的背景色 */
  div{
    height: 120px;
  }
}
.rowMy1 {
  // background-color: #eeeeee; /* ç¬¬äºŒæŽ’的背景色 */
  div{
    height: 50px;
  }
}
.rowMy2 {
  // background-color: #dddddd; /* ç¬¬ä¸‰æŽ’的背景色 */
  div{
    height: 80px;
  }
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/ReportCenter/storageView/index.vue
@@ -1,45 +1,43 @@
<template>
  <div>
      <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
        <el-form :model="formModel" ref="queryForm" labelWidth="90">
          <el-row>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="formModel.searchKey" clearable=""
                placeholder="库位编号,容器编号" />
            </el-form-item>
          </el-col>
    <div>
        <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
            <el-form :model="formModel" ref="queryForm" labelWidth="90">
                <el-row>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                        <el-form-item label="关键字">
                            <el-input v-model="formModel.searchKey" clearable="" placeholder="库位编号,容器编号" />
                        </el-form-item>
                    </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
                        <el-form-item label="所在库区" prop="areaCode">
                            <el-select v-model="formModel.areaCode" placeholder="请选择所在库区">
                                <el-option v-for="(item,index) in arr1"  :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
                                <el-option v-for="(item, index) in arr1" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
              <el-form-item label="库位编号:">
                <el-input v-model.trim="formModel.WareLocationCode" placeholder="请输入库位编号" clearable></el-input>
              </el-form-item>
            </el-col>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
                        <el-form-item label="库位编号:">
                            <el-input v-model.trim="formModel.WareLocationCode" placeholder="请输入库位编号" clearable></el-input>
                        </el-form-item>
                    </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
              <el-form-item label="容器编号:">
                <el-input v-model.trim="formModel.WareContainerCode" placeholder="请输入容器编号" clearable></el-input>
              </el-form-item>
            </el-col>
            <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
              <el-form-item label="库位状态:">
                <el-select v-model="formModel.inventoryType" clearable placeholder="请选择库位状态"  style="width: 100%;">
                  <el-option v-for="item in storageStatusEnum" :key="item.value" :label="item.title"
                    :value="item.value" />
                </el-select>
              </el-form-item>
            </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
                        <el-form-item label="容器编号:">
                            <el-input v-model.trim="formModel.WareContainerCode" placeholder="请输入容器编号" clearable></el-input>
                        </el-form-item>
                    </el-col>
            <!-- éšè—çš„筛选条件 -->
            <!-- <template>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                        <el-form-item label="库位状态:">
                            <el-select v-model="formModel.inventoryType" clearable placeholder="请选择库位状态" style="width: 100%">
                                <el-option v-for="item in storageStatusEnum" :key="item.value" :label="item.title" :value="item.value" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <!-- éšè—çš„筛选条件 -->
                    <!-- <template>
              <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                <el-form-item label="锁定状态:">
                  <el-select v-model="formModel.isLocked" clearable placeholder="请选择锁定状态">
@@ -64,176 +62,228 @@
                </el-form-item>
              </el-col>
            </template> -->
            <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
                    <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
              <el-form-item label-width="20px">
                <el-button type="primary" icon="el-icon-search" @click="getLocationPage(2)">查询</el-button>
                <el-button icon="ele-Refresh" @click="() => formModel = {}"> é‡ç½® </el-button>
              </el-form-item>
            </el-col> -->
                    <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
                        <el-form-item>
                            <el-button-group style="display: flex; align-items: center">
                                <el-button type="primary" icon="ele-Search" @click="getLocationPage(2)"> æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-Refresh" @click="() => (formModel = {})"> é‡ç½® </el-button>
                                <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan" v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px"> é«˜çº§æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan" v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px"> éšè— </el-button>
                            </el-button-group>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
        </el-card>
            <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center">
                <el-button type="primary" icon="ele-Search" @click="getLocationPage(2)">
                  æŸ¥è¯¢
                </el-button>
                <el-button icon="ele-Refresh" @click="() => formModel = {}">
                  é‡ç½®
                </el-button>
                <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan"
                  v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px">
                  é«˜çº§æŸ¥è¯¢
                </el-button>
                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan"
                  v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px">
                  éšè—
                </el-button>
              </el-button-group>
            </el-form-item>
          </el-col>
        <el-card class="full-table" shadow="hover" style="margin-top: 5px">
            <div class="msi-content" style="height: calc(100vh - 200px)">
                <div class="box100">
                    <div v-for="(item, index) in dataList" :key="index" class="box100Inner">
                        <p class="t1">{{ item.laneNo }}#立体库</p>
                        <div class="storage-grid">
                            <div class="row rowMy0">
                                <div class="cell" v-for="(cell, cellIndex) in item.data" :key="cellIndex" v-show="cellIndex < 20">
                                    <span class="textK"
          </el-row>
                  :style="{ background: setBgColor(cell.placeStatus), boxShadow: '0 1px 1px' + setBgColor(cell.placeStatus) }"
                  >
                                        {{ cell.laneNo }}{{ cell.layerNo }}{{ cell.columnNo }}
                                    </span>
                                </div>
                            </div>
                            <div class="row rowMy1">
                                <div class="cell" v-for="(cell, cellIndex) in item.data" :key="cellIndex" v-show="cellIndex >= 20 && cellIndex < 40">
                                    <span class="textK"   :style="{ background: setBgColor(cell.placeStatus), boxShadow: '0 1px 1px' + setBgColor(cell.placeStatus) }">
                                        {{ cell.laneNo }}{{ cell.layerNo }}{{ cell.columnNo }}
                                    </span>
                                </div>
                            </div>
                            <div class="row rowMy2">
                                <div class="cell" v-for="(cell, cellIndex) in item.data" :key="cellIndex" v-show="cellIndex >= 40 && cellIndex <= 60">
                                    <span class="textK"   :style="{ background: setBgColor(cell.placeStatus), boxShadow: '0 1px 1px' + setBgColor(cell.placeStatus) }">
                                        {{ cell.laneNo }}{{ cell.layerNo }}{{ cell.columnNo }}
                                    </span>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
        </el-form>
      </el-card>
                <!-- <div>
                    <p>1#立体库</p>
                    <div class="storage-grid">
                        éåŽ†æ¯ä¸€æŽ’
                        <div class="row" :class="'rowMy' + rowIndex" v-for="(row, rowIndex) in storageList" :key="rowIndex">
                            éåŽ†æ¯ä¸€å—
                            <div class="cell" v-for="(cell, cellIndex) in row" :key="cellIndex">
                                {{ cell }}
                            </div>
                        </div>
                    </div>
                </div> -->
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
  <div class="msi-content" style="height:calc(100vh - 200px)">
      <!-- ç»Ÿè®¡åŒºåŸŸ -->
      <count-view :countData="countList"></count-view>
      <!-- åº“位展示 -->
      <content-view :contentData="dataList"></content-view>
    </div>
</el-card>
  </div>
                <!-- ç»Ÿè®¡åŒºåŸŸ -->
         <!-- <count-view :countData="countList"></count-view>  -->
                <!-- åº“位展示 -->
                <!-- <content-view :contentData="dataList"></content-view> -->
            </div>
        </el-card>
    </div>
</template>
<script lang="ts" setup>
import { nextTick, onMounted, ref } from 'vue'
import { nextTick, onMounted, ref } from 'vue';
//import SearchBar from '@/components/SearchBar.vue'
import { getStorageView } from '/@/api/main/ReportCenter/storageView';
import CountView from './component/CountView.vue'
import ContentView from './component/ContentView.vue'
import CountView from './component/CountView.vue';
import ContentView from './component/ContentView.vue';
import { ElMessage } from 'element-plus';
import { handleSlectDataWmsArea } from '/@/utils/selectData';
const showAdvanceQueryUIWmsStockQuan = ref(false);
// æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
const changeAdvanceQueryUIWmsStockQuan = () => {
  showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
    showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
};
//设置背景    æ­£å¸¸ = 1,  å°å­˜ = 2,   ç¦å‡º = 3,    ç¦å…¥ = 4,    é”å®š = 5
const setBgColor = (type: number): string => {
    let color = '';
    switch (type) {
        case 1:
            color = '#F18201'; //橘色  æ­£å¸¸
            break;
        case 2:
            color = '#2BA6FF'; //蓝色 å°å­˜
            break;
        case 3:
            color = '#FFFF00'; //黄色 ç¦å‡º
            break;
        case 4:
            color = '#A2A2A2'; //灰色 ç¦å…¥
            break;
const LangEnum = ref([  // æ‰€å±žå··é“
  {
    value: '1',
    title: '1巷道'
  },
  {
    value: '2',
    title: '2巷道'
  },
  {
    value: '3',
    title: '3巷道'
  }
])
        case 5:
            color = '#FF0000'; //红色  é”å®š
            break;
    }
    return color;
};
const LangEnum = ref([
    // æ‰€å±žå··é“
    {
        value: '1',
        title: '1巷道',
    },
    {
        value: '2',
        title: '2巷道',
    },
    {
        value: '3',
        title: '3巷道',
    },
]);
const isAutoEnum: any[] = [
  {
    title: '否',
    value: 0
  },
  {
    title: '是',
    value: 1
  }
]
    {
        title: '否',
        value: 0,
    },
    {
        title: '是',
        value: 1,
    },
];
//库位状态
const storageStatusEnum = ref([
  {
    value: '0',
    title: '空库位'
  },
  {
    value: '1',
    title: '空容器库位'
  },
  {
    value: '2',
    title: '有货库位'
  },
])
    {
        value: '0',
        title: '空库位',
    },
    {
        value: '1',
        title: '空容器库位',
    },
    {
        value: '2',
        title: '有货库位',
    },
]);
const strorageRowEnum = ref<any>([]) // æ‰€å±žæŽ’
const strorageRowEnum = ref<any>([]); // æ‰€å±žæŽ’
//列表请求数据
const formModel = ref({
  Lane: '',
  Row: '',
  MaterialCode: '',
  inventoryType: '',
  ShelfCode: '',
  Code: '',
  ContainerCode: '',
  Status: '',
  isLocked: '',
  areaCode:"A2",
  PageNo: 1,
  PageSize: 10000
})
    Lane: '',
    Row: '',
    MaterialCode: '',
    inventoryType: '',
    ShelfCode: '',
    Code: '',
    ContainerCode: '',
    Status: '',
    isLocked: '',
    areaCode: 'A2',
    PageNo: 1,
    PageSize: 10000,
});
//库位列表数据
const dataList = ref([]);
//统计的数据
const countList = ref([
  {
    type: 0,
    title: '空库位:',
    count: 0
  },
  {
    type: 1,
    title: '有货库位(空容器):',
    count: 0
  },
  {
    type: 2,
    title: '有货库位(物料):',
    count: 0
  },
  // {
  //   type: 3,
  //   title: '锁定库位:',
  //   count: 0
  // },
  // {
  //   type: 4,
  //   title: '禁用库位:',
  //   count: 0
  // }
    {
        type: 0,
        title: '空库位:',
        count: 0,
    },
    {
        type: 1,
        title: '有货库位(空容器):',
        count: 0,
    },
    {
        type: 2,
        title: '有货库位(物料):',
        count: 0,
    },
    // {
    //   type: 3,
    //   title: '锁定库位:',
    //   count: 0
    // },
    // {
    //   type: 4,
    //   title: '禁用库位:',
    //   count: 0
    // }
]);
// æŒ‰ç…§è¡Œåˆ—相同进行分组
const sortClass = (sortData: any) => {
  const groupBy = (array: any, f: any) => {
    let groups = {};
    array.forEach((o) => {
      let group = JSON.stringify(f(o));
      groups[group] = groups[group] || [];
      groups[group].push(o);
    });
    return Object.keys(groups).map((group) => {
      return groups[group];
    });
  };
  const sorted = groupBy(sortData, (item) => {
    return item.lane + '-' + item.column; // è¿”回需要分组的对象
  });
  return sorted;
    const groupBy = (array: any, f: any) => {
        let groups = {};
        array.forEach((o) => {
            let group = JSON.stringify(f(o));
            groups[group] = groups[group] || [];
            groups[group].push(o);
        });
        return Object.keys(groups).map((group) => {
            return groups[group];
        });
    };
    const sorted = groupBy(sortData, (item) => {
        return item.lane + '-' + item.column; // è¿”回需要分组的对象
    });
    return sorted;
};
// åˆ†ç»„前
@@ -243,69 +293,200 @@
//库位图列表
const getLocationPage = async (param?: any) => {
  if (param && param == 2) {
    if (formModel.value.Lane == "" && formModel.value.Row != "") {
      ElMessage.warning("请选择所属巷道!")
      return
    }
  }
    // if (param && param == 2) {
    //   if (formModel.value.Lane == "" && formModel.value.Row != "") {
    //     ElMessage.warning("请选择所属巷道!")
    //     return
    //   }
    // }
  if(!formModel.value.areaCode){
    ElMessage.warning("请选择所在库区!")
    return
  }
    // if(!formModel.value.areaCode){
    //   ElMessage.warning("请选择所在库区!")
    //   return
    // }
    //设置背景
    var res = await getStorageView(Object.assign(formModel.value, {}));
    if (res.data.code == 200) {
        const { data } = res;
        const result = data.result;
  var res = await getStorageView(Object.assign(formModel.value, {}));
  if (res.data.code == 200) {
    const { data } = res;
    const result = data.result;
    strorageRowEnum.value = new Array(4).fill(0);
    countList.value[0].count = result.emptyLocation || 0;    //空库位
    countList.value[1].count = result.emptyContainerLocation || 0;   //空容器库位
    countList.value[2].count = result.materialLocation || 0;  //有货库位
    // countList.value[3].count = result.lockedLocation || 0; //锁定库位
    // countList.value[4].count = result.disableLocation || 0; //禁用库位
    debugger
    if (res.data.result.lanes) {
      res.data.result.lanes.forEach((element: any) => {
        element.rows.forEach((item: any) => {
          item.rowLocations2 = sortClass(item.rowLocations)
        })
      });
    }
    dataList.value = res.data.result.lanes;
        // å‡è®¾ result æ˜¯ä¸€ä¸ªåŒ…含多个对象的数组,每个对象都有 LaneNo å’Œ ColumnNo å±žæ€§
        const groupedResult = [];
  }
        // æŒ‰ LaneNo åˆ†ç»„  è¾“出结构
        // {
        //   'laneNo':1,
        //   'data': [{ }, {}, {}]
        // }
}
getLocationPage()
        // å‡è®¾ç»“果数据存储在 result æ•°ç»„中
        // æŒ‰ laneNo åˆ†ç»„
        result.forEach((item) => {
            const laneNo = item.laneNo;
            // æŸ¥æ‰¾æ˜¯å¦å·²ç»æœ‰è¯¥ laneNo çš„对象
            let laneGroup = groupedResult.find((group) => group.laneNo == laneNo);
            // å¦‚果没有,创建一个新的分组
            if (!laneGroup) {
                laneGroup = { laneNo: laneNo, data: [] };
                groupedResult.push(laneGroup);
            }
            // å°†å½“前项添加到对应的分组的 data æ•°ç»„中
            laneGroup.data.push(item);
        });
        // æœ€ç»ˆè¾“出结构
        console.log(8888888);
        console.log(groupedResult);
        //  groupedResult åˆ†ç»„按 data中的columnNo å†ç»„  å°†æ¯ç»„20 ä¸ªå…ƒç´ 
        function initializeStorage3() {
            const rows = 3; // æ€»æŽ’æ•°
            const cellsPerRow = 20; // æ¯æŽ’的格子数
            for (let i = 0; i < rows; i++) {
                let row = []; // æ¯æŽ’的格子数组
                for (let j = 1; j <= cellsPerRow; j++) {
                    // æ ¹æ®è¡Œæ•°å’Œåˆ—数生成库位名称
                    row.push(` ${i * cellsPerRow + j}`);
                }
                storageList.value.push(row); // å°†æ¯æŽ’的库位数组推入总数组
            }
        }
        dataList.value = groupedResult; // å¦‚果要将结果赋值给 dataList
        // const finalResult = [];
        // æœ€ç»ˆç»“æžœ
        // ColumnNo 60
        // result æŒ‰ç…§LaneNo分组
        // å†æŒ‰ç…§ColumnNo åˆ†ç»„  ç¬¬ä¸€ç»„ 20个  ç¬¬äºŒç»„ 20个  ç¬¬ä¸‰ç»„ 20个
        // dataList.value = result;
        // strorageRowEnum.value = new Array(4).fill(0);
        // countList.value[0].count = result.emptyLocation || 0;    //空库位
        // countList.value[1].count = result.emptyContainerLocation || 0;   //空容器库位
        // countList.value[2].count = result.materialLocation || 0;  //有货库位
        // // countList.value[3].count = result.lockedLocation || 0; //锁定库位
        // // countList.value[4].count = result.disableLocation || 0; //禁用库位
        // if (res.data.result.lanes) {
        //   res.data.result.lanes.forEach((element: any) => {
        //     element.rows.forEach((item: any) => {
        //       item.rowLocations2 = sortClass(item.rowLocations)
        //     })
        //   });
        // }
        // dataList.value = res.data.result;
    }
};
getLocationPage();
const resetFormModel = JSON.parse(JSON.stringify(formModel.value));
//重置搜索
const resetForm = () => {
  formModel.value = JSON.parse(JSON.stringify(resetFormModel));
  // getLocationPage()
    formModel.value = JSON.parse(JSON.stringify(resetFormModel));
    // getLocationPage()
};
let arr1:any =ref("") //下拉读取接口
let arr1: any = ref(''); //下拉读取接口
// é¡µé¢åŠ è½½æ—¶
onMounted(async () => {
  nextTick(async () => {
    arr1.value = await handleSlectDataWmsArea({
      page: 1,
            pageSize: 1000,
            total: 0,
            IsDisabled:false,
      isVirtually:false,
      areaType:1 //立体库
    }); //下拉读取接口
  });
onMounted(async () => {});
//==================88888888888888======================
const storageList = ref([]); // ç”¨äºŽå­˜æ”¾åº“位的数组
onMounted(() => {
    initializeStorage(); // åœ¨ç»„件挂载后初始化库位数据
});
function initializeStorage() {
    const rows = 3; // æ€»æŽ’æ•°
    const cellsPerRow = 20; // æ¯æŽ’的格子数
    for (let i = 0; i < rows; i++) {
        let row = []; // æ¯æŽ’的格子数组
        for (let j = 1; j <= cellsPerRow; j++) {
            // æ ¹æ®è¡Œæ•°å’Œåˆ—数生成库位名称
            row.push(` ${i * cellsPerRow + j}`);
        }
        storageList.value.push(row); // å°†æ¯æŽ’的库位数组推入总数组
    }
}
console.log(66666666);
console.log(storageList.value);
</script>
<style lang="less" scoped>
.msi-content {
  overflow: auto;
    overflow: auto;
}
</style>
.storage-grid {
    display: flex;
    flex-direction: column; /* åž‚直排列每一排 */
    width: 610px;
    // border: 1px solid red;
}
.row {
    display: block; /* æ°´å¹³æŽ’列每一行 */
}
.cell {
    border: 1px solid gray; /* æ¯ä¸ªæ ¼å­çš„黑线 */
    height: 50px; /* æ¯ä¸ªæ ¼å­çš„高度 */
    display: inline-block;
    justify-content: center;
    align-items: center; /* å±…中显示内容 */
    width: 30px;
}
.rowMy0 {
    // background-color: #f9f9f9; /* ç¬¬ä¸€æŽ’的背景色 */
    div {
        height: 120px;
    }
}
.rowMy1 {
    // background-color: #eeeeee; /* ç¬¬äºŒæŽ’的背景色 */
    div {
        height: 50px;
    }
}
.rowMy2 {
    // background-color: #dddddd; /* ç¬¬ä¸‰æŽ’的背景色 */
    div {
        height: 80px;
    }
}
.box100 {
    .box100Inner {
        display: inline-block;
        // width: 50%;
    }
}
.t1 {
    margin: 10px 0 2px 0;
}
.textK {
    display: flex; /* ä½¿ç”¨ Flexbox å¸ƒå±€ */
    flex-direction: column;
    font-size: 12px;
    text-align: center;
  width: 100%;
  height: 100%;
  color: white;
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/WmsBase/wmsSubstituteGood/index.vue
ÎļþÒÑɾ³ý
LA24030_LuLiPackageLine_Web/src/views/main/WmsConfig/wmsConfigPrint/component/editDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
<template>
    <div class="wmsConfigPrint-container">
        <el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
            <template #header>
                <div style="color: #fff">
                    <!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
                    <span>{{ props.title }}</span>
                </div>
            </template>
            <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules" v-loading="loading">
                <el-row :gutter="35">
                    <el-form-item v-show="false">
                        <el-input v-model="ruleForm.id" />
                    </el-form-item>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印分类" prop="printClassify">
                            <el-select clearable v-model="ruleForm.printClassify" placeholder="请选择打印分类">
                                <el-option v-for="(item,index) in  getEnumPrintClassifyData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印分类名" prop="printClassifyName">
                            <el-input v-model="ruleForm.printClassifyName" placeholder="请输入打印分类名" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印模板名" prop="printTemplate">
                            <el-input v-model="ruleForm.printTemplate" placeholder="请输入打印模板名" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印模板地址" prop="printTemplateAddr">
                            <el-input v-model="ruleForm.printTemplateAddr" placeholder="请输入打印模板地址" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印机列表" prop="printerList">
                            <el-input v-model="ruleForm.printerList" placeholder="请输入打印机列表" maxlength="500" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="备注" prop="remark">
                            <el-input v-model="ruleForm.remark" placeholder="请输入备注" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancel">取 æ¶ˆ</el-button>
                    <el-button type="primary" @click="submit" :disabled="disabled_btn">ç¡® å®š</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<style scoped>
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
<script lang="ts" setup>
    import { ref,onMounted } from "vue";
    import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
    import { ElMessage } from "element-plus";
    import type { FormRules } from "element-plus";
    import { addWmsConfigPrint, updateWmsConfigPrint, detailWmsConfigPrint } from "/@/api/main/WmsConfig/wmsConfigPrint";
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
    const getEnumPrintClassifyData = ref<any>([]);
    //父级传递来的参数
    var props = defineProps({
        title: {
        type: String,
        default: "",
    },
    });
    //父级传递来的函数,用于回调
    const emit = defineEmits(["reloadTable"]);
    const ruleFormRef = ref();
    const isShowDialog = ref(false);
    const loading = ref(false);
    const disabled_btn = ref(false);
    const ruleForm = ref<any>({});
    //自行添加其他规则
    const rules = ref<FormRules>({
        printClassify: [{required: true, message: '请选择打印分类!', trigger: 'change',},],
        printClassifyName: [{required: true, message: '请输入打印分类名!', trigger: 'blur',},],
        printTemplate: [{required: true, message: '请输入打印模板名!', trigger: 'blur',},],
        printTemplateAddr: [{required: true, message: '请输入打印模板地址!', trigger: 'blur',},],
        printerList: [{required: true, message: '请输入打印机列表!', trigger: 'blur',},],
        isDelete: [{required: true, message: '请选择软删除!', trigger: 'change',},],
    });
    /*
     * æ‰“开弹窗
     * @param flag æ ‡è®°ï¼ˆ1新增 2编辑 3查看)
     * @param row  è¡Œæ•°æ®
     */
    const openDialog = async (flag: number,row: any) => {
        // ruleForm.value = JSON.parse(JSON.stringify(row));
        // æ”¹ç”¨detail获取最新数据来编辑
        let rowData = JSON.parse(JSON.stringify(row));
        if (rowData.id)
            ruleForm.value = (await detailWmsConfigPrint(rowData.id)).data.result;
        else {
            ruleForm.value = rowData;
        }
        isShowDialog.value = true;
    };
    // å…³é—­å¼¹çª—
    const closeDialog = () => {
        emit("reloadTable");
        isShowDialog.value = false;
    };
    // å–消
    const cancel = () => {
        isShowDialog.value = false;
    };
    // æäº¤
    const submit = async () => {
        disabled_btn.value = true;
        ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
            if (isValid) {
                loading.value = true;
                let values = ruleForm.value;
                let ret={};
                let title='新增';
                if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
                    ret = await addWmsConfigPrint(values);
                } else {
                    title='编辑';
                    ret = await updateWmsConfigPrint(values);
                }
                loading.value = false;
                disabled_btn.value = false;
                if(ret.data.type=="success"){
                    ElMessage.success(title+'成功');
                    closeDialog();
                }
            } else {
                disabled_btn.value = false;
                ElMessage({
                    message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
                    type: "error",
                });
            }
        });
    };
    // é¡µé¢åŠ è½½æ—¶
    onMounted(async () => {
            getEnumPrintClassifyData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PrintClassifyEnum')).data.result ?? [];
    });
    //将属性或者函数暴露给父组件
    defineExpose({ openDialog });
</script>
LA24030_LuLiPackageLine_Web/src/views/main/WmsConfig/wmsConfigPrint/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,280 @@
<template>
  <div class="wmsConfigPrint-container">
    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
      <el-form :model="queryParamsWmsConfigPrint" ref="queryForm" labelWidth="90">
        <el-row>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="queryParamsWmsConfigPrint.searchKey" clearable="" placeholder="打印分类名,打印模板名,打印模板地址,打印机列表,备注,创建人,修改人"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印分类">
              <el-select clearable="" v-model="queryParamsWmsConfigPrint.printClassify" placeholder="请选择打印分类">
                <el-option v-for="(item,index) in getEnumPrintClassifyData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印分类名">
              <el-input v-model="queryParamsWmsConfigPrint.printClassifyName" clearable="" placeholder="请输入打印分类名"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印模板名">
              <el-input v-model="queryParamsWmsConfigPrint.printTemplate" clearable="" placeholder="请输入打印模板名"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印模板地址">
              <el-input v-model="queryParamsWmsConfigPrint.printTemplateAddr" clearable="" placeholder="请输入打印模板地址"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印机列表">
              <el-input v-model="queryParamsWmsConfigPrint.printerList" clearable="" placeholder="请输入打印机列表"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="备注">
              <el-input v-model="queryParamsWmsConfigPrint.remark" clearable="" placeholder="请输入备注"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center;">
                <el-button type="primary"  icon="ele-Search" @click="handleQueryWmsConfigPrint" v-auth="'wmsConfigPrint:page'" :disabled="disabled_btnWmsConfigPrint"> æŸ¥è¯¢ </el-button>
                      <el-button icon="ele-Refresh" @click="resetWmsConfigPrint"> é‡ç½® </el-button>
                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsConfigPrint" v-if="!showAdvanceQueryUIWmsConfigPrint" style="margin-left:5px;"> é«˜çº§æŸ¥è¯¢ </el-button>
                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsConfigPrint" v-if="showAdvanceQueryUIWmsConfigPrint" style="margin-left:5px;"> éšè— </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWmsConfigPrint" v-auth="'wmsConfigPrint:add'"> æ–°å¢ž </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Download" @click="handleExportExcelWmsConfigPrint"  v-auth="'wmsConfigPrint:exportExcel'" > å¯¼å‡º </el-button>
              </el-button-group>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </el-card>
    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
      <el-table
                ref="tableRefWmsConfigPrint"
                :data="tableDataWmsConfigPrint"
                style="width: 100%"
                v-loading="loadingWmsConfigPrint"
                tooltip-effect="light"
                                row-key="id"
                @sort-change="sortChangeWmsConfigPrint"
                border="">
        <el-table-column type="index" label="序号" width="55" align="center"/>
          <el-table-column prop="printClassify" label="打印分类"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.printClassify, getEnumPrintClassifyData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="printClassifyName" label="打印分类名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplate" label="打印模板名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplateAddr" label="打印模板地址"  show-overflow-tooltip="" />
        <el-table-column prop="printerList" label="打印机列表"  show-overflow-tooltip="" />
        <el-table-column prop="remark" label="备注"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wmsConfigPrint:update') || auth('wmsConfigPrint:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWmsConfigPrint(scope.row)" v-auth="'wmsConfigPrint:update'"> ç¼–辑 </el-button>
            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWmsConfigPrint(scope.row)" v-auth="'wmsConfigPrint:delete'"> åˆ é™¤ </el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
                v-model:currentPage="tableParamsWmsConfigPrint.page"
                v-model:page-size="tableParamsWmsConfigPrint.pageSize"
                :total="tableParamsWmsConfigPrint.total"
                :page-sizes="[10, 20, 50, 100, 200, 500]"
                small=""
                background=""
                @size-change="handleSizeChangeWmsConfigPrint"
                @current-change="handleCurrentChangeWmsConfigPrint"
                layout="total, sizes, prev, pager, next, jumper"
    />
      <printDialogWmsConfigPrint
        ref="printDialogRefWmsConfigPrint"
        :title="printWmsConfigPrintTitle"
        @reloadTable="handleQueryWmsConfigPrint" />
      <editDialogWmsConfigPrint
        ref="editDialogRefWmsConfigPrint"
        :title="editWmsConfigPrintTitle"
        @reloadTable="handleQueryWmsConfigPrint"
      />
    </el-card>
  </div>
</template>
<script lang="ts" setup="" name="wmsConfigPrint">
  import { ref,onMounted } from "vue";
  import { ElMessageBox, ElMessage } from "element-plus";
  import { auth } from '/@/utils/authFunction';
  import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
  import { formatDate,formatDate_T_Date,formatDate_T_Time,defaultTimeRange } from '/@/utils/formatTime';
  import { exportPageExcel } from '/@/utils/exportPageExcel' //引入导出方法
  import printDialogWmsConfigPrint from '/@/views/system/print/component/hiprint/preview.vue'
  import editDialogWmsConfigPrint from '/@/views/main/WmsConfig/wmsConfigPrint/component/editDialog.vue'
  import { pageWmsConfigPrint, deleteWmsConfigPrint,importExcelWmsConfigPrint,downloadExcelTemplateWmsConfigPrint } from '/@/api/main/WmsConfig/wmsConfigPrint';
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
  import commonFunction from '/@/utils/commonFunction';
  const getEnumPrintClassifyData_Index = ref<any>([]);
    const { getEnumDesc } = commonFunction();
  /***************************************************[打印配置表操作]开始***************************************************/
  const showAdvanceQueryUIWmsConfigPrint = ref(false);
  const tableRefWmsConfigPrint = ref(null);
  const printDialogRefWmsConfigPrint = ref();
  const editDialogRefWmsConfigPrint = ref();
  const loadingWmsConfigPrint = ref(false);
  const disabled_btnWmsConfigPrint = ref(false);
  const tableDataWmsConfigPrint = ref<any>([]);
  const queryParamsWmsConfigPrint = ref<any>({});
  const tableParamsWmsConfigPrint = ref({
    page: 1,
    pageSize: 10,
    total: 0,
  });
  const printWmsConfigPrintTitle = ref("");
  const editWmsConfigPrintTitle = ref("");
  // æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
  const changeAdvanceQueryUIWmsConfigPrint = () => {
    showAdvanceQueryUIWmsConfigPrint.value = !showAdvanceQueryUIWmsConfigPrint.value;
  }
  // æŸ¥è¯¢æ‰“印配置表
  const handleQueryWmsConfigPrint = async () => {
    loadingWmsConfigPrint.value = true;
    disabled_btnWmsConfigPrint.value = true;
    var res = await pageWmsConfigPrint(Object.assign(queryParamsWmsConfigPrint.value, tableParamsWmsConfigPrint.value));
    if(res.data.type=="success"){
      tableDataWmsConfigPrint.value = res.data.result?.items ?? [];
      tableParamsWmsConfigPrint.value.total = res.data.result?.total;
    }
    loadingWmsConfigPrint.value = false;
    disabled_btnWmsConfigPrint.value = false;
  };
  // é‡ç½®æ‰“印配置表查询
  const resetWmsConfigPrint = async () => {
    queryParamsWmsConfigPrint.value = {}
  };
  // æ‰“印配置表列排序
  const sortChangeWmsConfigPrint = async (column: any) => {
    queryParamsWmsConfigPrint.value.field = column.prop;
    queryParamsWmsConfigPrint.value.order = column.order;
    await handleQueryWmsConfigPrint();
  };
  // æ‰“开新增打印配置表页面
  const openAddWmsConfigPrint = () => {
    editWmsConfigPrintTitle.value = '添加打印配置表';
    editDialogRefWmsConfigPrint.value.openDialog(1,{});
  };
  // æ‰“开打印打印配置表页面
  const openPrintWmsConfigPrint = async (row: any) => {
    printWmsConfigPrintTitle.value = '打印打印配置表';
  }
  // æ‰“开编辑打印配置表页面
  const openEditWmsConfigPrint = (row: any) => {
    editWmsConfigPrintTitle.value = '编辑打印配置表';
    editDialogRefWmsConfigPrint.value.openDialog(2,row);
  };
  // åˆ é™¤æ‰“印配置表
  const delWmsConfigPrint = (row: any) => {
    ElMessageBox.confirm(`确定要删除吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
  .then(async () => {
    loadingWmsConfigPrint.value = true;
    var ret = await deleteWmsConfigPrint(row);
    if(ret.data.type=="success"){
        ElMessage.success("删除成功");
    }
    loadingWmsConfigPrint.value = false;
    handleQueryWmsConfigPrint();
  })
  .catch(() => {});
  };
  // æ”¹å˜æ‰“印配置表页面容量
  const handleSizeChangeWmsConfigPrint = (val: number) => {
    tableParamsWmsConfigPrint.value.pageSize = val;
    handleQueryWmsConfigPrint();
  };
  // æ”¹å˜æ‰“印配置表页码序号
  const handleCurrentChangeWmsConfigPrint = (val: number) => {
    tableParamsWmsConfigPrint.value.page = val;
    handleQueryWmsConfigPrint();
  };
/***************************************************[打印配置表操作]结束***************************************************/
/***************************************************[打印配置表导出]开始***************************************************/
//定义当前页面的方法组
const functionMapWmsConfigPrint = {
      getEnumPrintClassifyData_Index,
      formatDate_T_Date,
      formatDate_T_Time
};
//点击导出按钮
const handleExportExcelWmsConfigPrint = async (formData:Blob) => {
    loadingWmsConfigPrint.value = true;
    disabled_btnWmsConfigPrint.value = true;
    var new_tableParamsWmsConfigPrint=JSON.parse(JSON.stringify(tableParamsWmsConfigPrint.value));
    new_tableParamsWmsConfigPrint.page = 1;
    new_tableParamsWmsConfigPrint.pageSize = 100000;
    var res = await pageWmsConfigPrint(Object.assign(queryParamsWmsConfigPrint.value, new_tableParamsWmsConfigPrint));
    if(res.data.type=="success"){
      exportExcelWmsConfigPrint(res.data.result?.items ?? []);
    }
    loadingWmsConfigPrint.value = false;
    disabled_btnWmsConfigPrint.value = false;
};
//导出
const exportExcelWmsConfigPrint  = async (exportDataList:Array) => {
  exportPageExcel(exportDataList, tableRefWmsConfigPrint,"打印配置表",functionMapWmsConfigPrint);
};
/***************************************************[打印配置表导出]结束***************************************************/
  // æ‰“印配置表页面加载时
  onMounted(async () => {
    getEnumPrintClassifyData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PrintClassifyEnum')).data.result ?? [];
  });
  handleQueryWmsConfigPrint();
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/editDialog.vue
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue
ÎļþÃû´Ó LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderPurchase/component/openAllprop.vue ÐÞ¸Ä
@@ -258,11 +258,11 @@
            </template>
        </el-dialog>
        <!-- å•详情 -->
        <el-drawer v-model="drawerVisible" :title="`${detailForm.poId}订单详情`" direction="rtl" size="80%" @close="handleDrawerClose">
        <el-drawer v-model="drawerVisible" :title="`${detailForm.poId}物料详情`" direction="rtl" size="80%" @close="handleDrawerClose">
            <template #title>
                <div class="slot_title">
                    <div class="title_orderNo">{{ title }}</div>
                    <div>订单详情</div>
                    <div>物料详情</div>
                </div>
            </template>
@@ -273,8 +273,8 @@
                    <el-form :model="detailForm">
                        <el-row>
                            <el-col :span="6">
                                <el-form-item label="物料编号">
                                    <el-input v-model="detailForm.materialCode" clearable placeholder="请输入物料编号" />
                                <el-form-item label="部件名称">
                                    <el-input v-model="detailForm.detailName" clearable placeholder="请输入部件名称" />
                                </el-form-item>
                            </el-col>
                            <el-col :span="4">
@@ -294,64 +294,34 @@
                        <!-- <el-table-column prop="poId" label="PO单ID" show-overflow-tooltip="" /> -->
                        <!-- <el-table-column prop="poNo" label="PO单号" show-overflow-tooltip="" /> -->
                        <el-table-column prop="materialCode" label="物料编号" fixed="left" show-overflow-tooltip="" />
                        <el-table-column prop="materialName" label="物料名称" show-overflow-tooltip="" />
                        <el-table-column prop="poLineNumber" label="行号" show-overflow-tooltip="" />
                        <el-table-column prop="poDetailStatus" label="状态" show-overflow-tooltip="">
                        <el-table-column prop="placeCode" label="库位编码" show-overflow-tooltip="" />
                        <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="upi" label="部件条码" show-overflow-tooltip="" />
                        <el-table-column prop="detailName" label="部件名称" show-overflow-tooltip="" />
                        <el-table-column prop="planNo" label="批次" show-overflow-tooltip="" />
                        <el-table-column prop="orderId" label="订单号" show-overflow-tooltip="" />
                        <el-table-column prop="packageCode" label="包装号" show-overflow-tooltip="" />
                        <el-table-column prop="length" label="长" show-overflow-tooltip="" />
                        <el-table-column prop="width" label="宽" show-overflow-tooltip="" />
                        <el-table-column prop="thk" label="厚" show-overflow-tooltip="" />
                        <el-table-column prop="stockStatus" label="库存状态" show-overflow-tooltip="">
                            <template #default="scope">
                                <el-tag :type="getTypeStatus(1, getEnumDesc(scope.row.poDetailStatus, getEnumPoDetailStatusData_Index))">{{
                                    getEnumDesc(scope.row.poDetailStatus, getEnumPoDetailStatusData_Index)
                                }}</el-tag>
                                <el-tag>{{ getEnumDesc(scope.row.stockStatus, getEnumStockStatusData_Index) }}</el-tag>
                            </template>
                        </el-table-column>
                        <el-table-column prop="quantity" label="数量" show-overflow-tooltip="" />
                        <el-table-column prop="goodsQuantity" label="已收数量" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="createASNQuantity"
            label="已创建ASN数量" min-width="110px"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column
            prop="snp"
            label="标包数量"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column prop="erpOrderNo" label="ERP单号" show-overflow-tooltip="" /> -->
                        <el-table-column prop="erpCode" label="ERP库存地" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="printQuantity" min-width="110px"
            label="条码打印数量"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column
            prop="poDetailStatusName"
            label="状态名称"
            show-overflow-tooltip=""
          /> -->
                        <el-table-column prop="supplierCode" label="供应商编号" show-overflow-tooltip="" />
                        <el-table-column prop="supplierName" label="供应商名称" show-overflow-tooltip="" />
                        <el-table-column prop="supplierBatch" min-width="100px" label="供应商批次" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="batch" min-width="100px" label="批次" show-overflow-tooltip="" /> -->
                        <el-table-column prop="unit" min-width="100px" label="采购单位" show-overflow-tooltip="" />
                        <el-table-column prop="plannedStartTime" label="计划开始时间" min-width="130px" show-overflow-tooltip="" />
                        <el-table-column prop="plannedEndTime" label="计划结束时间" min-width="130px" show-overflow-tooltip="" />
                        <el-table-column prop="projectNo" min-width="100px" label="项目号" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="dock"
            min-width="100px"
            label="收货道口"
            show-overflow-tooltip=""
          /> -->
                        <el-table-column prop="stockStatusName" label="库存状态名称" show-overflow-tooltip="" />
                        <el-table-column prop="operReason" label="操作原因" show-overflow-tooltip="" />
                        <el-table-column prop="operUser" label="操作人" show-overflow-tooltip="" />
                        <el-table-column prop="operTime" label="操作时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="lockStatus" label="锁定状态" show-overflow-tooltip="">
                            <template #default="scope">
                                <el-tag>{{ getEnumDesc(scope.row.lockStatus, getEnumLockStatusData_Index) }}</el-tag>
                            </template>
                        </el-table-column>
                        <el-table-column prop="lockReason" label="锁定原因" show-overflow-tooltip="" />
                        <el-table-column prop="lockUser" label="锁定人" show-overflow-tooltip="" />
                        <el-table-column prop="lockTime" label="锁定时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="remarks" label="备注" show-overflow-tooltip="" />
                        <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" />
                        <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" />
                        <el-table-column prop="createUserName" label="创建人" show-overflow-tooltip="" />
@@ -443,6 +413,8 @@
const hexiao = computed(() => props.hexiao);
const loading = ref(false);
const getEnumStockStatusData_Index = ref<any>([]);
const getEnumLockStatusData_Index = ref<any>([]);
// ç™»å½•用户id
// const LoginUserID = computed(() => store.state.login.userInfo.id || localCache.getCache("LoginUserID"))
@@ -562,11 +534,10 @@
//列表的数据条数
const totalItems = ref<number>(0);
//缓存枚举
const enumList: any = cache.getCache('enumList');
console.log(enumList.inEnumOrderType);
// //缓存枚举
// const enumList: any = cache.getCache('enumList');
// console.log(enumList.inEnumOrderType);
// .inEnumOrderType
//获取PO单列表
const getTabelData = () => {
@@ -636,8 +607,8 @@
// -------------------获取PO单下物料详情-----------------------------------
//入库单下物料详情请求
const detailForm = ref({
    poId: '',
    materialCode: '',
    detailName: '',
    packageCode: '',
    Page: 1,
    PageSize: 10,
});
@@ -653,20 +624,17 @@
const openDrawer = async (type: number, scope: any = {}, entozhExcell?: any) => {
    detailForm.value.Page = 1; //bug:点编辑-再点详情
    detailForm.value.PageSize = 10; //bug:点编辑-再点详情
    if (scope.purchaseNo) {
        title.value = `${scope.purchaseNo}`;
    }
    if (scope.orderNo) {
        title.value = `${scope.orderNo}`;
    if (scope.packageCode) {
        title.value = `${scope.packageCode}`;
    }
    drawerType.value = 'drawerAll';
    drawerVisible.value = true;
    //当前入库单号id
    detailForm.value.poId = scope.id;
    detailForm.value.orderId = scope.orderId;
    //入库单
    purchaseNo.value = scope.purchaseNo;
    purchaseNo.value = scope.packageCode;
    debugger;
    detailForm.value.poId = scope.id;
    detailForm.value.packageCode = scope.packageCode;
    //获取物料列表
    if (detailForm.value.poId == '') {
        drawerList.value = [];
@@ -676,13 +644,9 @@
    //------------------获取物料列表物料明细
    getDetail();
    //------------------获取物料列表物料明细
    getBusinessTypeData_Index.value = await handleSlectDataWmsBusinessType(moveType); //下拉读取业务类型接口 create  by liuwq
    getEnumDockData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('DockEnum')).data.result ?? [];
    getEnumPoDetailStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderStatusEnum')).data.result ?? [];
    getEnumOrderTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderTypeEnum')).data.result ?? [];
    getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
    getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
    //----------------物料明细
    // æ ¹æ®çŠ¶æ€è½¬ä¸­æ–‡ ä¿ç•™3位小数
    let scopetrans = JSON.parse(JSON.stringify(scope));
@@ -698,8 +662,8 @@
//关闭抽屉
const handleDrawerClose = () => {
    detailForm.value = {
        poId: '',
        materialCode: '',
        detailName: '',
        packageCode: '',
        Page: 1,
        PageSize: 10,
    };
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,491 @@
<template>
    <div class="wmsOrderPurchase-container">
    <!-- é½å¥—管理 -->
        <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
            <el-form :model="queryParams" ref="queryForm" labelWidth="90">
                <el-row>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb10">
                        <el-form-item label="关键字">
                            <el-input v-model="queryParams.searchKey" clearable="" placeholder="关键字" />
                        </el-form-item>
                    </el-col>
                    <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="PO单号">
                            <el-input v-model="queryParams.purchaseNo" clearable="" placeholder="请输入PO单号" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="业务类型">
                            <el-select clearable="" v-model="queryParams.businessType" placeholder="请选择业务类型">
                                <el-option v-for="(item, index) in getBusinessTypeData_Index" :key="index" :value="item.businessTypeValue" :label="`[${item.businessTypeValue}] ${item.businessTypeName}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="单据来源">
                            <el-select clearable="" v-model="queryParams.orderSocure" placeholder="请选择单据来源">
                                <el-option v-for="(item, index) in getEnumOrderSocureData_Index" :key="index" :value="item.describe" :label="`${item.describe}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="单据状态">
                            <el-select clearable="" v-model="queryParams.poStatus" placeholder="请选择单据状态">
                                <el-option v-for="(item, index) in getEnumPoStatusData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="供应商" prop="supplierCode">
                            <el-select
                                v-model="queryParams.supplierCode"
                                filterable
                                remote
                                reserve-keyword
                                remote-show-suffix
                                :remote-method="remoteMethod"
                                :loading="loading"
                                placeholder="请选择供应商"
                                clearable
                                style="width: 100%"
                                @change="changeXmbh(queryParams.supplierCode)"
                            >
                                <el-option v-for="(item, index) in arrTdp" :key="index" :value="item.custCode" :label="`[${item.custCode}]${item.custChinaName}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="供应商名称">
                            <el-input v-model="queryParams.supplierName" clearable="" placeholder="请输入供应商名称" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="ERP单号">
                            <el-input v-model="queryParams.erpOrderNo" clearable="" placeholder="请输入ERP单号" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="项目号">
                            <el-input v-model="queryParams.projectNo" clearable="" placeholder="请输入项目号" />
                        </el-form-item>
                    </el-col> -->
                    <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
                        <el-form-item>
                            <el-button-group style="display: flex; align-items: center">
                                <el-button type="primary" icon="ele-Search" @click="handleQuery"> æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-Refresh" @click="() => (queryParams = {})"> é‡ç½® </el-button>
                                <!-- <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left: 5px"> é«˜çº§æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left: 5px"> éšè— </el-button> -->
                            </el-button-group>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
        </el-card>
        <el-card class="full-table" shadow="hover" style="margin-top: 5px">
            <div class="table-container">
                <!-- å·¦ä¾§è¡¨æ ¼ -->
                <div class="left-table">
                    <p class="text-xtiny">齐套列表</p>
                    <el-table
                        :data="tableData"
                        style="width: 100%"
                        v-loading="loading"
                        tooltip-effect="light"
                        ref="tableRef"
                        row-key="id"
                        @sort-change="sortChange"
                        :summary-method="getExportTitle"
                        border=""
                    >
                        <el-table-column type="index" label="序号" width="55" align="center" />
                        <el-table-column label="订单号" prop="packageCode" width="150" align="left" show-overflow-tooltip>
                            <template #default="scope">
                                <span class="under_line" @click="openDrawer(1, scope.row)">
                                    {{ scope.row.orderId }}
                                </span>
                            </template>
                        </el-table-column>
                        <el-table-column prop="count" label="数量" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="placeCode" label="库位编码" show-overflow-tooltip="" />
                        <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="upi" label="部件条码" show-overflow-tooltip="" />
                        <el-table-column prop="detailName" label="部件名称" show-overflow-tooltip="" />
                        <el-table-column prop="planNo" label="批次" show-overflow-tooltip="" />
                        <el-table-column prop="orderId" label="订单号" show-overflow-tooltip="" />
                        <el-table-column prop="length" label="长" show-overflow-tooltip="" />
                        <el-table-column prop="width" label="宽" show-overflow-tooltip="" />
                        <el-table-column prop="thk" label="厚" show-overflow-tooltip="" /> -->
                    </el-table>
                </div>
                <!-- å³ä¾§è¡¨æ ¼ -->
                <div class="right-table">
                    <p class="text-xtiny">不齐套列表</p>
                    <el-table
                        :data="newTableData"
                        style="width: 100%"
                        v-loading="loading"
                        tooltip-effect="light"
                        ref="newTableRef"
                        row-key="newId"
                        @sort-change="newSortChange"
                        :summary-method="getNewExportTitle"
                        border=""
                    >
                        <el-table-column type="index" label="序号" width="55" align="center" />
                        <!-- <el-table-column prop="packageCode" label="包装号" show-overflow-tooltip="" /> -->
                        <el-table-column label="订单号" prop="packageCode" width="150" align="left" show-overflow-tooltip>
                            <template #default="scope">
                                <span class="under_line" @click="openDrawer(1, scope.row)">
                                    {{ scope.row.orderId }}
                                </span>
                            </template>
                        </el-table-column>
                        <el-table-column prop="count" label="数量" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="count" label="数量" show-overflow-tooltip="" />
                        <el-table-column prop="placeCode" label="库位编码" show-overflow-tooltip="" />
                        <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="upi" label="部件条码" show-overflow-tooltip="" />
                        <el-table-column prop="detailName" label="部件名称" show-overflow-tooltip="" />
                        <el-table-column prop="planNo" label="批次" show-overflow-tooltip="" />
                        <el-table-column prop="orderId" label="订单号" show-overflow-tooltip="" />
                        <el-table-column prop="length" label="长" show-overflow-tooltip="" />
                        <el-table-column prop="width" label="宽" show-overflow-tooltip="" />
                        <el-table-column prop="thk" label="厚" show-overflow-tooltip="" /> -->
                    </el-table>
                </div>
            </div>
        </el-card>
<!--
        <editDialogWmsOrderDeliver ref="editDialogRefWmsOrderDeliver" :title="editWmsOrderDeliverTitle" @reloadTable="handleQuery" /> -->
        <importExcelDialog
            ref="importExcelDialogRefWmsOrderDeliver"
            :title="importExcelTitleWmsOrderDeliver"
            @parentUploadFun="handleImportExcelWmsOrderDeliver"
            @parentDownFun="handleDownExcelWmsOrderDeliver"
        />
        <!-- æ‰€æœ‰å¼¹æ¡† ï¼šæ–°å¢ž ç¼–辑 è¯¦æƒ… -->
        <open-allprop titleAuthor="1" hexiao="0" ref="propALlProp" @getTabelData="handleQuery"></open-allprop>
    </div>
</template>
<script lang="ts" setup="" name="wmsOrderPurchase">
import { getCurrentInstance, nextTick, onMounted, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
import { formatDate, formatDate_T_Date, formatDate_T_Time, defaultTimeRange } from '/@/utils/formatTime';
import { pageBaseCustomer } from '/@/api/main/WmsBase/baseCustomer';
import { formatUtcToData, getTypeStatus } from '/@/utils/formate';
import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
import editDialog from '/@/views/main/WmsOrder/wmsOrderPurchase/component/editDialog.vue';
import {
    deleteWmsOrderPurchase,
    importExcelWmsOrderPurchase,
    downloadExcelTemplateWmsOrderPurchase,
    downloadExcelTemplateWmsOrderPurchaseAll,
    KittingList,
} from '/@/api/main/WmsOrder/wmsOrderPurchase';
import { handleSlectDataWmsBusinessType } from '/@/utils/selectData';
import { getAPI } from '/@/utils/axios-utils';
import { SysEnumApi } from '/@/api-services/api';
import commonFunction from '/@/utils/commonFunction';
import importExcelDialog from '/@/components/importExcel/index.vue'; //引入导入组件
import { exportPageExcel } from '/@/utils/exportPageExcel'; //引入导出方法
import OpenAllprop from './component/openAllprop.vue';
import { ExcellTableDataExport } from '/@/hooks/exportTableDataExcell';
const { proxy }: any = getCurrentInstance(); // è®¿é—®å®žä¾‹ä¸Šä¸‹æ–‡ proxy同时支持开发 çº¿ä¸ŠçŽ¯å¢ƒ
const moveType = 10; //移动类型 å…¥åº“
// ------------封装导出功能--前端导出+表格标题---------------
const jsonExcellTableExport = {
    titleName: '', //导出表格名称
    interfaceListName: '', //导出接口名称
};
const { getExportTitle, handleExportExcell, formExport, entozhExcell } = ExcellTableDataExport(jsonExcellTableExport);
// --------------end å°è£…导出功能--前端导出+表格标题-----------------
// ---------------新增-----------------------
const showProp = (item?: any) => {
    if (item == 1) {
        proxy.$refs['propALlProp'].openDialog(1);
    } else {
        proxy.$refs['propALlProp'].openDialog(2, item);
    }
};
// ---------------详情-----------------------
const openDrawer = (type: number, item?: any) => {
    proxy.$refs['propALlProp'].openDrawer(type, item, entozhExcell);
};
// ---------------end详情-----------------------
// const getEnumBusinessTypeData_Index = ref<any>([]); //update by liuwq
const getEnumPoStatusData_Index = ref<any>([]);
const { getEnumDesc } = commonFunction();
const getEnumOrderSocureData_Index = ref<any>([]);
const showAdvanceQueryUI = ref(false);
const printDialogRef = ref();
const editDialogRef = ref();
const loading = ref(false);
const tableData = ref<any>([]);
const queryParams = ref<any>({});
const tableParams = ref({
    page: 1,
    pageSize: 10,
    total: 0,
});
const printWmsOrderPurchaseTitle = ref('');
const editWmsOrderPurchaseTitle = ref('');
// æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
const changeAdvanceQueryUI = () => {
    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
};
const newTableData = ref([]);
const fetchNewTableData = async () => {
    loading.value = true;
    try {
        const response = await fetch('your-api-endpoint'); // æ›¿æ¢ä¸ºæ‚¨çš„API地址
        const data = await response.json();
        newTableData.value = data;
    } catch (error) {
        console.error('获取新表数据错误:', error);
    } finally {
        loading.value = false;
    }
};
const newSortChange = ({ prop, order }) => {
    console.log(`排序字段: ${prop}, æŽ’序顺序: ${order}`);
    // å¤„理排序逻辑
};
const openNewDrawer = (type, row) => {
    console.log('打开新的抽屉,类型:', type, ', æ•°æ®:', row);
};
const getNewExportTitle = () => {
    return '新表格导出标题';
};
// 8888888888888查询操作 IsKitting
const handleQuery = async () => {
    loading.value = true;
    var res = await KittingList(Object.assign(queryParams.value, {
        ...tableParams.value,
        IsKitting:true
    }));
    tableData.value = res.data.result ?? [];
    var res2 = await KittingList(Object.assign(queryParams.value, {
        ...tableParams.value,
        IsKitting:false
    }));
    newTableData.value = res2.data.result ?? [];
    // tableParams.value.total = res.data.result?.total;
    loading.value = false;
    // getEnumOrderTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderTypeEnum')).data.result ?? [];
    // getEnumPoStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderStatusEnum')).data.result ?? [];
};
// åˆ—排序
const sortChange = async (column: any) => {
    queryParams.value.field = column.prop;
    queryParams.value.order = column.order;
    await handleQuery();
};
// æ‰“开新增页面
const openAddWmsOrderPurchase = () => {
    editWmsOrderPurchaseTitle.value = '添加PO单';
    editDialogRef.value.openDialog({});
};
// æ‰“开打印页面
const openPrintWmsOrderPurchase = async (row: any) => {
    printWmsOrderPurchaseTitle.value = '打印PO单';
};
// æ‰“开编辑页面
const openEditWmsOrderPurchase = (row: any) => {
    editWmsOrderPurchaseTitle.value = '编辑PO单';
    editDialogRef.value.openDialog(row);
};
// åˆ é™¤
const delWmsOrderPurchase = (row: any) => {
    ElMessageBox.confirm(`确定要取消吗?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
    })
        .then(async () => {
            await deleteWmsOrderPurchase(row);
            handleQuery();
            ElMessage.success('取消成功');
        })
        .catch(() => {});
};
// æ”¹å˜é¡µé¢å®¹é‡
const handleSizeChange = (val: number) => {
    tableParams.value.pageSize = val;
    handleQuery();
};
// æ”¹å˜é¡µç åºå·
const handleCurrentChange = (val: number) => {
    tableParams.value.page = val;
    handleQuery();
};
// æ ¹æ®businessTypeValue获取businessTypeName
const getBusinessTypeByValue = (key: any, itemLst: any) => {
    return itemLst.find((x: any) => x.businessTypeValue == key)?.businessTypeName;
};
handleQuery();
//================
const arrTdp = ref<any[]>([]);
const queryParamsW = ref<any>({});
const tableParamsW = ref({
    page: 1,
    pageSize: 200,
    total: 0,
    custType: '供应商',
});
//-----------------远程搜索----------------
const handleQueryTdp = async () => {
    var res = await pageBaseCustomer(Object.assign(queryParamsW.value, tableParamsW.value));
    arrTdp.value = res.data.result?.items ?? [];
};
const changeXmbh = async (query?: any) => {
    loading.value = true;
    var res = await pageBaseCustomer({
        page: 1,
        pageSize: 200,
        custCode: query,
        custType: '供应商',
    });
    loading.value = false;
    arrTdp.value = res.data.result?.items ?? [];
};
// è¿œç¨‹æœç´¢  è¾“入关键字以从远程服务器中查找数据。
const remoteMethod = async (query: string) => {
    loading.value = true;
    var res = await pageBaseCustomer({
        page: 1,
        pageSize: 200,
        custCode: query,
        custType: '供应商',
    });
    loading.value = false;
    arrTdp.value = res.data.result?.items ?? [];
};
//-----------------远程搜索----------------
const getEnumDockData = ref<any>([]);
onMounted(async () => {
    nextTick(async () => {
        // getBusinessTypeData_Index.value = await handleSlectDataWmsBusinessType(moveType); //下拉读取接口
        // getEnumDockData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('DockEnum')).data.result ?? [];
        // getEnumOrderSocureData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('SourceByEnum')).data.result ?? [];
    });
});
/***************************************************[DO单操作]结束***************************************************/
/***************************************************[DO单导入]开始***************************************************/
const printWmsOrderDeliverTitle = ref('');
const editWmsOrderDeliverTitle = ref('');
const importExcelTitleWmsOrderDeliver = ref('');
const importExcelDialogRefWmsOrderDeliver = ref();
//打开导入界面
const openImportExcelWmsOrderDeliver = () => {
    importExcelTitleWmsOrderDeliver.value = '导入PO单';
    importExcelDialogRefWmsOrderDeliver.value.openDialog({});
};
//导入数据
const handleImportExcelWmsOrderDeliver = async (formData: Blob) => {
    var result = await importExcelWmsOrderPurchase(formData);
    importExcelDialogRefWmsOrderDeliver.value.callBackUploadFun(result.data); //回调导入子页面的方法
    if (result.data.type == 'success') {
        handleQuery();
    }
};
//下载导入模板
const handleDownExcelWmsOrderDeliver = async () => {
    var result = await downloadExcelTemplateWmsOrderPurchase();
    importExcelDialogRefWmsOrderDeliver.value.callBackDownFun(result); //回调导入子页面的方法
};
/***************************************************[DO单导入]结束***************************************************/
/***************************************************[DO单导出]开始***************************************************/
//导出
const handExport = () => {
    downloadExcelTemplateWmsOrderPurchaseAll(queryParams.value).then((res) => {
        if (res.status == 200) {
            const link = document.createElement('a'); //创建a标签
            let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' }); // response就是接口返回的文件流
            let objectUrl = URL.createObjectURL(blob);
            link.href = objectUrl;
            link.download = `PO单导出${formatUtcToData(new Date().toString(), 'YYYY-MM-DD hh:mm:ss')}`; // è‡ªå®šä¹‰æ–‡ä»¶å
            link.click(); // ä¸‹è½½æ–‡ä»¶
            URL.revokeObjectURL(objectUrl); // é‡Šæ”¾å†…å­˜
        }
    });
};
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
.under_line {
    color: #f18201;
    text-decoration: underline;
    cursor: pointer;
}
.table-container {
    display: flex; /* ä½¿ç”¨ flexbox å¸ƒå±€ */
    justify-content: space-between; /* è¡¨æ ¼ä¹‹é—´ä¿æŒé—´è· */
}
.table-container .left-table,
.table-container .right-table {
    flex: 1; /* ä½¿æ¯ä¸ªè¡¨æ ¼å æ®ç›¸åŒå®½åº¦ */
    margin-right: 10px; /* å®šä¹‰å³ä¾§çš„间距 */
    width: 50%;
}
.text-xtiny {
    font-size: 14px;
    font-weight: 700;
    display: block;
    padding: 0 0 10px 0;
}
.table-container .right-table {
    margin-right: 0; /* æœ€åŽä¸€ä¸ªè¡¨æ ¼æ²¡æœ‰å³é—´è· */
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/manualFeed/component/editDialog.vue
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/manualFeed/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,287 @@
<template>
    <div class="wmsSubstituteGood-container">
        <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
            <el-form :model="queryParams" ref="queryForm" labelWidth="100">
                <el-row>
                    <el-col :xs="24" :sm="12" :md="12" :lg="10" :xl="4" class="mb10">
                        <el-form-item label="部件条码">
                            <el-input v-model="queryParams.upi" ref="materialCodeInput" clearable="" placeholder="请扫部件条码" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
                        <el-form-item>
                            <el-button-group style="display: flex; align-items: center">
                                <el-button type="primary" icon="ele-Search" @click="handleQuery"> æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-Refresh" @click="() => queryParams = {}"> é‡ç½® </el-button>
                                <!--
                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> é«˜çº§æŸ¥è¯¢ </el-button>
                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> éšè— </el-button> -->
                                <!-- <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWmsSubstituteGood" v-auth="'wmsSubstituteGood:add'"> æ–°å¢ž </el-button> -->
                            </el-button-group>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
        </el-card>
        <el-card class="full-table" shadow="hover" style="margin-top: 5px">
            <div class="detailBox">
                <ul>
                    <!-- <li v-for="(item,index) in sourceEnum" :key="index">
          {{ titleP[index] }} :  {{ warehousOrderDetails[item] }}
        </li> -->
                    <li>
                        <span class="text_left">物料编号:</span>
                        <span class="text_rt">{{ tableData.Info16 }}</span>
                    </li>
                    <li>
                        <span class="text_left">是否齐包:</span>
                        <span class="text_rt"></span>
                    </li>
                    <li>
                        <span class="text_left">是否齐套:</span>
                        <span class="text_rt"></span>
                    </li>
                    <li>
                        <span class="text_left">批次号:</span>
                        <span class="text_rt">{{ tableData.planNo }}</span>
                    </li>
                    <li>
                        <span class="text_left">订单号:</span>
                        <span class="text_rt">{{ tableData.OrderId }}</span>
                    </li>
                    <li>
                        <span class="text_left">部件条码:</span>
                        <span class="text_rt">{{ tableData.upi }}</span>
                    </li>
                    <li>
                        <span class="text_left">部件名称:</span>
                        <span class="text_rt">{{ tableData.DetailName }}</span>
                    </li>
                    <li>
                        <span class="text_left">客户名称:</span>
                        <span class="text_rt">{{ tableData.Info10 }}</span>
                    </li>
                    <li>
                        <span class="text_left">长:</span>
                        <span class="text_rt">{{ tableData.length }}</span>
                    </li>
                    <li>
                        <span class="text_left">宽:</span>
                        <span class="text_rt">{{ tableData.width }}</span>
                    </li>
                    <li>
                        <span class="text_left">厚:</span>
                        <span class="text_rt">{{ tableData.thk }}</span>
                    </li>
                    <li>
                        <span class="text_left">部件纹理:</span>
                        <span class="text_rt">{{ tableData.matgrid }}</span>
                    </li>
                    <li>
                        <span class="text_left">是否封边:</span>
                        <span class="text_rt">{{ tableData.isEB }}</span>
                    </li>
                    <li>
                        <span class="text_left">打孔设备编号:</span>
                        <span class="text_rt">{{ tableData.dRNum }}</span>
                    </li>
                </ul>
            </div>
            <!-- ç”Ÿæˆform é½å¥— é½åŒ… è®¾ç½®ng包 -->
            <!-- ç”Ÿæˆform é½å¥— é½åŒ… è®¾ç½®ng包 -->
            <!-- <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
      <el-row :gutter="35">
        <el-form-item v-show="false">
          <el-input v-model="ruleForm.id" />
        </el-form-item>
        <el-form-item label="齐套" prop="completeSet">
          <el-select v-model="ruleForm.completeSet" placeholder="请选择齐套">
            <el-option label="选项1" value="option1"></el-option>
            <el-option label="选项2" value="option2"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="齐包" prop="packageSetup">
          <el-input v-model="ruleForm.packageSetup" placeholder="请输入齐包设置"></el-input>
        </el-form-item>
        <el-form-item label="ng包" prop="ngPackage">
          <el-input v-model="ruleForm.ngPackage" placeholder="请输入ng包"></el-input>
        </el-form-item>
      </el-row>
    </el-form> -->
        </el-card>
    </div>
</template>
<script lang="ts" setup="" name="wmsSubstituteGood">
import { onMounted, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
import { formatDate } from '/@/utils/formatTime';
import { listMes_BatchOrderUPI_New, deleteMes_BatchOrderUPI_New, importExcelMes_BatchOrderUPI_New, downloadExcelTemplateMes_BatchOrderUPI_New } from '/@/api/main/WmsOrder/mes_BatchOrderUPI_New';
import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
import editDialog from '/@/views/main/WmsBase/wmsSubstituteGood/component/editDialog.vue';
import { pageWmsSubstituteGood, deleteWmsSubstituteGood } from '/@/api/main/WmsBase/wmsSubstituteGood';
const showAdvanceQueryUI = ref(false);
const printDialogRef = ref();
const editDialogRef = ref();
const loading = ref(false);
const tableData = ref<any>([]);
const queryParams = ref<any>({
    upi:""
});
const tableParams = ref({
    page: 1,
    pageSize: 10,
    total: 0,
});
const getIsDisabledData = [
    {
        value: true,
        text: '是',
    },
    {
        value: false,
        text: '否',
    },
];
const printWmsSubstituteGoodTitle = ref('');
const editWmsSubstituteGoodTitle = ref('');
// æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
const changeAdvanceQueryUI = () => {
    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
};
// ç”¨äºŽå¼•用输入框
const materialCodeInput = ref(null);
onMounted(() => {
    // åœ¨ç»„件挂载后进行聚焦
    materialCodeInput.value.$el.querySelector('input').focus();
});
// æŸ¥è¯¢æ“ä½œ 888888888
const handleQuery = async () => {
  console.log("查询");
    loading.value = true;
    var res = await listMes_BatchOrderUPI_New(Object.assign(queryParams.value, tableParams.value));
    if (res.data.result.length != 1) {
        ElMessage.warning('没有查询到数据');
    tableData.value =  []
    return;
    }
    tableData.value = res.data.result[0] ?? [];
    loading.value = false;
};
// åˆ—排序
const sortChange = async (column: any) => {
    queryParams.value.field = column.prop;
    queryParams.value.order = column.order;
    await handleQuery();
};
// æ‰“开新增页面
const openAddWmsSubstituteGood = () => {
    editWmsSubstituteGoodTitle.value = '添加替代品管理';
    editDialogRef.value.openDialog({});
};
// æ‰“开打印页面
const openPrintWmsSubstituteGood = async (row: any) => {
    printWmsSubstituteGoodTitle.value = '打印替代品管理';
};
// æ‰“开编辑页面
const openEditWmsSubstituteGood = (row: any) => {
    editWmsSubstituteGoodTitle.value = '编辑替代品管理';
    editDialogRef.value.openDialog(row);
};
// åˆ é™¤
const delWmsSubstituteGood = (row: any) => {
    ElMessageBox.confirm(`确定要删除吗?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
    })
        .then(async () => {
            var ret = await deleteWmsSubstituteGood(row);
            if (ret.data.type == 'success') {
                handleQuery();
                ElMessage.success('删除成功');
            }
        })
        .catch(() => {});
};
// æ”¹å˜é¡µé¢å®¹é‡
const handleSizeChange = (val: number) => {
    tableParams.value.pageSize = val;
    handleQuery();
};
// æ”¹å˜é¡µç åºå·
const handleCurrentChange = (val: number) => {
    tableParams.value.page = val;
    handleQuery();
};
// handleQuery();
const rules = {
    // è¿™é‡Œå®šä¹‰è¡¨å•验证规则
    completeSet: [{ required: true, message: '请选择齐套', trigger: 'change' }],
    packageSetup: [{ required: true, message: '请输入齐包设置', trigger: 'blur' }],
    ngPackage: [{ required: true, message: '请输入ng包', trigger: 'blur' }],
};
const ruleForm = ref({
    id: '',
    completeSet: '',
    packageSetup: '',
    ngPackage: '',
});
const sourceEnum: any = ref([
    {
        value: 'id',
        text: 'ID',
    },
]);
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
.detailBox {
    width: 90%;
    margin: 0 auto;
    display: block;
    padding-bottom: 10px;
    ul {
        margin: 0;
        padding: 0;
        li {
            display: block;
            line-height: 30px;
            text-align: left;
            list-style-type: none;
            width: 25%;
            word-wrap: break-word;
        }
    }
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/editDialog.vue
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue
copy from LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderPurchase/component/openAllprop.vue copy to LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue
Îļþ´Ó LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderPurchase/component/openAllprop.vue ¸´ÖÆ
@@ -258,11 +258,11 @@
            </template>
        </el-dialog>
        <!-- å•详情 -->
        <el-drawer v-model="drawerVisible" :title="`${detailForm.poId}订单详情`" direction="rtl" size="80%" @close="handleDrawerClose">
        <el-drawer v-model="drawerVisible" :title="`${detailForm.poId}物料详情`" direction="rtl" size="80%" @close="handleDrawerClose">
            <template #title>
                <div class="slot_title">
                    <div class="title_orderNo">{{ title }}</div>
                    <div>订单详情</div>
                    <div>物料详情</div>
                </div>
            </template>
@@ -294,68 +294,38 @@
                        <!-- <el-table-column prop="poId" label="PO单ID" show-overflow-tooltip="" /> -->
                        <!-- <el-table-column prop="poNo" label="PO单号" show-overflow-tooltip="" /> -->
                        <el-table-column prop="materialCode" label="物料编号" fixed="left" show-overflow-tooltip="" />
                        <el-table-column prop="materialName" label="物料名称" show-overflow-tooltip="" />
                        <el-table-column prop="poLineNumber" label="行号" show-overflow-tooltip="" />
                        <el-table-column prop="poDetailStatus" label="状态" show-overflow-tooltip="">
                            <template #default="scope">
                                <el-tag :type="getTypeStatus(1, getEnumDesc(scope.row.poDetailStatus, getEnumPoDetailStatusData_Index))">{{
                                    getEnumDesc(scope.row.poDetailStatus, getEnumPoDetailStatusData_Index)
                                }}</el-tag>
                            </template>
                        </el-table-column>
                        <el-table-column prop="quantity" label="数量" show-overflow-tooltip="" />
                        <el-table-column prop="goodsQuantity" label="已收数量" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="createASNQuantity"
            label="已创建ASN数量" min-width="110px"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column
            prop="snp"
            label="标包数量"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column prop="erpOrderNo" label="ERP单号" show-overflow-tooltip="" /> -->
                        <el-table-column prop="erpCode" label="ERP库存地" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="printQuantity" min-width="110px"
            label="条码打印数量"
            show-overflow-tooltip=""
          /> -->
                        <!-- <el-table-column
            prop="poDetailStatusName"
            label="状态名称"
            show-overflow-tooltip=""
          /> -->
                        <el-table-column prop="supplierCode" label="供应商编号" show-overflow-tooltip="" />
                        <el-table-column prop="supplierName" label="供应商名称" show-overflow-tooltip="" />
                        <el-table-column prop="supplierBatch" min-width="100px" label="供应商批次" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="batch" min-width="100px" label="批次" show-overflow-tooltip="" /> -->
                        <el-table-column prop="unit" min-width="100px" label="采购单位" show-overflow-tooltip="" />
                        <el-table-column prop="plannedStartTime" label="计划开始时间" min-width="130px" show-overflow-tooltip="" />
                        <el-table-column prop="plannedEndTime" label="计划结束时间" min-width="130px" show-overflow-tooltip="" />
                        <el-table-column prop="projectNo" min-width="100px" label="项目号" show-overflow-tooltip="" />
                        <!-- <el-table-column
            prop="dock"
            min-width="100px"
            label="收货道口"
            show-overflow-tooltip=""
          /> -->
                        <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" />
                        <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" />
                        <el-table-column prop="createUserName" label="创建人" show-overflow-tooltip="" />
                        <el-table-column prop="updateUserName" label="修改人" show-overflow-tooltip="" />
                        <el-table-column prop="placeCode" label="库位编码"  show-overflow-tooltip="" />
         <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="upi" label="部件条码"  show-overflow-tooltip="" />
        <el-table-column prop="detailName" label="部件名称"  show-overflow-tooltip="" />
        <el-table-column prop="planNo" label="批次"  show-overflow-tooltip="" />
        <el-table-column prop="orderId" label="订单号"  show-overflow-tooltip="" />
        <el-table-column prop="packageCode" label="包装号"  show-overflow-tooltip="" />
        <el-table-column prop="length" label="长"  show-overflow-tooltip="" />
        <el-table-column prop="width" label="宽"  show-overflow-tooltip="" />
        <el-table-column prop="thk" label="厚"  show-overflow-tooltip="" />
          <el-table-column prop="stockStatus" label="库存状态"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.stockStatus, getEnumStockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="stockStatusName" label="库存状态名称"  show-overflow-tooltip="" />
        <el-table-column prop="operReason" label="操作原因"  show-overflow-tooltip="" />
        <el-table-column prop="operUser" label="操作人"  show-overflow-tooltip="" />
         <el-table-column prop="operTime" label="操作时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
          <el-table-column prop="lockStatus" label="锁定状态"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.lockStatus, getEnumLockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="lockReason" label="锁定原因"  show-overflow-tooltip="" />
        <el-table-column prop="lockUser" label="锁定人"  show-overflow-tooltip="" />
         <el-table-column prop="lockTime" label="锁定时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="remarks" label="备注"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
                    </el-table>
                    <Pagination :total="detailCount" v-model:page="detailForm.Page" v-model:limit="detailForm.PageSize" @pagination="getDetail" style="margin-top: 20px; text-align: center"></Pagination>
@@ -443,6 +413,10 @@
const hexiao = computed(() => props.hexiao);
const loading = ref(false);
const getEnumStockStatusData_Index = ref<any>([]);
  const getEnumLockStatusData_Index = ref<any>([]);
// ç™»å½•用户id
// const LoginUserID = computed(() => store.state.login.userInfo.id || localCache.getCache("LoginUserID"))
@@ -562,9 +536,7 @@
//列表的数据条数
const totalItems = ref<number>(0);
//缓存枚举
const enumList: any = cache.getCache('enumList');
console.log(enumList.inEnumOrderType);
// .inEnumOrderType
@@ -653,18 +625,15 @@
const openDrawer = async (type: number, scope: any = {}, entozhExcell?: any) => {
    detailForm.value.Page = 1; //bug:点编辑-再点详情
    detailForm.value.PageSize = 10; //bug:点编辑-再点详情
    if (scope.purchaseNo) {
        title.value = `${scope.purchaseNo}`;
    }
    if (scope.orderNo) {
        title.value = `${scope.orderNo}`;
    if (scope.packageCode) {
        title.value = `${scope.packageCode}`;
    }
    drawerType.value = 'drawerAll';
    drawerVisible.value = true;
    //当前入库单号id
    detailForm.value.poId = scope.id;
    //入库单
    purchaseNo.value = scope.purchaseNo;
    purchaseNo.value = scope.packageCode;
    debugger;
    detailForm.value.poId = scope.id;
    //获取物料列表
@@ -676,13 +645,14 @@
    //------------------获取物料列表物料明细
    getDetail();
    //------------------获取物料列表物料明细
    getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
    getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
    // getBusinessTypeData_Index.value = await handleSlectDataWmsBusinessType(moveType); //下拉读取业务类型接口 create  by liuwq
    getBusinessTypeData_Index.value = await handleSlectDataWmsBusinessType(moveType); //下拉读取业务类型接口 create  by liuwq
    // getEnumDockData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('DockEnum')).data.result ?? [];
    getEnumDockData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('DockEnum')).data.result ?? [];
    getEnumPoDetailStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderStatusEnum')).data.result ?? [];
    getEnumOrderTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderTypeEnum')).data.result ?? [];
    // getEnumPoDetailStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderStatusEnum')).data.result ?? [];
    // getEnumOrderTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderTypeEnum')).data.result ?? [];
    //----------------物料明细
    // æ ¹æ®çŠ¶æ€è½¬ä¸­æ–‡ ä¿ç•™3位小数
    let scopetrans = JSON.parse(JSON.stringify(scope));
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,490 @@
<template>
    <div class="wmsOrderPurchase-container">
        <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
            <el-form :model="queryParams" ref="queryForm" labelWidth="90">
                <el-row>
                    <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb10">
                        <el-form-item label="关键字">
                            <el-input v-model="queryParams.searchKey" clearable="" placeholder="关键字" />
                        </el-form-item>
                    </el-col> -->
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="6" class="mb10">
                        <el-form-item label="包装号">
                            <el-input v-model="queryParams.packageCode" clearable="" placeholder="请输入包装号" />
                        </el-form-item>
                    </el-col>
                    <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="PO单号">
                            <el-input v-model="queryParams.purchaseNo" clearable="" placeholder="请输入PO单号" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="业务类型">
                            <el-select clearable="" v-model="queryParams.businessType" placeholder="请选择业务类型">
                                <el-option v-for="(item, index) in getBusinessTypeData_Index" :key="index" :value="item.businessTypeValue" :label="`[${item.businessTypeValue}] ${item.businessTypeName}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="单据来源">
                            <el-select clearable="" v-model="queryParams.orderSocure" placeholder="请选择单据来源">
                                <el-option v-for="(item, index) in getEnumOrderSocureData_Index" :key="index" :value="item.describe" :label="`${item.describe}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="单据状态">
                            <el-select clearable="" v-model="queryParams.poStatus" placeholder="请选择单据状态">
                                <el-option v-for="(item, index) in getEnumPoStatusData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="供应商" prop="supplierCode">
                            <el-select
                                v-model="queryParams.supplierCode"
                                filterable
                                remote
                                reserve-keyword
                                remote-show-suffix
                                :remote-method="remoteMethod"
                                :loading="loading"
                                placeholder="请选择供应商"
                                clearable
                                style="width: 100%"
                                @change="changeXmbh(queryParams.supplierCode)"
                            >
                                <el-option v-for="(item, index) in arrTdp" :key="index" :value="item.custCode" :label="`[${item.custCode}]${item.custChinaName}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="供应商名称">
                            <el-input v-model="queryParams.supplierName" clearable="" placeholder="请输入供应商名称" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="ERP单号">
                            <el-input v-model="queryParams.erpOrderNo" clearable="" placeholder="请输入ERP单号" />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
                        <el-form-item label="项目号">
                            <el-input v-model="queryParams.projectNo" clearable="" placeholder="请输入项目号" />
                        </el-form-item>
                    </el-col> -->
                    <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
                        <el-form-item>
                            <el-button-group style="display: flex; align-items: center">
                                <el-button type="primary" icon="ele-Search" @click="handleQuery"> æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-Refresh" @click="() => (queryParams = {})"> é‡ç½® </el-button>
                                <!-- <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left: 5px"> é«˜çº§æŸ¥è¯¢ </el-button>
                                <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left: 5px"> éšè— </el-button> -->
                            </el-button-group>
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
        </el-card>
        <el-card class="full-table" shadow="hover" style="margin-top: 5px">
            <div class="table-container">
                <!-- å·¦ä¾§è¡¨æ ¼ -->
                <div class="left-table">
                    <p class="text-xtiny">齐套列表</p>
                    <el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" ref="tableRef" row-key="id" @sort-change="sortChange" :summary-method="getExportTitle" border="">
                        <el-table-column type="index" label="序号" width="55" align="center" />
                        <!-- <el-table-column prop="packageCode" label="包装号" show-overflow-tooltip="" /> -->
                        <el-table-column label="包装号" prop="packageCode" width="150" align="left" show-overflow-tooltip>
                            <template #default="scope">
                                <span class="under_line" @click="openDrawer(1, scope.row)">
                                    {{ scope.row.packageCode }}
                                </span>
                            </template>
                        </el-table-column>
                        <el-table-column prop="count" label="数量" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="placeCode" label="库位编码" show-overflow-tooltip="" />
                        <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="upi" label="部件条码" show-overflow-tooltip="" />
                        <el-table-column prop="detailName" label="部件名称" show-overflow-tooltip="" />
                        <el-table-column prop="planNo" label="批次" show-overflow-tooltip="" />
                        <el-table-column prop="orderId" label="订单号" show-overflow-tooltip="" />
                        <el-table-column prop="length" label="长" show-overflow-tooltip="" />
                        <el-table-column prop="width" label="宽" show-overflow-tooltip="" />
                        <el-table-column prop="thk" label="厚" show-overflow-tooltip="" /> -->
                    </el-table>
                </div>
                <!-- å³ä¾§è¡¨æ ¼ -->
                <div class="right-table">
                    <p class="text-xtiny">不齐套列表</p>
                    <el-table
                        :data="newTableData"
                        style="width: 100%"
                        v-loading="loading"
                        tooltip-effect="light"
                        ref="newTableRef"
                        row-key="newId"
                        @sort-change="newSortChange"
                        :summary-method="getNewExportTitle"
                        border=""
                    >
                        <el-table-column type="index" label="序号" width="55" align="center" />
                        <!-- <el-table-column prop="packageCode" label="包装号" show-overflow-tooltip="" /> -->
                        <el-table-column label="包装号" prop="packageCode" width="150" align="left" show-overflow-tooltip>
                            <template #default="scope">
                                <span class="under_line" @click="openDrawer(1, scope.row)">
                                    {{ scope.row.packageCode }}
                                </span>
                            </template>
                        </el-table-column>
                        <el-table-column prop="count" label="数量" show-overflow-tooltip="" />
                        <!-- <el-table-column prop="placeCode" label="库位编码" show-overflow-tooltip="" />
                        <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date" show-overflow-tooltip="" />
                        <el-table-column prop="upi" label="部件条码" show-overflow-tooltip="" />
                        <el-table-column prop="detailName" label="部件名称" show-overflow-tooltip="" />
                        <el-table-column prop="planNo" label="批次" show-overflow-tooltip="" />
                        <el-table-column prop="orderId" label="订单号" show-overflow-tooltip="" />
                        <el-table-column prop="length" label="长" show-overflow-tooltip="" />
                        <el-table-column prop="width" label="宽" show-overflow-tooltip="" />
                        <el-table-column prop="thk" label="厚" show-overflow-tooltip="" /> -->
                    </el-table>
                </div>
            </div>
        </el-card>
        <editDialogWmsOrderDeliver ref="editDialogRefWmsOrderDeliver" :title="editWmsOrderDeliverTitle" @reloadTable="handleQuery" />
        <importExcelDialog
            ref="importExcelDialogRefWmsOrderDeliver"
            :title="importExcelTitleWmsOrderDeliver"
            @parentUploadFun="handleImportExcelWmsOrderDeliver"
            @parentDownFun="handleDownExcelWmsOrderDeliver"
        />
        <!-- æ‰€æœ‰å¼¹æ¡† ï¼šæ–°å¢ž ç¼–辑 è¯¦æƒ… -->
        <open-allprop titleAuthor="1" hexiao="0" ref="propALlProp" @getTabelData="handleQuery"></open-allprop>
    </div>
</template>
<script lang="ts" setup="" name="wmsOrderPurchase">
import { getCurrentInstance, nextTick, onMounted, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { auth } from '/@/utils/authFunction';
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
import { formatDate, formatDate_T_Date, formatDate_T_Time, defaultTimeRange } from '/@/utils/formatTime';
import { pageBaseCustomer } from '/@/api/main/WmsBase/baseCustomer';
import { formatUtcToData, getTypeStatus } from '/@/utils/formate';
import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
import editDialog from '/@/views/main/WmsOrder/wmsOrderPurchase/component/editDialog.vue';
import {
    pageWmsOrderPurchase,
    deleteWmsOrderPurchase,
    importExcelWmsOrderPurchase,
    downloadExcelTemplateWmsOrderPurchase,
    downloadExcelTemplateWmsOrderPurchaseAll,
    packList,
} from '/@/api/main/WmsOrder/wmsOrderPurchase';
import { handleSlectDataWmsBusinessType } from '/@/utils/selectData';
import { getAPI } from '/@/utils/axios-utils';
import { SysEnumApi } from '/@/api-services/api';
import commonFunction from '/@/utils/commonFunction';
import importExcelDialog from '/@/components/importExcel/index.vue'; //引入导入组件
import { exportPageExcel } from '/@/utils/exportPageExcel'; //引入导出方法
import OpenAllprop from './component/openAllprop.vue';
import { ExcellTableDataExport } from '/@/hooks/exportTableDataExcell';
const { proxy }: any = getCurrentInstance(); // è®¿é—®å®žä¾‹ä¸Šä¸‹æ–‡ proxy同时支持开发 çº¿ä¸ŠçŽ¯å¢ƒ
const moveType = 10; //移动类型 å…¥åº“
// ------------封装导出功能--前端导出+表格标题---------------
const jsonExcellTableExport = {
    titleName: '', //导出表格名称
    interfaceListName: '', //导出接口名称
};
const { getExportTitle, handleExportExcell, formExport, entozhExcell } = ExcellTableDataExport(jsonExcellTableExport);
// --------------end å°è£…导出功能--前端导出+表格标题-----------------
// ---------------新增-----------------------
const showProp = (item?: any) => {
    if (item == 1) {
        proxy.$refs['propALlProp'].openDialog(1);
    } else {
        proxy.$refs['propALlProp'].openDialog(2, item);
    }
};
// ---------------详情-----------------------
const openDrawer = (type: number, item?: any) => {
    proxy.$refs['propALlProp'].openDrawer(type, item, entozhExcell);
};
// ---------------end详情-----------------------
const getBusinessTypeData_Index = ref<any>([]); //业务类型 create by liuwq
const getEnumOrderTypeData_Index = ref<any>([]);
// const getEnumBusinessTypeData_Index = ref<any>([]); //update by liuwq
const getEnumPoStatusData_Index = ref<any>([]);
const { getEnumDesc } = commonFunction();
const getEnumOrderSocureData_Index = ref<any>([]);
const showAdvanceQueryUI = ref(false);
const printDialogRef = ref();
const editDialogRef = ref();
const loading = ref(false);
const tableData = ref<any>([]);
const queryParams = ref<any>({});
const tableParams = ref({
    page: 1,
    pageSize: 10,
    total: 0,
});
const printWmsOrderPurchaseTitle = ref('');
const editWmsOrderPurchaseTitle = ref('');
// æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
const changeAdvanceQueryUI = () => {
    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
};
const newTableData = ref([]);
const fetchNewTableData = async () => {
    loading.value = true;
    try {
        const response = await fetch('your-api-endpoint'); // æ›¿æ¢ä¸ºæ‚¨çš„API地址
        const data = await response.json();
        newTableData.value = data;
    } catch (error) {
        console.error('获取新表数据错误:', error);
    } finally {
        loading.value = false;
    }
};
const newSortChange = ({ prop, order }) => {
    console.log(`排序字段: ${prop}, æŽ’序顺序: ${order}`);
    // å¤„理排序逻辑
};
const openNewDrawer = (type, row) => {
    console.log('打开新的抽屉,类型:', type, ', æ•°æ®:', row);
};
const getNewExportTitle = () => {
    return '新表格导出标题';
};
// 88888888查询操作
const handleQuery = async () => {
    loading.value = true;
    var res = await packList(Object.assign(queryParams.value, {
        ...tableParams.value,
        IsPack:true
    }));
    tableData.value = res.data.result ?? [];
    var res2 = await packList(Object.assign(queryParams.value, {
        ...tableParams.value,
        IsPack:false
    }));
    newTableData.value = res2.data.result ?? [];
    // tableParams.value.total = res.data.result?.total;
    loading.value = false;
    // getEnumOrderTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderTypeEnum')).data.result ?? [];
    // getEnumPoStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('OrderStatusEnum')).data.result ?? [];
};
// åˆ—排序
const sortChange = async (column: any) => {
    queryParams.value.field = column.prop;
    queryParams.value.order = column.order;
    await handleQuery();
};
// æ‰“开新增页面
const openAddWmsOrderPurchase = () => {
    editWmsOrderPurchaseTitle.value = '添加PO单';
    editDialogRef.value.openDialog({});
};
// æ‰“开打印页面
const openPrintWmsOrderPurchase = async (row: any) => {
    printWmsOrderPurchaseTitle.value = '打印PO单';
};
// æ‰“开编辑页面
const openEditWmsOrderPurchase = (row: any) => {
    editWmsOrderPurchaseTitle.value = '编辑PO单';
    editDialogRef.value.openDialog(row);
};
// åˆ é™¤
const delWmsOrderPurchase = (row: any) => {
    ElMessageBox.confirm(`确定要取消吗?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
    })
        .then(async () => {
            await deleteWmsOrderPurchase(row);
            handleQuery();
            ElMessage.success('取消成功');
        })
        .catch(() => {});
};
// æ”¹å˜é¡µé¢å®¹é‡
const handleSizeChange = (val: number) => {
    tableParams.value.pageSize = val;
    handleQuery();
};
// æ”¹å˜é¡µç åºå·
const handleCurrentChange = (val: number) => {
    tableParams.value.page = val;
    handleQuery();
};
// æ ¹æ®businessTypeValue获取businessTypeName
const getBusinessTypeByValue = (key: any, itemLst: any) => {
    return itemLst.find((x: any) => x.businessTypeValue == key)?.businessTypeName;
};
handleQuery();
//================
const arrTdp = ref<any[]>([]);
const queryParamsW = ref<any>({});
const tableParamsW = ref({
    page: 1,
    pageSize: 200,
    total: 0,
    custType: '供应商',
});
//-----------------远程搜索----------------
const handleQueryTdp = async () => {
    var res = await pageBaseCustomer(Object.assign(queryParamsW.value, tableParamsW.value));
    arrTdp.value = res.data.result?.items ?? [];
};
const changeXmbh = async (query?: any) => {
    loading.value = true;
    var res = await pageBaseCustomer({
        page: 1,
        pageSize: 200,
        custCode: query,
        custType: '供应商',
    });
    loading.value = false;
    arrTdp.value = res.data.result?.items ?? [];
};
// è¿œç¨‹æœç´¢  è¾“入关键字以从远程服务器中查找数据。
const remoteMethod = async (query: string) => {
    loading.value = true;
    var res = await pageBaseCustomer({
        page: 1,
        pageSize: 200,
        custCode: query,
        custType: '供应商',
    });
    loading.value = false;
    arrTdp.value = res.data.result?.items ?? [];
};
//-----------------远程搜索----------------
const getEnumDockData = ref<any>([]);
onMounted(async () => {
    nextTick(async () => {
        // getBusinessTypeData_Index.value = await handleSlectDataWmsBusinessType(moveType); //下拉读取接口
        // getEnumDockData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('DockEnum')).data.result ?? [];
        // getEnumOrderSocureData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('SourceByEnum')).data.result ?? [];
    });
});
/***************************************************[DO单操作]结束***************************************************/
/***************************************************[DO单导入]开始***************************************************/
const printWmsOrderDeliverTitle = ref('');
const editWmsOrderDeliverTitle = ref('');
const importExcelTitleWmsOrderDeliver = ref('');
const importExcelDialogRefWmsOrderDeliver = ref();
//打开导入界面
const openImportExcelWmsOrderDeliver = () => {
    importExcelTitleWmsOrderDeliver.value = '导入PO单';
    importExcelDialogRefWmsOrderDeliver.value.openDialog({});
};
//导入数据
const handleImportExcelWmsOrderDeliver = async (formData: Blob) => {
    var result = await importExcelWmsOrderPurchase(formData);
    importExcelDialogRefWmsOrderDeliver.value.callBackUploadFun(result.data); //回调导入子页面的方法
    if (result.data.type == 'success') {
        handleQuery();
    }
};
//下载导入模板
const handleDownExcelWmsOrderDeliver = async () => {
    var result = await downloadExcelTemplateWmsOrderPurchase();
    importExcelDialogRefWmsOrderDeliver.value.callBackDownFun(result); //回调导入子页面的方法
};
/***************************************************[DO单导入]结束***************************************************/
/***************************************************[DO单导出]开始***************************************************/
//导出
const handExport = () => {
    downloadExcelTemplateWmsOrderPurchaseAll(queryParams.value).then((res) => {
        if (res.status == 200) {
            const link = document.createElement('a'); //创建a标签
            let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' }); // response就是接口返回的文件流
            let objectUrl = URL.createObjectURL(blob);
            link.href = objectUrl;
            link.download = `PO单导出${formatUtcToData(new Date().toString(), 'YYYY-MM-DD hh:mm:ss')}`; // è‡ªå®šä¹‰æ–‡ä»¶å
            link.click(); // ä¸‹è½½æ–‡ä»¶
            URL.revokeObjectURL(objectUrl); // é‡Šæ”¾å†…å­˜
        }
    });
};
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
.under_line {
    color: #f18201;
    text-decoration: underline;
    cursor: pointer;
}
.table-container {
    display: flex; /* ä½¿ç”¨ flexbox å¸ƒå±€ */
    justify-content: space-between; /* è¡¨æ ¼ä¹‹é—´ä¿æŒé—´è· */
}
.table-container .left-table,
.table-container .right-table {
    flex: 1; /* ä½¿æ¯ä¸ªè¡¨æ ¼å æ®ç›¸åŒå®½åº¦ */
    margin-right: 10px; /* å®šä¹‰å³ä¾§çš„间距 */
    width: 50%;
}
.text-xtiny {
    font-size: 14px;
    font-weight: 700;
    display: block;
    padding: 0 0 10px 0;
}
.table-container .right-table {
    margin-right: 0; /* æœ€åŽä¸€ä¸ªè¡¨æ ¼æ²¡æœ‰å³é—´è· */
}
</style>
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/component/editDialog.vue
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue
ÎļþÃû´Ó LA24030_LuLiPackageLine_Web/src/views/main/PrintCenter/wmsStockQuanPrint/index.vue ÐÞ¸Ä
@@ -133,59 +133,41 @@
                @selection-change="handleSelectionChange"
                border="">
        <el-table-column align="center" width="60" type="selection"  />
        <el-table-column type="index" fixed="left" label="序号" width="55" align="center"/>
        <el-table-column type="index"  label="序号" width="55" align="center"/>
        
        <el-table-column prop="snCode" fixed="left" width="230" label="跟踪码"  show-overflow-tooltip="" />
        <el-table-column prop="quantity" label="库存总数"  show-overflow-tooltip="" />
        <el-table-column prop="containerCode" width="100" label="容器编号"  show-overflow-tooltip="" />
        <el-table-column prop="placeName" width="100" label="所在库位"  show-overflow-tooltip="" />
        <el-table-column prop="areaName" width="100" label="所在库区"  show-overflow-tooltip="" />
        <el-table-column prop="materialCode" label="物料编号"  min-width="130px" show-overflow-tooltip="" />
        <el-table-column prop="materialName" label="物料名称"  min-width="130px" show-overflow-tooltip="" />
        <el-table-column prop="placeCode" label="库位编码"  show-overflow-tooltip="" />
         <el-table-column prop="inTime" label="进入时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="upi" label="部件条码"  show-overflow-tooltip="" />
        <el-table-column prop="detailName" label="部件名称"  show-overflow-tooltip="" />
        <el-table-column prop="planNo" label="批次"  show-overflow-tooltip="" />
        <el-table-column prop="orderId" label="订单号"  show-overflow-tooltip="" />
        <el-table-column prop="packageCode" label="包装号"  show-overflow-tooltip="" />
        <el-table-column prop="length" label="长"  show-overflow-tooltip="" />
        <el-table-column prop="width" label="宽"  show-overflow-tooltip="" />
        <el-table-column prop="thk" label="厚"  show-overflow-tooltip="" />
          <el-table-column prop="stockStatus" label="库存状态"  show-overflow-tooltip="" >
            <template #default="scope">
              {{ getEnumDesc(scope.row.stockStatus, getEnumStockStatusData_Index)}}
              <el-tag>{{ getEnumDesc(scope.row.stockStatus, getEnumStockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="qcStatus" label="质检状态"  show-overflow-tooltip="" >
        <el-table-column prop="stockStatusName" label="库存状态名称"  show-overflow-tooltip="" />
        <el-table-column prop="operReason" label="操作原因"  show-overflow-tooltip="" />
        <el-table-column prop="operUser" label="操作人"  show-overflow-tooltip="" />
         <el-table-column prop="operTime" label="操作时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
          <el-table-column prop="lockStatus" label="锁定状态"  show-overflow-tooltip="" >
            <template #default="scope">
              {{ getEnumDesc(scope.row.qcStatus, getEnumQCStatusData_Index)}}
              <el-tag>{{ getEnumDesc(scope.row.lockStatus, getEnumLockStatusData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <!-- <el-table-column prop="lockedQty" label="锁定数量"  show-overflow-tooltip="" /> -->
        <!-- todo  åŽé¢çœ‹æ€Žä¹ˆç»Ÿè®¡è¿™ä¸ªåº“存数-->
        <!-- <el-table-column prop="inStockQty" label="在库数量"  show-overflow-tooltip="" />
        <el-table-column prop="outStockQty" label="出库数量"  show-overflow-tooltip="" />
        <el-table-column prop="inStockQty" label="在库数量"  show-overflow-tooltip="" /> -->
        <el-table-column prop="supplierBatch" label="供应商批次"  show-overflow-tooltip="" />
        <el-table-column prop="batch" label="批次" min-width="130px" show-overflow-tooltip="" />
         <el-table-column prop="recordInsertTime" label="收货时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="supplierCode" label="供应商编号"  show-overflow-tooltip="" />
        <el-table-column prop="supplierName" label="供应商名称"  show-overflow-tooltip="" />
        <el-table-column prop="sN_1d" width="180" label="一维条码"  show-overflow-tooltip="" />
        <el-table-column prop="sN_2d" width="180" label="二维条码"  show-overflow-tooltip="" />
        <el-table-column prop="erpOrderNo" label="ERP单号"  show-overflow-tooltip="" />
        <el-table-column prop="erpCode" label="ERP库存地"  show-overflow-tooltip="" />
        <el-table-column prop="erpVoucher" width="120" label="ERP凭证"  show-overflow-tooltip="" />
        <!-- <el-table-column prop="actionRemark" label="操作备注"  show-overflow-tooltip="" />
         <el-table-column prop="actionTime" label="操作时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" /> -->
        <el-table-column prop="lockReason" label="锁定原因"  show-overflow-tooltip="" />
        <el-table-column prop="lockUser" label="锁定人"  show-overflow-tooltip="" />
         <el-table-column prop="lockTime" label="锁定时间" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
        <el-table-column prop="remarks" label="备注"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wmsStockQuan:update') || auth('wmsStockQuan:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWmsStockQuan(scope.row)" v-auth="'wmsStockQuan:update'"> ç¼–辑 </el-button>
            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWmsStockQuan(scope.row)" v-auth="'wmsStockQuan:delete'"> åˆ é™¤ </el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
                v-model:currentPage="tableParamsWmsStockQuan.page"
@@ -227,8 +209,8 @@
  import commonFunction from '/@/utils/commonFunction';
import { addWmsRecordSncodePrint } from "/@/api/main/PrintCenter/wmsRecordSncodePrint";
  const getEnumStockStatusData_Index = ref<any>([]);
  const getEnumQCStatusData_Index = ref<any>([]);
    const getEnumStockStatusData_Index = ref<any>([]);
    const { getEnumDesc } = commonFunction();
  
@@ -400,9 +382,11 @@
};
/***************************************************[实时库存导出]结束***************************************************/
  // å®žæ—¶åº“存页面加载时
  const getEnumLockStatusData_Index = ref<any>([]);
  onMounted(async () => {
    getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
    getEnumQCStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockQcStatusEnum')).data.result ?? [];
    getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
  });
  handleQueryWmsStockQuan();
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderAsn/component/openAllpropAsn.vue
ÎļþÒÑɾ³ý
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderAsn/index.vue
ÎļþÒÑɾ³ý
LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/wmsOrderPurchase/index.vue
ÎļþÒÑɾ³ý
LA24030_LuLiPackageLine_Web/src/views/main/WmsSystemConfig/wmsConfigPrint/component/editDialog.vue
@@ -23,6 +23,13 @@
                        
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印分类名" prop="printClassifyName">
                            <el-input v-model="ruleForm.printClassifyName" placeholder="请输入打印分类名" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印模板名" prop="printTemplate">
                            <el-input v-model="ruleForm.printTemplate" placeholder="请输入打印模板名" maxlength="255" show-word-limit clearable />
                            
@@ -37,11 +44,8 @@
                        
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印机列表" prop="printerListList">
                            <el-select clearable v-model="ruleForm.printerListList" placeholder="请选择打印机列表" multiple >
                                <el-option v-for="(item,index) in dl('PrinterList')"  :key="index" :value="item.name" :label="`[${item.code}] ${item.name}`"></el-option>
                            </el-select>
                        <el-form-item label="打印机列表" prop="printerList">
                            <el-input v-model="ruleForm.printerList" placeholder="请输入打印机列表" maxlength="500" show-word-limit clearable />
                            
                        </el-form-item>
                        
@@ -97,9 +101,10 @@
    //自行添加其他规则
    const rules = ref<FormRules>({
        printClassify: [{required: true, message: '请选择打印分类!', trigger: 'change',},],
        printClassifyName: [{required: true, message: '请输入打印分类名!', trigger: 'blur',},],
        printTemplate: [{required: true, message: '请输入打印模板名!', trigger: 'blur',},],
        printTemplateAddr: [{required: true, message: '请输入打印模板地址!', trigger: 'blur',},],
        printerList: [{required: true, message: '请选择打印机列表!', trigger: 'change',},],
        printerList: [{required: true, message: '请输入打印机列表!', trigger: 'blur',},],
        isDelete: [{required: true, message: '请选择软删除!', trigger: 'change',},],
    });
LA24030_LuLiPackageLine_Web/src/views/main/WmsSystemConfig/wmsConfigPrint/index.vue
@@ -5,7 +5,7 @@
        <el-row>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="queryParamsWmsConfigPrint.searchKey" clearable="" placeholder="打印模板名,打印模板地址,打印机列表,备注,创建人,修改人"/>
              <el-input v-model="queryParamsWmsConfigPrint.searchKey" clearable="" placeholder="打印分类名,打印模板名,打印模板地址,打印机列表,备注,创建人,修改人"/>
              
            </el-form-item>
          </el-col>
@@ -15,6 +15,12 @@
                <el-option v-for="(item,index) in getEnumPrintClassifyData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
                
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印分类名">
              <el-input v-model="queryParamsWmsConfigPrint.printClassifyName" clearable="" placeholder="请输入打印分类名"/>
              
            </el-form-item>
          </el-col>
@@ -30,21 +36,18 @@
              
            </el-form-item>
          </el-col>
          <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印机列表">
              <el-select clearable="" v-model="queryParamsWmsConfigPrint.printerList" placeholder="请选择打印机列表">
                <el-option v-for="(item,index) in dl('PrinterList')" :key="index" :value="item.code" :label="`[${item.code}] ${item.name}`" />
              </el-select>
              <el-input v-model="queryParamsWmsConfigPrint.printerList" clearable="" placeholder="请输入打印机列表"/>
              
            </el-form-item>
          </el-col> -->
          <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="备注">
              <el-input v-model="queryParamsWmsConfigPrint.remark" clearable="" placeholder="请输入备注"/>
              
            </el-form-item>
          </el-col> -->
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center;">
@@ -74,22 +77,18 @@
        <el-table-column type="index" label="序号" width="55" align="center"/>
          <el-table-column prop="printClassify" label="打印分类"  show-overflow-tooltip="" >
            <template #default="scope">
              {{ getEnumDesc(scope.row.printClassify, getEnumPrintClassifyData_Index)}}
              <el-tag>{{ getEnumDesc(scope.row.printClassify, getEnumPrintClassifyData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="printClassifyName" label="打印分类名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplate" label="打印模板名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplateAddr" label="打印模板地址"  show-overflow-tooltip="" />
        <el-table-column prop="printerList" label="打印机列表"  show-overflow-tooltip="" />
        <!-- <el-table-column prop="printerList" label="打印机列表"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag :type="diValue('PrinterList', scope.row.printerList)?.tagType"> {{diValue("PrinterList", scope.row.printerList)?.name}} </el-tag>
            </template>
          </el-table-column> -->
        <el-table-column prop="remark" label="备注"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wmsConfigPrint:update') || auth('wmsConfigPrint:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWmsConfigPrint(scope.row)" v-auth="'wmsConfigPrint:update'"> ç¼–辑 </el-button>
@@ -125,7 +124,7 @@
  import { ref,onMounted } from "vue";
  import { ElMessageBox, ElMessage } from "element-plus";
  import { auth } from '/@/utils/authFunction';
  import { getDictDataItemByValue as diValue, getDictDataList as dl } from '/@/utils/dict-utils';
  import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
  import { formatDate,formatDate_T_Date,formatDate_T_Time,defaultTimeRange } from '/@/utils/formatTime';
  import { exportPageExcel } from '/@/utils/exportPageExcel' //引入导出方法
LA24030_LuLiPackageLine_Web/src/views/main/inventoryWarning/transitionChart/index.vue
@@ -271,13 +271,13 @@
let timeInter: any = null;
// é¡µé¢åŠ è½½æ—¶
onMounted(() => {
    initEchartsResize();
    // initEchartsResize();
    timeInter = setInterval(() => {
        nextTick(() => {
            handleQuerywmsStockBoardabc('1');
        });
    }, 15000); //调用频率改为 15秒一次查询。
    // timeInter = setInterval(() => {
    //     nextTick(() => {
    //         handleQuerywmsStockBoardabc('1');
    //     });
    // }, 15000); //调用频率改为 15秒一次查询。
});
LA24030_LuLiPackageLine_Web/src/views/main/wmsConfigPrint/wmsConfigPrint/component/editDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
<template>
    <div class="wmsConfigPrint-container">
        <el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
            <template #header>
                <div style="color: #fff">
                    <!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
                    <span>{{ props.title }}</span>
                </div>
            </template>
            <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules" v-loading="loading">
                <el-row :gutter="35">
                    <el-form-item v-show="false">
                        <el-input v-model="ruleForm.id" />
                    </el-form-item>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印分类" prop="printClassify">
                            <el-select clearable v-model="ruleForm.printClassify" placeholder="请选择打印分类">
                                <el-option v-for="(item,index) in  getEnumPrintClassifyData" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印分类名" prop="printClassifyName">
                            <el-input v-model="ruleForm.printClassifyName" placeholder="请输入打印分类名" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印模板名" prop="printTemplate">
                            <el-input v-model="ruleForm.printTemplate" placeholder="请输入打印模板名" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印模板地址" prop="printTemplateAddr">
                            <el-input v-model="ruleForm.printTemplateAddr" placeholder="请输入打印模板地址" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="打印机列表" prop="printerList">
                            <el-input v-model="ruleForm.printerList" placeholder="请输入打印机列表" maxlength="500" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="备注" prop="remark">
                            <el-input v-model="ruleForm.remark" placeholder="请输入备注" maxlength="255" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancel">取 æ¶ˆ</el-button>
                    <el-button type="primary" @click="submit" :disabled="disabled_btn">ç¡® å®š</el-button>
                </span>
            </template>
        </el-dialog>
    </div>
</template>
<style scoped>
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
<script lang="ts" setup>
    import { ref,onMounted } from "vue";
    import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
    import { ElMessage } from "element-plus";
    import type { FormRules } from "element-plus";
    import { addWmsConfigPrint, updateWmsConfigPrint, detailWmsConfigPrint } from "/@/api/main/wmsConfigPrint/wmsConfigPrint";
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
    const getEnumPrintClassifyData = ref<any>([]);
    //父级传递来的参数
    var props = defineProps({
        title: {
        type: String,
        default: "",
    },
    });
    //父级传递来的函数,用于回调
    const emit = defineEmits(["reloadTable"]);
    const ruleFormRef = ref();
    const isShowDialog = ref(false);
    const loading = ref(false);
    const disabled_btn = ref(false);
    const ruleForm = ref<any>({});
    //自行添加其他规则
    const rules = ref<FormRules>({
        printClassify: [{required: true, message: '请选择打印分类!', trigger: 'change',},],
        printClassifyName: [{required: true, message: '请输入打印分类名!', trigger: 'blur',},],
        printTemplate: [{required: true, message: '请输入打印模板名!', trigger: 'blur',},],
        printTemplateAddr: [{required: true, message: '请输入打印模板地址!', trigger: 'blur',},],
        printerList: [{required: true, message: '请输入打印机列表!', trigger: 'blur',},],
        isDelete: [{required: true, message: '请选择软删除!', trigger: 'change',},],
    });
    /*
     * æ‰“开弹窗
     * @param flag æ ‡è®°ï¼ˆ1新增 2编辑 3查看)
     * @param row  è¡Œæ•°æ®
     */
    const openDialog = async (flag: number,row: any) => {
        // ruleForm.value = JSON.parse(JSON.stringify(row));
        // æ”¹ç”¨detail获取最新数据来编辑
        let rowData = JSON.parse(JSON.stringify(row));
        if (rowData.id)
            ruleForm.value = (await detailWmsConfigPrint(rowData.id)).data.result;
        else {
            ruleForm.value = rowData;
        }
        isShowDialog.value = true;
    };
    // å…³é—­å¼¹çª—
    const closeDialog = () => {
        emit("reloadTable");
        isShowDialog.value = false;
    };
    // å–消
    const cancel = () => {
        isShowDialog.value = false;
    };
    // æäº¤
    const submit = async () => {
        disabled_btn.value = true;
        ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
            if (isValid) {
                loading.value = true;
                let values = ruleForm.value;
                let ret={};
                let title='新增';
                if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
                    ret = await addWmsConfigPrint(values);
                } else {
                    title='编辑';
                    ret = await updateWmsConfigPrint(values);
                }
                loading.value = false;
                disabled_btn.value = false;
                if(ret.data.type=="success"){
                    ElMessage.success(title+'成功');
                    closeDialog();
                }
            } else {
                disabled_btn.value = false;
                ElMessage({
                    message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`,
                    type: "error",
                });
            }
        });
    };
    // é¡µé¢åŠ è½½æ—¶
    onMounted(async () => {
            getEnumPrintClassifyData.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PrintClassifyEnum')).data.result ?? [];
    });
    //将属性或者函数暴露给父组件
    defineExpose({ openDialog });
</script>
LA24030_LuLiPackageLine_Web/src/views/main/wmsConfigPrint/wmsConfigPrint/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,280 @@
<template>
  <div class="wmsConfigPrint-container">
    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
      <el-form :model="queryParamsWmsConfigPrint" ref="queryForm" labelWidth="90">
        <el-row>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
            <el-form-item label="关键字">
              <el-input v-model="queryParamsWmsConfigPrint.searchKey" clearable="" placeholder="打印分类名,打印模板名,打印模板地址,打印机列表,备注,创建人,修改人"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印分类">
              <el-select clearable="" v-model="queryParamsWmsConfigPrint.printClassify" placeholder="请选择打印分类">
                <el-option v-for="(item,index) in getEnumPrintClassifyData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印分类名">
              <el-input v-model="queryParamsWmsConfigPrint.printClassifyName" clearable="" placeholder="请输入打印分类名"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印模板名">
              <el-input v-model="queryParamsWmsConfigPrint.printTemplate" clearable="" placeholder="请输入打印模板名"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印模板地址">
              <el-input v-model="queryParamsWmsConfigPrint.printTemplateAddr" clearable="" placeholder="请输入打印模板地址"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="打印机列表">
              <el-input v-model="queryParamsWmsConfigPrint.printerList" clearable="" placeholder="请输入打印机列表"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsConfigPrint">
            <el-form-item label="备注">
              <el-input v-model="queryParamsWmsConfigPrint.remark" clearable="" placeholder="请输入备注"/>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
            <el-form-item>
              <el-button-group style="display: flex; align-items: center;">
                <el-button type="primary"  icon="ele-Search" @click="handleQueryWmsConfigPrint" v-auth="'wmsConfigPrint:page'" :disabled="disabled_btnWmsConfigPrint"> æŸ¥è¯¢ </el-button>
                      <el-button icon="ele-Refresh" @click="resetWmsConfigPrint"> é‡ç½® </el-button>
                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsConfigPrint" v-if="!showAdvanceQueryUIWmsConfigPrint" style="margin-left:5px;"> é«˜çº§æŸ¥è¯¢ </el-button>
                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsConfigPrint" v-if="showAdvanceQueryUIWmsConfigPrint" style="margin-left:5px;"> éšè— </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWmsConfigPrint" v-auth="'wmsConfigPrint:add'"> æ–°å¢ž </el-button>
                <el-button type="primary" style="margin-left:5px;" icon="ele-Download" @click="handleExportExcelWmsConfigPrint"  v-auth="'wmsConfigPrint:exportExcel'" > å¯¼å‡º </el-button>
              </el-button-group>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </el-card>
    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
      <el-table
                ref="tableRefWmsConfigPrint"
                :data="tableDataWmsConfigPrint"
                style="width: 100%"
                v-loading="loadingWmsConfigPrint"
                tooltip-effect="light"
                                row-key="id"
                @sort-change="sortChangeWmsConfigPrint"
                border="">
        <el-table-column type="index" label="序号" width="55" align="center"/>
          <el-table-column prop="printClassify" label="打印分类"  show-overflow-tooltip="" >
            <template #default="scope">
              <el-tag>{{ getEnumDesc(scope.row.printClassify, getEnumPrintClassifyData_Index)}}</el-tag>
            </template>
          </el-table-column>
        <el-table-column prop="printClassifyName" label="打印分类名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplate" label="打印模板名"  show-overflow-tooltip="" />
        <el-table-column prop="printTemplateAddr" label="打印模板地址"  show-overflow-tooltip="" />
        <el-table-column prop="printerList" label="打印机列表"  show-overflow-tooltip="" />
        <el-table-column prop="remark" label="备注"  show-overflow-tooltip="" />
         <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
        <el-table-column prop="createUserName" label="创建人"  show-overflow-tooltip="" />
        <el-table-column prop="updateUserName" label="修改人"  show-overflow-tooltip="" />
        <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wmsConfigPrint:update') || auth('wmsConfigPrint:delete')">
          <template #default="scope">
            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWmsConfigPrint(scope.row)" v-auth="'wmsConfigPrint:update'"> ç¼–辑 </el-button>
            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWmsConfigPrint(scope.row)" v-auth="'wmsConfigPrint:delete'"> åˆ é™¤ </el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
                v-model:currentPage="tableParamsWmsConfigPrint.page"
                v-model:page-size="tableParamsWmsConfigPrint.pageSize"
                :total="tableParamsWmsConfigPrint.total"
                :page-sizes="[10, 20, 50, 100, 200, 500]"
                small=""
                background=""
                @size-change="handleSizeChangeWmsConfigPrint"
                @current-change="handleCurrentChangeWmsConfigPrint"
                layout="total, sizes, prev, pager, next, jumper"
    />
      <printDialogWmsConfigPrint
        ref="printDialogRefWmsConfigPrint"
        :title="printWmsConfigPrintTitle"
        @reloadTable="handleQueryWmsConfigPrint" />
      <editDialogWmsConfigPrint
        ref="editDialogRefWmsConfigPrint"
        :title="editWmsConfigPrintTitle"
        @reloadTable="handleQueryWmsConfigPrint"
      />
    </el-card>
  </div>
</template>
<script lang="ts" setup="" name="wmsConfigPrint">
  import { ref,onMounted } from "vue";
  import { ElMessageBox, ElMessage } from "element-plus";
  import { auth } from '/@/utils/authFunction';
  import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
  import { formatDate,formatDate_T_Date,formatDate_T_Time,defaultTimeRange } from '/@/utils/formatTime';
  import { exportPageExcel } from '/@/utils/exportPageExcel' //引入导出方法
  import printDialogWmsConfigPrint from '/@/views/system/print/component/hiprint/preview.vue'
  import editDialogWmsConfigPrint from '/@/views/main/wmsConfigPrint/wmsConfigPrint/component/editDialog.vue'
  import { pageWmsConfigPrint, deleteWmsConfigPrint,importExcelWmsConfigPrint,downloadExcelTemplateWmsConfigPrint } from '/@/api/main/wmsConfigPrint/wmsConfigPrint';
    import { getAPI } from '/@/utils/axios-utils';
    import { SysEnumApi } from '/@/api-services/api';
  import commonFunction from '/@/utils/commonFunction';
  const getEnumPrintClassifyData_Index = ref<any>([]);
    const { getEnumDesc } = commonFunction();
  /***************************************************[打印配置表操作]开始***************************************************/
  const showAdvanceQueryUIWmsConfigPrint = ref(false);
  const tableRefWmsConfigPrint = ref(null);
  const printDialogRefWmsConfigPrint = ref();
  const editDialogRefWmsConfigPrint = ref();
  const loadingWmsConfigPrint = ref(false);
  const disabled_btnWmsConfigPrint = ref(false);
  const tableDataWmsConfigPrint = ref<any>([]);
  const queryParamsWmsConfigPrint = ref<any>({});
  const tableParamsWmsConfigPrint = ref({
    page: 1,
    pageSize: 10,
    total: 0,
  });
  const printWmsConfigPrintTitle = ref("");
  const editWmsConfigPrintTitle = ref("");
  // æ”¹å˜é«˜çº§æŸ¥è¯¢çš„æŽ§ä»¶æ˜¾ç¤ºçŠ¶æ€
  const changeAdvanceQueryUIWmsConfigPrint = () => {
    showAdvanceQueryUIWmsConfigPrint.value = !showAdvanceQueryUIWmsConfigPrint.value;
  }
  // æŸ¥è¯¢æ‰“印配置表
  const handleQueryWmsConfigPrint = async () => {
    loadingWmsConfigPrint.value = true;
    disabled_btnWmsConfigPrint.value = true;
    var res = await pageWmsConfigPrint(Object.assign(queryParamsWmsConfigPrint.value, tableParamsWmsConfigPrint.value));
    if(res.data.type=="success"){
      tableDataWmsConfigPrint.value = res.data.result?.items ?? [];
      tableParamsWmsConfigPrint.value.total = res.data.result?.total;
    }
    loadingWmsConfigPrint.value = false;
    disabled_btnWmsConfigPrint.value = false;
  };
  // é‡ç½®æ‰“印配置表查询
  const resetWmsConfigPrint = async () => {
    queryParamsWmsConfigPrint.value = {}
  };
  // æ‰“印配置表列排序
  const sortChangeWmsConfigPrint = async (column: any) => {
    queryParamsWmsConfigPrint.value.field = column.prop;
    queryParamsWmsConfigPrint.value.order = column.order;
    await handleQueryWmsConfigPrint();
  };
  // æ‰“开新增打印配置表页面
  const openAddWmsConfigPrint = () => {
    editWmsConfigPrintTitle.value = '添加打印配置表';
    editDialogRefWmsConfigPrint.value.openDialog(1,{});
  };
  // æ‰“开打印打印配置表页面
  const openPrintWmsConfigPrint = async (row: any) => {
    printWmsConfigPrintTitle.value = '打印打印配置表';
  }
  // æ‰“开编辑打印配置表页面
  const openEditWmsConfigPrint = (row: any) => {
    editWmsConfigPrintTitle.value = '编辑打印配置表';
    editDialogRefWmsConfigPrint.value.openDialog(2,row);
  };
  // åˆ é™¤æ‰“印配置表
  const delWmsConfigPrint = (row: any) => {
    ElMessageBox.confirm(`确定要删除吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
  .then(async () => {
    loadingWmsConfigPrint.value = true;
    var ret = await deleteWmsConfigPrint(row);
    if(ret.data.type=="success"){
        ElMessage.success("删除成功");
    }
    loadingWmsConfigPrint.value = false;
    handleQueryWmsConfigPrint();
  })
  .catch(() => {});
  };
  // æ”¹å˜æ‰“印配置表页面容量
  const handleSizeChangeWmsConfigPrint = (val: number) => {
    tableParamsWmsConfigPrint.value.pageSize = val;
    handleQueryWmsConfigPrint();
  };
  // æ”¹å˜æ‰“印配置表页码序号
  const handleCurrentChangeWmsConfigPrint = (val: number) => {
    tableParamsWmsConfigPrint.value.page = val;
    handleQueryWmsConfigPrint();
  };
/***************************************************[打印配置表操作]结束***************************************************/
/***************************************************[打印配置表导出]开始***************************************************/
//定义当前页面的方法组
const functionMapWmsConfigPrint = {
      getEnumPrintClassifyData_Index,
      formatDate_T_Date,
      formatDate_T_Time
};
//点击导出按钮
const handleExportExcelWmsConfigPrint = async (formData:Blob) => {
    loadingWmsConfigPrint.value = true;
    disabled_btnWmsConfigPrint.value = true;
    var new_tableParamsWmsConfigPrint=JSON.parse(JSON.stringify(tableParamsWmsConfigPrint.value));
    new_tableParamsWmsConfigPrint.page = 1;
    new_tableParamsWmsConfigPrint.pageSize = 100000;
    var res = await pageWmsConfigPrint(Object.assign(queryParamsWmsConfigPrint.value, new_tableParamsWmsConfigPrint));
    if(res.data.type=="success"){
      exportExcelWmsConfigPrint(res.data.result?.items ?? []);
    }
    loadingWmsConfigPrint.value = false;
    disabled_btnWmsConfigPrint.value = false;
};
//导出
const exportExcelWmsConfigPrint  = async (exportDataList:Array) => {
  exportPageExcel(exportDataList, tableRefWmsConfigPrint,"打印配置表",functionMapWmsConfigPrint);
};
/***************************************************[打印配置表导出]结束***************************************************/
  // æ‰“印配置表页面加载时
  onMounted(async () => {
    getEnumPrintClassifyData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PrintClassifyEnum')).data.result ?? [];
  });
  handleQueryWmsConfigPrint();
</script>
<style scoped>
:deep(.el-input),
:deep(.el-select),
:deep(.el-input-number) {
    width: 100%;
}
</style>
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Const/ApplicationConst.cs
@@ -62,4 +62,7 @@
    public const string WmsStockSnapshotDetailsGroupName = "库存快照管理";
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/Dto/WmsBasePlaceOutput.cs
@@ -1,4 +1,6 @@
namespace Admin.NET.Application;
using Admin.NET.Application.Entity;
namespace Admin.NET.Application;
/// <summary>
/// åº“位信息输出参数
@@ -131,5 +133,121 @@
    public bool IsDelete { get; set; }
    
    }
/// <summary>
/// åº“位视图输出参
/// </summary>
public class LocationViewOutput
{
        /// <summary>
        /// è¿›å…¥æ—¶é—´
        /// </summary>
        public DateTime? InTime { get; set; }
        /// <summary>
        /// éƒ¨ä»¶æ¡ç 
        /// </summary>
        public string Upi { get; set; }
        /// <summary>
        /// éƒ¨ä»¶åç§°
        /// </summary>
        public string DetailName { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡
        /// </summary>
        public string PlanNo { get; set; }
        /// <summary>
        /// è®¢å•号
        /// </summary>
        public string OrderId { get; set; }
        /// <summary>
        /// åŒ…装号
        /// </summary>
        public string PackageCode { get; set; }
        public float Length { get; set; }
        public float Width { get; set; }
        public float Thk { get; set; }
        /// <summary>
        /// åº“存状态
        /// </summary>
        public StockStatusEnum StockStatus { get; set; }
        /// <summary>
        /// åº“存状态名称
        /// </summary>
        public string StockStatusName { get; set; }
        /// <summary>
        /// æ“ä½œåŽŸå› 
        /// </summary>
        public string? OperReason { get; set; }
        /// <summary>
        /// æ“ä½œäºº
        /// </summary>
        public string? OperUser { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperTime { get; set; }
        /// <summary>
        /// é”å®šçŠ¶æ€
        /// </summary>
        public LockStatusEnum LockStatus { get; set; }
        /// <summary>
        /// é”å®šåŽŸå› 
        /// </summary>
        public string? LockReason { get; set; }
        /// <summary>
        /// é”å®šäºº
        /// </summary>
        public string? LockUser { get; set; }
        /// <summary>
        /// é”å®šæ—¶é—´
        /// </summary>
        public DateTime? LockTime { get; set; }
        public int? LaneNo { get; set; }
        public int? ColumnNo { get; set; }
        public int? LayerNo { get; set; }
        /// <summary>
        /// åº“位属性
        /// </summary>
        public PlaceStatusEnum PlaceStatus { get; set; }
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsBase/WmsBasePlace/WmsBasePlaceService.cs
@@ -12,9 +12,12 @@
public class WmsBasePlaceService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WmsBasePlace> _rep;
    public WmsBasePlaceService(SqlSugarRepository<WmsBasePlace> rep)
    private readonly SqlSugarRepository<V_Station_Quan> _V_Station_Quan;
    public WmsBasePlaceService(SqlSugarRepository<WmsBasePlace> rep,
        SqlSugarRepository<V_Station_Quan> V_Station_Quan_Rep)
    {
        _rep = rep;
        _V_Station_Quan = V_Station_Quan_Rep;
    }
    /// <summary>
@@ -260,5 +263,31 @@
        await _rep.InsertRangeAsync(places);
    }
    /// <summary>
    /// ä¸åˆ†é¡µæŸ¥è¯¢åº“位信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "ListView")]
    [Description("WmsBasePlace/ListView")]
    public async Task<List<LocationViewOutput>> ListView([FromQuery] WmsBasePlaceInput input)
    {
        var query = await _V_Station_Quan.AsQueryable()
        .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
        u.PlaceCode.Contains(input.SearchKey.Trim())
        //  || u.WareContainerCode.Contains(input.SearchKey.Trim())
        //|| u.Lane==input.Lane
        //|| u.Row==input.Row
        )
        .OrderBy(u => u.LaneNo)
        //.OrderBy(u => u.Row)
        .OrderBy(u => u.LayerNo)
        .OrderBy(u => u.ColumnNo)
        .Select<LocationViewOutput>().ToListAsync();
        return query;
    }
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanInput.cs
@@ -381,3 +381,88 @@
    {
    }
/// <summary>
/// åº“存信息分页查询输入参数
/// </summary>
public class PackListInput : BasePageInput
{
    /// <summary>
    /// å…³é”®å­—查询
    /// </summary>
    public string? SearchKey { get; set; }
    /// <summary>
    /// æ˜¯å¦é½å¥—
    /// </summary>
    public bool? IsPack { get; set; }
    /// <summary>
    /// è¿›å…¥æ—¶é—´
    /// </summary>
    public DateTime? InTime { get; set; }
    /// <summary>
    /// è¿›å…¥æ—¶é—´èŒƒå›´
    /// </summary>
    public List<DateTime?> InTimeRange { get; set; }
    /// <summary>
    /// éƒ¨ä»¶æ¡ç 
    /// </summary>
    public string? Upi { get; set; }
    /// <summary>
    /// éƒ¨ä»¶åç§°
    /// </summary>
    public string? DetailName { get; set; }
    /// <summary>
    /// æ‰¹æ¬¡
    /// </summary>
    public string? PlanNo { get; set; }
}
/// <summary>
/// åº“存信息分页查询输入参数
/// </summary>
public class KittingListInput : BasePageInput
{
    /// <summary>
    /// å…³é”®å­—查询
    /// </summary>
    public string? SearchKey { get; set; }
    /// <summary>
    /// æ˜¯å¦é½å¥—
    /// </summary>
    public bool? IsKitting { get; set; }
    /// <summary>
    /// è¿›å…¥æ—¶é—´
    /// </summary>
    public DateTime? InTime { get; set; }
    /// <summary>
    /// è¿›å…¥æ—¶é—´èŒƒå›´
    /// </summary>
    public List<DateTime?> InTimeRange { get; set; }
    /// <summary>
    /// éƒ¨ä»¶æ¡ç 
    /// </summary>
    public string? Upi { get; set; }
    /// <summary>
    /// éƒ¨ä»¶åç§°
    /// </summary>
    public string? DetailName { get; set; }
    /// <summary>
    /// æ‰¹æ¬¡
    /// </summary>
    public string? PlanNo { get; set; }
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs
@@ -146,5 +146,24 @@
    public bool IsDelete { get; set; }
    
    }
/// <summary>
/// æ•´åŒ…的入参
/// </summary>
public class WmsPackListOutput
{
    public string PackageCode { get; set; } // åŒ…装代码
    public int Count { get; set; }           // å¯¹åº”的数量
    public bool IsPack { get; set; }
}
/// <summary>
/// é½å¥—入参
/// </summary>
public class WmsKittingListOutput
{
    public string OrderId { get; set; } // å•号
    public int Count { get; set; }           // å¯¹åº”的数量
    public bool IsKitting { get; set; }
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
@@ -4,6 +4,7 @@
using System.Data;
using System.Web;
using System.Text;
using System;
namespace Admin.NET.Application;
/// <summary>
/// åº“存信息服务
@@ -189,13 +190,13 @@
        return query;
       }
        /// <summary>
        /// é‡å¤æ€§éªŒè¯
        /// </summary>
        /// <param name="input">验证对象</param>
        /// <param name="isEdit">是否是编辑</param>
        /// <returns></returns>
        private async Task CheckExist( WmsStockQuan input,bool isEdit=false)
    /// <summary>
    /// é‡å¤æ€§éªŒè¯
    /// </summary>
    /// <param name="input">验证对象</param>
    /// <param name="isEdit">是否是编辑</param>
    /// <returns></returns>
    private async Task CheckExist( WmsStockQuan input,bool isEdit=false)
        {
           
@@ -231,7 +232,75 @@
           
           
        }
     #endregion
    #endregion
    /// <summary>
    /// ä¸åˆ†é¡µæŸ¥è¯¢é½åŒ…管理
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "packList")]
    [Description("WmsStockQuan/packList")]
    public async Task<List<WmsPackListOutput>> packList([FromQuery] PackListInput input)
    {
        // æŸ¥è¯¢å¹¶è½¬æ¢ä¸º WmsKittingListOutput å¯¹è±¡çš„列表
        var list = await _rep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
            .Select(x => new WmsPackListOutput
            {
                PackageCode = x.PackageCode,
                // æ˜ å°„其他字段
            })
            .ToListAsync(); // ç¡®ä¿èŽ·å–ç»“æžœä¸º List
        // åˆ†ç»„并返回分组信息
        var groupedResult = list
            .GroupBy(x => x.PackageCode) // æŒ‰ PackageCode åˆ†ç»„
            .Select(g => new WmsPackListOutput
            {
                PackageCode = g.Key, // èŽ·å–åˆ†ç»„çš„é”®
                Count = g.Count(), // ç»Ÿè®¡æ¯ç»„的数量
                IsPack = g.Count() == 5 ? true : false // å¦‚æžœ Count ä¸º 5 åˆ™ IsKitting ä¸º 1,否则为 0
            })
            .WhereIF(input.IsPack.HasValue, u => u.IsPack == input.IsPack)
            .OrderBy(g => g.PackageCode) // æ ¹æ® PackageCode æŽ’序
            .ToList(); // è½¬æ¢ä¸º List
        return groupedResult; // è¿”回分组结果
    }
    /// <summary>
    /// ä¸åˆ†é¡µæŸ¥è¯¢é½å¥—管理
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "KittingList")]
    [Description("WmsStockQuan/KittingList")]
    public async Task<List<WmsKittingListOutput>> KittingList([FromQuery] KittingListInput input)
    {
        var list = await _rep.AsQueryable()
            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
            .Select(x => new WmsKittingListOutput
            {
                OrderId = x.OrderId
            })
            .ToListAsync(); // ç¡®ä¿èŽ·å–ç»“æžœä¸º List
        // åˆ†ç»„并返回分组信息
        var groupedResult = list
            .GroupBy(x => x.OrderId) // æŒ‰ PackageCode åˆ†ç»„
            .Select(g => new WmsKittingListOutput
            {
                OrderId = g.Key, // èŽ·å–åˆ†ç»„çš„é”®
                Count = g.Count(), // ç»Ÿè®¡æ¯ç»„的数量
                IsKitting = g.Count() == 5 ? true : false // å¦‚æžœ Count ä¸º 5 åˆ™ IsKitting ä¸º 1,否则为 0
            })
            .WhereIF(input.IsKitting.HasValue, u => u.IsKitting == input.IsKitting)
            .OrderBy(g => g.OrderId) // æ ¹æ® PackageCode æŽ’序
            .ToList(); // è½¬æ¢ä¸º List
        return groupedResult; // è¿”回分组结果
    }
}
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/Dto/WmsConfigPrintInput.cs
@@ -31,7 +31,7 @@
        /// <summary>
        /// æ‰“印机列表
        /// </summary>
        public virtual List<string> PrinterListList { get; set; }
        public virtual string PrinterList { get; set; }
        
        /// <summary>
        /// å¤‡æ³¨
@@ -39,19 +39,9 @@
        public virtual string Remark { get; set; }
        
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public virtual string CreateUserName { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual DateTime? CreateTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public virtual string UpdateUserName { get; set; }
        
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
@@ -64,9 +54,19 @@
        public virtual long? CreateUserId { get; set; }
        
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public virtual string CreateUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººId
        /// </summary>
        public virtual long? UpdateUserId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public virtual string UpdateUserName { get; set; }
        
        /// <summary>
        /// è½¯åˆ é™¤
@@ -128,6 +128,11 @@
        [Required(ErrorMessage = "打印分类不能为空")]
        public override Admin.NET.Application.PrintClassifyEnum PrintClassify { get; set; }
        
        /// <summary>
        /// æ‰“印分类名
        /// </summary>
        [Required(ErrorMessage = "打印分类名不能为空")]
        public override string PrintClassifyName { get; set; }
        
        /// <summary>
        /// æ‰“印模板名
@@ -145,7 +150,7 @@
        /// æ‰“印机列表
        /// </summary>
        [Required(ErrorMessage = "打印机列表不能为空")]
        public override List<string> PrinterListList { get; set; }
        public override string PrinterList { get; set; }
        
        /// <summary>
        /// è½¯åˆ é™¤
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/Dto/WmsConfigPrintOutput.cs
@@ -34,31 +34,16 @@
    /// æ‰“印机列表
    /// </summary>
    public string PrinterList { get; set; }
    /// <summary>
    /// æ‰“印机列表
    /// </summary>
    public List<string> PrinterListList { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remark { get; set; }
    
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreateUserName { get; set; }
    /// <summary>
    /// åˆ›å»ºæ—¶é—´
    /// </summary>
    public DateTime? CreateTime { get; set; }
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string UpdateUserName { get; set; }
    
    /// <summary>
    /// ä¿®æ”¹æ—¶é—´
@@ -71,11 +56,21 @@
    public long? CreateUserId { get; set; }
    
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreateUserName { get; set; }
    /// <summary>
    /// ä¿®æ”¹äººId
    /// </summary>
    public long? UpdateUserId { get; set; }
    
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string UpdateUserName { get; set; }
    /// <summary>
    /// è½¯åˆ é™¤
    /// </summary>
    public bool IsDelete { get; set; }
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsSystemConfig/WmsConfigPrint/WmsConfigPrintService.cs
@@ -4,8 +4,6 @@
using System.Data;
using System.Web;
using System.Text;
using NPOI.OpenXmlFormats.Dml;
namespace Admin.NET.Application;
/// <summary>
/// æ‰“印配置表服务
@@ -30,16 +28,7 @@
    public async Task<SqlSugarPagedList<WmsConfigPrintOutput>> Page(WmsConfigPrintInput input)
    {
        var query = CommonPageFilter(input);
        var list = await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
        foreach (var item in list.Items)
        {
            //单独处理按钮 ã€Editby shaocx,2024-05-27】
            if (!string.IsNullOrEmpty(item.PrinterList))
            {
                item.PrinterListList = item.PrinterList.Split(",").ToList();
            }
        }
        return list;
        return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
    }
    /// <summary>
@@ -53,16 +42,7 @@
    public async Task<List<WmsConfigPrintOutput>> List([FromQuery] WmsConfigPrintInput input)
    {
        var query = CommonPageFilter(input);
        var list = await query.OrderBuilder(input, "", "Id").Select<WmsConfigPrintOutput>().ToListAsync();
        foreach (var item in list)
        {
            //单独处理按钮 ã€Editby shaocx,2024-05-27】
            if (!string.IsNullOrEmpty(item.PrinterList))
            {
                item.PrinterListList = item.PrinterList.Split(",").ToList();
            }
        }
        return list;
        return await query.OrderBuilder(input, "", "Id").Select<WmsConfigPrintOutput>().ToListAsync();
    }
    /// <summary>
@@ -75,10 +55,7 @@
    [Description("WmsConfigPrint/Add")]
    public async Task<long> Add(AddWmsConfigPrintInput input)
    {
        var entity = input.Adapt<WmsConfigPrint>();
        entity.PrintClassifyName = entity.PrintClassify.ToString();
        entity.PrinterList = string.Join(",", input.PrinterListList);
        //重复性验证
        await CheckExist(entity);
@@ -113,11 +90,9 @@
    public async Task Update(UpdateWmsConfigPrintInput input)
    {
        var entity = input.Adapt<WmsConfigPrint>();
        entity.PrintClassifyName = entity.PrintClassify.ToString();
        entity.PrinterList = string.Join(",", input.PrinterListList);
        //重复性验证
        await CheckExist(entity, true);
        await CheckExist(entity,true);
        await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
    }
@@ -130,15 +105,9 @@
    [HttpGet]
    [ApiDescriptionSettings(Name = "Detail")]
    [Description("WmsConfigPrint/Detail")]
    public async Task<WmsConfigPrintOutput> Detail([FromQuery] QueryByIdWmsConfigPrintInput input)
    public async Task<WmsConfigPrint> Detail([FromQuery] QueryByIdWmsConfigPrintInput input)
    {
        var obj= await _rep.GetFirstAsync(u => u.Id == input.Id);
        var entity = obj.Adapt<WmsConfigPrintOutput>();
        if (!string.IsNullOrEmpty(entity.PrinterList))
        {
            entity.PrinterListList = entity.PrinterList.Split(",").ToList();
        }
        return entity;
        return await _rep.GetFirstAsync(u => u.Id == input.Id);
    }
@@ -172,107 +141,52 @@
            .WhereIF(!string.IsNullOrWhiteSpace(input.PrinterList), u => u.PrinterList.Contains(input.PrinterList.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
            .Select<WmsConfigPrintOutput>();
        return query;
    }
       }
    /// <summary>
    /// é‡å¤æ€§éªŒè¯
    /// </summary>
    /// <param name="input">验证对象</param>
    /// <param name="isEdit">是否是编辑</param>
    /// <returns></returns>
    private async Task CheckExist(WmsConfigPrint input, bool isEdit = false)
    {
        //没有配置组合校验,不需要验重
        bool isExistForSingle_PrintTemplate = false;
        if (!isEdit)//新增
        /// <summary>
        /// é‡å¤æ€§éªŒè¯
        /// </summary>
        /// <param name="input">验证对象</param>
        /// <param name="isEdit">是否是编辑</param>
        /// <returns></returns>
        private async Task CheckExist( WmsConfigPrint input,bool isEdit=false)
        {
            //数据是否单独存在重复-打印模板名
            isExistForSingle_PrintTemplate = await _rep.AsQueryable().AnyAsync(u =>
                            u.PrintTemplate.Equals(input.PrintTemplate));
            //没有配置组合校验,不需要验重
            //没有配置单独校验,不需要验重
       }
       /// <summary>
        /// æ ¹æ®ç»„合校验和单独校验验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsConfigPrint> inputs)
        {
            if (inputs?.Count <= 0)
            {
                throw Oops.Oh($"导入数据不能为空");
            }
            //根据组合校验验证表格中中是否已存在相同数据
           //根据单独校验验证表格中中是否已存在相同数据
        }
        else//编辑
        {
            //当前编辑数据以外是否单独存在重复-打印模板名
            isExistForSingle_PrintTemplate = await _rep.AsQueryable().AnyAsync(u =>
                              u.Id != input.Id
                              && u.PrintTemplate.Equals(input.PrintTemplate));
        }
        if (isExistForSingle_PrintTemplate) throw Oops.Oh($"验证失败,打印模板名[" + input.PrintTemplate + "]已存在");
        bool isExistForSingle_PrintTemplateAddr = false;
        if (!isEdit)//新增
        {
            //数据是否单独存在重复-打印模板地址
            isExistForSingle_PrintTemplateAddr = await _rep.AsQueryable().AnyAsync(u =>
                            u.PrintTemplateAddr.Equals(input.PrintTemplateAddr));
        }
        else//编辑
        {
            //当前编辑数据以外是否单独存在重复-打印模板地址
            isExistForSingle_PrintTemplateAddr = await _rep.AsQueryable().AnyAsync(u =>
                              u.Id != input.Id
                              && u.PrintTemplateAddr.Equals(input.PrintTemplateAddr));
        }
        if (isExistForSingle_PrintTemplateAddr) throw Oops.Oh($"验证失败,打印模板地址[" + input.PrintTemplateAddr + "]已存在");
    }
    /// <summary>
    /// æ ¹æ®ç»„合校验和单独校验验证数据是否已存在-导入时验证
    /// </summary>
    /// <param name="inputs"></param>
    /// <returns></returns>
    private async Task CheckExisitForImport(List<WmsConfigPrint> inputs)
    {
        if (inputs?.Count <= 0)
        {
            throw Oops.Oh($"导入数据不能为空");
        }
        //根据组合校验验证表格中中是否已存在相同数据
        //根据单独校验验证表格中中是否已存在相同数据
        var existExcelItemForSingle_PrintTemplate = inputs.GroupBy(g => new { g.PrintTemplate }).Where(g => g.Count() > 1).ToList();
        if (existExcelItemForSingle_PrintTemplate != null && existExcelItemForSingle_PrintTemplate.Count > 0)
        {
            var item = existExcelItemForSingle_PrintTemplate.First().ToList().First();
            throw Oops.Oh($"验证失败,导入的表格中,打印模板名[" + item.PrintTemplate + "]已重复存在");
        }
        var existExcelItemForSingle_PrintTemplateAddr = inputs.GroupBy(g => new { g.PrintTemplateAddr }).Where(g => g.Count() > 1).ToList();
        if (existExcelItemForSingle_PrintTemplateAddr != null && existExcelItemForSingle_PrintTemplateAddr.Count > 0)
        {
            var item = existExcelItemForSingle_PrintTemplateAddr.First().ToList().First();
            throw Oops.Oh($"验证失败,导入的表格中,打印模板地址[" + item.PrintTemplateAddr + "]已重复存在");
        }
        //根据单独校验验证数据库中是否已存在相同数据
        var existDBItemList = await _rep.GetListAsync(w =>
                    inputs.Select(s => s.PrintTemplate).ToList().Contains(w.PrintTemplate) ||
                    inputs.Select(s => s.PrintTemplateAddr).ToList().Contains(w.PrintTemplateAddr)
   );
        var db_ForSingle_PrintTemplate = existDBItemList.FirstOrDefault(g => inputs.Select(s => s.PrintTemplate).ToList().Contains(g.PrintTemplate));
        if (db_ForSingle_PrintTemplate != null) throw Oops.Oh($"验证失败,系统中,打印模板名[" + db_ForSingle_PrintTemplate.PrintTemplate + "]已重复存在");
        var db_ForSingle_PrintTemplateAddr = existDBItemList.FirstOrDefault(g => inputs.Select(s => s.PrintTemplateAddr).ToList().Contains(g.PrintTemplateAddr));
        if (db_ForSingle_PrintTemplateAddr != null) throw Oops.Oh($"验证失败,系统中,打印模板地址[" + db_ForSingle_PrintTemplateAddr.PrintTemplateAddr + "]已重复存在");
    }
    #endregion
     #endregion
}
iWare_RawMaterialWarehouse_Web/src/api/main/WmsBase/wmsBasePlace.ts
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Web/src/api/main/wmsPlace/wmsBasePlace.ts
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/wmsBasePlace/component/editDialog.vue
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/wmsBasePlace/index.vue
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Web/src/views/main/wmsPlace/wmsBasePlace/component/editDialog.vue
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Web/src/views/main/wmsPlace/wmsBasePlace/index.vue
ÎļþÒÑɾ³ý