zs
2025-05-08 eec109948cb1911bf3310ef873b256ba6ee0d77c
出入库单据及详情
已添加76个文件
已修改9个文件
7441 ■■■■■ 文件已修改
HIAWms/hiawms_web/src/config/menu.ts 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/File.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrder.ts 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrderDrawer.tsx 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrderQueryDrawer.tsx 381 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrder.ts 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrderDrawer.ts 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrderQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrder.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrderDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrderQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderDrawer/WmsInOutStockOrderDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderDrawer/WmsInOutStockOrderDrawer.tsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderQueryDrawer/WmsInOutStockOrderQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderQueryDrawer/WmsInOutStockOrderQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/Config.ts 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/WmsInOutStockOrder.module.scss 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/WmsInOutStockOrder.tsx 349 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/WmsInOutStockOrder.module.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/WmsInOutStockOrder.tsx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/config/WmsInOutStockOrder.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/enum.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/index.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/type/type.d.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/File.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetail.ts 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetailDrawer.tsx 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetailQueryDrawer.tsx 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetail.ts 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetailDrawer.ts 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetailQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetail.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetailDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetailQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailDrawer/WmsInOutStockOrderDetailDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailDrawer/WmsInOutStockOrderDetailDrawer.tsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailQueryDrawer/WmsInOutStockOrderDetailQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailQueryDrawer/WmsInOutStockOrderDetailQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/Config.ts 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.module.scss 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.tsx 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/WmsInOutStockOrderDetail.module.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/WmsInOutStockOrderDetail.tsx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/config/WmsInOutStockOrderDetail.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/enum.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/index.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/type/type.d.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Controllers/WmsInOutStockRecordDrawer.tsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Controllers/WmsInOutStockRecordQueryDrawer.tsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Views/Pages/WmsInOutStockRecord/Config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsMaterialContainer/Views/Pages/WmsMaterialContainer/WmsMaterialContainer.tsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsMaterialContainer/Views/WmsMaterialContainer.tsx 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/GetWmsInOutStockOrderInput.cs 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderCreateOrUpdateDtoBase.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderDto.cs 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderExportModel.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrdersImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/GetWmsInOutStockOrderDetailInput.cs 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailCreateOrUpdateDtoBase.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailDto.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailExportModel.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailsImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockOrderAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockOrderDetailAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockOrderAppService.cs 450 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockOrderDetailAppService.cs 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockOrderAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockOrderDetailAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrder/IWmsInOutStockOrderRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrder/WmsInOutStockOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrderDetail/IWmsInOutStockOrderDetailRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockOrderDetailRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockOrderRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockOrderController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockOrderDetailController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsInOutStockOrderDetail导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsInOutStockOrder导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/出入库单据.txt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/出入库单据详情.txt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/Templete/Web/Controllers/EntityModeDrawer模板.txt 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/config/menu.ts
@@ -35,6 +35,20 @@
    "notPage": false
  },
  {
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "icon": "p",
    "notPage": false
  },
  {
    "name": "出入库单据",
    "path": "/information-base/WmsInOutStockOrder",
    "patchName": "WmsInOutStockOrder",
    "icon": "p",
    "notPage": false
  },
  {
    "name": "Wms托盘管理",
    "path": "/information-base/WmsContainer",
    "patchName": "WmsContainer",
@@ -92,6 +106,20 @@
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockOrderDetail": {
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockOrder": {
    "name": "出入库单据",
    "path": "/information-base/WmsInOutStockOrder",
    "patchName": "WmsInOutStockOrder",
    "icon": "p",
    "notPage": false
  },
  "WmsContainer": {
    "name": "Wms托盘管理",
    "path": "/information-base/WmsContainer",
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/File.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import { importFileToService, exportFileToClient } from '@/api/file'
import { ElMessage } from 'element-plus'
import { downloadFile } from '@/utils'
import dayjs from 'dayjs'
export const useFile = () => {
  /**
   * å¯¼å…¥æ–‡ä»¶
   * @param url
   */
  const importFile = async (url: string, file: File) => {
    const formData = new FormData()
    formData.append('file', file)
    await importFileToService(url, formData)
    ElMessage('导入成功')
  }
  /**
   * å¯¼å‡ºæ–‡ä»¶
   * @param url
   */
  const exportFile = async (url: string, params: any, name: string) => {
    const res = await exportFileToClient(url, params)
    downloadFile(res, `${name}_${dayjs().format('YYYYMMDDHHMMss')}.xlsx`)
    ElMessage.success('导出成功')
  }
  return {
    importFile,
    exportFile,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrder.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,275 @@
import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrder } from '../Models/WmsInOutStockOrder'
import { ElMessage } from 'element-plus'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { useFile } from './File'
interface CurrentType {
  row: any
  index: number
}
export const useWmsInOutStockOrder = (props: any, ctx?: any) => {
  const wmsInOutStockOrder = injectModel<WmsInOutStockOrder>('wmsInOutStockOrder')
  const { exportFile } = useFile()
  /**
   * å¤´éƒ¨é…ç½®
   */
  const headers = ref({})
  /**
   * åŠ¨æ€åˆ—é…ç½®
   */
  const wmsInOutStockOrderColumns = ref<Record<string, any>>([])
  /**
   * æœç´¢å€¼
   */
  const search = ref('')
  /**
   * æŽ’序
   */
  const sort = ref(0)
  /**
   * é€‰æ‹©é¡¹
   */
  const selection = ref([])
  /**
   * å½“前选中的行
   */
  const current = ref<any>(null)
  /**
   * æ•°æ®æº
   */
  const dataSource: Ref<any[]> = ref([])
  /**
   * è¡¨æ ¼
   */
  const tableRef = ref()
  const dialogConfig = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
  })
  /**
   * åˆ†é¡µæ•°æ®
   */
  const paginationParams = ref({})
  /**
   * æ‰“开详情
   * @param row
   */
  const openDetail = (row: any) => {
    current.value = row
    dialogConfig.visible = true
    dialogConfig.title = row.name
    dialogConfig.isAdd = false
    sort.value = row.sort
  }
  const contextMenu = [
    {
      label: '展开详情',
      fn: (c: CurrentType) => {
        current.value = null
        sort.value = c.row.sort
        nextTick(() => openDetail(c.row))
      },
      divided: true,
      icon: 'o',
    },
    // {
    //   label: '向上添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 1 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'up',
    // },
    // {
    //   label: '向下添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 2 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'down',
    // },
    // {
    //   label: '创建副本',
    //   fn: async ({ row }: CurrentType) => {
    //     await wmsInOutStockOrder.cloneData([row.id])
    //     ElMessage.success('创建副本成功')
    //     tableRef.value?.getList()
    //   },
    //   divided: true,
    //   icon: 'copy',
    // },
    {
      label: '删除',
      fn: async (c: CurrentType) => {
        const names = selection.value.map((item: { orderNo: string }) => item.orderNo)
        ConfirmBox(
          `是否删除${names.length ? names.join(',') : c.row.orderNo}`
        ).then(async () => {
          const ids = selection.value.map((item: { id: string }) => item.id)
          await wmsInOutStockOrder.deleteWmsInOutStockOrders(ids.length ? ids : [c.row.id])
          ElMessage.success('删除成功')
          tableRef.value.getList()
        })
      },
      icon: 'close',
    },
  ]
  const onCheck = (records: any) => {
    selection.value = records
  }
  const onAddWmsInOutStockOrder = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfig.visible = true
    dialogConfig.isAdd = true
    dialogConfig.title = '添加'
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsInOutStockOrder = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
      tableRef.value?.scrollToRow({
        skip: true,
      })
    } else {
      await tableRef.value?.getList()
    }
  }
  /**
   * è¡Œç‚¹å‡»æ—¶æ›´æ–°current
   */
  const onRowClick = ({ row }: any) => {
    if (dialogConfig.visible && current.value) {
      current.value = row
    }
  }
  /**
   * å¯¼å‡º
   */
  const onExport = (data={}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsInOutStockOrder/export', data, 'wmsInOutStockOrder')
  }
  /**
   * å…³é”®å­—搜索
   */
  const onSearch = () => {
    tableRef.value?.getList({
      Filter: search.value,
    })
  }
  /**
   * é‡ç½®è¡¨æ ¼æ•°æ®
   */
  const reloadList = () => {
    tableRef.value?.getList()
  }
  /**
   * ä¸Šä¼ æˆåŠŸ
   */
  const onSuccess = () => {
    tableRef.value?.getList()
    ElMessage.success('导入成功')
  }
  /**
   * å¤±è´¥
   * @param err
   */
  const onError = (err: any) => {
    try {
      const message = JSON.parse(err.message)
      ElMessage.error(message.msg)
    } catch (error) {
      ElMessage.error('导入失败')
    }
  }
  /**
   * ä¸Šä¼ é’©å­
   */
  const onBeforeUpload = (file: File) => {
    const format = ['xlsx', 'xls', 'csv']
    if (!format.includes(file.name.split('.')[1])) {
      ElMessage.error('导入文件格式不正确,请导入.xlsx/.xls与.csv格式的文件')
      return false
    }
    return true
  }
  onMounted(() => {
    headers.value = {
      Authorization: `Bearer ${sessionStorage.getItem('Token')}`,
      'X-Project': sessionStorage.getItem('X-Project'),
    }
  })
  ctx.expose({
    reloadList,
  })
  return {
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
    search,
    sort,
    wmsInOutStockOrderColumns,
    paginationParams,
    headers,
    onBeforeUpload,
    onError,
    onSuccess,
    openDetail,
    onSearch,
    onExport,
    onRowClick,
    onConfirmWmsInOutStockOrder,
    onCheck,
    onAddWmsInOutStockOrder,
    onAdvancedQuery
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrderDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,387 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrderDrawer } from '../Models/WmsInOutStockOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockOrderDrawer = (props: any, ctx?: any) => {
  const wmsInOutStockOrderDrawer = injectModel<WmsInOutStockOrderDrawer>(
    'wmsInOutStockOrderDrawer'
  )
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const datePicker = (attrs) => {
    return (
      <el-date-picker
        type="date"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min=""
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const dateTimePicker = (attrs) => {
    return (
      <el-date-picker
        type="datetime"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
    {
      label: '单据编号',
      prop: 'orderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入单据编号',
      rules: [{ required: true, message: '单据编号不能为空', trigger: 'blur' }],
    },
    {
      label: '单据状态',
      prop: 'orderStatus',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据状态',
      rules: [{ required: true, message: '单据状态不能为空', trigger: 'blur' }],
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
    },
    {
      label: '物料件号',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料件号',
      rules: [{ required: true, message: '物料件号不能为空', trigger: 'blur' }],
    },
    {
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入型号',
    },
    {
      label: '批次号',
      prop: 'materialBatch',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入批次号',
      rules: [{ required: true, message: '批次号不能为空', trigger: 'blur' }],
    },
    {
      label: '单据类型',
      prop: 'orderType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据类型',
      rules: [{ required: true, message: '单据类型不能为空', trigger: 'blur' }],
    },
    {
      label: '操作类型(枚举值)',
      prop: 'stockType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入操作类型(枚举值)',
      rules: [
        {
          required: true,
          message: '操作类型(枚举值)不能为空',
          trigger: 'blur',
        },
      ],
    },
    {
      label: '单据数量',
      prop: 'materialNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入单据数量',
      rules: [{ required: true, message: '单据数量不能为空', trigger: 'blur' }],
    },
    {
      label: '下发数量',
      prop: 'distributeNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入下发数量',
      rules: [{ required: true, message: '下发数量不能为空', trigger: 'blur' }],
    },
    {
      label: '完成数量',
      prop: 'completeNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入完成数量',
      rules: [{ required: true, message: '完成数量不能为空', trigger: 'blur' }],
    },
    {
      label: '优先级',
      prop: 'priority',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入优先级',
      rules: [{ required: true, message: '优先级不能为空', trigger: 'blur' }],
    },
    {
      label: '关联计划编号',
      prop: 'planNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入关联计划编号',
    },
    {
      label: '操作时间',
      prop: 'operateTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePicker, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入操作时间',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      if (checkIsEqualObject()) {
        visible.value = false
        done && done()
      } else {
        ConfirmBox('是否保存设置?')
          .then(() => {
            onConfirm()
          })
          .catch(() => {
            visible.value = false
            done && done()
          })
      }
    }
  }
  /**
   * ä¿å­˜
   */
  const onConfirm = async () => {
    await formRef.value?.validate()
    const data = {
      orderNo: formData.value.orderNo,
      orderStatus: formData.value.orderStatus,
      materialName: formData.value.materialName,
      materialNo: formData.value.materialNo,
      materialModel: formData.value.materialModel,
      materialBatch: formData.value.materialBatch,
      orderType: formData.value.orderType,
      stockType: formData.value.stockType,
      materialNumber: formData.value.materialNumber,
      distributeNumber: formData.value.distributeNumber,
      completeNumber: formData.value.completeNumber,
      priority: formData.value.priority,
      planNo: formData.value.planNo,
      operateTime: formData.value.operateTime,
      remark: formData.value.remark,
    }
    if (!current.value) {
      await wmsInOutStockOrderDrawer.addWmsInOutStockOrder(data)
    } else {
      const id = current.value.id
      await wmsInOutStockOrderDrawer.updateWmsInOutStockOrder(id, data)
    }
    ElMessage.success('保存成功')
    ctx.emit('confirm')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const orderStatusEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'OrderStatusEnum',
    })
    updateFormItemOptions('orderStatus', orderStatusEnumEnum)
    const orderTypeEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'OrderTypeEnum',
    })
    updateFormItemOptions('orderType', orderTypeEnumEnum)
    const stockTypeEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'StockTypeEnum',
    })
    updateFormItemOptions('stockType', stockTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    if (current.value) {
      const res = await wmsInOutStockOrderDrawer.getWmsInOutStockOrderDetail(
        current.value
      )
      formData.value = {
        orderNo: res.orderNo,
        orderStatus: res.orderStatus,
        materialName: res.materialName,
        materialNo: res.materialNo,
        materialModel: res.materialModel,
        materialBatch: res.materialBatch,
        orderType: res.orderType,
        stockType: res.stockType,
        materialNumber: res.materialNumber,
        distributeNumber: res.distributeNumber,
        completeNumber: res.completeNumber,
        priority: res.priority,
        planNo: res.planNo,
        operateTime: res.operateTime,
        remark: res.remark,
        id: res.id,
      }
      disabled.value = true
      updateCheckData()
    } else {
      formData.value = {}
      disabled.value = false
      updateCheckData()
    }
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirm,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Controllers/WmsInOutStockOrderQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,381 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrderDrawer } from '../Models/WmsInOutStockOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockOrderQueryDrawer = (props: any, ctx?: any) => {
  const wmsInOutStockOrderDrawer = injectModel<WmsInOutStockOrderDrawer>(
    'WmsInOutStockOrderDrawer'
  )
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
    {
      label: '单据编号',
      prop: 'orderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入单据编号',
    },
    {
      label: '单据状态',
      prop: 'orderStatus',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据状态',
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
    },
    {
      label: '物料件号',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料件号',
    },
    {
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入型号',
    },
    {
      label: '批次号',
      prop: 'materialBatch',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入批次号',
    },
    {
      label: '单据类型',
      prop: 'orderType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据类型',
    },
    {
      label: '操作类型',
      prop: 'stockType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入操作类型',
    },
    {
      label: '单据数量',
      prop: 'materialNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入单据数量',
    },
    {
      label: '下发数量',
      prop: 'distributeNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入下发数量',
    },
    {
      label: '完成数量',
      prop: 'completeNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入完成数量',
    },
    {
      label: '优先级',
      prop: 'priority',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入优先级',
    },
    {
      label: '关联计划编号',
      prop: 'planNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入关联计划编号',
    },
    {
      label: '操作时间',
      prop: 'operateTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入操作时间',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
    },
    {
      label: '是否禁用',
      prop: 'isDisabled',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入是否禁用',
      options: [
        { label: '是', value: true },
        { label: '否', value: false },
      ],
    },
    {
      label: '创建时间',
      prop: 'creationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入创建时间',
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      orderNo: formData.value.orderNo || '',
      orderStatus: formData.value.orderStatus || '',
      materialName: formData.value.materialName || '',
      materialNo: formData.value.materialNo || '',
      materialModel: formData.value.materialModel || '',
      materialBatch: formData.value.materialBatch || '',
      orderType: formData.value.orderType || '',
      stockType: formData.value.stockType || '',
      materialNumber: formData.value.materialNumber || '',
      distributeNumber: formData.value.distributeNumber || '',
      completeNumber: formData.value.completeNumber || '',
      priority: formData.value.priority || '',
      planNo: formData.value.planNo || '',
      operateTime: formData.value.operateTime || '',
      remark: formData.value.remark || '',
      isDisabled: formData.value.isDisabled || '',
      creationTime: formData.value.creationTime || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.OrderNo = ''
    formData.value.OrderStatus = ''
    formData.value.MaterialName = ''
    formData.value.MaterialNo = ''
    formData.value.MaterialModel = ''
    formData.value.MaterialBatch = ''
    formData.value.OrderType = ''
    formData.value.StockType = ''
    formData.value.MaterialNumber = ''
    formData.value.DistributeNumber = ''
    formData.value.CompleteNumber = ''
    formData.value.Priority = ''
    formData.value.PlanNo = ''
    formData.value.OperateTime = ''
    formData.value.Remark = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const orderStatusEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'OrderStatusEnum',
    })
    updateFormItemOptions('orderStatus', orderStatusEnumEnum)
    const orderTypeEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'OrderTypeEnum',
    })
    updateFormItemOptions('orderType', orderTypeEnumEnum)
    const stockTypeEnumEnum = await wmsInOutStockOrderDrawer.getWmsEnumData({
      EnumName: 'StockTypeEnum',
    })
    updateFormItemOptions('stockType', stockTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrder.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrder = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrder', data)
}
/**
 * æ‰¹é‡åˆ é™¤
 * @returns
 */
