reporting_list.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <div class="mainTitle">
  3. 文章列表
  4. </div>
  5. <br />
  6. <div class="lists">
  7. <!-- @click="() => toDetail(item)" -->
  8. <el-table :data="listTable" style="width: 100%">
  9. <el-table-column prop="title" label="标题" width="450px" />
  10. <el-table-column prop="phone" label="用户名" />
  11. <el-table-column prop="source" label="来源">
  12. <template #default="scope">
  13. {{source[scope.row.source - 1]}}
  14. </template>
  15. </el-table-column>
  16. <el-table-column prop="" label="回复状态" >
  17. <template #default="scope">
  18. {{replyFlag[scope.row.replyFlag]}}
  19. </template>
  20. </el-table-column>
  21. <el-table-column prop="createTime" label="更新时间" >
  22. <template #default="scope">
  23. {{format(scope.row.createTime)}}
  24. </template>
  25. </el-table-column>
  26. <el-table-column prop="modifyTime" label="推送时间" >
  27. <template #default="scope">
  28. {{format(scope.row.modifyTime)}}
  29. </template>
  30. </el-table-column>
  31. <el-table-column prop="" label="报料类型" />
  32. <el-table-column prop="clueInfoCount" label="数量" />
  33. <el-table-column prop="" label="操作" />
  34. </el-table>
  35. </div>
  36. </template>
  37. <script setup>
  38. import { ref, defineExpose } from 'vue';
  39. // import { useRouter } from 'vue-router';
  40. import dayjs from "dayjs";
  41. import { getreporting } from '../../../api/index';
  42. let T = undefined;
  43. let total = -1;
  44. // const router = useRouter();
  45. const listTable = ref([]);
  46. const source = ['热线电话','微信公众号','app', '小程序'];
  47. const replyFlag = ['未回复', '已回复'];
  48. const format = value => {
  49. return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
  50. }
  51. // const toDetail = item => {
  52. // router.push({
  53. // path: '/analysis_detail',
  54. // query: {
  55. // detail: JSON.stringify(item),
  56. // },
  57. // });
  58. // };
  59. const getlist = search => {
  60. if (search.page === 1) {
  61. listTable.value = [];
  62. total = -1;
  63. } else if ((search.page - 1) * search.pageSize >= total) return;
  64. if (T) T = window.clearTimeout(T);
  65. T = window.setTimeout(() => {
  66. getreporting({
  67. data: search,
  68. })
  69. .then(res => {
  70. const li = res.records || [];
  71. listTable.value.push(...li);
  72. total = res.total || 0;
  73. if (T) T = window.clearTimeout(T);
  74. })
  75. .catch(() => {
  76. if (T) T = window.clearTimeout(T);
  77. });
  78. }, 200);
  79. };
  80. defineExpose({
  81. getlist,
  82. });
  83. </script>
  84. <style scoped>
  85. .mainTitle {
  86. padding: 0 20px;
  87. position: relative;
  88. line-height: 60px;
  89. border-bottom: 1px solid #f5f5f5;
  90. }
  91. .lists {
  92. padding: 0.5em;
  93. }
  94. .list {
  95. border-radius: 5px;
  96. padding: 0.5em;
  97. cursor: pointer;
  98. line-height: 1.8em;
  99. font-size: 16px;
  100. }
  101. .list:hover {
  102. background-color: rgba(64, 158, 255, 0.1);
  103. }
  104. .list:not(:last-child) {
  105. border-bottom: 1px dashed #b9c0d3;
  106. }
  107. </style>