|
@@ -16,7 +16,7 @@ class PosData {
|
|
|
* 构造函数
|
|
|
* @param {id|Number, masterId|Number} setting
|
|
|
*/
|
|
|
- constructor (setting) {
|
|
|
+ constructor(setting) {
|
|
|
// 无索引
|
|
|
this.datas = [];
|
|
|
// 以key为索引
|
|
@@ -114,7 +114,7 @@ class PosData {
|
|
|
* 移除数据 - 根据分类id
|
|
|
* @param mid
|
|
|
*/
|
|
|
- removeDatasByMasterId (mid) {
|
|
|
+ removeDatasByMasterId(mid) {
|
|
|
const masterKey = itemsPre + mid;
|
|
|
const range = this.ledgerPos[masterKey];
|
|
|
if (range) {
|
|
@@ -190,7 +190,7 @@ class MasterPosData extends PosData {
|
|
|
* 构造函数
|
|
|
* @param {id|Number, masterId|Number} setting
|
|
|
*/
|
|
|
- constructor (setting) {
|
|
|
+ constructor(setting) {
|
|
|
super(setting);
|
|
|
// 关联索引
|
|
|
this.masterItems = {};
|
|
@@ -199,7 +199,7 @@ class MasterPosData extends PosData {
|
|
|
* 加载主数据
|
|
|
* @param datas
|
|
|
*/
|
|
|
- loadDatas (datas) {
|
|
|
+ loadDatas(datas) {
|
|
|
super.loadDatas(datas);
|
|
|
// 清空旧数据
|
|
|
this.masterItems = {};
|
|
@@ -252,7 +252,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
- constructor (setting) {
|
|
|
+ constructor(setting) {
|
|
|
// 无索引
|
|
|
this.datas = [];
|
|
|
// 以key为索引
|
|
@@ -267,7 +267,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
/**
|
|
|
* 树结构根据显示排序
|
|
|
*/
|
|
|
- sortTreeNode (isResort) {
|
|
|
+ sortTreeNode(isResort) {
|
|
|
const self = this;
|
|
|
const addSortNodes = function (nodes) {
|
|
|
if (!nodes) { return }
|
|
@@ -298,7 +298,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* 加载数据(初始化), 并给数据添加部分树结构必须数据
|
|
|
* @param datas
|
|
|
*/
|
|
|
- loadDatas (datas) {
|
|
|
+ loadDatas(datas) {
|
|
|
// 清空旧数据
|
|
|
this.items = {};
|
|
|
this.nodes = [];
|
|
@@ -342,7 +342,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Number} id
|
|
|
* @returns {Object}
|
|
|
*/
|
|
|
- getItems (id) {
|
|
|
+ getItems(id) {
|
|
|
return this.items[itemsPre + id];
|
|
|
};
|
|
|
/**
|
|
@@ -350,10 +350,10 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @returns {Object}
|
|
|
*/
|
|
|
- getParent (node) {
|
|
|
+ getParent(node) {
|
|
|
return this.getItems(node[this.setting.pid]);
|
|
|
};
|
|
|
- getAllParents (node) {
|
|
|
+ getAllParents(node) {
|
|
|
const parents = [];
|
|
|
if (node.full_path && node.full_path !== '') {
|
|
|
const parentIds = node.full_path.split('-');
|
|
@@ -404,7 +404,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* 根据path查找完整节点
|
|
|
* @param {Number} path
|
|
|
*/
|
|
|
- getFullPathNodes (path) {
|
|
|
+ getFullPathNodes(path) {
|
|
|
const self = this, ids = path.split('-');
|
|
|
if (ids.length > 0) {
|
|
|
return this.nodes.filter((x) => {
|
|
@@ -419,7 +419,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @returns {Array}
|
|
|
*/
|
|
|
- getChildren (node) {
|
|
|
+ getChildren(node) {
|
|
|
const setting = this.setting;
|
|
|
const pid = node ? node[setting.id] : setting.rootId;
|
|
|
const children = this.datas.filter(function (x) {
|
|
@@ -437,7 +437,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @returns {*}
|
|
|
* @private
|
|
|
*/
|
|
|
- _recursiveGetPosterity (node) {
|
|
|
+ _recursiveGetPosterity(node) {
|
|
|
let posterity = node.children;
|
|
|
for (const c of node.children) {
|
|
|
posterity = posterity.concat(this._recursiveGetPosterity(c));
|
|
@@ -449,7 +449,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @returns {Array}
|
|
|
*/
|
|
|
- getPosterity (node) {
|
|
|
+ getPosterity(node) {
|
|
|
if (node.full_path !== '') {
|
|
|
const reg = new RegExp('^' + node.full_path + '-');
|
|
|
return this.datas.filter(function (x) {
|
|
@@ -464,16 +464,16 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @returns {boolean}
|
|
|
*/
|
|
|
- isLastSibling (node) {
|
|
|
+ isLastSibling(node) {
|
|
|
const siblings = this.getChildren(this.getParent(node));
|
|
|
- return (siblings && siblings.length > 0) ? node.order === siblings[siblings.length - 1].order : false;
|
|
|
+ return (siblings && siblings.length > 0) ? node.order === siblings[siblings.length - 1].order : false;
|
|
|
};
|
|
|
/**
|
|
|
* 刷新子节点是否可见
|
|
|
* @param {Object} node
|
|
|
* @private
|
|
|
*/
|
|
|
- _refreshChildrenVisible (node) {
|
|
|
+ _refreshChildrenVisible(node) {
|
|
|
if (!node.children) {
|
|
|
node.children = this.getChildren(node);
|
|
|
}
|
|
@@ -489,7 +489,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @param {Boolean} expanded
|
|
|
*/
|
|
|
- setExpanded (node, expanded) {
|
|
|
+ setExpanded(node, expanded) {
|
|
|
node.expanded = expanded;
|
|
|
this._refreshChildrenVisible(node);
|
|
|
};
|
|
@@ -499,7 +499,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node - 节点
|
|
|
* @returns {key}
|
|
|
*/
|
|
|
- getNodeKeyData (node) {
|
|
|
+ getNodeKeyData(node) {
|
|
|
const data = {};
|
|
|
for (const key of this.setting.keys) {
|
|
|
data[key] = node[key];
|
|
@@ -511,7 +511,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param node
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
- getNodeKey (node) {
|
|
|
+ getNodeKey(node) {
|
|
|
return node[this.setting.id];
|
|
|
};
|
|
|
|
|
@@ -569,7 +569,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @return {Array} 加载到树的数据
|
|
|
* @privateA
|
|
|
*/
|
|
|
- _updateData (datas) {
|
|
|
+ _updateData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
let loadedData = [];
|
|
|
for (const data of datas) {
|
|
@@ -608,7 +608,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @return {Array} 加载到树的数据
|
|
|
* @privateA
|
|
|
*/
|
|
|
- _loadData (datas) {
|
|
|
+ _loadData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
const loadedData = [], resortData = [];
|
|
|
for (const data of datas) {
|
|
@@ -663,7 +663,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param datas
|
|
|
* @private
|
|
|
*/
|
|
|
- _freeData (datas) {
|
|
|
+ _freeData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
const freeDatas = [];
|
|
|
const removeArrayData = function (array, data) {
|
|
@@ -687,7 +687,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
removeArrayData(this.datas, node);
|
|
|
}
|
|
|
}
|
|
|
- for(const node of freeDatas) {
|
|
|
+ for (const node of freeDatas) {
|
|
|
removeArrayData(this.nodes, node);
|
|
|
}
|
|
|
return freeDatas;
|
|
@@ -698,7 +698,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @returns {Array}
|
|
|
* @private
|
|
|
*/
|
|
|
- _loadExpandData (datas) {
|
|
|
+ _loadExpandData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
const loadedData = [], existData = [], expandData = [], resortData = [];
|
|
|
for (const data of datas) {
|
|
@@ -771,10 +771,10 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @param {Object} node
|
|
|
* @param {function} callback
|
|
|
*/
|
|
|
- loadChildren (node, callback) {
|
|
|
+ loadChildren(node, callback) {
|
|
|
if (this.setting.url !== '') {
|
|
|
const self = this;
|
|
|
- postData(this.setting.url, {postType: 'load-child', id: this.getNodeKeyData(node)}, function (data) {
|
|
|
+ postData(this.setting.url, { postType: 'load-child', id: this.getNodeKeyData(node) }, function (data) {
|
|
|
self._loadData(data);
|
|
|
callback();
|
|
|
});
|
|
@@ -783,7 +783,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
|
|
|
class MeasureTree extends BaseTree {
|
|
|
- addData (datas) {
|
|
|
+ addData(datas) {
|
|
|
const loadedData = [];
|
|
|
for (const data of datas) {
|
|
|
let node = this.getItems(data[this.setting.id]);
|
|
@@ -814,7 +814,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
return loadedData;
|
|
|
}
|
|
|
- removeData (datas) {
|
|
|
+ removeData(datas) {
|
|
|
datas.sort(function (a, b) {
|
|
|
return b.level - a.level;
|
|
|
});
|
|
@@ -835,7 +835,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
- loadLeafData (data) {
|
|
|
+ loadLeafData(data) {
|
|
|
const datas = data instanceof Array ? data : [data];
|
|
|
for (const d of datas) {
|
|
|
let node = this.getItems(d[this.setting.id]);
|
|
@@ -953,7 +953,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
// 最底层项目节,也需要计算
|
|
|
//if (this.getItems(node.ledger_id) && node.children.length > 0) {
|
|
|
- reCalcNodes.push(node);
|
|
|
+ reCalcNodes.push(node);
|
|
|
//}
|
|
|
}
|
|
|
}
|
|
@@ -1014,7 +1014,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
- constructor (setting) {
|
|
|
+ constructor(setting) {
|
|
|
super(setting);
|
|
|
// stage关联索引
|
|
|
this.stageItems = {};
|
|
@@ -1023,7 +1023,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* 加载数据(初始化), 并给数据添加部分树结构必须数据
|
|
|
* @param datas
|
|
|
*/
|
|
|
- loadDatas (datas) {
|
|
|
+ loadDatas(datas) {
|
|
|
super.loadDatas(datas);
|
|
|
// 清空旧数据
|
|
|
this.stageItems = {};
|
|
@@ -1067,7 +1067,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @return {Array} 加载到树的数据
|
|
|
* @privateA
|
|
|
*/
|
|
|
- _updateData (datas) {
|
|
|
+ _updateData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
let loadedData = [];
|
|
|
for (const data of datas) {
|
|
@@ -1103,7 +1103,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* @return {Array} 加载到树的数据
|
|
|
* @privateA
|
|
|
*/
|
|
|
- _updateStageData (datas) {
|
|
|
+ _updateStageData(datas) {
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
|
const loadedData = [];
|
|
|
for (const data of datas) {
|
|
@@ -1195,7 +1195,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
/**
|
|
|
* 构造函数
|
|
|
*/
|
|
|
- constructor (setting) {
|
|
|
+ constructor(setting) {
|
|
|
super(setting);
|
|
|
// 关联索引
|
|
|
this.masterItems = {};
|
|
@@ -1204,7 +1204,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
* 加载数据(初始化), 并给数据添加部分树结构必须数据
|
|
|
* @param datas
|
|
|
*/
|
|
|
- loadDatas (datas) {
|
|
|
+ loadDatas(datas) {
|
|
|
super.loadDatas(datas);
|
|
|
// 清空旧数据
|
|
|
this.masterItems = {};
|
|
@@ -1235,7 +1235,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
*/
|
|
|
loadMinorData(datas, fieldSuf, fields, calcFields) {
|
|
|
for (const cf of calcFields) {
|
|
|
- this.setting.calcFields.push(cf+fieldSuf);
|
|
|
+ this.setting.calcFields.push(cf + fieldSuf);
|
|
|
}
|
|
|
if (!datas) return;
|
|
|
datas = datas instanceof Array ? datas : [datas];
|
|
@@ -1289,7 +1289,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
|
|
|
class GatherTree extends BaseTree {
|
|
|
- clearDatas () {
|
|
|
+ clearDatas() {
|
|
|
this.items = {};
|
|
|
this.nodes = [];
|
|
|
this.datas = [];
|
|
@@ -1340,7 +1340,7 @@ const createNewPathTree = function (type, setting) {
|
|
|
return fun(a[field], b[field]);
|
|
|
});
|
|
|
for (const [i, node] of nodes.entries()) {
|
|
|
- node.order = i+1;
|
|
|
+ node.order = i + 1;
|
|
|
}
|
|
|
};
|
|
|
const addSortNodes = function (nodes) {
|
|
@@ -1364,6 +1364,88 @@ const createNewPathTree = function (type, setting) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ class CompareTree extends FxTree {
|
|
|
+
|
|
|
+ constructor(setting) {
|
|
|
+ super(setting);
|
|
|
+ this._newId = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ get newId() {
|
|
|
+ return this._newId++;
|
|
|
+ }
|
|
|
+
|
|
|
+ loadCompareNode(node, parent, loadFun) {
|
|
|
+ const siblings = parent ? parent.children : this.children;
|
|
|
+ let cur = siblings.find(function (x) {
|
|
|
+ return node.b_code
|
|
|
+ ? x.b_code === node.b_code && x.name === node.name && x.unit === node.unit && x.unit_price === node.unit_price
|
|
|
+ : x.code === node.code && x.name === node.name;
|
|
|
+ });
|
|
|
+ if (!cur) {
|
|
|
+ const id = this.newId;
|
|
|
+ cur = {
|
|
|
+ id: id,
|
|
|
+ pid: parent ? parent.id : this.setting.rootId,
|
|
|
+ full_path: parent ? parent.full_path + '-' + id : '' + id,
|
|
|
+ level: parent ? parent.level + 1 : 1,
|
|
|
+ order: siblings.length + 1,
|
|
|
+ children: [],
|
|
|
+ code: node.code, b_code: node.b_code, name: node.name,
|
|
|
+ unit: node.unit, unit_price: node.unit_price,
|
|
|
+ };
|
|
|
+ siblings.push(cur);
|
|
|
+ this.datas.push(cur);
|
|
|
+ }
|
|
|
+ loadFun(cur, node);
|
|
|
+ for (const c of node.children) {
|
|
|
+ this.loadCompareNode(c, cur, loadFun);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ generateSortNodes() {
|
|
|
+ const self = this;
|
|
|
+ const addSortNode = function (node) {
|
|
|
+ self.nodes.push(node);
|
|
|
+ for (const c of node.children) {
|
|
|
+ addSortNode(c);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.nodes = [];
|
|
|
+ for (const n of this.children) {
|
|
|
+ addSortNode(n);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ loadCompareTree(data, loadFun) {
|
|
|
+ for (const c of data.billsTree.children) {
|
|
|
+ this.loadCompareNode(c, null, loadFun);
|
|
|
+ }
|
|
|
+ // todo load Pos Data;
|
|
|
+ }
|
|
|
+
|
|
|
+ calculateDiffer() {
|
|
|
+ if (this.setting.calcDiffer) {
|
|
|
+ for (const d of this.datas) {
|
|
|
+ this.setting.calcDiffer(d);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ loadCompareData(data1, data2) {
|
|
|
+ this.loadCompareTree(data1, this.setting.loadInfo1);
|
|
|
+ this.loadCompareTree(data2, this.setting.loadInfo2);
|
|
|
+ for (const d of this.datas) {
|
|
|
+ d.is_leaf = d.children.length === 0;
|
|
|
+ d.expanded = true;
|
|
|
+ d.visible = true;
|
|
|
+ this.items[itemsPre + d[this.setting.id]] = d;
|
|
|
+ }
|
|
|
+ this.generateSortNodes();
|
|
|
+ this.calculateDiffer();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (type === 'base') {
|
|
|
return new BaseTree(setting);
|
|
|
} else if (type === 'fx') {
|
|
@@ -1382,6 +1464,8 @@ const createNewPathTree = function (type, setting) {
|
|
|
return new FilterTree(setting);
|
|
|
} else if (type === 'gather') {
|
|
|
return new GatherTree(setting);
|
|
|
+ } else if (type === 'compare') {
|
|
|
+ return new CompareTree(setting);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -1402,7 +1486,7 @@ const treeCalc = {
|
|
|
return [maxLevel, map];
|
|
|
},
|
|
|
getMaxLevel: function (tree) {
|
|
|
- return Math.max.apply(Math, tree.datas.map(function(o) {return o.level}));
|
|
|
+ return Math.max.apply(Math, tree.datas.map(function (o) { return o.level }));
|
|
|
},
|
|
|
calculateNode: function (tree, node) {
|
|
|
if (node.children && node.children.length > 0) {
|