refactor(ui): 重构表格单元格渲染逻辑

- 新增 BankTableCell、DepartmentTableCell 等通用表格单元格类
- 优化 CompanyTableCell 结构,提高可复用性
- 在 CompanyTabSkinBankAccount 和 CompanyTabSkinContract 中使用新的表格单元格类
- 更新 EmployeeManagerSkin 中的部门列渲染方式
This commit is contained in:
2025-08-24 00:09:31 +08:00
parent 524fccc4ed
commit 32624f336b
6 changed files with 71 additions and 40 deletions

View File

@@ -9,6 +9,7 @@ import com.ecep.contract.manager.ds.other.service.BankService;
import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.table.cell.BankTableCell;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import lombok.Setter;
@@ -58,21 +59,7 @@ public class CompanyTabSkinBankAccount
bankAccountTable_idColumn.setCellValueFactory(param -> param.getValue().getId());
bankAccountTable_bankColumn.setCellValueFactory(param -> param.getValue().getBank());
bankAccountTable_bankColumn.setCellFactory(param -> new TableCell<>() {
@Override
protected void updateItem(Bank item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
return;
}
if (!Hibernate.isInitialized(item)) {
item = getBankService().findById(item.getId());
setItem(item);
}
setText(item.getName());
}
});
bankAccountTable_bankColumn.setCellFactory(param -> new BankTableCell<>(getBankService()));
bankAccountTable_openingBankColumn.setCellValueFactory(param -> param.getValue().getOpeningBank());
bankAccountTable_accountColumn.setCellValueFactory(param -> param.getValue().getAccount());

View File

