Attribute.vue
2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<template>
  <BasicForm @register="register" />
</template>
<script lang="ts" setup>
  import { BasicForm, useForm } from '/@/components/Form';
  import { DataType, ModelOfMatterParams } from '/@/api/device/model/modelOfMatterModel';
  import { StructFormValue } from '/@/components/Form/src/externalCompns/components/StructForm/type';
  import {
    transfromToStructJSON,
    excludeIdInStructJSON,
  } from '/@/components/Form/src/externalCompns/components/StructForm/util';
  import { FunctionType } from './config';
  import { isArray } from 'lodash';
  import { OpenModelMode } from '../types';
  import { formSchemas } from '/@/components/Form/src/externalCompns/components/StructForm/config';
  import { TransportTypeEnum } from '../../../../components/TransportDescript/const';
  const props = defineProps<{ openModalMode: OpenModelMode; transportType: string }>();
  const [register, { validate, resetFields, setFieldsValue, setProps }] = useForm({
    labelWidth: 100,
    schemas: formSchemas(false, props.transportType === TransportTypeEnum.TCP),
    actionColOptions: {
      span: 14,
    },
    showResetButton: false,
    submitOnReset: false,
    showActionButtonGroup: false,
  });
  const setDisable = (flag: boolean) => {
    setProps({ disabled: flag });
  };
  async function getFormData(): Promise<Partial<ModelOfMatterParams>> {
    const _values = (await validate()) as StructFormValue;
    if (!_values) return {};
    const { functionName, remark, identifier, accessMode } = _values;
    const structJSON = transfromToStructJSON(_values);
    const dataType = excludeIdInStructJSON(structJSON.dataType!);
    const value = {
      functionName,
      functionType: FunctionType.PROPERTIES,
      remark,
      identifier,
      accessMode,
      extensionDesc: _values.extensionDesc,
      functionJson: {
        dataType: dataType,
      },
    } as ModelOfMatterParams;
    return value;
  }
  const resetFormData = () => {
    resetFields();
  };
  const setFormData = (record: ModelOfMatterParams) => {
    const { functionJson } = record;
    const { dataType = {} } = functionJson!;
    const { specs } = dataType! as DataType;
    const value = {
      ...record,
      ...functionJson,
      ...dataType,
      ...(isArray(specs) ? specs : { ...specs }),
    };
    setFieldsValue(value);
  };
  defineExpose({
    resetFormData,
    getFormData,
    setFormData,
    setDisable,
  });
</script>
<style lang="less" scoped></style>