RuleChainModal.vue 2.28 KB
<template>
  <div>
    <BasicModal
      destroyOnClose
      v-bind="$attrs"
      width="30rem"
      @register="register"
      :title="ruleTile"
      @ok="handleSuccess"
      @close="handleClose"
    >
      <div>
        <BasicForm @register="registerForm" />
      </div>
    </BasicModal>
  </div>
</template>
<script setup lang="ts">
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { useForm, BasicForm } from '/@/components/Form';
  import { formSchema } from './config';
  import { createRuleChine } from '/@/api/ruleengine/ruleengineApi';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { ref, unref } from 'vue';

  const emit = defineEmits(['register', 'success']);

  const { createMessage } = useMessage();

  const ruleTile = ref();

  const [registerForm, { getFieldsValue, validate, setFieldsValue }] = useForm({
    labelWidth: 70,
    schemas: formSchema,
    showActionButtonGroup: false,
  });

  const updateValue = ref({});
  const isUpdate = ref<boolean>(true);

  const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
    setModalProps({ loading: true });
    const { text, record } = data || {};
    isUpdate.value = record ? true : false;
    ruleTile.value = text;
    const { name, additionalInfo, debugMode } = record || {};
    const { description } = additionalInfo || {};
    updateValue.value = record;
    unref(isUpdate) && setFieldsValue({ name, debugMode, description });
    setModalProps({ loading: false });
  });

  const handleClose = () => {
    closeModal();
  };

  const handleSuccess = async () => {
    await validate();
    const record = getFieldsValue();
    const { description, debugMode, name } = record;
    if (!isUpdate.value) {
      const form = {
        additionalInfo: {
          description,
        },
        debugMode,
        name,
        type: 'CORE',
      };
      await createRuleChine(form);
      createMessage.success('添加成功');
    } else {
      const value = {
        ...updateValue.value,
        additionalInfo: {
          description,
        },
        debugMode,
        name,
      };
      await createRuleChine(value);
      createMessage.success('编辑成功');
    }

    handleClose();
    emit('success');
  };
</script>
<style lang="less" scoped></style>