import { DataSourceFactory } from "zhc-birt-core";
// import DataSourceFactory from "@birt/components/DataSource/DataSourceFactory";
export default {
data() {
return {
dataset: {},
};
},
provide() {
return { dataset: this.dataset };
},
computed: {
// 获取数据集请求地址,从this.$HCBIRT.loadUrl
loadUrl() {
return this.conf.loadUrl || "/data/querys";
}
},
methods: {
// 判断workbook表单是否有修改
isDirty() {
for (let dsId in this.dataset) {
let dsInsc = this.dataset[dsId];
if (dsInsc && dsInsc.isDirty && dsInsc.isDirty()) {
return true;
}
}
return false;
},
// 初始化工作表数据集
_initDataSets(dataSets) {
if (dataSets) {
let newStores = [];
let me = this;
dataSets.forEach((ds, i) => {
if (!me.dataset[ds.controlId]) {
debugger
me.dataset[ds.controlId] = this._createDataSetInsc(ds);
me.dataset[ds.controlId].$i = i;
newStores.push(ds.controlId);
}
});
this._setSlaveDatasetInsc();
this._applyPushParam(this.param, newStores);
}
},
// 获取从表数据集实例
_getSlaveDataSetInsc(slaveConf) {
if (slaveConf) {
let dsInsc = [];
slaveConf.forEach(sci => {
let dsName = sci.name;
dsInsc = dsInsc.concat(this.getStoreByName(dsName));
})
return dsInsc;
}
},
// 创建数据集实例
_createDataSetInsc(dsConf) {
debugger
let dsInsc = DataSourceFactory.newInstance(
Object.assign(dsConf, { axios: this.axios, saveUrl: this.saveUrl })
);
return dsInsc;
},
// 设置数据集主从关系
_setSlaveDatasetInsc() {
debugger
for (let dsId in this.dataset) {
let dsInsc = this.dataset[dsId];
if (dsInsc.getSlaveDataset) {
let slaveDs = dsInsc.getSlaveDataset()
let slaveDsInsc = this._getSlaveDataSetInsc(slaveDs);
dsInsc.setSlaveDatasetInsc(slaveDsInsc);
}
}
},
// 根据键值获取数据集配置
_getDatasetConf(name, key) {
let isId = (name == "controlId");
let sheets = this.getSheets();
let retuDs = [];
for (let i = 0, l = sheets.length; i < l; i++) {
let sht = sheets[i];
let shtSets = sht.dataSets;
if (shtSets) {
for (let j = 0, m = shtSets.length; j < m; j++) {
let ds = shtSets[j];
if (ds[name] == key) {
if (isId) {
return ds;
} else {
retuDs.push(ds);
}
}
}
}
}
return !isId && retuDs;
},
// 根据数据集Id获取数据集对象实例
getDataSetInstance(datasetId) {
return this.dataset[datasetId];
},
// 获取数据集列表
getStores() {
let stores = [];
for (var dsId in this.dataset) {
stores.push(this.dataset[dsId]);
}
return stores;
},
// 根据数据集id,获取数据集对象
getStore(dsId) {
if (this.dataset[dsId]) {
return this.dataset[dsId];
}
let dsConf = this._getDatasetConf("controlId", dsId);
if (dsConf) {
let dsInsc = this._createDataSetInsc(dsConf);
this.dataset[dsConf.controlId] = dsInsc;
return dsInsc;
}
// this.getSheets().forEach(sheet => {
// sheet.dataSets && sheet.dataSets.forEach(ds => {
// if (ds.controlId == dsId) {
// this.dataset[ds.controlId] = this._createDataSetInsc(ds);
// return ds;
// }
// })
// })
},
// 根据数据name,获取数据集对象
getStoreByName(dsName) {
let dsConf = this._getDatasetConf("name", dsName);
let dsInsc = [];
dsConf.forEach(dsf => {
let di = this.getStore(dsf.controlId);
if (di) {
dsInsc.push(di);
}
})
return dsInsc;
},
// 获取数据集自动接收条件
getReceiveCdions(param, newStores) {
let receiveCdions = [];
for (let dsId in this.dataset) {
// 当有标记新创建数据集时,只有新创建数据集应用下推,避免旧数据集重复应用下推
if (newStores && (newStores.indexOf(dsId) == -1)) continue;
let ds = this.dataset[dsId];
let recvCdion = ds && ds.getReceiveCdion(param);
if (recvCdion) {
let i = ds.$i;
receiveCdions.splice(i, 0, recvCdion);
}
}
return receiveCdions;
}
}
}