|
@@ -39,13 +39,103 @@ $(document).ready(() => {
|
|
|
sjsSettingObj.setFxTreeStyle(spreadSetting, sjsSettingObj.FxTreeStyle.jz);
|
|
|
SpreadJsObj.initSheet(compareSheet, spreadSetting);
|
|
|
|
|
|
- const compareTree = createNewPathTree('final', {
|
|
|
- id: 'id',
|
|
|
- pid: 'pid',
|
|
|
- order: 'order',
|
|
|
- level: 'level',
|
|
|
- rootId: -1,
|
|
|
- });
|
|
|
+ let sfSelect;
|
|
|
+ const compareObj = {
|
|
|
+ curFinalId() {
|
|
|
+ return this.finalInfo ? this.finalInfo.id : undefined;
|
|
|
+ },
|
|
|
+ initFinalCol() {
|
|
|
+ if (spreadSetting.cols.length < 13) {
|
|
|
+ spreadSetting.cols.push(...[
|
|
|
+ {title: '台账|数量1/数量2', colSpan: '3|1', rowSpan: '1|1', field: 'dgn_qty', hAlign: 2, width: 80},
|
|
|
+ {title: '|经济指标', colSpan: '|1', rowSpan: '|1', field: 'dgn_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '决算|数量1/数量2', colSpan: '3|1', rowSpan: '1|1', field: 'final_dgn_qty', hAlign: 2, width: 80},
|
|
|
+ {title: '|经济指标', colSpan: '|1', rowSpan: '|1', field: 'final_dgn_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'final_tp', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ {title: '增幅%|数量1/数量2', colSpan: '2|1', rowSpan: '1|1', field: 'grow_dgn_qty', hAlign: 2, width: 80},
|
|
|
+ {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'grow_tp', hAlign: 2, width: 80, type: 'Number'},
|
|
|
+ ]);
|
|
|
+ SpreadJsObj.reLoadSheetHeader(compareSheet);
|
|
|
+ };
|
|
|
+ },
|
|
|
+ loadBudgetData(result) {
|
|
|
+ const compareTree = createNewPathTree('final', {
|
|
|
+ id: 'id',
|
|
|
+ pid: 'pid',
|
|
|
+ order: 'order',
|
|
|
+ level: 'level',
|
|
|
+ rootId: -1,
|
|
|
+ });
|
|
|
+ const setting = { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] };
|
|
|
+ const guTree = createNewPathTree('ledger', setting);
|
|
|
+ guTree.loadDatas(result.gu);
|
|
|
+ treeCalc.calculateAll(guTree);
|
|
|
+ compareTree.loadTree(guTree, function (cur, source) {
|
|
|
+ cur.base = true;
|
|
|
+ cur.gu_dgn_qty1 = ZhCalc.add(cur.gu_dgn_qty1, source.dgn_qty1);
|
|
|
+ cur.gu_dgn_qty2 = ZhCalc.add(cur.gu_dgn_qty2, source.dgn_qty2);
|
|
|
+ cur.gu_tp = ZhCalc.add(cur.gu_tp, source.total_price);
|
|
|
+ });
|
|
|
+ const gaiTree = createNewPathTree('ledger', setting);
|
|
|
+ gaiTree.loadDatas(result.gai);
|
|
|
+ treeCalc.calculateAll(gaiTree);
|
|
|
+ compareTree.loadTree(gaiTree, function (cur, source) {
|
|
|
+ cur.base = true;
|
|
|
+ cur.gai_dgn_qty1 = ZhCalc.add(cur.gai_dgn_qty1, source.dgn_qty1);
|
|
|
+ cur.gai_dgn_qty2 = ZhCalc.add(cur.gai_dgn_qty2, source.dgn_qty2);
|
|
|
+ cur.gai_tp = ZhCalc.add(cur.gai_tp, source.total_price);
|
|
|
+ });
|
|
|
+ const yuTree = createNewPathTree('ledger', setting);
|
|
|
+ yuTree.loadDatas(result.yu);
|
|
|
+ treeCalc.calculateAll(yuTree);
|
|
|
+ compareTree.loadTree(yuTree, function (cur, source) {
|
|
|
+ cur.base = true;
|
|
|
+ cur.yu_dgn_qty1 = ZhCalc.add(cur.yu_dgn_qty1, source.dgn_qty1);
|
|
|
+ cur.yu_dgn_qty2 = ZhCalc.add(cur.yu_dgn_qty2, source.dgn_qty2);
|
|
|
+ cur.yu_tp = ZhCalc.add(cur.yu_tp, source.total_price);
|
|
|
+ });
|
|
|
+ compareTree.afterLoad(node => {
|
|
|
+ if (node.code === '1')console.log(node);
|
|
|
+ node.gu_dgn_price = ZhCalc.div(node.gu_tp, node.gu_dgn_qty1, 2);
|
|
|
+ node.gu_dgn_qty = node.gu_dgn_qty1
|
|
|
+ ? (node.gu_dgn_qty2 ? node.gu_dgn_qty1 + '/' + node.gu_dgn_qty2 : node.gu_dgn_qty1)
|
|
|
+ : (node.gu_dgn_qty2 ? '/' + node.gu_dgn_qty2 : '');
|
|
|
+ node.gai_dgn_price = ZhCalc.div(node.gai_tp, node.gai_dgn_qty1, 2);
|
|
|
+ node.gai_dgn_qty = node.gai_dgn_qty1
|
|
|
+ ? (node.gai_dgn_qty2 ? node.gai_dgn_qty1 + '/' + node.gai_dgn_qty2 : node.gai_dgn_qty1)
|
|
|
+ : (node.gai_dgn_qty2 ? '/' + node.gai_dgn_qty2 : '');
|
|
|
+ node.yu_dgn_price = ZhCalc.div(node.yu_tp, node.yu_dgn_qty1, 2);
|
|
|
+ node.yu_dgn_qty = node.yu_dgn_qty1
|
|
|
+ ? (node.yu_dgn_qty2 ? node.yu_dgn_qty1 + '/' + node.yu_dgn_qty2 : node.yu_dgn_qty1)
|
|
|
+ : (node.yu_dgn_qty2 ? '/' + node.yu_dgn_qty2 : '');
|
|
|
+ });
|
|
|
+ compareTree.resortChildrenByCustom(function (x, y) {
|
|
|
+ const iCode = compareCode(x.code, y.code);
|
|
|
+ if (iCode) return iCode;
|
|
|
+ if (!x.name) return -1;
|
|
|
+ if (!y.name) return 1;
|
|
|
+ return x.name.localeCompare(y.name);
|
|
|
+ });
|
|
|
+ SpreadJsObj.loadSheetData(compareSheet, SpreadJsObj.DataType.Tree, compareTree);
|
|
|
+ },
|
|
|
+ loadFinalData(result, msg) {
|
|
|
+ if (msg) toastr.warning(msg);
|
|
|
+ this.finalInfo = result.finalInfo;
|
|
|
+ $('#final-info').html(`${moment(result.finalInfo.update_time).format('YYYY-MM-DD HH:mm:ss')} ${result.finalInfo.u_name}(${result.finalInfo.u_role})`);
|
|
|
+ this.initFinalCol();
|
|
|
+ const finalTree = createNewPathTree('ledger', {
|
|
|
+ id: 'tree_id',
|
|
|
+ pid: 'tree_pid',
|
|
|
+ order: 'order',
|
|
|
+ level: 'level',
|
|
|
+ rootId: -1,
|
|
|
+ });
|
|
|
+ finalTree.loadDatas(result.final);
|
|
|
+ SpreadJsObj.loadSheetData(compareSheet, SpreadJsObj.DataType.Tree, finalTree);
|
|
|
+ if (sfSelect) sfSelect.reloadSelect(this.finalInfo.tender);
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
function compareCode(str1, str2, symbol = '-') {
|
|
|
if (!str1) {
|
|
@@ -80,58 +170,13 @@ $(document).ready(() => {
|
|
|
return aCodes.length - bCodes.length;
|
|
|
}
|
|
|
|
|
|
- postData(window.location.pathname + '/load', {}, function (result) {
|
|
|
- const setting = { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] };
|
|
|
- const guTree = createNewPathTree('ledger', setting);
|
|
|
- guTree.loadDatas(result.gu);
|
|
|
- treeCalc.calculateAll(guTree);
|
|
|
- compareTree.loadTree(guTree, function (cur, source) {
|
|
|
- cur.base = true;
|
|
|
- cur.gu_dgn_qty1 = ZhCalc.add(cur.gu_dgn_qty1, source.dgn_qty1);
|
|
|
- cur.gu_dgn_qty2 = ZhCalc.add(cur.gu_dgn_qty2, source.dgn_qty2);
|
|
|
- cur.gu_tp = ZhCalc.add(cur.gu_tp, source.total_price);
|
|
|
- });
|
|
|
- const gaiTree = createNewPathTree('ledger', setting);
|
|
|
- gaiTree.loadDatas(result.gai);
|
|
|
- treeCalc.calculateAll(gaiTree);
|
|
|
- compareTree.loadTree(gaiTree, function (cur, source) {
|
|
|
- cur.base = true;
|
|
|
- cur.gai_dgn_qty1 = ZhCalc.add(cur.gai_dgn_qty1, source.dgn_qty1);
|
|
|
- cur.gai_dgn_qty2 = ZhCalc.add(cur.gai_dgn_qty2, source.dgn_qty2);
|
|
|
- cur.gai_tp = ZhCalc.add(cur.gai_tp, source.total_price);
|
|
|
- });
|
|
|
- const yuTree = createNewPathTree('ledger', setting);
|
|
|
- yuTree.loadDatas(result.yu);
|
|
|
- treeCalc.calculateAll(yuTree);
|
|
|
- compareTree.loadTree(yuTree, function (cur, source) {
|
|
|
- cur.base = true;
|
|
|
- cur.yu_dgn_qty1 = ZhCalc.add(cur.yu_dgn_qty1, source.dgn_qty1);
|
|
|
- cur.yu_dgn_qty2 = ZhCalc.add(cur.yu_dgn_qty2, source.dgn_qty2);
|
|
|
- cur.yu_tp = ZhCalc.add(cur.yu_tp, source.total_price);
|
|
|
- });
|
|
|
- compareTree.afterLoad(node => {
|
|
|
- if (node.code === '1')console.log(node);
|
|
|
- node.gu_dgn_price = ZhCalc.div(node.gu_tp, node.gu_dgn_qty1, 2);
|
|
|
- node.gu_dgn_qty = node.gu_dgn_qty1
|
|
|
- ? (node.gu_dgn_qty2 ? node.gu_dgn_qty1 + '/' + node.gu_dgn_qty2 : node.gu_dgn_qty1)
|
|
|
- : (node.gu_dgn_qty2 ? '/' + node.gu_dgn_qty2 : '');
|
|
|
- node.gai_dgn_price = ZhCalc.div(node.gai_tp, node.gai_dgn_qty1, 2);
|
|
|
- node.gai_dgn_qty = node.gai_dgn_qty1
|
|
|
- ? (node.gai_dgn_qty2 ? node.gai_dgn_qty1 + '/' + node.gai_dgn_qty2 : node.gai_dgn_qty1)
|
|
|
- : (node.gai_dgn_qty2 ? '/' + node.gai_dgn_qty2 : '');
|
|
|
- node.yu_dgn_price = ZhCalc.div(node.yu_tp, node.yu_dgn_qty1, 2);
|
|
|
- node.yu_dgn_qty = node.yu_dgn_qty1
|
|
|
- ? (node.yu_dgn_qty2 ? node.yu_dgn_qty1 + '/' + node.yu_dgn_qty2 : node.yu_dgn_qty1)
|
|
|
- : (node.yu_dgn_qty2 ? '/' + node.yu_dgn_qty2 : '');
|
|
|
- });
|
|
|
- compareTree.resortChildrenByCustom(function (x, y) {
|
|
|
- const iCode = compareCode(x.code, y.code);
|
|
|
- if (iCode) return iCode;
|
|
|
- if (!x.name) return -1;
|
|
|
- if (!y.name) return 1;
|
|
|
- return x.name.localeCompare(y.name);
|
|
|
- });
|
|
|
- SpreadJsObj.loadSheetData(compareSheet, SpreadJsObj.DataType.Tree, compareTree);
|
|
|
+ postData(window.location.pathname + '/load', {}, function (result, msg) {
|
|
|
+ if (result.final) {
|
|
|
+ compareObj.loadFinalData(result, msg);
|
|
|
+ } else {
|
|
|
+ compareObj.loadBudgetData(result);
|
|
|
+ }
|
|
|
+
|
|
|
});
|
|
|
|
|
|
$.subMenu({
|
|
@@ -186,6 +231,11 @@ $(document).ready(() => {
|
|
|
node.lastStageOrder =`第${source.lastStageOrder}期`;
|
|
|
node.lastStageStatus = source.lastStageStatus;
|
|
|
});
|
|
|
+ if (compareObj.finalInfo) {
|
|
|
+ this.selectTree.datas.forEach(x => {
|
|
|
+ x.selected = compareObj.finalInfo.tender.indexOf(x.tid + '') >= 0;
|
|
|
+ })
|
|
|
+ }
|
|
|
const sfSpreadSetting = {
|
|
|
cols: [
|
|
|
{title: '选择', field: 'selected', hAlign: 1, width: 40, formatter: '@', cellType: 'checkbox'},
|
|
@@ -229,56 +279,20 @@ $(document).ready(() => {
|
|
|
$('#select-final-ok').click(() => {
|
|
|
const rela = self.getSelects();
|
|
|
if (rela.length === 0) return;
|
|
|
- postData(window.location.pathname + '/final', {id: rela}, function(result) {
|
|
|
- if (spreadSetting.cols.length < 13) {
|
|
|
- spreadSetting.cols.push(...[
|
|
|
- {title: '台账|数量1/数量2', colSpan: '3|1', rowSpan: '1|1', field: 'dgn_qty', hAlign: 2, width: 80},
|
|
|
- {title: '|经济指标', colSpan: '|1', rowSpan: '|1', field: 'dgn_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
- {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
- {title: '决算|数量1/数量2', colSpan: '3|1', rowSpan: '1|1', field: 'final_dgn_qty', hAlign: 2, width: 80},
|
|
|
- {title: '|经济指标', colSpan: '|1', rowSpan: '|1', field: 'final_dgn_price', hAlign: 2, width: 80, type: 'Number'},
|
|
|
- {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'final_tp', hAlign: 2, width: 80, type: 'Number'},
|
|
|
- {title: '增幅%|数量1/数量2', colSpan: '2|1', rowSpan: '1|1', field: 'grow_dgn_qty', hAlign: 2, width: 80},
|
|
|
- {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'grow_tp', hAlign: 2, width: 80, type: 'Number'},
|
|
|
- ]);
|
|
|
- }
|
|
|
- const setting = { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price', 'end_gather_tp'] };
|
|
|
- compareTree.clearFinal();
|
|
|
- for (const r of result) {
|
|
|
- const tree = createNewPathTree('ledger', setting);
|
|
|
- tree.loadDatas(r);
|
|
|
- treeCalc.calculateAll(tree);
|
|
|
- compareTree.loadTree(tree, function (cur, source) {
|
|
|
- cur.total_price = ZhCalc.add(cur.total_price, source.total_price);
|
|
|
- cur.dgn_qty1 = ZhCalc.add(cur.dgn_qty1, source.dgn_qty1);
|
|
|
- cur.dgn_qty2 = ZhCalc.add(cur.dgn_qty2, source.dgn_qty2);
|
|
|
- cur.final_dgn_qty1 = ZhCalc.sum([cur.final_dgn_qty1, source.deal_dgn_qty1, source.c_dgn_qty1]);
|
|
|
- cur.final_dgn_qty2 = ZhCalc.sum([cur.final_dgn_qty2, source.deal_dgn_qty2, source.c_dgn_qty2]);
|
|
|
- cur.final_tp = ZhCalc.add(cur.final_tp, source.end_gather_tp);
|
|
|
- });
|
|
|
- }
|
|
|
- compareTree.afterLoad(node => {
|
|
|
- node.dgn_price = ZhCalc.div(node.total_price, node.dgn_qty1, 2);
|
|
|
- node.dgn_qty = node.dgn_qty1
|
|
|
- ? (node.dgn_qty2 ? node.dgn_qty1 + '/' + node.dgn_qty2 : node.dgn_qty1)
|
|
|
- : (node.dgn_qty2 ? '/' + node.dgn_qty2 : '');
|
|
|
- node.final_dgn_price = ZhCalc.div(node.final_tp, node.final_dgn_qty1, 2);
|
|
|
- node.final_dgn_qty = node.final_dgn_qty1
|
|
|
- ? (node.final_dgn_qty2 ? node.final_dgn_qty1 + '/' + node.final_dgn_qty2 : node.final_dgn_qty1)
|
|
|
- : (node.final_dgn_qty2 ? '/' + node.final_dgn_qty2 : '');
|
|
|
- node.grow_dgn_qty1 = ZhCalc.mul(ZhCalc.div(ZhCalc.sub(node.final_dgn_qty1, node.gai_dgn_qty1), node.gai_dgn_qty1, 4), 100);
|
|
|
- node.grow_dgn_qty2 = ZhCalc.mul(ZhCalc.div(ZhCalc.sub(node.final_dgn_qty2, node.gai_dgn_qty2), node.gai_dgn_qty2, 4), 100);
|
|
|
- node.grow_dgn_qty = node.grow_dgn_qty1
|
|
|
- ? (node.grow_dgn_qty2 ? node.grow_dgn_qty1 + '/' + node.grow_dgn_qty2 : node.grow_dgn_qty1)
|
|
|
- : (node.grow_dgn_qty2 ? '/' + node.grow_dgn_qty2 : '');
|
|
|
- node.grow_tp = ZhCalc.mul(ZhCalc.div(ZhCalc.sub(node.final_tp, node.gai_tp), node.gai_tp, 4), 100);
|
|
|
- });
|
|
|
- SpreadJsObj.reLoadSheetHeader(compareSheet);
|
|
|
- SpreadJsObj.reLoadSheetData(compareSheet);
|
|
|
+ postData(window.location.pathname + '/final', {final_id: compareObj.curFinalId(), id: rela}, function(result, msg) {
|
|
|
+ compareObj.loadFinalData(result, msg);
|
|
|
$('#select-final').modal('hide');
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
+ reloadSelect(select) {
|
|
|
+ if (compareObj.finalInfo) {
|
|
|
+ this.selectTree.datas.forEach(x => {
|
|
|
+ x.selected = select.indexOf(x.tid + '') >= 0;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ SpreadJsObj.reloadColData(this.sheet, 0);
|
|
|
+ }
|
|
|
selectNode(node, select) {
|
|
|
const posterity = this.selectTree.getPosterity(node);
|
|
|
posterity.unshift(node);
|
|
@@ -295,7 +309,6 @@ $(document).ready(() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- let sfSelect;
|
|
|
$('#select-final').on('shown.bs.modal', () => {
|
|
|
if (!sfSelect) sfSelect = new sfObject();
|
|
|
});
|