skyouc
2025-04-08 05951bf4f4eacc72552eb6763c640aa8b2067105
Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
1个文件已添加
11个文件已修改
152 ■■■■ 已修改文件
rsf-admin/.env 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/config/MyDataProvider.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrder/AsnOrderList.jsx 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrder/AsnOrderModal.jsx 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/components/BillStatusField.jsx 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/components/ConfirmButton.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/components/EditTopToolBar.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/.env
@@ -1,3 +1,3 @@
VITE_BASE_IP=127.0.0.1
VITE_BASE_IP=192.168.4.24
# VITE_BASE_IP=47.76.147.249
VITE_BASE_PORT=8080
rsf-admin/src/config/MyDataProvider.js
@@ -60,7 +60,6 @@
  // create a record
  create: async (resource, params) => {
    console.log("create", resource, params);
    const res = await request.post(resource + "/save", params?.data);
    const { code, msg, data } = res.data;
    if (code === 200) {
@@ -75,7 +74,6 @@
  // update a record based on a patch
  update: async (resource, params) => {
    console.log("update", resource, params);
    const res = await request.post(resource + "/update", {
      id: params.id,
      ...params.data,
rsf-admin/src/i18n/zh.js
@@ -271,7 +271,7 @@
                name: "物料名称",
                code: "物料编码",
                shipperId: "货主标识",
                groupId: "分组标识",
                groupId: "物料分组",
                rglarId: "批次规则标识",
                platCode: "ERP编码",
                spec: "规格",
@@ -557,7 +557,7 @@
                asnCode: "主单编码",
                platItemId: "erp标识",
                poDetlId: "PO单标识",
                poCode: "PO单编码",
                poDetlCode: "PO单编码",
                fieldsIndex: "字段索引",
                matnrId: "物料标识",
                matnrCode: "物料编码",
rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -41,6 +41,8 @@
import EmptyData from "../components/EmptyData";
import MyCreateButton from "../components/MyCreateButton";
import MyExportButton from '../components/MyExportButton';
import BillStatusField from '../components/BillStatusField';
import ConfirmButton from '../components/ConfirmButton';
import PageDrawer from "../components/PageDrawer";
import MyField from "../components/MyField";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
@@ -49,8 +51,9 @@
import FileDownloadIcon from '@mui/icons-material/FileDownload';
import EditIcon from '@mui/icons-material/Edit';
import TaskIcon from '@mui/icons-material/Task';
import CloseIcon from '@mui/icons-material/Close';
import request from '@/utils/request';
import DictionarySelect from "../components/DictionarySelect";
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
  '& .css-1vooibu-MuiSvgIcon-root': {
@@ -62,7 +65,10 @@
  '& .column-name': {
  },
  '& .opt': {
    width: 300
    width: 320
  },
  '& .status': {
    width: 100
  },
}));
@@ -85,15 +91,12 @@
  />,
  <TextInput label="common.field.memo" source="memo" />,
  <SelectInput
    label="common.field.status"
    source="status"
    choices={[
      { id: '1', name: 'common.enums.statusTrue' },
      { id: '0', name: 'common.enums.statusFalse' },
    ]}
    resettable
  <DictionarySelect
    label='common.field.status'
    name="exceStatus"
    dictTypeCode="sys_asn_exce_status"
  />,
]
const AsnOrderList = () => {
@@ -164,8 +167,7 @@
            <TextField source="nickname" />
          </ReferenceField>
          <DateField source="createTime" label="common.field.createTime" showTime />
          <TextField source="exceStatus$" label="common.field.status" />
          {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
          <BillStatusField cellClassName="status" source="exceStatus" label="common.field.status" />
          <TextField source="memo" label="common.field.memo" sortable={false} />
          <WrapperField cellClassName="opt" label="common.field.opt" width={300} >
            {/* <Button label="toolbar.print" onClick={print}>
@@ -183,7 +185,8 @@
            </Button> */}
            <InspectionButton />
            <CompleteButton />
            <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
            {/* <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> */}
            <CloseButton />
          </WrapperField>
        </StyledDatagrid>
      </List>
@@ -301,8 +304,33 @@
  return (
    <Button onClick={requestComplete} label={"toolbar.complete"} color="success">
    record.exceStatus === 1 && (record.anfme === record.qty ? <Button onClick={requestComplete} label={"toolbar.complete"} color="success">
      <TaskIcon />
    </Button>
    </Button> : <ConfirmButton label={"toolbar.complete"} color="success" data={'当前收货数量小于计划数量,是否确认完成'} startIcon={<TaskIcon />} onConfirm={requestComplete} />)
  )
}
const CloseButton = () => {
  const record = useRecordContext();
  const notify = useNotify();
  const refresh = useRefresh();
  const requestClose = async () => {
    const { data: { code, data, msg } } = await request.post(`/asnOrder/close/${record.id}`);
    if (code === 200) {
      notify(msg);
      refresh()
    } else {
      notify(msg);
    }
  }
  return (
    (<Button onClick={requestClose} label={"toolbar.close"} color="error">
      <CloseIcon />
    </Button>)
  )
}
rsf-admin/src/page/asnOrder/AsnOrderModal.jsx
@@ -73,6 +73,7 @@
            requestGetHead()
            requestGetBody()
        }
        setDisabled(false)
    }, [open])
    const handleClose = (event, reason) => {
@@ -98,6 +99,14 @@
            [name]: value
        }));
    };
    const resetData = () => {
        setFormData({
            type: '',
            wkType: '',
        })
        setTableData([])
    }
    const setFinally = () => {
        const rows = tableRef.current.state.editRows;
@@ -126,6 +135,7 @@
                setOpen(false);
                refresh();
                billReload?.current()
                resetData()
            } else {
                notify(res.data.msg);
            }
