¶Ô±ÈÐÂÎļþ |
| | |
| | | <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-upload |
| | | drag |
| | | :show-file-list="false" |
| | | action="none" |
| | | accept=".xlsx" |
| | | :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> |
| | | <div slot="footer" class="import-window__footer"> |
| | | <div class="sync-exists"> |
| | | <el-checkbox v-model="form.sync"/><span>忥已åå¨çæ°æ®</span> |
| | | </div> |
| | | <div class="opera"> |
| | | <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' |
| | | import { downloadLocalFile } from '@/api/system/common' |
| | | 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 |
| | | } |
| | | } |
| | | }, |
| | | 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.$tip.warning('è¯·éæ©æä»¶') |
| | | return |
| | | } |
| | | this.isWorking = true |
| | | const param = new FormData() |
| | | param.set('file', this.form.file) |
| | | param.set('sync', this.form.sync) |
| | | request.post(this.action, param, { |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data;charset=UTF-8' |
| | | } |
| | | }) |
| | | .then(data => { |
| | | this.$tip.success('导å
¥æåï¼å
±å¯¼å
¥' + data + 'æ¡è®°å½') |
| | | this.visible = false |
| | | this.$emit('success') |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }, |
| | | /** |
| | | * åæ¶ |
| | | */ |
| | | cancel () { |
| | | this.visible = false |
| | | }, |
| | | /** |
| | | * ä¸è½½æ¨¡ç |
| | | */ |
| | | downloadTemplate () { |
| | | downloadLocalFile({ |
| | | path: this.templatePath, |
| | | name: this.templateName |
| | | }) |
| | | .then(data => { |
| | | this.download(data) |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | }, |
| | | /** |
| | | * æä»¶ä¸ä¼ ååå¨ä¸ä¼ çæä»¶ |
| | | * |
| | | * @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> |