Browse Source

Merge branch 'master' of http://gitlab.pubdata.cn/liangyibo/CameraMachine

rambo 8 months ago
parent
commit
a303e3f3a7

+ 9 - 1
frontend/src/stores/modules/check.ts

@@ -7,6 +7,7 @@ import {ElMessage} from "element-plus";
 const socketStore = socket();
 const clientStore = client();
 
+
 export const checkInfo = defineStore('checkInfo', () => {
 
     // 定义设备列表
@@ -37,6 +38,7 @@ export const checkInfo = defineStore('checkInfo', () => {
     const checkTime = ref(0)
     let CKTimerInterval:any = null
     let CKCamControlInterval:any = null
+    let init_mcu_type = ref(true)
     const isCheckStatus = ref(true)
     const set_isCheckStatus = (value)=>{
         isCheckStatus.value = value
@@ -133,7 +135,12 @@ export const checkInfo = defineStore('checkInfo', () => {
                         console.log(result);
                         if(result.status === 2 ){
                             if(!mcu.isInitSend){
-                                socketStore.sendMessage({ type: 'init_mcu' });
+                                socketStore.sendMessage({
+                                    type: 'init_mcu',
+                                    data:{
+                                        value:init_mcu_type.value
+                                    }
+                                });
                                 mcu.isInitSend = true
                                 mcu.status = 1
                             }
@@ -141,6 +148,7 @@ export const checkInfo = defineStore('checkInfo', () => {
                                 devices[deviceName].status = result.status;
                                 devices[deviceName].msg = result.msg;
                                 mcu.status = 2
+                                init_mcu_type.value = false;
                             }
                             if(checkTime.value >= 60 &&   mcu.status !== 2){
                                 mcu.status == -1;

+ 3 - 1
frontend/src/views/Developer/index.vue

@@ -191,7 +191,9 @@ async function  connect_mcu__init(){
 
     socketStore.sendMessage({
       type: 'init_mcu',
-      data:"init_mcu"
+      data:{
+        value:true
+      }
     })
   }
 }

+ 4 - 1
frontend/src/views/Home/index.vue

@@ -259,9 +259,12 @@ async function connect_mcu__init(){
   if(clientStore.isClient){
 
     await socketStore.connectSocket();
+
     socketStore.sendMessage({
       type: 'init_mcu',
-      data:"init_mcu"
+      data:{
+        value:true
+      }
     })
   }
 

+ 5 - 13
frontend/src/views/Photography/check.vue

@@ -26,7 +26,7 @@
               </template>
             </div>
           </div>
-          <div class="example-image flex-col"><span class="example-text">示范图片</span></div>
+          <div class="example-image flex-col"><img src="https://huilimaimg.cnhqt.com/frontend/zhihuiyin/demo.jpg?x-oss-process=image/resize,w_400"></div>
         </div>
         <div v-if="step === 1" class="action-button flex cente">
           <div @click="takePictures" class="check-button  button--primary1 flex-col"><span class="button-text" v-loading="loading">拍照检查</span>
@@ -259,18 +259,10 @@ onBeforeUnmount(() => {
         height: 200px;
         margin-top: 10px;
         width: 200px;
-
-        .example-text {
-          width: 56px;
-          height: 20px;
-          overflow-wrap: break-word;
-          color: rgba(71, 71, 71, 1);
-          font-size: 14px;
-          font-weight: NaN;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 20px;
-          margin: 90px 0 0 72px;
+        img {
+          width: 200px;
+          height: 200px;
+          display: block;
         }
       }
     }

+ 3 - 3
frontend/src/views/Photography/components/LoadingDialog.vue

@@ -25,7 +25,7 @@
       <slot name="errList"></slot>
 
       <el-button
-        :disabled="showButton"
+        :disabled="disabledButton"
         type="primary"
         class="action-button   button--primary1  mar-top-20"
         @click="handleButtonClick"
@@ -43,14 +43,14 @@ interface Props {
   modelValue: boolean
   progress?: number
   message?: string
-  showButton?: boolean
+  disabledButton?: boolean
   buttonText?: string
 }
 
 const props = withDefaults(defineProps<Props>(), {
   progress: 0,
   message: '正在为您处理,请稍后',
-  showButton: true,
+  disabledButton: true,
   buttonText: '处理完毕,点击打开最终图片目录'
 })
 

+ 68 - 47
frontend/src/views/Photography/detail.vue

@@ -137,7 +137,9 @@
         <div class="flex-item left">
           <div class="section-title">
             <img src="@/assets/images/Photography/zhuangshi.png" style="width: 32px; height: 32px;" />
-            详情资料准备 (2选1)
+            详情资料准备 (2选1)  
+            
+            <el-button v-if="form.dataType == '1'" type="text" class="mar-left-10 fs-16"  @click="downloadExcel">下载商品基础资料模版</el-button>
           </div>
         </div>
 
@@ -151,7 +153,7 @@
           <div class="flex bottom between">
             <div style="max-width: 160px;" class="mar-left-20">商品基础资料EXCEL文件选择:</div>
             <div class="flex bottom mar-left-20" style="flex-grow: 1;">
-              <el-input type="textarea" v-model="form.excelFilePath" />
+              <el-input type="textarea" v-model="form.excel_path" />
             </div>
             <el-button class="select-button button--primary1  mar-left-20" type="primary" @click="selectExcel">
               <img src="@/assets/images/Photography/wenjian.png" style="width: 16px; margin-right: 4px;" />
@@ -169,8 +171,8 @@
   </div>
 
 
-  <loading-dialog v-model="loadingDialogVisible" :progress="progress" :message="message" :show-button="showButton"
-    @button-click="handleComplete">
+  <loading-dialog v-model="loadingDialogVisible" :progress="progress" :message="message"
+    :disabled-button="disabledButton" @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>
@@ -231,14 +233,16 @@ const completeDirectory = ref('')
 const loadingDialogVisible = ref(false)
 const progress = ref(0)
 const message = ref('正在为您处理,请稍后')
-const showButton = ref(true)
+const disabledButton = ref(true)
 
 let templates = ref([])
 let goods_art_nos = ref([])
 let partErrList = ref([])
+const excel_template_url = ref('')
+
 
 // 定义一个定时器变量
-const  INTERVAL = ref<number | NodeJS.Timeout | null>(null);
+const INTERVAL = ref<number | NodeJS.Timeout | null>(null);
 
 
 
@@ -256,11 +260,11 @@ const form = reactive({
   selectTemplate: {}, //选中的模板
   dataType: '1', // 1: 选择excel文件 2: 系统对接
   logo_path: '', // 主图LOGO
-  excelFilePath: 'D:\\MyDocuments\\PythonCode\\MyPython\\red_dragonfly\\deal_pics\\auto_capture_V2\\auto_photo', // 商品基础资料EXCEL文件选择
+  excel_path: '', // 商品基础资料EXCEL文件选择
 })
 onMounted(() => {
   const goods_art_data = route.query.goods_art_nos
-  goods_art_nos.value =  Array.isArray(goods_art_data) ? goods_art_data : [goods_art_data]
+  goods_art_nos.value = Array.isArray(goods_art_data) ? goods_art_data : [goods_art_data]
   getCompanyTemplates()
 })
 
@@ -286,10 +290,24 @@ const getCompanyTemplates = async () => {
   if (templates.value.length > 0) {
     form.selectTemplate = templates.value[0]
   }
+  excel_template_url.value = data.excel_template_url
   // 计算总页数
   totalPage.value = Math.ceil(templates.value.length / itemsPerPage);
 }
 
+const downloadExcel =  () => {
+  const a = document.createElement('a')
+  a.href = excel_template_url.value, 
+  a.download = '商品基础资料模版' 
+  document.body.appendChild(a)
+  a.click()
+  setTimeout(() => {
+    document.body.removeChild(a);
+  }, 1000);
+}
+
+
+
 
 const onCurrentChange = (page) => {
   queryParams.current = page;
@@ -312,9 +330,9 @@ const generate = async function () {
   })
   const params = {
     goods_art_no: JSON.parse(JSON.stringify(goods_art_nos.value)),
-    logo_path: form.logo_path,
-    temp_name: form.selectTemplate.template_id,
-    excel_path: '',
+    logo_path: form.logo_path || '',
+    temp_name: form.selectTemplate.template_id || '',
+    excel_path: form.dataType == '1' ? form.excel_path : '',
     template_image_order: form.selectTemplate.template_image_order,
     temp_list,
     token,
@@ -322,7 +340,7 @@ const generate = async function () {
   // 开启进度弹窗
   progress.value = 0
   openLoadingDialog(20)
-  console.log("%c Line:324 🍆 params", "color:#3f7cff", params);
+  console.log("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) => {
@@ -332,44 +350,40 @@ const generate = async function () {
     clearInterval(INTERVAL.value)
     if (result.code === 0) {
       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, '全部生成成功')
-        }
-      // }
-
+      const allSuccess = list.every(item => item.success);
+      const allFailure = list.every(item => !item.success);
+      if (allSuccess) {
+        console.log("全部成功")
+        handleSuccess(output_folder, '全部生成成功')
+      } else if (allFailure) {
+        console.log("全部失败");
+        handleFailure(list)
+      } else {
+        console.log("部分成功,部分失败");
+        handlePartSuccess(output_folder, list)
+      }
     } else {
       console.log('code全部生成失败')
       handleFail(result.msg)
     }
-    //生成失败
+    //生成失败 (接口请求失败)
     function handleFail(errorMsg: string) {
       loadingDialogVisible.value = false
-      showButton.value = false
+      disabledButton.value = false
       if (errorMsg) {
         ElMessage.error(errorMsg)
       }
     }
+
+    // 全部生成成功
+    function handleSuccess(href, loadingMsg) {
+      completeDirectory.value = href
+      progress.value = 100
+      disabledButton.value = false
+      message.value = loadingMsg
+    }
     // 部分成功
     function handlePartSuccess(output_folder: string, partSuccessList) {
-      // 错误list展示 失败的货号整理成字符串,用逗号分隔
       let errorList = []
       partSuccessList.map(item => {
         if (!item.success) {
@@ -377,21 +391,28 @@ const generate = async function () {
         }
       })
       partErrList.value = errorList
-      handleSuccess(output_folder, '部分货号生成失败',)
+      handleSuccess(output_folder, '部分货号生成失败')
     }
-    // 全部生成成功
-    function handleSuccess(href, loadingMsg) {
-      completeDirectory.value = href
+    // 全部生成失败
+    function handleFailure(partSuccessList) {
+      let errorList = []
+      partSuccessList.map(item => {
+        if (!item.success) {
+          errorList.push(item)
+        }
+      })
+      partErrList.value = errorList
+      completeDirectory.value = ''
       progress.value = 100
-      showButton.value = false
-      message.value = loadingMsg
+      disabledButton.value = true
+      message.value = '全部货号生成失败'
     }
   });
 }
 const openLoadingDialog = (timer: number) => {
   loadingDialogVisible.value = true
 
-  showButton.value = true
+  disabledButton.value = true
   // 根据传入的秒数计算每次增加的进度值
   const step = 100 / timer
   INTERVAL.value = setInterval(() => {
@@ -416,7 +437,7 @@ function selectExcel() {
     title: "选择基础文件资料"
   });
   clientStore.ipc.on(icpList.utils.openFile, async (event, result) => {
-    form.excelFilePath = result
+    form.excel_path = result
     clientStore.ipc.removeAllListeners(icpList.utils.openFile);
   })
 }
@@ -451,7 +472,7 @@ const handleComplete = () => {
   clientStore.ipc.removeAllListeners(icpList.utils.shellFun);
   let params = {
     action: 'openPath',
-    params: completeDirectory.value?.replaceAll('/','\\')
+    params: completeDirectory.value?.replaceAll('/', '\\')
   }
   clientStore.ipc.send(icpList.utils.shellFun, params);
 }

+ 27 - 6
frontend/src/views/Photography/shot.vue

@@ -3,11 +3,7 @@
   <headerBar
       title="拍摄商品"
       showUser
-      :menu="[
-        {
-          type:'setting'
-        }
-    ]"
+      :menu="menu"
   />
 
   <hardware-check/>
@@ -159,7 +155,7 @@
 </template>
 <script setup lang="ts">
 import headerBar from '@/components/header-bar/index.vue'
-import { ref, reactive, onMounted, onBeforeUnmount,watchEffect } from 'vue'
+import { ref, reactive, onMounted, onBeforeUnmount,watchEffect, computed} from 'vue'
 import icpList from '@/utils/ipc'
 import client from "@/stores/modules/client";
 import socket from "@/stores/modules/socket";
@@ -175,6 +171,31 @@ const runLoading = ref(false)
 const takePictureLoading = ref(false)
 
 
+import useUserInfo from "@/stores/modules/user";
+const useUserInfoStore = useUserInfo();
+
+const menu = computed(()=>{
+  if(useUserInfoStore.userInfo.brand_company_code === '1300'){
+    return [
+      {
+        type:'setting'
+      },
+      {
+        type:'developer'
+      }
+    ]
+  }
+
+
+  return [
+    {
+      type:'setting'
+    }
+  ]
+
+
+})
+
 const clientStore = client();
 
 const Router = useRouter()