| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog |
| | | v-model="dialogFormVisible" |
| | | title="填忣éªè®°å½" |
| | | width="70%" |
| | | @close="closeDia" |
| | | > |
| | | <div v-if="!isViewMode" style="margin-bottom: 10px;text-align: right"> |
| | | <el-button type="danger" plain @click="handleDelete">å é¤</el-button> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :tableLoading="tableLoading" |
| | | :isSelection="true" |
| | | :isShowPagination="false" |
| | | @selection-change="handleSelectionChange" |
| | | height="400" |
| | | > |
| | | <template #judgeTypeSlot="{ row }"> |
| | | <el-tag v-if="row.judgeType === 'â¥'" type="success">â¥</el-tag> |
| | | <el-tag v-else-if="row.judgeType === 'â¤'" type="warning">â¤</el-tag> |
| | | <el-tag v-else-if="row.judgeType === 'èå´'" type="info">èå´</el-tag> |
| | | <el-tag v-else>æå</el-tag> |
| | | </template> |
| | | <template #isRequiredSlot="{ row }"> |
| | | <el-tag v-if="row.isRequired === 1" type="danger">æ¯</el-tag> |
| | | <el-tag v-else type="info">å¦</el-tag> |
| | | </template> |
| | | <template #testValueSlot="{ row }"> |
| | | <el-input v-model="row.testValue" clearable :disabled="isViewMode" @input="handleTestValueChange(row)" /> |
| | | </template> |
| | | <template #isQualifiedSlot="{ row }"> |
| | | <template v-if="row.judgeType !== 'æåæè¿°'"> |
| | | <el-tag v-if="row.isQualified === 1" type="success">åæ ¼</el-tag> |
| | | <el-tag v-else-if="row.isQualified === 0" type="danger">ä¸åæ ¼</el-tag> |
| | | <span v-else>-</span> |
| | | </template> |
| | | <template v-else> |
| | | <el-select v-model="row.isQualified" placeholder="è¯·éæ©" size="small" :disabled="isViewMode" @change="handleTextResultChange(row)"> |
| | | <el-option :value="1" label="åæ ¼" /> |
| | | <el-option :value="0" label="ä¸åæ ¼" /> |
| | | </el-select> |
| | | </template> |
| | | </template> |
| | | </PIMTable> |
| | | |
| | | <div style="margin-top: 16px;"> |
| | | <el-form label-width="120px"> |
| | | <el-form-item label="èªå¨å¤æç»æ"> |
| | | <template v-if="autoJudgeResult"> |
| | | <el-tag v-if="autoJudgeResult === 'åæ ¼'" type="success" size="large">åæ ¼</el-tag> |
| | | <el-tag v-else-if="autoJudgeResult === 'é¨ååæ ¼'" type="warning" size="large">é¨ååæ ¼</el-tag> |
| | | <el-tag v-else type="danger" size="large">ä¸åæ ¼</el-tag> |
| | | <span v-if="autoJudgeResult === 'ä¸åæ ¼'" style="margin-left: 10px; color: #909399;"> |
| | | ï¼å¿
è¦å¤æåæ°æä¸åæ ¼é¡¹ï¼ä¸å¯æå¨ä¿®æ¹ï¼ |
| | | </span> |
| | | <span v-if="autoJudgeResult === 'é¨ååæ ¼'" style="margin-left: 10px; color: #909399;"> |
| | | ï¼å¿
è¦å¤æåæ°ååæ ¼ï¼éå¿
è¦åæ°æä¸åæ ¼é¡¹ï¼å¯æå¨éæ©æç»ç»æï¼ |
| | | </span> |
| | | </template> |
| | | <template v-else> |
| | | <el-tag type="info" size="large">éæå¨å¤æ</el-tag> |
| | | <span style="margin-left: 10px; color: #909399;"> |
| | | ï¼ææåæ°å为æåæè¿°ç±»åï¼è¯·æå¨éæ©ï¼ |
| | | </span> |
| | | </template> |
| | | </el-form-item> |
| | | <el-form-item label="æç»å¤å®"> |
| | | <el-radio-group v-model="checkResult" :disabled="isViewMode || autoJudgeResult === 'ä¸åæ ¼'"> |
| | | <el-radio label="åæ ¼">åæ ¼</el-radio> |
| | | <el-radio label="ä¸åæ ¼">ä¸åæ ¼</el-radio> |
| | | <el-radio label="é¨ååæ ¼">é¨ååæ ¼</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <template v-if="!isViewMode"> |
| | | <el-button type="primary" @click="submitForm">确认</el-button> |
| | | <el-button @click="closeDia">åæ¶</el-button> |
| | | </template> |
| | | <el-button v-else @click="closeDia">å
³é</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, getCurrentInstance } from "vue"; |
| | | import { |
| | | qualityInspectParamDel, |
| | | qualityInspectParamInfo, |
| | | qualityInspectParamUpdate |
| | | } from "@/api/qualityManagement/qualityInspectParam.js"; |
| | | import { ElMessageBox } from "element-plus"; |
| | | const { proxy } = getCurrentInstance() |
| | | const emit = defineEmits(['close']) |
| | | |
| | | const dialogFormVisible = ref(false); |
| | | const operationType = ref('') |
| | | const currentId = ref('') |
| | | const selectedRows = ref([]); |
| | | const autoJudgeResult = ref(null) |
| | | const checkResult = ref('') |
| | | const isViewMode = computed(() => operationType.value === 'view') |
| | | |
| | | const tableColumn = ref([ |
| | | { label: "ææ ", prop: "parameterItem" }, |
| | | { label: "åä½", prop: "unit" }, |
| | | { label: "åå®¶æ åå¼", prop: "standardValue" }, |
| | | { label: "ä¸éå¼", prop: "minValue" }, |
| | | { label: "ä¸éå¼", prop: "maxValue" }, |
| | | { label: "å
æ§å¼", prop: "controlValue" }, |
| | | { label: "å¤æç±»å", prop: "judgeType", dataType: 'slot', slot: 'judgeTypeSlot' }, |
| | | { label: "å¿
è¦å¤æ", prop: "isRequired", dataType: 'slot', slot: 'isRequiredSlot' }, |
| | | { label: "æ£éªå¼", prop: "testValue", dataType: 'slot', slot: 'testValueSlot' }, |
| | | { label: "æ¯å¦åæ ¼", prop: "isQualified", dataType: 'slot', slot: 'isQualifiedSlot' }, |
| | | ]); |
| | | const tableData = ref([]); |
| | | const tableLoading = ref(false); |
| | | |
| | | const openDialog = (type, row) => { |
| | | operationType.value = type; |
| | | dialogFormVisible.value = true; |
| | | autoJudgeResult.value = null |
| | | checkResult.value = '' |
| | | if (operationType.value === 'edit' || operationType.value === 'view') { |
| | | currentId.value = row.id; |
| | | getList() |
| | | } |
| | | } |
| | | const getList = () => { |
| | | qualityInspectParamInfo(currentId.value).then(res => { |
| | | tableData.value = res.data; |
| | | }) |
| | | } |
| | | const handleSelectionChange = (selection) => { |
| | | selectedRows.value = selection; |
| | | }; |
| | | |
| | | const handleTestValueChange = (row) => { |
| | | if (isViewMode.value) return; |
| | | if (!row.testValue || !row.judgeType || row.judgeType === 'æåæè¿°') { |
| | | return; |
| | | } |
| | | const testVal = parseFloat(row.testValue); |
| | | if (isNaN(testVal)) return; |
| | | |
| | | let qualified = false; |
| | | if (row.judgeType === 'â¥') { |
| | | const stdVal = parseFloat(row.standardValue); |
| | | if (isNaN(stdVal)) return; |
| | | qualified = testVal >= stdVal; |
| | | } else if (row.judgeType === 'â¤') { |
| | | const stdVal = parseFloat(row.standardValue); |
| | | if (isNaN(stdVal)) return; |
| | | qualified = testVal <= stdVal; |
| | | } else if (row.judgeType === 'èå´') { |
| | | const minVal = parseFloat(row.minValue); |
| | | const maxVal = parseFloat(row.maxValue); |
| | | if (isNaN(minVal) || isNaN(maxVal)) return; |
| | | qualified = testVal >= minVal && testVal <= maxVal; |
| | | } else { |
| | | return; |
| | | } |
| | | row.isQualified = qualified ? 1 : 0; |
| | | performAutoJudgeAll(); |
| | | }; |
| | | |
| | | const handleTextResultChange = () => { |
| | | performAutoJudgeAll() |
| | | }; |
| | | |
| | | const performAutoJudgeAll = () => { |
| | | if (!tableData.value.length) return; |
| | | const allTextDesc = tableData.value.every(item => item.judgeType === 'æåæè¿°'); |
| | | if (allTextDesc) { |
| | | autoJudgeResult.value = null; |
| | | return; |
| | | } |
| | | const requiredParams = tableData.value.filter(item => item.isRequired === 1); |
| | | if (requiredParams.length === 0) { |
| | | autoJudgeResult.value = null; |
| | | return; |
| | | } |
| | | const hasUnqualified = requiredParams.some(item => item.isQualified === 0); |
| | | const allJudged = requiredParams.every(item => item.isQualified === 1 || item.isQualified === 0); |
| | | if (!allJudged) { |
| | | autoJudgeResult.value = null; |
| | | return; |
| | | } |
| | | if (hasUnqualified) { |
| | | autoJudgeResult.value = 'ä¸åæ ¼'; |
| | | checkResult.value = 'ä¸åæ ¼'; |
| | | return; |
| | | } |
| | | const nonRequiredUnqualified = tableData.value.filter(item => item.isRequired !== 1 && item.isQualified === 0); |
| | | if (nonRequiredUnqualified.length > 0) { |
| | | autoJudgeResult.value = 'é¨ååæ ¼'; |
| | | checkResult.value = 'é¨ååæ ¼'; |
| | | } else { |
| | | autoJudgeResult.value = 'åæ ¼'; |
| | | checkResult.value = 'åæ ¼'; |
| | | } |
| | | }; |
| | | |
| | | const submitForm = () => { |
| | | performAutoJudgeAll(); |
| | | qualityInspectParamUpdate(tableData.value).then(res => { |
| | | proxy.$modal.msgSuccess("æäº¤æå"); |
| | | closeDia(); |
| | | }) |
| | | } |
| | | const closeDia = () => { |
| | | dialogFormVisible.value = false; |
| | | emit('close') |
| | | }; |
| | | const handleDelete = () => { |
| | | let ids = []; |
| | | if (selectedRows.value.length > 0) { |
| | | ids = selectedRows.value.map((item) => item.id); |
| | | } else { |
| | | proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); |
| | | return; |
| | | } |
| | | ElMessageBox.confirm("éä¸çå
容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "导åº", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | qualityInspectParamDel(ids).then((res) => { |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | getList(); |
| | | }); |
| | | }) |
| | | .catch(() => { |
| | | proxy.$modal.msg("已忶"); |
| | | }); |
| | | }; |
| | | defineExpose({ |
| | | openDialog, |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |