| | |
| | | <el-table-column prop="creator" label="状态"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>基础信息</span> |
| | | |
| | | <!-- 化验师专用部分 --> |
| | | <div v-if="isAssayer" class="assayer-section"> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>送样-收样记录</span> |
| | | </div> |
| | | <div class="sample-code">取样单编号:{{ form.sampleCode || 'DD-25010BS01' }}</div> |
| | | |
| | | <!-- 待收样列表 --> |
| | | <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"> |
| | | <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> |
| | | <el-table-column label="操作" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleReceive(scope.row)">接收</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | | </Table> |
| | | </div> |
| | | |
| | | <!-- 已收样列表 --> |
| | | <div class="received-samples"> |
| | | <div class="sub-title">已收样列表</div> |
| | | <Table :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 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="receiveTime" label="收样时间"></el-table-column> |
| | | <el-table-column prop="receiver" label="收样人"></el-table-column> |
| | | <el-table-column prop="status" label="状态"></el-table-column> |
| | | </template> |
| | | </Table> |
| | | </div> |
| | | </div> |
| | | <el-form |
| | | v-if="!isExperimenter" |
| | | ref="form" |
| | | :model="form" |
| | | :rules="rules" |
| | | inline |
| | | label-position="top" |
| | | > |
| | | <el-form-item label="取样单编号" prop="sampleCode"> |
| | | <el-input |
| | | v-model="form.sampleCode" |
| | | :disabled="!isExperimenter" |
| | | :placeholder="isExperimenter ? '请输入取样单编号' : '自动生成'" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div v-else class="number">取样单编号:213421241</div> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>取样操作记录</span> |
| | | <el-button |
| | | v-if="isEngineer" |
| | | type="primary" |
| | | class="el-icon-plus" |
| | | @click="showAddTime = true" |
| | | |
| | | <!-- 非化验师部分 --> |
| | | <div v-if="!isAssayer"> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>基础信息</span> |
| | | </div> |
| | | <el-form |
| | | v-if="!isExperimenter" |
| | | ref="form" |
| | | :model="form" |
| | | :rules="rules" |
| | | inline |
| | | label-position="top" |
| | | > |
| | | 新增工艺时间 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | class="el-icon-plus" |
| | | @click="showAdditives = !showAdditives" |
| | | > |
| | | {{ showAdditives ? "收起辅料详情" : "展开辅料详情" }} |
| | | </el-button> |
| | | <el-form-item label="取样单编号" prop="sampleCode"> |
| | | <el-input |
| | | v-model="form.sampleCode" |
| | | :disabled="!isExperimenter" |
| | | :placeholder="isExperimenter ? '请输入取样单编号' : '自动生成'" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div v-else class="number">取样单编号:213421241</div> |
| | | <div class="header-title-left" style="margin-top: 38px"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <span>取样操作记录</span> |
| | | <el-button |
| | | v-if="isEngineer" |
| | | 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> |
| | | </div> |
| | | <Table :data="sampleData" :total="sampleTotal" :height="null"> |
| | | <Table v-if="!isAssayer" :data="sampleData" :total="sampleTotal" :height="null"> |
| | | <template> |
| | | <el-table-column prop="index" label="序号" width="80"></el-table-column> |
| | | <el-table-column |
| | |
| | | </el-table-column> |
| | | </template> |
| | | </Table> |
| | | <div class="remark-section" v-if="isExperimenter"> |
| | | <div class="remark-section" v-if="isExperimenter && !isAssayer"> |
| | | <el-form :model="form" label-position="top"> |
| | | <el-form-item label="备注"> |
| | | <el-input |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="add-project-footer"> |
| | | <div class="add-project-footer" v-if="!isAssayer"> |
| | | <el-button type="primary" class="save-btn" @click="handleSave">保存</el-button> |
| | | <el-button>存草稿</el-button> |
| | | </div> |
| | |
| | | :sample-data="sampleData" |
| | | @confirm="handleConfirm" |
| | | /> |
| | | <receive-confirm-dialog |
| | | :visible.sync="showReceiveConfirm" |
| | | :sample-count="selectedSamples.length" |
| | | @confirm="confirmReceive" |
| | | /> |
| | | </Card> |
| | | </template> |
| | | |
| | |
| | | import addTime from "./components/addTime.vue"; |
| | | import SampleDialog from "./components/sampleDialog.vue"; |
| | | import ConfirmDialog from './components/confirmDialog.vue'; |
| | | import ReceiveConfirmDialog from './components/receiveConfirmDialog.vue' |
| | | |
| | | export default { |
| | | name: "AddConfirmationSheet", |
| | |
| | | addTime, |
| | | SampleDialog, |
| | | ConfirmDialog, |
| | | ReceiveConfirmDialog |
| | | }, |
| | | props: {}, |
| | | data() { |
| | |
| | | showAdditives: true, |
| | | showSampleDialog: false, |
| | | showConfirmDialog: false, |
| | | showReceiveConfirm: false, |
| | | currentSampleData: {}, |
| | | currentEditIndex: -1, |
| | | schedulingData: [], // 实验调度表格数据 |
| | | schedulingData: [], |
| | | schedulingTotal: 0, |
| | | sampleData: [ |
| | | { |
| | |
| | | sampleAmount: "100ml", |
| | | sampleTime: "2024-03-20 10:00:00", |
| | | remark: "", |
| | | operator: "张三", |
| | | operator: "张三" |
| | | }, |
| | | { |
| | | index: 2, |
| | |
| | | ], |
| | | }, |
| | | menu: [], |
| | | userRole: "experimenter", // 用户角色,可以是 'engineer' 或 'experimenter' |
| | | userRole: "assayer", // 用户角色,可以是 'engineer'、'experimenter' 或 'assayer' |
| | | // 化验师相关数据 |
| | | 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, |
| | | selectedSamples: [] |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | isExperimenter() { |
| | | return this.userRole === "experimenter"; |
| | | }, |
| | | isAssayer() { |
| | | return this.userRole === "assayer"; |
| | | }, |
| | | }, |
| | | watch: {}, |
| | |
| | | this.$message.success('保存成功'); |
| | | this.showConfirmDialog = false; |
| | | }, |
| | | handleSelectionChange(selection) { |
| | | this.selectedSamples = selection; |
| | | }, |
| | | handleReceive(row) { |
| | | this.selectedSamples = [row]; |
| | | this.showReceiveConfirm = true; |
| | | }, |
| | | handleBatchReceive() { |
| | | 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 }); |
| | | |
| | | // 模拟接收成功 |
| | | 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.selectedSamples = []; |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | margin: 0 32px 0 8px; |
| | | } |
| | | } |
| | | |
| | | .assayer-section { |
| | | .sample-code { |
| | | font-family: PingFangSC, PingFang SC; |
| | | font-weight: 400; |
| | | font-size: 14px; |
| | | color: rgba(0,0,0,0.88); |
| | | margin: 20px 0; |
| | | } |
| | | |
| | | .sub-title { |
| | | font-size: 16px; |
| | | font-weight: 500; |
| | | color: #333; |
| | | margin: 20px 0; |
| | | display: inline-block; |
| | | } |
| | | |
| | | .batch-receive { |
| | | float: right; |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .pending-samples, .received-samples { |
| | | // margin-top: 20px; |
| | | } |
| | | } |
| | | </style> |