UNPKG

ed-frame-vue

Version:

easydata 基础组件

194 lines (181 loc) 5.96 kB
import {convertToViewModel, deepMerge, getVarType} from "../../../utils/utils"; import {postAction} from "../../../api"; import {TempType} from "../../../api/easyData"; /** * 请求 * @param url * @param params * @return {Promise<unknown>} */ export const httpsQueryData = (url, params) => { return new Promise((resolve, reject) => { postAction(url, params).then(res => { if (res.success && res.data) { resolve(res.data) } else { reject(res.message) } }).catch(err => { reject(err.message) }) }) } export default { data() { return { saveData: {}, errorMessage: {}, } }, methods: { // 初始化saveData initSaveData() { let message = {} let data = {} this.modules.map(oneModule => { data[oneModule.id] = {} message[oneModule.id] = {} oneModule.twoModules.map(twoModule => { data[oneModule.id][twoModule.id] = {} message[oneModule.id][twoModule.id] = "" }) }) return { data: deepMerge(data, this.saveData), message } }, /** * @name queryModuleData * @description 查询模块数据 */ queryModuleData: async function () { const {data, message} = this.initSaveData() this.saveData = data this.errorMessage = message let queryUrl = this.moduleInfo.query_url if (queryUrl) { if (Object.keys(this.bizParams).length > 0) { this.loading = true let params = { bizParams: this.bizParams, templateViewModel: convertToViewModel(this.moduleInfo) } if (this.isPageLoad) { params.page = this.current } await this.getQueryData(queryUrl, params) } else { this.$emit('loadOk') } } else { this.$message.error('请设置模板的queryUrl属性') } }, /** * 获取数据 * @param queryUrl * @param params * @return {Promise<unknown>} */ getQueryData(queryUrl, params) { return new Promise((resolve, reject) => { httpsQueryData(queryUrl, params).then(async data => { this.$emit('loadOk') this.loading = false Object.keys(data).map(dataKey => { Object.keys(data[dataKey]).map(async twoDataKey => { let twoData = data[dataKey][twoDataKey] let {twoModule, dataList, message, success} = twoData let moduleData if (this.needReload(dataKey, twoDataKey)) { //当有错误时 if (getVarType(success) === 'undefined' || success !== true) { this.errorMessage[dataKey][twoDataKey] = message ? message : `查询${twoModule.moduleName}数据失败` } //当有自动获取数据时 if (twoModule.dataFrom === "fromInterface" && twoModule.autoQuery && twoModule.autoQuery === 'true') { moduleData = await this.callInterface(twoModule) } else { moduleData = this.toViewModel(dataList) } moduleData.result = {message, success} this.$set(this.saveData[dataKey], twoDataKey, moduleData) } }) }) }) }) }, /** * 查询并更新二级模块数据 * @param oneModuleId * @param module * @return {Promise<void>} */ async getQueryTwoData(oneModuleId, module) { let moduleData = await this.callInterface(module) this.$set(this.saveData[oneModuleId], module.id, moduleData) }, /** * @name callInterface * @param module * @return {Promise<unknown>} */ callInterface(module) { return new Promise(async (resolve) => { let passModuleId = module.passModule?.split(',') || [] if (passModuleId.length > 0) await this.saveOneModule(this.current) let queryUrl = this.moduleInfo.query_module_url if (queryUrl) { try { let saveData = [] if (passModuleId.length > 0) { passModuleId.forEach((passModule) => { let passModuleData = this.saveData[passModule] ? this.saveData[passModule] : {} saveData.push(passModuleData) }) } let params = { bizParams: this.bizParams, templateViewModel: this.moduleInfo, moduleId: module.id, viewModels: saveData } this.btnLoading = true let res = await httpsQueryData(queryUrl, params) if(res){ this.btnLoading = false resolve(this.toViewModel(res.dataList)) } } catch (e) { this.$message.error(e.message) } } else { this.$message.error('请设置模板的queryModuleUrl属性') } }) }, /** * 判断是否需要重新加载后台查询的二级模块数据 (二级模块没有数据 或者二级模块是展示模块) * @param {*} oneModuleId 一级模块ID * @param {*} twoModuleId 二级模块ID */ needReload(oneModuleId, twoModuleId) { const twoModuleData = this.saveData[oneModuleId] ? this.saveData[oneModuleId][twoModuleId] : undefined if (!twoModuleData || Object.keys(twoModuleData).length <= 0) { return true } return this.isViewTempType(oneModuleId, twoModuleId) }, /** * 查询二级模块是视图属性 */ isViewTempType(oneModuleId, twoModuleId) { const twoModuleVue = this.$refs[oneModuleId] ? this.$refs[oneModuleId][0].$refs[twoModuleId] ? this.$refs[oneModuleId][0].$refs[twoModuleId][0] : undefined : undefined if(twoModuleVue) return TempType.view === twoModuleVue.getType() return true } } }