Explorar el Código

agentManagment

Unknown %!s(int64=7) %!d(string=hace) años
padre
commit
3753ce1164

+ 14 - 0
src/api/agnetManagement.js

@@ -25,3 +25,17 @@ export function createAgent(data) {
25 25
   })
26 26
 }
27 27
 
28
+export function fetchMemberList(data, query) {
29
+  return request({
30
+    url: `/agents/${data.GambleMember.id}/gambleMembers`,
31
+    method: 'get',
32
+    params: {
33
+      limit: query.limit,
34
+      offset: (query.page - 1) * query.limit
35
+      // name: query.name
36
+    //   chipsSort: query.chipsSort,
37
+    //   updatedSort: query.updatedSort
38
+    }
39
+  })
40
+}
41
+

+ 25 - 1
src/router/index.js

@@ -139,7 +139,31 @@ export const constantRouterMap = [
139 139
           title: '代理商管理',
140 140
           icon: 'table'
141 141
           // role: ['dd']
142
-        }
142
+        },
143
+        children: [
144
+          {
145
+            path: '/agent/index/gambleMemberManagement',
146
+            name: 'GambleMemberManagement',
147
+            component: _import('agnetManagement/gambleMemberManagement/index'),
148
+            hidden: true,
149
+            meta: {
150
+              title: '會員管理'
151
+              // role: ['dd']
152
+            },
153
+            children: [
154
+              {
155
+                path: '/agent/index/gambleMemberManagement/index/gameHistory',
156
+                name: 'AgnentMemberGameHistory',
157
+                component: _import('room/gameHistory/index'),
158
+                hidden: true,
159
+                meta: {
160
+                  title: '歷史紀錄'
161
+                  // role: ['dd']
162
+                }
163
+              }
164
+            ]
165
+          }
166
+        ]
143 167
       }
144 168
     ]
145 169
   },

+ 221 - 0
src/views/agnetManagement/gambleMemberManagement/index.vue

