LabelDrawer.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <BasicDrawer
  3. v-bind="$attrs"
  4. @register="registerDrawer"
  5. showFooter
  6. :title="getTitle"
  7. width="500px"
  8. @ok="handleSubmit"
  9. >
  10. <BasicForm @register="registerForm" />
  11. </BasicDrawer>
  12. </template>
  13. <script lang="ts">
  14. import { defineComponent, ref, computed, unref } from 'vue';
  15. import { BasicForm, useForm } from '@/components/Form/index';
  16. import { formSchema } from './label.data';
  17. import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
  18. import { useI18n } from 'vue-i18n';
  19. import { createLabel, updateLabel } from '@/api/wechat/label';
  20. export default defineComponent({
  21. name: 'LabelDrawer',
  22. components: { BasicDrawer, BasicForm },
  23. emits: ['success', 'register'],
  24. setup(_, { emit }) {
  25. const isUpdate = ref(true);
  26. const { t } = useI18n();
  27. const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
  28. labelWidth: 160,
  29. baseColProps: { span: 24 },
  30. layout: 'vertical',
  31. schemas: formSchema,
  32. showActionButtonGroup: false,
  33. });
  34. const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
  35. resetFields();
  36. setDrawerProps({ confirmLoading: false });
  37. isUpdate.value = !!data?.isUpdate;
  38. if (unref(isUpdate)) {
  39. setFieldsValue({
  40. ...data.record,
  41. });
  42. }
  43. });
  44. const getTitle = computed(() =>
  45. !unref(isUpdate) ? t('wechat.label.addLabel') : t('wechat.label.editLabel'),
  46. );
  47. async function handleSubmit() {
  48. const values = await validate();
  49. setDrawerProps({ confirmLoading: true });
  50. values['id'] = unref(isUpdate) ? Number(values['id']) : 0;
  51. let result = unref(isUpdate) ? await updateLabel(values) : await createLabel(values);
  52. if (result.code === 0) {
  53. closeDrawer();
  54. emit('success');
  55. }
  56. setDrawerProps({ confirmLoading: false });
  57. }
  58. return {
  59. registerDrawer,
  60. registerForm,
  61. getTitle,
  62. handleSubmit,
  63. };
  64. },
  65. });
  66. </script>