@@ -172,8 +173,7 @@ import JsonExcel from 'vue-json-excel'
         this.reqData.pageNo = 1
 
         await this.getProductList({page: this.reqData.pageNo,
-          pageSize: this.reqData.pageSize,
-          productSkuIds: skuIds})
+          pageSize: this.reqData.pageSize}, skuIds)
           
           this.costList = []
           await this.getSkuCostList()
@@ -227,13 +227,24 @@ import JsonExcel from 'vue-json-excel'
           this.$store.commit("setTemuAlertShow", true)
         }
       },
-      async getProductList(params) {
+      async getProductList(params, skuIds) {
+        let productSkuIds = []
+        let i = (params.page - 1) * params.pageSize
+        let j = 0
+        for (; i < skuIds.length; i++) {
+          productSkuIds.push(skuIds[i])
+          j ++
+          if (j == params.pageSize) break
+        }
+        if (productSkuIds.length == 0) return
         let res = await sendChromeAPIMessage({
           url: 'bg-visage-mms/product/skc/pageQuery',
           needMallId: true,
           mallId: this.mallId,
           data: {
-            ...params
+            page: 1,
+            pageSize: params.pageSize,
+            productSkuIds
         }})
         if (res.errorCode == 1000000) {
           res.result.pageItems.map((item) => {
@@ -251,10 +262,8 @@ import JsonExcel from 'vue-json-excel'
             })
           })
 
-          if ((params.page * params.pageSize) < res.result.total) {
-            params.page ++
-            await this.getProductList(params)
-          }
+          params.page ++
+          await this.getProductList(params, skuIds)
         }
       },
       async getSkuCostList() {
diff --git a/src/view/sale/CostManageTemu.vue b/src/view/sale/CostManageTemu.vue
index a085499..6ef70e2 100644
--- a/src/view/sale/CostManageTemu.vue
+++ b/src/view/sale/CostManageTemu.vue
@@ -206,6 +206,7 @@ import { saveAs } from 'file-saver'
           this.isLoading = true
           this.getList()
         }).catch((err) => {
+          this.mallId = ''
           this.isLoading = false
         }) 
       },
diff --git a/src/view/sale/ExportSaleData.vue b/src/view/sale/ExportSaleData.vue
index 4b60f38..cc42c37 100644
--- a/src/view/sale/ExportSaleData.vue
+++ b/src/view/sale/ExportSaleData.vue
@@ -3,6 +3,7 @@
     
       
         
@@ -133,7 +134,7 @@
           ref="table0"
           :isShowPagination="false"
           :tableData="filteredData"
-          height="500"
+          height="700"
           :col-configs="colConfigs"
           :total="filteredData.length"
           style="margin-top: 8px;"
@@ -706,6 +707,7 @@ import { Message } from 'element-ui'
           this.getSkuCostList()
           this.getList()
         }).catch((err) => {
+          this.mallId = ''
           console.log(err)
           this.isLoading = false
         })
diff --git a/src/view/sale/ExportSaleOutData.vue b/src/view/sale/ExportSaleOutData.vue
index 4facb6d..5c3517f 100644
--- a/src/view/sale/ExportSaleOutData.vue
+++ b/src/view/sale/ExportSaleOutData.vue
@@ -47,7 +47,7 @@
           :tableData="tableData"
           :col-configs="colConfigs"
           :total="tableData.length"
-          height="500"
+          height="700"
           style="margin-top: 8px;"
           @getList="() => {}">
         
@@ -150,6 +150,7 @@ import { Message } from 'element-ui'
             this.getList(2)
           }
         }).catch((err) => {
+          this.mallId = ''
           this.isLoading = false
         })
       },
