Browse Source

mod:设置保存

panqiuyao 8 months ago
parent
commit
84b78281da

+ 25 - 4
electron/api/setting.js

@@ -1,6 +1,7 @@
-const { post } = require('./request')
+const { post,get } = require('./request')
 
 module.exports = {
+
   getDeviceConfigs(data){
     return post({
       url: '/get_device_configs',
@@ -22,7 +23,7 @@ module.exports = {
   },
 
 
-  //��̨ͼ
+  //删除
   removeConfig(data){
     return post({
       url: '/remove_config',
@@ -33,7 +34,7 @@ module.exports = {
     })
   },
 
- // �����
+  //保存
   saveDeviceConfig(data){
     return post({
       url: '/save_device_config',
@@ -52,7 +53,27 @@ module.exports = {
         'Content-Type':"application/json",
       }
     })
-  }
+  },
+  //读取系统配置
 
+  getSysConfig(data){
+    return get({
+      url: '/get_sys_config',
+      data: data,
+      headers:{
+        'Content-Type':"application/json",
+      }
+    })
+  },
+  //更新系统配置
+  updateSysConfigs(data){
+    return post({
+      url: '/update_sys_configs',
+      data: data,
+      headers:{
+        'Content-Type':"application/json",
+      }
+    })
+  }
 
 }

+ 0 - 3
electron/controller/camera.js

@@ -59,9 +59,6 @@ async function checkCameraControlCmdExists() {
         return false;
       }
     }
-
-
-    console.log('aaaa2')
     const res = await openCameraControlCmd();
     return res;
   } catch (error) {

+ 35 - 4
electron/controller/setting.js

@@ -5,7 +5,7 @@ const Log = require('ee-core/log');
 const Services = require('ee-core/services');
 const path = require('path');
 const fs = require('fs');
-const { getDeviceConfigs, getDeviceConfigDetail, removeConfig, saveDeviceConfig, resetDeviceConfig } = require('../api/setting');
+const { getDeviceConfigs, getDeviceConfigDetail, removeConfig, saveDeviceConfig, resetDeviceConfig,updateSysConfigs,getSysConfig } = require('../api/setting');
 
 const errData = {
   msg :'请求失败,请联系管理员',
@@ -57,9 +57,7 @@ class SettingController extends Controller {
    */
   async removeDeviceConfig(args) {
     try {
-      console.log('1111');
-      const result = await removeConfig(args);
-      console.log(result);
+      const result = await removeConfig(args)
       if(result.data)  return result.data
       return errData;
     } catch (error) {
@@ -97,6 +95,39 @@ class SettingController extends Controller {
       return errData;
     }
   }
+
+
+
+  /**
+   * 读取配置
+   * @param {Object} args - 配置ID
+   */
+  async getSysConfig(args) {
+    try {
+      const result = await getSysConfig(args);
+      if(result.data)  return result.data
+      return errData;
+    } catch (error) {
+      Log.error('重置设备配置失败:', error);
+      return errData;
+    }
+  }
+
+
+  /**
+   * 保存配置
+   * @param {Object} args - 配置ID
+   */
+  async updateSysConfigs(args) {
+    try {
+      const result = await updateSysConfigs(args);
+      if(result.data)  return result.data
+      return errData;
+    } catch (error) {
+      Log.error('保存配置:', error);
+      return errData;
+    }
+  }
 }
 
 SettingController.toString = () => '[class SettingController]';

+ 3 - 0
frontend/src/components/header-bar/index.vue

@@ -86,6 +86,9 @@ function openSetting() {
 
   const { href } = Router.resolve({
     name: 'setting',
+    query:{
+      type:0,
+    }
   })
 
   clientStore.ipc.removeAllListeners(icpList.utils.openMain);

+ 2 - 0
frontend/src/utils/ipc.ts

@@ -26,6 +26,8 @@ const icpList = {
         saveDeviceConfig: 'controller.setting.saveDeviceConfig',
         getDeviceConfigList: 'controller.setting.getDeviceConfigList',
         resetDeviceConfig: 'controller.setting.resetDeviceConfig',
+        getSysConfig: 'controller.setting.getSysConfig',
+        updateSysConfigs: 'controller.setting.updateSysConfigs'
     },
     takePhoto:{
         getPhotoRecords: 'controller.takephoto.getPhotoRecords',

+ 306 - 185
frontend/src/views/Setting/index.vue

@@ -1,11 +1,6 @@
 <template>
   <headerBar
     title="设置"
-    :menu="[
-        {
-          type:'setting'
-        }
-    ]"
   />
   <div class="container">
     <nav class="settings-nav">
@@ -24,11 +19,11 @@
         <img src="@/assets/images/setting/icon3a.png" class="nav-icon" v-else/>
         <span>其他设置</span>
       </div>
-      <div class="nav-item" :class="{'active': activeIndex === 3}" @click="activeIndex = 3">
+<!--      <div class="nav-item" :class="{'active': activeIndex === 3}" @click="activeIndex = 3">
         <img src="@/assets/images/setting/icon4.png" class="nav-icon" v-if="activeIndex !== 3"/>
         <img src="@/assets/images/setting/icon4a.png" class="nav-icon" v-else/>
         <span>遥控器设置</span>
-      </div>
+      </div>-->
       <div class="nav-item" :class="{'active': activeIndex === 4}" @click="activeIndex = 4">
         <img src="@/assets/images/setting/icon4.png" class="nav-icon" v-if="activeIndex !== 4"/>
         <img src="@/assets/images/setting/icon4a.png" class="nav-icon" v-else/>
@@ -37,7 +32,7 @@
     </nav>
 
     <div class="form-container">
-        <div class="captureBox" v-if="activeIndex === 0">
+<!--        <div class="captureBox" v-if="activeIndex === 0">
             <div class="form-item">
                 <label>canpture_one图片输出文件夹:</label>
                 <div class="input-group">
@@ -47,13 +42,14 @@
                   </div>
                 </div>
             </div>
-<!--            <p class="error-text">capture one的导出拍照图像自动和智能拍的待处理图像自不一致,请重新选择</p>-->
-          </div>
+&lt;!&ndash;            <p class="error-text">capture one的导出拍照图像自动和智能拍的待处理图像自不一致,请重新选择</p>&ndash;&gt;
+          </div>-->
+      <!--基础配置-->
           <div class="selectBox" v-if="activeIndex === 0">
                 <div class="form-item">
                     <label>主图尺寸:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.mainImageSize" placeholder="请选择">
+                    <el-select v-model="formData.basic_configs.main_image_size" placeholder="请选择">
                       <el-option v-for="item in mainImageSizeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -61,7 +57,7 @@
                 <div class="form-item">
                     <label>图片输出格式:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.imageFormat" placeholder="请选择">
+                    <el-select v-model="formData.basic_configs.image_out_format" placeholder="请选择">
                       <el-option v-for="item in imageFormatList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -69,17 +65,19 @@
                 <div class="form-item">
                     <label>图片锐化:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.imageSharpening" placeholder="请选择">
+                    <el-select v-model="formData.basic_configs.image_sharpening" placeholder="请选择">
                       <el-option v-for="item in imageSharpeningList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
                 </div>
         </div>
+      <!--基础配置-->
+      <!--拍照设置-->
           <div class="selectBox" style="padding-top: 0px" v-if="activeIndex === 1">
                 <div class="form-item">
                     <label>重复拍摄警告:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.repeatWarning" placeholder="请选择">
+                    <el-select v-model="formData.take_photo_configs.repart_take_photo_warning" placeholder="请选择">
                       <el-option v-for="item in repeatWarningList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -87,7 +85,7 @@
                 <div class="form-item">
                     <label>单次张数警告:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.singleWarning" placeholder="请选择">
+                    <el-select v-model="formData.take_photo_configs.single_photo_warning" placeholder="请选择">
                       <el-option v-for="item in singleWarningList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -95,33 +93,35 @@
                 <div class="form-item">
                     <label>累计拍照警告:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.totalWarning" placeholder="请选择">
+                    <el-select v-model="formData.take_photo_configs.total_photo_warning" placeholder="请选择">
                       <el-option v-for="item in totalWarningList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
                 </div>
-                <div class="form-item">
+<!--                <div class="form-item">
                     <label>对焦时间:</label>
                     <div class="select-wrapper">
                       <el-input v-model="formData.focusTime" placeholder="请输入">
                         <template #append>秒</template>
                       </el-input>
                     </div>
-                </div>
+                </div>-->
                 <div class="form-item">
                     <label>拍照停留:</label>
                     <div class="select-wrapper">
-                      <el-input v-model="formData.photoTime" placeholder="请输入">
+                      <el-input v-model="formData.take_photo_configs.camera_delay" placeholder="请输入">
                         <template #append>秒</template>
                       </el-input>
                     </div>
                 </div>
         </div>
+      <!--拍照配置-->
+      <!--其他设置-->
           <div class="selectBox" style="padding-top: 0px" v-if="activeIndex === 2">
                 <div class="form-item">
                     <label>产品类型:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.productType" placeholder="请选择">
+                    <el-select v-model="formData.other_configs.product_type" placeholder="请选择">
                       <el-option v-for="item in productTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -129,7 +129,7 @@
                 <div class="form-item">
                     <label>默认抠图模式:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.defaultCutoutMode" placeholder="请选择">
+                    <el-select v-model="formData.other_configs.cutout_mode" placeholder="请选择">
                       <el-option v-for="item in defaultCutoutModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -137,7 +137,7 @@
                 <div class="form-item">
                     <label>设备运动速度:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.deviceSpeed" placeholder="请选择">
+                    <el-select v-model="formData.other_configs.device_speed" placeholder="请选择">
                       <el-option v-for="item in deviceSpeedList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
@@ -145,12 +145,13 @@
                 <div class="form-item">
                     <label>运行模式:</label>
                     <div class="select-wrapper">
-                    <el-select v-model="formData.runMode" placeholder="请选择">
+                    <el-select v-model="formData.other_configs.running_mode" placeholder="请选择">
                       <el-option v-for="item in runModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
                     </el-select>
                     </div>
                 </div>
           </div>
+      <!--其他设置-->
           <div class="selectBox" style="padding-top: 0px" v-if="activeIndex === 3">
                 <div class="form-item">
                     <label>接收器:</label>
@@ -232,7 +233,7 @@
           </div>
     </div>
       <div class="text-center mt-8">
-        <button class="bg-gradient-to-r from-primary" @click="saveSetting" v-if="activeIndex !== 4">
+        <button class="bg-gradient-to-r from-primary" @click="saveSetting(activeIndex)" v-if="activeIndex !== 4">
           保存
         </button>
       </div>
@@ -316,49 +317,80 @@
 </template>
 
 <script setup>
-// 这里可以添加Vue组件的逻辑
+/**
+ * Vue组件逻辑部分,包含与设备配置相关的功能。
+ * 主要功能包括:表单数据管理、设备配置列表获取、新增/编辑/删除步骤、保存配置等。
+ */
+
+// 引入Vue相关功能和第三方库
 import { ref, reactive } from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 import { onMounted, watch } from 'vue';
 import socket from "@/stores/modules/socket";
-import headerBar from '@/components/header-bar/index.vue'
-
+import headerBar from '@/components/header-bar/index.vue';
 import client from "@/stores/modules/client";
-import icpList from '@/utils/ipc'
+import icpList from '@/utils/ipc';
 const clientStore = client();
-import { ElMessage ,ElMessageBox } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus';
 
+// 路由和状态管理初始化
 const route = useRoute();
 const router = useRouter();
-const folderPath = ref('');
-const activeIndex = ref(0);
 
-const socketStore = socket()
+// 定义响应式变量
+const folderPath = ref(''); // 文件夹路径
+const activeIndex = ref(0); // 当前激活的索引
+const socketStore = socket(); // WebSocket状态管理实例
+
+/**
+ * 表单数据对象,用于存储设备配置信息。
+ */
 const formData = reactive({
-  captureOneFolder: '',
-  mainImageSize: '',
-  imageFormat: '',
-  imageSharpening: '',
-  repeatWarning: '',
-  singleWarning: '',
-  totalWarning: '',
-  focusTime: '',
-  photoTime: '',
-  productType: '',
-  defaultCutoutMode: '',
-  deviceSpeed: '',
-  runMode: '',
-  receiver: '',
-  left: '',
-  right: '',
-  up: '',
-  down: '',
+  //基础配置
+  basic_configs:{
+    "main_image_size": "",//主图尺寸
+    "image_out_format": "",//图片输出格式
+    "image_sharpening": "" //图片锐化
+  },
+  //拍照配置
+  take_photo_configs:{
+    "repart_take_photo_warning": false,//重复拍摄警告
+    "single_photo_warning": "",//单次张数警告
+    "total_photo_warning": "",//累计拍照警告
+    "camera_delay": ""//拍照停留
+  },
+  other_configs:{
+    "product_type": "",//产品类型
+    "cutout_mode": "",//默认抠图模式
+    "device_speed": "",//设备运动速度
+    "running_mode": "" //运行模式
+  },
+  captureOneFolder: '', // Capture One文件夹路径
+  mainImageSize: '', // 主图尺寸
+  imageFormat: '', // 图片格式
+  imageSharpening: '', // 图片锐化
+  repeatWarning: '', // 重复警告
+  singleWarning: '', // 单次警告
+  totalWarning: '', // 总警告
+  focusTime: '', // 对焦时间
+  photoTime: '', // 拍照时间
+  productType: '', // 产品类型
+  defaultCutoutMode: '', // 默认抠图模式
+  deviceSpeed: '', // 设备速度
+  runMode: '', // 运行模式
+  receiver: '', // 接收器类型
+  left: '', // 左脚配置
+  right: '', // 右脚配置
+  up: '', // 上移配置
+  down: '', // 下移配置
 });
+
+// 配置选项列表
 const mainImageSizeList = ref([
-  { label: '1600', value: '1600' },
-  { label: '1200', value: '1200' },
-  { label: '1024', value: '1024' },
   { label: '800', value: '800' },
+  { label: '1024', value: '1024' },
+  { label: '1200', value: '1200' },
+  { label: '1600', value: '1600' },
 ]);
 const imageFormatList = ref([
   { label: 'jpg', value: 'jpg' },
@@ -372,8 +404,8 @@ const imageSharpeningList = ref([
   { label: '3', value: '3' },
 ]);
 const repeatWarningList = ref([
-  { label: '关闭', value: '0' },
-  { label: '开启', value: '1' },
+  { label: '关闭', value: false },
+  { label: '开启', value: true },
 ]);
 const singleWarningList = ref([
   { label: '11', value: '11' },
@@ -386,14 +418,14 @@ const totalWarningList = ref([
   { label: '2.0', value: '2.0' },
 ]);
 const productTypeList = ref([
-  { label: '鞋类', value: '1' },
-  { label: '服装', value: '2' },
-  { label: '箱包', value: '3' },
+  { label: '鞋类', value: '鞋类' },
+  { label: '服装', value: '服装' },
+  { label: '箱包', value: '箱包' },
 ]);
 const defaultCutoutModeList = ref([
-  { label: '普通抠图', value: '1' },
-  { label: '智能抠图', value: '2' },
-  { label: '手动抠图', value: '3' },
+  { label: '普通抠图', value: '普通抠图' },
+  { label: '智能抠图', value: '智能抠图' },
+  { label: '手动抠图', value: '手动抠图' },
 ]);
 const deviceSpeedList = ref([
   { label: '一档', value: '1' },
@@ -430,60 +462,95 @@ const downList = ref([
   { label: '下移', value: '2' },
   { label: '左右移', value: '3' },
 ]);
-const lefttableData = ref([
 
-]);
-const righttableData = ref([
-]);
-const dialogVisible = ref(false);
-const editTitle = ref('');
-const editRowData = ref({});
-const activeTab = ref('left');
-const editIndex = ref(0);
-const isDefault = ref(false);
-// Watch for changes in the route query parameter 'type'
-watch(() => route.query.type, (newType) => {
-  if (newType) {
-    // Convert the query parameter to a number and update activeIndex
-    const typeValue = parseInt(newType);
-    if (!isNaN(typeValue) && typeValue >= 0 && typeValue <= 3) {
-      activeIndex.value = typeValue;
-    }
-    if(newType === '4'){
-      activeTab.value = 'left';
-      clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
-        mode_type:'执行左脚程序'
-      });
-      clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
-        lefttableData.value = result.data.list;
+// 表格数据和对话框状态
+const lefttableData = ref([]); // 左脚配置表格数据
+const righttableData = ref([]); // 右脚配置表格数据
+const dialogVisible = ref(false); // 编辑对话框可见状态
+const editTitle = ref(''); // 编辑对话框标题
+const editRowData = ref({}); // 当前编辑行的数据
+const activeTab = ref('left'); // 当前激活的标签页
+const editIndex = ref(0); // 当前编辑行的索引
+const isDefault = ref(false); // 是否为默认配置
+
+const indexKey  ={
+  0:"basic_configs",
+  1:"take_photo_configs",
+  2:"other_configs",
+}
+
+/**
+ * 监听路由参数变化,更新activeIndex和activeTab。
+ */
+watch(() => route.query.type, async (newType,oldType) => {
+
+  if(['0','1','2'].includes(oldType)){
+    await  saveSetting(oldType)
+  }
+  const typeValue = parseInt(newType) || 0;
+  switch (typeValue) {
+      case 4:
+        activeTab.value = 'left';
         clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      });
+        clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
+          mode_type: '执行左脚程序'
+        });
+        clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
+          if (result?.data?.list) {
+            lefttableData.value = result.data.list;
+          }
+          clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
+        });
+        break;
+      default:
+        clientStore.ipc.removeAllListeners(icpList.setting.getSysConfig);
+        clientStore.ipc.send(icpList.setting.getSysConfig,{
+          key: indexKey[typeValue]
+        });
+        clientStore.ipc.on(icpList.setting.getSysConfig, (event, result) => {
+          if(result.code == 0 && result.data){
+            formData[indexKey[typeValue]] = result.data
+          }
+          console.log('icpList.setting.getSysConfig')
+          console.log(result)
+          clientStore.ipc.removeAllListeners(icpList.setting.getSysConfig);
+        });
+        break;
     }
-  }
 }, { immediate: true });
+
+/**
+ * 监听activeTab变化,获取对应标签页的设备配置列表。
+ */
 watch(() => activeTab.value, (newTab) => {
-  if(newTab === 'left'){
-      clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
-        mode_type:'执行左脚程序'
-      });
-      clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
+  if (newTab === 'left') {
+    clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
+    clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
+      mode_type: '执行左脚程序'
+    });
+    clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
+      if (result?.data?.list) {
         lefttableData.value = result.data.list;
-        clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      });
-    }else{
+      }
       clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
-        mode_type:'执行右脚程序'
-      });
-      clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
+    });
+  } else {
+    clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
+    clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
+      mode_type: '执行右脚程序'
+    });
+    clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
+      if (result?.data?.list) {
         righttableData.value = result.data.list;
-        clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
-      });
+      }
+      clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
+    });
   }
 });
