Browse Source

进度条调整

xiaochan 3 years ago
parent
commit
a94c0142bc

+ 49 - 24
src/components/progress/Index.vue

@@ -10,11 +10,11 @@
           <i v-show="percentage === 100" class="el-icon-check"></i>
         </span>
       </el-progress>
-      {{ size }} / {{ total }}
+      {{ index }} / {{ total }}
       <div v-if="notExcel">
         <div v-show="tips.length > 0">
           <el-divider></el-divider>
-          <el-alert :title="tips" type="error" @close="closeAlert"/>
+          <el-alert :title="tips" type="success" @close="closeAlert"/>
         </div>
         <el-divider></el-divider>
         <ul style="overflow: auto" class="infinite-list" id="jdtRef">
@@ -24,11 +24,11 @@
         </ul>
         <el-divider></el-divider>
         <div style="width: 100%; display: flex; justify-content: right">
-          <el-button @click="closeModal" :disabled="percentage < 100" type="warning" icon="el-icon-close" size="small">
+          <el-button @click="closeModal" :disabled="!jdt.closeButton" type="warning" icon="el-icon-close" index="small">
             关闭
           </el-button>
-          <el-button @click="exportExcel" :disabled="percentage < 100" type="primary" icon="el-icon-download"
-                     size="small"> 导出Excel
+          <el-button @click="exportExcel" :disabled="!jdt.closeButton" type="primary" icon="el-icon-download"
+                     index="small"> 导出Excel
           </el-button>
         </div>
       </div>
@@ -43,6 +43,7 @@ import {setCallback} from '@/utils/websocket'
 import {Export} from '@/utils/ExportExcel'
 import {makePercentage} from "./progUtils";
 import {stringNotBlank} from "../../utils/blank-utils";
