From 99148df14c888cb6f8050adeecd8ec0008a41674 Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期二, 27 五月 2025 16:25:08 +0800 Subject: [PATCH] 化验师QA --- laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue | 292 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 243 insertions(+), 49 deletions(-) diff --git a/laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue b/laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue index d7c7807..18828e0 100644 --- a/laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue +++ b/laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue @@ -1,106 +1,300 @@ <template> - <div> - <Card> + <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> </div> - <div class="header-title-right"> + <!-- <div class="header-title-right"> <el-button @click="showChoose = true" class="el-icon-circle-plus-outline" type="primary"> 选择项目组</el-button> - </div> - + </div> --> </div> - <Table :height="null" :queryForm="queryForm" :total="0"> + <Table :height="null" :data="tableData" :total="0"> <template> - <el-table-column prop="name" label="项目组名称" /> - <el-table-column prop="age" label="项目负责人" /> - <el-table-column prop="age" label="项目组成员" /> - <el-table-column prop="age" label="创建时间" /> + <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: 38px"> + <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="name" label="报告内容"> - <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告内容" /> + <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="name" label="报告编号" style="margin-left: 100px;"> - <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> + <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="name" label="制定人"> - <el-input v-model="form.name" style="width: 100%;" placeholder="请输入制定人" /> + <el-form-item prop="developPersonName" label="制定人"> + <el-input v-model="form.developPersonName" style="width: 100%;" placeholder="请输入制定人" disabled /> </el-form-item> - <el-form-item prop="name" label="制定日期" style="margin-left: 100px;"> - <el-date-picker :prefix-icon="null" v-model="form.createTime" type="date" placeholder="请选择日期" /> + <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> - <form-item prop="name" style="margin-top: 38px"> - <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + <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" /> - <div>附件</div> + <span class="noRequire">附件</span> </div> </div> - <el-form-item prop="name" style="margin-top: 38px"> - <el-upload action="https://jsonplaceholder.typicode.com/posts/" :file-list="fileList"> + <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">发送</el-button> - <el-button type="default">存草稿</el-button> + <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 }, + components: { + AiEditor, + chooseProject + }, data() { return { + loading: false, form: { - planName: "", - planCode: "", - stage: "", - creator: "", - createTime: "", - approvalComment: "", - status: "pending", - approver: "", - approveTime: "" + reportCode: "", + reportContent: "", + reportText: "", + developPerson: "", + developPersonName: "", + developDate: "", + itemId: "", + status: 1, + itemId: "", + qaReportFiles: [], + commitPersonId: null, }, + tableData: [], fileList: [], // 附件列表 showChoose: false, - radio1: 1, - rules: {}, - status: "1", - remark: "", - queryForm: { - - } + 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> -- Gitblit v1.7.1