index.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import Pagination from '@/components/pagination'
  2. import { NDataTable } from 'naive-ui'
  3. import { defineComponent, onMounted, reactive } from 'vue'
  4. import { sysSuggestionPage } from '../api'
  5. import { filterClientType, filterSuggestionType } from '@/utils/filters'
  6. import TheTooltip from '@/components/TheTooltip'
  7. export default defineComponent({
  8. name: 'subsidy-list',
  9. setup() {
  10. const state = reactive({
  11. loading: false,
  12. pagination: {
  13. page: 1,
  14. rows: 10,
  15. pageTotal: 0
  16. },
  17. searchForm: {
  18. keyword: null,
  19. status: null
  20. },
  21. dataList: [] as any
  22. })
  23. const columns = () => {
  24. return [
  25. {
  26. title: '建议类型',
  27. key: 'type',
  28. width: 100,
  29. render(row: any) {
  30. return filterSuggestionType(row.type)
  31. }
  32. },
  33. {
  34. title: '学校名称',
  35. key: 'schoolName',
  36. render(row: any) {
  37. return <TheTooltip content={row.schoolName} />
  38. }
  39. },
  40. {
  41. title: '反馈时间',
  42. key: 'createTime'
  43. },
  44. {
  45. title: '内容',
  46. key: 'content',
  47. render(row: any) {
  48. return <TheTooltip content={row.content} />
  49. }
  50. },
  51. {
  52. title: '用户',
  53. key: 'nickname'
  54. },
  55. {
  56. title: '手机号',
  57. key: 'mobileNo'
  58. },
  59. {
  60. title: '客户端',
  61. key: 'clientType',
  62. render(row: any) {
  63. return filterClientType(row.clientType)
  64. }
  65. },
  66. {
  67. title: '设备号',
  68. key: 'userAgent',
  69. width: '300'
  70. }
  71. ]
  72. }
  73. const getList = async () => {
  74. try {
  75. state.loading = true
  76. const { data } = await sysSuggestionPage({ ...state.pagination, ...state.searchForm })
  77. state.loading = false
  78. state.pagination.pageTotal = Number(data.total)
  79. state.dataList = data.rows || []
  80. } catch {
  81. state.loading = false
  82. }
  83. }
  84. onMounted(() => {
  85. getList()
  86. })
  87. return () => (
  88. <div class="system-menu-container">
  89. <h2>意见反馈</h2>
  90. <div class={['section-container']}>
  91. <NDataTable
  92. loading={state.loading}
  93. columns={columns()}
  94. data={state.dataList}
  95. ></NDataTable>
  96. <Pagination
  97. v-model:page={state.pagination.page}
  98. v-model:pageSize={state.pagination.rows}
  99. v-model:pageTotal={state.pagination.pageTotal}
  100. onList={getList}
  101. sync
  102. ></Pagination>
  103. </div>
  104. </div>
  105. )
  106. }
  107. })