diff --git a/src/hooks/useChartDataFetch.hook.ts b/src/hooks/useChartDataFetch.hook.ts index cba17e0d..c39cc34e 100644 --- a/src/hooks/useChartDataFetch.hook.ts +++ b/src/hooks/useChartDataFetch.hook.ts @@ -1,122 +1,123 @@ -import { ref, toRefs, toRaw, watch } from 'vue' -import type VChart from 'vue-echarts' -import { customizeHttp } from '@/api/http' -import { useChartDataPondFetch } from '@/hooks/' -import { CreateComponentType, ChartFrameEnum } from '@/packages/index.d' -import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' -import { RequestDataTypeEnum } from '@/enums/httpEnum' -import { isPreview, newFunctionHandle, intervalUnitHandle } from '@/utils' -import { setOption } from '@/packages/public/chart' - -// 获取类型 -type ChartEditStoreType = typeof useChartEditStore - -/** - * setdata 数据监听与更改 - * @param targetComponent - * @param useChartEditStore 若直接引会报错,只能动态传递 - * @param updateCallback 自定义更新函数 - */ -export const useChartDataFetch = ( - targetComponent: CreateComponentType, - useChartEditStore: ChartEditStoreType, - updateCallback?: (...args: any) => any -) => { - const vChartRef = ref(null) - let fetchInterval: any = 0 - - // 数据池 - const { addGlobalDataInterface } = useChartDataPondFetch() - - // 组件类型 - const { chartFrame } = targetComponent.chartConfig - - // eCharts 组件配合 vChart 库更新方式 - const echartsUpdateHandle = (dataset: any) => { - if (chartFrame === ChartFrameEnum.ECHARTS) { - if (vChartRef.value) { - setOption(vChartRef.value, { dataset: dataset }) - } - } - } - - const requestIntervalFn = () => { - const chartEditStore = useChartEditStore() - - // 全局数据 - const { - requestOriginUrl, - requestIntervalUnit: globalUnit, - requestInterval: globalRequestInterval - } = toRefs(chartEditStore.getRequestGlobalConfig) - - // 目标组件 - const { - requestDataType, - requestUrl, - requestIntervalUnit: targetUnit, - requestInterval: targetInterval - } = toRefs(targetComponent.request) - - // 非请求类型 - if (requestDataType.value !== RequestDataTypeEnum.AJAX) return - - try { - // 处理地址 - // @ts-ignore - if (requestUrl?.value) { - // requestOriginUrl 允许为空 - const completePath = requestOriginUrl && requestOriginUrl.value + requestUrl.value - if (!completePath) return - - clearInterval(fetchInterval) - - const fetchFn = async () => { - const res = await customizeHttp(toRaw(targetComponent.request), toRaw(chartEditStore.getRequestGlobalConfig)) - if (res) { - try { - const filter = targetComponent.filter - echartsUpdateHandle(newFunctionHandle(res?.data, res, filter)) - // 更新回调函数 - if (updateCallback) { - updateCallback(newFunctionHandle(res?.data, res, filter)) - } - } catch (error) { - console.error(error) - } - } - } - - // 普通初始化与组件交互处理监听 - watch( - () => targetComponent.request, - () => { - fetchFn() - }, - { - immediate: true, - deep: true - } - ) - - // 定时时间 - const time = targetInterval && targetInterval.value ? targetInterval.value : globalRequestInterval.value - // 单位 - const unit = targetInterval && targetInterval.value ? targetUnit.value : globalUnit.value - // 开启轮询 - if (time) fetchInterval = setInterval(fetchFn, intervalUnitHandle(time, unit)) - } - // eslint-disable-next-line no-empty - } catch (error) { - console.log(error) - } - } - - if (isPreview()) { - // 判断是否是数据池类型 - targetComponent.request.requestDataType === RequestDataTypeEnum.Pond - ? addGlobalDataInterface(targetComponent, useChartEditStore, updateCallback || echartsUpdateHandle) - : requestIntervalFn() - } - return { vChartRef } -} +import { ref, toRefs, toRaw, watch } from 'vue' +import type VChart from 'vue-echarts' +import { customizeHttp } from '@/api/http' +import { useChartDataPondFetch } from '@/hooks/' +import { CreateComponentType, ChartFrameEnum } from '@/packages/index.d' +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' +import { RequestDataTypeEnum } from '@/enums/httpEnum' +import { isPreview, newFunctionHandle, intervalUnitHandle } from '@/utils' +import { setOption } from '@/packages/public/chart' + +// 获取类型 +type ChartEditStoreType = typeof useChartEditStore + +/** + * setdata 数据监听与更改 + * @param targetComponent + * @param useChartEditStore 若直接引会报错,只能动态传递 + * @param updateCallback 自定义更新函数 + */ +export const useChartDataFetch = ( + targetComponent: CreateComponentType, + useChartEditStore: ChartEditStoreType, + updateCallback?: (...args: any) => any +) => { + const vChartRef = ref(null) + let fetchInterval: any = 0 + + // 数据池 + const { addGlobalDataInterface } = useChartDataPondFetch() + + // 组件类型 + const { chartFrame } = targetComponent.chartConfig + + // eCharts 组件配合 vChart 库更新方式 + const echartsUpdateHandle = (dataset: any) => { + if (chartFrame === ChartFrameEnum.ECHARTS) { + if (vChartRef.value) { + setOption(vChartRef.value, { dataset: dataset }) + } + } + } + + const requestIntervalFn = () => { + const chartEditStore = useChartEditStore() + + // 全局数据 + const { + requestOriginUrl, + requestIntervalUnit: globalUnit, + requestInterval: globalRequestInterval + } = toRefs(chartEditStore.getRequestGlobalConfig) + + // 目标组件 + const { + requestDataType, + requestUrl, + requestIntervalUnit: targetUnit, + requestInterval: targetInterval + } = toRefs(targetComponent.request) + + // 非请求类型 + if (requestDataType.value !== RequestDataTypeEnum.AJAX) return + + try { + // 处理地址 + // @ts-ignore + if (requestUrl?.value) { + // requestOriginUrl 允许为空 + const completePath = requestOriginUrl && requestOriginUrl.value + requestUrl.value + if (!completePath) return + + clearInterval(fetchInterval) + + const fetchFn = async () => { + const res = await customizeHttp(toRaw(targetComponent.request), toRaw(chartEditStore.getRequestGlobalConfig)) + if (res) { + try { + const filter = targetComponent.filter + const { data } = res + echartsUpdateHandle(newFunctionHandle(data, res, filter)) + // 更新回调函数 + if (updateCallback) { + updateCallback(newFunctionHandle(data, res, filter)) + } + } catch (error) { + console.error(error) + } + } + } + + // 普通初始化与组件交互处理监听 + watch( + () => targetComponent.request, + () => { + fetchFn() + }, + { + immediate: true, + deep: true + } + ) + + // 定时时间 + const time = targetInterval && targetInterval.value ? targetInterval.value : globalRequestInterval.value + // 单位 + const unit = targetInterval && targetInterval.value ? targetUnit.value : globalUnit.value + // 开启轮询 + if (time) fetchInterval = setInterval(fetchFn, intervalUnitHandle(time, unit)) + } + // eslint-disable-next-line no-empty + } catch (error) { + console.log(error) + } + } + + if (isPreview()) { + // 判断是否是数据池类型 + targetComponent.request.requestDataType === RequestDataTypeEnum.Pond + ? addGlobalDataInterface(targetComponent, useChartEditStore, updateCallback || echartsUpdateHandle) + : requestIntervalFn() + } + return { vChartRef } +} diff --git a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue index 68b73edf..203bb0e6 100644 --- a/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue +++ b/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataAjax/index.vue @@ -1,196 +1,197 @@ - - - - - + + + + +