| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- /**
- * Created by zhang on 2019/5/20.
- */
- async function exportSEI(projectID) {
- let tenderProjects = [];
- let result = await ajaxPost("/project/getSEIProjects",{projectID:projectID});
- console.log(result);
- let project = getProject(result);
- prepareTenderDatas(tenderProjects,project);
- toXml(project);
- function getProject(orignal) {//取建设项目信息
- let basicInformation = getBaseInfo(orignal);
- let project = {
- name: "建设项目",
- attrs: [
- {name: "项目名称", value: orignal.name},
- {name:"建设单位",value:getItemValueBykey(basicInformation.items,"constructionUnit")},
- {name:"施工单位",value:getItemValueBykey(basicInformation.items,"buildingUnit")},
- {name: "标准名称", value: "重庆市建设工程造价指标采集标准(清单计价)"},
- {name: "标准版本号", value: "1.1"}
- ],
- basicInformation:basicInformation,
- children:[]
- };
- initAtts(project.attrs);
- for(let c of orignal.children){
- project.children.push(getEngineering(c));
- }
- return project;
- }
- function getEngineering(source){
- let engineer = {
- name:"单项工程",
- attrs:[
- {name: "名称", value: source.name}
- ],
- children:[]
- };
- for(let c of source.children){
- let tenderProject = getTender(c);
- engineer.children.push(tenderProject);
- tenderProjects.push(tenderProject);
- }
- return engineer
- };
- function getTender(source) {
- let tender = {
- ID:source.ID,
- name:"单位工程",
- attrs:[
- {name: "名称", value: source.name}
- ],
- children:[],
- valuationType:source.property.valuationType,
- taxType:source.property.taxType
- };
- return tender;
- }
- function prepareTenderDatas(tenders,project) {
- for(let t of tenders){
- setTenderData(t,project);
- }
- }
- function setTenderData(tender,project) {
- tender.children.push(setEngineerInfo(tender,project));
- }
- function setEngineerInfo(tender,project) {
- let baseInfo = project.basicInformation;
- let calcType ={"bill":"工程量清单计价","ration":"定额计价"};
- let info = {
- name:"工程信息",
- attrs:[
- {name:"造价编制单位",value:getItemValueBykey(baseInfo.items,"establishmentUnit")},
- {name:"造价审核单位",value:getItemValueBykey(baseInfo.items,"auditUnit")},
- {name:"项目负责人",value:""},
- {name:"施工单位编制人员",value:""},
- {name:"编制人员",value:""},
- {name:"审核人员",value:""},
- {name:"开工日期",value:""},
- {name:"竣工日期",value:""},
- {name:"工程地点",value:""},
- {name:"工程类型",value:""},
- {name:"合同价类型",value:""},
- {name:"造价类型",value:""},
- {name:"计价方式及依据",value:calcType[tender.valuationType]},
- {name:"工程类别",value:""},
- {name:"编制日期",value:""},
- {name:"审查日期",value:""}
- ]
- };
- initAtts(info.attrs);
- return info;
- }
- //造价编制单位="" 造价审核单位="" 项目负责人="" 施工单位编制人员="" 编制人员="" 审核人员="" 开工日期="" 竣工日期="" 工程地点="" 工程类型="" 合同价类型="" 造价类型="" 计价方式及依据="" 工程类别="" 编制日期="" 计税方法="一般计税"
- function getBaseInfo(project){
- let basicInformation = {items:[]};
- let tem = null;
- if(project.property&&project.property.basicInformation) tem =_.find(project.property.basicInformation,{"key":"basicInfo"});
- if(tem) basicInformation = tem;
- return basicInformation;
- }
- function getItemValueBykey(items,key) {
- let item = _.find(items,{"key":key});
- if(item) return item.value;
- return ""
- }
- function initAtts(arrs) {
- _.remove(arrs,function (item) {
- return item.required == false && _.isEmpty(item.value)
- })
- }
- //开始标签
- function startTag(ele) {
- let rst = `<${ele.name}`;
- for (let attr of ele.attrs) {
- rst += ` ${attr.name}="${attr.value}"`;
- }
- rst += ele.children&&ele.children.length > 0 ? '>' : '/>';
- return rst;
- }
- //结束标签
- function endTag(ele) {
- return `</${ele.name}>`;
- }
- //拼接成xml字符串
- function toXMLStr(eles) {
- let rst = '';
- for (let ele of eles) {
- rst += startTag(ele);
- if (ele.children&& ele.children.length > 0) {
- rst += toXMLStr(ele.children);
- rst += endTag(ele);
- }
- }
- return rst;
- }
- //格式化xml字符串
- function formatXml(text) {
- //去掉多余的空格
- text = '\n' + text.replace(/>\s*?</g, ">\n<");
- //调整格式
- let rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/mg;
- let nodeStack = [];
- let output = text.replace(rgx, function($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2){
- let isClosed = (isCloseFull1 === '/') || (isCloseFull2 === '/' ) || (isFull1 === '/') || (isFull2 === '/');
- let prefix = '';
- if (isBegin === '!') {
- prefix = getPrefix(nodeStack.length);
- } else {
- if (isBegin !== '/') {
- prefix = getPrefix(nodeStack.length);
- if (!isClosed) {
- nodeStack.push(name);
- }
- } else {
- nodeStack.pop();
- prefix = getPrefix(nodeStack.length);
- }
- }
- let ret = '\n' + prefix + all;
- return ret;
- });
- let outputText = output.substring(1);
- return outputText;
- function getPrefix(prefixIndex) {
- let span = ' ';
- let output = [];
- for (let i = 0 ; i < prefixIndex; ++i) {
- output.push(span);
- }
- return output.join('');
- }
- }
- /*
- * 导出数据
- * @param {Number}tenderID(当前界面的单位工程ID,后台根据这个单位工程,根据导出粒度去找其建设项目下相关数据)
- * @return {void}
- * */
- function toXml(eleData) {
- //转换成xml字符串
- let xmlStr = toXMLStr([eleData]);
- //加上xml声明
- xmlStr = `<?xml version="1.0" encoding="utf-8"?>${xmlStr}`;
- //格式化
- xmlStr = formatXml(xmlStr);
- let blob = new Blob([xmlStr], {type: 'text/plain;charset=utf-8'});
- saveAs(blob, '经济指标.ZBF');
- }
- }
|