|
|
|
|
@ -0,0 +1,520 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div>
|
|
|
|
|
<vxe-modal
|
|
|
|
|
:id="modalId"
|
|
|
|
|
:value="isShow"
|
|
|
|
|
show-footer
|
|
|
|
|
:z-index="zIndex"
|
|
|
|
|
:title="type === 'add' ? '新增会议纪要' : type === 'edit' ? '编辑会议纪要' : '查看会议纪要'"
|
|
|
|
|
:show-confirm-button="type !== 'view'"
|
|
|
|
|
:width="defaultModalSize.width"
|
|
|
|
|
:height="defaultModalSize.height"
|
|
|
|
|
esc-closable
|
|
|
|
|
transfer
|
|
|
|
|
show-zoom
|
|
|
|
|
resize
|
|
|
|
|
:fullscreen="$store.getters.device === 'mobile'"
|
|
|
|
|
@input="(e) => $emit('update:isShow', e)"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
ref="elForm"
|
|
|
|
|
:model="form"
|
|
|
|
|
:rules="rules"
|
|
|
|
|
label-position="top"
|
|
|
|
|
label-width="100"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="会议纪要标题" prop="title">
|
|
|
|
|
<el-input v-model="form.title" :disabled="true" placeholder="上传附件后自动填充文件名" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="关联上会审议流程" prop="flow_ids">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="form.flow_ids"
|
|
|
|
|
multiple
|
|
|
|
|
filterable
|
|
|
|
|
placeholder="请选择要关联的上会审议流程"
|
|
|
|
|
style="width: 100%;"
|
|
|
|
|
:disabled="type === 'view'"
|
|
|
|
|
@focus="loadFlows"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="flow in availableFlows"
|
|
|
|
|
:key="flow.id"
|
|
|
|
|
:label="(flow.title || flow.no || ('流程' + flow.id)) + ' (' + (flow.no || '') + ')'"
|
|
|
|
|
:value="flow.id"
|
|
|
|
|
>
|
|
|
|
|
<span style="float: left">{{ flow.title || flow.no || ('流程' + flow.id) }}</span>
|
|
|
|
|
<span style="float: right; color: #8492a6; font-size: 13px">{{ flow.no || '' }}</span>
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
<div style="margin-top: 8px; color: #909399; font-size: 12px;">
|
|
|
|
|
提示:可以关联多个上会审议审批流程
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="附件上传" prop="files" v-if="type !== 'view'">
|
|
|
|
|
<el-upload
|
|
|
|
|
:action="action"
|
|
|
|
|
:headers="{
|
|
|
|
|
Authorization: `Bearer ${getToken()}`,
|
|
|
|
|
}"
|
|
|
|
|
:before-upload="beforeUpload"
|
|
|
|
|
:on-success="uploadSuccess"
|
|
|
|
|
:on-remove="uploadRemove"
|
|
|
|
|
:on-error="uploadError"
|
|
|
|
|
:on-progress="uploadProgress"
|
|
|
|
|
:limit="1"
|
|
|
|
|
:file-list="fileList"
|
|
|
|
|
>
|
|
|
|
|
<el-button size="small" type="primary" :disabled="uploadingFile">点击上传</el-button>
|
|
|
|
|
<div slot="tip" class="el-upload__tip">
|
|
|
|
|
<span v-if="uploadingFile" style="color: #409EFF;">文件正在上传中,请稍候...</span>
|
|
|
|
|
<span v-else>必须上传一个附件,上传文件不超过10Mb,上传成功后标题将自动填充为文件名</span>
|
|
|
|
|
</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">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-select
|
|
|
|
|
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-select>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="16">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="item.content"
|
|
|
|
|
type="textarea"
|
|
|
|
|
:autosize="{ minRows: 2 }"
|
|
|
|
|
placeholder="请输入内容"
|
|
|
|
|
:disabled="type === 'view'"
|
|
|
|
|
/>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="2" v-if="type !== 'view'">
|
|
|
|
|
<el-button
|
|
|
|
|
type="danger"
|
|
|
|
|
icon="el-icon-delete"
|
|
|
|
|
size="small"
|
|
|
|
|
@click="removeItem(index)"
|
|
|
|
|
:disabled="form.items.length <= 1"
|
|
|
|
|
></el-button>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="type !== 'view'"
|
|
|
|
|
type="primary"
|
|
|
|
|
icon="el-icon-plus"
|
|
|
|
|
size="small"
|
|
|
|
|
@click="addItem"
|
|
|
|
|
>添加内容项</el-button>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
|
|
|
|
|
<template #footer v-if="type !== 'view'">
|
|
|
|
|
<el-button type="primary" :loading="loading" @click="submit"
|
|
|
|
|
>确认</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-button @click="$emit('update:isShow', false)">取消</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
<template #footer v-else>
|
|
|
|
|
<el-button @click="$emit('update:isShow', false)">关闭</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</vxe-modal>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import { getToken } from "@/utils/auth";
|
|
|
|
|
import { save, show, getFlows } from "@/api/meetingMinutes";
|
|
|
|
|
import { PopupManager } from "element-ui/lib/utils/popup";
|
|
|
|
|
import { defaultModalSize, uploadSize } from "@/settings";
|
|
|
|
|
import { formatFileSize } from "@/utils"
|
|
|
|
|
export default {
|
|
|
|
|
props: {
|
|
|
|
|
type: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'add',
|
|
|
|
|
required: true
|
|
|
|
|
},
|
|
|
|
|
isShow: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false,
|
|
|
|
|
required: true,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
uploadSize,
|
|
|
|
|
defaultModalSize,
|
|
|
|
|
// vxe-ui v3.5+ 要求 modal.id
|
|
|
|
|
modalId: `meeting-minutes-add-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
|
|
|
zIndex: PopupManager.nextZIndex(),
|
|
|
|
|
loading: false,
|
|
|
|
|
form: {
|
|
|
|
|
id: "",
|
|
|
|
|
title: "",
|
|
|
|
|
files: [],
|
|
|
|
|
flow_ids: [],
|
|
|
|
|
items: [
|
|
|
|
|
{
|
|
|
|
|
type: "",
|
|
|
|
|
content: ""
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
uploadingFile: false, // 标记是否有文件正在上传
|
|
|
|
|
action: process.env.VUE_APP_UPLOAD_API,
|
|
|
|
|
fileList: [],
|
|
|
|
|
availableFlows: [],
|
|
|
|
|
rules: {
|
|
|
|
|
files: [
|
|
|
|
|
{ validator: this.validateFiles, trigger: 'change' }
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
computed: {},
|
|
|
|
|
watch: {
|
|
|
|
|
isShow(newVal) {
|
|
|
|
|
if(newVal) {
|
|
|
|
|
this.zIndex = PopupManager.nextZIndex()
|
|
|
|
|
if (this.type === 'add') {
|
|
|
|
|
this.resetForm()
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
this.fileList = []
|
|
|
|
|
this.availableFlows = []
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
|
this.loadFlows()
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
formatFileSize,
|
|
|
|
|
resetForm() {
|
|
|
|
|
this.form = {
|
|
|
|
|
id: "",
|
|
|
|
|
title: "",
|
|
|
|
|
files: [],
|
|
|
|
|
flow_ids: [],
|
|
|
|
|
items: [
|
|
|
|
|
{
|
|
|
|
|
type: "",
|
|
|
|
|
content: ""
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
this.fileList = []
|
|
|
|
|
this.uploadingFile = false
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.resetFields()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
validateFiles(rule, value, callback) {
|
|
|
|
|
// 检查是否有文件正在上传
|
|
|
|
|
if (this.uploadingFile || window.$_uploading) {
|
|
|
|
|
callback(new Error('文件正在上传中,请稍候...'))
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查是否有已成功上传的文件
|
|
|
|
|
const uploadedFiles = this.fileList.filter(file => {
|
|
|
|
|
// 已上传成功的文件:有 response.data.id 或者有 url(查看模式)
|
|
|
|
|
return (file.response && file.response.data && file.response.data.id) || file.url
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (uploadedFiles.length === 0) {
|
|
|
|
|
callback(new Error('必须上传一个附件'))
|
|
|
|
|
} else if (uploadedFiles.length > 1) {
|
|
|
|
|
callback(new Error('只能上传一个附件'))
|
|
|
|
|
} else {
|
|
|
|
|
callback() // 验证通过
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
addItem() {
|
|
|
|
|
this.form.items.push({
|
|
|
|
|
type: "",
|
|
|
|
|
content: ""
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
removeItem(index) {
|
|
|
|
|
if (this.form.items.length > 1) {
|
|
|
|
|
this.form.items.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async loadFlows() {
|
|
|
|
|
if (this.availableFlows.length > 0) {
|
|
|
|
|
return // 已经加载过了
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
const params = {}
|
|
|
|
|
// 如果是编辑模式,传递当前会议纪要ID,允许显示已关联的流程
|
|
|
|
|
if (this.type === 'edit' && this.form.id) {
|
|
|
|
|
params.meeting_minute_id = this.form.id
|
|
|
|
|
}
|
|
|
|
|
const res = await getFlows(params)
|
|
|
|
|
this.availableFlows = res || []
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error('加载流程列表失败:', err)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getDetail (data) {
|
|
|
|
|
this.resetForm()
|
|
|
|
|
for (let key in this.form) {
|
|
|
|
|
if (data[key] !== undefined && key !== 'items') {
|
|
|
|
|
this.form[key] = data[key]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 处理关联的流程
|
|
|
|
|
if (data.flows && data.flows instanceof Array) {
|
|
|
|
|
this.form.flow_ids = data.flows.map(i => i.id)
|
|
|
|
|
}
|
|
|
|
|
// 处理附件
|
|
|
|
|
this.fileList = (data['files_details'] && data['files_details'] instanceof Array)
|
|
|
|
|
? data['files_details'].map(i => ({
|
|
|
|
|
name: i.original_name,
|
|
|
|
|
url: i.url,
|
|
|
|
|
response: {
|
|
|
|
|
data: i
|
|
|
|
|
}
|
|
|
|
|
}))
|
|
|
|
|
: []
|
|
|
|
|
// 处理内容清单
|
|
|
|
|
if (data.items && data.items instanceof Array && data.items.length > 0) {
|
|
|
|
|
this.form.items = data.items.map(i => ({
|
|
|
|
|
type: i.type || "",
|
|
|
|
|
content: i.content || ""
|
|
|
|
|
}))
|
|
|
|
|
} else {
|
|
|
|
|
this.form.items = [{
|
|
|
|
|
type: "",
|
|
|
|
|
content: ""
|
|
|
|
|
}]
|
|
|
|
|
}
|
|
|
|
|
// 编辑模式下,重新加载流程列表(包含已关联的流程)
|
|
|
|
|
if (this.type === 'edit' && this.form.id) {
|
|
|
|
|
this.availableFlows = [] // 清空列表,强制重新加载
|
|
|
|
|
this.loadFlows()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
uploadRemove(file, fileList) {
|
|
|
|
|
this.fileList = fileList
|
|
|
|
|
// 移除附件后,清空标题
|
|
|
|
|
if (fileList.length === 0) {
|
|
|
|
|
this.form.title = ""
|
|
|
|
|
}
|
|
|
|
|
// 触发表单验证
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
beforeUpload(file) {
|
|
|
|
|
const isLt = file.size < uploadSize
|
|
|
|
|
if (!isLt) {
|
|
|
|
|
this.$message.error(`上传文件大小不能超过${formatFileSize(uploadSize)}!`)
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
// 标记开始上传
|
|
|
|
|
this.uploadingFile = true
|
|
|
|
|
window.$_uploading = true
|
|
|
|
|
// 触发表单验证(显示上传中提示)
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
return true
|
|
|
|
|
},
|
|
|
|
|
uploadProgress(event, file, fileList) {
|
|
|
|
|
// 上传进度中,保持上传状态
|
|
|
|
|
this.uploadingFile = true
|
|
|
|
|
},
|
|
|
|
|
uploadSuccess(response, file, fileList) {
|
|
|
|
|
this.uploadingFile = false
|
|
|
|
|
window.$_uploading = false
|
|
|
|
|
|
|
|
|
|
if (response.code) {
|
|
|
|
|
// 上传失败
|
|
|
|
|
const index = fileList.indexOf(file)
|
|
|
|
|
if (index > -1) {
|
|
|
|
|
fileList.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
this.$message.warning(response.msg)
|
|
|
|
|
this.fileList = fileList
|
|
|
|
|
// 触发表单验证
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
// 上传成功
|
|
|
|
|
this.fileList = fileList
|
|
|
|
|
// 上传成功后,如果只有一个文件,自动填充标题
|
|
|
|
|
if (fileList.length === 1 && fileList[0].response && fileList[0].response.data) {
|
|
|
|
|
const fileName = fileList[0].response.data.original_name || fileList[0].name
|
|
|
|
|
this.form.title = fileName
|
|
|
|
|
}
|
|
|
|
|
// 如果文件超过一个,只保留最后一个
|
|
|
|
|
if (fileList.length > 1) {
|
|
|
|
|
this.$message.warning('只能上传一个附件,已自动移除之前的附件')
|
|
|
|
|
this.fileList = [fileList[fileList.length - 1]]
|
|
|
|
|
// 更新标题
|
|
|
|
|
if (this.fileList[0].response && this.fileList[0].response.data) {
|
|
|
|
|
const fileName = this.fileList[0].response.data.original_name || this.fileList[0].name
|
|
|
|
|
this.form.title = fileName
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 触发表单验证(清除错误提示)
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
uploadError(err, file, fileList) {
|
|
|
|
|
this.uploadingFile = false
|
|
|
|
|
window.$_uploading = false
|
|
|
|
|
this.$message.error('文件上传失败,请重试')
|
|
|
|
|
// 移除失败的文件
|
|
|
|
|
const index = fileList.indexOf(file)
|
|
|
|
|
if (index > -1) {
|
|
|
|
|
fileList.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
this.fileList = fileList
|
|
|
|
|
// 触发表单验证
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getToken,
|
|
|
|
|
previewFile(file) {
|
|
|
|
|
let fileUrl = null;
|
|
|
|
|
if (file.url) {
|
|
|
|
|
fileUrl = file.url;
|
|
|
|
|
} else if (file.response && file.response.data && file.response.data.url) {
|
|
|
|
|
fileUrl = file.response.data.url;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!fileUrl) return;
|
|
|
|
|
|
|
|
|
|
// 在查看模式下,在新窗口打开预览,避免弹窗叠加
|
|
|
|
|
if (this.type === 'view') {
|
|
|
|
|
const previewUrl = `${window.location.origin}/admin/#/preview?url=${encodeURIComponent(fileUrl)}`;
|
|
|
|
|
window.open(previewUrl, '_blank');
|
|
|
|
|
} else {
|
|
|
|
|
// 编辑模式下使用弹窗预览
|
|
|
|
|
this.$bus.$emit("online-file", fileUrl);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
downloadFile(file) {
|
|
|
|
|
// 下载直接在新窗口打开,不需要关闭查看弹窗
|
|
|
|
|
let fileId = null;
|
|
|
|
|
if (file.id) {
|
|
|
|
|
fileId = file.id;
|
|
|
|
|
} else if (file.response && file.response.data && file.response.data.id) {
|
|
|
|
|
fileId = file.response.data.id;
|
|
|
|
|
}
|
|
|
|
|
if (fileId) {
|
|
|
|
|
this.$bus.$emit("online-download", fileId);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
submit() {
|
|
|
|
|
// 检查是否有文件正在上传
|
|
|
|
|
if (this.uploadingFile || window.$_uploading) {
|
|
|
|
|
this.$message.warning("文件正在上传中,请稍候...")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证附件:检查是否有已成功上传的文件
|
|
|
|
|
const uploadedFiles = this.fileList.filter(file => {
|
|
|
|
|
return (file.response && file.response.data && file.response.data.id) || file.url
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (uploadedFiles.length === 0) {
|
|
|
|
|
this.$message.error('必须上传一个附件')
|
|
|
|
|
// 触发表单验证以显示错误提示
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
if (this.$refs.elForm) {
|
|
|
|
|
this.$refs.elForm.validateField('files')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (uploadedFiles.length > 1) {
|
|
|
|
|
this.$message.error('只能上传一个附件')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.$refs["elForm"].validate(async (valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
this.loading = true;
|
|
|
|
|
try {
|
|
|
|
|
// 只使用已成功上传的文件ID
|
|
|
|
|
this.form.files = uploadedFiles.map(i => {
|
|
|
|
|
if (i.response && i.response.data && i.response.data.id) {
|
|
|
|
|
return i.response.data.id
|
|
|
|
|
} else if (i.url && i.id) {
|
|
|
|
|
return i.id
|
|
|
|
|
}
|
|
|
|
|
return null
|
|
|
|
|
}).filter(i => !!i)
|
|
|
|
|
|
|
|
|
|
// 过滤掉空的内容清单项
|
|
|
|
|
this.form.items = this.form.items.filter(item => item.type && item.content)
|
|
|
|
|
if (this.form.items.length === 0) {
|
|
|
|
|
this.$message.error('至少需要添加一个内容清单项')
|
|
|
|
|
this.loading = false;
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
await save(this.form);
|
|
|
|
|
this.$message.success(this.form.id ? "更新成功" : "新增成功");
|
|
|
|
|
this.$emit("refresh");
|
|
|
|
|
this.$emit("update:isShow", false);
|
|
|
|
|
this.loading = false;
|
|
|
|
|
this.resetForm()
|
|
|
|
|
} catch (err) {
|
|
|
|
|
this.loading = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss"></style>
|
|
|
|
|
|