档案管理

This commit is contained in:
cwchen 2025-09-17 11:30:01 +08:00
parent a7ec726fec
commit 9876e6c542
6 changed files with 242 additions and 73 deletions

View File

@ -174,10 +174,10 @@ export default {
} else {
//
this.form = {
parentId: this.rowData.id,
parentId: this.rowData && this.rowData.id ? this.rowData.id : undefined,
contentName: null,
sort: 0,
level:this.rowData.level
level:this.rowData && this.rowData.level ? this.rowData.level : undefined
};
value = this.rowData.id;
}

View File

@ -65,6 +65,7 @@ export default {
originalTreeData: [], // ,
isflag: false,
isAdd: '',
title:'',
row: {},
selectedNodeId: null, // ID
delArchiveApi
@ -111,8 +112,10 @@ export default {
this.title = "新增";
this.isAdd = 'add';
this.isflag = true;
if(data){
this.row = data;
this.row.level = Number(data.level) + 1
}
},
/* 修改树节点 */
editTree(row, data) {

View File

@ -12,16 +12,16 @@
placeholder="请输入文件题名" maxlength="64" :disabled="detailStatus"></el-input>
</el-form-item>
<el-form-item label="案卷期限" prop="term">
<el-input class="form-item" v-model="form.term" clearable show-word-limit
placeholder="请输入案卷期限" maxlength="32" :disabled="detailStatus"></el-input>
<el-input class="form-item" v-model="form.term" clearable show-word-limit placeholder="请输入案卷期限"
maxlength="32" :disabled="detailStatus"></el-input>
</el-form-item>
<el-form-item label="归档责任单位" prop="unitName">
<el-input class="form-item" v-model="form.unitName" clearable show-word-limit
placeholder="请输入归档责任单位" maxlength="32" :disabled="detailStatus"></el-input>
</el-form-item>
<el-form-item label="所属专业" prop="major">
<el-input class="form-item" v-model="form.major" clearable show-word-limit
placeholder="请输入所属专业" maxlength="32" :disabled="detailStatus"></el-input>
<el-input class="form-item" v-model="form.major" clearable show-word-limit placeholder="请输入所属专业"
maxlength="32" :disabled="detailStatus"></el-input>
</el-form-item>
<el-form-item label="档案标识代码" prop="markCode">
<el-select class="form-item" v-model="form.markCode" :disabled="detailStatus" filterable clearable
@ -31,10 +31,32 @@
</el-select>
</el-form-item>
<el-form-item label="文件分类标记" prop="classifyMark">
<el-select class="form-item" v-model="form.classifyMark" :disabled="detailStatus" filterable clearable>
<el-option v-for="item in classifyMarkList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select class="form-item" v-model="form.classifyMark" :disabled="detailStatus" filterable
clearable>
<el-option v-for="item in classifyMarkList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="附件上传" v-if="!detailStatus">
<el-upload
ref="upload"
:action="uploadUrl"
:headers="uploadHeaders"
:data="uploadData"
:file-list="fileList"
:before-upload="beforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
:on-remove="handleRemove"
:auto-upload="false"
:limit="1"
accept=".pdf,.jpg,.jpeg,.png,.gif,.bmp">
<el-button size="small" type="primary" icon="el-icon-upload">选择文件</el-button>
<div slot="tip" class="el-upload__tip">
只能上传PDF和图片文件且不超过10MB
</div>
</el-upload>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
@ -51,10 +73,11 @@ import {
editArchiveRightApi,
} from '@/api/archivesManagement/index.js'
import { getClassifyMarkSelApi } from '@/api/select.js'
import { getToken } from '@/utils/auth'
export default {
name: "FileAddTableData",
props: ["width", "dataForm", "title", "disabled", "isAdd", "rowData", "projectId"],
dicts: ['mark_code'],
dicts: ['mark_code','file_size_limit'],
data() {
return {
lDialog: this.width > 500 ? "w700" : "w500",
@ -73,6 +96,14 @@ export default {
belongName: '',
loading: null,
detailStatus: false,
//
fileList: [],
uploadUrl: process.env.VUE_APP_BASE_API + '/smartArchives/file/upload',
uploadHeaders: {
'Authorization': 'Bearer ' + getToken()
},
uploadData: {},
maxFileSize: 10 * 1024 * 1024, // 10MB
rules: {
contentName: [
{ required: true, message: '文件题名不能为空', trigger: 'blur' }
@ -98,9 +129,28 @@ export default {
created() {
this.initFormData();
},
mounted() {
// mounted
this.$nextTick(() => {
if (this.dict && this.dict.type && this.dict.type.file_size_limit) {
const fileSizeLimit = this.dict.type.file_size_limit;
if (Array.isArray(fileSizeLimit) && fileSizeLimit.length > 0) {
const firstValue = fileSizeLimit[0].value;
//
if (firstValue && !isNaN(firstValue)) {
this.maxFileSize = parseInt(firstValue);
}
}
}
});
},
methods: {
/** 初始化表单数据 */
async initFormData() {
//
await this.$nextTick();
const fileSizeLimit = this.dict.type.file_size_limit;
const firstFileSizeLimit = fileSizeLimit && Array.isArray(fileSizeLimit) && fileSizeLimit.length > 0 ? fileSizeLimit[0].value : null;
const res = await getClassifyMarkSelApi();
this.classifyMarkList = res.data;
this.belongName = this.rowData.belongName;
@ -160,6 +210,8 @@ export default {
parentId: null,
level: 4
};
this.fileList = [];
this.$refs.upload && this.$refs.upload.clearFiles();
this.resetForm("ruleForm");
},
handleReuslt(res) {
@ -168,10 +220,125 @@ export default {
this.$emit('handleQuery');
this.handleClose();
},
//
beforeUpload(file) {
const isValidType = this.checkFileType(file)
const isValidSize = this.checkFileSize(file)
if (!isValidType) {
this.$message.error('只能上传PDF和图片文件')
return false
}
if (!isValidSize) {
this.$message.error('文件大小不能超过10MB')
return false
}
//
if (this.fileList.length >= 1) {
this.$message.warning('只能上传一个文件,请先删除现有文件!')
return false
}
//
this.uploadData = {
projectId: this.projectId,
categoryId: this.form.parentId || 0,
description: this.form.contentName || ''
}
return true
},
//
checkFileType(file) {
const allowedTypes = [
'application/pdf',
'image/jpeg',
'image/jpg',
'image/png',
'image/gif',
'image/bmp'
]
return allowedTypes.includes(file.type)
},
//
checkFileSize(file) {
const maxSize = this.maxFileSize || (10 * 1024 * 1024) // 使10MB
return file.size <= maxSize
},
//
handleUploadSuccess(response, file, fileList) {
if (response.code === 200) {
this.$message.success('文件上传成功!')
} else {
this.$message.error(response.msg || '上传失败')
}
},
//
handleUploadError(error, file, fileList) {
this.$message.error('文件上传失败,请重试')
console.error('Upload error:', error)
},
//
handleRemove(file, fileList) {
this.fileList = fileList
},
//
uploadFiles() {
return new Promise((resolve, reject) => {
if (this.fileList.length === 0) {
resolve();
return;
}
let uploadPromises = this.fileList.map(file => {
return new Promise((fileResolve, fileReject) => {
const formData = new FormData();
formData.append('file', file.raw);
formData.append('projectId', this.projectId);
formData.append('categoryId', this.form.parentId || 0);
formData.append('description', this.form.contentName || '');
this.$http.post(this.uploadUrl, formData, {
headers: this.uploadHeaders
}).then(response => {
if (response.data.code === 200) {
fileResolve(response.data);
} else {
fileReject(new Error(response.data.msg || '上传失败'));
}
}).catch(error => {
fileReject(error);
});
});
});
Promise.all(uploadPromises).then(() => {
resolve();
}).catch(error => {
reject(error);
});
});
},
/**验证 */
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
//
if (this.fileList.length > 0) {
this.uploadFiles().then(() => {
this.submitFormData();
}).catch(error => {
this.$message.error('文件上传失败,请重试');
});
} else {
this.submitFormData();
}
}
});
},
//
submitFormData() {
//
this.loading = this.$loading({
lock: true,
@ -207,8 +374,6 @@ export default {
});
}
}
});
}
}
};
</script>

View File

@ -34,19 +34,17 @@ import _ from 'lodash'
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { getFileManageTreeByAddOrUpdateApi, addFileManageLeftApi, updateFileManageLeftApi,geMaxSortApi } from '@/api/archivesManagement/fileManager/fileManager.js'
import { Alert } from 'element-ui';
export default {
name: "FileAddTreeData",
props: ["width", "dataForm", "title", "disabled", "isAdd", "rowData"],
props: ["width", "dataForm", "title", "disabled", "isAdd", "rowData","projectId"],
components: { Treeselect },
props: ["projectId"],
data() {
return {
lDialog: this.width > 500 ? "w700" : "w500",
dialogVisible: true,
isDisabled: true,
form: {
parentId: '',
parentId: undefined,
contentName: '',
sort: 1,
},
@ -168,7 +166,7 @@ export default {
//
this.form = {
id: this.rowData.id,
parentId: this.rowData.parentId || 0,
parentId: this.rowData.parentId || undefined,
contentName: this.rowData.label || null,
sort: this.rowData.sort || 0,
level:this.rowData.level,
@ -178,10 +176,10 @@ export default {
} else {
//
this.form = {
parentId: this.rowData.id,
parentId: this.rowData && this.rowData.id ? this.rowData.id : undefined,
contentName: null,
sort: 0,
level:this.rowData.level,
level:this.rowData && this.rowData.level ? this.rowData.level : undefined,
proId:this.projectId
};
value = this.rowData.id;
@ -203,8 +201,8 @@ export default {
}
return data.map(item => {
// 3
if (item.level === 3) {
// 4
if (item.level === 4) {
return null;
}

View File

@ -47,7 +47,7 @@
</div>
</el-card>
<!-- 树的操作新增修改 -->
<AddTreeData v-if="isflag" :isAdd="isAdd" :rowData="row" :title="title" @closeDialog="closeDialog"
<FileAddTreeData v-if="isflag" :isAdd="isAdd" :rowData="row" :title="title" @closeDialog="closeDialog"
@showColose="showColose" :dataForm="row" :width="600" :projectId="projectId" />
</div>
@ -55,10 +55,10 @@
<script>
import { getFileManageTreeApi, delFileManageApi } from '@/api/archivesManagement/fileManager/fileManager.js'
import AddTreeData from './addTreeData.vue'
import FileAddTreeData from './addTreeData.vue'
export default {
name: 'FileLeftTree',
components: { AddTreeData },
components: { FileAddTreeData },
props: ["projectId"],
data() {
return {
@ -67,6 +67,7 @@ export default {
originalTreeData: [], // ,
isflag: false,
isAdd: '',
title: '',
row: {},
selectedNodeId: null, // ID
delFileManageApi
@ -113,8 +114,10 @@ export default {
this.title = "新增";
this.isAdd = 'add';
this.isflag = true;
if(data){
this.row = data;
this.row.level = Number(data.level) + 1
}
},
/* 修改树节点 */
editTree(row, data) {
@ -159,7 +162,6 @@ export default {
}
return data.map(item => {
console.log(item);
const node = {
id: item.id,
@ -201,7 +203,6 @@ export default {
const res = await getFileManageTreeApi({proId:this.projectId})
const transformedData = this.convertToVueTree(res.data)
this.treeDataList = transformedData;
console.log(this.treeDataList);
//
this.originalTreeData = JSON.parse(JSON.stringify(this.treeDataList))

View File

@ -91,6 +91,8 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
console.log(this.selectedNode);
this.title = "新增";
this.isAdd = 'add';
this.isflag = true;