Procházet zdrojové kódy

refactor(web): 全项目时间显示统一走全局 formatTime/formatDate(移除 52 文件本地格式化方法,内联 substring/toLocaleString 改全局,formatDateTime 并入 formatTime)

Xiaogang Liao před 1 týdnem
rodič
revize
f66cedad69
52 změnil soubory, kde provedl 63 přidání a 259 odebrání
  1. 1 5
      cfc-web/src/views/Children.vue
  2. 2 8
      cfc-web/src/views/Families.vue
  3. 1 4
      cfc-web/src/views/GuideFamilyTask.vue
  4. 1 4
      cfc-web/src/views/GuidePackages.vue
  5. 1 4
      cfc-web/src/views/OperationLogs.vue
  6. 1 5
      cfc-web/src/views/Points.vue
  7. 1 5
      cfc-web/src/views/Rewards.vue
  8. 1 5
      cfc-web/src/views/TaskTemplates.vue
  9. 1 5
      cfc-web/src/views/Tasks.vue
  10. 1 4
      cfc-web/src/views/TeacherConsult.vue
  11. 1 4
      cfc-web/src/views/Users.vue
  12. 1 5
      cfc-web/src/views/Wishes.vue
  13. 1 4
      cfc-web/src/views/admin/Activities.vue
  14. 1 4
      cfc-web/src/views/admin/ActivityRegistrationReview.vue
  15. 1 4
      cfc-web/src/views/admin/ArticleManage.vue
  16. 1 4
      cfc-web/src/views/admin/AssessmentOrders.vue
  17. 1 4
      cfc-web/src/views/admin/ButlerAssignments.vue
  18. 1 4
      cfc-web/src/views/admin/DanExecution.vue
  19. 1 4
      cfc-web/src/views/admin/DanSettlement.vue
  20. 1 4
      cfc-web/src/views/admin/Dashboard.vue
  21. 1 4
      cfc-web/src/views/admin/DiscountRuleManagement.vue
  22. 1 4
      cfc-web/src/views/admin/EmotionAlertManage.vue
  23. 1 4
      cfc-web/src/views/admin/FamilyEarnings.vue
  24. 1 4
      cfc-web/src/views/admin/FamilyEarningsWithdraw.vue
  25. 2 10
      cfc-web/src/views/admin/HealthCheckinManage.vue
  26. 1 4
      cfc-web/src/views/admin/HealthPlanManage.vue
  27. 1 3
      cfc-web/src/views/admin/HealthReportReassign.vue
  28. 2 20
      cfc-web/src/views/admin/HomeBannerManage.vue
  29. 1 3
      cfc-web/src/views/admin/IndicatorCorrelations.vue
  30. 1 3
      cfc-web/src/views/admin/IndicatorMappings.vue
  31. 1 4
      cfc-web/src/views/admin/MembershipCenter.vue
  32. 1 5
      cfc-web/src/views/admin/NoticeManage.vue
  33. 1 4
      cfc-web/src/views/admin/OrderDetail.vue
  34. 1 4
      cfc-web/src/views/admin/OrderManage.vue
  35. 1 7
      cfc-web/src/views/admin/PendingRefund.vue
  36. 1 4
      cfc-web/src/views/admin/PointsLog.vue
  37. 1 4
      cfc-web/src/views/admin/ProductManage.vue
  38. 2 7
      cfc-web/src/views/admin/ProfileManagement.vue
  39. 8 18
      cfc-web/src/views/admin/PurchaseManagement.vue
  40. 1 4
      cfc-web/src/views/admin/ReportCollectorTrainer.vue
  41. 1 4
      cfc-web/src/views/admin/ReportParseStatus.vue
  42. 1 4
      cfc-web/src/views/admin/ReportTemplateManage.vue
  43. 1 4
      cfc-web/src/views/admin/SubscriptionManagement.vue
  44. 1 4
      cfc-web/src/views/admin/SupplierProductManage.vue
  45. 1 1
      cfc-web/src/views/admin/SurveyTemplates.vue
  46. 1 5
      cfc-web/src/views/admin/SystemPromptManagement.vue
  47. 1 4
      cfc-web/src/views/admin/VirtualTeamList.vue
  48. 1 4
      cfc-web/src/views/admin/data-source-config.vue
  49. 1 7
      cfc-web/src/views/admin/review/PendingRefundAudit.vue
  50. 1 4
      cfc-web/src/views/orchestration/ExecutionDetail.vue
  51. 1 4
      cfc-web/src/views/orchestration/OrchestrationFlow.vue
  52. 1 4
      cfc-web/src/views/teacher/TeacherAssessment.vue

