From 828b4178d9e004c535a87e83e40e9688632af5a5 Mon Sep 17 00:00:00 2001 From: wbq <1102127448@qq.com> Date: Tue, 13 May 2025 19:07:38 +0800 Subject: [PATCH] wbq --- src/.idea/.gitignore | 10 + .../inspectionProfiles/Project_Default.xml | 6 + src/.idea/misc.xml | 6 + src/.idea/modules.xml | 8 + src/.idea/src.iml | 9 + src/.idea/vcs.xml | 6 + .../src/components/process/FileUpload.vue | 173 ++++++++++++++---- 7 files changed, 186 insertions(+), 32 deletions(-) create mode 100644 src/.idea/.gitignore create mode 100644 src/.idea/inspectionProfiles/Project_Default.xml create mode 100644 src/.idea/misc.xml create mode 100644 src/.idea/modules.xml create mode 100644 src/.idea/src.iml create mode 100644 src/.idea/vcs.xml diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/src/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/.idea/inspectionProfiles/Project_Default.xml b/src/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/src/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml new file mode 100644 index 0000000..a9182a4 --- /dev/null +++ b/src/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml new file mode 100644 index 0000000..f669a0e --- /dev/null +++ b/src/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/.idea/src.iml b/src/.idea/src.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/src/.idea/src.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/src/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/vue2/src/components/process/FileUpload.vue b/src/vue2/src/components/process/FileUpload.vue index 0d7d0de..e10af78 100644 --- a/src/vue2/src/components/process/FileUpload.vue +++ b/src/vue2/src/components/process/FileUpload.vue @@ -100,6 +100,13 @@
+
+ 新增数据 +

数据预览

+ + +
+ + + + + + + + 取消 + 确 定 + + @@ -123,11 +175,11 @@ import { mapState, mapActions } from 'vuex' export default { name: 'FileUploadComponent', - + components: { ProcessStep }, - + data() { return { fileList: [], @@ -135,17 +187,24 @@ export default { loading: false, uploadProgress: 0, uploadStatus: 'waiting', - uploadTimer: null + uploadTimer: null, + dataDialogVisible: false, + currentRowData: {}, + currentEditIndex: -1, + isEditing: false, + formRules: { + 'col0': [{ required: true, message: '字段不能为空', trigger: 'blur' }] + } } }, - + computed: { ...mapState({ fileData: state => state.process.fileData, fileUploaded: state => state.process.fileUploaded }) }, - + watch: { fileUploaded(newVal) { if (newVal) { @@ -160,48 +219,48 @@ export default { } } }, - + methods: { ...mapActions('process', [ 'uploadFile', 'setFileData' ]), - + handleNextStep() { console.log('手动点击继续处理按钮'); - + // 确保文件已经上传完成 if (this.uploadStatus !== 'completed') { this.$message.warning('请等待文件上传完成'); return; } - + // 向父组件发出next事件,同时确保fileData已设置 this.$emit('next'); this.$emit('file-uploaded', this.fileData); console.log('已发出next事件和file-uploaded事件', this.fileData); }, - + handleFileChange(file) { this.file = file.raw this.fileList = [file] }, - + handleFileRemove() { this.file = null this.fileList = [] }, - + handleUpload() { if (!this.file) { this.$message.warning('请先选择要上传的文件') return } - + this.loading = true this.uploadStatus = 'running' this.uploadProgress = 0 - + // 模拟上传进度 this.uploadTimer = setInterval(() => { this.uploadProgress += 10 @@ -210,11 +269,11 @@ export default { this.simulateUploadComplete() } }, 300) - + // 调用API上传文件 const formData = new FormData() formData.append('file', this.file) - + this.uploadFile(formData) .then(() => { // 上传成功后的处理会在simulateUploadComplete中完成 @@ -226,7 +285,7 @@ export default { this.$message.error('文件上传失败:' + (error.message || '未知错误')) }) }, - + simulateUploadComplete() { // 模拟上传完成后获取文件分析结果 setTimeout(() => { @@ -241,19 +300,19 @@ export default { fileType: this.getFileType(this.file.name), previewData: this.generatePreviewData() } - + // 设置文件数据到Vuex this.setFileData(mockFileData) - + // 将上传步骤状态更新为已完成 this.$store.commit('process/UPDATE_STEP_STATUS', { step: 'upload', status: 'completed' }) this.$store.commit('process/SET_FILE_UPLOADED', true) - + // 重要:立即更新组件状态为已完成 this.loading = false this.uploadStatus = 'completed' console.log('文件上传完成,状态已设置为:', this.uploadStatus) - + // 显示成功消息 this.$message({ message: '文件上传成功', @@ -261,11 +320,11 @@ export default { duration: 3000, showClose: true }) - + // 通知父组件文件上传完成 this.$emit('file-uploaded', mockFileData) console.log('触发file-uploaded事件,文件数据:', mockFileData) - + // 确保DOM更新完成 this.$nextTick(() => { console.log('DOM已更新,文件上传状态:', this.uploadStatus) @@ -278,12 +337,12 @@ export default { } }, 500) }, - + handleRetry() { this.uploadStatus = 'waiting' this.uploadProgress = 0 }, - + formatFileSize(size) { if (size < 1024) { return size + ' B' @@ -293,12 +352,12 @@ export default { return (size / (1024 * 1024)).toFixed(2) + ' MB' } }, - + formatDate(timestamp) { const date = new Date(timestamp) return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}` }, - + getFileType(filename) { const ext = filename.split('.').pop().toLowerCase() if (ext === 'csv') { @@ -309,12 +368,12 @@ export default { return '未知类型' } }, - + generatePreviewData() { // 生成模拟的预览数据 const columns = [] const rows = [] - + // 生成列 const colCount = Math.floor(Math.random() * 5) + 3 for (let i = 0; i < colCount; i++) { @@ -323,7 +382,7 @@ export default { label: '列 ' + (i + 1) }) } - + // 生成行数据 const rowCount = Math.min(5, Math.floor(Math.random() * 10) + 3) for (let i = 0; i < rowCount; i++) { @@ -333,11 +392,55 @@ export default { } rows.push(row) } - + return { columns, rows } + }, + handleEdit(index, row) { + this.currentRowData = { ...row } + this.currentEditIndex = index + this.isEditing = true + this.dataDialogVisible = true + }, + + handleDelete(index) { + this.$confirm('确认删除该行数据吗?', '提示', { + type: 'warning' + }).then(() => { + const newRows = this.fileData.previewData.rows.filter((_, i) => i !== index) + this.$store.commit('process/UPDATE_PREVIEW_DATA', { rows: newRows }) + }) + }, + + handleAddNew() { + this.currentRowData = this.fileData.previewData.columns.reduce((acc, col) => { + acc[col.prop] = '' + return acc + }, {}) + this.currentRowData._id = this._generateUniqueId() + this.isEditing = false + this.dataDialogVisible = true + }, + + submitDataForm() { + this.$refs.dataForm.validate(valid => { + if (valid) { + const newRows = [...this.fileData.previewData.rows] + if (this.isEditing) { + newRows[this.currentEditIndex] = this.currentRowData + } else { + newRows.push(this.currentRowData) + } + + this.$store.commit('process/UPDATE_PREVIEW_DATA', { rows: newRows }) + this.dataDialogVisible = false + } + }) + }, + _generateUniqueId() { + return `row-${Date.now()}-${Math.floor(Math.random() * 1000)}` } }, - + beforeDestroy() { if (this.uploadTimer) { clearInterval(this.uploadTimer) @@ -347,6 +450,12 @@ export default {