浏览代码

1. 循环引用判断调整
2. 循环引用计算调整

MaiXinRong 2 年之前
父节点
当前提交
ab39ccc512
共有 2 个文件被更改,包括 14 次插入5 次删除
  1. 6 2
      app/lib/pay_calc.js
  2. 8 3
      app/public/js/stage_pay.js

+ 6 - 2
app/lib/pay_calc.js

@@ -186,7 +186,7 @@ class PayCalculate {
         }
     }
 
-    getLeafOrder(data, pays) {
+    getLeafOrder(data, pays, parentOrder) {
         if (!data) return [];
         if (!data.expr) return [`f${data.order}`];
         const orderParam = data.expr.match(this.orderReg);
@@ -195,7 +195,11 @@ class PayCalculate {
         const result = [...orderParam];
         for (const op of orderParam) {
             const order = op.substring(1, op.length);
-            result.push(...this.getLeafOrder(pays[parseInt(order) -1], pays));
+            if (parseInt(order) === data.order || op === parentOrder) {
+                result.push(op);
+            } else {
+                result.push(...this.getLeafOrder(pays[parseInt(order) -1], pays, `f${data.order}`));
+            }
         }
         return this.ctx.helper._.uniq(result);
     }

+ 8 - 3
app/public/js/stage_pay.js

@@ -62,7 +62,7 @@ $(document).ready(() => {
                 this.orderReg = /f\d+/ig;
             }
 
-            getLeafOrder(data) {
+            getLeafOrder(data, parentOrder) {
                 if (!data) return [];
                 const defaultResult = data.order ? [`f${data.order}`] : [];
                 if (!data.expr) return defaultResult;
@@ -72,13 +72,18 @@ $(document).ready(() => {
                 const result = [], payData = paySheet.zh_data || [];
                 for (const op of orderParam) {
                     const order = op.substring(1, op.length);
-                    result.push(...this.getLeafOrder(payData[parseInt(order) -1]));
+                    if (data.order === parseInt(order) || op === parentOrder) {
+                        result.push(op);
+                    } else {
+                        const subOrderParam = this.getLeafOrder(payData[parseInt(order) -1], data.order ? `f${data.order}` : parentOrder);
+                        result.push(...subOrderParam);
+                    }
                 }
                 return result;
             }
 
             checkCircularExpr(expr, selfOrder) {
-                const leafOrder = this.getLeafOrder({expr});
+                const leafOrder = this.getLeafOrder({expr}, `f${selfOrder}`);
 
                 if (leafOrder.indexOf(`f${selfOrder}`) >= 0 || leafOrder.indexOf(`F${selfOrder}`) >= 0) return true;
                 return false;