addCaseFile.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <el-form
  3. ref="form"
  4. :model="caseFile"
  5. label-width="90px"
  6. class="camera-from dispatch-file-from"
  7. >
  8. <el-form-item label="附件标题:" class="mandatory">
  9. <el-input
  10. v-model="caseFile.filesTitle"
  11. placeholder="请输入最多不能超过50字"
  12. maxlength="50"
  13. show-word-limit
  14. ></el-input>
  15. </el-form-item>
  16. <el-form-item label="附件:" class="mandatory">
  17. <el-upload
  18. class="upload-demo"
  19. :multiple="false"
  20. :limit="1"
  21. :before-upload="upload"
  22. :on-preview="previewFile"
  23. :accept="accept"
  24. :before-remove="removeFile"
  25. >
  26. <el-button type="primary" :disabled="!!file">
  27. <el-icon><Upload /></el-icon>上传
  28. </el-button>
  29. <template v-slot:tip>
  30. <div class="el-upload__tip">注:可上传{{ size }}以内的{{ format }}</div>
  31. </template>
  32. </el-upload>
  33. </el-form-item>
  34. </el-form>
  35. </template>
  36. <script setup lang="ts">
  37. import { DrawFormats, FileDrawType, OtherFormats } from "@/constant/caseFile";
  38. import { maxFileSize } from "@/constant/caseFile";
  39. import { useUpload } from "@/hook/upload";
  40. import { CaseFile, addCaseFile } from "@/store/caseFile";
  41. import { ElMessage } from "element-plus";
  42. import { ref, watchEffect } from "vue";
  43. import { QuiskExpose } from "@/helper/mount";
  44. const props = defineProps<{
  45. caseId: number;
  46. fileType: number;
  47. }>();
  48. const caseFile = ref<CaseFile>({
  49. caseId: props.caseId,
  50. filesTypeId: props.fileType,
  51. filesTitle: "",
  52. } as any);
  53. const { size, format, upload, removeFile, previewFile, file, accept } = useUpload({
  54. maxSize: maxFileSize,
  55. formats: props.fileType === FileDrawType ? DrawFormats : OtherFormats,
  56. });
  57. watchEffect(() => {
  58. if (file.value?.name) {
  59. caseFile.value.filesTitle = file.value?.name;
  60. }
  61. });
  62. defineExpose<QuiskExpose>({
  63. async submit() {
  64. if (!file.value) {
  65. ElMessage.error("请上传附件");
  66. throw "请上传附件";
  67. } else if (!caseFile.value.filesTitle.trim()) {
  68. ElMessage.error("附件标题不能为空!");
  69. throw "附件标题不能为空!";
  70. }
  71. await addCaseFile({ ...caseFile.value, file: file.value });
  72. return caseFile.value;
  73. },
  74. });
  75. </script>