2025年4月11日11:53:06

master
qmstyle 2025-04-11 11:55:31 +08:00
parent 563fdaa861
commit f365c606b2
42 changed files with 394 additions and 189 deletions

View File

@ -1,17 +1,11 @@
package com.zhangmeng.online.exam.ui.admin;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.layouts.SideMenu;
import com.zhangmeng.online.exam.ui.layouts.TopMenu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import java.util.ArrayList;
import java.util.List;
/**
* @author zm

View File

@ -1,10 +1,7 @@
package com.zhangmeng.online.exam.ui.admin;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.components.ExamButtonComponent;
import com.zhangmeng.online.exam.ui.components.ExamComponent;
import com.zhangmeng.online.exam.ui.components.ShortAnswerComponent;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.value.ChangeListener;
@ -18,7 +15,6 @@ import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import javafx.stage.Window;
import javafx.util.Duration;
import java.util.HashMap;

View File

@ -1,11 +1,10 @@
package com.zhangmeng.online.exam.ui.api;
import javafx.beans.property.SimpleStringProperty;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;
import java.util.Collection;
import java.util.List;
import java.util.Map;

View File

@ -1,19 +1,8 @@
package com.zhangmeng.online.exam.ui.api.form;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.base.Form;
import com.zhangmeng.online.exam.ui.api.model.UserDataLoad;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack;
import com.zhangmeng.online.exam.ui.controller.RoleEditController;
import com.zhangmeng.online.exam.ui.controller.UserEditController;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.io.IOException;

View File

@ -0,0 +1,36 @@
package com.zhangmeng.online.exam.ui.api.form;
import com.zhangmeng.online.exam.ui.api.form.base.Form;
import com.zhangmeng.online.exam.ui.controller.RoleEditController;
import com.zhangmeng.online.exam.ui.controller.SubjectEditController;
import javafx.fxml.FXMLLoader;
import java.io.IOException;
/**
* @author zm
* @date 2025/4/11 9:25
* @version: 1.0
*/
public class SubjectForm extends Form {
private SubjectEditController controller;
public SubjectForm() {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/subject-edit.fxml"));
this.getChildren().add(fxmlLoader.load());
this.controller = fxmlLoader.getController();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public SubjectEditController getController() {
return controller;
}
public void setController(SubjectEditController controller) {
this.controller = controller;
}
}

View File

@ -1,26 +1,10 @@
package com.zhangmeng.online.exam.ui.api.form;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.base.Form;
import com.zhangmeng.online.exam.ui.api.model.UserDataLoad;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack;
import com.zhangmeng.online.exam.ui.controller.UserEditController;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.stage.Window;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author zm

View File

@ -3,9 +3,8 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;

View File

@ -3,9 +3,8 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;

View File

@ -3,22 +3,16 @@ 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.IndexPage;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
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.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.css.Styleable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

View File

@ -3,31 +3,24 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.PermissionForm;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.controller.PermissionEditController;
import com.zhangmeng.online.exam.ui.controller.UserEditController;
import com.zhangmeng.online.exam.ui.module.Permission;
import com.zhangmeng.online.exam.ui.module.Role;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.service.PermissionService;
import com.zhangmeng.online.exam.ui.service.RoleService;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;
import java.util.*;
import static com.zhangmeng.online.exam.ui.api.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Permission_DynamicTableComponent;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Role_DynamicTableComponent;
/**
* @author zm

View File

@ -3,9 +3,8 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;

View File

@ -3,10 +3,9 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.QuestionForm;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.controller.QuestionEditController;
import com.zhangmeng.online.exam.ui.module.QuestionType;
import com.zhangmeng.online.exam.ui.module.SubjectType;
@ -16,17 +15,14 @@ import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.MenuItem;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.*;
import static com.zhangmeng.online.exam.ui.api.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Question_DynamicTableComponent;
/**
* @author zm
@ -77,7 +73,16 @@ public class QuestionDataLoad implements DataLoad {
@Override
public void deleteData(String id) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
String result = HttpUtils.POST(ApiUtils.API_URL + "/question/delete", map);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getIntValue("code") == 200) {
AlertUtils.alert_msg("删除成功!");
FxUtils.FX_BEANS.get(Question_DynamicTableComponent).flushData();
} else {
AlertUtils.alert_warning("删除失败!");
}
}
@Override

View File

@ -3,9 +3,8 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;

View File

@ -3,26 +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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.RoleForm;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.components.PaperViewComponent;
import com.zhangmeng.online.exam.ui.components.PermissionChooseComponent;
import com.zhangmeng.online.exam.ui.components.callBack.PaperViewComponentCallBackImpl;
import com.zhangmeng.online.exam.ui.controller.PermissionChooseController;
import com.zhangmeng.online.exam.ui.controller.RoleEditController;
import com.zhangmeng.online.exam.ui.controller.UserEditController;
import com.zhangmeng.online.exam.ui.module.Permission;
import com.zhangmeng.online.exam.ui.module.Role;
import com.zhangmeng.online.exam.ui.module.RoleType;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.service.RoleService;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.scene.Parent;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
@ -31,7 +25,7 @@ import javafx.stage.Stage;
import java.util.*;
import static com.zhangmeng.online.exam.ui.api.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Role_DynamicTableComponent;
/**

View File

@ -3,10 +3,14 @@ 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.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.form.SubjectForm;
import com.zhangmeng.online.exam.ui.controller.SubjectEditController;
import com.zhangmeng.online.exam.ui.module.Subject;
import com.zhangmeng.online.exam.ui.service.SubjectService;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent;
@ -39,13 +43,16 @@ public class SubjectDataLoad implements DataLoad {
Map<String, SimpleStringProperty> userMap = new HashMap<>();
userMap.put("序号", new SimpleStringProperty(user.getString("id")));
userMap.put("学科名称", new SimpleStringProperty(user.getString("name")));
userMap.put("学科名称_name", new SimpleStringProperty(user.getString("name")));
userMap.put("学科代码", new SimpleStringProperty(user.getString("code")));
userMap.put("学科代码_code", new SimpleStringProperty(user.getString("code")));
userMap.put("学科描述", new SimpleStringProperty(user.getString("description")));
userMap.put("学科描述_description", new SimpleStringProperty(user.getString("description")));
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);
ApiUtils.DataView dataView = new ApiUtils.DataView(Arrays.asList("序号", "学科名称", "学科代码", "学科描述"), userMapList).setDataLoad(this).setPageNum(pageNum).setPageSize(pageSize).setTotal(total);
dataView.setDataLoad(this);
return dataView;
}
@ -64,9 +71,9 @@ public class SubjectDataLoad implements DataLoad {
public Map<String, Object> saveForm(Map<String, Object> map) {
String result = HttpUtils.POST(ApiUtils.API_URL + "/subject/save", map);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getIntValue("code") == 200){
if (jsonObject.getIntValue("code") == 200) {
AlertUtils.alert_msg("保存成功!");
}else {
} else {
AlertUtils.alert_warning("保存失败!");
}
return null;
@ -78,22 +85,37 @@ public class SubjectDataLoad implements DataLoad {
map.put("id", id);
String result = HttpUtils.POST(ApiUtils.API_URL + "/subject/delete", map);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getIntValue("code") == 200){
if (jsonObject.getIntValue("code") == 200) {
AlertUtils.alert_msg("删除成功!");
}else {
} else {
AlertUtils.alert_warning("删除失败!");
}
}
@Override
public void editData(String id,Stage stage) {
public void editData(String id, Stage stage) {
SubjectForm subjectForm = new SubjectForm();
SubjectEditController controller = subjectForm.getController();
Subject subject = SubjectService.getSubjectById(id);
controller.setSubject(subject);
FxUtils.alert("编辑学科信息", (Parent) subjectForm, stage,true);
}
@Override
public void updateData(String id, String name, String oldValue, String newValue) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("fieldName", name);
map.put("oldValue", oldValue == null ? "" : oldValue);
map.put("newValue", newValue);
String result = HttpUtils.POST(ApiUtils.API_URL + "/subject/update", map);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getIntValue("code") == 200) {
AlertUtils.alert_msg("更新成功!");
} else {
AlertUtils.alert_warning("更新失败!");
}
}
@Override

View File

@ -15,9 +15,8 @@ import javafx.beans.property.SimpleStringProperty;
import java.util.*;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;

View File

@ -1,6 +1,6 @@
package com.zhangmeng.online.exam.ui.components;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
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;
@ -9,19 +9,14 @@ import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.control.cell.MapValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.Window;
import org.casic.javafx.control.PaginationPicker;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@ -33,6 +28,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/
public class DynamicTableComponent extends VBox {
private HeaderComponent headerComponent;
private DynamicTableComponentCallBack callBack;
private TableView<Map<String, SimpleStringProperty>> tableView;
@ -172,6 +169,12 @@ public class DynamicTableComponent extends VBox {
});
this.getChildren().add(button);
this.setSpacing(10);
if (headerComponent != null){
this.getChildren().add(headerComponent);
}
this.getChildren().addAll(tableView);
//初始化一个分页
@ -197,4 +200,12 @@ public class DynamicTableComponent extends VBox {
data.clear();
data.addAll(callBack.flushData(ApiUtils.PAGE_NUM, ApiUtils.PAGE_SIZE).getDataList());
}
public HeaderComponent getHeaderComponent() {
return headerComponent;
}
public void setHeaderComponent(HeaderComponent headerComponent) {
this.headerComponent = headerComponent;
}
}

View File

@ -3,23 +3,15 @@ package com.zhangmeng.online.exam.ui.components;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.WritableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.css.StyleableProperty;
import javafx.geometry.Insets;
import javafx.scene.AccessibleRole;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import java.util.*;

View File

@ -0,0 +1,11 @@
package com.zhangmeng.online.exam.ui.components;
import javafx.scene.layout.HBox;
/**
* @author zm
* @date 2025/4/11 9:17
* @version: 1.0
*/
public class HeaderComponent extends HBox {
}

View File

@ -1,12 +1,9 @@
package com.zhangmeng.online.exam.ui.components;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.components.callBack.PaperViewComponentCallBack;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import javafx.application.Platform;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
@ -29,7 +26,6 @@ import org.casic.javafx.control.PaginationPicker;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
*

View File

@ -1,6 +1,6 @@
package com.zhangmeng.online.exam.ui.components;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.geometry.Insets;
import javafx.scene.control.*;

View File

@ -1,6 +1,6 @@
package com.zhangmeng.online.exam.ui.components;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.geometry.Insets;
import javafx.scene.control.Button;

View File

@ -1,16 +1,10 @@
package com.zhangmeng.online.exam.ui.components.callBack;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.stage.Stage;
import java.util.List;
import java.util.Map;
/**
* @author zm
* @date 2025/3/14 15:34

View File

@ -1,21 +1,13 @@
package com.zhangmeng.online.exam.ui.components.callBack;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.api.form.base.Form;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.stage.Stage;
import java.util.List;
import java.util.Map;
/**
* @author zm
* @date 2025/3/14 15:35

View File

@ -1,10 +1,9 @@
package com.zhangmeng.online.exam.ui.components.callBack;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import java.util.List;
import java.util.Map;
/**

View File

@ -3,7 +3,7 @@ package com.zhangmeng.online.exam.ui.components.callBack;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.model.PaperDataLoad;
import com.zhangmeng.online.exam.ui.api.model.QuestionDataLoad;
@ -12,7 +12,6 @@ import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

View File

@ -1,10 +1,8 @@
package com.zhangmeng.online.exam.ui.controller;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.admin.LoginPage;
import com.zhangmeng.online.exam.ui.admin.PaperPage;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.service.UserService;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
@ -18,7 +16,6 @@ import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;

View File

@ -1,18 +1,11 @@
package com.zhangmeng.online.exam.ui.controller;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.admin.UserListPage;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBackImpl;
import com.zhangmeng.online.exam.ui.layouts.SideMenu;
import com.zhangmeng.online.exam.ui.module.MenuData;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
@ -24,9 +17,6 @@ import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import java.util.ArrayList;
import java.util.List;
import com.zhangmeng.online.exam.ui.service.UserService;
import javafx.util.Callback;

View File

@ -1,21 +1,17 @@
package com.zhangmeng.online.exam.ui.controller;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.module.QuestionType;
import com.zhangmeng.online.exam.ui.module.SubjectType;
import com.zhangmeng.online.exam.ui.service.RoleService;
import com.zhangmeng.online.exam.ui.service.SubjectService;
import com.zhangmeng.online.exam.ui.service.UserService;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.cell.CheckBoxListCell;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;

View File

@ -1,7 +1,5 @@
package com.zhangmeng.online.exam.ui.controller;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.model.QuestionDataLoad;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.module.QuestionType;
import com.zhangmeng.online.exam.ui.module.SubjectType;
@ -12,14 +10,10 @@ import com.zhangmeng.online.exam.ui.utils.FxUtils;
import javafx.beans.property.SimpleLongProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Parent;
import javafx.scene.control.*;
import javafx.stage.Stage;
import javafx.stage.Window;
import javafx.util.Callback;
import javafx.util.StringConverter;
import java.util.List;
import java.util.Map;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.FX_BEANS;

View File

@ -0,0 +1,104 @@
package com.zhangmeng.online.exam.ui.controller;
import com.zhangmeng.online.exam.ui.module.Subject;
import com.zhangmeng.online.exam.ui.service.SubjectService;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Subject_DynamicTableComponent;
/**
* @author zm
* @date 2025/4/11 9:26
* @version: 1.0
*/
public class SubjectEditController {
@FXML
public TextField nameField;
@FXML
public TextField codeField;
@FXML
public TextField descField;
private Subject subject;
public void setSubject(Subject subject) {
this.subject = subject;
this.nameField.setText(subject.getName());
this.codeField.setText(subject.getCode());
this.descField.setText(subject.getDesc());
nameField.textProperty().bindBidirectional(subject.nameProperty());
codeField.textProperty().bindBidirectional(subject.codeProperty());
descField.textProperty().bindBidirectional(subject.descProperty());
}
@FXML
public void initialize() {
nameField.setPromptText("请输入科目名称");
codeField.setPromptText("请输入考试代码");
descField.setPromptText("请输入科目描述");
subject = new Subject();
nameField.textProperty().bindBidirectional(subject.nameProperty());
codeField.textProperty().bindBidirectional(subject.codeProperty());
descField.textProperty().bindBidirectional(subject.descProperty());
}
@FXML
public void handleSave(ActionEvent actionEvent) {
if (nameField.getText().isEmpty()){
AlertUtils.alert_msg("科目名称不能为空!");
return;
}
if (codeField.getText().isEmpty()){
AlertUtils.alert_msg("科目代码不能为空!");
return;
}
if (descField.getText().isEmpty()){
AlertUtils.alert_msg("科目描述不能为空!");
return;
}
System.out.println("科目名称:" + subject.getName()
+ " 科目代码:" + subject.getCode()
+ " 科目描述:" + subject.getDesc()
);
boolean isSuccess = SubjectService.saveSubject(subject);
if (isSuccess){
if (subject.getId()!= null){
AlertUtils.alert_msg("保存成功!");
}else {
AlertUtils.alert_msg("更新成功!");
}
closeDialog();
FxUtils.FX_BEANS.get(Subject_DynamicTableComponent).flushData();
}else {
AlertUtils.alert_msg("操作失败!");
}
}
public void handleCancel(ActionEvent actionEvent) {
closeDialog();
}
public Subject getSubject() {
return subject;
}
private void closeDialog() {
Stage stage = (Stage) nameField.getScene().getWindow();
stage.close();
}
}

View File

@ -1,28 +1,20 @@
package com.zhangmeng.online.exam.ui.layouts;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.components.ShortAnswerComponent;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBackImpl;
import javafx.beans.property.SimpleMapProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**

View File

@ -0,0 +1,68 @@
package com.zhangmeng.online.exam.ui.module;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
/**
* @author zm
* @date 2025/4/11 9:37
* @version: 1.0
*/
public class Subject {
private final SimpleStringProperty id = new SimpleStringProperty();
private final SimpleStringProperty name = new SimpleStringProperty();
private final SimpleStringProperty code = new SimpleStringProperty();
private final SimpleStringProperty desc = new SimpleStringProperty();
public Subject() {
}
public String getId() {
return id.get();
}
public SimpleStringProperty idProperty() {
return id;
}
public void setId(String id) {
this.id.set(id);
}
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
public String getCode() {
return code.get();
}
public SimpleStringProperty codeProperty() {
return code;
}
public void setCode(String code) {
this.code.set(code);
}
public String getDesc() {
return desc.get();
}
public SimpleStringProperty descProperty() {
return desc;
}
public void setDesc(String desc) {
this.desc.set(desc);
}
}

View File

@ -3,7 +3,7 @@ package com.zhangmeng.online.exam.ui.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.Permission;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
@ -14,7 +14,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.zhangmeng.online.exam.ui.api.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.Permission_DynamicTableComponent;
/**

View File

@ -2,7 +2,7 @@ package com.zhangmeng.online.exam.ui.service;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.QuestionType;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;

View File

@ -3,15 +3,11 @@ package com.zhangmeng.online.exam.ui.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.Permission;
import com.zhangmeng.online.exam.ui.module.Role;
import com.zhangmeng.online.exam.ui.module.RoleType;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import java.util.ArrayList;
@ -19,8 +15,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.zhangmeng.online.exam.ui.api.ApiUtils.API_URL;
import static com.zhangmeng.online.exam.ui.utils.FxUtils.User_DynamicTableComponent;
import static com.zhangmeng.online.exam.ui.utils.ApiUtils.API_URL;
/**
* @author zm

View File

@ -1,9 +1,10 @@
package com.zhangmeng.online.exam.ui.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.module.QuestionType;
import com.zhangmeng.online.exam.ui.module.Subject;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.SubjectType;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
@ -31,4 +32,34 @@ public class SubjectService {
}
return questionTypes;
}
public static boolean saveSubject(Subject subject) {
Map<String, Object> map = new HashMap<>();
map.put("id", subject.getId() == null? "" : subject.getId());
map.put("name", subject.getName());
map.put("desc", subject.getDesc());
map.put("code", subject.getCode());
String result = HttpUtils.POST(ApiUtils.API_URL + "/subject/saveSubject", map);
JSONObject jsonObject = JSON.parseObject(result);
return jsonObject.getIntValue("code") == 200;
}
public static Subject getSubjectById(String id) {
Subject subject = null ;
Map<String, Object> params = new HashMap<>();
params.put("id", id);
String result = HttpUtils.GET(ApiUtils.API_URL + "/subject/getSubjectById",params);
JSONObject jsonObject = JSON.parseObject(result);
if (jsonObject.getIntValue("code") == 200) {
subject = new Subject();
JSONObject data = jsonObject.getJSONObject("data");
subject.setId(data.getString("id"));
subject.setName(data.getString("name"));
subject.setCode(data.getString("code"));
subject.setDesc(data.getString("desc"));
}
return subject;
}
}

View File

@ -3,18 +3,14 @@ package com.zhangmeng.online.exam.ui.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.module.MenuData;
import com.zhangmeng.online.exam.ui.module.User;
import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.FxUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.stage.Stage;
import com.zhangmeng.online.exam.ui.module.Role;
import java.util.ArrayList;
import java.util.HashMap;

View File

@ -1,6 +1,6 @@
package com.zhangmeng.online.exam.ui.user;
import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.utils.ApiUtils;
import com.zhangmeng.online.exam.ui.layouts.SideMenu;
import com.zhangmeng.online.exam.ui.layouts.TopMenu;
import javafx.scene.layout.AnchorPane;

View File

@ -1,6 +1,7 @@
package com.zhangmeng.online.exam.ui.api;
package com.zhangmeng.online.exam.ui.utils;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.*;
import com.zhangmeng.online.exam.ui.api.model.*;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
@ -86,6 +87,7 @@ public class ApiUtils {
public static DataView getSubjectList() {
DataLoad dataLoad = new SubjectDataLoad();
dataLoad.setForm(new SubjectForm());
return dataLoad.loadData(PAGE_NUM,PAGE_SIZE);
}

View File

@ -49,6 +49,10 @@ public class FxUtils {
form = new QuestionForm();
}
if (form instanceof SubjectForm) {
form = new SubjectForm();
}
Scene scene = new Scene(form);
Stage dialogStage = new Stage();
dialogStage.setTitle(title);
@ -82,6 +86,10 @@ public class FxUtils {
form = new PermissionForm();
}
if (form instanceof SubjectForm){
form = new SubjectForm();
}
Scene scene = null;
if (!isEdit) {
scene = new Scene(form);

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<VBox spacing="10" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.zhangmeng.online.exam.ui.controller.SubjectEditController">
<padding>
<Insets top="10" right="10" bottom="10" left="10"/>
</padding>
<GridPane hgap="10" vgap="10">
<columnConstraints>
<ColumnConstraints minWidth="80" prefWidth="100"/>
<ColumnConstraints hgrow="ALWAYS"/>
</columnConstraints>
<!-- 学科名称 -->
<Label text="学科名称:" GridPane.rowIndex="0" GridPane.columnIndex="0"/>
<TextField fx:id="nameField" GridPane.rowIndex="0" GridPane.columnIndex="1"/>
<!-- 学科代码 -->
<Label text="学科代码:" GridPane.rowIndex="1" GridPane.columnIndex="0"/>
<TextField fx:id="codeField" GridPane.rowIndex="1" GridPane.columnIndex="1"/>
<!-- 学科描述 -->
<Label text="学科描述:" GridPane.rowIndex="2" GridPane.columnIndex="0"/>
<TextField fx:id="descField" GridPane.rowIndex="2" GridPane.columnIndex="1"/>
</GridPane>
<HBox spacing="10" alignment="CENTER_RIGHT">
<Button text="保存" onAction="#handleSave" defaultButton="true"/>
<Button text="取消" onAction="#handleCancel" cancelButton="true"/>
</HBox>
</VBox>