Attribute.vue 1.61 KB
<template>
  <BasicForm @register="register" />
</template>
<script lang="ts" setup>
  import { BasicForm, useForm } from '/@/components/Form';
  import { ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
  import { formSchemas } from '/@/components/Form/src/externalCompns/components/StructForm/config';
  import { transformFormValue } from '/@/components/Form/src/externalCompns/components/StructForm/util';
  import {
    StructFormValue,
    StructRecord,
  } from '/@/components/Form/src/externalCompns/components/StructForm/type';
  import { isObject } from 'lodash';

  const [register, { validate, resetFields, setFieldsValue }] = useForm({
    labelWidth: 100,
    schemas: formSchemas,
    actionColOptions: {
      span: 14,
    },
    showResetButton: false,
    submitOnReset: false,
    showActionButtonGroup: false,
  });

  async function getFormData(): Promise<Partial<ModelOfMatterParams>> {
    const _values = (await validate()) as StructFormValue;
    if (!_values) return {};
    let value = transformFormValue(_values);
    return value;
  }

  const resetFormData = () => {
    resetFields();
  };

  const setFormData = (record: StructRecord) => {
    const { functionJson } = record as StructRecord;
    const { specs = {} } = functionJson || ({} as StructRecord['functionJson']);

    const value = {
      ...record,
      ...functionJson,
      ...(isObject(specs) ? specs : {}),
    };

    setFieldsValue(value);
  };

  defineExpose({
    resetFormData,
    getFormData,
    setFormData,
  });
</script>
<style lang="less" scoped>
  .add-style {
    color: #0170cc;
    cursor: pointer;
  }
</style>