|
|
|
|
@ -16,7 +16,68 @@
|
|
|
|
|
:fullscreen="$store.getters.device === 'mobile'"
|
|
|
|
|
@input="(e) => $emit('update:isShow', e)"
|
|
|
|
|
>
|
|
|
|
|
<!-- 查看模式:使用专门的展示页面 -->
|
|
|
|
|
<div v-if="type === 'view'" class="view-container">
|
|
|
|
|
<el-descriptions :column="1" border>
|
|
|
|
|
<el-descriptions-item label="会议纪要标题">
|
|
|
|
|
<span style="font-weight: 500;">{{ form.title || '-' }}</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="关联上会审议流程">
|
|
|
|
|
<div v-if="relatedFlows && relatedFlows.length > 0">
|
|
|
|
|
<el-tag
|
|
|
|
|
v-for="flow in relatedFlows"
|
|
|
|
|
:key="flow.id"
|
|
|
|
|
type="info"
|
|
|
|
|
style="margin-right: 8px; margin-bottom: 4px;"
|
|
|
|
|
>
|
|
|
|
|
{{ flow.title || flow.no || ('流程' + flow.id) }}
|
|
|
|
|
<span v-if="flow.no" style="color: #909399; margin-left: 4px;">({{ flow.no }})</span>
|
|
|
|
|
</el-tag>
|
|
|
|
|
</div>
|
|
|
|
|
<span v-else style="color: #909399;">未关联</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="附件">
|
|
|
|
|
<div v-if="fileList.length > 0">
|
|
|
|
|
<div v-for="(file, index) in fileList" :key="index" style="margin-bottom: 8px;">
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
style="margin-right: 10px; cursor: pointer;"
|
|
|
|
|
@click="previewFile(file)"
|
|
|
|
|
>
|
|
|
|
|
<i class="el-icon-view"></i> {{ file.name }}
|
|
|
|
|
</el-link>
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
style="cursor: pointer;"
|
|
|
|
|
@click="downloadFile(file)"
|
|
|
|
|
>
|
|
|
|
|
<i class="el-icon-download"></i> 下载
|
|
|
|
|
</el-link>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<span v-else style="color: #909399;">无附件</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="内容清单">
|
|
|
|
|
<div v-if="form.items && form.items.length > 0">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in form.items"
|
|
|
|
|
:key="index"
|
|
|
|
|
style="margin-bottom: 12px; padding: 12px; background-color: #f5f7fa; border-radius: 4px;"
|
|
|
|
|
>
|
|
|
|
|
<div style="margin-bottom: 4px;">
|
|
|
|
|
<el-tag size="small" type="primary">{{ item.type || '未分类' }}</el-tag>
|
|
|
|
|
</div>
|
|
|
|
|
<div style="color: #606266; line-height: 1.6;">{{ item.content || '-' }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<span v-else style="color: #909399;">无内容清单</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
</el-descriptions>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 编辑/新增模式:使用表单 -->
|
|
|
|
|
<el-form
|
|
|
|
|
v-else
|
|
|
|
|
ref="elForm"
|
|
|
|
|
:model="form"
|
|
|
|
|
:rules="rules"
|
|
|
|
|
@ -33,7 +94,6 @@
|
|
|
|
|
filterable
|
|
|
|
|
placeholder="请选择要关联的上会审议流程"
|
|
|
|
|
style="width: 100%;"
|
|
|
|
|
:disabled="type === 'view'"
|
|
|
|
|
@focus="loadFlows"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
@ -50,7 +110,7 @@
|
|
|
|
|
提示:可以关联多个上会审议审批流程
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="附件上传" prop="files" v-if="type !== 'view'">
|
|
|
|
|
<el-form-item label="附件上传" prop="files">
|
|
|
|
|
<el-upload
|
|
|
|
|
:action="action"
|
|
|
|
|
:headers="{
|
|
|
|
|
@ -71,24 +131,6 @@
|
|
|
|
|
</div>
|
|
|
|
|
</el-upload>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="附件" v-if="type === 'view' && fileList.length > 0">
|
|
|
|
|
<div v-for="(file, index) in fileList" :key="index" style="margin-bottom: 8px;">
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
style="margin-right: 10px; cursor: pointer;"
|
|
|
|
|
@click="previewFile(file)"
|
|
|
|
|
>
|
|
|
|
|
<i class="el-icon-view"></i> {{ file.name }}
|
|
|
|
|
</el-link>
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
style="cursor: pointer;"
|
|
|
|
|
@click="downloadFile(file)"
|
|
|
|
|
>
|
|
|
|
|
<i class="el-icon-download"></i> 下载
|
|
|
|
|
</el-link>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="内容清单" prop="items">
|
|
|
|
|
<div v-for="(item, index) in form.items" :key="index" style="margin-bottom: 15px; padding: 15px; border: 1px solid #e4e7ed; border-radius: 4px;">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
@ -97,9 +139,8 @@
|
|
|
|
|
v-model="item.type"
|
|
|
|
|
placeholder="请选择类型"
|
|
|
|
|
style="width: 100%;"
|
|
|
|
|
:disabled="type === 'view'"
|
|
|
|
|
>
|
|
|
|
|
<el-option label="“三重一大”事项" value="“三重一大”事项"></el-option>
|
|
|
|
|
<el-option label=""三重一大"事项" value=""三重一大"事项"></el-option>
|
|
|
|
|
<el-option label="资金申请" value="资金申请"></el-option>
|
|
|
|
|
<el-option label="资金支付" value="资金支付"></el-option>
|
|
|
|
|
<el-option label="其他" value="其他"></el-option>
|
|
|
|
|
@ -111,10 +152,9 @@
|
|
|
|
|
type="textarea"
|
|
|
|
|
:autosize="{ minRows: 2 }"
|
|
|
|
|
placeholder="请输入内容"
|
|
|
|
|
:disabled="type === 'view'"
|
|
|
|
|
/>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="2" v-if="type !== 'view'">
|
|
|
|
|
<el-col :span="2">
|
|
|
|
|
<el-button
|
|
|
|
|
type="danger"
|
|
|
|
|
icon="el-icon-delete"
|
|
|
|
|
@ -126,7 +166,6 @@
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="type !== 'view'"
|
|
|
|
|
type="primary"
|
|
|
|
|
icon="el-icon-plus"
|
|
|
|
|
size="small"
|
|
|
|
|
@ -191,6 +230,7 @@ export default {
|
|
|
|
|
action: process.env.VUE_APP_UPLOAD_API,
|
|
|
|
|
fileList: [],
|
|
|
|
|
availableFlows: [],
|
|
|
|
|
relatedFlows: [], // 查看模式下显示的关联流程列表
|
|
|
|
|
rules: {
|
|
|
|
|
files: [
|
|
|
|
|
{ validator: this.validateFiles, trigger: 'change' }
|
|
|
|
|
@ -209,6 +249,7 @@ export default {
|
|
|
|
|
} else {
|
|
|
|
|
this.fileList = []
|
|
|
|
|
this.availableFlows = []
|
|
|
|
|
this.relatedFlows = []
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
@ -232,6 +273,7 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
this.fileList = []
|
|
|
|
|
this.uploadingFile = false
|
|
|
|
|
this.relatedFlows = []
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.resetFields()
|
|
|
|
|
}
|
|
|
|
|
@ -294,6 +336,12 @@ export default {
|
|
|
|
|
// 处理关联的流程
|
|
|
|
|
if (data.flows && data.flows instanceof Array) {
|
|
|
|
|
this.form.flow_ids = data.flows.map(i => i.id)
|
|
|
|
|
// 查看模式下,保存完整的流程信息用于展示
|
|
|
|
|
if (this.type === 'view') {
|
|
|
|
|
this.relatedFlows = data.flows
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.relatedFlows = []
|
|
|
|
|
}
|
|
|
|
|
// 处理附件
|
|
|
|
|
this.fileList = (data['files_details'] && data['files_details'] instanceof Array)
|
|
|
|
|
@ -493,6 +541,14 @@ export default {
|
|
|
|
|
return null
|
|
|
|
|
}).filter(i => !!i)
|
|
|
|
|
|
|
|
|
|
// 确保flow_ids始终是一个数组,即使是空数组也要传递
|
|
|
|
|
// 这样可以确保后端正确删除不想继续关联的数据
|
|
|
|
|
if (!Array.isArray(this.form.flow_ids)) {
|
|
|
|
|
this.form.flow_ids = []
|
|
|
|
|
}
|
|
|
|
|
// 去重,避免重复的流程ID
|
|
|
|
|
this.form.flow_ids = [...new Set(this.form.flow_ids)]
|
|
|
|
|
|
|
|
|
|
// 过滤掉空的内容清单项
|
|
|
|
|
this.form.items = this.form.items.filter(item => item.type && item.content)
|
|
|
|
|
if (this.form.items.length === 0) {
|
|
|
|
|
|