+ 1 - 5
cfc-web/src/views/Children.vue

@@ -331,11 +331,7 @@ export default {
         }
         }
       })
       })
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 2 - 8
cfc-web/src/views/Families.vue

@@ -536,14 +536,8 @@ export default {
         this.couponSubmitting = false
         this.couponSubmitting = false
       }
       }
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    },
-    formatTime(t) {
-      return t ? t.replace('T', ' ').substring(0, 19) : '-'
-    },
+
+
     handleViewCoupons(row) {
     handleViewCoupons(row) {
       this.currentRow = row
       this.currentRow = row
       this.couponPagination = { current: 1, size: 20, total: 0 }
       this.couponPagination = { current: 1, size: 20, total: 0 }

+ 1 - 4
cfc-web/src/views/GuideFamilyTask.vue

@@ -355,10 +355,7 @@ taskLoading: false,
       const map = { pending: '待完成', pending_review: '待审核', completed: '已完成', overdue: '已超时', cancelled: '已取消' }
       const map = { pending: '待完成', pending_review: '待审核', completed: '已完成', overdue: '已超时', cancelled: '已取消' }
       return map[status] || status
       return map[status] || status
     },
     },
-    formatDate(date) {
-      if (!date) return '-'
-      return new Date(date).toLocaleString()
-    },
+
     handleReview(task, approved) {
     handleReview(task, approved) {
       this.currentTask = task
       this.currentTask = task
       this.reviewAction = approved
       this.reviewAction = approved

+ 1 - 4
cfc-web/src/views/GuidePackages.vue

@@ -314,10 +314,7 @@ export default {
       const map = { draft: '草稿', pending: '待审核', approved: '已发布', rejected: '已拒绝', offline: '已下架' }
       const map = { draft: '草稿', pending: '待审核', approved: '已发布', rejected: '已拒绝', offline: '已下架' }
       return map[status] || status
       return map[status] || status
     },
     },
-    formatDate(date) {
-      if (!date) return '-'
-      return new Date(date).toLocaleString()
-    },
+
     handleCreate() {
     handleCreate() {
       this.form = {
       this.form = {
         id: null,
         id: null,

+ 1 - 4
cfc-web/src/views/OperationLogs.vue

@@ -224,10 +224,7 @@ export default {
       }
       }
       return tags[type] || ''
       return tags[type] || ''
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      return new Date(dateStr).toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 5
cfc-web/src/views/Points.vue

@@ -212,11 +212,7 @@ export default {
       }
       }
       return texts[type] || type
       return texts[type] || type
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 5
cfc-web/src/views/Rewards.vue

@@ -449,11 +449,7 @@ export default {
         }
         }
       }).catch(() => {})
       }).catch(() => {})
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 5
cfc-web/src/views/TaskTemplates.vue

@@ -545,11 +545,7 @@ export default {
       }
       }
       return texts[difficulty] || difficulty
       return texts[difficulty] || difficulty
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 5
cfc-web/src/views/Tasks.vue

@@ -384,11 +384,7 @@ export default {
         this.$message.error('操作失败')
         this.$message.error('操作失败')
       }
       }
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/TeacherConsult.vue

@@ -183,10 +183,7 @@ export default {
         this.replyLoading = false
         this.replyLoading = false
       }
       }
     },
     },
