<template>
|
<Card>
|
<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>
|
</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>
|
</template>
|
</Table>
|
|
<!-- 化验师专用部分 -->
|
<div v-if="isAssayer" class="assayer-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="showPendingColumns = !showPendingColumns">
|
{{ showPendingColumns ? "收起待收样详情" : "展开待收样详情" }}
|
</el-button>
|
<el-button type="primary" class="el-icon-plus" @click="showReceivedColumns = !showReceivedColumns">
|
{{ showReceivedColumns ? "收起已收样详情" : "展开已收样详情" }}
|
</el-button>
|
</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>
|
<template v-if="showPendingColumns">
|
<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>
|
</template>
|
<el-table-column label="操作" width="100" fixed="right">
|
<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="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>
|
<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>
|
</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>
|
</template>
|
</Table>
|
</div>
|
</div>
|
|
<!-- 工程师部分 -->
|
<div v-if="isEngineer">
|
<div class="header-title-left" style="margin-top: 38px">
|
<img src="@/assets/public/headercard.png" />
|
<span>基础信息</span>
|
</div>
|
<el-form ref="form" :model="form" :rules="rules" inline label-position="top">
|
<el-form-item label="取样单编号" prop="sampleCode">
|
<el-input v-model="form.sampleCode" :disabled="true" placeholder="自动生成" />
|
</el-form-item>
|
</el-form>
|
<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>
|
<el-button type="primary" class="el-icon-plus" @click="showAdditives = !showAdditives">
|
{{ showAdditives ? "收起辅料详情" : "展开辅料详情" }}
|
</el-button>
|
</div>
|
<Table :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="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>
|
<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>
|
</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>
|
</template>
|
</Table>
|
<div class="add-project-footer">
|
<el-button type="primary" class="save-btn" @click="handleSave">保存</el-button>
|
<el-button>存草稿</el-button>
|
</div>
|
</div>
|
|
<experimentalScheduling :show="showScheduling" />
|
<addTime :show.sync="showAddTime" @confirm="handleAddTime" />
|
<receive-confirm-dialog :visible.sync="showReceiveConfirm" :sample-count="selectedSamples.length"
|
@confirm="confirmReceive" />
|
</Card>
|
</template>
|
|
<script>
|
import experimentalScheduling from "./components/experimental-scheduling.vue";
|
import addTime from "./components/addTime.vue";
|
import ReceiveConfirmDialog from "./components/receiveConfirmDialog.vue";
|
|
export default {
|
name: "AddSample",
|
components: {
|
experimentalScheduling,
|
addTime,
|
ReceiveConfirmDialog,
|
},
|
data() {
|
return {
|
showScheduling: false,
|
showAddTime: false,
|
showAdditives: true,
|
showReceiveConfirm: false,
|
showPendingColumns: true,
|
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,
|
form: {
|
sampleCode: "",
|
},
|
rules: {
|
sampleCode: [
|
{ required: true, message: "请输入取样单编号", trigger: "blur" },
|
],
|
},
|
userRole: "assayer", // engineer默认设置为工程师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: {
|
isEngineer() {
|
return this.userRole === "engineer";
|
},
|
isAssayer() {
|
return this.userRole === "assayer";
|
},
|
},
|
methods: {
|
handleAddTime(processTime) {
|
const newRow = {
|
index: this.sampleData.length + 1,
|
processTime,
|
sampleName: "",
|
sampleCode: "",
|
temperature: "",
|
ph: "",
|
waterAmount: "",
|
additive1: "",
|
additive2: "",
|
additive3: "",
|
additive4: "",
|
additive5: "",
|
additive6: "",
|
additive7: "",
|
additive8: "",
|
additive9: "",
|
additive10: "",
|
sampleAmount: "",
|
sampleTime: "",
|
remark: "",
|
operator: "",
|
};
|
this.sampleData.push(newRow);
|
this.$message.success("添加工艺时间成功");
|
},
|
handleSave() {
|
this.submitForm();
|
},
|
submitForm() {
|
// 在这里实现表单提交逻辑
|
console.log("提交表单数据");
|
this.$message.success("保存成功");
|
},
|
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>
|
|
<style lang="less" scoped>
|
.header-title-left {
|
display: flex;
|
align-items: center;
|
gap: 13px;
|
margin-bottom: 20px;
|
|
.el-button {
|
margin-left: 0;
|
}
|
|
img {
|
width: 12px;
|
height: 19px;
|
}
|
|
div {
|
flex-shrink: 0;
|
font-weight: bold;
|
font-size: 18px;
|
color: #222222;
|
line-height: 27px;
|
font-family: "Source Han Sans CN Bold Bold";
|
|
&:before {
|
content: "*";
|
color: #f56c6c;
|
margin-right: 4px;
|
}
|
}
|
|
span {
|
flex-shrink: 0;
|
font-weight: bold;
|
font-size: 18px;
|
color: #222222;
|
line-height: 27px;
|
font-family: "Source Han Sans CN Bold Bold";
|
}
|
}
|
|
.add-project-footer {
|
margin-top: 43px;
|
|
button {
|
width: 220px;
|
}
|
|
.save-btn {
|
margin-right: 20px;
|
}
|
}
|
|
.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>
|