BrokerageOrderListDialog.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <template>
  2. <Dialog v-model="dialogVisible" title="推广人列表" width="75%">
  3. <ContentWrap>
  4. <!-- 搜索工作栏 -->
  5. <el-form
  6. class="-mb-15px"
  7. :model="queryParams"
  8. ref="queryFormRef"
  9. :inline="true"
  10. label-width="85px"
  11. >
  12. <el-form-item label="用户类型" prop="level">
  13. <el-radio-group v-model="queryParams.level" @change="handleQuery">
  14. <el-radio-button checked>全部</el-radio-button>
  15. <el-radio-button label="1">一级推广人</el-radio-button>
  16. <el-radio-button label="2">二级推广人</el-radio-button>
  17. </el-radio-group>
  18. </el-form-item>
  19. <el-form-item label="状态" prop="status">
  20. <el-select
  21. v-model="queryParams.status"
  22. placeholder="请选择状态"
  23. clearable
  24. class="!w-240px"
  25. >
  26. <el-option
  27. v-for="dict in getIntDictOptions(DICT_TYPE.BROKERAGE_RECORD_STATUS)"
  28. :key="dict.value"
  29. :label="dict.label"
  30. :value="dict.value"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="绑定时间" prop="createTime">
  35. <el-date-picker
  36. v-model="queryParams.createTime"
  37. value-format="YYYY-MM-DD HH:mm:ss"
  38. type="daterange"
  39. start-placeholder="开始日期"
  40. end-placeholder="结束日期"
  41. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  42. class="!w-240px"
  43. />
  44. </el-form-item>
  45. <el-form-item>
  46. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  47. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  48. </el-form-item>
  49. </el-form>
  50. </ContentWrap>
  51. <!-- 列表 -->
  52. <ContentWrap>
  53. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  54. <el-table-column label="订单编号" align="center" prop="bizId" min-width="80px" />
  55. <el-table-column label="用户编号" align="center" prop="sourceUserId" min-width="80px" />
  56. <el-table-column label="头像" align="center" prop="sourceUserAvatar" width="70px">
  57. <template #default="scope">
  58. <el-avatar :src="scope.row.sourceUserAvatar" />
  59. </template>
  60. </el-table-column>
  61. <el-table-column label="昵称" align="center" prop="sourceUserNickname" min-width="80px" />
  62. <el-table-column
  63. label="佣金"
  64. align="center"
  65. prop="price"
  66. min-width="100px"
  67. :formatter="fenToYuanFormat"
  68. />
  69. <el-table-column label="状态" align="center" prop="status" min-width="85">
  70. <template #default="scope">
  71. <dict-tag :type="DICT_TYPE.BROKERAGE_RECORD_STATUS" :value="scope.row.status" />
  72. </template>
  73. </el-table-column>
  74. <el-table-column
  75. label="创建时间"
  76. align="center"
  77. prop="createTime"
  78. :formatter="dateFormatter"
  79. width="180px"
  80. />
  81. </el-table>
  82. <!-- 分页 -->
  83. <Pagination
  84. :total="total"
  85. v-model:page="queryParams.pageNo"
  86. v-model:limit="queryParams.pageSize"
  87. @pagination="getList"
  88. />
  89. </ContentWrap>
  90. </Dialog>
  91. </template>
  92. <script setup lang="ts">
  93. import { dateFormatter } from '@/utils/formatTime'
  94. import * as BrokerageRecordApi from '@/api/mall/trade/brokerage/record'
  95. import { BrokerageRecordBizTypeEnum } from '@/utils/constants'
  96. import { fenToYuanFormat } from '@/utils/formatter'
  97. import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  98. /** 推广订单列表 */
  99. defineOptions({ name: 'BrokerageOrderListDialog' })
  100. const message = useMessage() // 消息弹窗
  101. const loading = ref(true) // 列表的加载中
  102. const total = ref(0) // 列表的总页数
  103. const list = ref([]) // 列表的数据
  104. const queryParams = reactive({
  105. pageNo: 1,
  106. pageSize: 10,
  107. userId: null,
  108. bizType: BrokerageRecordBizTypeEnum.ORDER.type,
  109. level: '',
  110. createTime: [],
  111. status: null
  112. })
  113. const queryFormRef = ref() // 搜索的表单
  114. /** 打开弹窗 */
  115. const dialogVisible = ref(false) // 弹窗的是否展示
  116. const open = async (userId: any) => {
  117. dialogVisible.value = true
  118. queryParams.userId = userId
  119. resetQuery()
  120. }
  121. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  122. /** 查询列表 */
  123. const getList = async () => {
  124. loading.value = true
  125. try {
  126. const data = await BrokerageRecordApi.getBrokerageRecordPage(queryParams)
  127. list.value = data.list
  128. total.value = data.total
  129. } finally {
  130. loading.value = false
  131. }
  132. }
  133. /** 搜索按钮操作 */
  134. const handleQuery = () => {
  135. queryParams.pageNo = 1
  136. getList()
  137. }
  138. /** 重置按钮操作 */
  139. const resetQuery = () => {
  140. queryFormRef.value?.resetFields()
  141. handleQuery()
  142. }
  143. </script>