From ba5985943bad95d977d5753ca6a6d26a77e12429 Mon Sep 17 00:00:00 2001
From: puhui999 <puhui999@163.com>
Date: Thu, 30 Mar 2023 16:04:46 +0800
Subject: [PATCH 1/4] =?UTF-8?q?update:=20=E8=A7=A3=E5=86=B3=E7=82=B9?=
 =?UTF-8?q?=E5=87=BB=E9=81=AE=E7=BD=A9=E5=B1=82=E5=BC=B9=E7=AA=97=E5=85=B3?=
 =?UTF-8?q?=E9=97=AD=E5=90=8E=EF=BC=8C=E9=A1=B5=E9=9D=A2=E5=B0=B1=E6=93=8D?=
 =?UTF-8?q?=E4=BD=9C=E4=B8=8D=E4=BA=86=E4=BA=86=E4=BC=9A=E4=B8=80=E7=9B=B4?=
 =?UTF-8?q?=E8=BD=AC=E5=9C=88=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 build/vite/index.ts         |  1 +
 src/config/axios/service.ts | 22 ++++++++++------------
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/build/vite/index.ts b/build/vite/index.ts
index dcec1aed..fa7e04e8 100644
--- a/build/vite/index.ts
+++ b/build/vite/index.ts
@@ -6,6 +6,7 @@ import progress from 'vite-plugin-progress'
 import EslintPlugin from 'vite-plugin-eslint'
 import PurgeIcons from 'vite-plugin-purge-icons'
 import { ViteEjsPlugin } from 'vite-plugin-ejs'
+// @ts-ignore
 import ElementPlus from 'unplugin-element-plus/vite'
 import AutoImport from 'unplugin-auto-import/vite'
 import Components from 'unplugin-vue-components/vite'
diff --git a/src/config/axios/service.ts b/src/config/axios/service.ts
index 7109615b..afe75d8a 100644
--- a/src/config/axios/service.ts
+++ b/src/config/axios/service.ts
@@ -219,21 +219,19 @@ const handleAuthorized = () => {
   if (!isRelogin.show) {
     isRelogin.show = true
     ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
+      showCancelButton: false,
+      closeOnClickModal: false,
+      showClose: false,
       confirmButtonText: t('login.relogin'),
-      cancelButtonText: t('common.cancel'),
       type: 'warning'
+    }).then(() => {
+      const { wsCache } = useCache()
+      resetRouter() // 重置静态路由表
+      wsCache.clear()
+      removeToken()
+      isRelogin.show = false
+      window.location.href = '/'
     })
-      .then(() => {
-        const { wsCache } = useCache()
-        resetRouter() // 重置静态路由表
-        wsCache.clear()
-        removeToken()
-        isRelogin.show = false
-        window.location.href = '/'
-      })
-      .catch(() => {
-        isRelogin.show = false
-      })
   }
   return Promise.reject(t('sys.api.timeoutMessage'))
 }

From 5459fadafd863e2e49b6fef5b7f1cd063dde7740 Mon Sep 17 00:00:00 2001
From: puhui999 <puhui999@163.com>
Date: Thu, 30 Mar 2023 16:13:43 +0800
Subject: [PATCH 2/4] update: @ts-ignore

---
 src/plugins/vxeTable/renderer/preview.tsx | 1 +
 src/store/modules/dict.ts                 | 1 +
 src/types/auto-components.d.ts            | 1 +
 src/utils/tree.ts                         | 2 ++
 4 files changed, 5 insertions(+)

