Browse Source

设备名称和设备编号进行重命名校验

like 9 months ago
parent
commit
ab54d454bf

+ 9 - 1
snowy-admin-web/src/api/basicset/memApi.js

@@ -1,7 +1,6 @@
 import { baseRequest } from '@/utils/request'
 
 const request = (url, ...arg) => baseRequest(`/coldchain/monitordevice/` + url, ...arg)
-
 // 采集器管理
 export default {
 	// 获取列表数据分页
@@ -23,5 +22,14 @@ export default {
 	// 详情
 	memDetail(data) {
 		return request('detail', data, 'get')
+	},
+
+	// 检查设备名是否已注册
+	submitDeviceName(data) {
+		return request('getByDeviceName', data, 'get')
+	},
+	// 检查设备名是否已注册
+	submitDeviceCode(data) {
+		return request('getByDeviceCode', data, 'get')
 	}
 }

+ 5 - 0
snowy-admin-web/src/utils/formRules.js

@@ -59,5 +59,10 @@ export const rules = {
 	initialYesBackslashChart: {
 		pattern: /^\/[^/].*$/,
 		message: '首字母必须是反斜杠 “/”'
+	},
+	integer: {
+		pattern: /^-?\d+$/,
+		message: '填写内容必须是整型',
+		trigger: 'blur'
 	}
 }

+ 60 - 4
snowy-admin-web/src/views/basicset/devicetype/form.vue

@@ -21,7 +21,7 @@
 				</a-col>
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 					<a-form-item label="型号编号" name="code">
-						<a-input v-model:value="formData.code" placeholder="请输入型号编号" allow-clear />
+						<a-input v-model:value="formData.code" placeholder="请输入型号编号" allow-clear :maxlength="10" />
 					</a-form-item>
 				</a-col>
 
@@ -98,7 +98,7 @@
 							placeholder="请输入传感器路数"
 							allow-clear
 							:min="1"
-							:max="100000"
+							:max="4"
 							style="width: 100%"
 							:precision="0"
 						/>
@@ -120,18 +120,74 @@
 </template>
 
 <script setup>
-	import { required } from '@/utils/formRules'
+	import { required, rules } from '@/utils/formRules'
 	import devicetypeApi from '@/api/basicset/devicetypeApi'
 	const emit = defineEmits({ successful: null })
 	const visible = ref(false) // 默认是关闭状态
 	const formRef = ref()
 	const formData = ref({ sortCode: 99 }) // 表单数据
+	import { isNumber } from '@/utils/validate'
 	// 默认要校验的
 	const formRules = {
 		name: [required('请输入型号名称')],
 		code: [required('请输入型号编号')],
+		sensorCount: [required('请输入传感器路数')],
+		temperatureUp: [{ validator: validateTemperature, trigger: ['change', 'blur'] }],
+		temperatureDown: [{ validator: validateTemperature, trigger: ['change', 'blur'] }],
+		humidityUp: [{ validator: validateHumidity, trigger: ['change', 'blur'] }],
+		humidityDown: [{ validator: validateHumidity, trigger: ['change', 'blur'] }],
+		co2Up: [{ validator: validateCo2, trigger: ['change', 'blur'] }],
+		co2Down: [{ validator: validateCo2, trigger: ['change', 'blur'] }]
+	}
+	// 温度上下限校验
+	function validateTemperature(rule, value, callback) {
+		if (rule.field == 'temperatureDown') {
+			if (formData.value.temperatureUp !== null && value >= formData.value.temperatureUp) {
+				callback(new Error('温度下限不能大于或等于温度上限'))
+			} else {
+				callback()
+			}
+		} else if (rule.field == 'temperatureUp') {
+			if (formData.value.temperatureDown !== null && value <= formData.value.temperatureDown) {
+				callback(new Error('温度上限不能小于或等于温度下限'))
+			} else {
+				callback()
+			}
+		}
+	}
 
-		sensorCount: [required('请输入传感器路数')]
+	// 湿度上下限校验
+	function validateHumidity(rule, value, callback) {
+		if (rule.field == 'humidityDown') {
+			if (formData.value.humidityUp !== null && value >= formData.value.humidityUp) {
+				callback(new Error('湿度下限不能大于或等于湿度上限'))
+			} else {
+				callback()
+			}
+		} else if (rule.field == 'humidityUp') {
+			if (formData.value.humidityDown !== null && value <= formData.value.humidityDown) {
+				callback(new Error('湿度上限不能小于或等于湿度下限'))
+			} else {
+				callback()
+			}
+		}
+	}
+
+	// CO2上下限校验
+	function validateCo2(rule, value, callback) {
+		if (rule.field == 'co2Down') {
+			if (formData.value.co2Up !== null && value >= formData.value.co2Up) {
+				callback(new Error('CO2下限不能大于或等于CO2上限'))
+			} else {
+				callback()
+			}
+		} else if (rule.field == 'co2Up') {
+			if (formData.value.co2Down !== null && value <= formData.value.co2Down) {
+				callback(new Error('CO2上限不能小于或等于CO2下限'))
+			} else {
+				callback()
+			}
+		}
 	}
 
 	// 打开抽屉

+ 30 - 10
snowy-admin-web/src/views/basicset/devicetype/index.vue

@@ -1,6 +1,12 @@
 <template>
 	<div class="table_item">
-		<s-table ref="tableRef" :columns="columns" :data="loadData" :row-key="(record) => record.id">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:row-key="(record) => record.id"
+			@resizeColumn="handleResizeColumn"
+		>
 			<template #operator>
 				<!-- 搜索区域 -->
 				<div class="table-search">
@@ -63,56 +69,65 @@
 			title: '型号名称',
 			dataIndex: 'name',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '型号编号',
 			dataIndex: 'code',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '传感器路数',
 			dataIndex: 'sensorCount',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '温度上限',
 			dataIndex: 'temperatureUp',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '温度下限',
 			dataIndex: 'temperatureDown',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '湿度上限',
 			dataIndex: 'humidityUp',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 
 		{
 			title: '湿度下限',
 			dataIndex: 'humidityDown',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: 'CO2上限',
 			dataIndex: 'co2Up',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: 'CO2下限',
 			dataIndex: 'co2Down',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 
 		{
@@ -120,6 +135,7 @@
 			dataIndex: 'sortCode',
 			align: 'center',
 			ellipsis: true,
+			resizable: true,
 			sorter: true
 		},
 
@@ -130,6 +146,10 @@
 			width: 150
 		}
 	]
