rsf-admin/src/i18n/en.js
@@ -952,6 +952,7 @@ unit: 'Unit', anfme: 'Stock Qty', matnrCode: "Matnr Code", warehouse: 'Warehouse', workQty: 'Work Qty', qty: 'Non Stock Qty', splrId: 'supplier', rsf-admin/src/page/statistics/stockManage/WarehouseAside.jsx
@@ -15,9 +15,8 @@ const WarehouseAside = () => { const [isSelect, setIsSelect] = useState(false); const isSelected = (value, filters) => { const aggType = filters.aggType || []; const aggType = filters.aggType || ["matnr"]; return aggType.includes(value.aggType); }; rsf-admin/src/page/statistics/stockManage/WarehouseStockInfo.jsx
@@ -235,7 +235,7 @@ const [columns, setColumns] = useState([ { field: 'warehouse', field: 'warehouse$', headerName: translate('table.field.warehouseStock.warehouse'), width: 130, editable: false, rsf-admin/src/page/statistics/stockManage/WarehouseStockList.jsx
@@ -60,13 +60,11 @@ })); const WarehouseStockList = () => { const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); const [select, setSelect] = useState({}); const [drawerVal, setDrawerVal] = useState(false); const filters = [ const [filters, setFilters] = useState([ <SearchInput source="condition" alwaysOn />, <NumberInput source="locId" label="table.field.locItem.locId" />, <TextInput source="locCode" label="table.field.locItem.locCode" />, @@ -85,8 +83,9 @@ <TextInput source="spec" label="table.field.locItem.spec" />, <TextInput source="model" label="table.field.locItem.model" />, <TextInput source="fieldsIndex" label="table.field.locItem.fieldsIndex" />, <TextInput label="common.field.memo" source="memo" />, ] <TextInput label="common.field.memo" source="memo" />,]); const [select, setSelect] = useState({}); const [drawerVal, setDrawerVal] = useState(false); return ( <> @@ -103,6 +102,7 @@ resource="warehouse/stock" title={"common.button.detail"} empty={false} // filter={{aggType: "matnr"}} filters={filters} sort={{ field: "create_time", order: "desc" }} actions={( @@ -119,6 +119,7 @@ setDrawerVal={setDrawerVal} setCreateDialog={setCreateDialog} setSelect={setSelect} filters={filters} /> </List> <WarehouseStockInfo @@ -138,9 +139,19 @@ export default WarehouseStockList; const PaginatedRowNumber = () => { const record = useRecordContext(); const { page, perPage } = useListContext(); const index = record.__tmp_index !== undefined ? record.__tmp_index : 0; // const index = record.__tmp_index; // react-admin 内部使用的临时索引 return <span>{(page - 1) * perPage + index + 1}</span>; }; const DynamicFields = (props) => { const { setDrawerVal, setCreateDialog, setSelect } = props const index = 1; const { setDrawerVal, setCreateDialog, setSelect, filters } = props const translate = useTranslate(); const notify = useNotify(); const [columns, setColumns] = useState([]); @@ -166,6 +177,7 @@ <NumberField source="workQty" label="table.field.warehouseStock.qty" />, <TextField source="spec" label="table.field.warehouseStock.spec" />, <TextField source="model" label="table.field.warehouseStock.model" />, <TextField source="warehouse$" label="table.field.warehouseStock.warehouse" />, <TextField source="batch" label="table.field.warehouseStock.batch" />, <TextField source="unit" label="table.field.warehouseStock.unit" />, <TextField source="fieldsIndex" label="table.field.warehouseStock.fieldsIndex" />, @@ -180,6 +192,18 @@ </WrapperField> ] setColumns([...arr, ...fields, ...lastArr]); data.map(el => { var i = 0; filters.map((item) => { if (item.key === el.fields) { i = 1; } }) i === 0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />) }) // setFilters([...filters, ...inputFields]) } else { notify(msg); } @@ -216,7 +240,6 @@ const HistoriesButton = ({ setDrawerVal, setSelect }) => { const record = useRecordContext(); const { filterValues } = useListContext(); const historyClick = (event) => { event.stopPropagation(); setDrawerVal(true) rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseStockController.java
@@ -11,6 +11,7 @@ import com.vincent.rsf.server.manager.controller.params.WarehouseStockParam; import com.vincent.rsf.server.manager.entity.StockItem; import com.vincent.rsf.server.manager.entity.ViewStockManage; import com.vincent.rsf.server.manager.entity.WarehouseAreasItem; import com.vincent.rsf.server.manager.enums.ViewStockType; import com.vincent.rsf.server.manager.service.WarehouseStockService; import com.vincent.rsf.server.system.controller.BaseController; @@ -44,7 +45,7 @@ BaseParam baseParam = buildParam(param, BaseParam.class); PageParam<ViewStockManage, BaseParam> pageParam = new PageParam<>(baseParam, ViewStockManage.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = stockParam.getAggType(); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); ViewStockManage stock = stockParam.getStock(); QueryWrapper<ViewStockManage> wrapper = new QueryWrapper<>(); @@ -59,6 +60,9 @@ } else { wrapper.groupBy("matnr_id"); } FieldsUtils.setFieldsFilters(wrapper, pageParam, ViewStockManage.class); IPage<ViewStockManage> pageResult = warehouseStockService.pageByStock(pageParam, wrapper); List<ViewStockManage> records = pageResult.getRecords(); for (ViewStockManage record : records) { @@ -82,7 +86,7 @@ BaseParam baseParam = buildParam(param, BaseParam.class); PageParam<StockItem, BaseParam> pageParam = new PageParam<>(baseParam, StockItem.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = stockParam.getAggType(); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); ViewStockManage stock = stockParam.getStock(); QueryWrapper<StockItem> wrapper = new QueryWrapper<>(); @@ -120,7 +124,7 @@ BaseParam baseParam = buildParam(param, BaseParam.class); PageParam<ViewStockManage, BaseParam> pageParam = new PageParam<>(baseParam, ViewStockManage.class); WarehouseStockParam stockParam = JSONObject.parseObject(JSONObject.toJSONString(param), WarehouseStockParam.class); String type = stockParam.getAggType(); String type = Objects.isNull(stockParam.getAggType()) ? ViewStockType.VIEW_STOCK_TYPE_MATNR.val : stockParam.getAggType(); if (Objects.isNull(type)) { return R.error("参数不能为空!!"); } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/ViewStockManage.java
@@ -1,6 +1,10 @@ package com.vincent.rsf.server.manager.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.manager.service.MatnrService; import com.vincent.rsf.server.manager.service.WarehouseService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -28,7 +32,6 @@ private String locCode; @ApiModelProperty("仓库") @TableField(exist = false) private String warehouse; @ApiModelProperty("单据类型") @@ -92,4 +95,17 @@ @TableField(exist = false) private Map<String, String> extendFields; public String getWarehouse$(){ WarehouseService service = SpringUtils.getBean(WarehouseService.class); Warehouse warehouse = service.getById(this.warehouse); if (!Cools.isEmpty(warehouse)){ return String.valueOf(warehouse.getName()); } return null; } } rsf-server/src/main/resources/mapper/manager/WarehouseStockMapper.xml
@@ -5,6 +5,7 @@ SELECT id, loc_id, loc_code, warehouse, type, order_item_id, wk_type,