diff --git a/src/plugins/vxeTable/renderer/preview.tsx b/src/plugins/vxeTable/renderer/preview.tsx
index 3cb1270b..a737dd51 100644
--- a/src/plugins/vxeTable/renderer/preview.tsx
+++ b/src/plugins/vxeTable/renderer/preview.tsx
@@ -25,6 +25,7 @@ VXETable.renderer.add('XPreview', {
       )
     } else {
       return (
+        // @ts-ignore
         <ElLink href={row[column.field]} target="_blank">
           {row[column.field]}
         </ElLink>
diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts
index 2d393e43..822547bf 100644
--- a/src/store/modules/dict.ts
+++ b/src/store/modules/dict.ts
@@ -1,5 +1,6 @@
 import { defineStore } from 'pinia'
 import { store } from '../index'
+// @ts-ignore
 import { DictDataVO } from '@/api/system/dict/types'
 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
 const { wsCache } = useCache('sessionStorage')
diff --git a/src/types/auto-components.d.ts b/src/types/auto-components.d.ts
index a04c98b3..2a42203d 100644
--- a/src/types/auto-components.d.ts
+++ b/src/types/auto-components.d.ts
@@ -70,6 +70,7 @@ declare module '@vue/runtime-core' {
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
+    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     Error: typeof import('./../components/Error/src/Error.vue')['default']
     FlowCondition: typeof import('./../components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue')['default']
diff --git a/src/utils/tree.ts b/src/utils/tree.ts
index 20f97a38..51a64bd1 100644
--- a/src/utils/tree.ts
+++ b/src/utils/tree.ts
@@ -265,6 +265,7 @@ export const handleTree = (data: any[], id?: string, parentId?: string, children
   }
   return tree
 }
+
 /**
  * 构造树型结构数据
  * @param {*} data 数据源
@@ -273,6 +274,7 @@ export const handleTree = (data: any[], id?: string, parentId?: string, children
  * @param {*} children 孩子节点字段 默认 'children'
  * @param {*} rootId 根Id 默认 0
  */
+// @ts-ignore
 export const handleTree2 = (data, id, parentId, children, rootId) => {
   id = id || 'id'
   parentId = parentId || 'parentId'

From dc1393411c5cc7d43d349ce720dca789e8f224b0 Mon Sep 17 00:00:00 2001
From: puhui999 <puhui999@163.com>
Date: Tue, 4 Apr 2023 11:19:58 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=85=A8=E5=B1=80?=
 =?UTF-8?q?=E4=BD=BF=E7=94=A8formatDate=E6=96=B9=E6=B3=95=E7=A7=BB?=
 =?UTF-8?q?=E9=99=A4parseTime=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../package/designer/ProcessViewer.vue        | 58 +++----------------
 src/layout/components/Message/src/Message.vue |  4 +-
 src/types/auto-components.d.ts                |  7 ---
 src/utils/formatTime.ts                       | 50 +---------------
 src/views/Profile/components/ProfileUser.vue  |  4 +-
 .../detail/ProcessInstanceTaskList.vue        |  6 +-
 src/views/infra/webSocket/index.vue           |  4 +-
 .../mp/components/wx-material-select/main.vue |  8 +--
 src/views/mp/components/wx-msg/main.vue       |  6 +-
 .../notify/my/MyNotifyMessageDetail.vue       |  4 +-
 10 files changed, 26 insertions(+), 125 deletions(-)

diff --git a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
index a206c45b..a90d468e 100644
--- a/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
+++ b/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
@@ -280,7 +280,7 @@ const elementHover = (element) => {
     if (element.value.type === 'bpmn:StartEvent' && processInstance.value) {
       html = `<p>发起人:${processInstance.value.startUser.nickname}</p>
                   <p>部门:${processInstance.value.startUser.deptName}</p>
-                  <p>创建时间:${parseTime(processInstance.value.createTime)}`
+                  <p>创建时间:${formatDate(processInstance.value.createTime)}`
     } else if (element.value.type === 'bpmn:UserTask') {
       // debugger
       let task = taskList.value.find((m) => m.id === activity.taskId) // 找到活动对应的 taskId
@@ -297,26 +297,26 @@ const elementHover = (element) => {
       html = `<p>审批人:${task.assigneeUser.nickname}</p>
                   <p>部门:${task.assigneeUser.deptName}</p>
                   <p>结果:${dataResult}</p>
-                  <p>创建时间:${parseTime(task.createTime)}</p>`
+                  <p>创建时间:${formatDate(task.createTime)}</p>`
       // html = `<p>审批人:${task.assigneeUser.nickname}</p>
       //             <p>部门:${task.assigneeUser.deptName}</p>
       //             <p>结果:${getIntDictOptions(
       //               DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
       //               task.result
       //             )}</p>
-      //             <p>创建时间:${parseTime(task.createTime)}</p>`
+      //             <p>创建时间:${formatDate(task.createTime)}</p>`
       if (task.endTime) {
-        html += `<p>结束时间:${parseTime(task.endTime)}</p>`
+        html += `<p>结束时间:${formatDate(task.endTime)}</p>`
       }
       if (task.reason) {
         html += `<p>审批建议:${task.reason}</p>`
       }
     } else if (element.value.type === 'bpmn:ServiceTask' && processInstance.value) {
       if (activity.startTime > 0) {
-        html = `<p>创建时间:${parseTime(activity.startTime)}</p>`
+        html = `<p>创建时间:${formatDate(activity.startTime)}</p>`
       }
       if (activity.endTime > 0) {
-        html += `<p>结束时间:${parseTime(activity.endTime)}</p>`
+        html += `<p>结束时间:${formatDate(activity.endTime)}</p>`
       }
       console.log(html)
     } else if (element.value.type === 'bpmn:EndEvent' && processInstance.value) {
@@ -333,7 +333,7 @@ const elementHover = (element) => {
       //   processInstance.value.result
       // )}</p>`
       if (processInstance.value.endTime) {
-        html += `<p>结束时间:${parseTime(processInstance.value.endTime)}</p>`
+        html += `<p>结束时间:${formatDate(processInstance.value.endTime)}</p>`
       }
     }
     console.log(html, 'html111111111111111')
@@ -348,50 +348,6 @@ const elementOut = (element) => {
   toRaw(overlays.value).remove({ element })
   elementOverlayIds.value[element.id] = null
 }
-const parseTime = (time) => {
-  if (!time) {
-    return null
-  }
-  const format = '{y}-{m}-{d} {h}:{i}:{s}'
-  let date
-  if (typeof time === 'object') {
-    date = time
-  } else {
-    if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
-      time = parseInt(time)
-    } else if (typeof time === 'string') {
-      time = time
-        .replace(new RegExp(/-/gm), '/')
-        .replace('T', ' ')
-        .replace(new RegExp(/\.[\d]{3}/gm), '')
-    }
-    if (typeof time === 'number' && time.toString().length === 10) {
-      time = time * 1000
-    }
-    date = new Date(time)
-  }
-  const formatObj = {
-    y: date.getFullYear(),
-    m: date.getMonth() + 1,
-    d: date.getDate(),
-    h: date.getHours(),
-    i: date.getMinutes(),
-    s: date.getSeconds(),
-    a: date.getDay()
-  }
-  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
-    let value = formatObj[key]
-    // Note: getDay() returns 0 on Sunday
-    if (key === 'a') {
-      return ['日', '一', '二', '三', '四', '五', '六'][value]
-    }
-    if (result.length > 0 && value < 10) {
-      value = '0' + value
-    }
-    return value || 0
-  })
-  return time_str
-}
 
 onMounted(() => {
   xml.value = props.value
diff --git a/src/layout/components/Message/src/Message.vue b/src/layout/components/Message/src/Message.vue
index 4ac85860..d42a51c0 100644
--- a/src/layout/components/Message/src/Message.vue
+++ b/src/layout/components/Message/src/Message.vue
@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { parseTime } from '@/utils/formatTime'
+import { formatDate } from '@/utils/formatTime'
 import * as NotifyMessageApi from '@/api/system/notify/message'
 
 const { push } = useRouter()
@@ -57,7 +57,7 @@ onMounted(() => {
                     {{ item.templateNickname }}:{{ item.templateContent }}
                   </span>
                   <span class="message-date">
-                    {{ parseTime(item.createTime) }}
+                    {{ formatDate(item.createTime) }}
                   </span>
                 </div>
               </div>
diff --git a/src/types/auto-components.d.ts b/src/types/auto-components.d.ts
index 80a5900f..0ed1a84d 100644
--- a/src/types/auto-components.d.ts
+++ b/src/types/auto-components.d.ts
@@ -23,7 +23,6 @@ declare module '@vue/runtime-core' {
     DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default']
     Echart: typeof import('./../components/Echart/src/Echart.vue')['default']
     Editor: typeof import('./../components/Editor/src/Editor.vue')['default']
-    ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
@@ -53,7 +52,6 @@ declare module '@vue/runtime-core' {
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElImage: typeof import('element-plus/es')['ElImage']
     ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
@@ -62,7 +60,6 @@ declare module '@vue/runtime-core' {
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
     ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
@@ -71,14 +68,10 @@ declare module '@vue/runtime-core' {
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
-    ElTableV2: typeof import('element-plus/es')['ElTableV2']
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
-    ElTimeline: typeof import('element-plus/es')['ElTimeline']
-    ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
-    ElTransfer: typeof import('element-plus/es')['ElTransfer']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElUpload: typeof import('element-plus/es')['ElUpload']
diff --git a/src/utils/formatTime.ts b/src/utils/formatTime.ts
index d4dea9b5..0d68e362 100644
--- a/src/utils/formatTime.ts
+++ b/src/utils/formatTime.ts
@@ -23,53 +23,6 @@ export function formatDate(date: Date, format?: string): string {
   return dayjs(date).format(format)
 }
 
-// TODO 芋艿:稍后去掉
-// 日期格式化
-export function parseTime(time: any, pattern?: string) {
-  if (arguments.length === 0 || !time) {
-    return null
-  }
-  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
-  let date
-  if (typeof time === 'object') {
-    date = time
-  } else {
-    if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
-      time = parseInt(time)
-    } else if (typeof time === 'string') {
-      time = time
-        .replace(new RegExp(/-/gm), '/')
-        .replace('T', ' ')
-        .replace(new RegExp(/\.\d{3}/gm), '')
-    }
-    if (typeof time === 'number' && time.toString().length === 10) {
-      time = time * 1000
-    }
-    date = new Date(time)
-  }
-  const formatObj = {
-    y: date.getFullYear(),
-    m: date.getMonth() + 1,
-    d: date.getDate(),
-    h: date.getHours(),
-    i: date.getMinutes(),
-    s: date.getSeconds(),
-    a: date.getDay()
-  }
-  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
-    let value = formatObj[key]
-    // Note: getDay() returns 0 on Sunday
-    if (key === 'a') {
-      return ['日', '一', '二', '三', '四', '五', '六'][value]
-    }
-    if (result.length > 0 && value < 10) {
-      value = '0' + value
-    }
-    return value || 0
-  })
-  return time_str
-}
-
 /**
  * 获取当前日期是第几周
  * @param dateTime 当前传入的日期值
@@ -87,8 +40,7 @@ export function getWeek(dateTime: Date): number {
   if (dayOfWeek != 0) spendDay = 7 - dayOfWeek + 1
   firstDay = new Date(temptTime.getFullYear(), 0, 1 + spendDay)
   const d = Math.ceil((temptTime.valueOf() - firstDay.valueOf()) / 86400000)
-  const result = Math.ceil(d / 7)
-  return result
+  return Math.ceil(d / 7)
 }
 
 /**
diff --git a/src/views/Profile/components/ProfileUser.vue b/src/views/Profile/components/ProfileUser.vue
index 015440fc..4e4de722 100644
--- a/src/views/Profile/components/ProfileUser.vue
+++ b/src/views/Profile/components/ProfileUser.vue
@@ -34,13 +34,13 @@
       </li>
       <li class="list-group-item">
         <Icon icon="ep:calendar" class="mr-5px" />{{ t('profile.user.createTime') }}
-        <div class="pull-right">{{ parseTime(userInfo?.createTime) }}</div>
+        <div class="pull-right">{{ formatDate(userInfo?.createTime) }}</div>
       </li>
     </ul>
   </div>
 </template>
 <script setup lang="ts">
-import { parseTime } from '@/utils/formatTime'
+import { formatDate } from '@/utils/formatTime'
 import UserAvatar from './UserAvatar.vue'
 
 import { getUserProfileApi, ProfileVO } from '@/api/system/user/profile'
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
index 3bbabcc6..a8aa0120 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
@@ -20,13 +20,13 @@
               </label>
               <label style="font-weight: normal" v-if="item.createTime">创建时间:</label>
               <label style="color: #8a909c; font-weight: normal">
-                {{ parseTime(item?.createTime) }}
+                {{ formatDate(item?.createTime) }}
               </label>
               <label v-if="item.endTime" style="margin-left: 30px; font-weight: normal">
                 审批时间:
               </label>
               <label v-if="item.endTime" style="color: #8a909c; font-weight: normal">
-                {{ parseTime(item?.endTime) }}
+                {{ formatDate(item?.endTime) }}
               </label>
               <label v-if="item.durationInMillis" style="margin-left: 30px; font-weight: normal">
                 耗时:
@@ -45,7 +45,7 @@
   </el-card>
 </template>
 <script setup lang="ts">
-import { parseTime, formatPast2 } from '@/utils/formatTime'
+import { formatDate, formatPast2 } from '@/utils/formatTime'
 import { propTypes } from '@/utils/propTypes'
 
 defineProps({
diff --git a/src/views/infra/webSocket/index.vue b/src/views/infra/webSocket/index.vue
index f090ba9b..b4e0acc0 100644
--- a/src/views/infra/webSocket/index.vue
+++ b/src/views/infra/webSocket/index.vue
@@ -44,7 +44,7 @@
           <li v-for="item in getList" class="mt-2" :key="item.time">
             <div class="flex items-center">
               <span class="mr-2 text-primary font-medium">收到消息:</span>
-              <span>{{ parseTime(item.time) }}</span>
+              <span>{{ formatDate(item.time) }}</span>
             </div>
             <div>
               {{ item.res }}
@@ -56,7 +56,7 @@
   </div>
 </template>
 <script setup lang="ts">
-import { parseTime } from '@/utils/formatTime'
+import { formatDate } from '@/utils/formatTime'
 import { useUserStore } from '@/store/modules/user'
 import { useWebSocket } from '@vueuse/core'
 
diff --git a/src/views/mp/components/wx-material-select/main.vue b/src/views/mp/components/wx-material-select/main.vue
index 26b747e2..4c477078 100644
--- a/src/views/mp/components/wx-material-select/main.vue
+++ b/src/views/mp/components/wx-material-select/main.vue
@@ -41,7 +41,7 @@
       </el-table-column>
       <el-table-column label="上传时间" align="center" prop="createTime" width="180">
         <template #default="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
+          <span>{{ formatDate(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
       <el-table-column
@@ -80,7 +80,7 @@
       </el-table-column>
       <el-table-column label="上传时间" align="center" prop="createTime" width="180">
         <template #default="scope">
-          <span>{{ parseTime(scope.row.createTime) }}</span>
+          <span>{{ formatDate(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
       <el-table-column
@@ -136,7 +136,7 @@ import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue'
 import { getMaterialPage } from '@/api/mp/material'
 import { getFreePublishPage } from '@/api/mp/freePublish'
 import { getDraftPage } from '@/api/mp/draft'
-import { dateFormatter, parseTime } from '@/utils/formatTime'
+import { dateFormatter, formatDate } from '@/utils/formatTime'
 import { defineComponent, PropType } from 'vue'
 
 export default defineComponent({
@@ -238,7 +238,7 @@ export default defineComponent({
       selectMaterialFun,
       getMaterialPageFun,
       getPage,
-      parseTime,
+      formatDate,
       newsTypeRef,
       queryParams,
       objDataRef,
diff --git a/src/views/mp/components/wx-msg/main.vue b/src/views/mp/components/wx-msg/main.vue
index 215b4f97..52397e12 100644
--- a/src/views/mp/components/wx-msg/main.vue
+++ b/src/views/mp/components/wx-msg/main.vue
@@ -32,7 +32,7 @@
           </div>
           <div class="avue-comment__main">
             <div class="avue-comment__header">
-              <div class="avue-comment__create_time">{{ parseTime(item.createTime) }}</div>
+              <div class="avue-comment__create_time">{{ formatDate(item.createTime) }}</div>
             </div>
             <div
               class="avue-comment__body"
@@ -145,7 +145,7 @@ import { defineComponent } from 'vue'
 const message = useMessage() // 消息弹窗
 import profile from '@/assets/imgs/profile.jpg'
 import wechat from '@/assets/imgs/wechat.png'
-import { parseTime } from '@/utils/formatTime'
+import { formatDate } from '@/utils/formatTime'
 
 export default defineComponent({
   components: {
@@ -286,7 +286,7 @@ export default defineComponent({
     return {
       sendMsg,
       loadingMore,
-      parseTime,
+      formatDate,
       scrollToBottom,
       objData,
       mp,
diff --git a/src/views/system/notify/my/MyNotifyMessageDetail.vue b/src/views/system/notify/my/MyNotifyMessageDetail.vue
index bcad4711..247136b0 100644
--- a/src/views/system/notify/my/MyNotifyMessageDetail.vue
+++ b/src/views/system/notify/my/MyNotifyMessageDetail.vue
@@ -5,7 +5,7 @@
         {{ detailData.templateNickname }}
       </el-descriptions-item>
       <el-descriptions-item label="发送时间">
-        {{ formatDate(detailData.createTime, 'YYYY-MM-DD HH:mm:ss') }}
+        {{ formatDate(detailData.createTime) }}
       </el-descriptions-item>
       <el-descriptions-item label="消息类型">
         <dict-tag :type="DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE" :value="detailData.templateType" />
@@ -14,7 +14,7 @@
         <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="detailData.readStatus" />
       </el-descriptions-item>
       <el-descriptions-item label="阅读时间" v-if="detailData.readStatus">
-        {{ formatDate(detailData.readTime, 'YYYY-MM-DD HH:mm:ss') }}
+        {{ formatDate(detailData.readTime) }}
       </el-descriptions-item>
       <el-descriptions-item label="内容">
         {{ detailData.templateContent }}

From 05019837d058f7aae1961f3908e6efa3eace8626 Mon Sep 17 00:00:00 2001
From: puhui999 <puhui999@163.com>
Date: Tue, 4 Apr 2023 22:08:17 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8vue3+vite3=20?=
 =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=B8=AD=E4=BD=BF=E7=94=A8=E9=A1=B6=E5=B1=82?=
 =?UTF-8?q?await=E6=89=93=E5=8C=85=E7=9A=84=E6=97=B6=E5=80=99=E6=8A=A5?=
 =?UTF-8?q?=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 build/vite/index.ts                     |  9 ++++++++-
 package.json                            |  1 +
 src/types/auto-components.d.ts          |  8 ++++++++
 src/views/system/mail/template/form.vue | 10 ++++++++--
 4 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/build/vite/index.ts b/build/vite/index.ts
index fa7e04e8..7d3aa5be 100644
--- a/build/vite/index.ts
+++ b/build/vite/index.ts
@@ -12,6 +12,7 @@ import AutoImport from 'unplugin-auto-import/vite'
 import Components from 'unplugin-vue-components/vite'
 import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
 import viteCompression from 'vite-plugin-compression'
+import topLevelAwait from 'vite-plugin-top-level-await'
 import vueSetupExtend from 'vite-plugin-vue-setup-extend'
 import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
 import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
@@ -96,6 +97,12 @@ export function createVitePlugins() {
       ext: '.gz', // 生成的压缩包后缀
       deleteOriginFile: false //压缩后是否删除源文件
     }),
-    ViteEjsPlugin()
+    ViteEjsPlugin(),
+    topLevelAwait({
+      // The export name of top-level await promise for each chunk module
+      promiseExportName: '__tla',
+      // The function to generate import names of top-level await promise in each chunk module
+      promiseImportName: (i) => `__tla_${i}`
+    })
   ]
 }
diff --git a/package.json b/package.json
index 683d09eb..b7629029 100644
--- a/package.json
+++ b/package.json
@@ -122,6 +122,7 @@
     "vite-plugin-progress": "^0.0.6",
     "vite-plugin-purge-icons": "^0.9.2",
     "vite-plugin-svg-icons": "^2.0.1",
+    "vite-plugin-top-level-await": "^1.3.0",
     "vite-plugin-vue-setup-extend": "^0.4.0",
     "vite-plugin-windicss": "^1.8.10",
     "vue-tsc": "^1.2.0",
diff --git a/src/types/auto-components.d.ts b/src/types/auto-components.d.ts
index 0ed1a84d..8851767a 100644
--- a/src/types/auto-components.d.ts
+++ b/src/types/auto-components.d.ts
@@ -23,6 +23,8 @@ declare module '@vue/runtime-core' {
     DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default']
     Echart: typeof import('./../components/Echart/src/Echart.vue')['default']
     Editor: typeof import('./../components/Editor/src/Editor.vue')['default']
+    ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
+    ElAvatar: typeof import('element-plus/es')['ElAvatar']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
@@ -52,6 +54,7 @@ declare module '@vue/runtime-core' {
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElIcon: typeof import('element-plus/es')['ElIcon']
+    ElImage: typeof import('element-plus/es')['ElImage']
     ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
@@ -60,17 +63,22 @@ declare module '@vue/runtime-core' {
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
     ElRadio: typeof import('element-plus/es')['ElRadio']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
+    ElSpace: typeof import('element-plus/es')['ElSpace']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTableV2: typeof import('element-plus/es')['ElTableV2']
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
+    ElTimeline: typeof import('element-plus/es')['ElTimeline']
+    ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
diff --git a/src/views/system/mail/template/form.vue b/src/views/system/mail/template/form.vue
index f1b8f9a2..96989e3a 100644
--- a/src/views/system/mail/template/form.vue
+++ b/src/views/system/mail/template/form.vue
@@ -1,5 +1,11 @@
 <template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible" :scroll="true" :width="800" :max-height="500">
+  <Dialog
+    :title="dialogTitle"
+    v-model="dialogVisible"
+    :scroll="true"
+    :width="800"
+    :max-height="500"
+  >
     <Form ref="formRef" :schema="allSchemas.formSchema" :rules="rules" v-loading="formLoading" />
     <template #footer>
       <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
@@ -9,7 +15,7 @@
 </template>
 <script setup lang="ts">
 import * as MailTemplateApi from '@/api/system/mail/template'
-import { rules, allSchemas } from './template.data'
+import { allSchemas, rules } from './template.data'
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