useDrawer.vue 5.13 KB
<template>
  <BasicDrawer
    v-bind="$attrs"
    @register="registerDrawer"
    showFooter
    :title="getTitle"
    width="1000px"
    @ok="handleSubmit"
  >
    <BasicForm @register="registerForm" />
    <AddTriggerForm :deviceInfo="getDeviceInfo" @get-triggerdata="getTriggerData" />
    <AddConditiForm :deviceInfo1="getDeviceInfo1" @get-conditiondata="getFormConditiData" />
    <AddActionForm :deviceInfo2="getDeviceInfo2" @get-actiondata="getFormActionData" />
  </BasicDrawer>
</template>
<script lang="ts">
  import { defineComponent, ref, computed, unref, reactive, watch } from 'vue';
  import { BasicForm, useForm } from '/@/components/Form';
  import { formSchema, getData } from './config.d';
  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  import { screenLinkPageAddApi, screenLinkPageUpdateApi } from '/@/api/ruleengine/ruleengineApi';
  import { useMessage } from '/@/hooks/web/useMessage';
  import AddTriggerForm from './addForm/trigger.vue';
  import AddActionForm from './addForm/doaction.vue';
  import AddConditiForm from './addForm/condition.vue';

  export default defineComponent({
    name: 'ConfigDrawer',
    components: { BasicDrawer, BasicForm, AddTriggerForm, AddActionForm, AddConditiForm },
    emits: ['success', 'register'],
    setup(_, { emit }) {
      const { createMessage } = useMessage();
      const isUpdate = ref(true);
      let triggersArray: any[] = reactive([]);
      let doConditionsArray: any[] = reactive([]);
      let doActionsArray: any[] = reactive([]);
      let getAllFormData: any = reactive({});
      let getValuesFormData: any = reactive({});
      let getId = ref('');
      let getTriggerFormData: any = reactive({});
      let getConditionFormData: any = reactive({});
      let getActionFormData: any = reactive({});
      let getDeviceInfo = ref(null);
      let getDeviceInfo1 = ref(null);
      let getDeviceInfo2 = ref(null);

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

      watch(getData, (newV) => {
        getDeviceInfo.value = newV;
        getDeviceInfo1.value = newV;
        getDeviceInfo2.value = newV;
      });

      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
        await resetFields();
        setDrawerProps({ confirmLoading: false });
        isUpdate.value = !!data?.isUpdate;
        //编辑
        if (unref(isUpdate)) {
          getId.value = data.record.id;
          await setFieldsValue({
            ...data.record,
          });
        } else {
          await resetFields();
        }
      });
      // function trimNumber(str) {
      //   return str.replace(/\d+/g, '');
      // }

      const getTitle = computed(() => (!unref(isUpdate) ? '新增场景联动' : '编辑场景联动'));
      let getTriggerData = (v) => {
        getTriggerFormData = v;
        triggersArray.push(getTriggerFormData);
        // let retuArray = triggersArray.map((m) => {
        //   let getArrayKeys = Object.keys(m);
        //   let getArrayKeysReturn = null;
        //   getArrayKeys.forEach((f) => {
        //     getArrayKeysReturn = trimNumber(f);
        //   });
        //   return getArrayKeysReturn;
        // });
        // console.log(retuArray);
      };
      let getFormConditiData = (v) => {
        getConditionFormData = v;
        doConditionsArray.push(getConditionFormData);
      };
      let getFormActionData = (v) => {
        getActionFormData = v;
        doActionsArray.push(getActionFormData);
      };
      async function handleSubmit() {
        if (!unref(isUpdate)) {
          let res = validateFields();
          if (!res) return;
          getValuesFormData = getFieldsValue();
          Object.assign(getAllFormData, getValuesFormData);
          getAllFormData.triggers = triggersArray;
          getAllFormData.doConditions = doConditionsArray;
          getAllFormData.doActions = doActionsArray;
          //所有的表单值
          console.log('提交的值', getAllFormData);
          await screenLinkPageAddApi(getAllFormData);
          createMessage.success('场景联动新增成功');
          closeDrawer();
          emit('success');
        }
        if (unref(isUpdate)) {
          getValuesFormData = getFieldsValue();
          getValuesFormData.id = getId.value;
          Object.assign(getAllFormData, getValuesFormData);
          getAllFormData.triggers = triggersArray;
          getAllFormData.doConditions = doConditionsArray;
          getAllFormData.doActions = doActionsArray;
          console.log('编辑的值', getAllFormData);
          await screenLinkPageUpdateApi(getAllFormData);
          createMessage.success('场景联动编辑成功');
          closeDrawer();
          emit('success');
        }
      }
      return {
        getDeviceInfo,
        getDeviceInfo1,
        getDeviceInfo2,
        getAllFormData,
        getTriggerData,
        getFormConditiData,
        getFormActionData,
        registerDrawer,
        registerForm,
        getTitle,
        handleSubmit,
      };
    },
  });
</script>