Browse Source

feat: 自定义数据接口对接&逻辑实现

main
betaqi 2 weeks ago
parent
commit
e8fb7be067
  1. 60
      src/api/http.ts
  2. 147
      src/api/path/dataSource/index.ts
  3. 85
      src/enums/dataSourceEnum.ts
  4. 1
      src/enums/httpEnum.ts
  5. 2
      src/hooks/useChartDataFetch.hook.ts
  6. 1
      src/hooks/useChartDataPondFetch.hook.ts
  7. 5
      src/packages/public/publicConfig.ts
  8. 26
      src/store/modules/chartEditStore/chartEditStore.d.ts
  9. 2631
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/data.ts
  10. 188
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/index.vue
  11. 2
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/components/data-source-model.vue
  12. 49
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/index.vue
  13. 99
      src/views/chart/ContentConfigurations/components/ChartData/index.d.ts

60
src/api/http.ts

@ -1,16 +1,20 @@
import axiosInstance from './axios' import axiosInstance from './axios'
import { import {
RequestHttpEnum,
ContentTypeEnum, ContentTypeEnum,
RequestBodyEnum, RequestBodyEnum,
RequestDataTypeEnum,
RequestContentTypeEnum, RequestContentTypeEnum,
RequestDataTypeEnum,
RequestHttpEnum,
RequestParamsObjType RequestParamsObjType
} from '@/enums/httpEnum' } from '@/enums/httpEnum'
import type { RequestGlobalConfigType, RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' import type {
RequestConfigType,
RequestGlobalConfigType
} from '@/store/modules/chartEditStore/chartEditStore.d'
import { getLocalStorage } from "@/utils"; import { getLocalStorage } from "@/utils";
import { StorageEnum } from "@/enums/storageEnum"; import { StorageEnum } from "@/enums/storageEnum";
import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d' import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d'
import { axiosPre } from "@/settings/httpSetting";
export const get = <T = any>(url: string, params?: object) => { export const get = <T = any>(url: string, params?: object) => {
return axiosInstance<T>({ return axiosInstance<T>({
@ -143,6 +147,7 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
if (!targetParams || !globalParams) { if (!targetParams || !globalParams) {
return return
} }
// 全局 // 全局
const { const {
// 全局请求源地址 // 全局请求源地址
@ -252,3 +257,52 @@ export const customizeHttp = (targetParams: RequestConfigType, globalParams: Req
window['$message'].error('URL地址格式有误!') window['$message'].error('URL地址格式有误!')
} }
} }
/**
* *
* @param requestConfig {
* url: 请求地址 -> ${ModuleTypeEnum.PROJECT}
* method: 请求方式 get/post/del/put/patch
* params: 请求参数
* }
*/
export const specialCustomizeHttp = async (
requestConfig: {
url: string
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | string
params: any
}
) => {
if (!requestConfig) return
// 处理头部
let headers = appendTokenAndTenant({}, import.meta.env.VITE_DEV_PATH)
// data 参数
let data: RequestParamsObjType | FormData | string = {}
// params 参数
let params: any = { ...requestConfig.params }
// form 类型处理
let formData: FormData = new FormData()
formData.set('default', 'defaultData')
// 类型处理
try {
const url = (new Function("return `" + `${import.meta.env.VITE_DEV_PATH}${axiosPre}${requestConfig.url}`.trim() + "`"))();
debugger
return await axiosInstance(
{
url,
method: requestConfig.method,
data,
params,
headers
}
)
} catch (error) {
console.error(error)
window['$message']?.error('URL 地址格式有误!')
return Promise.reject(error)
}
}

147
src/api/path/dataSource/index.ts

@ -0,0 +1,147 @@
import { http } from "@/api/http";
import { ModuleTypeEnum, RequestHttpEnum } from "@/enums/httpEnum";
import { ProjectDetail } from "@/api/path/project";
import { getLocalStorage, httpErrorHandle } from "@/utils";
import { RequestDataSourceConfig } from '@/store/modules/chartEditStore/chartEditStore.d'
import { StorageEnum } from "@/enums/storageEnum";
import { SystemStoreEnum } from '@/store/modules/systemStore/systemStore.d'
import { SelectDataSourceTypeAPIObj } from "@/enums/dataSourceEnum";
/*
*
*/
export const fetchDataSite = async (data: object) => {
try {
return await http(RequestHttpEnum.GET)<ProjectDetail>(`${ModuleTypeEnum.DATA}/get-site`)
} catch {
httpErrorHandle()
}
}
/*
*
* @param data {
* siteId // 站点
* }
*/
export const fetchDataDevice = async (data: object) => {
try {
return await http(RequestHttpEnum.GET)<ProjectDetail>(`${ModuleTypeEnum.DATA}/get-entity`,data)
} catch {
httpErrorHandle()
}
}
/*
*
* @param data {
* siteId // 站点
* entityId // 设备
* }
*/
export const fetchDataPoint = async (data: object) => {
try {
return await http(RequestHttpEnum.GET)<ProjectDetail>(`${ModuleTypeEnum.DATA}/get-point`, data)
} catch {
httpErrorHandle()
}
}
// {
// "queryType": 2,
// "site": "53",
// "width": "1d",
// "tenantId": 169,
// "interval":"1h",
// "points":[]
// }
/*
*
* @param params {
* queryType = 2
* siteId // 站点
* entityId // 设备
* width = 1d
* tenantId
* interval
* points = []
* }
*/
export async function test (){
// const params = {
// "queryType": 1,
// "site": 56,
// "with": 30,
// "deviceSn": 454,
// "points": [
// 4,
// 7
// ],
// "tenantId": 169
// }
const params = {
"queryType": 2,
"site": 56,
"with": "6h",
"interval": "20m",
"points": [],
"tenantId": 169
}
try {
return await http(RequestHttpEnum.POST)<ProjectDetail>(`${ModuleTypeEnum.DATA}/get-by-iot`, params)
} catch {
httpErrorHandle()
}
}
function getPointParams(requestSource:RequestDataSourceConfig) {
let params:any = {
queryType: SelectDataSourceTypeAPIObj[requestSource.dataSourceType],
site: requestSource.station,
with: requestSource.recentTimeRange,
deviceSn: String(requestSource.device),
points: requestSource.points,
tenantId: getToken()
}
return params
}
function getEarningParams(requestSource:RequestDataSourceConfig){
let params: any = {
queryType: SelectDataSourceTypeAPIObj[requestSource.dataSourceType],
site:requestSource.station,
with: requestSource.recentTimeRange,
interval: '20m',
points: [],
tenantId: getToken()
}
return params
}
export const fetchDataByIot = async (requestSource:RequestDataSourceConfig) => {
let params:any = {}
if(requestSource.dataSourceType === 'point') {
params = getPointParams(requestSource)
} else if(requestSource.dataSourceType === 'earning') {
params = getEarningParams(requestSource)
}
try {
return await http(RequestHttpEnum.POST)<ProjectDetail>(`${ModuleTypeEnum.DATA}/get-by-iot`, params)
} catch {
httpErrorHandle()
}
}
function getToken() {
const info = getLocalStorage(StorageEnum.GO_SYSTEM_STORE)
return info ? info[SystemStoreEnum.TENANT_INFO]['tenantId'] : undefined
}

85
src/enums/dataSourceEnum.ts

@ -0,0 +1,85 @@
/**
* @description:
*/
export enum DataSourceTypeEnum {
// 收益
EARNING = 'earning',
// 分
POINT = 'point'
}
/**
* @description:
*/
export const SelectDataSourceTypeNameObj = {
[DataSourceTypeEnum.EARNING]: '收益数据',
[DataSourceTypeEnum.POINT]: '点位数据',
}
export const SelectDataSourceTypeAPIObj = {
[DataSourceTypeEnum.EARNING]: 2,
[DataSourceTypeEnum.POINT]: 1,
}
/**
* @description:
*/
export enum EarningTimeRangeEnum {
LAST_6h= '6h',
LAST_12h= '12h',
LAST_1d= '1d',
LAST_2d= '2d',
LAST_3d = '3d',
LAST_4d = '4d',
LAST_5d = '5d',
LAST_6d = '6d',
LAST_7d = '7d',
}
/**
* @description:
*/
export const EarningTimeRangeNameObj = {
[EarningTimeRangeEnum.LAST_6h]: '最近6小时',
[EarningTimeRangeEnum.LAST_12h]: '最近12小时',
[EarningTimeRangeEnum.LAST_1d]: '最近1天',
[EarningTimeRangeEnum.LAST_2d]: '最近2天',
[EarningTimeRangeEnum.LAST_3d]: '最近3天',
[EarningTimeRangeEnum.LAST_4d]: '最近4天',
[EarningTimeRangeEnum.LAST_5d]: '最近5天',
[EarningTimeRangeEnum.LAST_6d]: '最近6天',
[EarningTimeRangeEnum.LAST_7d]: '最近7天',
}
/**
* @description:
*/
export enum PointsTimeRangeEnum {
// 收益
LAST_30= '30m',
LAST_25= '25m',
LAST_20 = '20m',
LAST_15 = '15m',
LAST_10 = '10m',
LAST_5 = '5m',
LAST_1 = '1m',
}
/**
* @description: // 收益时间范围名称
*/
export const PointsTimeRangeNameObj = {
[PointsTimeRangeEnum.LAST_30]: '最近30分钟',
[PointsTimeRangeEnum.LAST_25]: '最近25分钟',
[PointsTimeRangeEnum.LAST_20]: '最近20分钟',
[PointsTimeRangeEnum.LAST_15]: '最近15分钟',
[PointsTimeRangeEnum.LAST_10]: '最近10分钟',
[PointsTimeRangeEnum.LAST_5 ]: '最近5分钟',
[PointsTimeRangeEnum.LAST_1 ]: '最近1分钟',
}

1
src/enums/httpEnum.ts

@ -3,6 +3,7 @@ export enum ModuleTypeEnum {
SYSTEM = 'system', SYSTEM = 'system',
INFRA = 'infra', INFRA = 'infra',
PROJECT = 'report/go-view/project', PROJECT = 'report/go-view/project',
DATA= 'report/go-view/data',
} }
// 请求结果集 // 请求结果集

2
src/hooks/useChartDataFetch.hook.ts

@ -123,7 +123,7 @@ export const useChartDataFetch = (
const chartEditStore = useChartEditStore() const chartEditStore = useChartEditStore()
const { const {
station, station,
devices, device,
points, points,
requestIntervalUnit: targetUnit, requestIntervalUnit: targetUnit,
requestInterval: targetInterval requestInterval: targetInterval

1
src/hooks/useChartDataPondFetch.hook.ts

@ -97,7 +97,6 @@ export const useChartDataPondFetch = () => {
const requestDataPondId = targetComponent.request.requestDataPondId as string const requestDataPondId = targetComponent.request.requestDataPondId as string
// 新增数据项 // 新增数据项
const mittPondIdArr = mittDataPondMap.get(requestDataPondId) || [] const mittPondIdArr = mittDataPondMap.get(requestDataPondId) || []
debugger
mittPondIdArr.push({ mittPondIdArr.push({
updateCallback: updateCallback, updateCallback: updateCallback,
filter: targetComponent.filter filter: targetComponent.filter

5
src/packages/public/publicConfig.ts

@ -20,6 +20,7 @@ import {
} from '@/packages/index.d' } from '@/packages/index.d'
import { chartInitConfig } from '@/settings/designSetting' import { chartInitConfig } from '@/settings/designSetting'
import cloneDeep from 'lodash/cloneDeep' import cloneDeep from 'lodash/cloneDeep'
import { PointsTimeRangeEnum, DataSourceTypeEnum } from "@/enums/dataSourceEnum";
// 请求基础属性 // 请求基础属性
export const requestConfig: RequestConfigType = { export const requestConfig: RequestConfigType = {
@ -47,9 +48,11 @@ export const requestConfig: RequestConfigType = {
// 请求数据源属性 // 请求数据源属性
export const requestDataSourceConfig: RequestDataSourceConfig = { export const requestDataSourceConfig: RequestDataSourceConfig = {
dataSourceType: DataSourceTypeEnum.POINT,
station: '', station: '',
devices: [], device: '',
points: [], points: [],
recentTimeRange: PointsTimeRangeEnum.LAST_20,
requestInterval: 5, requestInterval: 5,
requestIntervalUnit: RequestHttpIntervalEnum.SECOND, requestIntervalUnit: RequestHttpIntervalEnum.SECOND,
} }

26
src/store/modules/chartEditStore/chartEditStore.d.ts vendored

@ -1,17 +1,21 @@
import { CreateComponentType, CreateComponentGroupType, FilterEnum } from '@/packages/index.d' import { CreateComponentGroupType, CreateComponentType, FilterEnum } from '@/packages/index.d'
import { HistoryActionTypeEnum } from '@/store/modules/chartHistoryStore/chartHistoryStore.d' import { HistoryActionTypeEnum } from '@/store/modules/chartHistoryStore/chartHistoryStore.d'
import { SyncEnum } from '@/enums/editPageEnum' import { SyncEnum } from '@/enums/editPageEnum'
import { import {
RequestHttpEnum, RequestBodyEnum,
RequestContentTypeEnum, RequestContentTypeEnum,
RequestDataTypeEnum, RequestDataTypeEnum,
RequestHttpEnum,
RequestHttpIntervalEnum, RequestHttpIntervalEnum,
RequestParams, RequestParams
RequestBodyEnum,
RequestParamsObjType
} from '@/enums/httpEnum' } from '@/enums/httpEnum'
import { PreviewScaleEnum } from '@/enums/styleEnum' import { PreviewScaleEnum } from '@/enums/styleEnum'
import type { ChartColorsNameType, CustomColorsType, GlobalThemeJsonType } from '@/settings/chartThemes/index' import type {
ChartColorsNameType,
CustomColorsType,
GlobalThemeJsonType
} from '@/settings/chartThemes/index'
import { DataSourceTypeEnum } from "@/enums/dataSourceEnum";
// 项目数据枚举 // 项目数据枚举
export enum ProjectInfoEnum { export enum ProjectInfoEnum {
@ -22,7 +26,7 @@ export enum ProjectInfoEnum {
// 描述 // 描述
REMARKS = 'remarks', REMARKS = 'remarks',
// 缩略图 // 缩略图
THUMBNAIL= 'thumbnail', THUMBNAIL = 'thumbnail',
// 是否公开发布 // 是否公开发布
RELEASE = 'release' RELEASE = 'release'
} }
@ -48,7 +52,7 @@ export enum EditCanvasTypeEnum {
IS_CREATE = 'isCreate', IS_CREATE = 'isCreate',
IS_DRAG = 'isDrag', IS_DRAG = 'isDrag',
IS_SELECT = 'isSelect', IS_SELECT = 'isSelect',
IS_CODE_EDIT="isCodeEdit" IS_CODE_EDIT = "isCodeEdit"
} }
// 编辑区域 // 编辑区域
@ -236,9 +240,11 @@ export interface RequestConfigType extends RequestPublicConfigType {
// 数据源请求配置 // 数据源请求配置
export interface RequestDataSourceConfig { export interface RequestDataSourceConfig {
dataSourceType: DataSourceTypeEnum
station: string, station: string,
devices: [], device: Array[any],
points: [], points: Array[any],
recentTimeRange: number,
requestInterval: number, requestInterval: number,
requestIntervalUnit: RequestHttpIntervalEnum, requestIntervalUnit: RequestHttpIntervalEnum,
} }

2631
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/data.ts

File diff suppressed because it is too large Load Diff

188
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/index.vue

@ -1,38 +1,72 @@
<template> <template>
<setting-item-box <setting-item-box
:itemRightStyle="{ :itemRightStyle="{
gridTemplateColumns: '3fr 3fr 1.5fr' gridTemplateColumns: '3fr 3fr'
}" }"
style="padding-right: 25px" style="padding-right: 25px"
> >
<template #name> <template #name>
数据源 数据源:
</template> </template>
<setting-item name="数据类型">
<n-input-group>
<n-select
v-model:value="targetDataSourceRequest.dataSourceType"
:options="selectDataSourceTypeOptions"
/>
</n-input-group>
</setting-item>
<setting-item name="站点选择"> <setting-item name="站点选择">
<n-input-group> <n-input-group>
<n-select <n-select
v-model:value="targetDataSourceRequest.station" v-model:value="targetDataSourceRequest.station"
placeholder="请选择站点" placeholder="请选择站点"
:options="options" :options="siteList"
labelField="name"
valueField="id"
@update:value="handleStationChange"
/> />
</n-input-group> </n-input-group>
</setting-item> </setting-item>
</setting-item-box>
<setting-item name="设备选择"> <setting-item-box
:itemRightStyle="{
gridTemplateColumns: '4.5fr 2.5fr 2fr'
}"
style="padding-right: 25px"
>
<template #name>
数据配置:
</template>
<setting-item name="设备选择" v-if="targetDataSourceRequest.dataSourceType == 'point'">
<n-cascader <n-cascader
v-model:value="targetDataSourceRequest.devices" v-model:value="targetDataSourceRequest.device"
:cascade="false" :cascade="false"
multiple :multiple="false"
:show-path="false" :show-path="false"
placeholder="请选择设备" placeholder="请选择设备"
max-tag-count="responsive"
expand-trigger="click" expand-trigger="click"
:options="deviceData" :options="deviceList"
label-field="name" label-field="name"
value-field="id" value-field="sn"
@update:value="handleUpdateValue" check-strategy="all"
:leaf-only="false"
@update:value="handleDeviceChange"
/> />
</setting-item> </setting-item>
<setting-item name="时间范围">
<n-input-group>
<n-select
v-model:value="targetDataSourceRequest.recentTimeRange"
:options="selectRecentTimeRangeOptions"
/>
</n-input-group>
</setting-item>
<setting-item name="更新间隔,为0只会初始化"> <setting-item name="更新间隔,为0只会初始化">
<n-input-group> <n-input-group>
<n-input-number <n-input-number
@ -52,16 +86,17 @@
<setting-item-box <setting-item-box
style="padding-right: 25px" style="padding-right: 25px"
:itemRightStyle="{ gridTemplateColumns: '1fr' }" :itemRightStyle="{ gridTemplateColumns: '1fr' }"
v-show="targetDataSourceRequest.dataSourceType == 'point'"
> >
<template #name> <template #name>
点位: 点位:
</template> </template>
<n-infinite-scroll style="height: 500px" :distance="10"> <n-infinite-scroll style="height: 428px; overflow: auto" :distance="10">
<n-checkbox-group v-model:value="targetDataSourceRequest.points"> <n-checkbox-group v-model:value="targetDataSourceRequest.points">
<n-grid :y-gap="8" :cols="3"> <n-grid :y-gap="8" :cols="3">
<n-gi v-for="point in pointsData"> <n-gi v-for="point in pointList" :key="point.columnName">
<n-checkbox :value="point.id" :label="point.nameCn"/> <n-checkbox :value="point.columnName" :label="point.nameCn"/>
</n-gi> </n-gi>
</n-grid> </n-grid>
</n-checkbox-group> </n-checkbox-group>
@ -71,50 +106,99 @@
<script setup lang="ts"> <script setup lang="ts">
import { SettingItem, SettingItemBox } from "@/components/Pages/ChartItemSetting"; import { SettingItem, SettingItemBox } from "@/components/Pages/ChartItemSetting";
import { type PropType } from "vue"; import { computed, onMounted, ref, watch } from "vue";
import { import { NCascader } from 'naive-ui'
deviceData,
pointsData
} from "@/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/data";
import { NCascader, NInfiniteScroll } from 'naive-ui'
import type { RequestDataSourceConfig } from "@/store/modules/chartEditStore/chartEditStore.d"; import type { RequestDataSourceConfig } from "@/store/modules/chartEditStore/chartEditStore.d";
import { selectTimeOptions } from '@/views/chart/ContentConfigurations/components/ChartData/index.d' import {
selectDataSourceTypeOptions,
selectEarningTimeRangeOptions,
selectPointsTimeRangeOptions,
selectTimeOptions
} from '@/views/chart/ContentConfigurations/components/ChartData/index.d'
import { fetchDataDevice, fetchDataPoint, fetchDataSite } from "@/api/path/dataSource";
const props = defineProps<{ const props = defineProps<{
targetDataSourceRequest: PropType<RequestDataSourceConfig> targetDataSourceRequest:RequestDataSourceConfig
}>() }>()
const options = [ const selectRecentTimeRangeOptions = computed(() => {
{ console.log('computed')
label: 'Everybody\'s Got Something to Hide Except Me and My Monkey', if (props.targetDataSourceRequest!.dataSourceType === 'point') {
value: 'song0', props.targetDataSourceRequest!.recentTimeRange = selectPointsTimeRangeOptions[0].value
disabled: true return selectPointsTimeRangeOptions
}, } else if(props.targetDataSourceRequest!.dataSourceType === 'earning') {
{ props.targetDataSourceRequest!.recentTimeRange = selectEarningTimeRangeOptions[0].value
label: 'Drive My Car', return selectEarningTimeRangeOptions
value: 'song1' }
}, return []
{ })
label: 'Norwegian Wood',
value: 'song2'
}, const siteList = ref<any>([])
{ async function loadSiteData() {
label: 'You Won\'t See', const res = await fetchDataSite()
value: 'song3', if (res && res.code === 0 && Array.isArray(res.data)) {
disabled: true siteList.value = res.data
}, } else {
{ window['$message'].error('站点列表数据获取失败!')
label: 'Nowhere Man', }
value: 'song4' }
}, watch(() => props.targetDataSourceRequest.station, (val) => {
{ val && loadDevicesData()
label: 'Think For Yourself', },{
value: 'song5' immediate: true,
}, })
{
label: 'The Word', function handleStationChange() {
value: 'song6' props.targetDataSourceRequest.device = ''
}] }
const deviceList = ref<any>([])
async function loadDevicesData() {
const res = await fetchDataDevice({
siteId: props.targetDataSourceRequest.station
})
if (res && res.code === 0 && Array.isArray(res.data)) {
deviceList.value = res.data
} else {
window['$message'].error('设备列表数据获取失败!')
}
}
watch(() => props.targetDataSourceRequest.device, (val) => {
val && loadPointsData()
},{
immediate: true,
})
function handleDeviceChange () {
props.targetDataSourceRequest.points = []
}
const pointList = ref<any>([])
async function loadPointsData(){
const findDeviceId = deviceList.value.find((device: any) => device.sn ===
props.targetDataSourceRequest.device).id
if (!findDeviceId) {
pointList.value = []
return
}
const res = await fetchDataPoint({
siteId: props.targetDataSourceRequest.station,
entityId: findDeviceId
})
if (res && res.code === 0 && Array.isArray(res.data)) {
pointList.value = res.data
} else {
window['$message'].error('点位列表数据获取失败!')
}
}
onMounted(()=>{
loadSiteData()
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.select-time-options { .select-time-options {

2
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/components/data-source-model.vue

@ -7,7 +7,7 @@
:onEsc="onEsc" :onEsc="onEsc"
> >
<n-card :bordered="false" role="dialog" size="small" aria-modal="true" <n-card :bordered="false" role="dialog" size="small" aria-modal="true"
style="width: 1000px; height: 718px"> style="width: 1000px; height: auto; max-height: 718px">
<template #header></template> <template #header></template>
<template #header-extra></template> <template #header-extra></template>
<n-scrollbar style="max-height: 718px"> <n-scrollbar style="max-height: 718px">

49
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/index.vue

@ -1,20 +1,20 @@
<template> <template>
<div class="go-chart-configurations-data-source"> <div class="go-chart-configurations-data-source">
<n-card class="n-card-shallow"> <n-card class="n-card-shallow">
<setting-item-box name="站点选择" :alone="true"> <setting-item-box name="设备选择" :alone="true">
<n-input size="small" :placeholder="targetData.requestSource.station || '暂无'" <n-input size="small" :placeholder="SelectDataSourceTypeNameObj[targetData.requestSource.dataSourceType] || '暂无'"
:disabled="true"> :disabled="true">
<template #prefix> <template #prefix>
<n-icon :component="DataCenterIcon"/> <n-icon :component="DevicesIcon"/>
</template> </template>
</n-input> </n-input>
</setting-item-box> </setting-item-box>
<setting-item-box name="设备选择" :alone="true"> <setting-item-box name="站点选择" :alone="true">
<n-input size="small" :placeholder="!!targetData.requestSource.devices.length || '暂无'" <n-input size="small" :placeholder="targetData.requestSource.station || '暂无'"
:disabled="true"> :disabled="true">
<template #prefix> <template #prefix>
<n-icon :component="DevicesIcon"/> <n-icon :component="DataCenterIcon"/>
</template> </template>
</n-input> </n-input>
</setting-item-box> </setting-item-box>
@ -65,12 +65,12 @@ import {
import { computed, ref } from "vue"; import { computed, ref } from "vue";
import { SettingItemBox } from "@/components/Pages/ChartItemSetting"; import { SettingItemBox } from "@/components/Pages/ChartItemSetting";
import { useTargetData } from "../../../hooks/useTargetData.hook"; import { useTargetData } from "../../../hooks/useTargetData.hook";
import { request } from "dom-helpers/animationFrame";
import DataSourceModel from "./components/data-source-model.vue"; import DataSourceModel from "./components/data-source-model.vue";
import { useDesignStore } from '@/store/modules/designStore/designStore' import { useDesignStore } from '@/store/modules/designStore/designStore'
import { import { SelectDataSourceTypeNameObj } from "@/enums/dataSourceEnum";
ChartDataRequest import { specialCustomizeHttp } from "@/api/http";
} from "@/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/index"; import { newFunctionHandle } from "@/utils";
import { fetchDataByIot } from "@/api/path/dataSource";
const { DataCenterIcon, DevicesIcon, ActivityIcon } = icon.carbon const { DataCenterIcon, DevicesIcon, ActivityIcon } = icon.carbon
const { HelpOutlineIcon, FlashIcon } = icon.ionicons5 const { HelpOutlineIcon, FlashIcon } = icon.ionicons5
@ -79,7 +79,7 @@ const { targetData, chartEditStore } = useTargetData()
const loading = ref(false) const loading = ref(false)
const sourceModelShow = ref(false) const sourceModelShow = ref(false)
const showMatching = ref(false)
function requestSourceModelHandle() { function requestSourceModelHandle() {
sourceModelShow.value = true sourceModelShow.value = true
@ -89,6 +89,33 @@ const designStore = useDesignStore()
const themeColor = computed(() => { const themeColor = computed(() => {
return designStore.getAppTheme return designStore.getAppTheme
}) })
async function sendHandle(){
const requestSource = targetData.value?.requestSource
if (!requestSource) return
loading.value = true
try {
const res = await fetchDataByIot(requestSource)
if (res) {
const { data } = res
if (!data && !targetData.value.filter) {
window['$message'].warning('您的数据不符合默认格式,请配置过滤器!')
showMatching.value = true
return
}
targetData.value.option.dataset = newFunctionHandle(data, res, targetData.value.filter)
showMatching.value = true
return
}
window['$message'].warning('没有拿到返回值,请检查接口!')
}catch (error) {
console.error(error);
loading.value = false
window['$message'].warning('数据异常,请检查参数!')
}
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

99
src/views/chart/ContentConfigurations/components/ChartData/index.d.ts vendored

@ -1,4 +1,17 @@
import { RequestHttpEnum, RequestHttpIntervalEnum, RequestDataTypeEnum, SelectHttpTimeNameObj } from '@/enums/httpEnum' import {
RequestDataTypeEnum,
RequestHttpEnum,
RequestHttpIntervalEnum,
SelectHttpTimeNameObj
} from '@/enums/httpEnum'
import {
DataSourceTypeEnum,
EarningTimeRangeEnum,
EarningTimeRangeNameObj,
PointsTimeRangeEnum,
PointsTimeRangeNameObj,
SelectDataSourceTypeNameObj
} from "@/enums/dataSourceEnum";
// 匹配结果 // 匹配结果
export enum DataResultEnum { export enum DataResultEnum {
@ -103,4 +116,88 @@ export const selectTimeOptions: SelectHttpTimeType[] = [
label: SelectHttpTimeNameObj[RequestHttpIntervalEnum.DAY], label: SelectHttpTimeNameObj[RequestHttpIntervalEnum.DAY],
value: RequestHttpIntervalEnum.DAY value: RequestHttpIntervalEnum.DAY
}, },
]
// 数据源 数据类型选项
export interface SelectDataSourceType {
label: string
value: RequestHttpIntervalEnum
}
export const selectDataSourceTypeOptions: SelectDataSourceType[] = [
{
label: SelectDataSourceTypeNameObj[DataSourceTypeEnum.POINT],
value: DataSourceTypeEnum.POINT
},
{
label: SelectDataSourceTypeNameObj[DataSourceTypeEnum.EARNING],
value: DataSourceTypeEnum.EARNING
},
]
export const selectPointsTimeRangeOptions: SelectDataSourceType[] = [
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_30],
value: PointsTimeRangeEnum.LAST_30
},
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_25],
value: PointsTimeRangeEnum.LAST_25
},
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_20],
value: PointsTimeRangeEnum.LAST_20
},
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_15],
value: PointsTimeRangeEnum.LAST_15
},
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_5],
value: PointsTimeRangeEnum.LAST_5
},
{
label: PointsTimeRangeNameObj[PointsTimeRangeEnum.LAST_1],
value: PointsTimeRangeEnum.LAST_1
},
]
export const selectEarningTimeRangeOptions: SelectDataSourceType[] = [
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_6h],
value: EarningTimeRangeEnum.LAST_6h
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_12h],
value: EarningTimeRangeEnum.LAST_12h
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_1d],
value: EarningTimeRangeEnum.LAST_1d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_2d],
value: EarningTimeRangeEnum.LAST_2d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_3d],
value: EarningTimeRangeEnum.LAST_3d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_4d],
value: EarningTimeRangeEnum.LAST_4d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_5d],
value: EarningTimeRangeEnum.LAST_5d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_6d],
value: EarningTimeRangeEnum.LAST_6d
},
{
label: EarningTimeRangeNameObj[EarningTimeRangeEnum.LAST_7d],
value: EarningTimeRangeEnum.LAST_7d
}
] ]
Loading…
Cancel
Save