/** * workbook 保存操作 */ import { $CONST } from "@birt/funclib/ConstUtil"; export default { data() { return { }; }, computed: { // 请求类 axios() { debugger return this.conf.axios || (this.$HI && this.$HI[$CONST.HIREQUEST]); }, // 流程或功能模型路径 modelPath() { return this.conf.modelPath; }, // 保存路径 saveUrl() { debugger let saveUrl = this.conf.saveUrl || (this.$HI && this.$HI[$CONST.HIURLSAVE]); if (this.modelPath && !saveUrl.endsWith(this.modelPath)) { saveUrl += this.modelPath; } return saveUrl }, // 保存自定义方法 saveMethod() { if (this.conf.saveMethod) { return this.conf.saveMethod; } else if (this.axios && this.saveUrl) { return this._defaultSaveMethod; } }, // 删除自定义方法 deleteMethod() { if (this.conf.deleteMethod) { return this.conf.deleteMethod; } else if (this.axios && this.saveUrl) { return this._defaultDeleteMethod; } }, // 保存成功自定义回调 saveSucced() { return this.conf.saveSucced; } }, methods: { // 默认数据保存方法 _defaultSaveMethod(stores, option, saveSucc) { let saveData = this._getSaveData(stores); this.axios.post(this.saveUrl, { __body: JSON.stringify(saveData) }).then((res) => { // 保存成功回调 saveSucc && saveSucc.call(stores, saveData, res); }); }, // 默认数据删除方法 _defaultDeleteMethod(stores, option, deleteSucc) { let deleteData = this._getDeleteData(stores); this.axios.post(this.saveUrl, { __body: JSON.stringify(deleteData) }).then((res) => { // 保存成功回调 deleteSucc && deleteSucc.call(stores, deleteData, res); }); }, // 保存成功后续处理 _afterSaveSucced(stores, saveSucced, saveData, response, message) { if (saveSucced) { saveSucced.call(this, saveData, response); } if (this.saveSucced) { this.saveSucced.call(this, saveData, response); } stores.forEach((ds) => { ds.saveSuccessed(response); }); this.$message({ message: message || "保存成功", type: "success", }); }, // 调用数据集保存验证 _saveValidate() { for (let dsId in this.dataset) { let ds = this.dataset[dsId]; let validateInfo = ds.validate(); if (!validateInfo.canSave) { if (validateInfo.message) { this.$message({ message: validateInfo.message, type: "warning", }); } return false; } } return true; }, // 获取保存数据包 _getSaveData(stores) { let saveData = []; stores.forEach((ds) => { let mpath = ds.getModelFilePath(); let data = ds.getDirtyData(); if (mpath && data.length > 0) { saveData.push({ modelFilePath: mpath, data: data }); } }); return saveData; }, // 获取删除数据包 _getDeleteData(stores) { let deleteData = []; stores.forEach((ds) => { let mpath = ds.getModelFilePath(); let data = ds.getDeleteData(); if (mpath && data.length > 0) { deleteData.push({ modelFilePath: mpath, data: data }); } }); return deleteData; }, // 调用所有数据集保存 save(option, saveSucced) { if (this.saveMethod) { if (!this._saveValidate()) return; let stores = this.getStores(); this.saveMethod.call(this, stores, option, (saveData, response) => { this._afterSaveSucced(stores, saveSucced, saveData, response); }); } else { console.error("workbook.saveMethod 保存方法未定义.") } }, // 取消数据修改 cancel() { this.getStores().forEach((ds) => { // 调用 取消会出现同步锁 // ds.cancel(); ds.remove(ds.getDirtyData()); }); }, // 彻底删除数据 delete(option, deleteSucced) { if (this.deleteMethod) { let stores = this.getStores(); this.deleteMethod.call(this, stores, option, (deleteData, response) => { this._afterSaveSucced(stores, deleteSucced, deleteData, response, "删除成功"); }); } else { console.error("workbook.deleteMethod 删除方法未定义.") } } } }