dashboard.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. layui.use(['layer', 'echarts', 'element', 'count', 'laydate', 'form', 'mhttp'], function () {
  2. var laydate = layui.laydate;
  3. var $ = layui.jquery,
  4. layer = layui.layer,
  5. element = layui.element,
  6. count = layui.count,
  7. form = layui.form;
  8. let http = layui.mhttp;
  9. let authInfo = JSON.parse(localStorage.getItem(window._AUTH_INFO_));
  10. let authInfoDeductionSwitch = authInfo.detail.deduction_switch;
  11. laydate.render({
  12. elem: '#start_date',
  13. type: 'datetime',
  14. format: "yyyy-MM-dd HH:mm:ss"
  15. });
  16. laydate.render({
  17. elem: '#end_date',
  18. type: 'datetime',
  19. format: "yyyy-MM-dd HH:mm:ss"
  20. });
  21. let beginTime = null;
  22. if (GetQueryString('start_date')) {
  23. beginTime = GetQueryString('start_date');
  24. }
  25. let endTime = null;
  26. if (GetQueryString('end_date')) {
  27. endTime = GetQueryString('end_date');
  28. }
  29. form.on('submit(search-query)', function (data) {
  30. if (data.field.start_date !== '' || data.field.end_date !== '') {
  31. if (!data.field.start_date || !data.field.end_date) {
  32. layer.msg('请核对开始时间与结束时间!');
  33. return false;
  34. }
  35. let beginTime = new Date(data.field.start_date);
  36. let endTime = new Date(data.field.end_date);
  37. if (beginTime > endTime) {
  38. layer.msg('开始时间不能大于结束时间!');
  39. return false;
  40. }
  41. }
  42. });
  43. let loading = layer.msg('加载数据中...', {icon: 16, time: 0, shade: 0.3, shadeClose: false});
  44. // 查询数据
  45. if (beginTime) {
  46. beginTime = beginTime.replace('+', ' ');
  47. }
  48. if (endTime) {
  49. endTime = endTime.replace('+', ' ');
  50. }
  51. $('#start_date').val(beginTime);
  52. $('#end_date').val(endTime);
  53. let search = httpRequestPostData({
  54. start_date: beginTime,
  55. end_date: endTime
  56. });
  57. let ret = http.ajax({
  58. url: '/total/home',
  59. data: search
  60. });
  61. ret.then((data) => {
  62. layer.close(loading);
  63. if (data.code === 401) {
  64. cbRespnse401(data);
  65. return;
  66. }
  67. if (data.code === 200) {
  68. if (data.data.announce.length > 0) {
  69. html = '';
  70. for (let i in data.data.announce) {
  71. let item = data.data.announce[i];
  72. html += '<p>(' + (parseInt(i) + 1) + ') ' + item.content + '</p>';
  73. }
  74. $('#announce').append(html);
  75. $('#announce').css('display', 'block')
  76. }
  77. // cpa
  78. if (authInfoDeductionSwitch === 2 || authInfoDeductionSwitch === 3) {
  79. $('#cpa-box').css('display', 'block');
  80. count.up("cpa_td_users_deduction", {
  81. time: 1000,
  82. num: data.data.td_users_deduction,
  83. regulator: 50
  84. });
  85. count.up("cpa_users_deduction", {
  86. time: 1000,
  87. num: data.data.users_deduction,
  88. regulator: 50
  89. });
  90. count.up("cpa_yesterday_users_total", {
  91. time: 1000,
  92. num: data.data.yesterday_users_total,
  93. regulator: 50
  94. });
  95. let array = [];
  96. if (data.data.links.length > 0) {
  97. for (let i in data.data.links) {
  98. let list = data.data.links[i];
  99. array.push(list);
  100. }
  101. }
  102. var desc = function (x, y) {
  103. return (x['sort'] < y['sort']) ? 1 : -1;
  104. };
  105. array.sort(desc);
  106. for (const descKey in array) {
  107. let row = array[descKey];
  108. let url_link = row.url;
  109. if (row.status === 1) {
  110. row.status = '推广中';
  111. if (row.url.indexOf('?') !== -1) {
  112. url_link = row.url + '&channel_code=' + row.channel_uid;
  113. } else {
  114. url_link = row.url + '?channel_code=' + row.channel_uid;
  115. }// 首次出现的位置
  116. if (url_link.substr(url_link.indexOf('?') - 1, 1) !== '/') {
  117. // 添加 /
  118. url_link = url_link.substr(0, url_link.indexOf('?')) + '/' + url_link.substr(url_link.indexOf('?'));
  119. }
  120. let pack_btn = '';
  121. if(row.app.android_enable !== 1){
  122. pack_btn = '渠道包未开放!';
  123. }else{
  124. if (row.pack) {
  125. if (row.pack.status === 1) {
  126. // 成功
  127. if (row.pack.mom_app_version !== row.app.android_version){
  128. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">生成最新渠道包</button>';
  129. }else{
  130. pack_btn = '<button url="' + row.pack.app_download + '" class="btn-xz pear-btn pear-btn-primary pear-btn-xs">渠道包链接</button>';
  131. }
  132. } else if (row.pack.status === 2) {
  133. // 失败
  134. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">重新生成渠道包</button>';
  135. } else if (row.pack.status === 3){
  136. // 计算时间
  137. time1 = (new Date(row.pack.updated_at)).getTime();
  138. time2 = (new Date()).getTime();
  139. var cha = time1 > time2 ? time1 - time2 : time2 - time1;
  140. var day = Math.floor(cha / (24 * 3600 * 1000));
  141. var hours = Math.floor(cha % (24 * 3600 * 1000) / (3600 * 1000));
  142. var minutes = Math.floor(cha % (24 * 3600 * 1000) % (3600 * 1000) / (60 * 1000));
  143. // 10 分钟有效
  144. if (day >=1 || hours >= 1 || minutes >= 10){
  145. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">重新生成渠道包</button>';
  146. }else{
  147. pack_btn = '渠道包生成中(2分钟后刷新查看!)';
  148. }
  149. }
  150. }else{
  151. // 未打包
  152. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">渠道包生成</button>';
  153. }
  154. }
  155. let html = '<div class="link-row layui-col-md3">\n' +
  156. ' <div class="link-content">\n' +
  157. ' <div class="link-top">\n' +
  158. ' <div class="link-title">' + row.app_name + '</div>\n' +
  159. ' <div class="link-status">' + row.status + '</div>\n' +
  160. ' </div>\n' +
  161. ' <div class="link-how">总推广用户:' + row.users + '</div>\n' +
  162. ' <div class="link-logo">\n' +
  163. ' <img src="' + row.cover + '" alt="">\n' +
  164. ' </div>\n' +
  165. ' <div class="link-title-info">' + row.title + '</div>\n' +
  166. ' <div class="link-link">推广链接:<a target="' + url_link + '">' + url_link + '</a></div>\n' +
  167. ' <div class="link-describe">推广文案:' + row.note + '</div>' +
  168. ' <div class="link-describe">渠道包:' + pack_btn + '</div>\n' +
  169. ' </div>\n' +
  170. ' </div>';
  171. $('#links-box').prepend(html);
  172. } else {
  173. row.status = "<button class=\"btn-nd pear-btn pear-btn-primary pear-btn-xs\">想推广</button>";
  174. let html = '<div class="link-row layui-col-md3">\n' +
  175. ' <div class="link-content">\n' +
  176. ' <div class="link-top">\n' +
  177. ' <div class="link-title">' + row.app_name + '</div>\n' +
  178. ' <div class="link-status">' + row.status + '</div>\n' +
  179. ' </div>\n' +
  180. ' <div class="link-how">总推广用户:' + row.users + '</div>\n' +
  181. ' <div class="link-logo">\n' +
  182. ' <img src="' + row.cover + '" alt="">\n' +
  183. ' </div>\n' +
  184. ' <div class="link-title-info">' + row.title + '</div>\n' +
  185. ' <div class="link-link">推广链接:<a target="' + url_link + '" >' + url_link + '</a></div>\n' +
  186. ' <div class="link-describe">推广文案:' + row.note + '</div>' +
  187. ' <div class="link-describe">渠道包:请联系开线负责人开启!</div>\n' +
  188. ' </div>\n' +
  189. ' </div>';
  190. $('#links-box').append(html);
  191. }
  192. }
  193. $(".btn-nd").click(function () {
  194. layer.alert('请联系开线负责人开启!', {
  195. icon: 3,
  196. title: '提示'
  197. });
  198. });
  199. } else if (authInfoDeductionSwitch === 1) {
  200. //cps
  201. $('#cps-box').css('display', 'block');
  202. count.up("cps_td_users_deduction", {
  203. time: 1000,
  204. num: data.data.td_users_deduction,
  205. regulator: 50
  206. });
  207. count.up("cps_users_deduction", {
  208. time: 1000,
  209. num: data.data.users_deduction,
  210. regulator: 50
  211. });
  212. count.up("cps_commission_ratio", {
  213. time: 1000,
  214. num: data.data.commission_ratio,
  215. regulator: 50
  216. });
  217. count.up("cps_all_income", {
  218. time: 1000,
  219. num: data.data.all_income,
  220. regulator: 50
  221. });
  222. count.up("cps_td_income", {
  223. time: 1000,
  224. num: data.data.td_profit,
  225. regulator: 50
  226. });
  227. count.up("cps_withdraw", {
  228. time: 1000,
  229. num: data.data.cps_withdraw,
  230. regulator: 50
  231. });
  232. let array = [];
  233. if (data.data.links.length > 0) {
  234. for (let i in data.data.links) {
  235. let list = data.data.links[i];
  236. array.push(list);
  237. }
  238. }
  239. var desc = function (x, y) {
  240. return (x['sort'] < y['sort']) ? 1 : -1;
  241. };
  242. array.sort(desc);
  243. for (const descKey in array) {
  244. let row = array[descKey];
  245. let url_link = row.url;
  246. if (row.status === 1) {
  247. row.status = '推广中';
  248. if (row.url.indexOf('?') !== -1) {
  249. url_link = row.url + '&channel_code=' + row.channel_uid;
  250. } else {
  251. url_link = row.url + '?channel_code=' + row.channel_uid;
  252. }// 首次出现的位置
  253. if (url_link.substr(url_link.indexOf('?') - 1, 1) !== '/') {
  254. // 添加 /
  255. url_link = url_link.substr(0, url_link.indexOf('?')) + '/' + url_link.substr(url_link.indexOf('?'));
  256. }
  257. let pack_btn = '';
  258. if(row.app.android_enable !== 1){
  259. pack_btn = '渠道包未开放!';
  260. }else{
  261. if (row.pack) {
  262. if (row.pack.status === 1) {
  263. // 成功
  264. if (row.pack.mom_app_version !== row.app.android_version){
  265. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">生成最新渠道包</button>';
  266. }else{
  267. pack_btn = '<button url="' + row.pack.app_download + '" class="btn-xz pear-btn pear-btn-primary pear-btn-xs">渠道包链接</button>';
  268. }
  269. } else if (row.pack.status === 2) {
  270. // 失败
  271. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">重新生成渠道包</button>';
  272. } else if (row.pack.status === 3){
  273. // 计算时间
  274. time1 = (new Date(row.pack.updated_at)).getTime();
  275. time2 = (new Date()).getTime();
  276. var cha = time1 > time2 ? time1 - time2 : time2 - time1;
  277. var day = Math.floor(cha / (24 * 3600 * 1000));
  278. var hours = Math.floor(cha % (24 * 3600 * 1000) / (3600 * 1000));
  279. var minutes = Math.floor(cha % (24 * 3600 * 1000) % (3600 * 1000) / (60 * 1000));
  280. // 10 分钟有效
  281. if (day >=1 || hours >= 1 || minutes >= 10){
  282. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">重新生成渠道包</button>';
  283. }else{
  284. pack_btn = '渠道包生成中(2分钟后刷新查看!)';
  285. }
  286. }
  287. }else{
  288. // 未打包
  289. pack_btn = '<button channel_code="'+row.channel_uid+'" class="btn-pack channel_code_'+row.channel_uid+' pear-btn pear-btn-primary pear-btn-xs">渠道包生成</button>';
  290. }
  291. }
  292. let html = '<div class="link-row layui-col-md3">\n' +
  293. ' <div class="link-content">\n' +
  294. ' <div class="link-top">\n' +
  295. ' <div class="link-title">' + row.app_name + '</div>\n' +
  296. ' <div class="link-status">' + row.status + '</div>\n' +
  297. ' </div>\n' +
  298. ' <div class="link-how">总推广用户:' + row.users + '</div>\n' +
  299. ' <div class="link-logo">\n' +
  300. ' <img src="' + row.cover + '" alt="">\n' +
  301. ' </div>\n' +
  302. ' <div class="link-title-info">' + row.title + '</div>\n' +
  303. ' <div class="link-link">推广链接:<a target="' + url_link + '" >' + url_link + '</a></div>\n' +
  304. ' <div class="link-describe">推广文案:' + row.note + '</div>' +
  305. ' <div class="link-describe">渠道包:' + pack_btn + '</div>\n' +
  306. ' </div>\n' +
  307. ' </div>';
  308. $('#cps-links-box').prepend(html);
  309. } else {
  310. row.status = "<button class=\"btn-nd pear-btn pear-btn-primary pear-btn-xs\">想推广</button>";
  311. let html = '<div class="link-row layui-col-md3">\n' +
  312. ' <div class="link-content">\n' +
  313. ' <div class="link-top">\n' +
  314. ' <div class="link-title">' + row.app_name + '</div>\n' +
  315. ' <div class="link-status">' + row.status + '</div>\n' +
  316. ' </div>\n' +
  317. ' <div class="link-how">总推广用户:' + row.users + '</div>\n' +
  318. ' <div class="link-logo">\n' +
  319. ' <img src="' + row.cover + '" alt="">\n' +
  320. ' </div>\n' +
  321. ' <div class="link-title-info">' + row.title + '</div>\n' +
  322. ' <div class="link-link">推广链接:<a target="' + url_link + '">' + url_link + '</a></div>\n' +
  323. ' <div class="link-describe">推广文案:' + row.note + '</div>' +
  324. ' <div class="link-describe">渠道包:请联系开线负责人开启!</div>\n' +
  325. ' </div>\n' +
  326. ' </div>';
  327. $('#cps-links-box').append(html);
  328. }
  329. }
  330. $("#cps-links-box .btn-nd").click(function () {
  331. layer.alert('请联系开线负责人开启!', {
  332. icon: 3,
  333. title: '提示'
  334. });
  335. });
  336. } else {
  337. // 其他的
  338. $('#abnormal').css('display', 'block');
  339. count.up("td_users_deduction", {
  340. time: 1000,
  341. num: data.data.td_users_deduction,
  342. regulator: 50
  343. });
  344. count.up("users_deduction", {
  345. time: 1000,
  346. num: data.data.users_deduction,
  347. regulator: 50
  348. });
  349. count.up("td_add_agent", {
  350. time: 1000,
  351. num: data.data.td_add_agent,
  352. regulator: 50
  353. });
  354. count.up("total_agent", {
  355. time: 1000,
  356. num: data.data.total_agent,
  357. regulator: 50
  358. });
  359. count.up("td_down_commission_money", {
  360. time: 1000,
  361. num: data.data.td_down_commission_money,
  362. regulator: 50
  363. });
  364. count.up("down_commission_money", {
  365. time: 1000,
  366. num: data.data.down_commission_money,
  367. bit: 2,
  368. regulator: 50
  369. });
  370. count.up("td_commission_money", {
  371. time: 1000,
  372. num: data.data.td_commission_money,
  373. regulator: 50
  374. });
  375. count.up("td_profit", {
  376. time: 1000,
  377. num: data.data.td_profit,
  378. regulator: 50
  379. });
  380. count.up("total_profit", {
  381. time: 1000,
  382. num: data.data.total_profit,
  383. regulator: 50
  384. });
  385. count.up("commission_ratio", {
  386. time: 1000,
  387. num: data.data.commission_ratio,
  388. regulator: 50
  389. });
  390. count.up("commission_money", {
  391. time: 1000,
  392. num: parseInt(data.data.commission_money),
  393. regulator: 50
  394. });
  395. count.up("td_deduction_success_money", {
  396. time: 1000,
  397. num: parseInt(data.data.td_deduction_success_money),
  398. regulator: 50
  399. });
  400. }
  401. // 打包
  402. $(".btn-pack").click(function () {
  403. // channel_code
  404. let uid = $(this).attr('channel_code');
  405. console.debug(uid);
  406. let createLoading = layer.load();
  407. // 打包
  408. let ret = http.ajax({
  409. url: '/app/pack',
  410. data: {uid:uid}
  411. });
  412. ret.then((data) => {
  413. layer.close(createLoading);
  414. if (data.code === 200) {
  415. layer.msg(data.message, {icon: 1, time: 1000}, function () {
  416. // 成功刷父页面
  417. window.parent.location.reload();
  418. // 成功关闭父窗口
  419. let index = parent.layer.getFrameIndex(window.name);
  420. parent.layer.close(index);
  421. });
  422. } else {
  423. layer.msg(data.message, {icon: 2, time: 1000});
  424. }
  425. });
  426. return false;
  427. });
  428. // 渠道包链接
  429. $(".btn-xz").click(function () {
  430. layer.open({
  431. id: 'qrcode',
  432. type: 2,
  433. title: '获取链接',
  434. shade: 0.1,
  435. offset: '200px',
  436. area: ['400px', '200px'],
  437. maxWidth: 500,
  438. maxHeight: 500,
  439. scrollbar: true,
  440. content: '../sponsored_links/copy_link.html?|||' + $(this).attr('url'),
  441. });
  442. });
  443. } else {
  444. layer.msg('数据加载出错!');
  445. }
  446. });
  447. // 获取链接
  448. $(document).on('click', '.cpa-cps-cont .link-link a', function () {
  449. console.debug();
  450. let url_link = $(this).text();
  451. layer.open({
  452. id: 'qrcode',
  453. type: 2,
  454. title: '获取链接',
  455. shade: 0.1,
  456. offset: '200px',
  457. area: ['400px', '200px'],
  458. maxWidth: 500,
  459. maxHeight: 500,
  460. scrollbar: true,
  461. content: '/view/sponsored_links/copy_link.html?|||' + url_link,
  462. });
  463. });
  464. });