| | |
| | | <template> |
| | | <el-dialog |
| | | v-model="visible" |
| | | :title="isReturnMode ? '设备归还' : (isEdit ? '编辑设备领用' : '新增设备领用')" |
| | | :title=" |
| | | isReturnMode ? '设备归还' : isEdit ? '编辑设备领用' : '新增设备领用' |
| | | " |
| | | width="600px" |
| | | @close="handleClose" |
| | | > |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="设备库存" prop="equipmentStock" v-if="!isReturnMode && formData.status !== 2"> |
| | | <el-form-item label="是否为消耗品" prop="isConsumables"> |
| | | <el-select |
| | | :model-value="currentConsumables" |
| | | placeholder="请选择是否为耗材类型" |
| | | :disabled="true" |
| | | > |
| | | <el-option label="是" :value="true" /> |
| | | <el-option label="否" :value="false" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="设备库存" |
| | | prop="equipmentStock" |
| | | v-if="!isReturnMode && formData.status !== 2" |
| | | > |
| | | <el-input |
| | | :value=" |
| | | equipmentList.find((item) => item.id == form.equipmentId) |
| | |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="已归还数量" prop="returnedQuantity" v-if="isReturnMode"> |
| | | <el-form-item |
| | | label="已归还数量" |
| | | prop="returnedQuantity" |
| | | v-if="isReturnMode" |
| | | > |
| | | <el-input |
| | | :value="formData.totalReturnNo || 0" |
| | | disabled |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="领用数量" prop="usageQuantity" v-if="!isReturnMode && formData.status !== 2"> |
| | | <el-form-item |
| | | label="领用数量" |
| | | prop="usageQuantity" |
| | | v-if="!isReturnMode && formData.status !== 2" |
| | | > |
| | | <el-input-number |
| | | v-model="form.usageQuantity" |
| | | :min="1" |
| | |
| | | >(最多{{ maxQuantity }}台)</span |
| | | > |
| | | </el-form-item> |
| | | <el-form-item label="本次归还数量" prop="returnQuantity" v-if="isReturnMode"> |
| | | <el-form-item |
| | | label="本次归还数量" |
| | | prop="returnQuantity" |
| | | v-if="isReturnMode" |
| | | > |
| | | <el-input-number |
| | | v-model="form.returnQuantity" |
| | | :min="1" |
| | |
| | | v-if="remainingReturnQuantity > 0" |
| | | >(最多{{ remainingReturnQuantity }}台)</span |
| | | > |
| | | <span |
| | | style="color: #67c23a; font-size: 12px; margin-left: 8px" |
| | | v-else |
| | | <span style="color: #67c23a; font-size: 12px; margin-left: 8px" v-else |
| | | >(已全部归还)</span |
| | | > |
| | | <!-- 归还完成提示 --> |
| | | <div |
| | | v-if="remainingReturnQuantity > 0 && form.returnQuantity === remainingReturnQuantity" |
| | | v-if=" |
| | | remainingReturnQuantity > 0 && |
| | | form.returnQuantity === remainingReturnQuantity |
| | | " |
| | | style="color: #67c23a; font-size: 12px; margin-top: 4px" |
| | | > |
| | | 💡 提示:本次归还后将完成全部归还 |
| | | </div> |
| | | </el-form-item> |
| | | <!-- 使用开始时间 - 只在非归还模式显示 --> |
| | | <el-form-item label="使用开始时间" prop="usageStartTime" v-if="!isReturnMode"> |
| | | <el-form-item |
| | | label="使用开始时间" |
| | | prop="usageStartTime" |
| | | v-if="!isReturnMode" |
| | | > |
| | | <el-date-picker |
| | | v-model="form.usageStartTime" |
| | | type="datetime" |
| | |
| | | ElMessage.error("获取设备列表失败"); |
| | | } |
| | | }; |
| | | |
| | | const props = defineProps({ |
| | | modelValue: Boolean, |
| | | formData: { |
| | |
| | | type: String, |
| | | default: "add", |
| | | }, |
| | | }); |
| | | |
| | | // 默认表单初始值 |
| | | const defaultForm = { |
| | | userId: "", |
| | | equipmentId: "", |
| | | usageQuantity: 1, |
| | | usageStartTime: "", |
| | | returnQuantity: 1, |
| | | returnTime: "", |
| | | remarks: "", |
| | | }; |
| | | const form = ref({ ...defaultForm }); |
| | | |
| | | const currentConsumables = computed(() => { |
| | | const eq = equipmentList.value.find(item => item.id == form.value.equipmentId); |
| | | return eq ? !!eq.isConsumables : false; |
| | | }); |
| | | const maxQuantity = computed(() => { |
| | | if (!form.value.equipmentId) return 0; |
| | |
| | | get: () => props.modelValue, |
| | | set: (v) => emit("update:modelValue", v), |
| | | }); |
| | | |
| | | // 监听设备选择变化 |
| | | watch( |
| | | () => form.value.equipmentId, |
| | | (newId) => { |
| | | if (newId) { |
| | | const eq = equipmentList.value.find(item => item.id == newId); |
| | | } |
| | | } |
| | | ); |
| | | const isViewMode = computed( |
| | | () => |
| | | props.addOrEdit === "view" || |
| | | props.addOrEdit === "viewRow" |
| | | () => props.addOrEdit === "view" || props.addOrEdit === "viewRow" |
| | | ); |
| | | |
| | | // 判断是否为归还模式 |
| | |
| | | const isEdit = computed(() => !!props.formData?.id); |
| | | const formRef = ref(); |
| | | |
| | | // 默认表单初始值 |
| | | const defaultForm = { |
| | | userId: "", |
| | | equipmentId: "", |
| | | usageQuantity: 1, |
| | | usageStartTime: "", |
| | | returnQuantity: 1, |
| | | returnTime: "", |
| | | remarks: "", |
| | | }; |
| | | const form = ref({ ...defaultForm }); |
| | | |
| | | // 获取当前日期(YYYY-MM-DD格式) |
| | | const getCurrentDate = () => { |
| | | const now = new Date(); |
| | | const year = now.getFullYear(); |
| | | const month = String(now.getMonth() + 1).padStart(2, '0'); |
| | | const day = String(now.getDate()).padStart(2, '0'); |
| | | const month = String(now.getMonth() + 1).padStart(2, "0"); |
| | | const day = String(now.getDate()).padStart(2, "0"); |
| | | return `${year}-${month}-${day}`; |
| | | }; |
| | | |
| | |
| | | if (isReturnMode.value) { |
| | | form.value.returnTime = getCurrentDate(); |
| | | const maxReturnQuantity = remainingReturnQuantity.value; |
| | | form.value.returnQuantity = maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0; |
| | | form.value.returnQuantity = |
| | | maxReturnQuantity > 0 ? Math.min(1, maxReturnQuantity) : 0; |
| | | } |
| | | } else { |
| | | form.value = { ...defaultForm }; |
| | |
| | | if (remaining <= 0) { |
| | | callback(new Error("已全部归还,无法继续归还")); |
| | | } else if (value > remaining) { |
| | | callback(new Error(`归还数量不能大于剩余可归还数量(${remaining}台)`)); |
| | | callback( |
| | | new Error(`归还数量不能大于剩余可归还数量(${remaining}台)`) |
| | | ); |
| | | } else { |
| | | callback(); |
| | | } |
| | |
| | | const currentReturnQuantity = form.value.returnQuantity; |
| | | const totalUsageQuantity = props.formData.usageQuantity; |
| | | const alreadyReturnedQuantity = props.formData.totalReturnNo || 0; |
| | | const newTotalReturnedQuantity = alreadyReturnedQuantity + currentReturnQuantity; |
| | | const newTotalReturnedQuantity = |
| | | alreadyReturnedQuantity + currentReturnQuantity; |
| | | |
| | | // 判断是否全部归还完成 |
| | | let equipmentStatus = 2; // 默认为部分归还 |
| | |
| | | // 全部归还时的确认提示 |
| | | try { |
| | | await ElMessageBox.confirm( |
| | | `确认将设备"${props.formData.equipmentName || '未知设备'}"全部归还吗?归还后设备状态将变为"已归还"。`, |
| | | '确认全部归还', |
| | | `确认将设备"${ |
| | | props.formData.equipmentName || "未知设备" |
| | | }"全部归还吗?归还后设备状态将变为"已归还"。`, |
| | | "确认全部归还", |
| | | { |
| | | confirmButtonText: '确认归还', |
| | | cancelButtonText: '取消', |
| | | type: 'success', |
| | | confirmButtonText: "确认归还", |
| | | cancelButtonText: "取消", |
| | | type: "success", |
| | | } |
| | | ); |
| | | } catch (error) { |
| | | if (error === 'cancel') { |
| | | ElMessage.info('已取消归还操作'); |
| | | if (error === "cancel") { |
| | | ElMessage.info("已取消归还操作"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | console.log('设备归还完成:', { |
| | | console.log("设备归还完成:", { |
| | | 设备名称: props.formData.equipmentName, |
| | | 总使用数量: totalUsageQuantity, |
| | | 新的归还总数: newTotalReturnedQuantity, |
| | | 状态: '已全部归还' |
| | | 状态: "已全部归还", |
| | | }); |
| | | } else { |
| | | console.log('设备部分归还:', { |
| | | console.log("设备部分归还:", { |
| | | 设备名称: props.formData.equipmentName, |
| | | 总使用数量: totalUsageQuantity, |
| | | 已归还数量: newTotalReturnedQuantity, |
| | | 剩余未归还: totalUsageQuantity - newTotalReturnedQuantity, |
| | | 状态: '部分归还' |
| | | 状态: "部分归还", |
| | | }); |
| | | } |
| | | |
| | |
| | | returnTime: form.value.returnTime, |
| | | equipmentStatus: equipmentStatus, |
| | | remarks: form.value.remarks, |
| | | usageQuantity: totalUsageQuantity |
| | | usageQuantity: totalUsageQuantity, |
| | | }; |
| | | } |
| | | |
| | |
| | | } |
| | | handleClose(); |
| | | } catch (error) { |
| | | console.error('提交失败:', error); |
| | | console.error("提交失败:", error); |
| | | ElMessage.error("操作失败,请稍后再试"); |
| | | } |
| | | }); |