zs
2025-04-30 98749f73549cbbb1eb1db0916f3f2073e006384e
托盘管理
已重命名1个文件
已修改11个文件
450 ■■■■■ 文件已修改
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/GetWmsContainersInput.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerAutoMapperProfile.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainerDrawer.tsx 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Models/Service/WmsContainerDrawer.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerDrawer/WmsContainerDrawer.tsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/Config.ts 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/GetWmsContainersInput.cs
@@ -1,3 +1,4 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
@@ -16,4 +17,19 @@
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs
@@ -21,11 +21,33 @@
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public string ContainerTypeDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerType);
        }
    }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public string ContainerStatusDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerStatus);
        }
    }
    /// <summary>
    /// é•¿åº¦
    /// </summary>
    public decimal? SpecLength { get; set; }
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs
@@ -7,6 +7,7 @@
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
@@ -41,8 +42,9 @@
        }
        var specification = new WmsContainerSpecification(input.Name);
        var count = await _wmscontainerRepository.GetCountAsync(input.Filter, specification);
        var list = await _wmscontainerRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        var container = ObjectMapper.Map < GetWmsContainersInput, 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);
        return new PagedResultDto<WmsContainerDto>(count, ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list));
    }
@@ -158,7 +160,7 @@
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmscontainerRepository.GetListAsync(nameof(WmsContainer.Sort));
        var list = await _wmscontainerRepository.GetListAsync(null,nameof(WmsContainer.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
@@ -307,12 +309,13 @@
        }
        var specification = new WmsContainerSpecification(input.Name);
        var list = await _wmscontainerRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var container = ObjectMapper.Map<GetWmsContainersInput, WmsContainer>(input);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = result.Select(x => x.GetExportData()).ToList(),
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsContainer列表" : result.Count == 1 ? result.First()?.ContainerNo : "WmsContainer模版";
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerAutoMapperProfile.cs
@@ -21,5 +21,6 @@
         * into multiple profile classes for a better organization. */
        CreateMap<WmsContainer, WmsContainerDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsContainerCreateDto, WmsContainer>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsContainersInput, WmsContainer>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs
@@ -41,7 +41,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(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(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>
    /// Gets the count asynchronous.
@@ -50,5 +50,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs
@@ -50,8 +50,19 @@
        return sort + 1;
    }
    /// <inheritdoc />
    public async Task<List<WmsContainer>> GetListAsync(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="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)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetDbSetAsync())
@@ -59,18 +70,31 @@
            .Where(specification.ToExpression())
            .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)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default)
    /// <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)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .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));
    }
HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainerDrawer.tsx
ÎļþÃû´Ó HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainerDrawer.ts ÐÞ¸Ä
@@ -1,10 +1,20 @@
import { ref, onMounted, reactive, computed, Ref, watch } from 'vue'
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 { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
export const useWmsContainerDrawer = (props: any, ctx?: any) => {
  const wmsContainerDrawer =
@@ -16,6 +26,18 @@
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const current = computed(() => {
    return props.row || null
@@ -44,11 +66,7 @@
      prop: 'containerType',
      el: 'select',
      placeholder: '请选择托盘类型',
      options: [
        { label: '类型1', value: 0 },
        { label: '类型2', value: 1 },
        // æ·»åŠ æ‰€æœ‰æžšä¸¾å€¼
      ],
      options: [],
      rules: [{ required: true, message: '请选择托盘类型', trigger: 'change' }],
    },
    {
@@ -56,17 +74,20 @@
      prop: 'containerStatus',
      el: 'select',
      placeholder: '请选择托盘状态',
      options: [
        { label: '状态1', value: 0 },
        { label: '状态2', value: 1 },
        // æ·»åŠ æ‰€æœ‰æžšä¸¾å€¼
      ],
      options: [],
      rules: [{ required: true, message: '请选择托盘状态', trigger: 'change' }],
    },
    {
      label: '长度(mm)',
      prop: 'specLength',
      el: 'input',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入长度',
      step: 0.01,
      precision: 2,
@@ -74,7 +95,14 @@
    {
      label: '宽度(mm)',
      prop: 'specWidth',
      el: 'input',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入宽度',
      step: 0.01,
      precision: 2,
@@ -82,15 +110,74 @@
    {
      label: '高度(mm)',
      prop: 'specHeight',
      el: 'input',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入高度',
      step: 0.01,
      precision: 2,
    },
    {
      label: '限长(mm)',
      prop: 'limitLength',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入载重上限',
      step: 0.1,
      precision: 2,
    },
    {
      label: '限宽(mm)',
      prop: 'limitWidth',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入载重上限',
      step: 0.1,
      precision: 2,
    },
    {
      label: '限高(mm)',
      prop: 'limitHeight',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入载重上限',
      step: 0.1,
      precision: 2,
    },
    {
      label: '载重上限(kg)',
      prop: 'maxWeight',
      el: 'input',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入载重上限',
      step: 0.1,
      precision: 2,
@@ -168,10 +255,31 @@
      },
    }
  }
  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 onOpen = async () => {
    const containerTypeEnum = await getWmsEnumData({
      EnumName: 'ContainerTypeEnum',
    })
    updateFormItemOptions('containerType', containerTypeEnum)
    const containerStatusEnum = await getWmsEnumData({
      EnumName: 'ContainerStatusEnum',
    })
    updateFormItemOptions('containerStatus', containerStatusEnum)
    if (current.value) {
      const res = await wmsContainerDrawer.getWmsContainerDetail(current.value)
@@ -190,8 +298,10 @@
        id: res.id,
      }
      updateCheckData()
      disabled.value = true
    } else {
      formData.value = {}
      disabled.value = false
      updateCheckData()
    }
  }
HIAWms/web/src/widgets/WmsContainer/Models/Service/WmsContainerDrawer.ts
@@ -24,3 +24,11 @@
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/hIAWms/WmsEnum', data)
}
HIAWms/web/src/widgets/WmsContainer/Views/Pages/Dialog/WmsContainerDrawer/WmsContainerDrawer.tsx
@@ -1,7 +1,7 @@
import { SetupContext, defineComponent } from 'vue'
import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
import styles from './WmsContainerDrawer.module.scss'
import { useWmsContainerDrawer } from '../../../../Controllers/WmsContainerDrawer'
import { useWmsContainerDrawer } from '../../../../Controllers/WmsContainerDrawer.tsx'
import DyForm from '@/components/DyForm/DyForm'
// @ts-ignore
HIAWms/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/Config.ts
@@ -9,11 +9,11 @@
    title: '托盘编号',
  },
  {
    field: 'containerType',
    field: 'containerTypeDesc',
    title: '托盘类型',
  },
  {
    field: 'containerStatus',
    field: 'containerStatusDesc',
    title: '托盘状态',
  },
  {
@@ -44,14 +44,14 @@
    field: 'maxWeight',
    title: '载重上限',
  },
  {
    field: 'exceptionNumber',
    title: '异常数量',
  },
  {
    field: 'materialNumber',
    title: '物料数量',
  },
  // {
  //   field: 'exceptionNumber',
  //   title: '异常数量',
  // },
  // {
  //   field: 'materialNumber',
  //   title: '物料数量',
  // },
  {
    field: 'remark',
    title: '备注',
HIAWms/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.module.scss
@@ -1,6 +1,6 @@
.wmsContainerContent {
  width: 100%;
  height: 100%;
  height: 90%;
  .wmsContainerList {
    width: 100%;
@@ -75,3 +75,40 @@
.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/web/src/widgets/WmsContainer/Views/Pages/WmsContainer/WmsContainer.tsx
@@ -1,4 +1,4 @@
import { defineComponent } from 'vue'
import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
import type { Ref } from 'vue'
import BaseTable from '@/components/Table/Table'
import styles from './WmsContainer.module.scss'
@@ -9,6 +9,8 @@
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'
interface RenderTableType {
  url?: string
@@ -46,6 +48,73 @@
      onSuccess,
      onBeforeUpload,
    } = useWmsContainer(props, ctx)
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      containerNo: '',
      containerType: '',
      containerStatus: '',
      filter: '',
    })
    const queryParams = computed(() => ({
      ...queryForm.value,
      containerType: queryForm.value.containerType || '', // å¤„理下拉
      containerStatus: queryForm.value.containerStatus || '',
    }))
    // åŠ¨æ€æžšä¸¾é€‰é¡¹
    const enumOptions = reactive({
      containerType: [] as Array<{ label: string; value: any }>,
      containerStatus: [] as Array<{ label: string; value: any }>,
    })
    // èŽ·å–æžšä¸¾æ•°æ®
    const fetchEnumData = async () => {
      try {
        // èŽ·å–ç‰©æ–™ç±»åž‹æžšä¸¾
        const containerTypeData = await getWmsEnumData({
          EnumName: 'ContainerTypeEnum',
        })
        enumOptions.containerType = containerTypeData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
        // èŽ·å–é‡‡è´­ç±»åž‹æžšä¸¾
        const containerStatusData = await getWmsEnumData({
          EnumName: 'ContainerStatusEnum',
        })
        enumOptions.containerStatus = containerStatusData.map((item) => ({
          label: item.description,
          value: item.value,
        }))
      } catch (error) {
        console.error('获取枚举数据失败:', error)
      }
    }
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
    const handleQuery = async () => {
      console.log('查询条件:', queryParams.value)
      // tableRef.value.getTableList()
      tableRef.value.getList(queryParams.value)
    }
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    const resetQuery = () => {
      queryForm.value = {
        containerNo: '',
        containerType: '',
        containerStatus: '',
        filter: '',
      }
    }
    /**
     * @returns è¡¨æ ¼
@@ -114,6 +183,88 @@
            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>
          <div class={styles.headerContent}>
            <div class={styles.header}>
              <IconButton