@@ -139,7 +149,7 @@
                setOpen(false);
                refresh();
                billReload?.current()
                resetData()
            } else {
                notify(res.data.msg);
            }
rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -14,7 +14,7 @@
import debounce from 'lodash/debounce';
import { DataGrid } from '@mui/x-data-grid';
import PrintModal from './PrintModal';
import { width } from "@mui/system";
import PrintIcon from '@mui/icons-material/Print';
const AsnOrderPanel = ({ billReload }) => {
    const record = useRecordContext();
    if (!record) return null;
@@ -157,6 +157,7 @@
            <DataGrid
                sx={{ width: 'calc(100vw - 280px)' }}
                size="small"
                rows={rows}
                columns={columns}
@@ -196,7 +197,7 @@
    return (
        <>
            <Button size="small" variant="contained" color="secondary" onClick={modalChange}>{translate("toolbar.batchPrint")}</Button>
            <Button size="small" color="secondary" onClick={modalChange} startIcon={<PrintIcon />}>{translate("toolbar.batchPrint")}</Button>
            <PrintModal
                open={createDialog}
@@ -218,7 +219,7 @@
    return (
        <>
            <Button size="small" variant="contained" color="secondary" onClick={() => setCreateDialog(true)}>{translate("toolbar.print")}</Button>
            <Button size="small" color="secondary" onClick={() => setCreateDialog(true)} startIcon={<PrintIcon />}>{translate("toolbar.print")}</Button>
            <PrintModal
                open={createDialog}
rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx
@@ -74,7 +74,6 @@
const MatnrEdit = () => {
    const translate = useTranslate();
    const [value, setValue] = React.useState(0);
    const form = useForm();
    const notify = useNotify();
    const [dynamicFields, setDynamicFields] = useState([]);
@@ -268,7 +267,7 @@
                                {dynamicFields.map((item) => {
                                    return (
                                        <Grid key={item.id} item xs={6} display="flex" gap={1}>
                                            <TextInput
                                            <DynamicFields
                                                label={item.fieldsAlise}
                                                source={item.fields}
                                                validate={item.unique === 1 ? required() : false}
@@ -276,8 +275,6 @@
                                        </Grid>
                                    )
                                })}
                            </Grid>
@@ -367,3 +364,16 @@
}
export default MatnrEdit;
const DynamicFields = (props) => {
    const { ...parmas } = props;
    const form = useFormContext();
    const field = `extendFields.${parmas.source}`;
    const value = form.getValues(field);
    value && form.setValue(parmas.source, value);
    return (
        <TextInput
            {...parmas}
        />
    )
}
rsf-admin/src/page/components/BillStatusField.jsx
New file
@@ -0,0 +1,30 @@
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
import {
    useRecordContext,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { useTheme } from '@mui/material/styles';
import CircleIcon from '@mui/icons-material/Circle';
const BillStatusField = () => {
    const record = useRecordContext();
    const theme = useTheme();
    const color = {
        0: '#BFBFBF',
        1: '#FFC53D',
        2: '#52C41A',
        3: '#595959',
        4: '#FF4D4F',
    }
    return (
        <Typography
            variant="body2"
            sx={{ display: 'flex', alignItems: 'center' }}
        >
            <CircleIcon sx={{ fontSize: 10, color: color[record.exceStatus || 0], marginRight: '3px' }} /> {record.exceStatus$}
        </Typography >
    )
}
export default BillStatusField;
rsf-admin/src/page/components/ConfirmButton.jsx
@@ -44,7 +44,7 @@
                <DialogTitle>{translate('common.msg.confirm.tip')}</DialogTitle>
                <DialogContent>
                    <DialogContentText>
                        {translate('common.msg.confirm.desc')}
                        {data ? data : translate('common.msg.confirm.desc')}
                    </DialogContentText>
                </DialogContent>
                <DialogActions>
rsf-admin/src/page/components/EditTopToolBar.jsx
@@ -9,7 +9,7 @@
    const resource = useResourceContext();
    const translate = useTranslate();
    return (
        <TopToolbar sx={{
            marginTop: 1,
rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
@@ -19,6 +19,8 @@
    required,
    useRecordContext,
    DeleteButton,
    useNotify,
    useRedirect,
} from 'react-admin';
import { useWatch, useFormContext } from "react-hook-form";
import { Stack, Grid, Box, Typography } from '@mui/material';
@@ -30,11 +32,18 @@
import StatusSelectInput from "../../../components/StatusSelectInput";
const FormToolbar = () => {
    const { getValues } = useFormContext();
    const form = useFormContext();
    const redirect = useRedirect();
    const notify = useNotify();
    const onSuccess = (data) => {
        const { dictTypeId, dictTypeCode } = data
        notify(`修改成功!`);
        redirect(`/dictData?dictTypeId=${dictTypeId}&code=${dictTypeCode}`);
    }
    return (
        <Toolbar sx={{ justifyContent: 'space-between' }}>
            <SaveButton />
            <SaveButton type="button" mutationOptions={{ onSuccess }} />
            <DeleteButton mutationMode="optimistic" />
        </Toolbar>
    )
rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
@@ -62,8 +62,6 @@
const filters = [
    <SearchInput source="condition" alwaysOn />,
    <DateInput label='common.time.after' source="timeStart" alwaysOn />,
    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
    <TextInput source="dictTypeId" label="table.field.dictData.dictTypeId" />,
    <TextInput source="dictTypeCode" label="table.field.dictData.dictTypeCode" />,