RequestBody.vue 1.89 KB
<script lang="ts" setup>
import { MonacoEditor } from '@/components/Pages/MonacoEditor';
import { RequestBodyEnum, RequestBodyEnumList, RequestParams } from '@/enums/httpEnum';
import { NCard } from 'naive-ui'; 
import ParamsTable from './ParamsTable.vue';

defineProps<{
  requestParamsBodyType: RequestBodyEnum
  value: RequestParams
}>()

const emit = defineEmits(['update:requestParamsBodyType'])

const handleSyncRequestParamsBodyType = (value: RequestBodyEnum) => {
  emit('update:requestParamsBodyType', value || RequestBodyEnum.X_WWW_FORM_URLENCODED)
}

</script>

<template>
  <section>
    <NRadioGroup :value="requestParamsBodyType || RequestBodyEnum.X_WWW_FORM_URLENCODED"
      @update:value="handleSyncRequestParamsBodyType">
      <NSpace>
        <NRadio v-for="item in RequestBodyEnumList" :key="item" :value="item">
          {{ item }}
        </NRadio>
      </NSpace>
    </NRadioGroup>

    <section class="body-container">
      <!-- 为 none 时 -->
      <NCard v-if="requestParamsBodyType === RequestBodyEnum.NONE">
        <NText depth="3">该接口没有 Body 体</NText>
      </NCard>

      <ParamsTable v-if="requestParamsBodyType === RequestBodyEnum.FORM_DATA"
        v-model:value="value.Body[RequestBodyEnum.FORM_DATA]" />

      <ParamsTable v-if="requestParamsBodyType === RequestBodyEnum.X_WWW_FORM_URLENCODED || !requestParamsBodyType"
        v-model:value="value.Body[RequestBodyEnum.X_WWW_FORM_URLENCODED]" />

      <MonacoEditor v-if="requestParamsBodyType === RequestBodyEnum.JSON"
        v-model:modelValue="value.Body[RequestBodyEnum.JSON]" width="600px" height="200px" language="json" />

      <MonacoEditor v-if="requestParamsBodyType === RequestBodyEnum.XML"
        v-model:modelValue="value.Body[RequestBodyEnum.XML]" width="600px" height="200px" language="xml" />
    </section>
  </section>
</template>

<style lang="scss" scoped>
.body-container {
  margin-top: 20px;
}
</style>