@@ -2,27 +2,24 @@ package com.ecep.contract.manager.ds.company.controller;
import com.ecep.contract.manager.cloud.u8.YongYouU8Service;
import com.ecep.contract.manager.ds.company.model.Company;
import com.ecep.contract.manager.ds.contract.service.ContractGroupService;
import com.ecep.contract.manager.ds.contract.service.ContractKindService;
import com.ecep.contract.manager.ds.contract.service.ContractTypeService;
import com.ecep.contract.manager.ui.table.cell.ContractGroupTableCell;
import com.ecep.contract.manager.ui.table.cell.ContractKindTableCell;
import com.ecep.contract.manager.ui.table.cell.ContractTypeTableCell;
import com.ecep.contract.manager.ds.contract.controller.ContractWindowController;
import com.ecep.contract.manager.ds.contract.model.Contract;
import com.ecep.contract.manager.ds.contract.model.ContractGroup;
import com.ecep.contract.manager.ds.contract.model.ContractKind;
import com.ecep.contract.manager.ds.contract.model.ContractType;
import com.ecep.contract.manager.ds.contract.service.ContractGroupService;
import com.ecep.contract.manager.ds.contract.service.ContractKindService;
import com.ecep.contract.manager.ds.contract.service.ContractService;
import com.ecep.contract.manager.ds.contract.service.ContractTypeService;
import com.ecep.contract.manager.ds.contract.tasker.ContractRepairByCompanyTask;
import com.ecep.contract.manager.ds.contract.vo.ContractViewModel;
import com.ecep.contract.manager.ds.other.EmployeeStringConverter;
import com.ecep.contract.manager.ds.other.model.Employee;
import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.FxmlPath;
import com.ecep.contract.manager.ui.tab.TabSkin;
import com.ecep.contract.manager.ui.table.EditableEntityTableTabSkin;
import com.ecep.contract.manager.ui.table.cell.*;
import com.ecep.contract.manager.ui.util.ContractGroupStringConverter;
import com.ecep.contract.manager.ui.table.cell.LocalDateTimeTableCell;
import com.ecep.contract.manager.util.DesktopUtils;
import com.ecep.contract.manager.util.SpecificationUtils;
import com.ecep.contract.manager.util.UITools;
@@ -183,18 +180,18 @@ public class CompanyTabSkinContract
contractTable_startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate());
contractTable_endDateColumn.setCellValueFactory(param -> param.getValue().getEndDate());
contractTable_setupPersonColumn.setCellValueFactory(param -> param.getValue().getSetupPerson());
contractTable_setupPersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter()));
contractTable_setupPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
contractTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate());
// contractTable_setupDateColumn.setSortable(true);
// contractTable_setupDateColumn.setSortType(TableColumn.SortType.DESCENDING);
contractTable_inurePersonColumn.setCellValueFactory(param -> param.getValue().getInurePerson());
contractTable_inurePersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter()));
contractTable_inurePersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService()));
contractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate());
contractTable_varyPersonColumn.setCellValueFactory(param -> param.getValue().getVaryPerson());
contractTable_varyPersonColumn.setCellFactory(TextFieldTableCell.forTableColumn(getEmployeeStringConverter()));
contractTable_varyPersonColumn.setCellFactory(param->new EmployeeTableCell<>(getEmployeeService()));
contractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate());
contractTable_createdColumn.setCellValueFactory(param -> param.getValue().getCreated());
@@ -264,18 +261,20 @@ public class CompanyTabSkinContract
return contractService;
}
private ContractTypeService getContractTypeService() {
private ContractTypeService getContractTypeService() {
if (contractTypeService == null) {
contractTypeService = getBean(ContractTypeService.class);
}
return contractTypeService;
}
private ContractKindService getContractKindService() {
if (contractKindService == null) {
contractKindService = getBean(ContractKindService.class);
}
return contractKindService;
}
private ContractGroupService getContractGroupService() {
if (contractGroupService == null) {
contractGroupService = getBean(ContractGroupService.class);

View File

@@ -7,10 +7,10 @@ import com.ecep.contract.manager.ds.other.service.DepartmentService;
import com.ecep.contract.manager.ds.other.vo.EmployeeViewModel;
import com.ecep.contract.manager.ui.AbstEntityManagerSkin;
import com.ecep.contract.manager.ui.ManagerSkin;
import com.ecep.contract.manager.ui.table.cell.DepartmentTableCell;
import com.ecep.contract.manager.util.SpecificationUtils;
import javafx.event.ActionEvent;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.ComboBoxTableCell;
import org.springframework.data.jpa.domain.Specification;
public class EmployeeManagerSkin
@@ -20,6 +20,15 @@ public class EmployeeManagerSkin
super(controller);
}
DepartmentService departmentService;
DepartmentService getDepartmentService() {
if (departmentService == null) {
departmentService = getBean(DepartmentService.class);
}
return departmentService;
}
@Override
public Specification<Employee> getSpecification() {
Specification<Employee> spec = super.getSpecification();
@@ -33,12 +42,6 @@ public class EmployeeManagerSkin
@Override
public void initializeTable() {
EntityStringConverter<Department> departmentStringConverter = new EntityStringConverter<>();
DepartmentService departmentService = getBean(DepartmentService.class);
departmentStringConverter.setInitialized(department -> {
return departmentService.findById(department.getId());
});
controller.idColumn.setCellValueFactory(param -> param.getValue().getId());
controller.nameColumn.setCellValueFactory(param -> param.getValue().getName());
controller.aliasColumn.setCellValueFactory(param -> param.getValue().getAlias());
@@ -46,7 +49,7 @@ public class EmployeeManagerSkin
controller.accountColumn.setCellValueFactory(param -> param.getValue().getAccount());
controller.departmentColumn.setCellValueFactory(param -> param.getValue().getDepartment());
controller.departmentColumn.setCellFactory(ComboBoxTableCell.forTableColumn(departmentStringConverter));
controller.departmentColumn.setCellFactory(param -> new DepartmentTableCell<>(getDepartmentService()));
controller.emailColumn.setCellValueFactory(param -> param.getValue().getEmail());