Ver Fonte

余额明细

wuyi há 1 ano atrás
pai
commit
61fca3596d
4 ficheiros alterados com 110 adições e 2 exclusões
  1. 8 0
      src/router/index.js
  2. 88 0
      src/views/BalanceView.vue
  3. 8 0
      src/views/MainView.vue
  4. 6 2
      src/views/TaskView.vue

+ 8 - 0
src/router/index.js

@@ -94,6 +94,14 @@ const router = createRouter({
                     meta: {
                         title: 'RCS号码'
                     }
+                },
+                {
+                    path: '/balance',
+                    name: 'balance',
+                    component: () => import('../views/BalanceView.vue'),
+                    meta: {
+                        title: '余额明细'
+                    }
                 }
             ]
         }

+ 88 - 0
src/views/BalanceView.vue

@@ -0,0 +1,88 @@
+<template>
+    <PagingTable url="/balance/records" :where="where" ref="table">
+        <template #filter>
+            <ElButton :icon="Refresh" @click="table.refresh()"></ElButton>
+            <ElSelect v-if="isAdmin" v-model="selectUserId" placeholder="请选择用户" clearable
+                      @change="updateWhereAndRefresh">
+                <ElOption v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" />
+            </ElSelect>
+            <ElSelect v-if="isAdmin" v-model="selectType" placeholder="请选择类型" clearable
+                      @change="updateWhereAndRefresh">
+                <ElOption v-for="item in typeList" :key="item.status" :label="item.label" :value="item.status" />
+            </ElSelect>
+        </template>
+        <ElTableColumn v-if="isAdmin" prop="userId" label="用户id" width="150" align="center" />
+        <ElTableColumn prop="amount" label="金额" />
+        <ElTableColumn prop="type" label="类型" align="center">
+            <template #default="{ row }">
+                <ElTag v-if="row.type === 'recharge'" type="success">充值</ElTag>
+                <ElTag v-else-if="row.type === 'consumption'" type="warning">消费</ElTag>
+                <ElTag v-else-if="row.type === 'refund'" type="warning">退款</ElTag>
+                <ElTag v-else-if="row.type === 'other'">其他</ElTag>
+                <ElTag v-else>未知</ElTag>
+            </template>
+        </ElTableColumn>
+        <ElTableColumn prop="createdAt" label="交易时间" :formatter="timeFormatter" align="center" />
+    </PagingTable>
+</template>
+<script setup>
+import { inject, ref } from 'vue'
+import PagingTable from '@/components/PagingTable.vue'
+import { useTimeFormatter } from '@/utils/formatter'
+import { Plus, Refresh } from '@vicons/tabler'
+import { useUserStore } from '@/stores/user'
+import { http } from '@/plugins/http'
+
+const isAdmin = inject('isAdmin')
+const { user } = useUserStore()
+const where = ref({})
+const roles = user.roles
+if (roles.includes('user')) {
+    where.value.userId = user.id
+}
+const timeFormatter = useTimeFormatter()
+const table = ref(null)
+const userList = ref({})
+const typeList = [
+    {
+        status: 'recharge',
+        label: '充值'
+    },
+    {
+        status: 'consumption',
+        label: '消费'
+    },
+    {
+        status: 'refund',
+        label: '退款'
+    },
+    {
+        id: 'other',
+        label: '其他'
+    }
+]
+
+async function getUserList() {
+    userList.value = (
+        await http.post('/admin/users', {
+            search: { page: { page: 1, limit: 50 }, order: { createdAt: 'DESC' } }
+        })
+    ).items
+}
+
+getUserList()
+
+const selectUserId = ref('')
+const selectType = ref('')
+
+function updateWhereAndRefresh() {
+    where.value = {}
+    if (selectUserId.value) {
+        where.value.userId = selectUserId.value
+    }
+    if (selectType.value) {
+        where.value.type = selectType.value
+    }
+}
+
+</script>

+ 8 - 0
src/views/MainView.vue

@@ -116,6 +116,10 @@ if (roles.includes('admin')) {
                 {
                     name: '/dealer',
                     title: '经销商列表'
+                },
+                {
+                    name: '/balance',
+                    title: '余额明细'
                 }
             ]
         },
@@ -169,6 +173,10 @@ if (roles.includes('admin')) {
                 {
                     name: '/task',
                     title: '任务列表'
+                },
+                {
+                    name: '/balance',
+                    title: '余额明细'
                 }
             ]
         }

+ 6 - 2
src/views/TaskView.vue

@@ -185,11 +185,15 @@ async function submit() {
     if (model.value.channelId) {
         model.value.channelId = model.value.channelId.join(',')
     }
-    await http.put('/task', {
+    const result = await http.put('/task', {
         ...model.value,
         userId: user.value.id
     })
-    ElMessage.success('保存成功')
+    if (result) {
+        ElMessage.success('保存成功')
+    } else {
+        ElMessage.warning('所选择发送列表未添加号码,请先导入号码后再添加任务')
+    }
 }
 
 const phoneList = ref([])