|
@@ -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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|