當需要批量導入的時候,一般會提供下載示例文件的功能。實現下載功能直接使用<a>標簽即可。
<a class='download' :href='downloadhttp' download="" title="下載">下載</a>
downloadhttp為文件下載的路徑,download屬性是為了避免瀏覽器直接執行打開而不下載。路徑是下載文件很重要的組成部分,一般為了方便維護都會將文件放在服務器,路徑需要在apiconfig.js文件中判斷是測試端還是服務器端,主要思路是將兩端設置不同的baseUrl,在此不再贅述。downloadhttp = baseUrl + 路徑相同部分。在Linux服務器上最好將文件名設置為英文,中文在解碼時可能會出現偏差,導致文件尋找失敗。
文件的上傳主要使用element中的el-upload。
<el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed" :file-list="fileList"> <el-button size="small" type="primary">點擊上傳</el-button> <div slot="tip" class="el-upload__tip">只能上傳jpg/png文件,且不超過500kb</div> </el-upload> <script> export default { data() { return { fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}] }; }, methods: { handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { console.log(file); }, handleExceed(files, fileList) { this.$message.warning(`當前限制選擇 3 個文件,本次選擇了 ${files.length} 個文件,共選擇了 ${files.length + fileList.length} 個文件`); }, beforeRemove(file, fileList) { return this.$confirm(`確定移除 ${ file.name }?`); } } } </script>
其中action是必須的參數,用來寫傳輸的接口地址。用的比較多的是on-success,這個鈎子為上傳成功時的回調,當傳輸完成后即可調用。無論后台接口返回何值,只要成功上傳,就會調用該函數。但是在實際應用中,由於Excel填寫的格式不正確等問題,會導致后台解析失敗,返回success = 0.這時我們需要使用該方法來進行后續的操作。
<el-upload class="upload-demo" action="" :on-success='handlesuccess' multiple :limit="3" :on-exceed="handleExceed" :file-list="fileList"> <el-button size="small" type="primary">點擊上傳</el-button> </el-upload>
<script> export default { data() { return { fileList: []//此數組中存入所有提交的文檔信息 }; }, methods: { handleExceed(files, fileList) { this.$message.warning(`當前限制選擇 3 個文件,本次選擇了 ${files.length} 個文件,共選擇了 ${files.length + fileList.length} 個文件`); }, handlesuccess(response, file, fileList){ //response即為后台返回的全部內容 if(response.success === 1){ console.log('解析成功') }else{ console.log('解析失敗') } } } } </script>
其次使用頻率較高的為clearFiles方法,用來清除已選中的所有文檔信息。上傳時在dialog中進行,當關閉當前dialog,再次打開時需要清空上一次的數據,如果是表格表單類型,可直接將其綁定的數組對象清空,若是文件類型,則需要clearFiles方法來進行清除