董国庆
2025-09-12 527efb36f35b471710e445972673abff45bacdac
laboratory/src/views/chemistQa/projectTesting/addDetectionReport.vue
@@ -24,8 +24,8 @@
            <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-form-item prop="reportContent" label="报告内容" >
                            <el-select v-model="form.reportContent" style="width: 100%;" placeholder="请选择报告内容" :disabled="this.$route.query.type === 'detail'">
                                <el-option label="国家标准" :value="1" />
                                <el-option label="分析方法开发" :value="2" />
                                <el-option label="方法验证报告" :value="3" />
@@ -40,7 +40,8 @@
                    </el-col>
                    <el-col :span="24">
                        <el-form-item prop="developPersonName" label="制定人">
                            <el-input v-model="form.developPersonName" style="width: 100%;" placeholder="请输入制定人" disabled />
                            <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
@@ -56,7 +57,7 @@
                    </div>
                </div>
                <el-form-item prop="reportText" style="margin-top: 18px">
                    <ai-editor ref="materialEditor" :value="form.reportText" style="width: 100%;"
                    <ai-editor ref="materialEditor" :value="form.reportText" style="width: 100%;" :readOnly="this.$route.query.type === 'detail'"
                        placeholder="请输入报告正文" />
                </el-form-item>
                <div class="header-title" style="width: 100%;">
@@ -66,12 +67,11 @@
                    </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-upload action="#"
                     :file-list="fileList"
                      :http-request="handleUpload"
                       :disabled="this.$route.query.type === 'detail'"
                        :before-upload="beforeUpload" :on-remove="handleRemove">
                        <el-button size="small" type="primary">点击上传</el-button>
                        <div slot="tip" class="el-upload__tip">支持任意格式文件上传</div>
                    </el-upload>
@@ -91,8 +91,9 @@
import { Card } from 'element-ui';
import AiEditor from '@/components/AiEditor'
import chooseProject from '@/components/chooseProject'
import { addDetail, getDetailInfo,updateDetail,getDetail  } from './service'
import { addDetail, getDetailInfo, updateDetail, getDetail } from './service'
import { customUploadRequest, getFullUrl } from '@/utils/utils'
import { mapState } from "vuex";
export default {
    components: {
        AiEditor,
@@ -135,43 +136,58 @@
        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,
        // this.form.itemId = this.$route.query.itemId
        if (this.$route.query.itemId) {
            getDetail(this.$route.query.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
                        itemName: res.itemName,
                        itemCode: res.itemCode,
                        createBy: res.createBy,
                        createTime: res.createTime
                    }
                   this.tableData = [{ ...item }]
                    this.form.itemId = this.$route.query.itemId
                    this.form.teamId = this.$route.query.teamId
                    this.tableData = [{ ...item }]
                }
            })
        }
        console.log('this.$route.query.itemId',this.$route.query)
        if (this.$route.query.id) {
            this.getDetail()
        }
    },
    computed: {
    ...mapState(["tagList", "isFold"]),
  },
    methods: {
        getDetail() {
            getDetailInfo({id:this.$route.query.id}).then(res => {
            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 || []
                    // this.fileList = res.qaReportFileList || []
                    if (res.qaReportFileList && res.qaReportFileList.length > 0) {
                        this.fileList = res.qaReportFileList.map(file => ({
                            name: file.fileName,
                            url: getFullUrl(file.fileUrl),
                            uid: file.id
                        }))
                        this.form.qaReportFiles = res.qaReportFileList
                    } else {
                        this.fileList = []
                        this.form.qaReportFiles = []
                    }
                } else {
                    this.$message.error(res.message || '获取详情失败')
                    // this.$message.error(res.message || '获取详情失败')
                }
            })
        },
@@ -183,12 +199,12 @@
        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(),
@@ -197,11 +213,10 @@
                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()
                            this.back()
                        } else {
                            this.$message.error(res.message || '修改失败')
                        }
@@ -209,11 +224,10 @@
                        this.loading = false
                    })
                } else {
                    console.log('data addDetail',data)
                    addDetail(data).then(res => {
                        if (res.code === 200) {
                            this.$message.success('发布成功')
                            this.$router.back()
                            this.back()
                        } else {
                            this.$message.error(res.message || '发布失败')
                        }
@@ -226,7 +240,7 @@
        save() {
            this.$refs.form.validate((valid) => {
                if (!valid) return
                let data = {
                    ...this.form,
                    reportText: this.$refs.materialEditor.getContent(),
@@ -239,7 +253,7 @@
                    updateDetail({ ...data, id: this.$route.query.id }).then(res => {
                        if (res.code === 200) {
                            this.$message.success('草稿保存成功')
                            this.$router.back()
                            this.back()
                        } else {
                            this.$message.error(res.message || '保存失败')
                        }
@@ -251,7 +265,7 @@
                    addDetail(data).then(res => {
                        if (res.code === 200) {
                            this.$message.success('草稿保存成功')
                            this.$router.back()
                            this.back()
                        } else {
                            this.$message.error(res.message || '保存失败')
                        }
@@ -261,30 +275,56 @@
                }
            })
        },
        beforeUpload(file) {
        back() {
      this.$router.back();
      this.$store.commit(
        "SET_TAGLIST",
        this.tagList.filter((item) => item.path !== this.$route.path)
      );
    },
                 // 上传前校验
                 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
            const { file, onSuccess, onError } = options;
            // 使用封装的customUploadRequest方法
            customUploadRequest({
                file,
                onSuccess: (res) => {
                    if (res.code === 200) {
                        const fileObj = {
                            id: new Date().getTime(),
                            reportId: this.$route.query.id ? this.$route.query.id : '',
                            fileUrl: res.msg || res.data || '',
                            fileName: file.name,
                            fileSize: file.size,
                        };
                        // 添加到文件列表显示
                        this.fileList.push({
                            name: file.name,
                            url: getFullUrl(fileObj.fileUrl),
                            uid: fileObj.id
                        });
                        // 添加到表单数据
                        this.form.qaReportFiles.push(fileObj);
                        this.$message.success('文件上传成功');
                        onSuccess(res);
                    } else {
                        this.$message.error(res.message || '文件上传失败');
                        onError();
                    }
                },
                onError: (err) => {
                    this.$message.error('文件上传失败');
                    onError(err);
                }
            });
            this.form.qaReportFiles.push(fileObj);
            this.$message.success('文件上传成功');
        },
        handleRemove(file) {
            const index = this.fileList.findIndex(item => item.name === file.name);