OA展示会议纪要兼容文件上传

master
weizong song 2 weeks ago
parent 7e965b4ff4
commit 7573984d7e

@ -141,8 +141,17 @@
<!-- 会议纪要点击抽屉查看一对多多条链接 -->
<div v-else-if="el.type === 'meeting_minutes'">
<template v-if="getPaymentMeetingMinutesList(el, payment).length">
<span v-for="(item, idx) in getPaymentMeetingMinutesList(el, payment)" :key="item.id">
<span v-for="(item, idx) in getPaymentMeetingMinutesList(el, payment)" :key="getMeetingMinutesItemKey(item, idx)">
<el-link
v-if="item.mode === 'upload'"
type="primary"
:underline="false"
@click="handlePlannedFileClick(item)"
>
{{ item.title || '查看附件' }}
</el-link>
<el-link
v-else
type="primary"
:underline="false"
@click="openMeetingMinutesDrawer(item.id)"
@ -314,8 +323,17 @@
<!-- meeting_minutes点击抽屉查看一对多多条链接 -->
<template v-else-if="f.element_type === 'meeting_minutes'">
<template v-if="getIndirectMeetingMinutesList(expId, getTplFieldKey(f)).length">
<span v-for="(item, idx) in getIndirectMeetingMinutesList(expId, getTplFieldKey(f))" :key="item.id">
<span v-for="(item, idx) in getIndirectMeetingMinutesList(expId, getTplFieldKey(f))" :key="getMeetingMinutesItemKey(item, idx)">
<el-link
v-if="item.mode === 'upload'"
type="primary"
:underline="false"
@click="handlePlannedFileClick(item)"
>
{{ item.title || '查看附件' }}
</el-link>
<el-link
v-else
type="primary"
:underline="false"
@click="openMeetingMinutesDrawer(item.id)"
@ -2493,23 +2511,40 @@ export default {
return null;
},
/** 将会议纪要值归一化为 [{ id, title }, ...],兼容单条与多条 */
normalizeMeetingMinutesItem(item) {
if (item === null || item === undefined) return null;
if (typeof item === 'object' && item.mode === 'upload') {
const uploadId = item.upload_id || item.id;
if (!uploadId && !item.url && !item.file_url) return null;
return {
id: uploadId ? `upload_${uploadId}` : `upload_${item.url || item.file_url}`,
upload_id: uploadId,
mode: 'upload',
title: item.title || item.name || item.file_name || '查看附件',
name: item.name || item.file_name || item.title || '附件',
url: this.buildFileUrl(item.url || item.file_url),
};
}
const id = this.extractMeetingMinuteId(item);
if (!id) return null;
const title = (item && typeof item === 'object' && item.title) ? item.title : '';
return { id, mode: 'oa_meeting_minutes', title };
},
getMeetingMinutesItemKey(item, idx) {
return item?.id || item?.upload_id || idx;
},
/** 将会议纪要值归一化为展示项,兼容 OA 会议纪要与直接上传附件 */
normalizeMeetingMinutesValue(val) {
if (val === null || val === undefined) return [];
if (Array.isArray(val)) {
return val
.map((item) => {
const id = this.extractMeetingMinuteId(item);
if (!id) return null;
const title = (item && typeof item === 'object' && item.title) ? item.title : '';
return { id, title };
})
.map((item) => this.normalizeMeetingMinutesItem(item))
.filter(Boolean);
}
const id = this.extractMeetingMinuteId(val);
if (!id) return [];
const title = (val && typeof val === 'object' && val.title) ? val.title : '';
return [{ id, title }];
const item = this.normalizeMeetingMinutesItem(val);
return item ? [item] : [];
},
getPaymentMeetingMinutesList(el, payment) {

Loading…
Cancel
Save