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

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

@ -141,8 +141,17 @@
<!-- 会议纪要点击抽屉查看一对多多条链接 --> <!-- 会议纪要点击抽屉查看一对多多条链接 -->
<div v-else-if="el.type === 'meeting_minutes'"> <div v-else-if="el.type === 'meeting_minutes'">
<template v-if="getPaymentMeetingMinutesList(el, payment).length"> <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 <el-link
v-if="item.mode === 'upload'"
type="primary"
:underline="false"
@click="handlePlannedFileClick(item)"
>
{{ item.title || '查看附件' }}
</el-link>
<el-link
v-else
type="primary" type="primary"
:underline="false" :underline="false"
@click="openMeetingMinutesDrawer(item.id)" @click="openMeetingMinutesDrawer(item.id)"
@ -314,8 +323,17 @@
<!-- meeting_minutes点击抽屉查看一对多多条链接 --> <!-- meeting_minutes点击抽屉查看一对多多条链接 -->
<template v-else-if="f.element_type === 'meeting_minutes'"> <template v-else-if="f.element_type === 'meeting_minutes'">
<template v-if="getIndirectMeetingMinutesList(expId, getTplFieldKey(f)).length"> <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 <el-link
v-if="item.mode === 'upload'"
type="primary"
:underline="false"
@click="handlePlannedFileClick(item)"
>
{{ item.title || '查看附件' }}
</el-link>
<el-link
v-else
type="primary" type="primary"
:underline="false" :underline="false"
@click="openMeetingMinutesDrawer(item.id)" @click="openMeetingMinutesDrawer(item.id)"
@ -2493,23 +2511,40 @@ export default {
return null; 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) { normalizeMeetingMinutesValue(val) {
if (val === null || val === undefined) return []; if (val === null || val === undefined) return [];
if (Array.isArray(val)) { if (Array.isArray(val)) {
return val return val
.map((item) => { .map((item) => this.normalizeMeetingMinutesItem(item))
const id = this.extractMeetingMinuteId(item);
if (!id) return null;
const title = (item && typeof item === 'object' && item.title) ? item.title : '';
return { id, title };
})
.filter(Boolean); .filter(Boolean);
} }
const id = this.extractMeetingMinuteId(val); const item = this.normalizeMeetingMinutesItem(val);
if (!id) return []; return item ? [item] : [];
const title = (val && typeof val === 'object' && val.title) ? val.title : '';
return [{ id, title }];
}, },
getPaymentMeetingMinutesList(el, payment) { getPaymentMeetingMinutesList(el, payment) {

Loading…
Cancel
Save