资料关闭修改

This commit is contained in:
2026-10-10 13:07:10 +08:00
parent a188aae60d
commit a27168bbb0
+50 -66
View File
@@ -52,8 +52,10 @@ const currentRowIndex = ref<number>(-1);
const previewFile = ref<any>(null);
// 预览文件弹框
const previewModal = ref<boolean>(false);
// 成员列表
const memberList = ref<any[]>([]);
// 模板
const currentTemplate = ref<any[]>([]);
// 审批流程抽屉
const approvalDrawer = ref<boolean>(false);
const flowList = ref<any[]>([]);
@@ -74,17 +76,8 @@ const SPECIALTIES = [
{ label: '安全', value: '安全' },
{ label: '质量', value: '质量' }
];
const list = ref<any>([
{id:1,status:null,name:'变更申请表及审批记录',files:[]},
{id:2,status:null,name:'风险分析记录(风险预分析 / HAZOP / FMEA / 风险检查表)',files:[]},
{id:3,status:null,name:'培训签到与考核记录',files:[]},
{id:4,status:null,name:'PSSR 检查记录(含现场照片)',files:[]},
{id:5,status:null,name:'验收报告与运行数据',files:[]},
{id:6,status:null,name:'更新后的 P&ID / 操作规程(受控最新版)',files:[]},
{id:7,status:null,name:'设备 / 联锁台账更新记录',files:[]},
{id:8,status:null,name:'应急预案修订',files:[]},
]);
// 变更关闭资料归档列表
const list = ref<any>([]);
// 返回
const back = () => {
@@ -101,22 +94,20 @@ const onUploadFile = async (type:string = '',files:any,index:number = -1) => {
if(type==='3' || type==='4' || type==='5'){
formData.append('step', type);
}else{
formData.append('close_doc_id', currentId.value.toString());
formData.append('close_doc_id', list.value[index]?.id?.toString());
}
loading.value = true;
const {data,error} = await uploadFileApi(currentId.value, formData);
if(!error){
// 是否是本地上传
data.isLocalUpload = true;
window.$message?.success('上传成功');
if(type==='3'){
trainFiles.value=[data];
trainFiles.value.push(data);
}else if(type==='4'){
pssrFiles.value=[data];
pssrFiles.value.push(data);
}else if(type==='5'){
acceptFiles.value=[data];
acceptFiles.value.push(data);
}else{
list.value[index].files.push(data);
list.value[index].attachments.push(data);
list.value[index].status = 1;
}
}
@@ -128,10 +119,10 @@ const downloadFile = (file:any,type:string) => {
if(file){
downloadFileFun(file?.file_url, file?.doc_name || file?.file_name);
}else{
window.$message?.info('还差接口')
window.$message?.info('还差接口,空白模板')
}
}
// 删除文件(真删)
// 删除文件
const removeFileReal = async (type:string, fileIndex:number,index:number = -1) => {
let id = 0;
if(type==='3'){
@@ -141,7 +132,7 @@ const removeFileReal = async (type:string, fileIndex:number,index:number = -1) =
}else if(type==='5'){
id = acceptFiles.value[fileIndex].id;
}else{
id = list.value[index]?.files[fileIndex]?.id;
id = list.value[index]?.attachments[fileIndex]?.id;
}
loading.value = true;
const {error} = await deleteFileApi(currentId.value,id);
@@ -153,8 +144,8 @@ const removeFileReal = async (type:string, fileIndex:number,index:number = -1) =
}else if(type==='5'){
acceptFiles.value.splice(fileIndex, 1);
}else{
list.value[index]?.files.splice(fileIndex, 1);
if(list.value[index]?.files.length === 0){
list.value[index]?.attachments.splice(fileIndex, 1);
if(list.value[index]?.attachments.length === 0){
list.value[index].status = 2;
}
}
@@ -162,18 +153,6 @@ const removeFileReal = async (type:string, fileIndex:number,index:number = -1) =
}
loading.value = false;
}
// 删除文件(假删)
const removeFile = (index:number, fileIndex:number) => {
// 判断是否是本地上传
if(list.value[index]?.files[fileIndex]?.isLocalUpload){
removeFileReal(list.value[index]?.name, fileIndex, index);
}else{
list.value[index]?.files.splice(fileIndex, 1);
if(list.value[index]?.files.length === 0){
list.value[index].status = 2;
}
}
}
// 打开预览
const preview = (file:any) => {
previewFile.value = file;
@@ -191,12 +170,12 @@ const chooseFiles = () => {
const ids = new Set(checkedFiles.value);
const result = fileList.value.filter((item:any) => ids.has(item.id));
// 合并文件列表
let files = list.value[currentRowIndex.value]?.files.concat(result);
let files = list.value[currentRowIndex.value]?.attachments.concat(result);
// 按id去重
const uniqueList = [
...new Map(files.map((item:any) => [item.id, item])).values(),
];
list.value[currentRowIndex.value].files = uniqueList;
list.value[currentRowIndex.value].attachments = uniqueList;
if(uniqueList.length > 0){
list.value[currentRowIndex.value].status = 1;
}
@@ -247,6 +226,15 @@ const getDetail = async () => {
const {data,error} = await getChangeDetailApi(currentId.value)
if(!error){
currentInfo.value = data;
list.value = data.close_docs || [];
trainFiles.value = data?.train?.attachments || [];
pssrFiles.value = data?.pssr?.attachments || [];
acceptFiles.value = data?.accept_form?.attachments || [];
if(data?.close_approval_flow && data?.close_approval_flow?.steps?.length){
flowList.value = data?.close_approval_flow?.steps;
}else{
flowList.value = currentTemplate.value;
}
}
loading.value = false;
};
@@ -378,18 +366,20 @@ const finishApprover = async () => {
// 获取所有模板
const getTemplateList = async () => {
const {data,error} = await templateListApi();
if(!error){
const result = data.filter((item:any) => item.type === 3);
// ******审批模板********
flowList.value = result[0]?.steps || [];
}
loading.value = true;
const {data,error} = await templateListApi();
if(!error){
const result = data.filter((item:any) => item.type === 3);
// ******审批模板********
currentTemplate.value = result[0]?.steps || [];
}
loading.value = false;
}
onMounted(() => {
getTemplateList();
getAllMembers();
onMounted(async () => {
useDate.value = new Date().getTime();
getAllMembers();
await getTemplateList();
if(route.query){
if(route.query.key){
backKey.value = route.query.key.toString();
@@ -464,15 +454,13 @@ onMounted(() => {
</NButton>
<NUpload
class="w-auto"
:key="trainFiles.length?'train_'+trainFiles[0]?.id:'train'"
:key="trainFiles.length?'train_'+trainFiles.length+1:'train'"
accept="image/*,.pdf,.docx,.xlsx,.pptx"
:default-upload="false"
:show-file-list="false"
@change="(files) => onUploadFile('3', files)"
>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">
{{trainFiles.length?'重新上传':'上传'}}
</NButton>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">上传</NButton>
</NUpload>
</div>
<div class="border rounded-lg py-3 px-4 flex items-center gap-3">
@@ -497,7 +485,7 @@ onMounted(() => {
positive-text="确定"
:positiveButtonProps="{ size: 'tiny' }"
:negativeButtonProps="{ size: 'tiny' }"
@positive-click="pssrFiles.splice(fileIndex, 1)"
@positive-click="removeFileReal('4', Number(fileIndex))"
>
<template #trigger>
<NButton text type="error" class="text-11px">删除</NButton>
@@ -513,15 +501,13 @@ onMounted(() => {
</NButton>
<NUpload
class="w-auto"
:key="pssrFiles.length?'pssr_'+pssrFiles[0]?.id:'pssr'"
:key="pssrFiles.length?'pssr_'+pssrFiles.length+1:'pssr'"
accept="image/*,.pdf,.docx,.xlsx,.pptx"
:default-upload="false"
:show-file-list="false"
@change="(files) => onUploadFile('4', files)"
>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">
{{pssrFiles.length?'重新上传':'上传'}}
</NButton>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">上传</NButton>
</NUpload>
</div>
</div>
@@ -569,7 +555,7 @@ onMounted(() => {
positive-text="确定"
:positiveButtonProps="{ size: 'tiny' }"
:negativeButtonProps="{ size: 'tiny' }"
@positive-click="acceptFiles.splice(fileIndex, 1)"
@positive-click="removeFileReal('5', Number(fileIndex))"
>
<template #trigger>
<NButton text type="error" class="text-11px">删除</NButton>
@@ -585,15 +571,13 @@ onMounted(() => {
</NButton>
<NUpload
class="w-auto"
:key="acceptFiles.length?'accept_'+acceptFiles[0]?.id:'accept'"
:key="acceptFiles.length?'accept_'+acceptFiles.length+1:'accept'"
accept="image/*,.pdf,.docx,.xlsx,.pptx"
:default-upload="false"
:show-file-list="false"
@change="(files) => onUploadFile('5', files)"
>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">
{{acceptFiles.length?'重新上传':'上传'}}
</NButton>
<NButton type="primary" size="small" class="text-xs" :disabled="loading">上传</NButton>
</NUpload>
</div>
<div class="border rounded-lg py-3 px-4 flex flex-col gap-2">
@@ -635,10 +619,10 @@ onMounted(() => {
<tbody>
<tr v-for="(item, index) in list" :key="index">
<td>
<p>{{item.name}}</p>
<div v-if="item.files.length" class="flex flex-wrap gap-2">
<p>{{item.doc_name}}</p>
<div v-if="item.attachments.length" class="flex flex-wrap gap-2">
<div
v-for="(file, fileIndex) in item.files"
v-for="(file, fileIndex) in item.attachments"
:key="fileIndex"
class="text-11px flex items-center gap-2 border py-0.5 px-1.5 rounded-md text-[#17407F] border-[#ACC6E5] bg-[#EAF0F9]"
>
@@ -650,7 +634,7 @@ onMounted(() => {
positive-text="确定"
:positiveButtonProps="{ size: 'tiny' }"
:negativeButtonProps="{ size: 'tiny' }"
@positive-click="removeFile(Number(index), Number(fileIndex))"
@positive-click="removeFileReal(item.doc_name, Number(fileIndex), Number(index))"
>
<template #trigger>
<NButton text type="error" class="text-11px">删除</NButton>
@@ -675,7 +659,7 @@ onMounted(() => {
accept="image/*,.pdf,.docx,.xlsx,.pptx"
:default-upload="false"
:show-file-list="false"
@change="(files) => onUploadFile(item.name, files, Number(index))"
@change="(files) => onUploadFile(item.doc_name, files, Number(index))"
>
<NButton type="primary" size="small" ghost class="text-xs" :disabled="loading">
本地上传