marketing.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <!DOCTYPE html>
  2. <html class="remModel">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="Cache-Control" content="no-cache,no-store,no-siteapp,must-revalidate">
  6. <meta http-equiv="pragma" content="no-cache">
  7. <meta http-equiv="expires" content="0">
  8. <meta name="author" content="">
  9. <meta name="description" content=""/>
  10. <meta name="keywords" content="扫码支付,线上投币,运营数据,物联网"/>
  11. <meta name="format-detection" content="telephone=no,email=no">
  12. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
  13. <title>营销活动</title>
  14. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.min.css">
  15. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.picker.min.css"/>
  16. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/photoswipe/photoswipe.css">
  17. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/photoswipe/default-skin/default-skin.css">
  18. <link rel="stylesheet" href="../components/custom/css/common.css">
  19. <link rel="stylesheet" href="css/xyf.common.min.css">
  20. <style>
  21. .mui-card{
  22. background-position: center;
  23. background-size: cover;
  24. }
  25. .mui-card[status="start"] .icon-start {
  26. display: none;
  27. }
  28. .mui-card[status="stop"] .icon-pause {
  29. display: none;
  30. }
  31. .mui-card-link{
  32. font-size: 14px;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="mui-input-group mui-reset">
  38. <form class="mui-row" action="">
  39. <div class="mui-col-xs-9 mui-col-sm-9">
  40. <div class="mui-input-row mui-search">
  41. <input type="search" class="mui-input-clear" id="searchKey" placeholder="活动名称">
  42. </div>
  43. </div>
  44. <div class="mui-col-xs-3 mui-col-sm-3 mui-text-right">
  45. <div class="in-row-btn" onclick="addMarketing()"><i class="iconfont icon-add-dark"></i></div>
  46. </div>
  47. </form>
  48. </div>
  49. <div class="filter-panel" style="display: none" id="options">
  50. <div class="input-group-vertical mui-table-view clear-b-border">
  51. <div class="or-border-fir mui-input-row input-clear or-order-status select-date" id="startTime">
  52. <label class="or-label-text">开始日期</label>
  53. <span class="mui-icon mui-icon-arrowright"></span>
  54. <span class="or-order-status-font selected-text"></span>
  55. </div>
  56. <div class="mui-input-row input-clear or-order-status select-date" id="endTime">
  57. <label class="or-label-text">结束日期</label>
  58. <span class="mui-icon mui-icon-arrowright"></span>
  59. <span class="or-order-status-font selected-text"></span>
  60. </div>
  61. <div class="mui-input-row filter-panel-btn flexbox">
  62. <span class="cancel-btn flex">取消</span>
  63. <span class="ok-btn flex">确定</span>
  64. </div>
  65. </div>
  66. </div>
  67. <!--下拉刷新容器-->
  68. <div id="pullrefresh" class="mui-content mui-scroll-wrapper" style="margin-top: 45px;">
  69. <div class="mui-scroll">
  70. <!--数据列表-->
  71. <ul class="group-wrap ">
  72. </ul>
  73. </div>
  74. </div>
  75. <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
  76. <div class="pswp__bg"></div>
  77. <div class="pswp__scroll-wrap">
  78. <div class="pswp__container">
  79. <div class="pswp__item"></div>
  80. <div class="pswp__item"></div>
  81. <div class="pswp__item"></div>
  82. </div>
  83. <div class="pswp__ui pswp__ui--hidden">
  84. <div class="pswp__top-bar">
  85. <div class="pswp__counter"></div>
  86. <button class="pswp__button pswp__button--close" title="关闭"></button>
  87. <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
  88. <div class="pswp__preloader">
  89. <div class="pswp__preloader__icn">
  90. <div class="pswp__preloader__cut">
  91. <div class="pswp__preloader__donut"></div>
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
  97. <div class="pswp__share-tooltip"></div>
  98. </div>
  99. <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
  100. </button>
  101. <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
  102. </button>
  103. <div class="pswp__caption">
  104. <div class="pswp__caption__center"></div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <script type="text/html" id="modal">
  110. <div class="mui-card ">
  111. <div class="mui-card-header mui-card-media "
  112. style="height:40vw;"></div>
  113. <div class="mui-card-content">
  114. <div class="mui-card-content-inner">
  115. <div class="title font-b-6 margin-b-5"></div>
  116. <div class="sub-title font-b"></div>
  117. </div>
  118. </div>
  119. <div class="mui-card-footer">
  120. <a class="mui-card-link iconfont icon-delete c-red operMarketing deleteMarketing"><span> 删除</span></a>
  121. <a class="mui-card-link iconfont icon-edit c-blue operMarketing editMarketing"><span> 编辑</span></a>
  122. <a class="mui-card-link iconfont icon-start c-green operMarketing toggleMarketing"><span> 启动</span></a>
  123. <a class="mui-card-link iconfont icon-pause c-lgreen operMarketing toggleMarketing"><span> 暂停</span></a>
  124. <a class="mui-card-link iconfont icon-chart-line c-blue operMarketing chartMarketing"><span> 报表</span></a>
  125. </div>
  126. </div>
  127. </script>
  128. <script src="https://cdn.washpayer.com/components/lib/jquery.min.js"></script>
  129. <script src="https://cdn.washpayer.com/components/lib/photoswipe/photoswipe.min.js"></script>
  130. <script src="https://cdn.washpayer.com/components/lib/photoswipe/photoswipe-ui-default.min.js"></script>
  131. <script src="https://cdn.washpayer.com/components/lib/image-compressor.min.js"></script>
  132. <script src="https://cdn.washpayer.com/components/lib/mui.min.js"></script>
  133. <script src="https://cdn.washpayer.com/components/lib/mui.picker.min.js"></script>
  134. <script src="https://cdn.washpayer.com/components/lib/moment.min.js"></script>
  135. <script src="/components/custom/js/common.js"></script>
  136. <script src="js/xyf.login.js"></script>
  137. <script src="js/xyf.common.js"></script>
  138. <script src="js/marketing.js"></script>
  139. <script>
  140. $(function () {
  141. //ios返回刷新
  142. var isPageHide = false;
  143. window.addEventListener('pageshow', function () {
  144. if (isPageHide) {
  145. window.location.reload();
  146. }
  147. });
  148. window.addEventListener('pagehide', function () {
  149. isPageHide = true;
  150. });
  151. });
  152. var condition = null;
  153. var startTime = moment().format("YYYY-MM-DD");
  154. var endTime = moment().format("YYYY-MM-DD");
  155. var searchKey = null;// 定义为null,如果是undefined,ios8 微信ajax时会崩溃,但是有的接口有 undefined却不会崩溃。。。
  156. //如果调到子页面,返回后还是保留查询条件
  157. var orRecordBack = getQueryString('orRecord');
  158. if (orRecordBack) {
  159. history.replaceState(null, null, "marketing.html");
  160. }
  161. var pageType = 'marketing';
  162. //获取条件缓存数据
  163. if (orRecordBack) {
  164. condition = localStorage.condition ? JSON.parse(localStorage.condition)[pageType] : null;
  165. } else {
  166. condition = null;
  167. }
  168. function setCondition() {
  169. var data = {
  170. startTime: startTime,//开始日期
  171. endTime: endTime,//结束日期
  172. searchKey: searchKey,
  173. };
  174. var conArr = localStorage.condition ? JSON.parse(localStorage.condition) : {};
  175. conArr[pageType] = data;
  176. localStorage.condition = JSON.stringify(conArr);
  177. }
  178. /*根据缓存渲染已有条件数据*/
  179. if (condition) {
  180. if (condition.startTime) {
  181. startTime = condition.startTime
  182. }
  183. if (condition.endTime) {
  184. endTime = condition.endTime
  185. }
  186. if (condition.searchKey != '') {
  187. searchKey = condition.searchKey;
  188. }
  189. }
  190. setTimeTitle();
  191. FilterComponent({
  192. ok: function () {
  193. /*合法性验证*/
  194. //日期校验
  195. if (true) {
  196. if (startTime > endTime) {
  197. mui.alert('开始日期不能大于结束日期', '温馨提示', '确定');
  198. return false;
  199. }
  200. }
  201. setTimeTitle();
  202. search();
  203. }
  204. });
  205. function setTimeTitle() {
  206. $('#startTime .selected-text').text(startTime);
  207. $('#endTime .selected-text').text(endTime);
  208. }
  209. //日期筛选条件
  210. $(function () {
  211. //可选日期范围
  212. var pickerBegin = moment().add(-1, "year").toDate();//控件可选最小时间
  213. var pickerEnd = new Date();//控件可选最大时间
  214. var options = {
  215. type: "date",
  216. beginDate: pickerBegin,
  217. endDate: pickerEnd
  218. };
  219. var startTimeBtn = $('#startTime');
  220. var startTimePicker = new mui.DtPicker(options);
  221. startTimePicker.setSelectedValue(startTime);
  222. startTimeBtn[0].addEventListener('tap', function () {
  223. startTimePicker.show(function (time) {
  224. startTime = time.y.text + '-' + time.m.text + '-' + time.d.text + '';
  225. $('#startTime .selected-text').text(startTime);
  226. });
  227. }, false);
  228. var endTimeBtn = $('#endTime');
  229. var endTimePicker = new mui.DtPicker(options);
  230. endTimePicker.setSelectedValue(endTime);
  231. endTimeBtn[0].addEventListener('tap', function () {
  232. endTimePicker.show(function (time) {
  233. endTime = time.y.text + '-' + time.m.text + '-' + time.d.text + '';
  234. $('#endTime .selected-text').text(endTime);
  235. });
  236. }, false);
  237. });
  238. mui.init({
  239. pullRefresh: {
  240. container: '#pullrefresh',
  241. up: {
  242. contentrefresh: '正在加载...',
  243. contentnomore: '没有更多数据了...',
  244. callback: pullupRefresh
  245. }
  246. }
  247. });
  248. //关键字搜索
  249. document.onkeydown = function (ev) {
  250. if (ev.keyCode == 13) {
  251. ev.preventDefault();
  252. search();
  253. }
  254. };
  255. /**
  256. * 查询的基本条件
  257. */
  258. var pageIndex = 0;
  259. var pageSize = 10;
  260. var total = 0;// 记录一次数据总数,用来做刷新判断
  261. //刷新数据
  262. function pullupRefresh() {
  263. pageIndex++;
  264. var url = "/dealer/getOnsaleList";
  265. var data = {
  266. searchKey: searchKey,
  267. startTime: endTime,
  268. endTime: startTime,
  269. pageIndex: pageIndex,
  270. pageSize: pageSize,
  271. };
  272. setCondition();//设置条件到缓存
  273. sendRequest(url, "GET", data, function (res) {
  274. if (res.result == 1) {
  275. if (pageIndex == 1) {
  276. total = res.payload.total;
  277. if (total == 0) {
  278. $('#pullrefresh').addClass('mui-hidden');
  279. $("body").append('<div class="nomore"></div>');
  280. } else {
  281. $('#pullrefresh').removeClass('mui-hidden');
  282. $('.nomore').remove();
  283. }
  284. }
  285. mui('#pullrefresh').pullRefresh().endPullupToRefresh((pageIndex * pageSize >= total));
  286. var groupWrap = $('.group-wrap');
  287. var length = res.payload.dataList.length;
  288. for (var i = 0; i < length; i++) {
  289. var obj = res.payload.dataList[i];
  290. var html = $($("#modal").html());
  291. html.attr('data-json', JSON.stringify(obj));
  292. html.attr("status", obj.status || "stop");//默认为暂停状态
  293. html.css("background-image", "url(" + obj.img + ")");
  294. html.find(".title").text(obj.name + "," + obj.startTime + " 至 " + obj.endTime);
  295. html.find(".sub-title").text(obj.desc);
  296. groupWrap.append(html);
  297. var backImg = $('<img class="mui-hidden" src="' + obj.img + '">');
  298. $("body").append(backImg);
  299. initPicPreview(html.find('.mui-card-header'), backImg, obj.img)
  300. }
  301. } else {
  302. mui.toast(res.description);
  303. }
  304. });
  305. }
  306. function initPicPreview(picDom, backImgDom, picSrc) {
  307. var pswpConfig = [{w: 0, h: 0, src: picSrc}];
  308. backImgDom.load(function () {
  309. pswpConfig[0]['w'] = this.naturalWidth;
  310. pswpConfig[0]['h'] = this.naturalHeight;
  311. initPswp(pswpConfig);
  312. });
  313. function initPswp() {
  314. picDom.on("tap", function () {
  315. var pswpElement = document.querySelectorAll('.pswp')[0];
  316. //放大功能不要,会导致微信全屏右上角微信菜单点不到。 分享和下载功能微信都没又用,所以不配置;
  317. var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, pswpConfig,
  318. {
  319. // 可以长按
  320. isClickableElement: function (el) {
  321. return true;
  322. },
  323. index: 0
  324. });
  325. gallery.init();
  326. })
  327. }
  328. }
  329. // 搜索查询
  330. function search() {
  331. pageIndex = 0;
  332. $('.group-wrap').html("");
  333. mui('#pullrefresh').pullRefresh().refresh(true);//重置上拉加载
  334. searchKey = $("#searchKey").val();
  335. //写入数据
  336. pullupRefresh();
  337. }
  338. // 删除、编辑、启动暂停活动
  339. $("body").on("tap", ".operMarketing", function (evt) {
  340. evt.stopPropagation();
  341. var dom = $(this).closest(".mui-card");
  342. var objData = dom.attr("data-json");
  343. objData = JSON.parse(objData);
  344. var id = objData.id;
  345. var status = dom.attr("status");// 这里不用json,因为启动暂停会动态切换
  346. if ($(this).hasClass("deleteMarketing")) {
  347. mui.confirm('您确定要删除?', '温馨提示', ['取消', '确认'], function (e) {
  348. if (e.index == 1) {
  349. var url = "/dealer/deleteOnsale";
  350. var data = {"id": id};
  351. sendRequest({
  352. url: url,
  353. type: "POST",
  354. mask: "正在删除...",
  355. data: data,
  356. contentType: "json",
  357. success: function (res) {
  358. if (res.result == 1) {
  359. dom.remove();
  360. } else {
  361. mui.alert(res.description, '温馨提示', '我知道了');
  362. }
  363. }
  364. });
  365. }
  366. });
  367. } else if ($(this).hasClass("editMarketing")) {
  368. setMarketingCache(objData);
  369. history.replaceState(null, null, "marketing.html?orRecord=true&t=" + new Date().getTime());
  370. var url = 'marketing-edit.html';
  371. goPage(url);
  372. } else if ($(this).hasClass("chartMarketing")) {
  373. var dom = $(this).closest(".mui-card");
  374. var objData = dom.attr("data-json");
  375. objData = JSON.parse(objData);
  376. var onsaleId = objData.id;
  377. history.replaceState(null, null, "marketing.html?orRecord=true&t=" + new Date().getTime());
  378. var url = 'marketing-chart.html';
  379. goPage(url, {onsaleId: onsaleId});
  380. } else if ($(this).hasClass("toggleMarketing")) {
  381. var url = "/dealer/toggleOnsale";
  382. var data = {"id": id};
  383. var text = "";
  384. if (status == "start") {
  385. data.status = "stop";
  386. text = "暂停";
  387. } else {
  388. data.status = "start";
  389. text = "启动";
  390. }
  391. mui.confirm('您确定要' + text + '?', '温馨提示', ['取消', '确认'], function (e) {
  392. if (e.index == 1) {
  393. sendRequest({
  394. url: url,
  395. type: "POST",
  396. mask: "正在操作...",
  397. data: data,
  398. contentType: "json",
  399. success: function (res) {
  400. if (res.result == 1) {
  401. mui.toast(text + '成功');
  402. dom.attr("status", data.status);
  403. } else {
  404. mui.alert(res.description, '温馨提示', '我知道了');
  405. }
  406. }
  407. });
  408. }
  409. });
  410. }
  411. });
  412. // 增加营销活动
  413. function addMarketing() {
  414. history.replaceState(null, null, "marketing.html?orRecord=true&t=" + new Date().getTime());
  415. var url = 'marketing-type.html';
  416. goPage(url);
  417. }
  418. //初始化刷新一次数据
  419. if (mui.os.plus) {
  420. mui.plusReady(function () {
  421. setTimeout(function () {
  422. mui('#pullrefresh').pullRefresh().pullupLoading();
  423. }, 1000);
  424. });
  425. } else {
  426. mui.ready(function () {
  427. mui('#pullrefresh').pullRefresh().pullupLoading();
  428. });
  429. }
  430. </script>
  431. </body>
  432. </html>