chen.lin
22 小时以前 e1cac1af6129216da66e569ddec892dd1f07fe80
站点复制功能
8个文件已修改
73 ■■■■ 已修改文件
rsf-admin/src/i18n/en.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/basStation/BasStationCreate.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js
@@ -1446,6 +1446,7 @@
        confirm: 'confirm',
        cancel: "cancel",
        delete: 'Delete',
        copy: 'copy',
        query: "Query",
        bulkExport: "Bulk Export",
        continue: 'Continue Receipt',
rsf-admin/src/i18n/zh.js
@@ -536,7 +536,7 @@
                name: "物料分组名称",
                code: "物料分组编码",
                parentId: "上级名称",
                parCode: "上级编码",
                parCode: "物料路径编码",
            },
            warehouse: {
                name: "仓库名称",
@@ -1516,6 +1516,7 @@
        confirmSelect: '确认选择',
        cancel: "取消",
        delete: '删除',
        copy: '复制',
        query: "查询",
        top: "置顶",
        resort: "排序",
rsf-admin/src/page/basicInfo/basStation/BasStationCreate.jsx
@@ -35,7 +35,7 @@
import DictionaryArraySelect from "../../components/DictionaryArraySelect";
const BasStationCreate = (props) => {
    const { open, setOpen } = props;
    const { open, setOpen , copyRecord = null, onClose} = props;
    const translate = useTranslate();
    const notify = useNotify();
@@ -43,6 +43,7 @@
    const handleClose = (event, reason) => {
        if (reason !== "backdropClick") {
            setOpen(false);
            if (typeof onClose === 'function') {onClose();}
        }
    };
@@ -58,7 +59,8 @@
    return (
        <>
            <CreateBase
                record={{}}
              key={open ? (copyRecord ? 'copy' : 'new') : 'closed'}
              record={copyRecord || {}}
                transform={(data) => {
                    return data;
                }}
rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
@@ -33,7 +33,8 @@
    DeleteButton,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { Box, Typography, Card, Stack, Button } from '@mui/material';
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
import { styled } from '@mui/material/styles';
import BasStationCreate from "./BasStationCreate";
import BasStationPanel from "./BasStationPanel";
@@ -59,7 +60,7 @@
    '& .column-name': {
    },
    '& .opt': {
        width: 200
        width: 220
    },
}));
@@ -93,7 +94,29 @@
        resettable
    />,
]
const CopyButton = ({ setCopyRecord, setCreateDialog }) => {
    const record = useRecordContext();
    const translate = useTranslate();
    if (!record) return null;
    return (
        <Button
            size="small"
            startIcon={<ContentCopyIcon fontSize="small" />}
            sx={{ padding: '1px', fontSize: '.75rem', minWidth: 'auto' }}
            onClick={(e) => {
                e.stopPropagation();
                const { id, createTime, updateTime, createBy, updateBy, createBy$, updateBy$, ...rest } = record;
                const copied = { ...rest };
                if (record.areaIds) copied.areaIds = [...(Array.isArray(record.areaIds) ? record.areaIds : [])];
                if (record.containerTypes) copied.containerTypes = [...(Array.isArray(record.containerTypes) ? record.containerTypes : [])];
                setCopyRecord(copied);
                setCreateDialog(true);
            }}
        >
            {translate('toolbar.copy')}
        </Button>
    );
};
const BasStationList = () => {
    const translate = useTranslate();
@@ -101,6 +124,7 @@
    const [drawerVal, setDrawerVal] = useState(false);
    const [areaFieldDialog, setAreaFieldDialog] = useState(false);
    const [areaFieldDialog2, setAreaFieldDialog2] = useState(false);
    const [copyRecord, setCopyRecord] = useState(null);
    return (
        <Box display="flex">
            <List
@@ -201,6 +225,7 @@
                    {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */}
                    <TextField source="memo" label="common.field.memo" sortable={false} />
                    <WrapperField cellClassName="opt" label="common.field.opt">
                        <CopyButton setCopyRecord={setCopyRecord} setCreateDialog={setCreateDialog} />
                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                    </WrapperField>
@@ -210,6 +235,8 @@
            <BasStationCreate
                open={createDialog}
                setOpen={setCreateDialog}
                copyRecord={copyRecord}
                onClose={() => setCopyRecord(null)}
            />
            <PageDrawer
rsf-admin/src/page/basicInfo/matnrGroup/MatnrGroupList.jsx
@@ -46,15 +46,15 @@
        minWidth: 80,
    },
    {
      id: 'parCode',
      label: 'table.field.matnrGroup.parCode',
      minWidth: 100,
    },
    {
        id: 'name',
        label: 'table.field.matnrGroup.name',
        Width: 100,
    },
    // {
    //     id: 'parCode',
    //     label: 'table.field.matnrGroup.parCode',
    //     minWidth: 100,
    // }
    }
];
const getIconComponent = (iconStr) => {
rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
@@ -80,6 +80,7 @@
                configProperties.getTokenExpireTime(), configProperties.getTokenKey());
        userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, user.getTenantId(), null, request);
        Tenant tenant = tenantService.getById(user.getTenantId());
        user = userService.fillRoleIdsForResponse(user);
        return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName()));
    }
rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
@@ -17,6 +17,11 @@
    User setUserAuthInfo(User user);
    /**
     * 为返回给前端的 User 填充 roleIds,只查一次库,避免各处重复写且 @JsonIgnore 导致前端拿不到
     */
    User fillRoleIdsForResponse(User user);
    boolean comparePassword(String dbPassword, String inputPassword);
    String encodePassword(String password);
rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
@@ -5,6 +5,7 @@
import com.vincent.rsf.server.common.domain.BaseParam;
import com.vincent.rsf.server.common.domain.PageParam;
import com.vincent.rsf.server.common.domain.PageResult;
import com.vincent.rsf.server.system.entity.Role;
import com.vincent.rsf.server.system.entity.User;
import com.vincent.rsf.server.system.mapper.UserMapper;
import com.vincent.rsf.server.system.service.RoleMenuService;
@@ -14,6 +15,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@@ -56,6 +58,16 @@
    }
    @Override
    public User fillRoleIdsForResponse(User user) {
        if (user == null || user.getId() == null) {
            return user;
        }
        List<Role> roles = userRoleService.listByUserId(user.getId());
        user.setRoleIds(roles.stream().map(Role::getId).toArray(Long[]::new));
        return user;
    }
    @Override
    public boolean comparePassword(String dbPassword, String inputPassword) {
        return bCryptPasswordEncoder.matches(inputPassword, dbPassword);
    }