ed-frame-vue
Version:
easydata 基础组件
194 lines (181 loc) • 5.96 kB
JavaScript
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
}
}
}