index.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>浏览页面</title>
  6. <link rel="stylesheet" href="/app/admin/component/pear/css/pear.css"/>
  7. <link rel="stylesheet" href="/app/admin/admin/css/reset.css"/>
  8. </head>
  9. <body class="pear-container">
  10. <!-- 顶部查询表单 -->
  11. <div class="layui-card">
  12. <div class="layui-tab" lay-filter="demo">
  13. </div>
  14. <div class="layui-card-body">
  15. <form class="layui-form top-search-from">
  16. <div class="layui-form-item">
  17. <label class="layui-form-label">用户名称</label>
  18. <div class="layui-input-block">
  19. <div class="layui-input-block">
  20. <input type="text" autocomplete="off" name="user_name" class="layui-input">
  21. </div>
  22. </div>
  23. </div>
  24. <div class="layui-form-item">
  25. <label class="layui-form-label">电话</label>
  26. <div class="layui-input-block">
  27. <div class="layui-input-block">
  28. <input type="text" autocomplete="off" name="user_mobile" class="layui-input">
  29. </div>
  30. </div>
  31. </div>
  32. <div class="layui-form-item">
  33. <label class="layui-form-label">状态</label>
  34. <div class="layui-input-block">
  35. <div name="status" id="status" value=""></div>
  36. </div>
  37. </div>
  38. <div class="layui-form-item">
  39. <label class="layui-form-label">是否支付</label>
  40. <div class="layui-input-block">
  41. <div name="is_buy" id="is_buy" value=""></div>
  42. </div>
  43. </div>
  44. <input type="hidden" name="type" value="1">
  45. <div class="layui-form-item">
  46. <label class="layui-form-label">提交时间</label>
  47. <div class="layui-input-block">
  48. <div class="layui-input-block" id="created_at">
  49. <input type="text" autocomplete="off" name="created_at[]" id="created_at-date-start"
  50. class="layui-input inline-block" placeholder="开始时间">
  51. -
  52. <input type="text" autocomplete="off" name="created_at[]" id="created_at-date-end"
  53. class="layui-input inline-block" placeholder="结束时间">
  54. </div>
  55. </div>
  56. </div>
  57. <div class="layui-form-item layui-inline">
  58. <label class="layui-form-label"></label>
  59. <button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query">
  60. <i class="layui-icon layui-icon-search"></i>查询
  61. </button>
  62. <button type="reset" class="pear-btn pear-btn-md" lay-submit lay-filter="table-reset">
  63. <i class="layui-icon layui-icon-refresh"></i>重置
  64. </button>
  65. </div>
  66. <div class="toggle-btn">
  67. <a class="layui-hide">展开<i class="layui-icon layui-icon-down"></i></a>
  68. <a class="layui-hide">收起<i class="layui-icon layui-icon-up"></i></a>
  69. </div>
  70. </form>
  71. </div>
  72. </div>
  73. <!-- 数据表格 -->
  74. <div class="layui-card">
  75. <div class="layui-card-body">
  76. <table id="data-table" lay-filter="data-table"></table>
  77. </div>
  78. </div>
  79. <!-- 表格顶部工具栏 -->
  80. <script type="text/html" id="table-toolbar">
  81. <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="pass" permission="app.admin.usercark.insert">
  82. 开通
  83. </button>
  84. <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="release" permission="app.admin.usercark.insert">
  85. 更新卡信息
  86. </button>
  87. <button class="pear-btn pear-btn-primary pear-btn-md" lay-event="topup" permission="app.admin.usercark.topup">
  88. 充值
  89. </button>
  90. <button class="pear-btn pear-btn-danger pear-btn-md" lay-event="again" permission="app.admin.usercark.insert">
  91. 重新开卡
  92. </button>
  93. </script>
  94. <!-- 表格行工具栏 -->
  95. <script type="text/html" id="table-bar">
  96. <button class="pear-btn pear-btn-xs tool-btn" lay-event="record" permission="app.admin.usercark.record">消费记录</button>
  97. <!-- <button class="pear-btn pear-btn-xs tool-btn" lay-event="release" permission="app.admin.withdraw.update">更新卡信息</button>-->
  98. <button class="pear-btn pear-btn-xs tool-btn" lay-event="edit" permission="app.admin.usercark.update">编辑</button>
  99. </script>
  100. <script src="/app/admin/component/layui/layui.js?v=2.8.12"></script>
  101. <script src="/app/admin/component/pear/pear.js"></script>
  102. <script src="/app/admin/admin/js/permission.js"></script>
  103. <script src="/app/admin/admin/js/common.js"></script>
  104. <script>
  105. // 相关常量
  106. const PRIMARY_KEY = "id";
  107. const SELECT_API = "/app/admin/usercark/select";
  108. const PASS_API = "/app/admin/usercark/pass";
  109. const RELEASE_API = "/app/admin/usercark/release";
  110. const REJECT_API = "/app/admin/usercark/reject";
  111. const UPDATE_URL = "/app/admin/usercark/update";
  112. const TOPIUP_URL = "/app/admin/usercark/topup";
  113. const AGAIN_URL = "/app/admin/usercark/again";
  114. layui.use('element', function () {
  115. var $ = layui.jquery
  116. , element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
  117. });
  118. // 字段 状态 1 待审核 2审核通过 3驳回 status
  119. layui.use(["jquery", "xmSelect"], function () {
  120. let value = layui.$("#status").attr("value");
  121. let initValue = value ? value.split(",") : [];
  122. layui.xmSelect.render({
  123. el: "#status",
  124. name: "status",
  125. filterable: true,
  126. initValue: initValue,
  127. model: {"icon": "hidden", "label": {"type": "text"}},
  128. clickClose: true,
  129. radio: true,
  130. data: [{value: 1, name: '待审核'}, {value: 2, name: '开卡中'}, {value: 3, name: '开户完成'}, {
  131. value: 4,
  132. name: '待邮寄'
  133. }],
  134. })
  135. });
  136. layui.use(["jquery", "xmSelect"], function () {
  137. let value = layui.$("#is_buy").attr("value");
  138. let initValue = value ? value.split(",") : [];
  139. layui.xmSelect.render({
  140. el: "#is_buy",
  141. name: "is_buy",
  142. filterable: true,
  143. initValue: initValue,
  144. model: {"icon": "hidden", "label": {"type": "text"}},
  145. clickClose: true,
  146. radio: true,
  147. data: [{value: 1, name: '未支付'}, {value: 2, name: '已支付'}],
  148. })
  149. });
  150. layui.use(["jquery", "xmSelect"], function () {
  151. let value = layui.$("#type").attr("value");
  152. let initValue = value ? value.split(",") : [];
  153. layui.xmSelect.render({
  154. el: "#type",
  155. name: "type",
  156. filterable: true,
  157. initValue: initValue,
  158. model: {"icon": "hidden", "label": {"type": "text"}},
  159. clickClose: true,
  160. radio: true,
  161. data: [{value: 1, name: '银行卡'}, {value: 2, name: '个人'}],
  162. })
  163. });
  164. // 字段 提交时间 created_at
  165. layui.use(["laydate"], function () {
  166. layui.laydate.render({
  167. elem: "#created_at",
  168. range: ["#created_at-date-start", "#created_at-date-end"],
  169. type: "datetime",
  170. });
  171. })
  172. // 表格渲染
  173. layui.use(["table", "form", "common", "popup", "util", "element", "drawer",'dropdown'], function () {
  174. let dropdown = layui.dropdown;
  175. let drawer = layui.drawer;
  176. let table = layui.table;
  177. let form = layui.form;
  178. let $ = layui.$;
  179. let common = layui.common;
  180. let util = layui.util;
  181. let element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
  182. // 表头参数
  183. let cols = [
  184. {
  185. type: "checkbox",
  186. align: "center"
  187. }, {
  188. minWidth: 100,
  189. title: "编号", align: "center",
  190. field: "id",
  191. }, {
  192. minWidth: 100,
  193. title: "会员名称", align: "center",
  194. field: "user_name",
  195. }, {
  196. minWidth: 150,
  197. title: "会员电话", align: "center",
  198. field: "user_mobile",
  199. }, {
  200. width: 120,
  201. title: "卡号", align: "center",
  202. field: "card_num",
  203. sort: true,
  204. }, {
  205. width: 120,
  206. title: "卡片总额度", align: "center",
  207. field: "limit",
  208. sort: true,
  209. }, {
  210. width: 120,
  211. title: "可用额度", align: "center",
  212. field: "use_limit",
  213. sort: true,
  214. }, {
  215. width: 120,
  216. title: "排名", align: "center",
  217. field: "ranking",
  218. sort: true,
  219. }, {
  220. width: 100,
  221. title: "平台状态", align: "center",
  222. field: "status",
  223. templet: function (d) {
  224. let field = "status";
  225. if (typeof d[field] == "undefined") return "";
  226. let items = [];
  227. layui.each((d[field] + "").split(","), function (k, v) {
  228. items.push(apiResults[field][v] || v);
  229. });
  230. return util.escape(items.join(","));
  231. }
  232. }, {
  233. width: 100,
  234. title: "虚拟卡状态", align: "center",
  235. field: "flag",
  236. templet: function (d) {
  237. let field = "flag";
  238. if (typeof d[field] == "undefined") return "";
  239. let items = [];
  240. layui.each((d[field] + "").split(","), function (k, v) {
  241. items.push(apiResults[field][v] || v);
  242. });
  243. return util.escape(items.join(","));
  244. }
  245. }, {
  246. width: 100,
  247. title: "是否支付", align: "center",
  248. field: "is_buy",
  249. templet: function (d) {
  250. let field = "is_buy";
  251. if (typeof d[field] == "undefined") return "";
  252. let items = [];
  253. layui.each((d[field] + "").split(","), function (k, v) {
  254. items.push(apiResults[field][v] || v);
  255. });
  256. return util.escape(items.join(","));
  257. }
  258. }, {
  259. width: 120,
  260. title: "有效期", align: "center",
  261. field: "validity",
  262. sort: true,
  263. }, {
  264. width: 120,
  265. title: "安全码", align: "center",
  266. field: "safety_code",
  267. sort: true,
  268. }, {
  269. width: 120,
  270. title: "开卡时间", align: "center",
  271. field: "create_date",
  272. sort: true,
  273. }, {
  274. minWidth: 200,
  275. title: "名称", align: "center",
  276. field: "name",
  277. }, {
  278. minWidth: 200,
  279. title: "身份证", align: "center",
  280. field: "number",
  281. },
  282. {
  283. width: 120,
  284. title: "手机号", align: "center",
  285. field: "mobile",
  286. sort: true,
  287. }, {
  288. width: 120,
  289. title: "地址", align: "center",
  290. field: "address",
  291. sort: true,
  292. },
  293. {
  294. width: 170,
  295. title: "提交时间", align: "center",
  296. field: "updated_at",
  297. sort: true,
  298. }, {
  299. title: "操作",
  300. toolbar: "#table-bar",
  301. align: "center",
  302. fixed: "right",
  303. width: 150,
  304. }
  305. ];
  306. // 渲染表格
  307. table.render({
  308. elem: "#data-table",
  309. url: SELECT_API,
  310. page: true,
  311. cols: [cols],
  312. skin: "line",
  313. size: "lg",
  314. where: {
  315. type: $('input[name=type]').val()
  316. },
  317. toolbar: "#table-toolbar",
  318. autoSort: false,
  319. defaultToolbar: [{
  320. title: "刷新",
  321. layEvent: "refresh",
  322. icon: "layui-icon-refresh",
  323. }, "filter", "print", "exports"],
  324. done: function () {
  325. layer.photos({photos: 'div[lay-id="data-table"]', anim: 5});
  326. }
  327. });
  328. element.on('tab(demo)', function (elem) {
  329. $('input[name=type]').val($(this).attr('lay-id'))
  330. table.reload("data-table", {
  331. where: {
  332. type: $('input[name=type]').val()
  333. },
  334. })
  335. });
  336. // 获取表格中下拉或树形组件数据
  337. let apiResults = {};//[{value:1,name:'待审核'},{value:2,name:'审核通过'},{value:3,name:'驳回'}],
  338. apiResults["status"] = {1: "待审核", 2: "开卡中", 3: "开卡完成", 4: "待邮寄"};
  339. apiResults["flag"] = {0: "正常", 1: "冻结", 2: "删除", 3: "锁定", 4: "注销"};
  340. apiResults["is_buy"] = { 1: "未支付", 2: "已支付"};
  341. // 编辑或删除行事件
  342. table.on("tool(data-table)", function (obj) {
  343. if (obj.event === "remove") {
  344. remove(obj);
  345. } else if (obj.event === "edit") {
  346. edit(obj);
  347. }else if(obj.event === "record"){
  348. //消费记录
  349. record(obj);
  350. }
  351. });
  352. // 表格顶部工具栏事件
  353. table.on("toolbar(data-table)", function (obj) {
  354. if (obj.event === "refresh") {
  355. refreshTable();
  356. } else if (obj.event === "reject") {
  357. reject(obj);
  358. } else if (obj.event === "pass") {
  359. pass(obj);
  360. } else if (obj.event === "release") {
  361. release(obj);
  362. } else if (obj.event === "topup") {
  363. topup(obj);
  364. }else if (obj.event === "again") {
  365. again(obj);
  366. }
  367. });
  368. // 表格顶部搜索事件
  369. form.on("submit(table-query)", function (data) {
  370. table.reload("data-table", {
  371. page: {
  372. curr: 1
  373. },
  374. where: data.field
  375. })
  376. return false;
  377. });
  378. // 表格顶部搜索重置事件
  379. form.on("submit(table-reset)", function (data) {
  380. table.reload("data-table", {
  381. where: {
  382. type: $('input[name=type]').val()
  383. },
  384. })
  385. });
  386. // 表格排序事件
  387. table.on("sort(data-table)", function (obj) {
  388. table.reload("data-table", {
  389. initSort: obj,
  390. scrollPos: "fixed",
  391. where: {
  392. field: obj.field,
  393. order: obj.type,
  394. type: $('input[name=type]').val()
  395. }
  396. });
  397. });
  398. let record=function(obj) {
  399. let value = obj.data[PRIMARY_KEY];
  400. drawer.open({
  401. legacy: false,
  402. title: ['消费信息', 'font-size:16px;color:#2d8cf0'],
  403. offset: 'r',
  404. area: "80%",
  405. maxmin: true,
  406. closeBtn: 1,
  407. iframe: '/app/admin/usercark/record'+ "?" + PRIMARY_KEY + "=" + value
  408. })
  409. }
  410. // 表格编辑数据
  411. let edit = function (obj) {
  412. let value = obj.data[PRIMARY_KEY];
  413. drawer.open({
  414. legacy: false,
  415. title: ['修改', 'font-size:16px;color:#2d8cf0'],
  416. offset: 'r',
  417. area: "80%",
  418. maxmin: true,
  419. closeBtn: 1,
  420. iframe: UPDATE_URL + "?" + PRIMARY_KEY + "=" + value
  421. })
  422. }
  423. // 充值
  424. let topup = function (obj) {
  425. // 创建弹框,设置类型为密码输入
  426. layer.prompt({title: '请输入充值金额', formType: 0}, function (money, index) {
  427. layer.close(index); // 关闭弹框
  428. let checkIds = common.checkField(obj, PRIMARY_KEY);
  429. if (checkIds === "") {
  430. layui.popup.warning("未选中数据");
  431. return false;
  432. }
  433. let data = {};
  434. data[PRIMARY_KEY] = checkIds.split(",");
  435. data['operate_money'] = money;
  436. layer.confirm("确认充值吗?", {
  437. icon: 3,
  438. title: "提示"
  439. }, function (index) {
  440. layer.close(index);
  441. let loading = layer.load();
  442. $.ajax({
  443. url: TOPIUP_URL,
  444. data: data,
  445. dataType: "json",
  446. type: "post",
  447. success: function (res) {
  448. layer.close(loading);
  449. if (res.code == 0) {
  450. return layui.popup.success("操作成功", refreshTable);
  451. }
  452. return layui.popup.failure(res.msg);
  453. }
  454. })
  455. });
  456. });
  457. }
  458. // 删除多行
  459. let pass = function (obj) {
  460. let checkIds = common.checkField(obj, PRIMARY_KEY);
  461. if (checkIds === "") {
  462. layui.popup.warning("未选中数据");
  463. return false;
  464. }
  465. let data = {};
  466. data[PRIMARY_KEY] = checkIds.split(",");
  467. layer.confirm("确认审核通过吗?", {
  468. icon: 3,
  469. title: "提示"
  470. }, function (index) {
  471. layer.close(index);
  472. let loading = layer.load();
  473. $.ajax({
  474. url: PASS_API,
  475. data: data,
  476. dataType: "json",
  477. type: "post",
  478. success: function (res) {
  479. layer.close(loading);
  480. if (res.code == 0) {
  481. return layui.popup.success("操作成功", refreshTable);
  482. }
  483. return layui.popup.failure(res.msg);
  484. }
  485. })
  486. });
  487. }
  488. let release = function (obj) {
  489. // 创建弹框,设置类型为密码输入
  490. let checkIds = common.checkField(obj, PRIMARY_KEY);
  491. if (checkIds === "") {
  492. layui.popup.warning("未选中数据");
  493. return false;
  494. }
  495. let data = {};
  496. data[PRIMARY_KEY] = checkIds.split(",");
  497. layer.confirm("确认发布吗?", {
  498. icon: 3,
  499. title: "提示"
  500. }, function (index) {
  501. layer.close(index);
  502. let loading = layer.load();
  503. $.ajax({
  504. url: RELEASE_API,
  505. data: data,
  506. dataType: "json",
  507. type: "post",
  508. success: function (res) {
  509. layer.close(loading);
  510. if (res.code == 0) {
  511. return layui.popup.success("操作成功", refreshTable);
  512. }
  513. return layui.popup.failure(res.msg);
  514. }
  515. })
  516. });
  517. }
  518. let again = function (obj) {
  519. // 创建弹框,设置类型为密码输入
  520. let checkIds = common.checkField(obj, PRIMARY_KEY);
  521. if (checkIds === "") {
  522. layui.popup.warning("未选中数据");
  523. return false;
  524. }
  525. let data = {};
  526. data[PRIMARY_KEY] = checkIds.split(",");
  527. layer.confirm("确认重新开卡吗?", {
  528. icon: 3,
  529. title: "提示"
  530. }, function (index) {
  531. layer.close(index);
  532. let loading = layer.load();
  533. $.ajax({
  534. url: AGAIN_URL,
  535. data: data,
  536. dataType: "json",
  537. type: "post",
  538. success: function (res) {
  539. layer.close(loading);
  540. if (res.code == 0) {
  541. return layui.popup.success("操作成功", refreshTable);
  542. }
  543. return layui.popup.failure(res.msg);
  544. }
  545. })
  546. });
  547. }
  548. let reject = function (obj) {
  549. let checkIds = common.checkField(obj, PRIMARY_KEY);
  550. if (checkIds === "") {
  551. layui.popup.warning("未选中数据");
  552. return false;
  553. }
  554. let data = {};
  555. data[PRIMARY_KEY] = checkIds.split(",");
  556. layer.confirm("确认驳回吗?", {
  557. icon: 3,
  558. title: "提示"
  559. }, function (index) {
  560. layer.close(index);
  561. let loading = layer.load();
  562. $.ajax({
  563. url: REJECT_API,
  564. data: data,
  565. dataType: "json",
  566. type: "post",
  567. success: function (res) {
  568. layer.close(loading);
  569. if (res.code == 0) {
  570. return layui.popup.success("操作成功", refreshTable);
  571. }
  572. return layui.popup.failure(res.msg);
  573. }
  574. })
  575. });
  576. }
  577. // 执行删除
  578. // 刷新表格数据
  579. window.refreshTable = function (param) {
  580. table.reloadData("data-table", {
  581. scrollPos: "fixed"
  582. });
  583. }
  584. })
  585. </script>
  586. </body>
  587. </html>