瀏覽代碼

生成错误信息处理

kongwenhao 8 月之前
父節點
當前提交
f5059c3a40

+ 1 - 1
electron/config/app.config.json

@@ -1,4 +1,4 @@
 {
   "digiCamControl": "C:\\Program Files (x86)\\digiCamControl",
-  "pyapp": "10.56.42.176"
+  "pyapp": "10.56.42.51"
 }

+ 13 - 2
frontend/src/views/Home/index.vue

@@ -86,9 +86,13 @@ import useUserInfo from "@/stores/modules/user";
 import { login, getUserInfo } from '@/apis/user';
 import Login from '@/components/login/index.vue';
 import HardwareCheck from '@/components/check/index.vue'
-
 import headerBar from '@/components/header-bar/index.vue'
 
+import { getFilePath,getRouterUrl } from '@/utils/appfun'
+import {useRouter} from "vue-router";
+const Router = useRouter()
+
+
 
 const useUserInfoStore = useUserInfo();
 const dialogVisible = ref(false);
@@ -284,6 +288,13 @@ function openSeeting(){
   clientStore.ipc.send(icpList.utils.openMain,params);
 }
 function openTplSeeting(){
+
+  const { href } = Router.resolve({
+    name: 'PhotographyDetail',
+    query:{
+      goods_art_nos:['ARN1411512'],
+    }
+  })
   clientStore.ipc.removeAllListeners(icpList.utils.openMain);
   let params = {
     title: '主图和详情设置',
@@ -291,7 +302,7 @@ function openTplSeeting(){
     height: 650,
     frame: true,
     id:"photographyDetail",
-    url:"http://localhost:3000/#/photography/detail"
+    url:getRouterUrl(href)
   }
   clientStore.ipc.send(icpList.utils.openMain,params);
 }

+ 4 - 2
frontend/src/views/Photography/components/LoadingDialog.vue

@@ -21,7 +21,9 @@
       </div>
       
       <div class="message">{{ message }}</div>
-      
+      <!-- 错误信息插槽 -->
+      <slot name="errList"></slot>
+
       <el-button
         :disabled="showButton"
         type="primary"
@@ -49,7 +51,7 @@ const props = withDefaults(defineProps<Props>(), {
   progress: 0,
   message: '正在为您处理,请稍后',
   showButton: true,
-  buttonText: '全部处理完毕,点击打开最终图片目录'
+  buttonText: '处理完毕,点击打开最终图片目录'
 })
 
 const emit = defineEmits<{

+ 89 - 44
frontend/src/views/Photography/detail.vue

@@ -173,7 +173,14 @@
 
 
   <loading-dialog v-model="loadingDialogVisible" :progress="progress" :message="message" :show-button="showButton"
-    @button-click="handleComplete" />
+    @button-click="handleComplete">
+    <template v-if="partErrList && partErrList.length > 0" #errList>
+      <div v-for="(item, idx) in partErrList" :key="idx">
+        <span>{{ item.goods_art_no }}</span>:<span>{{ item.info }}</span>
+      </div>
+    </template>
+
+  </loading-dialog>
   <el-dialog v-model="dialogVisible">
     <img style="width: 100%;" :src="dialogImageUrl" alt="Preview Image" />
   </el-dialog>
@@ -227,6 +234,12 @@ const showButton = ref(true)
 
 let templates = ref([])
 let goods_art_nos = ref([])
+let partErrList = ref([])
+
+// 定义一个定时器变量
+const  INTERVAL = ref<number | NodeJS.Timeout | null>(null);
+
+
 
 
 // 状态变量
@@ -245,7 +258,8 @@ const form = reactive({
   excelFilePath: 'D:\\MyDocuments\\PythonCode\\MyPython\\red_dragonfly\\deal_pics\\auto_capture_V2\\auto_photo', // 商品基础资料EXCEL文件选择
 })
 onMounted(() => {
-  goods_art_nos.value =  route.query.goods_art_nos
+  const goods_art_data = route.query.goods_art_nos
+  goods_art_nos.value =  Array.isArray(goods_art_data) ? goods_art_data : [goods_art_data]
   getCompanyTemplates()
 })
 
@@ -296,7 +310,7 @@ const generate = async function () {
     })
   })
   const params = {
-    goods_art_no: goods_art_nos.value,
+    goods_art_no: JSON.parse(JSON.stringify(goods_art_nos.value)),
     logo_path: form.logo_path,
     temp_name: form.selectTemplate.template_id,
     excel_path: '',
@@ -304,42 +318,90 @@ const generate = async function () {
     temp_list,
     token,
   }
-  loadingDialogVisible.value = true
+  // 开启进度弹窗
   progress.value = 0
-  showButton.value = true
-
-  const interval = setInterval(() => {
-    if (progress.value < 100) {
-      progress.value += 10
-    }
-  }, 1000)
+  openLoadingDialog(20)
+  console.log("%c Line:324 🍆 params", "color:#3f7cff", params);
   clientStore.ipc.removeAllListeners(icpList.generate.generatePhotoDetail);
   clientStore.ipc.send(icpList.generate.generatePhotoDetail, params);
   clientStore.ipc.on(icpList.generate.generatePhotoDetail, (event, result) => {
+    console.log('result', result)
+    partErrList.value = []
     clientStore.ipc.removeAllListeners(icpList.generate.generatePhotoDetail);
-    console.log("%c Line:306 🍻 result", "color:#42b983", result);
-    clearInterval(interval)
+    clearInterval(INTERVAL.value)
     if (result.code === 0) {
-      const href = result.data.out_put_dir
-      completeDirectory.value = href
-      progress.value = 100
-      message.value = '全部处理完毕'
-      showButton.value = false
+      const { output_folder, list } = result.data
+      // 若out_put_dir为空,说明全部生成失败,走失败处理
+      if (output_folder === '') {
+        console.log('全部生成失败')
+        handleFail('生成失败! 请联系管理员处理, 或稍后重试')
+      } else {
+        // 判断  result.data.list 中 是否存在 success 为fals的  若存在 则走部分成功处理  否则走全部成功处理
+        let hasFail = false
+        list.map(item => {
+          if (!item.success) {
+            hasFail = true
+          }
+        })
+        // 部分成功
+        if (hasFail) {
+          console.log('部分成功')
+          handlePartSuccess(output_folder, list)
+        } else { // 全部成功
+          console.log('全部成功')
+          handleSuccess(output_folder, '全部生成成功')
+        }
+      }
+
     } else {
+      console.log('code全部生成失败')
+      handleFail(result.msg)
+    }
+    //生成失败
+    function handleFail(errorMsg: string) {
+      loadingDialogVisible.value = false
       showButton.value = false
-      if (result.msg) {
-        ElMessage.error(result.msg)
+      if (errorMsg) {
+        ElMessage.error(errorMsg)
       }
     }
+    // 部分成功
+    function handlePartSuccess(output_folder: string, partSuccessList) {
+      // 错误list展示 失败的货号整理成字符串,用逗号分隔
+      let errorList = []
+      partSuccessList.map(item => {
+        if (!item.success) {
+          errorList.push(item)
+        }
+      })
+      console.log("%c Line:376 🍖 errorList", "color:#2eafb0", errorList);
+      partErrList.value = errorList
+      handleSuccess(output_folder, '部分货号生成失败',)
+    }
+    // 全部生成成功
+    function handleSuccess(href, loadingMsg) {
+      completeDirectory.value = href
+      progress.value = 100
+      showButton.value = false
+      message.value = loadingMsg
+    }
   });
+} 
+const openLoadingDialog = (timer: number) => {
+  loadingDialogVisible.value = true
+ 
+  showButton.value = true
+  // 根据传入的秒数计算每次增加的进度值
+  const step = 100 / timer
+  INTERVAL.value = setInterval(() => {
+    if (progress.value < 100) {
+      progress.value = Math.round(progress.value + step)
+    }
+  }, 1000)
 }
 
 
 
-
-
-
-
 const onInput = (value) => {
   form.logo_path = value
 }
@@ -380,33 +442,16 @@ function openPhotographySeniorDetail() {
 }
 
 
-const startProcess = () => {
-  loadingDialogVisible.value = true
-  progress.value = 0
-  showButton.value = true
-  // 模拟进度更新
-  const interval = setInterval(() => {
-    if (progress.value < 100) {
-      progress.value += 10
-    } else {
-      clearInterval(interval)
-      message.value = '全部处理完毕'
-      showButton.value = false
-    }
-  }, 500)
-}
+
 
 const handleComplete = () => {
   loadingDialogVisible.value = false
   // 这里可以添加打开目录的逻辑
-  // 打开目录
   clientStore.ipc.removeAllListeners(icpList.utils.openDirectory);
-  console.log('打开目录')
   clientStore.ipc.removeAllListeners(icpList.utils.shellFun);
   let params = {
-      action: 'openPath',
-      params: completeDirectory.value
-      // params: 'C:\Users\\21333\\Desktop\\HQT\\151405492752642685067862.jpg'
+    action: 'openPath',
+    params: completeDirectory.value
   }
   clientStore.ipc.send(icpList.utils.shellFun, params);
 }