diff --git a/src/view/sale/ExportSaleStatTemu.vue b/src/view/sale/ExportSaleStatTemu.vue
new file mode 100644
index 0000000..9651ebf
--- /dev/null
+++ b/src/view/sale/ExportSaleStatTemu.vue
@@ -0,0 +1,888 @@
+
+  
+    
+      
+        
+          
+            
+            
+            
+          
+          
+            
+            
+              
+              
+            
+          
+          
开始统计
+          
下载图片
+          
+            下载SKC统计
+          
+          
+            下载SKU统计
+          
+        
+        
+          
+            
+              
+                
+                  
+                  
+                
+              
+              
+                
+                  
+                  
+                
+              
+              
+                
+                  
+                
+              
+              
+                
+                  
+                
+              
+              
+                
+                  
+                  %
+                
+                
+              
+            
+          
+        
+          
+        
+        
+          
+            
+              
+                
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+            
+              
+                
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+          
+          
+            
+              
+                
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+            
+              
+                
+                  
+                    
+                      {{ scope.row.skcExtCode + '/' + scope.row.skuExtCode }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+          
+          
+            
+              
+                
+                  
+                    
+                      {{ scope.row.skcExtCode + '/' + scope.row.skuExtCode }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+            
+              
+                
+                  
+                    
+                      {{ scope.row.skcExtCode + '/' + scope.row.skuExtCode }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.profitAmount }}
+                    
+                  
+                  
+                    
+                      {{ scope.row.saleCount }}
+                    
+                  
+                
+              
+            
+          
+        
+      
+
+
+
+
diff --git a/src/view/shein/CertCenterShein.vue b/src/view/shein/CertCenterShein.vue
index 6ef2733..945bca4 100644
--- a/src/view/shein/CertCenterShein.vue
+++ b/src/view/shein/CertCenterShein.vue
@@ -6,15 +6,50 @@
       isShowBottomBorder>
     
     
-      
+      
+        
+          
+            已驳回
+            待补充
+          
+        
         
-          导出
+        
+      
+      
+        
+          导出
         
          {}">
+          
+            
+              
+                审批失败
+              
+            
+          
+          
+            
+              {{ item.certificate_url_name }}
+            
+          
+        
+      
+      
+        
+          导出
+        
+         {}">
         
@@ -36,9 +71,10 @@ import { saveAs } from 'file-saver'
     data () {
       return {
         isLoading: false,
-        list: [],
         mallId: '',
-        colConfigs: [
+        certStatus: 'refused',
+        waitUploadList: [],
+        waitUploadColConfigs: [
           { prop: 'spu', label: 'SPU', align: 'left' },
           { prop: 'productName', label: '商品标题', align: 'left' },
           { prop: 'skc', label: 'SKC ID', align: 'left' },
@@ -46,7 +82,20 @@ import { saveAs } from 'file-saver'
           { prop: 'certificateTypeName', label: '证书类型', align: 'left' },
           { prop: 'mergeSiteName', label: '管控地区', align: 'left' },
           { prop: 'subSite', label: '管控子站点', align: 'left' },
-          { slot: 'uploadEndTime', label: '上传截止时间', align: 'left' }
+          { prop: 'uploadEndTime', label: '上传截止时间', align: 'left' }
+        ],
+        refusedList: [],
+        refusedColConfigs: [
+          { prop: 'spu', label: 'SPU', align: 'left' },
+          { prop: 'productName', label: '商品标题', align: 'left' },
+          { prop: 'skc', label: 'SKC ID', align: 'left' },
+          { prop: 'mainAttrName', label: '主规格', align: 'left' },
+          { slot: 'auditStatus', label: '状态' },
+          { prop: 'certificateTypeName', label: '证书类型', align: 'left' },
+          { slot: 'certName', label: '证书名称' },
+          { prop: 'refusedReason', label: '审核备注', align: 'left' },
+          { prop: 'mergeSiteName', label: '管控地区', align: 'left' },
+          { prop: 'subSite', label: '管控子站点', align: 'left' }
         ],
 
         tableData: [],
@@ -55,12 +104,33 @@ import { saveAs } from 'file-saver'
     },
 
     mounted () {
-      this.isLoading = true
-      this.getList()
+      this.$http.post('/api/malluser/info').then(res => {
+        if (res.code == 0) {
+          this.$store.commit('setUserInfo', res.data)
+          if (res.data.flag != 1) {
+            Message.error('您的账号未激活或已失效,请激活后使用')
+            this.$store.commit('setActiveDlgShow', true)
+            return;
+          }
+          this.getList()
+        }
+      })
     },
 
     methods: {
       async getList () {
+        this.isLoading = true
+        this.currentPage = 1
+        if (this.certStatus == 'refused') {
+          this.refusedList = []
+          await this.getRefusedList()
+        } else {
+          this.waitUploadList = []
+          await this.getWaitUploadList()
+        }
+        this.isLoading = false
+      },
+      async getWaitUploadList() {
         let res = await sendGeiwohuoAPIMessage({
           url: `spmp-api-prefix/spmp/certificate/get_skc_certificate_miss_list?page_num=${this.currentPage}&page_size=200`,
           method: 'POST',
@@ -84,30 +154,95 @@ import { saveAs } from 'file-saver'
               subSite: subSite.join(',')
             }
     
-            this.list.push(data)
+            this.waitUploadList.push(data)
           }
           if (res.info.data.length == 200 && (res.info.meta.count > 200*this.currentPage)) {
             this.currentPage++
             await this.sleepSync(200)
-            await this.getList()
-          } else {
-            this.isLoading = false
+            await this.getWaitUploadList()
           }
         } else if (res.code == 100004 || res.code == 20302) {
-          this.isLoading = false
+          this.$store.commit("setSheinAlertShow", true)
+        }
+      },
+      async getRefusedList() {
+        let res = await sendGeiwohuoAPIMessage({
+          url: `spmp-api-prefix/spmp/certificate/get_skc_certificate_list?page_num=${this.currentPage}&page_size=200`,
+          method: 'POST',
+          data: {
+            audit_status: 3
+          }})
+        if (res.code == '0') {
+          for(let i = 0;i < res.info.data.length; i++) {
+            let item = res.info.data[i];
+            let mainSite = []
+            let subSite = []
+            item.merge_site_info_list.map(e => {
+              mainSite.push(e.merge_site_name)
+              subSite = subSite.concat(e.sub_site_list)
+            })
+            let data = {
+              pqmsCertificateSn: item.pqms_certificate_sn,
+              auditStatus: item.audit_status,
+              spu: item.spu_name,
+              productName: item.skc_name_cn,
+              skc: item.skc_name,
+              mainAttrName: item.main_attribute_name,
+              mergeSiteName: mainSite.join(','),
+              certificateTypeName: item.certificate_type_name,
+              certName: item.cert_file_list,
+              refusedReason: null,
+              subSite: subSite.join(',')
+            }
+    
+            this.refusedList.push(data)
+          }
+          if (res.info.data.length == 200 && (res.info.meta.count > 200*this.currentPage)) {
+            this.currentPage++
+            await this.sleepSync(200)
+            await this.getRefusedList()
+          } else {
+            await this.getAuditInfo()
+          }
+        } else if (res.code == 100004 || res.code == 20302) {
+          this.$store.commit("setSheinAlertShow", true)
+        }
+      },
+      async getAuditInfo() {
+        let pqmsList = []
+        this.refusedList.map(item => {
+          pqmsList.push(item.pqmsCertificateSn)
+        })
+
+        let res = await sendGeiwohuoAPIMessage({
+          url: `spmp-api-prefix/spmp/certificate/get_cert_audit_fail_reason`,
+          method: 'POST',
+          data: {
+            pqms_certificate_sn_list: pqmsList
+          }})
+        if (res.code == '0') {
+          res.info.data.map(item => {
+            for (let i = 0; i < this.refusedList.length; i++) {
+              if (this.refusedList[i].pqmsCertificateSn == item.certificate_sn) {
+                this.refusedList[i].refusedReason = item.fail_reason
+                break
+              }
+            }
+          })
+        } else if (res.code == 100004 || res.code == 20302) {
           this.$store.commit("setSheinAlertShow", true)
         }
       },
       sleepSync(milliseconds) {
         return new Promise(resolve => setTimeout(resolve, milliseconds));
       },
-      exportToExcel() {
+      exportWaitUploadToExcel() {
         // 假设你有一个表格数据的数组
         const data = [
           ["SPU", "商品标题", "SKC ID", "主规格", "证书类型", "管控地区", "管控子站点", "上传截止时间"]
         ]
 
-        this.list.map(item => {
+        this.waitUploadList.map(item => {
           data.push([item.spu, item.productName, item.skc, item.mainAttrName, item.certificateTypeName, item.mergeSiteName, item.subSite, item.uploadEndTime])
         })
   
@@ -128,6 +263,41 @@ import { saveAs } from 'file-saver'
         // 使用saveAs下载文件
         saveAs(dataBlob, '待补充证书列表.xlsx');
   
+        // 清理
+        window.URL.revokeObjectURL(blobUrl);
+      },
+      exportRefusedToExcel() {
+        // 假设你有一个表格数据的数组
+        const data = [
+          ["SPU", "商品标题", "SKC ID", "主规格", "证书类型","证书名称", "证书地址", "审核备注", "管控地区", "管控子站点"]
+        ]
+
+        this.refusedList.map(item => {
+          let certName = [], certUrl = []
+          item.certName.map(item1 => {
+            certName.push(item1.certificate_url_name)
+            certUrl.push(item1.certificate_url)
+          })
+          data.push([item.spu, item.productName, item.skc, item.mainAttrName, item.certificateTypeName, certName.join(','), certUrl.join(','), item.refusedReason, item.mergeSiteName, item.subSite])
+        })
+  
+        // 将数据转换为工作表
+        const worksheet = XLSX.utils.aoa_to_sheet(data);
+  
+        // 创建工作簿并添加工作表
+        const workbook = XLSX.utils.book_new();
+        XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+  
+        // 生成Excel文件
+        const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
+  
+        // 使用blob和FileReader创建一个Blob URL
+        const dataBlob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });
+        const blobUrl = window.URL.createObjectURL(dataBlob);
+  
+        // 使用saveAs下载文件
+        saveAs(dataBlob, '已驳回证书列表.xlsx');
+  
         // 清理
         window.URL.revokeObjectURL(blobUrl);
       }
diff --git a/src/view/shein/CopyProductShein.vue b/src/view/shein/CopyProductShein.vue
index 4594677..d384dcc 100644
--- a/src/view/shein/CopyProductShein.vue
+++ b/src/view/shein/CopyProductShein.vue
@@ -26,6 +26,7 @@
             style="margin-top: 8px;"
             :current.sync="search.current" :size.sync="search.size"
             @selection-change="handleSelectionChange"
+            height="700"
             @getList="getList">