| | |
| | | name: "name", |
| | | wareId: "ware", |
| | | code: "code", |
| | | sort: "Sort", |
| | | shipperId: "shipperId", |
| | | supplierId: "supplierId", |
| | | flagMinus: "flagMinus", |
| | |
| | | type: "库区类型", |
| | | wareId: "所属仓库", |
| | | code: "库区编码", |
| | | sort: "序号", |
| | | shipperId: "货主", |
| | | supplierId: "供应商", |
| | | flagMinus: "允许负库存", |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceArrayInput source="areas" reference="warehouseAreas"> |
| | | <ReferenceArrayInput source="areas" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <SelectArrayInput |
| | | label="table.field.basStation.crossZoneArea" |
| | | optionText="name" |
| | |
| | | <ReferenceArrayInput |
| | | source="areas" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'name', order: 'ASC' }} |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | format={(value) => { |
| | | // 从后端接收时:将 [{id, sort}] 转换为 [id, id, ...] |
| | | if (!value || !Array.isArray(value)) return []; |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceInput source="area" reference="warehouseAreas"> |
| | | <ReferenceInput source="area" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <SelectInput |
| | | label="table.field.basStation.area" |
| | | optionText="name" |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceArrayInput source="areaIds" reference="warehouseAreas"> |
| | | <ReferenceArrayInput source="areaIds" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <SelectArrayInput |
| | | label="table.field.basStation.crossZoneArea" |
| | | optionText="name" |
| | |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <ReferenceInput source="area" reference="warehouseAreas"> |
| | | <ReferenceInput source="area" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <SelectInput |
| | | label="table.field.basStation.area" |
| | | optionText="name" |
| | |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <ReferenceArrayInput source="areaIds" reference="warehouseAreas"> |
| | | <ReferenceArrayInput source="areaIds" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <SelectArrayInput |
| | | label="table.field.basStation.crossZoneArea" |
| | | optionText="name" |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceInput source="areaIdStart" label="table.field.deviceBind.typeId" reference="warehouseAreas" filter={{}}> |
| | | <ReferenceInput source="areaIdStart" label="table.field.deviceBind.typeId" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }} filter={{}}> |
| | | <AutocompleteInput optionValue="id" optionText="name" label={translate('table.field.deviceSite.areaIdStart')} /> |
| | | </ReferenceInput> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceInput source="areaIdEnd" label="table.field.deviceBind.typeId" reference="warehouseAreas" filter={{}}> |
| | | <ReferenceInput source="areaIdEnd" label="table.field.deviceBind.typeId" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }} filter={{}}> |
| | | <AutocompleteInput optionValue="id" optionText="name" label={translate('table.field.deviceSite.areaIdEnd')} /> |
| | | </ReferenceInput> |
| | | </Grid> |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId: formData.warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | source="areaId" |
| | | label="table.field.loc.areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.locArea.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.locArea.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.locAreaMatRela.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.locAreaMatRela.areaId" |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | .map(id => Number(id)) |
| | | .filter(id => !existingIds.has(id)); |
| | | |
| | | // 为新增的ID创建排序项(默认排序为已有最大排序值+1) |
| | | // 为新增的ID创建排序项(默认排序从库区的 sort 字段获取,如果没有则使用已有最大排序值+1) |
| | | const maxSort = existingAreas.length > 0 |
| | | ? Math.max(...existingAreas.map(item => item.sort || 1), 0) |
| | | : 0; |
| | | const newItems = newIds.map((id, index) => ({ |
| | | const newItems = newIds.map((id, index) => { |
| | | // 从 areas 数组中查找对应库区的 sort 字段 |
| | | const area = areas.find(a => a.id === id); |
| | | const defaultSort = area && area.sort !== undefined && area.sort !== null |
| | | ? area.sort |
| | | : (maxSort + index + 1); |
| | | return { |
| | | id: id, |
| | | sort: maxSort + index + 1, |
| | | })); |
| | | sort: defaultSort, |
| | | }; |
| | | }); |
| | | |
| | | // 合并已有项和新项 |
| | | const converted = [...existingAreas, ...newItems]; |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6} display="flex" gap={1}> |
| | | <ReferenceInput source="typeId" label="table.field.deviceBind.typeId" reference="warehouseAreas" filter={{}}> |
| | | <ReferenceInput source="typeId" label="table.field.deviceBind.typeId" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }} filter={{}}> |
| | | <AutocompleteInput optionValue="id" optionText="name" label="table.field.deviceBind.typeId" /> |
| | | </ReferenceInput> |
| | | </Grid> |
| | |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <ReferenceInput source="typeId" label="table.field.deviceBind.typeId" reference="warehouseAreas" filter={{}}> |
| | | <ReferenceInput source="typeId" label="table.field.deviceBind.typeId" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }} filter={{}}> |
| | | <AutocompleteInput optionValue="id" optionText="name" label="table.field.deviceBind.typeId" /> |
| | | </ReferenceInput> |
| | | </Stack> |
| | |
| | | <ReferenceInput |
| | | source="areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | filter={{ warehouseId }} |
| | | > |
| | | <AutocompleteInput |
| | |
| | | source="areaId" |
| | | label="table.field.loc.areaId" |
| | | reference="warehouseAreas" |
| | | sort={{ field: 'sort', order: 'ASC' }} |
| | | > |
| | | <AutocompleteInput |
| | | label="table.field.loc.areaId" |
| | |
| | | /> |
| | | </Grid> |
| | | <Grid item md={2}> |
| | | <ReferenceInput source="areaId" reference="warehouseAreas"> |
| | | <ReferenceInput source="areaId" reference="warehouseAreas" sort={{ field: 'sort', order: 'ASC' }}> |
| | | <AutocompleteInput |
| | | optionText='name' |
| | | optionValue="id" |
| | |
| | | parse={v => v} |
| | | validate={[required()]} |
| | | /> |
| | | <NumberInput |
| | | label="table.field.warehouseAreas.sort" |
| | | source="sort" |
| | | parse={v => v} |
| | | /> |
| | | {/* <SelectInput |
| | | label="table.field.warehouseAreas.flagLabelMange" |
| | | source="flagLabelMange" |
| | |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <NumberInput |
| | | label="table.field.warehouseAreas.sort" |
| | | source="sort" |
| | | parse={v => v} |
| | | /> |
| | | </Stack> |
| | | <Stack direction='row' gap={2}> |
| | | <SelectInput |
| | | label="table.field.warehouseAreas.flagMix" |
| | | source="flagMix" |
| | |
| | | <TextField source="code" label="table.field.warehouseAreas.code" /> |
| | | <TextField source="name" label="table.field.warehouseAreas.name" /> |
| | | <TextField source="type$" label="table.field.warehouseAreas.type"/> |
| | | <NumberField source="sort" label="table.field.warehouseAreas.sort" /> |
| | | <TextField source="shipperId$" label="table.field.warehouseAreas.shipperId" /> |
| | | <NumberField source="supplierId" label="table.field.warehouseAreas.supplierId" /> |
| | | <TextField source="flagMix$" label="table.field.warehouseAreas.flagMix" sortable={false} /> |
| | |
| | | </Grid> |
| | | <Grid item xs={6}> |
| | | <PanelTypography |
| | | title="table.field.warehouseAreas.sort" |
| | | property={record.sort} |
| | | /> |
| | | </Grid> |
| | | <Grid item xs={6}> |
| | | <PanelTypography |
| | | title="table.field.warehouseAreas.shipperId" |
| | | property={record.shipperId$} |
| | | /> |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 排序字段 |
| | | */ |
| | | @ApiModelProperty(value= "排序字段") |
| | | private Integer sort; |
| | | |
| | | /** |
| | | * 是否删除 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value= "是否删除 1: 是 0: 否 ") |
| New file |
| | |
| | | -- 为 man_warehouse_areas 表添加 sort 排序字段 |
| | | -- @author chen.lin |
| | | -- @time 2026-02-02 |
| | | |
| | | -- 添加 sort 字段,默认值为 NULL,允许为空 |
| | | ALTER TABLE `man_warehouse_areas` |
| | | ADD COLUMN `sort` INT(11) NULL DEFAULT NULL COMMENT '排序字段' AFTER `status`; |
| | | |
| | | -- 为现有数据设置默认排序值(使用 id 作为初始排序值) |
| | | UPDATE `man_warehouse_areas` |
| | | SET `sort` = `id` |
| | | WHERE `sort` IS NULL; |