Commit 1a74cf25 authored by wenmo's avatar wenmo

新增用户密码修改

parent c1ce6abb
......@@ -3,6 +3,7 @@ package com.dlink.controller;
import com.dlink.assertion.Asserts;
import com.dlink.common.result.ProTableResult;
import com.dlink.common.result.Result;
import com.dlink.dto.ModifyPasswordDTO;
import com.dlink.gateway.result.TestResult;
import com.dlink.model.ClusterConfiguration;
import com.dlink.model.User;
......@@ -90,4 +91,13 @@ public class UserController {
user = userService.getById(user.getId());
return Result.succeed(user,"获取成功");
}
/**
* 修改密码
*/
@PostMapping("/modifyPassword")
public Result modifyPassword(@RequestBody ModifyPasswordDTO modifyPasswordDTO) {
return userService.modifyPassword(modifyPasswordDTO.getUsername(),modifyPasswordDTO.getPassword(),
modifyPasswordDTO.getNewPassword());
}
}
package com.dlink.dto;
import lombok.Getter;
import lombok.Setter;
/**
* ModifyPasswordDTO
*
* @author wenmo
* @since 2022/2/22 23:27
*/
@Getter
@Setter
public class ModifyPasswordDTO {
private String username;
private String password;
private String newPassword;
}
......@@ -16,6 +16,8 @@ public interface UserService extends ISuperService<User> {
boolean modifyUser(User user);
Result modifyPassword(String username, String password,String newPassword);
boolean removeUser(Integer id);
Result loginUser(String username, String password,boolean isRemember);
......
......@@ -52,6 +52,22 @@ public class UserServiceImpl extends SuperServiceImpl<UserMapper, User> implemen
return updateById(user);
}
@Override
public Result modifyPassword(String username, String password,String newPassword) {
User user = getUserByUsername(username);
if(Asserts.isNull(user)){
return Result.failed("该账号不存在");
}
if(!Asserts.isEquals(SaSecureUtil.md5(password),user.getPassword())){
return Result.failed("原密码错误");
}
user.setPassword(SaSecureUtil.md5(newPassword));
if(updateById(user)){
return Result.succeed("密码修改成功");
}
return Result.failed("密码修改失败");
}
@Override
public boolean removeUser(Integer id) {
User user = new User();
......
import React, {useState} from 'react';
import {Form, Button, Input, Modal} from 'antd';
import {PasswordItem} from "@/pages/user/data";
export type PasswordFormProps = {
onCancel: (flag?: boolean) => void;
onSubmit: (values: Partial<PasswordItem>) => void;
modalVisible: boolean;
values: Partial<PasswordItem>;
};
const formLayout = {
labelCol: {span: 7},
wrapperCol: {span: 13},
};
const PasswordForm: React.FC<PasswordFormProps> = (props) => {
const [form] = Form.useForm();
const [formVals, setFormVals] = useState<Partial<PasswordItem>>({
username: props.values.username,
});
const {
onSubmit: handleSubmit,
onCancel: handleModalVisible,
modalVisible,
} = props;
const submitForm = async () => {
const fieldsValue = await form.validateFields();
setFormVals({ ...formVals, ...fieldsValue });
handleSubmit({ ...formVals, ...fieldsValue });
};
const renderContent = () => {
return (
<>
<Form.Item
name="password"
label="旧密码"
hasFeedback
rules={[{required: true, message: '请输入旧密码!'}]}>
<Input.Password placeholder="请输入旧密码"/>
</Form.Item>
<Form.Item
name="newPassword"
label="新密码"
hasFeedback
rules={[{required: true, message: '请输入新密码!'}]}>
<Input.Password placeholder="请输入新密码"/>
</Form.Item>
<Form.Item
name="newPasswordCheck"
label="重复新密码"
hasFeedback
dependencies={['newPassword']}
rules={[
{
required: true,
message: '请重复输入一致的新密码',
},
({ getFieldValue }) => ({
validator(_, value) {
if (!value || getFieldValue('newPassword') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('重复新密码不一致!'));
},
}),
]}>
<Input.Password placeholder="请重复输入新密码"/>
</Form.Item>
</>
);
};
const renderFooter = () => {
return (
<>
<Button onClick={() => handleModalVisible(false)}>取消</Button>
<Button type="primary" onClick={() => submitForm()}>
完成
</Button>
</>
);
};
return (
<Modal
width={1200}
bodyStyle={{padding: '32px 40px 48px'}}
destroyOnClose
title="修改密码"
visible={modalVisible}
footer={renderFooter()}
onCancel={() => handleModalVisible()}
>
<Form
{...formLayout}
form={form}
initialValues={formVals}
>
{renderContent()}
</Form>
</Modal>
);
};
export default PasswordForm;
......@@ -11,3 +11,10 @@ export type UserTableListItem = {
worknum?: string;
mobile?: string;
};
export type PasswordItem = {
username: string;
password?: string;
newPassword?: string;
newPasswordCheck?: string;
};
......@@ -6,8 +6,9 @@ import {FooterToolbar} from '@ant-design/pro-layout';
import ProTable from '@ant-design/pro-table';
import ProDescriptions from '@ant-design/pro-descriptions';
import {UserTableListItem} from "@/pages/user/data";
import {handleAddOrUpdate, handleRemove, queryData, updateEnabled} from "@/components/Common/crud";
import {handleAddOrUpdate, handleOption, handleRemove, queryData, updateEnabled} from "@/components/Common/crud";
import UserForm from "@/pages/user/components/UserForm";
import PasswordForm from "@/pages/user/components/PasswordForm";
const url = '/api/user';
const UserTableList: React.FC<{}> = (props: any) => {
......@@ -15,6 +16,7 @@ const UserTableList: React.FC<{}> = (props: any) => {
const [row, setRow] = useState<UserTableListItem>();
const [modalVisible, handleModalVisible] = useState<boolean>(false);
const [updateModalVisible, handleUpdateModalVisible] = useState<boolean>(false);
const [passwordModalVisible, handlePasswordModalVisible] = useState<boolean>(false);
const [formValues, setFormValues] = useState({});
const actionRef = useRef<ActionType>();
const [selectedRowsState, setSelectedRows] = useState<UserTableListItem[]>([]);
......@@ -23,6 +25,9 @@ const UserTableList: React.FC<{}> = (props: any) => {
if (key === 'edit') {
setFormValues(currentItem);
handleUpdateModalVisible(true);
} else if (key === 'password') {
setFormValues(currentItem);
handlePasswordModalVisible(true);
} else if (key === 'delete') {
Modal.confirm({
title: '删除用户',
......@@ -44,6 +49,7 @@ const UserTableList: React.FC<{}> = (props: any) => {
overlay={
<Menu onClick={({key}) => editAndDelete(key, item)}>
<Menu.Item key="edit">编辑</Menu.Item>
<Menu.Item key="password">修改密码</Menu.Item>
{item.username=='admin'?'':(<Menu.Item key="delete">删除</Menu.Item>)}
</Menu>
}
......@@ -239,6 +245,21 @@ const UserTableList: React.FC<{}> = (props: any) => {
values={{}}
/>
{formValues && Object.keys(formValues).length ? (
<>
<PasswordForm
onSubmit={async (value) => {
const success = await handleOption(url +"/modifyPassword",'修改密码', value);
if (success) {
handlePasswordModalVisible(false);
setFormValues({});
}
}}
onCancel={() => {
handlePasswordModalVisible(false);
}}
modalVisible={passwordModalVisible}
values={formValues}
/>
<UserForm
onSubmit={async (value) => {
const success = await handleAddOrUpdate("api/user", value);
......@@ -256,7 +277,7 @@ const UserTableList: React.FC<{}> = (props: any) => {
}}
modalVisible={updateModalVisible}
values={formValues}
/>
/></>
): null}
<Drawer
width={600}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment