瀏覽代碼

feat: NG-98: AE-会员端与管理端系统时间不一致(管理端正确,会员端错误)

tyler 1 年之前
父節點
當前提交
5d72c902d4

+ 44 - 0
src/utils/tool.js

@@ -59,6 +59,50 @@ const tool = {
     if (withTime) return Y + M + D + h + m + s
     return Y + M + D
   },
+  convertToNigeriaTime(timestamp) {
+    timestamp = this.normalizeTimestamp(timestamp)
+    const options = {
+      timeZone: 'Africa/Lagos',
+      year: 'numeric',
+      month: '2-digit',
+      day: '2-digit',
+      hour: '2-digit',
+      minute: '2-digit',
+      second: '2-digit',
+      hour12: false // 24-hour format
+    };
+    const formatter = new Intl.DateTimeFormat('en-GB', options);
+    const formattedDate = formatter.format(new Date(timestamp));
+
+    // Reformatting to YYYY-MM-DD HH:mm:ss
+    const [date, time] = formattedDate.split(', ');
+    const [day, month, year] = date.split('/');
+    return `${year}-${month}-${day} ${time}`;
+  },
+  convertToNigeriaDayTime(timestamp) {
+    timestamp = this.normalizeTimestamp(timestamp)
+    const options = {
+      timeZone: 'Africa/Lagos',
+      year: 'numeric',
+      month: '2-digit',
+      day: '2-digit',
+      hour: '2-digit',
+      minute: '2-digit',
+      second: '2-digit',
+      hour12: false // 24-hour format
+    };
+    const formatter = new Intl.DateTimeFormat('en-GB', options);
+    const formattedDate = formatter.format(new Date(timestamp));
+
+    // Reformatting to YYYY-MM-DD HH:mm:ss
+    const [date, time] = formattedDate.split(', ');
+    const [day, month, year] = date.split('/');
+    return `${year}-${month}-${day}`;
+  },
+  normalizeTimestamp(timestamp) {
+    // 如果小于毫秒级最小值,认为是秒级时间戳
+    return timestamp < 1000000000000 ? timestamp * 1000 : timestamp;
+  },
   /**
    * 处理错误结果
    * @param error

+ 7 - 2
src/views/article/article-list.vue

@@ -21,7 +21,7 @@
 			</el-table-column>
       <el-table-column align="center" :label="$t('article.createTime')" prop="CREATED_AT">
         <template slot-scope="{row}">
-          <span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d}') }}</span>
+          <span>{{ tool.convertToNigeriaDayTime(row.CREATED_AT) }}</span>
         </template>
       </el-table-column>
     </el-table>
@@ -32,7 +32,7 @@
 			<div class="white-box" style="margin-top: -20px; padding: 0;">
 				<div class="white-box-title" style="text-align: center">
 					<h1>{{ article.TITLE }}</h1>
-					<span>{{ article.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+					<span>{{ tool.convertToNigeriaTime(article.CREATED_AT) }}</span>
 				</div>
 				<div v-html="article.CONTENT" class="white-box-content">
 				</div>
@@ -50,6 +50,11 @@ import tool from "@/utils/tool";
 
 export default {
   name: 'ArticleList',
+  computed: {
+    tool() {
+      return tool
+    }
+  },
   components: { Pagination },
   directives: { waves },
   data() {

+ 7 - 2
src/views/dashboard/admin/index.vue

@@ -36,7 +36,7 @@
 								</el-button>
 							</template>
 							<template slot-scope="{row}">
-								<span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d}') }}</span>
+								<span>{{ tool.convertToNigeriaDayTime(row.CREATED_AT) }}</span>
 							</template>
 						</el-table-column>
 					</el-table>
@@ -59,7 +59,7 @@
 			<div class="white-box" style="margin-top: -20px; padding: 0;">
 				<div class="white-box-title" style="text-align: center">
 					<h1>{{ article.TITLE }}</h1>
-					<span>{{ article.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+					<span>{{ tool.convertToNigeriaTime(article.CREATED_AT) }}</span>
 				</div>
 				<div v-html="article.CONTENT" class="white-box-content">
 				</div>
@@ -103,6 +103,11 @@ const lineChartData = {
 
 export default {
   name: 'DashboardAdmin',
+  computed: {
+    tool() {
+      return tool
+    }
+  },
   components: {
     GithubCorner,
     PanelGroup,

+ 1 - 1
src/views/finance/recharge-list.vue

@@ -3,7 +3,7 @@
     <el-table :data="list" border fit highlight-current-row>
       <el-table-column align="center" :label="$t('finance.createdTime')" prop="CREATED_AT" min-width="140px">
         <template slot-scope="{row}">
-          <span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ tool.convertToNigeriaTime(row.CREATED_AT) }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" min-width="160px" :label="$t('finance.rechargeAmount')" prop="AMOUNT">

+ 1 - 1
src/views/finance/transfer-list.vue

@@ -76,7 +76,7 @@
 			</el-table-column>
 			<el-table-column min-width="160px"  align="center" :label="$t('finance.transferTime')" prop="CREATED_AT">
 				<template slot-scope="{row}">
-					<span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+					<span>{{ tool.convertToNigeriaTime(row.CREATED_AT) }}</span>
 				</template>
 			</el-table-column>
 			<el-table-column align="center" min-width="150px" :label="$t('finance.remark')" prop="REMARK"></el-table-column>

+ 10 - 1
src/views/profile/components/UserCard.vue

@@ -140,11 +140,20 @@ export default {
       return this.$moment(this.nowTime * 1000).utcOffset('+0100' ).format('YYYY-MM-DD HH:mm:ss') + ' (WAT)'
     },
   },
+  mounted() {
+    this.calcTime()
+  },
   methods: {
     getTime() {
       let dateObj = new Date()
       return Math.round(dateObj.getTime() / 1000 + (0 * 86400))
-    }
+    },
+    calcTime () {
+      let obj = this
+      setInterval(function () {
+        obj.nowTime += 1
+      }, 1000)
+    },
   }
 }
 </script>

+ 7 - 2
src/views/shop/order-list.vue

@@ -92,12 +92,12 @@
       <el-table-column align="center" :label="$t('shop.payment')" prop="PAY_TYPE" min-width="100px"></el-table-column>
       <el-table-column align="center" :label="$t('shop.createdTime')" prop="CREATED_AT" min-width="110px">
         <template slot-scope="{row}">
-          <span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ tool.convertToNigeriaTime(row.CREATED_AT) }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" :label="$t('shop.payTime')" prop="PAY_AT" min-width="110px">
         <template slot-scope="{row}">
-          <span>{{ row.PAY_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ tool.convertToNigeriaTime(row.PAY_AT) }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" :label="$t('shop.payStatus')" prop="STATUS" min-width="110px">
@@ -128,6 +128,11 @@ import tool from '@/utils/tool'
 
 export default {
   name: 'OrderList',
+  computed: {
+    tool() {
+      return tool
+    }
+  },
   components: { Pagination },
   directives: { waves },
   filters: {

+ 7 - 2
src/views/user/member-order.vue

@@ -92,12 +92,12 @@
       <el-table-column align="center" :label="$t('shop.payment')" prop="PAY_TYPE" min-width="100px" />
       <el-table-column align="center" :label="$t('shop.createdTime')" prop="CREATED_AT" min-width="110px">
         <template slot-scope="{row}">
-          <span>{{ row.CREATED_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ tool.convertToNigeriaTime(row.CREATED_AT) }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" :label="$t('shop.payTime')" prop="PAY_AT" min-width="110px">
         <template slot-scope="{row}">
-          <span>{{ row.PAY_AT | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
+          <span>{{ tool.convertToNigeriaTime(row.PAY_AT) }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" :label="$t('shop.payStatus')" prop="STATUS" min-width="110px">
@@ -128,6 +128,11 @@ import tool from '@/utils/tool'
 
 export default {
   name: 'MemberOrder',
+  computed: {
+    tool() {
+      return tool
+    }
+  },
   components: { Pagination },
   directives: { waves },
   filters: {