From d0afcabd0c67d9f589de4c87ab38b754ca5de530 Mon Sep 17 00:00:00 2001 From: qmstyle Date: Fri, 18 Apr 2025 17:33:46 +0800 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B44=E6=9C=8818=E6=97=A517:33:34?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../online/exam/ui/admin/LoginPage.java | 2 +- .../online/exam/ui/admin/PaperPage.java | 21 +++- .../exam/ui/api/model/ExamDataLoad.java | 67 ++++++++++- .../ui/components/DynamicTableComponent.java | 105 +++++++++++------- .../ui/components/ExamButtonComponent.java | 14 +++ .../exam/ui/components/ExamComponent.java | 4 +- .../exam/ui/controller/LoginController.java | 2 +- .../exam/ui/controller/MainController.java | 11 +- .../online/exam/ui/layouts/SideMenu.java | 2 +- .../online/exam/ui/utils/ApiUtils.java | 6 + .../online/exam/ui/utils/FxUtils.java | 1 + 11 files changed, 179 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/zhangmeng/online/exam/ui/admin/LoginPage.java b/src/main/java/com/zhangmeng/online/exam/ui/admin/LoginPage.java index 183afcb..068b8f7 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/admin/LoginPage.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/admin/LoginPage.java @@ -221,7 +221,7 @@ public class LoginPage extends AnchorPane { Stage stage = new Stage(); //判断 - PaperPage paperPage = new PaperPage(); + PaperPage paperPage = new PaperPage(new HashMap<>()); scene = new Scene(paperPage, 1280, 720); stage.setScene(scene); stage.setTitle("在线考试系统"); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/admin/PaperPage.java b/src/main/java/com/zhangmeng/online/exam/ui/admin/PaperPage.java index b0d6477..331e1d3 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/admin/PaperPage.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/admin/PaperPage.java @@ -5,19 +5,36 @@ import com.zhangmeng.online.exam.ui.components.ExamComponent; import javafx.scene.control.SplitPane; import javafx.scene.layout.AnchorPane; +import java.util.HashMap; +import java.util.Map; + /** * @author zm * @date 2025/3/21 14:08 * @version: 1.0 */ public class PaperPage extends AnchorPane { + + private Map context = new HashMap<>(); + + public void setContext(Map context) { + this.context = context; + } + + public Map getContext() { + return context; + } + private SplitPane splitPane; - public PaperPage() { - ExamComponent examComponent = new ExamComponent(); + public PaperPage(Map context) { + setContext(context); + ExamComponent examComponent = new ExamComponent(context); ExamButtonComponent examButtonComponent = new ExamButtonComponent(examComponent.getTotalCount(),examComponent); examButtonComponent.setMaxWidth(300); + examButtonComponent.setMinWidth(200); splitPane = new SplitPane(); + splitPane.getItems().addAll(examButtonComponent,examComponent); this.getChildren().add(splitPane); splitPane.prefWidthProperty().bind(this.widthProperty()); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/api/model/ExamDataLoad.java b/src/main/java/com/zhangmeng/online/exam/ui/api/model/ExamDataLoad.java index db622fe..c32d17e 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/api/model/ExamDataLoad.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/api/model/ExamDataLoad.java @@ -3,14 +3,20 @@ package com.zhangmeng.online.exam.ui.api.model; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.zhangmeng.online.exam.ui.admin.PaperPage; import com.zhangmeng.online.exam.ui.api.DataLoad; +import com.zhangmeng.online.exam.ui.components.ExamComponent; +import com.zhangmeng.online.exam.ui.components.PaperViewComponent; +import com.zhangmeng.online.exam.ui.components.callBack.PaperViewComponentCallBackImpl; import com.zhangmeng.online.exam.ui.utils.AlertUtils; import com.zhangmeng.online.exam.ui.utils.ApiUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils; import javafx.beans.property.SimpleStringProperty; import javafx.collections.ObservableList; import javafx.scene.Parent; +import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; +import javafx.scene.layout.BorderPane; import javafx.stage.Stage; import java.util.*; @@ -22,19 +28,46 @@ import java.util.*; */ public class ExamDataLoad implements DataLoad { + private Parent form; + @Override public ApiUtils.DataView loadData(Integer pageNum, Integer pageSize) { - return null; + Map params = new HashMap<>(); + params.put("pageNum", pageNum.toString()); + params.put("pageSize", pageSize.toString()); + String userListData = HttpUtils.GET(ApiUtils.API_URL + "/exam/list", params); + JSONObject jsonObject = JSON.parseObject(userListData); + JSONArray data = jsonObject.getJSONArray("data"); + int total = jsonObject.getIntValue("total"); + List> userMapList = new ArrayList<>(); + for (Object datum : data) { + JSONObject user = (JSONObject) datum; + Map userMap = new HashMap<>(); + userMap.put("序号", new SimpleStringProperty(user.getString("id"))); + userMap.put("paperId", new SimpleStringProperty(user.getString("paperId"))); + userMap.put("试卷名称", new SimpleStringProperty(user.getString("paperName"))); + userMap.put("考试时间", new SimpleStringProperty(user.getString("examTime"))); + userMap.put("科目名称", new SimpleStringProperty(user.getString("subjectName"))); + userMap.put("总分", new SimpleStringProperty(user.getString("score"))); + userMap.put("状态", new SimpleStringProperty(user.getString("status"))); + + userMap.put("id", new SimpleStringProperty(user.getString("id"))); + userMapList.add(userMap); + } + + ApiUtils.DataView dataView = new ApiUtils.DataView(Arrays.asList("序号", "试卷名称", "考试时间", "科目名称", "总分", "状态"), userMapList).setDataLoad(this).setPageNum(pageNum).setPageSize(pageSize).setTotal(total); + dataView.setDataLoad(this); + return dataView; } @Override public void setForm(Parent view) { - + this.form = view; } @Override public Parent getForm() { - return null; + return this.form; } @Override @@ -59,7 +92,33 @@ public class ExamDataLoad implements DataLoad { @Override public List getContextMenu() { - return null; + //考试 + MenuItem exam_menu = exam_menu(); + return Arrays.asList(exam_menu); + } + + + private MenuItem exam_menu(){ + MenuItem group_volumes = new MenuItem("开始考试"); + group_volumes.setOnAction(event -> { + Map map = ApiUtils.selectedItem(group_volumes); + String id = map.get("id").getValue(); + String paperId = map.get("paperId").getValue(); +// AlertUtils.alert_msg("组卷正在开发中..." + id); + ContextMenu parentPopup = group_volumes.getParentPopup(); + BorderPane indexPage = (BorderPane) parentPopup.getStyleableParent(); + Stage stage = (Stage) indexPage.getScene().getWindow(); + + Map context = new HashMap<>(); + context.put("id", id); + context.put("paperId", paperId); + + PaperPage paperViewComponent = new PaperPage(context); + + AlertUtils.alert("组卷", paperViewComponent, 1280, 720, stage, true); + + }); + return group_volumes; } @Override diff --git a/src/main/java/com/zhangmeng/online/exam/ui/components/DynamicTableComponent.java b/src/main/java/com/zhangmeng/online/exam/ui/components/DynamicTableComponent.java index 742c83e..355c18c 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/components/DynamicTableComponent.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/components/DynamicTableComponent.java @@ -4,6 +4,7 @@ import com.zhangmeng.online.exam.ui.utils.ApiUtils; import com.zhangmeng.online.exam.ui.api.DataLoad; import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack; import com.zhangmeng.online.exam.ui.utils.AlertUtils; +import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; @@ -66,9 +67,13 @@ public class DynamicTableComponent extends VBox { return data; } + //新增编辑删除表单是否显示(增删该) + private final SimpleBooleanProperty isForm = new SimpleBooleanProperty(true); + // public DynamicTableComponent(List> dataList,List keys) { - public DynamicTableComponent(ApiUtils.DataView dataView) { + public DynamicTableComponent(ApiUtils.DataView dataView,boolean showForm) { super(); + this.isForm.set(showForm); this.dataLoad = dataView.getDataLoad(); List> dataList = dataView.getDataList(); List keys = dataView.getKeys(); @@ -102,8 +107,9 @@ public class DynamicTableComponent extends VBox { break; } } + // 刷新数据 + if (name != null) { - // 刷新数据 String newValue = event.getNewValue(); String oldValue = event.getOldValue(); // 调用接口修改数据 @@ -113,6 +119,7 @@ public class DynamicTableComponent extends VBox { } else { AlertUtils.alert_msg("该列不允许修改!"); + flushData(); } }); @@ -124,53 +131,63 @@ public class DynamicTableComponent extends VBox { ContextMenu contextMenu = new ContextMenu(); - MenuItem editItem = new MenuItem("编辑"); - - editItem.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - Map selectedItem = tableView.getSelectionModel().getSelectedItem(); - if (selectedItem != null) { - SimpleStringProperty id = selectedItem.get("id"); - if (id != null) { - callBack.edit(id.get(), DynamicTableComponent.this); - } - } - } - }); - - MenuItem deleteItem = new MenuItem("删除"); - deleteItem.setOnAction(new EventHandler() { - @Override - public void handle(ActionEvent event) { - Map selectedItem = tableView.getSelectionModel().getSelectedItem(); - if (selectedItem != null) { - SimpleStringProperty id = selectedItem.get("id"); - if (id != null) { - callBack.delete(id.get()); - } - } - data.remove(tableView.getSelectionModel().getSelectedItem()); - } - }); - if (dataLoad.getContextMenu() != null && !dataLoad.getContextMenu().isEmpty()){ contextMenu.getItems().addAll(dataLoad.getContextMenu()); } - contextMenu.getItems().addAll(editItem, deleteItem); - tableView.setContextMenu(contextMenu); + + if (isForm.get()){ + + MenuItem editItem = new MenuItem("编辑"); + + editItem.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + Map selectedItem = tableView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + SimpleStringProperty id = selectedItem.get("id"); + if (id != null) { + callBack.edit(id.get(), DynamicTableComponent.this); + } + } + } + }); + + + MenuItem deleteItem = new MenuItem("删除"); + deleteItem.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + Map selectedItem = tableView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + SimpleStringProperty id = selectedItem.get("id"); + if (id != null) { + callBack.delete(id.get()); + } + } + data.remove(tableView.getSelectionModel().getSelectedItem()); + } + }); + + contextMenu.getItems().addAll(editItem, deleteItem); + + ///添加按钮 + Button button = new Button("新增"); + button.setOnAction(event -> { + Stage window = (Stage) this.getScene().getWindow(); + callBack.Add(callBack.getAddForm(), window, this); + }); + this.getChildren().add(button); + } + + + + tableView.setContextMenu(contextMenu); + + tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);//允许一次选择一个或多个连续的索引范围。 - ///添加按钮 - Button button = new Button("新增"); - button.setOnAction(event -> { - Stage window = (Stage) this.getScene().getWindow(); - callBack.Add(callBack.getAddForm(), window, this); - }); - this.getChildren().add(button); this.setSpacing(10); - if (headerComponent != null){ this.getChildren().add(headerComponent); } @@ -208,4 +225,8 @@ public class DynamicTableComponent extends VBox { public void setHeaderComponent(HeaderComponent headerComponent) { this.headerComponent = headerComponent; } + + public void setIsForm(boolean isForm) { + this.isForm.set(isForm); + } } diff --git a/src/main/java/com/zhangmeng/online/exam/ui/components/ExamButtonComponent.java b/src/main/java/com/zhangmeng/online/exam/ui/components/ExamButtonComponent.java index 896c987..ed42660 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/components/ExamButtonComponent.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/components/ExamButtonComponent.java @@ -6,6 +6,8 @@ import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.layout.FlowPane; +import javafx.scene.layout.HBox; +import javafx.scene.paint.Paint; import java.util.HashMap; import java.util.Map; @@ -64,7 +66,19 @@ public class ExamButtonComponent extends FlowPane { this.getChildren().add(button); } + HBox hBox = new HBox(); + hBox.prefWidthProperty().bind(this.widthProperty().subtract(40)); + Button commit = new Button("提交"); + commit.setStyle("-fx-background-color: #008CBA;"); + commit.setTextFill(Paint.valueOf("#FFFFFF")); + commit.setPrefWidth(100); + commit.setOnAction(event -> { + System.out.println("提交"); + }); + hBox.getChildren().add(commit); + hBox.setAlignment(Pos.CENTER); + this.getChildren().add(hBox); } diff --git a/src/main/java/com/zhangmeng/online/exam/ui/components/ExamComponent.java b/src/main/java/com/zhangmeng/online/exam/ui/components/ExamComponent.java index 2881f02..6615068 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/components/ExamComponent.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/components/ExamComponent.java @@ -50,7 +50,7 @@ public class ExamComponent extends ScrollPane { private VBox vBox; - public ExamComponent() { + public ExamComponent(Map context) { this.vBox = new VBox(5); this.vBox.setPadding(new Insets(10)); @@ -58,7 +58,7 @@ public class ExamComponent extends ScrollPane { Map params = new HashMap<>(); params.put("pageNum", ApiUtils.PAGE_NUM); params.put("pageSize", ApiUtils.PAGE_SIZE); - params.put("id", 1); + params.put("id", context.get("paperId")); String userListData = HttpUtils.GET(ApiUtils.API_URL + "/paper/chooseQuestion/list", params); JSONObject jsonObject = JSON.parseObject(userListData); JSONArray data = jsonObject.getJSONArray("data"); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java b/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java index 6271579..7d8348d 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/controller/LoginController.java @@ -157,7 +157,7 @@ public class LoginController { Stage stage = new Stage(); //判断 - PaperPage paperPage = new PaperPage(); + PaperPage paperPage = new PaperPage(new HashMap<>()); scene = new Scene(paperPage, 1280, 720); stage.setScene(scene); stage.setTitle("在线考试系统"); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/controller/MainController.java b/src/main/java/com/zhangmeng/online/exam/ui/controller/MainController.java index 6d4f13a..c8432d2 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/controller/MainController.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/controller/MainController.java @@ -127,7 +127,8 @@ public class MainController { case "/option/list" -> init_table(ApiUtils.getQuestionOptionList(),FxUtils.QuestionOption_DynamicTableComponent); case "/permission/list" -> init_table(ApiUtils.getPermissionList(),FxUtils.Permission_DynamicTableComponent); case "/profession/list" -> init_table(ApiUtils.getProfessionList(),FxUtils.Profession_DynamicTableComponent); - case "/exam/list" -> FXMLLoader.load(getClass().getResource("/fxml/notice-edit.fxml")); + case "/exam/list" -> init_table(ApiUtils.getExamList(),FxUtils.Exam_DynamicTableComponent,false); + case "通知" -> FXMLLoader.load(getClass().getResource("/fxml/notice-edit.fxml")); case "在线用户" -> FXMLLoader.load(getClass().getResource("/fxml/monitor-online.fxml")); case "系统日志" -> FXMLLoader.load(getClass().getResource("/fxml/monitor-log.fxml")); case "性能监控" -> FXMLLoader.load(getClass().getResource("/fxml/monitor-performance.fxml")); @@ -149,14 +150,18 @@ public class MainController { } private DynamicTableComponent init_table(ApiUtils.DataView dataView,String type) { + return init_table(dataView,type,true); + } + + private DynamicTableComponent init_table(ApiUtils.DataView dataView,String type,boolean isForm) { dataView.setPageNum(dataView.getPageNum()); dataView.setPageSize(dataView.getPageSize()); dataView.setTotal(dataView.getTotal()); - DynamicTableComponent dynamicTableComponent = new DynamicTableComponent(dataView); + DynamicTableComponent dynamicTableComponent = new DynamicTableComponent(dataView,isForm); dynamicTableComponent.setCallBack(new DynamicTableComponentCallBackImpl(dataView.getDataLoad(),dataView.getDataLoad().getForm())); dynamicTableComponent.setPadding(new Insets(15)); dynamicTableComponent.prefHeightProperty().bind(contentTabPane.heightProperty().subtract(15)); - +// dynamicTableComponent.setIsForm(isForm); FxUtils.FX_BEANS.put(type,dynamicTableComponent); return dynamicTableComponent; diff --git a/src/main/java/com/zhangmeng/online/exam/ui/layouts/SideMenu.java b/src/main/java/com/zhangmeng/online/exam/ui/layouts/SideMenu.java index cd48129..759aea1 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/layouts/SideMenu.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/layouts/SideMenu.java @@ -163,7 +163,7 @@ public class SideMenu extends VBox { dataView.setPageNum(dataView.getPageNum()); dataView.setPageSize(dataView.getPageSize()); dataView.setTotal(dataView.getTotal()); - DynamicTableComponent dynamicTableComponent = new DynamicTableComponent(dataView); + DynamicTableComponent dynamicTableComponent = new DynamicTableComponent(dataView,true); dynamicTableComponent.setCallBack(new DynamicTableComponentCallBackImpl(dataView.getDataLoad(),dataView.getDataLoad().getForm())); dynamicTableComponent.setPadding(new Insets(15)); dynamicTableComponent.prefHeightProperty().bind(root.heightProperty().subtract(15)); diff --git a/src/main/java/com/zhangmeng/online/exam/ui/utils/ApiUtils.java b/src/main/java/com/zhangmeng/online/exam/ui/utils/ApiUtils.java index 6589b7e..b00c598 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/utils/ApiUtils.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/utils/ApiUtils.java @@ -113,6 +113,11 @@ public class ApiUtils { return dataLoad.loadData(PAGE_NUM,PAGE_SIZE); } + public static DataView getExamList() { + DataLoad dataLoad = new ExamDataLoad(); + return dataLoad.loadData(PAGE_NUM,PAGE_SIZE); + } + public static Map selectedItem(MenuItem menuItem){ ContextMenu parentPopup = menuItem.getParentPopup(); BorderPane indexPage = (BorderPane)parentPopup.getStyleableParent(); @@ -128,6 +133,7 @@ public class ApiUtils { + public static class DataView { private List keys; diff --git a/src/main/java/com/zhangmeng/online/exam/ui/utils/FxUtils.java b/src/main/java/com/zhangmeng/online/exam/ui/utils/FxUtils.java index 50c2410..a939492 100644 --- a/src/main/java/com/zhangmeng/online/exam/ui/utils/FxUtils.java +++ b/src/main/java/com/zhangmeng/online/exam/ui/utils/FxUtils.java @@ -33,6 +33,7 @@ public class FxUtils { public static String QuestionOption_DynamicTableComponent; public static String Permission_DynamicTableComponent; public static String Profession_DynamicTableComponent; + public static String Exam_DynamicTableComponent; public static void alert(String title, Parent node, Stage primaryStage) {