| | |
| | | <div style="display: flex; align-items: center"> |
| | | <el-button v-if="state == 1" size="small" type="primary" @click="openAddUnpass">新增不合格复测</el-button> |
| | | <el-button v-if="state == 1" size="small" type="primary" @click="unpassCheck">不合格复测</el-button> |
| | | <el-button v-if="state > 1" size="small" type="primary" @click="viewUnpassCheck">查看不合格复测</el-button> |
| | | <span v-if="cableTagList.length > 0"> 电缆配置:</span> |
| | | <el-select v-if="cableTagList.length > 0" v-model="currentTab" clearable placeholder="请选择" size="small" |
| | | @change="(m) => handleChangeCableTag(currentSample.id, 0, 'cableTag', m) |
| | |
| | | <span class="template-panel__unit">℃</span> |
| | | </el-form-item> |
| | | <el-form-item label="检测时间:"> |
| | | <el-date-picker v-model="currentOtherForm.detectionTime" :disabled="state > 1" type="date" |
| | | value-format="YYYY-MM-DD" placeholder="请选择日期" size="small" style="width: 160px" |
| | | @change="m => subOtherForm(m, 'detectionTime')" /> |
| | | <el-date-picker v-model="currentOtherForm.detectionTimeRange" :disabled="state > 1" type="daterange" |
| | | value-format="YYYY-MM-DD" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" size="small" style="width: 260px" |
| | | @change="m => subOtherForm(m, 'detectionTimeRange')" /> |
| | | </el-form-item> |
| | | <el-form-item label="检测地点:"> |
| | | <el-input v-model="currentOtherForm.detectionPlace" :disabled="state > 1" clearable |
| | |
| | | </el-form-item> |
| | | <el-form-item label="设备:"> |
| | | <el-select v-model="currentOtherForm.deviceIds" :disabled="state != 1" multiple filterable clearable |
| | | placeholder="请选择设备" size="small" style="width: 360px" |
| | | class="device-select" placeholder="请选择设备" size="small" |
| | | style="width: 360px !important; min-width: 360px; flex: 0 0 360px" |
| | | @change="m => subOtherForm(m, 'deviceIds')"> |
| | | <el-option v-for="device in orderDeviceOptions" :key="device.id" :label="device.label" |
| | | :value="device.id" /> |
| | |
| | | <script> |
| | | // Vue3 没有 this.$createElement(下面用 h 造 VNode 当 $msgbox 的 message) |
| | | import { h } from 'vue' |
| | | import { readDetectionTimeRange, isCompleteDetectionTimeRange, toDetectionTimePayload } from '@/utils/detectionTimeRange' |
| | | import excelFunction from "@/utils/excelFountion"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import UnPassDialog from "../unpass/components/unPassDialog.vue"; |
| | |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 0, |
| | | current: 1, |
| | | }, |
| | | tableLoading: false, |
| | | // 文件列表相关--结束 |
| | |
| | | currentOtherForm() { |
| | | return this.otherForm[this.currentTable] || { |
| | | temperature: null, |
| | | detectionTime: null, |
| | | detectionTimeRange: null, |
| | | detectionPlace: null, |
| | | deviceIds: [], |
| | | insResult: null, |
| | |
| | | (this.insOrder.templateConditions || []).forEach((item) => { |
| | | this.otherForm[item.templateId] = { |
| | | temperature: item.temperature != null ? item.temperature : null, |
| | | detectionTime: item.detectionTime != null ? item.detectionTime : null, |
| | | detectionTimeRange: readDetectionTimeRange(item), |
| | | detectionPlace: item.detectionPlace != null ? item.detectionPlace : null, |
| | | deviceIds: Array.isArray(item.deviceIds) ? [...item.deviceIds] : [], |
| | | insResult: item.insResult != null ? item.insResult : null, |
| | |
| | | if (templateId == null || this.otherForm[templateId]) return; |
| | | this.otherForm[templateId] = { |
| | | temperature: null, |
| | | detectionTime: null, |
| | | detectionTimeRange: null, |
| | | detectionPlace: null, |
| | | deviceIds: [], |
| | | insResult: null, |
| | |
| | | payload.templateId = this.currentTable; |
| | | if (type === "deviceIds") { |
| | | payload.deviceIds = Array.isArray(m) ? [...m] : []; |
| | | } else if (type === "detectionTime" || type === "detectionPlace") { |
| | | } else if (type === "detectionTimeRange") { |
| | | Object.assign(payload, toDetectionTimePayload(m)); |
| | | } else if (type === "detectionPlace") { |
| | | payload[type] = m === "" || m == null ? null : m; |
| | | } else { |
| | | payload[type] = Number(m); |
| | |
| | | if (this.insOrder.ifsOrderType !== "02wg") { |
| | | if (!form.temperature) missing.push(`请填写「${item.templateName}」的温度`); |
| | | } |
| | | if (!form.detectionTime) missing.push(`请选择「${item.templateName}」的检测时间`); |
| | | if (!isCompleteDetectionTimeRange(form.detectionTimeRange)) missing.push(`请选择「${item.templateName}」的检测时间`); |
| | | if (!form.detectionPlace) missing.push(`请填写「${item.templateName}」的检测地点`); |
| | | if (!form.deviceIds || form.deviceIds.length === 0) { |
| | | missing.push(`请选择「${item.templateName}」的设备`); |
| | |
| | | }, |
| | | handleDown(row) { |
| | | downFile({ id: row.id }).then((res) => { |
| | | this.$download.saveAs(res.data.fileUrl, row.fileName) |
| | | const resourcePath = Number(res.data.type) === 1 ? "/img/" : "/word/"; |
| | | const fileUrl = this.javaApi + resourcePath + encodeURIComponent(res.data.fileUrl); |
| | | this.$download.saveAs(fileUrl, row.fileName); |
| | | }) |
| | | .catch((error) => { }); |
| | | }, |
| | |
| | | |
| | | .template-panel { |
| | | background-color: #f8f9fb; |
| | | border: 1px solid #ebeef5; |
| | | border: 1px solid var(--el-border-color-light); |
| | | border-radius: 3px; |
| | | padding: 16px 16px 4px; |
| | | margin-bottom: 12px; |
| | |
| | | flex: none; |
| | | } |
| | | |
| | | /* 设备下拉固定宽度,禁止被行内布局压缩,否则选中内容不可见 */ |
| | | .template-panel:deep(.device-select) { |
| | | display: inline-block !important; |
| | | width: 360px !important; |
| | | min-width: 360px; |
| | | flex: 0 0 360px; |
| | | } |
| | | |
| | | .template-panel__unit { |
| | | margin-left: 4px; |
| | | color: #606266; |
| | | color: var(--lims-text-2); |
| | | } |
| | | |
| | | .template-panel__conclusion--divided { |
| | | border-top: 1px dashed #e4e7ed; |
| | | border-top: 1px dashed var(--el-border-color); |
| | | padding-top: 12px; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | .inspection .el-drawer__header { |
| | | color: #303133; |
| | | color: var(--lims-text); |
| | | text-align: left; |
| | | } |
| | | |