Explorar el Código

导出 excel 表。 以及添加新的依赖

xiaochan hace 3 años
padre
commit
4eba55c0c1

+ 5 - 0
package-lock.json

@@ -2552,6 +2552,11 @@
         "minimist": "^1.2.5"
       }
     },
+    "moment": {
+      "version": "2.29.1",
+      "resolved": "https://registry.nlark.com/moment/download/moment-2.29.1.tgz",
+      "integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
+    },
     "moment-mini": {
       "version": "2.24.0",
       "resolved": "https://registry.npm.taobao.org/moment-mini/download/moment-mini-2.24.0.tgz",

+ 1 - 0
package.json

@@ -23,6 +23,7 @@
     "vue-router": "^4.0.10",
     "vuex": "^4.0.2",
     "xlsx": "^0.17.0",
+    "moment": "^2.29.1",
     "@kangc/v-md-editor": "^2.3.5",
     "@vueuse/core": "^4.10.0",
     "axios": "^0.21.1",

+ 60 - 30
src/components/progress/Index.vue

@@ -10,24 +10,27 @@
           <i v-show="percentage === 100" class="el-icon-check"></i>
         </span>
       </el-progress>
-      <div v-show="tips.length > 0">
+      {{ size }} / {{ total }}
+      <div v-if="notExcel">
+        <div v-show="tips.length > 0">
+          <el-divider></el-divider>
+          <el-alert :title="tips" type="error" @close="closeAlert"/>
+        </div>
         <el-divider></el-divider>
-        <el-alert :title="tips" type="error" @close="closeAlert"/>
-      </div>
-      <el-divider></el-divider>
-      <ul style="overflow: auto" class="infinite-list" id="jdtRef">
-        <li v-for="i in jdtData" :key="i" class="infinite-list-item" :class="infiniteList(i)">
-          <div class="jdt-message" :title="i.message">{{ i.title }} 结果: {{ i.message }}</div>
-        </li>
-      </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>
-        <el-button @click="exportExcel" :disabled="percentage < 100" type="primary" icon="el-icon-download"
-                   size="small"> 导出Excel
-        </el-button>
+        <ul style="overflow: auto" class="infinite-list" id="jdtRef">
+          <li v-for="i in jdtData" :key="i" class="infinite-list-item" :class="infiniteList(i)">
+            <div class="jdt-message" :title="i.message">{{ i.title }} 结果: {{ i.message }}</div>
+          </li>
+        </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>
+          <el-button @click="exportExcel" :disabled="percentage < 100" type="primary" icon="el-icon-download"
+                     size="small"> 导出Excel
+          </el-button>
+        </div>
       </div>
     </el-dialog>
   </div>
@@ -38,6 +41,8 @@ import {computed, onMounted, ref} from 'vue-demi'
 import {useStore} from 'vuex'
 import {setCallback} from '@/utils/websocket'
 import {Export} from '@/utils/ExportExcel'
+import {makePercentage} from "./progUtils";
+import {stringNotBlank} from "../../utils/blank-utils";
 
 export default {
   setup() {
@@ -60,26 +65,47 @@ export default {
       store.commit('app/closeJdt')
     }
     const tips = ref('')
+    const notExcel = ref(true)
+
+    const total = ref(0)
+    const size = ref(0)
 
     const excelTitle = ref({})
 
     const socketCallback = (data) => {
-      percentage.value = data.percentage
-      for (let key in data) {
-        if (key.indexOf("#") > -1) {
-          let newKey = key.split("#")
-          data[newKey[0]] = data[key]
-          if (newKey[0] === 'type') {
-            excelTitle.value.typeName = newKey[1]
-          } else {
-            excelTitle.value[newKey[0]] = newKey[1]
+      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)
+        notExcel.value = false
+        if (percentage.value === 100) {
+          setTimeout(() => {
+            store.commit('app/closeJdt')
+          }, 500)
+        }
+      } else {
+        percentage.value = data.percentage
+        for (let key in data) {
+          if (key.indexOf("#") > -1) {
+            let newKey = key.split("#")
+            data[newKey[0]] = data[key]
+            if (newKey[0] === 'type') {
+              excelTitle.value.typeName = newKey[1]
+            } else {
+              excelTitle.value[newKey[0]] = newKey[1]
+            }
+            delete data[key]
           }
-          delete data[key]
         }
+        jdtData.value.push(data)
+        const jdtRef = document.getElementById('jdtRef')
+        jdtRef.scrollTop = jdtRef.scrollHeight
       }
-      jdtData.value.push(data)
-      const jdtRef = document.getElementById('jdtRef')
-      jdtRef.scrollTop = jdtRef.scrollHeight
     }
 
     const percentage = ref(0)
@@ -136,6 +162,7 @@ export default {
 
     onMounted(() => {
       setCallback(socketCallback)
+
     })
 
     return {
@@ -148,6 +175,9 @@ export default {
       cptUpldRsTxt,
       tips,
       closeAlert,
+      notExcel,
+      total,
+      size,
     }
   },
 }

+ 4 - 0
src/components/progress/progUtils.js

@@ -0,0 +1,4 @@
+export function makePercentage(index, total) {
+    let percentage = Math.ceil((Math.round(index / total * 10000) / 100))
+    return percentage > 100 ? 100 : percentage
+}

+ 5 - 14
src/data/shortcuts.js

@@ -1,3 +1,5 @@
+import moment from 'moment'
+
 export const shortcuts = [
     {
         text: '最近一周',
@@ -32,27 +34,16 @@ export const clockinShortcuts = [
     {
         text: '上一个月',
         value: (() => {
-            const end = new Date()
-            const start = new Date()
-
-            const month = start.getMonth() + 1
-            const date = start.getDate()
-
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * (date + 30))
-            end.setTime(end.getTime() - 3600 * 1000 * 24 * date)
-
+            const start = moment(moment().month(moment().month() - 1).startOf('month').valueOf()).format('YYYY-MM-DD');
+            const end = moment(moment().month(moment().month() - 1).endOf('month').valueOf()).format('YYYY-MM-DD');
             return [start, end]
         })(),
     },
     {
         text: '本月',
         value: (() => {
+            const start = moment(moment().month(moment().month()).startOf('month').valueOf()).format('YYYY-MM-DD')
             const end = new Date()
-            const start = new Date()
-
-            const date = start.getDate()
-
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * (date - 1))
             return [start, end]
         })(),
     },

+ 2 - 0
src/utils/request.js

@@ -28,6 +28,7 @@ service.interceptors.request.use(
     },
     (error) => {
         endLoading()
+        store.commit('app/closeJdt')
         return Promise.reject(error)
     }
 )
@@ -35,6 +36,7 @@ service.interceptors.request.use(
 service.interceptors.response.use(
     (response) => {
         endLoading()
+        store.commit('app/closeJdt')
         if (response.data.code === 200 || response.data.code === 0) {
             return response.data.data
         }

+ 7 - 2
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 {stringIsBlank} from "./blank-utils";
 
 const socketUrl = import.meta.env.VITE_SOCKET_URL
 
@@ -58,10 +59,14 @@ export function initWebSocket(sid) {
             if (null !== globalCallback) {
                 globalCallback(data)
             }
-        } else if (data.name === 'upldSetlListMessage') {
+        } else if (data.name === 'jdtMessage') {
             if (null != globalCallback) {
                 if (!store.state.app.jdt.isOpen) {
-                    store.commit('app/setJdt', {title: Cookies.get('jdtTitle'), isOpen: true, abnormalClosing: true})
+                    store.commit('app/setJdt', {
+                        title: Cookies.get('jdtTitle'),
+                        isOpen: true,
+                        abnormalClosing: true
+                    })
                 }
                 globalCallback(data)
             }

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

@@ -258,9 +258,8 @@
 
 <script>
 import {clockinShortcuts} from '../../../data/shortcuts'
-import {ref, unref, watch} from "vue"
+import {ref, unref, watch, onMounted} from "vue"
 import store from '@/store'
-import {onMounted} from "@vue/runtime-core"
 import {getClrTypes, getInsutypes} from "../../../api/medical-insurance/si-dict"
 import {getDateRangeFormatDate} from "../../../utils/date"
 import {