account_detail.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .panel-content { padding-left: 15px; box-sizing: border-box; }
  5. .custom-panel .custom-panel-title .panel-content { width: calc(100% - 190px); }
  6. .account-value, .split { line-height: 34px; }
  7. .custom-panel .custom-panel-from { display: flex; }
  8. .custom-panel .custom-panel-from .layui-form-label{
  9. text-align: center;
  10. }
  11. .custom-panel .custom-panel-from>div{
  12. text-align: center;
  13. }
  14. .custom-panel .custom-panel-from .layui-form-item>div>span{
  15. margin-right: 10px;
  16. }
  17. .custom-panel .custom-panel-from .layui-form-item>div>button{
  18. width: 20px;
  19. height: 20px;
  20. text-align: center;
  21. padding: 0;
  22. line-height: 20px;
  23. border:0;
  24. color:#FF6A00 ;
  25. }
  26. .layui-input-block + .layui-word-aux {
  27. display: block;
  28. margin-left: 100px;
  29. }
  30. .shop-account {
  31. display: flex;
  32. align-items: center;
  33. position: relative;
  34. padding: 15px;
  35. box-sizing: border-box;
  36. }
  37. .shop-detail p {
  38. display: inline-block;
  39. width: 300px;
  40. line-height: 30px;
  41. }
  42. .screen {
  43. margin: 15px 0;
  44. }
  45. .layui-colla-content {
  46. border: none;
  47. background-color: #F2F3F5;
  48. }
  49. </style>
  50. {/block}
  51. {block name='body'}
  52. <div class="custom-panel">
  53. <div class="screen layui-collapse" lay-filter="selection_panel">
  54. <div class="layui-colla-item">
  55. <form class="layui-colla-content layui-form layui-show">
  56. <div class="layui-form-item flex">
  57. {if $account_type == 'balance,balance_money'}
  58. <div class="layui-inline">
  59. <label class="layui-form-label">账户类型</label>
  60. <div class="layui-input-inline">
  61. <select name="account_type" lay-filter="account_type">
  62. <option value="balance,balance_money">请选择</option>
  63. <option value="balance">储值余额</option>
  64. <option value="balance_money">现金余额</option>
  65. </select>
  66. </div>
  67. </div>
  68. <div class="layui-inline">
  69. <label class="layui-form-label">来源类型</label>
  70. <div class="layui-input-inline">
  71. <select name="from_type" class="from_type">
  72. <option value="">请选择</option>
  73. </select>
  74. </div>
  75. </div>
  76. {else /}
  77. <div class="layui-inline">
  78. <label class="layui-form-label">来源类型</label>
  79. <div class="layui-input-inline">
  80. <select name="from_type" class="from_type">
  81. <option value="">请选择</option>
  82. {foreach $from_type_arr as $from_type_arr_k => $from_type_arr_v}
  83. <option value="{$from_type_arr_k}">{$from_type_arr_v['type_name']}</option>
  84. {/foreach}
  85. </select>
  86. </div>
  87. </div>
  88. {/if}
  89. </div>
  90. <div class="layui-form-item flex">
  91. <div class="layui-inline">
  92. <label class="layui-form-label">发生时间</label>
  93. <div class="layui-input-inline">
  94. <input type="text" class="layui-input" name="start_date" id="start_date" placeholder="开始时间" autocomplete="off" readonly>
  95. </div>
  96. </div>
  97. <div class="layui-inline">
  98. <div class="layui-input-inline split">&nbsp;&nbsp;-&nbsp;&nbsp;</div>
  99. <div class="layui-input-inline">
  100. <input type="text" class="layui-input" name="end_date" id="end_date" placeholder="结束时间" autocomplete="off" readonly>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="form-row">
  105. <button class="layui-btn" lay-submit lay-filter="search">筛选</button>
  106. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  107. </div>
  108. <input type="hidden" name="member_id" value="{$member_id}" id="member_id"/>
  109. </form>
  110. </div>
  111. </div>
  112. </div>
  113. <!-- 列表 -->
  114. <table id="member_account" lay-filter="member_account"></table>
  115. {/block}
  116. {block name="script"}
  117. <script>
  118. var date = {$member_info.reg_time};
  119. $(".reg-time").text(ns.time_to_date(date, "YYYY-MM-DD"));
  120. $("#member_point").text(parseInt("{$member_info.point}"));
  121. var form,
  122. table,
  123. laydate,
  124. laytpl;
  125. repeat_flag = false, //防重复标识
  126. currentDate = new Date(),
  127. minDate = "";
  128. currentDate.setDate(currentDate.getDate() - 7);
  129. layui.use(['form', 'laydate', 'laytpl'], function() {
  130. form = layui.form;
  131. laydate = layui.laydate;
  132. laytpl = layui.laytpl;
  133. form.render();
  134. //开始时间
  135. laydate.render({
  136. elem: '#start_date',
  137. type: 'datetime'
  138. });
  139. //结束时间
  140. laydate.render({
  141. elem: '#end_date',
  142. type: 'datetime'
  143. });
  144. //根据账户类型获取来源类型
  145. form.on('select(account_type)', function (data) {
  146. if(data.value == 'balance,balance_money') return;
  147. $.ajax({
  148. type: "POST",
  149. url: ns.url("shop/member/getfromtype"),
  150. data: {type:data.value},
  151. dataType: 'JSON',
  152. success: function(res) {
  153. var html = '<option value="">请选择</option>';
  154. $.each(res,function(k,v){
  155. html += '<option value="'+k+'">'+v.type_name+'</option>';
  156. });
  157. $('.from_type').html(html);
  158. form.render();
  159. }
  160. });
  161. });
  162. /**
  163. * 重新渲染结束时间
  164. * */
  165. function reRender() {
  166. $("#reg_end_date").remove();
  167. $(".end-time").html('<input type="text" class="layui-input" name="reg_end_date" id="reg_end_date" placeholder="请输入结束时间">');
  168. laydate.render({
  169. elem: '#reg_end_date',
  170. min: minDate
  171. });
  172. }
  173. /**
  174. * 加载表格
  175. */
  176. table = new Table({
  177. elem: '#member_account',
  178. url: ns.url("shop/member/accountDetail"),
  179. where:{
  180. member_id : $("#member_id").val(),
  181. account_type : '{$account_type}',
  182. },
  183. cols: [
  184. [{
  185. field: 'account_type_name',
  186. title: '账户类型',
  187. width: '15%',
  188. unresize: 'false'
  189. }, {
  190. title: '数据金额',
  191. width: '15%',
  192. unresize: 'false',
  193. align:'right',
  194. templet: function (d) {
  195. if (d.account_data > 0) {
  196. return '+' + (d.account_type == "point" || d.account_type == 'growth' ? parseInt(d.account_data) : d.account_data);
  197. } else {
  198. return d.account_type == "point" || d.account_type == 'growth' ? parseInt(d.account_data) : d.account_data;
  199. }
  200. }
  201. }, {
  202. field: '',
  203. title: '',
  204. width: '5%',
  205. align:'center',
  206. unresize: 'false'
  207. }, {
  208. field: 'type_name',
  209. title: '发生方式',
  210. unresize: 'false'
  211. }, {
  212. field: 'remark',
  213. title: '备注',
  214. width: '35%',
  215. unresize: 'false'
  216. }, {
  217. field: 'create_time',
  218. title: '发生时间',
  219. unresize: 'false',
  220. templet: function(data) {
  221. return ns.time_to_date(data.create_time);
  222. }
  223. }]
  224. ]
  225. });
  226. /**
  227. * 表单验证
  228. */
  229. form.verify({
  230. num: function(value) {
  231. var arrMen = value.split(".");
  232. var val = 0;
  233. if (arrMen.length == 2) {
  234. val = arrMen[1];
  235. }
  236. if (value == "") {
  237. return false;
  238. }
  239. if (val.length > 2) {
  240. return '保留小数点后两位'
  241. }
  242. }
  243. });
  244. /**
  245. * 监听提交
  246. */
  247. form.on('submit(search)', function(data) {
  248. table.reload({
  249. page: {
  250. curr: 1
  251. },
  252. where: data.field
  253. });
  254. return false;
  255. });
  256. form.on('submit(savePoint)', function(data) {
  257. if (repeat_flag) return false;
  258. repeat_flag = true;
  259. var point = {$member_info.point};
  260. if (data.field.adjust_num == 0) {
  261. layer.msg('调整数值不能为0');
  262. repeat_flag = false;
  263. return ;
  264. }
  265. if (point*1 + data.field.adjust_num*1 < 0) {
  266. layer.msg('积分不可以为负数');
  267. repeat_flag = false;
  268. return ;
  269. }
  270. $.ajax({
  271. type: "POST",
  272. url: ns.url("shop/member/adjustPoint"),
  273. data: data.field,
  274. dataType: 'JSON',
  275. success: function(res) {
  276. layer.msg(res.message);
  277. repeat_flag = false;
  278. if (res.code == 0) {
  279. $("#member_point").html(res.data.point);
  280. $("#member_point").next().attr('data-num', res.data.point);
  281. layer.closeAll('page');
  282. table.reload();
  283. }
  284. }
  285. });
  286. });
  287. form.on('submit(saveBalance)', function(data) {
  288. if (repeat_flag) return false;
  289. repeat_flag = true;
  290. var balance = {$member_info.balance};
  291. if (data.field.adjust_num == 0) {
  292. layer.msg('调整数值不能为0');
  293. repeat_flag = false;
  294. return ;
  295. }
  296. if (balance*1 + data.field.adjust_num*1 < 0) {
  297. layer.msg('当前储值余额不可以为负数');
  298. repeat_flag = false;
  299. return ;
  300. }
  301. $.ajax({
  302. type: "POST",
  303. url: ns.url("shop/member/adjustBalance"),
  304. data: data.field,
  305. dataType: 'JSON',
  306. success: function(res) {
  307. layer.msg(res.message);
  308. repeat_flag = false;
  309. if (res.code == 0) {
  310. $("#member_balance").html(res.data.balance);
  311. $("#member_balance").next().attr('data-num', res.data.balance);
  312. layer.closeAll('page');
  313. table.reload();
  314. }
  315. }
  316. });
  317. });
  318. form.on('submit(saveBalanceMoney)', function(data) {
  319. if (repeat_flag) return false;
  320. repeat_flag = true;
  321. var balance = {$member_info.balance_money};
  322. if (data.field.adjust_num == 0) {
  323. layer.msg('调整数值不能为0');
  324. repeat_flag = false;
  325. return ;
  326. }
  327. if (balance*1 + data.field.adjust_num*1 < 0) {
  328. layer.msg('余额(可提现)不可以为负数');
  329. repeat_flag = false;
  330. return ;
  331. }
  332. $.ajax({
  333. type: "POST",
  334. url: ns.url("shop/member/adjustBalanceMoney"),
  335. data: data.field,
  336. dataType: 'JSON',
  337. success: function(res) {
  338. layer.msg(res.message);
  339. repeat_flag = false;
  340. if (res.code == 0) {
  341. $("#member_balance_money").html(res.data.balance_money);
  342. $("#member_balance_money").next().attr('data-num', res.data.balance_money);
  343. layer.closeAll('page');
  344. table.reload();
  345. }
  346. }
  347. });
  348. });
  349. form.on('submit(saveGrowth)', function(data) {
  350. if (repeat_flag) return false;
  351. repeat_flag = true;
  352. var growth = {$member_info.growth};
  353. if (data.field.adjust_num == 0) {
  354. layer.msg('调整数值不能为0');
  355. repeat_flag = false;
  356. return ;
  357. }
  358. if (growth*1 + data.field.adjust_num*1 < 0) {
  359. layer.msg('成长值不可以为负数');
  360. repeat_flag = false;
  361. return;
  362. }
  363. $.ajax({
  364. type: "POST",
  365. url: ns.url("shop/member/adjustGrowth"),
  366. data: data.field,
  367. dataType: 'JSON',
  368. success: function(res) {
  369. layer.msg(res.message);
  370. repeat_flag = false;
  371. if (res.code == 0) {
  372. $("#member_growth").html(res.data.growth);
  373. $("#member_growth").next().attr('data-num', res.data.growth);
  374. layer.closeAll('page');
  375. table.reload();
  376. }
  377. }
  378. });
  379. });
  380. });
  381. function savePoint(e) {
  382. var point = $(e).attr('data-num');
  383. var data = {
  384. point : point
  385. };
  386. laytpl($("#point").html()).render(data, function(html) {
  387. layer.open({
  388. title: '调整积分',
  389. skin: 'layer-tips-class',
  390. type: 1,
  391. area: ['800px'],
  392. content: html
  393. });
  394. });
  395. $(".integral-bounced .amount input").on("input propertychange",function(val){
  396. var newIntegral = parseInt($(this).val());
  397. $(this).val(newIntegral);
  398. var currIntegral = parseInt($(".integral-bounced .account-value").text());
  399. if (newIntegral + currIntegral < 0){
  400. layer.msg("调整数额与当前值积分数相加不能小于0");
  401. $(this).val(-currIntegral);
  402. return false;
  403. }
  404. })
  405. }
  406. function saveBalance(e) {
  407. var balance = $(e).attr('data-num');
  408. var data = {
  409. balance : balance
  410. };
  411. laytpl($("#balance").html()).render(data, function(html) {
  412. layer.open({
  413. title: '调整储值余额',
  414. skin: 'layer-tips-class',
  415. type: 1,
  416. area: ['800px'],
  417. content: html
  418. });
  419. });
  420. }
  421. function saveBalanceMoney(e) {
  422. var balance_money = $(e).attr('data-num');
  423. var data = {
  424. balance_money : balance_money
  425. };
  426. laytpl($("#balance_money").html()).render(data, function(html) {
  427. layer.open({
  428. title: '调整现金余额',
  429. skin: 'layer-tips-class',
  430. type: 1,
  431. area: ['800px'],
  432. content: html
  433. });
  434. });
  435. }
  436. function saveGrowth(e) {
  437. var growth = $(e).attr('data-num');
  438. var data = {
  439. growth : growth
  440. };
  441. laytpl($("#growth").html()).render(data, function(html) {
  442. layer.open({
  443. title: '调整成长值',
  444. skin: 'layer-tips-class',
  445. type: 1,
  446. area: ['800px'],
  447. content: html
  448. });
  449. });
  450. }
  451. </script>
  452. <!-- 积分弹框html -->
  453. <script type="text/html" id="point">
  454. <div class="layui-form integral-bounced">
  455. <div class="layui-form-item">
  456. <label class="layui-form-label">当前积分:</label>
  457. <div class="layui-input-block account-value">{{ parseInt(d.point) }}</div>
  458. </div>
  459. <div class="layui-form-item">
  460. <label class="layui-form-label">调整数额:</label>
  461. <div class="layui-input-block amount">
  462. <input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
  463. </div>
  464. <span class="word-aux">调整数额与当前积分数相加不能小于0</span>
  465. </div>
  466. <div class="layui-form-item">
  467. <label class="layui-form-label">备注:</label>
  468. <div class="layui-input-block len-long">
  469. <textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
  470. </div>
  471. </div>
  472. <div class="form-row">
  473. <button class="layui-btn" lay-submit lay-filter="savePoint">确定</button>
  474. </div>
  475. <input type="hidden" name="member_id" value="{$member_info.member_id}" />
  476. <input type="hidden" name="point" value="{{ d.point }}" />
  477. </div>
  478. </script>
  479. <!-- 余额弹框html -->
  480. <script type="text/html" id="balance">
  481. <div class="layui-form">
  482. <div class="layui-form-item">
  483. <label class="layui-form-label">当前储值余额:</label>
  484. <div class="layui-input-block account-value">{{ d.balance }}</div>
  485. </div>
  486. <div class="layui-form-item">
  487. <label class="layui-form-label">调整数额:</label>
  488. <div class="layui-input-block">
  489. <input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
  490. </div>
  491. <span class="word-aux">调整数额与当前储值余额相加不能小于0</span>
  492. </div>
  493. <div class="layui-form-item">
  494. <label class="layui-form-label">备注:</label>
  495. <div class="layui-input-block len-long">
  496. <textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
  497. </div>
  498. </div>
  499. <div class="form-row">
  500. <button class="layui-btn" lay-submit lay-filter="saveBalance">确定</button>
  501. </div>
  502. <input type="hidden" name="member_id" value="{$member_info.member_id}" />
  503. <input type="hidden" name="point" value="{{ d.balance }}" />
  504. </div>
  505. </script>
  506. <!-- 现金余额弹框html -->
  507. <script type="text/html" id="balance_money">
  508. <div class="layui-form">
  509. <div class="layui-form-item">
  510. <label class="layui-form-label">当前现金余额:</label>
  511. <div class="layui-input-block account-value">{{ d.balance_money }}</div>
  512. </div>
  513. <div class="layui-form-item">
  514. <label class="layui-form-label">调整数额:</label>
  515. <div class="layui-input-block">
  516. <input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
  517. </div>
  518. <span class="word-aux">调整数额与当前现金余额相加不能小于0</span>
  519. </div>
  520. <div class="layui-form-item">
  521. <label class="layui-form-label">备注:</label>
  522. <div class="layui-input-block len-long">
  523. <textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
  524. </div>
  525. </div>
  526. <div class="form-row">
  527. <button class="layui-btn" lay-submit lay-filter="saveBalanceMoney">确定</button>
  528. </div>
  529. <input type="hidden" name="member_id" value="{$member_info.member_id}" />
  530. <input type="hidden" name="point" value="{{ d.balance_money }}" />
  531. </div>
  532. </script>
  533. <!-- 成长值弹框html -->
  534. <script type="text/html" id="growth">
  535. <div class="layui-form">
  536. <div class="layui-form-item">
  537. <label class="layui-form-label">当前成长值:</label>
  538. <div class="layui-input-block account-value">{{ d.growth }}</div>
  539. </div>
  540. <div class="layui-form-item">
  541. <label class="layui-form-label">调整数额:</label>
  542. <div class="layui-input-block">
  543. <input type="number" value="0" placeholder="请输入调整数额" name="adjust_num" lay-verify="num" class="layui-input len-short">
  544. </div>
  545. <span class="word-aux">调整数额与当前成长值相加不能小于0</span>
  546. </div>
  547. <div class="layui-form-item">
  548. <label class="layui-form-label">备注:</label>
  549. <div class="layui-input-block len-long">
  550. <textarea class="layui-textarea" name="remark" placeholder="请输入备注" maxlength="150"></textarea>
  551. </div>
  552. </div>
  553. <div class="form-row">
  554. <button class="layui-btn" lay-submit lay-filter="saveGrowth">确定</button>
  555. </div>
  556. <input type="hidden" name="member_id" value="{$member_info.member_id}" />
  557. <input type="hidden" name="point" value="{{ d.growth }}" />
  558. </div>
  559. </script>
  560. {/block}