Переглянути джерело

表达式/字段通用插件

Tyx 1 місяць тому
батько
коміт
b4ad5d5d72

+ 57 - 4
code/wnq/nckd-wnq01-wnq-scm/src/main/java/nckd/wnq01/wnq/scm/plugin/form/CommonHandleExpFormPlugin.java

@@ -44,7 +44,8 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
     @Override
     public void initialize() {
         super.initialize();
-        addClickListeners(new String[]{"nckd_exp","nckd_indexexp","nckd_field"});
+        addClickListeners(new String[]{"nckd_exp","nckd_indexexp","nckd_exexp"});
+        addClickListeners(new String[]{"nckd_field","nckd_exfield"});
     }
 
     /**
@@ -58,12 +59,18 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
             this.doClickWBItemCondition(ctl.getKey(),"entryentity", "nckd_billentity");
         }
         else if (ctl.getKey().equalsIgnoreCase("nckd_indexexp")) {
-            this.doClickWBItemCondition(ctl.getKey(),"nckd_entryentity", "nckd_indexbillentity");
+            this.doClickWBItemCondition(ctl.getKey(),"nckd_indexentity", "nckd_indexbillentity");
+        }
+        else if (ctl.getKey().equalsIgnoreCase("nckd_exexp")) {
+            this.doClickWBItemCondition(ctl.getKey(), "nckd_entryentity", "nckd_exbillentity");
         }
         // 字段
         else if (ctl.getKey().equalsIgnoreCase("nckd_field"))  {
             this.doClickCommitField(ctl.getKey(), "entryentity", "nckd_valueentity");
         }
+        else if (ctl.getKey().equalsIgnoreCase("nckd_exfield"))  {
+            this.doClickCommitField(ctl.getKey(), "nckd_entryentity", "nckd_exvalueentity");
+        }
         // 条件成立或不成立
     }
 
@@ -128,7 +135,18 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
             this.receiveCondition((String) e.getReturnData(), "entryentity", "nckd_expjson", "nckd_exp");
         }
         else if (e.getActionId().equalsIgnoreCase("nckd_indexexp")) {
-            this.receiveCondition((String) e.getReturnData(), "nckd_entryentity", "nckd_indexexpjson", "nckd_indexexp");
+            this.receiveCondition((String) e.getReturnData(), "nckd_indexentity", "nckd_indexexpjson", "nckd_indexexp");
+        }
+        else if (e.getActionId().equalsIgnoreCase("nckd_exexp")) {
+            this.receiveCondition((String) e.getReturnData(), "nckd_entryentity", "nckd_exexpjson", "nckd_exexp");
+        }
+        else if (e.getActionId().equalsIgnoreCase("nckd_field")) {
+            BillEntityType mainType = this.getTargetMainType("entryentity","nckd_valueentity");
+            this.receiveSelectField(mainType, (String)e.getReturnData(), "entryentity", "nckd_fieldkey", "nckd_field");
+        }
+        else if (e.getActionId().equalsIgnoreCase("nckd_exfield")) {
+            BillEntityType mainType = this.getTargetMainType("nckd_entryentity","nckd_exvalueentity");
+            this.receiveSelectField(mainType, (String)e.getReturnData(), "nckd_entryentity", "nckd_exfieldkey", "nckd_exfield");
         }
     }
 
@@ -163,12 +181,24 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
     public void propertyChanged(PropertyChangedArgs e) {
         super.propertyChanged(e);
         String key = e.getProperty().getName();
+
+
+        //条件表达式
         if(key.equalsIgnoreCase("nckd_billentity")) {
             doClearFieldValue("nckd_exp",  e.getChangeSet());
         }
         else if (key.equalsIgnoreCase("nckd_indexbillentity")) {
             doClearFieldValue("nckd_indexexp",  e.getChangeSet());
         }
+        else if (key.equalsIgnoreCase("nckd_exbillentity")) {
+            doClearFieldValue("nckd_exexp",  e.getChangeSet());
+        }
+        //字段
+        else if (key.equalsIgnoreCase("nckd_valueentity")) {
+            doClearFieldValueByField("nckd_field",  e.getChangeSet());
+        }
+
+
     }
 
     /**
@@ -185,6 +215,14 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
         }
     }
 
+    private void doClearFieldValueByField(String key, ChangeData[] changeDatas) {
+        for(int i = 0; i < changeDatas.length; ++i) {
+            ChangeData changeData = changeDatas[i];
+            this.getModel().setValue(key, (Object)null, changeData.getRowIndex());
+            this.getModel().setValue(key+"key", (Object)null, changeData.getRowIndex());
+        }
+    }
+
     /**
      * 单据字段点击入口事件
      */
