|
|
|
|
@ -1,18 +1,31 @@
|
|
|
|
|
<template>
|
|
|
|
|
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
|
|
|
|
<template #title>
|
|
|
|
|
<div class="flex flex-col">
|
|
|
|
|
<div>{{ dialogTitle }}</div>
|
|
|
|
|
<div
|
|
|
|
|
v-if="formType === 'setting' && formData.deviceName"
|
|
|
|
|
class="text-12px leading-16px text-[var(--el-text-color-secondary)]"
|
|
|
|
|
>
|
|
|
|
|
设备名称:{{ formData.deviceName }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<el-form
|
|
|
|
|
ref="formRef"
|
|
|
|
|
:model="formData"
|
|
|
|
|
:rules="formRules"
|
|
|
|
|
:rules="activeRules"
|
|
|
|
|
label-width="100px"
|
|
|
|
|
v-loading="formLoading"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="设备编号" prop="deviceCode">
|
|
|
|
|
<el-input v-model="formData.deviceCode" placeholder="请输入设备编号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备名称" prop="deviceName">
|
|
|
|
|
<el-input v-model="formData.deviceName" placeholder="请输入设备名称" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<template v-if="formType === 'create'">
|
|
|
|
|
<el-form-item label="设备编号" prop="deviceCode">
|
|
|
|
|
<el-input v-model="formData.deviceCode" placeholder="请输入设备编号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="设备名称" prop="deviceName">
|
|
|
|
|
<el-input v-model="formData.deviceName" placeholder="请输入设备名称" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
<!-- <el-form-item label="设备类型" prop="deviceType">
|
|
|
|
|
<el-select v-model="formData.deviceType" placeholder="请选择设备类型">
|
|
|
|
|
<el-option
|
|
|
|
|
@ -49,56 +62,73 @@
|
|
|
|
|
<!-- <el-form-item label="离线间隔" prop="offLineDuration">
|
|
|
|
|
<el-input v-model="formData.offLineDuration" placeholder="请输入离线间隔" />
|
|
|
|
|
</el-form-item> -->
|
|
|
|
|
<el-form-item label="模型选择" prop="deviceModelId">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formData.deviceModelId"
|
|
|
|
|
clearable
|
|
|
|
|
filterable
|
|
|
|
|
placeholder="请选择设备模型"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="item in modelList"
|
|
|
|
|
:key="item.id"
|
|
|
|
|
:label="item.name"
|
|
|
|
|
:value="item.id"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="采集周期/s" prop="sampleCycle">
|
|
|
|
|
<el-input v-model="formData.sampleCycle" placeholder="请输入采集周期" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="端点URL" prop="url">
|
|
|
|
|
<el-input v-model="formData.url" placeholder="请输入端点URL" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="用户名" prop="username">
|
|
|
|
|
<el-input v-model="formData.username" placeholder="请输入用户名" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="密码" prop="password">
|
|
|
|
|
<el-input v-model="formData.password" placeholder="请输入密码" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="是否启用" prop="isEnable">
|
|
|
|
|
<el-radio-group v-model="formData.isEnable">
|
|
|
|
|
<el-radio
|
|
|
|
|
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.value"
|
|
|
|
|
<template v-if="formType === 'create'">
|
|
|
|
|
<el-form-item label="模型选择" prop="deviceModelId">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="formData.deviceModelId"
|
|
|
|
|
clearable
|
|
|
|
|
filterable
|
|
|
|
|
placeholder="请选择设备模型"
|
|
|
|
|
>
|
|
|
|
|
{{ dict.label }}
|
|
|
|
|
</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-option v-for="item in modelList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="采集周期/s" prop="sampleCycle">
|
|
|
|
|
<el-input v-model="formData.sampleCycle" placeholder="请输入采集周期" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="是否启用" prop="isEnable">
|
|
|
|
|
<el-radio-group v-model="formData.isEnable">
|
|
|
|
|
<el-radio
|
|
|
|
|
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.value"
|
|
|
|
|
>
|
|
|
|
|
{{ dict.label }}
|
|
|
|
|
</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-else-if="formType === 'update'">
|
|
|
|
|
<el-form-item label="采集周期/s" prop="sampleCycle">
|
|
|
|
|
<el-input v-model="formData.sampleCycle" placeholder="请输入采集周期" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="是否启用" prop="isEnable">
|
|
|
|
|
<el-radio-group v-model="formData.isEnable">
|
|
|
|
|
<el-radio
|
|
|
|
|
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.value"
|
|
|
|
|
>
|
|
|
|
|
{{ dict.label }}
|
|
|
|
|
</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template v-else>
|
|
|
|
|
<el-form-item label="端点URL" prop="url">
|
|
|
|
|
<el-input v-model="formData.url" placeholder="请输入端点URL" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="用户名" prop="username">
|
|
|
|
|
<el-input v-model="formData.username" placeholder="请输入用户名" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="密码" prop="password">
|
|
|
|
|
<el-input v-model="formData.password" placeholder="请输入密码" show-password />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
|
|
|
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">保 存</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</Dialog>
|
|
|
|
|
</template>
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
|
|
|
|
import { getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
|
|
|
|
|
import { DeviceApi, DeviceVO } from '@/api/iot/device'
|
|
|
|
|
import {DeviceModelApi, DeviceModelVO} from "@/api/iot/devicemodel";
|
|
|
|
|
|
|
|
|
|
@ -135,16 +165,28 @@ const formData = ref({
|
|
|
|
|
password: undefined,
|
|
|
|
|
})
|
|
|
|
|
const formRules = reactive({
|
|
|
|
|
deviceCode: [{ required: true, message: '设备编码不能为空', trigger: 'blur' }],
|
|
|
|
|
deviceName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
|
|
|
|
|
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
|
|
|
|
|
create: {
|
|
|
|
|
deviceCode: [{ required: true, message: '设备编码不能为空', trigger: 'blur' }],
|
|
|
|
|
deviceName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
|
|
|
|
|
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
|
|
|
|
|
},
|
|
|
|
|
update: {
|
|
|
|
|
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }]
|
|
|
|
|
},
|
|
|
|
|
setting: {
|
|
|
|
|
url: [{ required: true, message: '端点URL不能为空', trigger: 'blur' }]
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const activeRules = computed(() => {
|
|
|
|
|
return (formRules as any)[formType.value] ?? {}
|
|
|
|
|
})
|
|
|
|
|
const formRef = ref() // 表单 Ref
|
|
|
|
|
|
|
|
|
|
/** 打开弹窗 */
|
|
|
|
|
const open = async (type: string, id?: number) => {
|
|
|
|
|
dialogVisible.value = true
|
|
|
|
|
dialogTitle.value = t('action.' + type)
|
|
|
|
|
dialogTitle.value = type === 'setting' ? '设备设置' : t('action.' + type)
|
|
|
|
|
formType.value = type
|
|
|
|
|
resetForm()
|
|
|
|
|
// 修改时,设置数据
|
|
|
|
|
@ -167,11 +209,18 @@ const submitForm = async () => {
|
|
|
|
|
// 提交请求
|
|
|
|
|
formLoading.value = true
|
|
|
|
|
try {
|
|
|
|
|
const data = formData.value as unknown as DeviceVO
|
|
|
|
|
const { id, deviceCode, deviceName, deviceModelId, sampleCycle, remark, isEnable, url, username, password } = formData.value as any
|
|
|
|
|
|
|
|
|
|
if (formType.value === 'create') {
|
|
|
|
|
await DeviceApi.createDevice(data)
|
|
|
|
|
const data: Partial<DeviceVO> = { deviceCode, deviceName, deviceModelId, sampleCycle, remark, isEnable }
|
|
|
|
|
await DeviceApi.createDevice(data as DeviceVO)
|
|
|
|
|
message.success(t('common.createSuccess'))
|
|
|
|
|
} else if (formType.value === 'update') {
|
|
|
|
|
const data: any = { id, deviceCode, deviceName, deviceModelId, sampleCycle, isEnable }
|
|
|
|
|
await DeviceApi.updateDevice(data)
|
|
|
|
|
message.success(t('common.updateSuccess'))
|
|
|
|
|
} else {
|
|
|
|
|
const data: any = { id, deviceCode, deviceName, deviceModelId, isEnable, url, username, password }
|
|
|
|
|
await DeviceApi.updateDevice(data)
|
|
|
|
|
message.success(t('common.updateSuccess'))
|
|
|
|
|
}
|
|
|
|
|
@ -198,7 +247,13 @@ const resetForm = () => {
|
|
|
|
|
offLineDuration: undefined,
|
|
|
|
|
lastOnlineTime: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
isEnable: true
|
|
|
|
|
isEnable: true,
|
|
|
|
|
deviceModelId: undefined,
|
|
|
|
|
protocol: undefined,
|
|
|
|
|
sampleCycle: undefined,
|
|
|
|
|
url: undefined,
|
|
|
|
|
username: undefined,
|
|
|
|
|
password: undefined,
|
|
|
|
|
}
|
|
|
|
|
formRef.value?.resetFields()
|
|
|
|
|
}
|
|
|
|
|
|