阅行客电子档案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

327 lines
9.7 KiB

<template>
<div>
<!-- 原文上传 -->
<el-dialog class="fileUpload-dialog" :title="uploadTitle" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="uploadVisible">
<div class="setting-dialog">
<div class="upload-container">
<i v-if="uploadType !== 1 && fileList.length === 0" class="iconfont icon-tianjiawenjian upload-icon" />
<div v-for="item in fileList" :key="item.name" class="file-list">
<i class="iconfont icon-xiaowenjian" />
{{ item.name }}
<i class="el-icon-close" @click="deleteFile(item)" />
</div>
<div v-if="uploadType !== 1" class="upload-input">
<input ref="fileInput" :key="key" type="file" :multiple="isMultiple" :accept="uploadType === 2 ? '.zip' :''" @change="handleFileChange">
<div class="upload-zip"><i class="iconfont icon-shangchuan2" />点击上传</div>
</div>
<BigUpload v-else-if="uploadType === 1" :selected-category="selectedCategory" :arc-id="arcId" />
<div v-if="uploadType === 2" class="el-upload__tip">上传限制文件类型:zip</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="uploadVisible = false">取消</el-button>
<el-button type="primary" @click="handleUploadConfirm">保存</el-button>
</div>
</div>
</el-dialog>
<!-- 上传详情 -->
<el-dialog class="collectUpload-dialog" :title="detailUploadTitle" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="uploadDetialVisible">
<div class="setting-dialog">
<div class="upload-detail">
<el-table :data="uploadDetailData" style="width: 100%">
<el-table-column prop="number" label="编号" width="120" />
<el-table-column prop="operator" label="操作人" width="120" />
<el-table-column prop="operationType" label="操作类型" width="120" />
<el-table-column prop="file" label="文件" width="160" />
<el-table-column prop="createDate" label="操作时间" width="200" />
<el-table-column prop="conclusion" label="结论" width="200">
<template slot-scope="scope">
<div>成功 {{ scope.row.successNumber }} ; 失败 {{ scope.row.failNumber }} </div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
:current-page="page.page"
:total="page.total"
:page-size="page.size"
:pager-count="5"
layout="total, prev, pager, next, sizes"
@size-change="handleSizeChange"
@current-change="handleCurrentPage"
/>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
// import { FetchAddArchivesFile } from '@/api/collect/collect'
import { getCurrentTime } from '@/utils/index'
import { upload, archivesUpload } from '@/utils/upload'
import { mapGetters } from 'vuex'
export default {
name: 'UploadOriginal',
components: { },
props: {
selectedCategory: {
type: Object,
default: function() {
return {}
}
},
arcId: {
type: String,
default: function() {
return ''
}
}
},
data() {
return {
uploadVisible: false,
uploadTitle: '普通上传',
detailUploadTitle: '上传详情',
key: 0,
file: null, // 附件 change
fileNames: '', // 附件 - name
formatType: '', // 附件 - type
postfix: '', // 附件 - 文件后缀
fileSize: '', // 附件 - 大小
filePath: [], // 附件 - path
px: '', // 附件 - 分辨率
nowDate: '', // 当前时间
fileList: [],
uploadType: 0,
// 上传详情
uploadDetialVisible: false,
uploadDetailData: [],
page: {
page: 1,
size: 10,
total: 0
}
}
},
computed: {
...mapGetters([
'baseApi'
]),
isMultiple() {
return this.uploadType === 0
}
},
created() {
},
mounted() {
},
methods: {
handleFileChange(e) {
const files = e.target.files
this.file = files[0]
this.key++
const maxMessage = '上传文件大小不能超过 10MB,可使用大文件上传!'
const maxSize = 10 * 1024 * 1024
if (this.file && this.file.size > maxSize) {
this.$message.warning(maxMessage)
this.fileList = []
e.target.value = ''
return false
}
if (this.fileList.length !== 0) {
const existingFile = this.fileList.some(file => file.name === this.file.name)
if (existingFile) {
this.$message.warning('文件已存在')
return false
}
}
for (let i = 0; i < files.length; i++) {
if (this.uploadType === 2) {
this.fileList = []
this.fileList.push(files[i])
} else {
this.fileList.push(files[i])
}
}
},
handleUploadConfirm() {
if (this.fileList.length === 0) {
this.$message.info('请先选择相关文件!')
return false
}
if (this.uploadType === 2) {
// 原文目录上传
upload(this.baseApi + '/api/collect/catalogUpload',
this.fileList[0]
).then(res => {
if (res.data.code === 200) {
this.$message.success('成功追加' + res.data.data + '附件')
this.$emit('close-dialog')
this.uploadVisible = false
} else {
this.$message.error('上传附件失败!')
}
})
} else {
this.uplaodToList(this.fileList)
}
},
uplaodToList(files) {
// 原文上传
this.nowDate = getCurrentTime()
const promiseArray = files.map(async(item, index) => {
const json = {}
if (item.type.substring(0, item.type.indexOf('/')) === 'image') {
const fileBase64 = await this.getBase64(item)
const imgRes = await this.getImgPx(fileBase64)
item.px = imgRes.width + 'px*' + imgRes.height + 'px'
} else {
item.px = ''
}
json.file_name = item.name
json.file_size = item.size
json.file_type = item.name.substring(item.name.lastIndexOf('.') + 1, item.name.length)
// json.file_path = this.filePath[index].path
json.file_path = ''
json.sequence = null
json.archive_id = this.arcId
json.file_dpi = item.px
json.file_thumbnail = ''
json.create_time = this.nowDate
json.id = null
return json
})
Promise.all(promiseArray)
.then((arrayUpload) => {
// 上传附件
archivesUpload(this.baseApi + '/api/collect/uploadFiles',
files,
this.selectedCategory.id,
this.arcId,
JSON.stringify(arrayUpload)
).then(res => {
if (res.data.code === 200) {
this.$message.success(res.data.data)
this.$emit('close-dialog')
this.uploadVisible = false
} else {
this.$message.error('上传附件失败!')
}
})
})
.catch((error) => {
console.error(error)
})
},
// 附件旁边的X
deleteFile(file) {
const index = this.fileList.indexOf(file)
this.fileList.splice(index, 1)
if (this.fileList.length !== 0) {
archivesUpload(this.baseApi + '/api/collect/uploadFiles', this.fileList, this.selectedCategory.id).then(res => {
if (res.data.code === 200) {
this.filePath = res.data.data
}
})
} else {
this.$message.info('已清空所有要上传的附件!')
}
},
// 将上传的图片转为base64
getBase64(file) {
const reader = new FileReader()
reader.readAsDataURL(file)
return new Promise((resolve) => {
reader.onload = () => {
resolve(reader.result)
}
})
},
// 获取图片的分辨率
getImgPx(img) {
const image = new Image()
image.src = img
return new Promise((resolve) => {
image.onload = () => {
const width = image.width
const height = image.height
resolve({ width, height })
}
})
},
handleSizeChange(size) {
this.page.size = size
this.page.page = 1
},
handleCurrentPage(val) {
this.page.page = val
}
}
}
</script>
<style lang='scss' scoped>
.upload-container{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 496px;
min-height: 178px;
padding: 12px;
border-radius: 3px;
background: #EDEFF3;
border: 1px dashed #BCC2C7;
.upload-icon{
font-size: 32px;
color: #1F55EB;
}
.el-upload__tip{
font-size: 12px;
color: #A6ADB6;
}
.file-list{
font-size: 12px;
line-height: 24px;
color: #545B65;
}
}
.upload-input{
position: relative;
margin-top: 16px;
width: 104px;
height: 32px;
& input{
position: absolute;
left: 0;
top: 0;
height: 32px;
opacity: 0;
}
}
.upload-zip{
width: 104px;
height: 32px;
line-height: 32px;
font-size: 14px;
color: #fff;
text-align: center;
border-radius: 3px;
background: #1F55EB;
& i{
font-size: 13px;
}
}
.collectUpload-dialog{
::v-deep .el-dialog{
width: 970px;
}
}
</style>