user.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div>
  3. <el-card class="!border-none" shadow="never">
  4. <el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
  5. <el-form-item label="手机号">
  6. <el-input
  7. class="w-[280px]"
  8. v-model="queryParams.mobile"
  9. placeholder="模糊匹配"
  10. clearable
  11. @keyup.enter="resetPage"
  12. />
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button type="primary" @click="resetPage">查询</el-button>
  16. <el-button @click="resetParams">重置</el-button>
  17. </el-form-item>
  18. </el-form>
  19. </el-card>
  20. <el-card class="!border-none mt-4" shadow="never" v-loading="pager.loading">
  21. <el-table class="mt-4" size="large" :data="pager.lists">
  22. <el-table-column type="index" width="55"/>
  23. <el-table-column label="用户id" prop="userId" min-width="120" show-tooltip-when-overflow/>
  24. <el-table-column label="手机号" prop="userMobile" min-width="120" show-tooltip-when-overflow/>
  25. <el-table-column label="会员名称" prop="membershipName" min-width="80"/>
  26. <el-table-column label="会员编号" prop="membershipNo" min-width="100"/>
  27. <el-table-column label="账户余额(元)" prop="accountAmount" align="right" min-width="100">
  28. <template #default="scope">
  29. <span style="font-weight: bolder;color:#F56C6C">{{ formatAmount(scope.row.accountAmount) }}</span>
  30. </template>
  31. </el-table-column>
  32. <el-table-column label="入会时间" prop="time" min-width="120"/>
  33. <el-table-column label="操作" min-width="180" fixed="right">
  34. <template #default="{ row }">
  35. <el-button type="primary" link @click="showChargeConsumeRecord(row)">余额变动记录</el-button>
  36. </template>
  37. </el-table-column>
  38. </el-table>
  39. <div class="flex justify-end mt-4">
  40. <pagination v-model="pager" @change="getLists"/>
  41. </div>
  42. </el-card>
  43. </div>
  44. <ChargeConsumeRecord @init="init()" ref="chargeConsumeRecordRef"></ChargeConsumeRecord>
  45. </template>
  46. <script lang="ts" setup>
  47. import { useElabPaging } from '@/hooks/useElabPaging'
  48. import feedback from '@/utils/feedback'
  49. import {queryMemberUser} from "@/api/membership";
  50. import ChargeConsumeRecord from './chargeConsumeRecord.vue'
  51. const router = useRouter()
  52. const chargeConsumeRecordRef = ref<InstanceType<typeof ChargeConsumeRecord>>()
  53. const queryParams = reactive({
  54. mobile: ''
  55. })
  56. const { pager, getLists, resetPage, resetParams } = useElabPaging({
  57. fetchFun: queryMemberUser,
  58. params: queryParams
  59. })
  60. const editRef = shallowRef<InstanceType<typeof EditPopup>>()
  61. const showEdit = ref(false)
  62. // 示例:添加千分位分隔符并保留两位小数
  63. const formatAmount = (amount: string) => {
  64. return Number(amount).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  65. }
  66. const handleAdd = async () => {
  67. showEdit.value = true
  68. await nextTick()
  69. editRef.value?.open('add')
  70. }
  71. const handleEdit = async (data: any) => {
  72. showEdit.value = true
  73. await nextTick()
  74. editRef.value?.open('edit')
  75. editRef.value?.getDetail(data)
  76. }
  77. const useMethodFormatter = (row: any) => {
  78. return row.useMethod == 0 ? '仅展示': ''
  79. }
  80. const volumeFormatter = (row: any) => {
  81. if (row.volume == 0) {
  82. return '大'
  83. } else if (row.volume == 1) {
  84. return '中'
  85. } else if (row.volume == 2) {
  86. return '小'
  87. } else if (row.volume == 3) {
  88. return '关闭'
  89. } else {
  90. return '大'
  91. }
  92. }
  93. const handleDelete = async (id: number) => {
  94. await feedback.confirm('确定要删除?')
  95. // await articleCateDelete({id})
  96. await delPrinter({id})
  97. feedback.msgSuccess('删除成功')
  98. getLists()
  99. }
  100. const changeStatus = async (id: number, status: any) => {
  101. try {
  102. await editPrinter({id, status})
  103. feedback.msgSuccess('修改成功')
  104. getLists()
  105. } catch (error) {
  106. getLists()
  107. }
  108. }
  109. const showChargeConsumeRecord = async (row: any) => {
  110. chargeConsumeRecordRef.value?.open(row)
  111. }
  112. getLists()
  113. </script>