mirror of
https://gitee.com/dromara/go-view.git
synced 2025-04-06 03:58:04 +08:00
feat: 新增自动同步功能
This commit is contained in:
parent
20a599594c
commit
e36210aa27
@ -48,8 +48,11 @@ export const backgroundImageSize = 5
|
|||||||
// 预览展示方式
|
// 预览展示方式
|
||||||
export const previewScaleType = PreviewScaleEnum.FIT
|
export const previewScaleType = PreviewScaleEnum.FIT
|
||||||
|
|
||||||
// 数据请求间隔
|
// 数据请求间隔(s)
|
||||||
export const requestInterval = 30
|
export const requestInterval = 30
|
||||||
|
|
||||||
|
// 工作台自动保存间隔(s)
|
||||||
|
export const saveInterval = 30
|
||||||
|
|
||||||
// 工作区域历史记录存储最大数量
|
// 工作区域历史记录存储最大数量
|
||||||
export const editHistoryMax = 100
|
export const editHistoryMax = 100
|
@ -1,10 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="go-edit-data-sync go-flex-items-center">
|
<div class="go-edit-data-sync go-flex-items-center">
|
||||||
|
<n-tooltip trigger="hover">
|
||||||
|
<template #trigger>
|
||||||
<n-text class="status-desc go-ml-2" :type="descType" depth="3">
|
<n-text class="status-desc go-ml-2" :type="descType" depth="3">
|
||||||
{{ statusDesc }}
|
{{ statusDesc }}
|
||||||
</n-text>
|
</n-text>
|
||||||
|
</template>
|
||||||
|
<span>{{saveInterval}}s 更新一次</span>
|
||||||
|
</n-tooltip>
|
||||||
<n-spin
|
<n-spin
|
||||||
v-show="saveStatus === SyncEnum.START"
|
v-show="statusDesc === statusDescObj[1]['text']"
|
||||||
class="status-spin go-ml-2"
|
class="status-spin go-ml-2"
|
||||||
size="small"
|
size="small"
|
||||||
>
|
>
|
||||||
@ -18,25 +23,26 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, toRefs, watchEffect } from 'vue'
|
import { ref, toRefs, watch } from 'vue'
|
||||||
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
||||||
import { SyncEnum } from '@/enums/editPageEnum'
|
import { SyncEnum } from '@/enums/editPageEnum'
|
||||||
import { icon } from '@/plugins'
|
import { icon } from '@/plugins'
|
||||||
|
import { saveInterval } from '@/settings/designSetting'
|
||||||
|
|
||||||
const { ReloadIcon } = icon.ionicons5
|
const { ReloadIcon } = icon.ionicons5
|
||||||
const chartEditStore = useChartEditStore()
|
const chartEditStore = useChartEditStore()
|
||||||
const { saveStatus } = toRefs(chartEditStore.getEditCanvas)
|
const { saveStatus } = toRefs(chartEditStore.getEditCanvas)
|
||||||
const statusDesc = ref('')
|
const statusDesc = ref('')
|
||||||
const descType = ref('')
|
const descType = ref('')
|
||||||
|
let setTimeoutIns: NodeJS.Timeout = setTimeout(() => {})
|
||||||
|
|
||||||
watchEffect(() => {
|
|
||||||
const statusDescObj = {
|
const statusDescObj = {
|
||||||
[SyncEnum.PENDING]: {
|
[SyncEnum.PENDING]: {
|
||||||
text: '待同步',
|
text: '等待自动同步',
|
||||||
type: '',
|
type: '',
|
||||||
},
|
},
|
||||||
[SyncEnum.START]: {
|
[SyncEnum.START]: {
|
||||||
text: '同步中',
|
text: '正在同步中',
|
||||||
type: 'success',
|
type: 'success',
|
||||||
},
|
},
|
||||||
[SyncEnum.SUCCESS]: {
|
[SyncEnum.SUCCESS]: {
|
||||||
@ -48,14 +54,23 @@ watchEffect(() => {
|
|||||||
type: 'error',
|
type: 'error',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
statusDesc.value = statusDescObj[saveStatus.value]['text']
|
|
||||||
descType.value = statusDescObj[saveStatus.value]['type']
|
watch(
|
||||||
|
() => saveStatus.value,
|
||||||
|
newData => {
|
||||||
|
clearTimeout(setTimeoutIns)
|
||||||
|
statusDesc.value = statusDescObj[newData]['text']
|
||||||
|
descType.value = statusDescObj[newData]['type']
|
||||||
// 3秒重置展示
|
// 3秒重置展示
|
||||||
setTimeout(() => {
|
setTimeoutIns = setTimeout(() => {
|
||||||
statusDesc.value = statusDescObj[SyncEnum.PENDING]['text']
|
statusDesc.value = statusDescObj[SyncEnum.PENDING]['text']
|
||||||
descType.value = statusDescObj[SyncEnum.PENDING]['type']
|
descType.value = statusDescObj[SyncEnum.PENDING]['type']
|
||||||
}, 3000)
|
}, 3000)
|
||||||
})
|
},
|
||||||
|
{
|
||||||
|
immediate: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@ -67,9 +82,9 @@ watchEffect(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.status-desc {
|
.status-desc {
|
||||||
|
cursor: default;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 40px;
|
opacity: 0.8;
|
||||||
opacity: .8;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -83,7 +83,7 @@ import { EditTools } from './components/EditTools'
|
|||||||
|
|
||||||
const chartEditStore = useChartEditStore()
|
const chartEditStore = useChartEditStore()
|
||||||
const { handleContextMenu } = useContextMenu()
|
const { handleContextMenu } = useContextMenu()
|
||||||
const { dataSyncFetch } = useSync()
|
const { dataSyncFetch, intervalDataSyncUpdate } = useSync()
|
||||||
|
|
||||||
// 布局处理
|
// 布局处理
|
||||||
useLayout()
|
useLayout()
|
||||||
@ -128,6 +128,8 @@ onMounted(() => {
|
|||||||
useAddKeyboard()
|
useAddKeyboard()
|
||||||
// 获取数据
|
// 获取数据
|
||||||
dataSyncFetch()
|
dataSyncFetch()
|
||||||
|
// 定时更新数据
|
||||||
|
intervalDataSyncUpdate()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import { EditCanvasTypeEnum, ChartEditStoreEnum } from '@/store/modules/chartEdi
|
|||||||
import { useChartHistoryStore } from '@/store/modules/chartHistoryStore/chartHistoryStore'
|
import { useChartHistoryStore } from '@/store/modules/chartHistoryStore/chartHistoryStore'
|
||||||
import { fetchChartComponent, createComponent } from '@/packages/index'
|
import { fetchChartComponent, createComponent } from '@/packages/index'
|
||||||
import { CreateComponentType } from '@/packages/index.d'
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
|
import { saveInterval } from '@/settings/designSetting'
|
||||||
// 接口状态
|
// 接口状态
|
||||||
import { ResultEnum } from '@/enums/httpEnum'
|
import { ResultEnum } from '@/enums/httpEnum'
|
||||||
// 接口
|
// 接口
|
||||||
@ -71,7 +72,7 @@ export const useSync = () => {
|
|||||||
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START)
|
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START)
|
||||||
try {
|
try {
|
||||||
const { id } = routerParamsInfo.params
|
const { id } = routerParamsInfo.params
|
||||||
const res: any = await fetchProjectApi({ id: id[0] })
|
const res: any = await fetchProjectApi({ projectId: id[0] })
|
||||||
if (res.code === ResultEnum.SUCCESS) {
|
if (res.code === ResultEnum.SUCCESS) {
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
const data = JSON.parse(res.data)
|
const data = JSON.parse(res.data)
|
||||||
@ -84,7 +85,6 @@ export const useSync = () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
||||||
httpErrorHandle()
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
||||||
httpErrorHandle()
|
httpErrorHandle()
|
||||||
@ -93,6 +93,7 @@ export const useSync = () => {
|
|||||||
|
|
||||||
// 数据保存
|
// 数据保存
|
||||||
const dataSyncUpdate = async () => {
|
const dataSyncUpdate = async () => {
|
||||||
|
|
||||||
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START)
|
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.START)
|
||||||
// 获取id
|
// 获取id
|
||||||
const { id } = routerParamsInfo.params
|
const { id } = routerParamsInfo.params
|
||||||
@ -113,17 +114,23 @@ export const useSync = () => {
|
|||||||
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
chartEditStore.setEditCanvas(EditCanvasTypeEnum.SAVE_STATUS, SyncEnum.FAILURE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 定时处理
|
||||||
|
const intervalDataSyncUpdate = () => {
|
||||||
|
// 定时获取数据
|
||||||
const syncTiming = setInterval(() => {
|
const syncTiming = setInterval(() => {
|
||||||
dataSyncUpdate()
|
dataSyncUpdate()
|
||||||
}, 15000)
|
}, saveInterval * 1000)
|
||||||
|
|
||||||
|
// 销毁
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
clearInterval(syncTiming)
|
clearInterval(syncTiming)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
updateComponent,
|
updateComponent,
|
||||||
dataSyncFetch,
|
dataSyncFetch,
|
||||||
dataSyncUpdate
|
dataSyncUpdate,
|
||||||
|
intervalDataSyncUpdate
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user