Showing
7 changed files
with
219 additions
and
43 deletions
... | ... | @@ -23,6 +23,26 @@ enum Api { |
23 | 23 | DEVICE_ATTR = '/device/attributes', |
24 | 24 | ALARM_LIST = '/alarm', |
25 | 25 | BASE_DELETE_URL = '/oss', |
26 | + DATA_SQL = '/dbConnect', | |
27 | +} | |
28 | + | |
29 | +//sql选择列表 | |
30 | +export const getDataViewSqlPage = (params: object) => { | |
31 | + return defHttp.get<PaginationResult<ConfigurationItemType>>({ url: `${Api.DATA_SQL}`, params }) | |
32 | +} | |
33 | +//保存和更新组件SQL查询配置 | |
34 | +export const saveDictItemByCode = (params: object) => { | |
35 | + return defHttp.post<DictItem[]>({ | |
36 | + url: `${Api.DATA_SQL}/saveDataSet`, | |
37 | + params: params | |
38 | + }) | |
39 | +} | |
40 | +//预览大屏查询组件数据 | |
41 | +export const getDataView = (params: object) => { | |
42 | + return defHttp.post<DictItem[]>({ | |
43 | + url: `${Api.DATA_SQL}/getDataView`, | |
44 | + params: params | |
45 | + }) | |
26 | 46 | } |
27 | 47 | |
28 | 48 | export const getDictItemByCode = (value: string) => { | ... | ... |
... | ... | @@ -13,6 +13,7 @@ import { RequestDataPondItemType } from '@/store/modules/chartEditStore/chartEdi |
13 | 13 | import { JSONParse, convertToCascadingData, findItemByLabel } from '@/utils/external/utils' |
14 | 14 | import { CascaderOption } from 'naive-ui' |
15 | 15 | import { useUserStore } from '@/store/external/modules/user' |
16 | +import {getDataView} from "@/api/external/common"; | |
16 | 17 | |
17 | 18 | |
18 | 19 | // 获取类型 |
... | ... | @@ -135,7 +136,13 @@ export const useChartDataFetch = ( |
135 | 136 | const unit = targetInterval && targetInterval.value ? targetUnit.value :pondRequestGlobalIntervalUnit?.value?pondRequestGlobalIntervalUnit?.value: globalUnit.value |
136 | 137 | setInterval(handleExecuteRequest, intervalUnitHandle(time, (unit as unknown as any))) |
137 | 138 | // |
138 | - const res = await customRequest(toRaw(targetComponent.request)) | |
139 | + let res:any; | |
140 | + if (targetComponent.request?.requestContentType === 1) { | |
141 | + // @ts-ignore | |
142 | + res = await getDataView({id: targetComponent.request?.id || '',paramMap:targetComponent.request?.requestParams?.Params}) | |
143 | + }else { | |
144 | + res = await customRequest(toRaw(targetComponent.request)) | |
145 | + } | |
139 | 146 | if (res) { |
140 | 147 | try { |
141 | 148 | const filter = targetComponent.filter | ... | ... |
... | ... | @@ -218,6 +218,10 @@ export interface RequestConfigType extends RequestPublicConfigType { |
218 | 218 | requestContentType: RequestContentTypeEnum |
219 | 219 | // 请求体类型 |
220 | 220 | requestParamsBodyType: RequestBodyEnum |
221 | + // 选择SQL请求 地址 | |
222 | + sqlRequestHttpType: string | |
223 | + // 选择SQL请求 ID | |
224 | + requestSQLId: string | |
221 | 225 | // SQL 请求对象 |
222 | 226 | requestSQLContent: { |
223 | 227 | sql: string | ... | ... |
1 | 1 | <script setup lang="ts"> |
2 | 2 | import { NInput, NInputNumber, NInputGroup, NSelect, SelectOption, NTabs, NTabPane } from 'naive-ui' |
3 | -import { SettingItem, SettingItemBox } from '@/components/Pages/ChartItemSetting'; | |
4 | -import { selectTimeOptions, selectTypeOptions } from '../../../index.d'; | |
5 | -import { RequestBodyEnum, RequestContentTypeEnum, RequestDataTypeEnum, RequestHttpEnum, RequestHttpIntervalEnum, RequestParams } from '@/enums/httpEnum'; | |
6 | -import { ref, unref } from 'vue'; | |
7 | -import DefaultRequestContent from './DefaultRequestContent.vue'; | |
8 | -import SqlConfiguration from './SqlConfiguration.vue'; | |
9 | -import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'; | |
3 | +import { SettingItem, SettingItemBox } from '@/components/Pages/ChartItemSetting' | |
4 | +import { selectTimeOptions, selectTypeOptions } from '../../../index.d' | |
5 | +import { | |
6 | + RequestBodyEnum, | |
7 | + RequestContentTypeEnum, | |
8 | + RequestDataTypeEnum, | |
9 | + RequestHttpEnum, | |
10 | + RequestHttpIntervalEnum, | |
11 | + RequestParams | |
12 | +} from '@/enums/httpEnum' | |
13 | +import { onMounted, ref, unref } from 'vue' | |
14 | +import DefaultRequestContent from './DefaultRequestContent.vue' | |
15 | +import SqlConfiguration from './SqlConfiguration.vue' | |
16 | +import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' | |
17 | +import { getDataViewSqlPage } from '@/api/external/common' | |
10 | 18 | |
11 | 19 | const t = window['$t'] |
12 | 20 | |
13 | 21 | const requestContentTypeRef = ref(RequestContentTypeEnum.DEFAULT) |
14 | 22 | |
15 | 23 | const requestHttpTypeRef = ref(RequestHttpEnum.GET) |
24 | +const sqlRequestHttpTypeRef = ref('') | |
25 | +const requestSQLIdRef = ref('') | |
16 | 26 | |
17 | 27 | const requestIntervalRef = ref<number | undefined>(20) |
18 | 28 | |
... | ... | @@ -20,16 +30,23 @@ const requestIntervalUnitRef = ref(RequestHttpIntervalEnum.SECOND) |
20 | 30 | |
21 | 31 | const requestSQLContentRef = ref('select * from where') |
22 | 32 | |
23 | -const requestParamsRef = ref({ Header: {}, Params: {}, Body: { 'form-data': {}, 'json': '', 'x-www-form-urlencoded': {}, 'xml': '' } } as RequestParams) | |
33 | +const requestParamsRef = ref({ | |
34 | + Header: {}, | |
35 | + Params: {}, | |
36 | + Body: { 'form-data': {}, json: '', 'x-www-form-urlencoded': {}, xml: '' } | |
37 | +} as RequestParams) | |
24 | 38 | |
25 | 39 | const requestParamsBodyTypeRef = ref(RequestBodyEnum.NONE) |
26 | 40 | |
27 | 41 | const requestUrlRef = ref<string>() |
28 | 42 | |
43 | +const sqlSelectOptionsList = ref<SelectOption[]>([]) | |
44 | + | |
29 | 45 | const getConfigurationData = (): RequestConfigType => { |
30 | 46 | return { |
31 | 47 | requestContentType: unref(requestContentTypeRef), |
32 | 48 | requestHttpType: unref(requestHttpTypeRef), |
49 | + sqlRequestHttpType: unref(sqlRequestHttpTypeRef), | |
33 | 50 | requestInterval: unref(requestIntervalRef), |
34 | 51 | requestIntervalUnit: unref(requestIntervalUnitRef), |
35 | 52 | requestDataType: RequestDataTypeEnum.AJAX, |
... | ... | @@ -38,52 +55,113 @@ const getConfigurationData = (): RequestConfigType => { |
38 | 55 | sql: unref(requestSQLContentRef) |
39 | 56 | }, |
40 | 57 | requestParams: unref(requestParamsRef), |
41 | - requestUrl: `${unref(requestUrlRef)}` | |
58 | + requestUrl: `${unref(requestUrlRef)}`, | |
59 | + requestSQLId: unref(requestSQLIdRef) | |
42 | 60 | } |
43 | 61 | } |
44 | 62 | |
45 | - | |
46 | 63 | const setConfigurationData = (request: RequestConfigType) => { |
47 | - const { requestContentType, requestHttpType, requestInterval, requestIntervalUnit, requestParamsBodyType, requestSQLContent, requestParams, requestUrl } = request | |
64 | + const { | |
65 | + requestContentType, | |
66 | + requestHttpType, | |
67 | + requestInterval, | |
68 | + requestIntervalUnit, | |
69 | + requestParamsBodyType, | |
70 | + requestSQLContent, | |
71 | + requestParams, | |
72 | + requestUrl, | |
73 | + sqlRequestHttpType, | |
74 | + requestSQLId | |
75 | + } = request | |
76 | + sqlRequestHttpTypeRef.value = sqlRequestHttpType | |
48 | 77 | requestContentTypeRef.value = requestContentType |
49 | 78 | requestHttpTypeRef.value = requestHttpType |
50 | 79 | requestIntervalRef.value = requestInterval |
51 | 80 | requestIntervalUnitRef.value = requestIntervalUnit |
52 | 81 | requestParamsBodyTypeRef.value = requestParamsBodyType |
53 | 82 | requestSQLContentRef.value = requestSQLContent.sql |
54 | - requestParamsRef.value = requestParams | |
83 | + requestParamsRef.value = requestParams | |
55 | 84 | requestUrlRef.value = requestUrl |
85 | + requestSQLIdRef.value = requestSQLId | |
56 | 86 | } |
57 | 87 | |
58 | 88 | defineExpose({ |
59 | 89 | getConfigurationData, |
60 | - setConfigurationData | |
90 | + setConfigurationData, | |
91 | + requestContentTypeRef | |
92 | +}) | |
93 | + | |
94 | +onMounted(() => { | |
95 | + getData({ page: 1, pageSize: 999 }) | |
61 | 96 | }) |
62 | 97 | |
98 | +const getData = async (params: object) => { | |
99 | + const { items } = await getDataViewSqlPage(params) | |
100 | + const _list = items.map((item: any) => { | |
101 | + return { | |
102 | + label: item.name, | |
103 | + value: item.id | |
104 | + } | |
105 | + }) | |
106 | + | |
107 | + sqlSelectOptionsList.value = _list | |
108 | +} | |
63 | 109 | </script> |
64 | 110 | |
65 | 111 | <template> |
66 | - <SettingItemBox :name="t('external.data.address')" :itemRightStyle="{ | |
67 | - gridTemplateColumns: '5fr 2fr 1fr' | |
68 | - }"> | |
112 | + <SettingItemBox | |
113 | + v-if="requestContentTypeRef === RequestContentTypeEnum.DEFAULT" | |
114 | + :name="t('external.data.address')" | |
115 | + :itemRightStyle="{ | |
116 | + gridTemplateColumns: '5fr 2fr 1fr' | |
117 | + }" | |
118 | + > | |
69 | 119 | <SettingItem :name="t('external.data.requestUrl')"> |
70 | 120 | <NInputGroup> |
71 | - <NSelect v-model:value="requestHttpTypeRef" style="width: 150px;" size="small" | |
72 | - :options="(selectTypeOptions as SelectOption[])" /> | |
73 | - <NInput v-model:value="requestUrlRef" class="select-time-number" size="small" min="0" :show-button="false" | |
74 | - :placeholder="t('external.data.placeURL')" /> | |
121 | + <NSelect | |
122 | + v-model:value="requestHttpTypeRef" | |
123 | + style="width: 150px" | |
124 | + size="small" | |
125 | + :options="(selectTypeOptions as SelectOption[])" | |
126 | + /> | |
127 | + <NInput | |
128 | + v-model:value="requestUrlRef" | |
129 | + class="select-time-number" | |
130 | + size="small" | |
131 | + min="0" | |
132 | + :show-button="false" | |
133 | + :placeholder="t('external.data.placeURL')" | |
134 | + /> | |
75 | 135 | </NInputGroup> |
76 | 136 | </SettingItem> |
77 | 137 | <SettingItem :name="t('external.data.updateInterval')"> |
78 | 138 | <NInputGroup> |
79 | - <NInputNumber v-model:value="requestIntervalRef" class="select-time-number" size="small" min="0" | |
80 | - :show-button="false" :placeholder="t('external.data.placeNumber')" /> | |
139 | + <NInputNumber | |
140 | + v-model:value="requestIntervalRef" | |
141 | + class="select-time-number" | |
142 | + size="small" | |
143 | + min="0" | |
144 | + :show-button="false" | |
145 | + :placeholder="t('external.data.placeNumber')" | |
146 | + /> | |
81 | 147 | <!-- 单位 --> |
82 | - <NSelect v-model:value="requestIntervalUnitRef" class="select-time-options" size="small" | |
83 | - :options="(selectTimeOptions as SelectOption[])" /> | |
148 | + <NSelect | |
149 | + v-model:value="requestIntervalUnitRef" | |
150 | + class="select-time-options" | |
151 | + size="small" | |
152 | + :options="(selectTimeOptions as SelectOption[])" | |
153 | + /> | |
84 | 154 | </NInputGroup> |
85 | 155 | </SettingItem> |
86 | 156 | </SettingItemBox> |
157 | + <SettingItemBox v-if="requestContentTypeRef === RequestContentTypeEnum.SQL" :name="t('external.data.address')"> | |
158 | + <NSelect | |
159 | + v-model:value="sqlRequestHttpTypeRef" | |
160 | + style="width: 100%" | |
161 | + size="small" | |
162 | + :options="(sqlSelectOptionsList as SelectOption[])" | |
163 | + /> | |
164 | + </SettingItemBox> | |
87 | 165 | <SettingItemBox :name="t('external.data.selectMode')"> |
88 | 166 | <NTabs v-model:value="requestContentTypeRef" type="segment" size="small"> |
89 | 167 | <NTabPane :name="RequestContentTypeEnum.DEFAULT" :tab="t('external.data.ordinary')" /> |
... | ... | @@ -91,8 +169,14 @@ defineExpose({ |
91 | 169 | </NTabs> |
92 | 170 | </SettingItemBox> |
93 | 171 | <SettingItemBox> |
94 | - <DefaultRequestContent v-if="requestContentTypeRef === RequestContentTypeEnum.DEFAULT" | |
95 | - v-model:value="requestParamsRef" v-model:request-params-body-type="requestParamsBodyTypeRef" /> | |
96 | - <SqlConfiguration v-model:value="requestSQLContentRef" v-if="requestContentTypeRef === RequestContentTypeEnum.SQL" /> | |
172 | + <DefaultRequestContent | |
173 | + v-if="requestContentTypeRef === RequestContentTypeEnum.DEFAULT" | |
174 | + v-model:value="requestParamsRef" | |
175 | + v-model:request-params-body-type="requestParamsBodyTypeRef" | |
176 | + /> | |
177 | + <SqlConfiguration | |
178 | + v-model:value="requestSQLContentRef" | |
179 | + v-if="requestContentTypeRef === RequestContentTypeEnum.SQL" | |
180 | + /> | |
97 | 181 | </SettingItemBox> |
98 | 182 | </template> | ... | ... |
... | ... | @@ -6,7 +6,7 @@ import { CreateComponentGroupType } from '@/packages/index.d' |
6 | 6 | import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' |
7 | 7 | import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' |
8 | 8 | import { NButton, NDivider, NModal, NSpace, NTag } from 'naive-ui' |
9 | -import { ref, unref, computed, nextTick } from 'vue' | |
9 | +import { ref, unref, computed, nextTick, watch } from 'vue' | |
10 | 10 | import { PublicInterfaceForm } from '../PublicInterfaceForm' |
11 | 11 | import ComponentConfiguration from './ComponentConfiguration.vue' |
12 | 12 | import GlobalPublicConfiguration from './GlobalPublicConfiguration.vue' |
... | ... | @@ -16,12 +16,14 @@ import { useFetchTargetData } from '@/hooks/external/useFetchTargetData' |
16 | 16 | import { useFilterFn } from '@/hooks/external/useFilterFn' |
17 | 17 | import { JSONParse } from '@/utils/external/utils' |
18 | 18 | import { isArray } from '@/utils/external/is' |
19 | +import {getDataView, saveDictItemByCode} from "@/api/external/common"; | |
19 | 20 | |
20 | 21 | const t = window['$t'] |
21 | 22 | |
22 | 23 | const requestDataType = ref<RequestDataTypeEnum>(RequestDataTypeEnum.AJAX) |
23 | 24 | |
24 | 25 | const showModal = ref(false) |
26 | +const requestContentType = ref<number>(0) | |
25 | 27 | |
26 | 28 | const chartEditStore = useChartEditStore() |
27 | 29 | |
... | ... | @@ -34,6 +36,13 @@ const getRequestTypeName = computed(() => { |
34 | 36 | }) |
35 | 37 | |
36 | 38 | const { prefixCls } = useDesign('chart-data-request') |
39 | +watch( | |
40 | + () => componentConfigurationEl.value?.requestContentTypeRef, | |
41 | + (newVal) => { | |
42 | + requestContentType.value = newVal; | |
43 | + }, | |
44 | + { immediate: true } | |
45 | +) | |
37 | 46 | |
38 | 47 | const openModal = async (flag = true, type: RequestDataTypeEnum) => { |
39 | 48 | requestDataType.value = type |
... | ... | @@ -75,12 +84,17 @@ const getResult = () => { |
75 | 84 | const { targetData } = useTargetData() |
76 | 85 | const { fetchTargetData } = useFetchTargetData() |
77 | 86 | // 发送请求 |
78 | -const sendHandle = async () => { | |
79 | - if (!targetData.value?.request || !targetData.value.request.requestUrl) { | |
80 | - window['$message'].warning(t('external.data.configMethod')) | |
81 | - return | |
87 | +const sendHandle = async (requestContentType: number,id?: string) => { | |
88 | + let res:any; | |
89 | + if (requestContentType !== 1) { | |
90 | + if (!targetData.value?.request || !targetData.value.request.requestUrl) { | |
91 | + window['$message'].warning(t('external.data.configMethod')) | |
92 | + return | |
93 | + } | |
94 | + res = await fetchTargetData() | |
95 | + }else { | |
96 | + res = await getDataView({id: id || ''}) | |
82 | 97 | } |
83 | - const res = await fetchTargetData() | |
84 | 98 | if (res) { |
85 | 99 | const { value } = useFilterFn(targetData.value.filter, res) |
86 | 100 | //分组更新下面子组件 |
... | ... | @@ -99,11 +113,31 @@ const sendHandle = async () => { |
99 | 113 | targetData.value.option.dataset = value |
100 | 114 | return |
101 | 115 | } |
116 | + showModal.value = false | |
102 | 117 | } |
103 | 118 | |
104 | 119 | const handleSaveAction = async () => { |
105 | 120 | if (!(await validate())) return |
106 | 121 | let value = getResult() |
122 | + let _dataId = '' | |
123 | + if (value?.requestContentType === 1) { | |
124 | + const params = { | |
125 | + id: value?.requestSQLId || '', | |
126 | + componentCode: value?.componentCode || 'componentCode', | |
127 | + connectId: value?.sqlRequestHttpType || '', | |
128 | + sql: value?.requestSQLContent?.sql || '', | |
129 | + } | |
130 | + const res:any = await saveDictItemByCode(params) | |
131 | + showModal.value = false | |
132 | + | |
133 | + if (res) { | |
134 | + _dataId = res?.id | |
135 | + value = { | |
136 | + ...value, | |
137 | + id: res?.id | |
138 | + } | |
139 | + } | |
140 | + } | |
107 | 141 | value.pondRequestGlobalTokenKey = targetData.value.request.pondRequestGlobalTokenKey |
108 | 142 | value.pondRequestGlobalTokenSuffix = targetData.value.request.pondRequestGlobalTokenSuffix |
109 | 143 | value.pondRequestInterval = targetData.value.request.pondRequestInterval |
... | ... | @@ -123,10 +157,10 @@ const handleSaveAction = async () => { |
123 | 157 | request: value as RequestConfigType |
124 | 158 | }) |
125 | 159 | } |
126 | - showModal.value = false | |
127 | - sendHandle() | |
160 | + sendHandle(value?.requestContentType,_dataId) | |
128 | 161 | } |
129 | 162 | |
163 | + | |
130 | 164 | createRequestModalContext({ |
131 | 165 | requestDataType |
132 | 166 | }) |
... | ... | @@ -138,7 +172,7 @@ defineExpose({ |
138 | 172 | |
139 | 173 | <template> |
140 | 174 | <NModal :class="prefixCls" v-model:show="showModal" preset="card" style="width: 1000px" :title="t('common.requestConfig')"> |
141 | - <GlobalPublicConfiguration v-if="requestDataType === RequestDataTypeEnum.AJAX" /> | |
175 | + <GlobalPublicConfiguration v-if="requestDataType === RequestDataTypeEnum.AJAX && requestContentType === 0" /> | |
142 | 176 | <NDivider v-if="requestDataType === RequestDataTypeEnum.AJAX" /> |
143 | 177 | <ComponentConfiguration v-if="requestDataType === RequestDataTypeEnum.AJAX" ref="componentConfigurationEl" /> |
144 | 178 | <PublicInterfaceForm v-if="requestDataType === RequestDataTypeEnum.Pond" ref="publicInterfaceFormEl" /> | ... | ... |
... | ... | @@ -112,11 +112,11 @@ |
112 | 112 | <div v-if="!interactActionsIsPageChange"> |
113 | 113 | <setting-item-box |
114 | 114 | :name="requestParamsItem" |
115 | - v-for="requestParamsItem in requestParamsTypeList" | |
115 | + v-for="requestParamsItem in (isCustomSqlRequest?.request?.requestContentType === 0 ? requestParamsTypeList:sqlRequestParamsTypeList)" | |
116 | 116 | :key="requestParamsItem" |
117 | 117 | > |
118 | 118 | <setting-item |
119 | - v-for="(ovlValue, ovlKey, index) in fnGetRequest(item.interactComponentId, requestParamsItem)" | |
119 | + v-for="(ovlValue, ovlKey, index) in (isCustomSqlRequest?.request?.requestContentType === 0 ? fnGetRequest(item.interactComponentId, requestParamsItem) : fnGetSqlRequest(item.interactComponentId, isCustomSqlRequest?.request) )" | |
120 | 120 | :key="index" |
121 | 121 | :name="`${ovlKey}`" |
122 | 122 | > |
... | ... | @@ -125,7 +125,7 @@ |
125 | 125 | v-model:value="item.interactFn[ovlKey]" |
126 | 126 | :options="fnDimensionsAndSource(item.interactOn, item.interactComponentId!, requestParamsItem)" |
127 | 127 | clearable |
128 | - multiple | |
128 | + multiple | |
129 | 129 | @update:value="(value: string, options: Recordable[])=>handleSelectInteract(value,options,item.interactOn,requestParamsItem)" |
130 | 130 | ></n-select> |
131 | 131 | </setting-item> |
... | ... | @@ -143,11 +143,11 @@ |
143 | 143 | </template> |
144 | 144 | |
145 | 145 | <script lang="ts" setup> |
146 | -import { VNodeChild, computed } from 'vue' | |
146 | +import {VNodeChild, computed, ref} from 'vue' | |
147 | 147 | import { SelectOption, SelectGroupOption } from 'naive-ui' |
148 | -import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting' | |
148 | +import { SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | |
149 | 149 | import { CreateComponentType, CreateComponentGroupType, ChartFrameEnum } from '@/packages/index.d' |
150 | -import { RequestParamsTypeEnum, RequestDataTypeEnum } from '@/enums/httpEnum' | |
150 | +import { RequestParamsTypeEnum } from '@/enums/httpEnum' | |
151 | 151 | import { InteractEventOn, COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum' |
152 | 152 | import { icon } from '@/plugins' |
153 | 153 | import noData from '@/assets/images/canvas/noData.png' |
... | ... | @@ -158,9 +158,20 @@ import {PageChartEditStoreType} from '@/store/modules/chartEditStore/chartEditSt |
158 | 158 | const { CloseIcon, AddIcon, HelpOutlineIcon } = icon.ionicons5 |
159 | 159 | const { targetData, chartEditStore } = useTargetData() |
160 | 160 | const requestParamsTypeList = [RequestParamsTypeEnum.PARAMS, RequestParamsTypeEnum.BODY, RequestParamsTypeEnum.HEADER] |
161 | +const sqlRequestParamsTypeList = [RequestParamsTypeEnum.PARAMS] | |
162 | +const selectEventsComponentId = ref('') | |
161 | 163 | |
162 | 164 | const t = window['$t'] |
163 | 165 | |
166 | +// //判断是否 自定义sql请求 | |
167 | +const isCustomSqlRequest = computed(() => { | |
168 | + const eventsComponentId = selectEventsComponentId.value | |
169 | + const _getComponentList = chartEditStore.getComponentList | |
170 | + if (!eventsComponentId) return [] | |
171 | + | |
172 | + return _getComponentList.find( (item:any) => item.id === eventsComponentId) | |
173 | +}) | |
174 | + | |
164 | 175 | // THINGS_KIT 修改多画布切换相关代码 用于切换画布 |
165 | 176 | const interactActionsIsPageChange = computed(() => { |
166 | 177 | const interactActions = targetData.value.interactActions |
... | ... | @@ -186,6 +197,7 @@ const option = computed(() => { |
186 | 197 | // 绑定组件数据 request |
187 | 198 | const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { |
188 | 199 | if (!id) return {} |
200 | + selectEventsComponentId.value = id; | |
189 | 201 | const globalConfigPindApr = chartEditStore.getRequestGlobalConfig.requestDataPond.find(item => { |
190 | 202 | return item.dataPondId === id |
191 | 203 | })?.dataPondRequestConfig.requestParams |
... | ... | @@ -193,6 +205,20 @@ const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { |
193 | 205 | return chartEditStore.getComponentList[chartEditStore.fetchTargetIndex(id)]?.request.requestParams[key] |
194 | 206 | } |
195 | 207 | |
208 | +const fnGetSqlRequest = (id: string | undefined, request: any) => { | |
209 | + if (!id || !request) return {} | |
210 | + const sql = request?.requestSQLContent?.sql | |
211 | + // 1. 定义正则表达式匹配 ${...} 模式 | |
212 | + const regex = /\$\{([a-zA-Z0-9_]+)\}/g; | |
213 | + const variables = [...new Set(Array.from(sql?.matchAll(regex), m => m[1]))]; | |
214 | +// 2. 转换为 { key: undefined } 格式 | |
215 | + const result = variables.reduce((obj, key) => { | |
216 | + obj[key] = undefined; | |
217 | + return obj; | |
218 | + }, {}); | |
219 | + return result | |
220 | +} | |
221 | + | |
196 | 222 | const handleSelectInteract = (value: string, options: SelectOption[], interactOn: InteractEventOn | undefined, requestParamsItem: RequestParamsTypeEnum | null) => { |
197 | 223 | console.log(value) |
198 | 224 | console.log(options) | ... | ... |