index.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. {extend name="public/container"}
  2. {block name="head_top"}
  3. <script src="{__PLUG_PATH}city.js"></script>
  4. <style>
  5. .layui-btn-xs{margin-left: 0px !important;}
  6. legend{
  7. width: auto;
  8. border: none;
  9. font-weight: 700 !important;
  10. }
  11. .site-demo-button{
  12. padding-bottom: 20px;
  13. padding-left: 10px;
  14. }
  15. .layui-form-label{
  16. width: auto;
  17. }
  18. .layui-input-block input{
  19. width: 50%;
  20. height: 34px;
  21. }
  22. .layui-form-item{
  23. margin-bottom: 0;
  24. }
  25. .layui-input-block .time-w{
  26. width: 200px;
  27. }
  28. .layui-table-body{overflow-x: hidden;}
  29. .layui-btn-group button i{
  30. line-height: 30px;
  31. margin-right: 3px;
  32. vertical-align: bottom;
  33. }
  34. .back-f8{
  35. background-color: #F8F8F8;
  36. }
  37. .layui-input-block button{
  38. border: 1px solid #e5e5e5;
  39. }
  40. .avatar{width: 50px;height: 50px;}
  41. .layui-table-body{
  42. overflow-x: unset;
  43. }
  44. </style>
  45. {/block}
  46. {block name="content"}
  47. <div class="row">
  48. <div class="col-sm-12">
  49. <div class="ibox float-e-margins">
  50. <div class="ibox-title">
  51. <h5>会员搜索</h5>
  52. <div class="ibox-tools">
  53. <a class="collapse-link">
  54. <i class="fa fa-chevron-up"></i>
  55. </a>
  56. </div>
  57. </div>
  58. <div class="ibox-content" style="display: block;">
  59. <form class="layui-form">
  60. <div class="layui-form-item">
  61. <div class="layui-inline">
  62. <label class="layui-form-label">姓名编号:</label>
  63. <div class="layui-input-inline">
  64. <input type="text" name="nickname" lay-verify="nickname" style="width: 100%" autocomplete="off" placeholder="会员卡/手机号" class="layui-input">
  65. </div>
  66. <label class="layui-form-label">
  67. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="" lay-filter="search" >
  68. <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索</button>
  69. </label>
  70. </div>
  71. </div>
  72. <div class="layui-form-item">
  73. </div>
  74. </form>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="row">
  80. <div class="col-sm-12">
  81. <div class="ibox">
  82. <div class="ibox-content">
  83. <div class="table-responsive">
  84. <div class="layui-btn-group conrelTable">
  85. <button class="layui-btn layui-btn-sm layui-btn-normal" type="button" data-type="refresh"><i class="layui-icon layui-icon-refresh" ></i>刷新</button>
  86. </div>
  87. <table class="layui-hide" id="userList" lay-filter="userList"></table>
  88. <script type="text/html" id="nickname">
  89. {{d.nickname}}
  90. {{# if(d.vip_name){ }}
  91. <p style="color:#dab176">{{d.vip_name}}</p>
  92. {{# } }}
  93. </script>
  94. <script type="text/html" id="data_time">
  95. <div >首次:{{d.add_time}}</div>
  96. <div >最近:{{d.last_time}}</div>
  97. </script>
  98. <script type="text/html" id="checkboxstatus">
  99. <input type='checkbox' name='status' lay-skin='switch' value="{{d.uid}}" lay-filter='status' lay-text='正常|禁止' {{ d.status == 1 ? 'checked' : '' }}>
  100. </script>
  101. <script type="text/html" id="barDemo">
  102. <button type="button" class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</button>
  103. <button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作 <span class="caret"></span></button>
  104. <ul class="layui-nav-child layui-anim layui-anim-upbit">
  105. <li>
  106. <a href="javascript:void(0);" lay-event="pay">
  107. <i class="layui-icon layui-icon-edit"></i> 充值</a>
  108. </li>
  109. <li>
  110. <a href="javascript:void(0);" lay-event="see">
  111. <i class="layui-icon layui-icon-edit"></i> 会员详情</a>
  112. </li>
  113. <li>
  114. <a href="javascript:void(0);" lay-event="give_level">
  115. <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 修改会员等级</a>
  116. </li>
  117. <li>
  118. <a href="javascript:void(0);" lay-event="set_group">
  119. <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 设置分组</a>
  120. </li>
  121. {{# if(d.vip_name){ }}
  122. <li>
  123. <a href="javascript:void(0);" lay-event="del_level">
  124. <i class="layui-icon layui-icon-close-fill" aria-hidden="true"></i> 清除等级</a>
  125. </li>
  126. {{# } }}
  127. </ul>
  128. </script>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. <script src="{__ADMIN_PATH}js/layuiList.js"></script>
  135. <script src="{__FRAME_PATH}js/content.min.js?v=1.0.0"></script>
  136. {/block}
  137. {block name="script"}
  138. <script>
  139. layList.form.render();
  140. layList.tableList('userList',"{:Url('lst')}",function () {
  141. return [
  142. {type:'checkbox'},
  143. {field: 'uid', title: '编号',event:'uid',width:'4%',align:'center'},
  144. {field: 'avatar', title: '头像', event:'open_image', width: '6%',align:'center', templet: '<p lay-event="open_image"><img class="avatar" style="cursor: pointer" class="open_image" data-image="{{d.avatar}}" src="{{d.avatar}}" alt="{{d.nickname}}"></p>'},
  145. {field: 'nickname', title: '姓名',templet:'#nickname',align:'center'},
  146. {field: 'card_no', title: '会员卡号',align:'center'},
  147. {field: 'phone', title: '手机号',align:'center',width:'8%'},
  148. {field: 'now_money', title: '余额',width:'6%',sort:true,event:'now_money',align:'center'},
  149. {field: 'consumer', title: '消费券',align:'center',width:'8%'},
  150. {field: 'stock_rights', title: '会员股权',align:'center',width:'8%'},
  151. {field: 'consume_rights', title: '消费股权',width:'6%',align:'center'},
  152. {field: 'consume_year', title: '当年消费额',width:'6%',align:'center'},
  153. {field: 'consume_sum', title: '累计消费',width:'6%',align:'center'},
  154. ];
  155. });
  156. //页面刷新时加载
  157. layui.use('layer',function(){
  158. var layer = layui.layer;
  159. layer.ready(function(){
  160. var html = '';
  161. $.each(level,function (index,item) {
  162. html += '<option value="'+item.id+'">'+item.name+'</option>';
  163. })
  164. $('#level-top').val('');
  165. $('#level-top').siblings().remove();
  166. $('#level-top').after(html);
  167. layList.form.render('select');
  168. var htmls = '';
  169. $.each(group,function (index,item) {
  170. htmls += '<option value="'+item.id+'">'+item.group_name+'</option>';
  171. })
  172. $('#group-top').val('');
  173. $('#group-top').siblings().remove();
  174. $('#group-top').after(htmls);
  175. layList.form.render('select');
  176. });
  177. });
  178. layList.date('last_time');
  179. layList.date('add_time');
  180. layList.date('user_time');
  181. layList.date('time');
  182. //监听并执行 uid 的排序
  183. layList.sort(function (obj) {
  184. var layEvent = obj.field;
  185. var type = obj.type;
  186. switch (layEvent){
  187. case 'uid':
  188. layList.reload({order: layList.order(type,'u.uid')},true,null,obj);
  189. break;
  190. case 'now_money':
  191. layList.reload({order: layList.order(type,'u.now_money')},true,null,obj);
  192. break;
  193. case 'integral':
  194. layList.reload({order: layList.order(type,'u.integral')},true,null,obj);
  195. break;
  196. }
  197. });
  198. //监听并执行 uid 的排序
  199. layList.tool(function (event,data,obj) {
  200. var layEvent = event;
  201. switch (layEvent){
  202. case 'edit':
  203. $eb.createModalFrame('编辑',layList.Url({a:'edit',p:{uid:data.uid}}));
  204. break;
  205. case 'see':
  206. $eb.createModalFrame(data.nickname+'-会员详情',layList.Url({a:'see',p:{uid:data.uid}}));
  207. break;
  208. case 'del_level':
  209. $eb.$swal('delete',function(){
  210. $eb.axios.get(layList.U({a:'del_level',q:{uid:data.uid}})).then(function(res){
  211. if(res.status == 200 && res.data.code == 200) {
  212. $eb.$swal('success',res.data.msg);
  213. obj.update({vip_name:false});
  214. layList.reload();
  215. }else
  216. return Promise.reject(res.data.msg || '删除失败')
  217. }).catch(function(err){
  218. $eb.$swal('error',err);
  219. });
  220. },{
  221. title:'您确定要清除【'+data.nickname+'】的会员等级吗?',
  222. text:'清除后无法恢复请谨慎操作',
  223. confirm:'是的我要清除'
  224. })
  225. break;
  226. case 'give_level':
  227. $eb.createModalFrame(data.nickname+'-赠送会员',layList.Url({a:'give_level',p:{uid:data.uid}}),{w:500,h:300});
  228. break;
  229. case 'set_group':
  230. $eb.createModalFrame(data.nickname+'-设置分组',layList.Url({a:'set_group',p:{uid:data.uid}}),{w:500,h:300});
  231. break;
  232. case 'money':
  233. $eb.createModalFrame(data.nickname+'-积分余额修改',layList.Url({a:'edit_other',p:{uid:data.uid}}));
  234. break;
  235. case 'pay':
  236. $eb.createModalFrame(data.nickname+'-账号充值',layList.Url({a:'pay',p:{uid:data.uid}}));
  237. break;
  238. case 'open_image':
  239. $eb.openImage(data.avatar);
  240. break;
  241. }
  242. });
  243. //layList.sort('uid');
  244. //监听并执行 now_money 的排序
  245. // layList.sort('now_money');
  246. //监听 checkbox 的状态
  247. layList.switch('status',function (odj,value,name) {
  248. if(odj.elem.checked==true){
  249. layList.baseGet(layList.Url({a:'set_status',p:{status:1,uid:value}}),function (res) {
  250. layList.msg(res.msg);
  251. });
  252. }else{
  253. layList.baseGet(layList.Url({a:'set_status',p:{status:0,uid:value}}),function (res) {
  254. layList.msg(res.msg);
  255. });
  256. }
  257. });
  258. layList.search('search',function(where){
  259. if(where['user_time_type'] != '' && where['user_time'] == '') return layList.msg('请选择选择时间');
  260. if(where['user_time_type'] == '' && where['user_time'] != '') return layList.msg('请选择访问情况');
  261. layList.reload(where,true);
  262. });
  263. var action={
  264. set_status_f:function () {
  265. var ids=layList.getCheckData().getIds('uid');
  266. if(ids.length){
  267. layList.basePost(layList.Url({a:'set_status',p:{is_echo:1,status:0}}),{uids:ids},function (res) {
  268. layList.msg(res.msg);
  269. layList.reload();
  270. });
  271. }else{
  272. layList.msg('请选择要封禁的会员');
  273. }
  274. },
  275. set_status_j:function () {
  276. var ids=layList.getCheckData().getIds('uid');
  277. if(ids.length){
  278. layList.basePost(layList.Url({a:'set_status',p:{is_echo:1,status:1}}),{uids:ids},function (res) {
  279. layList.msg(res.msg);
  280. layList.reload();
  281. });
  282. }else{
  283. layList.msg('请选择要解封的会员');
  284. }
  285. },
  286. set_grant:function () {
  287. var ids=layList.getCheckData().getIds('uid');
  288. if(ids.length){
  289. var str = ids.join(',');
  290. $eb.createModalFrame('发送优惠券',layList.Url({c:'ump.store_coupon',a:'grant',p:{id:str}}),{'w':800});
  291. }else{
  292. layList.msg('请选择要发送优惠券的会员');
  293. }
  294. },
  295. set_template:function () {
  296. var ids=layList.getCheckData().getIds('uid');
  297. if(ids.length){
  298. var str = ids.join(',');
  299. }else{
  300. layList.msg('请选择要发送模板消息的会员');
  301. }
  302. },
  303. set_info:function () {
  304. var ids=layList.getCheckData().getIds('uid');
  305. if(ids.length){
  306. var str = ids.join(',');
  307. $eb.createModalFrame('发送站内信息',layList.Url({c:'user.user_notice',a:'notice',p:{id:str}}),{'w':1200});
  308. }else{
  309. layList.msg('请选择要发送站内信息的会员');
  310. }
  311. },
  312. set_custom:function () {
  313. var ids=layList.getCheckData().getIds('uid');
  314. if(ids.length){
  315. var str = ids.join(',');
  316. $eb.createModalFrame('发送客服图文消息',layList.Url({c:'wechat.wechat_news_category',a:'send_news',p:{id:str,type:1}}),{'w':1200});
  317. }else{
  318. layList.msg('请选择要发送客服图文消息的会员');
  319. }
  320. },
  321. set_group:function () {
  322. var ids=layList.getCheckData().getIds('uid');
  323. if(ids.length){
  324. var str = ids.join(',');
  325. $eb.createModalFrame('批量设置分组',layList.Url({a:'set_group',p:{uid:str}}),{w:500,h:300});
  326. }else{
  327. layList.msg('请选择要批量设置分组的会员');
  328. }
  329. },
  330. refresh:function () {
  331. layList.reload();
  332. }
  333. };
  334. $('.conrelTable').find('button').each(function () {
  335. var type=$(this).data('type');
  336. $(this).on('click',function () {
  337. action[type] && action[type]();
  338. })
  339. })
  340. $(document).on('click',".open_image",function (e) {
  341. var image = $(this).data('image');
  342. $eb.openImage(image);
  343. })
  344. //下拉框
  345. $(document).click(function (e) {
  346. $('.layui-nav-child').hide();
  347. })
  348. function dropdown(that){
  349. var oEvent = arguments.callee.caller.arguments[0] || event;
  350. oEvent.stopPropagation();
  351. var offset = $(that).offset();
  352. var top=offset.top-$(window).scrollTop();
  353. var index = $(that).parents('tr').data('index');
  354. $('.layui-nav-child').each(function (key) {
  355. if (key != index) {
  356. $(this).hide();
  357. }
  358. })
  359. if($(document).height() < top+$(that).next('ul').height()){
  360. $(that).next('ul').css({
  361. 'padding': 10,
  362. 'top': - ($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height()/2),
  363. 'left':offset.left-$(that).parents('td').offset().left-20,
  364. 'min-width': 'inherit',
  365. 'position': 'absolute'
  366. }).toggle();
  367. }else{
  368. $(that).next('ul').css({
  369. 'padding': 10,
  370. 'top':$(that).parent('td').height() / 2 + $(that).height(),
  371. 'left':offset.left-$(that).parents('td').offset().left-20,
  372. 'min-width': 'inherit',
  373. 'position': 'absolute'
  374. }).toggle();
  375. }
  376. }
  377. </script>
  378. {/block}