-// Update the URL when activeIndex changes
+
+/**
+ * 监听activeIndex变化,更新URL中的查询参数。
+ */
 watch(() => activeIndex.value, (newIndex) => {
   router.push({
     query: {
@@ -493,7 +560,9 @@ watch(() => activeIndex.value, (newIndex) => {
   });
 });
 
-// Initialize activeIndex based on the route query on component mount
+/**
+ * 组件挂载时初始化activeIndex。
+ */
 onMounted(() => {
   if (route.query.type) {
     const typeValue = parseInt(route.query.type);
@@ -501,84 +570,119 @@ onMounted(() => {
       activeIndex.value = typeValue;
     }
   }
+
+
 });
 
+/**
+ * 打开文件夹选择对话框并更新表单数据。
+ */
 const selectFolder = () => {
   clientStore.ipc.removeAllListeners(icpList.utils.openDirectory);
   clientStore.ipc.send(icpList.utils.openDirectory);
   clientStore.ipc.on(icpList.utils.openDirectory, async (event, result) => {
-    formData.captureOneFolder = result
+    formData.captureOneFolder = result;
     clientStore.ipc.removeAllListeners(icpList.utils.openDirectory);
-  })
-}
-const saveSetting = () => {
-  console.log(formData.value);
-}
+  });
+};
+
+/**
+ * 保存当前表单配置。
+ */
+const saveSetting = async (index) => {
+
+  await new Promise((resolve, reject) => {
+
+    clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
+    clientStore.ipc.send(icpList.setting.updateSysConfigs,{
+      key: indexKey[index],
+      value:JSON.stringify({
+        ...formData[indexKey[index]]
+      })
+    });
+    clientStore.ipc.on(icpList.setting.updateSysConfigs, async (event, result) => {
+      clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
+      if(result.code === 0 && result.msg){
+        resolve(result)
+      }
+
+    });
+  });
+
+
+};
+
+/**
+ * 新增一行配置。
+ */
 const addRow = () => {
   if (activeTab.value === 'left') {
     editRowData.value = {
-      mode_type:'执行左脚程序',
-      action_name:'',
-      take_picture:false,
-      camera_height:0,
-      camera_angle:0,
-      turntable_position:0,
-      turntable_angle:0,
-      shoe_upturn:false,
-      led_switch:false,
-      number_focus:0,
-      pre_delay:0,
-      after_delay:0,
-    }
+      mode_type: '执行左脚程序',
+      action_name: '',
+      take_picture: false,
+      camera_height: 0,
+      camera_angle: 0,
+      turntable_position: 0,
+      turntable_angle: 0,
+      shoe_upturn: false,
+      led_switch: false,
+      number_focus: 0,
+      pre_delay: 0,
+      after_delay: 0,
+    };
     dialogVisible.value = true;
     editTitle.value = '新增步骤';
   } else {
     editRowData.value = {
-      mode_type:'执行右脚程序',
-      action_name:'',
-      take_picture:false,
-      camera_height:0,
-      camera_angle:0,
-      turntable_position:0,
-      turntable_angle:0,
-      shoe_upturn:false,
-      led_switch:false,
-      number_focus:0,
-      pre_delay:0,
-      after_delay:0,
-    }
+      mode_type: '执行右脚程序',
+      action_name: '',
+      take_picture: false,
+      camera_height: 0,
+      camera_angle: 0,
+      turntable_position: 0,
+      turntable_angle: 0,
+      shoe_upturn: false,
+      led_switch: false,
+      number_focus: 0,
+      pre_delay: 0,
+      after_delay: 0,
+    };
     dialogVisible.value = true;
     editTitle.value = '新增步骤';
   }
