| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { toRaw } from 'vue'
- import { customizeHttp } from '@/api/http'
- import { CreateComponentType } from '@/packages/index.d'
- import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
- import { RequestGlobalConfigType, RequestDataPondItemType } from '@/store/modules/chartEditStore/chartEditStore.d'
- import { newFunctionHandle } from '@/utils'
- // 获取类型
- type ChartEditStoreType = typeof useChartEditStore
- // 数据池存储的数据类型
- type DataPondMapType = {
- updateCallback: (...args: any) => any
- filter?: string | undefined
- }
- // 数据池 Map 中请求对应 callback
- const mittDataPondMap = new Map<string, DataPondMapType[]>()
- // 创建单个数据项轮询接口
- const newPondItemInterval = (
- requestGlobalConfig: RequestGlobalConfigType,
- requestDataPondItem: RequestDataPondItemType,
- dataPondMapItem?: DataPondMapType[]
- ) => {
- if (!dataPondMapItem) return
- // 请求
- const fetchFn = async () => {
- try {
- const res = await customizeHttp(toRaw(requestDataPondItem.dataPondRequestConfig), toRaw(requestGlobalConfig))
- if (res) {
- try {
- // 遍历更新回调函数
- dataPondMapItem.forEach(item => {
- item.updateCallback(newFunctionHandle(res?.data, res, item.filter))
- })
- } catch (error) {
- console.error(error)
- return error
- }
- }
- } catch (error) {
- return error
- }
- }
- // 立即调用
- fetchFn()
- }
- /**
- * 数据池接口处理
- */
- export const useChartDataPondFetch = () => {
- // 新增全局接口
- const addGlobalDataInterface = (
- targetComponent: CreateComponentType,
- useChartEditStore: ChartEditStoreType,
- updateCallback: (...args: any) => any
- ) => {
- const chartEditStore = useChartEditStore()
- const { requestDataPond } = chartEditStore.getRequestGlobalConfig
- // 组件对应的数据池 Id
- const requestDataPondId = targetComponent.request.requestDataPondId as string
- // 新增数据项
- const mittPondIdArr = mittDataPondMap.get(requestDataPondId) || []
- mittPondIdArr.push({
- updateCallback: updateCallback,
- filter: targetComponent.filter
- })
- mittDataPondMap.set(requestDataPondId, mittPondIdArr)
- }
- // 初始化数据池
- const initDataPond = (requestGlobalConfig: RequestGlobalConfigType) => {
- const { requestDataPond } = requestGlobalConfig
- // 根据 mapId 查找对应的数据池配置
- for (let pondKey of mittDataPondMap.keys()) {
- const requestDataPondItem = requestDataPond.find(item => item.dataPondId === pondKey)
- if (requestDataPondItem) {
- newPondItemInterval(requestGlobalConfig, requestDataPondItem, mittDataPondMap.get(pondKey))
- }
- }
- }
- return {
- addGlobalDataInterface,
- initDataPond
- }
- }
|