PotentialUserList.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <script setup>
  2. import { Search } from '@element-plus/icons-vue'
  3. import { apiCustomerUser } from '@/api/customer'
  4. import { useRouter } from 'vue-router'
  5. import { ElMessage, ElMessageBox } from 'element-plus'
  6. import EnableUser from './components/EnableUser.vue'
  7. const router = useRouter()
  8. const filterState = reactive({
  9. regsiterTime: [],
  10. readTime: [],
  11. sortType:'',
  12. sortVal:''
  13. })
  14. const tableColOpt = [
  15. {
  16. label: '手机号',
  17. key: 'Phone'
  18. },
  19. {
  20. label: '邮箱',
  21. key: 'Email'
  22. },
  23. {
  24. label: '注册时间',
  25. key: 'RegisterTime',
  26. sort: true
  27. },
  28. {
  29. label: '最近一次阅读时间',
  30. key: 'LastUpdateTime',
  31. sort: true
  32. },
  33. {
  34. label: '累计阅读次数',
  35. key: 'ReadCnt',
  36. sort: true,
  37. },
  38. ]
  39. const userList = ref([])
  40. const page = ref(1)
  41. const pageSize = ref(10)
  42. const tableLoading = ref(false)
  43. const totals = ref(0)
  44. async function getUserList() {
  45. tableLoading.value = true
  46. const res = await apiCustomerUser.potentialUserList({
  47. PageSize: pageSize.value,
  48. CurrentIndex: page.value,
  49. KeyWord: filterState.keyword,
  50. RegisterStartDate: filterState.regsiterTime ? filterState.regsiterTime[0] : '',
  51. RegisterEndDate: filterState.regsiterTime ? filterState.regsiterTime[1] : '',
  52. SortParam:filterState.sortType,
  53. SortType:filterState.sortVal
  54. })
  55. tableLoading.value = false
  56. if (res.Ret === 200) {
  57. userList.value = res.Data.List || []
  58. totals.value = res.Data.Paging.Totals
  59. }
  60. }
  61. getUserList()
  62. function handlePageChange(e) {
  63. page.value = e
  64. getUserList()
  65. }
  66. function handleTableSort(e) {
  67. // console.log(e);
  68. const { order, prop } = e//order:"descending",prop: "RegisterTime"
  69. filterState.sortType=prop
  70. if(!order){
  71. filterState.sortVal=''
  72. }else{
  73. filterState.sortVal=order==='descending'?'desc':'asc'
  74. }
  75. handleFilterList()
  76. }
  77. function handleFilterList() {
  78. page.value = 1
  79. getUserList()
  80. }
  81. function handleEditUser(e) {
  82. router.push({
  83. path: '/customer/userTransform',
  84. query: {
  85. id: e.UserId
  86. }
  87. })
  88. }
  89. </script>
  90. <template>
  91. <div class="potential-user-list-page">
  92. <div class="flex filter-wrap">
  93. <div style="width: 235px">
  94. <el-date-picker
  95. style="width: 235px"
  96. v-model="filterState.regsiterTime"
  97. type="daterange"
  98. range-separator="至"
  99. start-placeholder="注册时间"
  100. end-placeholder="注册时间"
  101. value-format="YYYY-MM-DD"
  102. @change="handleFilterList"
  103. />
  104. </div>
  105. <div style="width: 235px">
  106. <el-date-picker
  107. style="width: 235px"
  108. v-model="filterState.readTime"
  109. type="daterange"
  110. range-separator="至"
  111. start-placeholder="最近一次阅读时间"
  112. end-placeholder="最近一次阅读时间"
  113. value-format="YYYY-MM-DD"
  114. @change="handleFilterList"
  115. />
  116. </div>
  117. <el-input
  118. placeholder="姓名/手机号/邮箱"
  119. v-model="filterState.keyword"
  120. :prefix-icon="Search"
  121. clearable
  122. style="max-width: 359px;margin-left:auto"
  123. @input="handleFilterList"
  124. />
  125. </div>
  126. <div class="userlist-wrap" style="margin-top: 20px">
  127. <el-table
  128. :data="userList"
  129. border
  130. highlight-current-row
  131. element-loading-text="数据加载中..."
  132. v-loading="tableLoading"
  133. @sort-change="handleTableSort"
  134. >
  135. <el-table-column
  136. v-for="column in tableColOpt"
  137. :key="column.key"
  138. :prop="column.key"
  139. :label="column.label"
  140. align="center"
  141. :sortable="column.sort ? 'custom' : false"
  142. >
  143. <template v-if="column.headerTips" #header>
  144. <span>{{ column.label }}</span>
  145. <el-tooltip
  146. class="box-item"
  147. effect="dark"
  148. :content="column.headerTips"
  149. placement="top"
  150. >
  151. <el-icon style="position: relative; top: 2px"
  152. ><i-ep-QuestionFilled
  153. /></el-icon>
  154. </el-tooltip>
  155. </template>
  156. <template #default="{ row }">
  157. <span
  158. v-if="column.key === 'Status'"
  159. :style="{ color: !row.Status ? '#f00' : '' }"
  160. >{{ row.Status ? "启用" : "禁用" }}</span
  161. >
  162. <span v-else>{{ row[column.key] }}</span>
  163. </template>
  164. </el-table-column>
  165. <el-table-column label="操作" align="center" width="200">
  166. <template #default="{ row }">
  167. <el-button type="primary" link @click="handleEditUser(row)"
  168. >转客户</el-button
  169. >
  170. </template>
  171. </el-table-column>
  172. </el-table>
  173. <el-pagination
  174. background
  175. layout="total,prev,pager,next,jumper"
  176. :current-page="page"
  177. :page-size="pageSize"
  178. :total="totals"
  179. @current-change="handlePageChange"
  180. style="margin-top: 30px; justify-content: flex-end"
  181. />
  182. </div>
  183. </div>
  184. </template>
  185. <style lang="scss" scoped>
  186. .potential-user-list-page {
  187. width: 100%;
  188. overflow: hidden;
  189. .filter-wrap {
  190. flex-wrap: wrap;
  191. gap: 10px;
  192. }
  193. }
  194. </style>