parent
b45d5bd5bb
commit
9c0da9844a
@ -0,0 +1,170 @@ |
||||
<template> |
||||
<a-card :bordered="false"> |
||||
<div class="card-title"> |
||||
<span>{{ $route.meta.pageTitle }}</span> |
||||
</div> |
||||
<a-spin :spinning="isLoading"> |
||||
<div class="container"> |
||||
<div class="upload-dragger"> |
||||
<a-upload-dragger |
||||
accept=".xls, .xlsx" |
||||
:multiple="false" |
||||
:fileList="fileList" |
||||
:showUploadList="false" |
||||
:beforeUpload="beforeUpload" |
||||
:remove="handleRemove" |
||||
> |
||||
<p class="ant-upload-drag-icon"> |
||||
<a-icon type="cloud-upload" /> |
||||
</p> |
||||
<div v-if="!fileList.length"> |
||||
<p class="ant-upload-text">点击选择文件,或者将文件拖拽至此区域</p> |
||||
<p class="ant-upload-hint">仅支持.xls, .xlsx 格式的excel文件,限2M以内</p> |
||||
</div> |
||||
<div v-else> |
||||
<p class="ant-upload-text"> |
||||
<span>{{ fileList[0].name }}</span> |
||||
<a class="ml-10" href="javascript:void(0);" @click.stop="handleRemove(fileList[0])">删除</a> |
||||
</p> |
||||
<a-button class="mt-20" type="primary" @click.stop="onFormSubmit">立即导入</a-button> |
||||
</div> |
||||
</a-upload-dragger> |
||||
</div> |
||||
<div class="import-explain"> |
||||
<h2 class="title">导入说明</h2> |
||||
<a-timeline class="timeline"> |
||||
<a-timeline-item class="timeline-item"> |
||||
<p class="name">使用模板</p> |
||||
<ul class="content"> |
||||
<li class="content-li"> |
||||
<span>模板中最多不能超过500个商品,如超过500个商品,请分批导入</span> |
||||
</li> |
||||
<li class="content-li"> |
||||
<span>模板中的字段含义以及填写规则,可查看模板文件中标题栏的标注</span> |
||||
</li> |
||||
</ul> |
||||
</a-timeline-item> |
||||
</a-timeline> |
||||
</div> |
||||
<!-- 文件选择器 --> |
||||
<FilesModal ref="FilesModal" :multiple="true" :maxNum="10" :actions="['delete', 'move', 'copyIds']" /> |
||||
</div> |
||||
</a-spin> |
||||
</a-card> |
||||
</template> |
||||
|
||||
<script> |
||||
import * as GoodsApi from '@/api/goods' |
||||
import { FilesModal } from '@/components/Modal' |
||||
|
||||
export default { |
||||
components: { |
||||
FilesModal, |
||||
}, |
||||
data() { |
||||
return { |
||||
// 正在加载 |
||||
isLoading: false, |
||||
// 文件列表 |
||||
fileList: [], |
||||
// 上传文件大小限制 2m |
||||
uploadSizeLimit: '2', |
||||
} |
||||
}, |
||||
// 初始化数据 |
||||
created() {}, |
||||
methods: { |
||||
// 打开文件选择器 |
||||
handleSelectImage() { |
||||
this.$refs.FilesModal.show() |
||||
}, |
||||
|
||||
// 上传文件之前的钩子 |
||||
beforeUpload(file) { |
||||
const fileSizeMb = file.size / 1024 / 1024 |
||||
if (fileSizeMb > this.uploadSizeLimit) { |
||||
this.$message.error(`上传的文件大小不能超出${this.uploadSizeLimit}MB`) |
||||
return false |
||||
} |
||||
this.fileList = [file] |
||||
return false |
||||
}, |
||||
|
||||
// 文件移除 |
||||
handleRemove(file) { |
||||
const { fileList } = this |
||||
const index = fileList.indexOf(file) |
||||
if (index > -1) { |
||||
fileList.splice(index, 1) |
||||
} |
||||
}, |
||||
|
||||
// 提交到后端api |
||||
onFormSubmit() { |
||||
const { fileList } = this |
||||
const formData = new FormData() |
||||
formData.append('file', fileList[0]) |
||||
|
||||
this.isLoading = true |
||||
GoodsApi.exportData(formData) |
||||
.then((result) => { |
||||
this.fileList = [] |
||||
this.$message.success(result.message, 1.8) |
||||
setTimeout(() => this.$router.push('/goods/import/list'), 1500) |
||||
}) |
||||
.finally(() => (this.isLoading = false)) |
||||
}, |
||||
}, |
||||
} |
||||
</script> |
||||
<style lang="less" scoped> |
||||
/deep/.ant-upload.ant-upload-drag .ant-upload { |
||||
padding: 82px 0; |
||||
} |
||||
|
||||
/deep/span.ant-radio + * { |
||||
color: #7a7a7a; |
||||
} |
||||
|
||||
.card-title { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
.container { |
||||
width: 1000px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
.timeline { |
||||
color: #111; |
||||
} |
||||
|
||||
.import-explain { |
||||
margin-top: 40px; |
||||
|
||||
.title { |
||||
margin-bottom: 25px; |
||||
font-weight: bold; |
||||
font-size: 15px; |
||||
} |
||||
|
||||
.name { |
||||
font-size: 14px; |
||||
margin-bottom: 8px; |
||||
} |
||||
|
||||
.timeline-item { |
||||
padding-bottom: 20px; |
||||
} |
||||
|
||||
.content { |
||||
color: #7a7a7a; |
||||
padding-left: 20px; |
||||
.content-li { |
||||
list-style-type: disc; |
||||
margin-bottom: 5px; |
||||
} |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue