|
|
|
@ -1,3 +1,4 @@
|
|
|
|
|
|
|
|
|
|
package com.lingnan.supermarket.dialog;
|
|
|
|
|
|
|
|
|
|
import java.awt.Container;
|
|
|
|
@ -25,74 +26,54 @@ import com.lingnan.supermarket.view.LoginView;
|
|
|
|
|
// UserInfDialog类继承自JDialog,用于创建一个修改用户信息的对话框窗口,并实现了ActionListener接口来处理按钮点击事件
|
|
|
|
|
public class UserInfDialog extends JDialog implements ActionListener {
|
|
|
|
|
|
|
|
|
|
// 构建对话框界面的各个面板、标签、文本框和按钮等组件的声明
|
|
|
|
|
// 以下是用于构建对话框界面的各个面板、标签、文本框和按钮等组件的声明
|
|
|
|
|
private JPanel namePanel, loginNamePanel, phonePanel, opePanel, passwordPanel, sSuperPanel;
|
|
|
|
|
// 用于存放姓名相关组件的面板
|
|
|
|
|
private JLabel nameLabel, loginNameLabel, phoneLabel, passwordLabel, sSuperLabel;
|
|
|
|
|
// 分别对应姓名、登录名、联系电话、密码、权限等信息的标签组件,用于在界面上显示相应的文字提示
|
|
|
|
|
private JTextField nameTF, loginNameTF, phoneTF, passwordTF, sSuperTF;
|
|
|
|
|
// 分别对应姓名、登录名、联系电话、密码、权限等信息的文本框组件,用于用户输入或显示相应信息
|
|
|
|
|
private JButton saveBtn, cancelBtn;
|
|
|
|
|
// 保存按钮和取消按钮,用于触发保存修改信息或取消操作的动作
|
|
|
|
|
|
|
|
|
|
// 用户服务接口的实现类实例,用于调用与用户相关的数据库操作方法
|
|
|
|
|
private UserService userService = new UserServiceImpl();
|
|
|
|
|
// 创建UserServiceImpl类的实例,通过该实例可以调用具体实现的用户相关数据库操作,比如更新用户信息等
|
|
|
|
|
|
|
|
|
|
// 要修改信息的用户对象
|
|
|
|
|
private User user;
|
|
|
|
|
// 存储当前要在对话框中进行信息修改操作的用户对象,包含了该用户原本的各种信息
|
|
|
|
|
|
|
|
|
|
// 用于存储用户权限级别,初始值为从传入的用户对象中获取的权限级别
|
|
|
|
|
private int sSuper = -1;
|
|
|
|
|
// 记录用户的权限级别,初始化为 -1,后续会根据传入用户对象的权限情况进行赋值
|
|
|
|
|
|
|
|
|
|
// 下拉框组件,用于选择用户权限
|
|
|
|
|
// 下拉框组件,用于选择用户权限(这里部分代码被注释掉,可能原本有完整的权限选择功能,后简化了)
|
|
|
|
|
private JComboBox<String> combo;
|
|
|
|
|
// 定义一个下拉框组件,用于展示可选的用户权限选项,其选项内容为字符串类型
|
|
|
|
|
|
|
|
|
|
// 下拉框中的选项内容,包括当前权限以及不同的权限角色
|
|
|
|
|
private String[] identity = { "当前权限", "收银员", "管理员", "超级管理员","进货员" };
|
|
|
|
|
// 定义一个字符串数组,存储下拉框中可供选择的用户权限选项内容
|
|
|
|
|
private String[] identity = { "当前权限", "进货员","收银员", "管理员", "超级管理员" };
|
|
|
|
|
|
|
|
|
|
// 父窗口JFrame的引用,可能用于在某些操作后对父窗口进行处理
|
|
|
|
|
private JFrame JFrame;
|
|
|
|
|
// 保存传入的父窗口(JFrame类型)的引用
|
|
|
|
|
|
|
|
|
|
// 构造函数,用于创建修改用户信息的对话框,传入父窗口JFrame和要修改信息的用户对象
|
|
|
|
|
public UserInfDialog(JFrame parent, User user) {
|
|
|
|
|
// 调用父类JDialog的构造函数,设置对话框的标题为"添加"
|
|
|
|
|
// 调用父类JDialog的构造函数,设置对话框的标题为"添加"(这里标题可能需要根据实际情况修改为更合适的,比如"修改用户信息")
|
|
|
|
|
super(parent, "添加");
|
|
|
|
|
this.user = user;
|
|
|
|
|
// 将传入的要修改信息的用户对象赋值给当前类的成员变量user
|
|
|
|
|
|
|
|
|
|
// 设置当前用户的权限级别
|
|
|
|
|
this.sSuper = user.getUsuper();
|
|
|
|
|
// 从传入的用户对象中获取其原本的权限级别,并赋值给当前类的成员变量sSuper
|
|
|
|
|
|
|
|
|
|
// 设置对话框的大小
|
|
|
|
|
setSize(350, 300);
|
|
|
|
|
// 设置对话框的宽度为350像素,高度为300像素,确定对话框在屏幕上显示的初始大小
|
|
|
|
|
|
|
|
|
|
// 设置对话框在屏幕中央显示
|
|
|
|
|
setLocationRelativeTo(null);
|
|
|
|
|
// 通过传入null参数,使对话框在屏幕的中心位置显示
|
|
|
|
|
|
|
|
|
|
// 设置对话框为模态对话框,即显示时会阻塞其他窗口的操作
|
|
|
|
|
setModal(true);
|
|
|
|
|
// 模态对话框会强制用户在关闭它之前只能与该对话框进行交互,不能操作其他窗口
|
|
|
|
|
|
|
|
|
|
// 设置对话框大小不可调整
|
|
|
|
|
setResizable(false);
|
|
|
|
|
// 禁止用户通过拖动边框等方式改变对话框的大小,保持固定的布局和显示效果
|
|
|
|
|
|
|
|
|
|
// 设置对话框的布局为流式布局
|
|
|
|
|
this.setLayout(new FlowLayout());
|
|
|
|
|
// 使用流式布局来排列对话框内的组件,组件会按照添加的顺序从左到右、从上到下依次排列
|
|
|
|
|
|
|
|
|
|
// 保存父窗口的引用
|
|
|
|
|
this.JFrame = parent;
|
|
|
|
|
// 将传入的父窗口引用赋值给当前类的成员变量JFrame
|
|
|
|
|
|
|
|
|
|
// 初始化对话框的视图组件
|
|
|
|
|
initView();
|
|
|
|
@ -103,53 +84,34 @@ public class UserInfDialog extends JDialog implements ActionListener {
|
|
|
|
|
|
|
|
|
|
// 姓名面板及相关组件的初始化,文本框中显示当前用户的姓名信息
|
|
|
|
|
namePanel = new JPanel();
|
|
|
|
|
// 创建一个新的面板,用于存放姓名相关的标签和文本框组件
|
|
|
|
|
nameLabel = new JLabel("姓名");
|
|
|
|
|
// 创建一个显示"姓名"文字的标签组件
|
|
|
|
|
nameTF = new JTextField(user.getRname(), 15);
|
|
|
|
|
// 创建一个文本框组件,初始内容设置为传入用户对象的真实姓名(通过user.getRname()获取),文本框宽度设置为可显示15个字符左右
|
|
|
|
|
namePanel.add(nameLabel);
|
|
|
|
|
// 将姓名标签添加到姓名面板中
|
|
|
|
|
namePanel.add(nameTF);
|
|
|
|
|
// 将姓名文本框添加到姓名面板中
|
|
|
|
|
|
|
|
|
|
// 账号面板及相关组件的初始化,文本框中显示当前用户的账号信息
|
|
|
|
|
loginNamePanel = new JPanel();
|
|
|
|
|
// 创建一个新的面板,用于存放账号相关的标签和文本框组件
|
|
|
|
|
loginNameLabel = new JLabel("账号");
|
|
|
|
|
// 创建一个显示"账号"文字的标签组件
|
|
|
|
|
loginNameTF = new JTextField(user.getUsername(), 15);
|
|
|
|
|
// 创建一个文本框组件,初始内容设置为传入用户对象的用户名(通过user.getUsername()获取),文本框宽度设置为可显示15个字符左右
|
|
|
|
|
loginNamePanel.add(loginNameLabel);
|
|
|
|
|
// 将账号标签添加到账号面板中
|
|
|
|
|
loginNamePanel.add(loginNameTF);
|
|
|
|
|
// 将账号文本框添加到账号面板中
|
|
|
|
|
|
|
|
|
|
// 手机面板及相关组件的初始化,文本框中显示当前用户的手机信息
|
|
|
|
|
phonePanel = new JPanel();
|
|
|
|
|
// 创建一个新的面板,用于存放手机相关的标签和文本框组件
|
|
|
|
|
phoneLabel = new JLabel("电话");
|
|
|
|
|
// 创建一个显示"联系"文字的标签组件
|
|
|
|
|
phoneLabel = new JLabel("联系");
|
|
|
|
|
phoneTF = new JTextField(user.getPhone(), 15);
|
|
|
|
|
// 创建一个文本框组件,初始内容设置为传入用户对象的手机号码(通过user.getPhone()获取),文本框宽度设置为可显示15个字符左右
|
|
|
|
|
phonePanel.add(phoneLabel);
|
|
|
|
|
// 将手机标签添加到手机面板中
|
|
|
|
|
phonePanel.add(phoneTF);
|
|
|
|
|
// 将手机文本框添加到手机面板中
|
|
|
|
|
|
|
|
|
|
// 密码面板及相关组件的初始化,文本框中显示当前用户的密码信息
|
|
|
|
|
passwordPanel = new JPanel();
|
|
|
|
|
// 创建一个新的面板,用于存放密码相关的标签和文本框组件
|
|
|
|
|
passwordLabel = new JLabel("密码");
|
|
|
|
|
// 创建一个显示"密码"文字的标签组件
|
|
|
|
|
passwordTF = new JTextField(user.getPassword(), 15);
|
|
|
|
|
// 创建一个文本框组件,初始内容设置为传入用户对象的密码(通过user.getPassword()获取),文本框宽度设置为可显示15个字符左右
|
|
|
|
|
passwordPanel.add(passwordLabel);
|
|
|
|
|
// 将密码标签添加到密码面板中
|
|
|
|
|
passwordPanel.add(passwordTF);
|
|
|
|
|
// 将密码文本框添加到密码面板中
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 权限面板及相关组件的初始化,这里部分代码被注释掉,可能原本有完整的权限选择功能,后简化了
|
|
|
|
|
/*
|
|
|
|
|
sSuperPanel = new JPanel();
|
|
|
|
|
sSuperLabel = new JLabel("权限");
|
|
|
|
|
// sSuperTF = new JTextField(15);
|
|
|
|
@ -157,40 +119,26 @@ public class UserInfDialog extends JDialog implements ActionListener {
|
|
|
|
|
combo.addItemListener(new MyItemListener());
|
|
|
|
|
sSuperPanel.add(sSuperLabel);
|
|
|
|
|
sSuperPanel.add(combo);
|
|
|
|
|
|
|
|
|
|
// 上述被注释掉的代码原本用于创建权限相关的面板、标签、下拉框组件,并为下拉框添加选项改变的监听器,用于实现完整的权限选择功能,但目前处于简化状态
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// 操作按钮面板及相关组件的初始化
|
|
|
|
|
opePanel = new JPanel();
|
|
|
|
|
// 创建一个新的面板,用于存放操作按钮(保存和取消按钮)
|
|
|
|
|
saveBtn = new JButton("保存");
|
|
|
|
|
// 创建一个显示"保存"文字的按钮组件,用于触发保存用户信息修改的操作
|
|
|
|
|
cancelBtn = new JButton("取消");
|
|
|
|
|
// 创建一个显示"取消"文字的按钮组件,用于触发取消当前修改操作的动作
|
|
|
|
|
// 为保存按钮和取消按钮添加点击事件监听器
|
|
|
|
|
saveBtn.addActionListener(this);
|
|
|
|
|
// 将保存按钮的点击事件绑定到当前类(实现了ActionListener接口)的actionPerformed方法上,以便处理保存按钮被点击后的操作逻辑
|
|
|
|
|
cancelBtn.addActionListener(this);
|
|
|
|
|
// 将取消按钮的点击事件绑定到当前类(实现了ActionListener接口)的actionPerformed方法上,以便处理取消按钮被点击后的操作逻辑
|
|
|
|
|
opePanel.add(saveBtn);
|
|
|
|
|
// 将保存按钮添加到操作按钮面板中
|
|
|
|
|
opePanel.add(cancelBtn);
|
|
|
|
|
// 将取消按钮添加到操作按钮面板中
|
|
|
|
|
|
|
|
|
|
// 将各个面板添加到对话框的内容面板中
|
|
|
|
|
Container container = getContentPane();
|
|
|
|
|
// 获取对话框的内容面板,用于添加其他组件面板
|
|
|
|
|
container.add(namePanel);
|
|
|
|
|
// 将姓名面板添加到对话框的内容面板中
|
|
|
|
|
container.add(loginNamePanel);
|
|
|
|
|
// 将账号面板添加到对话框的内容面板中
|
|
|
|
|
container.add(passwordPanel);
|
|
|
|
|
// 将密码面板添加到对话框的内容面板中
|
|
|
|
|
container.add(phonePanel);
|
|
|
|
|
container.add(sSuperPanel);
|
|
|
|
|
// 原本可能添加权限面板
|
|
|
|
|
/*container.add(sSuperPanel);*/
|
|
|
|
|
container.add(opePanel);
|
|
|
|
|
// 将操作按钮面板添加到对话框的内容面板中
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理按钮点击事件的方法,实现了ActionListener接口中的方法
|
|
|
|
@ -203,85 +151,70 @@ public class UserInfDialog extends JDialog implements ActionListener {
|
|
|
|
|
|
|
|
|
|
// 获取用户在文本框中修改后的姓名、账号、手机和密码信息
|
|
|
|
|
String name = nameTF.getText();
|
|
|
|
|
// 获取姓名文本框中用户输入或修改后的姓名内容
|
|
|
|
|
String loginName = loginNameTF.getText();
|
|
|
|
|
// 获取账号文本框中用户输入或修改后的账号内容
|
|
|
|
|
String phone = phoneTF.getText();
|
|
|
|
|
// 获取手机文本框中用户输入或修改后的手机号码内容
|
|
|
|
|
String password = passwordTF.getText();
|
|
|
|
|
// 获取密码文本框中用户输入或修改后的密码内容
|
|
|
|
|
|
|
|
|
|
// 此处注释提示了后续应该添加对获取到的用户输入信息进行合法性校验的代码
|
|
|
|
|
// TODO 参数校验部分,这里应该对获取到的用户输入信息进行合法性校验,比如非空、格式等校验,但目前未实现具体逻辑
|
|
|
|
|
|
|
|
|
|
// 创建一个新的User对象,用于存储要更新到数据库的用户信息,设置了部分从原用户对象获取的信息以及修改后的信息
|
|
|
|
|
User user1 = new User();
|
|
|
|
|
user1.setId(user.getId());
|
|
|
|
|
// 设置新用户对象的id为原用户对象的id,确保更新的是正确的用户记录
|
|
|
|
|
user1.setRname(name);
|
|
|
|
|
// 设置新用户对象的真实姓名为获取到的修改后的姓名内容
|
|
|
|
|
user1.setUsername(loginName);
|
|
|
|
|
// 设置新用户对象的用户名(账号)为获取到的修改后的账号内容
|
|
|
|
|
user1.setPhone(phone);
|
|
|
|
|
// 设置新用户对象的手机号码为获取到的修改后的手机号码内容
|
|
|
|
|
user1.setPassword(password);
|
|
|
|
|
// 设置新用户对象的密码为获取到的修改后的密码内容
|
|
|
|
|
user1.setImg(user.getImg());
|
|
|
|
|
// 设置新用户对象的图片相关信息(这里不太明确具体用途,可能是用户头像之类的图片信息)为原用户对象的对应信息
|
|
|
|
|
user1.setUsuper(sSuper);
|
|
|
|
|
// 设置新用户对象的权限级别为当前记录的权限级别(在构造函数或其他地方已确定)
|
|
|
|
|
|
|
|
|
|
// 调用用户服务接口的根据用户id更新用户信息的方法,将更新后的用户信息保存到数据库中,并获取返回结果
|
|
|
|
|
int result = userService.updateByIdUser(user1);
|
|
|
|
|
if (result == 1) {
|
|
|
|
|
// 如果更新成功,关闭当前对话框
|
|
|
|
|
this.dispose();
|
|
|
|
|
// 通过调用dispose方法关闭当前的对话框窗口,释放相关资源
|
|
|
|
|
|
|
|
|
|
// 弹出提示框显示修改成功信息,并提示重新登录
|
|
|
|
|
JOptionPane.showMessageDialog(this, "修改成功,请重新登陆", "提示", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
// 使用JOptionPane弹出一个信息提示框,向用户显示修改成功的消息,并提示需要重新登录,提示框的图标为信息图标(INFORMATION_MESSAGE表示)
|
|
|
|
|
|
|
|
|
|
// 关闭父窗口
|
|
|
|
|
this.JFrame.dispose();
|
|
|
|
|
// 通过调用父窗口的dispose方法关闭父窗口
|
|
|
|
|
|
|
|
|
|
// 创建并显示新的登录视图
|
|
|
|
|
new LoginView();
|
|
|
|
|
// 创建一个新的登录视图(LoginView类的实例)并显示出来,方便用户重新登录系统
|
|
|
|
|
} else {
|
|
|
|
|
// 如果更新失败,弹出提示框显示修改失败信息
|
|
|
|
|
JOptionPane.showMessageDialog(this, "修改失败", "提示", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
// 使用JOptionPane弹出一个错误提示框,向用户显示修改失败的消息
|
|
|
|
|
}
|
|
|
|
|
} else if (source == cancelBtn) {
|
|
|
|
|
// 如果点击的是取消按钮,直接关闭当前对话框
|
|
|
|
|
this.dispose();
|
|
|
|
|
// 通过调用dispose方法关闭当前对话框,放弃本次修改操作,释放相关资源
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 实现了ItemListener接口,用于监听下拉框选项变化事件
|
|
|
|
|
// 内部类,实现了ItemListener接口,用于监听下拉框选项变化事件(这里部分代码被注释掉,可能原本有完整的权限选择功能,后简化了)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* cwf 2024/12/11
|
|
|
|
|
* 添加了进货员的信息
|
|
|
|
|
* sSuper1.equals("进货员")
|
|
|
|
|
* sSuper = 3;
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
public class MyItemListener implements ItemListener {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void itemStateChanged(ItemEvent e) {
|
|
|
|
|
// 获取触发事件的下拉框组件
|
|
|
|
|
JComboBox cb = (JComboBox) e.getSource();
|
|
|
|
|
// 从事件源中获取触发选项改变事件的下拉框对象
|
|
|
|
|
|
|
|
|
|
// 获取当前选中的下拉框选项内容
|
|
|
|
|
String sSuper1 = (String) cb.getSelectedItem();
|
|
|
|
|
// 获取下拉框当前选中的选项对应的字符串内容
|
|
|
|
|
|
|
|
|
|
if (sSuper1.equals("当前权限"))
|
|
|
|
|
sSuper = user.getUsuper();
|
|
|
|
|
sSuper = user.getUsuper(); // 保持原权限
|
|
|
|
|
else if (sSuper1.equals("收银员"))
|
|
|
|
|
sSuper = 2;
|
|
|
|
|
else if (sSuper1.equals("管理员"))
|
|
|
|
|
sSuper = 1;
|
|
|
|
|
sSuper = 2; // 收银员权限
|
|
|
|
|
else if (sSuper1.equals("管理员")) // 新增权限角色
|
|
|
|
|
sSuper = 1;
|
|
|
|
|
else if (sSuper1.equals("进货员")) // 新增权限角色
|
|
|
|
|
sSuper = 3;
|
|
|
|
|
else
|
|
|
|
|
sSuper = 0;
|
|
|
|
|
// 根据下拉框选中的不同选项内容,来设置当前用户的权限级别,不同的数字0、1、2对应不同的权限
|
|
|
|
|
sSuper = 0; // 超级管理员
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|