useDrawer.vue 3.82 KB
<template>
  <div class="drawer-class">
    <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="700px"
      @ok="handleSubmit">
      <BasicForm @register="registerForm" />
      <CpnsTenantSet ref="getChildData" :parentData="parentSetData" />
    </BasicDrawer>
  </div>
</template>
<script lang="ts">
import { defineComponent, ref, computed, unref, getCurrentInstance, reactive } from 'vue';
import { BasicForm, useForm } from '/@/components/Form';
import { formSchema } from './config';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import CpnsTenantSet from './cpns/index.vue';
import { saveTenantProfileApi } from '/@/api/tenant/tenantApi';
import { useMessage } from '/@/hooks/web/useMessage';

export default defineComponent({
  name: 'ConfigDrawer',
  components: { BasicDrawer, BasicForm, CpnsTenantSet },
  emits: ['success', 'register'],
  setup(_, { emit }) {
    const { createMessage } = useMessage();
    const isUpdate = ref(true);
    let postAllData: any = reactive({});
    const parentSetData: any = ref(null);
    let getValuesFormData: any = reactive({});
    const { proxy } = getCurrentInstance() as any;
    const getChildData = ref(null);
    const editGetId: any = ref('');
    const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
      schemas: formSchema,
      showActionButtonGroup: false,
    });
    const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
      //清除表单值
      proxy.$refs.getChildData.funcResetFields();
      await resetFields();
      setDrawerProps({ confirmLoading: false });
      isUpdate.value = !!data?.isUpdate;
      if (!unref(isUpdate)) {
        editGetId.value = '';
      }
      //编辑
      if (unref(isUpdate)) {
        parentSetData.value = { ...data.record.profileData.configuration };
        proxy.$refs.getChildData.setFieldsValueFunc(parentSetData.value);
        editGetId.value = data.record.id;
        await setFieldsValue({
          ...data.record,
        });
      }
    });
    const getTitle = computed(() => (!unref(isUpdate) ? '新增租户配置' : '编辑租户配置'));

    const getAllFieldsFunc = async () => {
      getValuesFormData = await validate();
      if (!getValuesFormData) return;
      let getChildValues = proxy.$refs.getChildData.getAllFields();
      let profileData1 = {
        configuration: getChildValues,
      };
      const id: any = {
        id: unref(isUpdate) ? editGetId.value : '',
      };

      const createTime = {
        createdTime: Date.now(),
      };

      Object.assign(
        postAllData,
        {
          profileData: profileData1,
        },
        getValuesFormData,
        id,
        createTime
      );
      if (!unref(isUpdate)) {
        delete postAllData.id;
      }
    };

    async function handleSubmit() {
      setDrawerProps({ confirmLoading: true });
      try {
        if (!unref(isUpdate)) {
          await getAllFieldsFunc();
          await saveTenantProfileApi(postAllData);
          createMessage.success('租户配置新增成功');
          closeDrawer();
          emit('success');
          resetFields();
        } else {
          await getAllFieldsFunc();
          await saveTenantProfileApi(postAllData);
          createMessage.success('租户配置编辑成功');
          closeDrawer();
          emit('success');
        }
      } catch (e) {
      } finally {
        setTimeout(() => {
          setDrawerProps({ confirmLoading: false });
        }, 300);
      }
    }
    return {
      parentSetData,
      getChildData,
      registerDrawer,
      registerForm,
      getTitle,
      handleSubmit,
    };
  },
});
</script>

<style lang="less">
.drawer-class {
  .ant-row {
    .ant-col {
      :deep .ant-input-number {
        width: 34vw !important;
      }
    }
  }
}
</style>