DataFlowMethod.vue 2.5 KB
<template>
  <div class="data-flow-method">
    <BasicForm @register="register" />
    <Button
      type="primary"
      class="data-flow-method-button"
      @click="currentDataFlowMethodHanleNextStep"
      >下一步</Button
    >
  </div>
</template>

<script lang="ts" setup name="DataFlowMethod">
  import { BasicForm, useForm } from '/@/components/Form';
  import { modeForm, modelFormPublicConfig } from './config';
  import { BasicInfoFormField } from './enum';
  import { BasicInfoRecord } from './types';
  import { Button } from 'ant-design-vue';
  import { ref, unref } from 'vue';

  defineProps({
    saveContent: {
      type: Function,
    },
  });

  const emit = defineEmits(['currentDataFlowMethodEmitNext']);

  const disabled = ref<boolean>(false);
  const [register, { validateFields, setFieldsValue, resetFields, setProps }] = useForm({
    schemas: modeForm(unref(disabled)),
    ...modelFormPublicConfig,
  });

  const getValue = async () => {
    const record = (await validateFields()) || {};
    const { type, remark } = record;
    const datasourceType = Reflect.get(record, BasicInfoFormField.DATA_SOURCE_TYPE);
    const convertDevices = Reflect.get(record, BasicInfoFormField.DATA_SOURCE_DEVICE);
    const convertProducts = Reflect.get(record, BasicInfoFormField.DATA_SOURCE_PRODUCT);
    return {
      type,
      remark,
      datasourceType,
      datasourceContent: {
        convertProducts,
        convertDevices,
      } as unknown as BasicInfoRecord,
    };
  };

  const setValue = (record: Recordable) => {
    const value = {
      ...record,
      [BasicInfoFormField.DATA_SOURCE_PRODUCT]: record?.datasourceContent?.convertProducts || [],
      [BasicInfoFormField.DATA_SOURCE_DEVICE]: record?.datasourceContent?.convertDevices,
      [BasicInfoFormField.CONVERT_CONFIG_ID]: record?.id,
    };
    setFieldsValue(value);
  };

  const currentDataFlowMethodHanleNextStep = () => {
    emit('currentDataFlowMethodEmitNext', getValue());
  };

  const setDisabledProps = (value) => {
    setProps(value);
    disabled.value = false;
  };
  const setCancelDisabled = () => {
    disabled.value = false;
  };

  const resetValue = () => resetFields();
  defineExpose({
    getValue,
    setValue,
    resetValue,
    setDisabledProps,
    setCancelDisabled,
  });
</script>
<style lang="less" scoped>
  .data-flow-method {
    margin: 0 auto;
    width: 600px;

    .data-flow-method-button {
      position: absolute;
      bottom: 10%;
      right: 50%;
      transform: translateX(50%);
    }
  }
</style>