index.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <script setup lang="ts">
  2. import { ref, onMounted } from 'vue'
  3. // 模拟日志数据
  4. interface LogItem {
  5. id: number
  6. content: string
  7. imageUrl?: string
  8. date: string
  9. status: '已处理' | '处理中' | '待处理'
  10. level: 'info' | 'warning' | 'error'
  11. }
  12. const logList = ref<LogItem[]>([
  13. {
  14. id: 1,
  15. content: '系统运行正常,未发现异常情况。',
  16. imageUrl: '',
  17. date: '2025-10-28 14:30',
  18. status: '已处理',
  19. level: 'info'
  20. },
  21. {
  22. id: 2,
  23. content: '警告:内存使用率超过80%,请注意监控。',
  24. imageUrl: '/static/plus.png',
  25. date: '2025-10-29 09:15',
  26. status: '处理中',
  27. level: 'warning'
  28. },
  29. {
  30. id: 3,
  31. content: '严重错误:数据库连接失败,导致部分功能不可用。',
  32. imageUrl: '',
  33. date: '2025-10-29 15:42',
  34. status: '待处理',
  35. level: 'error'
  36. }
  37. ])
  38. // 返回上一页
  39. const goBack = () => {
  40. uni.navigateBack()
  41. }
  42. // 页面加载时获取数据
  43. onMounted(() => {
  44. // 这里可以调用 API 获取实际数据
  45. })
  46. // 下拉刷新
  47. const onPullDownRefresh = () => {
  48. // 模拟刷新数据
  49. setTimeout(() => {
  50. uni.stopPullDownRefresh()
  51. // 模拟更新数据
  52. logList.value.unshift({
  53. id: logList.value.length + 1,
  54. content: '新上报的日志信息,需要及时处理。',
  55. imageUrl: '',
  56. date: new Date().toLocaleString('zh-CN', {
  57. year: 'numeric',
  58. month: '2-digit',
  59. day: '2-digit',
  60. hour: '2-digit',
  61. minute: '2-digit'
  62. }).replace(/\//g, '-'),
  63. status: '待处理',
  64. level: 'info'
  65. })
  66. }, 1000)
  67. }
  68. // 跳转到详情页
  69. const goToDetail = (id: number) => {
  70. uni.navigateTo({
  71. url: `/pages/log-report/list/detail/index?id=${id}`
  72. })
  73. }
  74. // 触发下拉刷新的方法(用于测试)
  75. const triggerRefresh = () => {
  76. onPullDownRefresh()
  77. }
  78. </script>
  79. <template>
  80. <view class="bg-gray-50 min-h-screen">
  81. <!-- 列表内容 -->
  82. <view class="p-3">
  83. <view
  84. v-for="item in logList"
  85. :key="item.id"
  86. class="bg-white rounded-lg shadow-sm mb-4 p-4"
  87. @click="goToDetail(item.id)"
  88. >
  89. <view class="flex justify-between items-start mb-2">
  90. <text class="text-gray-900 font-medium">日志 #{{ item.id }}</text>
  91. <text class="text-xs px-2 py-1 rounded" :class="{
  92. 'bg-green-100 text-green-800': item.status === '已处理',
  93. 'bg-yellow-100 text-yellow-800': item.status === '处理中',
  94. 'bg-red-100 text-red-800': item.status === '待处理'
  95. }">{{ item.status }}</text>
  96. </view>
  97. <view class="text-gray-700 text-sm mb-3 flex items-start">
  98. <text class="mr-2 mt-0.5" :class="{
  99. 'text-blue-500': item.level === 'info',
  100. 'text-yellow-500': item.level === 'warning',
  101. 'text-red-500': item.level === 'error'
  102. }">●</text>
  103. <text>{{ item.content }}</text>
  104. </view>
  105. <view v-if="item.imageUrl" class="mb-3">
  106. <image
  107. :src="item.imageUrl"
  108. class="w-24 h-24 rounded object-cover"
  109. mode="aspectFill"
  110. />
  111. </view>
  112. <view class="text-xs text-gray-500">
  113. {{ item.date }}
  114. </view>
  115. </view>
  116. <view v-if="logList.length === 0" class="text-center py-10 text-gray-500">
  117. 暂无日志记录
  118. </view>
  119. </view>
  120. </view>
  121. </template>
  122. <style scoped>
  123. </style>