+	// 可伸缩列
+	const handleResizeColumn = (w, col) => {
+		col.width = w
+	}
 
 	const loadData = (parameter) => {
 		return devicetypeApi.devicetypePage(Object.assign(parameter, searchFormState.value)).then((res) => {

+ 37 - 4
snowy-admin-web/src/views/basicset/mem/form.vue

@@ -21,7 +21,13 @@
 				</a-col>
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 					<a-form-item label="设备编号" name="deviceCode">
-						<a-input v-model:value="formData.deviceCode" placeholder="请输入设备编号" allow-clear />
+						<a-input
+							v-model:value="formData.deviceCode"
+							placeholder="请输入设备编号"
+							allow-clear
+							:maxlength="10"
+							@blur="handleCodeBlur"
+						/>
 					</a-form-item>
 				</a-col>
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
@@ -144,7 +150,7 @@
 </template>
 
 <script setup>
-	import { required } from '@/utils/formRules'
+	import { required, rules } from '@/utils/formRules'
 	import devicetypeApi from '@/api/basicset/devicetypeApi'
 	import memApi from '@/api/basicset/memApi'
 	const emit = defineEmits({ successful: null })
@@ -157,12 +163,28 @@
 	// 默认要校验的
 	const formRules = {
 		deviceName: [required('请输入设备名称')],
-		deviceCode: [required('请输入设备编号')],
+		deviceCode: [required('请输入设备编号'), rules.integer],
 		modelName: [required('请选择设备型号')],
 		status: [required('请选择设备状态')],
 		sensorCount: [required('请输入传感器路数')]
 	}
 
+	// 检查设备名是否已注册
+	watch(
+		() => formData.value.deviceName,
+		(newVal) => {
+			if (newVal) {
+				memApi
+					.submitDeviceName({ deviceName: newVal })
+					.then((res) => {})
+					.catch(() => {
+						return (formData.value.deviceName = '')
+					})
+			}
+		},
+		{ immediate: true, deep: true }
+	)
+
 	// 获取设备型号
 	const loadData = () => {
 		devicetypeApi.devicetypeList().then((res) => {
@@ -175,8 +197,19 @@
 			})
 		})
 	}
+	// 检查设备名是否已注册
+	const handleCodeBlur = () => {
+		if (formData.value.deviceCode) {
+			memApi
+				.submitDeviceCode({ deviceCode: formData.value.deviceCode })
+				.then((res) => {})
+				.catch(() => {
+					formData.value.deviceCode = ''
+				})
+		}
+	}
 
-	// 选中设备型号
+	// 选中设备型号获取上下限值
 	const modelNameChange = (value) => {
 		if (value) {
 			const data = modeOptions.value.find((item) => item.value === value)

+ 26 - 8
snowy-admin-web/src/views/basicset/mem/index.vue

@@ -1,6 +1,12 @@
 <template>
 	<div class="table_item">
-		<s-table ref="tableRef" :columns="columns" :data="loadData" :row-key="(record) => record.id">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:row-key="(record) => record.id"
+			@resizeColumn="handleResizeColumn"
+		>
 			<template #operator>
 				<!-- 搜索区域 -->
 				<div class="table-search">
@@ -102,50 +108,58 @@
 			title: '设备名称',
 			dataIndex: 'deviceName',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '设备编号',
 			dataIndex: 'deviceCode',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '设备型号',
 			dataIndex: 'typeName',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '最后心跳时间',
 			dataIndex: 'lastHeartbeatTime',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '设备状态',
 			dataIndex: 'status',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 
 		{
 			title: '传感器路数',
 			dataIndex: 'sensorCount',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '最近登录时间',
 			dataIndex: 'lastLoginTime',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '排序码',
 			dataIndex: 'sortCode',
 			align: 'center',
 			ellipsis: true,
+			resizable: true,
 			sorter: true
 		},
 
@@ -156,6 +170,10 @@
 			width: 150
 		}
 	]
+	// 可伸缩列
+	const handleResizeColumn = (w, col) => {
+		col.width = w
+	}
 
 	const loadData = (parameter) => {
 		return memApi.memPage(Object.assign(parameter, searchFormState.value)).then((res) => {

+ 17 - 17
snowy-admin-web/src/views/basicset/monitor/setup.vue

@@ -1,6 +1,12 @@
 <template>
 	<div class="table_item">
-		<s-table ref="tableRef" :columns="columns" :data="loadData" :row-key="(record) => record.id">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:row-key="(record) => record.id"
+			@resizeColumn="handleResizeColumn"
+		>
 			<template #operator>
 				<!-- 搜索区域 -->
 				<div class="table-search">
@@ -149,32 +155,22 @@
 			title: '对象名称',
 			dataIndex: 'name',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '对象状态',
 			dataIndex: 'status',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '监控位置区域',
 			dataIndex: 'monitorPoint',
 			align: 'center',
-			ellipsis: true
-		},
-
-		{
-			title: '报警上限',
-			dataIndex: 'limitUp',
-			align: 'center',
-			ellipsis: true
-		},
-		{
-			title: '报警下限',
-			dataIndex: 'limitDown',
-			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '操作',
@@ -183,6 +179,10 @@
 			width: 200
 		}
 	]
+	// 可伸缩列
+	const handleResizeColumn = (w, col) => {
+		col.width = w
+	}
 
 	const loadData = (parameter) => {
 		return setupApi.setupPage(Object.assign(parameter, searchFormState.value)).then((res) => {

+ 35 - 17
snowy-admin-web/src/views/motoring/location/form.vue

@@ -71,7 +71,7 @@
 					</a-form-item>
 				</a-col>
 
-				<!-- 温湿度传感器就显示温度上限、温度下限,湿度上限、湿度下限.CO2传感器就显示CO2上限、CO2下限 -->
+				<!-- 温湿度传感器就显示温度上限、温度下限,湿度上限、湿度下限.CO2传感器就显示CO2上限、CO2下限,若监控设备没有设置上下限,则表单禁用状态 -->
 				<div v-if="formData.sensorType && formData.sensorType !== 'CO2传感器'" class="form_item">
 					<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 						<a-form-item label="温度上限" name="temperatureUp">
@@ -83,6 +83,7 @@
 								:min="temperatureMax.downMax"
 								:max="temperatureMax.upMax"
 								style="width: 100%"
+								:disabled="temperatureMax.upMax == null || temperatureMax.upMax == undefined"
 							/>
 						</a-form-item>
 					</a-col>
@@ -96,6 +97,7 @@
 								:min="temperatureMax.downMax"
 								:max="temperatureMax.upMax"
 								style="width: 100%"
+								:disabled="!temperatureMax.downMax == null || temperatureMax.downMax == undefined"
 							/>
 						</a-form-item>
 					</a-col>
@@ -109,6 +111,7 @@
 								:min="humidityMax.downMax"
 								:max="humidityMax.upMax"
 								style="width: 100%"
+								:disabled="!humidityMax.upMax"
 							/>
 						</a-form-item>
 					</a-col>
@@ -122,6 +125,7 @@
 								:min="humidityMax.downMax"
 								:max="humidityMax.upMax"
 								style="width: 100%"
+								:disabled="!humidityMax.downMax"
 							/>
 						</a-form-item>
 					</a-col>
@@ -177,9 +181,9 @@
 	const monitorTargetOptions = ref([]) // 监控对象
 	const memListOptions = ref([]) // 监控设备数据
 
-	const temperatureMax = ref({ upMax: 1, downMax: 1 }) // 温度最大值
-	const humidityMax = ref({ upMax: 1, downMax: 1 }) // 湿度最大值
-	const co2Max = ref({ upMax: 1, downMax: 1 }) // CO2最大值
+	const temperatureMax = ref({ upMax: Infinity, downMax: Infinity }) // 温度最大值
+	const humidityMax = ref({ upMax: Infinity, downMax: Infinity }) // 湿度最大值
+	const co2Max = ref({ upMax: Infinity, downMax: Infinity }) // CO2最大值
 
 	const sensorRouteMax = ref(1) //传感器最大值默认1
 
@@ -200,40 +204,52 @@
 
 	// 温度上下限校验
 	function validateTemperature(rule, value, callback) {
-		if (formData.value.temperatureDown && formData.value.temperatureUp) {
-			if (formData.value.temperatureDown >= formData.value.temperatureUp) {
+		if (rule.field == 'temperatureDown') {
+			if (formData.value.temperatureUp !== null && value >= formData.value.temperatureUp) {
 				callback(new Error('温度下限不能大于或等于温度上限'))
 			} else {
 				callback()
 			}
-		} else {
-			callback()
+		} else if (rule.field == 'temperatureUp') {
+			if (formData.value.temperatureDown !== null && value <= formData.value.temperatureDown) {
+				callback(new Error('温度上限不能小于或等于温度下限'))
+			} else {
+				callback()
+			}
 		}
 	}
 
 	// 湿度上下限校验
 	function validateHumidity(rule, value, callback) {
-		if (formData.value.humidityDown && formData.value.humidityUp) {
-			if (formData.value.humidityDown >= formData.value.humidityUp) {
+		if (rule.field == 'humidityDown') {
+			if (formData.value.humidityUp !== null && value >= formData.value.humidityUp) {
 				callback(new Error('湿度下限不能大于或等于湿度上限'))
 			} else {
 				callback()
 			}
-		} else {
-			callback()
+		} else if (rule.field == 'humidityUp') {
+			if (formData.value.humidityDown !== null && value <= formData.value.humidityDown) {
+				callback(new Error('湿度上限不能小于或等于湿度下限'))
+			} else {
+				callback()
+			}
 		}
 	}
 
 	// CO2上下限校验
 	function validateCo2(rule, value, callback) {
-		if (formData.value.co2Down && formData.value.co2Up) {
-			if (formData.value.co2Down >= formData.value.co2Up) {
+		if (rule.field == 'co2Down') {
+			if (formData.value.co2Up !== null && value >= formData.value.co2Up) {
 				callback(new Error('CO2下限不能大于或等于CO2上限'))
 			} else {
 				callback()
 			}
-		} else {
-			callback()
+		} else if (rule.field == 'co2Up') {
+			if (formData.value.co2Down !== null && value <= formData.value.co2Down) {
+				callback(new Error('CO2上限不能小于或等于CO2下限'))
+			} else {
+				callback()
+			}
 		}
 	}
 
@@ -286,7 +302,7 @@
 			formData.value.humidityUp = data.humidityUp //湿度上限
 			formData.value.humidityDown = data.humidityDown //湿度下限
 			formData.value.co2Up = data.co2Up //CO2上限
-			formData.value.co2Up = data.co2Up //CO2下限
+			formData.value.co2Down = data.co2Down //CO2下限
 			sensorRouteMax.value = data.sensorCount //传感器路数的最大值
 
 			temperatureMax.value = {
@@ -301,6 +317,8 @@
 				upMax: data.co2Up,
 				downMax: data.co2Down
 			}
+
+			console.log(humidityMax.value, 'xxxx')
 		}
 	}
 

+ 23 - 20
snowy-admin-web/src/views/motoring/location/index.vue

@@ -1,6 +1,12 @@
 <template>
 	<div class="table_item">
-		<s-table ref="tableRef" :columns="columns" :data="loadData" :row-key="(record) => record.id">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:row-key="(record) => record.id"
+			@resizeColumn="handleResizeColumn"
+		>
 			<template #operator>
 				<!-- 搜索区域 -->
 				<div class="table-search">
@@ -62,50 +68,44 @@
 			title: '区域名称',
 			dataIndex: 'name',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 
 		{
 			title: '监控对象',
 			dataIndex: 'targetName',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '监控设备',
 			dataIndex: 'deviceName',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '传感器编号',
 			dataIndex: 'sensorCode',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '传感器类型',
 			dataIndex: 'sensorType',
 			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 		{
 			title: '传感器路数',
 			dataIndex: 'sensorRoute',
 			align: 'center',
-			ellipsis: true
-		},
-		{
-			title: '报警上限',
-			dataIndex: 'limitUp',
-			align: 'center',
-			ellipsis: true
-		},
-		{
-			title: '报警下限',
-			dataIndex: 'limitDown',
-			align: 'center',
-			ellipsis: true
+			ellipsis: true,
+			resizable: true
 		},
 
 		{
@@ -115,7 +115,10 @@
 			width: 150
 		}
 	]
-
+	// 可伸缩列
+	const handleResizeColumn = (w, col) => {
+		col.width = w
+	}
 	const loadData = (parameter) => {
 		return locationApi.locationPage(Object.assign(parameter, searchFormState.value)).then((res) => {
 			return res