index.vue 4.62 KB
<template>
  <div>
    <Tabs @change="handleChange" v-model:activeKey="activeKey">
      <TabPane class="tab-pane" forceRender key="Params" tab="Params">
        <EditCellTable ref="editCellTableRef" :method="method" />
        <TestRequest
          @testInterface="handleTestInterface"
          ref="testParRequestRef"
          :method="method"
          :requestOriginUrl="requestOriginUrl"
          :requestUrl="requestUrl"
          :data="dataMap.mapObj"
        />
      </TabPane>
      <TabPane
        v-if="method !== '2' && paramsType !== 'GET'"
        class="tab-pane"
        forceRender
        key="Body"
        tab="Body"
      >
        <Body ref="bodyRef" :method="method" :paramsType="paramsType" :data="dataMap.mapObj" />
        <TestRequest
          @testInterface="handleTestInterface"
          ref="testBodyRequestRef"
          :method="method"
          :requestOriginUrl="requestOriginUrl"
          :requestUrl="requestUrl"
          :data="dataMap.mapObj"
        />
      </TabPane>
      <TabPane v-if="method !== '2'" class="tab-pane" forceRender key="Header" tab="Header">
        <EditCellTable ref="editHeaderCellTableRef" :method="method" />
        <TestRequest
          @testInterface="handleTestInterface"
          ref="testHeaderRequestRef"
          :method="method"
          :requestOriginUrl="requestOriginUrl"
          :requestUrl="requestUrl"
          :data="dataMap.mapObj"
        />
      </TabPane>
    </Tabs>
  </div>
</template>
<script lang="ts" setup name="simpleRequest">
  import { ref, nextTick, reactive } from 'vue';
  import { Tabs, TabPane } from 'ant-design-vue';
  import { EditCellTable } from '../EditCellTable';
  import Body from './body.vue';
  import { TestRequest } from '../TestRequest/index';

  const props = defineProps({
    method: {
      type: String,
    },
    paramsType: {
      type: String,
    },
    requestOriginUrl: {
      type: String,
    },
    requestUrl: {
      type: String,
    },
  });

  const emits = defineEmits(['activeKey']);

  const activeKey = ref('Params');

  const editCellTableRef = ref<InstanceType<typeof EditCellTable>>();

  const editHeaderCellTableRef = ref<InstanceType<typeof EditCellTable>>();

  const testParRequestRef = ref<InstanceType<typeof TestRequest>>();

  const testBodyRequestRef = ref<InstanceType<typeof TestRequest>>();

  const testHeaderRequestRef = ref<InstanceType<typeof TestRequest>>();

  const dataMap: any = reactive({
    mapObj: {},
  });

  const bodyRef = ref<InstanceType<typeof Body>>();

  const handleChange = () => {
    testParRequestRef.value?.setValue();
    testHeaderRequestRef.value?.setValue();
    testBodyRequestRef.value?.setValue();
  };

  const handleTestInterface = () => {
    const value = getValue(false);
    nextTick(
      () =>
        (dataMap.mapObj = {
          list: value,
          requestOriginUrl: props.requestOriginUrl,
          requestUrl: props.requestUrl,
          paramsType: props.paramsType,
        })
    );
  };

  //获取数据
  const getValue = (status) => {
    const type = activeKey.value;
    const Body = bodyRef.value?.getValue();
    const Params = editCellTableRef.value?.getValue();
    const Header = editHeaderCellTableRef.value?.getValue();
    status ? emits('activeKey', type) : null;
    return type === 'Params' ? Params : type === 'Body' ? Body : Header;
  };

  //设置数据
  const setValue = (data) => {
    const Objects = JSON.parse(data?.requestParams);
    nextTick(() => {
      if (!Objects) return;
      activeKey.value = Objects?.type;
      if (activeKey.value === 'Params') {
        editCellTableRef.value?.setValue(Objects?.Params);
        testParRequestRef.value?.setValue();
      } else if (activeKey.value === 'Body') {
        bodyRef.value?.setValue(Objects?.Body);
        testBodyRequestRef.value?.setValue();
      } else if (activeKey.value === 'Header') {
        editHeaderCellTableRef.value?.setValue(Objects?.Header);
        testHeaderRequestRef.value?.setValue();
      } else {
      }
    });
  };

  //重置数据
  const resetValue = () => {
    activeKey.value = 'Params';
    nextTick(() => {
      editCellTableRef.value?.resetValue();
      editHeaderCellTableRef.value?.resetValue();
      bodyRef.value?.resetValue();
      handleChange();
    });
  };

  defineExpose({
    getValue,
    setValue,
    resetValue,
  });
</script>

<style lang="less" scoped>
  .tab-pane {
    display: flex;
    justify-content: flex-start;
    flex-direction: column;
    align-items: flex-start;
  }
</style>