agent-parent.blade.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. @extends('layouts.base')
  2. @section('title', '上级会员')
  3. @section('content')
  4. <link href="{{static_url('yunshop/css/total.css')}}" media="all" rel="stylesheet" type="text/css" />
  5. <style>
  6. .vue-title {
  7. display: flex;
  8. margin: 5px 0;
  9. line-height: 32px;
  10. font-size: 16px;
  11. color: #333;
  12. font-weight: 600;
  13. }
  14. .vue-title-left {
  15. width: 4px;
  16. height: 18px;
  17. margin-top: 6px;
  18. background: #29ba9c;
  19. display: inline-block;
  20. margin-right: 10px;
  21. }
  22. .vue-title-content {
  23. font-size: 14px;
  24. flex: 1;
  25. }
  26. .member-info {
  27. display: flex;
  28. margin: 38px;
  29. justify-content: space-between;
  30. }
  31. .search-top {
  32. display: flex;
  33. height: 200px;
  34. }
  35. .top-item1 {
  36. flex: 1;
  37. }
  38. .top-item2 {
  39. width: 540px;
  40. }
  41. .btn_follow {
  42. height: 22px;
  43. line-height: 22px;
  44. color: #fff;
  45. font-weight: 600;
  46. font-size: 12px;
  47. text-align: center;
  48. font-family: arial, "Hiragino Sans GB", "Microsoft Yahei", 微软雅黑, 宋体, 宋体, Tahoma, Arial, Helvetica, STHeiti;
  49. margin: 0 auto;
  50. border-radius: 4px;
  51. }
  52. .audit,
  53. .is_follow {
  54. width: 60px;
  55. background-color: #13c7a7;
  56. }
  57. .un_follow {
  58. width: 70px;
  59. background-color: #ffb025;
  60. }
  61. .no_follow {
  62. width: 70px;
  63. background-color: #999999;
  64. }
  65. .name-over {
  66. line-height: 37px;
  67. overflow: hidden;
  68. white-space: nowrap;
  69. text-overflow: ellipsis;
  70. }
  71. .el-table_1_column_2 .cell {
  72. /* display: flex; */
  73. }
  74. /* 分页 */
  75. .pagination-right {
  76. text-align: center;
  77. margin: 50px auto;
  78. }
  79. /* 列表 */
  80. .straight_table p {
  81. font-size: 12px;
  82. margin-top: 5px;
  83. font-family: SourceHanSansCN-Medium;
  84. font-size: 14px;
  85. font-weight: normal;
  86. font-stretch: normal;
  87. letter-spacing: 0px;
  88. /* color: #333333; */
  89. }
  90. .cell {
  91. /* border:1px solid red; */
  92. text-align: center;
  93. }
  94. /* 优化进来显示 */
  95. [v-cloak] {
  96. display: none;
  97. }
  98. .flexBox {
  99. display: flex;
  100. /* border:1px solid red; */
  101. height:180px;
  102. padding-bottom: 0px;
  103. }
  104. .solid_e7 {
  105. width: 1px;
  106. height: 140px;
  107. background-color: #e7e7e7;
  108. margin: 10px 50px 0 25px;
  109. }
  110. .search_box {
  111. /* border:1px solid red; */
  112. /* width:calc(100% - 200px); */
  113. flex: 1;
  114. padding-left: 13px;
  115. }
  116. .index_pub {
  117. height: 42px;
  118. border-radius: 4px;
  119. margin-right: 20px;
  120. margin-bottom: 20px;
  121. }
  122. .index_01 {
  123. /* width: 180px; */
  124. width:15%;
  125. }
  126. .index_02 {
  127. /* width: 180px; */
  128. width:19%;
  129. }
  130. .index_btn {
  131. width: 102px;
  132. height: 42px;
  133. border-radius: 4px;
  134. margin-right: 10px;
  135. }
  136. .index_btn01 {
  137. background-color: #29ba9c;
  138. }
  139. .index_btn02 {
  140. width: 102px;
  141. color: #29ba9c;
  142. border: solid 1px #29ba9c;
  143. }
  144. .index_btn03 {
  145. width: 160px;
  146. color: #29ba9c;
  147. border: solid 1px #29ba9c;
  148. }
  149. .el-button+.el-button {
  150. margin: 0;
  151. }
  152. </style>
  153. <div class="all">
  154. <div id="app" v-cloak>
  155. <div class="total-head flexBox">
  156. <div class="search-top">
  157. <div class="top-item1">
  158. <div class="vue-title" style="margin-bottom:20px;">
  159. <div class="vue-title-left"></div>
  160. <div class="vue-title-content">搜索筛选</div>
  161. </div>
  162. <div class="search_box">
  163. <el-input clearable v-model="mid" placeholder="请输入搜索ID" class="index_pub index_01"></el-input>
  164. <el-input clearable v-model="keyword" placeholder="可搜索昵称/姓名/手机号" class="index_pub index_02">
  165. </el-input>
  166. <el-select clearable v-model="followed" placeholder="是否关注" class="index_pub index_01">
  167. <el-option label="未关注" value="2">
  168. </el-option>
  169. <el-option label="已关注" value="1">
  170. </el-option>
  171. <el-option label="取消关注" value="0">
  172. </el-option>
  173. </el-select>
  174. <el-button class="index_btn index_btn01" type="primary" @click="searchEvent" @keyup.enter="searchEvent">搜索</el-button>
  175. <el-button style="margin-right:10px;" class="index_btn index_btn02" @click="excelEvent">导出 Excel</el-button>
  176. <el-button class="index_btn index_btn03" @click="excelBossEvent">导出 直推上级Excel</el-button>
  177. </div>
  178. </div>
  179. </div>
  180. <div class="solid_e7"></div>
  181. <div class="top-item2">
  182. <div class="vue-title">
  183. <div class="vue-title-left"></div>
  184. <div class="vue-title-content">会员信息</div>
  185. </div>
  186. <div style="display:flex;margin-top:20px;">
  187. <div>
  188. <img style="width:90px;height:90px;" :src="avatar" alt="">
  189. </div>
  190. <div style="margin-left:10px;display:flex;flex-direction: column;justify-content: space-between;">
  191. <div style="color: #333333;font-weight:600"><span>姓名:[[realname]]</span><span style="margin-left: 30px;">手机号:[[mobile]]</span></div>
  192. <div style="color: #868686;">昵称:[[nickname]]</div>
  193. <div style="color: #868686;">余额:<span style="color:red">[[credit2]]</span> / 积分:<span style="color:red">[[credit1]]</span></div>
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. <div class="total-floo">
  199. <div class="vue-title">
  200. <div class="vue-title-left"></div>
  201. <div class="vue-title-content" style="flex:none;margin-right:24px;">客户列表</div>
  202. <div style="font-size:14px;color: #999999;">总数:[[total]]</div>
  203. </div>
  204. <el-table class="straight_table" :data="tableData" style="width: 100%;">
  205. <el-table-column label="会员ID">
  206. <template slot-scope="scope">
  207. <p>[[ scope.row.parent_id ]]</p>
  208. </template>
  209. </el-table-column>
  210. <el-table-column label="上级">
  211. <template slot-scope="scope">
  212. <p>[[ scope.row.level ]]</p>
  213. </template>
  214. </el-table-column>
  215. <el-table-column label="经销商等级">
  216. <template slot-scope="scope">
  217. <!-- <p v-if="scope.row.has_one_team_dividend !==null && scope.row.has_one_team_dividend.has_one_level !==null && scope.row.has_one_team_dividend.has_one_level.level_name ">[[ scope.row.has_one_team_dividend.has_one_level.level_name ]]</p>
  218. <p v-else>不是经销商</p> -->
  219. <p>[[isType(1,scope.row.has_one_team_dividend)]]</p>
  220. </template>
  221. </el-table-column>
  222. <el-table-column label="粉丝">
  223. <template slot-scope="scope">
  224. <div>
  225. <p v-if="scope.row.has_one_member!==null && scope.row.has_one_member && scope.row.has_one_member.avatar">
  226. <img style="width:37px;height:37px;border-radius: 50%;" :src="scope.row.has_one_member.avatar" alt="">
  227. </p>
  228. <p class="name-over" v-if="scope.row.has_one_member!==null && scope.row.has_one_member && scope.row.has_one_member.fans_item">[[scope.row.has_one_member.fans_item]]</p>
  229. <p v-else>未更新</p>
  230. </div>
  231. </template>
  232. </el-table-column>
  233. <el-table-column label="姓名">
  234. <template slot-scope="scope">
  235. <p v-if="scope.row.has_one_member !==null && scope.row.has_one_member && scope.row.has_one_member.realname">[[ scope.row.has_one_member.realname ]]</p>
  236. </template>
  237. </el-table-column>
  238. <el-table-column label="手机号">
  239. <template slot-scope="scope">
  240. <p v-if="scope.row.has_one_member !==null && scope.row.has_one_member && scope.row.has_one_member.mobile">[[ scope.row.has_one_member.mobile ]]</p>
  241. </template>
  242. </el-table-column>
  243. <el-table-column label="注册时间">
  244. <template slot-scope="scope">
  245. <p v-if="scope.row.has_one_member !==null && scope.row.has_one_member && scope.row.has_one_member.createtime">[[ timeDate(scope.row.has_one_member.createtime*1000) ]]</p>
  246. </template>
  247. </el-table-column>
  248. <el-table-column label="关注">
  249. <template slot-scope="scope">
  250. <div v-if="!scope.row.has_one_fans">
  251. <p class="btn_follow no_follow">未关注</p>
  252. </div>
  253. <div v-else>
  254. <div v-if="scope.row.has_one_fans.uid && scope.row.has_one_fans.follow == 1">
  255. <p class="btn_follow is_follow">已关注</p>
  256. </div>
  257. <div v-else>
  258. <p class="btn_follow un_follow">取消关注</p>
  259. </div>
  260. </div>
  261. </template>
  262. </el-table-column>
  263. <el-table-column label="操作">
  264. <template slot-scope="scope">
  265. <el-popover placement="top" width="150" trigger="click">
  266. <el-link :href="'{{yzWebUrl('member.member.detail', array('id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-edit"></i> 会员详情
  267. </el-link>
  268. <el-link :href="'{{yzWebUrl('order.order-list.index', array('member_id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-list"></i>
  269. 会员订单</el-link>
  270. <el-link :href="'{{yzWebUrl('point.recharge.index', array('id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-credit-card"></i>
  271. 充值积分</el-link>
  272. <el-link :href="'{{yzWebUrl('balance.recharge.index', array('member_id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-money"></i>
  273. 充值余额
  274. </el-link>
  275. <el-link :href="'{{yzWebUrl('member.member.agent-old', array('id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-exchange"></i>
  276. 直推客户
  277. </el-link>
  278. <el-link :href="'{{yzWebUrl('member.member.agent', array('id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-exchange"></i>
  279. 团队客户
  280. </el-link>
  281. <el-link :href="'{{yzWebUrl('member.member.agent-parent', array('id' => ''))}}'+[[scope.row.parent_id]]" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-exchange"></i>
  282. 上级会员
  283. </el-link>
  284. <el-link :href="'{{yzWebUrl('member.member.black', array('black'=>0,'id' => ''))}}'+[[scope.row.parent_id]]" v-if="scope.row.is_back" :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-minus-circle"></i> 取消黑名单</el-link>
  285. <el-link :href="'{{yzWebUrl('member.member.black', array('black'=>1,'id' => ''))}}'+[[scope.row.parent_id]]" v-else :underline="false" style="height:30px;line-height:30px;"><i class="fa fa-minus-circle"></i> 设置黑名单</el-link>
  286. <el-button slot="reference" size="mini">操作
  287. </el-button>
  288. </el-popover>
  289. </template>
  290. </el-table-column>
  291. </el-table>
  292. </div>
  293. <!-- 分页 -->
  294. <div v-if="tableData.length!==0" class="fixed total-floo">
  295. <div class="fixed_box">
  296. <el-pagination background style="text-align: right;" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="pagesize" layout="prev, pager, next, jumper" :total="total">
  297. </el-pagination>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. @include("finance.balance.verifyPopupComponent")
  303. <script>
  304. var vm = new Vue({
  305. el: '#app',
  306. delimiters: ['[[', ']]'],
  307. data() {
  308. return {
  309. avatar: "",
  310. nickname: "",
  311. realname: "",
  312. mobile: "",
  313. credit2: "",
  314. credit1: "",
  315. mid: '',
  316. keyword: '',
  317. followed: '',
  318. tableData: [],
  319. itemList: [],
  320. currentPage: 1,
  321. pagesize: 6,
  322. total: 0,
  323. row_id: '',
  324. }
  325. },
  326. created() {
  327. g = this;
  328. //优化在不同设备固定定位挡住的现象设置父元素的内边距
  329. window.onload = function() {
  330. let all = document.querySelector(".all");
  331. let h = window.innerHeight * 0.03;
  332. all.style.paddingBottom = h + "px";
  333. }
  334. this.itemList = this.tableData;
  335. let id = this.getParam('id')
  336. if (this.getParam('id') && id !== -1) {
  337. this.row_id = Number(this.getParam('id'));
  338. this.postVipInfoList(1);
  339. }
  340. //全局监听enter事件
  341. document.onkeydown = (e) => {
  342. let key = window.event.keyCode;
  343. if (key == 13) {
  344. g.searchEvent();
  345. }
  346. }
  347. },
  348. computed: {
  349. isType() {
  350. return (id, obj) => {
  351. // console.log(id, obj);
  352. if (id == 1) {
  353. if (obj !== null && obj) {
  354. if (obj.has_one_level !== null && obj.has_one_level) {
  355. if (obj.has_one_level.level_name != null && obj.has_one_level.level_name) {
  356. return obj.has_one_level.level_name
  357. } else {
  358. return "不是经销商"
  359. }
  360. } else {
  361. return "不是经销商"
  362. }
  363. } else {
  364. return "不是经销商"
  365. }
  366. }
  367. }
  368. }
  369. },
  370. methods: {
  371. getParam(name) {
  372. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  373. var r = window.location.search.substr(1).match(reg);
  374. if (r != null) return unescape(r[2]);
  375. return null;
  376. },
  377. //导出excel
  378. excelEvent() {
  379. let isSubmied = false;
  380. if (verifyed && (expireTime === 0 || expireTime * 1000 < Date.now())) {
  381. showGetVerifyCodePopup();
  382. return false;
  383. }
  384. if (isSubmied) {
  385. return false;
  386. } else {
  387. isSubmied = true;
  388. }
  389. let url = `{!! yzWebFullUrl('member.member.agent-parent-export') !!}` + '&id=' + this.row_id+"&member_id="+this.mid+"&member="+this.keyword+"&followed="+this.followed;
  390. window.location.href = url;
  391. console.log(url);
  392. },
  393. //导出上级excel
  394. excelBossEvent() {
  395. let isSubmied = false;
  396. if (verifyed && (expireTime === 0 || expireTime * 1000 < Date.now())) {
  397. showGetVerifyCodePopup();
  398. return false;
  399. }
  400. if (isSubmied) {
  401. return false;
  402. } else {
  403. isSubmied = true;
  404. }
  405. let url = `{!! yzWebFullUrl('member.member.first-agent-export') !!}` + '&id=' + this.row_id;
  406. window.location.href = url;
  407. },
  408. //会员信息列表
  409. postVipInfoList(page) {
  410. this.$http.post("{!!yzWebFullUrl('member.member.agent-parent-show')!!}", {
  411. id: this.row_id,
  412. page,
  413. member_id: this.mid,
  414. member: this.keyword,
  415. followed: this.followed
  416. }).then(res => {
  417. let {
  418. member,
  419. list
  420. } = res.body.data;
  421. //会员头像
  422. this.avatar = member.avatar;
  423. //昵称
  424. this.nickname = member.nickname;
  425. //真实姓名
  426. this.realname = member.realname;
  427. //手机号码
  428. this.mobile = member.mobile;
  429. //余额
  430. this.credit2 = member.credit2;
  431. //积分
  432. this.credit1 = member.credit1;
  433. // 列表
  434. let {
  435. data,
  436. current_page,
  437. total,
  438. per_page
  439. } = list;
  440. if(data!==null && data.length!==0){
  441. this.tableData = data;
  442. }else{
  443. this.tableData = [];
  444. }
  445. this.currentPage = current_page
  446. this.pagesize = per_page
  447. this.total = total
  448. })
  449. },
  450. //当前页码
  451. handleCurrentChange(page) {
  452. this.postVipInfoList(page)
  453. },
  454. //搜索
  455. searchEvent() {
  456. this.postVipInfoList(this.currentPage);
  457. },
  458. //时间的转换
  459. timeDate(date) {
  460. let d = new Date(date);
  461. let resDate = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();;
  462. return resDate;
  463. }
  464. }
  465. })
  466. </script>
  467. @endsection