<template>
|
<div class="add-container" :loading="loading">
|
<Card v-loading="loading">
|
<div class="header-title" style="width: 100%;">
|
<div class="header-title-left">
|
<img src="@/assets/public/headercard.png" />
|
<div>所属检测项</div>
|
</div>
|
<!-- <div class="header-title-right">
|
<el-button @click="showChoose = true" class="el-icon-circle-plus-outline" type="primary">
|
选择项目组</el-button>
|
</div> -->
|
</div>
|
<Table :height="null" :data="tableData" :total="0">
|
<template>
|
<el-table-column prop="teamName" label="所属项目组" />
|
<el-table-column prop="itemName" label="检测项名称" />
|
<el-table-column prop="itemCode" label="检测项编号" />
|
<el-table-column prop="remarks" label="备注" />
|
<el-table-column prop="createBy" label="创建人" />
|
<el-table-column prop="createTime" label="创建时间" />
|
</template>
|
</Table>
|
<el-form ref="form" :model="form" :rules="rules" inline label-position="top" style="margin-top: 18px">
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item prop="reportContent" label="报告内容">
|
<el-select v-model="form.reportContent" style="width: 100%;" placeholder="请选择报告内容">
|
<el-option label="国家标准" :value="1" />
|
<el-option label="分析方法开发" :value="2" />
|
<el-option label="方法验证报告" :value="3" />
|
<el-option label="方法确认" :value="4" />
|
<el-option label="操作规程" :value="5" />
|
<el-option label="方法转移记录清单" :value="6" />
|
</el-select>
|
</el-form-item>
|
<el-form-item prop="reportCode" label="报告编号" style="margin-left: 100px;">
|
<el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" disabled />
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item prop="developPersonName" label="制定人">
|
<el-input v-model="form.developPersonName" style="width: 100%;" placeholder="请输入制定人" disabled />
|
</el-form-item>
|
<el-form-item prop="developDate" label="制定日期" style="margin-left: 100px;">
|
<el-date-picker :prefix-icon="null" v-model="form.developDate" type="date" disabled
|
placeholder="请选择日期" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
<div class="header-title" style="width: 100%;">
|
<div class="header-title-left">
|
<img src="@/assets/public/headercard.png" />
|
<div>报告正文</div>
|
</div>
|
</div>
|
<el-form-item prop="reportText" style="margin-top: 18px">
|
<ai-editor ref="materialEditor" :value="form.reportText" style="width: 100%;"
|
placeholder="请输入报告正文" />
|
</el-form-item>
|
<div class="header-title" style="width: 100%;">
|
<div class="header-title-left">
|
<img src="@/assets/public/headercard.png" />
|
<span class="noRequire">附件</span>
|
</div>
|
</div>
|
<el-form-item prop="name" style="margin-top: 18px">
|
<el-upload
|
action="#"
|
:file-list="fileList"
|
:http-request="handleUpload"
|
:before-upload="beforeUpload"
|
:on-remove="handleRemove">
|
<el-button size="small" type="primary">点击上传</el-button>
|
<div slot="tip" class="el-upload__tip">支持任意格式文件上传</div>
|
</el-upload>
|
</el-form-item>
|
|
<div class="end-btn" style="margin-top: 38px">
|
<el-button type="primary" @click="submit" :loading="loading">发送</el-button>
|
<el-button type="default" @click="save" :loading="loading">存草稿</el-button>
|
</div>
|
</el-form>
|
</Card>
|
<chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject>
|
</div>
|
</template>
|
|
<script>
|
import { Card } from 'element-ui';
|
import AiEditor from '@/components/AiEditor'
|
import chooseProject from '@/components/chooseProject'
|
import { addDetail, getDetailInfo,updateDetail,getDetail } from './service'
|
|
export default {
|
components: {
|
AiEditor,
|
chooseProject
|
},
|
data() {
|
return {
|
loading: false,
|
form: {
|
reportCode: "",
|
reportContent: "",
|
reportText: "",
|
developPerson: "",
|
developPersonName: "",
|
developDate: "",
|
itemId: "",
|
status: 1,
|
itemId: "",
|
qaReportFiles: [],
|
commitPersonId: null,
|
},
|
tableData: [],
|
fileList: [], // 附件列表
|
showChoose: false,
|
rules: {
|
reportContent: [
|
{ required: true, message: '请选择报告内容', trigger: 'change' }
|
],
|
itemId: [
|
{ required: true, message: '请选择检测项', trigger: 'change' }
|
]
|
},
|
queryForm: {}
|
}
|
},
|
|
mounted() {
|
this.form.developPerson = JSON.parse(sessionStorage.getItem('userInfo')).nickName;
|
this.form.developPersonName = JSON.parse(sessionStorage.getItem('userInfo')).nickName;
|
this.form.commitPersonId = JSON.parse(sessionStorage.getItem('userInfo')).userId
|
this.form.developDate = new Date().toISOString().split('T')[0];
|
|
this.form.itemId=this.$route.query.itemId
|
if(this.form.itemId){
|
getDetail(this.form.itemId).then(res=>{
|
if(res){
|
let item={
|
teamName:res.projectTeamVO.teamName,
|
teamId:res.teamId,
|
remark:res.remark,
|
|
itemName:res.itemName,
|
itemCode:res.itemCode,
|
createBy:res.createBy,
|
createTime:res.createTime
|
}
|
this.tableData = [{ ...item }]
|
}
|
})
|
}
|
console.log('this.$route.query.itemId',this.$route.query)
|
|
if (this.$route.query.id) {
|
this.getDetail()
|
}
|
},
|
|
methods: {
|
getDetail() {
|
getDetailInfo({id:this.$route.query.id}).then(res => {
|
if (res) {
|
this.form = {
|
...res,
|
reportContent: Number(res.reportContent)
|
}
|
// this.tableData = [{ ...res.data.projectTeam, staffName: res.data.staffNames }]
|
this.fileList = res.qaReportFiles || []
|
} else {
|
this.$message.error(res.message || '获取详情失败')
|
}
|
})
|
},
|
getProjectData(data) {
|
this.tableData = [data]
|
this.$forceUpdate()
|
this.showChoose = false
|
},
|
submit() {
|
this.$refs.form.validate((valid) => {
|
if (!valid) return
|
|
if (this.$refs.materialEditor.getContent() == '<p></p>') {
|
this.$message.error('请输入报告正文')
|
return
|
}
|
|
let data = {
|
...this.form,
|
reportText: this.$refs.materialEditor.getContent(),
|
status: 1, // 待审核状态
|
}
|
|
this.loading = true
|
if (this.$route.query.id) {
|
console.log('data updateDetail',data)
|
updateDetail({ ...data, id: this.$route.query.id }).then(res => {
|
if (res.code === 200) {
|
this.$message.success('修改成功')
|
this.$router.back()
|
} else {
|
this.$message.error(res.message || '修改失败')
|
}
|
}).finally(() => {
|
this.loading = false
|
})
|
} else {
|
console.log('data addDetail',data)
|
addDetail(data).then(res => {
|
if (res.code === 200) {
|
this.$message.success('发布成功')
|
this.$router.back()
|
} else {
|
this.$message.error(res.message || '发布失败')
|
}
|
}).finally(() => {
|
this.loading = false
|
})
|
}
|
})
|
},
|
save() {
|
this.$refs.form.validate((valid) => {
|
if (!valid) return
|
|
let data = {
|
...this.form,
|
reportText: this.$refs.materialEditor.getContent(),
|
status: -1, // 草稿箱状态
|
}
|
|
this.loading = true
|
if (this.$route.query.id) {
|
// 编辑草稿
|
updateDetail({ ...data, id: this.$route.query.id }).then(res => {
|
if (res.code === 200) {
|
this.$message.success('草稿保存成功')
|
this.$router.back()
|
} else {
|
this.$message.error(res.message || '保存失败')
|
}
|
}).finally(() => {
|
this.loading = false
|
})
|
} else {
|
// 新增草稿
|
addDetail(data).then(res => {
|
if (res.code === 200) {
|
this.$message.success('草稿保存成功')
|
this.$router.back()
|
} else {
|
this.$message.error(res.message || '保存失败')
|
}
|
}).finally(() => {
|
this.loading = false
|
})
|
}
|
})
|
},
|
beforeUpload(file) {
|
return true;
|
},
|
handleUpload(options) {
|
const file = options.file;
|
const fileObj = {
|
fileName: file.name,
|
fileSize: file.size,
|
createTime: new Date().toISOString(),
|
createBy: JSON.parse(sessionStorage.getItem('userInfo')).userId,
|
reportType: 1,
|
status: 1,
|
id: Date.now().toString(),
|
fileUrl: 'https://example.com/default-file-url'
|
};
|
|
this.fileList.push({
|
name: file.name,
|
url: fileObj.fileUrl
|
});
|
|
this.form.qaReportFiles.push(fileObj);
|
|
this.$message.success('文件上传成功');
|
},
|
handleRemove(file) {
|
const index = this.fileList.findIndex(item => item.name === file.name);
|
if (index !== -1) {
|
this.fileList.splice(index, 1);
|
this.form.qaReportFiles.splice(index, 1);
|
}
|
},
|
},
|
}
|
</script>
|
|
<style lang="less" scoped>
|
.header-title {
|
display: flex;
|
align-items: center;
|
flex-wrap: wrap;
|
margin-bottom: 20px;
|
gap: 13px;
|
|
.header-title-left {
|
display: flex;
|
align-items: center;
|
gap: 13px;
|
margin-top: 38px;
|
|
img {
|
width: 12px;
|
height: 19px;
|
}
|
|
div {
|
flex-shrink: 0;
|
font-weight: bold;
|
font-size: 18px;
|
color: #222222;
|
line-height: 27px;
|
font-family: "Source Han Sans CN Bold Bold";
|
|
&:before {
|
content: "*";
|
color: #f56c6c;
|
margin-right: 4px;
|
}
|
}
|
|
span {
|
flex-shrink: 0;
|
font-weight: bold;
|
font-size: 18px;
|
color: #222222;
|
line-height: 27px;
|
font-family: "Source Han Sans CN Bold Bold";
|
}
|
}
|
|
.header-title-left :first-child {
|
margin-top: 0;
|
}
|
}
|
|
.header-title:first-child {
|
.header-title-left {
|
margin-top: 0;
|
}
|
}
|
|
.end-btn {
|
display: flex;
|
align-items: center;
|
gap: 10px;
|
|
button {
|
width: 180px;
|
height: 36px;
|
// background: #409EFF;
|
}
|
}
|
</style>
|