zs
2025-05-14 6be4dc69a73560ab2e08e68d5dbfdf95ae62d5b4
托盘高级查询
已添加6个文件
已修改7个文件
1776 ■■■■ 文件已修改
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainer.ts 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainerQueryDrawer.tsx 581 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/Service/WmsContainerQueryDrawer.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/WmsContainerQueryDrawer.ts 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.tsx 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss 227 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainer/GetWmsContainerInput.cs 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/File/GenerateCodeConfigParamFiles/托盘配置.txt 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainer.ts
@@ -51,7 +51,11 @@
    title: '',
    isAdd: false,
  })
  const dialogConfigForQuery = reactive({
    visible: false,
    title: '',
    isAdd: false,
  })
  const dialogSettingConfig = reactive({
    visible: false,
    title: '',
@@ -149,6 +153,15 @@
    sort.value = params.totalCount + 1
  }
  //点击按钮【高级查询】
  const onAdvancedQuery = () => {
    const params = tableRef.value?.getPaginationParams()
    current.value = null
    dialogConfigForQuery.visible = true
    dialogConfigForQuery.isAdd = true
    dialogConfigForQuery.title = '高级查询'
  }
  const onConfirmWmsContainer = async () => {
    dialogConfig.visible = false
    if (dialogConfig.isAdd) {
@@ -167,12 +180,13 @@
      current.value = row
    }
  }
  /**
   * å¯¼å‡º
   */
  const onExport = () => {
    const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsContainer/export', params, 'wmsContainer')
  /**
   * å¯¼å‡º
     */
  const onExport = (data = {}) => {
    //const params = tableRef.value?.getParams()
    exportFile('/api/v1/HIAWms/wmsContainer/export', data, '托盘管理')
  }
  /**
@@ -241,6 +255,7 @@
    current,
    search,
    sort,
    dialogConfigForQuery,
    wmsContainerColumns,
    paginationParams,
    headers,
@@ -253,6 +268,7 @@
    onRowClick,
    onConfirmWmsContainer,
    onCheck,
    onAdvancedQuery,
    onAddWmsContainer,
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Controllers/WmsContainerQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,581 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsContainerDrawer } from '../Models/WmsContainerDrawer'
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 useWmsContainerQueryDrawer = (props: any, ctx?: any) => {
  const wmsContainerDrawer =
    injectModel<WmsContainerDrawer>('WmsContainerDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入托盘编号',
      highSelectAttrs: {
        prop: 'containerNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '托盘类型',
      prop: 'containerType',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入托盘类型',
      highSelectAttrs: {
        prop: 'containerType_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '托盘状态',
      prop: 'containerStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入托盘状态',
      highSelectAttrs: {
        prop: 'containerStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '长度',
      prop: 'specLength',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入长度',
      highSelectAttrs: {
        prop: 'specLength_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '宽度',
      prop: 'specWidth',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入宽度',
      highSelectAttrs: {
        prop: 'specWidth_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '高度',
      prop: 'specHeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入高度',
      highSelectAttrs: {
        prop: 'specHeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限长',
      prop: 'limitLength',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限长',
      highSelectAttrs: {
        prop: 'limitLength_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限宽',
      prop: 'limitWidth',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限宽',
      highSelectAttrs: {
        prop: 'limitWidth_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '限高',
      prop: 'limitHeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入限高',
      highSelectAttrs: {
        prop: 'limitHeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: '载重上限',
      prop: 'maxWeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 0.01,
      precision: 2,
      //disabled: disabled,
      placeholder: '请输入载重上限',
      highSelectAttrs: {
        prop: 'maxWeight_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    // {
    //   label: '异常数量',
    //   prop: 'exceptionNumber',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(inputNumber, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   step: 1,
    //   precision: 0,
    //   //disabled: disabled,
    //   placeholder: '请输入异常数量',
    //   highSelectAttrs: {
    //     prop: 'exceptionNumber_FilterMode',
    //     el: 'select',
    //     placeholder: '请选择',
    //     options: FILTER_MODE_OPTIONS_NUM,
    //   },
    // },
    // {
    //   label: '物料数量',
    //   prop: 'materialNumber',
    //   el: (props: any, { attrs }: SetupContext) => {
    //     return h(inputNumber, {
    //       ...props,
    //       clearable: true,
    //       ...attrs,
    //     })
    //   },
    //   width: '100%',
    //   step: 1,
    //   precision: 0,
    //   //disabled: disabled,
    //   placeholder: '请输入物料数量',
    //   highSelectAttrs: {
    //     prop: 'materialNumber_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: '冗余字段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 = {
      containerNo: formData.value.containerNo || '',
      containerNo_FilterMode: formData.value.containerNo_FilterMode || '',
      containerType: formData.value.containerType || '',
      containerType_FilterMode: formData.value.containerType_FilterMode || '',
      containerStatus: formData.value.containerStatus || '',
      containerStatus_FilterMode:
        formData.value.containerStatus_FilterMode || '',
      specLength: formData.value.specLength || '',
      specLength_FilterMode: formData.value.specLength_FilterMode || '',
      specWidth: formData.value.specWidth || '',
      specWidth_FilterMode: formData.value.specWidth_FilterMode || '',
      specHeight: formData.value.specHeight || '',
      specHeight_FilterMode: formData.value.specHeight_FilterMode || '',
      limitLength: formData.value.limitLength || '',
      limitLength_FilterMode: formData.value.limitLength_FilterMode || '',
      limitWidth: formData.value.limitWidth || '',
      limitWidth_FilterMode: formData.value.limitWidth_FilterMode || '',
      limitHeight: formData.value.limitHeight || '',
      limitHeight_FilterMode: formData.value.limitHeight_FilterMode || '',
      maxWeight: formData.value.maxWeight || '',
      maxWeight_FilterMode: formData.value.maxWeight_FilterMode || '',
      exceptionNumber: formData.value.exceptionNumber || '',
      exceptionNumber_FilterMode:
        formData.value.exceptionNumber_FilterMode || '',
      materialNumber: formData.value.materialNumber || '',
      materialNumber_FilterMode: formData.value.materialNumber_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.containerNo_FilterMode = 1
    formData.value.containerType_FilterMode = 2
    formData.value.containerStatus_FilterMode = 2
    formData.value.specLength_FilterMode = 2
    formData.value.specWidth_FilterMode = 2
    formData.value.specHeight_FilterMode = 2
    formData.value.limitLength_FilterMode = 2
    formData.value.limitWidth_FilterMode = 2
    formData.value.limitHeight_FilterMode = 2
    formData.value.maxWeight_FilterMode = 2
    formData.value.exceptionNumber_FilterMode = 2
    formData.value.materialNumber_FilterMode = 2
    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.containerNo = ''
    formData.value.containerType = ''
    formData.value.containerStatus = ''
    formData.value.specLength = ''
    formData.value.specWidth = ''
    formData.value.specHeight = ''
    formData.value.limitLength = ''
    formData.value.limitWidth = ''
    formData.value.limitHeight = ''
    formData.value.maxWeight = ''
    formData.value.exceptionNumber = ''
    formData.value.materialNumber = ''
    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 () => {
    const containerTypeEnumEnum = await wmsContainerDrawer.getWmsEnumData({
      EnumName: 'ContainerTypeEnum',
    })
    updateFormItemOptions('containerType', containerTypeEnumEnum)
    const containerStatusEnumEnum = await wmsContainerDrawer.getWmsEnumData({
      EnumName: 'ContainerStatusEnum',
    })
    updateFormItemOptions('containerStatus', containerStatusEnumEnum)
  }
  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/WmsContainer/Models/Service/WmsContainerQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import { Base } from '@/libs/Base/Base'
const request = Base.request
/**
 * æ·»åŠ 
 * @returns
 */
export const addWmsContainer = (data: any) => {
  return request.post('/api/v1/HIAWms/wmsContainer', data)
}
/**
 * èŽ·å–è¯¦æƒ…
 * @returns
 */
export const getWmsContainer = (id: string) => {
  return request.get(`/api/v1/HIAWms/wmsContainer/${id}`)
}
/**
 * æ›´æ–°
 * @returns
 */
export const updateWmsContainer = (id: string, data: Record<string, any>) => {
  return request.put(`/api/v1/HIAWms/wmsContainer/${id}`, data)
}
/**
 * èŽ·å–æžšä¸¾
 * @returns
 */
export const getWmsEnumData = (data: any) => {
  return request.post('/api/v1/WareCmsUtilityApi/WmsEnum', data)
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Models/WmsContainerQueryDrawer.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import { Base } from '@/libs/Base/Base'
import {
  addWmsContainer,
  getWmsContainer,
  updateWmsContainer,
  getWmsEnumData,
} from './Service/WmsContainerQueryDrawer'
import { useGlobalState } from '@/libs/Store/Store'
export class WmsContainerQueryDrawer extends Base<{ [key: string]: any }> {
  constructor() {
    super({
      data: [],
      wmsContainer: {},
    })
  }
  /**
   * æ·»åŠ 
   * @param data
   */
  async addWmsContainer(data: Record<string, any>) {
    return addWmsContainer(data)
  }
  /**
   * æ›´æ–°
   * @param data
   */
  async updateWmsContainer(id: string, data: Record<string, any>) {
    return updateWmsContainer(id, data)
  }
  /**
   * èŽ·å–è¯¦æƒ…
   */
  async getWmsContainerDetail(current: any, id?: string) {
    return getWmsContainer(id || current?.id)
  }
  //  èŽ·å–æžšä¸¾å€¼
  async getWmsEnumData(data: Record<string, any>) {
    return getWmsEnumData(data)
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer.tsx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
/*
 * ç‰©æ–™åŸºç¡€ä¿¡æ¯æŸ¥è¯¢å¼¹å‡ºæ¡†
*/
import { SetupContext, defineComponent } from 'vue'
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer'
import styles from './WmsContainerQueryDrawer.module.scss'
import { useWmsContainerQueryDrawer } from '../../../../Controllers/WmsContainerQueryDrawer.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,
    } = useWmsContainerQueryDrawer(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/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss
@@ -1,114 +1,113 @@
.wmsContainerContent {
  width: 100%;
  height: 90%;
  .wmsContainerList {
    width: 100%;
    height: calc(100% - 70px);
  }
  .headerContent {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 43px;
  }
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-start;
    align-items: center;
  }
}
.tagBox {
  width: auto;
  min-width: 80px;
  height: 24px;
  background: #ffffff;
  border-radius: 19px 19px 19px 19px;
  opacity: 1;
  border: 1px dashed #bcc4cc;
  width: 50px;
  height: 20px;
  font-size: 14px;
  font-family: PingFang SC, PingFang SC;
  font-weight: 400;
  color: #5a84ff;
  display: flex;
  justify-content: center;
  align-items: center;
  // cursor: pointer;
}
.group {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.groupTable {
  width: 100%;
}
.overBox {
  width: 100%;
  height: calc(100% - 20px);
  overflow: auto;
  :global(.cs-collapse-item__header) {
    background-color: #f1f1f1;
    padding: 0 20px;
    height: 35px;
    font-size: 16px;
    font-family: PingFang SC, PingFang SC;
    font-weight: 500;
  }
  :global(.cs-collapse-item__content) {
    padding-bottom: 0px;
  }
}
.groupHeader {
  width: 100%;
  height: 30px;
  background: #ccc;
}
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
  margin-bottom: 0px;
  border-radius: 4px;
  .el-form-item {
    margin-right: 20px;
    margin-bottom: 0;
    // ç»Ÿä¸€è¾“入框和选择框的宽度
    .el-input, .el-select {
      width: 200px; // è®¾ç½®ç»Ÿä¸€çš„宽度
    }
    // é€‰æ‹©æ¡†å†…部输入框样式
    .el-select .el-input__wrapper {
      height: 32px; // ä¸Žè¾“入框高度一致
      padding: 1px 11px; // ä¸Žè¾“入框内边距一致
    }
    // æ—¥æœŸé€‰æ‹©å™¨å®½åº¦
    .el-date-editor {
      width: 220px;
    }
  }
}
// å¦‚果需要更精确的控制,可以单独设置
.formItem {
  width: 200px;
  &.el-input, &.el-select {
    width: 100%;
  }
}
.wmsContainerContent {
  width: 100%;
  height: 100%;
  .wmsContainerList {
    width: 100%;
    height: calc(100% - 70px);
  }
  .headerContent {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 43px;
  }
  .header {
    margin-bottom: 12px;
    display: flex;
    justify-content: flex-end;
    align-items: center;
  }
}
.tagBox {
  width: auto;
  min-width: 80px;
  height: 24px;
  background: #ffffff;
  border-radius: 19px 19px 19px 19px;
  opacity: 1;
  border: 1px dashed #bcc4cc;
  width: 50px;
  height: 20px;
  font-size: 14px;
  font-family: PingFang SC, PingFang SC;
  font-weight: 400;
  color: #5a84ff;
  display: flex;
  justify-content: center;
  align-items: center;
  // cursor: pointer;
}
.group {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.groupTable {
  width: 100%;
}
.overBox {
  width: 100%;
  height: calc(100% - 20px);
  overflow: auto;
  :global(.cs-collapse-item__header) {
    background-color: #f1f1f1;
    padding: 0 20px;
    height: 35px;
    font-size: 16px;
    font-family: PingFang SC, PingFang SC;
    font-weight: 500;
  }
  :global(.cs-collapse-item__content) {
    padding-bottom: 0px;
  }
}
.groupHeader {
  width: 100%;
  height: 30px;
  background: #ccc;
}
.hideBlock {
  display: none;
}
.queryForm {
  padding: 10px;
  background: #f5f7fa;
  margin-bottom: 0px;
  border-radius: 4px;
  .el-form-item {
    margin-right: 20px;
    margin-bottom: 0;
    // ç»Ÿä¸€è¾“入框和选择框的宽度
    .el-input, .el-select {
      width: 200px; // è®¾ç½®ç»Ÿä¸€çš„宽度
    }
    // é€‰æ‹©æ¡†å†…部输入框样式
    .el-select .el-input__wrapper {
      height: 32px; // ä¸Žè¾“入框高度一致
      padding: 1px 11px; // ä¸Žè¾“入框内边距一致
    }
    // æ—¥æœŸé€‰æ‹©å™¨å®½åº¦
    .el-date-editor {
      width: 220px;
    }
  }
}
// å¦‚果需要更精确的控制,可以单独设置
.formItem {
  width: 200px;
  &.el-input, &.el-select {
    width: 100%;
  }
}
HIAWms/hiawms_web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx
@@ -5,12 +5,24 @@
import { useWmsContainer } from '../../../Controllers/WmsContainer'
import IconButton from '@/components/IconButton/IconButton'
import WmsContainerDrawer from '../Dialog/WmsContainerDrawer/WmsContainerDrawer'
import WmsContainerQueryDrawer from '../Dialog/WmsContainerQueryDrawer/WmsContainerQueryDrawer'
import Search from '@/components/Search/Search'
import { columns } from './Config'
import TdButton from '@/components/TdButton/TdButton'
import { vPermission } from '@/libs/Permission/Permission'
import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
import { ElForm, ElFormItem, ElInput, ElOption, ElSelect } from 'element-plus'
import dayjs from 'dayjs'
import { getWmsEnumData } from '@/widgets/WmsContainer/Models/Service/WmsContainerDrawer'
import {
  ElInput,
  ElSelect,
  ElOption,
  ElDatePicker,
  ElForm,
  ElFormItem,
} from 'element-plus'
import { injectModel } from '@/libs/Provider/Provider'
// å¼•入公共选项配置
import { FILTER_MODE_OPTIONS_STRING } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
interface RenderTableType {
  url?: string
@@ -32,6 +44,7 @@
      dataSource,
      contextMenu,
      dialogConfig,
      dialogConfigForQuery,
      tableRef,
      current,
      search,
@@ -43,25 +56,24 @@
      onConfirmWmsContainer,
      onCheck,
      onAddWmsContainer,
      onAdvancedQuery,
      onExport,
      openDetail,
      onSuccess,
      onBeforeUpload,
    } = useWmsContainer(props, ctx)
    //定义高级查询引用
    const wmsContainerQueryDrawerRef = ref(null)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      containerNo: '',
      containerType: '',
      containerStatus: '',
      filter: '',
      searchVal: '',
      str_searchFormInputAttrs: [],
      searchVal_FilterMode: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      containerType: queryForm.value.containerType || '', // å¤„理下拉
      containerStatus: queryForm.value.containerStatus || '',
    }))
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题)
    const _searchFormInputAttrs = ref(['ContainerNo'])
    const searchFormInputAttrs_Placeholder = ref('请输入托盘编号')
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
@@ -72,20 +84,17 @@
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const containerTypeData = await getWmsEnumData({
        const containerTypeEnumData = await getWmsEnumData({
          EnumName: 'ContainerTypeEnum',
        })
        enumOptions.containerType = containerTypeData.map((item) => ({
        enumOptions.containerType = containerTypeEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        // èŽ·å–é‡‡è´­ç±»åž‹æžšä¸¾
        const containerStatusData = await getWmsEnumData({
        const containerStatusEnumData = await getWmsEnumData({
          EnumName: 'ContainerStatusEnum',
        })
        enumOptions.containerStatus = containerStatusData.map((item) => ({
        enumOptions.containerStatus = containerStatusEnumData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
@@ -94,26 +103,79 @@
      }
    }
    // å®šä¹‰å“åº”式查询数据
    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 () => {
      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 = {
        containerNo: '',
        containerType: '',
        containerStatus: '',
        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
    }
    /**
@@ -129,7 +191,7 @@
        params,
        autoHeight,
      } = props
      console.log(dataSource.value)
      return (
        <div
          class={{
@@ -150,8 +212,59 @@
            onCheck={onCheck}
            onRowClick={onRowClick}
            isHidePagination={isHidePagination}
            pageSize={50}
            pageSize={20}
            v-slots={{
              isDisabled: ({ row }: any) => {
                return (
                  <div>
                    {row.isDisabled != null
                      ? row.isDisabled
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              creationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.creationTime != null
                      ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              lastModificationTime: ({ row }: any) => {
                return (
                  <div>
                    {row.lastModificationTime != null
                      ? dayjs(row.lastModificationTime).format(
                          'YYYY-MM-DD HH:mm:ss'
                        )
                      : '-'}
                  </div>
                )
              },
              isDeleted: ({ row }: any) => {
                return (
                  <div>
                    {row.isDeleted != null
                      ? row.isDeleted
                        ? '是'
                        : '否'
                      : '-'}
                  </div>
                )
              },
              deletionTime: ({ row }: any) => {
                return (
                  <div>
                    {row.deletionTime != null
                      ? dayjs(row.deletionTime).format('YYYY-MM-DD HH:mm:ss')
                      : '-'}
                  </div>
                )
              },
              name: ({ row }: any) => {
                return row?.name ? (
                  <TdButton
@@ -172,6 +285,7 @@
        </div>
      )
    }
    return () => {
      return (
        <div class={styles.wmsContainerContent}>
@@ -183,87 +297,17 @@
            sort={sort.value}
            onConfirm={onConfirmWmsContainer}
          />
          {/* æ–°å¢žçš„æŸ¥è¯¢è¡¨å• */}
          <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.containerNo}
                placeholder="请输入托盘编码"
                clearable
                class={styles.formItem}
              />
            </ElFormItem>
            <ElFormItem label="物料类型">
              <ElSelect
                v-model={queryForm.value.containerType}
                placeholder="请选择托盘类型"
                clearable
                loading={enumOptions.containerType.length === 0}
                class={styles.formItem}
              >
                {enumOptions.containerType.map((option) => (
                  <ElOption
                    key={option.value}
                    label={option.label}
                    value={option.value}
                  />
                ))}
              </ElSelect>
            </ElFormItem>
            <ElFormItem label="托盘状态">
              <ElSelect
                v-model={queryForm.value.containerStatus}
                placeholder="请选择托盘状态"
                clearable
                loading={enumOptions.containerStatus.length === 0}
                class={styles.formItem}
              >
                {enumOptions.containerStatus.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>
          {/* é«˜çº§æŸ¥è¯¢ */}
          <WmsContainerQueryDrawer
            ref="wmsContainerQueryDrawerRef"
            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}>
@@ -276,6 +320,7 @@
                æ·»åŠ 
              </IconButton>
              <el-divider direction="vertical" />
              <el-upload
                v-permission="wmsContainer-import"
                name="file"
@@ -293,20 +338,65 @@
              <IconButton
                v-permission="wmsContainer-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="wmsContainer-add"
                icon="search"
                onClick={onAdvancedQuery}
                type="primary"
              >
                é«˜çº§æŸ¥è¯¢
              </IconButton>
            </ElFormItem>
          </div>
          <RenderBaseTable
            url="/api/v1/HIAWms/wmsContainer"
            url="/api/v1/HIAWms/wmsContainer/page"
            dataSource={dataSource}
            isChecked={true}
            isDrag={true}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainer/GetWmsContainerInput.cs
@@ -1,35 +1,292 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainer;
/// <summary>
/// æ‰˜ç›˜ç®¡ç†æŸ¥è¯¢å‚æ•°
/// </summary>
public class GetWmsContainerInput : ExtensiblePagedAndSortedResultRequestDto
{
    #region å…³é”®å­—查询
    /// <summary>
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
            /// <summary>
        /// æ‰˜ç›˜ç¼–号
        /// </summary>
        public string ContainerNo { get; set; }
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainer;
        /// <summary>
        /// æ‰˜ç›˜ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
/// <summary>
/// WmsContainer查询参数对象
/// </summary>
public class GetWmsContainerInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        public ContainerTypeEnum?  ContainerType { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
        /// <summary>
        /// æ‰˜ç›˜çŠ¶æ€
        /// </summary>
        public ContainerStatusEnum?  ContainerStatus { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜çŠ¶æ€-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerStatus_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
}
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public decimal?  SpecLength { get; set; }
        /// <summary>
        /// é•¿åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecLength_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public decimal?  SpecWidth { get; set; }
        /// <summary>
        /// å®½åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecWidth_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public decimal?  SpecHeight { get; set; }
        /// <summary>
        /// é«˜åº¦-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SpecHeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™é•¿
        /// </summary>
        public decimal?  LimitLength { get; set; }
        /// <summary>
        /// é™é•¿-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitLength_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™å®½
        /// </summary>
        public decimal?  LimitWidth { get; set; }
        /// <summary>
        /// é™å®½-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitWidth_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// é™é«˜
        /// </summary>
        public decimal?  LimitHeight { get; set; }
        /// <summary>
        /// é™é«˜-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LimitHeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public decimal?  MaxWeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaxWeight_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¼‚常数量
        /// </summary>
        public int?  ExceptionNumber { get; set; }
        /// <summary>
        /// å¼‚常数量-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExceptionNumber_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™æ•°é‡
        /// </summary>
        public int?  MaterialNumber { get; set; }
        /// <summary>
        /// ç‰©æ–™æ•°é‡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNumber_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 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/Implements/WmsContainerAppService.cs
@@ -4,6 +4,8 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
@@ -41,12 +43,40 @@
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map < GetWmsContainerInput, WmsContainer>(input);
        var count = await _wmscontainerRepository.GetCountAsync(container,input.Filter, specification);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _wmscontainerRepository.GetCountAsync(whereConditions);
        var list = await _wmscontainerRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsContainerDto>(count, ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsContainer, bool>>> DynamicGetQueryParams(GetWmsContainerInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsContainer, GetWmsContainerInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsContainer, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsContainer, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <inheritdoc />
@@ -299,6 +329,11 @@
    }
    /// <inheritdoc />
    /// <summary>
    /// å¯¼å‡ºæ‰˜ç›˜ç®¡ç†
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainerInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -308,9 +343,14 @@
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map<GetWmsContainerInput, WmsContainer>(input);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmscontainerRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list);
        var sheets = new Dictionary<string, object>
@@ -318,7 +358,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsContainer列表" : result.Count == 1 ? result.First()?.ContainerNo : "WmsContainer模版";
        var fileName = "托盘管理";
        return (sheets, fileName);
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.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<WmsContainer>> GetListAsync(WmsContainer? container, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsContainer> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    Task<List<WmsContainer>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
@@ -50,5 +52,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs
@@ -1,6 +1,8 @@
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
@@ -50,52 +52,38 @@
        return sort + 1;
    }
    /// <summary>
    /// æŸ¥è¯¢åˆ—表
    /// </summary>
    /// <param name="container"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsContainer>> GetListAsync(WmsContainer? container,string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsContainer> 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<WmsContainer>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo),u=>u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus>0, u=>u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType>0, u=>u.ContainerType == u.ContainerType)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsContainer.Sort) : sorting)
            .OrderByDescending(x => x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥è¯¢æ•°é‡
    /// </summary>
    /// <param name="container"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default)
    /// <summary>
    /// èŽ·å–æ€»æ•°æ‰˜ç›˜ç®¡ç†
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainer, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo), u => u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus > 0, u => u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType > 0, u => u.ContainerType == u.ContainerType)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/File/GenerateCodeConfigParamFiles/ÍÐÅÌÅäÖÃ.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
[表名]:scms_wmscontainers
[实体类名]:WmsContainer
[实体类对象名]:WmsContainer
[页面菜单名]:托盘管理
[页面菜单对象缩写]:wmsContainer
[表的中文注解]:托盘管理
[重复性校验字段]:ContainerNo
[删除提示字段]:ContainerNo
[模糊查询字段]:'ContainerNo'
[模糊查询字段名]:请输入托盘编号
[项目命名空间]:HIAWms
[枚举类型字段集合]:ContainerType,ContainerTypeEnum&ContainerStatus,ContainerStatusEnum
[前端根文件夹名称]:web
[排序]:CreationTime