@@ -0,0 +1,221 @@
1
+<template>
2
+  <div  class="app-container">
3
+    <div v-show="visible.secondLayer">
4
+      <div  class="app-container">
5
+          <div class="block">
6
+              <!-- <span class="demonstration">時間篩選</span> -->
7
+              <el-date-picker
8
+              v-model="date"
9
+              type="datetimerange"
10
+              :picker-options="pickerOptions"
11
+              range-separator="至"
12
+              start-placeholder="開始日期"
13
+              end-placeholder="结束日期"
14
+              align="right">
15
+              </el-date-picker>
16
+              <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">搜尋</el-button>
17
+          </div>
18
+      </div>
19
+      <el-table :data="list" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row>
20
+        <el-table-column label="我的會員" align="center">
21
+          <el-table-column label="名稱" align="center">
22
+            <template slot-scope="scope">
23
+              <span>{{scope.row.name}}</span>
24
+            </template>
25
+          </el-table-column>
26
+          <el-table-column label="分數" align="center">
27
+            <template slot-scope="scope">
28
+              {{scope.row.chips}}
29
+            </template>
30
+          </el-table-column>
31
+          <el-table-column label="投注量" align="center">
32
+            <template slot-scope="scope">
33
+              <span :style="moneyColor(scope.row.amount)">{{scope.row.amount}}</span>
34
+            </template>
35
+          </el-table-column>
36
+          <el-table-column label="總退水" align="center">
37
+            <template slot-scope="scope">
38
+              <span :style="moneyColor(scope.row.wallet)">{{scope.row.wallet}}</span>
39
+            </template>
40
+          </el-table-column>
41
+          <el-table-column align="center" label="操作" width="250">
42
+            <template slot-scope="scope">
43
+                <router-link to="/agent/index/gambleMemberManagement/index/gameHistory">
44
+                    <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handlePersonDetail(scope.row)">紀錄</el-button>  
45
+                </router-link>
46
+            </template>
47
+          </el-table-column>
48
+        </el-table-column>      
49
+      </el-table>
50
+
51
+      <div v-show="!listLoading" class="pagination-container">
52
+        <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="listQuery.page"
53
+          :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit" layout="total, sizes, prev, pager, next, jumper" :total="total">
54
+        </el-pagination>
55
+      </div>
56
+
57
+    </div>
58
+    <router-view :member="member"></router-view>
59
+  </div>
60
+</template>
61
+
62
+<script>
63
+
64
+import { mapActions, mapGetters } from 'vuex'
65
+import { fetchMemberList } from '@/api/agnetManagement'
66
+import waves from '@/directive/waves' // 水波纹指令
67
+import moment from 'moment-timezone'
68
+import config from '../../../../config' 
69
+import _ from 'lodash'
70
+
71
+export default {
72
+  directives: {
73
+    waves
74
+  },
75
+  data() {
76
+    return {
77
+    //   chipLogList: [],
78
+    //   gameRecordList: [],   
79
+      list: [],
80
+      member: {}, 
81
+      dialogList: null,
82
+      total: null,
83
+      listLoading: true,
84
+      listQuery: {
85
+        page: 1,
86
+        limit: 20,
87
+        startAt: null,
88
+        endAt: null
89
+      },
90
+      pickerOptions: {
91
+        shortcuts: [{
92
+          text: '最近一周',
93
+          onClick(picker) {
94
+            const end = new Date()
95
+            const start = new Date()
96
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
97
+            picker.$emit('pick', [start, end])
98
+          }
99
+        }, {
100
+          text: '最近一個月',
101
+          onClick(picker) {
102
+            const end = new Date()
103
+            const start = new Date()
104
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
105
+            picker.$emit('pick', [start, end])
106
+          }
107
+        }, {
108
+          text: '最近三個月',
109
+          onClick(picker) {
110
+            const end = new Date()
111
+            const start = new Date()
112
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
113
+            picker.$emit('pick', [start, end])
114
+          }
115
+        }, {
116
+          text: '最近半年',
117
+          onClick(picker) {
118
+            const end = new Date()
119
+            const start = new Date()
120
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 180)
121
+            picker.$emit('pick', [start, end])
122
+          }
123
+        }, {
124
+          text: '最近一年',
125
+          onClick(picker) {
126
+            const end = new Date()
127
+            const start = new Date()
128
+            start.setTime(start.getTime() - 3600 * 1000 * 24 * 365)
129
+            picker.$emit('pick', [start, end])
130
+          }
131
+        }]
132
+      },
133
+      date: null,
134
+      dialogFormVisible: false
135
+
136
+    }
137
+  },
138
+  created() {
139
+    this.SetVisible(2)
140
+    this.getList()
141
+  },
142
+  computed: {
143
+    ...mapGetters([
144
+      'visible'
145
+    ])
146
+  },
147
+  props: ['agent'],
148
+  methods: {
149
+    ...mapActions([
150
+      'SetVisible'
151
+    ]),
152
+    getList() {
153
+      this.listLoading = true
154
+      fetchMemberList(this.agent, this.listQuery).then(response => {
155
+        this.list = response.data
156
+        console.log(response.data)
157
+        this.listLoading = false
158
+      })
159
+      
160
+    },
161
+    handlePersonDetail(row) {
162
+    //   this.listLoading = true
163
+    //   this.dialogFormVisible = true
164
+    //   fetchPersonGameDetail(this.member.id, row.id).then(response => {
165
+    //     this.dialogList = response.data.rows
166
+    //     this.listLoading = false
167
+    //   })
168
+      const temp = Object.assign({}, row) // copy obj
169
+      this.SetVisible(3)
170
+      this.member = temp
171
+    },
172
+    handleFilter() {
173
+      this.listQuery.page = 1
174
+      if (this.date) {
175
+        this.listQuery.startAt = moment.utc(this.date[0]).format()
176
+        this.listQuery.endAt = moment.utc(this.date[1]).format()
177
+      } else {
178
+        this.listQuery.startAt = null
179
+        this.listQuery.endAt = null
180
+      }
181
+      this.getList()
182
+    },
183
+    handleSizeChange(val) {
184
+      this.listQuery.limit = val
185
+      this.getList()
186
+    },
187
+    handleCurrentChange(val) {
188
+      this.listQuery.page = val
189
+      this.getList()
190
+    },
191
+    moment(time) {
192
+      return moment(time).tz('Asia/Taipei').format('YYYY-MM-DD HH:mm:ss')
193
+    },
194
+    // getSummaries() {
195
+    //   const sums = []
196
+    //   let totalWager = 0
197
+    //   let totalEarned = 0
198
+    //   let totalServiceFees = 0
199
+    //   if (this.dialogList) {
200
+    //     this.dialogList.map((memberRecord) => {
201
+    //       totalWager += memberRecord.wager
202
+    //       totalEarned += memberRecord.earned
203
+    //       totalServiceFees += memberRecord.serviceFees
204
+    //     })
205
+    //   }
206
+    //   sums[0] = '合計'
207
+    //   sums[1] = 'N/A'
208
+    //   sums[2] = totalWager
209
+    //   sums[3] = totalEarned
210
+    //   sums[4] = totalServiceFees
211
+    //   return sums
212
+    // },
213
+    moneyColor(money) {
214
+      return money >= 0 ? { color: '#67C23A' } : { color: '#FA5555' }
215
+    }
216
+  },
217
+  destroyed() {
218
+    this.SetVisible(1)
219
+  }
220
+}
221
+</script>

+ 48 - 41
src/views/agnetManagement/index.vue

@@ -1,38 +1,45 @@
1 1
 <template>
