index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryForm" inline size="small">
  4. <el-form-item label="标题">
  5. <el-input v-model="queryForm.title" placeholder="标题" />
  6. </el-form-item>
  7. <el-form-item label="投诉类型">
  8. <el-input v-model="queryForm.category" placeholder="投诉类型" />
  9. </el-form-item>
  10. <el-form-item label="渠道">
  11. <el-input v-model="queryForm.channel" placeholder="渠道" />
  12. </el-form-item>
  13. <el-form-item label="处理状态">
  14. <el-select v-model="queryForm.state" clearable placeholder="处理状态">
  15. <el-option label="待处理" value="PENDING" />
  16. <el-option label="已处理" value="PROCESSED" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="投诉时间">
  20. <el-date-picker
  21. v-model="queryForm.createdTime"
  22. type="daterange"
  23. range-separator="至"
  24. start-placeholder="开始日期"
  25. end-placeholder="结束日期"
  26. value-format="yyyy-MM-dd"
  27. />
  28. </el-form-item>
  29. <el-form-item label="处理时间">
  30. <el-date-picker
  31. v-model="queryForm.processedTime"
  32. type="daterange"
  33. range-separator="至"
  34. start-placeholder="开始日期"
  35. end-placeholder="结束日期"
  36. value-format="yyyy-MM-dd"
  37. />
  38. </el-form-item>
  39. </el-form>
  40. <el-row class="action-bar-container" type="flex" justify="end">
  41. <el-button type="primary" size="small" @click.native="fetchData">查询</el-button>
  42. <el-button-group>
  43. <el-button v-permission="['complaint.add']" size="small" @click.native="$refs.dialogForm.open({})">
  44. 新建
  45. </el-button>
  46. <el-button v-permission="['complaint.delete']" size="small" @click.native="deleteByIds(multipleSelection)">
  47. 删除
  48. </el-button>
  49. </el-button-group>
  50. </el-row>
  51. <el-table
  52. v-loading="isLoading"
  53. :data="pageData.records"
  54. border
  55. fit
  56. highlight-current-row
  57. @selection-change="selectionChange"
  58. >
  59. <el-table-column type="selection" width="55" />
  60. <el-table-column label="ID" prop="id" width="120" />
  61. <el-table-column label="标题" prop="title" />
  62. <el-table-column label="类型" prop="category" />
  63. <el-table-column label="渠道" prop="channel" />
  64. <el-table-column label="内容" prop="content" />
  65. <el-table-column label="处理结果" prop="state.text" />
  66. <el-table-column label="投诉时间" prop="createdTime" :formatter="dateTimeFormatter" />
  67. <el-table-column label="处理时间" prop="processedTime" :formatter="dateTimeFormatter" />
  68. <el-table-column label="操作" width="70" fixed="right">
  69. <template slot-scope="scope">
  70. <el-dropdown>
  71. <el-button type="text">
  72. 操作<i class="el-icon-arrow-down el-icon--right" />
  73. </el-button>
  74. <el-dropdown-menu slot="dropdown">
  75. <el-dropdown-item v-permission="['complaint.edit']" type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-dropdown-item>
  76. <el-dropdown-item v-permission="['complaint.process']" @click.native="setProcessedByIds([scope.row.id])"> 设为已处理</el-dropdown-item>
  77. </el-dropdown-menu>
  78. </el-dropdown>
  79. </template>
  80. </el-table-column>
  81. </el-table>
  82. <el-pagination
  83. class="pagination-container"
  84. background
  85. layout="prev, pager, next"
  86. :total="pageData.total"
  87. :page-size="pageData.pageSize"
  88. @current-change="paginationChange"
  89. />
  90. <dialog-form ref="dialogForm" @ok="fetchData" />
  91. </div>
  92. </template>
  93. <script>
  94. import DialogForm from './DialogForm'
  95. import { findPage, deleteByIds, processedByIds } from '@/api/statistics/complaint'
  96. import { dateTimeFormatter } from '@/utils/formater'
  97. export default {
  98. name: 'StatisticsComplaint',
  99. components: { DialogForm },
  100. data() {
  101. return {
  102. queryForm: {},
  103. isLoading: true,
  104. pageData: {},
  105. currentPage: 1,
  106. multipleSelection: []
  107. }
  108. },
  109. computed: {},
  110. created() {
  111. },
  112. mounted() {
  113. this.fetchData()
  114. },
  115. methods: {
  116. dateTimeFormatter,
  117. deleteByIds(ids) {
  118. this.$confirm('确认要删除吗?', '提示', {
  119. confirmButtonText: '确定',
  120. cancelButtonText: '取消',
  121. type: 'warning'
  122. }).then(() => {
  123. deleteByIds(ids).then(() => {
  124. this.fetchData()
  125. })
  126. })
  127. },
  128. setProcessedByIds(ids) {
  129. this.$confirm('确认要设为已处理吗?', '提示', {
  130. confirmButtonText: '确定',
  131. cancelButtonText: '取消',
  132. type: 'warning'
  133. }).then(() => {
  134. processedByIds(ids).then(() => {
  135. this.fetchData()
  136. })
  137. })
  138. },
  139. selectionChange(val) {
  140. const temp = []
  141. val.forEach(o => {
  142. temp.push(o.id)
  143. })
  144. this.multipleSelection = temp
  145. },
  146. paginationChange(val) {
  147. this.currentPage = val
  148. this.fetchData()
  149. },
  150. fetchData() {
  151. this.isLoading = true
  152. findPage({ ...this.queryForm, current: this.currentPage })
  153. .then((response) => {
  154. this.pageData = response
  155. })
  156. .finally(() => (this.isLoading = false))
  157. }
  158. }
  159. }
  160. </script>