Commit 1a7fc3ca16d0d387b2e04f3ddc9a32c5cb3a2940

Authored by xp.Huang
1 parent 7a197ffc

Merge branch 'ww' into 'main_dev'

fix(get publicInterface): 修复获取公共接口参数传递错误

See merge request yunteng/thingskit-view!27

(cherry picked from commit 49c465bf)

8b389c18 fix(get publicInterface): 修复获取公共接口参数传递错误
404e3c93 feat(dynamic request): 新增动态接口body参数和header参数
1 -import { RequestBodyEnum } from "@/enums/httpEnum" 1 +import { RequestBodyEnum, RequestParams } from "@/enums/httpEnum"
2 import { ExternalRequestType, ExtraRequestConfigType } from "@/store/external/modules/extraComponentInfo.d" 2 import { ExternalRequestType, ExtraRequestConfigType } from "@/store/external/modules/extraComponentInfo.d"
3 import { RequestConfigType, RequestGlobalConfigType } from "@/store/modules/chartEditStore/chartEditStore.d" 3 import { RequestConfigType, RequestGlobalConfigType } from "@/store/modules/chartEditStore/chartEditStore.d"
4 import { defHttp } from "@/utils/external/http/axios" 4 import { defHttp } from "@/utils/external/http/axios"
@@ -16,12 +16,19 @@ const getOriginUrl = (originUrl: string) => { @@ -16,12 +16,19 @@ const getOriginUrl = (originUrl: string) => {
16 const regOptionalParams = /(?={\?)/g 16 const regOptionalParams = /(?={\?)/g
17 const regDynamicParams = /(?={).+?(?<=})/g 17 const regDynamicParams = /(?={).+?(?<=})/g
18 18
  19 +/**
  20 + * @description 判断是否是动态参数
  21 + * @param url
  22 + */
19 export const isDynamicUrl = (url: string) => { 23 export const isDynamicUrl = (url: string) => {
20 regDynamicParams.lastIndex = 0 24 regDynamicParams.lastIndex = 0
21 -  
22 return regDynamicParams.test(url) 25 return regDynamicParams.test(url)
23 } 26 }
24 27
  28 +/**
  29 + * @description 解析动态参数
  30 + * @param url
  31 + */
25 export const decomposeDynamicParams = (url: string) => { 32 export const decomposeDynamicParams = (url: string) => {
26 regDynamicParams.lastIndex = 0 33 regDynamicParams.lastIndex = 0
27 regOptionalParams.lastIndex = 0 34 regOptionalParams.lastIndex = 0
@@ -35,6 +42,48 @@ export const decomposeDynamicParams = (url: string) => { @@ -35,6 +42,48 @@ export const decomposeDynamicParams = (url: string) => {
35 }) 42 })
36 } 43 }
37 44
  45 +/**
  46 + * @description 正则替换url中的动态参数
  47 + * @param requestUrl
  48 + * @param Params
  49 + */
  50 +const getDynamicRequestUrl = (requestUrl = '', Params: Recordable) => {
  51 + requestUrl = decodeURI(requestUrl || '')
  52 +
  53 + const paramsList = decomposeDynamicParams(requestUrl)
  54 + requestUrl = paramsList.reduce((prev, next) => {
  55 + const { type, value, originValue } = next
  56 + if (type === ParamsType.REQUIRED) {
  57 + value.forEach(key => {
  58 + prev = prev.replace(key, Reflect.get(Params, key))
  59 + Reflect.deleteProperty(Params, key)
  60 + })
  61 + }
  62 +
  63 + if (type === ParamsType.OPTIONAL) {
  64 + prev = prev.replace(originValue, '')
  65 + }
  66 +
  67 + return prev
  68 + }, requestUrl)
  69 +
  70 + return requestUrl.replaceAll(/[{}?]/g, '')
  71 +}
  72 +
  73 +const transformBodyValue = (body: RequestParams['Body'], requestParamsBodyType: RequestBodyEnum) => {
  74 + let value = Reflect.get(body, requestParamsBodyType)
  75 +
  76 + if (requestParamsBodyType === RequestBodyEnum.FORM_DATA) {
  77 + const formData = new FormData()
  78 + Object.keys(value as RequestParams['Body']['form-data']).forEach(key => {
  79 + formData.append(key, value[key])
  80 + })
  81 + value = formData
  82 + }
  83 +
  84 + return value
  85 +}
  86 +
38 export const customRequest = async (request: RequestConfigType) => { 87 export const customRequest = async (request: RequestConfigType) => {
39 console.log(request) 88 console.log(request)
40 const { requestHttpType, requestParams, requestParamsBodyType, requestOriginUrl } = request as ExtraRequestConfigType 89 const { requestHttpType, requestParams, requestParamsBodyType, requestOriginUrl } = request as ExtraRequestConfigType
@@ -44,35 +93,13 @@ export const customRequest = async (request: RequestConfigType) => { @@ -44,35 +93,13 @@ export const customRequest = async (request: RequestConfigType) => {
44 Params = JSON.parse(JSON.stringify(Params)) 93 Params = JSON.parse(JSON.stringify(Params))
45 const isDynamicUrlFlag = isDynamicUrl(requestUrl || '') 94 const isDynamicUrlFlag = isDynamicUrl(requestUrl || '')
46 95
47 -  
48 -  
49 if (isDynamicUrlFlag) { 96 if (isDynamicUrlFlag) {
50 - requestUrl = decodeURI(requestUrl || '')  
51 -  
52 - const paramsList = decomposeDynamicParams(requestUrl)  
53 - requestUrl = paramsList.reduce((prev, next) => {  
54 - const { type, value, originValue } = next  
55 - if (type === ParamsType.REQUIRED) {  
56 - value.forEach(key => {  
57 - prev = prev.replace(key, Reflect.get(Params, key))  
58 - Reflect.deleteProperty(Params, key)  
59 - })  
60 - }  
61 -  
62 - if (type === ParamsType.OPTIONAL) {  
63 - prev = prev.replace(originValue, '')  
64 - }  
65 -  
66 - return prev  
67 - }, requestUrl)  
68 -  
69 - requestUrl = requestUrl.replaceAll(/[{}?]/g, '') 97 + requestUrl = getDynamicRequestUrl(requestUrl, Params)
70 } 98 }
71 99
72 - const body = Body[requestParamsBodyType as Exclude<'NONE', keyof typeof RequestBodyEnum>] 100 + const body = transformBodyValue(Body, requestParamsBodyType)
  101 + console.log({ body, requestParamsBodyType, Params })
73 102
74 - Reflect.deleteProperty(Params, 'date')  
75 - console.log(Header)  
76 return defHttp.request<any>({ 103 return defHttp.request<any>({
77 url: requestUrl, 104 url: requestUrl,
78 baseURL: getOriginUrl(requestOriginUrl!), 105 baseURL: getOriginUrl(requestOriginUrl!),
@@ -55,7 +55,6 @@ export const getDeviceInterfaceDetail = async (interfaces: string[]) => { @@ -55,7 +55,6 @@ export const getDeviceInterfaceDetail = async (interfaces: string[]) => {
55 55
56 export const getAllPublicInterface = async (params?: { state: PublicInterfaceStateEnum }) => { 56 export const getAllPublicInterface = async (params?: { state: PublicInterfaceStateEnum }) => {
57 return defHttp.get<PublicInterfaceRecord[]>({ 57 return defHttp.get<PublicInterfaceRecord[]>({
58 - // url: `${Api.GET_PUBLIC_INTERFACE_ALL}${params?.state ? `/${params.state}` : ''}`,  
59 - url: Api.GET_PUBLIC_INTERFACE_ALL, 58 + url: `${Api.GET_PUBLIC_INTERFACE_ALL}${params?.state ? `/${params.state}` : ''}`
60 }) 59 })
61 } 60 }
1 -import { RequestParams as OriginRequestParams } from "@/enums/httpEnum" 1 +import { RequestBodyEnum, RequestParams as OriginRequestParams } from "@/enums/httpEnum"
2 2
3 export enum PublicInterfaceStateEnum { 3 export enum PublicInterfaceStateEnum {
4 PUBLISH = 1, 4 PUBLISH = 1,
5 UN_PUBLISH = 0 5 UN_PUBLISH = 0
6 } 6 }
7 7
8 -export interface RequestParams {  
9 - Body: Recordable  
10 - Header: Recordable  
11 - Params: {  
12 - key: string  
13 - required: boolean  
14 - value: string  
15 - }[] 8 +export interface ParamsItemType {
  9 + key: string
  10 + required: boolean
  11 + value: string
  12 +}
  13 +
  14 +export interface PublicInterfaceRequestParams {
  15 + Body: {
  16 + requestParamsBodyType?: RequestBodyEnum
  17 + [RequestBodyEnum.XML]: string
  18 + [RequestBodyEnum.JSON]: string
  19 + [RequestBodyEnum.FORM_DATA]: ParamsItemType[]
  20 + [RequestBodyEnum.X_WWW_FORM_URLENCODED]: ParamsItemType[]
  21 + }
  22 + Header: ParamsItemType[]
  23 + Params: ParamsItemType[]
16 } 24 }
17 25
18 export interface PublicInterfaceRecord { 26 export interface PublicInterfaceRecord {
@@ -29,7 +37,7 @@ export interface PublicInterfaceRecord { @@ -29,7 +37,7 @@ export interface PublicInterfaceRecord {
29 requestHttpType: string, 37 requestHttpType: string,
30 requestParamsBodyType: string, 38 requestParamsBodyType: string,
31 requestUrl: string, 39 requestUrl: string,
32 - requestParams: string | OriginRequestParams, 40 + requestParams: string,
33 } 41 }
34 42
35 43
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 -import { PublicInterfaceRecord } from '@/api/external/dynamicRequest/model'; 2 +import { ParamsItemType, PublicInterfaceRecord } from '@/api/external/dynamicRequest/model';
3 import { RequestParams } from '@/enums/httpEnum'; 3 import { RequestParams } from '@/enums/httpEnum';
4 import { FormItemInst, NDatePicker, NForm, NFormItem, NInput, NSelect, NTreeSelect } from 'naive-ui' 4 import { FormItemInst, NDatePicker, NForm, NFormItem, NInput, NSelect, NTreeSelect } from 'naive-ui'
5 -import { computed, ref, unref, watch } from 'vue';  
6 -import { ComponentType, useDynamicPublicForm } from './useDynamicPublicForm';  
7 -import { transferData } from './utils'; 5 +import { computed, nextTick, ref, unref, watch } from 'vue';
  6 +import { ComponentType, useDynamicPublicForm } from './useDynamicPublicForm';
8 7
9 const props = defineProps<{ 8 const props = defineProps<{
10 - publicInterfaceRecord: PublicInterfaceRecord 9 + paramsItemList: ParamsItemType[]
11 }>() 10 }>()
12 11
13 const componentMap: { [key in ComponentType]?: any } = { 12 const componentMap: { [key in ComponentType]?: any } = {
@@ -17,15 +16,16 @@ const componentMap: { [key in ComponentType]?: any } = { @@ -17,15 +16,16 @@ const componentMap: { [key in ComponentType]?: any } = {
17 [ComponentType.DATE_PICKER]: NDatePicker 16 [ComponentType.DATE_PICKER]: NDatePicker
18 } 17 }
19 18
20 -const getPublicInterfaceRecord = computed(() => {  
21 - return props.publicInterfaceRecord 19 +const getParamsItemList = computed(() => {
  20 + return props.paramsItemList
22 }) 21 })
  22 +
23 const dynamicFormItemEl = ref<FormItemInst[]>() 23 const dynamicFormItemEl = ref<FormItemInst[]>()
24 24
25 -const { getDynamicFormSchemas, validFlag, getValue, createForm, clearParams, setDynamicFormValue } = useDynamicPublicForm(getPublicInterfaceRecord) 25 +const { getDynamicFormSchemas, validFlag, getValue, createForm, clearParams, setDynamicFormValue } = useDynamicPublicForm(getParamsItemList)
26 26
27 const getConfigurationData = () => { 27 const getConfigurationData = () => {
28 - return transferData(unref(getPublicInterfaceRecord), unref(getValue)) 28 + return unref(getValue)
29 } 29 }
30 30
31 const validate = async () => { 31 const validate = async () => {
@@ -34,12 +34,13 @@ const validate = async () => { @@ -34,12 +34,13 @@ const validate = async () => {
34 } 34 }
35 return unref(validFlag) 35 return unref(validFlag)
36 } 36 }
37 -const setConfigurationData = async (requestParams: RequestParams) => {  
38 - setDynamicFormValue(requestParams) 37 +const setConfigurationData = async (params: Recordable) => {
  38 + await nextTick()
  39 + setDynamicFormValue(params)
39 } 40 }
40 41
41 watch( 42 watch(
42 - () => props.publicInterfaceRecord, 43 + () => props.paramsItemList,
43 (newValue) => { 44 (newValue) => {
44 if (newValue) { 45 if (newValue) {
45 clearParams() 46 clearParams()
1 import { getDictItemByCode } from "@/api/external/common" 1 import { getDictItemByCode } from "@/api/external/common"
2 import { DictItem } from "@/api/external/common/model" 2 import { DictItem } from "@/api/external/common/model"
3 import { getDeviceAttrList, getDeviceList, getDeviceProfileList, getOrgList } from "@/api/external/dynamicRequest" 3 import { getDeviceAttrList, getDeviceList, getDeviceProfileList, getOrgList } from "@/api/external/dynamicRequest"
4 -import { PublicInterfaceRecord, RequestParams } from "@/api/external/dynamicRequest/model" 4 +import { ParamsItemType, PublicInterfaceRecord, PublicInterfaceRequestParams } from "@/api/external/dynamicRequest/model"
5 import { RequestConfigType } from "@/store/modules/chartEditStore/chartEditStore.d" 5 import { RequestConfigType } from "@/store/modules/chartEditStore/chartEditStore.d"
6 import { DatePickerProps, FormItemRule, InputProps, SelectProps, TreeSelectProps } from "naive-ui" 6 import { DatePickerProps, FormItemRule, InputProps, SelectProps, TreeSelectProps } from "naive-ui"
7 -import { computed, onMounted, reactive, Ref, ref, unref, watch } from "vue" 7 +import { computed, onMounted, reactive, Ref, ref, unref } from "vue"
8 import { DictEnum } from '@/enums/external/dictEnum' 8 import { DictEnum } from '@/enums/external/dictEnum'
9 9
10 const GROUP_SEPARATOR = ',' 10 const GROUP_SEPARATOR = ','
@@ -41,12 +41,10 @@ const isDateComponent = (type: BuiltInVariable) => { @@ -41,12 +41,10 @@ const isDateComponent = (type: BuiltInVariable) => {
41 return [BuiltInVariable.DATE_FIXED, BuiltInVariable.DATE_RANGE].includes(type) 41 return [BuiltInVariable.DATE_FIXED, BuiltInVariable.DATE_RANGE].includes(type)
42 } 42 }
43 43
44 -export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceRecord>) => { 44 +export const useDynamicPublicForm = (paramsItemList: Ref<ParamsItemType[]>) => {
45 45
46 - const getParams = computed(() => {  
47 - let params = (publicInterfaceRef.value.requestParams as unknown as RequestParams).Params || []  
48 - if (!Array.isArray(params)) params = []  
49 - return params 46 + const getParams = computed<ParamsItemType[]>(() => {
  47 + return unref(paramsItemList) || []
50 }) 48 })
51 49
52 const getUsedBuiltInVariable = computed(() => { 50 const getUsedBuiltInVariable = computed(() => {
@@ -312,8 +310,8 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco @@ -312,8 +310,8 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco
312 310
313 } 311 }
314 312
315 - const getDynamicFormSchemas = computed(() => {  
316 - return unref(getParams).reduce((prev, { key, value, required }) => { 313 + const getDynamicFormSchemas = computed<DynamicFormSchema[]>(() => {
  314 + return unref(getParams).reduce((prev: DynamicFormSchema[], { key, value, required }) => {
317 const schemas = toFormSchemas(key, required, value) 315 const schemas = toFormSchemas(key, required, value)
318 return [...prev, ...schemas] 316 return [...prev, ...schemas]
319 }, [] as DynamicFormSchema[]) 317 }, [] as DynamicFormSchema[])
@@ -342,7 +340,7 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco @@ -342,7 +340,7 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco
342 for (const temp of splitKeys) { 340 for (const temp of splitKeys) {
343 params[temp] = Params[temp] 341 params[temp] = Params[temp]
344 } 342 }
345 - } 343 + }
346 } 344 }
347 345
348 const clearParams = () => { 346 const clearParams = () => {
@@ -351,9 +349,8 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco @@ -351,9 +349,8 @@ export const useDynamicPublicForm = (publicInterfaceRef: Ref<PublicInterfaceReco
351 }) 349 })
352 } 350 }
353 351
354 - const setDynamicFormValue = (requestParams: RequestConfigType['requestParams']) => {  
355 - const { Params } = requestParams  
356 - setParams(Params) 352 + const setDynamicFormValue = (params: Recordable) => {
  353 + setParams(params)
357 getOrgOption() 354 getOrgOption()
358 getDeviceProfileOption() 355 getDeviceProfileOption()
359 getDeviceOption() 356 getDeviceOption()
1 -import { PublicInterfaceRecord } from "@/api/external/dynamicRequest/model" 1 +import { PublicInterfaceRecord, PublicInterfaceRequestParams } from "@/api/external/dynamicRequest/model"
2 import { RequestDataTypeEnum, RequestParams } from "@/enums/httpEnum" 2 import { RequestDataTypeEnum, RequestParams } from "@/enums/httpEnum"
3 -import { ExternalRequestType } from "@/store/external/modules/extraComponentInfo.d" 3 +import { ExtraRequestConfigType } from "@/store/external/modules/extraComponentInfo.d"
4 import { unref } from "vue" 4 import { unref } from "vue"
5 5
6 -export const transferData = (publicInterfaceRecord: PublicInterfaceRecord, fillParams: Recordable, fillBody: Recordable = {}) => {  
7 - const { requestContentType, requestHttpType, id, requestUrl, requestOriginUrl, requestParams } = publicInterfaceRecord  
8 - const { Header, Body } = requestParams as RequestParams 6 +export const extraPublicInterfaceInfo = (publicInterfaceRecord: PublicInterfaceRecord) => {
  7 + const { requestContentType, requestHttpType, id, requestUrl, requestOriginUrl, requestParams = {} } = unref(publicInterfaceRecord)
  8 + const { Body = {} } = requestParams as unknown as PublicInterfaceRequestParams
9 const { requestParamsBodyType } = Body as Recordable 9 const { requestParamsBodyType } = Body as Recordable
10 return { 10 return {
11 requestDataPondId: id, 11 requestDataPondId: id,
@@ -28,10 +28,15 @@ export const transferData = (publicInterfaceRecord: PublicInterfaceRecord, fillP @@ -28,10 +28,15 @@ export const transferData = (publicInterfaceRecord: PublicInterfaceRecord, fillP
28 // } 28 // }
29 // requestIntervalUnit 29 // requestIntervalUnit
30 requestParams: { 30 requestParams: {
31 - Header,  
32 - Body: unref(fillBody),  
33 - Params: unref(fillParams)  
34 - } 31 + Header: {},
  32 + Body: {
  33 + 'form-data': {},
  34 + 'json': '',
  35 + 'x-www-form-urlencoded': {},
  36 + xml: ''
  37 + },
  38 + Params: {}
  39 + } as RequestParams
35 40
36 - } as ExternalRequestType 41 + } as ExtraRequestConfigType
37 } 42 }
  1 +<script lang="ts" setup>
  2 +import { ParamsItemType, PublicInterfaceRequestParams } from '@/api/external/dynamicRequest/model';
  3 +import { MonacoEditor } from '@/components/Pages/MonacoEditor';
  4 +import { RequestBodyEnum, RequestBodyEnumList, RequestParams } from '@/enums/httpEnum';
  5 +import { NCard, NText, NRadioGroup, NRadio, NSpace } from 'naive-ui';
  6 +import { computed, ref, unref } from 'vue';
  7 +import { DynamicForm } from '../DynamicForm';
  8 +
  9 +const editorValue = ref('')
  10 +
  11 +const requestParamsBodyType = ref(RequestBodyEnum.X_WWW_FORM_URLENCODED)
  12 +
  13 +const paramsItemList = ref<ParamsItemType[]>([])
  14 +
  15 +const dynamicFormEl = ref<Nullable<InstanceType<typeof DynamicForm>>>(null)
  16 +
  17 +const getLanguage = computed(() => {
  18 + return unref(requestParamsBodyType) === RequestBodyEnum.JSON
  19 + ? 'json'
  20 + : unref(requestParamsBodyType) === RequestBodyEnum.XML
  21 + ? 'xml'
  22 + : 'json'
  23 +})
  24 +
  25 +const isDynamicForm = computed(() => {
  26 + return [RequestBodyEnum.FORM_DATA, RequestBodyEnum.X_WWW_FORM_URLENCODED].includes(unref(requestParamsBodyType))
  27 +})
  28 +
  29 +const isEditor = computed(() => {
  30 + return [RequestBodyEnum.XML, RequestBodyEnum.JSON].includes(unref(requestParamsBodyType))
  31 +})
  32 +
  33 +const setConfigurationData = (params: PublicInterfaceRequestParams['Body'], value: Recordable) => {
  34 + const { requestParamsBodyType: type, } = params || {}
  35 + if (!type) return
  36 + requestParamsBodyType.value = type
  37 +
  38 + const paramsValue = Reflect.get(params, type)
  39 + if (unref(isEditor)) {
  40 + editorValue.value = paramsValue
  41 + } else if (unref(isDynamicForm)) {
  42 + paramsItemList.value = paramsValue
  43 + const needSetValue = Reflect.get(value, type)
  44 + unref(dynamicFormEl)?.setConfigurationData(needSetValue)
  45 + }
  46 +
  47 +}
  48 +
  49 +const getConfigurationData = () => {
  50 + const value = unref(dynamicFormEl)?.getConfigurationData()
  51 + const getValue = unref(isDynamicForm) ? value : unref(isEditor) ? unref(editorValue) : {}
  52 + const record = {
  53 + 'form-data': {},
  54 + 'x-www-form-urlencoded': {},
  55 + xml: '',
  56 + json: ''
  57 + } as RequestParams['Body']
  58 +
  59 + Reflect.set(record, unref(requestParamsBodyType), getValue)
  60 + return record
  61 +}
  62 +
  63 +defineExpose({
  64 + getConfigurationData,
  65 + setConfigurationData
  66 +})
  67 +
  68 +</script>
  69 +
  70 +<template>
  71 + <section>
  72 + <NRadioGroup :value="requestParamsBodyType" style="margin-bottom: 20px;">
  73 + <NSpace>
  74 + <NRadio v-for="item in RequestBodyEnumList" :key="item" :value="item" :disabled="item !== requestParamsBodyType">
  75 + {{ item }}
  76 + </NRadio>
  77 + </NSpace>
  78 + </NRadioGroup>
  79 + <NCard>
  80 + <NCard v-if="requestParamsBodyType === RequestBodyEnum.NONE">
  81 + <NText depth="3">该接口没有 Body 体</NText>
  82 + </NCard>
  83 + <DynamicForm v-if="isDynamicForm" ref="dynamicFormEl" :paramsItemList="paramsItemList" />
  84 + <MonacoEditor v-if="isEditor" v-model:modelValue="editorValue" width="600px" height="200px"
  85 + :language="getLanguage" />
  86 + </NCard>
  87 + </section>
  88 +</template>
1 <script lang="ts" setup> 1 <script lang="ts" setup>
2 import { getAllPublicInterface } from '@/api/external/dynamicRequest' 2 import { getAllPublicInterface } from '@/api/external/dynamicRequest'
3 -import { PublicInterfaceRecord, PublicInterfaceStateEnum } from '@/api/external/dynamicRequest/model'; 3 +import { ParamsItemType, PublicInterfaceRecord, PublicInterfaceRequestParams, PublicInterfaceStateEnum } from '@/api/external/dynamicRequest/model';
4 import { SettingItem, SettingItemBox } from '@/components/Pages/ChartItemSetting'; 4 import { SettingItem, SettingItemBox } from '@/components/Pages/ChartItemSetting';
5 import { RequestContentTypeEnum, RequestContentTypeNameEnum } from '@/enums/external/httpEnum'; 5 import { RequestContentTypeEnum, RequestContentTypeNameEnum } from '@/enums/external/httpEnum';
6 import { RequestBodyEnum, RequestHttpEnum, RequestHttpIntervalEnum, RequestParams, RequestParamsTypeEnum } from '@/enums/httpEnum'; 6 import { RequestBodyEnum, RequestHttpEnum, RequestHttpIntervalEnum, RequestParams, RequestParamsTypeEnum } from '@/enums/httpEnum';
@@ -8,9 +8,11 @@ import { NCard, NEmpty, NInputGroup, NInputNumber, NScrollbar, NSelect, NTabPane @@ -8,9 +8,11 @@ import { NCard, NEmpty, NInputGroup, NInputNumber, NScrollbar, NSelect, NTabPane
8 import { ref, computed, unref, nextTick } from 'vue' 8 import { ref, computed, unref, nextTick } from 'vue'
9 import { selectTimeOptions, selectTypeOptions } from '../../../index.d'; 9 import { selectTimeOptions, selectTypeOptions } from '../../../index.d';
10 import ParamsTable from '../RequestModal/ParamsTable.vue'; 10 import ParamsTable from '../RequestModal/ParamsTable.vue';
11 -import RequestBody from '../RequestModal/RequestBody.vue'; 11 +import BodyContent from './BodyContent.vue'
12 import { ExtraRequestConfigType } from '@/store/external/modules/extraComponentInfo.d'; 12 import { ExtraRequestConfigType } from '@/store/external/modules/extraComponentInfo.d';
13 import { DynamicForm } from '../DynamicForm'; 13 import { DynamicForm } from '../DynamicForm';
  14 +import { extraPublicInterfaceInfo } from '../DynamicForm/utils';
  15 +import { isArray } from '@/utils';
14 16
15 const publicInterfaceList = ref<PublicInterfaceRecord[]>([]) 17 const publicInterfaceList = ref<PublicInterfaceRecord[]>([])
16 18
@@ -31,6 +33,14 @@ const getSelectedInterface = computed<PublicInterfaceRecord>(() => { @@ -31,6 +33,14 @@ const getSelectedInterface = computed<PublicInterfaceRecord>(() => {
31 return _record 33 return _record
32 }) 34 })
33 35
  36 +const getSelectedInterfaceBody = computed<PublicInterfaceRequestParams['Body']>(() => {
  37 + return (unref(getSelectedInterface).requestParams as unknown as PublicInterfaceRequestParams).Body || {}
  38 +
  39 +})
  40 +const getSelectedInterfaceParams = computed(() => {
  41 + return (unref(getSelectedInterface).requestParams as unknown as PublicInterfaceRequestParams).Params || []
  42 +})
  43 +
34 const getPublicInterfaceList = async () => { 44 const getPublicInterfaceList = async () => {
35 if (unref(publicInterfaceList).length) return 45 if (unref(publicInterfaceList).length) return
36 const result = await getAllPublicInterface({ state: PublicInterfaceStateEnum.PUBLISH }) 46 const result = await getAllPublicInterface({ state: PublicInterfaceStateEnum.PUBLISH })
@@ -58,12 +68,16 @@ const requestParamsBodyTypeRef = ref<RequestBodyEnum>(RequestBodyEnum.X_WWW_FORM @@ -58,12 +68,16 @@ const requestParamsBodyTypeRef = ref<RequestBodyEnum>(RequestBodyEnum.X_WWW_FORM
58 68
59 const headerRef = ref() 69 const headerRef = ref()
60 70
61 -const paramsDynamicFormEl = ref<InstanceType<typeof DynamicForm>>()  
62 -const socketDynamicFormEl = ref<InstanceType<typeof DynamicForm>>() 71 +const paramsDynamicFormEl = ref<Nullable<InstanceType<typeof DynamicForm>>>(null)
  72 +const bodyContentEl = ref<Nullable<InstanceType<typeof BodyContent>>>(null)
  73 +const socketDynamicFormEl = ref<Nullable<InstanceType<typeof DynamicForm>>>(null)
63 74
64 -const handleSelectedInterfaceChange = (value: string, option: PublicInterfaceRecord) => { 75 +const handleSelectedInterfaceChange = (_value: string, option: PublicInterfaceRecord) => {
65 requestContentTypeRef.value = option.requestContentType as RequestContentTypeEnum 76 requestContentTypeRef.value = option.requestContentType as RequestContentTypeEnum
66 requestHttpTypeRef.value = option.requestHttpType as RequestHttpEnum 77 requestHttpTypeRef.value = option.requestHttpType as RequestHttpEnum
  78 + const { Header = [], Body } = JSON.parse(option.requestParams) as PublicInterfaceRequestParams
  79 + headerRef.value = isArray(Header) ? (Header as ParamsItemType[]).reduce((prev, next) => ({ ...prev, [next.key]: next.value }), {}) : {}
  80 + unref(bodyContentEl)?.setConfigurationData(Body)
67 } 81 }
68 82
69 const getGetRequestTypeName = (key: RequestContentTypeEnum) => { 83 const getGetRequestTypeName = (key: RequestContentTypeEnum) => {
@@ -75,15 +89,28 @@ const validate = async () => { @@ -75,15 +89,28 @@ const validate = async () => {
75 if (unref(socketDynamicFormEl)) return await unref(socketDynamicFormEl)?.validate() 89 if (unref(socketDynamicFormEl)) return await unref(socketDynamicFormEl)?.validate()
76 } 90 }
77 91
78 -const setDynamicFormValue = (requestParams: RequestParams) => {  
79 - if (unref(paramsDynamicFormEl)) unref(paramsDynamicFormEl)?.setConfigurationData(requestParams)  
80 - if (unref(socketDynamicFormEl)) unref(socketDynamicFormEl)?.setConfigurationData(requestParams) 92 +const setDynamicFormValue = (request: ExtraRequestConfigType) => {
  93 + const { requestParams: { Params, Body } } = request
  94 + if (unref(paramsDynamicFormEl)) unref(paramsDynamicFormEl)?.setConfigurationData(Params)
  95 + if (unref(socketDynamicFormEl)) unref(socketDynamicFormEl)?.setConfigurationData(Params)
  96 + if (unref(bodyContentEl)) {
  97 + unref(bodyContentEl)?.setConfigurationData(unref(getSelectedInterfaceBody), Body)
  98 + }
81 } 99 }
82 100
  101 +const getDynamicFormValue = (): Recordable => {
  102 + if (unref(paramsDynamicFormEl)) return unref(paramsDynamicFormEl)?.getConfigurationData() || {}
  103 + if (unref(socketDynamicFormEl)) return unref(socketDynamicFormEl)?.getConfigurationData() || {}
  104 + return {}
  105 +}
83 106
84 const getConfigurationData = () => { 107 const getConfigurationData = () => {
85 - if (unref(paramsDynamicFormEl)) return unref(paramsDynamicFormEl)?.getConfigurationData()  
86 - if (unref(socketDynamicFormEl)) return unref(socketDynamicFormEl)?.getConfigurationData() 108 + const record = extraPublicInterfaceInfo(unref(getSelectedInterface))
  109 + const bodyValue = unref(bodyContentEl)?.getConfigurationData() || {} as RequestParams['Body']
  110 + record.requestParams[RequestParamsTypeEnum.PARAMS] = getDynamicFormValue()
  111 + record.requestParams[RequestParamsTypeEnum.HEADER] = unref(headerRef)
  112 + record.requestParams[RequestParamsTypeEnum.BODY] = bodyValue
  113 + return record
87 } 114 }
88 115
89 const setConfigurationData = async (request: ExtraRequestConfigType) => { 116 const setConfigurationData = async (request: ExtraRequestConfigType) => {
@@ -97,7 +124,8 @@ const setConfigurationData = async (request: ExtraRequestConfigType) => { @@ -97,7 +124,8 @@ const setConfigurationData = async (request: ExtraRequestConfigType) => {
97 requestParamsBodyTypeRef.value = requestParamsBodyType 124 requestParamsBodyTypeRef.value = requestParamsBodyType
98 requestBodyRef.value = requestParams 125 requestBodyRef.value = requestParams
99 await nextTick() 126 await nextTick()
100 - setDynamicFormValue(requestParams) 127 + console.log(request)
  128 + setDynamicFormValue(request)
101 } 129 }
102 130
103 defineExpose({ 131 defineExpose({
@@ -156,13 +184,12 @@ defineExpose({ @@ -156,13 +184,12 @@ defineExpose({
156 :item-right-style="{ gridTemplateColumns: '7fr 1fr' }"> 184 :item-right-style="{ gridTemplateColumns: '7fr 1fr' }">
157 <NCard v-show="requestParamsTypeRef === RequestParamsTypeEnum.PARAMS" class="dynamic-form"> 185 <NCard v-show="requestParamsTypeRef === RequestParamsTypeEnum.PARAMS" class="dynamic-form">
158 <NScrollbar style="max-height: 400px; box-sizing: border-box;"> 186 <NScrollbar style="max-height: 400px; box-sizing: border-box;">
159 - <DynamicForm ref="paramsDynamicFormEl" :public-interface-record="getSelectedInterface" /> 187 + <DynamicForm ref="paramsDynamicFormEl" :paramsItemList="getSelectedInterfaceParams" />
160 <NEmpty v-if="!selectedPublicInterface" description="请选择公共接口" /> 188 <NEmpty v-if="!selectedPublicInterface" description="请选择公共接口" />
161 </NScrollbar> 189 </NScrollbar>
162 </NCard> 190 </NCard>
163 191
164 - <RequestBody v-show="requestParamsTypeRef === RequestParamsTypeEnum.BODY"  
165 - v-model:request-params-body-type="requestParamsBodyTypeRef" v-model:value="requestBodyRef" /> 192 + <BodyContent v-show="requestParamsTypeRef === RequestParamsTypeEnum.BODY" ref="bodyContentEl" />
166 193
167 <ParamsTable v-show="requestParamsTypeRef === RequestParamsTypeEnum.HEADER" v-model:value="headerRef" 194 <ParamsTable v-show="requestParamsTypeRef === RequestParamsTypeEnum.HEADER" v-model:value="headerRef"
168 :disabled="true" /> 195 :disabled="true" />
@@ -172,7 +199,7 @@ defineExpose({ @@ -172,7 +199,7 @@ defineExpose({
172 <SettingItemBox v-if="requestContentTypeRef === RequestContentTypeEnum.WEB_SOCKET"> 199 <SettingItemBox v-if="requestContentTypeRef === RequestContentTypeEnum.WEB_SOCKET">
173 <NCard v-if="requestParamsTypeRef === RequestParamsTypeEnum.PARAMS" class="dynamic-form"> 200 <NCard v-if="requestParamsTypeRef === RequestParamsTypeEnum.PARAMS" class="dynamic-form">
174 <NScrollbar style="max-height: 400px; box-sizing: border-box;"> 201 <NScrollbar style="max-height: 400px; box-sizing: border-box;">
175 - <DynamicForm ref="socketDynamicFormEl" :public-interface-record="getSelectedInterface" /> 202 + <DynamicForm ref="socketDynamicFormEl" :paramsItemList="getSelectedInterfaceParams" />
176 <NEmpty v-if="!selectedPublicInterface" description="请选择公共接口" /> 203 <NEmpty v-if="!selectedPublicInterface" description="请选择公共接口" />
177 </NScrollbar> 204 </NScrollbar>
178 </NCard> 205 </NCard>
@@ -89,7 +89,7 @@ const columns: DataTableColumns<DataSource> = [ @@ -89,7 +89,7 @@ const columns: DataTableColumns<DataSource> = [
89 size: 'small', 89 size: 'small',
90 ghost: true, 90 ghost: true,
91 onClick: () => handleSubtractRow(row), 91 onClick: () => handleSubtractRow(row),
92 - disabled: props.disabled || !unref(canDeleteRow) 92 + // disabled: props.disabled || !unref(canDeleteRow)
93 } as ButtonProps, 93 } as ButtonProps,
94 { 94 {
95 default: () => h(NIcon, () => h(Subtract)) 95 default: () => h(NIcon, () => h(Subtract))
@@ -124,13 +124,7 @@ const props = withDefaults( @@ -124,13 +124,7 @@ const props = withDefaults(
124 maxRow: 50, 124 maxRow: 50,
125 } 125 }
126 ) 126 )
127 -  
128 -watch(  
129 - () => props.value,  
130 - () => {  
131 - console.log(props.value)  
132 - }  
133 -) 127 +
134 128
135 const emit = defineEmits(['update:value']) 129 const emit = defineEmits(['update:value'])
136 130
@@ -172,6 +166,11 @@ const handleAddRow = (record: DataSource) => { @@ -172,6 +166,11 @@ const handleAddRow = (record: DataSource) => {
172 166
173 const handleSubtractRow = (record: DataSource) => { 167 const handleSubtractRow = (record: DataSource) => {
174 const index = unref(dataSource).findIndex(item => item.id === record.id) 168 const index = unref(dataSource).findIndex(item => item.id === record.id)
  169 + if (unref(dataSource).length === 1) {
  170 + unref(dataSource)[index].keyName = ''
  171 + unref(dataSource)[index].value = ''
  172 + return
  173 + }
175 unref(dataSource).splice(index, 1) 174 unref(dataSource).splice(index, 1)
176 } 175 }
177 176
@@ -70,6 +70,7 @@ const getResult = () => { @@ -70,6 +70,7 @@ const getResult = () => {
70 const handleSaveAction = async () => { 70 const handleSaveAction = async () => {
71 if (!(await validate())) return 71 if (!(await validate())) return
72 const value = getResult() 72 const value = getResult()
  73 + console.log(value)
73 if (unref(selectTarget)) { 74 if (unref(selectTarget)) {
74 chartEditStore.updateComponentList(chartEditStore.fetchTargetIndex(), { 75 chartEditStore.updateComponentList(chartEditStore.fetchTargetIndex(), {
75 ...unref(selectTarget)!, 76 ...unref(selectTarget)!,
@@ -44,7 +44,6 @@ export const useSyncRemote = () => { @@ -44,7 +44,6 @@ export const useSyncRemote = () => {
44 * @returns 44 * @returns
45 */ 45 */
46 const updateStoreInfo = (projectData: DateViewConfigurationInfoType) => { 46 const updateStoreInfo = (projectData: DateViewConfigurationInfoType) => {
47 - console.log(projectData)  
48 projectInfoStore.setProjectInfo(projectData) 47 projectInfoStore.setProjectInfo(projectData)
49 } 48 }
50 49
@@ -102,7 +101,6 @@ export const useSyncRemote = () => { @@ -102,7 +101,6 @@ export const useSyncRemote = () => {
102 101
103 // 保存预览图 102 // 保存预览图
104 if (uploadRes) { 103 if (uploadRes) {
105 - console.log(projectInfoStore.getProjectInfo)  
106 await saveDataViewList({ 104 await saveDataViewList({
107 name: dataViewName, 105 name: dataViewName,
108 organizationId, 106 organizationId,