| | |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>所属实验调度</div> |
| | | <el-button v-if="isEngineer" @click="showScheduling = true" class="el-icon-plus" type="primary"> |
| | | <el-button v-if="isEngineer && pageType !== 'detail'" @click="showScheduling = true" class="el-icon-plus" type="primary"> |
| | | 选择实验调度</el-button> |
| | | </div> |
| | | <Table :data="schedulingData" :total="schedulingTotal" :height="null"> |
| | | <template> |
| | | <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column> |
| | | <el-table-column prop="planName" label="实验编号"></el-table-column> |
| | | <el-table-column prop="planName" label="实验名称"></el-table-column> |
| | | <el-table-column prop="stage" label="通知时间"></el-table-column> |
| | | <el-table-column prop="stage" label="实验开始时间"></el-table-column> |
| | | <el-table-column prop="stage" label="实验结束时间"></el-table-column> |
| | | <el-table-column prop="stage" label="参加人员"></el-table-column> |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | <el-table-column type="index" label="序号" width="80"></el-table-column> |
| | | <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="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)"> |
| | | {{ getStatusText(scope.row.status) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </Table> |
| | | |
| | |
| | | <!-- 待收样列表 --> |
| | | <div class="pending-samples"> |
| | | <div class="sub-title">待收样列表</div> |
| | | <el-button type="primary" class="batch-receive" @click="handleBatchReceive">批量接收</el-button> |
| | | <Table :data="pendingSamples" :total="pendingSamplesTotal" :height="null" |
| | | @selection-change="handleSelectionChange"> |
| | | <el-button |
| | | type="primary" |
| | | class="batch-receive" |
| | | @click="handleBatchReceive" |
| | | :disabled="selectedSamples.length == 0" |
| | | >批量接收</el-button> |
| | | <Table ref="pendingTable" |
| | | :data="pendingSamples" |
| | | :total="pendingSamplesTotal" |
| | | :height="null" |
| | | :row-key="row => row.id" |
| | | @selection-change="handlePendingSelectionChange"> |
| | | <template> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="sampleName" label="取样名称"></el-table-column> |
| | | <el-table-column prop="sampleCode" label="取样样品编号"></el-table-column> |
| | | <el-table-column prop="ph" label="PH"></el-table-column> |
| | | <el-table-column prop="sampleAmount" label="取样量"></el-table-column> |
| | | <el-table-column prop="sendTime" label="送样时间"></el-table-column> |
| | | <el-table-column prop="sender" label="送样人"></el-table-column> |
| | | <el-table-column prop="status" label="状态"></el-table-column> |
| | | <template v-if="showPendingColumns"> |
| | | <el-table-column |
| | | type="selection" |
| | | width="55" |
| | | fixed="left" > |
| | | </el-table-column> |
| | | <el-table-column type="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="samplingName" label="取样名称" width="150"></el-table-column> |
| | | <el-table-column prop="sampleCode" label="取样样品编号" width="150"></el-table-column> |
| | | <el-table-column prop="temperature" label="温度" width="150"></el-table-column> |
| | | <el-table-column prop="waterAmount" label="加水量" width="150"></el-table-column> |
| | | <el-table-column prop="additive1" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="additive2" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="additive3" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="additive4" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="additive5" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="samplePh" label="PH" width="150"></el-table-column> |
| | | <el-table-column prop="waterAddition" label="加水量" width="150"></el-table-column> |
| | | <template v-if="showPendingColumns"> |
| | | <el-table-column prop="addAuxiliaryOne" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTwo" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryThree" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFour" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFive" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySix" label="加辅6" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySeven" label="加辅7" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryEight" label="加辅8" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryNine" label="加辅9" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTen" label="加辅10" width="150"></el-table-column> |
| | | </template> |
| | | <el-table-column prop="sampleAmount" label="取样量" width="150"></el-table-column> |
| | | <el-table-column prop="pictures" label="拍照" width="150"> |
| | | <template slot-scope="scope"> |
| | | <template v-if="scope.row.pictures"> |
| | | <el-image |
| | | v-for="(url, index) in scope.row.pictures.split(',')" |
| | | :key="index" |
| | | src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" |
| | | :preview-src-list="[url]" |
| | | style="width: 50px; height: 50px;" |
| | | /> |
| | | </template> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="handlePersonName" label="操作人员" width="150"></el-table-column> |
| | | <el-table-column label="状态" prop="status" width="100" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.status == '2' ? '待接收' : '已接收' }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="100" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleReceive(scope.row)">接收</el-button> |
| | |
| | | </template> |
| | | </Table> |
| | | </div> |
| | | |
| | | <!-- 已收样列表 --> |
| | | <div class="received-samples"> |
| | | <div class="sub-title">已收样列表</div> |
| | | <Table :data="receivedSamples" :total="receivedSamplesTotal" :height="null"> |
| | | <Table ref="receivedTable" :data="receivedSamples" :total="receivedSamplesTotal" :height="null"> |
| | | <template> |
| | | <el-table-column prop="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="sampleName" label="取样名称"></el-table-column> |
| | | <el-table-column prop="sampleCode" label="取样样品编号"></el-table-column> |
| | | <el-table-column type="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="samplingName" label="取样名称" width="150"></el-table-column> |
| | | <el-table-column prop="sampleCode" label="取样样品编号" width="150"></el-table-column> |
| | | <el-table-column prop="temperature" label="温度" width="150"></el-table-column> |
| | | <el-table-column prop="waterAmount" label="加水量" width="150"></el-table-column> |
| | | <el-table-column prop="ph" label="PH"></el-table-column> |
| | | <el-table-column prop="samplePh" label="PH" width="150"></el-table-column> |
| | | <el-table-column prop="waterAddition" label="加水量" width="150"></el-table-column> |
| | | <template v-if="showReceivedColumns"> |
| | | <el-table-column prop="additive1" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="additive2" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="additive3" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="additive4" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="additive5" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryOne" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTwo" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryThree" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFour" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFive" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySix" label="加辅6" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySeven" label="加辅7" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryEight" label="加辅8" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryNine" label="加辅9" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTen" label="加辅10" width="150"></el-table-column> |
| | | </template> |
| | | <el-table-column prop="sampleAmount" label="取样量"></el-table-column> |
| | | <el-table-column prop="sendTime" label="送样时间"></el-table-column> |
| | | <el-table-column prop="sender" label="送样人"></el-table-column> |
| | | <el-table-column prop="receiveTime" label="收样时间"></el-table-column> |
| | | <el-table-column prop="receiver" label="收样人"></el-table-column> |
| | | <el-table-column prop="status" label="状态" fixed="right"></el-table-column> |
| | | <el-table-column prop="sampleAmount" label="取样量" width="150"></el-table-column> |
| | | <el-table-column prop="pictures" label="拍照" width="150"> |
| | | <template slot-scope="scope"> |
| | | <template v-if="scope.row.pictures"> |
| | | <el-image |
| | | v-for="(url, index) in scope.row.pictures.split(',')" |
| | | :key="index" |
| | | src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" |
| | | :preview-src-list="[url]" |
| | | style="width: 50px; height: 50px;" |
| | | /> |
| | | </template> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="handlePersonName" label="操作人员" width="150"></el-table-column> |
| | | <el-table-column prop="receiveTime" label="收样时间" width="150"></el-table-column> |
| | | <el-table-column prop="receiver" label="收样人" width="150"></el-table-column> |
| | | <el-table-column label="状态" prop="status" width="100" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.status == '3' ? '已接收' : '待接收' }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </Table> |
| | | </div> |
| | |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>基础信息</span> |
| | | </div> |
| | | <el-form ref="form" :model="form" :rules="rules" inline label-position="top"> |
| | | <el-form ref="form" :model="form" :rules="rules" inline label-position="top" v-if="pageType !== 'detail'"> |
| | | <el-form-item label="取样单编号" prop="sampleCode"> |
| | | <el-input v-model="form.sampleCode" :disabled="true" placeholder="自动生成" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div>取样单编号:{{ form.sampleCode }}</div> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>取样操作记录</span> |
| | | <el-button type="primary" class="el-icon-plus" @click="showAddTime = true"> |
| | | <el-button v-if="isEngineer && pageType !== 'detail'" type="primary" class="el-icon-plus" @click="showAddTime = true"> |
| | | 新增工艺时间 |
| | | </el-button> |
| | | <el-button type="primary" class="el-icon-plus" @click="showAdditives = !showAdditives"> |
| | | {{ showAdditives ? "收起辅料详情" : "展开辅料详情" }} |
| | | </el-button> |
| | | </div> |
| | | <Table :data="sampleData" :total="sampleTotal" :height="null"> |
| | | <Table ref="sampleTable" :data="sampleData" :total="sampleTotal" :height="null"> |
| | | <template> |
| | | <el-table-column prop="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column prop="processTime" label="工艺时间" width="150"></el-table-column> |
| | | <el-table-column prop="sampleName" label="取样名称" width="150"></el-table-column> |
| | | <el-table-column prop="samplingName" label="取样名称" width="150"></el-table-column> |
| | | <el-table-column prop="sampleCode" label="取样样品编号" width="150"></el-table-column> |
| | | <el-table-column prop="temperature" label="温度" width="150"></el-table-column> |
| | | <el-table-column prop="ph" label="PH" width="150"></el-table-column> |
| | | <el-table-column prop="waterAmount" label="加水量" width="150"></el-table-column> |
| | | <el-table-column prop="samplePh" label="PH" width="150"></el-table-column> |
| | | <el-table-column prop="waterAddition" label="加水量" width="150"></el-table-column> |
| | | <template v-if="showAdditives"> |
| | | <el-table-column prop="additive1" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="additive2" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="additive3" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="additive4" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="additive5" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="additive6" label="加辅6" width="150"></el-table-column> |
| | | <el-table-column prop="additive7" label="加辅7" width="150"></el-table-column> |
| | | <el-table-column prop="additive8" label="加辅8" width="150"></el-table-column> |
| | | <el-table-column prop="additive9" label="加辅9" width="150"></el-table-column> |
| | | <el-table-column prop="additive10" label="加辅10" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryOne" label="加辅1" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTwo" label="加辅2" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryThree" label="加辅3" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFour" label="加辅4" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryFive" label="加辅5" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySix" label="加辅6" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliarySeven" label="加辅7" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryEight" label="加辅8" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryNine" label="加辅9" width="150"></el-table-column> |
| | | <el-table-column prop="addAuxiliaryTen" label="加辅10" width="150"></el-table-column> |
| | | </template> |
| | | <el-table-column prop="sampleAmount" label="取样量" width="150"></el-table-column> |
| | | <el-table-column prop="sampleTime" label="取样时间" width="150"></el-table-column> |
| | | <el-table-column prop="remark" label="拍照" width="150"></el-table-column> |
| | | <el-table-column prop="operator" label="操作人员" width="150"></el-table-column> |
| | | <el-table-column prop="pictures" label="拍照" width="150"> |
| | | <template slot-scope="scope"> |
| | | <template v-if="scope.row.pictures"> |
| | | <el-image |
| | | v-for="(url, index) in scope.row.pictures.split(',')" |
| | | :key="index" |
| | | :src="url" |
| | | :preview-src-list="[url]" |
| | | style="width: 50px; height: 50px;" |
| | | /> |
| | | </template> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="handlePersonName" label="操作人员" width="150"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="add-project-footer"> |
| | | <div v-if="pageType == 'detail'" style="margin-top: 38px">备注:</div> |
| | | <el-input |
| | | v-if="pageType == 'detail'" |
| | | type="textarea" |
| | | |
| | | v-model="form.remark" |
| | | placeholder="请输入内容" |
| | | style="margin-top: 10px" |
| | | :disabled="true" |
| | | /> |
| | | |
| | | <div class="add-project-footer" v-if="isEngineer && pageType !== 'detail'"> |
| | | <el-button type="primary" class="save-btn" @click="handleSave">保存</el-button> |
| | | <el-button>存草稿</el-button> |
| | | <el-button @click="handleSaveDraft">存草稿</el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <experimentalScheduling :show="showScheduling" /> |
| | | <experimentalScheduling :show="showScheduling" @close="handleSchedulingClose" @submit="handleSchedulingSubmit" /> |
| | | <addTime :show.sync="showAddTime" @confirm="handleAddTime" /> |
| | | <receive-confirm-dialog :visible.sync="showReceiveConfirm" :sample-count="selectedSamples.length" |
| | | @confirm="confirmReceive" /> |
| | |
| | | import experimentalScheduling from "./components/experimental-scheduling.vue"; |
| | | import addTime from "./components/addTime.vue"; |
| | | import ReceiveConfirmDialog from "./components/receiveConfirmDialog.vue"; |
| | | import { add, getDetail, update, batchCollectSamples } from "./service"; |
| | | |
| | | export default { |
| | | name: "AddSample", |
| | |
| | | showReceivedColumns: true, |
| | | schedulingData: [], |
| | | schedulingTotal: 0, |
| | | sampleData: [ |
| | | { |
| | | index: 1, |
| | | processTime: "2h", |
| | | sampleName: "样品A", |
| | | sampleCode: "SP001", |
| | | temperature: "25℃", |
| | | ph: "7.0", |
| | | waterAmount: "500ml", |
| | | additive1: "10g", |
| | | additive2: "5g", |
| | | additive3: "3g", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | sampleAmount: "100ml", |
| | | sampleTime: "2024-03-20 10:00:00", |
| | | remark: "", |
| | | operator: "张三", |
| | | }, |
| | | { |
| | | index: 2, |
| | | processTime: "4min", |
| | | sampleName: "样品B", |
| | | sampleCode: "SP002", |
| | | temperature: "30℃", |
| | | ph: "6.5", |
| | | waterAmount: "300ml", |
| | | additive1: "8g", |
| | | additive2: "4g", |
| | | additive3: "", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | sampleAmount: "50ml", |
| | | sampleTime: "2024-03-20 10:30:00", |
| | | remark: "", |
| | | operator: "李四", |
| | | }, |
| | | ], |
| | | sampleTotal: 2, |
| | | sampleData: [], |
| | | sampleTotal: 0, |
| | | form: { |
| | | sampleCode: "", |
| | | dispatchId: "", // 实验调度id |
| | | samplingCode: "", // 取样单编号 |
| | | status: 1, // 状态:1=已发送待提交 |
| | | samplingRecordOperations: [], // 取样操作记录集合 |
| | | remark: "", // 备注,json存储 |
| | | }, |
| | | rules: { |
| | | sampleCode: [ |
| | | { required: true, message: "请输入取样单编号", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | userRole: "assayer", // engineer默认设置为工程师assayer化验师 |
| | | userRole: '', // 修改初始值为空字符串 |
| | | // 化验师相关数据 |
| | | pendingSamples: [ |
| | | { |
| | | index: 1, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "5", |
| | | sampleAmount: "34", |
| | | sendTime: "2025-1-9 15:26:08", |
| | | sender: "李四", |
| | | status: "待接收", |
| | | }, |
| | | { |
| | | index: 2, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "6", |
| | | sampleAmount: "23", |
| | | sendTime: "2025-1-9 15:26:08", |
| | | sender: "李四", |
| | | status: "待接收", |
| | | }, |
| | | { |
| | | index: 3, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "7", |
| | | sampleAmount: "23", |
| | | sendTime: "2025-1-13 16:38:17", |
| | | sender: "李四", |
| | | status: "待接收", |
| | | }, |
| | | ], |
| | | pendingSamplesTotal: 3, |
| | | receivedSamples: [ |
| | | { |
| | | index: 1, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "5", |
| | | sampleAmount: "34", |
| | | sendTime: "2025-1-9 15:26:08", |
| | | sender: "李四", |
| | | receiveTime: "2025-1-15 14:00:50", |
| | | receiver: "段向蒙", |
| | | status: "已接收", |
| | | }, |
| | | { |
| | | index: 2, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "6", |
| | | sampleAmount: "23", |
| | | sendTime: "2025-1-9 15:26:08", |
| | | sender: "李四", |
| | | receiveTime: "2025-1-15 14:00:50", |
| | | receiver: "傅彦涛", |
| | | status: "已接收", |
| | | }, |
| | | { |
| | | index: 3, |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | ph: "7", |
| | | sampleAmount: "23", |
| | | sendTime: "2025-1-13 16:38:17", |
| | | sender: "李四", |
| | | receiveTime: "2025-1-15 14:00:50", |
| | | receiver: "王乐康", |
| | | status: "已接收", |
| | | }, |
| | | ], |
| | | receivedSamplesTotal: 3, |
| | | pendingSamples: [], |
| | | pendingSamplesTotal: 0, |
| | | receivedSamples: [], |
| | | receivedSamplesTotal: 0, |
| | | selectedSamples: [], |
| | | // 状态映射表 |
| | | statusTypeMap: { |
| | | "-1": "info", |
| | | "1": "warning", |
| | | "2": "success", |
| | | "3": "info" |
| | | }, |
| | | statusTextMap: { |
| | | "-1": "草稿箱", |
| | | "1": "待确认", |
| | | "2": "已确认", |
| | | "3": "已封存" |
| | | }, |
| | | // 页面类型:add-新增,edit-编辑,detail-详情 |
| | | pageType: 'add', |
| | | }; |
| | | }, |
| | | created() { |
| | | const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); |
| | | this.userRole = userInfo.roleType || ''; |
| | | |
| | | // 获取路由参数 |
| | | const { id, type } = this.$route.query; |
| | | if (id) { |
| | | this.pageType = type || 'detail'; |
| | | this.getDetailData(id); |
| | | } |
| | | }, |
| | | computed: { |
| | | isEngineer() { |
| | | return this.userRole === "engineer"; |
| | | return this.userRole == '3'; // 工艺工程师 |
| | | }, |
| | | isAssayer() { |
| | | return this.userRole === "assayer"; |
| | | return this.userRole == '4'; // 化验师 |
| | | }, |
| | | }, |
| | | methods: { |
| | | // 获取详情数据 |
| | | async getDetailData(id) { |
| | | try { |
| | | const res = await getDetail({ id }); |
| | | if (res) { |
| | | const detail = res; |
| | | console.log('获取到的详情数据:', detail); |
| | | |
| | | // 设置表单数据 |
| | | this.form = { |
| | | ...this.form, |
| | | ...detail, |
| | | dispatchId: detail.dispatchId, |
| | | sampleCode: detail.samplingCode, |
| | | }; |
| | | |
| | | // 设置实验调度数据 |
| | | if (detail.experimentDispatch) { |
| | | this.schedulingData = [detail.experimentDispatch]; |
| | | } |
| | | |
| | | // 设置取样操作记录 |
| | | if (detail.samplingRecordOperations && detail.samplingRecordOperations.length > 0) { |
| | | console.log('原始取样操作记录:', detail.samplingRecordOperations); |
| | | |
| | | // 如果是化验师角色,需要将数据分为待接收和已接收 |
| | | if (this.isAssayer) { |
| | | // 确保status是字符串类型 |
| | | this.pendingSamples = detail.samplingRecordOperations |
| | | .filter(item => { |
| | | const status = String(item.status); |
| | | console.log('过滤待接收样品:', item.id, status); |
| | | return status === '2'; |
| | | }) |
| | | .map(item => ({ |
| | | ...item, |
| | | status: String(item.status) |
| | | })); |
| | | console.log('处理后的待接收样品:', this.pendingSamples); |
| | | this.pendingSamplesTotal = this.pendingSamples.length; |
| | | |
| | | this.receivedSamples = detail.samplingRecordOperations |
| | | .filter(item => String(item.status) === '3') |
| | | .map(item => ({ |
| | | ...item, |
| | | status: String(item.status) |
| | | })); |
| | | this.receivedSamplesTotal = this.receivedSamples.length; |
| | | } else { |
| | | // 工程师角色保持原有逻辑 |
| | | this.sampleData = detail.samplingRecordOperations.map((item, index) => ({ |
| | | ...item, |
| | | index: index + 1, |
| | | status: String(item.status) |
| | | })); |
| | | } |
| | | } |
| | | |
| | | // 如果是详情模式,禁用所有输入 |
| | | if (this.pageType == 'detail') { |
| | | this.$nextTick(() => { |
| | | const inputs = document.querySelectorAll('input, textarea, select'); |
| | | inputs.forEach(input => { |
| | | input.disabled = true; |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('获取详情失败:', error); |
| | | this.$message.error('获取详情失败,请重试'); |
| | | } |
| | | }, |
| | | handleAddTime(processTime) { |
| | | const newRow = { |
| | | index: this.sampleData.length + 1, |
| | | processTime, |
| | | sampleName: "", |
| | | samplingName: "", |
| | | sampleCode: "", |
| | | temperature: "", |
| | | ph: "", |
| | | waterAmount: "", |
| | | additive1: "", |
| | | additive2: "", |
| | | additive3: "", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | samplePh: "", |
| | | waterAddition: "", |
| | | addAuxiliaryOne: "", |
| | | addAuxiliaryTwo: "", |
| | | addAuxiliaryThree: "", |
| | | addAuxiliaryFour: "", |
| | | addAuxiliaryFive: "", |
| | | addAuxiliarySix: "", |
| | | addAuxiliarySeven: "", |
| | | addAuxiliaryEight: "", |
| | | addAuxiliaryNine: "", |
| | | addAuxiliaryTen: "", |
| | | sampleAmount: "", |
| | | sampleTime: "", |
| | | remark: "", |
| | | operator: "", |
| | | pictures: "", |
| | | handlePersonId: "", |
| | | status: 1 // 1=待发送 |
| | | }; |
| | | this.sampleData.push(newRow); |
| | | this.$message.success("添加工艺时间成功"); |
| | | }, |
| | | handleSave() { |
| | | this.submitForm(); |
| | | // 验证是否选择了实验调度 |
| | | if (!this.schedulingData || this.schedulingData.length == 0) { |
| | | this.$message.warning('请选择所属实验调度'); |
| | | return; |
| | | } |
| | | |
| | | // 验证是否有取样操作记录 |
| | | if (!this.sampleData || this.sampleData.length == 0) { |
| | | this.$message.warning('请至少添加一条取样操作记录'); |
| | | return; |
| | | } |
| | | |
| | | this.$refs.form.validate(async (valid) => { |
| | | if (valid) { |
| | | try { |
| | | // 获取当前用户信息 |
| | | const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); |
| | | |
| | | // 构建提交数据 |
| | | const submitData = { |
| | | ...this.form, |
| | | dispatchId: this.schedulingData[0].id, |
| | | status: 1, // 正常保存状态为1 |
| | | samplingRecordOperations: this.sampleData.map(item => ({ |
| | | ...item, |
| | | handlePersonId: userInfo.userId, |
| | | status: 1 // 1=待发送 |
| | | })), |
| | | remark: this.form.remark, |
| | | samplingCode: this.form.sampleCode, |
| | | id: this.form.id, |
| | | }; |
| | | |
| | | // 打印提交数据 |
| | | console.log('保存提交数据:',submitData); |
| | | |
| | | let res; |
| | | if (this.pageType == 'edit') { |
| | | // 编辑模式调用update接口 |
| | | res = await update(submitData); |
| | | } else { |
| | | // 新增模式调用add接口 |
| | | res = await add(submitData); |
| | | } |
| | | |
| | | if (res.code == 200) { |
| | | this.$message.success(this.pageType == 'edit' ? '编辑成功' : '保存成功'); |
| | | this.$router.go(-1); |
| | | } else { |
| | | this.$message.error(res.msg || (this.pageType == 'edit' ? '编辑失败' : '保存失败')); |
| | | } |
| | | } catch (error) { |
| | | console.error(this.pageType == 'edit' ? '编辑失败:' : '保存失败:', error); |
| | | this.$message.error(this.pageType == 'edit' ? '编辑失败,请重试' : '保存失败,请重试'); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | submitForm() { |
| | | // 在这里实现表单提交逻辑 |
| | | console.log("提交表单数据"); |
| | | this.$message.success("保存成功"); |
| | | // 添加存草稿方法 |
| | | async handleSaveDraft() { |
| | | try { |
| | | // 获取当前用户信息 |
| | | const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}'); |
| | | |
| | | // 构建提交数据 |
| | | const submitData = { |
| | | dispatchId: this.schedulingData?.[0]?.id || '', |
| | | status: -1, // 存草稿状态为-1 |
| | | samplingRecordOperations: (this.sampleData || []).map(item => ({ |
| | | ...item, |
| | | handlePersonId: userInfo.userId, |
| | | status: 1 // 1=待发送 |
| | | })), |
| | | remark: this.form.remark, |
| | | samplingCode: this.form.sampleCode, |
| | | id: this.form.id, |
| | | }; |
| | | |
| | | // 打印提交数据 |
| | | console.log('草稿提交数据:', submitData); |
| | | |
| | | let res; |
| | | if (this.pageType == 'edit') { |
| | | // 编辑模式调用update接口 |
| | | res = await update(submitData); |
| | | } else { |
| | | // 新增模式调用add接口 |
| | | res = await add(submitData); |
| | | } |
| | | |
| | | if (res.code == 200) { |
| | | this.$message.success(this.pageType == 'edit' ? '草稿保存成功' : '存草稿成功'); |
| | | this.$router.go(-1); |
| | | } else { |
| | | this.$message.error(res.msg || (this.pageType == 'edit' ? '草稿保存失败' : '存草稿失败')); |
| | | } |
| | | } catch (error) { |
| | | console.error(this.pageType == 'edit' ? '草稿保存失败:' : '存草稿失败:', error); |
| | | this.$message.error(this.pageType == 'edit' ? '草稿保存失败,请重试' : '存草稿失败,请重试'); |
| | | } |
| | | }, |
| | | handleSelectionChange(selection) { |
| | | handlePendingSelectionChange(selection) { |
| | | console.log("pending selection change:", selection); |
| | | console.log("pending samples data:", this.pendingSamples); |
| | | this.selectedSamples = selection; |
| | | // 强制更新视图 |
| | | this.$nextTick(() => { |
| | | this.$forceUpdate(); |
| | | }); |
| | | }, |
| | | handleReceive(row) { |
| | | // 清空之前的选择 |
| | | this.selectedSamples = []; |
| | | // 设置当前行为选中状态 |
| | | this.selectedSamples = [row]; |
| | | this.showReceiveConfirm = true; |
| | | }, |
| | | handleBatchReceive() { |
| | | if (this.selectedSamples.length === 0) { |
| | | if (this.selectedSamples.length == 0) { |
| | | this.$message.warning("请先选择要接收的样品"); |
| | | return; |
| | | } |
| | | this.showReceiveConfirm = true; |
| | | }, |
| | | confirmReceive(signature) { |
| | | // 这里处理接收确认逻辑 |
| | | const sampleIds = this.selectedSamples.map((item) => item.id); |
| | | console.log("接收样品", { sampleIds, signature }); |
| | | // 获取选中样品的ID并拼接 |
| | | const recordOperationIds = this.selectedSamples.map(item => item.id).join(','); |
| | | |
| | | // 模拟接收成功 |
| | | // 调用批量收样接口 |
| | | batchCollectSamples({ |
| | | receiptsSign: signature, |
| | | recordOperationId: recordOperationIds |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success(`成功接收 ${this.selectedSamples.length} 个样品`); |
| | | |
| | | // 更新数据 |
| | | this.selectedSamples.forEach((sample) => { |
| | | const index = this.pendingSamples.findIndex( |
| | | (item) => item.id === sample.id |
| | | ); |
| | | if (index > -1) { |
| | | this.pendingSamples.splice(index, 1); |
| | | this.receivedSamples.unshift({ |
| | | ...sample, |
| | | receiveTime: new Date().toLocaleString(), |
| | | receiver: "当前用户", |
| | | status: "已接收", |
| | | }); |
| | | // 重新获取详情数据 |
| | | this.getDetailData(this.form.id); |
| | | } else { |
| | | this.$message.error(res.msg || '收样失败'); |
| | | } |
| | | }); |
| | | |
| | | // 清空选择 |
| | | }).catch(error => { |
| | | console.error('收样失败:', error); |
| | | this.$message.error('收样失败,请重试'); |
| | | }).finally(() => { |
| | | // 清空选择并关闭弹窗 |
| | | this.selectedSamples = []; |
| | | this.showReceiveConfirm = false; |
| | | }); |
| | | }, |
| | | getStatusType(status) { |
| | | return this.statusTypeMap[status] || 'info'; |
| | | }, |
| | | getStatusText(status) { |
| | | return this.statusTextMap[status] || '未知状态'; |
| | | }, |
| | | handleSchedulingClose() { |
| | | this.showScheduling = false; |
| | | }, |
| | | handleSchedulingSubmit(data) { |
| | | this.schedulingData = data || []; |
| | | |
| | | }, |
| | | isSelectable(row) { |
| | | console.log('isSelectable row:', row); |
| | | console.log('row status:', row.status, typeof row.status); |
| | | const result = String(row.status) === '2'; |
| | | console.log('isSelectable result:', result); |
| | | return result; |
| | | }, |
| | | }, |
| | | }; |