Browse Source

feat: [数据源] 增加静态逻辑

main
betaqi 4 days ago
parent
commit
9f916572bf
  1. 6
      package.json
  2. 10726
      pnpm-lock.yaml
  3. 4
      src/enums/httpEnum.ts
  4. 28
      src/packages/index.d.ts
  5. 29
      src/packages/public/publicConfig.ts
  6. 10
      src/plugins/icon.ts
  7. 9
      src/store/modules/chartEditStore/chartEditStore.d.ts
  8. 2
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue
  9. 4
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataPond/index.vue
  10. 2631
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/data.ts
  11. 3
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/index.ts
  12. 116
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/index.vue
  13. 120
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/components/data-source-model.vue
  14. 5
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/index.ts
  15. 125
      src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/index.vue
  16. 1
      src/views/chart/ContentConfigurations/components/ChartData/index.d.ts
  17. 20
      src/views/chart/ContentConfigurations/components/ChartData/index.vue
  18. 5
      src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts

6
package.json

@ -43,10 +43,11 @@ @@ -43,10 +43,11 @@
"keymaster": "^1.6.2",
"mitt": "^3.0.0",
"monaco-editor": "^0.33.0",
"naive-ui": "2.34.3",
"naive-ui": "^2.42.0",
"pinia": "^2.0.13",
"pnpm": "^8.7.0",
"screenfull": "^6.0.1",
"smplotting-xe2-plugin": "^0.1.3",
"three": "^0.145.0",
"vite-plugin-cesium": "^1.2.23",
"vue": "^3.2.31",
@ -58,8 +59,7 @@ @@ -58,8 +59,7 @@
"vue3-sketch-ruler": "^1.3.3",
"vuedraggable": "^4.1.0",
"xbsj-xe2": "^0.1.16",
"xbsj-xe2-assets": "^0.1.16",
"smplotting-xe2-plugin": "^0.1.3"
"xbsj-xe2-assets": "^0.1.16"
},
"devDependencies": {
"@commitlint/cli": "^17.0.2",

10726
pnpm-lock.yaml

File diff suppressed because it is too large Load Diff

4
src/enums/httpEnum.ts

@ -23,7 +23,9 @@ export enum RequestDataTypeEnum { @@ -23,7 +23,9 @@ export enum RequestDataTypeEnum {
// 请求数据
AJAX = 1,
// 数据池
Pond = 2
Pond = 2,
// 数据源
Source = 3
}
// 请求主体类型

28
src/packages/index.d.ts vendored

@ -1,6 +1,15 @@ @@ -1,6 +1,15 @@
import { BaseEvent, EventLife, InteractEvents, InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
import {
BaseEvent,
EventLife,
InteractEvents,
InteractEventOn,
InteractActionsType
} from '@/enums/eventEnum'
import type { GlobalThemeJsonType } from '@/settings/chartThemes/index'
import type { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
import type {
RequestConfigType,
RequestDataSourceConfig
} from '@/store/modules/chartEditStore/chartEditStore.d'
export enum ChartFrameEnum {
// 支持 dataset 的 echarts 框架
@ -47,7 +56,8 @@ export type ConfigType = { @@ -47,7 +56,8 @@ export type ConfigType = {
// 数据请求
interface requestConfig {
request: RequestConfigType
request: RequestConfigType,
requestSource: RequestDataSourceConfig
}
// Echarts 数据类型
@ -102,7 +112,7 @@ export enum FilterEnum { @@ -102,7 +112,7 @@ export enum FilterEnum {
//动画延迟时长
CIRCULATE_DELAY_TIME = 'circulateDelayTime',
//样式增强
STYLE_ENHANCE= 'styleEnhance',
STYLE_ENHANCE = 'styleEnhance',
}
@ -129,7 +139,15 @@ export const BlendModeEnumList = [ @@ -129,7 +139,15 @@ export const BlendModeEnumList = [
export interface PublicConfigType {
id: string
isGroup: boolean
attr: { x: number; y: number; w: number; h: number; zIndex: number; offsetX: number; offsetY: number }
attr: {
x: number;
y: number;
w: number;
h: number;
zIndex: number;
offsetX: number;
offsetY: number
}
styles: {
[FilterEnum.FILTERS_SHOW]: boolean
[FilterEnum.OPACITY]: number

29
src/packages/public/publicConfig.ts

@ -1,5 +1,8 @@ @@ -1,5 +1,8 @@
import { getUUID } from '@/utils'
import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
import {
RequestConfigType,
RequestDataSourceConfig
} from '@/store/modules/chartEditStore/chartEditStore.d'
import { groupTitle } from '@/settings/designSetting'
import { BaseEvent, EventLife } from '@/enums/eventEnum'
import {
@ -42,6 +45,15 @@ export const requestConfig: RequestConfigType = { @@ -42,6 +45,15 @@ export const requestConfig: RequestConfigType = {
}
}
// 请求数据源属性
export const requestDataSourceConfig: RequestDataSourceConfig = {
station: '',
devices: [],
points: [],
requestInterval: 5,
requestIntervalUnit: RequestHttpIntervalEnum.SECOND,
}
// 单实例类
export class PublicConfigClass implements PublicConfigType {
public id = getUUID()
@ -78,19 +90,19 @@ export class PublicConfigClass implements PublicConfigType { @@ -78,19 +90,19 @@ export class PublicConfigClass implements PublicConfigType {
// 动画
animations: [],
// 动画开关
animationsOpen:false,
animationsOpen: false,
// 动画循环
animationsCirculate:false,
animationsCirculate: false,
//动画播放速度曲线默认平滑
animationsCurve:'linear',
animationsCurve: 'linear',
//动画方向
animationsDirection:'',
animationsDirection: '',
// 动画时长/秒
circulatePlayTime:1,
circulatePlayTime: 1,
// 动画延迟时长/秒
circulateDelayTime:0,
circulateDelayTime: 0,
//自定义样式增强
styleEnhance:"",
styleEnhance: "",
}
@ -105,6 +117,7 @@ export class PublicConfigClass implements PublicConfigType { @@ -105,6 +117,7 @@ export class PublicConfigClass implements PublicConfigType {
}
// 请求
public request = cloneDeep(requestConfig)
public requestSource = cloneDeep(requestDataSourceConfig)
// 数据过滤
public filter = undefined
// 事件

10
src/plugins/icon.ts

@ -104,7 +104,9 @@ import { @@ -104,7 +104,9 @@ import {
Carbon3DSoftware as Carbon3DSoftwareIcon,
Filter as FilterIcon,
FilterEdit as FilterEditIcon,
Laptop as LaptopIcon
Laptop as LaptopIcon,
DataCenter as DataCenterIcon,
Activity as ActivityIcon
} from '@vicons/carbon'
const ionicons5 = {
@ -306,7 +308,11 @@ const carbon = { @@ -306,7 +308,11 @@ const carbon = {
FilterIcon,
FilterEditIcon,
// 图层
LaptopIcon
LaptopIcon,
// 站点
DataCenterIcon,
// 点位
ActivityIcon
}
// https://www.xicons.org/#/ 还有很多

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

@ -234,6 +234,15 @@ export interface RequestConfigType extends RequestPublicConfigType { @@ -234,6 +234,15 @@ export interface RequestConfigType extends RequestPublicConfigType {
}
}
// 数据源请求配置
export interface RequestDataSourceConfig {
station: string,
devices: [],
points: [],
requestInterval: number,
requestIntervalUnit: RequestHttpIntervalEnum,
}
// Store 类型
export interface ChartEditStoreType {
[ChartEditStoreEnum.PROJECT_INFO]: ProjectInfoType

2
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index.vue

@ -187,7 +187,7 @@ const isCharts = computed(() => { @@ -187,7 +187,7 @@ const isCharts = computed(() => {
const openEdit = (json:any) => {
console.log(toString(source.value))
console.log(targetData)
console.log(targetData.value)
content.value = JSONEditor()
console.log(content.value)
showModal.value = true

4
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataPond/index.vue

@ -165,8 +165,8 @@ onBeforeUnmount(() => { @@ -165,8 +165,8 @@ onBeforeUnmount(() => {
}
.edit-text {
position: absolute;
top: 0px;
left: 0px;
top: 0;
left: 0;
width: 325px;
height: 136px;
cursor: pointer;

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

File diff suppressed because it is too large Load Diff

3
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestDataSourceConfig/index.ts

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
import RequestDataSourceConfig from './index.vue'
export { RequestDataSourceConfig }

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

@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
<template>
<setting-item-box
:itemRightStyle="{
gridTemplateColumns: '3fr 3fr'
}"
style="padding-right: 25px"
>
<template #name>
数据源
</template>
<setting-item name="站点选择">
<n-input-group>
<n-select
v-model:value="targetDataSourceRequest.station"
placeholder="请选择站点"
:options="options"
/>
</n-input-group>
</setting-item>
<setting-item name="设备选择">
<n-cascader
v-model:value="targetDataSourceRequest.devices"
:cascade="false"
multiple
:show-path="false"
placeholder="请选择设备"
max-tag-count="responsive"
expand-trigger="click"
:options="deviceData"
label-field="name"
value-field="id"
@update:value="handleUpdateValue"
/>
</setting-item>
</setting-item-box>
<setting-item-box
style="padding-right: 25px"
:itemRightStyle="{ gridTemplateColumns: '1fr' }"
>
<template #name>
点位:
</template>
<n-infinite-scroll style="height: 300px" :distance="10">
<n-checkbox-group v-model:value="targetDataSourceRequest.points">
<n-grid :y-gap="8" :cols="3">
<n-gi v-for="point in pointsData">
<n-checkbox :value="point.id" :label="point.nameCn"/>
</n-gi>
</n-grid>
</n-checkbox-group>
</n-infinite-scroll>
</setting-item-box>
</template>
<script setup lang="ts">
import { SettingItem, SettingItemBox } from "@/components/Pages/ChartItemSetting";
import { PropType, ref } from "vue";
import {
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";
const props = defineProps<{
targetDataSourceRequest: PropType<RequestDataSourceConfig>
}>()
const value1 = ref(null)
const options = [
{
label: 'Everybody\'s Got Something to Hide Except Me and My Monkey',
value: 'song0',
disabled: true
},
{
label: 'Drive My Car',
value: 'song1'
},
{
label: 'Norwegian Wood',
value: 'song2'
},
{
label: 'You Won\'t See',
value: 'song3',
disabled: true
},
{
label: 'Nowhere Man',
value: 'song4'
},
{
label: 'Think For Yourself',
value: 'song5'
},
{
label: 'The Word',
value: 'song6'
}]
</script>
<style scoped lang="scss">
.item {
display: flex;
align-items: center;
height: 46px;
justify-content: center;
margin-bottom: 10px;
background-color: rgba(0, 128, 0, 0.16);
}
.item:last-child {
margin-bottom: 0;
}
</style>

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

@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
<template>
<n-modal
class="chart-data-source-model"
v-model:show="modelShowRef"
:mask-closable="false"
:closeOnEsc="true"
:onEsc="onEsc"
>
<n-card :bordered="false" role="dialog" size="small" aria-modal="true"
style="width: 1000px; height: 718px">
<template #header></template>
<template #header-extra></template>
<n-scrollbar style="max-height: 718px">
<div class="go-pr-3">
<n-space vertical>
<request-global-config></request-global-config>
<request-data-source-config
:target-data-source-request="targetData?.requestSource"></request-data-source-config>
</n-space>
</div>
</n-scrollbar>
<!-- 底部 -->
<template #action>
<n-space justify="space-between">
<div>
<n-text> {{ chartConfig.categoryName }} </n-text>
<n-text></n-text>
<n-tag type="primary" :bordered="false" style="border-radius: 5px">
{{ requestContentTypeObj[requestContentType] }}
</n-tag>
</div>
<div>
<n-button class="go-mr-3" @click="closeHandle">取消</n-button>
<n-button type="primary" @click="closeAndSendHandle"> {{
saveBtnText || '保存 & 发送请求'
}}
</n-button>
</div>
</n-space>
</template>
</n-card>
</n-modal>
</template>
<script setup lang="ts">
import { PropType, ref, toRefs, watch } from "vue";
import { CreateComponentType } from '@/packages/index.d'
import { useTargetData } from
"@/views/chart/ContentConfigurations/components/hooks/useTargetData.hook";
import { RequestDataSourceConfig } from '../../ChartDataRequest/components/RequestDataSourceConfig'
import { RequestGlobalConfig } from "../../ChartDataRequest/components/RequestGlobalConfig";
import { RequestContentTypeEnum } from "@/enums/httpEnum";
const emit = defineEmits(['update:modelShow', 'sendHandle'])
const props = defineProps({
modelShow: Boolean,
targetData: Object as PropType<CreateComponentType>,
saveBtnText: String || null
})
const { targetData } = useTargetData()
watch(() => targetData.value, (newVal) => {
console.log('targetData', newVal)
}, { deep: true })
const { chartConfig } = toRefs(props.targetData as CreateComponentType)
const { requestContentType } = toRefs((props.targetData as CreateComponentType).request)
const requestContentTypeObj = {
[RequestContentTypeEnum.DEFAULT]: '普通请求',
[RequestContentTypeEnum.SQL]: 'SQL 请求'
}
const closeHandle = () => {
emit('update:modelShow', false)
}
const closeAndSendHandle = () => {
emit('update:modelShow', false)
emit('sendHandle')
}
const onEsc = () => {
closeHandle()
}
const modelShowRef = ref(false)
watch(
() => props.modelShow,
newValue => {
modelShowRef.value = newValue
},
{
immediate: true
}
)
</script>
<style scoped lang="scss">
@include go('chart-data-source-model') {
&.n-card.n-modal,
.n-card {
@extend .go-background-filter;
}
.n-card-shallow {
background-color: rgba(0, 0, 0, 0) !important;
}
@include deep() {
& > .n-card__content {
padding-right: 0;
}
.n-card__content {
padding-bottom: 5px;
}
}
}
</style>

5
src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataSource/index.ts

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
import ChartDataSource from './index.vue'
export {
ChartDataSource
}

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

@ -0,0 +1,125 @@ @@ -0,0 +1,125 @@
<template>
<div class="go-chart-configurations-data-source">
<n-card class="n-card-shallow">
<setting-item-box name="站点选择" :alone="true">
<n-input size="small" :placeholder="targetData.requestSource.station || '暂无'"
:disabled="true">
<template #prefix>
<n-icon :component="DataCenterIcon"/>
</template>
</n-input>
</setting-item-box>
<setting-item-box name="设备选择" :alone="true">
<n-input size="small" :placeholder="!!targetData.requestSource.devices.length || '暂无'"
:disabled="true">
<template #prefix>
<n-icon :component="DevicesIcon"/>
</template>
</n-input>
</setting-item-box>
<div class="edit-text" @click="requestSourceModelHandle">
<div class="go-absolute-center">
<n-button type="primary" secondary>编辑配置</n-button>
</div>
</div>
</n-card>
<setting-item-box :alone="true">
<template #name>
测试
<n-tooltip trigger="hover">
<template #trigger>
<n-icon size="21" :depth="3">
<help-outline-icon></help-outline-icon>
</n-icon>
</template>
默认赋值给 dataset 字段
</n-tooltip>
</template>
<n-button type="primary" ghost @click="sendHandle">
<template #icon>
<n-icon>
<flash-icon/>
</n-icon>
</template>
发送请求
</n-button>
</setting-item-box>
<chart-data-matching-and-show :show="!loading" :ajax="true"></chart-data-matching-and-show>
<data-source-model
v-model:modelShow="sourceModelShow"
:targetData="targetData"
@sendHandle="sendHandle">
</data-source-model>
</div>
</template>
<script setup lang="ts">
import { icon } from '@/plugins'
import {
ChartDataMatchingAndShow
} from "@/views/chart/ContentConfigurations/components/ChartData/components/ChartDataMatchingAndShow/index";
import { computed, ref } from "vue";
import { SettingItemBox } from "@/components/Pages/ChartItemSetting";
import { useTargetData } from "../../../hooks/useTargetData.hook";
import { request } from "dom-helpers/animationFrame";
import DataSourceModel from "./components/data-source-model.vue";
import { useDesignStore } from '@/store/modules/designStore/designStore'
import {
ChartDataRequest
} from "@/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/index";
const { DataCenterIcon, DevicesIcon, ActivityIcon } = icon.carbon
const { HelpOutlineIcon, FlashIcon } = icon.ionicons5
const { targetData, chartEditStore } = useTargetData()
const loading = ref(false)
const sourceModelShow = ref(false)
function requestSourceModelHandle() {
sourceModelShow.value = true
}
const designStore = useDesignStore()
const themeColor = computed(() => {
return designStore.getAppTheme
})
</script>
<style scoped lang="scss">
@include go('chart-configurations-data-source') {
.n-card-shallow {
&.n-card {
@extend .go-background-filter;
@include deep() {
.n-card__content {
padding: 10px;
}
}
}
.edit-text {
position: absolute;
top: 0;
left: 0;
width: 325px;
height: 136px;
cursor: pointer;
opacity: 0;
transition: all 0.3s;
@extend .go-background-filter;
backdrop-filter: blur(2px) !important;
}
&:hover {
border-color: v-bind('themeColor');
.edit-text {
opacity: 1;
}
}
}
}
</style>

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

@ -17,6 +17,7 @@ export enum SelectCreateDataEnum { @@ -17,6 +17,7 @@ export enum SelectCreateDataEnum {
STATIC = '静态数据',
AJAX = '动态请求',
Pond = '公共接口',
Source = '数据源'
}
export interface SelectCreateDataType {

20
src/views/chart/ContentConfigurations/components/ChartData/index.vue

@ -1,14 +1,21 @@ @@ -1,14 +1,21 @@
<template>
<div class="go-chart-configurations-data" v-if="targetData">
<setting-item-box name="请求方式" :alone="true">
<n-select v-model:value="targetData.request.requestDataType" :disabled="isNotData" :options="selectOptions" />
<n-select v-model:value="targetData.request.requestDataType" :disabled="isNotData"
:options="selectOptions"/>
</setting-item-box>
<!-- 静态 -->
<chart-data-static v-if="targetData.request.requestDataType === RequestDataTypeEnum.STATIC"></chart-data-static>
<chart-data-static
v-if="targetData.request.requestDataType === RequestDataTypeEnum.STATIC"></chart-data-static>
<!-- 动态 -->
<chart-data-ajax v-if="targetData.request.requestDataType === RequestDataTypeEnum.AJAX"></chart-data-ajax>
<chart-data-ajax
v-if="targetData.request.requestDataType === RequestDataTypeEnum.AJAX"></chart-data-ajax>
<!-- 数据池 -->
<chart-data-pond v-if="targetData.request.requestDataType === RequestDataTypeEnum.Pond"></chart-data-pond>
<chart-data-pond
v-if="targetData.request.requestDataType === RequestDataTypeEnum.Pond"></chart-data-pond>
<!-- 数据源 -->
<chart-data-source
v-if="targetData.request.requestDataType === RequestDataTypeEnum.Source"></chart-data-source>
</div>
</template>
@ -24,6 +31,7 @@ import { SelectCreateDataType, SelectCreateDataEnum } from './index.d' @@ -24,6 +31,7 @@ import { SelectCreateDataType, SelectCreateDataEnum } from './index.d'
const ChartDataStatic = loadAsyncComponent(() => import('./components/ChartDataStatic/index.vue'))
const ChartDataAjax = loadAsyncComponent(() => import('./components/ChartDataAjax/index.vue'))
const ChartDataPond = loadAsyncComponent(() => import('./components/ChartDataPond/index.vue'))
const ChartDataSource = loadAsyncComponent(() => import('./components/ChartDataSource/index.vue'))
const { targetData } = useTargetData()
@ -40,6 +48,10 @@ const selectOptions: SelectCreateDataType[] = [ @@ -40,6 +48,10 @@ const selectOptions: SelectCreateDataType[] = [
{
label: SelectCreateDataEnum.Pond,
value: RequestDataTypeEnum.Pond
},
{
label: SelectCreateDataEnum.Source,
value: RequestDataTypeEnum.Source
}
]

5
src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts

@ -22,8 +22,9 @@ export const useModalDataInit = () => { @@ -22,8 +22,9 @@ export const useModalDataInit = () => {
// 编辑处理
const editHandle = (cardData: Chartype) => {
if (!cardData) return
const path = fetchPathByName(ChartEnum.CHART_HOME_NAME, 'href')
routerTurnByPath(path, [cardData.id], undefined, true)
const isDev = import.meta.env.DEV
const path = fetchPathByName(ChartEnum.CHART_HOME_NAME,isDev ? 'path' : 'href')
routerTurnByPath(path, [cardData.id], undefined, !isDev)
}
// 预览处理

Loading…
Cancel
Save