index.vue 3.44 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 ref="testParRequestRef" :method="method" :data="dataList" />
      </TabPane>
      <TabPane v-if="method !== '2'" class="tab-pane" forceRender key="Body" tab="Body">
        <Body ref="bodyRef" :method="method" />
        <TestRequest ref="testBodyRequestRef" :method="method" :data="dataList" />
      </TabPane>
      <TabPane v-if="method !== '2'" class="tab-pane" forceRender key="Header" tab="Header">
        <EditCellTable ref="editHeaderCellTableRef" :method="method" />
        <TestRequest ref="testHeaderRequestRef" :method="method" :data="dataList" />
      </TabPane>
    </Tabs>
  </div>
</template>
<script lang="ts" setup name="simpleRequest">
  import { ref, nextTick } from 'vue';
  import { Tabs, TabPane } from 'ant-design-vue';
  import { EditCellTable } from '../EditCellTable';
  import Body from './body.vue';
  import { TestRequest } from '../TestRequest/index';

  defineProps({
    method: {
      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 dataList = ref({});

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

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

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

  //设置数据
  const setValue = (data) => {
    dataList.value = 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();
    });
  };

  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>