@@ -199,7 +237,7 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
         parameter.setForbidClassType(getForbidFieldTypes(this.getModel()));
         parameter.getForbidRefPropFieldTypes().add(MulBasedataProp.class);
         TreeNode srcBillNode = EntityParseHelper.buildBillTreeNodes(parameter);
-        this.showSelectFieldForm(srcBillNode, "wb_commitfieldname");
+        this.showSelectFieldForm(srcBillNode, key);
         //}
     }
 
@@ -265,5 +303,20 @@ public class CommonHandleExpFormPlugin extends AbstractFormPlugin implements Plu
         return types;
     }
 
+    private void receiveSelectField(BillEntityType mainType, String returnPropName, String entityKey, String sourceCtrlKey, String descFldKey) {
+        if (!StringUtils.isBlank(returnPropName)) {
+            String fieldCaption = EntityParseHelper.buildPropFullCaption(mainType, returnPropName);
+            if (StringUtils.isBlank(entityKey)) {
+                this.getModel().setValue(sourceCtrlKey, returnPropName);
+                this.getModel().setValue(descFldKey, fieldCaption);
+            } else {
+                int row = this.getModel().getEntryCurrentRowIndex(entityKey);
+                this.getModel().setValue(sourceCtrlKey, returnPropName, row);
+                this.getModel().setValue(descFldKey, fieldCaption, row);
+            }
+
+        }
+    }
+
 
 }

+ 90 - 0
code/wnq/nckd-wnq01-wnq-scm/src/main/java/nckd/wnq01/wnq/scm/plugin/form/RebatePolicyFormPlugin.java

@@ -0,0 +1,90 @@
+package nckd.wnq01.wnq.scm.plugin.form;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.util.ArrayList;
+import java.util.EventObject;
+import java.util.List;
+
+/**
+ * 动态表单插件
+ */
+public class RebatePolicyFormPlugin extends AbstractFormPlugin implements Plugin {
+
+    private String[] fields = new String[]{"nckd_amountratemin","nckd_amountratemax","nckd_qtyratemin","nckd_qtyratemax","nckd_amountmin","nckd_amountmax","nckd_qtymin","nckd_qtymax"};
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        for(String field : fields) {
+            this.getView().setVisible(false, field);
+        }
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+        String key = e.getProperty().getName();
+        if("nckd_policytype".equals(key)) {
+            DynamicObject newValue = (DynamicObject) e.getChangeSet()[0].getNewValue();
+            if(newValue == null) {
+                List list = new ArrayList();
+                list.add("999999");
+                setFieldVisible(list);
+            }
+            else {
+                newValue = BusinessDataServiceHelper.loadSingle(newValue.getPkValue(), "nckd_policytype");
+                DynamicObject judgment = newValue.getDynamicObject("nckd_judgmentcriteria");
+                String name = judgment.getString("name");
+                setFieldStatus(name);
+            }
+        }
+    }
+
+    public void setFieldStatus (String name) {
+        List fieldsList = new ArrayList<String>();
+        switch (name) {
+            case "金额达成率" :
+                fieldsList.add("nckd_amountratemin");
+                fieldsList.add("nckd_amountratemax");
+                break;
+            case "数量达成率" :
+                fieldsList.add("nckd_qtyratemin");
+                fieldsList.add("nckd_qtyratemax");
+                break;
+            case "金额阶梯" :
+                fieldsList.add("nckd_amountmin");
+                fieldsList.add("nckd_amountmax");
+                break;
+            case "数量阶梯" :
+                fieldsList.add("nckd_qtymin");
+                fieldsList.add("nckd_qtymax");
+                break;
+        }
+        setFieldVisible(fieldsList);
+    }
+
+    public void setFieldVisible (List fieldsList) {
+        for(String field : fields) {
+            if(fieldsList.contains(field)) {
+                this.getView().setVisible(true, field);
+            }
+            else {
+                this.getView().setVisible(false, field);
+            }
+        }
+
+    }
+
+
+
+}