| New file |
| | |
| | | <template> |
| | | <el-dialog v-model="visible" :title="dialogTitle" @closed="handleClosed" destroy-on-close> |
| | | <el-form ref="formRef" :model="formData" :rules="rules" :disabled="dialogReadonly" label-width="100px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备名称" prop="deviceName"> |
| | | <el-input v-model="formData.deviceName" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备类型" prop="deviceType"> |
| | | <el-input v-model="formData.deviceType" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="型号" prop="deviceModel"> |
| | | <el-input v-model="formData.deviceModel" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="规格" prop="deviceSpecification"> |
| | | <el-input v-model="formData.deviceSpecification" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="生产厂商" prop="manufacturer"> |
| | | <el-input v-model="formData.manufacturer" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="出库去向" prop="stockOutDestination"> |
| | | <el-input v-model="formData.stockOutDestination" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="来源" prop="source"> |
| | | <el-input v-model="formData.source" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="用途" prop="purpose"> |
| | | <el-input v-model="formData.purpose" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="所属部门" prop="ownerDept"> |
| | | <el-input v-model="formData.ownerDept" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="负责人" prop="ownerUser"> |
| | | <el-input v-model="formData.ownerUser" maxlength="50" placeholder="请输入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="handleCancel">{{ dialogShowSubmit ? '取消' : '关闭' }}</el-button> |
| | | <el-button v-if="dialogShowSubmit" type="primary" @click="handleSubmit">确定</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { computed, ref } from 'vue' |
| | | import { ElMessage } from 'element-plus' |
| | | import { fwDeviceDetailApi, fwDeviceSaveApi, fwDeviceUpdateApi } from '@/api/fwDevice' |
| | | |
| | | const createEmptyForm = () => ({ |
| | | deviceModel: '', |
| | | deviceName: '', |
| | | deviceSpecification: '', |
| | | deviceType: '', |
| | | manufacturer: '', |
| | | ownerDept: '', |
| | | ownerUser: '', |
| | | purpose: '', |
| | | source: '', |
| | | stockOutDestination: '', |
| | | }) |
| | | |
| | | const emit = defineEmits(['success']) |
| | | const formRef = ref(null) |
| | | const formData = ref(createEmptyForm()) |
| | | const visible = ref(false) |
| | | const dialogMode = ref('add') |
| | | const dialogRowId = ref(null) |
| | | |
| | | const dialogTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') { |
| | | return '编辑' |
| | | } |
| | | if (dialogMode.value === 'view') { |
| | | return '查看' |
| | | } |
| | | return '新增' |
| | | }) |
| | | const dialogShowSubmit = computed(() => dialogMode.value !== 'view') |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const rules = { |
| | | deviceName: [ |
| | | { required: true, message: '请输入设备名称', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | deviceType: [ |
| | | { required: true, message: '请输入设备类型', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | deviceModel: [ |
| | | { required: true, message: '请输入型号', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | deviceSpecification: [ |
| | | { required: true, message: '请输入规格', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | manufacturer: [ |
| | | { required: true, message: '请输入生产厂商', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | stockOutDestination: [ |
| | | { required: true, message: '请输入出库去向', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | source: [ |
| | | { required: true, message: '请输入来源', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | purpose: [ |
| | | { required: true, message: '请输入用途', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | ownerDept: [ |
| | | { required: true, message: '请输入所属部门', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | ownerUser: [ |
| | | { required: true, message: '请输入负责人', trigger: 'blur' }, |
| | | { max: 50, message: '长度不超过50', trigger: 'blur' }, |
| | | ], |
| | | } |
| | | |
| | | // 关闭弹框 |
| | | function handleCancel() { |
| | | visible.value = false |
| | | } |
| | | |
| | | // 提交新增/编辑 |
| | | async function handleSubmit() { |
| | | if (dialogMode.value === 'view') { |
| | | return |
| | | } |
| | | const isValid = await formRef.value?.validate().catch(() => false) |
| | | if (!isValid) { |
| | | return |
| | | } |
| | | if (dialogMode.value === 'add') { |
| | | await fwDeviceSaveApi({ ...formData.value }) |
| | | ElMessage.success('新增成功') |
| | | } |
| | | if (dialogMode.value === 'edit') { |
| | | await fwDeviceUpdateApi({ ...formData.value }) |
| | | ElMessage.success('更新成功') |
| | | } |
| | | visible.value = false |
| | | emit('success') |
| | | } |
| | | |
| | | // 加载详情 |
| | | async function loadDetail() { |
| | | if (!dialogRowId.value) return |
| | | const res = await fwDeviceDetailApi({ id: dialogRowId.value }) |
| | | const data = res?.data?.data ?? {} |
| | | formData.value = { ...createEmptyForm(), ...data } |
| | | } |
| | | |
| | | // 重置表单 |
| | | function resetFormData() { |
| | | formData.value = createEmptyForm() |
| | | } |
| | | |
| | | // 关闭后重置 |
| | | function handleClosed() { |
| | | resetFormData() |
| | | } |
| | | |
| | | // 打开弹框 |
| | | async function open({ mode, id } = {}) { |
| | | dialogMode.value = mode || 'add' |
| | | dialogRowId.value = id ?? null |
| | | visible.value = true |
| | | if (dialogMode.value === 'add') { |
| | | resetFormData() |
| | | } else { |
| | | await loadDetail() |
| | | } |
| | | } |
| | | |
| | | defineExpose({ open }) |
| | | </script> |