zs
2025-05-19 1225fbcf6dd197c39853e2cb0f70c7318836abcb
仓库信息高级查询
已添加18个文件
已修改31个文件
3981 ■■■■ 文件已修改
HIAWms/hiawms_web/src/config/menu.ts 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsArea.ts 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsAreaQueryDrawer.tsx 428 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsPlace.ts 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsPlaceQueryDrawer.tsx 549 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsStore.ts 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsStoreQueryDrawer.tsx 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsAreaDrawer.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsAreaQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsPlaceDrawer.ts 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsPlaceQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsStoreQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsArea.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsAreaDrawer.ts 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsAreaQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsPlaceDrawer.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsPlaceQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsStoreQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsAreaQueryDrawer/WmsAreaQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsAreaQueryDrawer/WmsAreaQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsPlaceQueryDrawer/WmsPlaceQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsPlaceQueryDrawer/WmsPlaceQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsStoreQueryDrawer/WmsStoreQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsStoreQueryDrawer/WmsStoreQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsArea/WmsArea.tsx 282 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsPlace/WmsPlace.tsx 376 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsStore/WmsStore.tsx 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsArea/GetWmsAreaInput.cs 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlace/GetWmsPlacesInput.cs 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStore/GetWmsStoreInput.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsAreas/IWmsAreaRepository.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsStores/IWmsStoreRepository.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsAreaController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsStoreController.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/仓库信息配置.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/库位配置信息.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/库区配置.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/config/menu.ts
@@ -28,16 +28,16 @@
    "notPage": false
  },
  {
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "name": "出入库记录",
    "path": "/information-base/WmsInOutStockRecord",
    "patchName": "WmsInOutStockRecord",
    "icon": "p",
    "notPage": false
  },
  {
    "name": "出入库记录",
    "path": "/information-base/WmsInOutStockRecord",
    "patchName": "WmsInOutStockRecord",
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "icon": "p",
    "notPage": false
  },
@@ -99,13 +99,6 @@
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockOrderDetail": {
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockRecord": {
    "name": "出入库记录",
    "path": "/information-base/WmsInOutStockRecord",
@@ -113,6 +106,13 @@
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockOrderDetail": {
    "name": "出入库单据详情",
    "path": "/information-base/WmsInOutStockOrderDetail",
    "patchName": "WmsInOutStockOrderDetail",
    "icon": "p",
    "notPage": false
  },
  "WmsInOutStockOrder": {
    "name": "出入库单据",
    "path": "/information-base/WmsInOutStockOrder",
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsArea.ts
@@ -52,6 +52,12 @@
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
@@ -170,9 +176,22 @@
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsArea/export', params, 'wmsStoreInfo')
  // const onExport = () => {
  //   const params = tableRef.value?.getParams()
  //   exportFile('/api/v1/HIAWms/wmsArea/export', params, 'wmsStoreInfo')
  // }
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsArea/export', data, '库区信息')
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  /**
@@ -236,6 +255,7 @@
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
@@ -254,5 +274,6 @@
    onConfirmWmsArea,
    onCheck,
    onAddWmsArea,
    onAdvancedQuery,
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsAreaQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,428 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsAreaDrawer } from '../Models/WmsAreaDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
import { getStoreDataList } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
export const useWmsAreaQueryDrawer = (props: any, ctx?: any) => {
  const wmsAreaDrawer = injectModel<WmsAreaDrawer>('WmsAreaDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const storeList = 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: 'areaNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入库区编号',
      highSelectAttrs: {
        prop: 'areaNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '库区名称',
      prop: 'areaName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入库区名称',
      highSelectAttrs: {
        prop: 'areaName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '描述',
      prop: 'areaDesc',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入描述',
      highSelectAttrs: {
        prop: 'areaDesc_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '库区状态',
      prop: 'areaStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入库区状态',
      highSelectAttrs: {
        prop: 'areaStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '库区类型',
      prop: 'areaType',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入库区类型',
      highSelectAttrs: {
        prop: 'areaType_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    // {
    //   label: '冗余字段1 - é¢„留扩展用途',
    //   prop: 'redundantField1',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField1_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段2 - é¢„留扩展用途',
    //   prop: 'redundantField2',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField2_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段3 - é¢„留扩展用途',
    //   prop: 'redundantField3',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField3_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '仓库',
      prop: 'storeCode',
      el: 'select',
      option: [],
      //disabled: disabled,
      placeholder: '请输入仓库代码',
      highSelectAttrs: {
        prop: 'storeCode_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '仓库名称',
      prop: 'storeName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入仓库名称',
      highSelectAttrs: {
        prop: 'storeName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '',
    //   prop: 'creationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
    // {
    //   label: '',
    //   prop: 'lastModificationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      areaNo: formData.value.areaNo || '',
      areaNo_FilterMode: formData.value.areaNo_FilterMode || '',
      areaName: formData.value.areaName || '',
      areaName_FilterMode: formData.value.areaName_FilterMode || '',
      areaDesc: formData.value.areaDesc || '',
      areaDesc_FilterMode: formData.value.areaDesc_FilterMode || '',
      areaStatus: formData.value.areaStatus || '',
      areaStatus_FilterMode: formData.value.areaStatus_FilterMode || '',
      areaType: formData.value.areaType || '',
      areaType_FilterMode: formData.value.areaType_FilterMode || '',
      redundantField1: formData.value.redundantField1 || '',
      redundantField1_FilterMode:
        formData.value.redundantField1_FilterMode || '',
      redundantField2: formData.value.redundantField2 || '',
      redundantField2_FilterMode:
        formData.value.redundantField2_FilterMode || '',
      redundantField3: formData.value.redundantField3 || '',
      redundantField3_FilterMode:
        formData.value.redundantField3_FilterMode || '',
      storeCode: formData.value.storeCode || '',
      storeCode_FilterMode: formData.value.storeCode_FilterMode || '',
      storeName: formData.value.storeName || '',
      storeName_FilterMode: formData.value.storeName_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
    }
    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)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.areaNo_FilterMode = 1
    formData.value.areaName_FilterMode = 1
    formData.value.areaDesc_FilterMode = 1
    formData.value.areaStatus_FilterMode = 2
    formData.value.areaType_FilterMode = 2
    formData.value.redundantField1_FilterMode = 1
    formData.value.redundantField2_FilterMode = 1
    formData.value.redundantField3_FilterMode = 1
    formData.value.storeCode_FilterMode = 1
    formData.value.storeName_FilterMode = 1
    formData.value.remark_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.areaNo = ''
    formData.value.areaName = ''
    formData.value.areaDesc = ''
    formData.value.areaStatus = ''
    formData.value.areaType = ''
    formData.value.redundantField1 = ''
    formData.value.redundantField2 = ''
    formData.value.redundantField3 = ''
    formData.value.storeCode = ''
    formData.value.storeName = ''
    formData.value.remark = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    //向父组件发送自定义事件
    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 updateFormStoreOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.storeName,
        value: item.storeCode,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const areaStatusEnumEnum = await wmsAreaDrawer.getWmsEnumData({
      EnumName: 'AreaStatusEnum',
    })
    updateFormItemOptions('areaStatus', areaStatusEnumEnum)
    const areaTypeEnumEnum = await wmsAreaDrawer.getWmsEnumData({
      EnumName: 'AreaTypeEnum',
    })
    updateFormItemOptions('areaType', areaTypeEnumEnum)
    const stores = await getStoreDataList()
    storeList.value = stores
    console.log('storeList', stores)
    updateFormStoreOptions('storeCode', stores)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  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/WmsStoreInfo/Controllers/WmsPlace.ts
@@ -56,6 +56,11 @@
    visible: false,
    title: '',
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  /**
   * åˆ†é¡µæ•°æ®
@@ -159,6 +164,15 @@
      await tableRef.value?.getList()
    }
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  /**
   * è¡Œç‚¹å‡»æ—¶æ›´æ–°current
   */
@@ -170,11 +184,14 @@
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsPlace/export', params, 'wmsStoreInfo')
  // const onExport = () => {
  //   const params = tableRef.value?.getParams()
  //   exportFile('/api/v1/HIAWms/wmsPlace/export', params, 'wmsStoreInfo')
  // }
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsPlace/export', data, '库位信息')
  }
  /**
   * å…³é”®å­—搜索
   */
