DetailModal.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit" width="900px" destroyOnClose>
  3. <BasicForm @register="registerForm" />
  4. </BasicModal>
  5. </template>
  6. <script lang="ts" setup>
  7. import { ref, computed, unref } from 'vue';
  8. import { BasicModal, useModalInner } from '/@/components/Modal';
  9. import { BasicForm, useForm } from '/@/components/Form/index';
  10. import { formSchema } from './setting.data';
  11. import { saveOrUpdate } from './setting.api';
  12. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  13. import { updateDarkTheme } from '/@/logics/theme/dark';
  14. import { updateHeaderBgColor, updateSidebarBgColor } from '/@/logics/theme/updateBackground';
  15. // 声明Emits
  16. const emit = defineEmits(['register', 'success']);
  17. const isUpdate = ref(true);
  18. //表单配置
  19. const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
  20. schemas: formSchema,
  21. showActionButtonGroup: false,
  22. });
  23. //表单赋值
  24. const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
  25. //重置表单
  26. await resetFields();
  27. setModalProps({ confirmLoading: false });
  28. isUpdate.value = !!data?.isUpdate;
  29. if (unref(isUpdate)) {
  30. if (data.record.userIds) {
  31. data.record.userIds = data.record.userIds.substring(0, data.record.userIds.length - 1);
  32. }
  33. //表单赋值
  34. await setFieldsValue({
  35. ...data.record,
  36. });
  37. }
  38. });
  39. //设置标题
  40. const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
  41. //表单提交事件
  42. async function handleSubmit() {
  43. try {
  44. let values = await validate();
  45. setModalProps({ confirmLoading: true });
  46. //提交表单
  47. values.userIds += ',';
  48. await saveOrUpdate(values);
  49. // 除开上述两种旧的主题,剩下的即为新的支持动态修改的主题
  50. // 与 /layoutes/default/header/components/user-dropdown/ThemeSelect 一样的逻辑
  51. const { setDarkMode } = useRootSetting();
  52. setDarkMode(values.defaultTheme);
  53. updateDarkTheme(values.defaultTheme);
  54. updateHeaderBgColor();
  55. updateSidebarBgColor();
  56. //关闭弹窗
  57. closeModal();
  58. //刷新列表
  59. emit('success', 'reload');
  60. } finally {
  61. setModalProps({ confirmLoading: false });
  62. }
  63. }
  64. </script>