| | |
| | | <template> |
| | | <Card> |
| | | <el-form ref="form" :model="form" :rules="rules" inline label-position="top"> |
| | | <el-form |
| | | ref="form" |
| | | :model="form" |
| | | :rules="rules" |
| | | inline |
| | | label-position="top" |
| | | > |
| | | <div class="header-title" style="margin-bottom: 38px"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>所属实验调度</div> |
| | | </div> |
| | | <el-button type="primary" class="el-icon-plus" @click="handleAddTask" v-if="!isView">选择实验调度</el-button> |
| | | <el-button |
| | | type="primary" |
| | | class="el-icon-plus" |
| | | @click="handleAddTask" |
| | | v-if="!isView" |
| | | >选择实验调度</el-button |
| | | > |
| | | </div> |
| | | |
| | | <Table :data="taskTableData" :total="0" :height="null" class="rwuTable"> |
| | | <el-table-column prop="projectName" label="所属项目课题方案" width="200"></el-table-column> |
| | | <el-table-column prop="experimentCode" label="实验编号"></el-table-column> |
| | | <el-table-column prop="experimentName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="experimentDate" label="通知时间"></el-table-column> |
| | | <el-table-column prop="experimentStartTime" label="实验开始时间"></el-table-column> |
| | | <el-table-column prop="experimentEndTime" label="实验结束时间"></el-table-column> |
| | | <el-table-column prop="participantsName" label="参加人员"></el-table-column> |
| | | <el-table-column |
| | | prop="projectName" |
| | | label="所属项目课题方案" |
| | | width="200" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentCode" |
| | | label="实验编号" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentName" |
| | | label="实验名称" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentDate" |
| | | label="通知时间" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentStartTime" |
| | | label="实验开始时间" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentEndTime" |
| | | label="实验结束时间" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="participantsName" |
| | | label="参加人员" |
| | | ></el-table-column> |
| | | <el-table-column prop="status" label="状态"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="getStatusType(scope.row.status)"> |
| | |
| | | <div>一 、实验结果</div> |
| | | </div> |
| | | </div> |
| | | <Table :data="experimentResultData" :total="0" :height="null" class="rwuTable"> |
| | | <el-table-column prop="projectName" label="项目课题方案名称"></el-table-column> |
| | | <el-table-column prop="experimentCode" label="实验编号"></el-table-column> |
| | | <el-table-column prop="experimentName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="experimentDate" label="实验日期"></el-table-column> |
| | | <el-table-column prop="schemePersonName" label="实验员"></el-table-column> |
| | | <Table |
| | | :data="experimentResultData" |
| | | :total="0" |
| | | :height="null" |
| | | class="rwuTable" |
| | | > |
| | | <el-table-column |
| | | prop="projectName" |
| | | label="项目课题方案名称" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentCode" |
| | | label="实验编号" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentName" |
| | | label="实验名称" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentDate" |
| | | label="实验日期" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="schemePersonName" |
| | | label="实验员" |
| | | ></el-table-column> |
| | | <el-table-column prop="createTime" label="创建日期"></el-table-column> |
| | | <el-table-column prop="createBy" label="创建人"></el-table-column> |
| | | <el-table-column prop="status" label="当前状态"> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="操作" min-width="100" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleViewDetail(scope.row)">详情</el-button> |
| | | <el-button type="text" @click="handleViewDetail(scope.row)" |
| | | >详情</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </Table> |
| | |
| | | <div>二 、检验结果</div> |
| | | </div> |
| | | </div> |
| | | <Table :data="inspectionResultData" :total="0" :height="null" class="rwuTable"> |
| | | <el-table-column prop="projectName" label="所属课题方案"></el-table-column> |
| | | <el-table-column prop="experimentCode" label="所属实验编号"></el-table-column> |
| | | <el-table-column prop="experimentName" label="实验名称"></el-table-column> |
| | | <Table |
| | | :data="inspectionResultData" |
| | | :total="0" |
| | | :height="null" |
| | | class="rwuTable" |
| | | > |
| | | <el-table-column |
| | | prop="projectName" |
| | | label="所属课题方案" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentCode" |
| | | label="所属实验编号" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="experimentName" |
| | | label="实验名称" |
| | | ></el-table-column> |
| | | <el-table-column prop="createTime" label="创建时间"></el-table-column> |
| | | <el-table-column prop="createBy" label="创建人"></el-table-column> |
| | | <el-table-column prop="status" label="状态"> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="操作" min-width="100" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleViewInspectionDetail(scope.row)">详情</el-button> |
| | | <el-button |
| | | type="text" |
| | | @click="handleViewInspectionDetail(scope.row)" |
| | | >详情</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </Table> |
| | |
| | | </div> |
| | | |
| | | <div class="content-box"> |
| | | <AiEditor ref="analysisEditor" :readOnly="isView" :value="form.experimentResult" height="400px" |
| | | placeholder="暂无实验数据分析及结论..." /> |
| | | <AiEditor |
| | | ref="analysisEditor" |
| | | :readOnly="isView" |
| | | :value="form.experimentResult" |
| | | height="400px" |
| | | placeholder="暂无实验数据分析及结论..." |
| | | /> |
| | | </div> |
| | | |
| | | <div class="header-title"> |
| | |
| | | |
| | | <div class="evaluate-card"> |
| | | <div class="evaluate-card-people"> |
| | | <div v-for="technician in labTechnicians" :key="technician.id" class="evaluate-card-people-item" |
| | | :class="{ 'active-people': selectedLabTechnician?.id == technician.id }" |
| | | @click="handleSelectLabTechnician(technician)"> |
| | | <div |
| | | v-for="technician in labTechnicians" |
| | | :key="technician.id" |
| | | class="evaluate-card-people-item" |
| | | :class="{ |
| | | 'active-people': selectedLabTechnician?.id == technician.id, |
| | | }" |
| | | @click="handleSelectLabTechnician(technician)" |
| | | > |
| | | {{ technician.nickName }} |
| | | </div> |
| | | </div> |
| | | <div class="evaluate-card-cotent"> |
| | | <template v-if="selectedLabTechnician"> |
| | | <template v-if="selectedLabTechnician.data"> |
| | | <div class="evaluate-table-wrapper" @click="handleEvaluate('labTechnician')"> |
| | | <EvaluateTable class="evaluate-table" :isReadonly="true" :type="1" |
| | | :viewJson="selectedLabTechnician.data.resultEvaluateJson" /> |
| | | <div |
| | | class="evaluate-table-wrapper" |
| | | @click="handleEvaluate('labTechnician')" |
| | | > |
| | | <EvaluateTable |
| | | class="evaluate-table" |
| | | :isReadonly="true" |
| | | :type="1" |
| | | :viewJson="selectedLabTechnician.data.resultEvaluateJson" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="no-data">暂未评定</div> |
| | | <div class="to-evaluate" @click="handleEvaluate('labTechnician')">去评价</div> |
| | | <div class="to-evaluate" @click="handleEvaluate('labTechnician')"> |
| | | 去评价 |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </div> |
| | |
| | | |
| | | <div class="evaluate-card"> |
| | | <div class="evaluate-card-people"> |
| | | <div v-for="experimenter in experimenters" :key="experimenter.id" class="evaluate-card-people-item" |
| | | :class="{ 'active-people': selectedExperimenter?.id == experimenter.id }" |
| | | @click="handleSelectExperimenter(experimenter)"> |
| | | <div |
| | | v-for="experimenter in experimenters" |
| | | :key="experimenter.id" |
| | | class="evaluate-card-people-item" |
| | | :class="{ |
| | | 'active-people': selectedExperimenter?.id == experimenter.id, |
| | | }" |
| | | @click="handleSelectExperimenter(experimenter)" |
| | | > |
| | | {{ experimenter.nickName }} |
| | | </div> |
| | | </div> |
| | | <div class="evaluate-card-cotent"> |
| | | <template v-if="selectedExperimenter"> |
| | | <template v-if="selectedExperimenter.data"> |
| | | <div class="evaluate-table-wrapper" @click="handleEvaluate('experimenter')"> |
| | | <EvaluateTable ref="experimenterEvaluateTable" class="evaluate-table" :isReadonly="true" |
| | | :viewJson="selectedExperimenter.data.resultEvaluateJson" /> |
| | | <div |
| | | class="evaluate-table-wrapper" |
| | | @click="handleEvaluate('experimenter')" |
| | | > |
| | | <EvaluateTable |
| | | ref="experimenterEvaluateTable" |
| | | class="evaluate-table" |
| | | :isReadonly="true" |
| | | :viewJson="selectedExperimenter.data.resultEvaluateJson" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="no-data">暂未评定</div> |
| | | <div class="to-evaluate" @click="handleEvaluate('experimenter')">去评价</div> |
| | | <div class="to-evaluate" @click="handleEvaluate('experimenter')"> |
| | | 去评价 |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </div> |
| | |
| | | |
| | | <div class="evaluate-card" v-if="isView"> |
| | | <div class="evaluate-card-people"> |
| | | <div v-for="engineer in processEngineers" :key="engineer.id" class="evaluate-card-people-item" |
| | | :class="{ 'active-people': selectedProcessEngineer?.id == engineer.id }" |
| | | @click="handleSelectProcessEngineer(engineer)"> |
| | | <div |
| | | v-for="engineer in processEngineers" |
| | | :key="engineer.id" |
| | | class="evaluate-card-people-item" |
| | | :class="{ |
| | | 'active-people': selectedProcessEngineer?.id == engineer.id, |
| | | }" |
| | | @click="handleSelectProcessEngineer(engineer)" |
| | | > |
| | | {{ engineer.nickName }} |
| | | </div> |
| | | </div> |
| | | <div class="evaluate-card-cotent"> |
| | | <template v-if="selectedProcessEngineer"> |
| | | <template v-if="selectedProcessEngineer.data"> |
| | | <div class="evaluate-table-wrapper" @click="handleEvaluate('processEngineer')"> |
| | | <EvaluateTable class="evaluate-table" :isReadonly="true" :type="1" |
| | | :viewJson="selectedProcessEngineer.data.resultEvaluateJson" /> |
| | | <div |
| | | class="evaluate-table-wrapper" |
| | | @click="handleEvaluate('processEngineer')" |
| | | > |
| | | <EvaluateTable |
| | | class="evaluate-table" |
| | | :isReadonly="true" |
| | | :type="1" |
| | | :viewJson="selectedProcessEngineer.data.resultEvaluateJson" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <template v-else> |
| | | <div class="no-data">暂未评定</div> |
| | | <div v-if="isView && form.status == 2 &&(userRole==1 || userRole==2)" class="to-evaluate" @click="handleEvaluate('processEngineer')">去评价</div> |
| | | <div |
| | | v-if=" |
| | | isView && form.status == 2 && (userRole == 1 || userRole == 2) |
| | | " |
| | | class="to-evaluate" |
| | | @click="handleEvaluate('processEngineer')" |
| | | > |
| | | 去评价 |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | <div class="add-project-footer" v-if="!isView"> |
| | | <el-button type="primary" class="save-btn" @click="handleSubmit(1)">提交</el-button> |
| | | <el-button type="primary" class="save-btn" @click="handleSubmit(1)" |
| | | >提交</el-button |
| | | > |
| | | <el-button @click="handleSubmit(-1)">存草稿</el-button> |
| | | </div> |
| | | <div class="add-project-footer" v-if="isView && form.status == 2 &&(userRole==1 || userRole==2)"> |
| | | <el-button type="primary" class="save-btn" @click="handleEvaluate('processEngineer')">工艺工程师评定</el-button> |
| | | <div |
| | | class="add-project-footer" |
| | | v-if="isView && form.status == 2 && (userRole == 1 || userRole == 2)" |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | class="save-btn" |
| | | @click="handleEvaluate('processEngineer')" |
| | | >工艺工程师评定</el-button |
| | | > |
| | | <!-- <el-button @click="handleSubmit(-1)">存草稿</el-button> --> |
| | | </div> |
| | | </el-form> |
| | | <!-- 选择实验调度弹窗 --> |
| | | <experimental-scheduling :show="schedulingDialogVisible" @close="handleSchedulingClose" |
| | | @submit="handleSchedulingSelect" /> |
| | | <experimental-scheduling |
| | | :show="schedulingDialogVisible" |
| | | @close="handleSchedulingClose" |
| | | @submit="handleSchedulingSelect" |
| | | /> |
| | | <!-- 评价弹窗 --> |
| | | <evaluation-dialog :modelValue="evaluationDialogVisible" :type="currentEvaluationType" |
| | | :viewJson="currentEvaluationData ? currentEvaluationData : ''" @update:modelValue="updateEvaluationDialogVisible" |
| | | @submit="handleEvaluationSubmit" /> |
| | | <evaluation-dialog |
| | | :modelValue="evaluationDialogVisible" |
| | | :type="currentEvaluationType" |
| | | :viewJson="currentEvaluationData ? currentEvaluationData : ''" |
| | | @update:modelValue="updateEvaluationDialogVisible" |
| | | @submit="handleEvaluationSubmit" |
| | | /> |
| | | <!-- 检验结果详情弹窗 --> |
| | | <checkout-result :visible="checkoutResultVisible" :data="currentCheckoutResult" |
| | | @close="handleCheckoutResultClose" /> |
| | | <checkout-result |
| | | :visible="checkoutResultVisible" |
| | | :data="currentCheckoutResult" |
| | | @close="handleCheckoutResultClose" |
| | | /> |
| | | <!-- 新增组件弹窗 --> |
| | | <!-- <add-component-dialog |
| | | v-if="showNewDialog" |
| | |
| | | @confirm="handleAddComponent" |
| | | /> --> |
| | | <!-- 实验结果详情 --> |
| | | <ExperimentResultDialog :visible.sync="experimentResultDialogVisible" :type="'view'" |
| | | :data="currentExperimentResult" /> |
| | | <ExperimentResultDialog |
| | | :visible.sync="experimentResultDialogVisible" |
| | | :type="'view'" |
| | | :data="currentExperimentResult" |
| | | /> |
| | | </Card> |
| | | </template> |
| | | |
| | |
| | | import CheckoutResult from "./components/checkout-result.vue"; |
| | | import AiEditor from "@/components/AiEditor"; |
| | | // import AddComponentDialog from "@/components/AddComponentDialog"; |
| | | import { getOtherInfoByDispatchId, add, update, getDetail,evaluateProcess } from './service' |
| | | import { |
| | | getOtherInfoByDispatchId, |
| | | add, |
| | | update, |
| | | getDetail, |
| | | evaluateProcess, |
| | | } from "./service"; |
| | | import { mapState } from "vuex"; |
| | | export default { |
| | | name: "AddProject", |
| | |
| | | EvaluationDialog, |
| | | CheckoutResult, |
| | | ExperimentResultDialog, |
| | | AiEditor |
| | | AiEditor, |
| | | // AddComponentDialog |
| | | }, |
| | | data() { |
| | |
| | | experimentResult: "", |
| | | id: "", |
| | | resultWorkEvaluates: [], |
| | | status: -1 |
| | | status: -1, |
| | | }, |
| | | rules: { |
| | | dispatchId: [ |
| | | { required: true, message: "请选择所属实验调度", trigger: "change" } |
| | | { required: true, message: "请选择所属实验调度", trigger: "change" }, |
| | | ], |
| | | }, |
| | | taskTableData: [], |
| | |
| | | |
| | | // 弹窗控制 |
| | | evaluationDialogVisible: false, |
| | | currentEvaluationType: '', |
| | | currentEvaluationType: "", |
| | | checkoutResultVisible: false, |
| | | currentCheckoutResult: null, |
| | | statusTypeMap: { |
| | | "-1": "info", |
| | | "1": "warning", |
| | | "2": "success", |
| | | "3": "info" |
| | | 1: "warning", |
| | | 2: "success", |
| | | 3: "info", |
| | | }, |
| | | statusTextMap: { |
| | | "-1": "草稿箱", |
| | | "1": "待确认", |
| | | "2": "已确认", |
| | | "3": "已封存" |
| | | 1: "待确认", |
| | | 2: "已确认", |
| | | 3: "已封存", |
| | | }, |
| | | currentEvaluationData: null, // 添加当前评价数据 |
| | | userRole:'', |
| | | userRole: "", |
| | | }; |
| | | }, |
| | | watch: { |
| | | selectedLabTechnician: { |
| | | handler(newVal) { |
| | | }, |
| | | handler(newVal) {}, |
| | | }, |
| | | }, |
| | | computed: { |
| | |
| | | this.getDetailData(id); |
| | | } |
| | | const userInfo = JSON.parse(sessionStorage.getItem("userInfo")); |
| | | this.userRole = userInfo.roleType || ''; |
| | | this.userRole = userInfo.roleType || ""; |
| | | }, |
| | | methods: { |
| | | handleAddTask() { |
| | |
| | | this.$message.success("删除成功"); |
| | | } |
| | | }) |
| | | .catch(() => { }); |
| | | .catch(() => {}); |
| | | }, |
| | | handleTaskSubmit(formData) { |
| | | const photos = formData.photos.map((file) => ({ |
| | |
| | | this.checkoutResultVisible = true; |
| | | }, |
| | | handleCheckoutResultClose() { |
| | | this.currentCheckoutResult = null |
| | | this.currentCheckoutResult = null; |
| | | this.checkoutResultVisible = false; |
| | | }, |
| | | // 选择化验师 |
| | |
| | | }, |
| | | // 去评价 |
| | | handleEvaluate(type) { |
| | | if(this.$route.query.type == 'view' && type !='processEngineer' && this.userRole!=3){ |
| | | this.$message.warning('当前为查看模式,无法进行评价'); |
| | | if ( |
| | | this.$route.query.type == "view" && |
| | | type != "processEngineer" && |
| | | this.userRole != 3 |
| | | ) { |
| | | this.$message.warning("当前为查看模式,无法进行评价"); |
| | | return; |
| | | } |
| | | this.currentEvaluationType = type; |
| | | // 根据类型获取当前选中人员的评定数据 |
| | | if (type == 'labTechnician' && this.selectedLabTechnician) { |
| | | this.currentEvaluationData = this.selectedLabTechnician.data?.resultEvaluateJson; |
| | | } else if (type == 'experimenter' && this.selectedExperimenter) { |
| | | this.currentEvaluationData = this.selectedExperimenter.data?.resultEvaluateJson; |
| | | } else if (type == 'processEngineer' && this.selectedProcessEngineer) { |
| | | this.currentEvaluationData = this.selectedProcessEngineer.data?.resultEvaluateJson; |
| | | if (type == "labTechnician" && this.selectedLabTechnician) { |
| | | this.currentEvaluationData = |
| | | this.selectedLabTechnician.data?.resultEvaluateJson; |
| | | } else if (type == "experimenter" && this.selectedExperimenter) { |
| | | this.currentEvaluationData = |
| | | this.selectedExperimenter.data?.resultEvaluateJson; |
| | | } else if (type == "processEngineer" && this.selectedProcessEngineer) { |
| | | this.currentEvaluationData = |
| | | this.selectedProcessEngineer.data?.resultEvaluateJson; |
| | | } |
| | | this.evaluationDialogVisible = true; |
| | | }, |
| | |
| | | |
| | | // 将评分数据转换为后端需要的格式 |
| | | const evaluateData = { |
| | | evaluateType: type == 'labTechnician' ? 2 : type == 'experimenter' ? 3 : 1, // 1=工艺工程师 2=化验师 3=实验员 |
| | | evaluateType: |
| | | type == "labTechnician" ? 2 : type == "experimenter" ? 3 : 1, // 1=工艺工程师 2=化验师 3=实验员 |
| | | evaluateOne: this.getEvaluateValue(activeIndex[0].score), |
| | | evaluateTwo: this.getEvaluateValue(activeIndex[1].score), |
| | | evaluateThree: this.getEvaluateValue(activeIndex[2].score), |
| | | evaluateFour: this.getEvaluateValue(activeIndex[3].score), |
| | | evaluateFive: this.getEvaluateValue(activeIndex[4].score), |
| | | evaluateSix: this.getEvaluateValue(activeIndex[5].score), |
| | | evaluateTime: moment().format('YYYY-MM-DD HH:mm:ss'), |
| | | evaluateTime: moment().format("YYYY-MM-DD HH:mm:ss"), |
| | | resultEvaluateJson: JSON.stringify(activeIndex), |
| | | dispatchId: this.selectedScheduling?.id, |
| | | userId: type == 'labTechnician' ? this.selectedLabTechnician.id : |
| | | type == 'experimenter' ? this.selectedExperimenter.id : |
| | | this.selectedProcessEngineer.id, |
| | | userId: |
| | | type == "labTechnician" |
| | | ? this.selectedLabTechnician.id |
| | | : type == "experimenter" |
| | | ? this.selectedExperimenter.id |
| | | : this.selectedProcessEngineer.id, |
| | | // teamId: this.selectedScheduling?.teamId, |
| | | status: 1 |
| | | status: 1, |
| | | }; |
| | | |
| | | if (type == 'labTechnician') { |
| | | if (type == "labTechnician") { |
| | | // 更新化验师列表中的数据 |
| | | const labTechnician = this.labTechnicians.find(item => item.id == this.selectedLabTechnician.id); |
| | | const labTechnician = this.labTechnicians.find( |
| | | (item) => item.id == this.selectedLabTechnician.id |
| | | ); |
| | | if (labTechnician) { |
| | | labTechnician.data = { ...labTechnician.data, ...evaluateData }; |
| | | this.selectedLabTechnician = { ...labTechnician }; |
| | | } |
| | | } else if (type == 'experimenter') { |
| | | } else if (type == "experimenter") { |
| | | // 更新实验员列表中的数据 |
| | | const experimenter = this.experimenters.find(item => item.id == this.selectedExperimenter.id); |
| | | const experimenter = this.experimenters.find( |
| | | (item) => item.id == this.selectedExperimenter.id |
| | | ); |
| | | if (experimenter) { |
| | | experimenter.data = { ...experimenter.data, ...evaluateData }; |
| | | this.selectedExperimenter = { ...experimenter }; |
| | | } |
| | | } else if (type == 'processEngineer') { |
| | | } else if (type == "processEngineer") { |
| | | // 工艺工程师评定直接调用接口 |
| | | evaluateProcess({ |
| | | ...evaluateData, |
| | | resultReportId: this.form.id // 添加实验报告ID |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('评定成功'); |
| | | // 重新获取详情数据 |
| | | this.getDetailData(this.form.id); |
| | | } else { |
| | | this.$message.error(res.msg || '评定失败'); |
| | | } |
| | | }).catch(err => { |
| | | this.$message.error('评定失败'); |
| | | }); |
| | | resultReportId: this.form.id, // 添加实验报告ID |
| | | }) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | this.$message.success("评定成功"); |
| | | // 重新获取详情数据 |
| | | this.getDetailData(this.form.id); |
| | | } else { |
| | | this.$message.error(res.msg || "评定失败"); |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | this.$message.error("评定失败"); |
| | | }); |
| | | } |
| | | this.evaluationDialogVisible = false; |
| | | this.currentEvaluationData = null; |
| | |
| | | const scoreMap = { |
| | | 2: 1, // 良好 |
| | | 1: 2, // 正确 |
| | | 0: 3 // 失误 |
| | | 0: 3, // 失误 |
| | | }; |
| | | return scoreMap[score] || 3; // 默认返回失误 |
| | | }, |
| | | // 收集评分数据 |
| | | collectEvaluateData() { |
| | | const evaluates = []; |
| | | |
| | | |
| | | // 收集化验师评分 |
| | | this.labTechnicians.forEach(tech => { |
| | | this.labTechnicians.forEach((tech) => { |
| | | if (tech.data) { |
| | | evaluates.push({ |
| | | ...tech.data, |
| | |
| | | userId: tech.id, |
| | | teamId: this.selectedScheduling?.teamId, |
| | | status: -1, |
| | | id: tech.data.id || undefined |
| | | id: tech.data.id || undefined, |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | // 收集实验员评分 |
| | | this.experimenters.forEach(exp => { |
| | | this.experimenters.forEach((exp) => { |
| | | if (exp.data) { |
| | | evaluates.push({ |
| | | ...exp.data, |
| | |
| | | userId: exp.id, |
| | | teamId: this.selectedScheduling?.teamId, |
| | | status: -1, |
| | | id: exp.data.id || undefined |
| | | id: exp.data.id || undefined, |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | // 收集工艺工程师评分 |
| | | this.processEngineers.forEach(eng => { |
| | | this.processEngineers.forEach((eng) => { |
| | | if (eng.data) { |
| | | evaluates.push({ |
| | | ...eng.data, |
| | |
| | | userId: eng.id, |
| | | teamId: this.selectedScheduling?.teamId, |
| | | status: -1, |
| | | id: eng.data.id || undefined |
| | | id: eng.data.id || undefined, |
| | | }); |
| | | } |
| | | }); |
| | |
| | | } |
| | | }, |
| | | getInfomationByDispatchId(selectedData) { |
| | | getOtherInfoByDispatchId({ dispatchId: selectedData.id }).then(res => { |
| | | // 直接使用接口返回的字段,因为字段名完全一致 |
| | | let list = res.inspectionReports.map(item => ({ |
| | | ...item, |
| | | experimentName: selectedData.experimentName, |
| | | projectName: selectedData.projectName, |
| | | experimentCode: selectedData.experimentCode |
| | | })) || [] |
| | | this.experimentResultData = res.experimentSchemeVOS || []; |
| | | this.inspectionResultData = list; |
| | | getOtherInfoByDispatchId({ dispatchId: selectedData.id }) |
| | | .then((res) => { |
| | | // 直接使用接口返回的字段,因为字段名完全一致 |
| | | let list = |
| | | res.inspectionReports.map((item) => ({ |
| | | ...item, |
| | | experimentName: selectedData.experimentName, |
| | | projectName: selectedData.projectName, |
| | | experimentCode: selectedData.experimentCode, |
| | | })) || []; |
| | | this.experimentResultData = res.experimentSchemeVOS || []; |
| | | this.inspectionResultData = list; |
| | | |
| | | if (!this.$route.query.id) { |
| | | // 处理实验人员数据 |
| | | const participants = res.experimentDispatchParticipants || []; |
| | | // 获取工艺工程师列表 |
| | | this.processEngineers = participants |
| | | .filter(p => p.roleType == 3) // 3=工艺工程师 |
| | | .map(p => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '工艺工程师', |
| | | role: '工艺工程师', |
| | | data: null |
| | | })); |
| | | if (!this.$route.query.id) { |
| | | // 处理实验人员数据 |
| | | const participants = res.experimentDispatchParticipants || []; |
| | | // 获取工艺工程师列表 |
| | | this.processEngineers = participants |
| | | .filter((p) => p.roleType == 3) // 3=工艺工程师 |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || "工艺工程师", |
| | | role: "工艺工程师", |
| | | data: null, |
| | | })); |
| | | |
| | | // 获取化验师列表 |
| | | this.labTechnicians = participants |
| | | .filter(p => p.roleType == 4) // 4=化验师 |
| | | .map(p => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '化验师', |
| | | role: '化验师', |
| | | data: null |
| | | })); |
| | | // 获取化验师列表 |
| | | this.labTechnicians = participants |
| | | .filter((p) => p.roleType == 4) // 4=化验师 |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || "化验师", |
| | | role: "化验师", |
| | | data: null, |
| | | })); |
| | | |
| | | // 获取实验员列表 |
| | | this.experimenters = participants |
| | | .filter(p => p.roleType == 5) // 5=实验员 |
| | | .map(p => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '实验员', |
| | | role: '实验员', |
| | | data: null |
| | | })); |
| | | // 获取实验员列表 |
| | | this.experimenters = participants |
| | | .filter((p) => p.roleType == 5) // 5=实验员 |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || "实验员", |
| | | role: "实验员", |
| | | data: null, |
| | | })); |
| | | |
| | | // 处理评定数据 |
| | | const evaluates = res.resultWorkEvaluates || []; |
| | | evaluates.forEach(evaluate => { |
| | | // 根据评定类型和用户ID匹配对应的评定数据 |
| | | if (evaluate.evaluateType == 1) { // 1=工艺工程师 |
| | | const engineer = this.processEngineers.find(e => e.id == evaluate.userId); |
| | | if (engineer) { |
| | | engineer.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | }; |
| | | // 处理评定数据 |
| | | const evaluates = res.resultWorkEvaluates || []; |
| | | evaluates.forEach((evaluate) => { |
| | | // 根据评定类型和用户ID匹配对应的评定数据 |
| | | if (evaluate.evaluateType == 1) { |
| | | // 1=工艺工程师 |
| | | const engineer = this.processEngineers.find( |
| | | (e) => e.id == evaluate.userId |
| | | ); |
| | | if (engineer) { |
| | | engineer.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } else if (evaluate.evaluateType == 2) { |
| | | // 2=化验师 |
| | | const technician = this.labTechnicians.find( |
| | | (t) => t.id == evaluate.userId |
| | | ); |
| | | if (technician) { |
| | | technician.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } else if (evaluate.evaluateType == 3) { |
| | | // 3=实验员 |
| | | const experimenter = this.experimenters.find( |
| | | (e) => e.id == evaluate.userId |
| | | ); |
| | | if (experimenter) { |
| | | experimenter.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } |
| | | } else if (evaluate.evaluateType == 2) { // 2=化验师 |
| | | const technician = this.labTechnicians.find(t => t.id == evaluate.userId); |
| | | if (technician) { |
| | | technician.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | }; |
| | | } |
| | | } else if (evaluate.evaluateType == 3) { // 3=实验员 |
| | | const experimenter = this.experimenters.find(e => e.id == evaluate.userId); |
| | | if (experimenter) { |
| | | experimenter.data = { |
| | | id: evaluate.id, // 保存id |
| | | evaluateOne: evaluate.evaluateOne, |
| | | evaluateTwo: evaluate.evaluateTwo, |
| | | evaluateThree: evaluate.evaluateThree, |
| | | evaluateFour: evaluate.evaluateFour, |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | }; |
| | | } |
| | | }); |
| | | |
| | | // 默认选中第一个人员 |
| | | if (this.processEngineers.length > 0) { |
| | | this.selectedProcessEngineer = this.processEngineers[0]; |
| | | } |
| | | }); |
| | | |
| | | // 默认选中第一个人员 |
| | | if (this.processEngineers.length > 0) { |
| | | this.selectedProcessEngineer = this.processEngineers[0]; |
| | | if (this.labTechnicians.length > 0) { |
| | | this.selectedLabTechnician = this.labTechnicians[0]; |
| | | } |
| | | if (this.experimenters.length > 0) { |
| | | this.selectedExperimenter = this.experimenters[0]; |
| | | } |
| | | } |
| | | if (this.labTechnicians.length > 0) { |
| | | this.selectedLabTechnician = this.labTechnicians[0]; |
| | | } |
| | | if (this.experimenters.length > 0) { |
| | | this.selectedExperimenter = this.experimenters[0]; |
| | | } |
| | | } |
| | | |
| | | }).catch(err => { |
| | | this.$message.error('获取其他信息失败'); |
| | | }); |
| | | }) |
| | | .catch((err) => { |
| | | this.$message.error("获取其他信息失败"); |
| | | }); |
| | | }, |
| | | getStatusType(status) { |
| | | return this.statusTypeMap[status] || 'info'; |
| | | return this.statusTypeMap[status] || "info"; |
| | | }, |
| | | getStatusText(status) { |
| | | return this.statusTextMap[status] || '未知状态'; |
| | | return this.statusTextMap[status] || "未知状态"; |
| | | }, |
| | | getResultStatusType(status) { |
| | | const statusMap = { |
| | | '-1': "info", |
| | | '1': "warning", |
| | | '2': "warning", |
| | | '3': "success", |
| | | '4': "danger", |
| | | '5': "info", |
| | | '6': 'success' |
| | | "-1": "info", |
| | | 1: "warning", |
| | | 2: "warning", |
| | | 3: "success", |
| | | 4: "danger", |
| | | 5: "info", |
| | | 6: "success", |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | getResultStatusText(status) { |
| | | const statusMap = { |
| | | '-1': "草稿", |
| | | '1': "已发送", |
| | | '2': "申请中止待审核", |
| | | '3': "申请中止已通过", |
| | | '4': "申请中止已驳回", |
| | | '5': "已封存", |
| | | '6': '实验员已提交' |
| | | "-1": "草稿", |
| | | 1: "已发送", |
| | | 2: "申请中止待审核", |
| | | 3: "申请中止已通过", |
| | | 4: "申请中止已驳回", |
| | | 5: "已封存", |
| | | 6: "实验员已提交", |
| | | }; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | | getCheckoutStatusType(status) { |
| | | const statusMap = { |
| | | '-1': 'info', |
| | | '1': 'warning', |
| | | '2': 'success' |
| | | "-1": "info", |
| | | 1: "warning", |
| | | 2: "success", |
| | | }; |
| | | return statusMap[status] || 'info'; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | getCheckoutStatusText(status) { |
| | | const statusMap = { |
| | | '-1': '草稿箱', |
| | | '1': '待提交', |
| | | '2': '已提交' |
| | | "-1": "草稿箱", |
| | | 1: "待提交", |
| | | 2: "已提交", |
| | | }; |
| | | return statusMap[status] || '未知'; |
| | | return statusMap[status] || "未知"; |
| | | }, |
| | | // 验证评分数据 |
| | | validateEvaluates() { |
| | | // 检查是否所有实验员和化验师都有评分 |
| | | const allTechnicians = this.labTechnicians.every(tech => tech.data); |
| | | const allExperimenters = this.experimenters.every(exp => exp.data); |
| | | const allTechnicians = this.labTechnicians.every((tech) => tech.data); |
| | | const allExperimenters = this.experimenters.every((exp) => exp.data); |
| | | |
| | | if (!allTechnicians || !allExperimenters) { |
| | | this.$message.error('请完成所有实验员和化验师的评分'); |
| | | this.$message.error("请完成所有实验员和化验师的评分"); |
| | | return false; |
| | | } |
| | | return true; |
| | |
| | | const experimentResult = this.$refs.analysisEditor.getContent(); |
| | | |
| | | // 校验实验数据分析及结论 |
| | | if (!experimentResult || experimentResult == '<p></p>' || experimentResult.trim() == '<p></p>') { |
| | | this.$message.error('请输入实验数据分析及结论'); |
| | | if ( |
| | | !experimentResult || |
| | | experimentResult == "<p></p>" || |
| | | experimentResult.trim() == "<p></p>" |
| | | ) { |
| | | this.$message.error("请输入实验数据分析及结论"); |
| | | return; |
| | | } |
| | | |
| | |
| | | const evaluates = this.collectEvaluateData(); |
| | | |
| | | // 更新评分数据的状态 |
| | | evaluates.forEach(evaluate => { |
| | | evaluates.forEach((evaluate) => { |
| | | evaluate.status = status; |
| | | }); |
| | | |
| | |
| | | dispatchId: this.selectedScheduling?.id, |
| | | experimentResult: this.$refs.analysisEditor.getContent(), |
| | | status: status, |
| | | resultWorkEvaluates: evaluates |
| | | resultWorkEvaluates: evaluates, |
| | | }; |
| | | |
| | | // 如果有ID,则是编辑 |
| | |
| | | await add(submitData); |
| | | } |
| | | |
| | | this.$message.success(status == 1 ? '提交成功' : '保存草稿成功'); |
| | | this.$message.success(status == 1 ? "提交成功" : "保存草稿成功"); |
| | | this.$router.back(); |
| | | this.$store.commit( |
| | | "SET_TAGLIST", |
| | | this.tagList.filter((item) => item.path !== this.$route.path) |
| | | ); |
| | | this.$store.commit( |
| | | "SET_TAGLIST", |
| | | this.tagList.filter((item) => item.path !== this.$route.path) |
| | | ); |
| | | } catch (error) { |
| | | this.$message.error('提交失败,请重试'); |
| | | // this.$message.error("提交失败,请重试"); |
| | | } |
| | | }, |
| | | |
| | |
| | | if (res) { |
| | | this.form = { |
| | | ...res, |
| | | experimentResult: res.experimentResult || '' |
| | | experimentResult: res.experimentResult || "", |
| | | }; |
| | | |
| | | |
| | | // 设置选中的实验调度 |
| | | if (res.experimentDispatchVO) { |
| | | this.selectedScheduling = { |
| | | ...res.experimentDispatchVO |
| | | ...res.experimentDispatchVO, |
| | | }; |
| | | this.taskTableData = [res.experimentDispatchVO] |
| | | this.taskTableData = [res.experimentDispatchVO]; |
| | | // 获取其他信息 |
| | | await this.getInfomationByDispatchId(res.experimentDispatchVO); |
| | | } |
| | | if (res.experimentDispatchParticipants) { |
| | | // 处理实验人员数据 |
| | | const participants = res.experimentDispatchParticipants || []; |
| | | |
| | | |
| | | // 获取工艺工程师列表 |
| | | this.processEngineers = participants |
| | | .filter(p => p.roleType == 3) // 3=工艺工程师 |
| | | .map(p => ({ |
| | | .filter((p) => p.roleType == 3) // 3=工艺工程师 |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '工艺工程师', |
| | | role: '工艺工程师', |
| | | data: null |
| | | nickName: p.nickName || "工艺工程师", |
| | | role: "工艺工程师", |
| | | data: null, |
| | | })); |
| | | |
| | | // 获取化验师列表 |
| | | this.labTechnicians = participants |
| | | .filter(p => p.roleType == 4) |
| | | .map(p => ({ |
| | | .filter((p) => p.roleType == 4) |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '化验师', |
| | | role: '化验师', |
| | | data: null |
| | | nickName: p.nickName || "化验师", |
| | | role: "化验师", |
| | | data: null, |
| | | })); |
| | | |
| | | // 获取实验员列表 |
| | | this.experimenters = participants |
| | | .filter(p => p.roleType == 5) |
| | | .map(p => ({ |
| | | .filter((p) => p.roleType == 5) |
| | | .map((p) => ({ |
| | | id: p.userId, |
| | | nickName: p.nickName || '实验员', |
| | | role: '实验员', |
| | | data: null |
| | | nickName: p.nickName || "实验员", |
| | | role: "实验员", |
| | | data: null, |
| | | })); |
| | | |
| | | // 处理评分数据 |
| | | if (res.resultWorkEvaluates) { |
| | | res.resultWorkEvaluates.forEach(evaluate => { |
| | | if (evaluate.evaluateType == 1) { // 工艺工程师 |
| | | const engineer = this.processEngineers.find(e => e.id == evaluate.userId); |
| | | res.resultWorkEvaluates.forEach((evaluate) => { |
| | | if (evaluate.evaluateType == 1) { |
| | | // 工艺工程师 |
| | | const engineer = this.processEngineers.find( |
| | | (e) => e.id == evaluate.userId |
| | | ); |
| | | if (engineer) { |
| | | engineer.data = { |
| | | id: evaluate.id, |
| | |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } else if (evaluate.evaluateType == 2) { // 化验师 |
| | | const technician = this.labTechnicians.find(t => t.id == evaluate.userId); |
| | | } else if (evaluate.evaluateType == 2) { |
| | | // 化验师 |
| | | const technician = this.labTechnicians.find( |
| | | (t) => t.id == evaluate.userId |
| | | ); |
| | | if (technician) { |
| | | technician.data = { |
| | | id: evaluate.id, |
| | |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } else if (evaluate.evaluateType == 3) { // 实验员 |
| | | const experimenter = this.experimenters.find(e => e.id == evaluate.userId); |
| | | } else if (evaluate.evaluateType == 3) { |
| | | // 实验员 |
| | | const experimenter = this.experimenters.find( |
| | | (e) => e.id == evaluate.userId |
| | | ); |
| | | if (experimenter) { |
| | | experimenter.data = { |
| | | id: evaluate.id, |
| | |
| | | evaluateFive: evaluate.evaluateFive, |
| | | evaluateSix: evaluate.evaluateSix, |
| | | evaluateTime: evaluate.evaluateTime, |
| | | resultEvaluateJson: evaluate.resultEvaluateJson |
| | | resultEvaluateJson: evaluate.resultEvaluateJson, |
| | | }; |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } catch (error) { |
| | | this.$message.error('获取详情失败'); |
| | | this.$message.error("获取详情失败"); |
| | | } |
| | | }, |
| | | // 判断是否可以评定 |
| | | canEvaluate() { |
| | | const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); |
| | | const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}"); |
| | | const isAdmin = userInfo.roleType == 1; // 1是超级管理员 |
| | | const isApprover = userInfo.roleType == 2; // 2是审批人 |
| | | return (isAdmin || isApprover) && this.form.status == 2; // 2是待评定状态 |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | isView() { |
| | | return this.$route.query.type == 'view'; |
| | | return this.$route.query.type == "view"; |
| | | }, |
| | | |
| | | }, |
| | | }; |
| | | </script> |