DataRuleModal.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" width="700px">
  3. <BasicForm @register="registerForm" />
  4. </BasicModal>
  5. </template>
  6. <script lang="ts" setup>
  7. import { defineProps, ref, computed, unref } from 'vue';
  8. import { BasicModal, useModalInner } from '/@/components/Modal';
  9. import { BasicForm, useForm } from '/@/components/Form/index';
  10. import { dataRuleFormSchema } from './menu.data';
  11. import { saveOrUpdateRule } from './menu.api';
  12. // 声明Emits
  13. const emit = defineEmits(['success', 'register']);
  14. const props = defineProps({ permissionId: String });
  15. const isUpdate = ref(true);
  16. //表单配置
  17. const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
  18. schemas: dataRuleFormSchema,
  19. showActionButtonGroup: false,
  20. });
  21. //表单赋值
  22. const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
  23. //重置表单
  24. await resetFields();
  25. setModalProps({ confirmLoading: false });
  26. isUpdate.value = !!data?.isUpdate;
  27. if (unref(isUpdate)) {
  28. //表单赋值
  29. await setFieldsValue({
  30. ...data.record,
  31. });
  32. }
  33. });
  34. //设置标题
  35. const getTitle = computed(() => (!unref(isUpdate) ? '新增规则' : '编辑规则'));
  36. //表单提交事件
  37. async function handleSubmit() {
  38. try {
  39. const values = await validate();
  40. values.permissionId = props.permissionId;
  41. setModalProps({ confirmLoading: true });
  42. //提交表单
  43. await saveOrUpdateRule(values, isUpdate.value);
  44. //关闭弹窗
  45. closeModal();
  46. //刷新列表
  47. emit('success');
  48. } finally {
  49. setModalProps({ confirmLoading: false });
  50. }
  51. }
  52. </script>