Browse Source

预归档上传编辑问题

master
xuhuajiao 2 weeks ago
parent
commit
3b8166e8ad
  1. 15
      src/views/collectReorganizi/collectionLibrary/module/uploadFile/index.vue
  2. 95
      src/views/components/category/PreviewForm.vue
  3. 38
      src/views/prearchiveLibrary/index.vue
  4. 6
      src/views/preview/index.vue

15
src/views/collectReorganizi/collectionLibrary/module/uploadFile/index.vue

@ -127,6 +127,7 @@ import { downloadFile, getCurrentTime } from '@/utils/index'
import { mapGetters } from 'vuex'
import { form } from '@crud/crud'
import Sortable from 'sortablejs'
import { getToken } from '@/utils/auth'
export default {
name: 'UploadFile',
components: {},
@ -295,11 +296,19 @@ export default {
},
//
downloadFile(row) {
const url = this.baseApi + '/downloadFile' + row.file_path
fetch(url).then(res => res.blob()).then(blob => {
const url = this.baseApi + '/api/minioUpload/getFile?filePath=' + row.file_path + '&bucketType=2'
const fetchOptions = {
method: 'GET',
headers: {
'Authorization': getToken()
}
}
fetch(url, fetchOptions).then(res => res.blob()).then(blob => {
downloadFile(blob, row.file_name.split('.')[0], row.file_type)
this.downloading = false
}).catch(() => {
this.$message({ message: '下载文件失败!', type: 'error', offset: 8 })
this.$message({ message: '下载文件失败', type: 'error', offset: 8 })
this.downloading = false
})
},
//

95
src/views/components/category/PreviewForm.vue

@ -377,6 +377,11 @@ export default {
preUplpadClose() {
this.$refs.preUploadRefs.handleCloseDialog()
this.minioPreResult = []
this.jsonArrayStore = []
this.fileNameStore = []
this.fileOriginal = ''
this.fileJsonString = null // null
},
// handleSuccessResource(data, fileName, jsonArrayToSend) {
// this.minioPreResult = data
@ -397,59 +402,54 @@ export default {
// this.fileJsonString = JSON.stringify(fileJson)
// },
handleSuccessResource(data, fileName, jsonArrayToSend) {
// 1.
console.log('原始fileJsonString:', this.fileJsonString)
//
if (!Array.isArray(this.minioPreResult)) this.minioPreResult = []
if (!Array.isArray(this.jsonArrayStore)) this.jsonArrayStore = []
if (!Array.isArray(this.fileNameStore)) this.fileNameStore = []
// 2.
const newMinioData = Array.isArray(data) ? data : [data] // minio
const newFileNames = Array.isArray(fileName) ? fileName : [fileName] //
const newJsonData = Array.isArray(jsonArrayToSend) ? jsonArrayToSend : [jsonArrayToSend] // json
//
const newMinioData = Array.isArray(data) ? data : [data]
const newFileNames = Array.isArray(fileName) ? fileName : [fileName]
const newJsonData = Array.isArray(jsonArrayToSend) ? jsonArrayToSend : [jsonArrayToSend]
// 3.
// fileNameStore
newMinioData.forEach((minioItem, index) => {
//
const currentFileName = newFileNames[index]?.trim() || `未知文件_${index}`
// json
const currentJsonItem = newJsonData[index] || {}
// 3.1 fileNameStore
const isDuplicate = this.fileNameStore.some(
//
const isDuplicateInStore = this.fileNameStore.some(
storedName => storedName.trim() === currentFileName
)
if (isDuplicate) {
console.log(`文件名【${currentFileName}】已存在,跳过合并该条数据`)
if (isDuplicateInStore) {
console.log(`文件名【${currentFileName}】已在全局存储中存在,跳过合并该条数据`)
return
}
// 3.2
//
this.minioPreResult.push(minioItem)
this.jsonArrayStore.push(currentJsonItem)
this.fileNameStore.push(currentFileName)
console.log(`文件名【${currentFileName}】合并成功`)
console.log(`文件名【${currentFileName}】合并到全局存储成功`)
})
// 4.
this.fileOriginal = this.fileNameStore.join(',')
// 5. fileJsonList
let fileJsonList = []
// fileJsonList
let newFileJsonList = []
this.minioPreResult.forEach((minioItem, index) => {
const jsonItem = this.jsonArrayStore[index]
// jsonfileJsonString
if (!jsonItem || !jsonItem.fileJsonString) {
console.warn(`${index}个文件【${this.fileNameStore[index]}】无有效JSON数据,跳过`)
return
}
try {
// JSON
const parsed = JSON.parse(jsonItem.fileJsonString)
const fileItems = Array.isArray(parsed) ? parsed : [parsed]
console.log('minioItem', minioItem)
// minio
console.log('当前minioItem', minioItem)
const mappedItems = fileItems.map(fileItem => ({
...fileItem,
file_path: '/' + (minioItem.filePath || ''),
@ -457,18 +457,57 @@ export default {
last_modified: minioItem.lastModified,
ca_id: minioItem.caId || '',
encryption_time: minioItem.timestamp || '',
signature: minioItem.signature || ''
signature: minioItem.signature || '',
// fileJsonString
file_name: this.fileNameStore[index]?.trim() || `未知文件_${index}`
}))
fileJsonList = fileJsonList.concat(mappedItems)
newFileJsonList = newFileJsonList.concat(mappedItems)
} catch (error) {
console.error(`${index}个文件【${this.fileNameStore[index]}】JSON解析失败:`, error)
}
})
// 6. fileJsonString
console.log('按文件名去重后的fileJsonList:', fileJsonList)
this.fileJsonString = JSON.stringify(fileJsonList)
// fileJsonString
// 1. fileJsonStringnull/
let historyFileJsonList = []
if (this.fileJsonString && this.fileJsonString !== 'null' && this.fileJsonString !== '[]') {
try {
historyFileJsonList = JSON.parse(this.fileJsonString)
historyFileJsonList = Array.isArray(historyFileJsonList) ? historyFileJsonList : []
} catch (error) {
console.error('解析历史fileJsonString失败,重置为空数组:', error)
historyFileJsonList = []
}
}
console.log('解析后的历史数据:', historyFileJsonList)
// 2. +
const mergeAllList = [...historyFileJsonList, ...newFileJsonList]
const uniqueMap = new Map()
mergeAllList.forEach(item => {
// file_namefile_path
const uniqueKey = item.file_name || item.file_path || Math.random().toString(36).substr(2, 8)
uniqueMap.set(uniqueKey, item)
})
//
const finalFileJsonList = Array.from(uniqueMap.values())
console.log('新老数据合并去重后的最终列表:', finalFileJsonList)
// finalFileJsonListfileOriginal
//
const finalFileNames = finalFileJsonList
.map(item => item.file_name?.trim()) //
.filter(name => name && name !== '未知文件') //
//
const uniqueFinalFileNames = [...new Set(finalFileNames)]
// fileOriginal
this.fileOriginal = uniqueFinalFileNames.join(',') || ''
console.log('最终拼接的fileOriginal:', this.fileOriginal)
// fileJsonString
this.fileJsonString = JSON.stringify(finalFileJsonList)
console.log('最终更新后的fileJsonString:', this.fileJsonString)
},
handleErrorResource(res) {
console.log('handleErrorResource', res)

38
src/views/prearchiveLibrary/index.vue

@ -331,16 +331,34 @@ export default {
if (type === 'edit') {
this.$refs.previewForm.archivesType = 'edit'
this.$refs.previewForm.addOrUpdateForm = data.echo
if (data.fileecho) {
const fileecho = []
fileecho.push(data.fileecho)
// this.$refs.previewForm.addOrUpdateForm.fileOriginal = fileecho[0].file_name
this.$refs.previewForm.fileOriginal = fileecho[0].file_name
this.$refs.previewForm.fileJsonString = JSON.stringify(fileecho)
} else {
this.$refs.previewForm.fileOriginal = ''
this.$refs.previewForm.fileJsonString = ''
// if (data.fileecho) {
// const fileecho = []
// fileecho.push(data.fileecho)
// this.$refs.previewForm.fileOriginal = fileecho[0].file_name
// this.$refs.previewForm.fileJsonString = JSON.stringify(fileecho)
// } else {
// this.$refs.previewForm.fileOriginal = ''
// this.$refs.previewForm.fileJsonString = ''
// }
const fileecho = data.fileecho
let fileOriginal = ''
let fileJsonString = ''
if (Array.isArray(fileecho) && fileecho.length > 0) {
fileOriginal = fileecho
.filter(item => item && item.file_name)
.map(item => item.file_name)
.join(',')
fileJsonString = JSON.stringify(fileecho)
} else if (typeof fileecho === 'object' && fileecho !== null && Object.keys(fileecho).length > 0) {
fileOriginal = fileecho.file_name || ''
fileJsonString = JSON.stringify([fileecho])
}
//
this.$refs.previewForm.fileOriginal = fileOriginal
this.$refs.previewForm.fileJsonString = fileJsonString
} else {
this.$refs.previewForm.archivesType = 'add'
}
@ -576,6 +594,8 @@ export default {
this.$refs.previewForm.$refs['addOrUpdateForm'].clearValidate()
this.$refs.previewForm.$refs['addOrUpdateForm'].resetFields()
}
this.$refs.previewForm.fileOriginal = null
this.$refs.previewForm.fileJsonString = null
this.$refs.previewForm.preUplpadClose()
}
}

6
src/views/preview/index.vue

@ -55,7 +55,7 @@
<script>
import { FetchMinioReDocumentBase64ByFileId } from '@/api/prearchiveLibrary/prearchiveLibrary'
import { FetchBase64ByFileId } from '@/api/archivesManage/library'
// import { FetchBase64ByFileId } from '@/api/archivesManage/library'
import { getExtend, readBuffer, render } from '@/components/util'
import { parse } from 'qs'
import { watermark } from '@/utils/waterMark'
@ -214,10 +214,10 @@ export default {
})
} else {
const params = {
'fileId': this.fileCurrent ? this.fileCurrent.id : this.allFileTables[0].id,
'filePath': this.fileCurrent.file_path,
'bucketType': 2
}
FetchBase64ByFileId(params).then(res => {
FetchMinioReDocumentBase64ByFileId(params).then(res => {
console.log('res', res)
var base64String = res
var fileName = this.fileCurrent && this.fileCurrent.file_name

Loading…
Cancel
Save