WelcomePage.java 7.51 KB
package cn.csbr.app.gui.page;

import cn.csbr.app.auth.LoginService;
import cn.csbr.app.config.FxConfigure;
import cn.csbr.app.gui.GUIContext;
import cn.csbr.app.gui.component.common.ImageButton;
import cn.csbr.app.gui.handler.OpenLoginHandler;
import cn.csbr.app.gui.util.DialogUtils;
import cn.csbr.app.model.LoginUser;
import cn.csbr.app.service.SysUserService;
import cn.csbr.springboot.dao.model.SysUser;
import com.alibaba.fastjson.JSON;
import javafx.geometry.Insets;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;

import org.controlsfx.control.textfield.TextFields;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.Properties;

/**
 * 未登录界面
 */
@Component
public class WelcomePage extends AbstractPage {
    @Autowired
    private OpenLoginHandler loginActionHandler;

    @Autowired
    private LoginService loginService;

    @Autowired
    private SysUserService sysUserService;

    @Autowired
    private MainPage mainPage;

    @Autowired
    private ShowDataPage showDataPage;

    @Autowired
    private GUIContext context;

    @Autowired
    private FxConfigure fxConfigure;

    private TextField usernameField = TextFields.createClearableTextField();
    private static Logger log = LoggerFactory.getLogger(LoginService.class);

    private PasswordField passwordField = TextFields.createClearablePasswordField();

    // private final TouchModule touchModule = TouchModule.INSTANCE;

    public WelcomePage() {
        // touchModule.ZKNIDModule_Connect("protocol=RS232,port=COM5,baudrate=115200");
    }

    ImageButton loginBtn;

    //构建页面布局
    protected Node constructNode() {

        //VBox布局将子节点堆叠在垂直列中。新添加的子节点被放置在上一个子节点的下面
        VBox mainPanel = new VBox();
        mainPanel.setId("loginPage");

        mainPanel.getStylesheets().add("styles/login.css");
        File file=new File("set.ini");
        if(!file.exists()) {
            try {
                OutputStream opt = null;
                file.createNewFile();
                Properties pps = new Properties();
                //加载读取文件流
                opt = new FileOutputStream("set.ini");
                //通过setProperty(key,value)赋值,会覆盖相同key的值
                pps.setProperty("kjj", "Ctrl+Alt+H");
                pps.setProperty("kjjpwd", "111111");
                pps.setProperty("kjjispwd", "否");
                //修改值 (必不可少)
                pps.store(opt, null);
                opt.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        try {
            Properties pps = new Properties();
            FileInputStream fis = new FileInputStream("set.ini");
            //创建文件输出流

            //创建Properties属性对象用来接收ini文件中的属性

            //从文件流中加载属性
            pps.load(fis);
            //通过getProperty("属性名")获取key对应的值
            String kjj=pps.getProperty("kjj");
            String kjjpwd=pps.getProperty("kjjpwd");
            String kjjispwd=pps.getProperty("kjjispwd");
            String[] kjjs = kjj.split("\\+");
            for(String item : kjjs){
                context.getYckjj().add(item);
            }
            context.setYcpwd(kjjpwd);
            context.setKjjispwd(kjjispwd);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //视图布局类继承自parent,为页面元素设置宽高
        Region topspacer = new Region();
        topspacer.setMinHeight(484);

        // HBox布局类将JavaFX子节点放在水平行中。 新的子节点附加到右侧的末尾
        HBox centerbox = new HBox();
        centerbox.setMinHeight(340);

        Region clspacer = new Region();

        clspacer.setMinWidth(830);
        Region crspacer = new Region();
        crspacer.setMinWidth(200);

        // 通常用于布局:第一列上的只读标签的输入表单和第二列上的输入字段,可以在行,列或单元格级别指定约束。
        GridPane grid = new GridPane();
      //  usernameField.setText("920140");
     //   passwordField.setText("111111");
        // 调用imageButton类的带三个参数的构造函数,设置点击事件,event->事件执行
        loginBtn = new ImageButton((e) -> {
            LoginUser user = new LoginUser();
            log.info("登录开始");
            // 取到页面上的用户名和密码输入框的值并赋值给user对象
            user.setUserName(usernameField.getText());
            user.setPassword(passwordField.getText());

            try {
                // 调用登录方法
                loginService.login(user);
                log.info("开始刷新主界面");
                // 刷新主页面
                mainPage.refresh();
                log.info("开始加载主界面");
                // 更新页面显示的布局节点为主界面布局,跳到主页面
                context.updateMainContent(mainPage.getContent());

                //显示柜内数据界面
//                showDataPage.refresh();
//                showDataPage.getdata();
//                context.updateMainContent(showDataPage.getContent());
            } catch (Exception ex) {
                log.info("异常"+ex.getMessage());
                // 显示错误信息
                DialogUtils.showAlert(ex.getMessage(), null, context.getPrimaryStage());
            } finally {
                usernameField.clear();
                passwordField.clear();
            }
        }, "loginBtn", "/images/btn_login.png");
        loginBtn.setCursor(Cursor.HAND);

        usernameField.setMinHeight(50);

        // 设置输入框提示语
        usernameField.setPromptText("用户名");

        passwordField.setMinHeight(50);
        passwordField.setPromptText("密码");
//        passwordField.requestFocus();
        // 设置默认值,一般没有的吧。。
       // usernameField.setText("hsz");
       // passwordField.setText("111111");

        // 设置上下间距
        grid.setVgap(26);
        grid.setPadding(new Insets(110, 0, 0, 15));
        //loginBtn.requestFocus();
        //column:列  row:行 colspan:多少个列宽  rowspan:多少行宽
        grid.add(usernameField, 0, 0, 1, 1);
        grid.add(passwordField, 0, 1, 1, 1);
        grid.add(loginBtn, 0, 2, 1, 1);
        centerbox.getChildren().addAll(clspacer, grid, crspacer);
        Region bottomspacer = new Region();
        bottomspacer.setMinHeight(400);

        // 设置vbox完整布局
        mainPanel.getChildren().addAll(topspacer, centerbox, bottomspacer);

        this.setTitle("欢迎界面");

        mainPanel.setMaxWidth(fxConfigure.getMinWidth());
        mainPanel.setMaxHeight(fxConfigure.getMinHeight());

        return mainPanel;
    }

    @Override
    public void refresh() {
        //   loginBtn.requestFocus();
    }

    public  SysUser findUser(SysUser user) {
        try {
            user = sysUserService.findUser(user);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

    public void login(LoginUser user) {
        loginService.login(user);
    }
}