index.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. <div class="row-content am-cf">
  2. <div class="row">
  3. <div class="am-u-sm-12 am-u-md-12 am-u-lg-12">
  4. <div class="widget am-cf">
  5. <div class="widget-head am-cf">
  6. <div class="widget-title am-cf">用户列表</div>
  7. </div>
  8. <div class="widget-body am-fr">
  9. <!-- 工具栏 -->
  10. <div class="page_toolbar am-margin-bottom-xs am-cf">
  11. <form class="toolbar-form" action="">
  12. <input type="hidden" name="s" value="/<?= $request->pathinfo() ?>">
  13. <div class="am-u-sm-12 am-u-md-9 am-u-sm-push-3">
  14. <div class="am fr">
  15. <div class="am-form-group am-fl">
  16. <?php $grade = $request->get('grade'); ?>
  17. <select name="grade"
  18. data-am-selected="{btnSize: 'sm', placeholder: '请选择会员等级'}">
  19. <option value=""></option>
  20. <?php foreach ($gradeList as $item): ?>
  21. <option value="<?= $item['grade_id'] ?>"
  22. <?= $grade == $item['grade_id'] ? 'selected' : '' ?>><?= $item['name'] ?>
  23. </option>
  24. <?php endforeach; ?>
  25. </select>
  26. </div>
  27. <div class="am-form-group am-fl">
  28. <?php $gender = $request->get('gender'); ?>
  29. <select name="gender"
  30. data-am-selected="{btnSize: 'sm', placeholder: '请选择性别'}">
  31. <option value=""></option>
  32. <option value="-1"
  33. <?= $gender === '-1' ? 'selected' : '' ?>>全部
  34. </option>
  35. <option value="1"
  36. <?= $gender === '1' ? 'selected' : '' ?>>男
  37. </option>
  38. <option value="2"
  39. <?= $gender === '2' ? 'selected' : '' ?>>女
  40. </option>
  41. <option value="0"
  42. <?= $gender === '0' ? 'selected' : '' ?>>未知
  43. </option>
  44. </select>
  45. </div>
  46. <div class="am-form-group am-fl">
  47. <div class="am-input-group am-input-group-sm tpl-form-border-form">
  48. <input type="text" class="am-form-field" name="nickName"
  49. placeholder="请输入微信昵称"
  50. value="<?= $request->get('nickName') ?>">
  51. <div class="am-input-group-btn">
  52. <button class="am-btn am-btn-default am-icon-search"
  53. type="submit"></button>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. </form>
  60. </div>
  61. <div class="am-scrollable-horizontal am-u-sm-12">
  62. <table width="100%" class="am-table am-table-compact am-table-striped
  63. tpl-table-black am-text-nowrap">
  64. <thead>
  65. <tr>
  66. <th>用户ID</th>
  67. <th>微信头像</th>
  68. <th>微信昵称</th>
  69. <th>手机号</th>
  70. <th>用户余额</th>
  71. <th>可用积分</th>
  72. <th>会员等级</th>
  73. <th>实际消费金额</th>
  74. <th>性别</th>
  75. <th>状态</th>
  76. <th>国家</th>
  77. <th>省份</th>
  78. <th>城市</th>
  79. <th>注册时间</th>
  80. <th>操作</th>
  81. </tr>
  82. </thead>
  83. <tbody>
  84. <?php if (!$list->isEmpty()): foreach ($list as $item): ?>
  85. <tr>
  86. <td class="am-text-middle"><?= $item['user_id'] ?></td>
  87. <td class="am-text-middle">
  88. <a href="<?= $item['avatarUrl'] ?>" title="点击查看大图" target="_blank">
  89. <img src="<?= $item['avatarUrl'] ?>" width="72" height="72" alt="">
  90. </a>
  91. </td>
  92. <td class="am-text-middle"><?= $item['nickName'] ?></td>
  93. <td class="am-text-middle"><?= $item['mobile'] ?></td>
  94. <td class="am-text-middle"><?= $item['balance'] ?></td>
  95. <td class="am-text-middle"><?= $item['points'] ?></td>
  96. <td class="am-text-middle">
  97. <?= !empty($item['grade']) ? $item['grade']['name'] : '--' ?>
  98. </td>
  99. <td class="am-text-middle"><?= $item['expend_money'] ?></td>
  100. <td class="am-text-middle"><?= $item['gender'] ?></td>
  101. <td class="am-text-middle">
  102. <?php if ($item['status'] == 1): ?>
  103. <span class="am-badge am-badge-success">正常</span>
  104. <?php elseif ($item['status'] == 2): ?>
  105. <span class="am-badge am-badge-warning">冻结</span>
  106. <?php else: ?>
  107. <span class="am-badge am-badge-danger">待审核</span>
  108. <?php endif; ?>
  109. </td>
  110. <td class="am-text-middle"><?= $item['country'] ?: '--' ?></td>
  111. <td class="am-text-middle"><?= $item['province'] ?: '--' ?></td>
  112. <td class="am-text-middle"><?= $item['city'] ?: '--' ?></td>
  113. <td class="am-text-middle"><?= $item['create_time'] ?></td>
  114. <td class="am-text-middle">
  115. <div class="tpl-table-black-operation">
  116. <?php if (checkPrivilege('user/edit')): ?>
  117. <a href="<?= url('user/edit',
  118. ['user_id' => $item['user_id']]) ?>">
  119. <i class="am-icon-pencil"></i> 编辑
  120. </a>
  121. <?php endif; ?>
  122. <?php if (checkPrivilege('user/recharge')): ?>
  123. <a class="j-recharge tpl-table-black-operation-default"
  124. href="javascript:void(0);"
  125. title="用户充值"
  126. data-id="<?= $item['user_id'] ?>"
  127. data-balance="<?= $item['balance'] ?>"
  128. data-points="<?= $item['points'] ?>"
  129. >
  130. <i class="iconfont icon-qiandai"></i>
  131. 充值
  132. </a>
  133. <?php endif; ?>
  134. <?php if (checkPrivilege('user/grade')): ?>
  135. <a class="j-grade tpl-table-black-operation-default"
  136. href="javascript:void(0);"
  137. data-id="<?= $item['user_id'] ?>"
  138. title="修改会员等级">
  139. <i class="iconfont icon-grade-o"></i>
  140. 会员等级
  141. </a>
  142. <?php endif; ?>
  143. <?php if (checkPrivilege('user/delete')): ?>
  144. <a class="j-delete tpl-table-black-operation-default"
  145. href="javascript:void(0);"
  146. data-id="<?= $item['user_id'] ?>" title="删除用户">
  147. <i class="am-icon-trash"></i> 删除
  148. </a>
  149. <?php endif; ?>
  150. <div class="j-opSelect operation-select am-dropdown">
  151. <button type="button"
  152. class="am-dropdown-toggle am-btn am-btn-sm am-btn-secondary">
  153. <span>更多</span>
  154. <span class="am-icon-caret-down"></span>
  155. </button>
  156. <ul class="am-dropdown-content" data-id="<?= $item['user_id'] ?>">
  157. <?php if (checkPrivilege('order/all_list')): ?>
  158. <li>
  159. <a class="am-dropdown-item" target="_blank"
  160. href="<?= url('order/all_list', ['user_id' => $item['user_id']]) ?>">用户订单</a>
  161. </li>
  162. <?php endif; ?>
  163. <?php if (checkPrivilege('user.recharge/order')): ?>
  164. <li>
  165. <a class="am-dropdown-item" target="_blank"
  166. href="<?= url('user.recharge/order', ['user_id' => $item['user_id']]) ?>">充值记录</a>
  167. </li>
  168. <?php endif; ?>
  169. <?php if (checkPrivilege('user.balance/log')): ?>
  170. <li>
  171. <a class="am-dropdown-item" target="_blank"
  172. href="<?= url('user.balance/log', ['user_id' => $item['user_id']]) ?>">余额明细</a>
  173. </li>
  174. <?php endif; ?>
  175. </ul>
  176. </div>
  177. </div>
  178. </td>
  179. </tr>
  180. <?php endforeach; else: ?>
  181. <tr>
  182. <td colspan="12" class="am-text-center">暂无记录</td>
  183. </tr>
  184. <?php endif; ?>
  185. </tbody>
  186. </table>
  187. </div>
  188. <div class="am-u-lg-12 am-cf">
  189. <div class="am-fr"><?= $list->render() ?> </div>
  190. <div class="am-fr pagination-total am-margin-right">
  191. <div class="am-vertical-align-middle">总记录:<?= $list->total() ?></div>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. <!-- 模板:修改会员等级 -->
  200. <script id="tpl-grade" type="text/template">
  201. <div class="am-padding-xs am-padding-top">
  202. <form class="am-form tpl-form-line-form" method="post" action="">
  203. <div class="am-tab-panel am-padding-0 am-active">
  204. <div class="am-form-group">
  205. <label class="am-u-sm-3 am-form-label form-require">
  206. 会员等级
  207. </label>
  208. <div class="am-u-sm-8 am-u-end">
  209. <select name="grade[grade_id]"
  210. data-am-selected="{btnSize: 'sm', placeholder: '请选择会员等级'}">
  211. <option value="0">无等级</option>
  212. <?php foreach ($gradeList as $item): ?>
  213. <option value="<?= $item['grade_id'] ?>"
  214. <?= $grade == $item['grade_id'] ? 'selected' : '' ?>><?= $item['name'] ?>
  215. </option>
  216. <?php endforeach; ?>
  217. </select>
  218. </div>
  219. </div>
  220. <div class="am-form-group">
  221. <label class="am-u-sm-3 am-form-label"> 管理员备注 </label>
  222. <div class="am-u-sm-8 am-u-end">
  223. <textarea rows="2" name="grade[remark]" placeholder="请输入管理员备注"
  224. class="am-field-valid"></textarea>
  225. </div>
  226. </div>
  227. </div>
  228. </form>
  229. </div>
  230. </script>
  231. <!-- 模板:用户充值 -->
  232. <script id="tpl-recharge" type="text/template">
  233. <div class="am-padding-xs am-padding-top-sm">
  234. <form class="am-form tpl-form-line-form" method="post" action="">
  235. <div class="j-tabs am-tabs">
  236. <ul class="am-tabs-nav am-nav am-nav-tabs">
  237. <li class="am-active"><a href="#tab1">充值余额</a></li>
  238. <li><a href="#tab2">充值积分</a></li>
  239. </ul>
  240. <div class="am-tabs-bd am-padding-xs">
  241. <div class="am-tab-panel am-padding-0 am-active" id="tab1">
  242. <div class="am-form-group">
  243. <label class="am-u-sm-3 am-form-label">
  244. 当前余额
  245. </label>
  246. <div class="am-u-sm-8 am-u-end">
  247. <div class="am-form--static">{{ balance }}</div>
  248. </div>
  249. </div>
  250. <div class="am-form-group">
  251. <label class="am-u-sm-3 am-form-label">
  252. 充值方式
  253. </label>
  254. <div class="am-u-sm-8 am-u-end">
  255. <label class="am-radio-inline">
  256. <input type="radio" name="recharge[balance][mode]"
  257. value="inc" data-am-ucheck checked>
  258. 增加
  259. </label>
  260. <label class="am-radio-inline">
  261. <input type="radio" name="recharge[balance][mode]" value="dec" data-am-ucheck>
  262. 减少
  263. </label>
  264. <label class="am-radio-inline">
  265. <input type="radio" name="recharge[balance][mode]" value="final" data-am-ucheck>
  266. 最终金额
  267. </label>
  268. </div>
  269. </div>
  270. <div class="am-form-group">
  271. <label class="am-u-sm-3 am-form-label">
  272. 变更金额
  273. </label>
  274. <div class="am-u-sm-8 am-u-end">
  275. <input type="number" min="0" class="tpl-form-input"
  276. placeholder="请输入要变更的金额" name="recharge[balance][money]" value="" required>
  277. </div>
  278. </div>
  279. <div class="am-form-group">
  280. <label class="am-u-sm-3 am-form-label">
  281. 管理员备注
  282. </label>
  283. <div class="am-u-sm-8 am-u-end">
  284. <textarea rows="2" name="recharge[balance][remark]" placeholder="请输入管理员备注"
  285. class="am-field-valid"></textarea>
  286. </div>
  287. </div>
  288. </div>
  289. <div class="am-tab-panel am-padding-0" id="tab2">
  290. <div class="am-form-group">
  291. <label class="am-u-sm-3 am-form-label">
  292. 当前积分
  293. </label>
  294. <div class="am-u-sm-8 am-u-end">
  295. <div class="am-form--static">{{ points }}</div>
  296. </div>
  297. </div>
  298. <div class="am-form-group">
  299. <label class="am-u-sm-3 am-form-label">
  300. 充值方式
  301. </label>
  302. <div class="am-u-sm-8 am-u-end">
  303. <label class="am-radio-inline">
  304. <input type="radio" name="recharge[points][mode]"
  305. value="inc" data-am-ucheck checked>
  306. 增加
  307. </label>
  308. <label class="am-radio-inline">
  309. <input type="radio" name="recharge[points][mode]" value="dec" data-am-ucheck>
  310. 减少
  311. </label>
  312. <label class="am-radio-inline">
  313. <input type="radio" name="recharge[points][mode]" value="final" data-am-ucheck>
  314. 最终积分
  315. </label>
  316. </div>
  317. </div>
  318. <div class="am-form-group">
  319. <label class="am-u-sm-3 am-form-label">
  320. 变更数量
  321. </label>
  322. <div class="am-u-sm-8 am-u-end">
  323. <input type="number" min="0" class="tpl-form-input"
  324. placeholder="请输入要变更的数量" name="recharge[points][value]" value="" required>
  325. </div>
  326. </div>
  327. <div class="am-form-group">
  328. <label class="am-u-sm-3 am-form-label">
  329. 管理员备注
  330. </label>
  331. <div class="am-u-sm-8 am-u-end">
  332. <textarea rows="2" name="recharge[points][remark]" placeholder="请输入管理员备注"
  333. class="am-field-valid"></textarea>
  334. </div>
  335. </div>
  336. </div>
  337. </div>
  338. </div>
  339. </form>
  340. </div>
  341. </script>
  342. <script>
  343. $(function () {
  344. /**
  345. * 账户充值
  346. */
  347. $('.j-recharge').on('click', function () {
  348. var $tabs, data = $(this).data();
  349. $.showModal({
  350. title: '用户充值'
  351. , area: '460px'
  352. , content: template('tpl-recharge', data)
  353. , uCheck: true
  354. , success: function ($content) {
  355. $tabs = $content.find('.j-tabs');
  356. $tabs.tabs({noSwipe: 1});
  357. }
  358. , yes: function ($content) {
  359. $content.find('form').myAjaxSubmit({
  360. url: '<?= url('user/recharge') ?>',
  361. data: {
  362. user_id: data.id,
  363. source: $tabs.data('amui.tabs').activeIndex
  364. }
  365. });
  366. return true;
  367. }
  368. });
  369. });
  370. /**
  371. * 修改会员等级
  372. */
  373. $('.j-grade').on('click', function () {
  374. var data = $(this).data();
  375. $.showModal({
  376. title: '修改会员等级'
  377. , area: '460px'
  378. , content: template('tpl-grade', data)
  379. , uCheck: true
  380. , success: function ($content) {
  381. }
  382. , yes: function ($content) {
  383. $content.find('form').myAjaxSubmit({
  384. url: '<?= url('user/grade') ?>',
  385. data: {user_id: data.id}
  386. });
  387. return true;
  388. }
  389. });
  390. });
  391. /**
  392. * 注册操作事件
  393. * @type {jQuery|HTMLElement}
  394. */
  395. var $dropdown = $('.j-opSelect');
  396. $dropdown.dropdown();
  397. $dropdown.on('click', 'li a', function () {
  398. var $this = $(this);
  399. var id = $this.parent().parent().data('id');
  400. var type = $this.data('type');
  401. if (type === 'delete') {
  402. layer.confirm('删除后不可恢复,确定要删除吗?', function (index) {
  403. $.post("index.php?s=/store/apps.dealer.user/delete", {dealer_id: id}, function (result) {
  404. result.code === 1 ? $.show_success(result.msg, result.url)
  405. : $.show_error(result.msg);
  406. });
  407. layer.close(index);
  408. });
  409. }
  410. $dropdown.dropdown('close');
  411. });
  412. // 删除元素
  413. var url = "<?= url('user/delete') ?>";
  414. $('.j-delete').delete('user_id', url, '删除后不可恢复,确定要删除吗?');
  415. });
  416. </script>