balanceRecords.blade.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. @extends('layouts.base')
  2. @section('title', "余额明细")
  3. @section('content')
  4. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}"/>
  5. <div class="all">
  6. <div id="app" v-cloak>
  7. <div class="vue-head">
  8. <div class="vue-main-title" style="margin-bottom:20px">
  9. <div class="vue-main-title-left"></div>
  10. <div class="vue-main-title-content">余额明细</div>
  11. </div>
  12. <div class="vue-search">
  13. <el-form :inline="true" :model="search_form" class="demo-form-inline">
  14. <el-form-item label="">
  15. <el-input v-model="search_form.member_id" placeholder="会员ID"></el-input>
  16. </el-form-item>
  17. <el-form-item label="">
  18. <el-input v-model="search_form.member" placeholder="昵称/姓名/手机号"></el-input>
  19. </el-form-item>
  20. <el-form-item label="">
  21. <el-input v-model="search_form.order_sn" placeholder="订单号"></el-input>
  22. </el-form-item>
  23. <el-select v-model="search_form.member_level" style="margin-left:5px;" placeholder="会员等级" clearable>
  24. <el-option v-for="item in member_levels" :key="item.id" :label="item.level_name" :value="item.id"></el-option>
  25. </el-select>
  26. <el-select v-model="search_form.member_group" style="margin-left:5px;" placeholder="会员分组" clearable>
  27. <el-option v-for="item in member_groups" :key="item.id" :label="item.group_name" :value="item.id"></el-option>
  28. </el-select>
  29. <el-select v-model="search_form.source" style="margin-left:5px;" placeholder="业务类型" clearable>
  30. <el-option v-for="item in source_name" :key="item.id" :label="item.value" :value="item.id"></el-option>
  31. </el-select>
  32. <el-select v-model="search_form.type" style="margin-left:5px;" placeholder="收入/支出" clearable>
  33. <el-option v-for="item in type_list" :key="item.value" :label="item.label" :value="item.value"></el-option>
  34. </el-select>
  35. <el-form-item label="">
  36. <el-date-picker v-model="search_form.search_time" value-format="timestamp" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
  37. </el-form-item>
  38. <el-form-item label="">
  39. <el-button @click="switchSearchTime(1)" plain>今</el-button>
  40. <el-button @click="switchSearchTime(2)" plain>昨</el-button>
  41. <el-button @click="switchSearchTime(3)" plain>近7天</el-button>
  42. <el-button @click="switchSearchTime(4)" plain>近30天</el-button>
  43. <el-button @click="switchSearchTime(5)" plain>近1年</el-button>
  44. </el-form-item>
  45. <el-form-item label="" style="float: right">
  46. <el-button type="primary" @click="search(1)">搜索</el-button>
  47. <el-button type="primary" @click="export_(1)">导出</el-button>
  48. </el-form-item>
  49. </el-form>
  50. </div>
  51. </div>
  52. <div class="vue-main">
  53. <div class="vue-main-form">
  54. <div class="vue-main-title" style="margin-bottom:20px">
  55. <div class="vue-main-title-left"></div>
  56. <div class="vue-main-title-content">明细列表
  57. <span style="margin-left:20px;font-size: 10px;font-weight: 0;color: #9b9da4">
  58. 总数:[[ total ]]&nbsp;
  59. 金额合计:[[ amount ]]
  60. </span></div>
  61. </div>
  62. <el-table :data="data_list" style="width: 100%">
  63. <el-table-column label="时间" align="center" prop="created_at" width="auto"></el-table-column>
  64. <el-table-column label="会员ID" align="center" prop="member_id" width="auto"></el-table-column>
  65. <el-table-column label="粉丝" align="center" prop="" width="auto">
  66. <template slot-scope="scope">
  67. <div v-if="scope.row.member">
  68. <div v-if="scope.row.member.avatar">
  69. <img :src="scope.row.member.avatar" alt="" style="width:40px;height:40px;border-radius:50%">
  70. </div>
  71. <div v-else>
  72. <img :src="head_img" alt="" style="width:40px;height:40px;border-radius:50%">
  73. </div>
  74. <div @click="gotoMember(scope.row.member.uid)" style="line-height:32px;color:#29BA9C;cursor: pointer;" class="vue-ellipsis">[[scope.row.member.nickname]]</div>
  75. </div>
  76. </template>
  77. </el-table-column>
  78. <el-table-column label="余额" align="center" prop="" width="auto">
  79. <template slot-scope="scope">
  80. <span style="background-color: #fff7e6;color: #efb43c;padding: 5px">
  81. 余额:[[ scope.row.new_money ]]
  82. </span>
  83. </template>
  84. </el-table-column>
  85. <el-table-column label="业务类型" align="center" prop="service_type_name" width="auto"></el-table-column>
  86. <el-table-column label="收入\支出" align="center" prop="" width="auto">
  87. <template slot-scope="scope">
  88. <div>[[ scope.row.change_money ]]</div>
  89. </template>
  90. </el-table-column>
  91. <el-table-column prop="" label="操作" align="center" >
  92. <template slot-scope="scope">
  93. <el-button @click="detail(scope.row.id)">查看详情</el-button>
  94. </template>
  95. </el-table-column>
  96. </el-table>
  97. </div>
  98. </div>
  99. <!-- 分页 -->
  100. <div class="vue-page" >
  101. <el-row>
  102. <el-col align="right">
  103. <el-pagination layout="prev, pager, next,jumper" @current-change="search" :total="total"
  104. :page-size="per_page" :current-page="current_page" background
  105. ></el-pagination>
  106. </el-col>
  107. </el-row>
  108. </div>
  109. </div>
  110. </div>
  111. <script>
  112. let member_levels = {!! $member_levels ?: '' !!};
  113. let member_groups = {!! $member_groups ?: '' !!};
  114. let source_name = {!! $source_name ?: '' !!};
  115. let head_img = '{!! $head_img ?: '' !!}';
  116. var app = new Vue({
  117. el: "#app",
  118. delimiters: ['[[', ']]'],
  119. data() {
  120. return {
  121. data_list: [],
  122. member_levels:member_levels,
  123. member_groups:member_groups,
  124. source_name:source_name,
  125. head_img:head_img,
  126. type_list: [
  127. {
  128. value: 1,
  129. label: '收入'
  130. },
  131. {
  132. value: 2,
  133. label: '支出'
  134. },
  135. ],
  136. search_form: {
  137. member_id:"",
  138. member:"",
  139. order_sn:"",
  140. member_level:"",
  141. member_group:"",
  142. source:"",
  143. type:'',
  144. search_time:[],
  145. },
  146. amount:0.00,
  147. current_page: 1,
  148. total: 1,
  149. per_page: 1,
  150. }
  151. },
  152. created() {
  153. },
  154. mounted() {
  155. this.search_form.search_time = this.switchSearchTime(5);
  156. },
  157. methods: {
  158. getData(page) {
  159. let json = {
  160. page: page,
  161. search: {
  162. member:this.search_form.member,
  163. member_id:this.search_form.member_id,
  164. order_sn:this.search_form.order_sn,
  165. member_level:this.search_form.member_level,
  166. member_group:this.search_form.member_group,
  167. source:this.search_form.source,
  168. type:this.search_form.type,
  169. search_time:this.search_form.search_time,
  170. },
  171. };
  172. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  173. this.$http.post('{!! yzWebFullUrl('finance.balance-records.search') !!}',json).then(function(response) {
  174. if (response.data.result) {
  175. let list = response.data.data.list;
  176. this.data_list = list.data;
  177. this.current_page = list.current_page;
  178. this.total = list.total;
  179. this.per_page = list.per_page;
  180. this.amount = response.data.data.amount;
  181. loading.close();
  182. } else {
  183. this.$message({message: response.data.msg, type: 'error'});
  184. }
  185. loading.close();
  186. }, function(response) {
  187. this.$message({message: response.data.msg, type: 'error'});
  188. loading.close();
  189. });
  190. },
  191. search(val) {
  192. this.getData(val);
  193. },
  194. export_(){
  195. this.$confirm('是否确定导出数据?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {
  196. var url = "{!! yzWebFullUrl('finance.balance-records.export') !!}";
  197. if (this.search_form.member_id) {
  198. url += "&search[member_id]="+this.search_form.member_id;
  199. }
  200. if (this.search_form.member) {
  201. url += "&search[member]="+this.search_form.member;
  202. }
  203. if (this.search_form.order_sn) {
  204. url += "&search[order_sn]="+this.search_form.order_sn;
  205. }
  206. if (this.search_form.source) {
  207. url += "&search[source]="+this.search_form.source;
  208. }
  209. if (this.search_form.member_level) {
  210. url += "&search[member_level]="+this.search_form.member_level;
  211. }
  212. if (this.search_form.member_group) {
  213. url += "&search[member_group]="+this.search_form.member_group;
  214. }
  215. if (this.search_form.type) {
  216. url += "&search[type]="+this.search_form.type;
  217. }
  218. if (this.search_form.search_time) {
  219. url += "&search[search_time]="+this.search_form.search_time;
  220. }
  221. window.location.href = url;
  222. }).catch(() => {
  223. this.$message({type: 'info', message: '已取消导出'});
  224. });
  225. },
  226. gotoMember(id) {
  227. window.location.href = `{!! yzWebFullUrl('member.member.detail') !!}`+`&id=`+id;
  228. },
  229. detail(id) {
  230. window.location.href = `{!! yzWebFullUrl('finance.balance.lookBalanceDetail') !!}`+'&id='+id;
  231. },
  232. getStartEndTime (num = 1) {
  233. // 一天的毫秒数
  234. const MillisecondsADay = 24*60*60*1000 * num
  235. // 今日开始时间戳
  236. const todayStartTime = new Date(new Date().setHours(0, 0, 0, 0)).getTime()
  237. // 今日结束时间戳
  238. const todayEndTime = new Date(new Date().setHours(23,59,59,999)).getTime()
  239. // 昨日开始时间戳
  240. const yesterdayStartTime = todayStartTime - MillisecondsADay
  241. // 昨日结束时间戳
  242. const yesterdayEndTime = todayEndTime - MillisecondsADay
  243. return [parseInt(yesterdayStartTime),parseInt(num > 1 ? todayEndTime : yesterdayEndTime)]
  244. },
  245. switchSearchTime(timeType) {
  246. switch (timeType) {
  247. //今天
  248. case 1:
  249. timeArr = this.getStartEndTime(0)
  250. break;
  251. //昨天
  252. case 2:
  253. timeArr = this.getStartEndTime(1)
  254. break;
  255. //近7天
  256. case 3:
  257. timeArr = this.getStartEndTime(7)
  258. break;
  259. //近30天
  260. case 4:
  261. timeArr = this.getStartEndTime(30)
  262. break;
  263. //近1年
  264. case 5:
  265. timeArr = this.getStartEndTime(365)
  266. break;
  267. }
  268. this.$nextTick(() => {
  269. this.search_form.search_time = timeArr;
  270. this.getData(1);
  271. })
  272. },
  273. },
  274. })
  275. </script>
  276. @endsection