Showing
7 changed files
with
219 additions
and
43 deletions
@@ -23,6 +23,26 @@ enum Api { | @@ -23,6 +23,26 @@ enum Api { | ||
23 | DEVICE_ATTR = '/device/attributes', | 23 | DEVICE_ATTR = '/device/attributes', |
24 | ALARM_LIST = '/alarm', | 24 | ALARM_LIST = '/alarm', |
25 | BASE_DELETE_URL = '/oss', | 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 | export const getDictItemByCode = (value: string) => { | 48 | export const getDictItemByCode = (value: string) => { |
@@ -13,6 +13,7 @@ import { RequestDataPondItemType } from '@/store/modules/chartEditStore/chartEdi | @@ -13,6 +13,7 @@ import { RequestDataPondItemType } from '@/store/modules/chartEditStore/chartEdi | ||
13 | import { JSONParse, convertToCascadingData, findItemByLabel } from '@/utils/external/utils' | 13 | import { JSONParse, convertToCascadingData, findItemByLabel } from '@/utils/external/utils' |
14 | import { CascaderOption } from 'naive-ui' | 14 | import { CascaderOption } from 'naive-ui' |
15 | import { useUserStore } from '@/store/external/modules/user' | 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,7 +136,13 @@ export const useChartDataFetch = ( | ||
135 | const unit = targetInterval && targetInterval.value ? targetUnit.value :pondRequestGlobalIntervalUnit?.value?pondRequestGlobalIntervalUnit?.value: globalUnit.value | 136 | const unit = targetInterval && targetInterval.value ? targetUnit.value :pondRequestGlobalIntervalUnit?.value?pondRequestGlobalIntervalUnit?.value: globalUnit.value |
136 | setInterval(handleExecuteRequest, intervalUnitHandle(time, (unit as unknown as any))) | 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 | if (res) { | 146 | if (res) { |
140 | try { | 147 | try { |
141 | const filter = targetComponent.filter | 148 | const filter = targetComponent.filter |
@@ -198,6 +198,7 @@ export interface ChartCustomColor { | @@ -198,6 +198,7 @@ export interface ChartCustomColor { | ||
198 | 198 | ||
199 | 199 | ||
200 | export interface CreateComponentType extends PublicConfigType, requestConfig { | 200 | export interface CreateComponentType extends PublicConfigType, requestConfig { |
201 | + id?: string | ||
201 | key: string | 202 | key: string |
202 | chartConfig: ConfigType | 203 | chartConfig: ConfigType |
203 | option: GlobalThemeJsonType | 204 | option: GlobalThemeJsonType |
@@ -218,6 +218,10 @@ export interface RequestConfigType extends RequestPublicConfigType { | @@ -218,6 +218,10 @@ export interface RequestConfigType extends RequestPublicConfigType { | ||
218 | requestContentType: RequestContentTypeEnum | 218 | requestContentType: RequestContentTypeEnum |
219 | // 请求体类型 | 219 | // 请求体类型 |
220 | requestParamsBodyType: RequestBodyEnum | 220 | requestParamsBodyType: RequestBodyEnum |
221 | + // 选择SQL请求 地址 | ||
222 | + sqlRequestHttpType: string | ||
223 | + // 选择SQL请求 ID | ||
224 | + requestSQLId: string | ||
221 | // SQL 请求对象 | 225 | // SQL 请求对象 |
222 | requestSQLContent: { | 226 | requestSQLContent: { |
223 | sql: string | 227 | sql: string |
1 | <script setup lang="ts"> | 1 | <script setup lang="ts"> |
2 | import { NInput, NInputNumber, NInputGroup, NSelect, SelectOption, NTabs, NTabPane } from 'naive-ui' | 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 | const t = window['$t'] | 19 | const t = window['$t'] |
12 | 20 | ||
13 | const requestContentTypeRef = ref(RequestContentTypeEnum.DEFAULT) | 21 | const requestContentTypeRef = ref(RequestContentTypeEnum.DEFAULT) |
14 | 22 | ||
15 | const requestHttpTypeRef = ref(RequestHttpEnum.GET) | 23 | const requestHttpTypeRef = ref(RequestHttpEnum.GET) |
24 | +const sqlRequestHttpTypeRef = ref('') | ||
25 | +const requestSQLIdRef = ref('') | ||
16 | 26 | ||
17 | const requestIntervalRef = ref<number | undefined>(20) | 27 | const requestIntervalRef = ref<number | undefined>(20) |
18 | 28 | ||
@@ -20,16 +30,23 @@ const requestIntervalUnitRef = ref(RequestHttpIntervalEnum.SECOND) | @@ -20,16 +30,23 @@ const requestIntervalUnitRef = ref(RequestHttpIntervalEnum.SECOND) | ||
20 | 30 | ||
21 | const requestSQLContentRef = ref('select * from where') | 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 | const requestParamsBodyTypeRef = ref(RequestBodyEnum.NONE) | 39 | const requestParamsBodyTypeRef = ref(RequestBodyEnum.NONE) |
26 | 40 | ||
27 | const requestUrlRef = ref<string>() | 41 | const requestUrlRef = ref<string>() |
28 | 42 | ||
43 | +const sqlSelectOptionsList = ref<SelectOption[]>([]) | ||
44 | + | ||
29 | const getConfigurationData = (): RequestConfigType => { | 45 | const getConfigurationData = (): RequestConfigType => { |
30 | return { | 46 | return { |
31 | requestContentType: unref(requestContentTypeRef), | 47 | requestContentType: unref(requestContentTypeRef), |
32 | requestHttpType: unref(requestHttpTypeRef), | 48 | requestHttpType: unref(requestHttpTypeRef), |
49 | + sqlRequestHttpType: unref(sqlRequestHttpTypeRef), | ||
33 | requestInterval: unref(requestIntervalRef), | 50 | requestInterval: unref(requestIntervalRef), |
34 | requestIntervalUnit: unref(requestIntervalUnitRef), | 51 | requestIntervalUnit: unref(requestIntervalUnitRef), |
35 | requestDataType: RequestDataTypeEnum.AJAX, | 52 | requestDataType: RequestDataTypeEnum.AJAX, |
@@ -38,52 +55,113 @@ const getConfigurationData = (): RequestConfigType => { | @@ -38,52 +55,113 @@ const getConfigurationData = (): RequestConfigType => { | ||
38 | sql: unref(requestSQLContentRef) | 55 | sql: unref(requestSQLContentRef) |
39 | }, | 56 | }, |
40 | requestParams: unref(requestParamsRef), | 57 | requestParams: unref(requestParamsRef), |
41 | - requestUrl: `${unref(requestUrlRef)}` | 58 | + requestUrl: `${unref(requestUrlRef)}`, |
59 | + requestSQLId: unref(requestSQLIdRef) | ||
42 | } | 60 | } |
43 | } | 61 | } |
44 | 62 | ||
45 | - | ||
46 | const setConfigurationData = (request: RequestConfigType) => { | 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 | requestContentTypeRef.value = requestContentType | 77 | requestContentTypeRef.value = requestContentType |
49 | requestHttpTypeRef.value = requestHttpType | 78 | requestHttpTypeRef.value = requestHttpType |
50 | requestIntervalRef.value = requestInterval | 79 | requestIntervalRef.value = requestInterval |
51 | requestIntervalUnitRef.value = requestIntervalUnit | 80 | requestIntervalUnitRef.value = requestIntervalUnit |
52 | requestParamsBodyTypeRef.value = requestParamsBodyType | 81 | requestParamsBodyTypeRef.value = requestParamsBodyType |
53 | requestSQLContentRef.value = requestSQLContent.sql | 82 | requestSQLContentRef.value = requestSQLContent.sql |
54 | - requestParamsRef.value = requestParams | 83 | + requestParamsRef.value = requestParams |
55 | requestUrlRef.value = requestUrl | 84 | requestUrlRef.value = requestUrl |
85 | + requestSQLIdRef.value = requestSQLId | ||
56 | } | 86 | } |
57 | 87 | ||
58 | defineExpose({ | 88 | defineExpose({ |
59 | getConfigurationData, | 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 | </script> | 109 | </script> |
64 | 110 | ||
65 | <template> | 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 | <SettingItem :name="t('external.data.requestUrl')"> | 119 | <SettingItem :name="t('external.data.requestUrl')"> |
70 | <NInputGroup> | 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 | </NInputGroup> | 135 | </NInputGroup> |
76 | </SettingItem> | 136 | </SettingItem> |
77 | <SettingItem :name="t('external.data.updateInterval')"> | 137 | <SettingItem :name="t('external.data.updateInterval')"> |
78 | <NInputGroup> | 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 | </NInputGroup> | 154 | </NInputGroup> |
85 | </SettingItem> | 155 | </SettingItem> |
86 | </SettingItemBox> | 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 | <SettingItemBox :name="t('external.data.selectMode')"> | 165 | <SettingItemBox :name="t('external.data.selectMode')"> |
88 | <NTabs v-model:value="requestContentTypeRef" type="segment" size="small"> | 166 | <NTabs v-model:value="requestContentTypeRef" type="segment" size="small"> |
89 | <NTabPane :name="RequestContentTypeEnum.DEFAULT" :tab="t('external.data.ordinary')" /> | 167 | <NTabPane :name="RequestContentTypeEnum.DEFAULT" :tab="t('external.data.ordinary')" /> |
@@ -91,8 +169,14 @@ defineExpose({ | @@ -91,8 +169,14 @@ defineExpose({ | ||
91 | </NTabs> | 169 | </NTabs> |
92 | </SettingItemBox> | 170 | </SettingItemBox> |
93 | <SettingItemBox> | 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 | </SettingItemBox> | 181 | </SettingItemBox> |
98 | </template> | 182 | </template> |
@@ -6,7 +6,7 @@ import { CreateComponentGroupType } from '@/packages/index.d' | @@ -6,7 +6,7 @@ import { CreateComponentGroupType } from '@/packages/index.d' | ||
6 | import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' | 6 | import { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' |
7 | import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' | 7 | import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' |
8 | import { NButton, NDivider, NModal, NSpace, NTag } from 'naive-ui' | 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 | import { PublicInterfaceForm } from '../PublicInterfaceForm' | 10 | import { PublicInterfaceForm } from '../PublicInterfaceForm' |
11 | import ComponentConfiguration from './ComponentConfiguration.vue' | 11 | import ComponentConfiguration from './ComponentConfiguration.vue' |
12 | import GlobalPublicConfiguration from './GlobalPublicConfiguration.vue' | 12 | import GlobalPublicConfiguration from './GlobalPublicConfiguration.vue' |
@@ -16,12 +16,14 @@ import { useFetchTargetData } from '@/hooks/external/useFetchTargetData' | @@ -16,12 +16,14 @@ import { useFetchTargetData } from '@/hooks/external/useFetchTargetData' | ||
16 | import { useFilterFn } from '@/hooks/external/useFilterFn' | 16 | import { useFilterFn } from '@/hooks/external/useFilterFn' |
17 | import { JSONParse } from '@/utils/external/utils' | 17 | import { JSONParse } from '@/utils/external/utils' |
18 | import { isArray } from '@/utils/external/is' | 18 | import { isArray } from '@/utils/external/is' |
19 | +import {getDataView, saveDictItemByCode} from "@/api/external/common"; | ||
19 | 20 | ||
20 | const t = window['$t'] | 21 | const t = window['$t'] |
21 | 22 | ||
22 | const requestDataType = ref<RequestDataTypeEnum>(RequestDataTypeEnum.AJAX) | 23 | const requestDataType = ref<RequestDataTypeEnum>(RequestDataTypeEnum.AJAX) |
23 | 24 | ||
24 | const showModal = ref(false) | 25 | const showModal = ref(false) |
26 | +const requestContentType = ref<number>(0) | ||
25 | 27 | ||
26 | const chartEditStore = useChartEditStore() | 28 | const chartEditStore = useChartEditStore() |
27 | 29 | ||
@@ -34,6 +36,13 @@ const getRequestTypeName = computed(() => { | @@ -34,6 +36,13 @@ const getRequestTypeName = computed(() => { | ||
34 | }) | 36 | }) |
35 | 37 | ||
36 | const { prefixCls } = useDesign('chart-data-request') | 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 | const openModal = async (flag = true, type: RequestDataTypeEnum) => { | 47 | const openModal = async (flag = true, type: RequestDataTypeEnum) => { |
39 | requestDataType.value = type | 48 | requestDataType.value = type |
@@ -75,12 +84,17 @@ const getResult = () => { | @@ -75,12 +84,17 @@ const getResult = () => { | ||
75 | const { targetData } = useTargetData() | 84 | const { targetData } = useTargetData() |
76 | const { fetchTargetData } = useFetchTargetData() | 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 | if (res) { | 98 | if (res) { |
85 | const { value } = useFilterFn(targetData.value.filter, res) | 99 | const { value } = useFilterFn(targetData.value.filter, res) |
86 | //分组更新下面子组件 | 100 | //分组更新下面子组件 |
@@ -99,11 +113,31 @@ const sendHandle = async () => { | @@ -99,11 +113,31 @@ const sendHandle = async () => { | ||
99 | targetData.value.option.dataset = value | 113 | targetData.value.option.dataset = value |
100 | return | 114 | return |
101 | } | 115 | } |
116 | + showModal.value = false | ||
102 | } | 117 | } |
103 | 118 | ||
104 | const handleSaveAction = async () => { | 119 | const handleSaveAction = async () => { |
105 | if (!(await validate())) return | 120 | if (!(await validate())) return |
106 | let value = getResult() | 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 | value.pondRequestGlobalTokenKey = targetData.value.request.pondRequestGlobalTokenKey | 141 | value.pondRequestGlobalTokenKey = targetData.value.request.pondRequestGlobalTokenKey |
108 | value.pondRequestGlobalTokenSuffix = targetData.value.request.pondRequestGlobalTokenSuffix | 142 | value.pondRequestGlobalTokenSuffix = targetData.value.request.pondRequestGlobalTokenSuffix |
109 | value.pondRequestInterval = targetData.value.request.pondRequestInterval | 143 | value.pondRequestInterval = targetData.value.request.pondRequestInterval |
@@ -123,10 +157,10 @@ const handleSaveAction = async () => { | @@ -123,10 +157,10 @@ const handleSaveAction = async () => { | ||
123 | request: value as RequestConfigType | 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 | createRequestModalContext({ | 164 | createRequestModalContext({ |
131 | requestDataType | 165 | requestDataType |
132 | }) | 166 | }) |
@@ -138,7 +172,7 @@ defineExpose({ | @@ -138,7 +172,7 @@ defineExpose({ | ||
138 | 172 | ||
139 | <template> | 173 | <template> |
140 | <NModal :class="prefixCls" v-model:show="showModal" preset="card" style="width: 1000px" :title="t('common.requestConfig')"> | 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 | <NDivider v-if="requestDataType === RequestDataTypeEnum.AJAX" /> | 176 | <NDivider v-if="requestDataType === RequestDataTypeEnum.AJAX" /> |
143 | <ComponentConfiguration v-if="requestDataType === RequestDataTypeEnum.AJAX" ref="componentConfigurationEl" /> | 177 | <ComponentConfiguration v-if="requestDataType === RequestDataTypeEnum.AJAX" ref="componentConfigurationEl" /> |
144 | <PublicInterfaceForm v-if="requestDataType === RequestDataTypeEnum.Pond" ref="publicInterfaceFormEl" /> | 178 | <PublicInterfaceForm v-if="requestDataType === RequestDataTypeEnum.Pond" ref="publicInterfaceFormEl" /> |
@@ -112,11 +112,11 @@ | @@ -112,11 +112,11 @@ | ||
112 | <div v-if="!interactActionsIsPageChange"> | 112 | <div v-if="!interactActionsIsPageChange"> |
113 | <setting-item-box | 113 | <setting-item-box |
114 | :name="requestParamsItem" | 114 | :name="requestParamsItem" |
115 | - v-for="requestParamsItem in requestParamsTypeList" | 115 | + v-for="requestParamsItem in (isCustomSqlRequest?.request?.requestContentType === 0 ? requestParamsTypeList:sqlRequestParamsTypeList)" |
116 | :key="requestParamsItem" | 116 | :key="requestParamsItem" |
117 | > | 117 | > |
118 | <setting-item | 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 | :key="index" | 120 | :key="index" |
121 | :name="`${ovlKey}`" | 121 | :name="`${ovlKey}`" |
122 | > | 122 | > |
@@ -125,7 +125,7 @@ | @@ -125,7 +125,7 @@ | ||
125 | v-model:value="item.interactFn[ovlKey]" | 125 | v-model:value="item.interactFn[ovlKey]" |
126 | :options="fnDimensionsAndSource(item.interactOn, item.interactComponentId!, requestParamsItem)" | 126 | :options="fnDimensionsAndSource(item.interactOn, item.interactComponentId!, requestParamsItem)" |
127 | clearable | 127 | clearable |
128 | - multiple | 128 | + multiple |
129 | @update:value="(value: string, options: Recordable[])=>handleSelectInteract(value,options,item.interactOn,requestParamsItem)" | 129 | @update:value="(value: string, options: Recordable[])=>handleSelectInteract(value,options,item.interactOn,requestParamsItem)" |
130 | ></n-select> | 130 | ></n-select> |
131 | </setting-item> | 131 | </setting-item> |
@@ -143,11 +143,11 @@ | @@ -143,11 +143,11 @@ | ||
143 | </template> | 143 | </template> |
144 | 144 | ||
145 | <script lang="ts" setup> | 145 | <script lang="ts" setup> |
146 | -import { VNodeChild, computed } from 'vue' | 146 | +import {VNodeChild, computed, ref} from 'vue' |
147 | import { SelectOption, SelectGroupOption } from 'naive-ui' | 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 | import { CreateComponentType, CreateComponentGroupType, ChartFrameEnum } from '@/packages/index.d' | 149 | import { CreateComponentType, CreateComponentGroupType, ChartFrameEnum } from '@/packages/index.d' |
150 | -import { RequestParamsTypeEnum, RequestDataTypeEnum } from '@/enums/httpEnum' | 150 | +import { RequestParamsTypeEnum } from '@/enums/httpEnum' |
151 | import { InteractEventOn, COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum' | 151 | import { InteractEventOn, COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum' |
152 | import { icon } from '@/plugins' | 152 | import { icon } from '@/plugins' |
153 | import noData from '@/assets/images/canvas/noData.png' | 153 | import noData from '@/assets/images/canvas/noData.png' |
@@ -158,9 +158,20 @@ import {PageChartEditStoreType} from '@/store/modules/chartEditStore/chartEditSt | @@ -158,9 +158,20 @@ import {PageChartEditStoreType} from '@/store/modules/chartEditStore/chartEditSt | ||
158 | const { CloseIcon, AddIcon, HelpOutlineIcon } = icon.ionicons5 | 158 | const { CloseIcon, AddIcon, HelpOutlineIcon } = icon.ionicons5 |
159 | const { targetData, chartEditStore } = useTargetData() | 159 | const { targetData, chartEditStore } = useTargetData() |
160 | const requestParamsTypeList = [RequestParamsTypeEnum.PARAMS, RequestParamsTypeEnum.BODY, RequestParamsTypeEnum.HEADER] | 160 | const requestParamsTypeList = [RequestParamsTypeEnum.PARAMS, RequestParamsTypeEnum.BODY, RequestParamsTypeEnum.HEADER] |
161 | +const sqlRequestParamsTypeList = [RequestParamsTypeEnum.PARAMS] | ||
162 | +const selectEventsComponentId = ref('') | ||
161 | 163 | ||
162 | const t = window['$t'] | 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 | // THINGS_KIT 修改多画布切换相关代码 用于切换画布 | 175 | // THINGS_KIT 修改多画布切换相关代码 用于切换画布 |
165 | const interactActionsIsPageChange = computed(() => { | 176 | const interactActionsIsPageChange = computed(() => { |
166 | const interactActions = targetData.value.interactActions | 177 | const interactActions = targetData.value.interactActions |
@@ -186,6 +197,7 @@ const option = computed(() => { | @@ -186,6 +197,7 @@ const option = computed(() => { | ||
186 | // 绑定组件数据 request | 197 | // 绑定组件数据 request |
187 | const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { | 198 | const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { |
188 | if (!id) return {} | 199 | if (!id) return {} |
200 | + selectEventsComponentId.value = id; | ||
189 | const globalConfigPindApr = chartEditStore.getRequestGlobalConfig.requestDataPond.find(item => { | 201 | const globalConfigPindApr = chartEditStore.getRequestGlobalConfig.requestDataPond.find(item => { |
190 | return item.dataPondId === id | 202 | return item.dataPondId === id |
191 | })?.dataPondRequestConfig.requestParams | 203 | })?.dataPondRequestConfig.requestParams |
@@ -193,6 +205,20 @@ const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { | @@ -193,6 +205,20 @@ const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => { | ||
193 | return chartEditStore.getComponentList[chartEditStore.fetchTargetIndex(id)]?.request.requestParams[key] | 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 | const handleSelectInteract = (value: string, options: SelectOption[], interactOn: InteractEventOn | undefined, requestParamsItem: RequestParamsTypeEnum | null) => { | 222 | const handleSelectInteract = (value: string, options: SelectOption[], interactOn: InteractEventOn | undefined, requestParamsItem: RequestParamsTypeEnum | null) => { |
197 | console.log(value) | 223 | console.log(value) |
198 | console.log(options) | 224 | console.log(options) |