/** * 合并require @birt/数据源,模板/路径... 配置 * @author cls * @date 2021-05-16 * import { MergeRequire } from "@birt/funclib/MergeRequire"; */ import { $CONST } from "@birt/funclib/ConstUtil"; export const MergeRequire = { // 判断是否本地相对src路径 _isLocalUrl(url) { return url && url.startsWith("@"); }, // 获取引用对象 getRequireObj(url) { if (url) { if (this._isLocalUrl(url)) { if (url.startsWith("@birt/datasources/")) { return this.getRequireDataset(...arguments); } else if (url.startsWith("@birt/templates/lookup/")) { return this.getRequireTemplateLookup(...arguments); } else if (url.startsWith("@birt/lookupmodel/")) { return this.getRequireLookModel(...arguments); } } else { // 处理服务端加载配置,待实现 } } else { console.error("require url 引用路径未配置.") } }, /** * 获取引用数据集对象 * * @param {*} url 数据模型路径 */ getRequireDataset(url) { // 判断是否本地引用 url = url.replace($CONST.DATASOURCEROOT, ""); return require("@birt/datasources/" + url).newInstance(); }, /** * 获取引用模板对象 * * @param {*} url 引用对象路径 * @param {*} dataset * @param {*} conf */ getRequireTemplateLookup(url, dataset, conf) { url = url.replace($CONST.LOOKUPROOT, ""); return require("@birt/templates/lookup/" + url).newInstance( dataset, conf ); }, // 获取查找模型配置, 根据模型配置,定义查找页面内容 getRequireLookModel(url, dataset, conf) { url = url.replace($CONST.LOOKMODELROOT, ""); return require("@birt/lookupmodel/" + url).newInstance(conf); }, // 查找报表模板路径 getBirtUrl(lookup) { return lookup[$CONST.BIRTURL]; }, // 目标查找数据集配置 getLookDataset(lookup) { return lookup.lookDataset || {}; }, // 获取目标查找数据集实例 getLookDatasetInsc(lookup) { let lkDataset = this.getLookDataset(lookup); if (lkDataset) { let url = lkDataset.instanceUrl; if (!url) { console.error("查找定义目标数据集 lookDataset 未配置."); } let dsObj = this.getRequireObj(url); if (lkDataset.modelFilePath) { dsObj.modelFilePath = lkDataset.modelFilePath } return dsObj; } }, // 获取查找模型路径 getLookModelUrl(lookup) { return lookup[$CONST.LOOKUPMODEL]; }, // 获取关联字段列表,alias别名字段优先应用 getJoinFields(sourceFields, joinFields) { let retuFields = {}; let jFields = joinFields.split(","); jFields.forEach(f => { let sField = sourceFields[f]; if (sField) { let alias = sField.alias || f; retuFields[alias] = sField; } }); return JSON.parse(JSON.stringify(retuFields)); }, /** * 合并数据集字段引用 * * @param {*} fields 数据字段对象 */ mergeStoreFieldsRequire(fields) { debugger for (let fn in fields) { let fObj = fields[fn]; let lookup = fObj.lookup; if (lookup) { let lkType = lookup.type; if (lkType == $CONST.LOOKUPSYSENUMS) continue; // 获取查找目标数据集实例 let lkDatasetInsc = this.getLookDatasetInsc(lookup); if (lkDatasetInsc) { lookup.lookDataset.insc = lkDatasetInsc; // 获取查找模型引用 lookmodel let lkModelUrl = this.getLookModelUrl(lookup); let lkModel; if (lkModelUrl) { lkModel = this.getRequireObj(lkModelUrl, lkDatasetInsc, lookup); lookup[$CONST.LOOKUPMODELINSC] = lkModel; } // 获取查找页面引用 url let url = this.getBirtUrl(lookup); let lkPage = this.getRequireObj(url, lkDatasetInsc, lkModel || lookup); lookup[$CONST.BIRTMODEL] = lkPage; } } } }, // 根据字段列表获取子字段集合 getSubFields(bizFieds, fieldids) { let fields = fieldids.split(","); let subFields = {}; fields.forEach(f => { subFields[f] = JSON.parse(JSON.stringify(bizFieds[f])); }) return subFields; }, /** * 合并数据集字段 */ getMergeFields(...fields) { let mergeFieds = {}; fields.forEach(f => { Object.assign(mergeFieds, f); }) this.mergeStoreFieldsRequire(mergeFieds); return mergeFieds; } };