From 9cb1c3c39136c89974bc4049fca5e450e757b1be Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期五, 15 八月 2025 17:51:03 +0800 Subject: [PATCH] fix --- laboratory/src/views/reportLibrary/feasibilityReport/add.vue | 682 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 370 insertions(+), 312 deletions(-) diff --git a/laboratory/src/views/reportLibrary/feasibilityReport/add.vue b/laboratory/src/views/reportLibrary/feasibilityReport/add.vue index a624d54..c18dc13 100644 --- a/laboratory/src/views/reportLibrary/feasibilityReport/add.vue +++ b/laboratory/src/views/reportLibrary/feasibilityReport/add.vue @@ -1,351 +1,409 @@ <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" :queryForm="queryForm" :total="0"> - <template> - <el-table-column prop="teamName" label="项目组名称" /> - <el-table-column prop="personCharge" label="项目负责人" /> - <el-table-column prop="staffName" 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"> - <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="reportCode" style="margin-top: 38px"> - <el-input v-model="form.reportCode" disabled style="width: 100%;" placeholder="请输入报告编号" /> - </el-form-item> + <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" :queryForm="queryForm" :total="0"> + <template> + <el-table-column prop="teamName" label="项目组名称" /> + <el-table-column prop="personCharge" label="项目负责人" /> + <el-table-column prop="staffName" 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" + > + <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="reportCode" style="margin-top: 38px"> + <el-input + v-model="form.reportCode" + disabled + 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> - </div> - </div> - <el-form-item prop="reportName" style="margin-top: 38px"> - <el-input v-model="form.reportName" 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> + </div> + </div> + <el-form-item prop="reportName" style="margin-top: 38px"> + <el-input + v-model="form.reportName" + 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> - </div> - </div> - <el-form-item prop="reportText" style="margin-top: 38px"> - <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 class="noRequire">附件</div> - </div> - </div> - <el-form-item prop="name" style="margin-top: 38px"> - <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="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: 38px"> + <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 class="noRequire">附件</div> + </div> + </div> + <el-form-item prop="name" style="margin-top: 38px"> + <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> + <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 { addData, getDetail, editData } from './service' -import { customUploadRequest, getFullUrl } from '@/utils/utils' +import { Card } from "element-ui"; +import AiEditor from "@/components/AiEditor"; +import chooseProject from "@/components/chooseProject"; +import { addData, getDetail, editData } from "./service"; +import { customUploadRequest, getFullUrl } from "@/utils/utils"; +import { mapState } from "vuex"; export default { - components: { - AiEditor, - chooseProject - }, - data() { - return { - loading: false, - form: { - reportCode: "", - reportName: "", - reportText: "", - feasibilityReportFiles:[] - }, - tableData: [], - fileList: [], // 附件列表 - showChoose: false, - rules: { - // reportCode: [ - // { required: true, message: '请输入报告编号', trigger: 'blur' } - // ], - reportName: [ - { required: true, message: '请输入报告名称', trigger: 'blur' } - ], - }, - queryForm: {} + components: { + AiEditor, + chooseProject, + }, + data() { + return { + loading: false, + form: { + reportCode: "", + reportName: "", + reportText: "", + feasibilityReportFiles: [], + }, + tableData: [], + fileList: [], // 附件列表 + showChoose: false, + rules: { + // reportCode: [ + // { required: true, message: '请输入报告编号', trigger: 'blur' } + // ], + reportName: [ + { required: true, message: "请输入报告名称", trigger: "blur" }, + ], + }, + queryForm: {}, + }; + }, + + mounted() { + if (this.$route.query.id) { + this.getDetail(); + } + }, + computed: { + ...mapState(["tagList", "isFold"]), + }, + + methods: { + getDetail() { + getDetail(this.$route.query.id).then((res) => { + this.form = res; + this.tableData = [{ ...res.projectTeam, staffName: res.staffNames }]; + if ( + res.feasibilityReportFiles && + res.feasibilityReportFiles.length > 0 + ) { + this.fileList = res.feasibilityReportFiles.map((file) => { + return { + name: file.fileName, + url: getFullUrl(file.fileUrl), + uid: file.id, + }; + }); + this.form.feasibilityReportFiles = res.feasibilityReportFiles; + + } else { + this.fileList = []; + this.form.feasibilityReportFiles = []; } + }); }, - - mounted() { - if (this.$route.query.id) { - this.getDetail() - } + getProjectData(data) { + this.tableData = [data]; + this.$forceUpdate(); + this.showChoose = false; }, + // 上传前校验 + beforeUpload(file) { + return true; + }, + // 自定义上传处理 + handleUpload(options) { + const { file, onSuccess, onError } = options; - methods: { - getDetail() { - getDetail(this.$route.query.id).then(res => { - this.form = res - this.tableData = [{ ...res.projectTeam, staffName: res.staffNames }] - if (res.feasibilityReportFiles && res.feasibilityReportFiles.length > 0) { - this.fileList = res.feasibilityReportFiles.map(file => ({ - name: file.fileName, - url: getFullUrl(file.fileUrl), - uid: file.id - })) - this.form.feasibilityReportFiles = res.fileList - } else { - this.fileList = [] - this.form.feasibilityReportFiles = [] - } - }) - }, - getProjectData(data) { - this.tableData = [data] - this.$forceUpdate() - this.showChoose = false - }, - // 上传前校验 - beforeUpload(file) { - return true; - }, - // 自定义上传处理 - handleUpload(options) { - 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 || "", + reportType: 2, // 报告类型 + fileName: file.name, + fileSize: file.size, + }; - // 使用封装的customUploadRequest方法 - customUploadRequest({ - file, - onSuccess: (res) => { - console.log() - if (res.code === 200) { - const fileObj = { - id: new Date().getTime(), - reportId: this.$route.query.id ? this.$route.query.id : '', - fileUrl: res.msg || res.data || '', - reportType: 2, // 报告类型 - fileName: file.name, - fileSize: file.size, - }; - - // 添加到文件列表显示 - this.fileList.push({ - name: file.name, - url: getFullUrl(fileObj.fileUrl), - uid: fileObj.id - }); - - // 添加到表单数据 - this.form.feasibilityReportFiles.push(fileObj); - - this.$message.success('文件上传成功'); - onSuccess(res); - } else { - this.$message.error(res.message || '文件上传失败'); - onError(); - } - }, - onError: (err) => { - this.$message.error('文件上传失败'); - onError(err); - } + // 添加到文件列表显示 + this.fileList.push({ + name: file.name, + url: getFullUrl(fileObj.fileUrl), + uid: fileObj.id, }); - }, - // 删除文件 - handleRemove(file) { - const index = this.fileList.findIndex(item => item.name === file.name); - if (index !== -1) { - this.fileList.splice(index, 1); - this.form.feasibilityReportFiles.splice(index, 1); - } - }, - submit() { - if (this.tableData.length == 0) { - this.$message.error('请选择项目组') - return - } - this.$refs.form.validate((valid) => { - if (this.$refs.materialEditor.getContent() == '<p></p>') { - this.$message.error('请输入报告正文') - return - } - let data = { - ...this.form, - reportType: 2, - status: 1, - reportText: this.$refs.materialEditor.getContent(), - teamId: this.tableData[0].id - } - if (valid) { - this.loading = true - if (this.$route.query.id) { - editData({ ...data, id: this.$route.query.id }).then(res => { - if (res.code === 200) { - this.$message.success('修改成功') - this.$router.back() - } else { - this.$message.error(res.message) - } - }) - } else { - addData({ ...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) => { - let data = { - ...this.form, - reportType: 2, - status: -1, - reportText: this.$refs.materialEditor.getContent(), - teamId: this.tableData[0].id - } + // 添加到表单数据 + this.form.feasibilityReportFiles.push(fileObj); - delete data.id - - if (valid) { - this.loading = true - if (this.$route.query.id) { - editData({ ...data, id: this.$route.query.id }).then(res => { - if (res.code === 200) { - this.$message.success('修改成功') - this.$router.back() - } else { - this.$message.error(res.message) - } - }) - } else { - addData({ ...data }).then(res => { - if (res.code === 200) { - this.$message.success('发布成功') - this.$router.back() - } else { - this.$message.error(res.message) - } - }).finally(() => { - this.loading = false - }) - } - } - }) + this.$message.success("文件上传成功"); + onSuccess(res); + } else { + this.$message.error(res.message || "文件上传失败"); + onError(); + } }, + onError: (err) => { + this.$message.error("文件上传失败"); + onError(err); + }, + }); }, -} + // 删除文件 + handleRemove(file) { + const index = this.fileList.findIndex((item) => item.name === file.name); + if (index !== -1) { + this.fileList.splice(index, 1); + this.form.feasibilityReportFiles.splice(index, 1); + } + }, + submit() { + if (this.tableData.length == 0) { + this.$message.error("请选择项目组"); + return; + } + + this.$refs.form.validate((valid) => { + if (this.$refs.materialEditor.getContent() == "<p></p>") { + this.$message.error("请输入报告正文"); + return; + } + let data = { + ...this.form, + reportType: 2, + status: 1, + reportText: this.$refs.materialEditor.getContent(), + teamId: this.tableData[0].id, + }; + if (valid) { + this.loading = true; + if (this.$route.query.id) { + editData({ ...data, id: this.$route.query.id }).then((res) => { + if (res.code === 200) { + this.$message.success("修改成功"); + this.back(); + } else { + this.$message.error(res.message); + } + }); + } else { + addData({ ...data }) + .then((res) => { + if (res.code === 200) { + this.$message.success("发布成功"); + this.back(); + } else { + this.$message.error(res.message); + } + }) + .finally(() => { + this.loading = false; + }); + } + } + }); + }, + back() { + this.$router.back(); + this.$store.commit( + "SET_TAGLIST", + this.tagList.filter((item) => item.path !== this.$route.path) + ); + }, + save() { + this.$refs.form.validate((valid) => { + let data = { + ...this.form, + reportType: 2, + status: -1, + reportText: this.$refs.materialEditor.getContent(), + teamId: this.tableData[0].id, + }; + + delete data.id; + + if (valid) { + this.loading = true; + if (this.$route.query.id) { + editData({ ...data, id: this.$route.query.id }).then((res) => { + if (res.code === 200) { + this.$message.success("修改成功"); + this.back(); + } else { + this.$message.error(res.message); + } + }); + } else { + addData({ ...data }) + .then((res) => { + if (res.code === 200) { + this.$message.success("发布成功"); + this.back(); + } else { + this.$message.error(res.message); + } + }) + .finally(() => { + this.loading = false; + }); + } + } + }); + }, + }, +}; </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; - flex-wrap: wrap; - margin-bottom: 20px; gap: 13px; + margin-top: 38px; - .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; - } - } - - .noRequire:before { - content: unset; - } - - span { - flex-shrink: 0; - font-weight: bold; - font-size: 18px; - color: #222222; - line-height: 27px; - font-family: "Source Han Sans CN Bold Bold"; - } + img { + width: 12px; + height: 19px; } - .header-title-left :first-child { - margin-top: 0; + 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; + } } + + .noRequire:before { + content: unset; + } + + 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; - } + .header-title-left { + margin-top: 0; + } } .end-btn { - display: flex; - align-items: center; - gap: 10px; + display: flex; + align-items: center; + gap: 10px; - button { - width: 180px; - height: 36px; - } + button { + width: 180px; + height: 36px; + } } </style> \ No newline at end of file -- Gitblit v1.7.1