| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-button type="info" plain icon="Upload" @click="handleImport"> |
| | | 导å
¥ |
| | | </el-button> |
| | | <el-dialog v-model="upload.open" :title="upload.title" @close="handleDialogClose"> |
| | | <FileUpload ref="fileUploadRef" accept=".xlsx, .xls" :headers="upload.headers" :action="uploadUrl" |
| | | :disabled="upload.isUploading" :showTip="true" @success="handleFileSuccess" |
| | | :downloadTemplate="handleDownloadTemplate" /> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitFileForm">ç¡® å®</el-button> |
| | | <el-button @click="upload.open = false">å æ¶</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { reactive, computed } from "vue"; |
| | | import { getToken } from "@/utils/auth.js"; |
| | | import { FileUpload } from "@/components/Upload"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { downloadProductModelImportTemplate } from "@/api/basicData/product.js"; |
| | | |
| | | defineOptions({ |
| | | name: "产åç»´æ¤å¯¼å
¥", |
| | | }); |
| | | |
| | | const props = defineProps({ |
| | | productId: { type: [String, Number], default: "" }, |
| | | }); |
| | | const emits = defineEmits(["uploadSuccess"]); |
| | | const fileUploadRef = ref(); |
| | | const upload = reactive({ |
| | | // æ¯å¦æ¾ç¤ºå¼¹åºå±ï¼ä¾åºå导å
¥ï¼ |
| | | open: false, |
| | | // å¼¹åºå±æ é¢ï¼ä¾åºå导å
¥ï¼ |
| | | title: "", |
| | | // æ¯å¦ç¦ç¨ä¸ä¼ |
| | | isUploading: false, |
| | | // 设置ä¸ä¼ ç请æ±å¤´é¨ |
| | | headers: { Authorization: "Bearer " + getToken() }, |
| | | }); |
| | | // ä¸ä¼ çå°åï¼æºå¸¦ productId åæ°ï¼ä¼ ç»å端ç importProduct æ¥å£ï¼ |
| | | const uploadUrl = computed( |
| | | () => |
| | | import.meta.env.VITE_APP_BASE_API + |
| | | "/basic/product/import" + |
| | | (props.productId ? `?productId=${props.productId}` : "") |
| | | ); |
| | | // ç¹å»å¯¼å
¥ |
| | | const handleImport = () => { |
| | | if (!props.productId) { |
| | | ElMessage({ message: "请å
éæ©äº§å", type: "warning" }); |
| | | return; |
| | | } |
| | | upload.open = true; |
| | | upload.title = "产å导å
¥"; |
| | | }; |
| | | |
| | | const submitFileForm = () => { |
| | | fileUploadRef.value.uploadApi(); |
| | | }; |
| | | |
| | | // å
³éå¼¹çªæ¶æ¸
é¤å·²éæä»¶ |
| | | const handleDialogClose = () => { |
| | | fileUploadRef.value?.clearFiles?.(); |
| | | }; |
| | | |
| | | const handleFileSuccess = (response) => { |
| | | const { code, msg } = response; |
| | | if (code == 200) { |
| | | ElMessage({ message: msg || "导å
¥æå", type: "success" }); |
| | | upload.open = false; |
| | | emits("uploadSuccess"); |
| | | } else { |
| | | ElMessage({ message: msg, type: "error" }); |
| | | } |
| | | }; |
| | | |
| | | // ä¸è½½ Excel 导å
¥æ¨¡æ¿ |
| | | const handleDownloadTemplate = () => { |
| | | downloadProductModelImportTemplate() |
| | | .then((blobData) => { |
| | | const blob = |
| | | blobData instanceof Blob |
| | | ? blobData |
| | | : new Blob([blobData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }); |
| | | const url = window.URL.createObjectURL(blob); |
| | | const link = document.createElement("a"); |
| | | link.href = url; |
| | | link.download = "产å导å
¥æ¨¡æ¿.xlsx"; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | window.URL.revokeObjectURL(url); |
| | | ElMessage({ message: "模æ¿ä¸è½½æå", type: "success" }); |
| | | }) |
| | | .catch(() => { |
| | | ElMessage({ message: "模æ¿ä¸è½½å¤±è´¥", type: "error" }); |
| | | }); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .import-tip { |
| | | margin-top: 12px; |
| | | font-size: 12px; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | .import-tip .el-button { |
| | | margin-left: 8px; |
| | | } |
| | | </style> |