فهرست منبع

!78 项目全局使用formatDate方法移除parseTime方法
Merge pull request !78 from puhui999/dev

芋道源码 2 سال پیش
والد
کامیت
b79a187534

+ 9 - 1
build/vite/index.ts

@@ -6,11 +6,13 @@ 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'
 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'
@@ -95,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}`
+    })
   ]
 }

+ 1 - 0
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",

+ 7 - 51
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

+ 10 - 12
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'))
 }

+ 2 - 2
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>

+ 1 - 0
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>

+ 1 - 0
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')

+ 2 - 1
src/types/auto-components.d.ts

@@ -24,6 +24,7 @@ declare module '@vue/runtime-core' {
     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']
@@ -68,6 +69,7 @@ declare module '@vue/runtime-core' {
     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']
@@ -78,7 +80,6 @@ declare module '@vue/runtime-core' {
     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']

+ 1 - 49
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)
 }
 
 /**

+ 2 - 0
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'

+ 2 - 2
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'

+ 3 - 3
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({

+ 2 - 2
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'
 

+ 4 - 4
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,

+ 3 - 3
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,

+ 8 - 2
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() // 消息弹窗

+ 2 - 2
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 }}