|
@@ -0,0 +1,264 @@
|
|
|
+package nckd.jxccl.opmc.pm.plugin.form;
|
|
|
+
|
|
|
+import kd.bos.dataentity.resource.ResManager;
|
|
|
+import kd.bos.form.CloseCallBack;
|
|
|
+import kd.bos.form.ConfirmCallBackListener;
|
|
|
+import kd.bos.form.MessageBoxOptions;
|
|
|
+import kd.bos.form.ShowType;
|
|
|
+import kd.bos.form.container.Tab;
|
|
|
+import kd.bos.form.container.Wizard;
|
|
|
+import kd.bos.form.control.Control;
|
|
|
+import kd.bos.form.control.Steps;
|
|
|
+import kd.bos.form.control.events.TabSelectEvent;
|
|
|
+import kd.bos.form.control.events.TabSelectListener;
|
|
|
+import kd.bos.form.events.ClosedCallBackEvent;
|
|
|
+import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
+import kd.bos.list.ListShowParameter;
|
|
|
+import nckd.jxccl.opmc.pm.business.PerfManagerService;
|
|
|
+import org.apache.commons.lang3.ArrayUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.EventObject;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+* 人员考评向导
|
|
|
+* @author W.Y.C
|
|
|
+* @date 2025/6/13 11:26
|
|
|
+* @version 1.0
|
|
|
+*/
|
|
|
+public class PerfManagerWizardFormPlugin extends AbstractFormPlugin implements TabSelectListener{
|
|
|
+
|
|
|
+ private static final String WIZARD_AP_KEY = "nckd_wizard";
|
|
|
+ private static final String TAB_KEY = "nckd_wizard_tabap";
|
|
|
+
|
|
|
+ private static final String[] STEP_TAB_FORM_ID = new String[]{"nckd_tabpageap1","nckd_tabpageap2","nckd_tabpageap3","nckd_tabpageap4"};
|
|
|
+
|
|
|
+ private static final String BTN_NEXT_KEY = "nckd_btnnext";
|
|
|
+ private static final String BTN_PREV_KEY = "nckd_btnprev";
|
|
|
+
|
|
|
+ public PerfManagerWizardFormPlugin() {
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+/* @Override
|
|
|
+ public void initialize() {
|
|
|
+ //监听上一步、下一步按钮
|
|
|
+ this.addClickListeners(BTN_NEXT_KEY, BTN_PREV_KEY);
|
|
|
+ }*/
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void afterBindData(EventObject e) {
|
|
|
+ int currentStep = this.getCurrentStep();
|
|
|
+ //第一个步骤不显示“上一步”
|
|
|
+ if(currentStep == 0){
|
|
|
+ this.getView().setVisible(Boolean.FALSE, BTN_PREV_KEY);
|
|
|
+
|
|
|
+ ListShowParameter showParameter = new ListShowParameter();
|
|
|
+ showParameter.setBillFormId("nckd_perfmanager");
|
|
|
+ showParameter.getOpenStyle().setShowType(ShowType.InContainer);
|
|
|
+ showParameter.getOpenStyle().setTargetKey("nckd_tabpageap1");
|
|
|
+ showParameter.setCloseCallBack(new CloseCallBack(this, "listCallback")); // 设置回调标识
|
|
|
+ /*ListFilterParameter listFilterParameter = new ListFilterParameter();
|
|
|
+ QFilter qFilter = new QFilter("field_name", QCP.equals, "filter_value");
|
|
|
+ listFilterParameter.setFilter(qFilter);
|
|
|
+ showParameter.setListFilterParameter(listFilterParameter);*/
|
|
|
+ this.getView().showForm(showParameter);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 父页面插件中
|
|
|
+ @Override
|
|
|
+ public void closedCallBack(ClosedCallBackEvent e) {
|
|
|
+ if ("listCallback".equals(e.getActionId())) {
|
|
|
+ List<Object> selectedData = (List<Object>)e.getReturnData();
|
|
|
+ // 使用selectedData处理业务逻辑
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void click(EventObject evt) {
|
|
|
+ //点击上一步、下一步
|
|
|
+ switch (((Control)evt.getSource()).getKey()) {
|
|
|
+ case BTN_NEXT_KEY:
|
|
|
+ this.next();
|
|
|
+ break;
|
|
|
+ case BTN_PREV_KEY:
|
|
|
+ this.previous();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下一步
|
|
|
+ * @return: void
|
|
|
+ * @author W.Y.C
|
|
|
+ * @date: 2025/06/14 20:18
|
|
|
+ */
|
|
|
+ private void next() {
|
|
|
+ int currentStep = this.getCurrentStep();
|
|
|
+ if(beforeNext(currentStep)){
|
|
|
+ Tab tab = (Tab)this.getView().getControl(TAB_KEY);
|
|
|
+ tab.activeTab(STEP_TAB_FORM_ID[currentStep+1]);
|
|
|
+ }
|
|
|
+ afterNext(currentStep);
|
|
|
+ /* for(int i = 0; i < tab.getItems().size(); ++i) {
|
|
|
+ if (currentTab.equals(((Control)tab.getItems().get(tab.getItems().size() - 1)).getKey())) {
|
|
|
+ this.getView().showConfirm(ResManager.loadKDString("向导已完成,是否退出本页?", "WizardPlugin_0", "bos-designer-plugin", new Object[0]), MessageBoxOptions.YesNo, new ConfirmCallBackListener("exitGuideCallBack"));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ Control control = (Control)tab.getItems().get(i);
|
|
|
+ if (control.getKey().equals(currentTab)) {
|
|
|
+ tab.activeTab(((Control)tab.getItems().get(i + 1)).getKey());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上一步
|
|
|
+ * @return: void
|
|
|
+ * @author W.Y.C
|
|
|
+ * @date: 2025/06/14 20:18
|
|
|
+ */
|
|
|
+ private void previous() {
|
|
|
+ Tab tab = (Tab)this.getView().getControl(TAB_KEY);
|
|
|
+ String currentTab = tab.getCurrentTab();
|
|
|
+
|
|
|
+ for(int i = 0; i < tab.getItems().size(); ++i) {
|
|
|
+ if (currentTab.equals(((Control)tab.getItems().get(0)).getKey())) {
|
|
|
+ this.getView().showTipNotification(ResManager.loadKDString("当前页面为第一页。", "WizardPlugin_1", "bos-designer-plugin", new Object[0]));// 73
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Control control = (Control)tab.getItems().get(i);
|
|
|
+ if (control.getKey().equals(currentTab)) {
|
|
|
+ tab.activeTab(((Control)tab.getItems().get(i - 1)).getKey());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 点击下一步之前触发(可用于数据校验)
|
|
|
+ * @param currentStep 当前步骤
|
|
|
+ * @return: Boolean
|
|
|
+ * @author W.Y.C
|
|
|
+ * @date: 2025/06/14 20:23
|
|
|
+ */
|
|
|
+ private Boolean beforeNext(int currentStep){
|
|
|
+ if(currentStep == 0){
|
|
|
+
|
|
|
+ }else if(currentStep == 1){
|
|
|
+
|
|
|
+ }else if(currentStep == 2){
|
|
|
+
|
|
|
+ }else if(currentStep == 3){
|
|
|
+
|
|
|
+ }else if(currentStep == 4){
|
|
|
+ this.getView().showConfirm(ResManager.loadKDString("向导已完成,是否退出本页?", "WizardPlugin_0", "bos-designer-plugin", new Object[0]), MessageBoxOptions.YesNo, new ConfirmCallBackListener("exitGuideCallBack"));
|
|
|
+ return Boolean.FALSE;
|
|
|
+ }
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean afterNext(int currentStep){
|
|
|
+ if(currentStep == 0) {
|
|
|
+ //录入考评页面选择的数据
|
|
|
+ String rowKeys = this.getView().getPageCache().get("rowKeys");
|
|
|
+ if(StringUtils.isNotBlank(rowKeys) && rowKeys.contains(",")){
|
|
|
+ List<Long> rowKeyList = Arrays.stream(rowKeys.split(","))
|
|
|
+ .map(String::trim) // 去除每个元素周围的空格
|
|
|
+ .map(Long::valueOf) // 转换为 Long 类型
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ kd.bos.form.control.ProgressBar bar = (kd.bos.form.control.ProgressBar)this.getControl("nckd_progressbarap");
|
|
|
+ bar.start();
|
|
|
+ PerfManagerService.generateEvaluationResult(rowKeyList);
|
|
|
+ }
|
|
|
+ System.out.println();
|
|
|
+ }
|
|
|
+ return Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void registerListener(EventObject e) {
|
|
|
+ Tab tab = (Tab)this.getControl(TAB_KEY);
|
|
|
+ tab.addTabSelectListener(this);
|
|
|
+
|
|
|
+ //监听上一步、下一步按钮
|
|
|
+ this.addClickListeners(BTN_NEXT_KEY, BTN_PREV_KEY);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void tabSelected(TabSelectEvent tabSelectEvent) {
|
|
|
+
|
|
|
+ Tab tab = (Tab)this.getView().getControl(TAB_KEY);
|
|
|
+ String currentTab = tab.getCurrentTab();
|
|
|
+ int currentStep = getCurrentStep();
|
|
|
+ setStepStatus(currentStep, Steps.PROCESS);
|
|
|
+ if(currentStep != 0){
|
|
|
+ //除了第一个步骤都显示“上一步”
|
|
|
+ this.getView().setVisible(Boolean.TRUE, BTN_PREV_KEY);
|
|
|
+ }else{
|
|
|
+ //第一个步骤不显示“上一步”
|
|
|
+ this.getView().setVisible(Boolean.FALSE, BTN_PREV_KEY);
|
|
|
+ }
|
|
|
+ //最后一个步骤按钮显示“完成”,否则显示下一步
|
|
|
+ if(currentStep == 4){
|
|
|
+ Map<String, Object> textMap = new HashMap<>();
|
|
|
+ Map<String, Object> textValue = new HashMap<>();
|
|
|
+ textValue.put("zh_CN", "完成");
|
|
|
+ textMap.put("text", textValue);
|
|
|
+ this.getView().updateControlMetadata(BTN_NEXT_KEY, textMap);
|
|
|
+ }else{
|
|
|
+ Map<String, Object> textMap = new HashMap<>();
|
|
|
+ Map<String, Object> textValue = new HashMap<>();
|
|
|
+ textValue.put("zh_CN", "下一步");
|
|
|
+ textMap.put("text", textValue);
|
|
|
+ this.getView().updateControlMetadata(BTN_NEXT_KEY, textMap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置步骤状态
|
|
|
+ * @param step 步骤索引(从0开始)
|
|
|
+ * @param stepStatus 步骤状态 {@link Steps}
|
|
|
+ * @return: void
|
|
|
+ * @author W.Y.C
|
|
|
+ * @date: 2025/06/14 20:12
|
|
|
+ */
|
|
|
+ private void setStepStatus(int step,String stepStatus) {
|
|
|
+ Wizard wizard = this.getControl(WIZARD_AP_KEY);
|
|
|
+ Map<String, Object> currentStepMap = new HashMap<>();
|
|
|
+ currentStepMap.put("currentStep", step);
|
|
|
+ currentStepMap.put("currentStatus", stepStatus);
|
|
|
+ wizard.setWizardCurrentStep(currentStepMap);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前步骤索引(从0开始)
|
|
|
+ * @return: int
|
|
|
+ * @author W.Y.C
|
|
|
+ * @date: 2025/06/14 20:15
|
|
|
+ */
|
|
|
+ private int getCurrentStep() {
|
|
|
+ Tab tab = (Tab)this.getControl(TAB_KEY);
|
|
|
+ String currentTab = tab.getCurrentTab();
|
|
|
+ return ArrayUtils.indexOf(STEP_TAB_FORM_ID, currentTab);
|
|
|
+ }
|
|
|
+}
|