2
-<div class="app-container calendar-list-container">
3
-  <div  v-show="visible.firstLayer">
4
-    <div class="app-container">
5
-      <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="名稱" v-model="listQuery.name">
6
-      </el-input>
7
-      <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">搜尋</el-button>
8
-      <el-button class="filter-item" @click="handleCreate" type="primary" icon="el-icon-edit">創建代理商</el-button>
9
-    </div>
10
-    <el-table :data="list" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row
11
-      style="width: 100%">
12
-      <el-table-column align="center" label='ID' >
13
-        <template slot-scope="scope">
14
-          {{scope.row.id}}
15
-        </template>
16
-      </el-table-column>
17
-      <el-table-column label="名稱" align="center">
18
-        <template slot-scope="scope">
19
-          {{scope.row.GambleMember.name}}
20
-        </template>
21
-      </el-table-column>
22
-      <el-table-column label="抽水%" align="center">
23
-        <template slot-scope="scope">
24
-          {{scope.row.feeRatio}}
25
-        </template>
26
-      </el-table-column>
27
-    </el-table>
2
+  <div class="app-container calendar-list-container">
3
+    <div  v-show="visible.firstLayer">
4
+      <div class="app-container">
5
+        <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="名稱" v-model="listQuery.name">
6
+        </el-input>
7
+        <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">搜尋</el-button>
8
+        <el-button class="filter-item" @click="handleCreate" type="primary" icon="el-icon-edit">創建代理商</el-button>
9
+      </div>
10
+      <el-table :data="list" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row
11
+        style="width: 100%">
12
+        <el-table-column align="center" label='ID' >
13
+          <template slot-scope="scope">
14
+            {{scope.row.GambleMember.id}}
15
+          </template>
16
+        </el-table-column>
17
+        <el-table-column label="名稱" align="center">
18
+          <template slot-scope="scope">
19
+            {{scope.row.GambleMember.name}}
20
+          </template>
21
+        </el-table-column>
22
+        <el-table-column label="抽水%" align="center">
23
+          <template slot-scope="scope">
24
+            {{scope.row.feeRatio}}
25
+          </template>
26
+        </el-table-column>
27
+        <el-table-column align="center" label="操作" width="450">
28
+          <template slot-scope="scope">          
29
+            <router-link to="/agent/index/gambleMemberManagement">
30
+              <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handlePage(scope.row)">會員管理</el-button>
31
+            </router-link>       
32
+          </template>
33
+        </el-table-column>
34
+      </el-table>
28 35
 
29
-    <div v-show="!listLoading" class="pagination-container">
30
-      <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="listQuery.page"
31
-        :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit" layout="total, sizes, prev, pager, next, jumper" :total="total">
32
-      </el-pagination>
33
-    </div>
36
+      <div v-show="!listLoading" class="pagination-container">
37
+        <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="listQuery.page"
38
+          :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit" layout="total, sizes, prev, pager, next, jumper" :total="total">
39
+        </el-pagination>
40
+      </div>
34 41
 
35
-    <el-dialog title="創建代理商" :visible.sync="dialogCreateFormVisible" :before-close="handleDialogClose" center>
42
+      <el-dialog title="創建代理商" :visible.sync="dialogCreateFormVisible" :before-close="handleDialogClose" center>
36 43
         <el-form :rules="rules" ref="createForm" :model="createFormData" label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
37 44
           <el-form-item label="名稱" prop="name">
38 45
             <el-input v-model="createFormData.name"></el-input>
@@ -45,9 +52,9 @@
45 52
           <el-button @click="handleDialogClose">取 消</el-button>
46 53
           <el-button type="primary" @click="createData">確 定</el-button>
47 54
         </div>
48
-    </el-dialog>
49
-  </div>
50
-    <router-view :member="member"></router-view>
55
+      </el-dialog>
56
+    </div>
57
+    <router-view :agent="agent"></router-view>
51 58
   </div>
52 59
 </template>
53 60
 
@@ -72,7 +79,7 @@ export default {
72 79
       },
73 80
       dialogCreateFormVisible: false,
74 81
       dialogStatus: '',
75
-      member: {},
82
+      agent: {},
76 83
       rules: {
77 84
         // rewardChips: [{ pattern: /^-?\d+$/, required: true, message: '請輸入整數', trigger: 'change' }],        
78 85
         // depositChips: [{ pattern: /^-?\d+$/, required: true, message: '請輸入整數', trigger: 'change' }],                
@@ -140,11 +147,6 @@ export default {
140 147
         }
141 148
       })
142 149
     },
143
-    handlePage(row) {
144
-      const temp = Object.assign({}, row) // copy obj
145
-      this.SetVisible(3)
146
-      this.member = temp
147
-    },
148 150
     handleFilter() {
149 151
       this.listQuery.page = 1
150 152
       this.getList()
@@ -160,6 +162,11 @@ export default {
160 162
     handleDialogClose() {
161 163
       this.dialogCreateFormVisible = false;
162 164
     },
165
+    handlePage(row) {
166
+      const temp = Object.assign({}, row) // copy obj
167
+      this.SetVisible(2)
168
+      this.agent = temp
169
+    },
163 170
   },
164 171
 }
165 172
 </script>