payne
2024-04-24 0609ad2318e9d20dfa1d1eebe3c24242717cd112
新增实体
已添加54个文件
已重命名2个文件
已修改29个文件
已删除13个文件
21373 ■■■■ 文件已修改
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsAreaManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerTypeManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsFactoryManage.js 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsPlaceManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsUnitManage.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/addForm.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/editForm.vue 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/excelForm.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/index.vue 827 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/addForm.vue 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/editForm.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/excelForm.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/index.vue 762 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/addForm.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/editForm.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/excelForm.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/index.vue 528 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/addForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/editForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/index.vue 897 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/addForm.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/editForm.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/excelForm.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/index.vue 1345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/addForm.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/editForm.vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/excelForm.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/index.vue 463 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/editForm.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Admin.NET.Application.xml 4500 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/BindEntrance/Dto/BindEntranceOutput.cs 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaDto.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaInput.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaOutput.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/WmsAreaService.cs 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerDto.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerInput.cs 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerOutput.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/IWmsContainerService.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/WmsContainerService.cs 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceDto.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceInput.cs 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceOutput.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/WmsPlaceService.cs 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Dto/WmsAreaInput.cs 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Dto/WmsAreaOutput.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/IWmsAreaService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Map/WmsAreaMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/WmsAreaService.cs 649 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerInput.cs 348 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerOutput.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/IWmsContainerService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Map/WmsContainerMapper.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/WmsContainerService.cs 670 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Dto/WmsContainerTypeInput.cs 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Dto/WmsContainerTypeOutput.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/IWmsContainerTypeService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Map/WmsContainerTypeMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/WmsContainerTypeService.cs 451 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/Dto/WmsFactoryInput.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/Dto/WmsFactoryOutput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/WmsFactoryService.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceInput.cs 646 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceOutput.cs 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/IWmsPlaceService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Map/WmsPlaceMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/WmsPlaceService.cs 916 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Dto/WmsUnitInput.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Dto/WmsUnitOutput.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/IWmsUnitService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Map/WmsUnitMapper.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/WmsUnitService.cs 412 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/MaterialSorting/Dto/MaterialSortingServiceOutput.cs 338 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsInWarehouse/Dto/WmsInWarehouseeOutput.cs 260 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsStockReturnWarehouse/Dto/WmsStockReturnWarehouseOutput.cs 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsUnit.cs 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsAreaImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerTypeImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsFactoryImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsPlaceImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsUnitImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsAreaManage.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢åº“区信息
 *
 * @author liuwq
 */
export function WmsAreaPage (parameter) {
  return axios({
    url: '/WmsArea/page',
    method: 'get',
    params: parameter
  })
}
/**
 * åº“区信息列表
 *
 * @author liuwq
 */
export function WmsAreaList (parameter) {
  return axios({
    url: '/WmsArea/list',
    method: 'get',
    params: parameter
  })
}
/**
 * æ·»åŠ åº“åŒºä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsAreaAdd (parameter) {
  return axios({
    url: '/WmsArea/add',
    method: 'post',
    data: parameter
  })
}
/**
 * ç¼–辑库区信息
 *
 * @author liuwq
 */
