소스 검색

feat(setting): 添加相机焦段距离配置功能

- 在action_config.vue中新增camera_focal_distance字段映射
- 在editRow.vue表单中添加相机焦段距离输入项,仅当设备支持时显示
- 添加hasCameraFocal和maxFocalDistance响应式变量控制焦段距离显示
- 通过get_device_info接口获取相机焦段距离配置信息
- 新增时自动设置相机焦段距离默认值为0
- 更新socketValue映射包含camera_focal_distance字段
- 提交数据时根据设备支持情况选择性包含相机焦段距离参数
panqiuyao 14 시간 전
부모
커밋
80e91eb646
2개의 변경된 파일25개의 추가작업 그리고 2개의 파일을 삭제
  1. 23 2
      frontend/src/views/Photography/components/editRow.vue
  2. 2 0
      frontend/src/views/Setting/components/action_config.vue

+ 23 - 2
frontend/src/views/Photography/components/editRow.vue

@@ -43,6 +43,12 @@
         </el-input>
         <div class="error-msg">最小-5,最大30</div>
       </el-form-item>
+      <!-- 相机焦段距离 - 仅当设备支持时显示 -->
+      <el-form-item label="相机焦段距离(mm)" v-if="hasCameraFocal" :class="{'is-disabled': isMultiCameraMode && editRowData.is_move_device === 0}">
+        <el-input v-model="editRowData.camera_focal_distance" @change="changeNum('camera_focal_distance', 0, maxFocalDistance)" :min="0" :max="maxFocalDistance" :step="1" style="width: 170px;" type="number" :disabled="isMultiCameraMode && editRowData.is_move_device === 0">
+        </el-input>
+        <div class="error-msg">最小0,最大{{ maxFocalDistance }}</div>
+      </el-form-item>
       <el-form-item label="转盘前后位置" :class="{'is-disabled': isMultiCameraMode && editRowData.is_move_device === 0}">
         <el-input v-model="editRowData.turntable_position" @change="changeNum('turntable_position_motor',0, 800)" :min="0" :max="800" :step="1"  style="width: 170px;" type="number" :disabled="isMultiCameraMode && editRowData.is_move_device === 0">
         </el-input>
@@ -158,6 +164,8 @@ const initStatus = ref(false)
 const isDefault = ref(true); // 是否为默认配置
 const editRowData = ref({}); // 当前编辑行的数据
 const maxCameraHeight = ref(350); // 相机高度最大值,默认350,通过get_device_info从后端获取
+const hasCameraFocal = ref(false); // 是否支持相机焦段距离
+const maxFocalDistance = ref(8000); // 相机焦段距离最大值,默认8000,通过get_device_info从后端获取
 
 // 监听点位变化,切换预览
 watch(() => editRowData.value.point_name, (newPoint, oldPoint) => {
@@ -181,6 +189,14 @@ async function fetchDeviceInfo() {
     if (result.code === 0 && result.data?.camera_height) {
       maxCameraHeight.value = result.data.camera_height;
     }
+    // 解析相机焦段距离信息
+    if (result.code === 0 && result.data?.camera_focal_data) {
+      const focalData = result.data.camera_focal_data;
+      hasCameraFocal.value = focalData.is_camera_has_focal === true;
+      if (focalData.camera_focal_distance) {
+        maxFocalDistance.value = Number(focalData.camera_focal_distance);
+      }
+    }
     clientStore.ipc.removeAllListeners(icpList.socket.message + '_get_device_info');
   });
 }
@@ -219,12 +235,14 @@ onMounted(async ()=>{
     fun =  getDeviceConfigDetailQuery
   }
 
-
-
   const result = await fun(params)
 
   if(result.code == 0 && result.data){
     editRowData.value = result.data;
+    // 新增时设置相机焦段距离默认值
+    if (!props.id && hasCameraFocal.value) {
+      editRowData.value.camera_focal_distance = 0;
+    }
     // 多相机模式默认值处理
     if (isMultiCameraMode.value) {
       // 验证点位是否有效,无效则使用第一个可用点位
@@ -254,6 +272,7 @@ async function changeNum(type, min, max) {
     'overturn_steering': 'shoe_upturn',
     'laser_position': 'led_switch',
     'take_picture': 'number_focus',
+    'camera_focal_distance': 'camera_focal_distance',
   };
   if(min || max){
     if(editRowData.value[socketValue[type]] < min || editRowData.value[socketValue[type]] > max){
@@ -306,6 +325,8 @@ function testShoesFlip(){
         take_picture:false,
         pre_delay:0,
         after_delay:0,
+        // 相机焦段距离(可选字段)
+        camera_focal_distance: hasCameraFocal.value ? Number(editRowData.value.camera_focal_distance || 0) : undefined,
         // 多相机模式参数
         point_name: isMultiCameraMode.value ? (editRowData.value.point_name || 'A') : undefined,
         is_move_device: isMultiCameraMode.value ? editRowData.value.is_move_device : undefined,

+ 2 - 0
frontend/src/views/Setting/components/action_config.vue

@@ -307,6 +307,7 @@ const copyRow = (row, index) => {
     number_focus: row.number_focus,
     pre_delay: row.pre_delay,
     after_delay: row.after_delay,
+    camera_focal_distance: row.camera_focal_distance
   }
   dialogVisible.value = true;
   editTitle.value = '新增步骤';
@@ -463,6 +464,7 @@ const addRow = () => {
     camera_angle: 0,
     turntable_position: 0,
     turntable_angle: 0,
+    camera_focal_distance:0,
     shoe_upturn: false,
     led_switch: false,
     number_focus: 0,