transferConfigApi.vue 7.23 KB
<template>
  <div class="root">
    <div class="root-form">
      <BasicForm :showSubmitButton="false" @register="register">
        <template #addKeyAndValue="{ field }">
          <span style="display: none">{{ field }}</span>
          <div>
            <div>
              <template v-for="(item, index) in keyAndValueArr" :key="index">
                <span style="display: none">{{ item + index }}</span>
                <BasicForm
                  :showResetButton="false"
                  :showSubmitButton="false"
                  @register="registerKeyAndValue"
                />
              </template>
              <div
                style="
                  width: 5vw;
                  height: 3vh;
                  display: flex;
                  flex-direction: row;
                  justify-content: center;
                  align-items: center;
                  margin-left: 1.8vw;
                "
              >
                <div
                  style="
                    width: 2.6vw;
                    height: 3vh;
                    background-color: #0960bd;
                    border-radius: 10px;
                    cursor: pointer;
                    text-align: center;
                    line-height: 2.89vh;
                  "
                >
                  <span @click="addKeyAndValueFunc" style="color: white">添加</span>
                </div>
                <div
                  style="
                    width: 2.6vw;
                    height: 3vh;
                    margin-left: 1vw;
                    background-color: #ed6f6f;
                    border-radius: 10px;
                    cursor: pointer;
                    text-align: center;
                    line-height: 2.89vh;
                  "
                >
                  <span @click="removeKeyAndValueFunc" style="color: white">删除</span>
                </div>
              </div>
              <div> </div>
            </div>
          </div>
        </template>
        <template #uploadAdd1="{ field }">
          <span style="display: none">{{ field }}</span>
          <UploadDragger
            v-model:fileList="fileList"
            name="file"
            :multiple="true"
            action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
            @change="handleChange"
          >
            <p class="ant-upload-drag-icon">
              <InboxOutlined />
            </p>
            <p class="ant-upload-text">Click or drag file to this area to upload</p>
            <p class="ant-upload-hint">
              Support for a single or bulk upload. Strictly prohibit from uploading company data or
              other band files
            </p>
          </UploadDragger>
        </template>
        <template #uploadAdd2="{ field }">
          <span style="display: none">{{ field }}</span>
          <UploadDragger
            v-model:fileList="fileList"
            name="file"
            :multiple="true"
            action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
            @change="handleChange"
          >
            <p class="ant-upload-drag-icon">
              <InboxOutlined />
            </p>
            <p class="ant-upload-text">Click or drag file to this area to upload</p>
            <p class="ant-upload-hint">
              Support for a single or bulk upload. Strictly prohibit from uploading company data or
              other band files
            </p>
          </UploadDragger>
        </template>
        <template #uploadAdd3="{ field }">
          <span style="display: none">{{ field }}</span>
          <UploadDragger
            v-model:fileList="fileList"
            name="file"
            :multiple="true"
            action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
            @change="handleChange"
          >
            <p class="ant-upload-drag-icon">
              <InboxOutlined />
            </p>
            <p class="ant-upload-text">Click or drag file to this area to upload</p>
            <p class="ant-upload-hint">
              Support for a single or bulk upload. Strictly prohibit from uploading company data or
              other band files
            </p>
          </UploadDragger>
        </template>
      </BasicForm>
    </div>
  </div>
</template>
<script lang="ts">
  import { defineComponent, ref, reactive } from 'vue';
  import { BasicForm, useForm } from '/@/components/Form';
  import { modeApiForm, modeKafkaInseretKeyAndValueForm } from '../config';
  import { InboxOutlined } from '@ant-design/icons-vue';
  import { Alert, Divider, Descriptions, UploadDragger } from 'ant-design-vue';

  export default defineComponent({
    components: {
      BasicForm,
      [Alert.name]: Alert,
      [Divider.name]: Divider,
      [Descriptions.name]: Descriptions,
      [Descriptions.Item.name]: Descriptions.Item,
      InboxOutlined,
      UploadDragger,
    },
    emits: ['next', 'prev', 'register'],
    setup(_, { emit }) {
      const fileList = ref<[]>([]);
      const keyAndValueArr = ref<[]>([]);
      const sonValues = reactive({
        configuration: {},
      });
      const [register, { validate, setFieldsValue, resetFields }] = useForm({
        labelWidth: 80,
        schemas: modeApiForm,
        actionColOptions: {
          span: 14,
        },
        resetButtonOptions: {
          text: '上一步',
        },

        resetFunc: customResetFunc,
        submitFunc: customSubmitFunc,
      });

      const [registerKeyAndValue] = useForm({
        labelWidth: 80,
        schemas: modeKafkaInseretKeyAndValueForm,
        actionColOptions: {
          span: 14,
        },
      });
      const setStepTwoFieldsValueFunc = (v) => {
        setFieldsValue(v);
      };
      const customClearStepTwoValueFunc = () => {
        resetFields();
      };
      async function customResetFunc() {
        emit('prev');
      }
      async function customSubmitFunc() {
        try {
          const values = await validate();
          emit('next', values);
        } catch (error) {
        } finally {
        }
      }
      const defaultAddKeyAndValueFunc = () => {
        if (keyAndValueArr.value.length == 0) {
          keyAndValueArr.value.push({
            key: 1,
            value: 1,
          });
        }
      };
      defaultAddKeyAndValueFunc();

      const addKeyAndValueFunc = () => {
        keyAndValueArr.value.push({
          key: 1,
          value: 1,
        });
      };
      const removeKeyAndValueFunc = () => {
        keyAndValueArr.value.splice(0, 1);
      };
      const handleChange = () => {};

      const getSonValueFunc = async () => {
        sonValues.configuration = await validate();
        return sonValues;
      };
      return {
        register,
        setStepTwoFieldsValueFunc,
        customClearStepTwoValueFunc,
        addKeyAndValueFunc,
        removeKeyAndValueFunc,
        getSonValueFunc,
        keyAndValueArr,
        registerKeyAndValue,
        fileList,
        handleChange,
      };
    },
  });
</script>
<style lang="less" scoped>
  .root {
    width: 45.55vw;
    border: 1px solid #bfbfbf;
    display: flex;
    margin-top: 1vh;
    .root-form {
      width: 44vw;
      margin: 1vh 1vw;
      position: relative;
      :deep .ant-btn {
        position: absolute;
        right: 1vw;
      }
    }
  }
</style>