Commit a594c45c authored by leon's avatar leon

fix: index page to detail page component error

parent 3641660f
...@@ -96,6 +96,9 @@ ...@@ -96,6 +96,9 @@
// 等待子组件完全挂载完成---chart初始化完成 // 等待子组件完全挂载完成---chart初始化完成
this.$nextTick().then(() => { this.$nextTick().then(() => {
const { categories, series } = this.elementData.dataList const { categories, series } = this.elementData.dataList
if(!categories) {
return
}
var count = categories.length var count = categories.length
if(this.labelShow) { if(this.labelShow) {
// 处理初始状态时,数值显示的数量是否超过了配置的最大值 // 处理初始状态时,数值显示的数量是否超过了配置的最大值
......
...@@ -113,8 +113,8 @@ ...@@ -113,8 +113,8 @@
}) })
}, },
destroyed() { destroyed() {
if(elementInfo && elementInfo.id) { if(this.elementInfo && this.elementInfo.id) {
uni.$off(elementInfo.id) uni.$off(this.elementInfo.id)
} }
}, },
methods: { methods: {
......
...@@ -126,7 +126,7 @@ export default { ...@@ -126,7 +126,7 @@ export default {
handler(newVal) { handler(newVal) {
const that = this const that = this
const storageData = uni.getStorageSync(this.elementInfo.id) const storageData = uni.getStorageSync(this.elementInfo.id)
if(storageData && newVal.dataType !== 'static') { if(storageData && JSON.stringify(storageData) != "{}" && newVal.dataType !== 'static') {
this.elementData.dataList = JSON.parse(storageData) this.elementData.dataList = JSON.parse(storageData)
} }
if(that.elementInfo.hide) return false if(that.elementInfo.hide) return false
...@@ -142,7 +142,9 @@ export default { ...@@ -142,7 +142,9 @@ export default {
clearInterval(that.timer) clearInterval(that.timer)
} }
} else if (newVal.dataType === 'public') { } else if (newVal.dataType === 'public') {
if(that.vuex_globalData && that.vuex_globalData.elements.includes(that.elementInfo.id)) {
that.handlePublicData(newVal) that.handlePublicData(newVal)
}
} else if (newVal.dataType === 'dataSet') { } else if (newVal.dataType === 'dataSet') {
that.handleDataSet(newVal) that.handleDataSet(newVal)
if (newVal.dataPolling && newVal.dataPollingInterval > 0) { if (newVal.dataPolling && newVal.dataPollingInterval > 0) {
...@@ -169,13 +171,21 @@ export default { ...@@ -169,13 +171,21 @@ export default {
/** /**
* 全局数据更新监测 * 全局数据更新监测
*/ */
'vuex_globalData' () { 'vuex_globalData' (newVal) {
if (this.elementInfo.data.dataType === 'public') this.handlePublicData(this.elementInfo.data) const elements = newVal.elements
/* elements.includes(this.elementInfo.id) 全局数据对应的elements包含当前的element id,
否则在切换页面的时候,被切换页面的全局组件也会再次请求,导致报错
*/
if (elements.includes(this.elementInfo.id) && this.elementInfo.data.dataType === 'public') {
this.handlePublicData(this.elementInfo.data)
}
}, },
'elementData.dataList': { 'elementData.dataList': {
handler(newVal) { handler(newVal) {
if (newVal) {
this.setStorageData() this.setStorageData()
this.initChart() this.initChart()
}
}, },
deep: true, deep: true,
immediate: true immediate: true
......
...@@ -219,27 +219,24 @@ ...@@ -219,27 +219,24 @@
const { Status, Result: { info, list } } = res.data const { Status, Result: { info, list } } = res.data
if (Status === 'true') { if (Status === 'true') {
if(info.dataUrl) { if(info.dataUrl) {
that.getGlobalData(info) that.getGlobalData(info, list)
if(info.dataPollingInterval) { if(info.dataPollingInterval) {
that.timename = setInterval(() => { that.timename = setInterval(() => {
that.getGlobalData(info) that.getGlobalData(info, list)
}, parseInt(info.dataPollingInterval) * 1000) }, parseInt(info.dataPollingInterval) * 1000)
} }
} }
that.reportInfo = res.data.Result
// 暂不支持tabs带入,没有做数据缓存
// that.reportInfo = this.handleTabsLink(res.data.Result)
// 清除数据 // 清除数据
if(uni.getStorageSync('reportInfo')) { if(uni.getStorageSync('reportInfo')) {
let info = JSON.parse(uni.getStorageSync('reportInfo')) let cacheInfo = JSON.parse(uni.getStorageSync('reportInfo'))
info.list.forEach(item => { cacheInfo.list.forEach(item => {
// 如果本地缓存的数组在接口请求的数组中不存在,则删除 // 如果本地缓存的数组在接口请求的数组中不存在,则删除
if(!that.reportInfo.list.some(idx => idx.id == item.id)) { if(!list.some(idx => idx.id == item.id)) {
uni.removeStorageSync(item.id) uni.removeStorageSync(item.id)
} }
}) })
} }
that.reportInfo = this.handleTabsLink(res.data.Result)
uni.setStorageSync('reportInfo', JSON.stringify(res.data.Result)) uni.setStorageSync('reportInfo', JSON.stringify(res.data.Result))
that.getStickyTables() that.getStickyTables()
} }
...@@ -250,29 +247,44 @@ ...@@ -250,29 +247,44 @@
handleTabsLink(data) { handleTabsLink(data) {
data.list.forEach(item => { data.list.forEach(item => {
if(item.type === 'NormalTabs' && (item.child.index.length || item.child.data.length)) { if(item.type === 'NormalTabs' && (item.child.index.length || item.child.data.length)) {
if (item.child.index.length) {
item.child.index.forEach(child => { item.child.index.forEach(child => {
const index = data.list.findIndex(i => i.id === child ) const index = data.list.findIndex(i => i.id === child )
if(index != -1) {
data.list[index].linkTabsId = item.id data.list[index].linkTabsId = item.id
}
}) })
}
if (item.child.data.length) {
item.child.data.forEach(child => { item.child.data.forEach(child => {
const index = data.list.findIndex(i => i.id === child.comp ) const index = data.list.findIndex(i => i.id === child.comp )
if(index != -1) {
data.list[index].linkTabsId = item.id data.list[index].linkTabsId = item.id
}
}) })
} }
}
}) })
return data return data
}, },
/** /**
* 获取全局接口数据 * 获取全局接口数据
*/ */
async getGlobalData(info) { async getGlobalData(info, list) {
const that = this const that = this
const dataUrl = info.dataUrl.replace(/^(\/(dashboardCharts|dashboardAPI))?/, '') const dataUrl = info.dataUrl.replace(/^(\/(dashboardCharts|dashboardAPI))?/, '')
const dataFormatter = this.$u.common.filterRequestParams({...info.dataFormatter}) const dataFormatter = this.$u.common.filterRequestParams({...info.dataFormatter})
let res = await that.$u.api[`${info.dataMethod.toLowerCase()}Http`](dataUrl, dataFormatter, { let res = await that.$u.api[`${info.dataMethod.toLowerCase()}Http`](dataUrl, dataFormatter, {
custom: { loading: false } custom: { loading: false }
}) })
that.$u.vuex('vuex_globalData', res.data) const elements = []
list.forEach(item => {
if(item.data.dataType === 'public') {
elements.push(item.id)
}
})
const data = {...res.data, elements}
that.$u.vuex('vuex_globalData', data)
}, },
/** /**
* 组件之间关联 * 组件之间关联
......
...@@ -245,25 +245,25 @@ ...@@ -245,25 +245,25 @@
const { Status, Result: { info, list } } = res.data const { Status, Result: { info, list } } = res.data
if (Status === 'true') { if (Status === 'true') {
if(info.dataUrl) { if(info.dataUrl) {
that.getGlobalData(info) that.getGlobalData(info, list)
if(info.dataPollingInterval) { if(info.dataPollingInterval) {
that.timename = setInterval(() => { that.timename = setInterval(() => {
that.getGlobalData(info) that.getGlobalData(info, list)
}, parseInt(info.dataPollingInterval) * 1000) }, parseInt(info.dataPollingInterval) * 1000)
} }
} }
that.reportInfo = this.handleTabsLink(res.data.Result)
// 清除数据 // 清除数据
if(uni.getStorageSync('reportInfo')) { if(uni.getStorageSync('reportInfo')) {
let info = JSON.parse(uni.getStorageSync('reportInfo')) let info = JSON.parse(uni.getStorageSync('reportInfo'))
info.list.forEach(item => { info.list.forEach(item => {
// 如果本地缓存的数组在接口请求的数组中不存在,则删除 // 如果本地缓存的数组在接口请求的数组中不存在,则删除
if(!that.reportInfo.list.some(idx => idx.id == item.id)) { if(!list.some(idx => idx.id == item.id)) {
uni.removeStorageSync(item.id) uni.removeStorageSync(item.id)
} }
}) })
} }
that.reportInfo = this.handleTabsLink(res.data.Result)
uni.setStorageSync('reportInfo', JSON.stringify(res.data.Result)) uni.setStorageSync('reportInfo', JSON.stringify(res.data.Result))
that.getStickyTables() that.getStickyTables()
} }
...@@ -297,14 +297,21 @@ ...@@ -297,14 +297,21 @@
/** /**
* 获取全局接口数据 * 获取全局接口数据
*/ */
async getGlobalData(info) { async getGlobalData(info,list) {
const that = this const that = this
const dataUrl = info.dataUrl.replace(/^(\/(dashboardCharts|dashboardAPI))?/, '') const dataUrl = info.dataUrl.replace(/^(\/(dashboardCharts|dashboardAPI))?/, '')
const dataFormatter = that.$u.common.filterRequestParams({...info.dataFormatter}) const dataFormatter = that.$u.common.filterRequestParams({...info.dataFormatter})
let res = await that.$u.api[`${info.dataMethod.toLowerCase()}Http`](dataUrl, dataFormatter, { let res = await that.$u.api[`${info.dataMethod.toLowerCase()}Http`](dataUrl, dataFormatter, {
custom: { loading: false } custom: { loading: false }
}) })
that.$u.vuex('vuex_globalData', res.data) const elements = []
list.forEach(item => {
if(item.data.dataType === 'public') {
elements.push(item.id)
}
})
const data = {...res.data, elements}
that.$u.vuex('vuex_globalData', data)
}, },
/** /**
* 组件之间关联 * 组件之间关联
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment