import {copy, danxiangdinge_index, danxiangdinge_index_djcs, renameDingE, extractFuzhu, match_target, azfy, addChildren} from './utils'; import { v4 as uuidv4 } from 'uuid'; class Service{ constructor() { this.footprint = []; this.cache = []; this.memory = []; this.mem_pointer = -1; this.cache_djcs = []; this.memory_djcs = []; this.mem_pointer_djcs = -1; this.qufei = []; this.qufeiEntry = null; this.jiagongcai = []; } ip() { //return "/api"//return "http://127.0.0.1:8000" return "http://127.0.0.1:1313/api" } clearCache() {//set qufei will clear cache this.cache = []; this.footprint= []; this.memory = []; this.mem_pointer = -1; this.cache_djcs = []; this.memory_djcs = []; this.mem_pointer_djcs = -1; } setQufei(data) { let result = []; for(let i = 0; i < data[0]['children'].length; i++) { let child = data[0]['children'][i]; for(let j = 0; j < child['children'].length; j++) { let grandchild = child['children'][j]; //console.log(grandchild); result.push(grandchild); } } this.qufei = result; } setJiagongcai(data) { this.jiagongcai = data; } setQufeiEntry(bh) { this.qufeiEntry = this.qufei.filter(x=>x['key'] == bh)[0]; } processDjcsmingxi(mingxi) { this.cache_djcs = copy(mingxi); for(let i = 0; i < this.cache_djcs.length; i++) { let zimu = this.cache_djcs[i]; if (!zimu.hasOwnProperty("_children")) { zimu["_children"] = []; } if (!zimu.hasOwnProperty("rcj")) { zimu["rcj"] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]]; } } for(let i = 0; i < this.cache_djcs.length; i++) { let zimu = this.cache_djcs[i]; for(let j = 0; j < zimu["_children"].length; j++) { let de = zimu["_children"][j]; if (!de.hasOwnProperty("dercj")) { de["dercj"] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]]; } } } this.cache_djcs = this.cache_djcs.map(x=>{ //x["children"] = x["__children"]; x["key"] = x["序号"]; x["_children"] = x["_children"].map(y=>{ if (!y.hasOwnProperty('key')) { y['key'] = uuidv4(); } return y; }) return x; }); this.memory_djcs = []; this.memory_djcs.push(copy(this.cache_djcs)); this.mem_pointer_djcs = 0; } processQingdanmingxi(mingxi) { this.cache = copy(mingxi); for(let i = 0; i < this.cache.length; i++) { let zimu = this.cache[i]; if (!zimu.hasOwnProperty("__children")) { zimu["__children"] = []; } if (!zimu.hasOwnProperty("rcj")) { zimu["rcj"] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]]; } } for(let i = 0; i < this.cache.length; i++) { let zimu = this.cache[i]; for(let j = 0; j < zimu["__children"].length; j++) { let de = zimu["__children"][j]; if (!de.hasOwnProperty("dercj")) { de["dercj"] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]]; } } } this.cache = this.cache.map(x=>{ x["_children"] = x["__children"]; x["key"] = x["序号"]; x["_children"] = x["_children"].map(y=>{ if (!y.hasOwnProperty('key')) { y['key'] = uuidv4(); } return y; }) return x; }); this.memory = []; this.footprint = []; this.memory.push(copy(this.cache)); this.mem_pointer = 0; } async uploadFile(fd) { const response = await fetch(this.ip().concat( "/upload/"), { method : "POST", body : fd }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateQufei(name) { const response = await fetch(this.ip().concat("/qufei/"), { method : "POST", headers: { "Content-type": "application/json" }, body : JSON.stringify({ "name": name }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateOutline2(name) { const response = await fetch(this.ip().concat( "/outline2"), { method : "POST", headers: { "Content-type": "application/json" }, body : JSON.stringify({ "name": name }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateDetail2(name) { const response = await fetch(this.ip().concat("/detail2"), { method : "POST", headers: { "Content-type": "application/json" }, body : JSON.stringify({ "name": name }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateBaojiahuizong2(name, id) { const response = await fetch(this.ip().concat( "/baojiahuizong2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id : id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateGuifeishuijin2(name, id) { const response = await fetch(this.ip().concat( "/guifeishuijin2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateQitaxiangmu2(name, id) { const response = await fetch(this.ip().concat( "/qitaxiangmu2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id : id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateZygczgj(name, id) { const response = await fetch(this.ip().concat( "/zygczgj/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id : id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateZongchengbaofuwufei2(name, id) { const response = await fetch(this.ip().concat( "/zongchengbaofuwufei2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateFabaorengongyingcailiao2(name, id) { const response = await fetch(this.ip().concat( "/fabaorengongyingcailiao2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id : id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateRencaijihuizong2(name, id) { const response = await fetch(this.ip().concat( "/rencaijihuizong2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); let result = []; for (let i = 1; i < data.length; i++) { result.push({ 'key': uuidv4(), 'ID' : data[i][0], '编码' : data[i][1], '名称': data[i][2], '规格型号' : data[i][3], '单位' : data[i][4], '数量' : data[i][5], '单价' : data[i][6], '合价' : data[i][7], '产地' : data[i][8], '供应厂商' : data[i][9], '人材机类别' : data[i][10], '主要材料标志' : data[i][11], '主材标志' : data[i][12], '设备标志' : data[i][13], '甲供标志' : data[i][14], '暂估价标志' : data[i][15] }); } this.setQufeiEntry(id); return result; } } async generateJirigong2(name, id) { const response = await fetch(this.ip().concat("/jirigong2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateZanliejine2(name, id) { const response = await fetch(this.ip().concat( "/zanliejine2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateQingdanxiangmu2(name, id) { const response = await fetch(this.ip().concat( "/qingdanxiangmu2/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ name: name, id: id }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async searchDe(zhuanye, text) { const response = await fetch(this.ip().concat( "/searchde/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify({ zhuanye: zhuanye, text: text }) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } /////////////////////////////////////qingdan////////////////////////////////////// async generateQingdanmingxi(name, bh, bt) { if (bt == 'ALL') { const response = await fetch(this.ip().concat("/qingdanmingxi/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "bh": bh, "bt": bt, "name": name } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } else { if (this.cache.length == 0 || this.cache[0]["biao_id"] != name || this.cache[0]["Dwgcbh"] != bh || this.cache[0]["bt"] != bt) { const response = await fetch(this.ip().concat("/qingdanmingxi/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "bh": bh, "bt": bt, "name": name } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); this.processQingdanmingxi(data); this.setQufeiEntry(bh); return copy(this.cache); } } else { return copy(this.cache); } } } async generateQingdanrcj(name, bh, bt, bm) { if (bt == "Djcs") { let qd = this.cache_djcs.filter(x=>x["清单编码"] == bm)[0]; return copy(qd["rcj"]); } let qd = this.cache.filter(x=>x["清单编码"] == bm)[0]; return copy(qd["rcj"]); } async generateDingercj(name, bh, bt, qdbm, debm, danwei, key) { console.log('generateDingercj'); console.log(debm); if (bt == 'Djcs') { let qd = this.cache_djcs.filter(x=>x["清单编码"] == qdbm)[0]; let de = qd["_children"].filter(x=>x["清单编码"]==debm && x['key'] == key)[0]; return [copy(de["dercj"]), de["fuzhuEnable"]]; } let qd = this.cache.filter(x=>x["清单编码"] == qdbm)[0]; let de = qd["_children"].filter(x=>x["清单编码"]==debm && x['key'] == key)[0]; return [copy(de["dercj"]), de["fuzhuEnable"], de['yuban'], de['rcjbc']]; } /////////////////////////////end of qingdan//////////////////////////////////// async generateQingdanTuijian(name, bh, bt, bm) { const response = await fetch(this.ip().concat( "/qingdantuijian/".concat(bm)), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateZjcs(name, bh) { const response = await fetch(this.ip().concat( "/zjcs/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "bh": bh, "name": name } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateDjcs(name, bh) { if (this.cache_djcs.length == 0 || this.cache_djcs[0]["biao_id"] != name || this.cache_djcs[0]["Dwgcbh"] != bh) { const response = await fetch(this.ip().concat( "/djcs/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "bh": bh, "name": name } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); this.processDjcsmingxi(data); this.setQufeiEntry(bh); return copy(this.cache_djcs); } } else { return copy(this.cache_djcs); } } async generateFiles2() { const response = await fetch(this.ip().concat( "/files2/"), { method : "POST", headers: { "Content-type": "application/json" } }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async deleteFiles(id) { const response = await fetch(this.ip().concat( "/deleteFile/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "name": id, } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generatePeibiXilie(id, zhuanye) { const response = await fetch(this.ip().concat( "/pbxl/").concat(id).concat('/').concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateJixieXilie(id, zhuanye) { const response = await fetch(this.ip().concat( "/jxxl/").concat(id).concat('/').concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateCailiaoXilie(id, zhuanye) { const response = await fetch(this.ip().concat( "/clxl/").concat(id).concat('/').concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generatePeibishu(zhuanye) { const response = await fetch(this.ip().concat( "/pbs/").concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateJixieshu(zhuanye) { const response = await fetch(this.ip().concat( "/jxs/").concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateCailiaoshu(zhuanye) { const response = await fetch(this.ip().concat( "/cls/").concat(zhuanye.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateDingeshu(value) { const response = await fetch(this.ip().concat( "/des/").concat(value.toString()), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateDingeXilie(value, id) {//定额书的一个栏目的所有具体定额 const response = await fetch(this.ip().concat("/dexilie/").concat(value.toString()).concat("/").concat(id), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateSingleDingeXilie(zhuanye, debh, mc) {//清单页面展示用 const response = await fetch(this.ip().concat( "/singledexilie/").concat(zhuanye.toString()).concat("/").concat(debh).concat("/").concat(encodeURIComponent(mc.replace(/\//g, ''))), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async generateSingleDingeXilie2(zhuanye, debh) {//清单页面展示用 const response = await fetch(this.ip().concat( "/singledexilie2/").concat(zhuanye.toString()).concat("/").concat(debh.replace(/\//g, '')), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async save() { const response = await fetch(this.ip().concat( "/save/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "name": JSON.stringify(this.cache.filter(x=>this.footprint.includes(x['key']))) } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); this.footprint = []; return data; } } async generateJiagongcai(name) { const response = await fetch(this.ip().concat( "/jiagongcai/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "name": name } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async save_djcs() { const response = await fetch(this.ip().concat( "/savedjcs/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "name": JSON.stringify(this.cache_djcs) } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async applyFL(id, data) { const response = await fetch(this.ip().concat( "/applyFL/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "id": id, "name": JSON.stringify(data) } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async download(id) { const response = await fetch(this.ip().concat( "/download/").concat(id.toString())); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.blob(); return data; } } async tiaojia(biao_id, bh, bm, mingcheng, danwei, jiage) { let glf = ""; let lr = ""; let bz = 0;//changgui if (this.qufeiEntry['备注'].length == 0) { //changuiqufei glf = this.qufeiEntry['管理费(%)'] ; lr = this.qufeiEntry['利润(%)']; } else { glf = this.qufeiEntry['管理费(%)'] ; lr = this.qufeiEntry['利润(%)']; bz = 1; } const response = await fetch(this.ip().concat( "/tiaojia/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "biao_id": biao_id, "bh": bh, "bm": bm, "mingcheng": mingcheng, "danwei" : danwei, "jiage": jiage, "glf" : glf, "lr" : lr, "bz" : bz } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); this.clearCache(); return data; } } async updateZjcs(biao_id, bh, row) { const response = await fetch(this.ip().concat( "/updatezjcs/"), { method : "POST", headers: { "Content-type": "application/json" }, body: JSON.stringify( { "biao_id": biao_id, "bh": bh, 'mc': row['名称'].toString(), 'fl': row['费率'].toString() } ) }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } async cankao() { //参考费率 const response = await fetch(this.ip().concat( "/cankao/"), { method : "GET", }); if (!response.ok) { //const error = await response.json(); console.error('error'); } else { const data = await response.json(); return data; } } ///////////////////////////////////editor_code////////////////////////////////// summarize_one_djcs(qd) {///根据定额汇总清单 let dict = {}; let left = []; for(let i = 0; i < qd["_children"].length; i++) { let de = qd["_children"][i]; let desl = Number(de['数量']); let dercj = de['dercj']; for (let j = 1; j < dercj.length; j++) { let hl = copy(dercj[j]); if (hl[1] == '00EXP001' && hl[4] == '%') { left.push(hl); continue; } if (hl[1] == '99EXP007' && hl[4] == '%') { left.push(hl); continue; } if (hl[1] == '31130104' && hl[4] == '%') { left.push(hl); continue; } hl[10] = desl * Number(hl[10]); hl[11] = desl * Number(hl[11]); let a = hl[1];//"人材机编码", let b = a.concat(hl[2]);//"名称", let c = b.concat(hl[4]);// "单位" if (dict.hasOwnProperty(c)) { dict[c].push(hl); } else { dict[c] = [hl]; } } } let result = []; for(const key in dict) { let list = dict[key]; let sum = 0; let danjia = Number(list[0][5]); for (let i =0 ;i < list.length; i++) { sum += Number(list[i][10]); } let entry = [list[0][0], list[0][1], list[0][2], list[0][3], list[0][4], danjia, list[0][6], list[0][7], list[0][8], list[0][9], sum, sum * danjia, list[0][12], list[0][13], list[0][14], list[0][15] ]; result.push(entry); } for (let i = 0; i < left.length; i++) { result.push(left[i]); } let gongri = 0; for(let i = 0; i < result.length; i++) { if (result[i][4] == '工日') { gongri += result[i][10]; } } result.sort((a, b) => Number(a[8]) - Number(b[8])); qd['rcj'] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]].concat(result); qd["综合人工工日"] = gongri; qd['综合单价'] = 0; qd['合价'] = 0; qd['人工费'] = 0; qd['主材费'] = 0; qd['设备费'] = 0; qd['辅材费'] = 0; qd['材料费'] = 0; qd['机械费'] = 0; qd['管理费'] = 0; qd['利润'] = 0; for(let i = 0; i < qd["_children"].length; i++) { qd['综合单价'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['综合单价']); qd['合价'] += Number(qd['_children'][i]['合价']); qd['人工费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['人工费']); qd['主材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['主材费']); qd['设备费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['设备费']); qd['辅材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['辅材费']); qd['材料费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['材料费']); qd['机械费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['机械费']); qd['管理费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['管理费']); qd['利润'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['利润']); } return qd; } summarize_one(qd) {///根据定额汇总清单 qd['综合单价'] = 0; qd['合价'] = 0; qd['人工费'] = 0; qd['主材费'] = 0; qd['设备费'] = 0; qd['辅材费'] = 0; qd['材料费'] = 0; qd['机械费'] = 0; qd['管理费'] = 0; qd['利润'] = 0; for(let i = 0; i < qd["_children"].length; i++) { if (qd["_children"][i]['azfytag'].length > 0)continue; qd['综合单价'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['综合单价']); qd['合价'] += Number(qd['_children'][i]['合价']); qd['人工费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['人工费']); qd['主材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['主材费']); qd['设备费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['设备费']); qd['辅材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['辅材费']); qd['材料费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['材料费']); qd['机械费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['机械费']); qd['管理费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['管理费']); qd['利润'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['利润']); } //处理安装费用 //console.log(qd["_children"].length); for(let i = 0; i < qd["_children"].length; i++) { //console.log(i); if (qd["_children"][i]['azfytag'].length > 0){ let tag = qd["_children"][i]['azfytag']; if (tag[0] == '人工费') { let current_rgf = qd['人工费']; let added = Number(current_rgf) * Number(tag[1]) / Number(100); let added_rgf = added * Number(tag[2]) / Number(100); let added_clf = added * Number(tag[3]) / Number(100); let added_jxf = added * Number(tag[4]) / Number(100); qd["_children"][i]['人工费'] = added_rgf; qd["_children"][i]['辅材费'] = added_clf; qd["_children"][i]['材料费'] = added_clf; qd["_children"][i]['机械费'] = added_jxf; if (this.qufeiEntry['备注'].length == 0) { //changuiqufei qd["_children"][i]['管理费'] = (added_rgf + added_jxf) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (added_rgf + added_jxf) * Number(this.qufeiEntry['利润(%)']) / Number(100); } else { qd["_children"][i]['管理费'] = (added_rgf) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (added_rgf) * Number(this.qufeiEntry['利润(%)']) / Number(100); } qd["_children"][i]['综合单价'] = qd["_children"][i]['人工费'] + qd["_children"][i]['材料费'] + qd["_children"][i]['机械费'] + qd["_children"][i]['管理费'] + qd["_children"][i]['利润']; qd["_children"][i]['合价'] = qd["_children"][i]['综合单价'] * Number(qd["_children"][i]['数量']) * Number(qd['数量']); let dercj = qd["_children"][i]['dercj']; for (let j = 1; j < dercj.length; j++) { dercj[j][11] = Number(added) * Number(dercj[j][10]) / Number(100); } } if (tag[0] == '人工费+机械费') { let current_rgf = qd['人工费'] + qd['机械费']; let added = Number(current_rgf) * Number(tag[1]) / Number(100); let added_rgf = added * Number(tag[2]) / Number(100); let added_clf = added * Number(tag[3]) / Number(100); let added_jxf = added * Number(tag[4]) / Number(100); qd["_children"][i]['人工费'] = added_rgf; qd["_children"][i]['辅材费'] = added_clf; qd["_children"][i]['材料费'] = added_clf; qd["_children"][i]['机械费'] = added_jxf; if (this.qufeiEntry['备注'].length == 0) { //changuiqufei qd["_children"][i]['管理费'] = (added_rgf + added_jxf) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (added_rgf + added_jxf) * Number(this.qufeiEntry['利润(%)']) / Number(100); } else { qd["_children"][i]['管理费'] = (added_rgf) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (added_rgf) * Number(this.qufeiEntry['利润(%)']) / Number(100); } qd["_children"][i]['综合单价'] = qd["_children"][i]['人工费'] + qd["_children"][i]['材料费'] + qd["_children"][i]['机械费'] + qd["_children"][i]['管理费'] + qd["_children"][i]['利润']; qd["_children"][i]['合价'] = qd["_children"][i]['综合单价'] * Number(qd["_children"][i]['数量']) * Number(qd["数量"]); let dercj = qd["_children"][i]['dercj']; for (let j = 1; j < dercj.length; j++) { dercj[j][11] = Number(added) * Number(dercj[j][10]) / Number(100); } } } } qd['综合单价'] = 0; qd['合价'] = 0; qd['人工费'] = 0; qd['主材费'] = 0; qd['设备费'] = 0; qd['辅材费'] = 0; qd['材料费'] = 0; qd['机械费'] = 0; qd['管理费'] = 0; qd['利润'] = 0; for(let i = 0; i < qd["_children"].length; i++) { qd['综合单价'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['综合单价']); qd['合价'] += Number(qd['_children'][i]['合价']); qd['人工费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['人工费']); qd['主材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['主材费']); qd['设备费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['设备费']); qd['辅材费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['辅材费']); qd['材料费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['材料费']); qd['机械费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['机械费']); qd['管理费'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['管理费']); qd['利润'] += Number(qd['_children'][i]['数量']) * Number(qd['_children'][i]['利润']); } let dict = {}; let left = []; for(let i = 0; i < qd["_children"].length; i++) { let de = qd["_children"][i]; let desl = Number(de['数量']); let dercj = de['dercj']; for (let j = 1; j < dercj.length; j++) { let hl = copy(dercj[j]); if (hl[1].includes('000FE') && hl[4] == '%') { left.push(hl); continue; } hl[10] = desl * Number(hl[10]); hl[11] = desl * Number(hl[11]); let a = hl[1];//"人材机编码", let b = a.concat(hl[2]);//"名称", let c = b.concat(hl[4]);// "单位" if (dict.hasOwnProperty(c)) { dict[c].push(hl); } else { dict[c] = [hl]; } } } let result = []; for(const key in dict) { let list = dict[key]; let sum = 0; let danjia = Number(list[0][5]); for (let i =0 ;i < list.length; i++) { sum += Number(list[i][10]); } let entry = [list[0][0], list[0][1], list[0][2], list[0][3], list[0][4], danjia, list[0][6], list[0][7], list[0][8], list[0][9], sum, sum * danjia, list[0][12], list[0][13], list[0][14], list[0][15] ]; result.push(entry); } for (let i = 0; i < left.length; i++) { result.push(left[i]); } let gongri = 0; for(let i = 0; i < result.length; i++) { if (result[i][4] == '工日') { gongri += result[i][10]; } } result.sort((a, b) => Number(a[8]) - Number(b[8])); qd['rcj'] = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]].concat(result); qd["综合人工工日"] = gongri; return qd; } summarize(data) { return data.map(x=>this.summarize_one(x)); } summarize_djcs(data) { return data.map(x=>this.summarize_one_djcs(x)); } push_op(newData) { if(this.memory.length == this.mem_pointer + 1) { this.memory.push(copy(newData)); this.mem_pointer = this.mem_pointer + 1; } else{ this.memory.splice(this.mem_pointer + 1); this.memory.push(copy(newData)); this.mem_pointer = this.mem_pointer + 1; } } push_op_djcs(newData) { if(this.memory_djcs.length == this.mem_pointer_djcs + 1) { this.memory_djcs.push(copy(newData)); this.mem_pointer_djcs = this.mem_pointer_djcs + 1; } else{ this.memory_djcs.splice(this.mem_pointer_djcs + 1); this.memory_djcs.push(copy(newData)); this.mem_pointer_djcs = this.mem_pointer_djcs + 1; } } undo() { if (this.mem_pointer > 0) { let newData = this.memory[this.mem_pointer - 1]; this.mem_pointer = this.mem_pointer - 1; this.cache = copy(newData); return copy(newData); } return copy(this.cache); } undo_djcs() { if (this.mem_pointer_djcs > 0) { let newData = this.memory_djcs[this.mem_pointer_djcs - 1]; this.mem_pointer_djcs = this.mem_pointer_djcs - 1; this.cache_djcs = copy(newData); return copy(newData); } return copy(this.cache_djcs); } redo() { if (this.mem_pointer + 1 != this.memory.length) { let newData = this.memory[this.mem_pointer + 1]; this.mem_pointer = this.mem_pointer + 1; this.cache = copy(newData); return copy(newData); } return copy(this.cache); } redo_djcs() { if (this.mem_pointer_djcs + 1 != this.memory_djcs.length) { let newData = this.memory_djcs[this.mem_pointer_djcs + 1]; this.mem_pointer_djcs = this.mem_pointer_djcs + 1; this.cache_djcs = copy(newData); return copy(newData); } return copy(this.cache_djcs); } shanchu_djcs(key) { if (this.cache_djcs.filter(x=>x['key'] == key).length > 0) { ///qd let newData = this.cache_djcs.map(x=>{ if (x["key"] == key) { let y = copy(x); y["_children"] = []; return y; } else { return x; } }); let summarized = this.summarize_djcs(newData); this.push_op_djcs(summarized); ///////////////// this.cache_djcs = copy(summarized); return copy(this.cache_djcs); } else { let qd = this.cache_djcs.filter(x=>x["_children"].filter(y=>y['key'] == key).length > 0)[0]; let qdbm = qd['清单编码']; let newData = this.cache_djcs.map(x=>{ if (x["清单编码"] == qdbm) { let y = copy(x); let origin = y["_children"]; let trans = origin.filter(z=>z["key"]!=key); y["_children"] = trans; return y; } else { return x; } }); let summarized = this.summarize_djcs(newData); this.push_op_djcs(summarized); ///////////////// this.cache_djcs = copy(summarized); return copy(this.cache_djcs); } } updateFootprint(key) { if (this.footprint.includes(key)) { } else { this.footprint.push(key); } } shanchu(key) { if (this.cache.filter(x=>x['key'] == key).length > 0) { this.updateFootprint(key); ///qd let newData = this.cache.map(x=>{ if (x["key"] == key) { let y = copy(x); y["_children"] = []; return y; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return copy(this.cache); } else { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key'] == key).length > 0)[0]; this.updateFootprint(qd['key']); let qdbm = qd['清单编码']; let newData = this.cache.map(x=>{ if (x["清单编码"] == qdbm) { let y = copy(x); let origin = y["_children"]; let trans = origin.filter(z=>z["key"]!=key); y["_children"] = trans; return y; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return copy(this.cache); } } updateDercj_djcs_(row, data, xuhao) {///change 一条定额 inplace, 汇总一条定额的rcj, xuhao is for rename console.log("data updated"); //处理附注 let huan = false;//换 let qd = this.cache_djcs.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; if (de.hasOwnProperty("rcjdg")) {//新数据 for (let i = 1; i < de['rcjdg'].length; i++) { for(let j = 1; j < data.length; j++) { if (data[j][16] == de['rcjdg'][i][16]) { de['rcjdg'][i][5] = data[j][5];//更新单价 /****ToDo 更新其他字段 */ if (de['rcjdg'][i][2] == data[j][2]) {//更新名称 } else { huan = true; } } } } if (de['fuzhuEnable'] && de.hasOwnProperty('fuzhu')) {//没强行改过含量 de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { let origin = Number(de['rcjdg'][j][10]); for(let i = 0; i < de['fuzhu'].length; i++) { let selected = de['fuzhu'][i]; let target = selected[0]; if (match_target(de['rcjdg'][j][1], target)) { if (selected[2] == '系数') { origin = origin * Number(selected[3]); } else if (selected[2] == '含量') { origin = Number(selected[3]); } else if (selected[2] == '调整') { origin = origin + Number(selected[3]); } else { throw new Error('无法处理的附注'.concat(selected[2])); } } } for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 } } de['dercj'][j][5] = de['rcjdg'][j][5];//单价 de['dercj'][j][10] = origin; de['dercj'][j][11] = Number(de['dercj'][j][5]) * origin; } } else if (de['fuzhuEnable'] && !de.hasOwnProperty('fuzhu')) { de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { let origin = Number(de['rcjdg'][j][10]); for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 } } de['dercj'][j][5] = de['rcjdg'][j][5]; de['dercj'][j][10] = origin; de['dercj'][j][11] = Number(de['dercj'][j][5]) * origin; } } else { //强行改含量 de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 de['dercj'][j][10] = data[k][10]; de['dercj'][j][11] = Number(de['dercj'][j][5]) * de['dercj'][j][10]; } } } } data = de['dercj']; } else {////单项定额没有底稿,老数据没底搞,无法判断换部换,暂时统一认为不换 //强行改含量 de['dercj'] = copy(data); data = de['dercj']; } //模拟formula计算每一行的合价 for(let i = 1; i < data.length; i++) { data[i][11] = Number(data[i][10]) * Number(data[i][5]); } if (data[0].length > 18) data = data.filter(x=>x[18]!='true').map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16]]); let sum = 0; let rgf_sum = 0; let jxf_sum = 0; let clf_sum = 0; let zcf_sum = 0; for(let i = 1; i < data.length; i++) { sum += Number(data[i][11]);//11-> hejia if (Number(data[i][8]) == 1) { rgf_sum += Number(data[i][11]); } if (Number(data[i][8]) == 2) { clf_sum += Number(data[i][11]); if (data[i][14] == 'true') { zcf_sum += Number(data[i][11]); } } if (Number(data[i][8]) == 3) { jxf_sum += Number(data[i][11]); } } console.log("sum=".concat(sum)); //处理百分比费用 for(let i = 1; i < data.length; i++) { if (data[i][1]=='00EXP001' && data[i][4] == '%'){//回程费占人工费 data[i][11] = Number(data[i][10]) * rgf_sum / Number(100); } if (data[i][1]=='99EXP007' && data[i][4] == '%'){//回程费占机械费 data[i][11] = Number(data[i][10]) * jxf_sum / Number(100); } if (data[i][1]=='31130104' && data[i][4] == '%'){//回程费占材料费 data[i][11] = Number(data[i][10]) * clf_sum / Number(100); } } sum = 0; rgf_sum = 0; jxf_sum = 0; clf_sum = 0; zcf_sum = 0; for(let i = 1; i < data.length; i++) { sum += Number(data[i][11]);//11-> hejia if (Number(data[i][8]) == 1) { rgf_sum += Number(data[i][11]); } if (Number(data[i][8]) == 2) { clf_sum += Number(data[i][11]); if (data[i][14] == 'true') { zcf_sum += Number(data[i][11]); } } if (Number(data[i][8]) == 3) { jxf_sum += Number(data[i][11]); } } let shuliang = Number(qd['数量']); for(let i = 0; i< qd["_children"].length; i++) { if(qd["_children"][i]['key'] == row) { let desl = Number(qd["_children"][i]['数量']); let oldname = qd["_children"][i]['清单编码']; qd["_children"][i]['辅材费'] = clf_sum - zcf_sum; qd["_children"][i]['材料费'] = clf_sum; qd["_children"][i]['人工费'] = rgf_sum; qd["_children"][i]['主材费'] = zcf_sum; qd["_children"][i]['设备费'] = 0; qd["_children"][i]['机械费'] = jxf_sum; if (oldname.startsWith("D")) {//单项清单 qd["_children"][i]['管理费'] = 0; qd["_children"][i]['利润'] = 0; } else { if (this.qufeiEntry['备注'].length == 0) { //changuiqufei qd["_children"][i]['管理费'] = (rgf_sum + jxf_sum) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (rgf_sum + jxf_sum) * Number(this.qufeiEntry['利润(%)']) / Number(100); } else { qd["_children"][i]['管理费'] = (rgf_sum) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (rgf_sum) * Number(this.qufeiEntry['利润(%)']) / Number(100); } } qd["_children"][i]['综合单价'] = sum + qd["_children"][i]['管理费'] + qd["_children"][i]['利润']; qd["_children"][i]['合价'] = (qd["_children"][i]['综合单价'] * shuliang * desl); qd["_children"][i]["dercj"] = copy(data); qd["_children"][i]['清单编码'] = renameDingE(oldname, xuhao, huan); } } } updateDercj_(row, data, xuhao, yuban, rcjbc) {///change 一条定额 inplace, 汇总一条定额的rcj, xuhao is for rename, yuban is 预拌砂浆 console.log("data updated"); //处理附注 let huan = false;//换 let huankey = []; let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; if (de.hasOwnProperty("rcjdg")) {//新数据 for (let i = 1; i < de['rcjdg'].length; i++) { for (let j = 1; j < data.length; j++) { if (de['rcjdg'][i][16] == data[j][16]) { de['rcjdg'][i][5] = data[j][5];//更新单价,底稿的单价不是很需要同步(在人才机汇总修改价格) /****ToDo 更新其他字段 */ if (data[j][2].includes('(湿拌砂浆)')) { let index = data[j][2].indexOf("(湿拌砂浆)"); data[j][2] = data[j][2].substring(0, index); } if (data[j][2].includes('(干拌(混)砂浆)')) { let index = data[j][2].indexOf("(干拌(混)砂浆)"); data[j][2] = data[j][2].substring(0, index); } if (de['rcjdg'][i][2] == data[j][2]) {//更新名称 } else { //if (de['rcjdg'][i][18] == 'false') huan = true; huankey.push(de['rcjdg'][i][16]); } } } } if (de['fuzhuEnable'] && de.hasOwnProperty('fuzhu')) {//没强行改过含量 de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { let origin = Number(de['rcjdg'][j][10]); for(let i = 0; i < de['fuzhu'].length; i++) { let selected = de['fuzhu'][i]; let target = selected[0]; if (match_target(de['rcjdg'][j][1], target)) { if (selected[2] == '系数') { origin = origin * Number(selected[3]); } else if (selected[2] == '含量') { origin = Number(selected[3]); } else if (selected[2] == '调整') { origin = origin + Number(selected[3]); } else { throw new Error('无法处理的附注'.concat(selected[2])); } } } for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 } } de['dercj'][j][5] = de['rcjdg'][j][5];//单价 de['dercj'][j][10] = origin; de['dercj'][j][11] = Number(de['dercj'][j][5]) * origin; } } else if (de['fuzhuEnable'] && !de.hasOwnProperty('fuzhu')) { de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { let origin = Number(de['rcjdg'][j][10]); for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 } } de['dercj'][j][5] = de['rcjdg'][j][5]; de['dercj'][j][10] = origin; de['dercj'][j][11] = Number(de['dercj'][j][5]) * origin; } } else { //强行改含量 de['dercj'] = copy(de['rcjdg']); for(let j = 1; j < de['rcjdg'].length; j++) { for (let k = 0; k < data.length; k++) { if (data[k][16] == de['dercj'][j][16]) { de['dercj'][j][2] = data[k][2];//名称 de['dercj'][j][1] = data[k][1];//编号 de['dercj'][j][10] = data[k][10]; de['dercj'][j][11] = Number(de['dercj'][j][5]) * de['dercj'][j][10]; } } } } data = de['dercj']; if (de['fuzhuEnable']) { data = data.filter(x=>x[1] != 'S00001' && x[1] != 'JD0001');//预拌砂浆额外配套 /* for (let i = 1; i < data.length; i++) { if (data[i][2].includes('(湿拌砂浆)')) { let index = data[i][2].indexOf("(湿拌砂浆)"); data[i][2] = data[i][2].substring(0, index); } if (data[i][2].includes('(干拌(混)砂浆)')) { let index = data[i][2].indexOf("(干拌(混)砂浆)"); data[i][2] = data[i][2].substring(0, index); } } */ de['dercj'] = copy(data); } } else {////单项定额没有底稿,老数据没底搞,无法判断换部换,暂时统一认为不换 //强行改含量 de['dercj'] = copy(data); data = de['dercj']; } if (de.hasOwnProperty("rcjdg") && de['fuzhuEnable'] && yuban.length > 0) {//没强行改过含量 if (yuban.includes('1')) { for(let i = 1; i < data.length; i++) { if (data[i][4]=='工日') { data[i][10] = Number(data[i][10]) - 0.45; } if (data[i][2].includes('搅拌机')) { data[i][10] = 0; } if (data[i][2].includes('砂浆') && !data[i][2].includes('搅拌机')) { data[i][2] = data[i][2].concat('(湿拌砂浆)') } } let flip = []; for(let i = 1; i < data.length; i++) { if (data[i][18]=='true') { for (let j = 0; j < data[i][20].length; j++) { flip.push(data[i][20][j]); } data[i][18] = 'false'; } } for(let i = 1; i < data.length; i++) { if (flip.includes(data[i][16])) { data[i][18] = 'true'; } } } else if (yuban.includes('2')) { let origin = 0; for(let i = 1; i < data.length; i++) { if (data[i][4]=='工日') { data[i][10] = Number(data[i][10]) - 0.3; } if (data[i][2].includes('搅拌机')) { data[i][10] = 0; } if (data[i][2].includes('砂浆') && !data[i][2].includes('搅拌机')) { data[i][2] = data[i][2].concat('(干拌(混)砂浆)'); origin = Number(data[i][10]); data[i][10] = origin * 1.75; } } data.push(['', 'S00001', '水', '', 't', '4.70', '', '', '2', 'false', (origin * 0.29).toString(), '', '','','','','', 'false', [], []]); data.push(['', 'JD0001', '其他机械费(电)', '', '度', '0.65', '', '', '3', 'false', (origin * 2.15).toString(), '', '','','','', '', 'false', [], []]); let flip = []; for(let i = 1; i < data.length; i++) { if (data[i][18]=='true') { for (let j = 0; j < data[i][20].length; j++) { flip.push(data[i][20][j]); } data[i][18] = 'false'; } } for(let i = 1; i < data.length; i++) { if (flip.includes(data[i][16])) { data[i][18] = 'true'; } } } else if (yuban.includes('3')) { let origin = 0; for(let i = 1; i < data.length; i++) { if (data[i][4]=='工日') { data[i][10] = Number(data[i][10]) - 0.2; } if (data[i][2].includes('砂浆') && !data[i][2].includes('搅拌机')) { data[i][2] = data[i][2].concat('(干拌(混)砂浆)'); origin = Number(data[i][10]); data[i][10] = origin * 1.75; } } data.push(['', 'S00001', '水', '', 't', '4.70', '', '', '2', 'false', (origin * 0.29).toString(), '', '','','','','', 'false', [], []]); let flip = []; for(let i = 1; i < data.length; i++) { if (data[i][18]=='true') { for (let j = 0; j < data[i][20].length; j++) { flip.push(data[i][20][j]); } data[i][18] = 'false'; } } for(let i = 1; i < data.length; i++) { if (flip.includes(data[i][16])) { data[i][18] = 'true'; } } } de['dercj'] = copy(data); } if (de['dercj'][0].length > 18) de['dercj'] = de['dercj'].filter(x=>x[18]!='true').map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17]]); let keyleft = de['dercj'].map(x=>x[16]); huankey = huankey.filter(x=>keyleft.includes(x)); if (huankey.length == 0)huan = false; de['dercj'] = de['dercj'].filter(x=>!x[1].includes('10000F') && x[17] != 'true');//补充 de['dercj'] = de['dercj'].map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], '']); for(let i = 0; i < rcjbc.length; i++) { de['dercj'].push(['', rcjbc[i]['人材机编码'], rcjbc[i]['名称'], rcjbc[i]['规格型号'], rcjbc[i]['单位'], rcjbc[i]['单价'], rcjbc[i]['产地'], rcjbc[i]['供应厂商'], rcjbc[i]['人材机类别'], rcjbc[i]['甲供标志'], rcjbc[i]['含量'], '', rcjbc[i]['暂估价标志'],rcjbc[i]['主要材料标志'],rcjbc[i]['主材标志'],rcjbc[i]['设备标志'], '', 'true']); } data = copy(de['dercj']); //模拟formula计算每一行的合价 for(let i = 1; i < data.length; i++) { data[i][11] = Number(data[i][10]) * Number(data[i][5]); } let sum = 0; let rgf_sum = 0; let jxf_sum = 0; let clf_sum = 0; let zcf_sum = 0; for(let i = 1; i < data.length; i++) { if (data[i][1].includes('000FE') && data[i][4] == '%')continue;//azfy sum += Number(data[i][11]);//11-> hejia if (Number(data[i][8]) == 1) { rgf_sum += Number(data[i][11]); } if (Number(data[i][8]) == 2) { clf_sum += Number(data[i][11]); if (data[i][14] == 'true') { zcf_sum += Number(data[i][11]); } } if (Number(data[i][8]) == 3) { jxf_sum += Number(data[i][11]); } } console.log("sum=".concat(sum)); let shuliang = Number(qd['数量']); for(let i = 0; i< qd["_children"].length; i++) { if(qd["_children"][i]['key'] == row) { let desl = Number(qd["_children"][i]['数量']); let oldname = qd["_children"][i]['清单编码']; qd["_children"][i]['辅材费'] = clf_sum - zcf_sum; qd["_children"][i]['材料费'] = clf_sum; qd["_children"][i]['人工费'] = rgf_sum; qd["_children"][i]['主材费'] = zcf_sum; qd["_children"][i]['设备费'] = 0; qd["_children"][i]['机械费'] = jxf_sum; if (oldname.startsWith("D")) {//单项清单 qd["_children"][i]['管理费'] = 0; qd["_children"][i]['利润'] = 0; } else { if (this.qufeiEntry['备注'].length == 0) { //changuiqufei qd["_children"][i]['管理费'] = (rgf_sum + jxf_sum) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (rgf_sum + jxf_sum) * Number(this.qufeiEntry['利润(%)']) / Number(100); } else { qd["_children"][i]['管理费'] = (rgf_sum) * Number(this.qufeiEntry['管理费(%)']) / Number(100); qd["_children"][i]['利润'] = (rgf_sum) * Number(this.qufeiEntry['利润(%)']) / Number(100); } } qd["_children"][i]['综合单价'] = sum + qd["_children"][i]['管理费'] + qd["_children"][i]['利润']; qd["_children"][i]['合价'] = (qd["_children"][i]['综合单价'] * shuliang * desl); qd["_children"][i]["dercj"] = copy(data); qd["_children"][i]['清单编码'] = renameDingE(oldname, xuhao, huan); } } } updateDercj(row, data) { //是否手动设置含量 let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; this.updateFootprint(qd['key']); let bm = de['清单编码']; let alreadyFuzhu = extractFuzhu(bm);//[xuhao] let origin = de['dercj']; let change = false; for(let i = 1; i < data.length; i++) { let before = origin[i][10];//含量 let after = data[i][10]; if (Number(before) - Number(after) < 0.0001 && Number(before) - Number(after) > -0.0001) { //no change } else { change = true; break; } } if (change) { de['fuzhuEnable'] = false; } this.updateDercj_(row, data, alreadyFuzhu, de['yuban'], de['rcjbc']); //let qd = this.cache.filter(x=>x["children"].filter(y=>y['key']==row).length > 0)[0]; let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return copy(this.cache); } updateDercj_djcs(row, data) { //是否手动设置含量 let qd = this.cache_djcs.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; let bm = de['清单编码']; let alreadyFuzhu = extractFuzhu(bm);//[xuhao] let origin = de['dercj']; let change = false; for(let i = 1; i < data.length; i++) { let before = origin[i][10]; let after = data[i][10]; if (Number(before) - Number(after) < 0.0001 && Number(before) - Number(after) > -0.0001) { //no change } else { change = true; break; } } if (change) { de['fuzhuEnable'] = false; } this.updateDercj_djcs_(row, data, alreadyFuzhu); //let qd = this.cache.filter(x=>x["children"].filter(y=>y['key']==row).length > 0)[0]; let newData = this.cache_djcs.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize_djcs(newData); this.push_op_djcs(summarized); ///////////////// this.cache_djcs = copy(summarized); return copy(this.cache_djcs); } updateBeizhu(row, selected, xuhao) {//xuhao is for rename let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; if (!qd) return [null, null]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; if (de.hasOwnProperty("rcjdg")) {//底稿 } else {///老数据不能有底稿,附注功能也不使能 //de['rcjdg'] = copy(de['dercj']); } de['fuzhu'] = copy(selected); this.updateDercj_(row, de['dercj'], xuhao, de['yuban'], de['rcjbc']); let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return [copy(this.cache), copy(de['dercj'])]; } updateBeizhu_djcs(row, selected, xuhao) {//xuhao is for rename let qd = this.cache_djcs.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; if (!qd) return [null, null]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; if (de.hasOwnProperty("rcjdg")) {//底稿 } else {///老数据不能有底稿,附注功能也不使能 //de['rcjdg'] = copy(de['dercj']); } de['fuzhu'] = copy(selected); this.updateDercj_djcs_(row, de['dercj'], xuhao); let newData = this.cache_djcs.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize_djcs(newData); this.push_op_djcs(summarized); ///////////////// this.cache_djcs = copy(summarized); return [copy(this.cache_djcs), copy(de['dercj'])]; } huan(old_index, new_bianhao, new_name, new_jia, zhuanye, row) { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; let rcj = copy(de['dercj']); /* let dg = copy(de['rcjdg']); if (dg == null && dg.length == 0) { } else { let children = []; for(let i = 1; i < dg.length; i++) { if (dg[i][16] == rcj[old_index][16]) { if (dg[i][20].length > 0) { children = dg[i][20]; } } } let newdg = dg.filter(x=>!children.includes(x['16'])); let added = addChildren(zhuanye, new_bianhao, rcj[old_index][10], rcj[old_index][16]); if (added.length == 0) { for(let i = 1; i < newdg.length; i++) { if (newdg[i][16] == rcj[old_index][16]) { newdg[i][18] = 'false'; } } } else { let childid = []; for(let i = 0; i < added.length; i++) { newdg.push(added[i]); childid.push(added[i][16]); } for(let i = 1; i < newdg.length; i++) { if (newdg[i][16] == rcj[old_index][16]) { newdg[i][20] = childid; } } } de['rcjdg'] = newdg; }*/ rcj[old_index][1] = new_bianhao; rcj[old_index][2] = new_name; rcj[old_index][5] = new_jia; return this.updateDercj(row, rcj); } updateShuliang(value, row) { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; let origin = de['数量'] if (Number(origin) - Number(value) < 0.0001 && Number(origin) - Number(value) > -0.0001) { return [false, null]; } console.log("shuliang update"); de['数量'] = value; de['合价'] = Number(qd['数量']) * Number(de['综合单价']) * Number(de['数量']); let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return [true, copy(this.cache)]; } updateDeMingcheng(value, row) { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; de['名称'] = value; let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return copy(this.cache); } updateShuliang_djcs(value, row) { let qd = this.cache_djcs.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; let de = qd["_children"].filter(x=>x['key'] == row)[0]; let origin = de['数量'] if (Number(origin) - Number(value) < 0.0001 && Number(origin) - Number(value) > -0.0001) { return [false, null]; } console.log("shuliang update"); de['数量'] = value; de['合价'] = Number(qd['数量']) * Number(de['综合单价']) * Number(de['数量']); let newData = this.cache_djcs.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize_djcs(newData); this.push_op_djcs(summarized); ///////////////// this.cache_djcs = copy(summarized); return [true, copy(this.cache_djcs)]; } azfy_djcs_eligible(selectedRow) { if (this.cache_djcs.filter(x=>x['key'] == selectedRow).length > 0) { return true; } else { return false; } } azfy_djcs(row, dinge, selected) { let res = JSON.parse(dinge); let keys = Object.keys(res['DEBH']); let key = keys[0]; let tips = azfy(res['DEBH'][key], res['GCLMC'][key]); if (tips != null) { res['rgde'] = tips['rgde']; res['clde'] = tips['clde']; res['jxde'] = tips['jxde']; res['azfytag'] = tips['azfytag']; } let qd = this.cache_djcs.filter(x=>x['key'] == row)[0]; let dercj = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志", 'key', 'bc' ]]; for(let i = 0; i < selected.length; i++) { let rgf = selected[i]['人工费']; let clf = selected[i]['材料费']; let jxf = selected[i]['机械费']; let sl = selected[i]['数量']; if (res['azfytag'][0] == '人工费') { let sum = Number(sl) * Number(rgf) * Number(res['azfytag'][1]) / Number(100); dercj.push(['', res['rgde'][0]['CLBH'], res['rgde'][0]['CLMC'], '', '元', '1', '', '', '1', '', Number(sum) * Number(res['azfytag'][2]) / Number(100), Number(sum) * Number(res['azfytag'][2]) / Number(100), '', '', '', '', '', '' ]); dercj.push(['', res['clde'][0]['CLBH'], res['clde'][0]['CLMC'], '', '元', '1', '', '', '2', '', Number(sum) * Number(res['azfytag'][3]) / Number(100), Number(sum) * Number(res['azfytag'][3]) / Number(100), '', '', '', '', '', '' ]); dercj.push(['', res['jxde'][0]['jxbh'], res['jxde'][0]['jxmc'], '', '元', '1', '', '', '3', '', Number(sum) * Number(res['azfytag'][4]) / Number(100), Number(sum) * Number(res['azfytag'][4]) / Number(100), '', '', '', '', '', '' ]); } else if (res['azfytag'][0] == '人工费+机械费') { let sum = Number(sl) * (Number(jxf) + Number(rgf)) * Number(res['azfytag'][1]) / Number(100); dercj.push(['', res['rgde'][0]['CLBH'], res['rgde'][0]['CLMC'], '', '元', '1', '', '', '1', '', Number(sum) * Number(res['azfytag'][2]) / Number(100), Number(sum) * Number(res['azfytag'][2]) / Number(100), '', '', '', '', '', '' ]); dercj.push(['', res['clde'][0]['CLBH'], res['clde'][0]['CLMC'], '', '元', '1', '', '', '2', '', Number(sum) * Number(res['azfytag'][3]) / Number(100), Number(sum) * Number(res['azfytag'][3]) / Number(100), '', '', '', '', '', '' ]); dercj.push(['', res['jxde'][0]['jxbh'], res['jxde'][0]['jxmc'], '', '元', '1', '', '', '3', '', Number(sum) * Number(res['azfytag'][4]) / Number(100), Number(sum) * Number(res['azfytag'][4]) / Number(100), '', '', '', '', '', '' ]); } } let newKey = uuidv4(); if (!qd.hasOwnProperty('_children')) { qd["_children"] = []; } qd["_children"].push({ '操作': '', '序号': null, '清单编码': res['DEBH'][key], '名称': res['GCLMC'][key], '项目特征': null, '计算规则': tips != null ? tips['sm'] : '', '单位': res['DW'][key], '数量': '1', '综合单价': '0', '合价': '0', '人工费': '0', '主材费': '0', '设备费': '0', '辅材费': '0', '材料费': '0', '机械费': '0', '管理费': '0', '利润': '0', '暂估价': null, '综合人工工日': null, '备注': null, "dercj": dercj, 'rcjdg': dercj.map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17], 'false', [], []]), 'key' : newKey, "fuzhuEnable": false, 'yuban': [], 'rcjbc': [], 'azfytag': [] }); this.updateDercj_djcs_(newKey, dercj, []); let summarized = this.summarize_djcs(this.cache_djcs); this.push_op_djcs(copy(summarized)); this.cache_djcs = copy(summarized); return [true, copy(this.cache_djcs), newKey]; } changguidinge_djcs(dingeclick, row) { if (this.cache_djcs.filter(x=>x['key'] == row).length > 0) { let res =dingeclick; let keys = Object.keys(res['DEBH']); let key = keys[0]; //console.log(res); let qd = this.cache_djcs.filter(x=>x['key'] == row)[0]; let dercj = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志", "key", 'bc', "hidden", "parent", "children" ]]; for(let i = 0; i < res['rgde'].length; i++) { dercj.push(['', res['rgde'][i]['CLBH'], res['rgde'][i]['CLMC'], '', res['rgde'][i]['JLDW'], res['rgde'][i]['YSJG'], '', '', '1', '', res['rgde'][i]['gr'], res['rgde'][i]['gf'], '', '', '', '', uuidv4(), "false",'false', [], [] ]); } for(let i = 0; i < res['clde'].length; i++) { let hit = false; let jg = null; let bh = res['clde'][i]['CLBH']; for(let j = 0; j < this.jiagongcai.length; j++) { if (this.jiagongcai[j]['材料编号'] == bh) { hit = true; jg = this.jiagongcai[j]['单价']; } } if (hit) { dercj.push(['', res['clde'][i]['CLBH'], res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], jg, '', '', '2', 'true', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', uuidv4(), 'false','false', [], [] ]); } else { if (res['clde'][i].hasOwnProperty('children')) { let parent = uuidv4(); let children = []; let child_data = res['clde'][i]['children']; for(let j = 0; j < child_data.length; j++) { let id = uuidv4(); children.push(id); dercj.push(['', child_data[j]['CLBH'], child_data[j]['CLMC'], '', child_data[j]['JLDW'], child_data[j]['YSJG'], '', '', '2', 'false', child_data[j]['SL'], child_data[j]['HJ'], '', '', '', '', id, 'false','false', [parent], [] ]); } dercj.push(['', res['clde'][i]['CLBH'], res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], res['clde'][i]['YSJG'], '', '', '2', 'false', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', parent, 'false','true', [], children ]); } else { dercj.push(['', res['clde'][i]['CLBH'], res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], res['clde'][i]['YSJG'], '', '', '2', 'false', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', uuidv4(), 'false','false', [], [] ]); } } } for(let i = 0; i < res['jxde'].length; i++) { dercj.push(['', res['jxde'][i]['jxbh'], res['jxde'][i]['jxmc'], '', res['jxde'][i]['DW'], res['jxde'][i]['tbdj'], '', '', '3', '', res['jxde'][i]['sl'], res['jxde'][i]['hj'], '', '', '', '',uuidv4(), 'false','false', [], [] ]); } let newKey = uuidv4(); if (!qd.hasOwnProperty('_children')) { qd["_children"] = []; } let newdercj = copy(dercj).filter(x=>x[17]!='true').map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17]]); qd["_children"].push({ '操作': '', '序号': null, '清单编码': res['DEBH'][key], '名称': res['GCLMC'][key], '项目特征': null, '计算规则': null, '单位': res['DW'][key], '数量': '1', '综合单价': '0', '合价': '0', '人工费': '0', '主材费': '0', '设备费': '0', '辅材费': '0', '材料费': '0', '机械费': '0', '管理费': '0', '利润': '0', '暂估价': null, '综合人工工日': null, '备注': null, "dercj": newdercj, 'rcjdg': dercj, 'key' : newKey, "fuzhuEnable": true }); this.updateDercj_djcs_(newKey, newdercj, []); let summarized = this.summarize_djcs(this.cache_djcs); this.push_op_djcs(copy(summarized)); ///////////////// this.cache_djcs = copy(summarized); //return copy(this.cache); return [true, copy(this.cache_djcs), newKey]; } else { return [false, null, null]; } } changguidinge(dingeclick, row) { if (this.cache.filter(x=>x['key'] == row).length > 0) { this.updateFootprint(row); let res = copy(dingeclick); let keys = Object.keys(res['DEBH']); let key = keys[0]; let tips = azfy(res['DEBH'][key], res['GCLMC'][key]); if (tips != null) { res['rgde'] = tips['rgde']; res['clde'] = tips['clde']; res['jxde'] = tips['jxde']; } let qd = this.cache.filter(x=>x['key'] == row)[0]; let dercj = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志", 'key', 'bc', 'hidden', 'parent', 'children' ]]; for(let i = 0; i < res['rgde'].length; i++) { dercj.push(['', res['rgde'][i]['CLBH'], res['rgde'][i]['CLMC'], '', res['rgde'][i]['JLDW'], res['rgde'][i]['YSJG'], '', '', '1', '', res['rgde'][i]['gr'], res['rgde'][i]['gf'], '', '', '', '', uuidv4(), 'false','false', [],[] ]); } for(let i = 0; i < res['clde'].length; i++) { let hit = false; let jg = null; let bh = res['clde'][i]['CLBH']; for(let j = 0; j < this.jiagongcai.length; j++) { if (this.jiagongcai[j]['材料编号'] == bh) { hit = true; jg = this.jiagongcai[j]['单价']; } } if (hit) { dercj.push(['', res['clde'][i]['CLBH'], res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], jg, '', '', '2', 'true', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', uuidv4(), 'false','false', [], [] ]); } else { if (res['clde'][i].hasOwnProperty('children') && res['clde'][i]['CLMC'].includes('砂浆')) { let parent = uuidv4(); let children = []; let child_data = res['clde'][i]['children']; for(let j = 0; j < child_data.length; j++) { let id = uuidv4(); children.push(id); dercj.push(['', child_data[j]['CLBH'], child_data[j]['CLMC'], '', child_data[j]['JLDW'], child_data[j]['YSJG'], '', '', '2', 'false', child_data[j]['SL'], child_data[j]['HJ'], '', '', '', '', id, 'false','false', [parent], [] ]); } dercj.push(['', res['clde'][i]['CLBH'].toString(), res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], res['clde'][i]['YSJG'], '', '', '2', 'false', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', parent, 'false','true', [], children ]); } else { dercj.push(['', res['clde'][i]['CLBH'].toString(), res['clde'][i]['CLMC'], '', res['clde'][i]['JLDW'], res['clde'][i]['YSJG'], '', '', '2', 'false', res['clde'][i]['SL'], res['clde'][i]['HJ'], '', '', '', '', uuidv4(), 'false','false', [], [] ]); } } } for(let i = 0; i < res['jxde'].length; i++) { dercj.push(['', res['jxde'][i]['jxbh'], res['jxde'][i]['jxmc'], '', res['jxde'][i]['DW'], res['jxde'][i]['tbdj'], '', '', '3', '', res['jxde'][i]['sl'], res['jxde'][i]['hj'], '', '', '', '', uuidv4(), 'false','false', [], [] ]); } let newKey = uuidv4(); if (!qd.hasOwnProperty('_children')) { qd["_children"] = []; } let newdercj = copy(dercj).filter(x=>x[18]!='true').map(x=>[x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16], x[17]]); qd["_children"].push({ '操作': '', '序号': null, '清单编码': res['DEBH'][key], '名称': res['GCLMC'][key], '项目特征': null, '计算规则': tips != null ? tips['sm'] : '', '单位': res['DW'][key], '数量': '1', '综合单价': '0', '合价': '0', '人工费': '0', '主材费': '0', '设备费': '0', '辅材费': '0', '材料费': '0', '机械费': '0', '管理费': '0', '利润': '0', '暂估价': null, '综合人工工日': null, '备注': null, "dercj": newdercj, 'rcjdg': (dercj), 'key' : newKey, "fuzhuEnable": true, 'yuban': [], 'rcjbc': [], 'azfytag': tips != null ? tips['azfytag'] : [] }); this.updateDercj_(newKey, dercj, [], [], []); let summarized = this.summarize(this.cache); this.push_op(copy(summarized)); ///////////////// this.cache = copy(summarized); //return copy(this.cache); return [true, copy(this.cache), newKey]; } else { return [false, null, null]; } } danxiangdinge(row) { let bh = danxiangdinge_index(this.cache); if (this.cache.filter(x=>x['key'] == row).length > 0) { this.updateFootprint(row); let selected = this.cache.filter(x=>x['key'] == row)[0]; let danwei = selected["单位"]; let mingcheng = selected['名称']; let children = selected["_children"]; children.push({ '操作': '', '序号': null, '清单编码': bh, '名称': mingcheng, '项目特征': null, '计算规则': null, '单位': danwei, '数量': '1', '综合单价': '', '合价': '', '人工费': '0', '主材费': '0', '设备费': '0', '辅材费': '', '材料费': '', '机械费': '0', '管理费': '0', '利润': '0', '暂估价': null, '综合人工工日': null, '备注': null, "dercj": [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志", 'key', 'bc' ], ['', bh, mingcheng, '', danwei, '', '', '', '2', '', '1', '', '', '', '', '', '', '' ] ], 'key' : uuidv4(), "fuzhuEnable": false, 'yuban': [], 'rcjbc' : [], 'azfytag': [] }); let summarized = this.summarize(this.cache); this.push_op(summarized); this.cache = copy(summarized); return [true, copy(this.cache)]; } else { return [false,null]; } } danxiangdinge_djcs(row) { let bh = danxiangdinge_index_djcs(this.cache_djcs); if (this.cache_djcs.filter(x=>x['key'] == row).length > 0) { let selected = this.cache_djcs.filter(x=>x['key'] == row)[0]; let danwei = selected["单位"]; let mingcheng = selected['名称']; let children = selected["_children"]; children.push({ '序号': null, '清单编码': bh, '名称': mingcheng, '项目特征': null, '计算规则': null, '单位': danwei, '数量': '1', '综合单价': '', '合价': '', '人工费': '0', '主材费': '0', '设备费': '0', '辅材费': '', '材料费': '', '机械费': '0', '管理费': '0', '利润': '0', '暂估价': null, '综合人工工日': null, '备注': null, "dercj": [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志", "key" , "bc" ], ['', bh, mingcheng, '', danwei, '', '', '', '2', '', '1', '', '', '', '', '', "", "" ] ], 'key' : uuidv4(), "fuzhuEnable": false }); let summarized = this.summarize_djcs(this.cache_djcs); this.push_op_djcs(summarized); this.cache_djcs = copy(summarized); return [true, copy(this.cache_djcs)]; } else { return [false,null]; } } handleYuban(row, selected) { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; if (!qd) return [null, null]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; let bm = de['清单编码']; let alreadyFuzhu = extractFuzhu(bm);//[xuhao] if (de.hasOwnProperty("rcjdg")) {//底稿 } else {///老数据不能有底稿,附注功能也不使能,预拌也不能使 //de['rcjdg'] = copy(de['dercj']); } de['yuban'] = copy(selected); this.updateDercj_(row, de['dercj'], alreadyFuzhu, selected, de['rcjbc']); let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return [copy(this.cache), copy(de['dercj'])]; } handleRcjbc(row, rcjbc) { let qd = this.cache.filter(x=>x["_children"].filter(y=>y['key']==row).length > 0)[0]; if (!qd) return [null, null]; this.updateFootprint(qd['key']); let de = qd["_children"].filter(x=>x['key'] == row)[0]; let bm = de['清单编码']; let alreadyFuzhu = extractFuzhu(bm);//[xuhao] if (de.hasOwnProperty("rcjdg")) {//底稿 } else {///老数据不能有底稿,附注功能也不使能,预拌也不能使 //de['rcjdg'] = copy(de['dercj']); } de['rcjbc'] = copy(rcjbc); this.updateDercj_(row, de['dercj'], alreadyFuzhu, de['yuban'], rcjbc); let newData = this.cache.map(x=>{ if (x['key'] == qd['key']) { return qd; } else { return x; } }); let summarized = this.summarize(newData); this.push_op(summarized); ///////////////// this.cache = copy(summarized); return [copy(this.cache), copy(de['dercj'])]; } } export default new Service();