-}
+};
+
+/**
+ * 获取设备配置列表。
+ */
 const getList = () => {
-  console.log(1)
   clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
   clientStore.ipc.send(icpList.setting.getDeviceConfigList, {
     mode_type: activeTab.value === 'left' ? '执行左脚程序' : '执行右脚程序'
   });
   clientStore.ipc.on(icpList.setting.getDeviceConfigList, (event, result) => {
-    if(result.code==0){
-      if(activeTab.value === 'left'){
+    if (result.code == 0) {
+      if (activeTab.value === 'left') {
         lefttableData.value = result.data.list;
-      }else{
+      } else {
         righttableData.value = result.data.list;
       }
-    }else{
+    } else {
       ElMessage.error('获取列表失败');
     }
     clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigList);
   });
-}
-const upRow = (row) => {
+};
 
-}
-const downRow = (row) => {
-
-}
+/**
+ * 编辑指定行的配置。
+ * @param {Object} row - 当前行的数据
+ * @param {number} index - 当前行的索引
+ */
 const editRow = (row, index) => {
   dialogVisible.value = true;
-  editTitle.value = row.action_name+'编辑';
+  editTitle.value = row.action_name + '编辑';
   clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigDetail);
   clientStore.ipc.send(icpList.setting.getDeviceConfigDetail, {
     id: row.id
@@ -588,7 +692,13 @@ const editRow = (row, index) => {
     clientStore.ipc.removeAllListeners(icpList.setting.getDeviceConfigDetail);
   });
   editIndex.value = index;
-}
+};
+
+/**
+ * 删除指定行的配置。
+ * @param {Object} row - 当前行的数据
+ * @param {number} index - 当前行的索引
+ */
 const deleteRow = (row, index) => {
   ElMessageBox.confirm('确定删除该步骤吗?', '提示', {
     confirmButtonText: '确定',
@@ -599,77 +709,88 @@ const deleteRow = (row, index) => {
       id: row.id
     });
     clientStore.ipc.on(icpList.setting.removeDeviceConfig, (event, result) => {
-      console.log(result);
-      if(result.code==0){
+      if (result.code == 0) {
         getList();
         ElMessage.success('删除成功');
-      }else{
+      } else {
         ElMessage.error('删除失败');
       }
       clientStore.ipc.removeAllListeners(icpList.setting.removeDeviceConfig);
     });
-  })
-}
+  });
+};
+
+/**
+ * 保存当前编辑的配置。
+ */
 const saveRow = () => {
   clientStore.ipc.send(icpList.setting.saveDeviceConfig, {
     ...editRowData.value
   });
   clientStore.ipc.on(icpList.setting.saveDeviceConfig, (event, result) => {
-    if(result.code==0){
+    if (result.code == 0) {
       getList();
       ElMessage.success('保存成功');
       dialogVisible.value = false;
       clientStore.ipc.removeAllListeners(icpList.setting.saveDeviceConfig);
-    }else{
+    } else {
       ElMessage.error('保存失败');
     }
   });
-}
+};
+
+/**
+ * 重置设备配置。
+ */
 const resetConfig = () => {
   ElMessageBox.confirm(`确定初始化执行${activeTab.value === 'left' ? '左脚' : '右脚'}程序吗?`, '提示', {
     confirmButtonText: '确定',
     cancelButtonText: '取消',
     type: 'warning'
   }).then(() => {
-    clientStore.ipc.send(icpList.setting.resetDeviceConfig,{
+    clientStore.ipc.send(icpList.setting.resetDeviceConfig, {
       mode_type: activeTab.value === 'left' ? '执行左脚程序' : '执行右脚程序'
     });
     clientStore.ipc.on(icpList.setting.resetDeviceConfig, (event, result) => {
-      if(result.code==0){
-      getList();
-      ElMessage.success('重置成功');
-    }else{
-      ElMessage.error('重置失败');
-    }
+      if (result.code == 0) {
+        getList();
+        ElMessage.success('重置成功');
+      } else {
+        ElMessage.error('重置失败');
+      }
       clientStore.ipc.removeAllListeners(icpList.setting.resetDeviceConfig);
     });
-  })
-}
+  });
+};
 
