edit.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <div>
  3. <a-modal
  4. v-model:visible="visible"
  5. width="auto"
  6. :title="$t('searchTable.form.add')"
  7. @cancel="() => handleCancel()"
  8. @before-ok="handleBeforeOk"
  9. >
  10. <a-form :model="form" ref="formRef">
  11. <a-row :gutter="8">
  12. <a-col :span="12">
  13. <a-form-item
  14. field="name"
  15. :label="t('manage.form.name')"
  16. :rules="getRules(t).required"
  17. >
  18. <a-input v-model="form.name" />
  19. </a-form-item>
  20. </a-col>
  21. <a-col :span="12">
  22. <a-form-item
  23. field="password"
  24. :label="t('manage.form.password')"
  25. :rules="getRules(t).required"
  26. >
  27. <a-input v-model="form.password" />
  28. </a-form-item>
  29. </a-col>
  30. <a-col :span="12">
  31. <a-form-item field="desc" :label="t('manage.form.desc')">
  32. <a-input v-model="form.desc" />
  33. </a-form-item>
  34. </a-col>
  35. <a-col :span="12">
  36. <a-form-item
  37. field="privilege"
  38. :label="t('manage.form.permission')"
  39. :rules="getRules(t).required"
  40. >
  41. <a-select
  42. v-model="form.privilege"
  43. allow-clear
  44. @clear="form.privilege = null"
  45. >
  46. <a-option
  47. v-for="item of privilegeList"
  48. :value="item.value"
  49. :label="item.label"
  50. />
  51. </a-select>
  52. </a-form-item>
  53. </a-col>
  54. </a-row>
  55. </a-form>
  56. </a-modal>
  57. </div>
  58. </template>
  59. <script setup lang="ts" name="EditDialog">
  60. import { reactive, ref, shallowRef, watch, getCurrentInstance } from 'vue';
  61. import { fetchSaveUser, getUserInfo } from '@/api/user';
  62. import type { UserData } from '@/api/user';
  63. import { privilegeList } from '@/utils/const';
  64. import { useI18n } from 'vue-i18n';
  65. import { getRules } from '@/utils/const';
  66. const formRef = ref();
  67. const { t } = useI18n();
  68. const this_ = getCurrentInstance()?.appContext.config.globalProperties;
  69. interface EditDialogProps {
  70. modelValue: boolean;
  71. id: number | null;
  72. }
  73. interface EditDialogEmits {
  74. (e: 'update:modelValue', value: boolean): void;
  75. (e: 'update-list'): void;
  76. }
  77. const props = withDefaults(defineProps<EditDialogProps>(), {
  78. modelValue: false,
  79. id: null,
  80. });
  81. const emit = defineEmits<EditDialogEmits>();
  82. const visible = shallowRef<boolean>(false);
  83. watch(
  84. () => props.modelValue,
  85. value => {
  86. visible.value = value;
  87. if (value && props.id) {
  88. getUserInfo({ id: props.id }).then(res => {
  89. form.value = res.data;
  90. });
  91. }
  92. }
  93. );
  94. const formModel = () => {
  95. return {
  96. id: 0,
  97. name: '',
  98. password: '',
  99. } as UserData['data'];
  100. };
  101. const form = ref<UserData['data']>(formModel());
  102. const handleBeforeOk = (done: (closed: boolean) => void) => {
  103. formRef.value.validate().then((data: UserData['data']) => {
  104. if (!data) {
  105. fetchSaveUser(form.value)
  106. .then(res => {
  107. this_?.$message.success('操作成功');
  108. done(true); // 关闭模态框
  109. handleCancel();
  110. })
  111. .catch(() => {
  112. done(false); // 不关闭模态框(例如提交失败时)
  113. });
  114. } else {
  115. done(false); // 不关闭模态框(例如提交失败时)
  116. }
  117. });
  118. };
  119. const handleCancel = () => {
  120. form.value = formModel();
  121. visible.value = false;
  122. emit('update:modelValue', false);
  123. emit('update-list');
  124. };
  125. </script>