parent
4d3417a334
commit
8e65ff12dc
@ -0,0 +1,127 @@
|
|||||||
|
package view;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.layout.*;
|
||||||
|
import javafx.scene.control.cell.PropertyValueFactory;
|
||||||
|
import model.DataManager;
|
||||||
|
import model.OperationLog;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class OperationLogView extends BorderPane {
|
||||||
|
|
||||||
|
private TableView<OperationLog> tableView;
|
||||||
|
private DatePicker startDatePicker;
|
||||||
|
private DatePicker endDatePicker;
|
||||||
|
private ComboBox<String> operationTypeComboBox;
|
||||||
|
|
||||||
|
public OperationLogView() {
|
||||||
|
initializeUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeUI() {
|
||||||
|
// 顶部搜索区域
|
||||||
|
VBox topArea = createTopArea();
|
||||||
|
setTop(topArea);
|
||||||
|
|
||||||
|
// 中间表格区域
|
||||||
|
tableView = createTableView();
|
||||||
|
setCenter(tableView);
|
||||||
|
|
||||||
|
// 加载日志数据
|
||||||
|
loadLogData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private VBox createTopArea() {
|
||||||
|
VBox topArea = new VBox(10);
|
||||||
|
topArea.setPadding(new Insets(10));
|
||||||
|
|
||||||
|
// 搜索条件区域
|
||||||
|
GridPane searchArea = new GridPane();
|
||||||
|
searchArea.setHgap(10);
|
||||||
|
searchArea.setVgap(10);
|
||||||
|
|
||||||
|
// 时间范围选择
|
||||||
|
Label dateRangeLabel = new Label("时间范围:");
|
||||||
|
startDatePicker = new DatePicker();
|
||||||
|
Label toLabel = new Label("至");
|
||||||
|
endDatePicker = new DatePicker();
|
||||||
|
|
||||||
|
// 操作类型选择
|
||||||
|
Label operationTypeLabel = new Label("操作类型:");
|
||||||
|
operationTypeComboBox = new ComboBox<>();
|
||||||
|
operationTypeComboBox.getItems().addAll("全部", "入库", "出库", "修改");
|
||||||
|
operationTypeComboBox.setValue("全部");
|
||||||
|
|
||||||
|
// 搜索按钮
|
||||||
|
Button searchButton = new Button("搜索");
|
||||||
|
searchButton.setOnAction(e -> handleSearch());
|
||||||
|
|
||||||
|
// 添加到网格
|
||||||
|
searchArea.addRow(0, dateRangeLabel, startDatePicker, toLabel, endDatePicker);
|
||||||
|
searchArea.addRow(1, operationTypeLabel, operationTypeComboBox, searchButton);
|
||||||
|
|
||||||
|
topArea.getChildren().add(searchArea);
|
||||||
|
return topArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TableView<OperationLog> createTableView() {
|
||||||
|
TableView<OperationLog> table = new TableView<>();
|
||||||
|
|
||||||
|
TableColumn<OperationLog, String> idCol = new TableColumn<>("日志ID");
|
||||||
|
idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
|
||||||
|
|
||||||
|
TableColumn<OperationLog, String> typeCol = new TableColumn<>("操作类型");
|
||||||
|
typeCol.setCellValueFactory(new PropertyValueFactory<>("operationType"));
|
||||||
|
|
||||||
|
TableColumn<OperationLog, String> targetCol = new TableColumn<>("操作对象");
|
||||||
|
targetCol.setCellValueFactory(new PropertyValueFactory<>("operationTarget"));
|
||||||
|
|
||||||
|
TableColumn<OperationLog, String> operatorCol = new TableColumn<>("操作人");
|
||||||
|
operatorCol.setCellValueFactory(new PropertyValueFactory<>("operator"));
|
||||||
|
|
||||||
|
TableColumn<OperationLog, LocalDateTime> timeCol = new TableColumn<>("操作时间");
|
||||||
|
timeCol.setCellValueFactory(new PropertyValueFactory<>("operationTime"));
|
||||||
|
timeCol.setCellFactory(column -> new TableCell<OperationLog, LocalDateTime>() {
|
||||||
|
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateItem(LocalDateTime item, boolean empty) {
|
||||||
|
super.updateItem(item, empty);
|
||||||
|
if (empty || item == null) {
|
||||||
|
setText(null);
|
||||||
|
} else {
|
||||||
|
setText(formatter.format(item));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
TableColumn<OperationLog, String> detailsCol = new TableColumn<>("操作详情");
|
||||||
|
detailsCol.setCellValueFactory(new PropertyValueFactory<>("details"));
|
||||||
|
|
||||||
|
table.getColumns().addAll(idCol, typeCol, targetCol, operatorCol, timeCol, detailsCol);
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadLogData() {
|
||||||
|
// 从DataManager获取日志数据
|
||||||
|
tableView.setItems(FXCollections.observableArrayList(
|
||||||
|
DataManager.getInstance().getOperationLogs()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleSearch() {
|
||||||
|
// 根据搜索条件过滤日志数据
|
||||||
|
LocalDateTime startDate = startDatePicker.getValue() != null ?
|
||||||
|
startDatePicker.getValue().atStartOfDay() : null;
|
||||||
|
LocalDateTime endDate = endDatePicker.getValue() != null ?
|
||||||
|
endDatePicker.getValue().atTime(23, 59, 59) : null;
|
||||||
|
String operationType = operationTypeComboBox.getValue();
|
||||||
|
|
||||||
|
tableView.setItems(FXCollections.observableArrayList(
|
||||||
|
DataManager.getInstance().getFilteredOperationLogs(startDate, endDate, operationType)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue