edit.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <BasicDrawer
  3. @ok="handleSubmit"
  4. :destroyOnClose="true"
  5. :maskClosable="false"
  6. v-bind="$attrs"
  7. @register="registerModal"
  8. :title="getTitle"
  9. :width="1002"
  10. showFooter
  11. >
  12. <BasicForm @register="registerForm">
  13. <template #selectUser>
  14. <SelectUser v-model:value="selectUserValue" @change="handleUserChange" />
  15. </template>
  16. </BasicForm>
  17. </BasicDrawer>
  18. </template>
  19. <script setup lang="ts">
  20. import { ref, computed, unref } from 'vue';
  21. import { useMessage } from '/@/hooks/web/useMessage';
  22. import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  23. import { BasicForm, useForm } from '/@/components/Form/index';
  24. import { formSchema } from './data.config';
  25. import {
  26. getBandingTaskInfo,
  27. postBandingBandingTask,
  28. putBandingBandingTask,
  29. } from '/@/services/apis/BandingTaskController';
  30. import SelectUser from '/@/views/notice/components/SelectUser.vue';
  31. import { Recordable } from 'vite-plugin-mock';
  32. const isUpdate = ref(true);
  33. const modelRef = ref({});
  34. const emit = defineEmits(['success', 'register']);
  35. const { createMessage } = useMessage();
  36. const selectUserValue = ref<Recordable[]>([]);
  37. const [registerForm, { validate, setFieldsValue, resetFields }] = useForm({
  38. labelWidth: 100,
  39. schemas: formSchema,
  40. showActionButtonGroup: false,
  41. });
  42. const [registerModal, { closeDrawer, setDrawerProps }] = useDrawerInner(async (data) => {
  43. resetFields();
  44. setDrawerProps({ confirmLoading: false });
  45. isUpdate.value = !!data?.isUpdate;
  46. modelRef.value = { ...data.baseData };
  47. if (unref(isUpdate)) {
  48. const resData = await getBandingTaskInfo({ id: data.baseData.id });
  49. modelRef.value = { ...resData };
  50. setFieldsValue({
  51. ...resData,
  52. });
  53. }
  54. });
  55. const getTitle = computed(() => (!unref(isUpdate) ? '新增赛事活动' : '编辑赛事活动'));
  56. const handleSubmit = async () => {
  57. try {
  58. const values = await validate();
  59. setDrawerProps({ confirmLoading: true });
  60. const postParams = unref(modelRef);
  61. Object.assign(postParams, values);
  62. if (unref(isUpdate)) {
  63. await putBandingBandingTask(postParams as API.UpdateBandingTaskDto);
  64. } else {
  65. await postBandingBandingTask(postParams as API.AddBandingTaskDto);
  66. }
  67. createMessage.success('操作成功');
  68. closeDrawer();
  69. emit('success');
  70. } finally {
  71. setDrawerProps({ confirmLoading: false });
  72. }
  73. };
  74. const handleUserChange = (data: Recordable[]) => {
  75. selectUserValue.value = data;
  76. };
  77. </script>
  78. <style scoped lang="less"></style>