This commit is contained in:
sjl
2025-01-13 18:12:36 +08:00
parent 85d8a57bf7
commit 0635dda6a0
15 changed files with 205 additions and 81 deletions

View File

@@ -5,13 +5,13 @@
<div >
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false" label-width="auto" class="form-three">
<el-divider >设备信息</el-divider>
<el-form-item label="设备名称" prop="name" >
<el-form-item label="设备名称" prop="name" v-if="scene != '1'">
<el-input v-model='formContent.name' placeholder="请输入设备名称"/>
</el-form-item>
<el-form-item label='设备类型' prop='devType' >
<el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型">
<el-select v-model="formContent.devType" filterable clearable placeholder="请选择设备类型" @change="handleDevTypeChange">
<el-option
v-for="item in dictStore.getDictData('Dev_Type')"
v-for="item in devTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
@@ -28,8 +28,8 @@
/>
</el-select>
</el-form-item>
<el-form-item label='设备厂家' prop='manufacturer' >
<el-select v-model="formContent.manufacturer" clearable placeholder="请选择生产厂商">
<el-form-item label='设备厂家' prop='manufacturer' v-if="scene != '1'">
<el-select v-model="formContent.manufacturer" clearable placeholder="请选择设备厂家">
<el-option
v-for="item in dictStore.getDictData('Dev_Manufacturers')"
:key="item.id"
@@ -48,10 +48,10 @@
<el-form-item label="设备序列号" prop="createId" >
<el-input v-model="formContent.createId" placeholder="请输入设备序列号"/>
</el-form-item>
<el-form-item label="固件版本" prop="hardwareVersion" >
<el-form-item label="固件版本" prop="hardwareVersion" v-if="scene === '0'">
<el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/>
</el-form-item>
<el-form-item label="软件版本" prop="softwareVersion" >
<el-form-item label="软件版本" prop="softwareVersion" v-if="scene === '0'">
<el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/>
</el-form-item>
<el-divider >参数信息</el-divider>
@@ -113,10 +113,10 @@
<el-form-item label='密钥' prop='devKey' clearable v-if="formContent.encryptionFlag">
<el-input v-model='formContent.devKey' placeholder="请输入密钥" show-password/>
</el-form-item>
<el-form-item label='样品编号' prop='sampleID' clearable v-if="DevIsShow">
<el-form-item label='样品编号' prop='sampleID' clearable v-if="DevIsShow && scene === '0'">
<el-input v-model='formContent.sampleID' placeholder="请输入样品编号" />
</el-form-item>
<el-form-item label='送样日期' prop='arrivedDate' >
<el-form-item label='送样日期' prop='arrivedDate' v-if="scene === '0'">
<el-date-picker
v-model="formContent.arrivedDate"
placeholder="请选择送样日期"
@@ -160,7 +160,7 @@ import IPAddress from '@/components/IpAddress/index.vue'
import { dialogBig } from '@/utils/elementBind'
import { type Device } from '@/api/device/interface/device'
import { ElMessage, type FormItemRule } from 'element-plus'
import { addPqDev, updatePqDev } from '@/api/device/device'
import { addPqDev, updatePqDev,getPqDev } from '@/api/device/device'
import { computed, reactive, type Ref, ref } from 'vue'
import { useDictStore } from '@/stores/modules/dict'
import { CirclePlus, Delete, EditPen } from '@element-plus/icons-vue'
@@ -170,15 +170,44 @@ import MonitorTable from '@/views/machine/device/components/monitorTab.vue';
const MonIsShow = ref(false)
const DevIsShow = ref(false)
// 存储设备类型选项
const devTypeOptions = ref<{
id: string;
name: string ,
icd:string ,
power:string,
devVolt:number,
devCurr:number,
devChns:number,
}[]>([])
// const IsPasswordShow = ref(false)
const dictStore = useDictStore()
const mode = ref()
const scene = ref('')
// 定义弹出组件元信息
const dialogFormRef = ref()
const disabledDate = (time: Date) => {
return time.getTime() > Date.now()
}
// 获取设备类型选项
const fetchDevTypeOptions = async () => {
try {
const response = await getPqDev()
devTypeOptions.value = response.data.map(item => ({
id: item.id,
name: item.name,
icd: item.icd,
power: item.power,
devVolt: item.devVolt,
devCurr: item.devCurr,
devChns: item.devChns
}))
} catch (error) {
console.error('获取设备类型选项失败', error)
}
}
function useMetaInfo() {
const dialogVisible = ref(false)
const titleType = ref('add')
@@ -189,8 +218,8 @@ const disabledDate = (time: Date) => {
devType:'',
devChns:1,
devVolt:57.74,
devCurr:1,
manufacturer: '',
devCurr:5,
manufacturer:'',
createDate: dayjs().format('YYYY-MM-DD'),
createId: '',
hardwareVersion: '',
@@ -202,6 +231,8 @@ const disabledDate = (time: Date) => {
reCheckNum:0,
state: 1,
factorFlag:0,
icd:'',
power:''
})
return { dialogVisible, titleType, formContent }
}
@@ -216,7 +247,7 @@ const disabledDate = (time: Date) => {
devType:'',
devChns:1,
devVolt:57.74,
devCurr:1,
devCurr:5,
manufacturer: '',
createDate: dayjs().format('YYYY-MM-DD'),
createId: '',
@@ -229,6 +260,8 @@ const disabledDate = (time: Date) => {
reCheckNum:0,
state: 1,
factorFlag:0,
icd:'',
power:''
}
}
@@ -238,38 +271,56 @@ const disabledDate = (time: Date) => {
})
// 定义表单校验规则
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
devType: [{ required: true, message: '设备类型必选!', trigger: 'change' }],
pattern: [{ required: true, message: '设备模式必填!', trigger: 'blur' }],
name: [{ required: true, message: '设备名称必填!', trigger: 'blur' }],
devChns: [{ required: true, message: '设备通道数必填!', trigger: 'blur' },
// 指定正则,此处是数字正则
{ pattern: /^[1-9]\d*$/, message: '设备通道数为大于1的整数', trigger: 'blur' }],
devVolt: [{ required: true, message: '额定电压必填!', trigger: 'blur' },
{ pattern: /^\d+(\.\d+)?$/, message: '额定电压格式错误', trigger: 'blur' }],
devCurr: [{ required: true, message: '额定电流必填!', trigger: 'blur' },
{ pattern: /^\d+(\.\d+)?$/, message: '额定电流格式错误', trigger: 'blur' }],
createDate: [{ required: true, message: '生产日期必填!', trigger: 'blur' }],
createId: [{ required: true, message: '出厂编号必填!', trigger: 'blur' }],
hardwareVersion: [{ required: true, message: '固件版本必填!', trigger: 'blur' }],
softwareVersion: [{ required: true, message: '软件版本必填!', trigger: 'blur' }],
ip:[{ required: true, message: 'IP地址必填!', trigger: 'blur' } ,
{ pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur' }],
port:[{ required: true, message: '端口号必填!', trigger: 'blur' },
{ pattern: /^(6553[0-5]|655[0-2][0-9]|64[0-9]{3}|[1-5]?[0-9]{1,4})$/, message: '端口号范围0到65535的整数', trigger: 'blur' }],
manufacturer: [{ required: true, message: '生产厂家必选!', trigger: 'change' }],
encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }],
protocol: [{ required: true, message: '通讯协议必选!', trigger: 'change' }],
// series: [],
// devKey: []
series : [
{ required: true, message: '请输入识别码', trigger: 'blur' }
],
devKey : [
{ required: true, message: '请输入密钥', trigger: 'blur' }
],
})
// 定义表单校验规则
const baseRules: Record<string, Array<FormItemRule>> = {
devType: [{ required: true, message: '设备类型必选!', trigger: 'change' }],
pattern: [{ required: true, message: '设备模式必填!', trigger: 'blur' }],
devChns: [
{ required: true, message: '设备通道数必填!', trigger: 'blur' },
{ pattern: /^[1-9]\d*$/, message: '设备通道数为大于1的整数', trigger: 'blur' }
],
devVolt: [
{ required: true, message: '额定电压必填!', trigger: 'blur' },
{ pattern: /^\d+(\.\d+)?$/, message: '额定电压格式错误', trigger: 'blur' }
],
devCurr: [
{ required: true, message: '额定电流必填!', trigger: 'blur' },
{ pattern: /^\d+(\.\d+)?$/, message: '额定电流格式错误', trigger: 'blur' }
],
createDate: [{ required: true, message: '生产日期必填!', trigger: 'blur' }],
createId: [{ required: true, message: '出厂编号必填!', trigger: 'blur' }],
ip: [
{ required: true, message: 'IP地址必填', trigger: 'blur' },
{ pattern: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, message: 'IP地址格式错误', trigger: 'blur' }
],
port: [
{ required: true, message: '端口号必填!', trigger: 'blur' },
{ pattern: /^(6553[0-5]|655[0-2][0-9]|64[0-9]{3}|[1-5]?[0-9]{1,4})$/, message: '端口号范围0到65535的整数', trigger: 'blur' }
],
encryptionFlag: [{ required: true, message: '是否加密必选!', trigger: 'change' }],
protocol: [{ required: true, message: '通讯协议必选!', trigger: 'change' }],
series: [{ required: true, message: '请输入识别码', trigger: 'blur' }],
devKey: [{ required: true, message: '请输入密钥', trigger: 'blur' }]
};
// 使用计算属性根据 scene 动态生成规则
const rules = computed(() => {
const dynamicRules = { ...baseRules };
if (scene.value !== '0') {
dynamicRules.name = [{ required: true, message: '设备名称必填!', trigger: 'blur' }];
dynamicRules.hardwareVersion = [{ required: true, message: '固件版本必填!', trigger: 'blur' }];
dynamicRules.softwareVersion = [{ required: true, message: '软件版本必填!', trigger: 'blur' }];
dynamicRules.manufacturer = [{ required: true, message: '生产厂家必选!', trigger: 'change' }];
}
if (scene.value !== '2') {
dynamicRules.name = [{ required: true, message: '设备名称必填!', trigger: 'blur' }];
dynamicRules.manufacturer = [{ required: true, message: '生产厂家必选!', trigger: 'change' }];
}
return dynamicRules;
});
// 关闭弹窗
const close = () => {
@@ -327,8 +378,10 @@ const disabledDate = (time: Date) => {
// 打开弹窗,可能是新增,也可能是编辑
const open = (sign: string, data: Device.ResPqDev,currentMode: string) => {
const open = async (sign: string, data: Device.ResPqDev,currentMode: string,currentScene: string ) => {
fetchDevTypeOptions()
mode.value = currentMode
scene.value = currentScene
titleType.value = sign
dialogVisible.value = true
@@ -349,6 +402,14 @@ const open = (sign: string, data: Device.ResPqDev,currentMode: string) => {
formContent.value = { ...data }
} else {
resetFormContent()
if(scene.value === '2'){
const manufacturers = dictStore.getDictData('Dev_Manufacturers');
const nanjingCanxuan = manufacturers.find(item => item.name === '南京灿能');
if(nanjingCanxuan){
formContent.value.manufacturer = nanjingCanxuan.id;
}
}
//handleEncryptionChange(1)
}
@@ -370,6 +431,24 @@ const open = (sign: string, data: Device.ResPqDev,currentMode: string) => {
// }
// }
const handleDevTypeChange = (value: string) => {
// 在这里处理选中事件的逻辑
const dev = devTypeOptions.value.find(t =>t.id === value)
if (dev) {
formContent.value.devChns = dev.devChns; // 默认值为1
formContent.value.devCurr = dev.devCurr; // 默认值为1
formContent.value.devVolt = dev.devVolt; // 默认值为1
formContent.value.icd = dev.icd
formContent.value.power = dev.power
} else {
formContent.value.devChns = 1; // 默认值为1
formContent.value.devCurr = 1; // 默认值为1
formContent.value.devVolt = 57.74; // 默认值为1
}
}
// 对外映射
defineExpose({ open })
const props = defineProps<{