提交 9885b9cc authored 作者: wangjiahao's avatar wangjiahao

feat: 仪表板预览界面支持刷新,仪表板加载代码优化

上级 a639ba13
import request from '@/utils/request' import request from '@/utils/request'
import { panelInit } from '@/components/canvas/utils/utils'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
import { queryPanelJumpInfo } from '@/api/panel/linkJump'
import store from '@/store'
export function deleteSubject(id) { export function deleteSubject(id) {
return request({ return request({
...@@ -128,3 +132,25 @@ export function delGroup(groupId) { ...@@ -128,3 +132,25 @@ export function delGroup(groupId) {
method: 'post' method: 'post'
}) })
} }
export function initPanelData(panelId, callback) {
// 加载视图数据
findOne(panelId).then(response => {
// 初始化视图data和style 数据
panelInit(JSON.parse(response.data.panelData), JSON.parse(response.data.panelStyle))
// 设置当前仪表板全局信息
store.dispatch('panel/setPanelInfo', {
id: response.data.id,
name: response.data.name
})
// 刷新联动信息
getPanelAllLinkageInfo(panelId).then(rsp => {
store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(panelId).then(rsp => {
store.commit('setNowPanelJumpInfo', rsp.data)
})
callback(response)
})
}
...@@ -6,10 +6,8 @@ ...@@ -6,10 +6,8 @@
<script> <script>
import Preview from './Preview' import Preview from './Preview'
import { uuid } from 'vue-uuid' import { uuid } from 'vue-uuid'
import { findOne } from '@/api/panel/panel' import { initPanelData } from '@/api/panel/panel'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage' import { queryTargetPanelJumpInfo } from '@/api/panel/linkJump'
import { queryPanelJumpInfo, queryTargetPanelJumpInfo } from '@/api/panel/linkJump'
import { panelInit } from '@/components/canvas/utils/utils'
export default { export default {
components: { Preview }, components: { Preview },
...@@ -37,31 +35,14 @@ export default { ...@@ -37,31 +35,14 @@ export default {
this.mainHeight = mainHeight this.mainHeight = mainHeight
}, },
restore() { restore() {
this.dataLoading = true const _this = this
this.panelId = this.$route.params.reportId _this.dataLoading = true
if (this.$route.params.backScreenShot !== undefined) { _this.panelId = this.$route.params.reportId
this.backScreenShot = this.$route.params.backScreenShot if (_this.$route.params.backScreenShot !== undefined) {
_this.backScreenShot = _this.$route.params.backScreenShot
} }
// 加载视图数据 // 加载视图数据
findOne(this.panelId).then(response => { initPanelData(this.panelId, function() {
const componentDatas = JSON.parse(response.data.panelData)
panelInit(componentDatas)
this.dataLoading = false
this.$store.commit('setComponentData', this.resetID(componentDatas))
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
const data = {
id: response.data.id,
name: response.data.name
}
// 刷新联动信息
getPanelAllLinkageInfo(this.panelId).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(this.panelId).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
// 如果含有跳转参数 进行触发 // 如果含有跳转参数 进行触发
const tempParam = localStorage.getItem('jumpInfoParam') const tempParam = localStorage.getItem('jumpInfoParam')
if (tempParam) { if (tempParam) {
...@@ -71,17 +52,16 @@ export default { ...@@ -71,17 +52,16 @@ export default {
sourcePanelId: jumpParam.sourcePanelId, sourcePanelId: jumpParam.sourcePanelId,
sourceViewId: jumpParam.sourceViewId, sourceViewId: jumpParam.sourceViewId,
sourceFieldId: jumpParam.sourceFieldId, sourceFieldId: jumpParam.sourceFieldId,
targetPanelId: this.panelId targetPanelId: _this.panelId
} }
this.dataLoading = true _this.dataLoading = true
// 刷新跳转目标仪表板联动信息 // 刷新跳转目标仪表板联动信息
queryTargetPanelJumpInfo(jumpRequestParam).then(rsp => { queryTargetPanelJumpInfo(jumpRequestParam).then(rsp => {
this.dataLoading = false _this.dataLoading = false
this.$store.commit('setNowTargetPanelJumpInfo', rsp.data) _this.$store.commit('setNowTargetPanelJumpInfo', rsp.data)
this.$store.commit('addViewTrackFilter', jumpParam) _this.$store.commit('addViewTrackFilter', jumpParam)
}) })
} }
this.$store.dispatch('panel/setPanelInfo', data)
}) })
}, },
resetID(data) { resetID(data) {
......
...@@ -6,6 +6,8 @@ import { ...@@ -6,6 +6,8 @@ import {
import { import {
ApplicationContext ApplicationContext
} from '@/utils/ApplicationContext' } from '@/utils/ApplicationContext'
import { uuid } from 'vue-uuid'
import store from '@/store'
export function deepCopy(target) { export function deepCopy(target) {
if (typeof target === 'object') { if (typeof target === 'object') {
...@@ -63,8 +65,8 @@ export function mobile2MainCanvas(mainSource, mobileSource) { ...@@ -63,8 +65,8 @@ export function mobile2MainCanvas(mainSource, mobileSource) {
mainSource.mobileStyle.sizey = mobileSource.sizey mainSource.mobileStyle.sizey = mobileSource.sizey
} }
export function panelInit(componentDatas) { export function panelInit(componentData, componentStyle) {
componentDatas.forEach(item => { componentData.forEach(item => {
if (item.component && item.component === 'de-date') { if (item.component && item.component === 'de-date') {
if (item.options.attrs && if (item.options.attrs &&
(!item.options.attrs.default || (item.serviceName === 'timeYearWidget' && item.options.attrs.default.dynamicInfill !== 'year') || (item.serviceName === 'timeMonthWidget' && item.options.attrs.default.dynamicInfill !== 'month'))) { (!item.options.attrs.default || (item.serviceName === 'timeYearWidget' && item.options.attrs.default.dynamicInfill !== 'year') || (item.serviceName === 'timeMonthWidget' && item.options.attrs.default.dynamicInfill !== 'month'))) {
...@@ -92,4 +94,21 @@ export function panelInit(componentDatas) { ...@@ -92,4 +94,21 @@ export function panelInit(componentDatas) {
item.hyperlinks = (item.hyperlinks || HYPERLINKS) item.hyperlinks = (item.hyperlinks || HYPERLINKS)
} }
}) })
// style初始化
componentStyle.refreshTime = (componentStyle.refreshTime || 5)
componentStyle.refreshViewLoading = (componentStyle.refreshViewLoading || false)
componentStyle.refreshUnit = (componentStyle.refreshUnit || 'minute')
// 将data 和 style 数据设置到全局store中
store.commit('setComponentData', resetID(componentData))
store.commit('setCanvasStyle', componentStyle)
}
export function resetID(data) {
if (data) {
data.forEach(item => {
item.type !== 'custom' && (item.id = uuid.v1())
})
}
return data
} }
...@@ -45,7 +45,6 @@ export default { ...@@ -45,7 +45,6 @@ export default {
this.$store.commit('setNowPanelTrackInfo', rsp.data) this.$store.commit('setNowPanelTrackInfo', rsp.data)
}) })
this.$store.commit('setComponentData', this.resetID(JSON.parse(res.data.panelData))) this.$store.commit('setComponentData', this.resetID(JSON.parse(res.data.panelData)))
// this.$store.commit('setComponentData', JSON.parse(res.data.panelData))
this.$store.commit('setCanvasStyle', JSON.parse(res.data.panelStyle)) this.$store.commit('setCanvasStyle', JSON.parse(res.data.panelStyle))
// 刷新跳转信息 // 刷新跳转信息
queryPanelJumpInfo(this.resourceId).then(rsp => { queryPanelJumpInfo(this.resourceId).then(rsp => {
......
...@@ -50,10 +50,8 @@ ...@@ -50,10 +50,8 @@
<script> <script>
import { loadTree, loadShareOutTree, removeShares } from '@/api/panel/share' import { loadTree, loadShareOutTree, removeShares } from '@/api/panel/share'
import { uuid } from 'vue-uuid' import { uuid } from 'vue-uuid'
import { get } from '@/api/panel/panel' import { get, initPanelData } from '@/api/panel/panel'
import bus from '@/utils/bus' import bus from '@/utils/bus'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
import { queryPanelJumpInfo } from '@/api/panel/linkJump'
export default { export default {
name: 'ShareTree', name: 'ShareTree',
props: { props: {
...@@ -105,36 +103,13 @@ export default { ...@@ -105,36 +103,13 @@ export default {
return loadShareOutTree() return loadShareOutTree()
}, },
handleNodeClick(data) { handleNodeClick(data) {
get('panel/group/findOne/' + data.id).then(response => { initPanelData(data.id, function() {
this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
this.$store.dispatch('panel/setPanelInfo', data)
// 刷新联动信息
getPanelAllLinkageInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
bus.$emit('set-panel-show-type', 1) bus.$emit('set-panel-show-type', 1)
}) })
this.$refs['botTree'].setCurrentKey(null) this.$refs['botTree'].setCurrentKey(null)
}, },
viewMyShare(data) { viewMyShare(data) {
get('panel/group/findOne/' + data.id).then(response => { initPanelData(data.id, function() {
this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
this.$store.dispatch('panel/setPanelInfo', data)
// 刷新联动信息
getPanelAllLinkageInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
bus.$emit('set-panel-show-type', 2) bus.$emit('set-panel-show-type', 2)
}) })
this.$refs['topTree'].setCurrentKey(null) this.$refs['topTree'].setCurrentKey(null)
......
...@@ -221,8 +221,7 @@ import componentList, { BASE_MOBILE_STYLE, HYPERLINKS } from '@/components/canva ...@@ -221,8 +221,7 @@ import componentList, { BASE_MOBILE_STYLE, HYPERLINKS } from '@/components/canva
import { mapState } from 'vuex' import { mapState } from 'vuex'
import { uuid } from 'vue-uuid' import { uuid } from 'vue-uuid'
import Toolbar from '@/components/canvas/components/Toolbar' import Toolbar from '@/components/canvas/components/Toolbar'
import { findOne } from '@/api/panel/panel' import { initPanelData } from '@/api/panel/panel'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
import Preview from '@/components/canvas/components/Editor/Preview' import Preview from '@/components/canvas/components/Editor/Preview'
import AttrListExtend from '@/components/canvas/components/AttrListExtend' import AttrListExtend from '@/components/canvas/components/AttrListExtend'
import elementResizeDetectorMaker from 'element-resize-detector' import elementResizeDetectorMaker from 'element-resize-detector'
...@@ -239,7 +238,6 @@ import toast from '@/components/canvas/utils/toast' ...@@ -239,7 +238,6 @@ import toast from '@/components/canvas/utils/toast'
import { commonStyle, commonAttr } from '@/components/canvas/custom-component/component-list' import { commonStyle, commonAttr } from '@/components/canvas/custom-component/component-list'
import generateID from '@/components/canvas/utils/generateID' import generateID from '@/components/canvas/utils/generateID'
import TextAttr from '@/components/canvas/components/TextAttr' import TextAttr from '@/components/canvas/components/TextAttr'
import { queryPanelJumpInfo } from '@/api/panel/linkJump'
import ComponentWait from '@/views/panel/edit/ComponentWait' import ComponentWait from '@/views/panel/edit/ComponentWait'
import { deleteEnshrine, saveEnshrine, starStatus } from '@/api/panel/enshrine' import { deleteEnshrine, saveEnshrine, starStatus } from '@/api/panel/enshrine'
...@@ -414,9 +412,6 @@ export default { ...@@ -414,9 +412,6 @@ export default {
removeClass(document.body, 'showRightPanel') removeClass(document.body, 'showRightPanel')
} }
}, },
panelInfo(newVal, oldVal) {
this.init(newVal.id)
},
'$store.state.styleChangeTimes'() { '$store.state.styleChangeTimes'() {
if (this.$store.state.styleChangeTimes > 0) { if (this.$store.state.styleChangeTimes > 0) {
this.destroyTimeMachine() this.destroyTimeMachine()
...@@ -467,42 +462,19 @@ export default { ...@@ -467,42 +462,19 @@ export default {
}, },
methods: { methods: {
init(panelId) { init(panelId) {
this.initHasStar() const _this = this
_this.initHasStar()
// 如果临时画布有数据 则使用临时画布数据(视图编辑的时候 会保存临时画布数据) // 如果临时画布有数据 则使用临时画布数据(视图编辑的时候 会保存临时画布数据)
const componentDataTemp = this.$store.state.panel.componentDataTemp const componentDataTemp = this.$store.state.panel.componentDataTemp
const canvasStyleDataTemp = this.$store.state.panel.canvasStyleDataTemp const canvasStyleDataTemp = this.$store.state.panel.canvasStyleDataTemp
if (componentDataTemp && canvasStyleDataTemp) { if (componentDataTemp && canvasStyleDataTemp) {
const componentDatas = JSON.parse(componentDataTemp) panelInit(JSON.parse(componentDataTemp), JSON.parse(canvasStyleDataTemp))
panelInit(componentDatas)
this.$store.commit('setComponentData', this.resetID(componentDatas))
const temp = JSON.parse(canvasStyleDataTemp)
temp.refreshTime = (temp.refreshTime || 5)
temp.refreshViewLoading = (temp.refreshViewLoading || false)
temp.refreshUnit = (temp.refreshUnit || 'minute')
this.$store.commit('setCanvasStyle', temp)
// 清空临时画布数据 // 清空临时画布数据
this.$store.dispatch('panel/setComponentDataTemp', null) _this.$store.dispatch('panel/setComponentDataTemp', null)
this.$store.dispatch('panel/setCanvasStyleDataTemp', null) _this.$store.dispatch('panel/setCanvasStyleDataTemp', null)
} else if (panelId) { } else if (panelId) {
findOne(panelId).then(response => { initPanelData(panelId, function() {
const componentDatas = JSON.parse(response.data.panelData) _this.$store.commit('recordSnapshot', 'init')// 记录快照
panelInit(componentDatas)
this.$store.commit('setComponentData', this.resetID(componentDatas))
const panelStyle = JSON.parse(response.data.panelStyle)
panelStyle.refreshTime = (panelStyle.refreshTime || 5)
panelStyle.refreshViewLoading = (panelStyle.refreshViewLoading || false)
panelStyle.refreshUnit = (panelStyle.refreshUnit || 'minute')
this.$store.commit('setCanvasStyle', panelStyle)
this.$store.commit('recordSnapshot', 'init')// 记录快照
// 刷新联动信息
getPanelAllLinkageInfo(panelId).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(panelId).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
}) })
} }
}, },
......
...@@ -27,10 +27,8 @@ ...@@ -27,10 +27,8 @@
<script> <script>
import { deleteEnshrine, enshrineList } from '@/api/panel/enshrine' import { deleteEnshrine, enshrineList } from '@/api/panel/enshrine'
import { uuid } from 'vue-uuid' import { uuid } from 'vue-uuid'
import { get } from '@/api/panel/panel' import { initPanelData } from '@/api/panel/panel'
import bus from '@/utils/bus' import bus from '@/utils/bus'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
import { queryPanelJumpInfo } from '@/api/panel/linkJump'
export default { export default {
name: 'Enshrine', name: 'Enshrine',
data() { data() {
...@@ -49,22 +47,7 @@ export default { ...@@ -49,22 +47,7 @@ export default {
}, },
methods: { methods: {
showPanel(row) { showPanel(row) {
get('panel/group/findOne/' + row.panelGroupId).then(response => { initPanelData(row.panelGroupId, function() {
this.$store.commit('setComponentData', this.resetID(JSON.parse(response.data.panelData)))
this.$store.commit('setCanvasStyle', JSON.parse(response.data.panelStyle))
const data = {
id: row.panelGroupId,
name: row.name
}
this.$store.dispatch('panel/setPanelInfo', data)
// 刷新联动信息
getPanelAllLinkageInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
bus.$emit('set-panel-show-type', 0) bus.$emit('set-panel-show-type', 0)
}) })
}, },
......
...@@ -226,16 +226,13 @@ import LinkGenerate from '@/views/link/generate' ...@@ -226,16 +226,13 @@ import LinkGenerate from '@/views/link/generate'
import { uuid } from 'vue-uuid' import { uuid } from 'vue-uuid'
import bus from '@/utils/bus' import bus from '@/utils/bus'
import EditPanel from './EditPanel' import EditPanel from './EditPanel'
import { addGroup, delGroup, groupTree, defaultTree, findOne, panelSave } from '@/api/panel/panel' import { addGroup, delGroup, groupTree, defaultTree, panelSave, initPanelData } from '@/api/panel/panel'
import { getPanelAllLinkageInfo } from '@/api/panel/linkage'
import { queryPanelJumpInfo } from '@/api/panel/linkJump'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import { import {
DEFAULT_COMMON_CANVAS_STYLE_STRING DEFAULT_COMMON_CANVAS_STYLE_STRING
} from '@/views/panel/panel' } from '@/views/panel/panel'
import TreeSelector from '@/components/TreeSelector' import TreeSelector from '@/components/TreeSelector'
import { queryAuthModel } from '@/api/authModel/authModel' import { queryAuthModel } from '@/api/authModel/authModel'
import { panelInit } from '@/components/canvas/utils/utils'
export default { export default {
name: 'PanelList', name: 'PanelList',
...@@ -649,29 +646,7 @@ export default { ...@@ -649,29 +646,7 @@ export default {
if (data.nodeType === 'panel') { if (data.nodeType === 'panel') {
// 清理pc布局缓存 // 清理pc布局缓存
this.$store.commit('setComponentDataCache', null) this.$store.commit('setComponentDataCache', null)
// 加载视图数据 initPanelData(data.id, function(response) {
findOne(data.id).then(response => {
const componentDatas = JSON.parse(response.data.panelData)
panelInit(componentDatas)
this.$store.commit('setComponentData', this.resetID(componentDatas))
const temp = JSON.parse(response.data.panelStyle)
temp.refreshTime = (temp.refreshTime || 5)
temp.refreshViewLoading = (temp.refreshViewLoading || false)
temp.refreshUnit = (temp.refreshUnit || 'minute')
this.$store.commit('setCanvasStyle', temp)
this.$store.dispatch('panel/setPanelInfo', data)
// 刷新联动信息
getPanelAllLinkageInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelTrackInfo', rsp.data)
})
// 刷新跳转信息
queryPanelJumpInfo(data.id).then(rsp => {
this.$store.commit('setNowPanelJumpInfo', rsp.data)
})
bus.$emit('set-panel-show-type', 0) bus.$emit('set-panel-show-type', 0)
}) })
} }
......
...@@ -68,6 +68,12 @@ ...@@ -68,6 +68,12 @@
</el-tooltip> </el-tooltip>
</span> </span>
<span style="float: right;margin-right: 10px">
<el-tooltip :content="$t('commons.refresh')">
<el-button class="el-icon-refresh" size="mini" circle @click="refreshPanel" />
</el-tooltip>
</span>
</el-col> </el-col>
</div> </div>
</el-row> </el-row>
...@@ -130,6 +136,7 @@ import { starStatus, saveEnshrine, deleteEnshrine } from '@/api/panel/enshrine' ...@@ -130,6 +136,7 @@ import { starStatus, saveEnshrine, deleteEnshrine } from '@/api/panel/enshrine'
import bus from '@/utils/bus' import bus from '@/utils/bus'
import { queryAll } from '@/api/panel/pdfTemplate' import { queryAll } from '@/api/panel/pdfTemplate'
import ShareHead from '@/views/panel/GrantAuth/ShareHead' import ShareHead from '@/views/panel/GrantAuth/ShareHead'
import { initPanelData } from '@/api/panel/panel'
export default { export default {
name: 'PanelViewShow', name: 'PanelViewShow',
...@@ -334,8 +341,10 @@ export default { ...@@ -334,8 +341,10 @@ export default {
}, },
editPanel() { editPanel() {
this.$emit('editPanel') this.$emit('editPanel')
},
refreshPanel() {
initPanelData(this.panelInfo.id)
} }
} }
} }
</script> </script>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论