-    formatDate(date) {
-      if (!date) return '-'
-      return new Date(date).toLocaleString()
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/Users.vue

@@ -575,10 +575,7 @@ const res = await getUserList(params)
     getRoleText(role) {
     getRoleText(role) {
       return getRoleLabel(role)
       return getRoleLabel(role)
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      return String(dateStr).replace('T', ' ').substring(0, 19)
-    },
+
     memberLevelLabel(level) {
     memberLevelLabel(level) {
       const map = { FREE: '免费会员', BASIC: '体验会员', FAMILY: '家庭会员', PROVIDER: '标准会员', PREMIUM: '高级家庭会员', LIFETIME: '终身会员' }
       const map = { FREE: '免费会员', BASIC: '体验会员', FAMILY: '家庭会员', PROVIDER: '标准会员', PREMIUM: '高级家庭会员', LIFETIME: '终身会员' }
       return map[level] || '免费会员'
       return map[level] || '免费会员'

+ 1 - 5
cfc-web/src/views/Wishes.vue

@@ -577,11 +577,7 @@ export default {
       }
       }
       return types[status] || 'info'
       return types[status] || 'info'
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      const date = new Date(dateStr)
-      return date.toLocaleString('zh-CN')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/Activities.vue

@@ -375,10 +375,7 @@ export default {
         this.regLoading = false
         this.regLoading = false
       }
       }
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     async handleRegApprove(row) {
     async handleRegApprove(row) {
       try {
       try {
         const res = await approveRegistration({ registrationId: row.id })
         const res = await approveRegistration({ registrationId: row.id })

+ 1 - 4
cfc-web/src/views/admin/ActivityRegistrationReview.vue

@@ -112,10 +112,7 @@ export default {
     this.loadActivities()
     this.loadActivities()
   },
   },
   methods: {
   methods: {
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     async loadActivities() {
     async loadActivities() {
       try {
       try {
         const res = await getActivityList({ page: 1, size: 100 })
         const res = await getActivityList({ page: 1, size: 100 })

+ 1 - 4
cfc-web/src/views/admin/ArticleManage.vue

@@ -608,10 +608,7 @@ export default {
         this.$message.error(e.message || '复制失败')
         this.$message.error(e.message || '复制失败')
       }
       }
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     formatDuration(seconds) {
     formatDuration(seconds) {
       if (!seconds) return '0秒'
       if (!seconds) return '0秒'
       var min = Math.floor(seconds / 60)
       var min = Math.floor(seconds / 60)

+ 1 - 4
cfc-web/src/views/admin/AssessmentOrders.vue

@@ -240,10 +240,7 @@ export default {
       var map = { 0: '待确认', 1: '已确认', 2: '已完成', 3: '已取消', 4: '未到' }
       var map = { 0: '待确认', 1: '已确认', 2: '已完成', 3: '已取消', 4: '未到' }
       return map[status] !== undefined ? map[status] : (status !== null && status !== undefined ? status : '-')
       return map[status] !== undefined ? map[status] : (status !== null && status !== undefined ? status : '-')
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/ButlerAssignments.vue

@@ -83,10 +83,7 @@ export default {
     loadList() {
     loadList() {
       this.loadData()
       this.loadData()
     },
     },
-    formatTime(iso) {
-      if (!iso) return '-'
-      return iso.substring(0, 19).replace('T', ' ')
-    },
+
     loadData() {
     loadData() {
       this.loading = true
       this.loading = true
       var params = { pageNum: this.pageNum, pageSize: this.pageSize }
       var params = { pageNum: this.pageNum, pageSize: this.pageSize }

+ 1 - 4
cfc-web/src/views/admin/DanExecution.vue

@@ -260,10 +260,7 @@ export default {
       this.page = val
       this.page = val
       this.loadData()
       this.loadData()
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      return new Date(time).toLocaleString('zh-CN')
-    },
+
     executionStatusType(status) {
     executionStatusType(status) {
       if (status === 'completed') return 'success'
       if (status === 'completed') return 'success'
       if (status === 'pending') return 'warning'
       if (status === 'pending') return 'warning'

+ 1 - 4
cfc-web/src/views/admin/DanSettlement.vue

@@ -311,10 +311,7 @@ export default {
       this.page = val
       this.page = val
       this.loadData()
       this.loadData()
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      return new Date(time).toLocaleString('zh-CN')
-    },
+
     statusType(status) {
     statusType(status) {
       if (status === 'settled') return 'success'
       if (status === 'settled') return 'success'
       if (status === 'pending') return 'warning'
       if (status === 'pending') return 'warning'

+ 1 - 4
cfc-web/src/views/admin/Dashboard.vue

@@ -249,10 +249,7 @@ export default {
       const map = { pending: '\u5f85\u5ba1\u6838', approved: '\u5df2\u901a\u8fc7', completed: '\u5df2\u5b8c\u6210', rejected: '\u5df2\u62d2\u7edd' }
       const map = { pending: '\u5f85\u5ba1\u6838', approved: '\u5df2\u901a\u8fc7', completed: '\u5df2\u5b8c\u6210', rejected: '\u5df2\u62d2\u7edd' }
       return map[status] || status
       return map[status] || status
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/DiscountRuleManagement.vue

@@ -157,10 +157,7 @@ export default {
       const map = { PERCENT: 'warning', FIXED: 'success', THRESHOLD: '' }
       const map = { PERCENT: 'warning', FIXED: 'success', THRESHOLD: '' }
       return map[val] || ''
       return map[val] || ''
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return String(t).replace('T', ' ').substring(0, 19)
-    },
+
     getEmptyForm() {
     getEmptyForm() {
       return {
       return {
         id: null,
         id: null,

+ 1 - 4
cfc-web/src/views/admin/EmotionAlertManage.vue

@@ -187,10 +187,7 @@ export default {
       var map = { high: '高', medium: '中', low: '低' }
       var map = { high: '高', medium: '中', low: '低' }
       return map[severity] || severity
       return map[severity] || severity
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/FamilyEarnings.vue

@@ -157,10 +157,7 @@ export default {
       if (isNaN(num)) return '0.00'
       if (isNaN(num)) return '0.00'
       return (num / 100).toFixed(2)
       return (num / 100).toFixed(2)
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : String(t)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/FamilyEarningsWithdraw.vue

@@ -115,10 +115,7 @@ export default {
       if (isNaN(num)) return '0.00'
       if (isNaN(num)) return '0.00'
       return Math.abs(num / 100).toFixed(2)
       return Math.abs(num / 100).toFixed(2)
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : String(t)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 2 - 10
cfc-web/src/views/admin/HealthCheckinManage.vue

@@ -81,16 +81,8 @@ export default {
     this.loadList()
     this.loadList()
   },
   },
   methods: {
   methods: {
-    formatDate(d) {
-      if (!d) return '-'
-      var date = new Date(d)
-      return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0')
-    },
-    formatTime(d) {
-      if (!d) return '-'
-      var date = new Date(d)
-      return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0') + ' ' + date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0')
-    },
+
+
     moodLabel(m) {
     moodLabel(m) {
       var map = { happy: '开心', normal: '平静', sad: '低落', angry: '烦躁', sick: '不适' }
       var map = { happy: '开心', normal: '平静', sad: '低落', angry: '烦躁', sick: '不适' }
       return map[m] || m || '-'
       return map[m] || m || '-'

+ 1 - 4
cfc-web/src/views/admin/HealthPlanManage.vue

@@ -203,10 +203,7 @@ export default {
         this.tasksLoading = false
         this.tasksLoading = false
       }
       }
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace('T', ' ').substring(0, 19)
-    },
+
     statusType(s) {
     statusType(s) {
       const map = { draft: 'info', pending_review: 'warning', published: 'success', rejected: 'danger' }
       const map = { draft: 'info', pending_review: 'warning', published: 'success', rejected: 'danger' }
       return map[s] || 'info'
       return map[s] || 'info'

+ 1 - 3
cfc-web/src/views/admin/HealthReportReassign.vue

@@ -93,9 +93,7 @@ export default {
     this.loadFamilies()
     this.loadFamilies()
   },
   },
   methods: {
   methods: {
-    formatTime(t) {
-      return t ? String(t).replace('T', ' ').substring(0, 19) : '-'
-    },
+
     getMemberName(memberId) {
     getMemberName(memberId) {
       if (!memberId) return '-'
       if (!memberId) return '-'
       var m = this.memberList.find(function(x) { return x.id === memberId })
       var m = this.memberList.find(function(x) { return x.id === memberId })

+ 2 - 20
cfc-web/src/views/admin/HomeBannerManage.vue

@@ -609,26 +609,8 @@ export default {
       }
       }
       this.loadList()
       this.loadList()
     },
     },
-    formatDate(ts) {
-      if (!ts) return '-'
-      var d = new Date(ts)
-      if (isNaN(d.getTime())) return '-'
-      var y = d.getFullYear()
-      var m = String(d.getMonth() + 1).padStart(2, '0')
-      var day = String(d.getDate()).padStart(2, '0')
-      var h = String(d.getHours()).padStart(2, '0')
-      var min = String(d.getMinutes()).padStart(2, '0')
-      var s = String(d.getSeconds()).padStart(2, '0')
-      return y + '-' + m + '-' + day + ' ' + h + ':' + min + ':' + s
-    },
-    formatTime(t) {
-      if (!t) return '-'
-      var ts = t
-      if (typeof t === 'string' && t.indexOf('T') > -1) {
-        ts = new Date(t).getTime()
-      }
-      return this.formatDate(ts)
-    },
+
+
     // 选择小程序页面
     // 选择小程序页面
     selectMiniPage() {
     selectMiniPage() {
       this.$message.info('小程序页面选择功能待后端开发')
       this.$message.info('小程序页面选择功能待后端开发')

+ 1 - 3
cfc-web/src/views/admin/IndicatorCorrelations.vue

@@ -253,9 +253,7 @@ export default {
     defName(id) {
     defName(id) {
       return (this.defMap[id] || '#' + id)
       return (this.defMap[id] || '#' + id)
     },
     },
-    formatTime(t) {
-      return t ? t.replace('T', ' ').substring(0, 19) : '-'
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 3
cfc-web/src/views/admin/IndicatorMappings.vue

@@ -227,9 +227,7 @@ export default {
     defName(id) {
     defName(id) {
       return (this.defMap[id] || '#' + id)
       return (this.defMap[id] || '#' + id)
     },
     },
-    formatTime(t) {
-      return t ? t.replace('T', ' ').substring(0, 19) : '-'
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/MembershipCenter.vue

@@ -574,10 +574,7 @@ export default {
       if (price === null || price === undefined) return '—'
       if (price === null || price === undefined) return '—'
       return (price / 100).toFixed(2)
       return (price / 100).toFixed(2)
     },
     },
-    formatTime(t) {
-      if (!t) return '—'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     levelTagType(code) {
     levelTagType(code) {
       return LEVEL_TAG_TYPE[code] || 'primary'
       return LEVEL_TAG_TYPE[code] || 'primary'
     },
     },

+ 1 - 5
cfc-web/src/views/admin/NoticeManage.vue

@@ -168,11 +168,7 @@ export default {
       var map = { platform: 'warning', activity: 'primary', promotion: 'danger' }
       var map = { platform: 'warning', activity: 'primary', promotion: 'danger' }
       return map[type] || ''
       return map[type] || ''
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      var d = new Date(time)
-      return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0') + ' ' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/OrderDetail.vue

@@ -243,10 +243,7 @@ export default {
       if (cents == null) return '-'
       if (cents == null) return '-'
       return '¥' + (cents / 100).toFixed(2)
       return '¥' + (cents / 100).toFixed(2)
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      return new Date(time).toLocaleString()
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/OrderManage.vue

@@ -405,10 +405,7 @@ export default {
         return snapshot
         return snapshot
       }
       }
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     handleActionCmd(row, cmd) {
     handleActionCmd(row, cmd) {
       switch (cmd) {
       switch (cmd) {
         case 'ship': this.showShipDialog(row); break;
         case 'ship': this.showShipDialog(row); break;

+ 1 - 7
cfc-web/src/views/admin/PendingRefund.vue

@@ -237,13 +237,7 @@ async loadList() {
         }
         }
       }
       }
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      const d = new Date(time)
-      const pad = n => n < 10 ? '0' + n : n
-      return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) +
-        ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds())
-    },
+
     formatPriceWithSymbol(amount) {
     formatPriceWithSymbol(amount) {
       if (amount == null) return '-'
       if (amount == null) return '-'
       return '¥' + (amount / 100).toFixed(2)
       return '¥' + (amount / 100).toFixed(2)

+ 1 - 4
cfc-web/src/views/admin/PointsLog.vue

@@ -167,10 +167,7 @@ export default {
     typeLabel(type) {
     typeLabel(type) {
       return (TYPE_MAP[type] && TYPE_MAP[type].label) || type || '—'
       return (TYPE_MAP[type] && TYPE_MAP[type].label) || type || '—'
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     async loadData() {
     async loadData() {
       this.loading = true
       this.loading = true
       try {
       try {

+ 1 - 4
cfc-web/src/views/admin/ProductManage.vue

@@ -409,10 +409,7 @@ export default {
       const map = { FREE: '免费版', BASIC: '体验版', FAMILY: '家庭版', PROVIDER: '服务商版', PREMIUM: '高级版', LIFETIME: '终身版' }
       const map = { FREE: '免费版', BASIC: '体验版', FAMILY: '家庭版', PROVIDER: '服务商版', PREMIUM: '高级版', LIFETIME: '终身版' }
       return map[code] || code
       return map[code] || code
     },
     },
-    formatTime(t) {
-      if (!t) return '—'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     formatPriceWithSymbol(price) {
     formatPriceWithSymbol(price) {
       if (!price) return '免费'
       if (!price) return '免费'
       const v = (price / 100).toFixed(2)
       const v = (price / 100).toFixed(2)

+ 2 - 7
cfc-web/src/views/admin/ProfileManagement.vue

@@ -37,7 +37,7 @@
         </el-table-column>
         </el-table-column>
         <el-table-column prop="computed_at" label="更新时间" width="160">
         <el-table-column prop="computed_at" label="更新时间" width="160">
           <template slot-scope="{ row }">
           <template slot-scope="{ row }">
-            {{ row.computed_at ? formatDateTime(row.computed_at) : '-' }}
+            {{ row.computed_at ? formatTime(row.computed_at) : '-' }}
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column label="操作" width="120" fixed="right">
         <el-table-column label="操作" width="120" fixed="right">
@@ -179,12 +179,7 @@ export default {
       var m = { sleep: '睡眠', attention: '注意力', emotion: '情绪' }
       var m = { sleep: '睡眠', attention: '注意力', emotion: '情绪' }
       return m[d] || d
       return m[d] || d
     },
     },
-    formatDateTime(dateStr) {
-      if (!dateStr) return '-'
-      var dt = dateStr.toString()
-      if (dt.length >= 19) return dt.substring(0, 19).replace('T', ' ')
-      return dt
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 8 - 18
cfc-web/src/views/admin/PurchaseManagement.vue

@@ -84,13 +84,13 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column prop="startDate" label="开始时间" width="160">
         <el-table-column prop="startDate" label="开始时间" width="160">
-          <template slot-scope="{ row }">{{ formatDateTime(row.startDate) }}</template>
+          <template slot-scope="{ row }">{{ formatTime(row.startDate) }}</template>
           <template slot="header">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('startDate', $event)">开始时间<span v-if="sortIndex('startDate') !== null" class="sort-index" :class="sortClass('startDate') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('startDate') }}</span>{{ sortIcon('startDate') }}</span>
             <span class="sort-header" @click.stop="onSortClick('startDate', $event)">开始时间<span v-if="sortIndex('startDate') !== null" class="sort-index" :class="sortClass('startDate') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('startDate') }}</span>{{ sortIcon('startDate') }}</span>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column prop="endDate" label="结束时间" width="160">
         <el-table-column prop="endDate" label="结束时间" width="160">
-          <template slot-scope="{ row }">{{ formatDateTime(row.endDate) }}</template>
+          <template slot-scope="{ row }">{{ formatTime(row.endDate) }}</template>
           <template slot="header">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('endDate', $event)">结束时间<span v-if="sortIndex('endDate') !== null" class="sort-index" :class="sortClass('endDate') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('endDate') }}</span>{{ sortIcon('endDate') }}</span>
             <span class="sort-header" @click.stop="onSortClick('endDate', $event)">结束时间<span v-if="sortIndex('endDate') !== null" class="sort-index" :class="sortClass('endDate') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('endDate') }}</span>{{ sortIcon('endDate') }}</span>
           </template>
           </template>
@@ -104,7 +104,7 @@
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column prop="createdAt" label="创建时间" width="160">
         <el-table-column prop="createdAt" label="创建时间" width="160">
-          <template slot-scope="{ row }">{{ formatDateTime(row.createdAt) }}</template>
+          <template slot-scope="{ row }">{{ formatTime(row.createdAt) }}</template>
           <template slot="header">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">创建时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>
             <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">创建时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>
           </template>
           </template>
@@ -139,12 +139,12 @@
           <el-tag :type="statusType(currentOrder.status)" size="small">{{ statusText(currentOrder.status) }}</el-tag>
           <el-tag :type="statusType(currentOrder.status)" size="small">{{ statusText(currentOrder.status) }}</el-tag>
         </el-descriptions-item>
         </el-descriptions-item>
         <el-descriptions-item label="支付方式">{{ currentOrder.paymentMethod || '-' }}</el-descriptions-item>
         <el-descriptions-item label="支付方式">{{ currentOrder.paymentMethod || '-' }}</el-descriptions-item>
-        <el-descriptions-item label="开始时间">{{ formatDateTime(currentOrder.startDate) }}</el-descriptions-item>
-        <el-descriptions-item label="结束时间">{{ formatDateTime(currentOrder.endDate) }}</el-descriptions-item>
+        <el-descriptions-item label="开始时间">{{ formatTime(currentOrder.startDate) }}</el-descriptions-item>
+        <el-descriptions-item label="结束时间">{{ formatTime(currentOrder.endDate) }}</el-descriptions-item>
         <el-descriptions-item label="是否早期续费">{{ currentOrder.isEarlyRenewal ? '是' : '否' }}</el-descriptions-item>
         <el-descriptions-item label="是否早期续费">{{ currentOrder.isEarlyRenewal ? '是' : '否' }}</el-descriptions-item>
         <el-descriptions-item label="已发放CF值">{{ currentOrder.cfRewardGiven || 0 }} CF</el-descriptions-item>
         <el-descriptions-item label="已发放CF值">{{ currentOrder.cfRewardGiven || 0 }} CF</el-descriptions-item>
-        <el-descriptions-item label="创建时间">{{ formatDateTime(currentOrder.createdAt) }}</el-descriptions-item>
-        <el-descriptions-item label="支付时间">{{ formatDateTime(currentOrder.paidAt) }}</el-descriptions-item>
+        <el-descriptions-item label="创建时间">{{ formatTime(currentOrder.createdAt) }}</el-descriptions-item>
+        <el-descriptions-item label="支付时间">{{ formatTime(currentOrder.paidAt) }}</el-descriptions-item>
       </el-descriptions>
       </el-descriptions>
     </el-dialog>
     </el-dialog>
   </div>
   </div>
@@ -230,17 +230,7 @@ export default {
       const map = { pending: '待支付', paid: '已支付', cancelled: '已取消' }
       const map = { pending: '待支付', paid: '已支付', cancelled: '已取消' }
       return map[status] || status
       return map[status] || status
     },
     },
-    formatDateTime(dateStr) {
-      if (!dateStr) return '-'
-      const d = new Date(dateStr)
-      if (isNaN(d)) return dateStr.toString().substring(0, 19)
-      return d.getFullYear() + '-' +
-        String(d.getMonth() + 1).padStart(2, '0') + '-' +
-        String(d.getDate()).padStart(2, '0') + ' ' +
-        String(d.getHours()).padStart(2, '0') + ':' +
-        String(d.getMinutes()).padStart(2, '0') + ':' +
-        String(d.getSeconds()).padStart(2, '0')
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/ReportCollectorTrainer.vue

@@ -266,10 +266,7 @@ export default {
       if (!str) return ''
       if (!str) return ''
       try { return JSON.stringify(JSON.parse(str), null, 2) } catch (e) { return str }
       try { return JSON.stringify(JSON.parse(str), null, 2) } catch (e) { return str }
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace('T', ' ').substring(0, 19)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/ReportParseStatus.vue

@@ -138,10 +138,7 @@ export default {
         this.$message.error('重试失败')
         this.$message.error('重试失败')
       }
       }
     },
     },
-    formatTime(t) {
-      if (!t) return '—'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/ReportTemplateManage.vue

@@ -403,10 +403,7 @@ export default {
       }
       }
       return result
       return result
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace('T', ' ').substring(0, 19)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/admin/SubscriptionManagement.vue

@@ -267,10 +267,7 @@ export default {
       if (cents == null) return '-'
       if (cents == null) return '-'
       return '¥' + (cents / 100).toFixed(2)
       return '¥' + (cents / 100).toFixed(2)
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     viewDetail(row) {
     viewDetail(row) {
       this.detail = row
       this.detail = row
       this.detailDialogVisible = true
       this.detailDialogVisible = true

+ 1 - 4
cfc-web/src/views/admin/SupplierProductManage.vue

@@ -198,10 +198,7 @@ export default {
       }
       }
       return map[type] || type
       return map[type] || type
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace ? t.replace('T', ' ').substring(0, 19) : t
-    },
+
     formatPriceWithSymbol(price) {
     formatPriceWithSymbol(price) {
       if (price === 0) return '免费'
       if (price === 0) return '免费'
       return '¥' + (price / 100).toFixed(2)
       return '¥' + (price / 100).toFixed(2)

+ 1 - 1
cfc-web/src/views/admin/SurveyTemplates.vue

@@ -47,7 +47,7 @@
         </el-table-column>
         </el-table-column>
         <el-table-column prop="createdAt" label="创建时间" width="160">
         <el-table-column prop="createdAt" label="创建时间" width="160">
           <template slot-scope="scope">
           <template slot-scope="scope">
-            {{ scope.row.createdAt && scope.row.createdAt.substring(0, 10) }}
+            {{ scope.row.createdAt && formatDate(scope.row.createdAt) }}
           </template>
           </template>
           <template slot="header">
           <template slot="header">
             <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">创建时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>
             <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">创建时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>

+ 1 - 5
cfc-web/src/views/admin/SystemPromptManagement.vue

@@ -156,11 +156,7 @@ export default {
     this.fetchList()
     this.fetchList()
   },
   },
   methods: {
   methods: {
-    formatTime(ts) {
-      if (!ts) return ""
-      const d = new Date(ts)
-      return d.toLocaleString("zh-CN", { hour12: false })
-    },
+
     async fetchList() {
     async fetchList() {
       this.loading = true
       this.loading = true
       try {
       try {

+ 1 - 4
cfc-web/src/views/admin/VirtualTeamList.vue

@@ -179,10 +179,7 @@ export default {
     getEmptyForm() {
     getEmptyForm() {
       return { id: null, name: '', description: '', profitRate: 0 }
       return { id: null, name: '', description: '', profitRate: 0 }
     },
     },
-    formatDate(val) {
-      if (!val) return '-'
-      return val.replace('T', ' ').substring(0, 19)
-    },
+
     handleSearch() {
     handleSearch() {
       this.loadData()
       this.loadData()
     },
     },

+ 1 - 4
cfc-web/src/views/admin/data-source-config.vue

@@ -174,10 +174,7 @@ export default {
         confidence: null
         confidence: null
       }
       }
     },
     },
-    formatDate(d) {
-      if (!d) return '-'
-      return new Date(d).toLocaleString()
-    },
+
     fetchRecords() {
     fetchRecords() {
       this.loading = true
       this.loading = true
       var params = { page: this.page, size: this.size, keyword: this.keyword || undefined }
       var params = { page: this.page, size: this.size, keyword: this.keyword || undefined }

+ 1 - 7
cfc-web/src/views/admin/review/PendingRefundAudit.vue

@@ -212,13 +212,7 @@ export default {
         }
         }
       }
       }
     },
     },
-    formatTime(time) {
-      if (!time) return '-'
-      const d = new Date(time)
-      const pad = n => n < 10 ? '0' + n : n
-      return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) +
-        ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds())
-    },
+
     formatPriceWithSymbol(amount) {
     formatPriceWithSymbol(amount) {
       if (amount == null) return '-'
       if (amount == null) return '-'
       return '¥' + (amount / 100).toFixed(2)
       return '¥' + (amount / 100).toFixed(2)

+ 1 - 4
cfc-web/src/views/orchestration/ExecutionDetail.vue

@@ -169,10 +169,7 @@ export default {
       const map = { manual: '手动', cron: '定时', callback: '回调' }
       const map = { manual: '手动', cron: '定时', callback: '回调' }
       return map[s] || s
       return map[s] || s
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace('T', ' ').substring(0, 19)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/orchestration/OrchestrationFlow.vue

@@ -193,10 +193,7 @@ export default {
       const map = { draft: '草稿', published: '已发布', archived: '已归档' }
       const map = { draft: '草稿', published: '已发布', archived: '已归档' }
       return map[s] || s
       return map[s] || s
     },
     },
-    formatTime(t) {
-      if (!t) return '-'
-      return t.replace('T', ' ').substring(0, 19)
-    }
+
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 4
cfc-web/src/views/teacher/TeacherAssessment.vue

@@ -185,10 +185,7 @@ export default {
         case 'disable': this.disableFamily(row.familyId); break
         case 'disable': this.disableFamily(row.familyId); break
       }
       }
     },
     },
-    formatDate(dateStr) {
-      if (!dateStr) return '-'
-      return new Date(dateStr).toLocaleDateString()
-    },
+
     enableFamily(familyId) {
     enableFamily(familyId) {
       this.enableForm.familyId = familyId
       this.enableForm.familyId = familyId
       this.enableForm.remindMonths = 12
       this.enableForm.remindMonths = 12