uploadInvoiceForm.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer @hide="close" :width="width">
  3. <template #default>
  4. <el-form ref="formRef" :model="form" :rules="rules" label-width="auto" hide-required-asterisk>
  5. <el-form-item label="发票:" prop="invoice">
  6. <file-upload v-model="form.invoice" :limit="1" isObject :fileType="['pdf']" :span="24" />
  7. </el-form-item>
  8. </el-form>
  9. </template>
  10. <template #footer>
  11. <el-button @click="close">取消</el-button>
  12. <el-button type="primary" @click="submitForm">确定</el-button>
  13. </template>
  14. </vxe-modal>
  15. </template>
  16. <script setup name="uploadInvoiceForm" lang="ts">
  17. import { uploadTestOrderInvoice } from '@/api/cdt/orders';
  18. import { propTypes } from '@/utils/propTypes';
  19. import { FormInstance } from 'element-plus';
  20. const emit = defineEmits(['update:show', 'close', 'success']);
  21. const props = defineProps({
  22. show: propTypes.bool.def(false),
  23. title: propTypes.string.def('上传检测发票'),
  24. width: propTypes.number.def(560),
  25. info: propTypes.any.def(null),
  26. });
  27. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  28. const dialogVisible = ref(false);
  29. const form = ref<any>({
  30. invoice: null
  31. });
  32. const rules = reactive({
  33. invoice: [{ required: true, message: '请上传发票', trigger: 'change' }],
  34. })
  35. const formRef = ref<FormInstance>();
  36. const close = () => {
  37. formRef.value?.resetFields();
  38. emit('update:show', false);
  39. emit('close', false);
  40. };
  41. const submitForm = async () => {
  42. try {
  43. await formRef.value?.validate();
  44. const res = await uploadTestOrderInvoice({ ...form.value, orderId: props.info?.id });
  45. if (res) {
  46. close();
  47. emit('success', true);
  48. }
  49. } catch (error) {
  50. console.error(error);
  51. }
  52. };
  53. watch(
  54. () => props.show,
  55. (val) => {
  56. dialogVisible.value = val;
  57. },
  58. { immediate: true }
  59. );
  60. </script>