修改枚举

This commit is contained in:
2025-11-06 20:33:59 +08:00
parent df88ce9315
commit d898d1eb48
15 changed files with 425 additions and 92 deletions

View File

@@ -27,8 +27,8 @@
<el-form-item label="类别" prop="category">
<el-select v-model="formData.category" placeholder="请选择类别" @change="handleCategoryChange">
<el-option label="执行器" value="执行器" />
<el-option label="传感器" value="传感器" />
<el-option :label="DeviceCategory.ACTUATOR" :value="DeviceCategory.ACTUATOR" />
<el-option :label="DeviceCategory.SENSOR" :value="DeviceCategory.SENSOR" />
</el-select>
</el-form-item>
@@ -42,7 +42,7 @@
</el-form-item>
<el-form-item
v-if="formData.category === '传感器'"
v-if="formData.category === DeviceCategory.SENSOR"
label="值描述 (JSON)"
prop="values"
>
@@ -68,6 +68,7 @@
import { ref, reactive, computed, watch, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
import deviceTemplateService from '../services/deviceTemplateService.js';
import { DeviceCategory } from '../enums.js';
// 默认的JSON模板
const DEFAULT_ACTUATOR_COMMANDS = JSON.stringify({
@@ -115,7 +116,7 @@ export default {
name: '',
manufacturer: '',
description: '',
category: '执行器', // 默认执行器
category: DeviceCategory.ACTUATOR, // 默认执行器
commands: DEFAULT_ACTUATOR_COMMANDS, // 预填充执行器指令
values: '',
});
@@ -143,7 +144,7 @@ export default {
{ validator: validateJson, message: '指令参数必须是有效的 JSON 格式', trigger: 'blur' },
],
values: [
{ required: formData.category === '传感器', message: '请输入值描述', trigger: 'blur' },
{ required: formData.category === DeviceCategory.SENSOR, message: '请输入值描述', trigger: 'blur' },
{ validator: validateJson, message: '值描述必须是有效的 JSON 格式', trigger: 'blur' },
],
}));
@@ -153,10 +154,10 @@ export default {
});
const handleCategoryChange = (newCategory) => {
if (newCategory === '执行器') {
if (newCategory === DeviceCategory.ACTUATOR) {
formData.commands = DEFAULT_ACTUATOR_COMMANDS;
formData.values = ''; // 执行器没有values
} else if (newCategory === '传感器') {
} else if (newCategory === DeviceCategory.SENSOR) {
formData.commands = DEFAULT_SENSOR_COMMANDS;
formData.values = DEFAULT_SENSOR_VALUES; // 传感器预填充values
}
@@ -193,7 +194,7 @@ export default {
commands: JSON.parse(formData.commands),
};
if (formData.category === '传感器' && formData.values) {
if (formData.category === DeviceCategory.SENSOR && formData.values) {
submitData.values = JSON.parse(formData.values);
}
@@ -227,9 +228,9 @@ export default {
formData.manufacturer = newVal.manufacturer;
formData.description = newVal.description;
if (newVal.category === 'sensor') {
formData.category = '传感器';
formData.category = DeviceCategory.SENSOR;
} else if (newVal.category === 'actuator') {
formData.category = '执行器';
formData.category = DeviceCategory.ACTUATOR;
} else {
formData.category = newVal.category;
}
@@ -274,6 +275,7 @@ export default {
handleCategoryChange,
handleClose,
handleSubmit,
DeviceCategory,
};
},
};

View File

@@ -39,6 +39,7 @@
import { ref, reactive, watch, computed, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
import { createPen, updatePen } from '@/api/pen.js';
import { PenStatus } from '@/enums.js';
export default {
name: 'PenForm',
@@ -60,13 +61,13 @@ export default {
setup(props, { emit }) {
const formRef = ref(null);
const loading = ref(false);
const penStatusOptions = ["空闲", "使用中", "病猪栏", "康复栏", "清洗消毒", "维修中"];
const penStatusOptions = Object.values(PenStatus);
const initialFormData = () => ({
id: null,
pen_number: '',
capacity: 10,
status: '空闲',
status: PenStatus.EMPTY,
house_id: null
});

View File

@@ -53,6 +53,7 @@
import {ref, reactive, watch, computed, nextTick} from 'vue';
import {ElMessage} from 'element-plus';
import {createPigBatch, updatePigBatch} from '@/api/pigBatch.js';
import { PigBatchOriginType, PigBatchStatus } from '@/enums.js';
export default {
name: 'PigBatchForm',
@@ -75,16 +76,16 @@ export default {
const formRef = ref(null);
const loading = ref(false);
const originTypeOptions = ["自繁", "外购"];
const batchStatusOptions = ["保育", "生长", "育肥", "待售", "已出售", "已归档"];
const originTypeOptions = Object.values(PigBatchOriginType);
const batchStatusOptions = Object.values(PigBatchStatus);
const initialFormData = () => ({
id: null,
batch_number: '',
initial_count: 1,
origin_type: '自繁',
origin_type: PigBatchOriginType.SELF_FARROWED,
start_date: '',
status: '保育',
status: PigBatchStatus.WEANING,
});
const formData = reactive(initialFormData());
@@ -182,8 +183,8 @@ export default {
formData.id = props.batchData.id;
formData.batch_number = props.batchData.batch_number || '';
formData.initial_count = props.batchData.initial_count || 1;
formData.origin_type = props.batchData.origin_type || '自繁';
formData.status = props.batchData.status || '保育';
formData.origin_type = props.batchData.origin_type || PigBatchOriginType.SELF_FARROWED;
formData.status = props.batchData.status || PigBatchStatus.WEANING;
formData.start_date = fromRFC3339(props.batchData.start_date);
}
nextTick(() => {

View File

@@ -18,6 +18,7 @@
<script>
import { computed } from 'vue';
import { PenStatus } from '@/enums.js';
export default {
name: 'PigBatchPenCard',
@@ -39,14 +40,14 @@ export default {
setup(props, { emit }) {
const statusType = computed(() => {
switch (props.pen.status) {
case '使用中':
case PenStatus.OCCUPIED:
return 'success';
case '病猪栏':
case '维修中':
case PenStatus.SICK_PEN:
case PenStatus.UNDER_MAINTENANCE:
return 'danger';
case '清洗消毒':
case PenStatus.CLEANING:
return 'warning';
case '空闲':
case PenStatus.EMPTY:
default:
return 'info';
}

View File

@@ -18,6 +18,7 @@
<script>
import { computed } from 'vue';
import { PenStatus } from '@/enums.js';
export default {
name: 'PigPenInfoCard',
@@ -31,14 +32,14 @@ export default {
setup(props, { emit }) {
const statusType = computed(() => {
switch (props.pen.status) {
case '使用中':
case PenStatus.OCCUPIED:
return 'success';
case '病猪栏':
case '维修中':
case PenStatus.SICK_PEN:
case PenStatus.UNDER_MAINTENANCE:
return 'danger';
case '清洗消毒':
case PenStatus.CLEANING:
return 'warning';
case '空闲':
case PenStatus.EMPTY:
default:
return 'info';
}

View File

@@ -31,8 +31,8 @@
<!-- 执行方式 -->
<el-form-item label="执行方式" prop="execution_type">
<el-radio-group v-model="formData.execution_type" @change="handleExecutionTypeChange">
<el-radio label="automatic">自动执行</el-radio>
<el-radio label="manual">手动执行</el-radio>
<el-radio :label="PlanExecutionType.AUTOMATIC">自动执行</el-radio>
<el-radio :label="PlanExecutionType.MANUAL">手动执行</el-radio>
</el-radio-group>
</el-form-item>
@@ -40,7 +40,7 @@
<el-form-item
label="执行次数"
prop="execute_num"
v-if="formData.execution_type === 'automatic'">
v-if="formData.execution_type === PlanExecutionType.AUTOMATIC">
<el-input-number
v-model="formData.execute_num"
:min="0"
@@ -56,7 +56,7 @@
<el-form-item
label="执行频率"
prop="cron_expression"
v-if="formData.execution_type === 'automatic'">
v-if="formData.execution_type === PlanExecutionType.AUTOMATIC">
<cron-expression-editor
v-model="formData.cron_expression"
/>
@@ -82,6 +82,7 @@
import { ref, reactive, computed, watch } from 'vue';
import { ElMessage } from 'element-plus';
import CronExpressionEditor from './CronExpressionEditor.vue';
import { PlanExecutionType } from '../enums.js';
export default {
name: 'PlanForm',
@@ -115,7 +116,7 @@ export default {
id: null,
name: '',
description: '',
execution_type: 'automatic', // 默认自动执行
execution_type: PlanExecutionType.AUTOMATIC, // 默认自动执行
execute_num: 0, // 0表示无限执行
cron_expression: '', // cron表达式
content_type: 'tasks' // 默认类型为tasks
@@ -145,7 +146,7 @@ export default {
// 处理执行方式变更
const handleExecutionTypeChange = (value) => {
// 如果切换为手动执行清空执行次数和cron表达式
if (value === '手动') {
if (value === PlanExecutionType.MANUAL) {
formData.execute_num = 0;
formData.cron_expression = '';
} else {
@@ -178,7 +179,7 @@ export default {
}
// 如果是手动执行清除执行次数和cron表达式
if (formData.execution_type === '手动') {
if (formData.execution_type === PlanExecutionType.MANUAL) {
submitData.execute_num = 0;
submitData.cron_expression = '';
}
@@ -220,7 +221,7 @@ export default {
}
});
// 默认值
formData.execution_type = 'automatic';
formData.execution_type = PlanExecutionType.AUTOMATIC;
formData.content_type = 'tasks'; // 确保content_type有默认值
}
}, { immediate: true });
@@ -233,7 +234,8 @@ export default {
title,
handleExecutionTypeChange,
handleClose,
handleSubmit
handleSubmit,
PlanExecutionType
};
}
};