Просмотр исходного кода

云计量新增清单排序及去重

ellisran 1 год назад
Родитель
Сommit
531f41116f
1 измененных файлов с 62 добавлено и 3 удалено
  1. 62 3
      app/public/js/change_revise.js

+ 62 - 3
app/public/js/change_revise.js

@@ -2575,8 +2575,14 @@ $(document).ready(() => {
             //     return;
             // }
             const self = this;
-            const data = billsTree.nodes.filter(node => node.is_leaf === 1 && !node.code && node.ccid !== undefined && node.ccid !== '');
-            SpreadJsObj.loadSheetData(self.spread.getActiveSheet(), 'data', data);
+            const datas = billsTree.nodes.filter(node => node.is_leaf === 1 && !node.code && node.ccid !== undefined && node.ccid !== '');
+            const showDatas = [];
+            for (const d of datas) {
+                if (_.findIndex(showDatas, { b_code: d.b_code, name: d.name, unit: d.unit, unit_price: d.unit_price }) === -1) {
+                    showDatas.push({ code: d.code, b_code: d.b_code, name: d.name, unit: d.unit, unit_price: d.unit_price });
+                }
+            }
+            SpreadJsObj.loadSheetData(self.spread.getActiveSheet(), 'data', _.uniqWith(showDatas, _.isEqual).sort(sortByCode));
             // self.loaded = true;
             if (callback) callback();
         }
@@ -3567,4 +3573,57 @@ $(document).ready(() => {
         }
     }
 });
-
+// 编号排序,多重判断
+function sortByCode(a, b, code = 'b_code') {
+    let code1 = a[code].split('-');
+    let code2 = b[code].split('-');
+    let code1length = code1.length;
+    let code2length = code2.length;
+    for (let i = 0; i < code1length; i ++) {
+        if (i+1 <= code2length) {
+            if (code1[i] != code2[i]) {
+                if (/^\d+$/.test(code1[i]) && /^\d+$/.test(code2[i])) {
+                    return parseInt(code1[i]) - parseInt(code2[i]);
+                } else if (!/^\d+$/.test(code1[i]) && /^\d+$/.test(code2[i])) {
+                    return 1;
+                } else if (/^\d+$/.test(code1[i]) && !/^\d+$/.test(code2[i])) {
+                    return -1;
+                } else {
+                    const str1length = code1[i].length;
+                    const str2length = code2[i].length;
+                    for (let j = 0; j < str1length; j++) {
+                        if (j+1 <= str2length) {
+                            if (code1[i].charAt(j) != code2[i].charAt(j)) {
+                                return code1[i].charAt(j).charCodeAt() - code2[i].charAt(j).charCodeAt();
+                            }  else if (j+1 == str1length && code1[i].charAt(j) == code2[i].charAt(j)) {
+                                if (str1length == str2length) {
+                                    return 0;
+                                } else {
+                                    return str1length - str2length;
+                                }
+                            }
+                        } else {
+                            if (j+1 >= str1length) {
+                                return 1;
+                            } else {
+                                return -1;
+                            }
+                        }
+                    }
+                }
+            } else if (i+1 == code1length && code1[i] == code2[i]) {
+                if (code1length == code2length) {
+                    return 0;
+                } else {
+                    return code1length - code2length;
+                }
+            }
+        } else {
+            if (i+1 >= code1length) {
+                return 1;
+            } else {
+                return -1;
+            }
+        }
+    }
+}