| <template>  | 
|   <el-dialog  | 
|     width="500px"  | 
|     :title="title"  | 
|     :visible.sync="visible"  | 
|     append-to-body  | 
|     custom-class="eva-dialog import-window"  | 
|     :close-on-click-modal="false"  | 
|     :close-on-press-escape="false"  | 
|     :show-close="false"  | 
|   >  | 
|     <el-form>  | 
|       <el-form-item>  | 
|         <el-upload  | 
|           drag  | 
|           :show-file-list="false"  | 
|           action="none"  | 
|           accept=".xlsx, .xls"  | 
|           :before-upload="handleBeforeUpload"  | 
|         >  | 
|           <template v-if="form.file == null">  | 
|             <i class="el-icon-upload"></i>  | 
|             <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>  | 
|           </template>  | 
|           <template v-else>  | 
|             <i class="el-icon-files"></i>  | 
|             <div class="el-upload__text">{{form.file.name}}<em></em></div>  | 
|           </template>  | 
|         </el-upload>  | 
|       </el-form-item>  | 
|     </el-form>  | 
|       | 
|     <div slot="footer" class="import-window__footer">  | 
|       <!-- <div class="sync-exists">  | 
|         <el-checkbox v-model="form.sync"/><span>同步已存在的数据</span>  | 
|       </div> -->  | 
|       <div class="opera">  | 
|         <a href=""></a>  | 
|         <el-button type="text" icon="el-icon-download" @click="downloadTemplate">下载模版</el-button>  | 
|         <el-button @click="cancel">{{cancelText}}</el-button>  | 
|         <el-button type="primary" @click="confirm" :loading="isWorking">{{confirmText}}</el-button>  | 
|       </div>  | 
|     </div>  | 
|   </el-dialog>  | 
| </template>  | 
|   | 
| <script>  | 
| import request from '@/utils/request'  | 
| export default {  | 
|   name: 'ImportWindow',  | 
|   props: {  | 
|     // 导入接口地址  | 
|     action: {  | 
|       required: true  | 
|     },  | 
|     // 确认按钮文案  | 
|     confirmText: {  | 
|       type: String,  | 
|       default: '导入'  | 
|     },  | 
|       | 
|     // 取消按钮文案  | 
|     cancelText: {  | 
|       type: String,  | 
|       default: '取消'  | 
|     },  | 
|     // 模版地址  | 
|     templatePath: {  | 
|       required: true  | 
|     },  | 
|     // 下载后的模版文件名称  | 
|     templateName: {  | 
|       required: true  | 
|     }  | 
|   },  | 
|   data () {  | 
|     return {  | 
|       visible: false,  | 
|       isWorking: false,  | 
|       title: '导入数据',  | 
|       form: {  | 
|         sync: false,  | 
|         file: false,  | 
|         categoryId: ''  | 
|       }  | 
|     }  | 
|   },  | 
|   methods: {  | 
|     /**  | 
|      * 打开窗口  | 
|      *  | 
|      * @param title 窗口标题  | 
|      */  | 
|     open (title) {  | 
|       this.visible = true  | 
|       this.title = title  | 
|       this.form.sync = false  | 
|       this.form.file = null  | 
|     },  | 
|     /**  | 
|      * 确定导入  | 
|      */  | 
|     confirm () {  | 
|       if (this.form.file == null) {  | 
|         this.$message.warning('请选择文件')  | 
|         return  | 
|       }  | 
|       this.isWorking = true  | 
|       const param = new FormData()  | 
|       param.set('file', this.form.file)  | 
|       request.post(this.action, param, {  | 
|         headers: {  | 
|           'Content-Type': 'multipart/form-data;charset=UTF-8'  | 
|         }  | 
|       })  | 
|         .then(() => {  | 
|           this.$message.success('导入成功')  | 
|           this.visible = false  | 
|           this.$emit('success')  | 
|         })  | 
|         .catch(e => {  | 
|           this.$message.error(e)  | 
|         })  | 
|         .finally(() => {  | 
|           this.isWorking = false  | 
|         })  | 
|     },  | 
|     /**  | 
|      * 取消  | 
|      */  | 
|     cancel () {  | 
|       this.visible = false  | 
|     },  | 
|     /**  | 
|      * 下载模版  | 
|      */  | 
|     downloadTemplate () {  | 
|       const link = document.createElement('a')  | 
|       link.setAttribute('download', this.templateName) //下载的文件名  | 
|       // console.log(`window.location.origin`, window.location.origin);  | 
|       // console.log(`process.env.VUE_APP_CONTEXT_PATH`, process.env.VUE_APP_CONTEXT_PATH);  | 
|       // console.log(`this.templatePath`, this.templatePath);  | 
|       link.href = `${window.location.origin}${process.env.VUE_APP_CONTEXT_PATH}${this.templatePath}`  //文件url  | 
|       link.click()  | 
|     },  | 
|     /**  | 
|      * 文件上传前存储上传的文件  | 
|      *  | 
|      * @param file 需导入的文件  | 
|      */  | 
|     handleBeforeUpload (file) {  | 
|       this.form.file = file  | 
|       return false  | 
|     }  | 
|   }  | 
| }  | 
| </script>  | 
|   | 
| <style lang="scss">  | 
| @import "../../assets/style/variables";  | 
| .import-window {  | 
|   .el-upload {  | 
|     width: 100%;  | 
|     .el-upload-dragger {  | 
|       width: 100%;  | 
|       .el-icon-upload, .el-icon-files {  | 
|         font-size: 67px;  | 
|         color: #C0C4CC;  | 
|         margin: 40px 0 16px;  | 
|         line-height: 50px;  | 
|       }  | 
|     }  | 
|   }  | 
|   .import-window__footer {  | 
|     display: flex;  | 
|     .sync-exists {  | 
|       width: 200px;  | 
|       flex-shrink: 0;  | 
|       text-align: left;  | 
|       font-size: 13px;  | 
|       display: flex;  | 
|       align-items: center;  | 
|       .el-checkbox {  | 
|         margin-right: 10px;  | 
|       }  | 
|       & > * {  | 
|         vertical-align: middle;  | 
|       }  | 
|     }  | 
|     .opera {  | 
|       flex-grow: 1;  | 
|       a {  | 
|         font-size: 12px;  | 
|         margin-right: 10px;  | 
|         text-decoration: none;  | 
|         .el-icon-download {  | 
|           font-size: 15px;  | 
|           position: relative;  | 
|           top: 2px;  | 
|         }  | 
|       }  | 
|     }  | 
|   }  | 
| }  | 
| </style>  |