@@ -236,6 +253,7 @@
    dataSource,
    contextMenu,
    dialogConfig,
    dialogConfigForQuery,
    dialogSettingConfig,
    tableRef,
    current,
@@ -253,6 +271,7 @@
    onRowClick,
    onConfirmWmsPlace,
    onCheck,
    onAdvancedQuery,
    onAddWmsPlace,
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsPlaceQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,549 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsPlaceDrawer } from '../Models/WmsPlaceDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
import { getAreaAreaDataList } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
export const useWmsPlaceQueryDrawer = (props: any, ctx?: any) => {
  const wmsPlaceDrawer = injectModel<WmsPlaceDrawer>('WmsPlaceDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const areas = ref([])
  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: 'placeNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入库位编号',
      highSelectAttrs: {
        prop: 'placeNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '货位类型',
      prop: 'storageTypeNo',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入货位类型',
      highSelectAttrs: {
        prop: 'storageTypeNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '货位状态',
      prop: 'placeStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入货位状态',
      highSelectAttrs: {
        prop: 'placeStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '所在库区',
      prop: 'areaCode',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入所在库区',
      highSelectAttrs: {
        prop: 'areaCode_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '巷道',
      prop: 'aisle',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入',
      highSelectAttrs: {
        prop: 'aisle_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '排',
      prop: 'rowNo',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入排',
      highSelectAttrs: {
        prop: 'rowNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '列',
      prop: 'columnNo',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入列',
      highSelectAttrs: {
        prop: 'columnNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '层',
      prop: 'layerNo',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入层',
      highSelectAttrs: {
        prop: 'layerNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '是否锁定',
      prop: 'islock',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入是否锁定',
      highSelectAttrs: {
        prop: 'islock_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '是否空托',
      prop: 'emptyContainer',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入是否空托',
      highSelectAttrs: {
        prop: 'emptyContainer_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '最大库存量',
      prop: 'maxStockNumber',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入最大库存量',
      highSelectAttrs: {
        prop: 'maxStockNumber_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    // {
    //   label: '冗余字段1 - é¢„留扩展用途',
    //   prop: 'redundantField1',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField1_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '冗余字段2 - é¢„留扩展用途',
    //   prop: 'redundantField2',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField2_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段3 - é¢„留扩展用途',
    //   prop: 'redundantField3',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField3_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '',
    //   prop: 'creationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
    // {
    //   label: '',
    //   prop: 'lastModificationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      placeNo: formData.value.placeNo || '',
      placeNo_FilterMode: formData.value.placeNo_FilterMode || '',
      storageTypeNo: formData.value.storageTypeNo || '',
      storageTypeNo_FilterMode: formData.value.storageTypeNo_FilterMode || '',
      placeStatus: formData.value.placeStatus || '',
      placeStatus_FilterMode: formData.value.placeStatus_FilterMode || '',
      areaCode: formData.value.areaCode || '',
      areaCode_FilterMode: formData.value.areaCode_FilterMode || '',
      aisle: formData.value.aisle || '',
      aisle_FilterMode: formData.value.aisle_FilterMode || '',
      rowNo: formData.value.rowNo || '',
      rowNo_FilterMode: formData.value.rowNo_FilterMode || '',
      columnNo: formData.value.columnNo || '',
      columnNo_FilterMode: formData.value.columnNo_FilterMode || '',
      layerNo: formData.value.layerNo || '',
      layerNo_FilterMode: formData.value.layerNo_FilterMode || '',
      islock: formData.value.islock || '',
      islock_FilterMode: formData.value.islock_FilterMode || '',
      emptyContainer: formData.value.emptyContainer || '',
      emptyContainer_FilterMode: formData.value.emptyContainer_FilterMode || '',
      maxStockNumber: formData.value.maxStockNumber || '',
      maxStockNumber_FilterMode: formData.value.maxStockNumber_FilterMode || '',
      redundantField1: formData.value.redundantField1 || '',
      redundantField1_FilterMode:
        formData.value.redundantField1_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
      redundantField2: formData.value.redundantField2 || '',
      redundantField2_FilterMode:
        formData.value.redundantField2_FilterMode || '',
      redundantField3: formData.value.redundantField3 || '',
      redundantField3_FilterMode:
        formData.value.redundantField3_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
    }
    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)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.placeNo_FilterMode = 1
    formData.value.storageTypeNo_FilterMode = 2
    formData.value.placeStatus_FilterMode = 2
    formData.value.areaCode_FilterMode = 1
    formData.value.aisle_FilterMode = 2
    formData.value.rowNo_FilterMode = 2
    formData.value.columnNo_FilterMode = 2
    formData.value.layerNo_FilterMode = 2
    formData.value.islock_FilterMode = 2
    formData.value.emptyContainer_FilterMode = 2
    formData.value.maxStockNumber_FilterMode = 2
    formData.value.redundantField1_FilterMode = 1
    formData.value.remark_FilterMode = 1
    formData.value.redundantField2_FilterMode = 1
    formData.value.redundantField3_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.placeNo = ''
    formData.value.storageTypeNo = ''
    formData.value.placeStatus = ''
    formData.value.areaCode = ''
    formData.value.aisle = ''
    formData.value.rowNo = ''
    formData.value.columnNo = ''
    formData.value.layerNo = ''
    formData.value.islock = ''
    formData.value.emptyContainer = ''
    formData.value.maxStockNumber = ''
    formData.value.redundantField1 = ''
    formData.value.remark = ''
    formData.value.redundantField2 = ''
    formData.value.redundantField3 = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    //向父组件发送自定义事件
    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 updateFormAreaOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.areaName,
        value: item.areaNo,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const placeTypeEnumEnum = await wmsPlaceDrawer.getWmsEnumData({
      EnumName: 'PlaceTypeEnum',
    })
    updateFormItemOptions('storageTypeNo', placeTypeEnumEnum)
    const placeStatusEnumEnum = await wmsPlaceDrawer.getWmsEnumData({
      EnumName: 'PlaceStatusEnum',
    })
    updateFormItemOptions('placeStatus', placeStatusEnumEnum)
    const yesNoEnumEnum = await wmsPlaceDrawer.getWmsEnumData({
      EnumName: 'YesNoEnum',
    })
    updateFormItemOptions('islock', yesNoEnumEnum)
    updateFormItemOptions('emptyContainer', yesNoEnumEnum)
    const areaList = await getAreaAreaDataList()
    areas.value = areaList
    updateFormAreaOptions('areaCode', areaList)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  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/WmsStoreInfo/Controllers/WmsStore.ts
@@ -51,7 +51,11 @@
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
@@ -148,6 +152,14 @@
    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 onConfirmWmsStore = async () => {
    dialogConfig.visible = false
@@ -170,11 +182,14 @@
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsStore/export', params, 'wmsStoreInfo')
  // const onExport = () => {
  //   const params = tableRef.value?.getParams()
  //   exportFile('/api/v1/HIAWms/wmsStore/export', params, 'wmsStoreInfo')
  // }
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsStore/export', data, '仓库信息')
  }
  /**
   * å…³é”®å­—搜索
   */
@@ -241,6 +256,7 @@
    current,
    search,
    sort,
    dialogConfigForQuery,
    wmsStoreColumns,
    paginationParams,
    headers,
@@ -254,5 +270,6 @@
    onConfirmWmsStore,
    onCheck,
    onAddWmsStore,
    onAdvancedQuery,
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Controllers/WmsStoreQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,314 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsStoreDrawer } from '../Models/WmsStoreDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
export const useWmsStoreQueryDrawer = (props: any, ctx?: any) => {
  const wmsStoreDrawer = injectModel<WmsStoreDrawer>('WmsStoreDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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: 'storeCode',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入仓库代码',
      highSelectAttrs: {
        prop: 'storeCode_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '仓库名称',
      prop: 'storeName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入仓库名称',
      highSelectAttrs: {
        prop: 'storeName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '冗余字段1 - é¢„留扩展用途',
    //   prop: 'redundantField1',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField1_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段2 - é¢„留扩展用途',
    //   prop: 'redundantField2',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField2_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    // {
    //   label: '冗余字段3 - é¢„留扩展用途',
    //   prop: 'redundantField3',
    //   el: 'input',
    //   //disabled: disabled,
    //   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
    //   highSelectAttrs: {
    //     prop: 'redundantField3_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_STRING,
    //   },
    // },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    // {
    //   label: '',
    //   prop: 'creationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
    // {
    //   label: '',
    //   prop: 'lastModificationTime',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(dateTimePickerRange, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   //disabled: disabled,
    //   placeholder: '请输入',
    //   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    // },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      storeCode: formData.value.storeCode || '',
      storeCode_FilterMode: formData.value.storeCode_FilterMode || '',
      storeName: formData.value.storeName || '',
      storeName_FilterMode: formData.value.storeName_FilterMode || '',
      redundantField1: formData.value.redundantField1 || '',
      redundantField1_FilterMode:
        formData.value.redundantField1_FilterMode || '',
      redundantField2: formData.value.redundantField2 || '',
      redundantField2_FilterMode:
        formData.value.redundantField2_FilterMode || '',
      redundantField3: formData.value.redundantField3 || '',
      redundantField3_FilterMode:
        formData.value.redundantField3_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
    }
    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)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.storeCode_FilterMode = 1
    formData.value.storeName_FilterMode = 1
    formData.value.redundantField1_FilterMode = 1
    formData.value.redundantField2_FilterMode = 1
    formData.value.redundantField3_FilterMode = 1
    formData.value.remark_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.storeCode = ''
    formData.value.storeName = ''
    formData.value.redundantField1 = ''
    formData.value.redundantField2 = ''
    formData.value.redundantField3 = ''
    formData.value.remark = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    //向父组件发送自定义事件
    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 () => {}
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  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/WmsStoreInfo/Models/Service/WmsAreaDrawer.ts
@@ -24,3 +24,10 @@
export const updateWmsArea = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsArea/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsAreaQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsArea = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsArea', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsArea = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsArea/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsArea = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsArea/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsPlaceDrawer.ts
@@ -24,3 +24,10 @@
export const updateWmsPlace = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsPlace/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsPlaceQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsPlace = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsPlace', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsPlace = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsPlace/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsPlace = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsPlace/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/Service/WmsStoreQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsStore = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsStore', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsStore = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsStore/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsStore = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsStore/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsArea.ts
@@ -1,9 +1,5 @@
import { Base } from '@/libs/Base/Base'
import {
  deleteWmsAreas,
  addWmsArea,
  cloneData,
} from './Service/WmsArea'
import { deleteWmsAreas, addWmsArea, cloneData } from './Service/WmsArea'
export class WmsArea extends Base<{ [key: string]: any }> {
  constructor() {
@@ -38,4 +34,5 @@
  cloneData(ids: string[]) {
    return cloneData(ids)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsAreaDrawer.ts
@@ -1,5 +1,10 @@
import { Base } from '@/libs/Base/Base'
import { addWmsArea, getWmsArea, updateWmsArea } from './Service/WmsAreaDrawer'
import {
  addWmsArea,
  getWmsArea,
  updateWmsArea,
  getWmsEnumData,
} from './Service/WmsAreaDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsAreaDrawer extends Base<{ [key: string]: any }> {
@@ -31,4 +36,8 @@
  async getWmsAreaDetail(current: any, id?: string) {
    return getWmsArea(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsAreaQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsArea,
  getWmsArea,
  updateWmsArea,
  getWmsEnumData,
} from './Service/WmsAreaQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsAreaQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsArea: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsArea(data: Record<string, any>) {
    return addWmsArea(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsArea(id: string, data: Record<string, any>) {
    return updateWmsArea(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsAreaDetail(current: any, id?: string) {
    return getWmsArea(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsPlaceDrawer.ts
@@ -3,6 +3,7 @@
  addWmsPlace,
  getWmsPlace,
  updateWmsPlace,
  getWmsEnumData,
} from './Service/WmsPlaceDrawer'
import { useGlobalState } from '@/libs/Store/Store'
@@ -35,4 +36,8 @@
  async getWmsPlaceDetail(current: any, id?: string) {
    return getWmsPlace(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsPlaceQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsPlace,
  getWmsPlace,
  updateWmsPlace,
  getWmsEnumData,
} from './Service/WmsPlaceQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsPlaceQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsPlace: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsPlace(data: Record<string, any>) {
    return addWmsPlace(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsPlace(id: string, data: Record<string, any>) {
    return updateWmsPlace(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsPlaceDetail(current: any, id?: string) {
    return getWmsPlace(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Models/WmsStoreQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsStore,
  getWmsStore,
  updateWmsStore,
  getWmsEnumData,
} from './Service/WmsStoreQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsStoreQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsStore: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsStore(data: Record<string, any>) {
    return addWmsStore(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsStore(id: string, data: Record<string, any>) {
    return updateWmsStore(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsStoreDetail(current: any, id?: string) {
    return getWmsStore(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsAreaQueryDrawer/WmsAreaQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsAreaQueryDrawer/WmsAreaQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsAreaQueryDrawer.module.scss'
import { useWmsAreaQueryDrawer } from '../../../../Controllers/WmsAreaQueryDrawer.tsx'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
// @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,
    } = useWmsAreaQueryDrawer(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}
      >
        <DyFormForHighQuery
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyFormForHighQuery>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsPlaceQueryDrawer/WmsPlaceQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsPlaceQueryDrawer/WmsPlaceQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsPlaceQueryDrawer.module.scss'
import { useWmsPlaceQueryDrawer } from '../../../../Controllers/WmsPlaceQueryDrawer.tsx'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
// @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,
    } = useWmsPlaceQueryDrawer(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}
      >
        <DyFormForHighQuery
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyFormForHighQuery>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsStoreQueryDrawer/WmsStoreQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/Dialog/WmsStoreQueryDrawer/WmsStoreQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsStoreQueryDrawer.module.scss'
import { useWmsStoreQueryDrawer } from '../../../../Controllers/WmsStoreQueryDrawer.tsx'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
// @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,
    } = useWmsStoreQueryDrawer(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}
      >
        <DyFormForHighQuery
          ref={formRef}
          formData={formData.value}
          labelWidth="106px"
          formItemProps={formItems}
        ></DyFormForHighQuery>
      </BaseQueryDrawer>
    )
  },
})
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsArea/WmsArea.tsx
@@ -14,6 +14,9 @@
  getWmsEnumData,
  getStoreDataList,
} from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
// å¼•入公共选项配置
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import WmsAreaQueryDrawer from '../Dialog/WmsAreaQueryDrawer/WmsAreaQueryDrawer'
interface RenderTableType {
  url?: string
@@ -35,6 +38,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -45,6 +49,7 @@
      onRowClick,
      onConfirmWmsArea,
      onCheck,
      onAdvancedQuery,
      onAddWmsArea,
      onExport,
      openDetail,
@@ -52,44 +57,38 @@
      onBeforeUpload,
    } = useWmsArea(props, ctx)
    //定义高级查询引用
    const wmsAreaQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      areaNo: '',
      areaName: '',
      areaType: '',
      areaStatus: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      areaType: queryForm.value.areaType || '', // å¤„理下拉
      areaStatus: queryForm.value.areaStatus || '',
    }))
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['AreaNo', 'AreaName'])
    const searchFormInputAttrs_Placeholder = ref('请输入库区编号/库区名称')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      areaType: [] as Array<{ label: string; value: any }>,
      areaStatus: [] as Array<{ label: string; value: any }>,
      areaType: [] as Array<{ label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const areaTypeData = await getWmsEnumData({
          EnumName: 'AreaTypeEnum',
        const areaStatusEnumData = await getWmsEnumData({
          EnumName: 'AreaStatusEnum',
        })
        enumOptions.areaType = areaTypeData.map((item) => ({
        enumOptions.areaStatus = areaStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        // èŽ·å–é‡‡è´­ç±»åž‹æžšä¸¾
        const areaStatusData = await getWmsEnumData({
          EnumName: 'AreaStatusEnum',
        const areaTypeEnumData = await getWmsEnumData({
          EnumName: 'AreaTypeEnum',
        })
        enumOptions.areaStatus = areaStatusData.map((item) => ({
        enumOptions.areaType = areaTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
@@ -98,28 +97,80 @@
      }
    }
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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 = {
        areaNo: '',
        areaName: '',
        areaType: '',
        areaStatus: '',
        filter: '',
      }
      queryForm.value.searchVal = ''
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      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.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
     * @returns è¡¨æ ¼
     */
@@ -187,94 +238,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsArea}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <ElForm
            inline
            model={queryForm.value}
            class={styles.queryForm}
            label-width="80px"
          >
            <ElFormItem label="关键字">
              <ElInput
                v-model={queryForm.value.filter}
                placeholder="请输入关键字搜索"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="库区编码">
              <ElInput
                v-model={queryForm.value.areaNo}
                placeholder="请输入库区编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="库区名称">
              <ElInput
                v-model={queryForm.value.areaName}
                placeholder="请输入库区名称"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="库位类型">
              <ElSelect
                v-model={queryForm.value.areaType}
                placeholder="请选择托盘类型"
                clearable
                loading={enumOptions.areaType.length === 0}
                class={styles.formItem}
              >
                {enumOptions.areaType.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="库区状态">
              <ElSelect
                v-model={queryForm.value.areaStatus}
                placeholder="请选择托盘状态"
                clearable
                loading={enumOptions.areaStatus.length === 0}
                class={styles.formItem}
              >
                {enumOptions.areaStatus.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            {/* <ElFormItem label="日期范围">
              <ElDatePicker
                v-model={queryForm.value.dateRange}
                type="daterange"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                value-format="YYYY-MM-DD"
              />
            </ElFormItem> */}
            <ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQuery}>
                æŸ¥è¯¢
              </IconButton>
              <IconButton
                style="margin-left: 10px;"
                icon="refresh"
                onClick={resetQuery}
              >
                é‡ç½®
              </IconButton>
            </ElFormItem>
          </ElForm>
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsAreaQueryDrawer
            ref="wmsAreaQueryDrawerRef"
            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}>
@@ -287,6 +261,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsArea-import"
                name="file"
@@ -304,20 +279,65 @@
              <IconButton
                v-permission="wmsArea-output"
                icon="out"
                onClick={onExport}
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            {/* <Search
              placeholder="请输入关键字"
              v-model={search.value}
              onConfirm={onSearch}
              style={{ marginTop: '-1px' }}
            /> */}
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <el-tooltip
                  class="box-item"
                  effect="dark"
                  content={searchFormInputAttrs_Placeholder.value}
                  placement="top-start"
                >
                  <ElInput
                    v-model={queryForm.value.searchVal}
                    placeholder={searchFormInputAttrs_Placeholder.value}
                    clearable
                    class={styles.formItem}
                  />
                </el-tooltip>
              </ElFormItem>
              <ElFormItem label="" style="width:100px;">
                <ElSelect
                  v-model={queryForm.value.searchVal_FilterMode}
                  placeholder="请选择"
                  class={styles.formItem}
                >
                  {FILTER_MODE_OPTIONS_STRING.map((option) => (
                    <ElOption
                      key={option.value}
                      label={option.label}
                      value={option.value}
                    />
                  ))}
                </ElSelect>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsArea-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsArea"
            url="/api/v1/HIAWms/wmsArea/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsPlace/WmsPlace.tsx
@@ -15,6 +15,9 @@
  getAreaAreaDataList,
  getAisleDataList,
} from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
// å¼•入公共选项配置
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import WmsPlaceQueryDrawer from '../Dialog/WmsPlaceQueryDrawer/WmsPlaceQueryDrawer'
interface RenderTableType {
  url?: string
@@ -44,72 +47,62 @@
      onError,
      onSearch,
      onRowClick,
      dialogConfigForQuery,
      onConfirmWmsPlace,
      onCheck,
      onAddWmsPlace,
      onExport,
      openDetail,
      onSuccess,
      onAdvancedQuery,
      onBeforeUpload,
    } = useWmsPlace(props, ctx)
    //定义高级查询引用
    const wmsPlaceQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      placeNo: '',
      storageTypeNo: '',
      placeStatus: '',
      areaCode: '',
      aisle: '',
      islock: '',
      emptyContainer: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      storageTypeNo: queryForm.value.storageTypeNo || '', // å¤„理下拉
      placeStatus: queryForm.value.placeStatus || '',
      islock: queryForm.value.islock || '',
      aisle: queryForm.value.aisle || '',
      areaCode: queryForm.value.areaCode || '',
      emptyContainer: queryForm.value.emptyContainer || '',
    }))
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['PlaceNo'])
    const searchFormInputAttrs_Placeholder = ref('请输入库位编号')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      storageTypeNo: [] as Array<{ label: string; value: any }>,
      placeStatus: [] as Array<{ label: string; value: any }>,
      yesOrNo: [] as Array<{ label: string; value: any }>,
      islock: [] as Array<{ label: string; value: any }>,
      emptyContainer: [] as Array<{ label: string; value: any }>,
    })
    let areaTypelist = [] as Array<{ label: string; value: any }>
    let aisleTypelist = [] as Array<{ label: string; value: any }>
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const storageTypeNoData = await getWmsEnumData({
        const placeTypeEnumData = await getWmsEnumData({
          EnumName: 'PlaceTypeEnum',
        })
        enumOptions.storageTypeNo = storageTypeNoData.map((item) => ({
        enumOptions.storageTypeNo = placeTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        // èŽ·å–é‡‡è´­ç±»åž‹æžšä¸¾
        const placeStatusData = await getWmsEnumData({
        const placeStatusEnumData = await getWmsEnumData({
          EnumName: 'PlaceStatusEnum',
        })
        enumOptions.placeStatus = placeStatusData.map((item) => ({
        enumOptions.placeStatus = placeStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        const yesNoData = await getWmsEnumData({
        const yesNoEnumData = await getWmsEnumData({
          EnumName: 'YesNoEnum',
        })
        enumOptions.yesOrNo = yesNoData.map((item) => ({
        enumOptions.islock = yesNoEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        enumOptions.emptyContainer = yesNoEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
@@ -117,56 +110,80 @@
        console.error('获取枚举数据失败:', error)
      }
    }
    const getAreaType = async () => {
      try {
        const areaListData = await getAreaAreaDataList()
        areaTypelist = areaListData.map((item) => ({
          label: item.areaName || '',
          value: item.areaNo || '', // åŒä¸Š
        }))
      } catch (error) {
        areaTypelist = [] // å¤±è´¥æ—¶é‡ç½®ä¸ºç©ºæ•°ç»„
      }
    }
    const getAisleList = async () => {
      try {
        const aisleListData = await getAisleDataList()
        aisleTypelist = aisleListData.map((item) => ({
          label: item.aisleName || '',
          value: item.aisle || '',
        }))
      } catch (error) {
        console.error('获取巷道列表失败:', error)
        aisleTypelist = [] // å¤±è´¥æ—¶é‡ç½®ä¸ºç©ºæ•°ç»„
      }
    }
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      getAreaType()
      getAisleList()
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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 = {
        placeNo: '',
        storageTypeNo: '',
        placeStatus: '',
        aisle: '',
        areaCode: '',
        islock: '',
        emptyContainer: '',
        filter: '',
      }
      queryForm.value.searchVal = ''
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      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.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
@@ -247,144 +264,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsPlace}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <ElForm
            inline
            model={queryForm.value}
            class={styles.queryForm}
            label-width="80px"
          >
            <ElFormItem label="关键字">
              <ElInput
                v-model={queryForm.value.filter}
                placeholder="请输入关键字搜索"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="库位编码">
              <ElInput
                v-model={queryForm.value.placeNo}
                placeholder="请输入库位编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="库位类型">
              <ElSelect
                v-model={queryForm.value.storageTypeNo}
                placeholder="请选择托盘类型"
                clearable
                loading={enumOptions.storageTypeNo.length === 0}
                class={styles.formItem}
              >
                {enumOptions.storageTypeNo.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="库位状态">
              <ElSelect
                v-model={queryForm.value.placeStatus}
                placeholder="请选择托盘状态"
                clearable
                loading={enumOptions.placeStatus.length === 0}
                class={styles.formItem}
              >
                {enumOptions.placeStatus.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="库区">
              <ElSelect
                v-model={queryForm.value.areaCode}
                placeholder="请选择库区"
                clearable
                loading={areaTypelist.length === 0}
                class={styles.formItem}
              >
                {areaTypelist.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="巷道">
              <ElSelect
                v-model={queryForm.value.aisle}
                placeholder="请选择库区"
                clearable
                loading={aisleTypelist.length === 0}
                class={styles.formItem}
              >
                {aisleTypelist.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="是否锁定">
              <ElSelect
                v-model={queryForm.value.islock}
                placeholder="请选择是否锁定"
                clearable
                loading={enumOptions.yesOrNo.length === 0}
                class={styles.formItem}
              >
                {enumOptions.yesOrNo.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="是否空托">
              <ElSelect
                v-model={queryForm.value.emptyContainer}
                placeholder="请选择是否空托"
                clearable
                loading={enumOptions.yesOrNo.length === 0}
                class={styles.formItem}
              >
                {enumOptions.yesOrNo.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQuery}>
                æŸ¥è¯¢
              </IconButton>
              <IconButton
                style="margin-left: 10px;"
                icon="refresh"
                onClick={resetQuery}
              >
                é‡ç½®
              </IconButton>
            </ElFormItem>
          </ElForm>
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsPlaceQueryDrawer
            ref="wmsPlaceQueryDrawerRef"
            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}>
@@ -397,6 +287,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsPlace-import"
                name="file"
@@ -414,20 +305,65 @@
              <IconButton
                v-permission="wmsPlace-output"
                icon="out"
                onClick={onExport}
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            {/* <Search
              placeholder="请输入关键字"
              v-model={search.value}
              onConfirm={onSearch}
              style={{ marginTop: '-1px' }}
            /> */}
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <el-tooltip
                  class="box-item"
                  effect="dark"
                  content={searchFormInputAttrs_Placeholder.value}
                  placement="top-start"
                >
                  <ElInput
                    v-model={queryForm.value.searchVal}
                    placeholder={searchFormInputAttrs_Placeholder.value}
                    clearable
                    class={styles.formItem}
                  />
                </el-tooltip>
              </ElFormItem>
              <ElFormItem label="" style="width:100px;">
                <ElSelect
                  v-model={queryForm.value.searchVal_FilterMode}
                  placeholder="请选择"
                  class={styles.formItem}
                >
                  {FILTER_MODE_OPTIONS_STRING.map((option) => (
                    <ElOption
                      key={option.value}
                      label={option.label}
                      value={option.value}
                    />
                  ))}
                </ElSelect>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsPlace-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsPlace"
            url="/api/v1/HIAWms/wmsPlace/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/hiawms_web/src/widgets/WmsStoreInfo/Views/Pages/WmsStore/WmsStore.tsx
@@ -1,4 +1,4 @@
import { defineComponent, reactive, ref, computed } from 'vue'
import { defineComponent, reactive, ref, computed, onMounted } from 'vue'
import type { Ref } from 'vue'
import BaseTable from '@/components/Table/Table'
import styles from './WmsStore.module.scss'
@@ -9,8 +9,10 @@
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import { ElForm, ElFormItem, ElInput } from 'element-plus'
import { ElForm, ElFormItem, ElInput, ElOption, ElSelect } from 'element-plus'
import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import WmsStoreQueryDrawer from '../Dialog/WmsStoreQueryDrawer/WmsStoreQueryDrawer'
interface RenderTableType {
  url?: string
@@ -32,6 +34,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -41,6 +44,7 @@
      onSearch,
      onRowClick,
      onConfirmWmsStore,
      onAdvancedQuery,
      onCheck,
      onAddWmsStore,
      onExport,
@@ -49,31 +53,102 @@
      onBeforeUpload,
    } = useWmsStore(props, ctx)
    //定义高级查询引用
    const wmsStoreQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      storeCode: '',
      storeName: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['StoreCode', 'StoreName'])
    const searchFormInputAttrs_Placeholder = ref('请输入仓库代码/仓库名称')
    const queryParams = computed(() => ({
      ...queryForm.value,
    }))
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({})
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
      } catch (error) {
        console.error('获取枚举数据失败:', error)
      }
    }
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
    })
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】)
    const handleQueryForMain = async () => {
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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 = {
        storeCode: '',
        storeName: '',
        filter: '',
      }
      queryForm.value.searchVal = ''
      queryForm.value.searchVal_FilterMode =
        FILTER_MODE_OPTIONS_STRING[0]?.value || ''
      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.searchVal_FilterMode =
        queryForm.value.searchVal_FilterMode
      _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.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value
      return filteredData
    }
    /**
@@ -143,51 +218,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsStore}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <ElForm
            inline
            model={queryForm.value}
            class={styles.queryForm}
            label-width="80px"
          >
            <ElFormItem label="关键字">
              <ElInput
                v-model={queryForm.value.filter}
                placeholder="请输入关键字搜索"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="仓库编码">
              <ElInput
                v-model={queryForm.value.storeCode}
                placeholder="请输入仓库编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="仓库名称">
              <ElInput
                v-model={queryForm.value.storeName}
                placeholder="请输入仓库名称"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQuery}>
                æŸ¥è¯¢
              </IconButton>
              <IconButton
                style="margin-left: 10px;"
                icon="refresh"
                onClick={resetQuery}
              >
                é‡ç½®
              </IconButton>
            </ElFormItem>
          </ElForm>
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsStoreQueryDrawer
            ref="wmsStoreQueryDrawerRef"
            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}>
@@ -200,6 +241,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsStore-import"
                name="file"
@@ -217,20 +259,65 @@
              <IconButton
                v-permission="wmsStore-output"
                icon="out"
                onClick={onExport}
                onClick={handleExport}
              >
                å¯¼å‡º
              </IconButton>
            </div>
            {/* <Search
              placeholder="请输入关键字"
              v-model={search.value}
              onConfirm={onSearch}
              style={{ marginTop: '-1px' }}
            /> */}
            <ElFormItem style={{ marginTop: '15px' }}>
              <ElFormItem label="关键字">
                <el-tooltip
                  class="box-item"
                  effect="dark"
                  content={searchFormInputAttrs_Placeholder.value}
                  placement="top-start"
                >
                  <ElInput
                    v-model={queryForm.value.searchVal}
                    placeholder={searchFormInputAttrs_Placeholder.value}
                    clearable
                    class={styles.formItem}
                  />
                </el-tooltip>
              </ElFormItem>
              <ElFormItem label="" style="width:100px;">
                <ElSelect
                  v-model={queryForm.value.searchVal_FilterMode}
                  placeholder="请选择"
                  class={styles.formItem}
                >
                  {FILTER_MODE_OPTIONS_STRING.map((option) => (
                    <ElOption
                      key={option.value}
                      label={option.label}
                      value={option.value}
                    />
                  ))}
                </ElSelect>
              </ElFormItem>
              <IconButton
                type="primary"
                icon="search"
                onClick={handleQueryForMain}
              >
                æŸ¥è¯¢
              </IconButton>
              {/* <IconButton style="" icon="refresh" onClick={resetQuery}>
                é‡ç½®
              </IconButton> */}
              <IconButton
                v-permission="wmsStore-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsStore"
            url="/api/v1/HIAWms/wmsStore/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsArea/GetWmsAreaInput.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsArea;
@@ -8,15 +9,40 @@
/// </summary>
public class GetWmsAreaInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    #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>
    /// åº“区编号
@@ -24,27 +50,190 @@
    public string AreaNo { get; set; }
    /// <summary>
    /// åº“区编号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaNo_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    /// <summary>
    /// åº“区名称-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaName_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æè¿°
    /// </summary>
    public string? AreaDesc { get; set; }
    public string AreaDesc { get; set; }
    /// <summary>
    /// æè¿°-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaDesc_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“区状态
    /// </summary>
    public AreaStatusEnum AreaStatus { get; set; }
    public int? AreaStatus { get; set; }
    /// <summary>
    /// åº“区状态-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaStatus_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// åº“区类型
    /// </summary>
    public AreaTypeEnum AreaType { get; set; }
    public int? AreaType { get; set; }
    /// <summary>
    /// åº“区类型-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaType_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField1_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField2_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField3_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    public string StoreCode { get; set; }
    /// <summary>
    /// ä»“库代码-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StoreCode_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string StoreName { get; set; }
    /// <summary>
    /// ä»“库名称-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StoreName_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æŽ’序
    /// </summary>
    public int? Sort { get; set; }
    /// <summary>
    /// æŽ’序-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Sort_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remark { get; set; }
    /// <summary>
    /// å¤‡æ³¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Remark_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsDisabled_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public string CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string CreatorId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum CreatorId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public 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 string DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlace/GetWmsPlacesInput.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace;
@@ -6,32 +7,71 @@
/// <summary>
/// WmsPlace查询参数对象
/// </summary>
public class GetWmsMaterialInfoInput : ExtensiblePagedAndSortedResultRequestDto
public class GetWmsPlaceInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    #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>
    /// Gets or sets the name.
    /// åº“位编号
    /// </summary>
    public string Name { get; set; }
    public string PlaceNo { get; set; }
    /// <summary>
    /// ç¼–号
    /// åº“位编号-查询关系运算符
    /// </summary>
    public virtual string PlaceNo { get; set; }
    public SearchFilterModeEnum PlaceNo_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// è´§ä½ç±»åž‹
    /// </summary>
    public PlaceTypeEnum? StorageTypeNo { get; set; }
    public int? StorageTypeNo { get; set; }
    /// <summary>
    /// è´§ä½ç±»åž‹-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StorageTypeNo_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// </summary>
    public PlaceStatusEnum? PlaceStatus { get; set; }
    public int? PlaceStatus { get; set; }
    /// <summary>
    /// è´§ä½çŠ¶æ€-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum PlaceStatus_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ‰€åœ¨åº“区
@@ -39,13 +79,19 @@
    public string AreaCode { get; set; }
    /// <summary>
    /// å··é“
    /// æ‰€åœ¨åº“区-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaCode_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    public int? Aisle { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// -查询关系运算符
    /// </summary>
    public virtual bool IsDisabled { get; set; }
    public SearchFilterModeEnum Aisle_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æŽ’
@@ -53,9 +99,19 @@
    public int? RowNo { get; set; }
    /// <summary>
    /// æŽ’-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RowNo_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// åˆ—
    /// </summary>
    public int? ColumnNo { get; set; }
    /// <summary>
    /// åˆ—-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum ColumnNo_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å±‚
@@ -63,17 +119,160 @@
    public int? LayerNo { get; set; }
    /// <summary>
    /// å±‚-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum LayerNo_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// </summary>
    public YesNoEnum? Islock { get; set; }
    public int? Islock { get; set; }
    /// <summary>
    /// æ˜¯å¦é”å®š-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Islock_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// </summary>
    public YesNoEnum? EmptyContainer { get; set; }
    public int? EmptyContainer { get; set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum EmptyContainer_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æŽ’序
    /// </summary>
    public int? Sort { get; set; }
    /// <summary>
    /// æŽ’序-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Sort_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æœ€å¤§åº“存量
    /// </summary>
    public int MaxStockNumber { get; set; }
    public int? MaxStockNumber { get; set; }
    /// <summary>
    /// æœ€å¤§åº“存量-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaxStockNumber_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField1_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remark { get; set; }
    /// <summary>
    /// å¤‡æ³¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Remark_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField2_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsDisabled_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField3_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public string CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string CreatorId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum CreatorId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public 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 string DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStore/GetWmsStoreInput.cs
@@ -1,3 +1,4 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStore;
@@ -7,23 +8,181 @@
/// </summary>
public class GetWmsStoreInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    #region å…³é”®å­—查询
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    /// <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? StoreCode { get; set; }
    public string StoreCode { get; set; }
    /// <summary>
    /// ä»“库代码-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StoreCode_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
    public string StoreName { get; set; }
    /// <summary>
    /// ä»“库名称-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StoreName_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField1_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField2_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField3_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.精准查询;
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsDisabled_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public string CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string CreatorId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum CreatorId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public 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 string DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs
@@ -6,7 +6,7 @@
/// <summary>
/// WmsPlace应用服务
/// </summary>
public interface IWmsPlaceAppService : ICrudAppService<WmsPlaceDto, Guid, GetWmsMaterialInfoInput, WmsPlaceCreateDto, WmsPlaceUpdateDto>
public interface IWmsPlaceAppService : ICrudAppService<WmsPlaceDto, Guid, GetWmsPlaceInput, WmsPlaceCreateDto, WmsPlaceUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
@@ -42,5 +42,5 @@
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfoInput input);
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlaceInput input);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
@@ -9,6 +9,8 @@
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Application.Implements;
@@ -34,7 +36,11 @@
        return ObjectMapper.Map<WmsArea, WmsAreaDto>(await _wmsareaRepository.GetAsync(id));
    }
    /// <inheritdoc />
    /// <summary>
    /// åˆ†é¡µèŽ·å–ä»“åº“ä¿¡æ¯
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsAreaDto>> GetListAsync(GetWmsAreaInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -44,12 +50,40 @@
            input.Sorting = nameof(WmsArea.Sort);
        }
        var specification = new WmsAreaSpecification(input.Name);
        var area = ObjectMapper.Map<GetWmsAreaInput, WmsArea>(input);
        var count = await _wmsareaRepository.GetCountAsync(area,input.Filter, specification);
        var list = await _wmsareaRepository.GetListAsync(area,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmsareaRepository.GetCountAsync(whereConditions);
        var list = await _wmsareaRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsAreaDto>(count, ObjectMapper.Map<List<WmsArea>, List<WmsAreaDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsArea, bool>>> DynamicGetQueryParams(GetWmsAreaInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsArea, GetWmsAreaInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsArea, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsArea, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
@@ -299,7 +333,11 @@
        }
    }
    /// <inheritdoc />
    /// <summary>
    /// å¯¼å‡ºä»“库库区信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsAreaInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -309,9 +347,16 @@
            input.Sorting = nameof(WmsArea.Sort);
        }
        var specification = new WmsAreaSpecification(input.Name);
        var area = ObjectMapper.Map<GetWmsAreaInput, WmsArea>(input);
        var list = await _wmsareaRepository.GetListAsync(area,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmsareaRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsArea>, List<WmsAreaDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -319,7 +364,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsArea列表" : result.Count == 1 ? result.First()?.AreaName : "WmsArea模版";
        var fileName = "库区信息";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -45,6 +45,27 @@
            _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
        }
        /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        /// </summary>
        /// <param name="input">输入参数</param>
        /// <returns></returns>
        private FunReturnResultModel<Expression<Func<WmsPlace, bool>>> DynamicGetQueryPlaceParams(GetWmsPlaceInput input)
        {
            // åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
            var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsPlace, GetWmsPlaceInput>(input);
            if (!whereConditions.IsSuccess)
            {
                throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
            }
            //也可再次自定义构建查询条件
            Expression<Func<WmsPlace, bool>> extendExpression = a => a.IsDeleted == false;
            // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
            var pres = (System.Linq.Expressions.Expression<Func<WmsPlace, bool>>)(whereConditions.data);
            whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
            return whereConditions;
        }
        /// <summary>
        /// æŸ¥æ‰¾ç©ºåº“位
@@ -61,7 +82,9 @@
            // 1. èŽ·å–æ‰€æœ‰åº“å­˜å’Œåº“ä½ä¿¡æ¯
            var stockList = await _wmsMaterialStockRepository.GetListAsync(whereConditions);
            var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI });
            var placeConditions = DynamicGetQueryPlaceParams(new GetWmsPlaceInput { StorageTypeNo = (int)PlaceTypeEnum.YUANLIAOKUWEI });
            var placeList = await _wmsPlaceRepository.GetListByFilterAsync(placeConditions.data);
            var allPlaceList = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(placeList.Where(x => !x.IsDisabled).ToList());
            // 2. æŸ¥æ‰¾ç›¸åŒç‰©æ–™åž‹å·å’Œç¼–号的库存(按库存量降序)
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
@@ -4,6 +4,8 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
@@ -32,8 +34,12 @@
        return ObjectMapper.Map<WmsPlace, WmsPlaceDto>(await _wmsplaceRepository.GetAsync(id));
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsPlaceDto>> GetListAsync(GetWmsMaterialInfoInput input)
    /// <summary>
    /// åˆ†é¡µèŽ·å–åº“ä½ä¿¡æ¯
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsPlaceDto>> GetListAsync(GetWmsPlaceInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -42,14 +48,41 @@
            input.Sorting = nameof(WmsPlace.Sort);
        }
        var specification = new WmsPlaceSpecification(input.Name);
        var place = ObjectMapper.Map<GetWmsMaterialInfoInput, WmsPlace>(input);
        var count = await _wmsplaceRepository.GetCountAsync(place,input.Filter, specification);
        var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmsplaceRepository.GetCountAsync(whereConditions);
        var list = await _wmsplaceRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsPlaceDto>(count, ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsPlace, bool>>> DynamicGetQueryParams(GetWmsPlaceInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsPlace, GetWmsPlaceInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsPlace, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsPlace, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
    public virtual async Task<WmsPlaceDto> CreateAsync(WmsPlaceCreateDto input)
    {
@@ -286,8 +319,12 @@
        }
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfoInput input)
    /// <summary>
    /// å¯¼å‡ºåº“位信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlaceInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -296,9 +333,16 @@
            input.Sorting = nameof(WmsPlace.Sort);
        }
        var specification = new WmsPlaceSpecification(input.Name);
        var place = ObjectMapper.Map<GetWmsMaterialInfoInput, WmsPlace>(input);
        var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmsplaceRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -306,7 +350,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsPlace列表" : result.Count == 1 ? result.First()?.PlaceNo : "WmsPlace模版";
        var fileName = "库位信息";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs
@@ -8,6 +8,8 @@
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Application.Implements;
@@ -41,12 +43,40 @@
            input.Sorting = nameof(WmsStore.Sort);
        }
        var specification = new WmsStoreSpecification(input.Name);
        var store = ObjectMapper.Map<GetWmsStoreInput, WmsStore>(input);
        var count = await _wmsstoreRepository.GetCountAsync(store,input.Filter, specification);
        var list = await _wmsstoreRepository.GetListAsync(store,input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmsstoreRepository.GetCountAsync(whereConditions);
        var list = await _wmsstoreRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsStoreDto>(count, ObjectMapper.Map<List<WmsStore>, List<WmsStoreDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsStore, bool>>> DynamicGetQueryParams(GetWmsStoreInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsStore, GetWmsStoreInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsStore, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsStore, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
@@ -284,9 +314,16 @@
            input.Sorting = nameof(WmsStore.Sort);
        }
        var specification = new WmsStoreSpecification(input.Name);
        var store = ObjectMapper.Map<GetWmsStoreInput, WmsStore>(input);
        var list = await _wmsstoreRepository.GetListAsync(store, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmsstoreRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsStore>, List<WmsStoreDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -294,7 +331,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsStore列表" : result.Count == 1 ? result.First()?.StoreCode : "WmsStore模版";
        var fileName = "仓库信息";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs
@@ -23,6 +23,6 @@
         * into multiple profile classes for a better organization. */
        CreateMap<WmsMaterialInfo, WmsMaterialInfoDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsMaterialInfoCreateDto, WmsMaterialInfo>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsMaterialInfoInput, WmsMaterialInfo>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsPlaceInput, WmsMaterialInfo>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs
@@ -21,6 +21,6 @@
         * into multiple profile classes for a better organization. */
        CreateMap<WmsPlace, WmsPlaceDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsPlaceCreateDto, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsMaterialInfoInput, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsPlaceInput, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsAreas/IWmsAreaRepository.cs
@@ -1,3 +1,5 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -41,7 +43,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsArea>> GetListAsync(WmsArea? area, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsArea> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsArea>> GetListAsync(FunReturnResultModel<Expression<Func<WmsArea, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–åº“åŒºåˆ—è¡¨
@@ -57,5 +59,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsArea? area, string filter = null, Specification<WmsArea> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsArea, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs
@@ -1,5 +1,7 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -43,7 +45,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsPlace>> GetListAsync(WmsPlace? place, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsPlace> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsPlace>> GetListAsync(FunReturnResultModel<Expression<Func<WmsPlace, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–å··é“åˆ—è¡¨
@@ -59,7 +61,7 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsPlace, bool>>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®ç±»åž‹èŽ·å–åº“ä½åˆ—è¡¨
@@ -68,4 +70,22 @@
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsPlace>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–åº“ä½åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsPlace>> GetListByFilterAsync(Expression<Func<WmsPlace, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªåº“ä½ä¿¡æ¯
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsPlace> GetSingleByFilterAsync(Expression<Func<WmsPlace, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsStores/IWmsStoreRepository.cs
@@ -1,3 +1,5 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -41,7 +43,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsStore>> GetListAsync(WmsStore? store, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsStore> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsStore>> GetListAsync(FunReturnResultModel<Expression<Func<WmsStore, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// æŸ¥è¯¢ä»“库列表
@@ -57,5 +59,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsStore? store, string filter = null, Specification<WmsStore> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsStore, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
@@ -1,7 +1,9 @@
using System;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using DatabaseSchemaReader.Filters;
using MathNet.Numerics;
using Microsoft.EntityFrameworkCore;
@@ -60,23 +62,39 @@
        return sort + 1;
    }
    /// <inheritdoc />
    public async Task<List<WmsArea>> GetListAsync(WmsArea? area, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsArea> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    /// <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<WmsArea>> GetListAsync(FunReturnResultModel<Expression<Func<WmsArea, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsAreaSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.AreaNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(area.AreaNo), u => u.AreaNo.Contains(area.AreaNo))
            .WhereIf(!string.IsNullOrEmpty(area.AreaName), u => u.AreaNo.Contains(area.AreaName))
            .WhereIf(!string.IsNullOrEmpty(area.StoreCode), u => u.AreaNo == area.StoreCode)
            .WhereIf(area.AreaStatus > 0, u => u.AreaStatus == area.AreaStatus)
            .WhereIf(area.AreaType > 0, u => u.AreaType == area.AreaType)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsArea.Sort) : sorting)
            .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<WmsArea, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <summary>
@@ -92,20 +110,20 @@
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsArea? area, string filter = null, Specification<WmsArea> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsAreaSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.AreaNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(area.AreaNo), u => u.AreaNo.Contains(area.AreaNo))
            .WhereIf(!string.IsNullOrEmpty(area.AreaName), u => u.AreaNo.Contains(area.AreaName))
            .WhereIf(!string.IsNullOrEmpty(area.StoreCode), u => u.AreaNo == area.StoreCode)
            .WhereIf(area.AreaStatus > 0, u => u.AreaStatus == area.AreaStatus)
            .WhereIf(area.AreaType > 0, u => u.AreaType == area.AreaType)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    //public async Task<long> GetCountAsync(WmsArea? area, string filter = null, Specification<WmsArea> specification = null, CancellationToken cancellationToken = default)
    //{
    //    specification ??= new WmsAreaSpecification();
    //    return await (await GetQueryableAsync())
    //        .Where(specification.ToExpression())
    //        .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.AreaNo.Contains(filter))
    //        .WhereIf(!string.IsNullOrEmpty(area.AreaNo), u => u.AreaNo.Contains(area.AreaNo))
    //        .WhereIf(!string.IsNullOrEmpty(area.AreaName), u => u.AreaNo.Contains(area.AreaName))
    //        .WhereIf(!string.IsNullOrEmpty(area.StoreCode), u => u.AreaNo == area.StoreCode)
    //        .WhereIf(area.AreaStatus > 0, u => u.AreaStatus == area.AreaStatus)
    //        .WhereIf(area.AreaType > 0, u => u.AreaType == area.AreaType)
    //        .Where(x => !x.IsDeleted)
    //        .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    //}
    /// <inheritdoc />
    public override async Task<IQueryable<WmsArea>> WithDetailsAsync()
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs
@@ -1,10 +1,13 @@
using System.Linq.Dynamic.Core;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Specifications;
@@ -54,32 +57,44 @@
        return sort + 1;
    }
    /// <inheritdoc />
    public async Task<List<WmsPlace>> GetListAsync(WmsPlace? place, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsPlace> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    /// <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<WmsPlace>> GetListAsync(FunReturnResultModel<Expression<Func<WmsPlace, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsPlaceSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.PlaceNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(place.PlaceNo), u => u.PlaceNo.Contains(place.PlaceNo))
            .WhereIf(place.PlaceStatus > 0, u => u.PlaceStatus == place.PlaceStatus)
            .WhereIf(place.StorageTypeNo > 0, u => u.StorageTypeNo == place.StorageTypeNo)
            .WhereIf(place.Aisle > 0, u => u.Aisle == place.Aisle)
            .WhereIf(place.RowNo > 0, u => u.RowNo == place.RowNo)
            .WhereIf(place.ColumnNo > 0, u => u.ColumnNo == place.ColumnNo)
            .WhereIf(place.LayerNo > 0, u => u.LayerNo == place.LayerNo)
            .WhereIf(place.Islock > 0, u => u.Islock == place.Islock)
            .WhereIf(place.EmptyContainer > 0, u => u.EmptyContainer == place.EmptyContainer)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsPlace.Sort) : sorting)
            .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<WmsPlace, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–å··é“åˆ—è¡¨
    /// èŽ·å–å··é“åˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
@@ -90,25 +105,25 @@
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsPlaceSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!string.IsNullOrEmpty(place.PlaceNo), u => u.PlaceNo == place.PlaceNo)
            .WhereIf(place.PlaceStatus > 0, u => u.PlaceStatus == place.PlaceStatus)
            .WhereIf(place.StorageTypeNo > 0, u => u.StorageTypeNo == place.StorageTypeNo)
            .WhereIf(place.Aisle > 0, u => u.Aisle == place.Aisle)
            .WhereIf(place.RowNo > 0, u => u.RowNo == place.RowNo)
            .WhereIf(place.ColumnNo > 0, u => u.ColumnNo == place.ColumnNo)
            .WhereIf(place.LayerNo > 0, u => u.LayerNo == place.LayerNo)
            .WhereIf(place.Islock > 0, u => u.Islock == place.Islock)
            .WhereIf(place.EmptyContainer > 0, u => u.EmptyContainer == place.EmptyContainer)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.PlaceNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    ///// <inheritdoc />
    //public async Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default)
    //{
    //    specification ??= new WmsPlaceSpecification();
    //    return await (await GetQueryableAsync())
    //        .Where(specification.ToExpression())
    //        .WhereIf(!string.IsNullOrEmpty(place.PlaceNo), u => u.PlaceNo == place.PlaceNo)
    //        .WhereIf(place.PlaceStatus > 0, u => u.PlaceStatus == place.PlaceStatus)
    //        .WhereIf(place.StorageTypeNo > 0, u => u.StorageTypeNo == place.StorageTypeNo)
    //        .WhereIf(place.Aisle > 0, u => u.Aisle == place.Aisle)
    //        .WhereIf(place.RowNo > 0, u => u.RowNo == place.RowNo)
    //        .WhereIf(place.ColumnNo > 0, u => u.ColumnNo == place.ColumnNo)
    //        .WhereIf(place.LayerNo > 0, u => u.LayerNo == place.LayerNo)
    //        .WhereIf(place.Islock > 0, u => u.Islock == place.Islock)
    //        .WhereIf(place.EmptyContainer > 0, u => u.EmptyContainer == place.EmptyContainer)
    //        .Where(x => !x.IsDeleted)
    //        .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.PlaceNo.Contains(filter))
    //        .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    //}
    /// <inheritdoc />
    public override async Task<IQueryable<WmsPlace>> WithDetailsAsync()
@@ -118,7 +133,7 @@
    }
    /// <summary>
    /// èŽ·å–åº“åŒºåˆ—è¡¨
    /// èŽ·å–åº“åŒºåˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
@@ -129,4 +144,56 @@
            .Where(x=>x.StorageTypeNo == placeType)
           .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–åº“ä½ä¿¡æ¯åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsPlace>> GetListByFilterAsync(Expression<Func<WmsPlace, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªåº“ä½ä¿¡æ¯
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<WmsPlace> GetSingleByFilterAsync(Expression<Func<WmsPlace, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs
@@ -1,6 +1,8 @@
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@@ -51,21 +53,41 @@
        return sort + 1;
    }
    /// <inheritdoc />
    public async Task<List<WmsStore>> GetListAsync(WmsStore? store, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsStore> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    /// <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<WmsStore>> GetListAsync(FunReturnResultModel<Expression<Func<WmsStore, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsStoreSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.StoreCode.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(store.StoreCode),u=>u.StoreCode.Contains(store.StoreCode))
            .WhereIf(!string.IsNullOrEmpty(store.StoreName),u=>u.StoreName.Contains(store.StoreName))
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsStore.Sort) : sorting)
            .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<WmsStore, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥è¯¢ä»“库列表
@@ -80,17 +102,17 @@
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsStore? store, string filter = null, Specification<WmsStore> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsStoreSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.StoreCode.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(store.StoreCode), u => u.StoreCode.Contains(store.StoreCode))
            .WhereIf(!string.IsNullOrEmpty(store.StoreName), u => u.StoreName.Contains(store.StoreName))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    //public async Task<long> GetCountAsync(WmsStore? store, string filter = null, Specification<WmsStore> specification = null, CancellationToken cancellationToken = default)
    //{
    //    specification ??= new WmsStoreSpecification();
    //    return await (await GetQueryableAsync())
    //        .Where(specification.ToExpression())
    //        .Where(x => !x.IsDeleted)
    //        .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.StoreCode.Contains(filter))
    //        .WhereIf(!string.IsNullOrEmpty(store.StoreCode), u => u.StoreCode.Contains(store.StoreCode))
    //        .WhereIf(!string.IsNullOrEmpty(store.StoreName), u => u.StoreName.Contains(store.StoreName))
    //        .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    //}
    /// <inheritdoc />
    public override async Task<IQueryable<WmsStore>> WithDetailsAsync()
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsAreaController.cs
@@ -52,6 +52,7 @@
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsAreaDto>> GetListAsync([FromQuery] GetWmsAreaInput input)
        {
            return _wmsareaAppService.GetListAsync(input);
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs
@@ -52,7 +52,8 @@
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsPlaceDto>> GetListAsync([FromQuery] GetWmsMaterialInfoInput input)
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsPlaceDto>> GetListAsync([FromQuery] GetWmsPlaceInput input)
        {
            return _wmsplaceAppService.GetListAsync(input);
        }
@@ -168,7 +169,7 @@
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInfoInput input)
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsPlaceInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsplaceAppService.ExportAsync(input);
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsStoreController.cs
@@ -52,6 +52,7 @@
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsStoreDto>> GetListAsync([FromQuery] GetWmsStoreInput input)
        {
            return _wmsstoreAppService.GetListAsync(input);
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/²Ö¿âÐÅÏ¢ÅäÖÃ.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmsstores
[实体类名]:WmsStore
[实体类对象名]:WmsStore
[页面菜单名]:托盘管理
[页面菜单对象缩写]:wmsStore
[表的中文注解]:仓库信息
[重复性校验字段]:StoreCode
[删除提示字段]:StoreCode
[模糊查询字段]:'StoreCode','StoreName'
[模糊查询字段名]:请输入仓库代码/仓库名称
[项目命名空间]:HIAWms
[枚举类型字段集合]:
[前端根文件夹名称]:web
[排序]:CreationTime
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/¿âλÅäÖÃÐÅÏ¢.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmsplaces
[实体类名]:WmsPlace
[实体类对象名]:WmsPlace
[页面菜单名]:库位信息
[页面菜单对象缩写]:wmsPlace
[表的中文注解]:库位信息
[重复性校验字段]:PlaceNo
[删除提示字段]:PlaceNo
[模糊查询字段]:'PlaceNo'
[模糊查询字段名]:请输入库位编号
[项目命名空间]:HIAWms
[枚举类型字段集合]:StorageTypeNo,PlaceTypeEnum&PlaceStatus,PlaceStatusEnum&Islock,YesNoEnum&EmptyContainer,YesNoEnum
[前端根文件夹名称]:web
[排序]:CreationTime
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/¿âÇøÅäÖÃ.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmsareas
[实体类名]:WmsArea
[实体类对象名]:WmsArea
[页面菜单名]:库区信息
[页面菜单对象缩写]:wmsArea
[表的中文注解]:仓库信息
[重复性校验字段]:AreaNo
[删除提示字段]:AreaNo
[模糊查询字段]:'AreaNo','AreaName'
[模糊查询字段名]:请输入库区编号/库区名称
[项目命名空间]:HIAWms
[枚举类型字段集合]:AreaStatus,AreaStatusEnum&AreaType,AreaTypeEnum
[前端根文件夹名称]:web
[排序]:CreationTime