+import {reactive, watch} from "vue";
 
 export default {
   setup() {
@@ -64,32 +65,31 @@ export default {
       tips.value = ''
       store.commit('app/closeJdt')
     }
+
+    const cuoWuLeiXin = reactive({
+      success: 0,
+      danger: 0,
+      warning: 0,
+      info: 0,
+    })
+
+    // 提示语
     const tips = ref('')
     const notExcel = ref(true)
 
     const total = ref(0)
-    const size = ref(0)
+    const index = ref(0)
 
     const excelTitle = ref({})
 
     const socketCallback = (data) => {
-      if (stringNotBlank(data.jdtType) && data.jdtType === 'pureProgress') {
-        store.commit('app/setJdt', {
-          title: data.jdtTitle,
-          isOpen: true,
-          abnormalClosing: true
-        })
-        total.value = data.total
-        size.value = data.size
-        percentage.value = makePercentage(data.size, data.total)
+      total.value = data.total
+      index.value = data.index
+      percentage.value = makePercentage(data.index, data.total)
+      if (stringNotBlank(data.jdtType) && data.jdtType === 'download') {
         notExcel.value = false
-        if (percentage.value === 100) {
-          setTimeout(() => {
-            store.commit('app/closeJdt')
-          }, 500)
-        }
-      } else {
-        percentage.value = data.percentage
+        store.commit('app/titleJdt', "下载中...")
+      } else if (stringNotBlank(data.jdtType) && data.jdtType === 'upload') {
         for (let key in data) {
           if (key.indexOf("#") > -1) {
             let newKey = key.split("#")
@@ -102,9 +102,28 @@ export default {
             delete data[key]
           }
         }
+        notExcel.value = true
         jdtData.value.push(data)
         const jdtRef = document.getElementById('jdtRef')
         jdtRef.scrollTop = jdtRef.scrollHeight
+        if (percentage.value === 100) {
+          let success = 0
+          let danger = 0
+          let warning = 0
+          let info = 0
+          jdtData.value.forEach(item => {
+            if (item.type === 0) {
+              success++
+            } else if (item.type === 1) {
+              danger++
+            } else if (item.type === 2) {
+              warning++
+            } else {
+              info++
+            }
+          })
+          tips.value = `数据上传完成:成功:【${success}】、错误:【${danger}】、内部错误:【${warning}】、未知:【${info}】、总条数:【${jdtData.value.length}】`
+        }
       }
     }
 
@@ -160,9 +179,14 @@ export default {
       tips.value = ''
     }
 
+    watch(() => jdt.value.isOpen, () => {
+      if (!jdt.value.isOpen) {
+        closeModal()
+      }
+    })
+
     onMounted(() => {
       setCallback(socketCallback)
-
     })
 
     return {
@@ -177,7 +201,8 @@ export default {
       closeAlert,
       notExcel,
       total,
-      size,
+      index,
+      cuoWuLeiXin,
     }
   },
 }

+ 7 - 2
src/store/modules/app.js

@@ -14,7 +14,7 @@ const state = () => ({
     jdt: {
         title: null,
         isOpen: false,
-        abnormalClosing: false,
+        closeButton: false,
     },
     theme: {
         state: {
@@ -52,10 +52,15 @@ const mutations = {
         Cookies.set('jdtTitle', val.title)
         state.jdt = val
     },
+    closeButton(state, val) {
+        state.jdt.closeButton = val
+    },
     closeJdt(state) {
         state.jdt.isOpen = false
+    },
+    titleJdt(state, val) {
+        state.jdt.title = val
     }
-
 }
 
 // actions

+ 7 - 3
src/utils/excel.js

@@ -26,7 +26,11 @@ export function createWorkSheet(data, fields, titles) {
 }
 
 export function downloadExcel(data) {
-    startLoading()
+    if (data.jdt) {
+        store.commit('app/setJdt', {title: '正在导出 Excel', isOpen: true, closeButton: false})
+    } else {
+        startLoading()
+    }
     axios({
         method: 'post',
         url: apiUrl + data.url,
@@ -46,12 +50,12 @@ export function downloadExcel(data) {
             link.click()
             document.body.removeChild(link)
             endLoading()
-            store.commit('app/setLoading', false)
+            store.commit('app/closeJdt')
         })
         .catch((error) => {
             ElMessage.error('网络连接错误', '错误')
             console.error(error)
             endLoading()
-            store.commit('app/setLoading', false)
+            store.commit('app/closeJdt')
         })
 }

+ 4 - 3
src/utils/request.js

@@ -17,7 +17,7 @@ const service = axios.create({
 service.interceptors.request.use(
     (config) => {
         if (typeof config.jdtTitle !== 'undefined') {
-            store.commit('app/setJdt', {title: config.jdtTitle, isOpen: true, abnormalClosing: false})
+            store.commit('app/setJdt', {title: config.jdtTitle, isOpen: true, closeButton: false})
         } else {
             startLoading()
         }
@@ -28,7 +28,7 @@ service.interceptors.request.use(
     },
     (error) => {
         endLoading()
-        store.commit('app/closeJdt')
+        store.commit('app/closeButton', true)
         return Promise.reject(error)
     }
 )
@@ -36,6 +36,7 @@ service.interceptors.request.use(
 service.interceptors.response.use(
     (response) => {
         endLoading()
+        store.commit('app/closeButton', true)
         if (response.data.code === 200 || response.data.code === 0) {
             return response.data.data
         }
@@ -84,7 +85,7 @@ service.interceptors.response.use(
     },
     (error) => {
         endLoading()
-        store.commit('app/closeJdt')
+        store.commit('app/closeButton', true)
         ElMessage({
             message: error,
             type: 'error',

+ 3 - 1
src/utils/websocket.js

@@ -2,6 +2,7 @@ import {ElMessageBox, ElNotification} from 'element-plus'
 import Cookies from 'js-cookie'
 import router from '@/router'
 import store from '@/store'
+import {endLoading} from "./loading";
 
 const socketUrl = import.meta.env.VITE_SOCKET_URL
 
@@ -64,9 +65,10 @@ export function initWebSocket(sid) {
                     store.commit('app/setJdt', {
                         title: Cookies.get('jdtTitle'),
                         isOpen: true,
-                        abnormalClosing: true
+                        closeButton: false,
                     })
                 }
+                endLoading()
                 globalCallback(data)
             }
         } else if (data.name === 'sidSingle') {

+ 1 - 0
src/views/medical-insurance/allpatient/SetSheetUpload.vue

@@ -493,6 +493,7 @@ export default {
             param: queryTerm.value,
             url: '/setlListUpld/exportExcel',
             fileName: `${value}.xlsx`,
+            jdt: true,
           }
           setTimeout(() => {
             downloadExcel(data)