// INTERFACE_EXPORT =,必须这么写,这样才能在导出时动态加载脚本后,覆盖前端代码 INTERFACE_EXPORT = (() => { 'use strict'; const feeRateMap = { '冬季施工增加费': 'DJSGZJFFL', '雨季施工增加费': 'YUJSGZJFFL', '夜间施工增加费': 'YEJSGZJFFL', '高原地区施工增加费': 'GYDQSGZJFFL', '风沙地区施工增加费': 'FSDQSGZJFFL', '沿海地区施工增加费': 'YHDQSGZJFFL', '行车干扰施工增加费': 'XCGRGCSGZJFFL', '工地转移费': 'GDZYFFL', '施工辅助费': 'SGFZFFL', '基本费用': 'JBFYFL', '主副食运费补贴': 'ZFSYFBTFL', '职工探亲费': 'ZGTQLFFL', '职工取暖费': 'ZGQNBTFL', '财务费用': 'CWFYFL', '养老保险费': 'YANGLBXFFL', '失业保险费': 'SYBXFFL', '医疗保险费': 'YILBXFFL', '工伤保险费': 'GSBXFL', '住房公积金': 'ZFGJJFL', '土方': 'TF', '石方': 'SF', '运输': 'YS', '路面': 'LM', '路面(不计雨)': 'LM', '隧道': 'SD', '构造物I': 'GZW1', '构造物I(不计冬)': 'GZW1', '构造物I(不计雨)': 'GZW1', '构造物II': 'GZW2', '构造物III(桥梁)': 'GZW3', '构造物III(除桥以外)': 'GZW3', '构造物III(除桥以外不计雨夜)': 'GZW3', '技术复杂大桥': 'JSFZDQ', '钢材及钢结构(桥梁)': 'GJG', '钢材及钢结构(除桥以外)': 'GJG', '钢材及钢结构(除桥以外不计夜)': 'GJG' } /** * * @param {String} areaKey - 地区标识,如:'安徽@马鞍山',有些地区的接口只是取值上有不同,共有一个接口脚本, 需要通过地区标识确定一些特殊处理 * @param {Number} exportKind - 导出类型,招标、投标、控制价 * @param {Object} projectData - 项目表数据:{ 建设项目Data, children: [单位工程...] } * @param {Object} tenderDetailMap - 单位工程ID与getData接口数据(projectObj.project的结构)的映射。 * @return {Promise} - 返回的数据结构必须按照规定:[{ data, exportKind, fileName }],参考web\building_saas\standard_interface\index.js中的注释说明 */ async function entry(areaKey, exportKind, projectData, tenderDetailMap) { const { UTIL, Element, } = INTERFACE_EXPORT_BASE; const { EXPORT_KIND: { BID_INVITATION, BID_SUBMISSION, CONTROL }, fixedFlag, } = window.commonConstants let cprjType = { 1: 'ZBKZJ', // 招标 2: 'TBBJ', // 投标 3: 'GCLQD' // 控制价 } const isBidInvitation = exportKind === BID_INVITATION; // 是否是招标 const isBidSubmission = exportKind === BID_SUBMISSION; // 是否是投标 const isControl = exportKind === CONTROL; // 是否是控制价 // 建设项目根节点信息 function CprjInfo(projectName) { const attrs = [{ name: 'CprjName', value: projectName }, { name: 'CprjType', value: cprjType[exportKind] }]; Element.call(this, 'CprjInfo', attrs); } // 项目基本信息 function SystemInfo(projectData) { let hardID = UTIL.generateHardwareId(); let [cpuId, diskId, macId] = hardID.split(';'); const attrs = [{ name: 'Name', value: '公路工程造价数据标准' }, { name: 'Version', value: '1.0' }, { name: 'SoftwareName', value: '纵横公路云造价' }, { name: 'SoftwareVer', value: VERSION }, { name: 'SoftwareCompany', value: '珠海纵横创新软件有限公司' }, { name: 'MakeDate', value: '' }, { name: 'Key1', value: window.btoa(VERSION) }, { name: 'Key2', value: window.btoa(diskId) }, { name: 'Key3', value: window.btoa(macId) } ]; if (isBidSubmission) attrs.splice(6, 0, { name: 'BidderVer', value: '' }) Element.call(this, 'SystemInfo', attrs); } //造价依据 function CostBasis() { // ItemStandardNo="GYSFX-000000-2018-86" const attrs = [{ name: 'MakeRuleNo', value: 'GYSBB-000000-2018-86' }, { name: 'MakeRuleName', value: '公路工程建设项目概算预算编制办法' }, { name: 'ItemStandardNo', value: 'GYSFX-000000-2018-86' }]; Element.call(this, 'CostBasis', attrs); //定额库信息 //to do 改成实际的值 function NormLib() { const attrs = [{ name: 'NormLibNo', value: '0' }, { name: 'NormLibName', value: '部颁公路工程预算定额(2018)' }, { name: 'Type', value: 'ZDEK' }]; Element.call(this, 'NormLib', attrs); } this.children.push(new NormLib()); } function Rate(feeRateInfo) { //RateNo="1" Name="纵横软件测试版本" RateLibNo="GYSFL-000000-2018-86" const attrs = [{ name: 'RateNo', value: feeRateInfo.ID }, { name: 'Name', value: feeRateInfo.name }, { name: 'RateLibNo', value: feeRateInfo.libID }]; Element.call(this, 'Rate', attrs); let RateParams = { name: 'RateParams', attrs: [], children: [] } RateParams.children.push(new RateParam()); this.children.push(RateParams); function RateParam() { // const attrs = [{ name: 'RateTypeNo', value: 'DJSGZJFFL' }, { name: 'RateParamNo', value: '0' }, { name: 'Ratio', value: '100' }]; Element.call(this, 'RateParam', attrs); } let RateValues = { name: 'RateValues', attrs: [], children: [] } function RateValue(CostTypeNo, RateTypeNo) { // const attrs = [{ name: 'CostTypeNo', value: CostTypeNo }, { name: 'RateTypeNo', value: RateTypeNo }, { name: 'RateValue', value: '0' }]; Element.call(this, 'RateValue', attrs); } let prefix = ""; for (let r of feeRateInfo.rates) { if (!r.ParentID && feeRateMap[r.name]) prefix = feeRateMap[r.name]; if (feeRateMap[r.name] && r.ParentID) { RateValues.children.push(new RateValue(prefix, feeRateMap[r.name])); } } this.children.push(RateValues); } function Pract(fileName) { // const attrs = [{ name: 'PractNo', value: 1 }, { name: 'Name', value: fileName }]; Element.call(this, 'Pract', attrs); } let data = new CprjInfo(projectData.name); data.children.push(new SystemInfo()); data.children.push(new CostBasis()); let tenderProject = tenderDetailMap[projectObj.project.ID()]; let feeRataDatas = tenderProject.FeeRate.datas; data.children.push(new Rate(feeRataDatas)); let property = tenderProject return [{ data: data, exportKind: exportKind, fileName: projectData.name + INTERFACE_CONFIG[areaKey]['fileSuffix'][exportKind] }] } return { entry }; })();