<!-- 添加 / 编辑 --> <script name="AddDeviceDialog" lang="ts" setup> import { ElMessage, ElMessageBox, dayjs } from 'element-plus' import type { IDeviceInfo } from './device-info' import { addDevice, updateDevice } from '@/api/basic/device' const emit = defineEmits(['recordSaved']) // 从路由中传过来的参数 const type = ref<string>('') const id = ref<string>('') const title = ref('') const infoFormRef = ref() const deviceInfo = ref<IDeviceInfo>({ id: '', devcode: '', groupId: '', deviceType: '', model: '', productId: '', encipherType: '', imei: '', iccid: '', createUserId: '', createTime: '', }) const deviceInfoRules = ref({ devcode: [{ required: true, message: '设备编号不能为空', trigger: 'blur' }], deviceType: [{ required: true, message: '设备类型不能为空,请选择', trigger: ['blur', 'change'] }], }) // 表单验证规则 const showDialog = ref<boolean>(false) // 逻辑 const resetForm = () => { sessionStorage.removeItem('groupInfo') // 返回列表时 将缓存中的数据删除 deviceInfo.value = { id: '', devcode: '', groupId: '', deviceType: '', model: '', productId: '', encipherType: '', imei: '', iccid: '', createUserId: '', createTime: '', } infoFormRef.value.clearValidate() showDialog.value = false } // 添加 const saveInfo = () => { // 将创建时间改为提交的时间 deviceInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') addDevice(deviceInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') resetForm() emit('recordSaved') } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 编辑 const updateInfoById = () => { updateDevice(deviceInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') resetForm() emit('recordSaved') } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 保存 const saveForm = async () => { if (!infoFormRef) { return } await infoFormRef.value.validate((valid: boolean, fields: any) => { if (valid === true) { ElMessageBox.confirm( '确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then(() => { if (type.value === 'create') { saveInfo() } else if (type.value === 'update') { updateInfoById() } }) } }) } const initDialog = (params: any) => { // 从路由中获取参数 type.value = params.type id.value = params.id !== undefined ? params.id : '' switch (params.type) { case 'create' : title.value = '新增设备' break case 'update': title.value = '编辑设备' deviceInfo.value = JSON.parse(sessionStorage.getItem('deviceInfo')!) break default: title.value = '' break } showDialog.value = true } defineExpose({ initDialog, }) </script> <template> <el-dialog v-model="showDialog" :title="title" :append-to-body="true" :close-on-click-modal="false"> <detail-block title=""> <el-form ref="infoFormRef" :model="deviceInfo" :rules="deviceInfoRules" label-position="right" label-width="110px" stripe> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="设备编号" prop="devcode"> <el-input v-model="deviceInfo.devcode" placeholder="请输入设备编号" :disabled="type === 'update'" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="设备类型" prop="deviceType"> <el-input v-model="deviceInfo.deviceType" placeholder="请选择设备类型" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="所属产品"> <el-select v-model="deviceInfo.productId" placeholder="请选择所属产品" clearable filterable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="分组描述"> <el-select v-model="deviceInfo.model" placeholder="请选择设备型号" clearable filterable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="加密方式"> <el-select v-model="deviceInfo.encipherType" placeholder="请选择加密方式" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="设备IMEI"> <el-input v-model="deviceInfo.imei" placeholder="请输入设备IMEI号" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="18" :offset="3"> <el-form-item label="ICCID"> <el-input v-model="deviceInfo.iccid" placeholder="请输入ICCID号" clearable /> </el-form-item> </el-col> </el-row> </el-form> </detail-block> <template #footer> <span class="dialog-footer"> <el-button @click="resetForm">取消</el-button> <el-button type="primary" @click="saveForm"> 保存 </el-button> </span> </template> </el-dialog> </template>