Commit 061eb6c6c696f98ef4c56539d7a853229ff117f3

Authored by gesilong
1 parent 7c519eb5

commit: 设计大屏 增加SQL类型

@@ -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)