wuyi 1 rok temu
rodzic
commit
7bd3f1ada8
4 zmienionych plików z 43 dodań i 10 usunięć
  1. 2 1
      src/enums/index.js
  2. 9 1
      src/main.js
  3. 30 6
      src/views/DealerView.vue
  4. 2 2
      src/views/MainView.vue

+ 2 - 1
src/enums/index.js

@@ -23,7 +23,8 @@ export const MemberType = {
 export const UserRole = {
     user: '发送用户',
     admin: '管理员',
-    api: '运营'
+    api: '运营',
+    superApi: '超级运营'
 }
 
 export const GameStatus = {

+ 9 - 1
src/main.js

@@ -29,7 +29,15 @@ app.provide(
     'isAdminOrApi',
     computed(() => {
         if (!(user.value && user.value.roles)) return false
-        return user.value.roles.includes('admin') || user.value.roles.includes('api')
+        return user.value.roles.includes('admin') || user.value.roles.includes('api') || user.value.roles.includes('superApi')
+    })
+)
+
+app.provide(
+    'isSuperApi',
+    computed(() => {
+        if (!(user.value && user.value.roles)) return false
+        return user.value.roles.includes('superApi')
     })
 )
 

+ 30 - 6
src/views/DealerView.vue

@@ -4,11 +4,17 @@
             <ElButton :icon="Plus" @click="onEdit()">添加</ElButton>
         </template>
         <ElTableColumn prop="id" label="#" width="80" />
-        <ElTableColumn prop="username" label="经销商名" min-width="120" />
+        <ElTableColumn prop="username" label="用户名" min-width="120" />
         <ElTableColumn prop="name" label="昵称" min-width="120" />
+        <ElTableColumn prop="roles" label="角色" align="center">
+            <template #default="{ row }">
+                <ElTag v-if="row.roles.includes('user')" type="success">发送用户</ElTag>
+                <ElTag v-else-if="row.roles.includes('api')">运营</ElTag>
+                <ElTag v-else-if="row.roles.includes('superApi')" type="warning">超级运营</ElTag>
+            </template>
+        </ElTableColumn>
         <ElTableColumn prop="phone" label="手机" min-width="120" />
         <ElTableColumn prop="createdAt" label="注册时间" :formatter="timeFormatter" width="150" />
-        <ElTableColumn prop="invitor" label="上级" />
         <ElTableColumn prop="balance" label="余额" />
         <ElTableColumn prop="rate" label="费率" />
         <ElTableColumn prop="send" label="已发送" />
@@ -33,18 +39,30 @@
         <ElFormItem prop="password" label="密码">
             <ElInput v-model="model.password" placeholder="请输入密码" />
         </ElFormItem>
+        <ElFormItem v-if="isSuperApi" prop="roles" label="角色">
+            <EnumSelect v-model="model.roles" :enum="myUserRole" multiple :multiple-limit="1" />
+        </ElFormItem>
     </EditDialog>
     <ElDialog v-model="showDetailDialog" title="详情" width="500px">
         <PagingTable url="/balance/records/" :where="{ userId: (selectedRow || {}).id }" :order="{createdAt:'DESC'}"
                      ref="balanceTable" height="50vh">
             <ElTableColumn prop="id" label="#" width="80" />
             <ElTableColumn prop="amount" label="金额" min-width="120" />
+            <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" min-width="120" />
         </PagingTable>
     </ElDialog>
 </template>
 <script setup>
-import { ref } from 'vue'
+import { inject, ref } from 'vue'
 import PagingTable from '@/components/PagingTable.vue'
 import { useTimeFormatter } from '@/utils/formatter'
 import { Plus } from '@vicons/tabler'
@@ -57,7 +75,8 @@ import { ElMessage, ElMessageBox } from 'element-plus'
 import { useClipboard } from '@vueuse/core'
 import { useUserStore } from '@/stores/user'
 
-const where = ref({ roles: 'user' })
+const isSuperApi = inject('isSuperApi')
+const where = ref({})
 const timeFormatter = useTimeFormatter()
 const table = ref(null)
 const model = ref({})
@@ -70,10 +89,15 @@ const rules = {
     roles: [{ required: true, message: '请选择角色', trigger: 'blur' }]
 }
 const { showEditDialog, onEdit } = setupEditDialog(model)
+const myUserRole = {
+    user: '发送用户',
+    api: '运营'
+}
 
 async function submit() {
-    // 经销商
-    model.value.roles = ['user']
+    if (!model.value.roles){
+        model.value.roles = ['user']
+    }
     // 上级
     model.value.invitor = user.id
     await http.put('/admin/users', model.value)

+ 2 - 2
src/views/MainView.vue

@@ -136,7 +136,7 @@ if (roles.includes('admin')) {
             ]
         }
     ]
-} else if (roles.includes('api')) {
+} else if (roles.includes('api') || roles.includes('superApi')) {
     menus = [
         {
             name: '/home',
@@ -161,7 +161,7 @@ if (roles.includes('admin')) {
             children: [
                 {
                     name: '/dealer',
-                    title: '发送用户列表'
+                    title: '用户列表'
                 }
             ]
         }