Brak opisu

index.vue 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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="allCombine" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row>
  20. <el-table-column label="代理商名稱" align="center">
  21. <template slot-scope="scope">
  22. <span>{{scope.row.name}}</span>
  23. </template>
  24. </el-table-column>
  25. <el-table-column label="總上分額" align="center">
  26. <template slot-scope="scope">
  27. <span :style="moneyColor(scope.row.allUp)">{{scope.row.allUp}}</span>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="總下分額" align="center">
  31. <template slot-scope="scope">
  32. <span :style="moneyColor(scope.row.allDown)">{{scope.row.allDown}}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="所有會員點數" align="center">
  36. <template slot-scope="scope">
  37. <span :style="moneyColor(scope.row.allChips)">{{scope.row.allChips}}</span>
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="總投注量" align="center">
  41. <template slot-scope="scope">
  42. <span :style="moneyColor(scope.row.allEarned)">{{scope.row.allEarned}}</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="總水量" align="center">
  46. <template slot-scope="scope">
  47. <span :style="moneyColor(scope.row.allServiceFees)">{{scope.row.allServiceFees}}</span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="上繳工作室金額" align="center">
  51. <template slot-scope="scope">
  52. <span :style="moneyColor(all(scope))">{{all(scope)}}</span>
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. <el-table :data="combine" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row>
  57. <el-table-column :label="`${this.agent.GambleMember.name}的會員`" align="center">
  58. <el-table-column label="名稱" align="center">
  59. <template slot-scope="scope">
  60. <span>{{scope.row.name}}</span>
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="會員當前分數" align="center">
  64. <template slot-scope="scope">
  65. <span>{{scope.row.chips}}</span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="總上分額" align="center">
  69. <template slot-scope="scope">
  70. <span :style="moneyColor(scope.row.totalUp)">{{scope.row.totalUp}}</span>
  71. </template>
  72. </el-table-column>
  73. <el-table-column label="總下分額" align="center">
  74. <template slot-scope="scope">
  75. <span :style="moneyColor(scope.row.totalDown)">{{scope.row.totalDown}}</span>
  76. </template>
  77. </el-table-column>
  78. <el-table-column label="有效投注量(莊家)" align="center">
  79. <template slot-scope="scope">
  80. <span :style="moneyColor(scope.row.bookieEarned)">{{scope.row.bookieEarned}}</span>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="有效投注量(閒家)" align="center">
  84. <template slot-scope="scope">
  85. <span :style="moneyColor(scope.row.memberEarned)">{{scope.row.memberEarned}}</span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="莊家抽水" align="center">
  89. <template slot-scope="scope">
  90. <span :style="moneyColor(scope.row.bookieServiceFees)">{{scope.row.bookieServiceFees}}</span>
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="閒家抽水" align="center">
  94. <template slot-scope="scope">
  95. <span :style="moneyColor(scope.row.memberServiceFees)">{{scope.row.memberServiceFees}}</span>
  96. </template>
  97. </el-table-column>
  98. <el-table-column label="總退水" align="center">
  99. <template slot-scope="scope">
  100. <span :style="moneyColor(scope.row.wallet)">{{scope.row.totalServiceFees}}</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="會員結帳" align="center">
  104. <template slot-scope="scope">
  105. <span :style="moneyColor(scope.row.memberCheckOut)">{{scope.row.memberCheckOut}}</span>
  106. </template>
  107. </el-table-column>
  108. <el-table-column align="center" label="操作" width="100">
  109. <template slot-scope="scope">
  110. <router-link to="/agent/index/gambleMemberManagement/index/gameHistory">
  111. <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handlePersonDetail(scope.row)">紀錄</el-button>
  112. </router-link>
  113. </template>
  114. </el-table-column>
  115. </el-table-column>
  116. </el-table>
  117. </div>
  118. <router-view :member="member"></router-view>
  119. </div>
  120. </template>
  121. <script>
  122. import { mapActions, mapGetters } from 'vuex'
  123. import { fetchMemberList } from '@/api/agnetManagement'
  124. import waves from '@/directive/waves' // 水波纹指令
  125. import moment from 'moment-timezone'
  126. import config from '../../../../config'
  127. import _ from 'lodash'
  128. export default {
  129. directives: {
  130. waves
  131. },
  132. data() {
  133. return {
  134. // chipLogList: [],
  135. // gameRecordList: [],
  136. list: [],
  137. member: {},
  138. dialogList: null,
  139. total: null,
  140. listLoading: true,
  141. allCombine: [],
  142. combine: [],
  143. listQuery: {
  144. // page: 1,
  145. // limit: 20,
  146. startAt: moment().subtract(1, 'weeks').day(7).hour(16).minute(0).second(0),
  147. endAt: moment().day(7).hour(11).minute(59).second(59)
  148. },
  149. pickerOptions: {
  150. shortcuts: [{
  151. text: '本週',
  152. onClick(picker) {
  153. const end = moment().day(7).hour(11).minute(59).second(59)
  154. const start = moment().subtract(1, 'weeks').day(7).hour(16).minute(0).second(0)
  155. picker.$emit('pick', [start, end])
  156. }
  157. }, {
  158. text: '上週',
  159. onClick(picker) {
  160. const end = moment().subtract(1, 'weeks').day(7).hour(11).minute(59).second(59)
  161. const start = moment().subtract(2, 'weeks').day(7).hour(16).minute(0).second(0)
  162. picker.$emit('pick', [start, end])
  163. }
  164. }]
  165. },
  166. date: null,
  167. dialogFormVisible: false
  168. }
  169. },
  170. created() {
  171. this.SetVisible(2)
  172. this.getList()
  173. },
  174. computed: {
  175. ...mapGetters([
  176. 'visible'
  177. ])
  178. },
  179. props: ['agent'],
  180. methods: {
  181. ...mapActions([
  182. 'SetVisible'
  183. ]),
  184. getList() {
  185. this.listLoading = true
  186. this.allCombine = []
  187. this.combine = []
  188. fetchMemberList(this.agent, this.listQuery).then(response => {
  189. // this.memberRecord = response.data.rows
  190. response.data.rows.map(member => {
  191. let row = {
  192. id: member.id,
  193. name: member.name,
  194. chips: member.chips,
  195. totalUp: 0,
  196. totalDown: 0,
  197. bookieEarned: 0,
  198. memberEarned: 0,
  199. bookieServiceFees: 0,
  200. memberServiceFees: 0,
  201. totalServiceFees: 0,
  202. memberCheckOut: 0,
  203. }
  204. let bookie = _.groupBy(member['GambleGame-Bucket-MemberRecords'], 'isBookie')
  205. if (bookie.false) {
  206. row.memberEarned = _.sumBy(bookie.false, 'earned');
  207. row.memberServiceFees = _.sumBy(bookie.false, 'serviceFees')*this.agent.feeRatio/100;
  208. }
  209. if (bookie.true) {
  210. row.bookieEarned = _.sumBy(bookie.true, 'earned');
  211. row.bookieServiceFees = _.sumBy(bookie.true, (item) => { return item.serviceFees-500; })*this.agent.feeRatio/100;
  212. }
  213. row.totalServiceFees = row.bookieServiceFees + row.memberServiceFees
  214. let chipsLog = _.groupBy(member.GambleMemberChipsLogs, 'type')
  215. if (chipsLog['0']) {
  216. row.totalUp = _.sumBy(chipsLog['0'], (item) => {
  217. return item.chips > 0 ? item.chips : false
  218. })
  219. row.totalDown = _.sumBy(chipsLog['0'], (item) => {
  220. return item.chips < 0 ? item.chips : false
  221. })
  222. }
  223. row.memberCheckOut = row.totalUp + row.totalDown - row.chips
  224. // TODO CHECK 是否需要
  225. if(chipsLog['1']) {
  226. }
  227. console.log('www',row)
  228. this.combine.push(row)
  229. })
  230. this.allCombine.push({
  231. name: this.agent.GambleMember.name,
  232. allUp: _.sumBy(this.combine, 'totalUp'),
  233. allDown: _.sumBy(this.combine, 'totalDown'),
  234. allChips: _.sumBy(this.combine, 'chips'),
  235. allEarned: _.sumBy(this.combine, (item) => {return item.bookieEarned + item.memberEarned}),
  236. allServiceFees: _.sumBy(this.combine, (item) => {return item.bookieServiceFees + item.
  237. memberServiceFees}),
  238. })
  239. this.listLoading = false
  240. })
  241. },
  242. handlePersonDetail(row) {
  243. const temp = Object.assign({}, row) // copy obj
  244. this.SetVisible(3)
  245. this.member = temp
  246. },
  247. handleFilter() {
  248. this.listQuery.page = 1
  249. if (this.date) {
  250. this.listQuery.startAt = moment.utc(this.date[0]).format()
  251. this.listQuery.endAt = moment.utc(this.date[1]).format()
  252. } else {
  253. this.listQuery.startAt = null
  254. this.listQuery.endAt = null
  255. }
  256. this.getList()
  257. },
  258. handleSizeChange(val) {
  259. this.listQuery.limit = val
  260. this.getList()
  261. },
  262. handleCurrentChange(val) {
  263. this.listQuery.page = val
  264. this.getList()
  265. },
  266. moment(time) {
  267. return moment(time).tz('Asia/Taipei').format('YYYY-MM-DD HH:mm:ss')
  268. },
  269. // getSummaries() {
  270. // const sums = []
  271. // let totalWager = 0
  272. // let totalEarned = 0
  273. // let totalServiceFees = 0
  274. // if (this.dialogList) {
  275. // this.dialogList.map((memberRecord) => {
  276. // totalWager += memberRecord.wager
  277. // totalEarned += memberRecord.earned
  278. // totalServiceFees += memberRecord.serviceFees
  279. // })
  280. // }
  281. // sums[0] = '合計'
  282. // sums[1] = 'N/A'
  283. // sums[2] = totalWager
  284. // sums[3] = totalEarned
  285. // sums[4] = totalServiceFees
  286. // return sums
  287. // },
  288. moneyColor(money) {
  289. return money >= 0 ? { color: '#67C23A' } : { color: '#FA5555' }
  290. },
  291. all(scope) {
  292. return scope.row.allUp+scope.row.allDown-scope.row.allChips-scope.row.allServiceFees
  293. }
  294. },
  295. destroyed() {
  296. this.SetVisible(1)
  297. }
  298. }
  299. </script>