Ver Fonte

Merge remote-tracking branch 'origin/dev-frontend_0701' into dev-frontend

panqiuyao há 6 meses atrás
pai
commit
4a65975c4c

+ 24 - 10
electron/controller/utils.js

@@ -12,6 +12,7 @@ const errData = {
   msg :'请求失败,请联系管理员',
   code:999
 }
+const sharp = require('sharp'); // 确保安装:npm install sharp
 
 
 /**
@@ -155,7 +156,7 @@ class UtilsController extends Controller {
 
   }
 
-  readFileImageForPath(filePath){
+  async readFileImageForPath(filePath,maxWidth=1500){
 
     const getMimeType = (fileName)=>{
       const extension = path.extname(fileName).toLowerCase().replace('.', '');
@@ -184,19 +185,32 @@ class UtilsController extends Controller {
       return mimeType;
     }
 
-    const fileBuffer = fs.readFileSync(filePath);
+    try {
+      const fileName = path.basename(filePath);
+      const image = sharp(filePath);
+      const metadata = await image.metadata();
 
+      let mimeType = getMimeType(fileName); // 调用下面定义的私有方法获取 MIME 类型
 
-    const fileName = path.basename(filePath);
-    const mimeType = getMimeType(fileName); // 自定义获取 MIME 类型的方法
-    return  {
-      fileBuffer:fileBuffer,
-      fileName:fileName,
-      mimeType:mimeType,
-    };
+      let fileBuffer;
 
+      if (metadata.width > maxWidth) {
+        // 如果宽度大于 1500px,压缩至 1500px 宽度,保持比例
+        fileBuffer = await image.resize(maxWidth).toBuffer();
+      } else {
+        // 否则直接读取原图
+        fileBuffer = fs.readFileSync(filePath);
+      }
 
-    return new File([fileBuffer], fileName, { type: mimeType });
+      return {
+        fileBuffer,
+        fileName,
+        mimeType
+      };
+    } catch (error) {
+      console.error('Error processing image:', error);
+      throw error;
+    }
 
 
   }

+ 17 - 1
frontend/src/views/Setting/components/action_config.vue

@@ -61,7 +61,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, defineProps, defineEmits , watch,onMounted, reactive } from 'vue'
+import { ref, defineProps, defineEmits , watch,onMounted, reactive,onBeforeUnmount } from 'vue'
 import EditDialog from "./EditDialog.vue";
 import { ElMessage, ElMessageBox } from 'element-plus';import client from "@/stores/modules/client";
 import icpList from '@/utils/ipc';
@@ -81,11 +81,27 @@ const tabs = ref([]); // 所有标签页
 const editId = ref(0); // 当前编辑行的索引
 const selectID = ref(0) //当前默认的ID
 
+
+onBeforeUnmount(()=>{
+    window.removeEventListener('beforeunload', handleBeforeUnload);
+})
+
 onMounted(()=>{
+  window.addEventListener('beforeunload', handleBeforeUnload);
   topsTab.value = 'left';
   getTopList()
 })
 
+const handleBeforeUnload = (e)=>{
+  if(dialogVisible.value){
+    e.preventDefault();
+    const message = '您已打开实时预览弹出框,请先取消或者保存后,关闭编辑弹出框,后再关闭此窗口';
+    e.returnValue = message; // 标准方式
+    ElMessage.error('您已打开实时预览弹出框,请先取消或者保存后,关闭编辑弹出框,后再关闭此窗口,')
+    return message; // 兼容某些浏览器
+  }
+
+}
 /**
  * 监听topsTab变化,获取对应标签页的设备配置列表。
  */

+ 13 - 6
frontend/src/views/Setting/index.vue

@@ -116,7 +116,7 @@
           </div>
     </div>
       <div class="text-center mt-8">
-        <button class="bg-gradient-to-r from-primary" @click="saveSetting(activeIndex)" v-if="activeIndex !== 4">
+        <button class="bg-gradient-to-r from-primary" @click="onSava(activeIndex)" v-if="activeIndex !== 4">
           保存
         </button>
       </div>
@@ -255,9 +255,9 @@ const defaultCutoutModeList = ref([
   { label: '精细化抠图', value: '精细化抠图' },
 ]);
 const deviceSpeedList = ref([
-  { label: '一档', value: '1' },
-  { label: '二档', value: '2' },
-  { label: '三档', value: '3' },
+  { label: '一档', value: '一档' },
+  { label: '二档', value: '二档' },
+  { label: '三档', value: '三档' },
 ]);
 /*
 const runModeList = ref([
@@ -387,13 +387,20 @@ const toggleTab = async (item) => {
   let oldType = activeIndex.value;
 
   if([0,1,2].includes(oldType)){
-      const next =  await  saveSetting(oldType)
-    console.log(next);
+   const next =  await  saveSetting(oldType)
     if(next === false) return ;
   }
    activeIndex.value = item;
 };
 
+const onSava = async (index)=>{
+  const next =  await  saveSetting(index)
+
+  if(next !== false){
+    ElMessage.success('保存成功')
+  }
+
+}
 
 /**
  * 保存当前表单配置。

+ 1 - 0
package.json

@@ -63,6 +63,7 @@
     "electron-updater": "5.3.0",
     "lodash": "4.17.21",
     "node-window-manager": "2.2.4",
+    "sharp": "^0.34.2",
     "ws": "8.18.1"
   }
 }