member.blade.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <script src="{{static_url('js/echarts.js')}}" type="text/javascript"></script>
  2. @extends('layouts.base')
  3. @section('title', '会员数据统计')
  4. <script src="{{resource_get('plugins/shop-statistics/assets/js/echarts.min.js')}}"></script>
  5. @section('content')
  6. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}" />
  7. <link rel="stylesheet" href="{{resource_get('plugins/shop-statistics/assets/css/common.css')}}">
  8. <link rel="stylesheet" href="{{resource_get('plugins/shop-statistics/assets/css/statistics.css')}}">
  9. <style>
  10. .member-news-card {
  11. padding: 27px 30px;
  12. width: 354px;
  13. height: 176px;
  14. background-color: #feffff;
  15. box-shadow: 0px 3px 27px 0px rgba(218, 218, 218, 0.43);
  16. border-radius: 6px;
  17. box-sizing: border-box;
  18. background-position: calc(100% - 30px) calc(100% - 27px);
  19. background-size:140px 84px;
  20. background-repeat: no-repeat;
  21. }
  22. .member-news-card:nth-child(odd) {
  23. background-image: url("/addons/yun_shop/plugins/shop-statistics/assets/images/Shape.png");
  24. }
  25. .member-news-card:nth-child(even) {
  26. background-image: url("/addons/yun_shop/plugins/shop-statistics/assets/images/Shape1.png");
  27. }
  28. .member-news-card+.member-news-card {
  29. margin-top: 15px;
  30. }
  31. .member-news-card_title {
  32. display: flex;
  33. justify-content: space-between;
  34. font-size: 20px;
  35. color: #5e6c84;
  36. }
  37. .member-new-card_count {
  38. display: block;
  39. margin-top: 38px;
  40. line-height: 38px;
  41. color: #344563;
  42. font-size: 42px;
  43. }
  44. </style>
  45. <div class="all">
  46. <div id="app">
  47. <panel padding="20px">
  48. <panel-form inline>
  49. <statistics-time-range @changed="newMembertimeRangeChanged"></statistics-time-range>
  50. </panel-form>
  51. <el-row type="flex" justify="space-between">
  52. <el-col :span="5">
  53. <div class="member-news-card">
  54. <div class="member-news-card_title">累计会员数
  55. <el-tooltip effect="dark" content="累计会员人数" placement="top">
  56. <i class="el-icon-warning"></i>
  57. </el-tooltip>
  58. </div>
  59. <count-to class="member-new-card_count" :start-val='0' :end-val="members" :duration=4000></count-to>
  60. </div>
  61. <div class="member-news-card">
  62. <div class="member-news-card_title">新增会员数
  63. <el-tooltip effect="dark" content="统计筛选时间内,新增会员人数" placement="top">
  64. <i class="el-icon-warning"></i>
  65. </el-tooltip>
  66. </div>
  67. <count-to class="member-new-card_count" :start-val='0' :end-val="memberNews" :duration=4000></count-to>
  68. </div>
  69. <!-- <statistics-card title="累计会员数" tip="累计会员人数" :count="members" shadow :border="false"></statistics-card>
  70. <statistics-card title="新增会员数" tip="统计筛选时间内,新增会员人数" style="margin-top:15px;" :count="memberNews" shadow :border="false"></statistics-card> -->
  71. </el-col>
  72. <el-col :span="18">
  73. <statistics-card shadow :border="false" style="padding:0px;">
  74. <div ref="memberNewsChart" style="width:100%;height:367px;"></div>
  75. </statistics-card>
  76. </el-col>
  77. </el-row>
  78. </panel>
  79. <panel v-if="broweFootprintPluginTurnon">
  80. <el-row :gutter="20">
  81. <el-col :span="4">
  82. <statistics-card title="浏览量" tip="统计筛选时间内,页面被访问的次数,多次访问多次记录" :count="views"></statistics-card>
  83. <statistics-card title="访客量" tip="统计筛选时间内,页面被访问的人数,多次访问只记录一次" :count="visitors" style="margin-top:14px"></statistics-card>
  84. </el-col>
  85. <el-col :span="20">
  86. <panel-form inline style="text-align:right;">
  87. <statistics-time-range @changed="pageTypeRangeChanged"></statistics-time-range>
  88. </panel-form>
  89. <panel-form style="margin:37px 0 37px 40px;">
  90. <el-form-item>
  91. <el-button :type="pageType.selectedType==pageTypeItem.value?'primary':'text'" :style="{ color:pageType.selectedType==pageTypeItem.value?'#fff':'#666' }" style="margin:-right:20px;" v-for="pageTypeItem in pageType.types" :label="pageTypeItem.text" :key="pageTypeItem.value" @click="pageType.selectedType=pageTypeItem.value;switchPageTypeChartData()" round>[[ pageTypeItem.text ]]</el-button>
  92. </el-form-item>
  93. </panel-form>
  94. <div ref="pageTypeChart" style="width:100%;height:500px;"></div>
  95. </el-col>
  96. </el-row>
  97. </panel>
  98. <el-row type="flex" style="margin-top:20px;height: 479px;" :gutter="5">
  99. <el-col :span="9">
  100. <panel>
  101. <statistics-card-title>会员结构分部</statistics-card-title>
  102. <div ref="memberDistribution" style="width:100%;height:388px;"></div>
  103. </panel>
  104. </el-col>
  105. <el-col :span="6">
  106. <panel>
  107. <statistics-card-title>占比图</statistics-card-title>
  108. <div ref="sexRatio" style="width:100%;height:388px;"></div>
  109. </panel>
  110. </el-col>
  111. <el-col :span="9">
  112. <panel id="memberLevelsPanel" style="height:100%;">
  113. <statistics-card-title>会员等级情况</statistics-card-title>
  114. <div style="display:flex;flex-direction: column;justify-content: space-between;height:388px;">
  115. <el-table :data="levelMembers" max-height="400px">
  116. <el-table-column label="会员等级" prop="level_name"></el-table-column>
  117. <el-table-column label="累计会员数" prop="member_count"></el-table-column>
  118. </el-table>
  119. <el-row style="margin-top:20px;">
  120. <el-col align="end">
  121. <el-pagination :total="levelMembersPagination.total" :page-size="levelMembersPagination.limit" :current-page="levelMembersPagination.pages" background @current-change="getMemberLevels"></el-pagination>
  122. </el-col>
  123. </el-row>
  124. </div>
  125. </panel>
  126. </el-col>
  127. </el-row>
  128. <panel style="margin-top:20px;">
  129. <statistics-card-title>会员关系数据统计</statistics-card-title>
  130. <panel-form inline>
  131. <el-form-item>
  132. <el-select v-model="membership.search.keywordType">
  133. <el-option :value="1" label="会员ID"></el-option>
  134. <el-option :value="2" label="会员昵称"></el-option>
  135. <el-option :value="3" label="手机号"></el-option>
  136. </el-select>
  137. </el-form-item>
  138. <el-form-item>
  139. <el-input placeholder="会员id/昵称/手机号" v-model="membership.search.keyword"></el-input>
  140. </el-form-item>
  141. <el-form-item>
  142. <el-button type="primary" @click="searchMembership" :loading="membership.searchLoading">搜索</el-button>
  143. <el-button @click="exportMemberShip">Excel导出</el-button>
  144. </el-form-item>
  145. </panel-form>
  146. <el-table :data="membership.datas">
  147. <el-table-column label="排行">
  148. <template slot-scope="scope">
  149. <div class="member-rank" :data-rank="scope.row.rank">
  150. [[ scope.row.rank ]]
  151. </div>
  152. </template>
  153. </el-table-column>
  154. <el-table-column label="会员Id" prop="uid"></el-table-column>
  155. <el-table-column label="会员昵称/手机号">
  156. <template slot-scope="scope">
  157. <div class="member-info">
  158. <el-avatar class="member-avatar" :src="scope.row.avatar" round></el-avatar>
  159. [[ scope.row.nickname ]]
  160. </div>
  161. </template>
  162. </el-table-column>
  163. <el-table-column label="一级下级数量" prop="first_total"></el-table-column>
  164. <el-table-column label="二级下线数量" prop="second_total"></el-table-column>
  165. <el-table-column label="三级下线数量" prop="third_total"></el-table-column>
  166. <el-table-column label="团队总人数" prop="team_total"></el-table-column>
  167. </el-table>
  168. <el-row style="margin-top:20px;">
  169. <el-col align="center">
  170. <el-pagination :total="membership.pagination.total" :page-size="membership.pagination.limit" :current-page="membership.pagination.pages" @current-change="getMemberShip"></el-pagination>
  171. </el-col>
  172. </el-row>
  173. </panel>
  174. </div>
  175. </div>
  176. <script>
  177. const GetMemberStatisticsUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.get-member-statistic') !!}"; //* 获取会员统计
  178. const GetMemberNewsStatisticsUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.search-member-new') !!}"; //* 新会员统计图数据
  179. const GetPageTypeStatisticsUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.search-browse-footprint') !!}"; //* 获取浏览量,访客量统计数据
  180. const GetMemberLevelsDataUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.search-member-level') !!}"; //* 获取会员等级数据
  181. const GetMembershipDataUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.search-member-relation') !!}"; //* 获取会员关系数据
  182. const ExportMemberRelationDataUrl = "{!! yzWebFullUrl('plugin.shop-statistics.backend.member.direct-export') !!}"; //* 导出会员关系数据
  183. </script>
  184. <script src="{{resource_get('plugins/shop-statistics/assets/js/components.js')}}"></script>
  185. <script src="{{resource_get('plugins/shop-statistics/assets/js/member.js')}}?t={{ readlink(0,12) }}&&t=141113"></script>
  186. <script src="{{resource_get('plugins/shop-statistics/assets/js/common.js')}}"></script>
  187. @endsection