Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
| | |
| | | ] |
| | | |
| | | }, |
| | | |
| | | { |
| | | path: "deliveryRecord", |
| | | meta: { |
| | | title: "取样送样记录", |
| | | keepAlive: true, |
| | | }, |
| | | component: () => import("../views/dataManagement/SampleDeliveryRecord/list.vue"), |
| | | }, |
| | | { |
| | | path: "delivery", |
| | | name: "delivery", |
| | | meta: { |
| | | title: "送样详情", |
| | | hide: true, |
| | | keepAlive: true, |
| | | }, |
| | | component: () => import("../views/dataManagement/SampleDeliveryRecord/deliveryRecord"), |
| | | }, |
| | | ], |
| | | }, |
| | | { |
New file |
| | |
| | | <template> |
| | | <el-dialog |
| | | title="发送签字确认" |
| | | :visible.sync="visible" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <div class="receive-dialog"> |
| | | <div class="receive-tip"> |
| | | 您已选中 <span class="sample-count">{{ sampleCount }}</span> 条样品发送,请签字确认 |
| | | </div> |
| | | |
| | | <div class="approval-dialog-approve"> |
| | | <div class="add-group"> |
| | | <div>*</div> |
| | | <span>签字确认</span> |
| | | <el-button type="primary" class="el-icon-plus" @click="openSignature">签名</el-button> |
| | | </div> |
| | | <img |
| | | v-if="imgSrc" |
| | | style="width: 200px; height: 100px; margin-left: 25px" |
| | | :src="imgSrc" |
| | | fit="fit" |
| | | /> |
| | | </div> |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer select-member-footer"> |
| | | <el-button @click="handleClose">取 消</el-button> |
| | | <el-button type="primary" @click="handleConfirm" :disabled="!imgSrc"> |
| | | 确认发送 |
| | | </el-button> |
| | | </div> |
| | | |
| | | <SignatureCanvas |
| | | :visible="signatureDialogVisible" |
| | | @confirm="handleSignatureConfirm" |
| | | @close="signatureDialogVisible = false" |
| | | /> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script> |
| | | import SignatureCanvas from "@/components/SignatureCanvas.vue"; |
| | | |
| | | export default { |
| | | name: "ReceiveConfirmDialog", |
| | | components: { |
| | | SignatureCanvas, |
| | | }, |
| | | props: { |
| | | visible: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | sampleCount: { |
| | | type: Number, |
| | | default: 1, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | signatureDialogVisible: false, |
| | | imgSrc: "", |
| | | }; |
| | | }, |
| | | methods: { |
| | | handleClose() { |
| | | this.$emit("update:visible", false); |
| | | this.imgSrc = ""; |
| | | }, |
| | | openSignature() { |
| | | this.signatureDialogVisible = true; |
| | | }, |
| | | handleSignatureConfirm(imageData) { |
| | | this.signatureDialogVisible = false; |
| | | this.imgSrc = imageData; |
| | | }, |
| | | handleConfirm() { |
| | | if (!this.imgSrc) { |
| | | this.$message.warning("请先完成签名确认"); |
| | | return; |
| | | } |
| | | this.$emit("confirm", this.imgSrc); |
| | | this.handleClose(); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | ::v-deep .el-dialog__header { |
| | | border-bottom: 1px solid #e4e7ed; |
| | | } |
| | | |
| | | .receive-dialog { |
| | | padding: 20px; |
| | | |
| | | .receive-tip { |
| | | font-size: 14px; |
| | | color: #333; |
| | | margin-bottom: 20px; |
| | | |
| | | .sample-count { |
| | | color: #409EFF; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .approval-dialog-approve { |
| | | margin-top: 26px; |
| | | |
| | | img { |
| | | border: 2px dashed #049c9a; |
| | | } |
| | | } |
| | | |
| | | .add-group { |
| | | padding-left: 25px; |
| | | margin-top: 14px; |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 19px; |
| | | |
| | | div { |
| | | color: #f56c6c; |
| | | } |
| | | |
| | | span { |
| | | font-weight: 500; |
| | | font-size: 14px; |
| | | color: #222222; |
| | | line-height: 21px; |
| | | margin: 0 32px 0 8px; |
| | | } |
| | | } |
| | | |
| | | .dialog-footer { |
| | | align-items: center; |
| | | display: flex; |
| | | justify-content: center; |
| | | |
| | | button { |
| | | width: 150px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <Card> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>所属实验调度</div> |
| | | </div> |
| | | <Table :data="schedulingData" :total="schedulingTotal" :height="null"> |
| | | <template> |
| | | <el-table-column |
| | | prop="planCode" |
| | | 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="notifyTime" label="通知时间"></el-table-column> |
| | | <el-table-column |
| | | prop="startTime" |
| | | label="实验开始时间" |
| | | ></el-table-column> |
| | | <el-table-column prop="endTime" label="实验结束时间"></el-table-column> |
| | | <el-table-column prop="participants" label="参加人员"></el-table-column> |
| | | <el-table-column prop="status" label="状态"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | |
| | | <!-- 送样-收样记录部分 --> |
| | | <div class="sample-record-section"> |
| | | <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="showAdditives = !showAdditives" |
| | | > |
| | | {{ showAdditives ? "收起辅料详情" : "展开辅料详情" }} |
| | | </el-button> |
| | | </div> |
| | | <div class="sample-code"> |
| | | 取样单编号:{{ form.sampleCode || "DD-25010BS01" }} |
| | | </div> |
| | | <div class="sample-code">待收样列表</div> |
| | | |
| | | <div class="sample-table"> |
| | | <Table |
| | | :data="sampleList" |
| | | :total="sampleTotal" |
| | | :height="null" |
| | | style="width: 100%" |
| | | > |
| | | <template> |
| | | <el-table-column |
| | | prop="index" |
| | | label="序号" |
| | | width="80" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="processTime" |
| | | label="工艺时间间/h" |
| | | width="120" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sampleName" |
| | | label="取样名称" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sampleCode" |
| | | label="取样样品编号" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="temperature" |
| | | label="温度" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column prop="ph" label="PH" width="100"></el-table-column> |
| | | <el-table-column |
| | | prop="waterAmount" |
| | | label="加水量" |
| | | width="100" |
| | | ></el-table-column> |
| | | <template v-if="showAdditives"> |
| | | <el-table-column |
| | | prop="additive1" |
| | | label="加辅1" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive2" |
| | | label="加辅2" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive3" |
| | | label="加辅3" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive4" |
| | | label="加辅4" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive5" |
| | | label="加辅5" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive6" |
| | | label="加辅6" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive7" |
| | | label="加辅7" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive8" |
| | | label="加辅8" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive9" |
| | | label="加辅9" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive10" |
| | | label="加辅10" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | </template> |
| | | <el-table-column |
| | | prop="sampleAmount" |
| | | label="取样量" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sampleTime" |
| | | label="取样时间" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column prop="photo" label="拍照" width="100"> |
| | | <template slot-scope="scope"> |
| | | <img |
| | | v-if="scope.row.photo" |
| | | :src="scope.row.photo" |
| | | class="sample-photo" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="operator" |
| | | label="操作人" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | label="状态" |
| | | width="100" |
| | | ></el-table-column> |
| | | </template> |
| | | </Table> |
| | | </div> |
| | | <div class="received-samples"> |
| | | <div style="display: flex; align-items: center"> |
| | | <div class="sample-code">已收样列表</div> |
| | | |
| | | <el-button |
| | | type="primary" |
| | | class="el-icon-plus" |
| | | style="margin-left: 16px" |
| | | @click="showReceivedColumns = !showReceivedColumns" |
| | | > |
| | | {{ showReceivedColumns ? "收起辅料详情" : "展开辅料详情" }} |
| | | </el-button> |
| | | </div> |
| | | <Table |
| | | :data="receivedSamples" |
| | | :total="receivedSamplesTotal" |
| | | :height="null" |
| | | style="width: 100%" |
| | | > |
| | | <template> |
| | | <el-table-column |
| | | prop="index" |
| | | label="序号" |
| | | width="80" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sampleName" |
| | | label="取样名称" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sampleCode" |
| | | label="取样样品编号" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="temperature" |
| | | label="温度" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="waterAmount" |
| | | label="加水量" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column prop="ph" label="PH" width="100"></el-table-column> |
| | | <template v-if="showReceivedColumns"> |
| | | <el-table-column |
| | | prop="additive1" |
| | | label="加辅1" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive2" |
| | | label="加辅2" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive3" |
| | | label="加辅3" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive4" |
| | | label="加辅4" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="additive5" |
| | | label="加辅5" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | </template> |
| | | <el-table-column |
| | | prop="sampleAmount" |
| | | label="取样量" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sendTime" |
| | | label="送样时间" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="sender" |
| | | label="送样人" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="receiveTime" |
| | | label="收样时间" |
| | | min-width="150" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="receiver" |
| | | label="收样人" |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | label="状态" |
| | | width="100" |
| | | fixed="right" |
| | | ></el-table-column> |
| | | </template> |
| | | </Table> |
| | | </div> |
| | | </div> |
| | | </Card> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "SampleSubmission", |
| | | data() { |
| | | return { |
| | | showAdditives: true, |
| | | showReceivedColumns: true, |
| | | schedulingData: [ |
| | | { |
| | | planCode: "DD-EX001", |
| | | experimentCode: "DD-EX001", |
| | | experimentName: "名称名称名称", |
| | | notifyTime: "2025-1-2 14:50:19", |
| | | startTime: "2025-02-27", |
| | | endTime: "2025-06-06", |
| | | participants: "张弘, 李天浩, 陈三, 李四", |
| | | status: "已确认", |
| | | }, |
| | | ], |
| | | schedulingTotal: 1, |
| | | form: { |
| | | sampleCode: "DD-25010BS01", |
| | | }, |
| | | sampleList: [ |
| | | { |
| | | index: 1, |
| | | processTime: "2", |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | temperature: "34", |
| | | ph: "34", |
| | | waterAmount: "34", |
| | | additive1: "10g", |
| | | additive2: "5g", |
| | | additive3: "3g", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | sampleAmount: "34", |
| | | sampleTime: "2025-1-9 15:26:08", |
| | | photo: "@/assets/sample-photos/photo1.jpg", |
| | | operator: "张三", |
| | | status: "待发送", |
| | | }, |
| | | { |
| | | index: 2, |
| | | processTime: "4", |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | temperature: "23", |
| | | ph: "23", |
| | | waterAmount: "23", |
| | | additive1: "8g", |
| | | additive2: "4g", |
| | | additive3: "", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | sampleAmount: "23", |
| | | sampleTime: "2025-1-9 15:26:08", |
| | | photo: "@/assets/sample-photos/photo2.jpg", |
| | | operator: "李四", |
| | | status: "待接收", |
| | | }, |
| | | { |
| | | index: 3, |
| | | processTime: "8", |
| | | sampleName: "名称名称名称", |
| | | sampleCode: "314234321", |
| | | temperature: "23", |
| | | ph: "23", |
| | | waterAmount: "23", |
| | | additive1: "", |
| | | additive2: "", |
| | | additive3: "", |
| | | additive4: "", |
| | | additive5: "", |
| | | additive6: "", |
| | | additive7: "", |
| | | additive8: "", |
| | | additive9: "", |
| | | additive10: "", |
| | | sampleAmount: "23", |
| | | sampleTime: "2025-1-9 15:26:08", |
| | | photo: "@/assets/sample-photos/photo3.jpg", |
| | | operator: "王五", |
| | | status: "已接收", |
| | | }, |
| | | ], |
| | | sampleTotal: 3, |
| | | }; |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | .header-title-left { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 13px; |
| | | margin-bottom: 20px; |
| | | |
| | | img { |
| | | width: 12px; |
| | | height: 19px; |
| | | } |
| | | |
| | | div, |
| | | span { |
| | | flex-shrink: 0; |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | color: #222222; |
| | | line-height: 27px; |
| | | font-family: "Source Han Sans CN Bold Bold"; |
| | | } |
| | | |
| | | div:before { |
| | | content: "*"; |
| | | color: #f56c6c; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .el-button { |
| | | margin-left: 16px; |
| | | } |
| | | } |
| | | |
| | | .sample-record-section { |
| | | .sample-code { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 14px; |
| | | color: rgba(0, 0, 0, 0.88); |
| | | margin: 20px 0; |
| | | } |
| | | |
| | | .table-header { |
| | | margin-bottom: 16px; |
| | | text-align: left; |
| | | } |
| | | |
| | | .sample-photo { |
| | | width: 60px; |
| | | height: 60px; |
| | | object-fit: cover; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="list"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total"> |
| | | <template #search> |
| | | <el-form :model="form" labelWidth="auto" inline> |
| | | <el-form-item label="项目课题方案名称:"> |
| | | <el-input v-model="form.planName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="实验编号:"> |
| | | <el-input v-model="form.planCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建人:"> |
| | | <el-input v-model="form.creator" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建时间:"> |
| | | <el-date-picker |
| | | v-model="form.createTime" |
| | | type="daterange" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | value-format="yyyy-MM-dd" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="实验名称:"> |
| | | <el-input v-model="form.planCode" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label=""> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | | <el-button type="primary" @click="handleSearch">查询</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </template> |
| | | <template #setting> |
| | | <div class="tableTitle"> |
| | | <div class="flex a-center"> |
| | | <div class="title">待接收样品列表</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template #table> |
| | | <el-table-column |
| | | prop="planName" |
| | | label="所属项目课题方案" |
| | | ></el-table-column> |
| | | <el-table-column prop="experimentNo" label="实验编号"></el-table-column> |
| | | <el-table-column |
| | | prop="experimentName" |
| | | label="实验名称" |
| | | ></el-table-column> |
| | | <el-table-column prop="sampleNo" label="取样单编号"></el-table-column> |
| | | <el-table-column prop="creator" label="创建人"></el-table-column> |
| | | <el-table-column prop="createTime" label="创建时间"></el-table-column> |
| | | <el-table-column |
| | | prop="sampleStatus" |
| | | label="样品总数/待接收/已接收" |
| | | ></el-table-column> |
| | | <el-table-column label="操作" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleDetail(scope.row)" |
| | | >详情</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </TableCustom> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | name: "ProjectList", |
| | | data() { |
| | | return { |
| | | form: { |
| | | planName: "", |
| | | planCode: "", |
| | | creator: "", |
| | | createTime: [], |
| | | approver: "", |
| | | status: "", |
| | | }, |
| | | tableData: [], |
| | | total: 0, |
| | | // 模拟数据 |
| | | mockListData: [ |
| | | { |
| | | planCode: "PLAN-2024-001", |
| | | planName: "2024年度实验室设备升级方案", |
| | | stage: "规划阶段", |
| | | creator: "张三", |
| | | createTime: "2024-03-15", |
| | | status: "pending", |
| | | approver: "李四", |
| | | approveTime: "2024-03-16", |
| | | }, |
| | | { |
| | | planCode: "PLAN-2024-002", |
| | | planName: "实验室安全管理制度更新方案", |
| | | stage: "实施阶段", |
| | | creator: "王五", |
| | | createTime: "2024-03-14", |
| | | status: "approved", |
| | | approver: "赵六", |
| | | approveTime: "2024-03-15", |
| | | }, |
| | | { |
| | | planCode: "PLAN-2024-003", |
| | | planName: "实验室人员培训计划", |
| | | stage: "准备阶段", |
| | | creator: "孙七", |
| | | createTime: "2024-03-13", |
| | | status: "rejected", |
| | | approver: "周八", |
| | | approveTime: "2024-03-14", |
| | | }, |
| | | ], |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getTableData(); |
| | | }, |
| | | methods: { |
| | | resetForm() { |
| | | this.form = { |
| | | planName: "", |
| | | planCode: "", |
| | | creator: "", |
| | | createTime: [], |
| | | approver: "", |
| | | status: "", |
| | | }; |
| | | }, |
| | | handleSearch() { |
| | | // 实现查询逻辑 |
| | | console.log("查询条件:", this.form); |
| | | this.getTableData(); |
| | | }, |
| | | handleDetail(row) { |
| | | this.$router.push({ |
| | | path: "/dataManagement/delivery", |
| | | query: { |
| | | id: row.id, |
| | | type: "view", |
| | | }, |
| | | }); |
| | | }, |
| | | getTableData() { |
| | | // 获取列表数据 |
| | | this.tableData = this.mockListData; |
| | | this.total = this.mockListData.length; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .list { |
| | | height: 100%; |
| | | } |
| | | |
| | | .flex { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .tableTitle { |
| | | display: flex; |
| | | padding-bottom: 20px; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .title { |
| | | background: #ffffff; |
| | | border-radius: 8px 8px 0px 0px; |
| | | border: 1px solid #049c9a; |
| | | padding: 16px 29px; |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | color: #049c9a; |
| | | width: unset; |
| | | } |
| | | } |
| | | </style> |