index.php 24 KB

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