| | |
| | | </el-radio-group> |
| | | </div> |
| | | <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) |
| | |
| | | </el-form-item> |
| | | <el-form-item label="设备:"> |
| | | <el-select v-model="currentOtherForm.deviceIds" :disabled="state != 1" multiple filterable clearable |
| | | size="small" placeholder="请选择设备" style="width: 360px" |
| | | class="device-select" size="small" placeholder="请选择设备" |
| | | 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" /> |
| | | </el-select> |
| | |
| | | </div> |
| | | <div class="search_input" style="width: 100%"> |
| | | <el-select v-model="verifyUser" clearable filterable placeholder="请选择" size="small" style="width: 100%"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | <el-option v-for="(item, i) in reviewerOptions" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | |
| | | import { mapGetters } from "@/utils/store-compat"; |
| | | import viewManHourDia from "@/views/business/inspectionTask/components/viewManHourDia.vue"; |
| | | import {getDicts} from "@/api/system/dict/data"; |
| | | import { parseInspectionValueAnnotation, formatInspectionValue } from "@/utils/inspectionValueFormat"; |
| | | export default { |
| | | name: 'Inspection', |
| | | components: { |
| | |
| | | state: null, |
| | | inspectorList: null, |
| | | typeSource: null, |
| | | taskSource: null, |
| | | sagData: [], |
| | | sagForm: { |
| | | sampleCode: null, |
| | |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 0, |
| | | current: 1, |
| | | }, |
| | | // 文件列表相关--结束 |
| | | // 任务切换列表--开始 |
| | |
| | | // 用于上传文件的信息 |
| | | computed: { |
| | | ...mapGetters(["userId"]), |
| | | reviewerOptions() { |
| | | return this.taskSource === 'QUALITY_MONITOR' |
| | | ? this.personList.filter(item => Number(item.value) !== Number(this.userId)) |
| | | : this.personList; |
| | | }, |
| | | action() { |
| | | return this.javaApi + "/insOrderPlan/uploadFile"; |
| | | }, |
| | |
| | | }, |
| | | methods: { |
| | | syncRouteContext() { |
| | | const { sonLaboratory, orderId, state, inspectorList, typeSource } = this.$route.query; |
| | | const { sonLaboratory, orderId, state, inspectorList, typeSource, taskSource } = this.$route.query; |
| | | const orderChanged = this.id !== orderId; |
| | | this.sonLaboratory = sonLaboratory; |
| | | this.orderId = orderId; |
| | | this.state = state; |
| | | this.inspectorList = inspectorList; |
| | | this.typeSource = typeSource; |
| | | this.taskSource = taskSource; |
| | | if (orderChanged) { |
| | | if (taskSource === 'QUALITY_MONITOR') this.verifyUser = null; |
| | | this.tableLists = []; |
| | | this.tableList = []; |
| | | this.sampleProduct = []; |
| | |
| | | laboratory: this.sonLaboratory, |
| | | }).then(async (res) => { |
| | | this.insOrder = res.data.insOrder; |
| | | this.taskSource = this.insOrder.taskSource || this.taskSource; |
| | | if(res.data.insOrder.ifsOrderType==='02wg'){ |
| | | //查询零件属性 |
| | | this.getPartProps(res.data.insOrder.ifsInventoryId) |
| | |
| | | // 检验值输入后触发的函数 |
| | | changeInput(m, code, n) { |
| | | if (n) { |
| | | const config = parseInspectionValueAnnotation(n.v && n.v.ps && n.v.ps.value); |
| | | if (config && !config.error && config.decimalPlaces != null && typeof n.v.v === 'string') { |
| | | const numericPattern = config.displayMode === 'SCIENTIFIC' |
| | | ? /^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/ |
| | | : /^[+-]?\d*\.?\d+$/; |
| | | if (n.v.v.trim() && !numericPattern.test(n.v.v.trim())) { |
| | | this.$message.warning('该检验值必须填写数字'); |
| | | return; |
| | | } |
| | | n.v.v = formatInspectionValue(n.v.v, config); |
| | | } |
| | | // 定义一个函数来验证分数是否有效 |
| | | if (typeof n.v.v == "string") { |
| | | function isValidFraction(fraction) { |
| | |
| | | const v = n.v.v; |
| | | // 能力范围已废弃,检验值类型不再作为判断依据。整串只由算式字符组成时才规范化格式, |
| | | // 出现中文等其它字符即按文本处理原样保留,否则文字会被逐字删掉 |
| | | if (typeof v !== "string" || /[^\d.^e>>≥≤<<断裂脆化\-/+]/.test(v)) { |
| | | if (typeof v !== "string" || /[^\d.^eE>>≥≤<<断裂脆化\-/+]/.test(v)) { |
| | | return; |
| | | } |
| | | n.v.v = v |
| | |
| | | } |
| | | }, |
| | | openAddCheck() { |
| | | if (this.taskSource === 'QUALITY_MONITOR') { |
| | | this.upInsReview(1); |
| | | return; |
| | | } |
| | | this.addCheck = true; |
| | | }, |
| | | // 收集模板级检测条件的缺失项(每个模板都要填全) |
| | |
| | | temperature: form.temperature == null ? null : form.temperature, |
| | | detectionTime: form.detectionTime || null, |
| | | detectionPlace: form.detectionPlace || null, |
| | | deviceIds: Array.isArray(form.deviceIds) ? [...form.deviceIds] : [], |
| | | }); |
| | | })); |
| | | } 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; |
| | | } |
| | | |