indexImport.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <script setup lang="ts">
  2. defineOptions({
  3. name: "IndexDefineImport"
  4. });
  5. import { ref } from "vue";
  6. import { uploadData } from "@/api/indexData";
  7. import { ElMessage } from "element-plus";
  8. import { useRouter } from "vue-router";
  9. import { da } from "element-plus/es/locale/index.mjs";
  10. const $router = useRouter();
  11. const emit = defineEmits(["handleImport"]);
  12. const fileDocument = ref<File | null>(null); // 存储文件
  13. const backupUrl =
  14. import.meta.env.VITE_BACKUP_URL + "/download/指标数据模板.xlsx";
  15. // 上传文件函数
  16. // 上传文件函数
  17. const uploadFile = async () => {
  18. if (!fileDocument.value) {
  19. ElMessage.error("请先上传文件");
  20. return;
  21. }
  22. const formData = new FormData();
  23. // 将生成的文件添加到 FormData 中
  24. formData.append("file", fileDocument.value);
  25. // 调用 API 上传文件
  26. const { data } = await uploadData(formData);
  27. if (data.code === 200) {
  28. // 根据后端返回的 code 判断是否成功
  29. ElMessage.success("文件上传并导入成功");
  30. // 重置上传状态
  31. backDefine("success");
  32. } else {
  33. ElMessage.error(data.msg);
  34. }
  35. };
  36. const backDefine = (type = "") => {
  37. emit("handleImport", type);
  38. };
  39. // 处理文件上传并解析 Excel 内容
  40. const handleUploadChange = async (file: File) => {
  41. fileDocument.value = file; // 保存文件
  42. let fileType = file.name.slice(-4);
  43. if (fileType !== "xlsx") {
  44. ElMessage.error("请上传xlsx文件");
  45. }
  46. return false;
  47. };
  48. </script>
  49. <template>
  50. <div>
  51. <div class="w-3/4 m-auto mt-4">
  52. <div class="w-full bg p-3">
  53. <h5>1.下载导入模板</h5>
  54. <p class="text-xs mt-2 text">根据提升信息完善表格内容</p>
  55. <el-button class="mt-2">
  56. <el-icon> <Download /> </el-icon
  57. ><a :href="backupUrl" download="指标导入模板.xlsx"
  58. >下载空的模板表格</a
  59. >
  60. </el-button>
  61. </div>
  62. <div class="w-full mt-4 bg p-3">
  63. <h5>2.上传完善后的模板1</h5>
  64. <p class="text-xs mt-2 text mb-2">
  65. 更新信息的模板中,如有空的数据列,则相应字段信息会被清空,请谨慎填写
  66. </p>
  67. <div>
  68. <el-upload
  69. class="upload-demo"
  70. drag
  71. multiple
  72. :before-upload="file => handleUploadChange(file)"
  73. >
  74. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  75. <div class="el-upload__text">
  76. 点击<em>图标选择上传</em>或者将文件拖拽到此区域
  77. </div>
  78. </el-upload>
  79. <div v-if="fileDocument && fileDocument.name">
  80. {{ fileDocument.name }}
  81. </div>
  82. </div>
  83. <div class="float-right">
  84. <el-button @click="backDefine('close')">取消</el-button>
  85. <el-button type="primary" @click="uploadFile">确认</el-button>
  86. </div>
  87. <p class="h-11 no-select">.</p>
  88. </div>
  89. </div>
  90. </div>
  91. </template>
  92. <style lang="scss" scoped>
  93. .bg {
  94. background-color: #f8f9fa;
  95. }
  96. .text {
  97. color: #999;
  98. }
  99. .upoload {
  100. float: right;
  101. }
  102. .no-select {
  103. color: rgb(255 255 255 / 0%);
  104. user-select: none;
  105. }
  106. .float-right {
  107. margin-top: 10px;
  108. }
  109. </style>