ScriptDrawer.vue 2.93 KB
<template>
  <div>
    <BasicDrawer
      v-bind="$attrs"
      :title="getTitle"
      @register="register"
      width="500px"
      @ok="handleSubmit"
      destroyOnClose
      showFooter
    >
      <BasicForm @register="registerForm" />
    </BasicDrawer>
  </div>
</template>

<script lang="ts" setup>
  import { ref, computed, unref } from 'vue';
  import { useDrawerInner, BasicDrawer } from '/@/components/Drawer/index';
  import { useForm, BasicForm } from '/@/components/Form/index';
  import { formSchema } from '../config/config.data';
  import { createOrEditTransformScriptApi } from '/@/api/device/TransformScriptApi';
  import { useMessage } from '/@/hooks/web/useMessage';

  const emit = defineEmits(['register', 'isStatus', 'success']);
  const isUpdate: any = ref(false);
  const isView = ref(true);
  const getTitle = computed(() => (isUpdate.value ? '编辑转换脚本' : '新增转换脚本'));
  const editId = ref('');

  const [register, { setDrawerProps, closeDrawer }] = useDrawerInner((data) => {
    resetFields();
    setDrawerProps({ confirmLoading: false });
    isUpdate.value = data.isUpdate;

    switch (isUpdate.value) {
      case 'view':
        isView.value = false;
        setDrawerProps({
          showFooter: unref(isView),
          title: '查看转换脚本',
          loading: false,
        });
        editId.value = data.record.id;
        setFieldsValue({
          ...data.record,
          function: data?.record?.configuration,
        });
        break;
      case true:
        isView.value = true;
        setDrawerProps({
          showFooter: unref(isView),
          title: '编辑转换脚本',
          loading: false,
        });
        editId.value = data.record.id;
        setFieldsValue({
          ...data.record,
          function: data?.record?.configuration,
        });
        break;
      case false:
        isView.value = true;
        setDrawerProps({
          showFooter: unref(isView),
          title: '新增转换脚本',
          loading: false,
        });
        break;
    }
  });
  const [registerForm, { validate, setFieldsValue, resetFields }] = useForm({
    showActionButtonGroup: false,
    baseColProps: { span: 24 },
    schemas: formSchema,
  });

  const handleSubmit = async () => {
    const editIdPost = isUpdate.value ? { id: editId.value } : {};
    try {
      setDrawerProps({ confirmLoading: true });
      const fieldsValue = await validate();
      if (!fieldsValue) return;

      await createOrEditTransformScriptApi({
        configuration: fieldsValue.function,
        type: 'org.thingsboard.rule.engine.transform.TbTransformMsgNode',
        ...fieldsValue,
        ...editIdPost,
      });
      closeDrawer();
      emit('success');
      const { createMessage } = useMessage();
      createMessage.success('保存成功');
    } catch (e) {
    } finally {
      setTimeout(() => {
        setDrawerProps({ confirmLoading: false });
      }, 300);
    }
  };
</script>