DeptModal.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
  3. <BasicForm @register="registerForm" />
  4. </BasicModal>
  5. </template>
  6. <script lang="ts">
  7. import { defineComponent, ref, computed, unref } from 'vue';
  8. import { BasicModal, useModalInner } from '/@/components/Modal';
  9. import { BasicForm, useForm } from '/@/components/Form/index';
  10. import { formSchema } from './dept.data';
  11. import { getDeptList } from '/@/api/demo/system';
  12. export default defineComponent({
  13. name: 'DeptModal',
  14. components: { BasicModal, BasicForm },
  15. emits: ['success', 'register'],
  16. setup(_, { emit }) {
  17. const isUpdate = ref(true);
  18. const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
  19. labelWidth: 100,
  20. schemas: formSchema,
  21. showActionButtonGroup: false,
  22. });
  23. const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
  24. resetFields();
  25. setModalProps({ confirmLoading: false });
  26. isUpdate.value = !!data?.isUpdate;
  27. if (unref(isUpdate)) {
  28. setFieldsValue({
  29. ...data.record,
  30. });
  31. }
  32. const treeData = await getDeptList();
  33. updateSchema({
  34. field: 'parentDept',
  35. componentProps: { treeData },
  36. });
  37. });
  38. const getTitle = computed(() => (!unref(isUpdate) ? '新增部门' : '编辑部门'));
  39. async function handleSubmit() {
  40. try {
  41. const values = await validate();
  42. setModalProps({ confirmLoading: true });
  43. // TODO custom api
  44. console.log(values);
  45. closeModal();
  46. emit('success');
  47. } finally {
  48. setModalProps({ confirmLoading: false });
  49. }
  50. }
  51. return { registerModal, registerForm, getTitle, handleSubmit };
  52. },
  53. });
  54. </script>