feat: 新增自动同步功能

This commit is contained in:
奔跑的面条 2022-05-24 17:42:49 +08:00
parent 00b6b63e1e
commit 24fba75f28
4 changed files with 72 additions and 45 deletions

View File

@ -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

View File

@ -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-text class="status-desc go-ml-2" :type="descType" depth="3"> <n-tooltip trigger="hover">
{{ statusDesc }} <template #trigger>
</n-text> <n-text class="status-desc go-ml-2" :type="descType" depth="3">
{{ statusDesc }}
</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,44 +23,54 @@
</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]: { text: '同步成功!',
text: '同步成功!', type: 'success',
type: 'success', },
}, [SyncEnum.FAILURE]: {
[SyncEnum.FAILURE]: { text: '同步失败!',
text: '同步失败!', type: 'error',
type: 'error', },
}, }
watch(
() => saveStatus.value,
newData => {
clearTimeout(setTimeoutIns)
statusDesc.value = statusDescObj[newData]['text']
descType.value = statusDescObj[newData]['type']
// 3
setTimeoutIns = setTimeout(() => {
statusDesc.value = statusDescObj[SyncEnum.PENDING]['text']
descType.value = statusDescObj[SyncEnum.PENDING]['type']
}, 3000)
},
{
immediate: true,
} }
statusDesc.value = statusDescObj[saveStatus.value]['text'] )
descType.value = statusDescObj[saveStatus.value]['type']
// 3
setTimeout(() => {
statusDesc.value = statusDescObj[SyncEnum.PENDING]['text']
descType.value = statusDescObj[SyncEnum.PENDING]['type']
}, 3000)
})
</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>

View File

@ -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>

View File

@ -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 syncTiming = setInterval(() => { // 定时处理
dataSyncUpdate() const intervalDataSyncUpdate = () => {
}, 15000) // 定时获取数据
const syncTiming = setInterval(() => {
dataSyncUpdate()
}, saveInterval * 1000)
onUnmounted(() => { // 销毁
clearInterval(syncTiming) onUnmounted(() => {
}) clearInterval(syncTiming)
})
}
return { return {
updateComponent, updateComponent,
dataSyncFetch, dataSyncFetch,
dataSyncUpdate dataSyncUpdate,
intervalDataSyncUpdate
} }
} }