export function WmsAreaEdit (parameter) {
  return axios({
    url: '/WmsArea/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * åˆ é™¤åº“区信息
 *
 * @author liuwq
 */
export function WmsAreaDelete (parameter) {
  return axios({
    url: '/WmsArea/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * å¯¼å‡ºåº“区信息的Excel文件
 *
 * @author liuwq
 */
export function WmsAreaToExcel (parameter) {
  return axios({
    url: '/WmsArea/toExcel',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
/**
 * å¯¼å…¥åº“区信息的Excel文件
 *
 * @author liuwq
 */
export function WmsAreaImportExcel (data, parameter) {
  return axios({
    url: '/WmsArea/importExcel',
    method: 'post',
    data: data,
    params: parameter
  })
}
/**
 * ä¸‹è½½åº“区信息的Excel导入模板
 *
 * @author liuwq
 */
export function WmsAreaDownloadExcelTemplate(parameter) {
  return axios({
    url: '/WmsArea/downloadExcelTemplate',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerManage.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢å®¹å™¨ä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsContainerPage (parameter) {
  return axios({
    url: '/WmsContainer/page',
    method: 'get',
    params: parameter
  })
}
/**
 * å®¹å™¨ä¿¡æ¯åˆ—表
 *
 * @author liuwq
 */
export function WmsContainerList (parameter) {
  return axios({
    url: '/WmsContainer/list',
    method: 'get',
    params: parameter
  })
}
/**
 * æ·»åŠ å®¹å™¨ä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsContainerAdd (parameter) {
  return axios({
    url: '/WmsContainer/add',
    method: 'post',
    data: parameter
  })
}
/**
 * ç¼–辑容器信息
 *
 * @author liuwq
 */
export function WmsContainerEdit (parameter) {
  return axios({
    url: '/WmsContainer/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * åˆ é™¤å®¹å™¨ä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsContainerDelete (parameter) {
  return axios({
    url: '/WmsContainer/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * å¯¼å‡ºå®¹å™¨ä¿¡æ¯çš„Excel文件
 *
 * @author liuwq
 */
export function WmsContainerToExcel (parameter) {
  return axios({
    url: '/WmsContainer/toExcel',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
/**
 * å¯¼å…¥å®¹å™¨ä¿¡æ¯çš„Excel文件
 *
 * @author liuwq
 */
export function WmsContainerImportExcel (data, parameter) {
  return axios({
    url: '/WmsContainer/importExcel',
    method: 'post',
    data: data,
    params: parameter
  })
}
/**
 * ä¸‹è½½å®¹å™¨ä¿¡æ¯çš„Excel导入模板
 *
 * @author liuwq
 */
export function WmsContainerDownloadExcelTemplate(parameter) {
  return axios({
    url: '/WmsContainer/downloadExcelTemplate',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerPackagingManage.js
@@ -1,7 +1,7 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢åŒ…装关系基础表
 * æŸ¥è¯¢å®¹å™¨å…³ç³»
 *
 * @author ly
 */
@@ -14,7 +14,7 @@
}
/**
 * åŒ…装关系基础表列表
 * å®¹å™¨å…³ç³»åˆ—表
 *
 * @author ly
 */
@@ -27,7 +27,7 @@
}
/**
 * æ·»åŠ åŒ…è£…å…³ç³»åŸºç¡€è¡¨
 * æ·»åŠ å®¹å™¨å…³ç³»
 *
 * @author ly
 */
@@ -40,7 +40,7 @@
}
/**
 * ç¼–辑包装关系基础表
 * ç¼–辑容器关系
 *
 * @author ly
 */
@@ -53,7 +53,7 @@
}
/**
 * åˆ é™¤åŒ…装关系基础表
 * åˆ é™¤å®¹å™¨å…³ç³»
 *
 * @author ly
 */
@@ -67,7 +67,7 @@
/**
 * å¯¼å‡ºåŒ…装关系基础表的Excel文件
 * å¯¼å‡ºå®¹å™¨å…³ç³»çš„Excel文件
 *
 * @author ly
 */
@@ -81,7 +81,7 @@
}
/**
 * å¯¼å…¥åŒ…装关系基础表的Excel文件
 * å¯¼å…¥å®¹å™¨å…³ç³»çš„Excel文件
 *
 * @author ly
 */
@@ -97,7 +97,7 @@
/**
 * ä¸‹è½½åŒ…装关系基础表的Excel导入模板
 * ä¸‹è½½å®¹å™¨å…³ç³»çš„Excel导入模板
 *
 * @author ly
 */
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsContainerTypeManage.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢å®¹å™¨ç±»åž‹
 *
 * @author liuwq
 */
export function WmsContainerTypePage (parameter) {
  return axios({
    url: '/WmsContainerType/page',
    method: 'get',
    params: parameter
  })
}
/**
 * å®¹å™¨ç±»åž‹åˆ—表
 *
 * @author liuwq
 */
export function WmsContainerTypeList (parameter) {
  return axios({
    url: '/WmsContainerType/list',
    method: 'get',
    params: parameter
  })
}
/**
 * æ·»åŠ å®¹å™¨ç±»åž‹
 *
 * @author liuwq
 */
export function WmsContainerTypeAdd (parameter) {
  return axios({
    url: '/WmsContainerType/add',
    method: 'post',
    data: parameter
  })
}
/**
 * ç¼–辑容器类型
 *
 * @author liuwq
 */
export function WmsContainerTypeEdit (parameter) {
  return axios({
    url: '/WmsContainerType/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * åˆ é™¤å®¹å™¨ç±»åž‹
 *
 * @author liuwq
 */
export function WmsContainerTypeDelete (parameter) {
  return axios({
    url: '/WmsContainerType/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * å¯¼å‡ºå®¹å™¨ç±»åž‹çš„Excel文件
 *
 * @author liuwq
 */
export function WmsContainerTypeToExcel (parameter) {
  return axios({
    url: '/WmsContainerType/toExcel',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
/**
 * å¯¼å…¥å®¹å™¨ç±»åž‹çš„Excel文件
 *
 * @author liuwq
 */
export function WmsContainerTypeImportExcel (data, parameter) {
  return axios({
    url: '/WmsContainerType/importExcel',
    method: 'post',
    data: data,
    params: parameter
  })
}
/**
 * ä¸‹è½½å®¹å™¨ç±»åž‹çš„Excel导入模板
 *
 * @author liuwq
 */
export function WmsContainerTypeDownloadExcelTemplate(parameter) {
  return axios({
    url: '/WmsContainerType/downloadExcelTemplate',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsFactoryManage.js
@@ -1,9 +1,9 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯è¡¨
 * æŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryPage (parameter) {
  return axios({
@@ -14,9 +14,9 @@
}
/**
 * å·¥åŽ‚ä¿¡æ¯è¡¨åˆ—è¡¨
 * å·¥åŽ‚ä¿¡æ¯åˆ—è¡¨
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryList (parameter) {
  return axios({
@@ -27,9 +27,9 @@
}
/**
 * æ·»åŠ å·¥åŽ‚ä¿¡æ¯è¡¨
 * æ·»åŠ å·¥åŽ‚ä¿¡æ¯
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryAdd (parameter) {
  return axios({
@@ -40,9 +40,9 @@
}
/**
 * ç¼–辑工厂信息表
 * ç¼–辑工厂信息
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryEdit (parameter) {
  return axios({
@@ -53,9 +53,9 @@
}
/**
 * åˆ é™¤å·¥åŽ‚ä¿¡æ¯è¡¨
 * åˆ é™¤å·¥åŽ‚ä¿¡æ¯
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryDelete (parameter) {
  return axios({
@@ -67,9 +67,9 @@
/**
 * å¯¼å‡ºå·¥åŽ‚ä¿¡æ¯è¡¨çš„Excel文件
 * å¯¼å‡ºå·¥åŽ‚ä¿¡æ¯çš„Excel文件
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryToExcel (parameter) {
  return axios({
@@ -81,9 +81,9 @@
}
/**
 * å¯¼å…¥å·¥åŽ‚ä¿¡æ¯è¡¨çš„Excel文件
 * å¯¼å…¥å·¥åŽ‚ä¿¡æ¯çš„Excel文件
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryImportExcel (data, parameter) {
  return axios({
@@ -97,9 +97,9 @@
/**
 * ä¸‹è½½å·¥åŽ‚ä¿¡æ¯è¡¨çš„Excel导入模板
 * ä¸‹è½½å·¥åŽ‚ä¿¡æ¯çš„Excel导入模板
 *
 * @author ly
 * @author liuwq
 */
export function WmsFactoryDownloadExcelTemplate(parameter) {
  return axios({
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsPlaceManage.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢åº“位信息
 *
 * @author liuwq
 */
export function WmsPlacePage (parameter) {
  return axios({
    url: '/WmsPlace/page',
    method: 'get',
    params: parameter
  })
}
/**
 * åº“位信息列表
 *
 * @author liuwq
 */
export function WmsPlaceList (parameter) {
  return axios({
    url: '/WmsPlace/list',
    method: 'get',
    params: parameter
  })
}
/**
 * æ·»åŠ åº“ä½ä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsPlaceAdd (parameter) {
  return axios({
    url: '/WmsPlace/add',
    method: 'post',
    data: parameter
  })
}
/**
 * ç¼–辑库位信息
 *
 * @author liuwq
 */
export function WmsPlaceEdit (parameter) {
  return axios({
    url: '/WmsPlace/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * åˆ é™¤åº“位信息
 *
 * @author liuwq
 */
export function WmsPlaceDelete (parameter) {
  return axios({
    url: '/WmsPlace/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * å¯¼å‡ºåº“位信息的Excel文件
 *
 * @author liuwq
 */
export function WmsPlaceToExcel (parameter) {
  return axios({
    url: '/WmsPlace/toExcel',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
/**
 * å¯¼å…¥åº“位信息的Excel文件
 *
 * @author liuwq
 */
export function WmsPlaceImportExcel (data, parameter) {
  return axios({
    url: '/WmsPlace/importExcel',
    method: 'post',
    data: data,
    params: parameter
  })
}
/**
 * ä¸‹è½½åº“位信息的Excel导入模板
 *
 * @author liuwq
 */
export function WmsPlaceDownloadExcelTemplate(parameter) {
  return axios({
    url: '/WmsPlace/downloadExcelTemplate',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsUnitManage.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢å•位信息
 *
 * @author liuwq
 */
export function WmsUnitPage (parameter) {
  return axios({
    url: '/WmsUnit/page',
    method: 'get',
    params: parameter
  })
}
/**
 * å•位信息列表
 *
 * @author liuwq
 */
export function WmsUnitList (parameter) {
  return axios({
    url: '/WmsUnit/list',
    method: 'get',
    params: parameter
  })
}
/**
 * æ·»åŠ å•ä½ä¿¡æ¯
 *
 * @author liuwq
 */
export function WmsUnitAdd (parameter) {
  return axios({
    url: '/WmsUnit/add',
    method: 'post',
    data: parameter
  })
}
/**
 * ç¼–辑单位信息
 *
 * @author liuwq
 */
export function WmsUnitEdit (parameter) {
  return axios({
    url: '/WmsUnit/edit',
    method: 'post',
    data: parameter
  })
}
/**
 * åˆ é™¤å•位信息
 *
 * @author liuwq
 */
export function WmsUnitDelete (parameter) {
  return axios({
    url: '/WmsUnit/delete',
    method: 'post',
    data: parameter
  })
}
/**
 * å¯¼å‡ºå•位信息的Excel文件
 *
 * @author liuwq
 */
export function WmsUnitToExcel (parameter) {
  return axios({
    url: '/WmsUnit/toExcel',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
/**
 * å¯¼å…¥å•位信息的Excel文件
 *
 * @author liuwq
 */
export function WmsUnitImportExcel (data, parameter) {
  return axios({
    url: '/WmsUnit/importExcel',
    method: 'post',
    data: data,
    params: parameter
  })
}
/**
 * ä¸‹è½½å•位信息的Excel导入模板
 *
 * @author liuwq
 */
export function WmsUnitDownloadExcelTemplate(parameter) {
  return axios({
    url: '/WmsUnit/downloadExcelTemplate',
    method: 'get',
    params: parameter,
    responseType: 'blob'
  })
}
iWare_RawMaterialWarehouse_Web/src/api/modular/main/WmsBase/WmsWarehouseManage.js
@@ -1,9 +1,9 @@
import { axios } from '@/utils/request'
/**
 * æŸ¥è¯¢ä»“库表
 * æŸ¥è¯¢ä»“库信息
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehousePage (parameter) {
  return axios({
@@ -14,9 +14,9 @@
}
/**
 * ä»“库表列表
 * ä»“库信息列表
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseList (parameter) {
  return axios({
@@ -27,9 +27,9 @@
}
/**
 * æ·»åŠ ä»“åº“è¡¨
 * æ·»åŠ ä»“åº“ä¿¡æ¯
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseAdd (parameter) {
  return axios({
@@ -40,9 +40,9 @@
}
/**
 * ç¼–辑仓库表
 * ç¼–辑仓库信息
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseEdit (parameter) {
  return axios({
@@ -53,9 +53,9 @@
}
/**
 * åˆ é™¤ä»“库表
 * åˆ é™¤ä»“库信息
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseDelete (parameter) {
  return axios({
@@ -67,9 +67,9 @@
/**
 * å¯¼å‡ºä»“库表的Excel文件
 * å¯¼å‡ºä»“库信息的Excel文件
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseToExcel (parameter) {
  return axios({
@@ -81,9 +81,9 @@
}
/**
 * å¯¼å…¥ä»“库表的Excel文件
 * å¯¼å…¥ä»“库信息的Excel文件
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseImportExcel (data, parameter) {
  return axios({
@@ -97,9 +97,9 @@
/**
 * ä¸‹è½½ä»“库表的Excel导入模板
 * ä¸‹è½½ä»“库信息的Excel导入模板
 *
 * @author ly
 * @author liuwq
 */
export function WmsWarehouseDownloadExcelTemplate(parameter) {
  return axios({
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/addForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
<template>
  <a-modal
    title="新增库区信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
        <a-form :form="form">
        <a-form-item label="库区编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区编码" v-decorator="['areaCode', {rules: [{required: true, message: '请输入库区编码!'}]}]" />
        </a-form-item>
        <a-form-item label="仓库编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入仓库编号" v-decorator="['warehouseCode', {rules: [{required: true, message: '请输入仓库编号!'}]}]" />
        </a-form-item>
        <a-form-item label="仓库名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入仓库名称" v-decorator="['warehouseName', {rules: [{required: true, message: '请输入仓库名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库区名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区名称" v-decorator="['areaName', {rules: [{required: true, message: '请输入库区名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库区描述" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区描述" v-decorator="['areaDesc']" />
        </a-form-item>
        <a-form-item label="库区状态" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库区状态" style="width: 100%" v-decorator="['areaStatus', {rules: [{required: true, message: '请输入库区状态!'}]}]" />
        </a-form-item>
        <a-form-item label="ERP代码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入ERP代码" v-decorator="['erpCode', {rules: [{required: true, message: '请输入ERP代码!'}]}]" />
        </a-form-item>
        <a-form-item label="所属仓库" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入所属仓库" v-decorator="['warehouseId', {rules: [{required: true, message: '请输入所属仓库!'}]}]" />
        </a-form-item>
        <a-form-item label="零件级管控" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isBarcodeLevelControl',{rules: [{ required: true, message: '请选择零件级管控!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="检验先进先出" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isFIFO',{rules: [{ required: true, message: '请选择检验先进先出!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="零件级管控" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isPartLevelControl',{rules: [{ required: true, message: '请选择零件级管控!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="允许混淆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowConfusion',{rules: [{ required: true, message: '请选择允许混淆!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="允许负库存" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowNegativeInventory',{rules: [{ required: true, message: '请选择允许负库存!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isVirtually', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import moment from 'moment'
  import {
  WmsAreaAdd
  } from '@/api/modular/main/WmsBase/WmsAreaManage'
  export default {
  data () {
  return {
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      add (record) {
        this.visible = true
        this.$nextTick(() => {
        });
      },
      /**
       * æäº¤è¡¨å•
       */
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
              }
            }
            WmsAreaAdd(values).then((res) => {
              if (res.success) {
                this.$message.success('新增成功')
                this.confirmLoading = false
                this.$emit('ok', values)
                this.handleCancel()
              } else {
                this.$message.error('新增失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/editForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
<template>
  <a-modal
    title="编辑库区信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="库区编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区编码" v-decorator="['areaCode', {rules: [{required: true, message: '请输入库区编码!'}]}]" />
        </a-form-item>
        <a-form-item label="仓库编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入仓库编号" v-decorator="['warehouseCode', {rules: [{required: true, message: '请输入仓库编号!'}]}]" />
        </a-form-item>
        <a-form-item label="仓库名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入仓库名称" v-decorator="['warehouseName', {rules: [{required: true, message: '请输入仓库名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库区名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区名称" v-decorator="['areaName', {rules: [{required: true, message: '请输入库区名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库区描述" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区描述" v-decorator="['areaDesc']" />
        </a-form-item>
        <a-form-item label="库区状态" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库区状态" style="width: 100%" v-decorator="['areaStatus', {rules: [{required: true, message: '请输入库区状态!'}]}]" />
        </a-form-item>
        <a-form-item label="ERP代码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入ERP代码" v-decorator="['erpCode', {rules: [{required: true, message: '请输入ERP代码!'}]}]" />
        </a-form-item>
        <a-form-item label="所属仓库" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入所属仓库" v-decorator="['warehouseId', {rules: [{required: true, message: '请输入所属仓库!'}]}]" />
        </a-form-item>
        <a-form-item label="零件级管控" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isBarcodeLevelControl',{rules: [{ required: true, message: '请选择零件级管控!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="检验先进先出" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isFIFO',{rules: [{ required: true, message: '请选择检验先进先出!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="零件级管控" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isPartLevelControl',{rules: [{ required: true, message: '请选择零件级管控!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="允许混淆" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowConfusion',{rules: [{ required: true, message: '请选择允许混淆!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="允许负库存" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowNegativeInventory',{rules: [{ required: true, message: '请选择允许负库存!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isVirtually', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import moment from 'moment'
  import {
  WmsAreaEdit
  } from '@/api/modular/main/WmsBase/WmsAreaManage'
  export default {
  data () {
  return {
  Id: 0,
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
  record: {},
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      edit (record) {
        this.visible = true;
        this.Id = record.id;
        this.$nextTick(() => {
        });
        //深度拷贝 ç§»é™¤VUE的监听,防止INDEX页面值变动
        this.record = JSON.parse(JSON.stringify(record))
        this.$nextTick(() => {
          this.form.setFieldsValue(
            {
              id: record.id,
              areaCode: record.areaCode,
              warehouseCode: record.warehouseCode,
              warehouseName: record.warehouseName,
              areaName: record.areaName,
              areaDesc: record.areaDesc,
              areaStatus: record.areaStatus,
              erpCode: record.erpCode,
              warehouseId: record.warehouseId,
              isBarcodeLevelControl: record.isBarcodeLevelControl,
              isFIFO: record.isFIFO,
              isPartLevelControl: record.isPartLevelControl,
              isAllowConfusion: record.isAllowConfusion,
              isAllowNegativeInventory: record.isAllowNegativeInventory,
              isVirtually: record.isVirtually,
              isDisabled: record.isDisabled
            }
          )
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (values[key] == null) continue
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
                 this.record[key] = values[key]
              } else {
                 this.record[key] = values[key]
              }
            }
            WmsAreaEdit(this.record).then((res) => {
              if (res.success) {
                this.$message.success('编辑成功')
                this.confirmLoading = false
                this.$emit('ok', this.record)
                this.handleCancel()
              } else {
                this.$message.error('编辑失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          }else{
            this.confirmLoading = false
          }
        });
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/excelForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <a-modal
    :width="850"
    :destroyOnClose="true"
    :visible="visible"
    :forceRender="true"
    title="批量导入"
    cancelText="取消上传"
    okText="开始上传"
    @cancel="handleCancel"
    @ok="handleSubmit">
    <a-spin :spinning="confirmLoading">
      <a-row :span="24">
        <span>请选择要导入的数据文件(Excel格式)</span>
      </a-row>
      <p></p>
      <a-row>
        <a-col :span="16">
          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
            <a-icon style="font-size: 40px;" type="cloud-upload" />
          </a-upload-dragger>
        </a-col>
        <!--<a-col :span="8">
          <span>导入模式:</span>
          <a-select
            style="width: 130px"
            placeholder="请选择导入模式"
            v-model="importExcelType">
            <a-select-option
              v-for="(item,index) in importExcelTypeData"
              :key="index"
              :value="item.code">{{ item.name }}
            </a-select-option>
          </a-select>
        </a-col>-->
      </a-row>
      <a-row :span="24">
        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
          ç‚¹å‡»æŸ¥çœ‹æ–‡ä»¶ä¸Šä¼ è¦æ±‚
        </a-button>-->
        <span>【</span>
        <a-button style="width: 90px;text-align: left;" @click="wmsAreaDownloadExcelTemplate" type="link">下载导入模板</a-button>,填写并上传
        <span>】</span>
        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
          æ”¶èµ·
        </a-button>
      </a-row>
      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
        <a-breadcrumb>
          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">文件上传要求</a-breadcrumb-item>
        </a-breadcrumb>
      </a-row>
      <pre v-show="detailed">
        <div v-html="demandText"></div>
      </pre>
      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
      <pre v-show="detailed">
        <div v-html="columnText"></div>
      </pre>
    </a-spin>
  </a-modal>
</template>
<script>
  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
  import { WmsAreaImportExcel, WmsAreaDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsAreaManage'
  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
  export default {
  components: {
  },
  data() {
  return {
  visible: false,
  detailed: false,
  confirmLoading: false,
  fileList: [],
  importExcelTypeData: [],
  importExcelType: '1',
  uploadFile: null,
  columns: [],
  dataList: [],
  demandText:'',
  columnText: ''
  }
  },
  methods: {
  index() {
  this.visible = true;
  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
  this.demandText = parseDemandText("wmsAreaDownloadExcelTemplate")
  window.downloadFile = this.wmsAreaDownloadExcelTemplate;
  this.getTable();
  },
  showDemand() {
  this.detailed = !this.detailed;
  },
  customRequest(document) {
  this.uploadFile = document
  },
  getTable() {
  sysExcelTemplateGetColumnList({className: "WmsArea"}).then(res =>
  {
  if (res.success) {
  this.columns =[];
  this.dataList = [{}];
  res.data.forEach(x => {
  this.columns.push({
  dataIndex: x.columnName,
  key: x.columnName,
  title: x.columnComment
  });
  this.dataList[0][x.columnName] = x.isRequired ? "必填" : "非必填"
  });
  this.columnText = parseExcelFieldText(res.data);
  }
  });
  },
  beforeUpload(fileInfo) {
  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
  if (!res.success) {
  this.$message.warning(res.msg)
  return false
  }
  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
  },
  handleChange(fileInfo) {
  if (fileInfo.file.status === 'error') {
  fileInfo.fileList.splice(0, 1)
  }
  if (fileInfo.file.status === 'done') {
  if (fileInfo.fileList.length > 1) {
  fileInfo.fileList.splice(0, 1)
  }
  this.fileList = fileInfo.file
  }
  },
  handleSubmit() {
  this.confirmLoading = true
  const formData = new FormData()
  formData.append('file', this.uploadFile.file)
  WmsAreaImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
  this.$message.success('操作成功')
  this.confirmLoading = false
  this.$emit('ok', [])
  this.handleCancel()
  }).finally((res)=>{this.confirmLoading = false})
  },
  handleCancel() {
  this.visible = false
  this.detailed = false
  },
  wmsAreaDownloadExcelTemplate() {
  WmsAreaDownloadExcelTemplate({version: "v2"}).then((res) => {
  downloadFile(res);
  }).catch((err) => {
  this.$message.error('下载错误:获取文件流错误' + err)
  })
  }
  }
  }
</script>
<style scoped>
::v-deep .ant-upload.ant-upload-drag {
  position: relative;
  width: 140px;
  height: 135px;
  text-align: center;
  background: #fafafa;
  border: 1px dashed #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  -webkit-transition: border-color 0.3s;
  transition: border-color 0.3s;
}
::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
  color: #ffc53d;
  border-color: white;
}
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsArea/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,827 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsArea:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="库区编码">
                <a-input v-model="queryParam.areaCode" allow-clear placeholder="请输入库区编码"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="仓库编号">
                <a-input v-model="queryParam.warehouseCode" allow-clear placeholder="请输入仓库编号"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="仓库名称">
                  <a-input v-model="queryParam.warehouseName" allow-clear placeholder="请输入仓库名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库区名称">
                  <a-input v-model="queryParam.areaName" allow-clear placeholder="请输入库区名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库区描述">
                  <a-input v-model="queryParam.areaDesc" allow-clear placeholder="请输入库区描述"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="库区状态">
                  <a-input-number v-model="queryParam.areaStatus" style="width: 100%" allow-clear placeholder="请输入库区状态"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="ERP代码">
                  <a-input v-model="queryParam.erpCode" allow-clear placeholder="请输入ERP代码"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="所属仓库">
                  <a-input v-model="queryParam.warehouseId" allow-clear placeholder="请输入所属仓库"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="零件级管控">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isBarcodeLevelControl" placeholder="请选择零件级管控">
                        <a-select-option v-for="(item,index) in isBarcodeLevelControlData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="检验先进先出">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isFIFO" placeholder="请选择检验先进先出">
                        <a-select-option v-for="(item,index) in isFIFOData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="零件级管控">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isPartLevelControl" placeholder="请选择零件级管控">
                        <a-select-option v-for="(item,index) in isPartLevelControlData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="允许混淆">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isAllowConfusion" placeholder="请选择允许混淆">
                        <a-select-option v-for="(item,index) in isAllowConfusionData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="允许负库存">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isAllowNegativeInventory" placeholder="请选择允许负库存">
                        <a-select-option v-for="(item,index) in isAllowNegativeInventoryData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否虚拟">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isVirtually" placeholder="请选择是否虚拟">
                        <a-select-option v-for="(item,index) in isVirtuallyData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsArea:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsArea:exportExcel')" icon="download" @click="WmsAreaToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsArea:add')" icon="plus" @click="$refs.addForm.add()">新增库区信息</a-button>
        </div>
        </template>
          <span slot="isBarcodeLevelControlscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isFIFOscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isPartLevelControlscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isAllowConfusionscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isAllowNegativeInventoryscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isVirtuallyscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsArea:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsArea:edit') & hasPerm('WmsArea:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsArea:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsAreaDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsAreaPage, WmsAreaDelete, WmsAreaToExcel } from '@/api/modular/main/WmsBase/WmsAreaManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '库区编码',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaCode'
    },
    {
    title: '仓库编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'warehouseCode'
    },
    {
    title: '仓库名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'warehouseName'
    },
    {
    title: '库区名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaName'
    },
    {
    title: '库区描述',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaDesc'
    },
    {
    title: '库区状态',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaStatus'
    },
    {
    title: 'ERP代码',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'erpCode'
    },
    {
    title: '所属仓库',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'warehouseId'
    },
    {
    title: '零件级管控',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isBarcodeLevelControl',
    scopedSlots: { customRender: 'isBarcodeLevelControlscopedSlots' }
    },
    {
    title: '检验先进先出',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isFIFO',
    scopedSlots: { customRender: 'isFIFOscopedSlots' }
    },
    {
    title: '零件级管控',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isPartLevelControl',
    scopedSlots: { customRender: 'isPartLevelControlscopedSlots' }
    },
    {
    title: '允许混淆',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isAllowConfusion',
    scopedSlots: { customRender: 'isAllowConfusionscopedSlots' }
    },
    {
    title: '允许负库存',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isAllowNegativeInventory',
    scopedSlots: { customRender: 'isAllowNegativeInventoryscopedSlots' }
    },
    {
    title: '是否虚拟',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isVirtually',
    scopedSlots: { customRender: 'isVirtuallyscopedSlots' }
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsAreaPage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsArea:edit') || this.hasPerm('WmsArea:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isBarcodeLevelControlOption = this.$options
    this.isBarcodeLevelControlData = isBarcodeLevelControlOption.filters['dictData']('yes_true_false')
    const isFIFOOption = this.$options
    this.isFIFOData = isFIFOOption.filters['dictData']('yes_true_false')
    const isPartLevelControlOption = this.$options
    this.isPartLevelControlData = isPartLevelControlOption.filters['dictData']('yes_true_false')
    const isAllowConfusionOption = this.$options
    this.isAllowConfusionData = isAllowConfusionOption.filters['dictData']('yes_true_false')
    const isAllowNegativeInventoryOption = this.$options
    this.isAllowNegativeInventoryData = isAllowNegativeInventoryOption.filters['dictData']('yes_true_false')
    const isVirtuallyOption = this.$options
    this.isVirtuallyData = isVirtuallyOption.filters['dictData']('yes_true_false')
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsAreaDelete (record) {
    WmsAreaDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsAreaToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsAreaPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/addForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
<template>
  <a-modal
    title="新增容器信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
        <a-form :form="form">
        <a-form-item label="编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入编号" v-decorator="['containerCode', {rules: [{required: true, message: '请输入编号!'}]}]" />
        </a-form-item>
        <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入名称" v-decorator="['containerName', {rules: [{required: true, message: '请输入名称!'}]}]" />
        </a-form-item>
        <a-form-item label="类型ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型ID" v-decorator="['containerTypeId', {rules: [{required: true, message: '请输入类型ID!'}]}]" />
        </a-form-item>
        <a-form-item label="类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型名称" v-decorator="['containerTypeName', {rules: [{required: true, message: '请输入类型名称!'}]}]" />
        </a-form-item>
        <a-form-item label="容器关系ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入容器关系ID" v-decorator="['packagingId', {rules: [{required: true, message: '请输入容器关系ID!'}]}]" />
        </a-form-item>
        <a-form-item label="长度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入长度" v-decorator="['specLength']" />
        </a-form-item>
        <a-form-item label="宽度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入宽度" v-decorator="['specWidth']" />
        </a-form-item>
        <a-form-item label="高度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入高度" v-decorator="['specHeight']" />
        </a-form-item>
        <a-form-item label="限长" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限长" v-decorator="['limitLength']" />
        </a-form-item>
        <a-form-item label="限宽" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限宽" v-decorator="['limitWidth']" />
        </a-form-item>
        <a-form-item label="限高" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限高" v-decorator="['limitHeight']" />
        </a-form-item>
        <a-form-item label="载重上限" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入载重上限" v-decorator="['maxWeight']" />
        </a-form-item>
        <a-form-item label="父容器名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入父容器名称" v-decorator="['parentContainerName']" />
        </a-form-item>
        <a-form-item label="父容器Id" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入父容器Id" v-decorator="['parentContainerId']" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入是否虚拟" style="width: 100%" v-decorator="['isVirtually']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import moment from 'moment'
  import {
  WmsContainerAdd
  } from '@/api/modular/main/WmsBase/WmsContainerManage'
  export default {
  data () {
  return {
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      add (record) {
        this.visible = true
        this.$nextTick(() => {
        });
      },
      /**
       * æäº¤è¡¨å•
       */
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
              }
            }
            WmsContainerAdd(values).then((res) => {
              if (res.success) {
                this.$message.success('新增成功')
                this.confirmLoading = false
                this.$emit('ok', values)
                this.handleCancel()
              } else {
                this.$message.error('新增失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/editForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
<template>
  <a-modal
    title="编辑容器信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入编号" v-decorator="['containerCode', {rules: [{required: true, message: '请输入编号!'}]}]" />
        </a-form-item>
        <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入名称" v-decorator="['containerName', {rules: [{required: true, message: '请输入名称!'}]}]" />
        </a-form-item>
        <a-form-item label="类型ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型ID" v-decorator="['containerTypeId', {rules: [{required: true, message: '请输入类型ID!'}]}]" />
        </a-form-item>
        <a-form-item label="类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型名称" v-decorator="['containerTypeName', {rules: [{required: true, message: '请输入类型名称!'}]}]" />
        </a-form-item>
        <a-form-item label="容器关系ID" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入容器关系ID" v-decorator="['packagingId', {rules: [{required: true, message: '请输入容器关系ID!'}]}]" />
        </a-form-item>
        <a-form-item label="长度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入长度" v-decorator="['specLength']" />
        </a-form-item>
        <a-form-item label="宽度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入宽度" v-decorator="['specWidth']" />
        </a-form-item>
        <a-form-item label="高度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入高度" v-decorator="['specHeight']" />
        </a-form-item>
        <a-form-item label="限长" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限长" v-decorator="['limitLength']" />
        </a-form-item>
        <a-form-item label="限宽" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限宽" v-decorator="['limitWidth']" />
        </a-form-item>
        <a-form-item label="限高" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入限高" v-decorator="['limitHeight']" />
        </a-form-item>
        <a-form-item label="载重上限" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入载重上限" v-decorator="['maxWeight']" />
        </a-form-item>
        <a-form-item label="父容器名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入父容器名称" v-decorator="['parentContainerName']" />
        </a-form-item>
        <a-form-item label="父容器Id" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入父容器Id" v-decorator="['parentContainerId']" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入是否虚拟" style="width: 100%" v-decorator="['isVirtually']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import moment from 'moment'
  import {
  WmsContainerEdit
  } from '@/api/modular/main/WmsBase/WmsContainerManage'
  export default {
  data () {
  return {
  Id: 0,
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
  record: {},
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      edit (record) {
        this.visible = true;
        this.Id = record.id;
        this.$nextTick(() => {
        });
        //深度拷贝 ç§»é™¤VUE的监听,防止INDEX页面值变动
        this.record = JSON.parse(JSON.stringify(record))
        this.$nextTick(() => {
          this.form.setFieldsValue(
            {
              id: record.id,
              containerCode: record.containerCode,
              containerName: record.containerName,
              containerTypeId: record.containerTypeId,
              containerTypeName: record.containerTypeName,
              packagingId: record.packagingId,
              specLength: record.specLength,
              specWidth: record.specWidth,
              specHeight: record.specHeight,
              limitLength: record.limitLength,
              limitWidth: record.limitWidth,
              limitHeight: record.limitHeight,
              maxWeight: record.maxWeight,
              parentContainerName: record.parentContainerName,
              parentContainerId: record.parentContainerId,
              isVirtually: record.isVirtually,
              isDisabled: record.isDisabled
            }
          )
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (values[key] == null) continue
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
                 this.record[key] = values[key]
              } else {
                 this.record[key] = values[key]
              }
            }
            WmsContainerEdit(this.record).then((res) => {
              if (res.success) {
                this.$message.success('编辑成功')
                this.confirmLoading = false
                this.$emit('ok', this.record)
                this.handleCancel()
              } else {
                this.$message.error('编辑失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          }else{
            this.confirmLoading = false
          }
        });
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/excelForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <a-modal
    :width="850"
    :destroyOnClose="true"
    :visible="visible"
    :forceRender="true"
    title="批量导入"
    cancelText="取消上传"
    okText="开始上传"
    @cancel="handleCancel"
    @ok="handleSubmit">
    <a-spin :spinning="confirmLoading">
      <a-row :span="24">
        <span>请选择要导入的数据文件(Excel格式)</span>
      </a-row>
      <p></p>
      <a-row>
        <a-col :span="16">
          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
            <a-icon style="font-size: 40px;" type="cloud-upload" />
          </a-upload-dragger>
        </a-col>
        <!--<a-col :span="8">
          <span>导入模式:</span>
          <a-select
            style="width: 130px"
            placeholder="请选择导入模式"
            v-model="importExcelType">
            <a-select-option
              v-for="(item,index) in importExcelTypeData"
              :key="index"
              :value="item.code">{{ item.name }}
            </a-select-option>
          </a-select>
        </a-col>-->
      </a-row>
      <a-row :span="24">
        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
          ç‚¹å‡»æŸ¥çœ‹æ–‡ä»¶ä¸Šä¼ è¦æ±‚
        </a-button>-->
        <span>【</span>
        <a-button style="width: 90px;text-align: left;" @click="wmsContainerDownloadExcelTemplate" type="link">下载导入模板</a-button>,填写并上传
        <span>】</span>
        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
          æ”¶èµ·
        </a-button>
      </a-row>
      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
        <a-breadcrumb>
          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">文件上传要求</a-breadcrumb-item>
        </a-breadcrumb>
      </a-row>
      <pre v-show="detailed">
        <div v-html="demandText"></div>
      </pre>
      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
      <pre v-show="detailed">
        <div v-html="columnText"></div>
      </pre>
    </a-spin>
  </a-modal>
</template>
<script>
  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
  import { WmsContainerImportExcel, WmsContainerDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsContainerManage'
  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
  export default {
  components: {
  },
  data() {
  return {
  visible: false,
  detailed: false,
  confirmLoading: false,
  fileList: [],
  importExcelTypeData: [],
  importExcelType: '1',
  uploadFile: null,
  columns: [],
  dataList: [],
  demandText:'',
  columnText: ''
  }
  },
  methods: {
  index() {
  this.visible = true;
  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
  this.demandText = parseDemandText("wmsContainerDownloadExcelTemplate")
  window.downloadFile = this.wmsContainerDownloadExcelTemplate;
  this.getTable();
  },
  showDemand() {
  this.detailed = !this.detailed;
  },
  customRequest(document) {
  this.uploadFile = document
  },
  getTable() {
  sysExcelTemplateGetColumnList({className: "WmsContainer"}).then(res =>
  {
  if (res.success) {
  this.columns =[];
  this.dataList = [{}];
  res.data.forEach(x => {
  this.columns.push({
  dataIndex: x.columnName,
  key: x.columnName,
  title: x.columnComment
  });
  this.dataList[0][x.columnName] = x.isRequired ? "必填" : "非必填"
  });
  this.columnText = parseExcelFieldText(res.data);
  }
  });
  },
  beforeUpload(fileInfo) {
  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
  if (!res.success) {
  this.$message.warning(res.msg)
  return false
  }
  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
  },
  handleChange(fileInfo) {
  if (fileInfo.file.status === 'error') {
  fileInfo.fileList.splice(0, 1)
  }
  if (fileInfo.file.status === 'done') {
  if (fileInfo.fileList.length > 1) {
  fileInfo.fileList.splice(0, 1)
  }
  this.fileList = fileInfo.file
  }
  },
  handleSubmit() {
  this.confirmLoading = true
  const formData = new FormData()
  formData.append('file', this.uploadFile.file)
  WmsContainerImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
  this.$message.success('操作成功')
  this.confirmLoading = false
  this.$emit('ok', [])
  this.handleCancel()
  }).finally((res)=>{this.confirmLoading = false})
  },
  handleCancel() {
  this.visible = false
  this.detailed = false
  },
  wmsContainerDownloadExcelTemplate() {
  WmsContainerDownloadExcelTemplate({version: "v2"}).then((res) => {
  downloadFile(res);
  }).catch((err) => {
  this.$message.error('下载错误:获取文件流错误' + err)
  })
  }
  }
  }
</script>
<style scoped>
::v-deep .ant-upload.ant-upload-drag {
  position: relative;
  width: 140px;
  height: 135px;
  text-align: center;
  background: #fafafa;
  border: 1px dashed #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  -webkit-transition: border-color 0.3s;
  transition: border-color 0.3s;
}
::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
  color: #ffc53d;
  border-color: white;
}
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainer/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,762 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsContainer:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="编号">
                <a-input v-model="queryParam.containerCode" allow-clear placeholder="请输入编号"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="名称">
                <a-input v-model="queryParam.containerName" allow-clear placeholder="请输入名称"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="类型ID">
                  <a-input v-model="queryParam.containerTypeId" allow-clear placeholder="请输入类型ID"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="类型名称">
                  <a-input v-model="queryParam.containerTypeName" allow-clear placeholder="请输入类型名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="容器关系ID">
                  <a-input v-model="queryParam.packagingId" allow-clear placeholder="请输入容器关系ID"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="长度">
                  <a-input v-model="queryParam.specLength" allow-clear placeholder="请输入长度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="宽度">
                  <a-input v-model="queryParam.specWidth" allow-clear placeholder="请输入宽度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="高度">
                  <a-input v-model="queryParam.specHeight" allow-clear placeholder="请输入高度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="限长">
                  <a-input v-model="queryParam.limitLength" allow-clear placeholder="请输入限长"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="限宽">
                  <a-input v-model="queryParam.limitWidth" allow-clear placeholder="请输入限宽"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="限高">
                  <a-input v-model="queryParam.limitHeight" allow-clear placeholder="请输入限高"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="载重上限">
                  <a-input v-model="queryParam.maxWeight" allow-clear placeholder="请输入载重上限"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="父容器名称">
                  <a-input v-model="queryParam.parentContainerName" allow-clear placeholder="请输入父容器名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="父容器Id">
                  <a-input v-model="queryParam.parentContainerId" allow-clear placeholder="请输入父容器Id"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="是否虚拟">
                  <a-input-number v-model="queryParam.isVirtually" style="width: 100%" allow-clear placeholder="请输入是否虚拟"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsContainer:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsContainer:exportExcel')" icon="download" @click="WmsContainerToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsContainer:add')" icon="plus" @click="$refs.addForm.add()">新增容器信息</a-button>
        </div>
        </template>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsContainer:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsContainer:edit') & hasPerm('WmsContainer:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsContainer:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsContainerDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsContainerPage, WmsContainerDelete, WmsContainerToExcel } from '@/api/modular/main/WmsBase/WmsContainerManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'containerCode'
    },
    {
    title: '名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'containerName'
    },
    {
    title: '类型ID',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'containerTypeId'
    },
    {
    title: '类型名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'containerTypeName'
    },
    {
    title: '容器关系ID',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'packagingId'
    },
    {
    title: '长度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'specLength'
    },
    {
    title: '宽度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'specWidth'
    },
    {
    title: '高度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'specHeight'
    },
    {
    title: '限长',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'limitLength'
    },
    {
    title: '限宽',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'limitWidth'
    },
    {
    title: '限高',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'limitHeight'
    },
    {
    title: '载重上限',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'maxWeight'
    },
    {
    title: '父容器名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'parentContainerName'
    },
    {
    title: '父容器Id',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'parentContainerId'
    },
    {
    title: '是否虚拟',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isVirtually'
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsContainerPage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsContainer:edit') || this.hasPerm('WmsContainer:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsContainerDelete (record) {
    WmsContainerDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsContainerToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsContainerPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/addForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="新增包装关系基础表"
    title="新增容器关系"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/editForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="编辑包装关系基础表"
    title="编辑容器关系"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerPackaging/index.vue
@@ -100,7 +100,7 @@
          <a-button type="info" v-if="hasPerm('WmsContainerPackaging:exportExcel')" icon="download" @click="WmsContainerPackagingToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsContainerPackaging:add')" icon="plus" @click="$refs.addForm.add()">新增包装关系基础表</a-button>
            <a-button type="primary" v-if="hasPerm('WmsContainerPackaging:add')" icon="plus" @click="$refs.addForm.add()">新增容器关系</a-button>
        </div>
        </template>
          <span slot="action" slot-scope="text, record">
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/addForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
<template>
  <a-modal
    title="新增容器类型"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
        <a-form :form="form">
        <a-form-item label="类型编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型编号" v-decorator="['typeCode', {rules: [{required: true, message: '请输入类型编号!'}]}]" />
        </a-form-item>
        <a-form-item label="类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型名称" v-decorator="['typeName', {rules: [{required: true, message: '请输入类型名称!'}]}]" />
        </a-form-item>
        <a-form-item label="是否回收" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowReclaim',{rules: [{ required: true, message: '请选择是否回收!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入单位" v-decorator="['unit', {rules: [{required: true, message: '请输入单位!'}]}]" />
        </a-form-item>
        <a-form-item label="使用期限" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入使用期限" v-decorator="['usagePeriod']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import moment from 'moment'
  import {
  WmsContainerTypeAdd
  } from '@/api/modular/main/WmsBase/WmsContainerTypeManage'
  export default {
  data () {
  return {
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      add (record) {
        this.visible = true
        this.$nextTick(() => {
        });
      },
      /**
       * æäº¤è¡¨å•
       */
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
              }
            }
            WmsContainerTypeAdd(values).then((res) => {
              if (res.success) {
                this.$message.success('新增成功')
                this.confirmLoading = false
                this.$emit('ok', values)
                this.handleCancel()
              } else {
                this.$message.error('新增失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/editForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
<template>
  <a-modal
    title="编辑容器类型"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="类型编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型编号" v-decorator="['typeCode', {rules: [{required: true, message: '请输入类型编号!'}]}]" />
        </a-form-item>
        <a-form-item label="类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入类型名称" v-decorator="['typeName', {rules: [{required: true, message: '请输入类型名称!'}]}]" />
        </a-form-item>
        <a-form-item label="是否回收" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAllowReclaim',{rules: [{ required: true, message: '请选择是否回收!' }], valuePropName: 'checked'}]" />
        </a-form-item>
        <a-form-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入单位" v-decorator="['unit', {rules: [{required: true, message: '请输入单位!'}]}]" />
        </a-form-item>
        <a-form-item label="使用期限" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入使用期限" v-decorator="['usagePeriod']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import moment from 'moment'
  import {
  WmsContainerTypeEdit
  } from '@/api/modular/main/WmsBase/WmsContainerTypeManage'
  export default {
  data () {
  return {
  Id: 0,
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
  record: {},
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      edit (record) {
        this.visible = true;
        this.Id = record.id;
        this.$nextTick(() => {
        });
        //深度拷贝 ç§»é™¤VUE的监听,防止INDEX页面值变动
        this.record = JSON.parse(JSON.stringify(record))
        this.$nextTick(() => {
          this.form.setFieldsValue(
            {
              id: record.id,
              typeCode: record.typeCode,
              typeName: record.typeName,
              isAllowReclaim: record.isAllowReclaim,
              unit: record.unit,
              usagePeriod: record.usagePeriod,
              isDisabled: record.isDisabled
            }
          )
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (values[key] == null) continue
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
                 this.record[key] = values[key]
              } else {
                 this.record[key] = values[key]
              }
            }
            WmsContainerTypeEdit(this.record).then((res) => {
              if (res.success) {
                this.$message.success('编辑成功')
                this.confirmLoading = false
                this.$emit('ok', this.record)
                this.handleCancel()
              } else {
                this.$message.error('编辑失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          }else{
            this.confirmLoading = false
          }
        });
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/excelForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <a-modal
    :width="850"
    :destroyOnClose="true"
    :visible="visible"
    :forceRender="true"
    title="批量导入"
    cancelText="取消上传"
    okText="开始上传"
    @cancel="handleCancel"
    @ok="handleSubmit">
    <a-spin :spinning="confirmLoading">
      <a-row :span="24">
        <span>请选择要导入的数据文件(Excel格式)</span>
      </a-row>
      <p></p>
      <a-row>
        <a-col :span="16">
          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
            <a-icon style="font-size: 40px;" type="cloud-upload" />
          </a-upload-dragger>
        </a-col>
        <!--<a-col :span="8">
          <span>导入模式:</span>
          <a-select
            style="width: 130px"
            placeholder="请选择导入模式"
            v-model="importExcelType">
            <a-select-option
              v-for="(item,index) in importExcelTypeData"
              :key="index"
              :value="item.code">{{ item.name }}
            </a-select-option>
          </a-select>
        </a-col>-->
      </a-row>
      <a-row :span="24">
        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
          ç‚¹å‡»æŸ¥çœ‹æ–‡ä»¶ä¸Šä¼ è¦æ±‚
        </a-button>-->
        <span>【</span>
        <a-button style="width: 90px;text-align: left;" @click="wmsContainerTypeDownloadExcelTemplate" type="link">下载导入模板</a-button>,填写并上传
        <span>】</span>
        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
          æ”¶èµ·
        </a-button>
      </a-row>
      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
        <a-breadcrumb>
          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">文件上传要求</a-breadcrumb-item>
        </a-breadcrumb>
      </a-row>
      <pre v-show="detailed">
        <div v-html="demandText"></div>
      </pre>
      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
      <pre v-show="detailed">
        <div v-html="columnText"></div>
      </pre>
    </a-spin>
  </a-modal>
</template>
<script>
  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
  import { WmsContainerTypeImportExcel, WmsContainerTypeDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsContainerTypeManage'
  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
  export default {
  components: {
  },
  data() {
  return {
  visible: false,
  detailed: false,
  confirmLoading: false,
  fileList: [],
  importExcelTypeData: [],
  importExcelType: '1',
  uploadFile: null,
  columns: [],
  dataList: [],
  demandText:'',
  columnText: ''
  }
  },
  methods: {
  index() {
  this.visible = true;
  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
  this.demandText = parseDemandText("wmsContainerTypeDownloadExcelTemplate")
  window.downloadFile = this.wmsContainerTypeDownloadExcelTemplate;
  this.getTable();
  },
  showDemand() {
  this.detailed = !this.detailed;
  },
  customRequest(document) {
  this.uploadFile = document
  },
  getTable() {
  sysExcelTemplateGetColumnList({className: "WmsContainerType"}).then(res =>
  {
  if (res.success) {
  this.columns =[];
  this.dataList = [{}];
  res.data.forEach(x => {
  this.columns.push({
  dataIndex: x.columnName,
  key: x.columnName,
  title: x.columnComment
  });
  this.dataList[0][x.columnName] = x.isRequired ? "必填" : "非必填"
  });
  this.columnText = parseExcelFieldText(res.data);
  }
  });
  },
  beforeUpload(fileInfo) {
  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
  if (!res.success) {
  this.$message.warning(res.msg)
  return false
  }
  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
  },
  handleChange(fileInfo) {
  if (fileInfo.file.status === 'error') {
  fileInfo.fileList.splice(0, 1)
  }
  if (fileInfo.file.status === 'done') {
  if (fileInfo.fileList.length > 1) {
  fileInfo.fileList.splice(0, 1)
  }
  this.fileList = fileInfo.file
  }
  },
  handleSubmit() {
  this.confirmLoading = true
  const formData = new FormData()
  formData.append('file', this.uploadFile.file)
  WmsContainerTypeImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
  this.$message.success('操作成功')
  this.confirmLoading = false
  this.$emit('ok', [])
  this.handleCancel()
  }).finally((res)=>{this.confirmLoading = false})
  },
  handleCancel() {
  this.visible = false
  this.detailed = false
  },
  wmsContainerTypeDownloadExcelTemplate() {
  WmsContainerTypeDownloadExcelTemplate({version: "v2"}).then((res) => {
  downloadFile(res);
  }).catch((err) => {
  this.$message.error('下载错误:获取文件流错误' + err)
  })
  }
  }
  }
</script>
<style scoped>
::v-deep .ant-upload.ant-upload-drag {
  position: relative;
  width: 140px;
  height: 135px;
  text-align: center;
  background: #fafafa;
  border: 1px dashed #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  -webkit-transition: border-color 0.3s;
  transition: border-color 0.3s;
}
::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
  color: #ffc53d;
  border-color: white;
}
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsContainerType/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,528 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsContainerType:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="类型编号">
                <a-input v-model="queryParam.typeCode" allow-clear placeholder="请输入类型编号"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="类型名称">
                <a-input v-model="queryParam.typeName" allow-clear placeholder="请输入类型名称"/>
              </a-form-item>
            </a-col><template v-if="advanced">
            <a-col :md="8" :sm="24">
                <a-form-item label="是否回收">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isAllowReclaim" placeholder="请选择是否回收">
                        <a-select-option v-for="(item,index) in isAllowReclaimData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="单位">
                  <a-input v-model="queryParam.unit" allow-clear placeholder="请输入单位"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="使用期限">
                  <a-input v-model="queryParam.usagePeriod" allow-clear placeholder="请输入使用期限"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsContainerType:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsContainerType:exportExcel')" icon="download" @click="WmsContainerTypeToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsContainerType:add')" icon="plus" @click="$refs.addForm.add()">新增容器类型</a-button>
        </div>
        </template>
          <span slot="isAllowReclaimscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsContainerType:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsContainerType:edit') & hasPerm('WmsContainerType:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsContainerType:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsContainerTypeDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsContainerTypePage, WmsContainerTypeDelete, WmsContainerTypeToExcel } from '@/api/modular/main/WmsBase/WmsContainerTypeManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '类型编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'typeCode'
    },
    {
    title: '类型名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'typeName'
    },
    {
    title: '是否回收',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isAllowReclaim',
    scopedSlots: { customRender: 'isAllowReclaimscopedSlots' }
    },
    {
    title: '单位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'unit'
    },
    {
    title: '使用期限',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'usagePeriod'
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsContainerTypePage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsContainerType:edit') || this.hasPerm('WmsContainerType:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isAllowReclaimOption = this.$options
    this.isAllowReclaimData = isAllowReclaimOption.filters['dictData']('yes_true_false')
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsContainerTypeDelete (record) {
    WmsContainerTypeDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsContainerTypeToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsContainerTypePage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/addForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="新增工厂信息表"
    title="新增工厂信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/editForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="编辑工厂信息表"
    title="编辑工厂信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsFactory/index.vue
@@ -1,500 +1,463 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
      <a-card :bordered="false" :bodyStyle="tstyle">
        <div class="table-page-search-wrapper" v-if="hasPerm('WmsFactory:page')">
          <a-form layout="inline">
            <a-row :gutter="48">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsFactory:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="编号">
                <a-input v-model="queryParam.factoryCode" allow-clear placeholder="请输入编号"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="名称">
                <a-input v-model="queryParam.factoryName" allow-clear placeholder="请输入名称"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="编号">
                  <a-input v-model="queryParam.factoryCode" allow-clear placeholder="请输入编号" />
                <a-form-item label="地址">
                  <a-input v-model="queryParam.factoryAddress" allow-clear placeholder="请输入地址"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="名称">
                  <a-input v-model="queryParam.factoryName" allow-clear placeholder="请输入名称" />
                </a-form-item> </a-col
              ><template v-if="advanced">
                <a-col :md="8" :sm="24">
                  <a-form-item label="地址">
                    <a-input v-model="queryParam.factoryAddress" allow-clear placeholder="请输入地址" />
                  </a-form-item>
                </a-col>
                <a-col :md="8" :sm="24">
                  <a-form-item label="是否禁用">
                    <a-select
                      :allowClear="true"
                      style="width: 100%"
                      v-model="queryParam.isDisabled"
                      placeholder="请选择是否禁用"
                    >
                      <a-select-option v-for="(item, index) in isDisabledData" :key="index" :value="item.code">{{
                        item.name
                      }}</a-select-option>
                    </a-select>
                  </a-form-item>
                </a-col>
                <!--年月日时分秒-->
                <!--时间范围-->
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
                <a-col :md="8" :sm="24">
                  <a-form-item label="创建时间">
                    <a-range-picker
                      style="width: 100%"
                      :placeholder="['开始时间', '结束时间']"
                      :show-time="{
                        format: 'HH:mm:ss',
                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
                      }"
                      v-model="queryParam.createdTime"
                      value-format="YYYY-MM-DD HH:mm:ss"
                      format="YYYY-MM-DD HH:mm:ss"
                      @change="onChangecreatedTime"
                    />
                  </a-form-item>
                </a-col>
                <!--年月日时分秒-->
                <!--时间范围-->
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
                <a-col :md="8" :sm="24">
                  <a-form-item label="更新时间">
                    <a-range-picker
                      style="width: 100%"
                      :placeholder="['开始时间', '结束时间']"
                      :show-time="{
                        format: 'HH:mm:ss',
                        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')]
                      }"
                      v-model="queryParam.updatedTime"
                      value-format="YYYY-MM-DD HH:mm:ss"
                      format="YYYY-MM-DD HH:mm:ss"
                      @change="onChangeupdatedTime"
                    />
                  </a-form-item>
                </a-col>
                <a-col :md="8" :sm="24">
                  <a-form-item label="创建者名称">
                    <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称" />
                  </a-form-item>
                </a-col>
                <a-col :md="8" :sm="24">
                  <a-form-item label="修改者名称">
                    <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称" />
                  </a-form-item>
                </a-col>
              </template>
              <a-col :md="8" :sm="24">
                <span class="table-page-search-submitButtons">
                  <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
                  <a-button style="margin-left: 8px" @click="() => (queryParam = {})">重置</a-button>
                  <a @click="toggleAdvanced" style="margin-left: 8px">
                    {{ advanced ? '收起' : '展开' }}
                    <a-icon :type="advanced ? 'up' : 'down'" />
                  </a>
                </span>
              </a-col>
            </a-row>
          </a-form>
        </div>
      </a-card>
    </div>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{ x: true, y: tableHeight }"
        :rowKey="record => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
      >
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsFactory:add')">
          <div ref="actionBar" class="actionBar">
            <a-button
              type="info"
              v-if="hasPerm('sysExcelTemplate:importExcel')"
              icon="upload"
              @click="$refs.excelForm.index()"
            >
              å¯¼å…¥
            </a-button>
            <a-button type="info" v-if="hasPerm('WmsFactory:exportExcel')" icon="download" @click="WmsFactoryToExcel()">
              å¯¼å‡º
            </a-button>
            <a-button type="primary" v-if="hasPerm('WmsFactory:add')" icon="plus" @click="$refs.addForm.add()"
              >新增工厂信息表</a-button
            >
          </div>
        </template>
        <span slot="isDisabledscopedSlots" slot-scope="text">
          <div v-if="text === true">
            <a-tag color="green">是</a-tag>
          </div>
          <div v-else-if="text == false">
            <a-tag color="volcano">否</a-tag>
          </div>
          <div v-else=""></div>
        </span>
        <span slot="action" slot-scope="text, record">
          <a v-if="hasPerm('WmsFactory:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsFactory:edit') & hasPerm('WmsFactory:delete')" />
          <a-popconfirm
            v-if="hasPerm('WmsFactory:delete')"
            placement="topRight"
            title="确认删除?"
            @confirm="() => WmsFactoryDelete(record)"
          >
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsFactory:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsFactory:exportExcel')" icon="download" @click="WmsFactoryToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsFactory:add')" icon="plus" @click="$refs.addForm.add()">新增工厂信息</a-button>
        </div>
        </template>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsFactory:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsFactory:edit') & hasPerm('WmsFactory:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsFactory:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsFactoryDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
import { STable } from '@/components'
import moment from 'moment'
import { WmsFactoryPage, WmsFactoryDelete, WmsFactoryToExcel } from '@/api/modular/main/WmsBase/WmsFactoryManage'
//自定义table高度
import setTableHtMixin from '@/mixins/handleTableHt.js'
import addForm from './addForm.vue'
import { exportExcel } from '@/utils/exportToExcel'
import { downloadFile } from '@/utils/util'
import editForm from './editForm.vue'
import excelForm from './excelForm.vue'
export default {
  mixins: [setTableHtMixin],
  components: {
    STable,
    addForm,
    editForm,
    excelForm
  },
  data() {
    return {
      advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
      queryParam: {},
      pageInfo: {
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsFactoryPage, WmsFactoryDelete, WmsFactoryToExcel } from '@/api/modular/main/WmsBase/WmsFactoryManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
      columns: [
        {
          title: '序号',
          width: '60px',
          align: 'center',
          customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
        },
        {
          title: '编号',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'factoryCode'
        },
        {
          title: '名称',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'factoryName'
        },
        {
          title: '地址',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'factoryAddress'
        },
        {
          title: '是否禁用',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'isDisabled',
          scopedSlots: { customRender: 'isDisabledscopedSlots' }
        },
        {
          title: '创建时间',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'createdTime'
        },
        {
          title: '更新时间',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'updatedTime'
        },
        {
          title: '创建者名称',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'createdUserName'
        },
        {
          title: '修改者名称',
          align: 'center',
          customHeaderCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          customCell: () => {
            return {
              style: {
                'min-width': '120px' //最小列宽设置
              }
            }
          },
          sorter: true,
          dataIndex: 'updatedUserName'
        }
      ],
      tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
      // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
      loadData: parameter => {
        return WmsFactoryPage(Object.assign(parameter, this.switchingDate())).then(res => {
          return res.data
        })
      },
      selectedRowKeys: [],
      selectedRows: []
    }
  },
  created() {
    if (this.hasPerm('WmsFactory:edit') || this.hasPerm('WmsFactory:delete')) {
      this.columns.push({
        title: '操作',
        width: '150px',
        dataIndex: 'action',
        scopedSlots: { customRender: 'action' }
      })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if (columnStr) {
      var _columns = JSON.parse(columnStr)
      this.columns.forEach(element => {
        var fObj = _columns.find((item, index) => {
          return item.dataIndex === element.dataIndex
        })
        if (fObj != undefined && fObj != null) {
          element.checked = fObj.checked
        }
      })
    }
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'factoryCode'
    },
    {
    title: '名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'factoryName'
    },
    {
    title: '地址',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'factoryAddress'
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsFactoryPage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsFactory:edit') || this.hasPerm('WmsFactory:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
      'resize',
      () => {
        this.handleTableHt() // ç›‘听屏幕大小改变表格高度
      },
      false
    )
  },
  methods: {
    moment,
    /**
     * æŸ¥è¯¢å‚数组装
     */
    switchingDate() {
      const obj = JSON.parse(JSON.stringify(this.queryParam))
      return obj
    },
    WmsFactoryDelete(record) {
      WmsFactoryDelete(record).then(res => {
        if (res.success) {
          this.$message.success('删除成功')
          this.$refs.table.refresh()
        } else {
          this.$message.error('删除失败') // + res.message
        }
      })
    },
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsFactoryDelete (record) {
    WmsFactoryDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsFactoryToExcel() {
      this.loading = true
      let entozh = {}
      const path = this.$route.path
      if (window.localStorage.getItem(path)) {
        JSON.parse(window.localStorage.getItem(path)).forEach(item => {
          if (item.dataIndex != 'action' && item.checked) {
            entozh[item.dataIndex] = item.title
          }
        })
      } else {
        //直接点导出
        this.columns.forEach(item => {
          if (item.dataIndex != 'action') {
            entozh[item.dataIndex] = item.title
          }
        })
      }
      WmsFactoryPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam))
        .then(res => {
          this.loading = false
          //需要截取日期的字段
          var arrDataCutout = this.columns.filter(v => v.customCutout == true)
          res.data.rows.forEach(item => {
            var arrKeys = Object.keys(item)
            arrKeys.forEach(key => {
              var strFieldDic = key + 'Data'
              //枚举转值
              if (this[strFieldDic] && this[strFieldDic].length > 0) {
                let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]))
                if (arrFieldDic.length > 0) {
                  item[key] = arrFieldDic[0]?.name || '没有枚举值'
                }
              }
              // æ—¥æœŸæˆªå–
              if (arrDataCutout.length > 0) {
                arrDataCutout.forEach(itemIn => {
                  if (key == itemIn.dataIndex && item[key]) {
                    item[key] = item[key].split(' ')[0]
                  }
                })
              }
            })
          })
          exportExcel(res.data.rows, entozh, 'xlsx', `${this.$route.meta.title}`)
        })
        .catch(err => {
          this.loading = false
          this.$message.error('下载错误:获取文件流错误' + err)
        })
    },
    toggleAdvanced() {
      this.advanced = !this.advanced
      this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk() {
      this.$refs.table.refresh()
    },
    onSelectChange(selectedRowKeys, selectedRows) {
      this.selectedRowKeys = selectedRowKeys
      this.selectedRows = selectedRows
    }
  }
}
    WmsFactoryToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsFactoryPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
.table-operator {
  margin-bottom: 18px;
}
button {
  margin-right: 8px;
}
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/addForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
<template>
  <a-modal
    title="新增库位信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
        <a-form :form="form">
        <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位编码" v-decorator="['placeCode', {rules: [{required: true, message: '请输入库位编码!'}]}]" />
        </a-form-item>
        <a-form-item label="库位名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位名称" v-decorator="['placeName', {rules: [{required: true, message: '请输入库位名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库位别名" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位别名" v-decorator="['placeAlias']" />
        </a-form-item>
        <a-form-item label="库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库位类型" style="width: 100%" v-decorator="['placeType', {rules: [{required: true, message: '请输入库位类型!'}]}]" />
        </a-form-item>
        <a-form-item label="库位类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位类型名称" v-decorator="['placeTypeName']" />
        </a-form-item>
        <a-form-item label="存放单位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入存放单位" v-decorator="['stockUnit']" />
        </a-form-item>
        <a-form-item label="库位属性" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库位属性" style="width: 100%" v-decorator="['placeStatus']" />
        </a-form-item>
        <a-form-item label="是否堆垛机库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isSrmPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="堆垛机库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入堆垛机库位号" v-decorator="['srmPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否RGV库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isRgvPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="RGV库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入RGV库位号" v-decorator="['rgvPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否AGV库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAgvPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="AGV库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入AGV库位号" v-decorator="['agvPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否输送线库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isTransPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="输送线库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入输送线库位号" v-decorator="['transPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否激活与任务调度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isActivateWCS', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="库存环境" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库存环境" v-decorator="['environment']" />
        </a-form-item>
        <a-form-item label="库区编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区编号" v-decorator="['areaCode']" />
        </a-form-item>
        <a-form-item label="所在库区" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入所在库区" v-decorator="['areaId']" />
        </a-form-item>
        <a-form-item label="库区名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区名称" v-decorator="['areaName']" />
        </a-form-item>
        <a-form-item label="检验码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入检验码" v-decorator="['verificationCode']" />
        </a-form-item>
        <a-form-item label="排" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入排" style="width: 100%" v-decorator="['rowNo']" />
        </a-form-item>
        <a-form-item label="列" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入列" style="width: 100%" v-decorator="['columnNo']" />
        </a-form-item>
        <a-form-item label="层" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入层" style="width: 100%" v-decorator="['layerNo']" />
        </a-form-item>
        <a-form-item label="巷道" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入巷道" style="width: 100%" v-decorator="['laneNo']" />
        </a-form-item>
        <a-form-item label="库位X坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位X坐标" v-decorator="['xzb']" />
        </a-form-item>
        <a-form-item label="库位Y坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位Y坐标" v-decorator="['yzb']" />
        </a-form-item>
        <a-form-item label="库位Z坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位Z坐标" v-decorator="['zzb']" />
        </a-form-item>
        <a-form-item label="库位长度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位长度" v-decorator="['length']" />
        </a-form-item>
        <a-form-item label="库位宽度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位宽度" v-decorator="['width']" />
        </a-form-item>
        <a-form-item label="库位高度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位高度" v-decorator="['height']" />
        </a-form-item>
        <a-form-item label="最大承重" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入最大承重" v-decorator="['maxWeight']" />
        </a-form-item>
        <a-form-item label="入库顺序" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入入库顺序" style="width: 100%" v-decorator="['inSequence']" />
        </a-form-item>
        <a-form-item label="出库顺序" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入出库顺序" style="width: 100%" v-decorator="['outSequence']" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isVirtually', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import moment from 'moment'
  import {
  WmsPlaceAdd
  } from '@/api/modular/main/WmsBase/WmsPlaceManage'
  export default {
  data () {
  return {
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      add (record) {
        this.visible = true
        this.$nextTick(() => {
        });
      },
      /**
       * æäº¤è¡¨å•
       */
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
              }
            }
            WmsPlaceAdd(values).then((res) => {
              if (res.success) {
                this.$message.success('新增成功')
                this.confirmLoading = false
                this.$emit('ok', values)
                this.handleCancel()
              } else {
                this.$message.error('新增失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/editForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
<template>
  <a-modal
    title="编辑库位信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位编码" v-decorator="['placeCode', {rules: [{required: true, message: '请输入库位编码!'}]}]" />
        </a-form-item>
        <a-form-item label="库位名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位名称" v-decorator="['placeName', {rules: [{required: true, message: '请输入库位名称!'}]}]" />
        </a-form-item>
        <a-form-item label="库位别名" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位别名" v-decorator="['placeAlias']" />
        </a-form-item>
        <a-form-item label="库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库位类型" style="width: 100%" v-decorator="['placeType', {rules: [{required: true, message: '请输入库位类型!'}]}]" />
        </a-form-item>
        <a-form-item label="库位类型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位类型名称" v-decorator="['placeTypeName']" />
        </a-form-item>
        <a-form-item label="存放单位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入存放单位" v-decorator="['stockUnit']" />
        </a-form-item>
        <a-form-item label="库位属性" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入库位属性" style="width: 100%" v-decorator="['placeStatus']" />
        </a-form-item>
        <a-form-item label="是否堆垛机库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isSrmPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="堆垛机库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入堆垛机库位号" v-decorator="['srmPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否RGV库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isRgvPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="RGV库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入RGV库位号" v-decorator="['rgvPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否AGV库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isAgvPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="AGV库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入AGV库位号" v-decorator="['agvPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否输送线库位" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isTransPlace', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="输送线库位号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入输送线库位号" v-decorator="['transPlaceNo']" />
        </a-form-item>
        <a-form-item label="是否激活与任务调度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isActivateWCS', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="库存环境" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库存环境" v-decorator="['environment']" />
        </a-form-item>
        <a-form-item label="库区编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区编号" v-decorator="['areaCode']" />
        </a-form-item>
        <a-form-item label="所在库区" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入所在库区" v-decorator="['areaId']" />
        </a-form-item>
        <a-form-item label="库区名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库区名称" v-decorator="['areaName']" />
        </a-form-item>
        <a-form-item label="检验码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入检验码" v-decorator="['verificationCode']" />
        </a-form-item>
        <a-form-item label="排" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入排" style="width: 100%" v-decorator="['rowNo']" />
        </a-form-item>
        <a-form-item label="列" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入列" style="width: 100%" v-decorator="['columnNo']" />
        </a-form-item>
        <a-form-item label="层" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入层" style="width: 100%" v-decorator="['layerNo']" />
        </a-form-item>
        <a-form-item label="巷道" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入巷道" style="width: 100%" v-decorator="['laneNo']" />
        </a-form-item>
        <a-form-item label="库位X坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位X坐标" v-decorator="['xzb']" />
        </a-form-item>
        <a-form-item label="库位Y坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位Y坐标" v-decorator="['yzb']" />
        </a-form-item>
        <a-form-item label="库位Z坐标" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位Z坐标" v-decorator="['zzb']" />
        </a-form-item>
        <a-form-item label="库位长度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位长度" v-decorator="['length']" />
        </a-form-item>
        <a-form-item label="库位宽度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位宽度" v-decorator="['width']" />
        </a-form-item>
        <a-form-item label="库位高度" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入库位高度" v-decorator="['height']" />
        </a-form-item>
        <a-form-item label="最大承重" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入最大承重" v-decorator="['maxWeight']" />
        </a-form-item>
        <a-form-item label="入库顺序" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入入库顺序" style="width: 100%" v-decorator="['inSequence']" />
        </a-form-item>
        <a-form-item label="出库顺序" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input-number placeholder="请输入出库顺序" style="width: 100%" v-decorator="['outSequence']" />
        </a-form-item>
        <a-form-item label="是否虚拟" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isVirtually', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import moment from 'moment'
  import {
  WmsPlaceEdit
  } from '@/api/modular/main/WmsBase/WmsPlaceManage'
  export default {
  data () {
  return {
  Id: 0,
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
  record: {},
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      edit (record) {
        this.visible = true;
        this.Id = record.id;
        this.$nextTick(() => {
        });
        //深度拷贝 ç§»é™¤VUE的监听,防止INDEX页面值变动
        this.record = JSON.parse(JSON.stringify(record))
        this.$nextTick(() => {
          this.form.setFieldsValue(
            {
              id: record.id,
              placeCode: record.placeCode,
              placeName: record.placeName,
              placeAlias: record.placeAlias,
              placeType: record.placeType,
              placeTypeName: record.placeTypeName,
              stockUnit: record.stockUnit,
              placeStatus: record.placeStatus,
              isSrmPlace: record.isSrmPlace,
              srmPlaceNo: record.srmPlaceNo,
              isRgvPlace: record.isRgvPlace,
              rgvPlaceNo: record.rgvPlaceNo,
              isAgvPlace: record.isAgvPlace,
              agvPlaceNo: record.agvPlaceNo,
              isTransPlace: record.isTransPlace,
              transPlaceNo: record.transPlaceNo,
              isActivateWCS: record.isActivateWCS,
              environment: record.environment,
              areaCode: record.areaCode,
              areaId: record.areaId,
              areaName: record.areaName,
              verificationCode: record.verificationCode,
              rowNo: record.rowNo,
              columnNo: record.columnNo,
              layerNo: record.layerNo,
              laneNo: record.laneNo,
              xzb: record.xzb,
              yzb: record.yzb,
              zzb: record.zzb,
              length: record.length,
              width: record.width,
              height: record.height,
              maxWeight: record.maxWeight,
              inSequence: record.inSequence,
              outSequence: record.outSequence,
              isVirtually: record.isVirtually,
              isDisabled: record.isDisabled
            }
          )
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (values[key] == null) continue
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
                 this.record[key] = values[key]
              } else {
                 this.record[key] = values[key]
              }
            }
            WmsPlaceEdit(this.record).then((res) => {
              if (res.success) {
                this.$message.success('编辑成功')
                this.confirmLoading = false
                this.$emit('ok', this.record)
                this.handleCancel()
              } else {
                this.$message.error('编辑失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          }else{
            this.confirmLoading = false
          }
        });
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/excelForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <a-modal
    :width="850"
    :destroyOnClose="true"
    :visible="visible"
    :forceRender="true"
    title="批量导入"
    cancelText="取消上传"
    okText="开始上传"
    @cancel="handleCancel"
    @ok="handleSubmit">
    <a-spin :spinning="confirmLoading">
      <a-row :span="24">
        <span>请选择要导入的数据文件(Excel格式)</span>
      </a-row>
      <p></p>
      <a-row>
        <a-col :span="16">
          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
            <a-icon style="font-size: 40px;" type="cloud-upload" />
          </a-upload-dragger>
        </a-col>
        <!--<a-col :span="8">
          <span>导入模式:</span>
          <a-select
            style="width: 130px"
            placeholder="请选择导入模式"
            v-model="importExcelType">
            <a-select-option
              v-for="(item,index) in importExcelTypeData"
              :key="index"
              :value="item.code">{{ item.name }}
            </a-select-option>
          </a-select>
        </a-col>-->
      </a-row>
      <a-row :span="24">
        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
          ç‚¹å‡»æŸ¥çœ‹æ–‡ä»¶ä¸Šä¼ è¦æ±‚
        </a-button>-->
        <span>【</span>
        <a-button style="width: 90px;text-align: left;" @click="wmsPlaceDownloadExcelTemplate" type="link">下载导入模板</a-button>,填写并上传
        <span>】</span>
        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
          æ”¶èµ·
        </a-button>
      </a-row>
      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
        <a-breadcrumb>
          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">文件上传要求</a-breadcrumb-item>
        </a-breadcrumb>
      </a-row>
      <pre v-show="detailed">
        <div v-html="demandText"></div>
      </pre>
      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
      <pre v-show="detailed">
        <div v-html="columnText"></div>
      </pre>
    </a-spin>
  </a-modal>
</template>
<script>
  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
  import { WmsPlaceImportExcel, WmsPlaceDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsPlaceManage'
  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
  export default {
  components: {
  },
  data() {
  return {
  visible: false,
  detailed: false,
  confirmLoading: false,
  fileList: [],
  importExcelTypeData: [],
  importExcelType: '1',
  uploadFile: null,
  columns: [],
  dataList: [],
  demandText:'',
  columnText: ''
  }
  },
  methods: {
  index() {
  this.visible = true;
  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
  this.demandText = parseDemandText("wmsPlaceDownloadExcelTemplate")
  window.downloadFile = this.wmsPlaceDownloadExcelTemplate;
  this.getTable();
  },
  showDemand() {
  this.detailed = !this.detailed;
  },
  customRequest(document) {
  this.uploadFile = document
  },
  getTable() {
  sysExcelTemplateGetColumnList({className: "WmsPlace"}).then(res =>
  {
  if (res.success) {
  this.columns =[];
  this.dataList = [{}];
  res.data.forEach(x => {
  this.columns.push({
  dataIndex: x.columnName,
  key: x.columnName,
  title: x.columnComment
  });
  this.dataList[0][x.columnName] = x.isRequired ? "必填" : "非必填"
  });
  this.columnText = parseExcelFieldText(res.data);
  }
  });
  },
  beforeUpload(fileInfo) {
  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
  if (!res.success) {
  this.$message.warning(res.msg)
  return false
  }
  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
  },
  handleChange(fileInfo) {
  if (fileInfo.file.status === 'error') {
  fileInfo.fileList.splice(0, 1)
  }
  if (fileInfo.file.status === 'done') {
  if (fileInfo.fileList.length > 1) {
  fileInfo.fileList.splice(0, 1)
  }
  this.fileList = fileInfo.file
  }
  },
  handleSubmit() {
  this.confirmLoading = true
  const formData = new FormData()
  formData.append('file', this.uploadFile.file)
  WmsPlaceImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
  this.$message.success('操作成功')
  this.confirmLoading = false
  this.$emit('ok', [])
  this.handleCancel()
  }).finally((res)=>{this.confirmLoading = false})
  },
  handleCancel() {
  this.visible = false
  this.detailed = false
  },
  wmsPlaceDownloadExcelTemplate() {
  WmsPlaceDownloadExcelTemplate({version: "v2"}).then((res) => {
  downloadFile(res);
  }).catch((err) => {
  this.$message.error('下载错误:获取文件流错误' + err)
  })
  }
  }
  }
</script>
<style scoped>
::v-deep .ant-upload.ant-upload-drag {
  position: relative;
  width: 140px;
  height: 135px;
  text-align: center;
  background: #fafafa;
  border: 1px dashed #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  -webkit-transition: border-color 0.3s;
  transition: border-color 0.3s;
}
::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
  color: #ffc53d;
  border-color: white;
}
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsPlace/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1345 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsPlace:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="库位编码">
                <a-input v-model="queryParam.placeCode" allow-clear placeholder="请输入库位编码"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="库位名称">
                <a-input v-model="queryParam.placeName" allow-clear placeholder="请输入库位名称"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="库位别名">
                  <a-input v-model="queryParam.placeAlias" allow-clear placeholder="请输入库位别名"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="库位类型">
                  <a-input-number v-model="queryParam.placeType" style="width: 100%" allow-clear placeholder="请输入库位类型"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位类型名称">
                  <a-input v-model="queryParam.placeTypeName" allow-clear placeholder="请输入库位类型名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="存放单位">
                  <a-input v-model="queryParam.stockUnit" allow-clear placeholder="请输入存放单位"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="库位属性">
                  <a-input-number v-model="queryParam.placeStatus" style="width: 100%" allow-clear placeholder="请输入库位属性"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否堆垛机库位">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isSrmPlace" placeholder="请选择是否堆垛机库位">
                        <a-select-option v-for="(item,index) in isSrmPlaceData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="堆垛机库位号">
                  <a-input v-model="queryParam.srmPlaceNo" allow-clear placeholder="请输入堆垛机库位号"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否RGV库位">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isRgvPlace" placeholder="请选择是否RGV库位">
                        <a-select-option v-for="(item,index) in isRgvPlaceData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="RGV库位号">
                  <a-input v-model="queryParam.rgvPlaceNo" allow-clear placeholder="请输入RGV库位号"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否AGV库位">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isAgvPlace" placeholder="请选择是否AGV库位">
                        <a-select-option v-for="(item,index) in isAgvPlaceData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="AGV库位号">
                  <a-input v-model="queryParam.agvPlaceNo" allow-clear placeholder="请输入AGV库位号"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否输送线库位">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isTransPlace" placeholder="请选择是否输送线库位">
                        <a-select-option v-for="(item,index) in isTransPlaceData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="输送线库位号">
                  <a-input v-model="queryParam.transPlaceNo" allow-clear placeholder="请输入输送线库位号"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否激活与任务调度">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isActivateWCS" placeholder="请选择是否激活与任务调度">
                        <a-select-option v-for="(item,index) in isActivateWCSData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库存环境">
                  <a-input v-model="queryParam.environment" allow-clear placeholder="请输入库存环境"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库区编号">
                  <a-input v-model="queryParam.areaCode" allow-clear placeholder="请输入库区编号"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="所在库区">
                  <a-input v-model="queryParam.areaId" allow-clear placeholder="请输入所在库区"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库区名称">
                  <a-input v-model="queryParam.areaName" allow-clear placeholder="请输入库区名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="检验码">
                  <a-input v-model="queryParam.verificationCode" allow-clear placeholder="请输入检验码"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="排">
                  <a-input-number v-model="queryParam.rowNo" style="width: 100%" allow-clear placeholder="请输入排"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="列">
                  <a-input-number v-model="queryParam.columnNo" style="width: 100%" allow-clear placeholder="请输入列"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="层">
                  <a-input-number v-model="queryParam.layerNo" style="width: 100%" allow-clear placeholder="请输入层"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="巷道">
                  <a-input-number v-model="queryParam.laneNo" style="width: 100%" allow-clear placeholder="请输入巷道"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位X坐标">
                  <a-input v-model="queryParam.xzb" allow-clear placeholder="请输入库位X坐标"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位Y坐标">
                  <a-input v-model="queryParam.yzb" allow-clear placeholder="请输入库位Y坐标"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位Z坐标">
                  <a-input v-model="queryParam.zzb" allow-clear placeholder="请输入库位Z坐标"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位长度">
                  <a-input v-model="queryParam.length" allow-clear placeholder="请输入库位长度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位宽度">
                  <a-input v-model="queryParam.width" allow-clear placeholder="请输入库位宽度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="库位高度">
                  <a-input v-model="queryParam.height" allow-clear placeholder="请输入库位高度"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="最大承重">
                  <a-input v-model="queryParam.maxWeight" allow-clear placeholder="请输入最大承重"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="入库顺序">
                  <a-input-number v-model="queryParam.inSequence" style="width: 100%" allow-clear placeholder="请输入入库顺序"/>
                </a-form-item>
              </a-col><a-col :md="8" :sm="24">
                <a-form-item label="出库顺序">
                  <a-input-number v-model="queryParam.outSequence" style="width: 100%" allow-clear placeholder="请输入出库顺序"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否虚拟">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isVirtually" placeholder="请选择是否虚拟">
                        <a-select-option v-for="(item,index) in isVirtuallyData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsPlace:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsPlace:exportExcel')" icon="download" @click="WmsPlaceToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsPlace:add')" icon="plus" @click="$refs.addForm.add()">新增库位信息</a-button>
        </div>
        </template>
          <span slot="isSrmPlacescopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isRgvPlacescopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isAgvPlacescopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isTransPlacescopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isActivateWCSscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isVirtuallyscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsPlace:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsPlace:edit') & hasPerm('WmsPlace:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsPlace:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsPlaceDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsPlacePage, WmsPlaceDelete, WmsPlaceToExcel } from '@/api/modular/main/WmsBase/WmsPlaceManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '库位编码',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeCode'
    },
    {
    title: '库位名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeName'
    },
    {
    title: '库位别名',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeAlias'
    },
    {
    title: '库位类型',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeType'
    },
    {
    title: '库位类型名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeTypeName'
    },
    {
    title: '存放单位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'stockUnit'
    },
    {
    title: '库位属性',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'placeStatus'
    },
    {
    title: '是否堆垛机库位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isSrmPlace',
    scopedSlots: { customRender: 'isSrmPlacescopedSlots' }
    },
    {
    title: '堆垛机库位号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'srmPlaceNo'
    },
    {
    title: '是否RGV库位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isRgvPlace',
    scopedSlots: { customRender: 'isRgvPlacescopedSlots' }
    },
    {
    title: 'RGV库位号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'rgvPlaceNo'
    },
    {
    title: '是否AGV库位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isAgvPlace',
    scopedSlots: { customRender: 'isAgvPlacescopedSlots' }
    },
    {
    title: 'AGV库位号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'agvPlaceNo'
    },
    {
    title: '是否输送线库位',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isTransPlace',
    scopedSlots: { customRender: 'isTransPlacescopedSlots' }
    },
    {
    title: '输送线库位号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'transPlaceNo'
    },
    {
    title: '是否激活与任务调度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isActivateWCS',
    scopedSlots: { customRender: 'isActivateWCSscopedSlots' }
    },
    {
    title: '库存环境',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'environment'
    },
    {
    title: '库区编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaCode'
    },
    {
    title: '所在库区',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaId'
    },
    {
    title: '库区名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'areaName'
    },
    {
    title: '检验码',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'verificationCode'
    },
    {
    title: '排',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'rowNo'
    },
    {
    title: '列',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'columnNo'
    },
    {
    title: '层',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'layerNo'
    },
    {
    title: '巷道',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'laneNo'
    },
    {
    title: '库位X坐标',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'xzb'
    },
    {
    title: '库位Y坐标',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'yzb'
    },
    {
    title: '库位Z坐标',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'zzb'
    },
    {
    title: '库位长度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'length'
    },
    {
    title: '库位宽度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'width'
    },
    {
    title: '库位高度',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'height'
    },
    {
    title: '最大承重',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'maxWeight'
    },
    {
    title: '入库顺序',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'inSequence'
    },
    {
    title: '出库顺序',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '80px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '80px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'outSequence'
    },
    {
    title: '是否虚拟',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isVirtually',
    scopedSlots: { customRender: 'isVirtuallyscopedSlots' }
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsPlacePage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsPlace:edit') || this.hasPerm('WmsPlace:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isSrmPlaceOption = this.$options
    this.isSrmPlaceData = isSrmPlaceOption.filters['dictData']('yes_true_false')
    const isRgvPlaceOption = this.$options
    this.isRgvPlaceData = isRgvPlaceOption.filters['dictData']('yes_true_false')
    const isAgvPlaceOption = this.$options
    this.isAgvPlaceData = isAgvPlaceOption.filters['dictData']('yes_true_false')
    const isTransPlaceOption = this.$options
    this.isTransPlaceData = isTransPlaceOption.filters['dictData']('yes_true_false')
    const isActivateWCSOption = this.$options
    this.isActivateWCSData = isActivateWCSOption.filters['dictData']('yes_true_false')
    const isVirtuallyOption = this.$options
    this.isVirtuallyData = isVirtuallyOption.filters['dictData']('yes_true_false')
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsPlaceDelete (record) {
    WmsPlaceDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsPlaceToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsPlacePage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/addForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<template>
  <a-modal
    title="新增单位信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
        <a-form :form="form">
        <a-form-item label="编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入编号" v-decorator="['unitCode', {rules: [{required: true, message: '请输入编号!'}]}]" />
        </a-form-item>
        <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入名称" v-decorator="['unitName', {rules: [{required: true, message: '请输入名称!'}]}]" />
        </a-form-item>
        <a-form-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入描述" v-decorator="['unitDesc']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
  import moment from 'moment'
  import {
  WmsUnitAdd
  } from '@/api/modular/main/WmsBase/WmsUnitManage'
  export default {
  data () {
  return {
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      add (record) {
        this.visible = true
        this.$nextTick(() => {
        });
      },
      /**
       * æäº¤è¡¨å•
       */
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
              }
            }
            WmsUnitAdd(values).then((res) => {
              if (res.success) {
                this.$message.success('新增成功')
                this.confirmLoading = false
                this.$emit('ok', values)
                this.handleCancel()
              } else {
                this.$message.error('新增失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          } else {
            this.confirmLoading = false
          }
        })
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/editForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
<template>
  <a-modal
    title="编辑单位信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleSubmit"
    @cancel="handleCancel">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入编号" v-decorator="['unitCode', {rules: [{required: true, message: '请输入编号!'}]}]" />
        </a-form-item>
        <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入名称" v-decorator="['unitName', {rules: [{required: true, message: '请输入名称!'}]}]" />
        </a-form-item>
        <a-form-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入描述" v-decorator="['unitDesc']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import moment from 'moment'
  import {
  WmsUnitEdit
  } from '@/api/modular/main/WmsBase/WmsUnitManage'
  export default {
  data () {
  return {
  Id: 0,
  labelCol: {
  xs: { span: 24 },
  sm: { span: 5 }
  },
  wrapperCol: {
  xs: { span: 24 },
  sm: { span: 15 }
  },
  record: {},
        visible: false,
        confirmLoading: false,
        form: this.$form.createForm(this)
      }
    },
    methods: {
    moment,
      // åˆå§‹åŒ–方法
      edit (record) {
        this.visible = true;
        this.Id = record.id;
        this.$nextTick(() => {
        });
        //深度拷贝 ç§»é™¤VUE的监听,防止INDEX页面值变动
        this.record = JSON.parse(JSON.stringify(record))
        this.$nextTick(() => {
          this.form.setFieldsValue(
            {
              id: record.id,
              unitCode: record.unitCode,
              unitName: record.unitName,
              unitDesc: record.unitDesc,
              isDisabled: record.isDisabled
            }
          )
        })
      },
      handleSubmit () {
        const { form: { validateFields } } = this
        this.confirmLoading = true
        validateFields((errors, values) => {
          if (!errors) {
            for (const key in values) {
              if (values[key] == null) continue
              if (typeof (values[key]) === 'object') {
                values[key] = JSON.stringify(values[key])
                 this.record[key] = values[key]
              } else {
                 this.record[key] = values[key]
              }
            }
            WmsUnitEdit(this.record).then((res) => {
              if (res.success) {
                this.$message.success('编辑成功')
                this.confirmLoading = false
                this.$emit('ok', this.record)
                this.handleCancel()
              } else {
                this.$message.error('编辑失败:' + JSON.stringify(res.message))
              }
            }).finally((res) => {
              this.confirmLoading = false
            })
          }else{
            this.confirmLoading = false
          }
        });
      },
      handleCancel () {
        this.form.resetFields()
        this.visible = false
      }
    }
  }
</script>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/excelForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <a-modal
    :width="850"
    :destroyOnClose="true"
    :visible="visible"
    :forceRender="true"
    title="批量导入"
    cancelText="取消上传"
    okText="开始上传"
    @cancel="handleCancel"
    @ok="handleSubmit">
    <a-spin :spinning="confirmLoading">
      <a-row :span="24">
        <span>请选择要导入的数据文件(Excel格式)</span>
      </a-row>
      <p></p>
      <a-row>
        <a-col :span="16">
          <a-upload-dragger accept=".xlsx,.xls" :multiple="false" :customRequest="customRequest" @change="handleChange" :beforeUpload="beforeUpload">
            <a-icon style="font-size: 40px;" type="cloud-upload" />
          </a-upload-dragger>
        </a-col>
        <!--<a-col :span="8">
          <span>导入模式:</span>
          <a-select
            style="width: 130px"
            placeholder="请选择导入模式"
            v-model="importExcelType">
            <a-select-option
              v-for="(item,index) in importExcelTypeData"
              :key="index"
              :value="item.code">{{ item.name }}
            </a-select-option>
          </a-select>
        </a-col>-->
      </a-row>
      <a-row :span="24">
        <!--<a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="!detailed">
          ç‚¹å‡»æŸ¥çœ‹æ–‡ä»¶ä¸Šä¼ è¦æ±‚
        </a-button>-->
        <span>【</span>
        <a-button style="width: 90px;text-align: left;" @click="wmsUnitDownloadExcelTemplate" type="link">下载导入模板</a-button>,填写并上传
        <span>】</span>
        <a-button @click="showDemand" style="width: 150px;text-align: left;" type="link" v-show="detailed">
          æ”¶èµ·
        </a-button>
      </a-row>
      <a-row v-show="detailed" style="background: #fef4e8; height: 30px;" :span="24">
        <a-breadcrumb>
          <a-breadcrumb-item style="line-height: 30px;color: #faad14;margin-left: 18px;">文件上传要求</a-breadcrumb-item>
        </a-breadcrumb>
      </a-row>
      <pre v-show="detailed">
        <div v-html="demandText"></div>
      </pre>
      <a-table v-show="detailed" :columns="columns" :data-source="dataList" :rowKey="(record) => record.processID" :pagination="false"></a-table>
      <pre v-show="detailed">
        <div v-html="columnText"></div>
      </pre>
    </a-spin>
  </a-modal>
</template>
<script>
  import { downloadFile, checkFile, parseExcelFieldText, parseDemandText } from '@/utils/util'
  import { WmsUnitImportExcel, WmsUnitDownloadExcelTemplate} from '@/api/modular/main/WmsBase/WmsUnitManage'
  import { sysExcelTemplateGetColumnList } from '@/api/modular/system/excelTemplateManage'
  export default {
  components: {
  },
  data() {
  return {
  visible: false,
  detailed: false,
  confirmLoading: false,
  fileList: [],
  importExcelTypeData: [],
  importExcelType: '1',
  uploadFile: null,
  columns: [],
  dataList: [],
  demandText:'',
  columnText: ''
  }
  },
  methods: {
  index() {
  this.visible = true;
  this.importExcelTypeData = this.$options.filters['dictData']('import_excel_type')
  this.demandText = parseDemandText("wmsUnitDownloadExcelTemplate")
  window.downloadFile = this.wmsUnitDownloadExcelTemplate;
  this.getTable();
  },
  showDemand() {
  this.detailed = !this.detailed;
  },
  customRequest(document) {
  this.uploadFile = document
  },
  getTable() {
  sysExcelTemplateGetColumnList({className: "WmsUnit"}).then(res =>
  {
  if (res.success) {
  this.columns =[];
  this.dataList = [{}];
  res.data.forEach(x => {
  this.columns.push({
  dataIndex: x.columnName,
  key: x.columnName,
  title: x.columnComment
  });
  this.dataList[0][x.columnName] = x.isRequired ? "必填" : "非必填"
  });
  this.columnText = parseExcelFieldText(res.data);
  }
  });
  },
  beforeUpload(fileInfo) {
  let res = checkFile(fileInfo, 1073741824, ['.xlsx', '.xls']);
  if (!res.success) {
  this.$message.warning(res.msg)
  return false
  }
  setTimeout(() => {this.uploadFile.onSuccess(this.uploadFile.file)}, 1000)
  },
  handleChange(fileInfo) {
  if (fileInfo.file.status === 'error') {
  fileInfo.fileList.splice(0, 1)
  }
  if (fileInfo.file.status === 'done') {
  if (fileInfo.fileList.length > 1) {
  fileInfo.fileList.splice(0, 1)
  }
  this.fileList = fileInfo.file
  }
  },
  handleSubmit() {
  this.confirmLoading = true
  const formData = new FormData()
  formData.append('file', this.uploadFile.file)
  WmsUnitImportExcel(formData, {importExcelType: this.importExcelType}).then(res => {
  this.$message.success('操作成功')
  this.confirmLoading = false
  this.$emit('ok', [])
  this.handleCancel()
  }).finally((res)=>{this.confirmLoading = false})
  },
  handleCancel() {
  this.visible = false
  this.detailed = false
  },
  wmsUnitDownloadExcelTemplate() {
  WmsUnitDownloadExcelTemplate({version: "v2"}).then((res) => {
  downloadFile(res);
  }).catch((err) => {
  this.$message.error('下载错误:获取文件流错误' + err)
  })
  }
  }
  }
</script>
<style scoped>
::v-deep .ant-upload.ant-upload-drag {
  position: relative;
  width: 140px;
  height: 135px;
  text-align: center;
  background: #fafafa;
  border: 1px dashed #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  -webkit-transition: border-color 0.3s;
  transition: border-color 0.3s;
}
::v-deep .ant-btn:focus:not(.ant-btn-primary):not(.ant-btn-danger), .ant-btn:hover:not(.ant-btn-primary):not(.ant-btn-danger) {
  color: #ffc53d;
  border-color: white;
}
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsUnit/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,463 @@
<template>
  <div ref="boxOutWrap" class="boxOutWrap">
    <div ref="boxForm" class="boxForm">
    <a-card :bordered="false" :bodyStyle="tstyle">
      <div class="table-page-search-wrapper" v-if="hasPerm('WmsUnit:page')">
        <a-form layout="inline">
          <a-row :gutter="48">
            <a-col :md="8" :sm="24">
              <a-form-item label="编号">
                <a-input v-model="queryParam.unitCode" allow-clear placeholder="请输入编号"/>
              </a-form-item>
            </a-col>
            <a-col :md="8" :sm="24">
              <a-form-item label="名称">
                <a-input v-model="queryParam.unitName" allow-clear placeholder="请输入名称"/>
              </a-form-item>
            </a-col><template v-if="advanced">
              <a-col :md="8" :sm="24">
                <a-form-item label="描述">
                  <a-input v-model="queryParam.unitDesc" allow-clear placeholder="请输入描述"/>
                </a-form-item>
              </a-col>
            <a-col :md="8" :sm="24">
                <a-form-item label="是否禁用">
                    <a-select :allowClear="true" style="width: 100%" v-model="queryParam.isDisabled" placeholder="请选择是否禁用">
                        <a-select-option v-for="(item,index) in isDisabledData" :key="index" :value="item.code">{{ item.name }}</a-select-option>
                    </a-select>
                </a-form-item>
            </a-col>
                  <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="创建时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.createdTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangecreatedTime"/>
                    </a-form-item>
                </a-col>
                      <!--年月日时分秒-->
            <!--时间范围-->
                <a-col :md="8" :sm="24">
                    <a-form-item label="更新时间">
                        <a-range-picker style="width: 100%" :placeholder="['开始时间', '结束时间']"  :show-time="{
format: 'HH:mm:ss',  defaultValue: [moment('00:00:00', 'HH:mm:ss'),moment('23:59:59', 'HH:mm:ss')]}" v-model="queryParam.updatedTime"  value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"   @change="onChangeupdatedTime"/>
                    </a-form-item>
                </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="创建者名称">
                  <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请输入创建者名称"/>
                </a-form-item>
              </a-col>
              <a-col :md="8" :sm="24">
                <a-form-item label="修改者名称">
                  <a-input v-model="queryParam.updatedUserName" allow-clear placeholder="请输入修改者名称"/>
                </a-form-item>
              </a-col>    </template>
            <a-col :md="8" :sm="24" >
              <span class="table-page-search-submitButtons">
                <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button>
                <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button>
                <a @click="toggleAdvanced" style="margin-left: 8px"> {{ advanced ? '收起' : '展开' }}
                  <a-icon :type="advanced ? 'up' : 'down'"/>
                </a>
              </span>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </a-card>
    </div>
    <a-card :bordered="false">
      <s-table
        ref="table"
        :columns="columns"
        :data="loadData"
        :alert="true"
        @changeTablePage="pageInfo = $event"
        :scroll="{x: true,y:tableHeight}"
        :rowKey="(record) => record.id"
        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }">
        <template class="table-operator" slot="operator" v-if="hasPerm('WmsUnit:add')" >
        <div ref="actionBar" class="actionBar">
            <a-button type="info" v-if="hasPerm('sysExcelTemplate:importExcel')" icon="upload" @click="$refs.excelForm.index()">
            å¯¼å…¥
          </a-button>
          <a-button type="info" v-if="hasPerm('WmsUnit:exportExcel')" icon="download" @click="WmsUnitToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsUnit:add')" icon="plus" @click="$refs.addForm.add()">新增单位信息</a-button>
        </div>
        </template>
          <span slot="isDisabledscopedSlots" slot-scope="text">
            <div v-if="text===true ">
                <a-tag color="green">是</a-tag>
            </div>
            <div v-else-if="text==false">
                <a-tag color="volcano">否</a-tag>
            </div>
            <div v-else=""></div>
            </span>
          <span slot="action" slot-scope="text, record">
            <a v-if="hasPerm('WmsUnit:edit')" @click="$refs.editForm.edit(record)">编辑</a>
          <a-divider type="vertical" v-if="hasPerm('WmsUnit:edit') & hasPerm('WmsUnit:delete')"/>
          <a-popconfirm v-if="hasPerm('WmsUnit:delete')" placement="topRight" title="确认删除?" @confirm="() => WmsUnitDelete(record)">
            <a>删除</a>
          </a-popconfirm>
        </span>
      </s-table>
      <add-form ref="addForm" @ok="handleOk" />
      <edit-form ref="editForm" @ok="handleOk" />
      <excel-form ref="excelForm" @ok="handleOk" />
    </a-card>
  </div>
</template>
<script>
    import { STable } from '@/components'
    import moment from 'moment'
    import { WmsUnitPage, WmsUnitDelete, WmsUnitToExcel } from '@/api/modular/main/WmsBase/WmsUnitManage'
    //自定义table高度
    import setTableHtMixin from '@/mixins/handleTableHt.js'
    import addForm from './addForm.vue'
    import { exportExcel } from '@/utils/exportToExcel'
    import { downloadFile } from '@/utils/util'
    import editForm from './editForm.vue'
    import excelForm from './excelForm.vue'
    export default {
    mixins: [setTableHtMixin],
    components: {
    STable,
    addForm,
    editForm,
    excelForm
    },
    data () {
    return {
    advanced: false, // é«˜çº§æœç´¢ å±•å¼€/关闭
    queryParam: {},
     pageInfo: {
        current: 1,
        pageSize: 10
      },
    columns: [
    {
    title:'序号',
    width: '60px',
    align: 'center',
    customRender: (text, record, index) => `${index + 1 + (this.pageInfo.current - 1) * this.pageInfo.pageSize}`
    },
    {
    title: '编号',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'unitCode'
    },
    {
    title: '名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'unitName'
    },
    {
    title: '描述',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'unitDesc'
    },
    {
    title: '是否禁用',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'isDisabled',
    scopedSlots: { customRender: 'isDisabledscopedSlots' }
    },
    {
    title: '创建时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdTime'
    },
    {
    title: '更新时间',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedTime'
    },
    {
    title: '创建者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'createdUserName'
    },
    {
    title: '修改者名称',
    align: 'center',
    customHeaderCell: () => {
    return {
     style: {
    'min-width': '120px'//最小列宽设置
     }
     }
    },
    customCell: () => {
    return {
    style: {
    'min-width': '120px'//最小列宽设置
    }
    }
    },
    sorter: true,
    dataIndex: 'updatedUserName'
    }
    ],
    tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
    // åŠ è½½æ•°æ®æ–¹æ³• å¿…须为 Promise å¯¹è±¡
    loadData: parameter => {
    return WmsUnitPage(Object.assign(parameter, this.switchingDate())).then((res) => {
    return res.data
    })
    },
    selectedRowKeys: [],
    selectedRows: []
    }
    },
    created () {
    if (this.hasPerm('WmsUnit:edit') || this.hasPerm('WmsUnit:delete')) {
    this.columns.push({
    title: '操作',
    width: '150px',
    dataIndex: 'action',
    scopedSlots: { customRender: 'action' }
    })
    }
    const path = this.$route.path
    const columnStr = window.localStorage.getItem(path)
    if(columnStr) {
    var _columns = JSON.parse(columnStr)
    this.columns.forEach(element => {
    var fObj = _columns.find((item, index) => {
    return item.dataIndex === element.dataIndex;
    })
    if(fObj!=undefined && fObj!=null){
    element.checked=fObj.checked;
    }
    });
    }
    const isDisabledOption = this.$options
    this.isDisabledData = isDisabledOption.filters['dictData']('yes_true_false')
    this.handleTableHt() //设置主表表格高度
    window.addEventListener(
    'resize',
    () => {
    this.handleTableHt() // ç›‘听屏幕大小改变表格高度
    },
    false
    )
    },
    methods: {
    moment,
    /**
    * æŸ¥è¯¢å‚数组装
    */
    switchingDate () {
    const obj = JSON.parse(JSON.stringify(this.queryParam))
    return obj
    },
    WmsUnitDelete (record) {
    WmsUnitDelete(record).then((res) => {
    if (res.success) {
    this.$message.success('删除成功')
    this.$refs.table.refresh()
    } else {
    this.$message.error('删除失败') // + res.message
    }
    })
    },
    WmsUnitToExcel() {
    this.loading = true
    let entozh = {};
    const path = this.$route.path;
    if (window.localStorage.getItem(path)) {
    JSON.parse(window.localStorage.getItem(path)).forEach(item => {
    if (item.dataIndex != 'action' && item.checked) {
    entozh[item.dataIndex] = item.title
    }
    })
    } else { //直接点导出
    this.columns.forEach(item => {
    if (item.dataIndex != 'action') {
    entozh[item.dataIndex] = item.title
    }
    })
    }
    WmsUnitPage(Object.assign({ pageSize: 100000, pageIndex: 1 }, this.queryParam)).then((res) => {
    this.loading = false;
    //需要截取日期的字段
    var arrDataCutout = this.columns.filter(v => v.customCutout == true);
    res.data.rows.forEach(item => {
    var arrKeys = Object.keys(item);
    arrKeys.forEach(key => {
    var strFieldDic = key + 'Data';
    //枚举转值
    if (this[strFieldDic] && this[strFieldDic].length > 0) {
    let arrFieldDic = this[strFieldDic].filter(v => String(v.code) == String(item[key]));
    if (arrFieldDic.length > 0) {
    item[key] = arrFieldDic[0]?.name || '没有枚举值';
    }
    }
    // æ—¥æœŸæˆªå–
    if (arrDataCutout.length > 0) {
    arrDataCutout.forEach(itemIn => {
    if (key == itemIn.dataIndex && item[key]) {
    item[key] = item[key].split(" ")[0]
    }
    })
    }
    });
    })
    exportExcel(res.data.rows, entozh, "xlsx", `${this.$route.meta.title}`)
    }).catch((err) => {
    this.loading = false
    this.$message.error('下载错误:获取文件流错误' + err)
    })
    },
    toggleAdvanced () {
    this.advanced = !this.advanced
    this.handleTableHt() //设置主表表格高度
    },
    onChangecreatedTime(date, dateString) {
      this.queryParam.createdTime = dateString
    },
    onChangeupdatedTime(date, dateString) {
      this.queryParam.updatedTime = dateString
    },
    handleOk () {
    this.$refs.table.refresh()
    },
    onSelectChange (selectedRowKeys, selectedRows) {
    this.selectedRowKeys = selectedRowKeys
    this.selectedRows = selectedRows
    }
    }
    }
</script>
<style lang="less">
  .table-operator {
    margin-bottom: 18px;
  }
  button {
    margin-right: 8px;
  }
</style>
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/addForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="新增仓库表"
    title="新增仓库信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
@@ -18,7 +18,7 @@
          <a-input placeholder="请输入仓库地址" v-decorator="['address']" />
        </a-form-item>
        <a-form-item label="工厂编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入工厂编号" v-decorator="['factoryCode']" />
          <a-input placeholder="请输入工厂编号" v-decorator="['factoryCode', {rules: [{required: true, message: '请输入工厂编号!'}]}]" />
        </a-form-item>
        <a-form-item label="长" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入长" v-decorator="['length']" />
@@ -36,7 +36,7 @@
          <a-input placeholder="请输入定位" v-decorator="['position']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '请选择是否禁用!' }], valuePropName: 'checked'}]" />
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入备注" v-decorator="['remarks']" />
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/editForm.vue
@@ -1,6 +1,6 @@
<template>
  <a-modal
    title="编辑仓库表"
    title="编辑仓库信息"
    :width="900"
    :visible="visible"
    :confirmLoading="confirmLoading"
@@ -18,7 +18,7 @@
          <a-input placeholder="请输入仓库地址" v-decorator="['address']" />
        </a-form-item>
        <a-form-item label="工厂编号" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入工厂编号" v-decorator="['factoryCode']" />
          <a-input placeholder="请输入工厂编号" v-decorator="['factoryCode', {rules: [{required: true, message: '请输入工厂编号!'}]}]" />
        </a-form-item>
        <a-form-item label="长" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入长" v-decorator="['length']" />
@@ -36,7 +36,7 @@
          <a-input placeholder="请输入定位" v-decorator="['position']" />
        </a-form-item>
        <a-form-item label="是否禁用" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-switch v-decorator="['isDisabled',{rules: [{ required: true, message: '请选择是否禁用!' }], valuePropName: 'checked'}]" />
          <a-switch v-decorator="['isDisabled', { valuePropName: 'checked' }]" />
        </a-form-item>
        <a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
          <a-input placeholder="请输入备注" v-decorator="['remarks']" />
iWare_RawMaterialWarehouse_Web/src/views/main/WmsBase/WmsWarehouse/index.vue
@@ -128,7 +128,7 @@
          <a-button type="info" v-if="hasPerm('WmsWarehouse:exportExcel')" icon="download" @click="WmsWarehouseToExcel()">
            å¯¼å‡º
          </a-button>
            <a-button type="primary" v-if="hasPerm('WmsWarehouse:add')" icon="plus" @click="$refs.addForm.add()">新增仓库表</a-button>
            <a-button type="primary" v-if="hasPerm('WmsWarehouse:add')" icon="plus" @click="$refs.addForm.add()">新增仓库信息</a-button>
        </div>
        </template>
          <span slot="isDisabledscopedSlots" slot-scope="text">
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Admin.NET.Application.xml
ÎļþÌ«´ó
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/BindEntrance/Dto/BindEntranceOutput.cs
@@ -1,124 +1,124 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Admin.NET.Core;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Admin.NET.Core;
namespace Admin.NET.Application
{
    /// <summary>
    /// ç»„盘物料信息
    /// </summary>
    public class BindEntranceOutput
    {
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// ç»„盘物料信息
//    /// </summary>
//    public class BindEntranceOutput
//    {
        /// <summary>
        /// å‘¨è½¬ç®±å·
        /// </summary>
        public string ContainerCode { get; set; }
//        /// <summary>
//        /// å‘¨è½¬ç®±å·
//        /// </summary>
//        public string ContainerCode { get; set; }
        /// <summary>
        /// æ–™ç®±å·ä¿¡æ¯
        /// </summary>
        public WmsContainerDto WmsContainer { get; set; }
        /// <summary>
        /// åº“位编号
        /// </summary>
        public string PlaceCode { get; set; }
//        /// <summary>
//        /// æ–™ç®±å·ä¿¡æ¯
//        /// </summary>
//        public WmsContainerDto WmsContainer { get; set; }
//        /// <summary>
//        /// åº“位编号
//        /// </summary>
//        public string PlaceCode { get; set; }
        /// <summary>
        /// ç‰©æ–™æ˜Žç»†ä¿¡æ¯
        /// </summary>
        public List<GetMaterialContainerOutput> WmsMaterials { get; set; }
    }
//        /// <summary>
//        /// ç‰©æ–™æ˜Žç»†ä¿¡æ¯
//        /// </summary>
//        public List<GetMaterialContainerOutput> WmsMaterials { get; set; }
//    }
    /// <summary>
    ///  ç‰©æ–™æ˜Žç»†ä¿¡æ¯è¾“出参数
    /// </summary>
    public class GetMaterialContainerOutput
    {
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
//    /// <summary>
//    ///  ç‰©æ–™æ˜Žç»†ä¿¡æ¯è¾“出参数
//    /// </summary>
//    public class GetMaterialContainerOutput
//    {
//        /// <summary>
//        /// ç‰©æ–™åç§°
//        /// </summary>
//        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        public string MaterialNo { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç¼–号
//        /// </summary>
//        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public string MaterialBatch { get; set; }
//        /// <summary>
//        /// ç‰©æ–™æ‰¹æ¬¡
//        /// </summary>
//        public string MaterialBatch { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åˆ«;数据字典
        /// </summary>
        public MaterialType MaterialType { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç±»åˆ«;数据字典
//        /// </summary>
//        public MaterialType MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™æ£€éªŒ
        /// </summary>
        public MaterialInspection InspectionMethod { get; set; }
//        /// <summary>
//        /// ç‰©æ–™æ£€éªŒ
//        /// </summary>
//        public MaterialInspection InspectionMethod { get; set; }
        /// <summary>
        /// ç‰©æ–™è§„æ ¼
        /// </summary>
        public string MaterialSpec { get; set; }
    }
//        /// <summary>
//        /// ç‰©æ–™è§„æ ¼
//        /// </summary>
//        public string MaterialSpec { get; set; }
//    }
    public class MaterialOutput
    {
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
//    public class MaterialOutput
//    {
//        /// <summary>
//        /// ç‰©æ–™åç§°
//        /// </summary>
//        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        public string MaterialNo { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç¼–号
//        /// </summary>
//        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        public long MaterialId { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public string MaterialBatch { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ID
//        /// </summary>
//        public long MaterialId { get; set; }
//        /// <summary>
//        /// ç‰©æ–™æ‰¹æ¬¡
//        /// </summary>
//        public string MaterialBatch { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åˆ«;数据字典
        /// </summary>
        public MaterialType MaterialType { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç±»åˆ«;数据字典
//        /// </summary>
//        public MaterialType MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™æ£€éªŒ
        /// </summary>
        public MaterialInspection InspectionMethod { get; set; }
//        /// <summary>
//        /// ç‰©æ–™æ£€éªŒ
//        /// </summary>
//        public MaterialInspection InspectionMethod { get; set; }
        /// <summary>
        /// ç‰©æ–™è§„æ ¼
        /// </summary>
        public string MaterialSpec { get; set; }
//        /// <summary>
//        /// ç‰©æ–™è§„æ ¼
//        /// </summary>
//        public string MaterialSpec { get; set; }
        /// <summary>
        /// ç‰©æ–™å¯†åº¦
        /// </summary>
        public string MaterialDensity { get; set; }
//        /// <summary>
//        /// ç‰©æ–™å¯†åº¦
//        /// </summary>
//        public string MaterialDensity { get; set; }
        /// <summary>
        /// ç‰©æ–™å•位
        /// </summary>
        public string MaterialUnit { get; set; }
//        /// <summary>
//        /// ç‰©æ–™å•位
//        /// </summary>
//        public string MaterialUnit { get; set; }
        /// <summary>
        /// å·¥æ®µ
        /// </summary>
        public LesWorkshopSection LesWorkshopSection { get; set; }
    }
}
//        /// <summary>
//        /// å·¥æ®µ
//        /// </summary>
//        public LesWorkshopSection LesWorkshopSection { get; set; }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaDto.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaInput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/Dto/WmsAreaOutput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsArea/WmsAreaService.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerDto.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerInput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Dto/WmsContainerOutput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/IWmsContainerService.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/WmsContainerService.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceDto.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceInput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/Dto/WmsPlaceOutput.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsPlace/WmsPlaceService.cs
ÎļþÒÑɾ³ý
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Dto/WmsAreaInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,340 @@
using Admin.NET.Core;
using Admin.NET.Core.Service;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“区信息查询参数
    /// </summary>
    public class WmsAreaSearch : PageInputBase
    {
        /// <summary>
        /// åº“区编码
        /// </summary>
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// ä»“库编号
        /// </summary>
        public virtual string WarehouseCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        public virtual string WarehouseName { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public virtual string AreaName { get; set; }
        /// <summary>
        /// åº“区描述
        /// </summary>
        public virtual string AreaDesc { get; set; }
        /// <summary>
        /// åº“区状态
        /// </summary>
        public virtual int? AreaStatus { get; set; }
        /// <summary>
        /// ERP代码
        /// </summary>
        public virtual string ErpCode { get; set; }
        /// <summary>
        /// æ‰€å±žä»“库
        /// </summary>
        public virtual long? WarehouseId { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public virtual bool? IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        public virtual bool? IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public virtual bool? IsPartLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        public virtual bool? IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        public virtual bool? IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual List<string> CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public virtual List<string> UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
        /// <summary>
    /// åº“区信息不分页查询参数
    /// </summary>
    public class WmsAreaSearchNonPage : PageInputNonPageBase
    {
        /// <summary>
        /// åº“区编码
        /// </summary>
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// ä»“库编号
        /// </summary>
        public virtual string WarehouseCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        public virtual string WarehouseName { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public virtual string AreaName { get; set; }
        /// <summary>
        /// åº“区描述
        /// </summary>
        public virtual string AreaDesc { get; set; }
        /// <summary>
        /// åº“区状态
        /// </summary>
        public virtual int? AreaStatus { get; set; }
        /// <summary>
        /// ERP代码
        /// </summary>
        public virtual string ErpCode { get; set; }
        /// <summary>
        /// æ‰€å±žä»“库
        /// </summary>
        public virtual long? WarehouseId { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public virtual bool? IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        public virtual bool? IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public virtual bool? IsPartLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        public virtual bool? IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        public virtual bool? IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
    /// <summary>
    /// åº“区信息输入参数
    /// </summary>
    public class WmsAreaInput
    {
        /// <summary>
        /// åº“区编码
        /// </summary>
        [Required(ErrorMessage = "库区编码不能为空")]
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// ä»“库编号
        /// </summary>
        [Required(ErrorMessage = "仓库编号不能为空")]
        public virtual string WarehouseCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        [Required(ErrorMessage = "仓库名称不能为空")]
        public virtual string WarehouseName { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        [Required(ErrorMessage = "库区名称不能为空")]
        public virtual string AreaName { get; set; }
        /// <summary>
        /// åº“区描述
        /// </summary>
        public virtual string AreaDesc { get; set; }
        /// <summary>
        /// åº“区状态
        /// </summary>
        [Required(ErrorMessage = "库区状态不能为空")]
        public virtual int AreaStatus { get; set; }
        /// <summary>
        /// ERP代码
        /// </summary>
        [Required(ErrorMessage = "ERP代码不能为空")]
        public virtual string ErpCode { get; set; }
        /// <summary>
        /// æ‰€å±žä»“库
        /// </summary>
        [Required(ErrorMessage = "所属仓库不能为空")]
        public virtual long WarehouseId { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        [Required(ErrorMessage = "零件级管控不能为空")]
        public virtual bool IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        [Required(ErrorMessage = "检验先进先出不能为空")]
        public virtual bool IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        [Required(ErrorMessage = "零件级管控不能为空")]
        public virtual bool IsPartLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        [Required(ErrorMessage = "允许混淆不能为空")]
        public virtual bool IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        [Required(ErrorMessage = "允许负库存不能为空")]
        public virtual bool IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
    }
    /// <summary>
    /// åº“区信息新增参数
    /// </summary>
    public class AddWmsAreaInput : WmsAreaInput
    {
    }
    /// <summary>
    /// åº“区信息删除参数
    /// </summary>
    public class DeleteWmsAreaInput : BaseId
    {
    }
    /// <summary>
    /// åº“区信息更新参数
    /// </summary>
    public class UpdateWmsAreaInput : WmsAreaInput
    {
        /// <summary>
        /// Id主键
        /// </summary>
        [Required(ErrorMessage = "Id主键不能为空")]
        public long? Id { get; set; }
    }
    /// <summary>
    /// åº“区信息获取单个参数
    /// </summary>
    public class QueryeWmsAreaInput : BaseId
    {
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Dto/WmsAreaOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
using Admin.NET.Core.Util.LowCode.Dto;
using System;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“区信息输出参数
    /// </summary>
    public class WmsAreaOutput
    {
        /// <summary>
        /// åº“区编码
        /// </summary>
        public string AreaCode { get; set; }
        /// <summary>
        /// ä»“库编号
        /// </summary>
        public string WarehouseCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        public string WarehouseName { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// åº“区描述
        /// </summary>
        public string AreaDesc { get; set; }
        /// <summary>
        /// åº“区状态
        /// </summary>
        public int AreaStatus { get; set; }
        /// <summary>
        /// ERP代码
        /// </summary>
        public string ErpCode { get; set; }
        /// <summary>
        /// æ‰€å±žä»“库
        /// </summary>
        public long WarehouseId { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public bool IsBarcodeLevelControl { get; set; }
        /// <summary>
        /// æ£€éªŒå…ˆè¿›å…ˆå‡º
        /// </summary>
        public bool IsFIFO { get; set; }
        /// <summary>
        /// é›¶ä»¶çº§ç®¡æŽ§
        /// </summary>
        public bool IsPartLevelControl { get; set; }
        /// <summary>
        /// å…è®¸æ··æ·†
        /// </summary>
        public bool IsAllowConfusion { get; set; }
        /// <summary>
        /// å…è®¸è´Ÿåº“å­˜
        /// </summary>
        public bool IsAllowNegativeInventory { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long? Id { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public string UpdatedUserName { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/IWmsAreaService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Admin.NET.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application
{
    public interface IWmsAreaService
    {
        Task<WmsAreaOutput> Get([FromQuery] QueryeWmsAreaInput input);
        Task<List<WmsAreaOutput>> List([FromQuery] WmsAreaInput input);
        Task<PageResult<WmsAreaOutput>> Page([FromQuery] WmsAreaSearch input);
        Task<List<WmsAreaOutput>> ListNonPageAsync([FromQuery] WmsAreaSearchNonPage input);
        Task Add(AddWmsAreaInput input);
        Task Update(UpdateWmsAreaInput input);
        Task Delete(DeleteWmsAreaInput input);
        Task<int> ImportExcelAsync(IFormFile file);
        IActionResult DownloadExcelTemplate(string version);
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/Map/WmsAreaMapper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Mapster;
using Admin.NET.Core;
namespace Admin.NET.Application
{
    public class WmsAreaMapper : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<AddWmsAreaInput, WmsArea>()
            ;
            config.ForType<UpdateWmsAreaInput, WmsArea>()
            ;
            config.ForType<WmsArea, WmsAreaOutput>()
            ;
        }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsArea/WmsAreaService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,649 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using System.ComponentModel;
using System.Data;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“区信息服务
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsArea", Order = 100)]
    [Route("api")]
    public class WmsAreaService : IWmsAreaService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsArea,MasterDbContextLocator> _wmsAreaRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
        public WmsAreaService(
            IRepository<WmsArea,MasterDbContextLocator> wmsAreaRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
            _wmsAreaRep = wmsAreaRep;
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataRep = sysDictDataRep;
         _sysExcelTemplateService = sysExcelTemplateService;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢åº“区信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsArea/page")]
        public async Task<PageResult<WmsAreaOutput>> Page([FromQuery] WmsAreaSearch input)
        {
            var wmsAreas = await _wmsAreaRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.AreaCode), u => u.AreaCode == input.AreaCode)
                                     .Where(!string.IsNullOrEmpty(input.WarehouseCode), u => u.WarehouseCode == input.WarehouseCode)
                                     .Where(!string.IsNullOrEmpty(input.WarehouseName), u => u.WarehouseName == input.WarehouseName)
                                     .Where(!string.IsNullOrEmpty(input.AreaName), u => u.AreaName == input.AreaName)
                                     .Where(!string.IsNullOrEmpty(input.AreaDesc), u => u.AreaDesc == input.AreaDesc)
                                     .Where(input.AreaStatus != null, u => u.AreaStatus == input.AreaStatus)
                                     .Where(!string.IsNullOrEmpty(input.ErpCode), u => u.ErpCode == input.ErpCode)
                                     .Where(input.WarehouseId != null, u => u.WarehouseId == input.WarehouseId)
                                     .Where(input.IsBarcodeLevelControl != null, u => u.IsBarcodeLevelControl == input.IsBarcodeLevelControl)
                                     .Where(input.IsFIFO != null, u => u.IsFIFO == input.IsFIFO)
                                     .Where(input.IsPartLevelControl != null, u => u.IsPartLevelControl == input.IsPartLevelControl)
                                     .Where(input.IsAllowConfusion != null, u => u.IsAllowConfusion == input.IsAllowConfusion)
                                     .Where(input.IsAllowNegativeInventory != null, u => u.IsAllowNegativeInventory == input.IsAllowNegativeInventory)
                                     .Where(input.IsVirtually != null, u => u.IsVirtually == input.IsVirtually)
                                     .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
                                     .OrderBy(PageInputOrder.OrderBuilder<WmsAreaSearch>(input))
                                     .ProjectToType<WmsAreaOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsAreas;
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢åº“区信息列表
        /// </summary>
        /// <param name="input">库区信息查询参数</param>
        /// <returns>(库区信息)实例列表</returns>
        [HttpGet("WmsArea/listNonPage")]
        public async Task<List<WmsAreaOutput>> ListNonPageAsync([FromQuery] WmsAreaSearchNonPage input)
        {
            var pAreaCode = input.AreaCode?.Trim() ?? "";
            var pWarehouseCode = input.WarehouseCode?.Trim() ?? "";
            var pWarehouseName = input.WarehouseName?.Trim() ?? "";
            var pAreaName = input.AreaName?.Trim() ?? "";
            var pAreaDesc = input.AreaDesc?.Trim() ?? "";
            var pAreaStatus = input.AreaStatus;
            var pErpCode = input.ErpCode?.Trim() ?? "";
            var pWarehouseId = input.WarehouseId;
            var pIsBarcodeLevelControl = input.IsBarcodeLevelControl;
            var pIsFIFO = input.IsFIFO;
            var pIsPartLevelControl = input.IsPartLevelControl;
            var pIsAllowConfusion = input.IsAllowConfusion;
            var pIsAllowNegativeInventory = input.IsAllowNegativeInventory;
            var pIsVirtually = input.IsVirtually;
            var pIsDisabled = input.IsDisabled;
            var pCreatedTime = input.CreatedTime;
            var pUpdatedTime = input.UpdatedTime;
            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var wmsAreas = await _wmsAreaRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pAreaCode), u => u.AreaCode == pAreaCode)
                .Where(!string.IsNullOrEmpty(pWarehouseCode), u => u.WarehouseCode == pWarehouseCode)
                .Where(!string.IsNullOrEmpty(pWarehouseName), u => u.WarehouseName == pWarehouseName)
                .Where(!string.IsNullOrEmpty(pAreaName), u => u.AreaName == pAreaName)
                .Where(!string.IsNullOrEmpty(pAreaDesc), u => u.AreaDesc == pAreaDesc)
                .Where(pAreaStatus != null, u => u.AreaStatus == pAreaStatus)
                .Where(!string.IsNullOrEmpty(pErpCode), u => u.ErpCode == pErpCode)
                .Where(pWarehouseId != null, u => u.WarehouseId == pWarehouseId)
                .Where(pIsBarcodeLevelControl != null, u => u.IsBarcodeLevelControl == pIsBarcodeLevelControl)
                .Where(pIsFIFO != null, u => u.IsFIFO == pIsFIFO)
                .Where(pIsPartLevelControl != null, u => u.IsPartLevelControl == pIsPartLevelControl)
                .Where(pIsAllowConfusion != null, u => u.IsAllowConfusion == pIsAllowConfusion)
                .Where(pIsAllowNegativeInventory != null, u => u.IsAllowNegativeInventory == pIsAllowNegativeInventory)
                .Where(pIsVirtually != null, u => u.IsVirtually == pIsVirtually)
                .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsAreaOutput>()
            .ToListAsync();
            return wmsAreas;
        }
         /// <summary>
        /// èŽ·å–åº“åŒºä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsArea/detail")]
        public async Task<WmsAreaOutput> Get([FromQuery] QueryeWmsAreaInput input)
        {
            return (await _wmsAreaRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsAreaOutput>();
        }
        /// <summary>
        /// èŽ·å–åº“åŒºä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsArea/list")]
        public async Task<List<WmsAreaOutput>> List([FromQuery] WmsAreaInput input)
        {
            return await _wmsAreaRep.DetachedEntities.ProjectToType<WmsAreaOutput>().ToListAsync();
        }
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ åº“åŒºä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsArea/add")]
        public async Task Add(AddWmsAreaInput input)
        {
            var wmsArea = input.Adapt<WmsArea>();
                        //验证
            await CheckExisit(wmsArea);
            wmsArea.CreatedUserId = wmsArea.UpdatedUserId = SysHelper.GetUserId();
            wmsArea.CreatedUserName = wmsArea.UpdatedUserName = SysHelper.GetUserName();
            wmsArea.CreatedTime = wmsArea.UpdatedTime = SysHelper.GetNowTime();
            await _wmsAreaRep.InsertAsync(wmsArea);
        }
        /// <summary>
        /// åˆ é™¤åº“区信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsArea/delete")]
        public async Task Delete(DeleteWmsAreaInput input)
        {
            var wmsArea = await _wmsAreaRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsAreaRep.DeleteAsync(wmsArea);
        }
        /// <summary>
        /// æ›´æ–°åº“区信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsArea/edit")]
        public async Task Update(UpdateWmsAreaInput input)
        {
            var isExist = await _wmsAreaRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
            var wmsArea = input.Adapt<WmsArea>();
            //验证
            await CheckExisit(wmsArea,true);
            wmsArea.UpdatedUserId = SysHelper.GetUserId();
            wmsArea.UpdatedUserName = SysHelper.GetUserName();
            wmsArea.UpdatedTime = SysHelper.GetNowTime();
            await _wmsAreaRep.UpdateAsync(wmsArea,ignoreNullValues:true);
        }
        #endregion
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入库区信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("WmsArea/importExcel")]
        public async Task<int> ImportExcelAsync(IFormFile file)
        {
            int _HeadStartLine = 2;//第1行是说明,第2行是列名
            int _DataStartLine = 3;//第3行开始是数据
            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
            var addList =await CommonImport(importDataTable, _DataStartLine);
            lock (_lock)
            {
                _wmsAreaRep.InsertAsync(addList);
            }
            await Task.CompletedTask;
            return addList.Count;
        }
        /// <summary>
        ///  DataTable转换实体对象列表
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="dataStartLine">模版列名开始行</param>
        /// <returns></returns>
        private async Task<List<WmsArea>> CommonImport(DataTable dataTable, int dataStartLine)
        {
            var details = new List<WmsArea>();
            int index = dataStartLine;//模版列名开始行
            foreach (System.Data.DataRow row in dataTable.Rows)
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsArea()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region å®šä¹‰å˜é‡
                           var _AreaCode = "";//库区编码
                           var _WarehouseCode = "";//仓库编号
                           var _WarehouseName = "";//仓库名称
                           var _AreaName = "";//库区名称
                           var _AreaDesc = "";//库区描述
                           var _AreaStatus = "";//库区状态
                           var _ErpCode = "";//ERP代码
                           var _WarehouseId = "";//所属仓库
                           var _IsBarcodeLevelControl = "";//零件级管控
                           var _IsFIFO = "";//检验先进先出
                           var _IsPartLevelControl = "";//零件级管控
                           var _IsAllowConfusion = "";//允许混淆
                           var _IsAllowNegativeInventory = "";//允许负库存
                           var _IsVirtually = "";//是否虚拟
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          #region å–值
                           _AreaCode = row["库区编码"]?.ToString() ;
                           _WarehouseCode = row["仓库编号"]?.ToString() ;
                           _WarehouseName = row["仓库名称"]?.ToString() ;
                           _AreaName = row["库区名称"]?.ToString() ;
                           _AreaDesc = row["库区描述"]?.ToString() ;
                           _AreaStatus = row["库区状态"]?.ToString() ;
                           _ErpCode = row["ERP代码"]?.ToString() ;
                           _WarehouseId = row["所属仓库"]?.ToString() ;
                           _IsBarcodeLevelControl = row["零件级管控"]?.ToString() ;
                           _IsFIFO = row["检验先进先出"]?.ToString() ;
                           _IsPartLevelControl = row["零件级管控"]?.ToString() ;
                           _IsAllowConfusion = row["允许混淆"]?.ToString() ;
                           _IsAllowNegativeInventory = row["允许负库存"]?.ToString() ;
                           _IsVirtually = row["是否虚拟"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          #region éªŒè¯
                          if (string.IsNullOrEmpty(_AreaCode))
                          {
                            throw Oops.Oh($"第{index}行[库区编码]{_AreaCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_AreaCode))
                          {
                                addItem.AreaCode = (string)_AreaCode;
                           }
                          if (string.IsNullOrEmpty(_WarehouseCode))
                          {
                            throw Oops.Oh($"第{index}行[仓库编号]{_WarehouseCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_WarehouseCode))
                          {
                                addItem.WarehouseCode = (string)_WarehouseCode;
                           }
                          if (string.IsNullOrEmpty(_WarehouseName))
                          {
                            throw Oops.Oh($"第{index}行[仓库名称]{_WarehouseName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_WarehouseName))
                          {
                                addItem.WarehouseName = (string)_WarehouseName;
                           }
                          if (string.IsNullOrEmpty(_AreaName))
                          {
                            throw Oops.Oh($"第{index}行[库区名称]{_AreaName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_AreaName))
                          {
                                addItem.AreaName = (string)_AreaName;
                           }
                          if(!string.IsNullOrEmpty(_AreaDesc))
                          {
                                addItem.AreaDesc = (string)_AreaDesc;
                           }
                          if (string.IsNullOrEmpty(_AreaStatus))
                          {
                            throw Oops.Oh($"第{index}行[库区状态]{_AreaStatus}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_AreaStatus))
                          {
                              if (!int.TryParse(_AreaStatus, out int outAreaStatus)&&!string.IsNullOrEmpty(_AreaStatus))
                              {
                                 throw Oops.Oh($"第{index}行[库区状态]{_AreaStatus}值不正确!");
                              }
                              if (outAreaStatus <= 0&&!string.IsNullOrEmpty(_AreaStatus))
                              {
                                 throw Oops.Oh($"第{index}行[库区状态]{_AreaStatus}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.AreaStatus = outAreaStatus;
                              }
                          }
                          if (string.IsNullOrEmpty(_ErpCode))
                          {
                            throw Oops.Oh($"第{index}行[ERP代码]{_ErpCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_ErpCode))
                          {
                                addItem.ErpCode = (string)_ErpCode;
                           }
                          if (string.IsNullOrEmpty(_WarehouseId))
                          {
                            throw Oops.Oh($"第{index}行[所属仓库]{_WarehouseId}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_WarehouseId))
                          {
                              if (!long.TryParse(_WarehouseId, out long outWarehouseId)&&!string.IsNullOrEmpty(_WarehouseId))
                              {
                                 throw Oops.Oh($"第{index}行[所属仓库]{_WarehouseId}值不正确!");
                              }
                              if (outWarehouseId <= 0&&!string.IsNullOrEmpty(_WarehouseId))
                              {
                                 throw Oops.Oh($"第{index}行[所属仓库]{_WarehouseId}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.WarehouseId = outWarehouseId;
                              }
                          }
                          if (string.IsNullOrEmpty(_IsBarcodeLevelControl))
                          {
                            throw Oops.Oh($"第{index}行[零件级管控]{_IsBarcodeLevelControl}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsBarcodeLevelControl))
                          {
                            if(!_IsBarcodeLevelControl.Equals("是") && !_IsBarcodeLevelControl.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[零件级管控]{_IsBarcodeLevelControl}值不正确!");
                             }
                             else
                             {
                               bool outIsBarcodeLevelControl = _IsBarcodeLevelControl.Equals("是") ? true : false;
                               addItem.IsBarcodeLevelControl = outIsBarcodeLevelControl;
                             }
                             }
                          if (string.IsNullOrEmpty(_IsFIFO))
                          {
                            throw Oops.Oh($"第{index}行[检验先进先出]{_IsFIFO}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsFIFO))
                          {
                            if(!_IsFIFO.Equals("是") && !_IsFIFO.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[检验先进先出]{_IsFIFO}值不正确!");
                             }
                             else
                             {
                               bool outIsFIFO = _IsFIFO.Equals("是") ? true : false;
                               addItem.IsFIFO = outIsFIFO;
                             }
                             }
                          if (string.IsNullOrEmpty(_IsPartLevelControl))
                          {
                            throw Oops.Oh($"第{index}行[零件级管控]{_IsPartLevelControl}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsPartLevelControl))
                          {
                            if(!_IsPartLevelControl.Equals("是") && !_IsPartLevelControl.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[零件级管控]{_IsPartLevelControl}值不正确!");
                             }
                             else
                             {
                               bool outIsPartLevelControl = _IsPartLevelControl.Equals("是") ? true : false;
                               addItem.IsPartLevelControl = outIsPartLevelControl;
                             }
                             }
                          if (string.IsNullOrEmpty(_IsAllowConfusion))
                          {
                            throw Oops.Oh($"第{index}行[允许混淆]{_IsAllowConfusion}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsAllowConfusion))
                          {
                            if(!_IsAllowConfusion.Equals("是") && !_IsAllowConfusion.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[允许混淆]{_IsAllowConfusion}值不正确!");
                             }
                             else
                             {
                               bool outIsAllowConfusion = _IsAllowConfusion.Equals("是") ? true : false;
                               addItem.IsAllowConfusion = outIsAllowConfusion;
                             }
                             }
                          if (string.IsNullOrEmpty(_IsAllowNegativeInventory))
                          {
                            throw Oops.Oh($"第{index}行[允许负库存]{_IsAllowNegativeInventory}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsAllowNegativeInventory))
                          {
                            if(!_IsAllowNegativeInventory.Equals("是") && !_IsAllowNegativeInventory.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[允许负库存]{_IsAllowNegativeInventory}值不正确!");
                             }
                             else
                             {
                               bool outIsAllowNegativeInventory = _IsAllowNegativeInventory.Equals("是") ? true : false;
                               addItem.IsAllowNegativeInventory = outIsAllowNegativeInventory;
                             }
                             }
                          if(!string.IsNullOrEmpty(_IsVirtually))
                          {
                            if(!_IsVirtually.Equals("是") && !_IsVirtually.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不正确!");
                             }
                             else
                             {
                               bool outIsVirtually = _IsVirtually.Equals("是") ? true : false;
                               addItem.IsVirtually = outIsVirtually;
                             }
                             }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
                             }
                             else
                             {
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Id))
                          {
                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
                              }
                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Id = outId;
                              }
                          }
                          #endregion
                details.Add(addItem);
            }
              //验重
              await CheckExisitForImport(details);
            return details;
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½åº“区信息的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("WmsArea/downloadExcelTemplate")]
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsArea{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(库区信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        #region ç§æœ‰æ–¹æ³•
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-数据库
        /// </summary>
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( WmsArea input,bool isEdit=false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _wmsAreaRep.AnyAsync(u =>
                                   u.AreaCode.Equals(input.AreaCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _wmsAreaRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.AreaCode.Equals(input.AreaCode)
                    ,false);
               }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsArea> inputs)
        {
            //根据联合主键验证表格中中是否已存在相同数据
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.AreaCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.AreaCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var wmsArea = existExcelItem.Adapt<WmsArea>();
                   var item= existExcelItem.Adapt<WmsArea>();
                   throw Oops.Oh($"导入的表格中,库区编码[{item.AreaCode}]已存在");
                 }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _wmsAreaRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.AreaCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.AreaCode
                  ));
                  if (existDBItem != null)
                 {
                   var wmsArea = existExcelItem.Adapt<WmsArea>();
                   var item= existExcelItem.Adapt<WmsArea>();
                   throw Oops.Oh($"系统中,库区编码[{item.AreaCode}]已存在");
                 }
        }
        #endregion
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,348 @@
using Admin.NET.Core;
using Admin.NET.Core.Service;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯æŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerSearch : PageInputBase
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string ContainerCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public virtual string ContainerName { get; set; }
        /// <summary>
        /// ç±»åž‹ID
        /// </summary>
        public virtual long? ContainerTypeId { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public virtual string ContainerTypeName { get; set; }
        /// <summary>
        /// å®¹å™¨å…³ç³»ID
        /// </summary>
        public virtual long? PackagingId { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public virtual decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public virtual decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public virtual decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        public virtual decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        public virtual decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        public virtual decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨åç§°
        /// </summary>
        public virtual string ParentContainerName { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨Id
        /// </summary>
        public virtual long? ParentContainerId { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual int? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual List<string> CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public virtual List<string> UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
        /// <summary>
    /// å®¹å™¨ä¿¡æ¯ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerSearchNonPage : PageInputNonPageBase
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string ContainerCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public virtual string ContainerName { get; set; }
        /// <summary>
        /// ç±»åž‹ID
        /// </summary>
        public virtual long? ContainerTypeId { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public virtual string ContainerTypeName { get; set; }
        /// <summary>
        /// å®¹å™¨å…³ç³»ID
        /// </summary>
        public virtual long? PackagingId { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public virtual decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public virtual decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public virtual decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        public virtual decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        public virtual decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        public virtual decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨åç§°
        /// </summary>
        public virtual string ParentContainerName { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨Id
        /// </summary>
        public virtual long? ParentContainerId { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual int? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯è¾“入参数
    /// </summary>
    public class WmsContainerInput
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        [Required(ErrorMessage = "编号不能为空")]
        public virtual string ContainerCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        [Required(ErrorMessage = "名称不能为空")]
        public virtual string ContainerName { get; set; }
        /// <summary>
        /// ç±»åž‹ID
        /// </summary>
        [Required(ErrorMessage = "类型ID不能为空")]
        public virtual long ContainerTypeId { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        [Required(ErrorMessage = "类型名称不能为空")]
        public virtual string ContainerTypeName { get; set; }
        /// <summary>
        /// å®¹å™¨å…³ç³»ID
        /// </summary>
        [Required(ErrorMessage = "容器关系ID不能为空")]
        public virtual long PackagingId { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public virtual decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public virtual decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public virtual decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        public virtual decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        public virtual decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        public virtual decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨åç§°
        /// </summary>
        public virtual string ParentContainerName { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨Id
        /// </summary>
        public virtual long? ParentContainerId { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual int? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯æ–°å¢žå‚æ•°
    /// </summary>
    public class AddWmsContainerInput : WmsContainerInput
    {
    }
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯åˆ é™¤å‚æ•°
    /// </summary>
    public class DeleteWmsContainerInput : BaseId
    {
    }
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯æ›´æ–°å‚æ•°
    /// </summary>
    public class UpdateWmsContainerInput : WmsContainerInput
    {
        /// <summary>
        /// Id主键
        /// </summary>
        [Required(ErrorMessage = "Id主键不能为空")]
        public long? Id { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯èŽ·å–å•ä¸ªå‚æ•°
    /// </summary>
    public class QueryeWmsContainerInput : BaseId
    {
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Dto/WmsContainerOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
using Admin.NET.Core.Util.LowCode.Dto;
using System;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯è¾“出参数
    /// </summary>
    public class WmsContainerOutput
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public string ContainerCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public string ContainerName { get; set; }
        /// <summary>
        /// ç±»åž‹ID
        /// </summary>
        public long ContainerTypeId { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public string ContainerTypeName { get; set; }
        /// <summary>
        /// å®¹å™¨å…³ç³»ID
        /// </summary>
        public long PackagingId { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        public decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        public decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        public decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public decimal? MaxWeight { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨åç§°
        /// </summary>
        public string ParentContainerName { get; set; }
        /// <summary>
        /// çˆ¶å®¹å™¨Id
        /// </summary>
        public long? ParentContainerId { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public int? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long? Id { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public string UpdatedUserName { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/IWmsContainerService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Admin.NET.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application
{
    public interface IWmsContainerService
    {
        Task<WmsContainerOutput> Get([FromQuery] QueryeWmsContainerInput input);
        Task<List<WmsContainerOutput>> List([FromQuery] WmsContainerInput input);
        Task<PageResult<WmsContainerOutput>> Page([FromQuery] WmsContainerSearch input);
        Task<List<WmsContainerOutput>> ListNonPageAsync([FromQuery] WmsContainerSearchNonPage input);
        Task Add(AddWmsContainerInput input);
        Task Update(UpdateWmsContainerInput input);
        Task Delete(DeleteWmsContainerInput input);
        Task<int> ImportExcelAsync(IFormFile file);
        IActionResult DownloadExcelTemplate(string version);
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/Map/WmsContainerMapper.cs
ÎļþÃû´Ó iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/Common/WmsContainer/Map/WmsContainerMapper.cs ÐÞ¸Ä
@@ -3,15 +3,8 @@
namespace Admin.NET.Application
{
    /// <summary>
    ///
    /// </summary>
    public class WmsContainerMapper : IRegister
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="config"></param>
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<AddWmsContainerInput, WmsContainer>()
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainer/WmsContainerService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,670 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using System.ComponentModel;
using System.Data;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ä¿¡æ¯æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsContainer", Order = 100)]
    [Route("api")]
    public class WmsContainerService : IWmsContainerService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsContainer,MasterDbContextLocator> _wmsContainerRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
        public WmsContainerService(
            IRepository<WmsContainer,MasterDbContextLocator> wmsContainerRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
            _wmsContainerRep = wmsContainerRep;
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataRep = sysDictDataRep;
         _sysExcelTemplateService = sysExcelTemplateService;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å®¹å™¨ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainer/page")]
        public async Task<PageResult<WmsContainerOutput>> Page([FromQuery] WmsContainerSearch input)
        {
            var wmsContainers = await _wmsContainerRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.ContainerCode), u => u.ContainerCode == input.ContainerCode)
                                     .Where(!string.IsNullOrEmpty(input.ContainerName), u => u.ContainerName == input.ContainerName)
                                     .Where(input.ContainerTypeId != null, u => u.ContainerTypeId == input.ContainerTypeId)
                                     .Where(!string.IsNullOrEmpty(input.ContainerTypeName), u => u.ContainerTypeName == input.ContainerTypeName)
                                     .Where(input.PackagingId != null, u => u.PackagingId == input.PackagingId)
                                     .Where(input.SpecLength != null, u => u.SpecLength == input.SpecLength)
                                     .Where(input.SpecWidth != null, u => u.SpecWidth == input.SpecWidth)
                                     .Where(input.SpecHeight != null, u => u.SpecHeight == input.SpecHeight)
                                     .Where(input.LimitLength != null, u => u.LimitLength == input.LimitLength)
                                     .Where(input.LimitWidth != null, u => u.LimitWidth == input.LimitWidth)
                                     .Where(input.LimitHeight != null, u => u.LimitHeight == input.LimitHeight)
                                     .Where(input.MaxWeight != null, u => u.MaxWeight == input.MaxWeight)
                                     .Where(!string.IsNullOrEmpty(input.ParentContainerName), u => u.ParentContainerName == input.ParentContainerName)
                                     .Where(input.ParentContainerId != null, u => u.ParentContainerId == input.ParentContainerId)
                                     .Where(input.IsVirtually != null, u => u.IsVirtually == input.IsVirtually)
                                     .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
                                     .OrderBy(PageInputOrder.OrderBuilder<WmsContainerSearch>(input))
                                     .ProjectToType<WmsContainerOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsContainers;
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢å®¹å™¨ä¿¡æ¯åˆ—表
        /// </summary>
        /// <param name="input">容器信息查询参数</param>
        /// <returns>(容器信息)实例列表</returns>
        [HttpGet("WmsContainer/listNonPage")]
        public async Task<List<WmsContainerOutput>> ListNonPageAsync([FromQuery] WmsContainerSearchNonPage input)
        {
            var pContainerCode = input.ContainerCode?.Trim() ?? "";
            var pContainerName = input.ContainerName?.Trim() ?? "";
            var pContainerTypeId = input.ContainerTypeId;
            var pContainerTypeName = input.ContainerTypeName?.Trim() ?? "";
            var pPackagingId = input.PackagingId;
            var pSpecLength = input.SpecLength;
            var pSpecWidth = input.SpecWidth;
            var pSpecHeight = input.SpecHeight;
            var pLimitLength = input.LimitLength;
            var pLimitWidth = input.LimitWidth;
            var pLimitHeight = input.LimitHeight;
            var pMaxWeight = input.MaxWeight;
            var pParentContainerName = input.ParentContainerName?.Trim() ?? "";
            var pParentContainerId = input.ParentContainerId;
            var pIsVirtually = input.IsVirtually;
            var pIsDisabled = input.IsDisabled;
            var pCreatedTime = input.CreatedTime;
            var pUpdatedTime = input.UpdatedTime;
            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var wmsContainers = await _wmsContainerRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pContainerCode), u => u.ContainerCode == pContainerCode)
                .Where(!string.IsNullOrEmpty(pContainerName), u => u.ContainerName == pContainerName)
                .Where(pContainerTypeId != null, u => u.ContainerTypeId == pContainerTypeId)
                .Where(!string.IsNullOrEmpty(pContainerTypeName), u => u.ContainerTypeName == pContainerTypeName)
                .Where(pPackagingId != null, u => u.PackagingId == pPackagingId)
                .Where(pSpecLength != null, u => u.SpecLength == pSpecLength)
                .Where(pSpecWidth != null, u => u.SpecWidth == pSpecWidth)
                .Where(pSpecHeight != null, u => u.SpecHeight == pSpecHeight)
                .Where(pLimitLength != null, u => u.LimitLength == pLimitLength)
                .Where(pLimitWidth != null, u => u.LimitWidth == pLimitWidth)
                .Where(pLimitHeight != null, u => u.LimitHeight == pLimitHeight)
                .Where(pMaxWeight != null, u => u.MaxWeight == pMaxWeight)
                .Where(!string.IsNullOrEmpty(pParentContainerName), u => u.ParentContainerName == pParentContainerName)
                .Where(pParentContainerId != null, u => u.ParentContainerId == pParentContainerId)
                .Where(pIsVirtually != null, u => u.IsVirtually == pIsVirtually)
                .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsContainerOutput>()
            .ToListAsync();
            return wmsContainers;
        }
         /// <summary>
        /// èŽ·å–å®¹å™¨ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainer/detail")]
        public async Task<WmsContainerOutput> Get([FromQuery] QueryeWmsContainerInput input)
        {
            return (await _wmsContainerRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsContainerOutput>();
        }
        /// <summary>
        /// èŽ·å–å®¹å™¨ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainer/list")]
        public async Task<List<WmsContainerOutput>> List([FromQuery] WmsContainerInput input)
        {
            return await _wmsContainerRep.DetachedEntities.ProjectToType<WmsContainerOutput>().ToListAsync();
        }
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ å®¹å™¨ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainer/add")]
        public async Task Add(AddWmsContainerInput input)
        {
            var wmsContainer = input.Adapt<WmsContainer>();
                        //验证
            await CheckExisit(wmsContainer);
            wmsContainer.CreatedUserId = wmsContainer.UpdatedUserId = SysHelper.GetUserId();
            wmsContainer.CreatedUserName = wmsContainer.UpdatedUserName = SysHelper.GetUserName();
            wmsContainer.CreatedTime = wmsContainer.UpdatedTime = SysHelper.GetNowTime();
            await _wmsContainerRep.InsertAsync(wmsContainer);
        }
        /// <summary>
        /// åˆ é™¤å®¹å™¨ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainer/delete")]
        public async Task Delete(DeleteWmsContainerInput input)
        {
            var wmsContainer = await _wmsContainerRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsContainerRep.DeleteAsync(wmsContainer);
        }
        /// <summary>
        /// æ›´æ–°å®¹å™¨ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainer/edit")]
        public async Task Update(UpdateWmsContainerInput input)
        {
            var isExist = await _wmsContainerRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
            var wmsContainer = input.Adapt<WmsContainer>();
            //验证
            await CheckExisit(wmsContainer,true);
            wmsContainer.UpdatedUserId = SysHelper.GetUserId();
            wmsContainer.UpdatedUserName = SysHelper.GetUserName();
            wmsContainer.UpdatedTime = SysHelper.GetNowTime();
            await _wmsContainerRep.UpdateAsync(wmsContainer,ignoreNullValues:true);
        }
        #endregion
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入容器信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("WmsContainer/importExcel")]
        public async Task<int> ImportExcelAsync(IFormFile file)
        {
            int _HeadStartLine = 2;//第1行是说明,第2行是列名
            int _DataStartLine = 3;//第3行开始是数据
            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
            var addList =await CommonImport(importDataTable, _DataStartLine);
            lock (_lock)
            {
                _wmsContainerRep.InsertAsync(addList);
            }
            await Task.CompletedTask;
            return addList.Count;
        }
        /// <summary>
        ///  DataTable转换实体对象列表
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="dataStartLine">模版列名开始行</param>
        /// <returns></returns>
        private async Task<List<WmsContainer>> CommonImport(DataTable dataTable, int dataStartLine)
        {
            var details = new List<WmsContainer>();
            int index = dataStartLine;//模版列名开始行
            foreach (System.Data.DataRow row in dataTable.Rows)
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsContainer()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region å®šä¹‰å˜é‡
                           var _ContainerCode = "";//编号
                           var _ContainerName = "";//名称
                           var _ContainerTypeId = "";//类型ID
                           var _ContainerTypeName = "";//类型名称
                           var _PackagingId = "";//容器关系ID
                           var _SpecLength = "";//长度
                           var _SpecWidth = "";//宽度
                           var _SpecHeight = "";//高度
                           var _LimitLength = "";//限长
                           var _LimitWidth = "";//限宽
                           var _LimitHeight = "";//限高
                           var _MaxWeight = "";//载重上限
                           var _ParentContainerName = "";//父容器名称
                           var _ParentContainerId = "";//父容器Id
                           var _IsVirtually = "";//是否虚拟
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          #region å–值
                           _ContainerCode = row["编号"]?.ToString() ;
                           _ContainerName = row["名称"]?.ToString() ;
                           _ContainerTypeId = row["类型ID"]?.ToString() ;
                           _ContainerTypeName = row["类型名称"]?.ToString() ;
                           _PackagingId = row["容器关系ID"]?.ToString() ;
                           _SpecLength = row["长度"]?.ToString() ;
                           _SpecWidth = row["宽度"]?.ToString() ;
                           _SpecHeight = row["高度"]?.ToString() ;
                           _LimitLength = row["限长"]?.ToString() ;
                           _LimitWidth = row["限宽"]?.ToString() ;
                           _LimitHeight = row["限高"]?.ToString() ;
                           _MaxWeight = row["载重上限"]?.ToString() ;
                           _ParentContainerName = row["父容器名称"]?.ToString() ;
                           _ParentContainerId = row["父容器Id"]?.ToString() ;
                           _IsVirtually = row["是否虚拟"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          #region éªŒè¯
                          if (string.IsNullOrEmpty(_ContainerCode))
                          {
                            throw Oops.Oh($"第{index}行[编号]{_ContainerCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_ContainerCode))
                          {
                                addItem.ContainerCode = (string)_ContainerCode;
                           }
                          if (string.IsNullOrEmpty(_ContainerName))
                          {
                            throw Oops.Oh($"第{index}行[名称]{_ContainerName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_ContainerName))
                          {
                                addItem.ContainerName = (string)_ContainerName;
                           }
                          if (string.IsNullOrEmpty(_ContainerTypeId))
                          {
                            throw Oops.Oh($"第{index}行[类型ID]{_ContainerTypeId}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_ContainerTypeId))
                          {
                              if (!long.TryParse(_ContainerTypeId, out long outContainerTypeId)&&!string.IsNullOrEmpty(_ContainerTypeId))
                              {
                                 throw Oops.Oh($"第{index}行[类型ID]{_ContainerTypeId}值不正确!");
                              }
                              if (outContainerTypeId <= 0&&!string.IsNullOrEmpty(_ContainerTypeId))
                              {
                                 throw Oops.Oh($"第{index}行[类型ID]{_ContainerTypeId}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.ContainerTypeId = outContainerTypeId;
                              }
                          }
                          if (string.IsNullOrEmpty(_ContainerTypeName))
                          {
                            throw Oops.Oh($"第{index}行[类型名称]{_ContainerTypeName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_ContainerTypeName))
                          {
                                addItem.ContainerTypeName = (string)_ContainerTypeName;
                           }
                          if (string.IsNullOrEmpty(_PackagingId))
                          {
                            throw Oops.Oh($"第{index}行[容器关系ID]{_PackagingId}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PackagingId))
                          {
                              if (!long.TryParse(_PackagingId, out long outPackagingId)&&!string.IsNullOrEmpty(_PackagingId))
                              {
                                 throw Oops.Oh($"第{index}行[容器关系ID]{_PackagingId}值不正确!");
                              }
                              if (outPackagingId <= 0&&!string.IsNullOrEmpty(_PackagingId))
                              {
                                 throw Oops.Oh($"第{index}行[容器关系ID]{_PackagingId}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.PackagingId = outPackagingId;
                              }
                          }
                          if(!string.IsNullOrEmpty(_SpecLength))
                          {
                              if (!decimal.TryParse(_SpecLength, out decimal outSpecLength)&&!string.IsNullOrEmpty(_SpecLength))
                              {
                                 throw Oops.Oh($"第{index}行[长度]{_SpecLength}值不正确!");
                              }
                              if (outSpecLength <= 0&&!string.IsNullOrEmpty(_SpecLength))
                              {
                                 throw Oops.Oh($"第{index}行[长度]{_SpecLength}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.SpecLength = outSpecLength;
                              }
                          }
                          if(!string.IsNullOrEmpty(_SpecWidth))
                          {
                              if (!decimal.TryParse(_SpecWidth, out decimal outSpecWidth)&&!string.IsNullOrEmpty(_SpecWidth))
                              {
                                 throw Oops.Oh($"第{index}行[宽度]{_SpecWidth}值不正确!");
                              }
                              if (outSpecWidth <= 0&&!string.IsNullOrEmpty(_SpecWidth))
                              {
                                 throw Oops.Oh($"第{index}行[宽度]{_SpecWidth}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.SpecWidth = outSpecWidth;
                              }
                          }
                          if(!string.IsNullOrEmpty(_SpecHeight))
                          {
                              if (!decimal.TryParse(_SpecHeight, out decimal outSpecHeight)&&!string.IsNullOrEmpty(_SpecHeight))
                              {
                                 throw Oops.Oh($"第{index}行[高度]{_SpecHeight}值不正确!");
                              }
                              if (outSpecHeight <= 0&&!string.IsNullOrEmpty(_SpecHeight))
                              {
                                 throw Oops.Oh($"第{index}行[高度]{_SpecHeight}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.SpecHeight = outSpecHeight;
                              }
                          }
                          if(!string.IsNullOrEmpty(_LimitLength))
                          {
                              if (!decimal.TryParse(_LimitLength, out decimal outLimitLength)&&!string.IsNullOrEmpty(_LimitLength))
                              {
                                 throw Oops.Oh($"第{index}行[限长]{_LimitLength}值不正确!");
                              }
                              if (outLimitLength <= 0&&!string.IsNullOrEmpty(_LimitLength))
                              {
                                 throw Oops.Oh($"第{index}行[限长]{_LimitLength}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LimitLength = outLimitLength;
                              }
                          }
                          if(!string.IsNullOrEmpty(_LimitWidth))
                          {
                              if (!decimal.TryParse(_LimitWidth, out decimal outLimitWidth)&&!string.IsNullOrEmpty(_LimitWidth))
                              {
                                 throw Oops.Oh($"第{index}行[限宽]{_LimitWidth}值不正确!");
                              }
                              if (outLimitWidth <= 0&&!string.IsNullOrEmpty(_LimitWidth))
                              {
                                 throw Oops.Oh($"第{index}行[限宽]{_LimitWidth}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LimitWidth = outLimitWidth;
                              }
                          }
                          if(!string.IsNullOrEmpty(_LimitHeight))
                          {
                              if (!decimal.TryParse(_LimitHeight, out decimal outLimitHeight)&&!string.IsNullOrEmpty(_LimitHeight))
                              {
                                 throw Oops.Oh($"第{index}行[限高]{_LimitHeight}值不正确!");
                              }
                              if (outLimitHeight <= 0&&!string.IsNullOrEmpty(_LimitHeight))
                              {
                                 throw Oops.Oh($"第{index}行[限高]{_LimitHeight}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LimitHeight = outLimitHeight;
                              }
                          }
                          if(!string.IsNullOrEmpty(_MaxWeight))
                          {
                              if (!decimal.TryParse(_MaxWeight, out decimal outMaxWeight)&&!string.IsNullOrEmpty(_MaxWeight))
                              {
                                 throw Oops.Oh($"第{index}行[载重上限]{_MaxWeight}值不正确!");
                              }
                              if (outMaxWeight <= 0&&!string.IsNullOrEmpty(_MaxWeight))
                              {
                                 throw Oops.Oh($"第{index}行[载重上限]{_MaxWeight}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.MaxWeight = outMaxWeight;
                              }
                          }
                          if(!string.IsNullOrEmpty(_ParentContainerName))
                          {
                                addItem.ParentContainerName = (string)_ParentContainerName;
                           }
                          if(!string.IsNullOrEmpty(_ParentContainerId))
                          {
                              if (!long.TryParse(_ParentContainerId, out long outParentContainerId)&&!string.IsNullOrEmpty(_ParentContainerId))
                              {
                                 throw Oops.Oh($"第{index}行[父容器Id]{_ParentContainerId}值不正确!");
                              }
                              if (outParentContainerId <= 0&&!string.IsNullOrEmpty(_ParentContainerId))
                              {
                                 throw Oops.Oh($"第{index}行[父容器Id]{_ParentContainerId}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.ParentContainerId = outParentContainerId;
                              }
                          }
                          if(!string.IsNullOrEmpty(_IsVirtually))
                          {
                              if (!int.TryParse(_IsVirtually, out int outIsVirtually)&&!string.IsNullOrEmpty(_IsVirtually))
                              {
                                 throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不正确!");
                              }
                              if (outIsVirtually <= 0&&!string.IsNullOrEmpty(_IsVirtually))
                              {
                                 throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.IsVirtually = outIsVirtually;
                              }
                          }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
                             }
                             else
                             {
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Id))
                          {
                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
                              }
                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Id = outId;
                              }
                          }
                          #endregion
                details.Add(addItem);
            }
              //验重
              await CheckExisitForImport(details);
            return details;
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å®¹å™¨ä¿¡æ¯çš„Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("WmsContainer/downloadExcelTemplate")]
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsContainer{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(容器信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        #region ç§æœ‰æ–¹æ³•
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-数据库
        /// </summary>
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( WmsContainer input,bool isEdit=false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _wmsContainerRep.AnyAsync(u =>
                                   u.ContainerCode.Equals(input.ContainerCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _wmsContainerRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.ContainerCode.Equals(input.ContainerCode)
                    ,false);
               }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsContainer> inputs)
        {
            //根据联合主键验证表格中中是否已存在相同数据
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.ContainerCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.ContainerCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var wmsContainer = existExcelItem.Adapt<WmsContainer>();
                   var item= existExcelItem.Adapt<WmsContainer>();
                   throw Oops.Oh($"导入的表格中,编号[{item.ContainerCode}]已存在");
                 }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _wmsContainerRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.ContainerCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.ContainerCode
                  ));
                  if (existDBItem != null)
                 {
                   var wmsContainer = existExcelItem.Adapt<WmsContainer>();
                   var item= existExcelItem.Adapt<WmsContainer>();
                   throw Oops.Oh($"系统中,编号[{item.ContainerCode}]已存在");
                 }
        }
        #endregion
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingInput.cs
@@ -6,7 +6,7 @@
{    
    
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨æŸ¥è¯¢å‚æ•°
    /// å®¹å™¨å…³ç³»æŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerPackagingSearch : PageInputBase
    {
@@ -63,7 +63,7 @@
    }
        /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// å®¹å™¨å…³ç³»ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerPackagingSearchNonPage : PageInputNonPageBase
    {
@@ -120,7 +120,7 @@
    }
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨è¾“入参数
    /// å®¹å™¨å…³ç³»è¾“入参数
    /// </summary>
    public class WmsContainerPackagingInput
    {
@@ -163,21 +163,21 @@
    }
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨æ–°å¢žå‚æ•°
    /// å®¹å™¨å…³ç³»æ–°å¢žå‚æ•°
    /// </summary>
    public class AddWmsContainerPackagingInput : WmsContainerPackagingInput
    {
    }
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨åˆ é™¤å‚æ•°
    /// å®¹å™¨å…³ç³»åˆ é™¤å‚æ•°
    /// </summary>
    public class DeleteWmsContainerPackagingInput : BaseId
    {
    }
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨æ›´æ–°å‚æ•°
    /// å®¹å™¨å…³ç³»æ›´æ–°å‚æ•°
    /// </summary>
    public class UpdateWmsContainerPackagingInput : WmsContainerPackagingInput
    {
@@ -190,7 +190,7 @@
    }
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨èŽ·å–å•ä¸ªå‚æ•°
    /// å®¹å™¨å…³ç³»èŽ·å–å•ä¸ªå‚æ•°
    /// </summary>
    public class QueryeWmsContainerPackagingInput : BaseId
    {
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/Dto/WmsContainerPackagingOutput.cs
@@ -4,7 +4,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨è¾“出参数
    /// å®¹å™¨å…³ç³»è¾“出参数
    /// </summary>
    public class WmsContainerPackagingOutput
    {
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerPackaging/WmsContainerPackagingService.cs
@@ -16,7 +16,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨å…³ç³»åŸºç¡€è¡¨æœåŠ¡
    /// å®¹å™¨å…³ç³»æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsContainerPackaging", Order = 100)]
    [Route("api")]
@@ -42,7 +42,7 @@
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å®¹å™¨å…³ç³»åŸºç¡€è¡¨
        /// åˆ†é¡µæŸ¥è¯¢å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -67,10 +67,10 @@
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢å®¹å™¨å…³ç³»åŸºç¡€è¡¨åˆ—表
        /// ä¸åˆ†é¡µæŸ¥è¯¢å®¹å™¨å…³ç³»åˆ—表
        /// </summary>
        /// <param name="input">容器关系基础表查询参数</param>
        /// <returns>(容器关系基础表)实例列表</returns>
        /// <param name="input">容器关系查询参数</param>
        /// <returns>(容器关系)实例列表</returns>
        [HttpGet("WmsContainerPackaging/listNonPage")]
        public async Task<List<WmsContainerPackagingOutput>> ListNonPageAsync([FromQuery] WmsContainerPackagingSearchNonPage input)
        {
@@ -102,7 +102,7 @@
        }
         /// <summary>
        /// èŽ·å–å®¹å™¨å…³ç³»åŸºç¡€è¡¨
        /// èŽ·å–å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -113,7 +113,7 @@
        }
        /// <summary>
        /// èŽ·å–å®¹å™¨å…³ç³»åŸºç¡€è¡¨åˆ—è¡¨
        /// èŽ·å–å®¹å™¨å…³ç³»åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -126,7 +126,7 @@
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ å®¹å™¨å…³ç³»åŸºç¡€è¡¨
        /// å¢žåŠ å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -144,7 +144,7 @@
        }
        /// <summary>
        /// åˆ é™¤å®¹å™¨å…³ç³»åŸºç¡€è¡¨
        /// åˆ é™¤å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -157,7 +157,7 @@
        }
        /// <summary>
        /// æ›´æ–°å®¹å™¨å…³ç³»åŸºç¡€è¡¨
        /// æ›´æ–°å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -182,7 +182,7 @@
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入容器关系基础表功能
        /// Excel模板导入容器关系功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
@@ -378,7 +378,7 @@
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å®¹å™¨å…³ç³»åŸºç¡€è¡¨çš„Excel导入模板
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å®¹å™¨å…³ç³»çš„Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
@@ -386,7 +386,7 @@
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsContainerPackaging{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(容器关系基础表).xlsx", Encoding.GetEncoding("UTF-8"));
            var fileName = HttpUtility.UrlEncode($"导入模板(容器关系).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Dto/WmsContainerTypeInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,197 @@
using Admin.NET.Core;
using Admin.NET.Core.Service;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ç±»åž‹æŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerTypeSearch : PageInputBase
    {
        /// <summary>
        /// ç±»åž‹ç¼–号
        /// </summary>
        public virtual string TypeCode { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public virtual string TypeName { get; set; }
        /// <summary>
        /// æ˜¯å¦å›žæ”¶
        /// </summary>
        public virtual bool? IsAllowReclaim { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        public virtual string Unit { get; set; }
        /// <summary>
        /// ä½¿ç”¨æœŸé™
        /// </summary>
        public virtual string UsagePeriod { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual List<string> CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public virtual List<string> UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
        /// <summary>
    /// å®¹å™¨ç±»åž‹ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsContainerTypeSearchNonPage : PageInputNonPageBase
    {
        /// <summary>
        /// ç±»åž‹ç¼–号
        /// </summary>
        public virtual string TypeCode { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public virtual string TypeName { get; set; }
        /// <summary>
        /// æ˜¯å¦å›žæ”¶
        /// </summary>
        public virtual bool? IsAllowReclaim { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        public virtual string Unit { get; set; }
        /// <summary>
        /// ä½¿ç”¨æœŸé™
        /// </summary>
        public virtual string UsagePeriod { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹è¾“入参数
    /// </summary>
    public class WmsContainerTypeInput
    {
        /// <summary>
        /// ç±»åž‹ç¼–号
        /// </summary>
        [Required(ErrorMessage = "类型编号不能为空")]
        public virtual string TypeCode { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        [Required(ErrorMessage = "类型名称不能为空")]
        public virtual string TypeName { get; set; }
        /// <summary>
        /// æ˜¯å¦å›žæ”¶
        /// </summary>
        [Required(ErrorMessage = "是否回收不能为空")]
        public virtual bool IsAllowReclaim { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [Required(ErrorMessage = "单位不能为空")]
        public virtual string Unit { get; set; }
        /// <summary>
        /// ä½¿ç”¨æœŸé™
        /// </summary>
        public virtual string UsagePeriod { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹æ–°å¢žå‚æ•°
    /// </summary>
    public class AddWmsContainerTypeInput : WmsContainerTypeInput
    {
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹åˆ é™¤å‚æ•°
    /// </summary>
    public class DeleteWmsContainerTypeInput : BaseId
    {
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹æ›´æ–°å‚æ•°
    /// </summary>
    public class UpdateWmsContainerTypeInput : WmsContainerTypeInput
    {
        /// <summary>
        /// Id主键
        /// </summary>
        [Required(ErrorMessage = "Id主键不能为空")]
        public long? Id { get; set; }
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹èŽ·å–å•ä¸ªå‚æ•°
    /// </summary>
    public class QueryeWmsContainerTypeInput : BaseId
    {
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Dto/WmsContainerTypeOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Admin.NET.Core.Util.LowCode.Dto;
using System;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ç±»åž‹è¾“出参数
    /// </summary>
    public class WmsContainerTypeOutput
    {
        /// <summary>
        /// ç±»åž‹ç¼–号
        /// </summary>
        public string TypeCode { get; set; }
        /// <summary>
        /// ç±»åž‹åç§°
        /// </summary>
        public string TypeName { get; set; }
        /// <summary>
        /// æ˜¯å¦å›žæ”¶
        /// </summary>
        public bool IsAllowReclaim { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        public string Unit { get; set; }
        /// <summary>
        /// ä½¿ç”¨æœŸé™
        /// </summary>
        public string UsagePeriod { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long? Id { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public string UpdatedUserName { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/IWmsContainerTypeService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Admin.NET.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application
{
    public interface IWmsContainerTypeService
    {
        Task<WmsContainerTypeOutput> Get([FromQuery] QueryeWmsContainerTypeInput input);
        Task<List<WmsContainerTypeOutput>> List([FromQuery] WmsContainerTypeInput input);
        Task<PageResult<WmsContainerTypeOutput>> Page([FromQuery] WmsContainerTypeSearch input);
        Task<List<WmsContainerTypeOutput>> ListNonPageAsync([FromQuery] WmsContainerTypeSearchNonPage input);
        Task Add(AddWmsContainerTypeInput input);
        Task Update(UpdateWmsContainerTypeInput input);
        Task Delete(DeleteWmsContainerTypeInput input);
        Task<int> ImportExcelAsync(IFormFile file);
        IActionResult DownloadExcelTemplate(string version);
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/Map/WmsContainerTypeMapper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Mapster;
using Admin.NET.Core;
namespace Admin.NET.Application
{
    public class WmsContainerTypeMapper : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<AddWmsContainerTypeInput, WmsContainerType>()
            ;
            config.ForType<UpdateWmsContainerTypeInput, WmsContainerType>()
            ;
            config.ForType<WmsContainerType, WmsContainerTypeOutput>()
            ;
        }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsContainerType/WmsContainerTypeService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,451 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using System.ComponentModel;
using System.Data;
namespace Admin.NET.Application
{
    /// <summary>
    /// å®¹å™¨ç±»åž‹æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsContainerType", Order = 100)]
    [Route("api")]
    public class WmsContainerTypeService : IWmsContainerTypeService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsContainerType,MasterDbContextLocator> _wmsContainerTypeRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
        public WmsContainerTypeService(
            IRepository<WmsContainerType,MasterDbContextLocator> wmsContainerTypeRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
            _wmsContainerTypeRep = wmsContainerTypeRep;
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataRep = sysDictDataRep;
         _sysExcelTemplateService = sysExcelTemplateService;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å®¹å™¨ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainerType/page")]
        public async Task<PageResult<WmsContainerTypeOutput>> Page([FromQuery] WmsContainerTypeSearch input)
        {
            var wmsContainerTypes = await _wmsContainerTypeRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.TypeCode), u => u.TypeCode == input.TypeCode)
                                     .Where(!string.IsNullOrEmpty(input.TypeName), u => u.TypeName == input.TypeName)
                                     .Where(input.IsAllowReclaim != null, u => u.IsAllowReclaim == input.IsAllowReclaim)
                                     .Where(!string.IsNullOrEmpty(input.Unit), u => u.Unit == input.Unit)
                                     .Where(!string.IsNullOrEmpty(input.UsagePeriod), u => u.UsagePeriod == input.UsagePeriod)
                                     .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
                                     .OrderBy(PageInputOrder.OrderBuilder<WmsContainerTypeSearch>(input))
                                     .ProjectToType<WmsContainerTypeOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsContainerTypes;
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢å®¹å™¨ç±»åž‹åˆ—表
        /// </summary>
        /// <param name="input">容器类型查询参数</param>
        /// <returns>(容器类型)实例列表</returns>
        [HttpGet("WmsContainerType/listNonPage")]
        public async Task<List<WmsContainerTypeOutput>> ListNonPageAsync([FromQuery] WmsContainerTypeSearchNonPage input)
        {
            var pTypeCode = input.TypeCode?.Trim() ?? "";
            var pTypeName = input.TypeName?.Trim() ?? "";
            var pIsAllowReclaim = input.IsAllowReclaim;
            var pUnit = input.Unit?.Trim() ?? "";
            var pUsagePeriod = input.UsagePeriod?.Trim() ?? "";
            var pIsDisabled = input.IsDisabled;
            var pCreatedTime = input.CreatedTime;
            var pUpdatedTime = input.UpdatedTime;
            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var wmsContainerTypes = await _wmsContainerTypeRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pTypeCode), u => u.TypeCode == pTypeCode)
                .Where(!string.IsNullOrEmpty(pTypeName), u => u.TypeName == pTypeName)
                .Where(pIsAllowReclaim != null, u => u.IsAllowReclaim == pIsAllowReclaim)
                .Where(!string.IsNullOrEmpty(pUnit), u => u.Unit == pUnit)
                .Where(!string.IsNullOrEmpty(pUsagePeriod), u => u.UsagePeriod == pUsagePeriod)
                .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsContainerTypeOutput>()
            .ToListAsync();
            return wmsContainerTypes;
        }
         /// <summary>
        /// èŽ·å–å®¹å™¨ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainerType/detail")]
        public async Task<WmsContainerTypeOutput> Get([FromQuery] QueryeWmsContainerTypeInput input)
        {
            return (await _wmsContainerTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsContainerTypeOutput>();
        }
        /// <summary>
        /// èŽ·å–å®¹å™¨ç±»åž‹åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsContainerType/list")]
        public async Task<List<WmsContainerTypeOutput>> List([FromQuery] WmsContainerTypeInput input)
        {
            return await _wmsContainerTypeRep.DetachedEntities.ProjectToType<WmsContainerTypeOutput>().ToListAsync();
        }
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ å®¹å™¨ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainerType/add")]
        public async Task Add(AddWmsContainerTypeInput input)
        {
            var wmsContainerType = input.Adapt<WmsContainerType>();
                        //验证
            await CheckExisit(wmsContainerType);
            wmsContainerType.CreatedUserId = wmsContainerType.UpdatedUserId = SysHelper.GetUserId();
            wmsContainerType.CreatedUserName = wmsContainerType.UpdatedUserName = SysHelper.GetUserName();
            wmsContainerType.CreatedTime = wmsContainerType.UpdatedTime = SysHelper.GetNowTime();
            await _wmsContainerTypeRep.InsertAsync(wmsContainerType);
        }
        /// <summary>
        /// åˆ é™¤å®¹å™¨ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainerType/delete")]
        public async Task Delete(DeleteWmsContainerTypeInput input)
        {
            var wmsContainerType = await _wmsContainerTypeRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsContainerTypeRep.DeleteAsync(wmsContainerType);
        }
        /// <summary>
        /// æ›´æ–°å®¹å™¨ç±»åž‹
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsContainerType/edit")]
        public async Task Update(UpdateWmsContainerTypeInput input)
        {
            var isExist = await _wmsContainerTypeRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
            var wmsContainerType = input.Adapt<WmsContainerType>();
            //验证
            await CheckExisit(wmsContainerType,true);
            wmsContainerType.UpdatedUserId = SysHelper.GetUserId();
            wmsContainerType.UpdatedUserName = SysHelper.GetUserName();
            wmsContainerType.UpdatedTime = SysHelper.GetNowTime();
            await _wmsContainerTypeRep.UpdateAsync(wmsContainerType,ignoreNullValues:true);
        }
        #endregion
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入容器类型功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("WmsContainerType/importExcel")]
        public async Task<int> ImportExcelAsync(IFormFile file)
        {
            int _HeadStartLine = 2;//第1行是说明,第2行是列名
            int _DataStartLine = 3;//第3行开始是数据
            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
            var addList =await CommonImport(importDataTable, _DataStartLine);
            lock (_lock)
            {
                _wmsContainerTypeRep.InsertAsync(addList);
            }
            await Task.CompletedTask;
            return addList.Count;
        }
        /// <summary>
        ///  DataTable转换实体对象列表
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="dataStartLine">模版列名开始行</param>
        /// <returns></returns>
        private async Task<List<WmsContainerType>> CommonImport(DataTable dataTable, int dataStartLine)
        {
            var details = new List<WmsContainerType>();
            int index = dataStartLine;//模版列名开始行
            foreach (System.Data.DataRow row in dataTable.Rows)
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsContainerType()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region å®šä¹‰å˜é‡
                           var _TypeCode = "";//类型编号
                           var _TypeName = "";//类型名称
                           var _IsAllowReclaim = "";//是否回收
                           var _Unit = "";//单位
                           var _UsagePeriod = "";//使用期限
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          #region å–值
                           _TypeCode = row["类型编号"]?.ToString() ;
                           _TypeName = row["类型名称"]?.ToString() ;
                           _IsAllowReclaim = row["是否回收"]?.ToString() ;
                           _Unit = row["单位"]?.ToString() ;
                           _UsagePeriod = row["使用期限"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          #region éªŒè¯
                          if (string.IsNullOrEmpty(_TypeCode))
                          {
                            throw Oops.Oh($"第{index}行[类型编号]{_TypeCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_TypeCode))
                          {
                                addItem.TypeCode = (string)_TypeCode;
                           }
                          if (string.IsNullOrEmpty(_TypeName))
                          {
                            throw Oops.Oh($"第{index}行[类型名称]{_TypeName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_TypeName))
                          {
                                addItem.TypeName = (string)_TypeName;
                           }
                          if (string.IsNullOrEmpty(_IsAllowReclaim))
                          {
                            throw Oops.Oh($"第{index}行[是否回收]{_IsAllowReclaim}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsAllowReclaim))
                          {
                            if(!_IsAllowReclaim.Equals("是") && !_IsAllowReclaim.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否回收]{_IsAllowReclaim}值不正确!");
                             }
                             else
                             {
                               bool outIsAllowReclaim = _IsAllowReclaim.Equals("是") ? true : false;
                               addItem.IsAllowReclaim = outIsAllowReclaim;
                             }
                             }
                          if (string.IsNullOrEmpty(_Unit))
                          {
                            throw Oops.Oh($"第{index}行[单位]{_Unit}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_Unit))
                          {
                                addItem.Unit = (string)_Unit;
                           }
                          if(!string.IsNullOrEmpty(_UsagePeriod))
                          {
                                addItem.UsagePeriod = (string)_UsagePeriod;
                           }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
                             }
                             else
                             {
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Id))
                          {
                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
                              }
                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Id = outId;
                              }
                          }
                          #endregion
                details.Add(addItem);
            }
              //验重
              await CheckExisitForImport(details);
            return details;
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å®¹å™¨ç±»åž‹çš„Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("WmsContainerType/downloadExcelTemplate")]
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsContainerType{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(容器类型).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        #region ç§æœ‰æ–¹æ³•
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-数据库
        /// </summary>
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( WmsContainerType input,bool isEdit=false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _wmsContainerTypeRep.AnyAsync(u =>
                                   u.TypeCode.Equals(input.TypeCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _wmsContainerTypeRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.TypeCode.Equals(input.TypeCode)
                    ,false);
               }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsContainerType> inputs)
        {
            //根据联合主键验证表格中中是否已存在相同数据
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.TypeCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.TypeCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var wmsContainerType = existExcelItem.Adapt<WmsContainerType>();
                   var item= existExcelItem.Adapt<WmsContainerType>();
                   throw Oops.Oh($"导入的表格中,类型编号[{item.TypeCode}]已存在");
                 }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _wmsContainerTypeRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.TypeCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.TypeCode
                  ));
                  if (existDBItem != null)
                 {
                   var wmsContainerType = existExcelItem.Adapt<WmsContainerType>();
                   var item= existExcelItem.Adapt<WmsContainerType>();
                   throw Oops.Oh($"系统中,类型编号[{item.TypeCode}]已存在");
                 }
        }
        #endregion
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/Dto/WmsFactoryInput.cs
@@ -6,7 +6,7 @@
{    
    
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨æŸ¥è¯¢å‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯æŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsFactorySearch : PageInputBase
    {
@@ -53,7 +53,7 @@
    }
        /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯ä¸åˆ†é¡µæŸ¥è¯¢å‚æ•°
    /// </summary>
    public class WmsFactorySearchNonPage : PageInputNonPageBase
    {
@@ -100,7 +100,7 @@
    }
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨è¾“å…¥å‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯è¾“å…¥å‚æ•°
    /// </summary>
    public class WmsFactoryInput
    {
@@ -129,21 +129,21 @@
    }
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨æ–°å¢žå‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯æ–°å¢žå‚æ•°
    /// </summary>
    public class AddWmsFactoryInput : WmsFactoryInput
    {
    }
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨åˆ é™¤å‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯åˆ é™¤å‚æ•°
    /// </summary>
    public class DeleteWmsFactoryInput : BaseId
    {
    }
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨æ›´æ–°å‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯æ›´æ–°å‚æ•°
    /// </summary>
    public class UpdateWmsFactoryInput : WmsFactoryInput
    {
@@ -156,7 +156,7 @@
    }
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨èŽ·å–å•ä¸ªå‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯èŽ·å–å•ä¸ªå‚æ•°
    /// </summary>
    public class QueryeWmsFactoryInput : BaseId
    {
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/Dto/WmsFactoryOutput.cs
@@ -4,7 +4,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨è¾“å‡ºå‚æ•°
    /// å·¥åŽ‚ä¿¡æ¯è¾“å‡ºå‚æ•°
    /// </summary>
    public class WmsFactoryOutput
    {
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsFactory/WmsFactoryService.cs
@@ -16,7 +16,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// å·¥åŽ‚ä¿¡æ¯è¡¨æœåŠ¡
    /// å·¥åŽ‚ä¿¡æ¯æœåŠ¡
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsFactory", Order = 100)]
    [Route("api")]
@@ -42,7 +42,7 @@
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯è¡¨
        /// åˆ†é¡µæŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -65,10 +65,10 @@
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯è¡¨åˆ—è¡¨
        /// ä¸åˆ†é¡µæŸ¥è¯¢å·¥åŽ‚ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input">工厂信息表查询参数</param>
        /// <returns>(工厂信息表)实例列表</returns>
        /// <param name="input">工厂信息查询参数</param>
        /// <returns>(工厂信息)实例列表</returns>
        [HttpGet("WmsFactory/listNonPage")]
        public async Task<List<WmsFactoryOutput>> ListNonPageAsync([FromQuery] WmsFactorySearchNonPage input)
        {
@@ -96,7 +96,7 @@
        }
         /// <summary>
        /// èŽ·å–å·¥åŽ‚ä¿¡æ¯è¡¨
        /// èŽ·å–å·¥åŽ‚ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -107,7 +107,7 @@
        }
        /// <summary>
        /// èŽ·å–å·¥åŽ‚ä¿¡æ¯è¡¨åˆ—è¡¨
        /// èŽ·å–å·¥åŽ‚ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -120,7 +120,7 @@
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ å·¥åŽ‚ä¿¡æ¯è¡¨
        /// å¢žåŠ å·¥åŽ‚ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -138,7 +138,7 @@
        }
        /// <summary>
        /// åˆ é™¤å·¥åŽ‚ä¿¡æ¯è¡¨
        /// åˆ é™¤å·¥åŽ‚ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -151,7 +151,7 @@
        }
        /// <summary>
        /// æ›´æ–°å·¥åŽ‚ä¿¡æ¯è¡¨
        /// æ›´æ–°å·¥åŽ‚ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -176,7 +176,7 @@
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入工厂信息表功能
        /// Excel模板导入工厂信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
@@ -309,7 +309,7 @@
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å·¥åŽ‚ä¿¡æ¯è¡¨çš„Excel导入模板
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å·¥åŽ‚ä¿¡æ¯çš„Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
@@ -317,7 +317,7 @@
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsFactory{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(工厂信息表).xlsx", Encoding.GetEncoding("UTF-8"));
            var fileName = HttpUtility.UrlEncode($"导入模板(工厂信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,646 @@
using Admin.NET.Core;
using Admin.NET.Core.Service;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“位信息查询参数
    /// </summary>
    public class WmsPlaceSearch : PageInputBase
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        public virtual string PlaceCode { get; set; }
        /// <summary>
        /// åº“位名称
        /// </summary>
        public virtual string PlaceName { get; set; }
        /// <summary>
        /// åº“位别名
        /// </summary>
        public virtual string PlaceAlias { get; set; }
        /// <summary>
        /// åº“位类型
        /// </summary>
        public virtual int? PlaceType { get; set; }
        /// <summary>
        /// åº“位类型名称
        /// </summary>
        public virtual string PlaceTypeName { get; set; }
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        public virtual string StockUnit { get; set; }
        /// <summary>
        /// åº“位属性
        /// </summary>
        public virtual int? PlaceStatus { get; set; }
        /// <summary>
        /// æ˜¯å¦å †åž›æœºåº“位
        /// </summary>
        public virtual bool? IsSrmPlace { get; set; }
        /// <summary>
        /// å †åž›æœºåº“位号
        /// </summary>
        public virtual string SrmPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦RGV库位
        /// </summary>
        public virtual bool? IsRgvPlace { get; set; }
        /// <summary>
        /// RGV库位号
        /// </summary>
        public virtual string RgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦AGV库位
        /// </summary>
        public virtual bool? IsAgvPlace { get; set; }
        /// <summary>
        /// AGV库位号
        /// </summary>
        public virtual string AgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦è¾“送线库位
        /// </summary>
        public virtual bool? IsTransPlace { get; set; }
        /// <summary>
        /// è¾“送线库位号
        /// </summary>
        public virtual string TransPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ¿€æ´»ä¸Žä»»åŠ¡è°ƒåº¦
        /// </summary>
        public virtual bool? IsActivateWCS { get; set; }
        /// <summary>
        /// åº“存环境
        /// </summary>
        public virtual string Environment { get; set; }
        /// <summary>
        /// åº“区编号
        /// </summary>
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        public virtual long? AreaId { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public virtual string AreaName { get; set; }
        /// <summary>
        /// æ£€éªŒç 
        /// </summary>
        public virtual string VerificationCode { get; set; }
        /// <summary>
        /// æŽ’
        /// </summary>
        public virtual int? RowNo { get; set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        public virtual int? ColumnNo { get; set; }
        /// <summary>
        /// å±‚
        /// </summary>
        public virtual int? LayerNo { get; set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public virtual int? LaneNo { get; set; }
        /// <summary>
        /// åº“位X坐标
        /// </summary>
        public virtual string Xzb { get; set; }
        /// <summary>
        /// åº“位Y坐标
        /// </summary>
        public virtual string Yzb { get; set; }
        /// <summary>
        /// åº“位Z坐标
        /// </summary>
        public virtual string Zzb { get; set; }
        /// <summary>
        /// åº“位长度
        /// </summary>
        public virtual decimal? Length { get; set; }
        /// <summary>
        /// åº“位宽度
        /// </summary>
        public virtual decimal? Width { get; set; }
        /// <summary>
        /// åº“位高度
        /// </summary>
        public virtual decimal? Height { get; set; }
        /// <summary>
        /// æœ€å¤§æ‰¿é‡
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// å…¥åº“顺序
        /// </summary>
        public virtual int? InSequence { get; set; }
        /// <summary>
        /// å‡ºåº“顺序
        /// </summary>
        public virtual int? OutSequence { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual List<string> CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public virtual List<string> UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
        /// <summary>
    /// åº“位信息不分页查询参数
    /// </summary>
    public class WmsPlaceSearchNonPage : PageInputNonPageBase
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        public virtual string PlaceCode { get; set; }
        /// <summary>
        /// åº“位名称
        /// </summary>
        public virtual string PlaceName { get; set; }
        /// <summary>
        /// åº“位别名
        /// </summary>
        public virtual string PlaceAlias { get; set; }
        /// <summary>
        /// åº“位类型
        /// </summary>
        public virtual int? PlaceType { get; set; }
        /// <summary>
        /// åº“位类型名称
        /// </summary>
        public virtual string PlaceTypeName { get; set; }
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        public virtual string StockUnit { get; set; }
        /// <summary>
        /// åº“位属性
        /// </summary>
        public virtual int? PlaceStatus { get; set; }
        /// <summary>
        /// æ˜¯å¦å †åž›æœºåº“位
        /// </summary>
        public virtual bool? IsSrmPlace { get; set; }
        /// <summary>
        /// å †åž›æœºåº“位号
        /// </summary>
        public virtual string SrmPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦RGV库位
        /// </summary>
        public virtual bool? IsRgvPlace { get; set; }
        /// <summary>
        /// RGV库位号
        /// </summary>
        public virtual string RgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦AGV库位
        /// </summary>
        public virtual bool? IsAgvPlace { get; set; }
        /// <summary>
        /// AGV库位号
        /// </summary>
        public virtual string AgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦è¾“送线库位
        /// </summary>
        public virtual bool? IsTransPlace { get; set; }
        /// <summary>
        /// è¾“送线库位号
        /// </summary>
        public virtual string TransPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ¿€æ´»ä¸Žä»»åŠ¡è°ƒåº¦
        /// </summary>
        public virtual bool? IsActivateWCS { get; set; }
        /// <summary>
        /// åº“存环境
        /// </summary>
        public virtual string Environment { get; set; }
        /// <summary>
        /// åº“区编号
        /// </summary>
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        public virtual long? AreaId { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public virtual string AreaName { get; set; }
        /// <summary>
        /// æ£€éªŒç 
        /// </summary>
        public virtual string VerificationCode { get; set; }
        /// <summary>
        /// æŽ’
        /// </summary>
        public virtual int? RowNo { get; set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        public virtual int? ColumnNo { get; set; }
        /// <summary>
        /// å±‚
        /// </summary>
        public virtual int? LayerNo { get; set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public virtual int? LaneNo { get; set; }
        /// <summary>
        /// åº“位X坐标
        /// </summary>
        public virtual string Xzb { get; set; }
        /// <summary>
        /// åº“位Y坐标
        /// </summary>
        public virtual string Yzb { get; set; }
        /// <summary>
        /// åº“位Z坐标
        /// </summary>
        public virtual string Zzb { get; set; }
        /// <summary>
        /// åº“位长度
        /// </summary>
        public virtual decimal? Length { get; set; }
        /// <summary>
        /// åº“位宽度
        /// </summary>
        public virtual decimal? Width { get; set; }
        /// <summary>
        /// åº“位高度
        /// </summary>
        public virtual decimal? Height { get; set; }
        /// <summary>
        /// æœ€å¤§æ‰¿é‡
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// å…¥åº“顺序
        /// </summary>
        public virtual int? InSequence { get; set; }
        /// <summary>
        /// å‡ºåº“顺序
        /// </summary>
        public virtual int? OutSequence { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
    /// <summary>
    /// åº“位信息输入参数
    /// </summary>
    public class WmsPlaceInput
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        [Required(ErrorMessage = "库位编码不能为空")]
        public virtual string PlaceCode { get; set; }
        /// <summary>
        /// åº“位名称
        /// </summary>
        [Required(ErrorMessage = "库位名称不能为空")]
        public virtual string PlaceName { get; set; }
        /// <summary>
        /// åº“位别名
        /// </summary>
        public virtual string PlaceAlias { get; set; }
        /// <summary>
        /// åº“位类型
        /// </summary>
        [Required(ErrorMessage = "库位类型不能为空")]
        public virtual int PlaceType { get; set; }
        /// <summary>
        /// åº“位类型名称
        /// </summary>
        public virtual string PlaceTypeName { get; set; }
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        public virtual string StockUnit { get; set; }
        /// <summary>
        /// åº“位属性
        /// </summary>
        public virtual int? PlaceStatus { get; set; }
        /// <summary>
        /// æ˜¯å¦å †åž›æœºåº“位
        /// </summary>
        public virtual bool? IsSrmPlace { get; set; }
        /// <summary>
        /// å †åž›æœºåº“位号
        /// </summary>
        public virtual string SrmPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦RGV库位
        /// </summary>
        public virtual bool? IsRgvPlace { get; set; }
        /// <summary>
        /// RGV库位号
        /// </summary>
        public virtual string RgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦AGV库位
        /// </summary>
        public virtual bool? IsAgvPlace { get; set; }
        /// <summary>
        /// AGV库位号
        /// </summary>
        public virtual string AgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦è¾“送线库位
        /// </summary>
        public virtual bool? IsTransPlace { get; set; }
        /// <summary>
        /// è¾“送线库位号
        /// </summary>
        public virtual string TransPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ¿€æ´»ä¸Žä»»åŠ¡è°ƒåº¦
        /// </summary>
        public virtual bool? IsActivateWCS { get; set; }
        /// <summary>
        /// åº“存环境
        /// </summary>
        public virtual string Environment { get; set; }
        /// <summary>
        /// åº“区编号
        /// </summary>
        public virtual string AreaCode { get; set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        public virtual long? AreaId { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public virtual string AreaName { get; set; }
        /// <summary>
        /// æ£€éªŒç 
        /// </summary>
        public virtual string VerificationCode { get; set; }
        /// <summary>
        /// æŽ’
        /// </summary>
        public virtual int? RowNo { get; set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        public virtual int? ColumnNo { get; set; }
        /// <summary>
        /// å±‚
        /// </summary>
        public virtual int? LayerNo { get; set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public virtual int? LaneNo { get; set; }
        /// <summary>
        /// åº“位X坐标
        /// </summary>
        public virtual string Xzb { get; set; }
        /// <summary>
        /// åº“位Y坐标
        /// </summary>
        public virtual string Yzb { get; set; }
        /// <summary>
        /// åº“位Z坐标
        /// </summary>
        public virtual string Zzb { get; set; }
        /// <summary>
        /// åº“位长度
        /// </summary>
        public virtual decimal? Length { get; set; }
        /// <summary>
        /// åº“位宽度
        /// </summary>
        public virtual decimal? Width { get; set; }
        /// <summary>
        /// åº“位高度
        /// </summary>
        public virtual decimal? Height { get; set; }
        /// <summary>
        /// æœ€å¤§æ‰¿é‡
        /// </summary>
        public virtual decimal? MaxWeight { get; set; }
        /// <summary>
        /// å…¥åº“顺序
        /// </summary>
        public virtual int? InSequence { get; set; }
        /// <summary>
        /// å‡ºåº“顺序
        /// </summary>
        public virtual int? OutSequence { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public virtual bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
    }
    /// <summary>
    /// åº“位信息新增参数
    /// </summary>
    public class AddWmsPlaceInput : WmsPlaceInput
    {
    }
    /// <summary>
    /// åº“位信息删除参数
    /// </summary>
    public class DeleteWmsPlaceInput : BaseId
    {
    }
    /// <summary>
    /// åº“位信息更新参数
    /// </summary>
    public class UpdateWmsPlaceInput : WmsPlaceInput
    {
        /// <summary>
        /// Id主键
        /// </summary>
        [Required(ErrorMessage = "Id主键不能为空")]
        public long? Id { get; set; }
    }
    /// <summary>
    /// åº“位信息获取单个参数
    /// </summary>
    public class QueryeWmsPlaceInput : BaseId
    {
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Dto/WmsPlaceOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,217 @@
using Admin.NET.Core.Util.LowCode.Dto;
using System;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“位信息输出参数
    /// </summary>
    public class WmsPlaceOutput
    {
        /// <summary>
        /// åº“位编码
        /// </summary>
        public string PlaceCode { get; set; }
        /// <summary>
        /// åº“位名称
        /// </summary>
        public string PlaceName { get; set; }
        /// <summary>
        /// åº“位别名
        /// </summary>
        public string PlaceAlias { get; set; }
        /// <summary>
        /// åº“位类型
        /// </summary>
        public int PlaceType { get; set; }
        /// <summary>
        /// åº“位类型名称
        /// </summary>
        public string PlaceTypeName { get; set; }
        /// <summary>
        /// å­˜æ”¾å•位
        /// </summary>
        public string StockUnit { get; set; }
        /// <summary>
        /// åº“位属性
        /// </summary>
        public int? PlaceStatus { get; set; }
        /// <summary>
        /// æ˜¯å¦å †åž›æœºåº“位
        /// </summary>
        public bool? IsSrmPlace { get; set; }
        /// <summary>
        /// å †åž›æœºåº“位号
        /// </summary>
        public string SrmPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦RGV库位
        /// </summary>
        public bool? IsRgvPlace { get; set; }
        /// <summary>
        /// RGV库位号
        /// </summary>
        public string RgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦AGV库位
        /// </summary>
        public bool? IsAgvPlace { get; set; }
        /// <summary>
        /// AGV库位号
        /// </summary>
        public string AgvPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦è¾“送线库位
        /// </summary>
        public bool? IsTransPlace { get; set; }
        /// <summary>
        /// è¾“送线库位号
        /// </summary>
        public string TransPlaceNo { get; set; }
        /// <summary>
        /// æ˜¯å¦æ¿€æ´»ä¸Žä»»åŠ¡è°ƒåº¦
        /// </summary>
        public bool? IsActivateWCS { get; set; }
        /// <summary>
        /// åº“存环境
        /// </summary>
        public string Environment { get; set; }
        /// <summary>
        /// åº“区编号
        /// </summary>
        public string AreaCode { get; set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        public long? AreaId { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// æ£€éªŒç 
        /// </summary>
        public string VerificationCode { get; set; }
        /// <summary>
        /// æŽ’
        /// </summary>
        public int? RowNo { get; set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        public int? ColumnNo { get; set; }
        /// <summary>
        /// å±‚
        /// </summary>
        public int? LayerNo { get; set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public int? LaneNo { get; set; }
        /// <summary>
        /// åº“位X坐标
        /// </summary>
        public string Xzb { get; set; }
        /// <summary>
        /// åº“位Y坐标
        /// </summary>
        public string Yzb { get; set; }
        /// <summary>
        /// åº“位Z坐标
        /// </summary>
        public string Zzb { get; set; }
        /// <summary>
        /// åº“位长度
        /// </summary>
        public decimal? Length { get; set; }
        /// <summary>
        /// åº“位宽度
        /// </summary>
        public decimal? Width { get; set; }
        /// <summary>
        /// åº“位高度
        /// </summary>
        public decimal? Height { get; set; }
        /// <summary>
        /// æœ€å¤§æ‰¿é‡
        /// </summary>
        public decimal? MaxWeight { get; set; }
        /// <summary>
        /// å…¥åº“顺序
        /// </summary>
        public int? InSequence { get; set; }
        /// <summary>
        /// å‡ºåº“顺序
        /// </summary>
        public int? OutSequence { get; set; }
        /// <summary>
        /// æ˜¯å¦è™šæ‹Ÿ
        /// </summary>
        public bool? IsVirtually { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long? Id { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public string UpdatedUserName { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/IWmsPlaceService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Admin.NET.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application
{
    public interface IWmsPlaceService
    {
        Task<WmsPlaceOutput> Get([FromQuery] QueryeWmsPlaceInput input);
        Task<List<WmsPlaceOutput>> List([FromQuery] WmsPlaceInput input);
        Task<PageResult<WmsPlaceOutput>> Page([FromQuery] WmsPlaceSearch input);
        Task<List<WmsPlaceOutput>> ListNonPageAsync([FromQuery] WmsPlaceSearchNonPage input);
        Task Add(AddWmsPlaceInput input);
        Task Update(UpdateWmsPlaceInput input);
        Task Delete(DeleteWmsPlaceInput input);
        Task<int> ImportExcelAsync(IFormFile file);
        IActionResult DownloadExcelTemplate(string version);
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/Map/WmsPlaceMapper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Mapster;
using Admin.NET.Core;
namespace Admin.NET.Application
{
    public class WmsPlaceMapper : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<AddWmsPlaceInput, WmsPlace>()
            ;
            config.ForType<UpdateWmsPlaceInput, WmsPlace>()
            ;
            config.ForType<WmsPlace, WmsPlaceOutput>()
            ;
        }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsPlace/WmsPlaceService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,916 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using System.ComponentModel;
using System.Data;
namespace Admin.NET.Application
{
    /// <summary>
    /// åº“位信息服务
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsPlace", Order = 100)]
    [Route("api")]
    public class WmsPlaceService : IWmsPlaceService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsPlace,MasterDbContextLocator> _wmsPlaceRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
        public WmsPlaceService(
            IRepository<WmsPlace,MasterDbContextLocator> wmsPlaceRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
            _wmsPlaceRep = wmsPlaceRep;
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataRep = sysDictDataRep;
         _sysExcelTemplateService = sysExcelTemplateService;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢åº“位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsPlace/page")]
        public async Task<PageResult<WmsPlaceOutput>> Page([FromQuery] WmsPlaceSearch input)
        {
            var wmsPlaces = await _wmsPlaceRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.PlaceCode), u => u.PlaceCode == input.PlaceCode)
                                     .Where(!string.IsNullOrEmpty(input.PlaceName), u => u.PlaceName == input.PlaceName)
                                     .Where(!string.IsNullOrEmpty(input.PlaceAlias), u => u.PlaceAlias == input.PlaceAlias)
                                     .Where(input.PlaceType != null, u => u.PlaceType == input.PlaceType)
                                     .Where(!string.IsNullOrEmpty(input.PlaceTypeName), u => u.PlaceTypeName == input.PlaceTypeName)
                                     .Where(!string.IsNullOrEmpty(input.StockUnit), u => u.StockUnit == input.StockUnit)
                                     .Where(input.PlaceStatus != null, u => u.PlaceStatus == input.PlaceStatus)
                                     .Where(input.IsSrmPlace != null, u => u.IsSrmPlace == input.IsSrmPlace)
                                     .Where(!string.IsNullOrEmpty(input.SrmPlaceNo), u => u.SrmPlaceNo == input.SrmPlaceNo)
                                     .Where(input.IsRgvPlace != null, u => u.IsRgvPlace == input.IsRgvPlace)
                                     .Where(!string.IsNullOrEmpty(input.RgvPlaceNo), u => u.RgvPlaceNo == input.RgvPlaceNo)
                                     .Where(input.IsAgvPlace != null, u => u.IsAgvPlace == input.IsAgvPlace)
                                     .Where(!string.IsNullOrEmpty(input.AgvPlaceNo), u => u.AgvPlaceNo == input.AgvPlaceNo)
                                     .Where(input.IsTransPlace != null, u => u.IsTransPlace == input.IsTransPlace)
                                     .Where(!string.IsNullOrEmpty(input.TransPlaceNo), u => u.TransPlaceNo == input.TransPlaceNo)
                                     .Where(input.IsActivateWCS != null, u => u.IsActivateWCS == input.IsActivateWCS)
                                     .Where(!string.IsNullOrEmpty(input.Environment), u => u.Environment == input.Environment)
                                     .Where(!string.IsNullOrEmpty(input.AreaCode), u => u.AreaCode == input.AreaCode)
                                     .Where(input.AreaId != null, u => u.AreaId == input.AreaId)
                                     .Where(!string.IsNullOrEmpty(input.AreaName), u => u.AreaName == input.AreaName)
                                     .Where(!string.IsNullOrEmpty(input.VerificationCode), u => u.VerificationCode == input.VerificationCode)
                                     .Where(input.RowNo != null, u => u.RowNo == input.RowNo)
                                     .Where(input.ColumnNo != null, u => u.ColumnNo == input.ColumnNo)
                                     .Where(input.LayerNo != null, u => u.LayerNo == input.LayerNo)
                                     .Where(input.LaneNo != null, u => u.LaneNo == input.LaneNo)
                                     .Where(!string.IsNullOrEmpty(input.Xzb), u => u.Xzb == input.Xzb)
                                     .Where(!string.IsNullOrEmpty(input.Yzb), u => u.Yzb == input.Yzb)
                                     .Where(!string.IsNullOrEmpty(input.Zzb), u => u.Zzb == input.Zzb)
                                     .Where(input.Length != null, u => u.Length == input.Length)
                                     .Where(input.Width != null, u => u.Width == input.Width)
                                     .Where(input.Height != null, u => u.Height == input.Height)
                                     .Where(input.MaxWeight != null, u => u.MaxWeight == input.MaxWeight)
                                     .Where(input.InSequence != null, u => u.InSequence == input.InSequence)
                                     .Where(input.OutSequence != null, u => u.OutSequence == input.OutSequence)
                                     .Where(input.IsVirtually != null, u => u.IsVirtually == input.IsVirtually)
                                     .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
                                     .OrderBy(PageInputOrder.OrderBuilder<WmsPlaceSearch>(input))
                                     .ProjectToType<WmsPlaceOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsPlaces;
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢åº“位信息列表
        /// </summary>
        /// <param name="input">库位信息查询参数</param>
        /// <returns>(库位信息)实例列表</returns>
        [HttpGet("WmsPlace/listNonPage")]
        public async Task<List<WmsPlaceOutput>> ListNonPageAsync([FromQuery] WmsPlaceSearchNonPage input)
        {
            var pPlaceCode = input.PlaceCode?.Trim() ?? "";
            var pPlaceName = input.PlaceName?.Trim() ?? "";
            var pPlaceAlias = input.PlaceAlias?.Trim() ?? "";
            var pPlaceType = input.PlaceType;
            var pPlaceTypeName = input.PlaceTypeName?.Trim() ?? "";
            var pStockUnit = input.StockUnit?.Trim() ?? "";
            var pPlaceStatus = input.PlaceStatus;
            var pIsSrmPlace = input.IsSrmPlace;
            var pSrmPlaceNo = input.SrmPlaceNo?.Trim() ?? "";
            var pIsRgvPlace = input.IsRgvPlace;
            var pRgvPlaceNo = input.RgvPlaceNo?.Trim() ?? "";
            var pIsAgvPlace = input.IsAgvPlace;
            var pAgvPlaceNo = input.AgvPlaceNo?.Trim() ?? "";
            var pIsTransPlace = input.IsTransPlace;
            var pTransPlaceNo = input.TransPlaceNo?.Trim() ?? "";
            var pIsActivateWCS = input.IsActivateWCS;
            var pEnvironment = input.Environment?.Trim() ?? "";
            var pAreaCode = input.AreaCode?.Trim() ?? "";
            var pAreaId = input.AreaId;
            var pAreaName = input.AreaName?.Trim() ?? "";
            var pVerificationCode = input.VerificationCode?.Trim() ?? "";
            var pRowNo = input.RowNo;
            var pColumnNo = input.ColumnNo;
            var pLayerNo = input.LayerNo;
            var pLaneNo = input.LaneNo;
            var pXzb = input.Xzb?.Trim() ?? "";
            var pYzb = input.Yzb?.Trim() ?? "";
            var pZzb = input.Zzb?.Trim() ?? "";
            var pLength = input.Length;
            var pWidth = input.Width;
            var pHeight = input.Height;
            var pMaxWeight = input.MaxWeight;
            var pInSequence = input.InSequence;
            var pOutSequence = input.OutSequence;
            var pIsVirtually = input.IsVirtually;
            var pIsDisabled = input.IsDisabled;
            var pCreatedTime = input.CreatedTime;
            var pUpdatedTime = input.UpdatedTime;
            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var wmsPlaces = await _wmsPlaceRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pPlaceCode), u => u.PlaceCode == pPlaceCode)
                .Where(!string.IsNullOrEmpty(pPlaceName), u => u.PlaceName == pPlaceName)
                .Where(!string.IsNullOrEmpty(pPlaceAlias), u => u.PlaceAlias == pPlaceAlias)
                .Where(pPlaceType != null, u => u.PlaceType == pPlaceType)
                .Where(!string.IsNullOrEmpty(pPlaceTypeName), u => u.PlaceTypeName == pPlaceTypeName)
                .Where(!string.IsNullOrEmpty(pStockUnit), u => u.StockUnit == pStockUnit)
                .Where(pPlaceStatus != null, u => u.PlaceStatus == pPlaceStatus)
                .Where(pIsSrmPlace != null, u => u.IsSrmPlace == pIsSrmPlace)
                .Where(!string.IsNullOrEmpty(pSrmPlaceNo), u => u.SrmPlaceNo == pSrmPlaceNo)
                .Where(pIsRgvPlace != null, u => u.IsRgvPlace == pIsRgvPlace)
                .Where(!string.IsNullOrEmpty(pRgvPlaceNo), u => u.RgvPlaceNo == pRgvPlaceNo)
                .Where(pIsAgvPlace != null, u => u.IsAgvPlace == pIsAgvPlace)
                .Where(!string.IsNullOrEmpty(pAgvPlaceNo), u => u.AgvPlaceNo == pAgvPlaceNo)
                .Where(pIsTransPlace != null, u => u.IsTransPlace == pIsTransPlace)
                .Where(!string.IsNullOrEmpty(pTransPlaceNo), u => u.TransPlaceNo == pTransPlaceNo)
                .Where(pIsActivateWCS != null, u => u.IsActivateWCS == pIsActivateWCS)
                .Where(!string.IsNullOrEmpty(pEnvironment), u => u.Environment == pEnvironment)
                .Where(!string.IsNullOrEmpty(pAreaCode), u => u.AreaCode == pAreaCode)
                .Where(pAreaId != null, u => u.AreaId == pAreaId)
                .Where(!string.IsNullOrEmpty(pAreaName), u => u.AreaName == pAreaName)
                .Where(!string.IsNullOrEmpty(pVerificationCode), u => u.VerificationCode == pVerificationCode)
                .Where(pRowNo != null, u => u.RowNo == pRowNo)
                .Where(pColumnNo != null, u => u.ColumnNo == pColumnNo)
                .Where(pLayerNo != null, u => u.LayerNo == pLayerNo)
                .Where(pLaneNo != null, u => u.LaneNo == pLaneNo)
                .Where(!string.IsNullOrEmpty(pXzb), u => u.Xzb == pXzb)
                .Where(!string.IsNullOrEmpty(pYzb), u => u.Yzb == pYzb)
                .Where(!string.IsNullOrEmpty(pZzb), u => u.Zzb == pZzb)
                .Where(pLength != null, u => u.Length == pLength)
                .Where(pWidth != null, u => u.Width == pWidth)
                .Where(pHeight != null, u => u.Height == pHeight)
                .Where(pMaxWeight != null, u => u.MaxWeight == pMaxWeight)
                .Where(pInSequence != null, u => u.InSequence == pInSequence)
                .Where(pOutSequence != null, u => u.OutSequence == pOutSequence)
                .Where(pIsVirtually != null, u => u.IsVirtually == pIsVirtually)
                .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsPlaceOutput>()
            .ToListAsync();
            return wmsPlaces;
        }
         /// <summary>
        /// èŽ·å–åº“ä½ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsPlace/detail")]
        public async Task<WmsPlaceOutput> Get([FromQuery] QueryeWmsPlaceInput input)
        {
            return (await _wmsPlaceRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsPlaceOutput>();
        }
        /// <summary>
        /// èŽ·å–åº“ä½ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsPlace/list")]
        public async Task<List<WmsPlaceOutput>> List([FromQuery] WmsPlaceInput input)
        {
            return await _wmsPlaceRep.DetachedEntities.ProjectToType<WmsPlaceOutput>().ToListAsync();
        }
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ åº“ä½ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsPlace/add")]
        public async Task Add(AddWmsPlaceInput input)
        {
            var wmsPlace = input.Adapt<WmsPlace>();
                        //验证
            await CheckExisit(wmsPlace);
            wmsPlace.CreatedUserId = wmsPlace.UpdatedUserId = SysHelper.GetUserId();
            wmsPlace.CreatedUserName = wmsPlace.UpdatedUserName = SysHelper.GetUserName();
            wmsPlace.CreatedTime = wmsPlace.UpdatedTime = SysHelper.GetNowTime();
            await _wmsPlaceRep.InsertAsync(wmsPlace);
        }
        /// <summary>
        /// åˆ é™¤åº“位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsPlace/delete")]
        public async Task Delete(DeleteWmsPlaceInput input)
        {
            var wmsPlace = await _wmsPlaceRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsPlaceRep.DeleteAsync(wmsPlace);
        }
        /// <summary>
        /// æ›´æ–°åº“位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsPlace/edit")]
        public async Task Update(UpdateWmsPlaceInput input)
        {
            var isExist = await _wmsPlaceRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
            var wmsPlace = input.Adapt<WmsPlace>();
            //验证
            await CheckExisit(wmsPlace,true);
            wmsPlace.UpdatedUserId = SysHelper.GetUserId();
            wmsPlace.UpdatedUserName = SysHelper.GetUserName();
            wmsPlace.UpdatedTime = SysHelper.GetNowTime();
            await _wmsPlaceRep.UpdateAsync(wmsPlace,ignoreNullValues:true);
        }
        #endregion
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入库位信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("WmsPlace/importExcel")]
        public async Task<int> ImportExcelAsync(IFormFile file)
        {
            int _HeadStartLine = 2;//第1行是说明,第2行是列名
            int _DataStartLine = 3;//第3行开始是数据
            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
            var addList =await CommonImport(importDataTable, _DataStartLine);
            lock (_lock)
            {
                _wmsPlaceRep.InsertAsync(addList);
            }
            await Task.CompletedTask;
            return addList.Count;
        }
        /// <summary>
        ///  DataTable转换实体对象列表
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="dataStartLine">模版列名开始行</param>
        /// <returns></returns>
        private async Task<List<WmsPlace>> CommonImport(DataTable dataTable, int dataStartLine)
        {
            var details = new List<WmsPlace>();
            int index = dataStartLine;//模版列名开始行
            foreach (System.Data.DataRow row in dataTable.Rows)
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsPlace()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region å®šä¹‰å˜é‡
                           var _PlaceCode = "";//库位编码
                           var _PlaceName = "";//库位名称
                           var _PlaceAlias = "";//库位别名
                           var _PlaceType = "";//库位类型
                           var _PlaceTypeName = "";//库位类型名称
                           var _StockUnit = "";//存放单位
                           var _PlaceStatus = "";//库位属性
                           var _IsSrmPlace = "";//是否堆垛机库位
                           var _SrmPlaceNo = "";//堆垛机库位号
                           var _IsRgvPlace = "";//是否RGV库位
                           var _RgvPlaceNo = "";//RGV库位号
                           var _IsAgvPlace = "";//是否AGV库位
                           var _AgvPlaceNo = "";//AGV库位号
                           var _IsTransPlace = "";//是否输送线库位
                           var _TransPlaceNo = "";//输送线库位号
                           var _IsActivateWCS = "";//是否激活与任务调度
                           var _Environment = "";//库存环境
                           var _AreaCode = "";//库区编号
                           var _AreaId = "";//所在库区
                           var _AreaName = "";//库区名称
                           var _VerificationCode = "";//检验码
                           var _RowNo = "";//排
                           var _ColumnNo = "";//列
                           var _LayerNo = "";//层
                           var _LaneNo = "";//巷道
                           var _Xzb = "";//库位X坐标
                           var _Yzb = "";//库位Y坐标
                           var _Zzb = "";//库位Z坐标
                           var _Length = "";//库位长度
                           var _Width = "";//库位宽度
                           var _Height = "";//库位高度
                           var _MaxWeight = "";//最大承重
                           var _InSequence = "";//入库顺序
                           var _OutSequence = "";//出库顺序
                           var _IsVirtually = "";//是否虚拟
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          #region å–值
                           _PlaceCode = row["库位编码"]?.ToString() ;
                           _PlaceName = row["库位名称"]?.ToString() ;
                           _PlaceAlias = row["库位别名"]?.ToString() ;
                           _PlaceType = row["库位类型"]?.ToString() ;
                           _PlaceTypeName = row["库位类型名称"]?.ToString() ;
                           _StockUnit = row["存放单位"]?.ToString() ;
                           _PlaceStatus = row["库位属性"]?.ToString() ;
                           _IsSrmPlace = row["是否堆垛机库位"]?.ToString() ;
                           _SrmPlaceNo = row["堆垛机库位号"]?.ToString() ;
                           _IsRgvPlace = row["是否RGV库位"]?.ToString() ;
                           _RgvPlaceNo = row["RGV库位号"]?.ToString() ;
                           _IsAgvPlace = row["是否AGV库位"]?.ToString() ;
                           _AgvPlaceNo = row["AGV库位号"]?.ToString() ;
                           _IsTransPlace = row["是否输送线库位"]?.ToString() ;
                           _TransPlaceNo = row["输送线库位号"]?.ToString() ;
                           _IsActivateWCS = row["是否激活与任务调度"]?.ToString() ;
                           _Environment = row["库存环境"]?.ToString() ;
                           _AreaCode = row["库区编号"]?.ToString() ;
                           _AreaId = row["所在库区"]?.ToString() ;
                           _AreaName = row["库区名称"]?.ToString() ;
                           _VerificationCode = row["检验码"]?.ToString() ;
                           _RowNo = row["排"]?.ToString() ;
                           _ColumnNo = row["列"]?.ToString() ;
                           _LayerNo = row["层"]?.ToString() ;
                           _LaneNo = row["巷道"]?.ToString() ;
                           _Xzb = row["库位X坐标"]?.ToString() ;
                           _Yzb = row["库位Y坐标"]?.ToString() ;
                           _Zzb = row["库位Z坐标"]?.ToString() ;
                           _Length = row["库位长度"]?.ToString() ;
                           _Width = row["库位宽度"]?.ToString() ;
                           _Height = row["库位高度"]?.ToString() ;
                           _MaxWeight = row["最大承重"]?.ToString() ;
                           _InSequence = row["入库顺序"]?.ToString() ;
                           _OutSequence = row["出库顺序"]?.ToString() ;
                           _IsVirtually = row["是否虚拟"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          #region éªŒè¯
                          if (string.IsNullOrEmpty(_PlaceCode))
                          {
                            throw Oops.Oh($"第{index}行[库位编码]{_PlaceCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PlaceCode))
                          {
                                addItem.PlaceCode = (string)_PlaceCode;
                           }
                          if (string.IsNullOrEmpty(_PlaceName))
                          {
                            throw Oops.Oh($"第{index}行[库位名称]{_PlaceName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PlaceName))
                          {
                                addItem.PlaceName = (string)_PlaceName;
                           }
                          if(!string.IsNullOrEmpty(_PlaceAlias))
                          {
                                addItem.PlaceAlias = (string)_PlaceAlias;
                           }
                          if (string.IsNullOrEmpty(_PlaceType))
                          {
                            throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PlaceType))
                          {
                              if (!int.TryParse(_PlaceType, out int outPlaceType)&&!string.IsNullOrEmpty(_PlaceType))
                              {
                                 throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}值不正确!");
                              }
                              if (outPlaceType <= 0&&!string.IsNullOrEmpty(_PlaceType))
                              {
                                 throw Oops.Oh($"第{index}行[库位类型]{_PlaceType}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.PlaceType = outPlaceType;
                              }
                          }
                          if(!string.IsNullOrEmpty(_PlaceTypeName))
                          {
                                addItem.PlaceTypeName = (string)_PlaceTypeName;
                           }
                          if(!string.IsNullOrEmpty(_StockUnit))
                          {
                                addItem.StockUnit = (string)_StockUnit;
                           }
                          if(!string.IsNullOrEmpty(_PlaceStatus))
                          {
                              if (!int.TryParse(_PlaceStatus, out int outPlaceStatus)&&!string.IsNullOrEmpty(_PlaceStatus))
                              {
                                 throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}值不正确!");
                              }
                              if (outPlaceStatus <= 0&&!string.IsNullOrEmpty(_PlaceStatus))
                              {
                                 throw Oops.Oh($"第{index}行[库位属性]{_PlaceStatus}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.PlaceStatus = outPlaceStatus;
                              }
                          }
                          if(!string.IsNullOrEmpty(_IsSrmPlace))
                          {
                            if(!_IsSrmPlace.Equals("是") && !_IsSrmPlace.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否堆垛机库位]{_IsSrmPlace}值不正确!");
                             }
                             else
                             {
                               bool outIsSrmPlace = _IsSrmPlace.Equals("是") ? true : false;
                               addItem.IsSrmPlace = outIsSrmPlace;
                             }
                             }
                          if(!string.IsNullOrEmpty(_SrmPlaceNo))
                          {
                                addItem.SrmPlaceNo = (string)_SrmPlaceNo;
                           }
                          if(!string.IsNullOrEmpty(_IsRgvPlace))
                          {
                            if(!_IsRgvPlace.Equals("是") && !_IsRgvPlace.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否RGV库位]{_IsRgvPlace}值不正确!");
                             }
                             else
                             {
                               bool outIsRgvPlace = _IsRgvPlace.Equals("是") ? true : false;
                               addItem.IsRgvPlace = outIsRgvPlace;
                             }
                             }
                          if(!string.IsNullOrEmpty(_RgvPlaceNo))
                          {
                                addItem.RgvPlaceNo = (string)_RgvPlaceNo;
                           }
                          if(!string.IsNullOrEmpty(_IsAgvPlace))
                          {
                            if(!_IsAgvPlace.Equals("是") && !_IsAgvPlace.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否AGV库位]{_IsAgvPlace}值不正确!");
                             }
                             else
                             {
                               bool outIsAgvPlace = _IsAgvPlace.Equals("是") ? true : false;
                               addItem.IsAgvPlace = outIsAgvPlace;
                             }
                             }
                          if(!string.IsNullOrEmpty(_AgvPlaceNo))
                          {
                                addItem.AgvPlaceNo = (string)_AgvPlaceNo;
                           }
                          if(!string.IsNullOrEmpty(_IsTransPlace))
                          {
                            if(!_IsTransPlace.Equals("是") && !_IsTransPlace.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否输送线库位]{_IsTransPlace}值不正确!");
                             }
                             else
                             {
                               bool outIsTransPlace = _IsTransPlace.Equals("是") ? true : false;
                               addItem.IsTransPlace = outIsTransPlace;
                             }
                             }
                          if(!string.IsNullOrEmpty(_TransPlaceNo))
                          {
                                addItem.TransPlaceNo = (string)_TransPlaceNo;
                           }
                          if(!string.IsNullOrEmpty(_IsActivateWCS))
                          {
                            if(!_IsActivateWCS.Equals("是") && !_IsActivateWCS.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否激活与任务调度]{_IsActivateWCS}值不正确!");
                             }
                             else
                             {
                               bool outIsActivateWCS = _IsActivateWCS.Equals("是") ? true : false;
                               addItem.IsActivateWCS = outIsActivateWCS;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Environment))
                          {
                                addItem.Environment = (string)_Environment;
                           }
                          if(!string.IsNullOrEmpty(_AreaCode))
                          {
                                addItem.AreaCode = (string)_AreaCode;
                           }
                          if(!string.IsNullOrEmpty(_AreaId))
                          {
                              if (!long.TryParse(_AreaId, out long outAreaId)&&!string.IsNullOrEmpty(_AreaId))
                              {
                                 throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不正确!");
                              }
                              if (outAreaId <= 0&&!string.IsNullOrEmpty(_AreaId))
                              {
                                 throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.AreaId = outAreaId;
                              }
                          }
                          if(!string.IsNullOrEmpty(_AreaName))
                          {
                                addItem.AreaName = (string)_AreaName;
                           }
                          if(!string.IsNullOrEmpty(_VerificationCode))
                          {
                                addItem.VerificationCode = (string)_VerificationCode;
                           }
                          if(!string.IsNullOrEmpty(_RowNo))
                          {
                              if (!int.TryParse(_RowNo, out int outRowNo)&&!string.IsNullOrEmpty(_RowNo))
                              {
                                 throw Oops.Oh($"第{index}行[排]{_RowNo}值不正确!");
                              }
                              if (outRowNo <= 0&&!string.IsNullOrEmpty(_RowNo))
                              {
                                 throw Oops.Oh($"第{index}行[排]{_RowNo}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.RowNo = outRowNo;
                              }
                          }
                          if(!string.IsNullOrEmpty(_ColumnNo))
                          {
                              if (!int.TryParse(_ColumnNo, out int outColumnNo)&&!string.IsNullOrEmpty(_ColumnNo))
                              {
                                 throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不正确!");
                              }
                              if (outColumnNo <= 0&&!string.IsNullOrEmpty(_ColumnNo))
                              {
                                 throw Oops.Oh($"第{index}行[列]{_ColumnNo}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.ColumnNo = outColumnNo;
                              }
                          }
                          if(!string.IsNullOrEmpty(_LayerNo))
                          {
                              if (!int.TryParse(_LayerNo, out int outLayerNo)&&!string.IsNullOrEmpty(_LayerNo))
                              {
                                 throw Oops.Oh($"第{index}行[层]{_LayerNo}值不正确!");
                              }
                              if (outLayerNo <= 0&&!string.IsNullOrEmpty(_LayerNo))
                              {
                                 throw Oops.Oh($"第{index}行[层]{_LayerNo}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LayerNo = outLayerNo;
                              }
                          }
                          if(!string.IsNullOrEmpty(_LaneNo))
                          {
                              if (!int.TryParse(_LaneNo, out int outLaneNo)&&!string.IsNullOrEmpty(_LaneNo))
                              {
                                 throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不正确!");
                              }
                              if (outLaneNo <= 0&&!string.IsNullOrEmpty(_LaneNo))
                              {
                                 throw Oops.Oh($"第{index}行[巷道]{_LaneNo}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LaneNo = outLaneNo;
                              }
                          }
                          if(!string.IsNullOrEmpty(_Xzb))
                          {
                                addItem.Xzb = (string)_Xzb;
                           }
                          if(!string.IsNullOrEmpty(_Yzb))
                          {
                                addItem.Yzb = (string)_Yzb;
                           }
                          if(!string.IsNullOrEmpty(_Zzb))
                          {
                                addItem.Zzb = (string)_Zzb;
                           }
                          if(!string.IsNullOrEmpty(_Length))
                          {
                              if (!decimal.TryParse(_Length, out decimal outLength)&&!string.IsNullOrEmpty(_Length))
                              {
                                 throw Oops.Oh($"第{index}行[库位长度]{_Length}值不正确!");
                              }
                              if (outLength <= 0&&!string.IsNullOrEmpty(_Length))
                              {
                                 throw Oops.Oh($"第{index}行[库位长度]{_Length}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Length = outLength;
                              }
                          }
                          if(!string.IsNullOrEmpty(_Width))
                          {
                              if (!decimal.TryParse(_Width, out decimal outWidth)&&!string.IsNullOrEmpty(_Width))
                              {
                                 throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不正确!");
                              }
                              if (outWidth <= 0&&!string.IsNullOrEmpty(_Width))
                              {
                                 throw Oops.Oh($"第{index}行[库位宽度]{_Width}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Width = outWidth;
                              }
                          }
                          if(!string.IsNullOrEmpty(_Height))
                          {
                              if (!decimal.TryParse(_Height, out decimal outHeight)&&!string.IsNullOrEmpty(_Height))
                              {
                                 throw Oops.Oh($"第{index}行[库位高度]{_Height}值不正确!");
                              }
                              if (outHeight <= 0&&!string.IsNullOrEmpty(_Height))
                              {
                                 throw Oops.Oh($"第{index}行[库位高度]{_Height}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Height = outHeight;
                              }
                          }
                          if(!string.IsNullOrEmpty(_MaxWeight))
                          {
                              if (!decimal.TryParse(_MaxWeight, out decimal outMaxWeight)&&!string.IsNullOrEmpty(_MaxWeight))
                              {
                                 throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不正确!");
                              }
                              if (outMaxWeight <= 0&&!string.IsNullOrEmpty(_MaxWeight))
                              {
                                 throw Oops.Oh($"第{index}行[最大承重]{_MaxWeight}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.MaxWeight = outMaxWeight;
                              }
                          }
                          if(!string.IsNullOrEmpty(_InSequence))
                          {
                              if (!int.TryParse(_InSequence, out int outInSequence)&&!string.IsNullOrEmpty(_InSequence))
                              {
                                 throw Oops.Oh($"第{index}行[入库顺序]{_InSequence}值不正确!");
                              }
                              if (outInSequence <= 0&&!string.IsNullOrEmpty(_InSequence))
                              {
                                 throw Oops.Oh($"第{index}行[入库顺序]{_InSequence}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.InSequence = outInSequence;
                              }
                          }
                          if(!string.IsNullOrEmpty(_OutSequence))
                          {
                              if (!int.TryParse(_OutSequence, out int outOutSequence)&&!string.IsNullOrEmpty(_OutSequence))
                              {
                                 throw Oops.Oh($"第{index}行[出库顺序]{_OutSequence}值不正确!");
                              }
                              if (outOutSequence <= 0&&!string.IsNullOrEmpty(_OutSequence))
                              {
                                 throw Oops.Oh($"第{index}行[出库顺序]{_OutSequence}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.OutSequence = outOutSequence;
                              }
                          }
                          if(!string.IsNullOrEmpty(_IsVirtually))
                          {
                            if(!_IsVirtually.Equals("是") && !_IsVirtually.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否虚拟]{_IsVirtually}值不正确!");
                             }
                             else
                             {
                               bool outIsVirtually = _IsVirtually.Equals("是") ? true : false;
                               addItem.IsVirtually = outIsVirtually;
                             }
                             }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
                             }
                             else
                             {
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Id))
                          {
                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
                              }
                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Id = outId;
                              }
                          }
                          #endregion
                details.Add(addItem);
            }
              //验重
              await CheckExisitForImport(details);
            return details;
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½åº“位信息的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("WmsPlace/downloadExcelTemplate")]
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsPlace{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(库位信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        #region ç§æœ‰æ–¹æ³•
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-数据库
        /// </summary>
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( WmsPlace input,bool isEdit=false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _wmsPlaceRep.AnyAsync(u =>
                                   u.PlaceCode.Equals(input.PlaceCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _wmsPlaceRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.PlaceCode.Equals(input.PlaceCode)
                    ,false);
               }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsPlace> inputs)
        {
            //根据联合主键验证表格中中是否已存在相同数据
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.PlaceCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.PlaceCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var wmsPlace = existExcelItem.Adapt<WmsPlace>();
                   var item= existExcelItem.Adapt<WmsPlace>();
                   throw Oops.Oh($"导入的表格中,库位编码[{item.PlaceCode}]已存在");
                 }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _wmsPlaceRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.PlaceCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.PlaceCode
                  ));
                  if (existDBItem != null)
                 {
                   var wmsPlace = existExcelItem.Adapt<WmsPlace>();
                   var item= existExcelItem.Adapt<WmsPlace>();
                   throw Oops.Oh($"系统中,库位编码[{item.PlaceCode}]已存在");
                 }
        }
        #endregion
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Dto/WmsUnitInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,165 @@
using Admin.NET.Core;
using Admin.NET.Core.Service;
using System.ComponentModel.DataAnnotations;
namespace Admin.NET.Application
{
    /// <summary>
    /// å•位信息查询参数
    /// </summary>
    public class WmsUnitSearch : PageInputBase
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string UnitCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public virtual string UnitName { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        public virtual string UnitDesc { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public virtual List<string> CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public virtual List<string> UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
        /// <summary>
    /// å•位信息不分页查询参数
    /// </summary>
    public class WmsUnitSearchNonPage : PageInputNonPageBase
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string UnitCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public virtual string UnitName { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        public virtual string UnitDesc { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
         public virtual List<DateTimeOffset>? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public virtual string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public virtual string UpdatedUserName { get; set; }
    }
    /// <summary>
    /// å•位信息输入参数
    /// </summary>
    public class WmsUnitInput
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        [Required(ErrorMessage = "编号不能为空")]
        public virtual string UnitCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        [Required(ErrorMessage = "名称不能为空")]
        public virtual string UnitName { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        public virtual string UnitDesc { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
    }
    /// <summary>
    /// å•位信息新增参数
    /// </summary>
    public class AddWmsUnitInput : WmsUnitInput
    {
    }
    /// <summary>
    /// å•位信息删除参数
    /// </summary>
    public class DeleteWmsUnitInput : BaseId
    {
    }
    /// <summary>
    /// å•位信息更新参数
    /// </summary>
    public class UpdateWmsUnitInput : WmsUnitInput
    {
        /// <summary>
        /// Id主键
        /// </summary>
        [Required(ErrorMessage = "Id主键不能为空")]
        public long? Id { get; set; }
    }
    /// <summary>
    /// å•位信息获取单个参数
    /// </summary>
    public class QueryeWmsUnitInput : BaseId
    {
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Dto/WmsUnitOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using Admin.NET.Core.Util.LowCode.Dto;
using System;
namespace Admin.NET.Application
{
    /// <summary>
    /// å•位信息输出参数
    /// </summary>
    public class WmsUnitOutput
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public string UnitCode { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public string UnitName { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        public string UnitDesc { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long? Id { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
        /// <summary>
        /// æ›´æ–°æ—¶é—´
        /// </summary>
        public DateTimeOffset? UpdatedTime { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…名称
        /// </summary>
        public string CreatedUserName { get; set; }
        /// <summary>
        /// ä¿®æ”¹è€…名称
        /// </summary>
        public string UpdatedUserName { get; set; }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/IWmsUnitService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Admin.NET.Core;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Application
{
    public interface IWmsUnitService
    {
        Task<WmsUnitOutput> Get([FromQuery] QueryeWmsUnitInput input);
        Task<List<WmsUnitOutput>> List([FromQuery] WmsUnitInput input);
        Task<PageResult<WmsUnitOutput>> Page([FromQuery] WmsUnitSearch input);
        Task<List<WmsUnitOutput>> ListNonPageAsync([FromQuery] WmsUnitSearchNonPage input);
        Task Add(AddWmsUnitInput input);
        Task Update(UpdateWmsUnitInput input);
        Task Delete(DeleteWmsUnitInput input);
        Task<int> ImportExcelAsync(IFormFile file);
        IActionResult DownloadExcelTemplate(string version);
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/Map/WmsUnitMapper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Mapster;
using Admin.NET.Core;
namespace Admin.NET.Application
{
    public class WmsUnitMapper : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<AddWmsUnitInput, WmsUnit>()
            ;
            config.ForType<UpdateWmsUnitInput, WmsUnit>()
            ;
            config.ForType<WmsUnit, WmsUnitOutput>()
            ;
        }
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsUnit/WmsUnitService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,412 @@
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using System.ComponentModel;
using System.Data;
namespace Admin.NET.Application
{
    /// <summary>
    /// å•位信息服务
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsUnit", Order = 100)]
    [Route("api")]
    public class WmsUnitService : IWmsUnitService, IDynamicApiController, ITransient
    {
        private readonly IRepository<WmsUnit,MasterDbContextLocator> _wmsUnitRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly ISysExcelTemplateService _sysExcelTemplateService;
        private readonly static object _lock = new();
        public WmsUnitService(
            IRepository<WmsUnit,MasterDbContextLocator> wmsUnitRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
            ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
            ,ISysExcelTemplateService sysExcelTemplateService
        )
        {
            _wmsUnitRep = wmsUnitRep;
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataRep = sysDictDataRep;
         _sysExcelTemplateService = sysExcelTemplateService;
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢å•位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsUnit/page")]
        public async Task<PageResult<WmsUnitOutput>> Page([FromQuery] WmsUnitSearch input)
        {
            var wmsUnits = await _wmsUnitRep.DetachedEntities
                                     .Where(!string.IsNullOrEmpty(input.UnitCode), u => u.UnitCode == input.UnitCode)
                                     .Where(!string.IsNullOrEmpty(input.UnitName), u => u.UnitName == input.UnitName)
                                     .Where(!string.IsNullOrEmpty(input.UnitDesc), u => u.UnitDesc == input.UnitDesc)
                                     .Where(input.IsDisabled != null, u => u.IsDisabled == input.IsDisabled)
                                     .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
                                     .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                                     .Where(!string.IsNullOrEmpty(input.CreatedUserName), u => u.CreatedUserName == input.CreatedUserName)
                                     .Where(!string.IsNullOrEmpty(input.UpdatedUserName), u => u.UpdatedUserName == input.UpdatedUserName)
                                     .OrderBy(PageInputOrder.OrderBuilder<WmsUnitSearch>(input))
                                     .ProjectToType<WmsUnitOutput>()
                                     .ToADPagedListAsync(input.PageNo, input.PageSize);
            return wmsUnits;
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢å•位信息列表
        /// </summary>
        /// <param name="input">单位信息查询参数</param>
        /// <returns>(单位信息)实例列表</returns>
        [HttpGet("WmsUnit/listNonPage")]
        public async Task<List<WmsUnitOutput>> ListNonPageAsync([FromQuery] WmsUnitSearchNonPage input)
        {
            var pUnitCode = input.UnitCode?.Trim() ?? "";
            var pUnitName = input.UnitName?.Trim() ?? "";
            var pUnitDesc = input.UnitDesc?.Trim() ?? "";
            var pIsDisabled = input.IsDisabled;
            var pCreatedTime = input.CreatedTime;
            var pUpdatedTime = input.UpdatedTime;
            var pCreatedUserName = input.CreatedUserName?.Trim() ?? "";
            var pUpdatedUserName = input.UpdatedUserName?.Trim() ?? "";
            var wmsUnits = await _wmsUnitRep.DetachedEntities
                .Where(!string.IsNullOrEmpty(pUnitCode), u => u.UnitCode == pUnitCode)
                .Where(!string.IsNullOrEmpty(pUnitName), u => u.UnitName == pUnitName)
                .Where(!string.IsNullOrEmpty(pUnitDesc), u => u.UnitDesc == pUnitDesc)
                .Where(pIsDisabled != null, u => u.IsDisabled == pIsDisabled)
           .Where(input.CreatedTime!=null, u => u.CreatedTime>=  Convert.ToDateTime(input.CreatedTime[0]) && u.CreatedTime<= Convert.ToDateTime(input.CreatedTime[1]))
           .Where(input.UpdatedTime!=null, u => u.UpdatedTime>=  Convert.ToDateTime(input.UpdatedTime[0]) && u.UpdatedTime<= Convert.ToDateTime(input.UpdatedTime[1]))
                .Where(!string.IsNullOrEmpty(pCreatedUserName), u => u.CreatedUserName == pCreatedUserName)
                .Where(!string.IsNullOrEmpty(pUpdatedUserName), u => u.UpdatedUserName == pUpdatedUserName)
            .OrderBy(PageInputOrder.OrderNonPageBuilder(input))
            .ProjectToType<WmsUnitOutput>()
            .ToListAsync();
            return wmsUnits;
        }
         /// <summary>
        /// èŽ·å–å•ä½ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsUnit/detail")]
        public async Task<WmsUnitOutput> Get([FromQuery] QueryeWmsUnitInput input)
        {
            return (await _wmsUnitRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt<WmsUnitOutput>();
        }
        /// <summary>
        /// èŽ·å–å•ä½ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("WmsUnit/list")]
        public async Task<List<WmsUnitOutput>> List([FromQuery] WmsUnitInput input)
        {
            return await _wmsUnitRep.DetachedEntities.ProjectToType<WmsUnitOutput>().ToListAsync();
        }
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ å•ä½ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsUnit/add")]
        public async Task Add(AddWmsUnitInput input)
        {
            var wmsUnit = input.Adapt<WmsUnit>();
                        //验证
            await CheckExisit(wmsUnit);
            wmsUnit.CreatedUserId = wmsUnit.UpdatedUserId = SysHelper.GetUserId();
            wmsUnit.CreatedUserName = wmsUnit.UpdatedUserName = SysHelper.GetUserName();
            wmsUnit.CreatedTime = wmsUnit.UpdatedTime = SysHelper.GetNowTime();
            await _wmsUnitRep.InsertAsync(wmsUnit);
        }
        /// <summary>
        /// åˆ é™¤å•位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsUnit/delete")]
        public async Task Delete(DeleteWmsUnitInput input)
        {
            var wmsUnit = await _wmsUnitRep.FirstOrDefaultAsync(u => u.Id == input.Id);
            await _wmsUnitRep.DeleteAsync(wmsUnit);
        }
        /// <summary>
        /// æ›´æ–°å•位信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("WmsUnit/edit")]
        public async Task Update(UpdateWmsUnitInput input)
        {
            var isExist = await _wmsUnitRep.AnyAsync(u => u.Id == input.Id, false);
            if (!isExist) throw Oops.Oh(ErrorCode.D1002);
            var wmsUnit = input.Adapt<WmsUnit>();
            //验证
            await CheckExisit(wmsUnit,true);
            wmsUnit.UpdatedUserId = SysHelper.GetUserId();
            wmsUnit.UpdatedUserName = SysHelper.GetUserName();
            wmsUnit.UpdatedTime = SysHelper.GetNowTime();
            await _wmsUnitRep.UpdateAsync(wmsUnit,ignoreNullValues:true);
        }
        #endregion
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入单位信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
        [HttpPost("WmsUnit/importExcel")]
        public async Task<int> ImportExcelAsync(IFormFile file)
        {
            int _HeadStartLine = 2;//第1行是说明,第2行是列名
            int _DataStartLine = 3;//第3行开始是数据
            DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
            var addList =await CommonImport(importDataTable, _DataStartLine);
            lock (_lock)
            {
                _wmsUnitRep.InsertAsync(addList);
            }
            await Task.CompletedTask;
            return addList.Count;
        }
        /// <summary>
        ///  DataTable转换实体对象列表
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="dataStartLine">模版列名开始行</param>
        /// <returns></returns>
        private async Task<List<WmsUnit>> CommonImport(DataTable dataTable, int dataStartLine)
        {
            var details = new List<WmsUnit>();
            int index = dataStartLine;//模版列名开始行
            foreach (System.Data.DataRow row in dataTable.Rows)
            {
                index++;
               //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsUnit()
                            {
                               CreatedTime = SysHelper.GetNowTime(),
                               CreatedUserId = SysHelper.GetUserId(),
                               CreatedUserName = SysHelper.GetUserName(),
                               UpdatedTime = SysHelper.GetNowTime(),
                               UpdatedUserId = SysHelper.GetUserId(),
                               UpdatedUserName = SysHelper.GetUserName()
                             };
                          #region å®šä¹‰å˜é‡
                           var _UnitCode = "";//编号
                           var _UnitName = "";//名称
                           var _UnitDesc = "";//描述
                           var _IsDisabled = "";//是否禁用
                           var _Id = "";//Id主键
                          #endregion
                          #region å–值
                           _UnitCode = row["编号"]?.ToString() ;
                           _UnitName = row["名称"]?.ToString() ;
                           _UnitDesc = row["描述"]?.ToString() ;
                           _IsDisabled = row["是否禁用"]?.ToString() ;
                           _Id = row["Id主键"]?.ToString() ;
                          #endregion
                          #region éªŒè¯
                          if (string.IsNullOrEmpty(_UnitCode))
                          {
                            throw Oops.Oh($"第{index}行[编号]{_UnitCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_UnitCode))
                          {
                                addItem.UnitCode = (string)_UnitCode;
                           }
                          if (string.IsNullOrEmpty(_UnitName))
                          {
                            throw Oops.Oh($"第{index}行[名称]{_UnitName}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_UnitName))
                          {
                                addItem.UnitName = (string)_UnitName;
                           }
                          if(!string.IsNullOrEmpty(_UnitDesc))
                          {
                                addItem.UnitDesc = (string)_UnitDesc;
                           }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}值不正确!");
                             }
                             else
                             {
                               bool outIsDisabled = _IsDisabled.Equals("是") ? true : false;
                               addItem.IsDisabled = outIsDisabled;
                             }
                             }
                          if(!string.IsNullOrEmpty(_Id))
                          {
                              if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!");
                              }
                              if (outId <= 0&&!string.IsNullOrEmpty(_Id))
                              {
                                 throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Id = outId;
                              }
                          }
                          #endregion
                details.Add(addItem);
            }
              //验重
              await CheckExisitForImport(details);
            return details;
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½å•位信息的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
        [HttpGet("WmsUnit/downloadExcelTemplate")]
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsUnit{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(单位信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
        #endregion
        #region ç§æœ‰æ–¹æ³•
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-数据库
        /// </summary>
        /// <param name="input"></param>
        /// <param name="isEdit"></param>
        /// <returns></returns>
        private async Task CheckExisit( WmsUnit input,bool isEdit=false)
        {
           bool isExist = false;
           if (!isEdit)//新增
           {
                   //数据是否存在重复
                   isExist = await _wmsUnitRep.AnyAsync(u =>
                                   u.UnitCode.Equals(input.UnitCode)
                   ,false);
          }
           else//编辑
          {
                 //当前编辑数据以外是否存在重复
                  isExist = await _wmsUnitRep.AnyAsync(u =>
                                    u.Id != input.Id
                                    &&u.UnitCode.Equals(input.UnitCode)
                    ,false);
               }
            if (isExist) throw Oops.Oh(ErrorCode.E0001);
       }
        /// <summary>
        /// æ ¹æ®è”合主键验证数据是否已存在-导入时验证
        /// </summary>
        /// <param name="inputs"></param>
        /// <returns></returns>
        private async Task CheckExisitForImport(List<WmsUnit> inputs)
        {
            //根据联合主键验证表格中中是否已存在相同数据
                 if (inputs?.Count <= 0)
                 {
                     throw Oops.Oh($"导入数据不能为空");
                 }
                 //数据是否重复
                 var existExcelItem = inputs.GroupBy(g => new {
                                               g.UnitCode
                                               })
                                               .Where(g => g.Count() > 1)
                                               .Select(s => new {
                                               s.Key.UnitCode
                                               }).FirstOrDefault();
                 if (existExcelItem != null)
                 {
                   var wmsUnit = existExcelItem.Adapt<WmsUnit>();
                   var item= existExcelItem.Adapt<WmsUnit>();
                   throw Oops.Oh($"导入的表格中,编号[{item.UnitCode}]已存在");
                 }
    //根据联合主键验证数据库中是否已存在相同数据
                 var existDBItem = await _wmsUnitRep.DetachedEntities.FirstOrDefaultAsync(w=>
                                                                         inputs.Select(s=>""
                                                                           +s.UnitCode
                                                                        )
                                                                        .Contains(""
                                                                         +w.UnitCode
                  ));
                  if (existDBItem != null)
                 {
                   var wmsUnit = existExcelItem.Adapt<WmsUnit>();
                   var item= existExcelItem.Adapt<WmsUnit>();
                   throw Oops.Oh($"系统中,编号[{item.UnitCode}]已存在");
                 }
        }
        #endregion
    }
}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseInput.cs
@@ -6,7 +6,7 @@
{    
    
    /// <summary>
    /// ä»“库表查询参数
    /// ä»“库信息查询参数
    /// </summary>
    public class WmsWarehouseSearch : PageInputBase
    {
@@ -88,7 +88,7 @@
    }
        /// <summary>
    /// ä»“库表不分页查询参数
    /// ä»“库信息不分页查询参数
    /// </summary>
    public class WmsWarehouseSearchNonPage : PageInputNonPageBase
    {
@@ -170,7 +170,7 @@
    }
    /// <summary>
    /// ä»“库表输入参数
    /// ä»“库信息输入参数
    /// </summary>
    public class WmsWarehouseInput
    {
@@ -194,6 +194,7 @@
        /// <summary>
        /// å·¥åŽ‚ç¼–å·
        /// </summary>
        [Required(ErrorMessage = "工厂编号不能为空")]
        public virtual string FactoryCode { get; set; }
        
        /// <summary>
@@ -224,8 +225,7 @@
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [Required(ErrorMessage = "是否禁用不能为空")]
        public virtual bool IsDisabled { get; set; }
        public virtual bool? IsDisabled { get; set; }
        
        /// <summary>
        /// å¤‡æ³¨
@@ -235,21 +235,21 @@
    }
    /// <summary>
    /// ä»“库表新增参数
    /// ä»“库信息新增参数
    /// </summary>
    public class AddWmsWarehouseInput : WmsWarehouseInput
    {
    }
    /// <summary>
    /// ä»“库表删除参数
    /// ä»“库信息删除参数
    /// </summary>
    public class DeleteWmsWarehouseInput : BaseId
    {
    }
    /// <summary>
    /// ä»“库表更新参数
    /// ä»“库信息更新参数
    /// </summary>
    public class UpdateWmsWarehouseInput : WmsWarehouseInput
    {
@@ -262,7 +262,7 @@
    }
    /// <summary>
    /// ä»“库表获取单个参数
    /// ä»“库信息获取单个参数
    /// </summary>
    public class QueryeWmsWarehouseInput : BaseId
    {
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/Dto/WmsWarehouseOutput.cs
@@ -4,7 +4,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// ä»“库表输出参数
    /// ä»“库信息输出参数
    /// </summary>
    public class WmsWarehouseOutput
    {
@@ -56,7 +56,7 @@
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool IsDisabled { get; set; }
        public bool? IsDisabled { get; set; }
        
        /// <summary>
        /// å¤‡æ³¨
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsWarehouse/WmsWarehouseService.cs
@@ -16,7 +16,7 @@
namespace Admin.NET.Application
{
    /// <summary>
    /// ä»“库表服务
    /// ä»“库信息服务
    /// </summary>
    [ApiDescriptionSettings("WmsBase", Name = "WmsWarehouse", Order = 100)]
    [Route("api")]
@@ -42,7 +42,7 @@
        }
        /// <summary>
        /// åˆ†é¡µæŸ¥è¯¢ä»“库表
        /// åˆ†é¡µæŸ¥è¯¢ä»“库信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -72,10 +72,10 @@
        }
        /// <summary>
        /// ä¸åˆ†é¡µæŸ¥è¯¢ä»“库表列表
        /// ä¸åˆ†é¡µæŸ¥è¯¢ä»“库信息列表
        /// </summary>
        /// <param name="input">仓库表查询参数</param>
        /// <returns>(仓库表)实例列表</returns>
        /// <param name="input">仓库信息查询参数</param>
        /// <returns>(仓库信息)实例列表</returns>
        [HttpGet("WmsWarehouse/listNonPage")]
        public async Task<List<WmsWarehouseOutput>> ListNonPageAsync([FromQuery] WmsWarehouseSearchNonPage input)
        {
@@ -117,7 +117,7 @@
        }
         /// <summary>
        /// èŽ·å–ä»“åº“è¡¨
        /// èŽ·å–ä»“åº“ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -128,7 +128,7 @@
        }
        /// <summary>
        /// èŽ·å–ä»“åº“è¡¨åˆ—è¡¨
        /// èŽ·å–ä»“åº“ä¿¡æ¯åˆ—è¡¨
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -141,7 +141,7 @@
        #region å¢žã€åˆ ã€æ”¹
        /// <summary>
        /// å¢žåŠ ä»“åº“è¡¨
        /// å¢žåŠ ä»“åº“ä¿¡æ¯
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -159,7 +159,7 @@
        }
        /// <summary>
        /// åˆ é™¤ä»“库表
        /// åˆ é™¤ä»“库信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -172,7 +172,7 @@
        }
        /// <summary>
        /// æ›´æ–°ä»“库表
        /// æ›´æ–°ä»“库信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
@@ -197,7 +197,7 @@
        #region å¯¼å…¥
        /// <summary>
        /// Excel模板导入仓库表功能
        /// Excel模板导入仓库信息功能
        /// </summary>
        /// <param name="file">Excel模板文件</param>
        /// <returns>导入的记录数</returns>
@@ -302,6 +302,12 @@
                          {
                                addItem.Address = (string)_Address;
                           }
                          if (string.IsNullOrEmpty(_FactoryCode))
                          {
                            throw Oops.Oh($"第{index}行[工厂编号]{_FactoryCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_FactoryCode))
                          {
                                addItem.FactoryCode = (string)_FactoryCode;
@@ -362,12 +368,6 @@
                          {
                                addItem.Position = (string)_Position;
                           }
                          if (string.IsNullOrEmpty(_IsDisabled))
                          {
                            throw Oops.Oh($"第{index}行[是否禁用]{_IsDisabled}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsDisabled))
                          {
                            if(!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))
@@ -414,7 +414,7 @@
        }
        /// <summary>
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½ä»“库表的Excel导入模板
        /// æ ¹æ®ç‰ˆæœ¬ä¸‹è½½ä»“库信息的Excel导入模板
        /// </summary>
        /// <param name="version">模板版本</param>
        /// <returns>下载的模板文件</returns>
@@ -422,7 +422,7 @@
        public IActionResult DownloadExcelTemplate([FromQuery] string version)
        {
            string _path = TemplateConst.EXCEL_TEMPLATEFILE_导入模版路径 + $"\\WmsWarehouse{TemplateConst.EXCEL_TEMPLATEFILE_导入模版名称后缀}.xlsx";
            var fileName = HttpUtility.UrlEncode($"导入模板(仓库表).xlsx", Encoding.GetEncoding("UTF-8"));
            var fileName = HttpUtility.UrlEncode($"导入模板(仓库信息).xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(new FileStream(_path, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
        }
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/MaterialSorting/Dto/MaterialSortingServiceOutput.cs
@@ -1,204 +1,204 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Admin.NET.Core;
//using Microsoft.EntityFrameworkCore;
//using System;
//using System.Collections.Generic;
//using System.ComponentModel.DataAnnotations;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Admin.NET.Core;
namespace Admin.NET.Application
{
    /// <summary>
    /// èŽ·å–æ‰˜ç›˜ç‰©æ–™åˆ†æ‹£å‚æ•°
    /// </summary>
    public class GetSortInfoOutput
    {
        /// <summary>
        /// å®¹å™¨
        /// </summary>
        public WmsContainerDto WmsContainer { get; set; }
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// èŽ·å–æ‰˜ç›˜ç‰©æ–™åˆ†æ‹£å‚æ•°
//    /// </summary>
//    public class GetSortInfoOutput
//    {
//        /// <summary>
//        /// å®¹å™¨
//        /// </summary>
//        public WmsContainerDto WmsContainer { get; set; }
        /// <summary>
        /// åˆ†æ‹£ä¿¡æ¯
        /// </summary>
        public List<WmsSortOrder> WmsSortOrderList { get; set; }
    }
//        /// <summary>
//        /// åˆ†æ‹£ä¿¡æ¯
//        /// </summary>
//        public List<WmsSortOrder> WmsSortOrderList { get; set; }
//    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–åˆ†æ‹£å•
    /// </summary>
    public class SortPdaPageOutput : PageInputBase
    {
        /// <summary>
        /// å•据大类
        /// </summary>
        public long OrderLargeCategory { get; set; }
//    /// <summary>
//    /// åˆ†é¡µèŽ·å–åˆ†æ‹£å•
//    /// </summary>
//    public class SortPdaPageOutput : PageInputBase
//    {
//        /// <summary>
//        /// å•据大类
//        /// </summary>
//        public long OrderLargeCategory { get; set; }
        /// <summary>
        /// å•据小类
        /// </summary>
        public long OrderSubclass { get; set; }
//        /// <summary>
//        /// å•据小类
//        /// </summary>
//        public long OrderSubclass { get; set; }
        /// <summary>
        /// äº‹åŠ¡ç±»åž‹
        /// </summary>
        public string MoveType { get; set; }
//        /// <summary>
//        /// äº‹åŠ¡ç±»åž‹
//        /// </summary>
//        public string MoveType { get; set; }
        /// <summary>
        /// ä¸Šä½ç³»ç»Ÿå•据唯一识别码
        /// </summary>
        public long SOID { get; set; }
//        /// <summary>
//        /// ä¸Šä½ç³»ç»Ÿå•据唯一识别码
//        /// </summary>
//        public long SOID { get; set; }
        /// <summary>
        /// å•据编号
        /// </summary>
        public string NO { get; set; }
//        /// <summary>
//        /// å•据编号
//        /// </summary>
//        public string NO { get; set; }
        /// <summary>
        /// é¢†æ–™å•申请日期
        /// </summary>
        public DateTimeOffset Billdate { get; set; }
//        /// <summary>
//        /// é¢†æ–™å•申请日期
//        /// </summary>
//        public DateTimeOffset Billdate { get; set; }
        /// <summary>
        /// é¢†ç”¨é¡¹ç›®å·
        /// </summary>
        public string WBSElementcode { get; set; }
//        /// <summary>
//        /// é¢†ç”¨é¡¹ç›®å·
//        /// </summary>
//        public string WBSElementcode { get; set; }
        /// <summary>
        /// é¢†æ–™éƒ¨é—¨
        /// </summary>
        public string BenefitingDepartcode { get; set; }
//        /// <summary>
//        /// é¢†æ–™éƒ¨é—¨
//        /// </summary>
//        public string BenefitingDepartcode { get; set; }
        /// <summary>
        /// å—益部门
        /// </summary>
        public string CostCenterID { get; set; }
//        /// <summary>
//        /// å—益部门
//        /// </summary>
//        public string CostCenterID { get; set; }
        /// <summary>
        /// å®¢æˆ·
        /// </summary>
        public string FI_Client_Analysis_H { get; set; }
//        /// <summary>
//        /// å®¢æˆ·
//        /// </summary>
//        public string FI_Client_Analysis_H { get; set; }
        /// <summary>
        /// æ˜¯å¦å…¬å¸é—´äº¤æ˜“
        /// </summary>
        public long IsInnerCompany { get; set; }
//        /// <summary>
//        /// æ˜¯å¦å…¬å¸é—´äº¤æ˜“
//        /// </summary>
//        public long IsInnerCompany { get; set; }
        /// <summary>
        /// é¢†æ–™äºº
        /// </summary>
        public string PickerID { get; set; }
//        /// <summary>
//        /// é¢†æ–™äºº
//        /// </summary>
//        public string PickerID { get; set; }
        /// <summary>
        /// ä»“储中心
        /// </summary>
        public string WarehouseCentername { get; set; }
//        /// <summary>
//        /// ä»“储中心
//        /// </summary>
//        public string WarehouseCentername { get; set; }
        /// <summary>
        /// å…¬å¸
        /// </summary>
        public string Companyname { get; set; }
//        /// <summary>
//        /// å…¬å¸
//        /// </summary>
//        public string Companyname { get; set; }
        /// <summary>
        /// æ–½å·¥é˜Ÿ
        /// </summary>
        public string ConstructionTeamID { get; set; }
//        /// <summary>
//        /// æ–½å·¥é˜Ÿ
//        /// </summary>
//        public string ConstructionTeamID { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        public Admin.NET.Core.OrderStatusEnum OrderStatus { get; set; }
//        /// <summary>
//        /// å•据状态
//        /// </summary>
//        public Admin.NET.Core.OrderStatusEnum OrderStatus { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long Id { get; set; }
//        /// <summary>
//        /// Id主键
//        /// </summary>
//        public long Id { get; set; }
        /// <summary>
        /// æ—¶é—´
        /// </summary>
        public DateTimeOffset? CreatedTime { get; set; }
    }
//        /// <summary>
//        /// æ—¶é—´
//        /// </summary>
//        public DateTimeOffset? CreatedTime { get; set; }
//    }
    /// <summary>
    /// æ ¹æ®å‡ºåº“单获取分拣单
    /// </summary>
    public class SortPdaDetailPageOutput
    {
        /// <summary>
        /// æ¥æºå•号
        /// </summary>
        public string OrderNo { get; set; }
//    /// <summary>
//    /// æ ¹æ®å‡ºåº“单获取分拣单
//    /// </summary>
//    public class SortPdaDetailPageOutput
//    {
//        /// <summary>
//        /// æ¥æºå•号
//        /// </summary>
//        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        public string Materialcode { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç¼–号
//        /// </summary>
//        public string Materialcode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string Materialname { get; set; }
//        /// <summary>
//        /// ç‰©æ–™åç§°
//        /// </summary>
//        public string Materialname { get; set; }
        /// <summary>
        ///
        /// </summary>
        public long OrderDetailID { get; set; }
//        /// <summary>
//        ///
//        /// </summary>
//        public long OrderDetailID { get; set; }
        /// <summary>
        /// åˆ†æ‹£ç»„盘单号
        /// </summary>
        public string ContainerOrderNo { get; set; }
//        /// <summary>
//        /// åˆ†æ‹£ç»„盘单号
//        /// </summary>
//        public string ContainerOrderNo { get; set; }
        /// <summary>
        /// é¡¹ç›®ç¼–号
        /// </summary>
        public string ProjectCode { get; set; }
//        /// <summary>
//        /// é¡¹ç›®ç¼–号
//        /// </summary>
//        public string ProjectCode { get; set; }
        /// <summary>
        /// TA号
        /// </summary>
        public string TACode { get; set; }
//        /// <summary>
//        /// TA号
//        /// </summary>
//        public string TACode { get; set; }
        /// <summary>
        /// åˆ†æ®µå·
        /// </summary>
        public string PartCode { get; set; }
//        /// <summary>
//        /// åˆ†æ®µå·
//        /// </summary>
//        public string PartCode { get; set; }
        /// <summary>
        /// åº“位编码
        /// </summary>
        public string PlaceCode { get; set; }
//        /// <summary>
//        /// åº“位编码
//        /// </summary>
//        public string PlaceCode { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string ContainerCode { get; set; }
//        /// <summary>
//        /// å®¹å™¨ç¼–号
//        /// </summary>
//        public string ContainerCode { get; set; }
        /// <summary>
        /// åˆ†æ‹£æ•°
        /// </summary>
        public decimal SortQuantity { get; set; }
//        /// <summary>
//        /// åˆ†æ‹£æ•°
//        /// </summary>
//        public decimal SortQuantity { get; set; }
        /// <summary>
        /// å®žé™…分拣数
        /// </summary>
        public decimal ActualQuantity { get; set; }
//        /// <summary>
//        /// å®žé™…分拣数
//        /// </summary>
//        public decimal ActualQuantity { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remarks { get; set; }
//        /// <summary>
//        /// å¤‡æ³¨
//        /// </summary>
//        public string Remarks { get; set; }
        /// <summary>
        /// çŠ¶æ€-未分拣_1、分拣完成_2
        /// </summary>
        public Admin.NET.Core.SortStatusEnum SortStatus { get; set; }
//        /// <summary>
//        /// çŠ¶æ€-未分拣_1、分拣完成_2
//        /// </summary>
//        public Admin.NET.Core.SortStatusEnum SortStatus { get; set; }
        /// <summary>
        /// Id主键
        /// </summary>
        public long Id { get; set; }
    }
}
//        /// <summary>
//        /// Id主键
//        /// </summary>
//        public long Id { get; set; }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsInWarehouse/Dto/WmsInWarehouseeOutput.cs
@@ -1,154 +1,154 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Admin.NET.Core;
//using Microsoft.EntityFrameworkCore;
//using System;
//using System.Collections.Generic;
//using System.ComponentModel.DataAnnotations;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Admin.NET.Core;
namespace Admin.NET.Application
{
    /// <summary>
    /// èŽ·å–æ‰˜ç›˜å…¥å‚
    /// </summary>
    public class GetContainerOutput
    {
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [Required(ErrorMessage = "托盘号不能为空")]
        public string ContainerCode { get; set; }
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// èŽ·å–æ‰˜ç›˜å…¥å‚
//    /// </summary>
//    public class GetContainerOutput
//    {
//        /// <summary>
//        /// æ‰˜ç›˜å·
//        /// </summary>
//        [Required(ErrorMessage = "托盘号不能为空")]
//        public string ContainerCode { get; set; }
        /// <summary>
        ///
        /// </summary>
        public WmsContainerDto WmsContainer { get; set; }
//        /// <summary>
//        ///
//        /// </summary>
//        public WmsContainerDto WmsContainer { get; set; }
        /// <summary>
        /// ç‰©æ–™ä¿¡æ¯
        /// </summary>
        public List<WmsMaterialContainer> WmsMaterials { get; set; }
    }
//        /// <summary>
//        /// ç‰©æ–™ä¿¡æ¯
//        /// </summary>
//        public List<WmsMaterialContainer> WmsMaterials { get; set; }
//    }
    /// <summary>
    /// ä»…收货(组盘)成功输出参数
    /// </summary>
    public class GroupDiskOutput
    {
        /// <summary>
        /// æ‰˜ç›˜
        /// </summary>
        public string Containercode { get; set; }
//    /// <summary>
//    /// ä»…收货(组盘)成功输出参数
//    /// </summary>
//    public class GroupDiskOutput
//    {
//        /// <summary>
//        /// æ‰˜ç›˜
//        /// </summary>
//        public string Containercode { get; set; }
        /// <summary>
        /// ç»„盘单据
        /// </summary>
        public string OrderNo { get; set; }
    }
    /// <summary>
    /// ç‰©æ–™è¿”回参数
    /// </summary>
    public class PadGetMaterialOutput
    {
        /// <summary>
        /// Id
        /// </summary>
        public long Id { get; set; }
//        /// <summary>
//        /// ç»„盘单据
//        /// </summary>
//        public string OrderNo { get; set; }
//    }
//    /// <summary>
//    /// ç‰©æ–™è¿”回参数
//    /// </summary>
//    public class PadGetMaterialOutput
//    {
//        /// <summary>
//        /// Id
//        /// </summary>
//        public long Id { get; set; }
        /// <summary>
        /// å•据Id
        /// </summary>
        public long OrderId { get; set; }
//        /// <summary>
//        /// å•据Id
//        /// </summary>
//        public long OrderId { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string Materialname { get; set; }
//        /// <summary>
//        /// ç‰©æ–™åç§°
//        /// </summary>
//        public string Materialname { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        public string Materialcode { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç¼–号
//        /// </summary>
//        public string Materialcode { get; set; }
        /// <summary>
        /// åŸºæœ¬å•位
        /// </summary>
        public string Unit { get; set; }
//        /// <summary>
//        /// åŸºæœ¬å•位
//        /// </summary>
//        public string Unit { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public decimal Qty { get; set; }
//        /// <summary>
//        /// æ•°é‡
//        /// </summary>
//        public decimal Qty { get; set; }
        /// <summary>
        /// å•根长度
        /// </summary>
        public decimal SingleLength { get; set; }
//        /// <summary>
//        /// å•根长度
//        /// </summary>
//        public decimal SingleLength { get; set; }
        /// <summary>
        /// ç†è®ºé‡é‡
        /// </summary>
        public decimal TheoreticalWeight { get; set; }
//        /// <summary>
//        /// ç†è®ºé‡é‡
//        /// </summary>
//        public decimal TheoreticalWeight { get; set; }
        /// <summary>
        /// ä¸å«ç¨Žå•ä»·
        /// </summary>
        public decimal Price { get; set; }
//        /// <summary>
//        /// ä¸å«ç¨Žå•ä»·
//        /// </summary>
//        public decimal Price { get; set; }
        /// <summary>
        /// æˆæœ¬é‡‘额
        /// </summary>
        public decimal SumPrice { get; set; }
//        /// <summary>
//        /// æˆæœ¬é‡‘额
//        /// </summary>
//        public decimal SumPrice { get; set; }
        /// <summary>
        /// é¡¹ç›®ç¼–号
        /// </summary>
        public string ProjectCode { get; set; }
//        /// <summary>
//        /// é¡¹ç›®ç¼–号
//        /// </summary>
//        public string ProjectCode { get; set; }
        /// <summary>
        /// åˆåŒç¼–号
        /// </summary>
        public string ContractCode { get; set; }
//        /// <summary>
//        /// åˆåŒç¼–号
//        /// </summary>
//        public string ContractCode { get; set; }
        /// <summary>
        /// TA号
        /// </summary>
        public string TACode { get; set; }
//        /// <summary>
//        /// TA号
//        /// </summary>
//        public string TACode { get; set; }
        /// <summary>
        /// æŠ¥å…³å“å
        /// </summary>
        public string TradeName { get; set; }
//        /// <summary>
//        /// æŠ¥å…³å“å
//        /// </summary>
//        public string TradeName { get; set; }
        /// <summary>
        /// æŠ¥å…³é¡¹å·
        /// </summary>
        public string ItemNo { get; set; }
//        /// <summary>
//        /// æŠ¥å…³é¡¹å·
//        /// </summary>
//        public string ItemNo { get; set; }
        /// <summary>
        /// æŠ¥å…³å•位
        /// </summary>
        public string CustomsUnitName { get; set; }
//        /// <summary>
//        /// æŠ¥å…³å•位
//        /// </summary>
//        public string CustomsUnitName { get; set; }
        /// <summary>
        /// æŠ¥å…³æ•°é‡
        /// </summary>
        public decimal CustomsNum { get; set; }
//        /// <summary>
//        /// æŠ¥å…³æ•°é‡
//        /// </summary>
//        public decimal CustomsNum { get; set; }
        /// <summary>
        /// æŠ¥å…³é‡‘额
        /// </summary>
        public decimal CustomsPrices { get; set; }
//        /// <summary>
//        /// æŠ¥å…³é‡‘额
//        /// </summary>
//        public decimal CustomsPrices { get; set; }
        /// <summary>
        /// ç‰¹æ®Šè¦æ±‚
        /// </summary>
        public string SpecialNeeds { get; set; }
//        /// <summary>
//        /// ç‰¹æ®Šè¦æ±‚
//        /// </summary>
//        public string SpecialNeeds { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        public OrderDetailsStatusEnum OrderStatus { get; set; }
    }
}
//        /// <summary>
//        /// å•据状态
//        /// </summary>
//        public OrderDetailsStatusEnum OrderStatus { get; set; }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsPda/WmsStockReturnWarehouse/Dto/WmsStockReturnWarehouseOutput.cs
@@ -1,119 +1,119 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Admin.NET.Core;
//using Microsoft.EntityFrameworkCore;
//using System;
//using System.Collections.Generic;
//using System.ComponentModel.DataAnnotations;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Admin.NET.Core;
namespace Admin.NET.Application
{
    /// <summary>
    /// èŽ·å–æ‰˜ç›˜å…¥å‚
    /// </summary>
    public class StockReturnGetContainerOutput
    {
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [Required(ErrorMessage = "托盘号不能为空")]
        public string ContainerCode { get; set; }
//namespace Admin.NET.Application
//{
//    /// <summary>
//    /// èŽ·å–æ‰˜ç›˜å…¥å‚
//    /// </summary>
//    public class StockReturnGetContainerOutput
//    {
//        /// <summary>
//        /// æ‰˜ç›˜å·
//        /// </summary>
//        [Required(ErrorMessage = "托盘号不能为空")]
//        public string ContainerCode { get; set; }
        /// <summary>
        ///
        /// </summary>
        public WmsContainerDto WmsContainer { get; set; }
//        /// <summary>
//        ///
//        /// </summary>
//        public WmsContainerDto WmsContainer { get; set; }
        /// <summary>
        /// ç‰©æ–™ä¿¡æ¯
        /// </summary>
        public List<WmsMaterialContainer> WmsMaterials { get; set; }
    }
//        /// <summary>
//        /// ç‰©æ–™ä¿¡æ¯
//        /// </summary>
//        public List<WmsMaterialContainer> WmsMaterials { get; set; }
//    }
    /// <summary>
    /// ä»…收货(组盘)成功输出参数
    /// </summary>
    public class StockReturnGroupDiskOutput
    {
        /// <summary>
        /// æ‰˜ç›˜
        /// </summary>
        public string Containercode { get; set; }
//    /// <summary>
//    /// ä»…收货(组盘)成功输出参数
//    /// </summary>
//    public class StockReturnGroupDiskOutput
//    {
//        /// <summary>
//        /// æ‰˜ç›˜
//        /// </summary>
//        public string Containercode { get; set; }
        /// <summary>
        /// ç»„盘单据
        /// </summary>
        public string OrderNo { get; set; }
    }
    /// <summary>
    /// ç‰©æ–™è¿”回参数
    /// </summary>
    public class StockReturnPadGetMaterialOutput
    {
        /// <summary>
        /// å•据Id
        /// </summary>
        public long OrderId { get; set; }
//        /// <summary>
//        /// ç»„盘单据
//        /// </summary>
//        public string OrderNo { get; set; }
//    }
//    /// <summary>
//    /// ç‰©æ–™è¿”回参数
//    /// </summary>
//    public class StockReturnPadGetMaterialOutput
//    {
//        /// <summary>
//        /// å•据Id
//        /// </summary>
//        public long OrderId { get; set; }
        /// <summary>
        /// ä¸Šä½ç³»ç»Ÿå•据明细唯一识别码
        /// </summary>
        public long OID { get; set; }
//        /// <summary>
//        /// ä¸Šä½ç³»ç»Ÿå•据明细唯一识别码
//        /// </summary>
//        public long OID { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        public string Materialcode { get; set; }
//        /// <summary>
//        /// ç‰©æ–™ç¼–号
//        /// </summary>
//        public string Materialcode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string Materialname { get; set; }
//        /// <summary>
//        /// ç‰©æ–™åç§°
//        /// </summary>
//        public string Materialname { get; set; }
        /// <summary>
        /// åŸºæœ¬å•位
        /// </summary>
        public string Unit { get; set; }
//        /// <summary>
//        /// åŸºæœ¬å•位
//        /// </summary>
//        public string Unit { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public decimal Qty { get; set; }
//        /// <summary>
//        /// æ•°é‡
//        /// </summary>
//        public decimal Qty { get; set; }
        /// <summary>
        /// å•根长度
        /// </summary>
        public decimal Length { get; set; }
//        /// <summary>
//        /// å•根长度
//        /// </summary>
//        public decimal Length { get; set; }
        /// <summary>
        /// ä»¶æ•°
        /// </summary>
        public decimal Number { get; set; }
//        /// <summary>
//        /// ä»¶æ•°
//        /// </summary>
//        public decimal Number { get; set; }
        /// <summary>
        /// SCM批次号
        /// </summary>
        public string Batchno_SCM { get; set; }
//        /// <summary>
//        /// SCM批次号
//        /// </summary>
//        public string Batchno_SCM { get; set; }
        /// <summary>
        /// WMS批次号
        /// </summary>
        public string Batchno_WMS { get; set; }
//        /// <summary>
//        /// WMS批次号
//        /// </summary>
//        public string Batchno_WMS { get; set; }
        /// <summary>
        /// é¡¹ç›®ç¼–号
        /// </summary>
        public string ProjectCode { get; set; }
//        /// <summary>
//        /// é¡¹ç›®ç¼–号
//        /// </summary>
//        public string ProjectCode { get; set; }
        /// <summary>
        /// TA号
        /// </summary>
        public string TACode { get; set; }
//        /// <summary>
//        /// TA号
//        /// </summary>
//        public string TACode { get; set; }
        /// <summary>
        /// åˆ†æ®µå·
        /// </summary>
        public string PartCode { get; set; }
    }
}
//        /// <summary>
//        /// åˆ†æ®µå·
//        /// </summary>
//        public string PartCode { get; set; }
//    }
//}
iWare_RawMaterialWarehouse_Wms/Admin.NET.Core/Entity/WmsBase/WmsUnit.cs
old mode 100755 new mode 100644
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsAreaImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerPackagingImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsContainerTypeImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsFactoryImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsPlaceImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsUnitImport.xlsx
Binary files differ
iWare_RawMaterialWarehouse_Wms/Admin.NET.Web.Entry/wwwroot/ExcelTemplateFile/WmsWarehouseImport.xlsx
Binary files differ