-async function changeNum(type){
-  if(isDefault.value){
+/**
+ * 修改设备配置数值。
+ * @param {string} type - 配置类型
+ */
+async function changeNum(type) {
+  if (isDefault.value) {
     let socketValue = {
-      'camera_high_motor':'camera_height',
-      'turntable_steering':'turntable_angle',
-      'turntable_position_motor':'turntable_position',
-      'camera_steering':'camera_angle',
-      'shoe_upturn':'shoe_upturn',
-      'laser_position':'led_switch',
-      'take_picture':'number_focus',
-    }
+      'camera_high_motor': 'camera_height',
+      'turntable_steering': 'turntable_angle',
+      'turntable_position_motor': 'turntable_position',
+      'camera_steering': 'camera_angle',
+      'shoe_upturn': 'shoe_upturn',
+      'laser_position': 'led_switch',
+      'take_picture': 'number_focus',
+    };
     await socketStore.connectSocket();
-     socketStore.sendMessage({
+    socketStore.sendMessage({
       type: 'control_mcu',
-       data:{
+      data: {
         device_name: type,
-        value:type=='laser_position'?(editRowData.led_switch?1:0): editRowData.value[socketValue[type]]
-       }
-    })
+        value: type == 'laser_position' ? (editRowData.led_switch ? 1 : 0) : editRowData.value[socketValue[type]]
+      }
+    });
   }
 }
-
 </script>
 
+
 <style lang="scss" scoped>
 body {
   background: #EAECED;