'use strict'; /** * * * @author Mai * @date 2018/10/11 * @version */ const EmptyTenderHtml = [ '', ]; let selfLevelSort; const tenderTree = []; let parentId = 0; // 查询方法 function findNode (key, value, arr) { for (const a of arr) { if (a[key] && a[key] === value) { return a; } } } function getPId(level) { if (level !== 1) { const p = findNode('level', level - 1, levelNodes); if (p) { return p.lid } else { return 1; } } else { return 2; } } // 分类数据排序 function loadSelfCategoryLevel(selfLevel){ selfLevelSort = selfLevel ? selfLevel.split(',') : []; selfLevelSort = selfLevelSort.filter(x => { return category.find(c => { return c.id + '' === x; }); }); category.forEach(cate => { cate.is_self = selfLevelSort.length > 0; cate.self_level = selfLevelSort.indexOf(cate.id + '') + 1; }); } // 分类数据排序 function sortCategory() { category.forEach(cate => { cate.show_level = cate.is_self ? cate.self_level : cate.level; }); category.sort(function (a, b) { return a.show_level ? (b.show_level ? a.show_level - b.show_level : -1) : a.id - b.id; }); } function calculateParent(node) { if (node.children && node.cid) { node.end_qc_tp = 0; node.pre_gather_tp = 0; node.gather_tp = 0; node.sum_tp = 0; node.lastStage = 0; for (const c of node.children) { calculateParent(c); node.end_qc_tp = ZhCalc.add(node.end_qc_tp, c.end_qc_tp); node.pre_gather_tp = ZhCalc.add(node.pre_gather_tp, c.pre_gather_tp); node.gather_tp = ZhCalc.add(node.gather_tp, c.gather_tp); node.sum_tp = ZhCalc.add(node.sum_tp, c.sum_tp); node.lastStage = c.cid ? Math.max(node.lastStage, c.lastStage) : (c.lastStage ? Math.max(node.lastStage, c.lastStage.order) : node.lastStage); } } } // 初始化TenderTree数据 function initTenderTree () { const levelCategory = category.filter(function (c) { return c.show_level && c.show_level > 0; }); function findCategoryNode(cid, value, array) { for (const a of array) { if (a.cid === cid && a.vid === value) { return a; } } } function getCategoryNode(category, value, parent, i = null) { const array = parent ? parent.children : tenderTree; let cate = findCategoryNode(category.id, value, array); if (!cate) { const cateValue = findNode('id', value, category.value); if (!cateValue) return null; cate = { cid: category.id, vid: value, name: cateValue.value, children: [], level: i ? i : category.show_level, sort_id: ++parentId, sort: cateValue.sort, }; array.push(cate); } return cate; } function loadTenderCategory (tender) { let tenderCategory = null; for (const [index, lc] of levelCategory.entries()) { const tenderCate = findNode('cid', lc.id, tender.category); if (tenderCate) { tenderCategory = getCategoryNode(lc, tenderCate.value, tenderCategory); } else { if (index === 0 && tender.category) { for (const [i,c] of tender.category.entries()) { const cate = findNode('id', c.cid, category); if (cate) { tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1); } } } return tenderCategory; } } return tenderCategory; } function calculateTender(tender) { if (tender.lastStage) { tender.end_qc_tp = ZhCalc.add(tender.lastStage.pre_qc_tp, tender.lastStage.qc_tp); tender.pre_gather_tp = ZhCalc.add(tender.lastStage.pre_contract_tp, tender.lastStage.pre_qc_tp); tender.gather_tp = ZhCalc.add(tender.lastStage.contract_tp, tender.lastStage.qc_tp); tender.sum_tp = ZhCalc.add(tender.total_price, tender.end_qc_tp); } else { tender.sum_tp = tender.total_price; } } tenderTree.splice(0, tenderTree.length); for (const t of tenders) { calculateTender(t); t.valid = true; delete t.level; if (t.category && levelCategory.length > 0) { const parent = loadTenderCategory(t); if (parent) { t.level = parent.level + 1; parent.children.push(t); } else { tenderTree.push(t); } } else { tenderTree.push(t); } } sortTenderTree(tenderTree); for (const t of tenderTree) { calculateParent(t); } } function getProgressHtml(total, pre, cur) { if (total !== 0) { let preP = ZhCalc.mul(ZhCalc.div(pre, total, 2), 100, 0); let curP = ZhCalc.mul(ZhCalc.div(cur, total, 2), 100, 0); let other = Math.max(ZhCalc.sub(ZhCalc.sub(total, pre), cur), 0); let otherP = Math.max(100 - preP - curP, 0); const html = '
', subProject.name, ' | '); // html.push('计量期数 | '); // html.push('总价 | '); html.push('
---|