export const deleteWmsInOutStockOrders = (ids: string[]) => {
  return request({
    data: ids,
    url: '/api/v1/HIAWms/wmsInOutStockOrder',
    method: 'delete',
  })
}
/**
 * å…‹éš†
 * @returns
 */
export const cloneData = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrder/clone', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrderDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrder = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrder', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsInOutStockOrder = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsInOutStockOrder/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsInOutStockOrder = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsInOutStockOrder/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/HIAWms/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrderQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrder = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrder', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsInOutStockOrder = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsInOutStockOrder/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsInOutStockOrder = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsInOutStockOrder/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/HIAWms/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrder.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
import { Base } from '@/libs/Base/Base'
import {
  deleteWmsInOutStockOrders,
  addWmsInOutStockOrder,
  cloneData,
} from './Service/WmsInOutStockOrder'
export class WmsInOutStockOrder extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
    })
  }
  onMounted() {}
  /**
   * åˆ é™¤
   * @param id
   * @returns
   */
  async deleteWmsInOutStockOrders(ids: string[]) {
    return deleteWmsInOutStockOrders(ids)
  }
  /**
   * æ·»åŠ æ•°æ®
   * @param data
   * @returns
   */
  addWmsInOutStockOrder(data: Record<string, any>) {
    return addWmsInOutStockOrder(data)
  }
  /**
   * å…‹éš†
   * @param ids
   * @returns
   */
  cloneData(ids: string[]) {
    return cloneData(ids)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrderDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsInOutStockOrder,
  getWmsInOutStockOrder,
  updateWmsInOutStockOrder,
  getWmsEnumData,
} from './Service/WmsInOutStockOrderDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsInOutStockOrderDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsInOutStockOrder: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsInOutStockOrder(data: Record<string, any>) {
    return addWmsInOutStockOrder(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsInOutStockOrder(id: string, data: Record<string, any>) {
    return updateWmsInOutStockOrder(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsInOutStockOrderDetail(current: any, id?: string) {
    return getWmsInOutStockOrder(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Models/WmsInOutStockOrderQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsInOutStockOrder,
  getWmsInOutStockOrder,
  updateWmsInOutStockOrder,
  getWmsEnumData,
} from './Service/WmsInOutStockOrderQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsInOutStockOrderQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsInOutStockOrder: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsInOutStockOrder(data: Record<string, any>) {
    return addWmsInOutStockOrder(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsInOutStockOrder(id: string, data: Record<string, any>) {
    return updateWmsInOutStockOrder(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsInOutStockOrderDetail(current: any, id?: string) {
    return getWmsInOutStockOrder(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderDrawer/WmsInOutStockOrderDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderDrawer/WmsInOutStockOrderDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import { SetupContext, defineComponent } from 'vue'
import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
import styles from './WmsInOutStockOrderDrawer.module.scss'
import { useWmsInOutStockOrderDrawer } from '../../../../Controllers/WmsInOutStockOrderDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirm'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirm,
      onOpen,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsInOutStockOrderDrawer(props, ctx)
    return () => (
      <BaseDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '添加'}
        v-model={visible.value}
        close-on-click-modal={true}
        onConfirm={onConfirm}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderQueryDrawer/WmsInOutStockOrderQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/Dialog/WmsInOutStockOrderQueryDrawer/WmsInOutStockOrderQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsInOutStockOrderQueryDrawer.module.scss'
import { useWmsInOutStockOrderQueryDrawer } from '../../../../Controllers/WmsInOutStockOrderQueryDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    //枚举类型字典
    enumListDict:{
      type: Array as () => Array<{ key: string; value: object }>, // å®šä¹‰æ•°ç»„元素类型
      default: () => [] // é»˜è®¤å€¼
    },
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirmQuery,
      onOpen,
      onReset,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsInOutStockOrderQueryDrawer(props, ctx)
    return () => (
      <BaseQueryDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '高级查询'}
        v-model={visible.value}
        close-on-click-modal={true}
        onReset={onReset}
        onConfirmQueryForBase={onConfirmQuery}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/Config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
export const columns = [
  {
    type: 'seq',
    width: 60,
    title: '序号',
  },
  {
    field: 'orderNo',
    title: '单据编号',
  },
  {
    field: 'orderStatusDesc',
    title: '单据状态',
  },
  {
    field: 'materialName',
    title: '物料名称',
  },
  {
    field: 'materialNo',
    title: '物料件号',
  },
  {
    field: 'materialModel',
    title: '型号',
  },
  {
    field: 'materialBatch',
    title: '批次号',
  },
  {
    field: 'orderTypeDesc',
    title: '单据类型',
  },
  {
    field: 'stockTypeDesc',
    title: '操作类型',
  },
  {
    field: 'materialNumber',
    title: '单据数量',
  },
  {
    field: 'distributeNumber',
    title: '下发数量',
  },
  {
    field: 'completeNumber',
    title: '完成数量',
  },
  {
    field: 'priority',
    title: '优先级',
  },
  {
    field: 'planNo',
    title: '关联计划',
  },
  {
    field: 'operateTime',
    title: '操作时间',
    width: 180,
  },
  {
    field: 'remark',
    title: '备注',
  },
  // {
  //   field: 'sort',
  //   title: '排序',
  // },
  {
    field: 'creationTime',
    title: '创建时间',
    width: 180,
  },
  // {
  //   field: 'deletionTime',
  //   title: '',
  // },
]
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/WmsInOutStockOrder.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
.wmsInOutStockOrderContent {
  width: 100%;
  height: 100%;
  .wmsInOutStockOrderList {
    width: 100%;
    height: calc(100% - 70px);
  }
  .headerContent {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 43px;
  }
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-end;
    align-items: center;
  }
}
.tagBox {
  width: auto;
  min-width: 80px;
  height: 24px;
  background: #ffffff;
  border-radius: 19px 19px 19px 19px;
  opacity: 1;
  border: 1px dashed #bcc4cc;
  width: 50px;
  height: 20px;
  font-size: 14px;
  font-family: PingFang SC, PingFang SC;
  font-weight: 400;
  color: #5a84ff;
  display: flex;
  justify-content: center;
  align-items: center;
  // cursor: pointer;
}
.group {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.groupTable {
  width: 100%;
}
.overBox {
  width: 100%;
  height: calc(100% - 20px);
  overflow: auto;
  :global(.cs-collapse-item__header) {
    background-color: #f1f1f1;
    padding: 0 20px;
    height: 35px;
    font-size: 16px;
    font-family: PingFang SC, PingFang SC;
    font-weight: 500;
  }
  :global(.cs-collapse-item__content) {
    padding-bottom: 0px;
  }
}
.groupHeader {
  width: 100%;
  height: 30px;
  background: #ccc;
}
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
  margin-bottom: 0px;
  border-radius: 4px;
  .el-form-item {
    margin-right: 20px;
    margin-bottom: 0;
    // ç»Ÿä¸€è¾“入框和选择框的宽度
    .el-input, .el-select {
      width: 200px; // è®¾ç½®ç»Ÿä¸€çš„宽度
    }
    // é€‰æ‹©æ¡†å†…部输入框样式
    .el-select .el-input__wrapper {
      height: 32px; // ä¸Žè¾“入框高度一致
      padding: 1px 11px; // ä¸Žè¾“入框内边距一致
    }
    // æ—¥æœŸé€‰æ‹©å™¨å®½åº¦
    .el-date-editor {
      width: 220px;
    }
  }
}
// å¦‚果需要更精确的控制,可以单独设置
.formItem {
  width: 200px;
  &.el-input, &.el-select {
    width: 100%;
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/Pages/WmsInOutStockOrder/WmsInOutStockOrder.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,349 @@
import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
import type { Ref } from 'vue'
import BaseTable from '@/components/Table/Table'
import styles from './WmsInOutStockOrder.module.scss'
import { useWmsInOutStockOrder } from '../../../Controllers/WmsInOutStockOrder'
import IconButton from '@/components/IconButton/IconButton'
import WmsInOutStockOrderDrawer from '../Dialog/WmsInOutStockOrderDrawer/WmsInOutStockOrderDrawer'
import WmsInOutStockOrderQueryDrawer from '../Dialog/WmsInOutStockOrderQueryDrawer/WmsInOutStockOrderQueryDrawer'
import Search from '@/components/Search/Search'
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import { getWmsEnumData } from '@/widgets/WmsInOutStockOrder/Models/Service/WmsInOutStockOrderDrawer'
import dayjs from 'dayjs'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
interface RenderTableType {
  url?: string
  dataSource: Ref<any[]>
  isDrag?: boolean
  isChecked?: boolean
  isHidePagination?: boolean
  params?: Record<string, any>
  autoHeight?: boolean
}
export default defineComponent({
  name: 'WmsInOutStockOrder',
  directives: {
    permission: vPermission,
  },
  setup(props, ctx) {
    const {
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
      sort,
      headers,
      onError,
      onSearch,
      onRowClick,
      onConfirmWmsInOutStockOrder,
      onCheck,
      onAddWmsInOutStockOrder,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsInOutStockOrder(props, ctx)
    //定义高级查询引用
    const wmsInOutStockOrderQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref([
      'OrderNo',
      'MaterialNo',
      'MaterialBatch',
    ])
    const searchFormInputAttrs_Placeholder = ref('请输入单据号/物料编号/批次')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      orderStatus: [] as Array<{ label: string; value: any }>,
      orderType: [] as Array<{ label: string; value: any }>,
      stockType: [] as Array<{ label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        const orderStatusEnumData = await getWmsEnumData({
          EnumName: 'OrderStatusEnum',
        })
        enumOptions.orderStatus = orderStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const orderTypeEnumData = await getWmsEnumData({
          EnumName: 'OrderTypeEnum',
        })
        enumOptions.orderType = orderTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const stockTypeEnumData = await getWmsEnumData({
          EnumName: 'StockTypeEnum',
        })
        enumOptions.stockType = stockTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
      } catch (error) {
        console.error('获取枚举数据失败:', error)
      }
    }
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
    })
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
      tableRef.value.getList(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(高级查询中的按钮【查询】)
    const handleQuery = async (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      commonSaveCurHighQueryData(filteredData)
      tableRef.value.getList(filteredData)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢é‡ç½®
    const resetQuery = () => {
      queryForm.value.searchVal = ''
      queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value
    }
    //新版的导出方法
    const handleExport = () => {
      onExport(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢å¼¹å‡ºæ¡†å…³é—­æ–¹æ³•
    const closeQuery = (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      console.log('closeQuery方法')
      console.log(filteredData)
      commonSaveCurHighQueryData(filteredData)
    }
    //保存查询值
    const commonSaveCurHighQueryData = (filteredData = {}) => {
      _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    }
    //获取高级查询弹出框的查询值
    const commonGetHighQueryForm = (extraParams = {}) => {
      // è¿‡æ»¤æŽ‰ undefined çš„值
      let filteredData = Object.assign(
        {},
        ...Object.entries(extraParams).map(([key, value]) =>
          value !== undefined ? { [key]: value } : {}
        )
      )
      //组合模糊查询
      filteredData.searchVal = queryForm.value.searchVal
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
     * @returns è¡¨æ ¼
     */
    const RenderBaseTable = (props: RenderTableType) => {
      const {
        url,
        dataSource,
        isDrag,
        isChecked,
        isHidePagination,
        params,
        autoHeight,
      } = props
      return (
        <div
          class={{
            [styles.wmsInOutStockOrderList]: true,
          }}
        >
          <BaseTable
            ref={tableRef}
            url={url}
            sortUrlTpl="/api/v1/HIAWms/wmsInOutStockOrder/{id}/adjustsort/{sort}"
            v-model:dataSource={dataSource.value}
            columns={columns}
            contextMenu={contextMenu}
            params={params}
            isDrag={isDrag}
            isChecked={isChecked}
            autoHeight={autoHeight}
            onCheck={onCheck}
            onRowClick={onRowClick}
            isHidePagination={isHidePagination}
            pageSize={20}
            v-slots={{
              operateTime: ({ row }: any) => {
                return (
                  <div>
                    {row.operateTime != null
                      ? dayjs(row.operateTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              creationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.creationTime != null
                      ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
                    onClick={() => openDetail(row)}
                    text={<span style="color:#5a84ff">详情</span>}
                    icon="scale"
                    tip={row?.name}
                    hover
                  >
                    {row?.name}
                  </TdButton>
                ) : (
                  '-'
                )
              },
            }}
          ></BaseTable>
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsInOutStockOrderContent}>
          {/* æ·»åŠ /编辑 */}
          <WmsInOutStockOrderDrawer
            v-model={dialogConfig.visible}
            title={dialogConfig.title}
            row={current.value}
            sort={sort.value}
            onConfirm={onConfirmWmsInOutStockOrder}
          />
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsInOutStockOrderQueryDrawer
            ref="wmsInOutStockOrderQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
            sort={sort.value}
            onConfirmQuery={handleQuery}
            onRestQuery={resetQuery}
            onClose={closeQuery}
          />
          <div class={styles.headerContent}>
            <div class={styles.header}>
              <IconButton
                v-permission="wmsInOutStockOrder-add"
                icon="add-p"
                onClick={onAddWmsInOutStockOrder}
                type="primary"
              >
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsInOutStockOrder-import"
                name="file"
                accept=".xlsx,.xls,.csv"
                show-file-list={false}
                onError={onError}
                onSuccess={onSuccess}
                before-upload={onBeforeUpload}
                headers={headers.value}
                action="/api/v1/HIAWms/wmsInOutStockOrder/import"
              >
                <IconButton icon="in">导入</IconButton>
              </el-upload>
              <IconButton
                v-permission="wmsInOutStockOrder-output"
                icon="out"
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <ElInput
                  v-model={queryForm.value.searchVal}
                  placeholder={searchFormInputAttrs_Placeholder.value}
                  clearable
                  class={styles.formItem}
                />
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsInOutStockOrder-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsInOutStockOrder/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
          />
        </div>
      )
    }
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/WmsInOutStockOrder.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
.WmsInOutStockOrder {
  background-color: #fff;
  border-radius: 5px 5px 0 0;
  width: 100%;
  height: 100%;
  border: 1px solid #dbdbdb;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/WmsInOutStockOrder.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
import {
  Component,
  DefineComponent,
  defineComponent,
  markRaw,
  ref,
  SetupContext,
  onMounted,
} from 'vue'
import styles from './WmsInOutStockOrder.module.scss'
import Tab from '@/components/Tab/Tab'
import { useProvideModels } from '@/libs/Provider/app'
import { usePermission } from '@/libs/Permission/Permission'
import { permissionCodes } from '../enum'
import { ModuleType, TabItem } from '../type/Type'
import { getEntityNames } from '@/hooks/hook'
import TabPane from '@/components/Tab/TabPane'
const Models: ModuleType = import.meta.glob('./config/*.json', {
  eager: true,
})
const entityNames = getEntityNames(Models)
const nameToLabelMap = [{ name: 'WmsInOutStockOrder', label: '出入库单据' }]
export default defineComponent({
  name: 'WmsInOutStockOrder',
  setup(props, ctx: SetupContext) {
    useProvideModels()
    usePermission(props, permissionCodes)
    const rf = ref<{
      [key: string]: any
    }>({})
    const tabData = ref<TabItem[]>([])
    const onTabChange = (v: string) => {
      rf.value?.[v]?.reloadList()
    }
    const initTableData = async () => {
      for (const i in entityNames) {
        const name = entityNames[i]
        const module = await import(`./Pages/${name}/${name}.tsx`)
        const WmsInOutStockOrder = markRaw(module.default)
        const foundLabel =
          nameToLabelMap.find((item) => item.name === name)?.label || name
        tabData.value.push({
          label: foundLabel,
          name,
          component: WmsInOutStockOrder,
        })
      }
    }
    initTableData()
    return () => {
      return (
        <div class={styles.WmsInOutStockOrder}>
          <Tab data={tabData.value} type="list" onTab={onTabChange}>
            {tabData.value.map((widgetInfo) => {
              const Widget: any = widgetInfo.component
              return (
                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
                  <Widget
                    ref={(r: any) => (rf.value['WmsInOutStockOrder'] = r)}
                  ></Widget>
                </TabPane>
              )
            })}
          </Tab>
        </div>
      )
    }
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/Views/config/WmsInOutStockOrder.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
  "name": "WmsInOutStockOrder"
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/enum.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
export interface TabType {
  label: string
  name: string
  columns?: any[]
  data?: any[]
  isFooter: boolean
  [key: string]: any
}
export const permissionCodes = {
  'wmsInOutStockOrder-list': '列表-列表',
  'wmsInOutStockOrder-add': '列表-添加',
  'wmsInOutStockOrder-import': '列表-导入',
  'wmsInOutStockOrder-output': '列表-输出',
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
import WmsInOutStockOrder from './Views/WmsInOutStockOrder'
import Setting from '@/components/Setting/Setting'
import { provider } from '@/provider/index'
import p from '../../assets/svg/p.svg'
export default {
  is: 'WmsInOutStockOrder',
  name: '出入库单据',
  category: 'run',
  icon: p,
  authorizationRequired: false,
  canvasView: provider(WmsInOutStockOrder),
  settingsView: Setting,
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrder/type/type.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
import { Component } from 'vue'
export interface DataItemType {
  id?: string
  name?: string
  code?: string
  description?: string
  label?: string
  value?: string | number
}
export interface WmsInOutStockOrderBaseType {
  id?: string
  name?: string
  code?: string
  value?: number
  description?: string
  options?: Array<DataItemType>
  abilityValue?: number | string
  data?: DataItemType
  defaultValue?: string | number
  flow: string
}
export interface FlowDefinitionType {
  id?: string
  name?: string
  code?: string
  description?: string
}
export type ModuleType = Record<
  string,
  {
    default: Record<string, string>
    name: string
  }
>
export interface TabItem {
  name: string
  label: string
  component: Component
  hidden?: boolean
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/File.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
import { importFileToService, exportFileToClient } from '@/api/file'
import { ElMessage } from 'element-plus'
import { downloadFile } from '@/utils'
import dayjs from 'dayjs'
export const useFile = () => {
  /**
   * å¯¼å…¥æ–‡ä»¶
   * @param url
   */
  const importFile = async (url: string, file: File) => {
    const formData = new FormData()
    formData.append('file', file)
    await importFileToService(url, formData)
    ElMessage('导入成功')
  }
  /**
   * å¯¼å‡ºæ–‡ä»¶
   * @param url
   */
  const exportFile = async (url: string, params: any, name: string) => {
    const res = await exportFileToClient(url, params)
    downloadFile(res, `${name}_${dayjs().format('YYYYMMDDHHMMss')}.xlsx`)
    ElMessage.success('导出成功')
  }
  return {
    importFile,
    exportFile,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetail.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,275 @@
import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrderDetail } from '../Models/WmsInOutStockOrderDetail'
import { ElMessage } from 'element-plus'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { useFile } from './File'
interface CurrentType {
  row: any
  index: number
}
export const useWmsInOutStockOrderDetail = (props: any, ctx?: any) => {
  const wmsInOutStockOrderDetail = injectModel<WmsInOutStockOrderDetail>('wmsInOutStockOrderDetail')
  const { exportFile } = useFile()
  /**
   * å¤´éƒ¨é…ç½®
   */
  const headers = ref({})
  /**
   * åŠ¨æ€åˆ—é…ç½®
   */
  const wmsInOutStockOrderDetailColumns = ref<Record<string, any>>([])
  /**
   * æœç´¢å€¼
   */
  const search = ref('')
  /**
   * æŽ’序
   */
  const sort = ref(0)
  /**
   * é€‰æ‹©é¡¹
   */
  const selection = ref([])
  /**
   * å½“前选中的行
   */
  const current = ref<any>(null)
  /**
   * æ•°æ®æº
   */
  const dataSource: Ref<any[]> = ref([])
  /**
   * è¡¨æ ¼
   */
  const tableRef = ref()
  const dialogConfig = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
  })
  /**
   * åˆ†é¡µæ•°æ®
   */
  const paginationParams = ref({})
  /**
   * æ‰“开详情
   * @param row
   */
  const openDetail = (row: any) => {
    current.value = row
    dialogConfig.visible = true
    dialogConfig.title = row.name
    dialogConfig.isAdd = false
    sort.value = row.sort
  }
  const contextMenu = [
    {
      label: '展开详情',
      fn: (c: CurrentType) => {
        current.value = null
        sort.value = c.row.sort
        nextTick(() => openDetail(c.row))
      },
      divided: true,
      icon: 'o',
    },
    // {
    //   label: '向上添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 1 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'up',
    // },
    // {
    //   label: '向下添加',
    //   fn: (c: CurrentType, pageNum: number) => {
    //     current.value = null
    //     sort.value = c.index + 2 + (pageNum - 1) * 50
    //     dialogConfig.visible = true
    //     dialogConfig.title = '添加'
    //     dialogConfig.isAdd = false
    //   },
    //   divided: true,
    //   icon: 'down',
    // },
    // {
    //   label: '创建副本',
    //   fn: async ({ row }: CurrentType) => {
    //     await wmsInOutStockOrderDetail.cloneData([row.id])
    //     ElMessage.success('创建副本成功')
    //     tableRef.value?.getList()
    //   },
    //   divided: true,
    //   icon: 'copy',
    // },
    {
      label: '删除',
      fn: async (c: CurrentType) => {
        const names = selection.value.map((item: { materialId: string }) => item.materialId)
        ConfirmBox(
          `是否删除${names.length ? names.join(',') : c.row.materialId}`
        ).then(async () => {
          const ids = selection.value.map((item: { id: string }) => item.id)
          await wmsInOutStockOrderDetail.deleteWmsInOutStockOrderDetails(ids.length ? ids : [c.row.id])
          ElMessage.success('删除成功')
          tableRef.value.getList()
        })
      },
      icon: 'close',
    },
  ]
  const onCheck = (records: any) => {
    selection.value = records
  }
  const onAddWmsInOutStockOrderDetail = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfig.visible = true
    dialogConfig.isAdd = true
    dialogConfig.title = '添加'
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsInOutStockOrderDetail = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
      tableRef.value?.scrollToRow({
        skip: true,
      })
    } else {
      await tableRef.value?.getList()
    }
  }
  /**
   * è¡Œç‚¹å‡»æ—¶æ›´æ–°current
   */
  const onRowClick = ({ row }: any) => {
    if (dialogConfig.visible && current.value) {
      current.value = row
    }
  }
  /**
   * å¯¼å‡º
   */
  const onExport = (data={}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsInOutStockOrderDetail/export', data, 'wmsInOutStockOrderDetail')
  }
  /**
   * å…³é”®å­—搜索
   */
  const onSearch = () => {
    tableRef.value?.getList({
      Filter: search.value,
    })
  }
  /**
   * é‡ç½®è¡¨æ ¼æ•°æ®
   */
  const reloadList = () => {
    tableRef.value?.getList()
  }
  /**
   * ä¸Šä¼ æˆåŠŸ
   */
  const onSuccess = () => {
    tableRef.value?.getList()
    ElMessage.success('导入成功')
  }
  /**
   * å¤±è´¥
   * @param err
   */
  const onError = (err: any) => {
    try {
      const message = JSON.parse(err.message)
      ElMessage.error(message.msg)
    } catch (error) {
      ElMessage.error('导入失败')
    }
  }
  /**
   * ä¸Šä¼ é’©å­
   */
  const onBeforeUpload = (file: File) => {
    const format = ['xlsx', 'xls', 'csv']
    if (!format.includes(file.name.split('.')[1])) {
      ElMessage.error('导入文件格式不正确,请导入.xlsx/.xls与.csv格式的文件')
      return false
    }
    return true
  }
  onMounted(() => {
    headers.value = {
      Authorization: `Bearer ${sessionStorage.getItem('Token')}`,
      'X-Project': sessionStorage.getItem('X-Project'),
    }
  })
  ctx.expose({
    reloadList,
  })
  return {
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
    search,
    sort,
    wmsInOutStockOrderDetailColumns,
    paginationParams,
    headers,
    onBeforeUpload,
    onError,
    onSuccess,
    openDetail,
    onSearch,
    onExport,
    onRowClick,
    onConfirmWmsInOutStockOrderDetail,
    onCheck,
    onAddWmsInOutStockOrderDetail,
    onAdvancedQuery
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetailDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,293 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrderDetailDrawer } from '../Models/WmsInOutStockOrderDetailDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockOrderDetailDrawer = (props: any, ctx?: any) => {
  const wmsInOutStockOrderDetailDrawer =
    injectModel<WmsInOutStockOrderDetailDrawer>(
      'wmsInOutStockOrderDetailDrawer'
    )
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const datePicker = (attrs) => {
    return (
      <el-date-picker
        type="date"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const dateTimePicker = (attrs) => {
    return (
      <el-date-picker
        type="datetime"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
    {
      label: '单据编号',
      prop: 'orderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入单据编号',
      rules: [{ required: true, message: '单据编号不能为空', trigger: 'blur' }],
    },
    {
      label: '物料唯一码',
      prop: 'materialId',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料唯一码',
      rules: [
        { required: true, message: '物料唯一码不能为空', trigger: 'blur' },
      ],
    },
    {
      label: '单据类型',
      prop: 'orderType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据类型',
      rules: [
        {
          required: true,
          message: '单据类型不能为空',
          trigger: 'blur',
        },
      ],
    },
    {
      label: '物料件号',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料件号',
      rules: [{ required: true, message: '物料件号不能为空', trigger: 'blur' }],
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
    },
    {
      label: '容器编号',
      prop: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入容器编号',
    },
    {
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入型号',
    },
    {
      label: '物料批次',
      prop: 'materialBatch',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入物料批次',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      if (checkIsEqualObject()) {
        visible.value = false
        done && done()
      } else {
        ConfirmBox('是否保存设置?')
          .then(() => {
            onConfirm()
          })
          .catch(() => {
            visible.value = false
            done && done()
          })
      }
    }
  }
  /**
   * ä¿å­˜
   */
  const onConfirm = async () => {
    await formRef.value?.validate()
    const data = {
      orderNo: formData.value.orderNo,
      materialId: formData.value.materialId,
      orderType: formData.value.orderType,
      materialNo: formData.value.materialNo,
      materialName: formData.value.materialName,
      containerNo: formData.value.containerNo,
      materialModel: formData.value.materialModel,
      materialBatch: formData.value.materialBatch,
      remark: formData.value.remark,
    }
    if (!current.value) {
      await wmsInOutStockOrderDetailDrawer.addWmsInOutStockOrderDetail(data)
    } else {
      const id = current.value.id
      await wmsInOutStockOrderDetailDrawer.updateWmsInOutStockOrderDetail(
        id,
        data
      )
    }
    ElMessage.success('保存成功')
    ctx.emit('confirm')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const orderTypeEnumEnum =
      await wmsInOutStockOrderDetailDrawer.getWmsEnumData({
        EnumName: 'OrderTypeEnum',
      })
    updateFormItemOptions('orderType', orderTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    if (current.value) {
      const res =
        await wmsInOutStockOrderDetailDrawer.getWmsInOutStockOrderDetailDetail(
          current.value
        )
      formData.value = {
        orderNo: res.orderNo,
        materialId: res.materialId,
        orderType: res.orderType,
        materialNo: res.materialNo,
        materialName: res.materialName,
        containerNo: res.containerNo,
        materialModel: res.materialModel,
        materialBatch: res.materialBatch,
        remark: res.remark,
        id: res.id,
      }
      disabled.value = true
      updateCheckData()
    } else {
      formData.value = {}
      disabled.value = false
      updateCheckData()
    }
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirm,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Controllers/WmsInOutStockOrderDetailQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,279 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockOrderDetailDrawer } from '../Models/WmsInOutStockOrderDetailDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockOrderDetailQueryDrawer = (
  props: any,
  ctx?: any
) => {
  const wmsInOutStockOrderDetailDrawer =
    injectModel<WmsInOutStockOrderDetailDrawer>(
      'WmsInOutStockOrderDetailDrawer'
    )
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  const formItems = reactive([
    {
      label: '单据编号',
      prop: 'orderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入单据编号',
    },
    {
      label: '物料唯一码',
      prop: 'materialId',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料唯一码',
    },
    {
      label: '单据类型',
      prop: 'orderType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入单据类型',
    },
    {
      label: '物料件号',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料件号',
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
    },
    {
      label: '容器编号',
      prop: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入容器编号',
    },
    {
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入型号',
    },
    {
      label: '物料批次',
      prop: 'materialBatch',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入物料批次',
    },
    {
      label: '创建时间',
      prop: 'creationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入是否禁用',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      orderNo: formData.value.orderNo || '',
      materialId: formData.value.materialId || '',
      orderType: formData.value.orderType || '',
      materialNo: formData.value.materialNo || '',
      materialName: formData.value.materialName || '',
      containerNo: formData.value.containerNo || '',
      materialModel: formData.value.materialModel || '',
      materialBatch: formData.value.materialBatch || '',
      creationTime: formData.value.creationTime || '',
      isDisabled: formData.value.isDisabled || '',
      remark: formData.value.remark || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.OrderNo = ''
    formData.value.MaterialId = ''
    formData.value.OrderType = ''
    formData.value.MaterialNo = ''
    formData.value.MaterialName = ''
    formData.value.ContainerNo = ''
    formData.value.MaterialModel = ''
    formData.value.MaterialBatch = ''
    formData.value.Remark = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const orderTypeEnumEnum =
      await wmsInOutStockOrderDetailDrawer.getWmsEnumData({
        EnumName: 'OrderTypeEnum',
      })
    updateFormItemOptions('orderType', orderTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetail.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrderDetail = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrderDetail', data)
}
/**
 * æ‰¹é‡åˆ é™¤
 * @returns
 */
export const deleteWmsInOutStockOrderDetails = (ids: string[]) => {
  return request({
    data: ids,
    url: '/api/v1/HIAWms/wmsInOutStockOrderDetail',
    method: 'delete',
  })
}
/**
 * å…‹éš†
 * @returns
 */
export const cloneData = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrderDetail/clone', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetailDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrderDetail = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrderDetail', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsInOutStockOrderDetail = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsInOutStockOrderDetail/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsInOutStockOrderDetail = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsInOutStockOrderDetail/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/HIAWms/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetailQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsInOutStockOrderDetail = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsInOutStockOrderDetail', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsInOutStockOrderDetail = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsInOutStockOrderDetail/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsInOutStockOrderDetail = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsInOutStockOrderDetail/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/HIAWms/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetail.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
import { Base } from '@/libs/Base/Base'
import {
  deleteWmsInOutStockOrderDetails,
  addWmsInOutStockOrderDetail,
  cloneData,
} from './Service/WmsInOutStockOrderDetail'
export class WmsInOutStockOrderDetail extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
    })
  }
  onMounted() {}
  /**
   * åˆ é™¤
   * @param id
   * @returns
   */
  async deleteWmsInOutStockOrderDetails(ids: string[]) {
    return deleteWmsInOutStockOrderDetails(ids)
  }
  /**
   * æ·»åŠ æ•°æ®
   * @param data
   * @returns
   */
  addWmsInOutStockOrderDetail(data: Record<string, any>) {
    return addWmsInOutStockOrderDetail(data)
  }
  /**
   * å…‹éš†
   * @param ids
   * @returns
   */
  cloneData(ids: string[]) {
    return cloneData(ids)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetailDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsInOutStockOrderDetail,
  getWmsInOutStockOrderDetail,
  updateWmsInOutStockOrderDetail,
  getWmsEnumData,
} from './Service/WmsInOutStockOrderDetailDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsInOutStockOrderDetailDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsInOutStockOrderDetail: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsInOutStockOrderDetail(data: Record<string, any>) {
    return addWmsInOutStockOrderDetail(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsInOutStockOrderDetail(id: string, data: Record<string, any>) {
    return updateWmsInOutStockOrderDetail(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsInOutStockOrderDetailDetail(current: any, id?: string) {
    return getWmsInOutStockOrderDetail(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Models/WmsInOutStockOrderDetailQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsInOutStockOrderDetail,
  getWmsInOutStockOrderDetail,
  updateWmsInOutStockOrderDetail,
  getWmsEnumData,
} from './Service/WmsInOutStockOrderDetailQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsInOutStockOrderDetailQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsInOutStockOrderDetail: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsInOutStockOrderDetail(data: Record<string, any>) {
    return addWmsInOutStockOrderDetail(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsInOutStockOrderDetail(id: string, data: Record<string, any>) {
    return updateWmsInOutStockOrderDetail(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsInOutStockOrderDetailDetail(current: any, id?: string) {
    return getWmsInOutStockOrderDetail(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailDrawer/WmsInOutStockOrderDetailDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailDrawer/WmsInOutStockOrderDetailDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
import { SetupContext, defineComponent } from 'vue'
import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
import styles from './WmsInOutStockOrderDetailDrawer.module.scss'
import { useWmsInOutStockOrderDetailDrawer } from '../../../../Controllers/WmsInOutStockOrderDetailDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirm'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirm,
      onOpen,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsInOutStockOrderDetailDrawer(props, ctx)
    return () => (
      <BaseDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '添加'}
        v-model={visible.value}
        close-on-click-modal={true}
        onConfirm={onConfirm}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailQueryDrawer/WmsInOutStockOrderDetailQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/Dialog/WmsInOutStockOrderDetailQueryDrawer/WmsInOutStockOrderDetailQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsInOutStockOrderDetailQueryDrawer.module.scss'
import { useWmsInOutStockOrderDetailQueryDrawer } from '../../../../Controllers/WmsInOutStockOrderDetailQueryDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
export default defineComponent<{
  [key: string]: any
}>({
  name: '弹窗',
  props: {
    //枚举类型字典
    enumListDict:{
      type: Array as () => Array<{ key: string; value: object }>, // å®šä¹‰æ•°ç»„元素类型
      default: () => [] // é»˜è®¤å€¼
    },
    modelValue: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: '',
    },
    row: {
      type: Object,
    },
    sort: {
      type: Number,
      default: 0,
    },
  },
  emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'],
  setup(props: Record<string, any>, ctx: SetupContext) {
    const {
      onClose,
      onConfirmQuery,
      onOpen,
      onReset,
      formRef,
      visible,
      formItems,
      formData,
    } = useWmsInOutStockOrderDetailQueryDrawer(props, ctx)
    return () => (
      <BaseQueryDrawer
        class={styles.drawer}
        size="800px"
        title={props.title || '高级查询'}
        v-model={visible.value}
        close-on-click-modal={true}
        onReset={onReset}
        onConfirmQueryForBase={onConfirmQuery}
        onOpen={onOpen}
        before-close={onClose}
        onClose={onClose}
      >
        <DyForm
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyForm>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/Config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
export const columns = [
  {
    type: 'seq',
    width: 60,
    title: '序号',
  },
  {
    field: 'orderNo',
    title: '单据编号',
  },
  {
    field: 'materialId',
    title: '物料唯一码',
  },
  {
    field: 'orderTypeDesc',
    title: '单据类型',
  },
  {
    field: 'materialNo',
    title: '物料件号',
  },
  {
    field: 'materialName',
    title: '物料名称',
  },
  {
    field: 'containerNo',
    title: '容器编号',
  },
  {
    field: 'materialModel',
    title: '型号',
  },
  {
    field: 'materialBatch',
    title: '物料批次',
  },
  // {
  //   field: 'creationTime',
  //   title: '是否禁用',
  // },
  // {
  //   field: 'deletionTime',
  //   title: '',
  // },
  {
    field: 'remark',
    title: '备注',
  },
  // {
  //   field: 'sort',
  //   title: '排序',
  // },
]
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
.wmsInOutStockOrderDetailContent {
  width: 100%;
  height: 100%;
  .wmsInOutStockOrderDetailList {
    width: 100%;
    height: calc(100% - 70px);
  }
  .headerContent {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 43px;
  }
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-end;
    align-items: center;
  }
}
.tagBox {
  width: auto;
  min-width: 80px;
  height: 24px;
  background: #ffffff;
  border-radius: 19px 19px 19px 19px;
  opacity: 1;
  border: 1px dashed #bcc4cc;
  width: 50px;
  height: 20px;
  font-size: 14px;
  font-family: PingFang SC, PingFang SC;
  font-weight: 400;
  color: #5a84ff;
  display: flex;
  justify-content: center;
  align-items: center;
  // cursor: pointer;
}
.group {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.groupTable {
  width: 100%;
}
.overBox {
  width: 100%;
  height: calc(100% - 20px);
  overflow: auto;
  :global(.cs-collapse-item__header) {
    background-color: #f1f1f1;
    padding: 0 20px;
    height: 35px;
    font-size: 16px;
    font-family: PingFang SC, PingFang SC;
    font-weight: 500;
  }
  :global(.cs-collapse-item__content) {
    padding-bottom: 0px;
  }
}
.groupHeader {
  width: 100%;
  height: 30px;
  background: #ccc;
}
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
  margin-bottom: 0px;
  border-radius: 4px;
  .el-form-item {
    margin-right: 20px;
    margin-bottom: 0;
    // ç»Ÿä¸€è¾“入框和选择框的宽度
    .el-input, .el-select {
      width: 200px; // è®¾ç½®ç»Ÿä¸€çš„宽度
    }
    // é€‰æ‹©æ¡†å†…部输入框样式
    .el-select .el-input__wrapper {
      height: 32px; // ä¸Žè¾“入框高度一致
      padding: 1px 11px; // ä¸Žè¾“入框内边距一致
    }
    // æ—¥æœŸé€‰æ‹©å™¨å®½åº¦
    .el-date-editor {
      width: 220px;
    }
  }
}
// å¦‚果需要更精确的控制,可以单独设置
.formItem {
  width: 200px;
  &.el-input, &.el-select {
    width: 100%;
  }
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/Pages/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,362 @@
import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
import type { Ref } from 'vue'
import BaseTable from '@/components/Table/Table'
import styles from './WmsInOutStockOrderDetail.module.scss'
import { useWmsInOutStockOrderDetail } from '../../../Controllers/WmsInOutStockOrderDetail'
import IconButton from '@/components/IconButton/IconButton'
import WmsInOutStockOrderDetailDrawer from '../Dialog/WmsInOutStockOrderDetailDrawer/WmsInOutStockOrderDetailDrawer'
import WmsInOutStockOrderDetailQueryDrawer from '../Dialog/WmsInOutStockOrderDetailQueryDrawer/WmsInOutStockOrderDetailQueryDrawer'
import Search from '@/components/Search/Search'
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import { getWmsEnumData } from '@/widgets/WmsInOutStockOrderDetail/Models/Service/WmsInOutStockOrderDetailDrawer'
import dayjs from 'dayjs'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
interface RenderTableType {
  url?: string
  dataSource: Ref<any[]>
  isDrag?: boolean
  isChecked?: boolean
  isHidePagination?: boolean
  params?: Record<string, any>
  autoHeight?: boolean
}
export default defineComponent({
  name: 'WmsInOutStockOrderDetail',
  directives: {
    permission: vPermission,
  },
  setup(props, ctx) {
    const {
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
      sort,
      headers,
      onError,
      onSearch,
      onRowClick,
      onConfirmWmsInOutStockOrderDetail,
      onCheck,
      onAddWmsInOutStockOrderDetail,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsInOutStockOrderDetail(props, ctx)
    //定义高级查询引用
    const wmsInOutStockOrderDetailQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['OrderNo', 'MaterialNo', 'MaterialId'])
    const searchFormInputAttrs_Placeholder = ref('请输入单据号/物料编号/物料ID')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      orderType: [] as Array<{ label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        const orderTypeEnumData = await getWmsEnumData({
          EnumName: 'OrderTypeEnum',
        })
        enumOptions.orderType = orderTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
      } catch (error) {
        console.error('获取枚举数据失败:', error)
      }
    }
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
    })
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
    })
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
      tableRef.value.getList(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(高级查询中的按钮【查询】)
    const handleQuery = async (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      commonSaveCurHighQueryData(filteredData)
      tableRef.value.getList(filteredData)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢é‡ç½®
    const resetQuery = () => {
      queryForm.value.searchVal = ''
      queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value
    }
    //新版的导出方法
    const handleExport = () => {
      onExport(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢å¼¹å‡ºæ¡†å…³é—­æ–¹æ³•
    const closeQuery = (extraParams = {}) => {
      let filteredData = commonGetHighQueryForm(extraParams)
      console.log('closeQuery方法')
      console.log(filteredData)
      commonSaveCurHighQueryData(filteredData)
    }
    //保存查询值
    const commonSaveCurHighQueryData = (filteredData = {}) => {
      _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    }
    //获取高级查询弹出框的查询值
    const commonGetHighQueryForm = (extraParams = {}) => {
      // è¿‡æ»¤æŽ‰ undefined çš„值
      let filteredData = Object.assign(
        {},
        ...Object.entries(extraParams).map(([key, value]) =>
          value !== undefined ? { [key]: value } : {}
        )
      )
      //组合模糊查询
      filteredData.searchVal = queryForm.value.searchVal
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
     * @returns è¡¨æ ¼
     */
    const RenderBaseTable = (props: RenderTableType) => {
      const {
        url,
        dataSource,
        isDrag,
        isChecked,
        isHidePagination,
        params,
        autoHeight,
      } = props
      return (
        <div
          class={{
            [styles.wmsInOutStockOrderDetailList]: true,
          }}
        >
          <BaseTable
            ref={tableRef}
            url={url}
            sortUrlTpl="/api/v1/HIAWms/wmsInOutStockOrderDetail/{id}/adjustsort/{sort}"
            v-model:dataSource={dataSource.value}
            columns={columns}
            contextMenu={contextMenu}
            params={params}
            isDrag={isDrag}
            isChecked={isChecked}
            autoHeight={autoHeight}
            onCheck={onCheck}
            onRowClick={onRowClick}
            isHidePagination={isHidePagination}
            pageSize={20}
            v-slots={{
              creationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.creationTime != null
                      ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              deletionTime: ({ row }: any) => {
                return (
                  <div>
                    {row.deletionTime != null
                      ? dayjs(row.deletionTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              isDeleted: ({ row }: any) => {
                return (
                  <div>
                    {row.isDeleted != null
                      ? row.isDeleted
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              isDisabled: ({ row }: any) => {
                return (
                  <div>
                    {row.isDisabled != null
                      ? row.isDisabled
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              lastModificationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.lastModificationTime != null
                      ? dayjs(row.lastModificationTime).format(
                          'YYYY-MM-DD HH:mm:ss'
                        )
                      : '-'}
                  </div>
                )
              },
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
                    onClick={() => openDetail(row)}
                    text={<span style="color:#5a84ff">详情</span>}
                    icon="scale"
                    tip={row?.name}
                    hover
                  >
                    {row?.name}
                  </TdButton>
                ) : (
                  '-'
                )
              },
            }}
          ></BaseTable>
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsInOutStockOrderDetailContent}>
          {/* æ·»åŠ /编辑 */}
          <WmsInOutStockOrderDetailDrawer
            v-model={dialogConfig.visible}
            title={dialogConfig.title}
            row={current.value}
            sort={sort.value}
            onConfirm={onConfirmWmsInOutStockOrderDetail}
          />
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsInOutStockOrderDetailQueryDrawer
            ref="wmsInOutStockOrderDetailQueryDrawerRef"
            v-model={dialogConfigForQuery.visible}
            title={dialogConfigForQuery.title}
            row={current.value}
            sort={sort.value}
            onConfirmQuery={handleQuery}
            onRestQuery={resetQuery}
            onClose={closeQuery}
          />
          <div class={styles.headerContent}>
            <div class={styles.header}>
              <IconButton
                v-permission="wmsInOutStockOrderDetail-add"
                icon="add-p"
                onClick={onAddWmsInOutStockOrderDetail}
                type="primary"
              >
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsInOutStockOrderDetail-import"
                name="file"
                accept=".xlsx,.xls,.csv"
                show-file-list={false}
                onError={onError}
                onSuccess={onSuccess}
                before-upload={onBeforeUpload}
                headers={headers.value}
                action="/api/v1/HIAWms/wmsInOutStockOrderDetail/import"
              >
                <IconButton icon="in">导入</IconButton>
              </el-upload>
              <IconButton
                v-permission="wmsInOutStockOrderDetail-output"
                icon="out"
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <ElInput
                  v-model={queryForm.value.searchVal}
                  placeholder={searchFormInputAttrs_Placeholder.value}
                  clearable
                  class={styles.formItem}
                />
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsInOutStockOrderDetail-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsInOutStockOrderDetail/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
          />
        </div>
      )
    }
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/WmsInOutStockOrderDetail.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
.WmsInOutStockOrderDetail {
  background-color: #fff;
  border-radius: 5px 5px 0 0;
  width: 100%;
  height: 100%;
  border: 1px solid #dbdbdb;
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/WmsInOutStockOrderDetail.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
import {
  Component,
  DefineComponent,
  defineComponent,
  markRaw,
  ref,
  SetupContext,
  onMounted,
} from 'vue'
import styles from './WmsInOutStockOrderDetail.module.scss'
import Tab from '@/components/Tab/Tab'
import { useProvideModels } from '@/libs/Provider/app'
import { usePermission } from '@/libs/Permission/Permission'
import { permissionCodes } from '../enum'
import { ModuleType, TabItem } from '../type/Type'
import { getEntityNames } from '@/hooks/hook'
import TabPane from '@/components/Tab/TabPane'
const Models: ModuleType = import.meta.glob('./config/*.json', {
  eager: true,
})
const entityNames = getEntityNames(Models)
const nameToLabelMap = [{ name: 'WmsInOutStockOrderDetail', label: '出入库单据详情' }]
export default defineComponent({
  name: 'WmsInOutStockOrderDetail',
  setup(props, ctx: SetupContext) {
    useProvideModels()
    usePermission(props, permissionCodes)
    const rf = ref<{
      [key: string]: any
    }>({})
    const tabData = ref<TabItem[]>([])
    const onTabChange = (v: string) => {
      rf.value?.[v]?.reloadList()
    }
    const initTableData = async () => {
      for (const i in entityNames) {
        const name = entityNames[i]
        const module = await import(`./Pages/${name}/${name}.tsx`)
        const WmsInOutStockOrderDetail = markRaw(module.default)
        const foundLabel =
          nameToLabelMap.find((item) => item.name === name)?.label || name
        tabData.value.push({
          label: foundLabel,
          name,
          component: WmsInOutStockOrderDetail,
        })
      }
    }
    initTableData()
    return () => {
      return (
        <div class={styles.WmsInOutStockOrderDetail}>
          <Tab data={tabData.value} type="list" onTab={onTabChange}>
            {tabData.value.map((widgetInfo) => {
              const Widget: any = widgetInfo.component
              return (
                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
                  <Widget
                    ref={(r: any) => (rf.value['WmsInOutStockOrderDetail'] = r)}
                  ></Widget>
                </TabPane>
              )
            })}
          </Tab>
        </div>
      )
    }
  },
})
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/Views/config/WmsInOutStockOrderDetail.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
  "name": "WmsInOutStockOrderDetail"
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/enum.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
export interface TabType {
  label: string
  name: string
  columns?: any[]
  data?: any[]
  isFooter: boolean
  [key: string]: any
}
export const permissionCodes = {
  'wmsInOutStockOrderDetail-list': '列表-列表',
  'wmsInOutStockOrderDetail-add': '列表-添加',
  'wmsInOutStockOrderDetail-import': '列表-导入',
  'wmsInOutStockOrderDetail-output': '列表-输出',
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
import WmsInOutStockOrderDetail from './Views/WmsInOutStockOrderDetail'
import Setting from '@/components/Setting/Setting'
import { provider } from '@/provider/index'
import p from '../../assets/svg/p.svg'
export default {
  is: 'WmsInOutStockOrderDetail',
  name: '出入库单据详情',
  category: 'run',
  icon: p,
  authorizationRequired: false,
  canvasView: provider(WmsInOutStockOrderDetail),
  settingsView: Setting,
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockOrderDetail/type/type.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
import { Component } from 'vue'
export interface DataItemType {
  id?: string
  name?: string
  code?: string
  description?: string
  label?: string
  value?: string | number
}
export interface WmsInOutStockOrderDetailBaseType {
  id?: string
  name?: string
  code?: string
  value?: number
  description?: string
  options?: Array<DataItemType>
  abilityValue?: number | string
  data?: DataItemType
  defaultValue?: string | number
  flow: string
}
export interface FlowDefinitionType {
  id?: string
  name?: string
  code?: string
  description?: string
}
export type ModuleType = Record<
  string,
  {
    default: Record<string, string>
    name: string
  }
>
export interface TabItem {
  name: string
  label: string
  component: Component
  hidden?: boolean
}
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Controllers/WmsInOutStockRecordDrawer.tsx
@@ -140,11 +140,11 @@
      placeholder: '请输入目标库位',
    },
    {
      label: '机型',
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入机型',
      placeholder: '请输入型号',
    },
    {
      label: '操作时间',
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Controllers/WmsInOutStockRecordQueryDrawer.tsx
@@ -116,11 +116,11 @@
      placeholder: '请输入容器编号',
    },
    {
      label: '机型',
      label: '型号',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入机型',
      placeholder: '请输入型号',
    },
    {
      label: '操作时间',
HIAWms/hiawms_web/src/widgets/WmsInOutStockRecord/Views/Pages/WmsInOutStockRecord/Config.ts
@@ -42,7 +42,7 @@
  },
  {
    field: 'materialModel',
    title: '机型',
    title: '型号',
  },
  {
    field: 'remark',
HIAWms/hiawms_web/src/widgets/WmsMaterialContainer/Views/Pages/WmsMaterialContainer/WmsMaterialContainer.tsx
@@ -236,7 +236,7 @@
              <el-divider direction="vertical" />
              <el-divider direction="vertical" />
              <el-upload
              {/* <el-upload
                v-permission="wmsMaterialContainer-import"
                name="file"
                accept=".xlsx,.xls,.csv"
@@ -256,7 +256,7 @@
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
              </IconButton> */}
            </div>
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
HIAWms/hiawms_web/src/widgets/WmsMaterialContainer/Views/WmsMaterialContainer.tsx
@@ -1,80 +1,80 @@
import {
  Component,
  DefineComponent,
  defineComponent,
  markRaw,
  ref,
  SetupContext,
  onMounted,
} from 'vue'
import styles from './WmsMaterialContainer.module.scss'
import Tab from '@/components/Tab/Tab'
import { useProvideModels } from '@/libs/Provider/app'
import { usePermission } from '@/libs/Permission/Permission'
import { permissionCodes } from '../enum'
import { ModuleType, TabItem } from '../type/Type'
import { getEntityNames } from '@/hooks/hook'
import TabPane from '@/components/Tab/TabPane'
const Models: ModuleType = import.meta.glob('./config/*.json', {
  eager: true,
})
const entityNames = getEntityNames(Models)
const nameToLabelMap = [{ name: 'WmsMaterialContainer', label: '物料容器关系' }]
export default defineComponent({
  name: 'WmsMaterialContainer',
  setup(props, ctx: SetupContext) {
    useProvideModels()
    usePermission(props, permissionCodes)
    const rf = ref<{
      [key: string]: any
    }>({})
    const tabData = ref<TabItem[]>([])
    const onTabChange = (v: string) => {
      rf.value?.[v]?.reloadList()
    }
    const initTableData = async () => {
      for (const i in entityNames) {
        const name = entityNames[i]
        const module = await import(`./Pages/${name}/${name}.tsx`)
        const WmsMaterialContainer = markRaw(module.default)
        const foundLabel =
          nameToLabelMap.find((item) => item.name === name)?.label || name
        tabData.value.push({
          label: foundLabel,
          name,
          component: WmsMaterialContainer,
        })
      }
    }
    initTableData()
    return () => {
      return (
        <div class={styles.WmsMaterialContainer}>
          <Tab data={tabData.value} type="list" onTab={onTabChange}>
            {tabData.value.map((widgetInfo) => {
              const Widget: any = widgetInfo.component
              return (
                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
                  <Widget
                    ref={(r: any) => (rf.value['WmsMaterialContainer'] = r)}
                  ></Widget>
                </TabPane>
              )
            })}
          </Tab>
        </div>
      )
    }
  },
})
import {
  Component,
  DefineComponent,
  defineComponent,
  markRaw,
  ref,
  SetupContext,
  onMounted,
} from 'vue'
import styles from './WmsMaterialContainer.module.scss'
import Tab from '@/components/Tab/Tab'
import { useProvideModels } from '@/libs/Provider/app'
import { usePermission } from '@/libs/Permission/Permission'
import { permissionCodes } from '../enum'
import { ModuleType, TabItem } from '../type/Type'
import { getEntityNames } from '@/hooks/hook'
import TabPane from '@/components/Tab/TabPane'
const Models: ModuleType = import.meta.glob('./config/*.json', {
  eager: true,
})
const entityNames = getEntityNames(Models)
const nameToLabelMap = [{ name: 'WmsMaterialContainer', label: '物料容器关系' }]
export default defineComponent({
  name: 'WmsMaterialContainer',
  setup(props, ctx: SetupContext) {
    useProvideModels()
    usePermission(props, permissionCodes)
    const rf = ref<{
      [key: string]: any
    }>({})
    const tabData = ref<TabItem[]>([])
    const onTabChange = (v: string) => {
      rf.value?.[v]?.reloadList()
    }
    const initTableData = async () => {
      for (const i in entityNames) {
        const name = entityNames[i]
        const module = await import(`./Pages/${name}/${name}.tsx`)
        const WmsMaterialContainer = markRaw(module.default)
        const foundLabel =
          nameToLabelMap.find((item) => item.name === name)?.label || name
        tabData.value.push({
          label: foundLabel,
          name,
          component: WmsMaterialContainer,
        })
      }
    }
    initTableData()
    return () => {
      return (
        <div class={styles.WmsMaterialContainer}>
          <Tab data={tabData.value} type="list" onTab={onTabChange}>
            {tabData.value.map((widgetInfo) => {
              const Widget: any = widgetInfo.component
              return (
                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
                  <Widget
                    ref={(r: any) => (rf.value['WmsMaterialContainer'] = r)}
                  ></Widget>
                </TabPane>
              )
            })}
          </Tab>
        </div>
      )
    }
  },
})
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/GetWmsInOutStockOrderInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,279 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据查询参数
/// </summary>
public class GetWmsInOutStockOrderInput : ExtensiblePagedAndSortedResultRequestDto
{
    #region å…³é”®å­—查询
    /// <summary>
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据编号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å•据状态
        /// </summary>
        public int?  OrderStatus { get; set; }
        /// <summary>
        /// å•据状态-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderStatus_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string MaterialModel { get; set; }
        /// <summary>
        /// åž‹å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialModel_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å•据类型
        /// </summary>
        public int?  OrderType { get; set; }
        /// <summary>
        /// å•据类型-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public int?  StockType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum StockType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å•据数量
        /// </summary>
        public int?  MaterialNumber { get; set; }
        /// <summary>
        /// å•据数量-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ä¸‹å‘数量
        /// </summary>
        public int?  DistributeNumber { get; set; }
        /// <summary>
        /// ä¸‹å‘数量-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DistributeNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å®Œæˆæ•°é‡
        /// </summary>
        public int?  CompleteNumber { get; set; }
        /// <summary>
        /// å®Œæˆæ•°é‡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CompleteNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public int?  Priority { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Priority_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å…³è”计划编号
        /// </summary>
        public string PlanNo { get; set; }
        /// <summary>
        /// å…³è”计划编号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PlanNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据创建参数对象
/// </summary>
public class WmsInOutStockOrderCreateDto : WmsInOutStockOrderCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据创建或更新基类
/// </summary>
public abstract class WmsInOutStockOrderCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        public OrderStatusEnum OrderStatus { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// å•据数量
        /// </summary>
        public int MaterialNumber { get; set; }
        /// <summary>
        /// ä¸‹å‘数量
        /// </summary>
        public int DistributeNumber { get; set; }
        /// <summary>
        /// å®Œæˆæ•°é‡
        /// </summary>
        public int CompleteNumber { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public int Priority { get; set; }
        /// <summary>
        /// å…³è”计划编号
        /// </summary>
        public string? PlanNo { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsInOutStockOrderCreateOrUpdateDtoBase() : base(false)
    {
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据数据参数对象
/// </summary>
public  class WmsInOutStockOrderDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        public OrderStatusEnum OrderStatus { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        public string OrderStatusDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(OrderStatus);
            }
        }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
        public string OrderTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(OrderType);
            }
        }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public string StockTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(StockType);
            }
        }
        /// <summary>
        /// å•据数量
        /// </summary>
        public int MaterialNumber { get; set; }
        /// <summary>
        /// ä¸‹å‘数量
        /// </summary>
        public int DistributeNumber { get; set; }
        /// <summary>
        /// å®Œæˆæ•°é‡
        /// </summary>
        public int CompleteNumber { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public int Priority { get; set; }
        /// <summary>
        /// å…³è”计划编号
        /// </summary>
        public string? PlanNo { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据导出模型
/// </summary>
public  class WmsInOutStockOrderExportModel
{
            /// <summary>
        /// å•据编号
        /// </summary>
        [ExcelColumn(Name = "单据编号", Width = 25)]
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据状态
        /// </summary>
        [ExcelColumn(Name = "单据状态", Width = 25)]
        public OrderStatusEnum OrderStatus { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        [ExcelColumn(Name = "物料件号", Width = 25)]
        public string MaterialNo { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        [ExcelColumn(Name = "型号", Width = 25)]
        public string MaterialModel { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        [ExcelColumn(Name = "批次号", Width = 25)]
        public string MaterialBatch { get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
        [ExcelColumn(Name = "单据类型", Width = 25)]
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        [ExcelColumn(Name = "操作类型(枚举值)", Width = 25)]
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// å•据数量
        /// </summary>
        [ExcelColumn(Name = "单据数量", Width = 25)]
        public int MaterialNumber { get; set; }
        /// <summary>
        /// ä¸‹å‘数量
        /// </summary>
        [ExcelColumn(Name = "下发数量", Width = 25)]
        public int DistributeNumber { get; set; }
        /// <summary>
        /// å®Œæˆæ•°é‡
        /// </summary>
        [ExcelColumn(Name = "完成数量", Width = 25)]
        public int CompleteNumber { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        [ExcelColumn(Name = "优先级", Width = 25)]
        public int Priority { get; set; }
        /// <summary>
        /// å…³è”计划编号
        /// </summary>
        [ExcelColumn(Name = "关联计划编号", Width = 25)]
        public string PlanNo { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        [ExcelColumn(Name = "操作时间", Width = 25)]
        public DateTime OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        [ExcelColumn(Name = "排序", Width = 25)]
        public int Sort { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { get; set; }
    public Dictionary<string, object> GetExportData()
        {
            var exportData = new Dictionary<string, object>();
            foreach (var property in this.GetType().GetProperties())
            {
                exportData.Add(property.Name, property.GetValue(this));
            }
            return exportData;
        }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrderUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据更新参数对象
/// </summary>
public class WmsInOutStockOrderUpdateDto : WmsInOutStockOrderCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrder/WmsInOutStockOrdersImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder
{
    /// <summary>
    /// å‡ºå…¥åº“单据导入模型
    /// </summary>
    public class WmsInOutStockOrdersImportModel
    {
        private List<WmsInOutStockOrderImportModel> _WmsInOutStockOrders = new();
        public List<WmsInOutStockOrderImportModel> WmsInOutStockOrders
        {
            get => _WmsInOutStockOrders;
            set
            {
                _WmsInOutStockOrders = value;
                var rowIndex = 2;
                _WmsInOutStockOrders?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// å‡ºå…¥åº“单据导入模型
        /// </summary>
        public class WmsInOutStockOrderImportModel : WmsInOutStockOrderExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/GetWmsInOutStockOrderDetailInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,221 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情查询参数
/// </summary>
public class GetWmsInOutStockOrderDetailInput : ExtensiblePagedAndSortedResultRequestDto
{
    #region å…³é”®å­—查询
    /// <summary>
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据编号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™å”¯ä¸€ç 
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// ç‰©æ–™å”¯ä¸€ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å•据类型(枚举值)
        /// </summary>
        public int?  OrderType { get; set; }
        /// <summary>
        /// å•据类型(枚举值)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string MaterialModel { get; set; }
        /// <summary>
        /// æœºåž‹-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialModel_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public int?  MaterialBatch { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情创建参数对象
/// </summary>
public class WmsInOutStockOrderDetailCreateDto : WmsInOutStockOrderDetailCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情创建或更新基类
/// </summary>
public abstract class WmsInOutStockOrderDetailCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™å”¯ä¸€ç 
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// å•据类型(枚举值)
        /// </summary>
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public int? MaterialBatch { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderDetailCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsInOutStockOrderDetailCreateOrUpdateDtoBase() : base(false)
    {
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,141 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情数据参数对象
/// </summary>
public  class WmsInOutStockOrderDetailDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™å”¯ä¸€ç 
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// å•据类型(枚举值)
        /// </summary>
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// å•据类型(枚举值)
        /// </summary>
        public string OrderTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(OrderType);
            }
        }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public int? MaterialBatch { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情导出模型
/// </summary>
public  class WmsInOutStockOrderDetailExportModel
{
            /// <summary>
        /// å•据编号
        /// </summary>
        [ExcelColumn(Name = "单据编号", Width = 25)]
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™å”¯ä¸€ç 
        /// </summary>
        [ExcelColumn(Name = "物料唯一码", Width = 25)]
        public string MaterialId { get; set; }
        /// <summary>
        /// å•据类型(枚举值)
        /// </summary>
        [ExcelColumn(Name = "单据类型(枚举值)", Width = 25)]
        public OrderTypeEnum OrderType { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        [ExcelColumn(Name = "物料件号", Width = 25)]
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        [ExcelColumn(Name = "容器编号", Width = 25)]
        public string ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        [ExcelColumn(Name = "机型", Width = 25)]
        public string MaterialModel { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        [ExcelColumn(Name = "物料批次", Width = 25)]
        public int? MaterialBatch { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        [ExcelColumn(Name = "排序", Width = 25)]
        public int Sort { get; set; }
    public Dictionary<string, object> GetExportData()
        {
            var exportData = new Dictionary<string, object>();
            foreach (var property in this.GetType().GetProperties())
            {
                exportData.Add(property.Name, property.GetValue(this));
            }
            return exportData;
        }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情更新参数对象
/// </summary>
public class WmsInOutStockOrderDetailUpdateDto : WmsInOutStockOrderDetailCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockOrderDetail/WmsInOutStockOrderDetailsImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail
{
    /// <summary>
    /// å‡ºå…¥åº“单据详情导入模型
    /// </summary>
    public class WmsInOutStockOrderDetailsImportModel
    {
        private List<WmsInOutStockOrderDetailImportModel> _WmsInOutStockOrderDetails = new();
        public List<WmsInOutStockOrderDetailImportModel> WmsInOutStockOrderDetails
        {
            get => _WmsInOutStockOrderDetails;
            set
            {
                _WmsInOutStockOrderDetails = value;
                var rowIndex = 2;
                _WmsInOutStockOrderDetails?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// å‡ºå…¥åº“单据详情导入模型
        /// </summary>
        public class WmsInOutStockOrderDetailImportModel : WmsInOutStockOrderDetailExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockOrderAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// å‡ºå…¥åº“单据应用服务接口
/// </summary>
public interface IWmsInOutStockOrderAppService : ICrudAppService<WmsInOutStockOrderDto, Guid, GetWmsInOutStockOrderInput, WmsInOutStockOrderCreateDto, WmsInOutStockOrderUpdateDto>
{
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// åˆ é™¤å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// è°ƒæ•´æŽ’序出入库单据
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// å¯¼å…¥å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task ImportAsync(WmsInOutStockOrdersImportModel input);
    /// <summary>
    /// å¯¼å‡ºå‡ºå…¥åº“单据
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderInput input);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockOrderDetailAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// å‡ºå…¥åº“单据详情应用服务接口
/// </summary>
public interface IWmsInOutStockOrderDetailAppService : ICrudAppService<WmsInOutStockOrderDetailDto, Guid, GetWmsInOutStockOrderDetailInput, WmsInOutStockOrderDetailCreateDto, WmsInOutStockOrderDetailUpdateDto>
{
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WmsInOutStockOrderDetailDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// åˆ é™¤å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// è°ƒæ•´æŽ’序出入库单据详情
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// å¯¼å…¥å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task ImportAsync(WmsInOutStockOrderDetailsImportModel input);
    /// <summary>
    /// å¯¼å‡ºå‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderDetailInput input);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockOrderAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,450 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <summary>
/// å‡ºå…¥åº“单据应用服务
/// </summary>
public class WmsInOutStockOrderAppService : CMSPluginAppService, IWmsInOutStockOrderAppService
{
    private readonly IWmsInOutStockOrderRepository wmsInOutStockOrderRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderAppService"/> class.
    /// </summary>
    /// <param name="WmsInOutStockOrderRepository">The task job repository.</param>
    public WmsInOutStockOrderAppService(IWmsInOutStockOrderRepository _WmsInOutStockOrderRepository)
    {
        wmsInOutStockOrderRepository = _WmsInOutStockOrderRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šå‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockOrderDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(await wmsInOutStockOrderRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsInOutStockOrderRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockOrderDto>(count, ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrder, GetWmsInOutStockOrderInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsInOutStockOrder, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrder, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary>
    /// æ–°å»ºå‡ºå…¥åº“单据
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        var maxSort = await wmsInOutStockOrderRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsInOutStockOrderRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsInOutStockOrderRepository.GetAsync(id);
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.OrderNo = input.OrderNo;
        updateObj.OrderStatus = input.OrderStatus;
        updateObj.MaterialName = input.MaterialName;
        updateObj.MaterialNo = input.MaterialNo;
        updateObj.MaterialModel = input.MaterialModel;
        updateObj.MaterialBatch = input.MaterialBatch;
        updateObj.OrderType = input.OrderType;
        updateObj.StockType = input.StockType;
        updateObj.MaterialNumber = input.MaterialNumber;
        updateObj.DistributeNumber = input.DistributeNumber;
        updateObj.CompleteNumber = input.CompleteNumber;
        updateObj.Priority = input.Priority;
        updateObj.PlanNo = input.PlanNo;
        updateObj.OperateTime = input.OperateTime;
        updateObj.Remark = input.Remark;
        updateObj.IsDisabled = input.IsDisabled;
        await wmsInOutStockOrderRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsInOutStockOrders = new List<WmsInOutStockOrder>();
        //if (ids != null)
        //{
        //    var sort = await wmsInOutStockOrderRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WmsInOutStockOrder = await wmsInOutStockOrderRepository.FindAsync(id);
        //        if (WmsInOutStockOrder != null)
        //        {
        //            var name = WmsInOutStockOrder.Name + WmsInOutStockOrderConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await wmsInOutStockOrderRepository.NameExistAsync(name);
        //                if (exist || wmsInOutStockOrders.Any(x => x.Name == name))
        //                {
        //                    name += WmsInOutStockOrderConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WmsInOutStockOrder = await wmsInOutStockOrderRepository.InsertAsync(WmsInOutStockOrder.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsInOutStockOrders.Add(WmsInOutStockOrder);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(wmsInOutStockOrders);
        return new List<WmsInOutStockOrderDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个出入库单据
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsInOutStockOrderRepository.DeleteAsync(id);
    }
    /// <summary>
    /// åˆ é™¤å¤šä¸ªå‡ºå…¥åº“单据
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <summary>
    /// è°ƒæ•´æŽ’序出入库单据
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsInOutStockOrderRepository.GetListAsync(null, nameof(WmsInOutStockOrder.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await wmsInOutStockOrderRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WmsInOutStockOrdersImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockOrderCreateDtos = new List<(int RowIndex, WmsInOutStockOrderCreateDto Item)>();
        var wmsInOutStockOrderUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderUpdateDto Item)>();
        var importItems = input.WmsInOutStockOrders;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsInOutStockOrders = importItems.GroupBy(x => x.OrderNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockOrders?.Any() == true)
            {
                var duplicateWmsInOutStockOrderMsgs = duplicateWmsInOutStockOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrder名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockOrder = await wmsInOutStockOrderRepository.FindByNameAsync(impItem.OrderNo);
                if (oldWmsInOutStockOrder != null)
                {
                    var wmsInOutStockOrderUpdateDto = new WmsInOutStockOrderUpdateDto
                    {
                        OrderNo = impItem.OrderNo,
OrderStatus = impItem.OrderStatus,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
OrderType = impItem.OrderType,
StockType = impItem.StockType,
MaterialNumber = impItem.MaterialNumber,
DistributeNumber = impItem.DistributeNumber,
CompleteNumber = impItem.CompleteNumber,
Priority = impItem.Priority,
PlanNo = impItem.PlanNo,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrder.Id, wmsInOutStockOrderUpdateDto));
                }
                else
                {
                    var wmsInOutStockOrderCreateDto = new WmsInOutStockOrderCreateDto
                    {
                        OrderNo = impItem.OrderNo,
OrderStatus = impItem.OrderStatus,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
OrderType = impItem.OrderType,
StockType = impItem.StockType,
MaterialNumber = impItem.MaterialNumber,
DistributeNumber = impItem.DistributeNumber,
CompleteNumber = impItem.CompleteNumber,
Priority = impItem.Priority,
PlanNo = impItem.PlanNo,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockOrderDto.Id, wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary>
    /// å¯¼å‡ºå‡ºå…¥åº“单据
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "出入库单据列表" : result.Count == 1 ? result[0]?.OrderNo : "WmsInOutStockOrder模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒå‡ºå…¥åº“单据,当新建或更新时
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50);
        Check.NotNull(input.OrderStatus, "单据状态");
        Check.NotNullOrWhiteSpace(input.MaterialNo, "物料件号", 50);
        Check.NotNullOrWhiteSpace(input.MaterialBatch, "批次号", 50);
        Check.NotNull(input.OrderType, "单据类型");
        Check.NotNull(input.StockType, "操作类型(枚举值)");
        Check.NotNull(input.MaterialNumber, "单据数量");
        Check.NotNull(input.DistributeNumber, "下发数量");
        Check.NotNull(input.CompleteNumber, "完成数量");
        Check.NotNull(input.Priority, "优先级");
        return Task.CompletedTask;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockOrderDetailAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,426 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <summary>
/// å‡ºå…¥åº“单据详情应用服务
/// </summary>
public class WmsInOutStockOrderDetailAppService : CMSPluginAppService, IWmsInOutStockOrderDetailAppService
{
    private readonly IWmsInOutStockOrderDetailRepository wmsInOutStockOrderDetailRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderDetailAppService"/> class.
    /// </summary>
    /// <param name="WmsInOutStockOrderDetailRepository">The task job repository.</param>
    public WmsInOutStockOrderDetailAppService(IWmsInOutStockOrderDetailRepository _WmsInOutStockOrderDetailRepository)
    {
        wmsInOutStockOrderDetailRepository = _WmsInOutStockOrderDetailRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šå‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockOrderDetailDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockOrderDetail, WmsInOutStockOrderDetailDto>(await wmsInOutStockOrderDetailRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsInOutStockOrderDetailDto>> GetListAsync(GetWmsInOutStockOrderDetailInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrderDetail.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsInOutStockOrderDetailRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockOrderDetailRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockOrderDetailDto>(count, ObjectMapper.Map<List<WmsInOutStockOrderDetail>, List<WmsInOutStockOrderDetailDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsInOutStockOrderDetail, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderDetailInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrderDetail, GetWmsInOutStockOrderDetailInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsInOutStockOrderDetail, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrderDetail, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary>
    /// æ–°å»ºå‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsInOutStockOrderDetailDto> CreateAsync(WmsInOutStockOrderDetailCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsInOutStockOrderDetailRepository.NameExistAsync(input.MaterialId);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialId]);
        }
        var maxSort = await wmsInOutStockOrderDetailRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockOrderDetailCreateDto, WmsInOutStockOrderDetail>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsInOutStockOrderDetailRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
        return ObjectMapper.Map<WmsInOutStockOrderDetail, WmsInOutStockOrderDetailDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsInOutStockOrderDetailDto> UpdateAsync(Guid id, WmsInOutStockOrderDetailUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsInOutStockOrderDetailRepository.GetAsync(id);
        var exist = await wmsInOutStockOrderDetailRepository.NameExistAsync(input.MaterialId, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialId]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.OrderNo = input.OrderNo;
        updateObj.MaterialId = input.MaterialId;
        updateObj.OrderType = input.OrderType;
        updateObj.MaterialNo = input.MaterialNo;
        updateObj.MaterialName = input.MaterialName;
        updateObj.ContainerNo = input.ContainerNo;
        updateObj.MaterialModel = input.MaterialModel;
        updateObj.MaterialBatch = input.MaterialBatch;
        updateObj.IsDisabled = input.IsDisabled;
        updateObj.Remark = input.Remark;
        await wmsInOutStockOrderDetailRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockOrderDetail, WmsInOutStockOrderDetailDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WmsInOutStockOrderDetailDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsInOutStockOrderDetails = new List<WmsInOutStockOrderDetail>();
        //if (ids != null)
        //{
        //    var sort = await wmsInOutStockOrderDetailRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WmsInOutStockOrderDetail = await wmsInOutStockOrderDetailRepository.FindAsync(id);
        //        if (WmsInOutStockOrderDetail != null)
        //        {
        //            var name = WmsInOutStockOrderDetail.Name + WmsInOutStockOrderDetailConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await wmsInOutStockOrderDetailRepository.NameExistAsync(name);
        //                if (exist || wmsInOutStockOrderDetails.Any(x => x.Name == name))
        //                {
        //                    name += WmsInOutStockOrderDetailConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WmsInOutStockOrderDetail = await wmsInOutStockOrderDetailRepository.InsertAsync(WmsInOutStockOrderDetail.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsInOutStockOrderDetails.Add(WmsInOutStockOrderDetail);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WmsInOutStockOrderDetail>, List<WmsInOutStockOrderDetailDto>>(wmsInOutStockOrderDetails);
        return new List<WmsInOutStockOrderDetailDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个出入库单据详情
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsInOutStockOrderDetailRepository.DeleteAsync(id);
    }
    /// <summary>
    /// åˆ é™¤å¤šä¸ªå‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <summary>
    /// è°ƒæ•´æŽ’序出入库单据详情
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsInOutStockOrderDetailRepository.GetListAsync(null, nameof(WmsInOutStockOrderDetail.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await wmsInOutStockOrderDetailRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WmsInOutStockOrderDetailsImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockOrderDetailCreateDtos = new List<(int RowIndex, WmsInOutStockOrderDetailCreateDto Item)>();
        var wmsInOutStockOrderDetailUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderDetailUpdateDto Item)>();
        var importItems = input.WmsInOutStockOrderDetails;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsInOutStockOrderDetails = importItems.GroupBy(x => x.MaterialId).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockOrderDetails?.Any() == true)
            {
                var duplicateWmsInOutStockOrderDetailMsgs = duplicateWmsInOutStockOrderDetails.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderDetailMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.MaterialId.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.MaterialId.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrderDetail名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockOrderDetail = await wmsInOutStockOrderDetailRepository.FindByNameAsync(impItem.MaterialId);
                if (oldWmsInOutStockOrderDetail != null)
                {
                    var wmsInOutStockOrderDetailUpdateDto = new WmsInOutStockOrderDetailUpdateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialId = impItem.MaterialId,
OrderType = impItem.OrderType,
MaterialNo = impItem.MaterialNo,
MaterialName = impItem.MaterialName,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
IsDisabled = impItem.IsDisabled,
Remark = impItem.Remark,
                    };
                    wmsInOutStockOrderDetailUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrderDetail.Id, wmsInOutStockOrderDetailUpdateDto));
                }
                else
                {
                    var wmsInOutStockOrderDetailCreateDto = new WmsInOutStockOrderDetailCreateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialId = impItem.MaterialId,
OrderType = impItem.OrderType,
MaterialNo = impItem.MaterialNo,
MaterialName = impItem.MaterialName,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
IsDisabled = impItem.IsDisabled,
Remark = impItem.Remark,
                    };
                    wmsInOutStockOrderDetailCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderDetailCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsInOutStockOrderDetailDto in wmsInOutStockOrderDetailCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockOrderDetailDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDetailDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsInOutStockOrderDetailDto in wmsInOutStockOrderDetailUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockOrderDetailDto.Id, wmsInOutStockOrderDetailDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDetailDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary>
    /// å¯¼å‡ºå‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderDetailInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrderDetail.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsInOutStockOrderDetailRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockOrderDetail>, List<WmsInOutStockOrderDetailDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "出入库单据详情列表" : result.Count == 1 ? result[0]?.MaterialId : "WmsInOutStockOrderDetail模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒå‡ºå…¥åº“单据详情,当新建或更新时
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderDetailCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50);
        Check.NotNullOrWhiteSpace(input.MaterialId, "物料唯一码", 64);
        Check.NotNull(input.OrderType, "单据类型(枚举值)");
        Check.NotNullOrWhiteSpace(input.MaterialNo, "物料件号", 50);
        return Task.CompletedTask;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockOrderAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// å‡ºå…¥åº“单据AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsInOutStockOrderAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderAutoMapperProfile"/> class.
    /// </summary>
    public WmsInOutStockOrderAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsInOutStockOrder, WmsInOutStockOrderDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsInOutStockOrderInput, WmsInOutStockOrder>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockOrderDetailAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// å‡ºå…¥åº“单据详情AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsInOutStockOrderDetailAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderDetailAutoMapperProfile"/> class.
    /// </summary>
    public WmsInOutStockOrderDetailAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsInOutStockOrderDetail, WmsInOutStockOrderDetailDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsInOutStockOrderDetailCreateDto, WmsInOutStockOrderDetail>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsInOutStockOrderDetailInput, WmsInOutStockOrderDetail>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrder/IWmsInOutStockOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
/// <summary>
/// å‡ºå…¥åº“单据仓储
/// </summary>
public interface IWmsInOutStockOrderRepository : IBasicRepository<WmsInOutStockOrder, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsInOutStockOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="name"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºå‡ºå…¥åº“å•æ®
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨å‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsInOutStockOrder>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–æ€»æ•°å‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrder/WmsInOutStockOrder.cs
@@ -99,7 +99,7 @@
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; protected set; }
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrderDetail/IWmsInOutStockOrderDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail;
/// <summary>
/// å‡ºå…¥åº“单据详情仓储
/// </summary>
public interface IWmsInOutStockOrderDetailRepository : IBasicRepository<WmsInOutStockOrderDetail, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsInOutStockOrderDetail> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="name"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºå‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨å‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsInOutStockOrderDetail>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrderDetail, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–æ€»æ•°å‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrderDetail, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockOrderDetail/WmsInOutStockOrderDetail.cs
@@ -68,7 +68,7 @@
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; protected set; }
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockOrderDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrderDetail;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <summary>
/// å‡ºå…¥åº“单据详情仓储实现
/// </summary>
public class EfCoreWmsInOutStockOrderDetailRepository : EfCoreRepository<ICMSPluginDbContext, WmsInOutStockOrderDetail, Guid>, IWmsInOutStockOrderDetailRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsInOutStockOrderDetailRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsInOutStockOrderDetailRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockOrderDetail> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .FirstOrDefaultAsync(t => t.MaterialId == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å‡ºå…¥åº“单据详情
    /// </summary>
    /// <param name="name">校验值</param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string name, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialId == name);
    }
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºå‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <returns></returns>
    public async Task<int> GetMaxSortAsync()
    {
        var hasAny = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).AnyAsync();
        if (!hasAny)
        {
            return 1;
        }
        var sort = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort);
        return sort + 1;
    }
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨å‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsInOutStockOrderDetail>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrderDetail, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–æ€»æ•°å‡ºå…¥åº“å•æ®è¯¦æƒ…
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrderDetail, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsInOutStockOrderDetail>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <summary>
/// å‡ºå…¥åº“单据仓储实现
/// </summary>
public class EfCoreWmsInOutStockOrderRepository : EfCoreRepository<ICMSPluginDbContext, WmsInOutStockOrder, Guid>, IWmsInOutStockOrderRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsInOutStockOrderRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsInOutStockOrderRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .FirstOrDefaultAsync(t => t.OrderNo == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å‡ºå…¥åº“单据
    /// </summary>
    /// <param name="name">校验值</param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string name, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.OrderNo == name);
    }
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºå‡ºå…¥åº“å•æ®
    /// </summary>
    /// <returns></returns>
    public async Task<int> GetMaxSortAsync()
    {
        var hasAny = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).AnyAsync();
        if (!hasAny)
        {
            return 1;
        }
        var sort = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort);
        return sort + 1;
    }
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨å‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsInOutStockOrder>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–æ€»æ•°å‡ºå…¥åº“å•æ®
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsInOutStockOrder>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockOrderController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using System.Reflection;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Controller
{
    /// <summary>
    /// å‡ºå…¥åº“单据服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsInOutStockOrderController : ControllerBase
    {
        private readonly IWmsInOutStockOrderAppService _wmsInOutStockOrderAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsInOutStockOrderController"/> class.
        /// </summary>
        /// <param name="wmsInOutStockOrderAppService">The wmsInOutStockOrder application service.</param>
        public WmsInOutStockOrderController(IWmsInOutStockOrderAppService wmsInOutStockOrderAppService)
        {
            _wmsInOutStockOrderAppService = wmsInOutStockOrderAppService;
        }
        /// <summary>
        /// èŽ·å–å‡ºå…¥åº“å•æ®
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsInOutStockOrderDto> GetAsync(Guid id)
        {
            return _wmsInOutStockOrderAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“å•æ®çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync([FromQuery] GetWmsInOutStockOrderInput input)
        {
            return _wmsInOutStockOrderAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºå‡ºå…¥åº“单据
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input)
        {
            return _wmsInOutStockOrderAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°å‡ºå…¥åº“单据
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input)
        {
            return _wmsInOutStockOrderAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†å‡ºå…¥åº“单据
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsInOutStockOrderDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockOrderAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤å‡ºå…¥åº“单据
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsInOutStockOrderAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤å‡ºå…¥åº“单据
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockOrderAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序出入库单据
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsInOutStockOrderAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥å‡ºå…¥åº“单据
        /// </summary>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        [Route("Import")]
        public virtual async Task<IActionResult> ImportAsync(IFormFile file)
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Seek(0L, SeekOrigin.Begin);
            var sheetNames = stream.GetSheetNames();
            var wmsInOutStockOrderRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsInOutStockOrdersImportModel.WmsInOutStockOrderImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsInOutStockOrderRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsInOutStockOrderAppService.ImportAsync(new WmsInOutStockOrdersImportModel
            {
                WmsInOutStockOrders = wmsInOutStockOrderRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºå‡ºå…¥åº“单据
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsInOutStockOrderInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsInOutStockOrderAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsInOutStockOrder导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsInOutStockOrder导出模板.xlsx");
            }
            var memoryStream = new MemoryStream();
            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
            memoryStream.Seek(0L, SeekOrigin.Begin);
            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockOrderDetailController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrderDetail;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using System.Reflection;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Controller
{
    /// <summary>
    /// å‡ºå…¥åº“单据详情服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsInOutStockOrderDetailController : ControllerBase
    {
        private readonly IWmsInOutStockOrderDetailAppService _wmsInOutStockOrderDetailAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsInOutStockOrderDetailController"/> class.
        /// </summary>
        /// <param name="wmsInOutStockOrderDetailAppService">The wmsInOutStockOrderDetail application service.</param>
        public WmsInOutStockOrderDetailController(IWmsInOutStockOrderDetailAppService wmsInOutStockOrderDetailAppService)
        {
            _wmsInOutStockOrderDetailAppService = wmsInOutStockOrderDetailAppService;
        }
        /// <summary>
        /// èŽ·å–å‡ºå…¥åº“å•æ®è¯¦æƒ…
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsInOutStockOrderDetailDto> GetAsync(Guid id)
        {
            return _wmsInOutStockOrderDetailAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“å•æ®è¯¦æƒ…çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsInOutStockOrderDetailDto>> GetListAsync([FromQuery] GetWmsInOutStockOrderDetailInput input)
        {
            return _wmsInOutStockOrderDetailAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºå‡ºå…¥åº“单据详情
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsInOutStockOrderDetailDto> CreateAsync(WmsInOutStockOrderDetailCreateDto input)
        {
            return _wmsInOutStockOrderDetailAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°å‡ºå…¥åº“单据详情
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsInOutStockOrderDetailDto> UpdateAsync(Guid id, WmsInOutStockOrderDetailUpdateDto input)
        {
            return _wmsInOutStockOrderDetailAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†å‡ºå…¥åº“单据详情
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsInOutStockOrderDetailDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockOrderDetailAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤å‡ºå…¥åº“单据详情
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsInOutStockOrderDetailAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤å‡ºå…¥åº“单据详情
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockOrderDetailAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序出入库单据详情
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsInOutStockOrderDetailAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥å‡ºå…¥åº“单据详情
        /// </summary>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        [Route("Import")]
        public virtual async Task<IActionResult> ImportAsync(IFormFile file)
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Seek(0L, SeekOrigin.Begin);
            var sheetNames = stream.GetSheetNames();
            var wmsInOutStockOrderDetailRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsInOutStockOrderDetailsImportModel.WmsInOutStockOrderDetailImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsInOutStockOrderDetailRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsInOutStockOrderDetailAppService.ImportAsync(new WmsInOutStockOrderDetailsImportModel
            {
                WmsInOutStockOrderDetails = wmsInOutStockOrderDetailRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºå‡ºå…¥åº“单据详情
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsInOutStockOrderDetailInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsInOutStockOrderDetailAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsInOutStockOrderDetail导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsInOutStockOrderDetail导出模板.xlsx");
            }
            var memoryStream = new MemoryStream();
            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
            memoryStream.Seek(0L, SeekOrigin.Begin);
            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsInOutStockOrderDetailµ¼³öÄ£°å.xlsx
Binary files differ
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsInOutStockOrderµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/³öÈë¿âµ¥¾Ý.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
[表名]:scms_wmsinoutstockorder
[实体类名]:WmsInOutStockOrder
[实体类对象名]:wmsInOutStockOrder
[页面菜单名]:出入库单据
[页面菜单对象缩写]:wmsInOutStockOrder
[表的中文注解]:出入库单据
[重复性校验字段]:OrderNo
[删除提示字段]:OrderNo
[模糊查询字段]:'OrderNo', 'MaterialNo', 'MaterialBatch'
[模糊查询字段名]:请输入单据号/物料编号/批次
[项目命名空间]:HIAWms
[枚举类型字段集合]:OrderStatus|OrderStatusEnum|OrderStatusDesc,OrderType|OrderTypeEnum|OrderTypeDesc,StockType|StockTypeEnum|StockTypeDesc
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/³öÈë¿âµ¥¾ÝÏêÇé.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
[表名]:scms_wmsinoutstockorderdetail
[实体类名]:WmsInOutStockOrderDetail
[实体类对象名]:wmsInOutStockOrderDetail
[页面菜单名]:出入库单据详情
[页面菜单对象缩写]:wmsInOutStockOrderDetail
[表的中文注解]:出入库单据详情
[重复性校验字段]:MaterialId
[删除提示字段]:MaterialId
[模糊查询字段]:'OrderNo', 'MaterialNo', 'MaterialId'
[模糊查询字段名]:请输入单据号/物料编号/物料ID
[项目命名空间]:HIAWms
[枚举类型字段集合]:OrderType|OrderTypeEnum|OrderTypeDesc
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/Web/Controllers/EntityModeDrawerÄ£°å.txt
@@ -31,7 +31,7 @@
    return props.row || null
  })
  const datePicker = (attrs) => {
    return (
      <el-date-picker
@@ -42,6 +42,16 @@
      ></el-date-picker>
    )
  }
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const dateTimePicker = (attrs) => {
    return (
@@ -49,16 +59,6 @@
        type="datetime"
        format="YYYY-MM-DD HH:mm:ss"
        formatValue="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )
  }
   const dateTimePicker = (attrs) => {
    return (
      <el-date-picker
        type="datetime"
        format="YYYY-MM-DD HH:mm:ss"
        {...attrs}
      ></el-date-picker>
    )