index.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .layui-layout-admin .layui-body .body-content {background: #EFF0F4;padding: 0}
  5. .summary-wrap {background: #fff;padding: 15px}
  6. .summary-wrap .layui-card-body{display: flex;padding: 10px!important;flex-wrap: wrap;}
  7. .summary-wrap .layui-card-body .content{width: 33.3%;display: flex;flex-direction: column;justify-content: center;}
  8. .summary-wrap .layui-card-body .num{font-size: 26px;color: #666;margin-top: 10px;max-width: 250px;}
  9. .summary-wrap .layui-card-body .title{color: #909399; font-size: 14px; margin-top: 5px;}
  10. .summary-wrap .head {display: flex;align-items: center}
  11. .summary-wrap .head .title {font-size: 16px;font-weight: bolder}
  12. .summary-wrap .head .sub-title {margin-left: 10px;color: #999}
  13. .empty {text-align: center;padding: 200px 0}
  14. .loading {background: rgba(255,255,255,.5);position: absolute;left: 0; top: 0;text-align: center;width: 100%;height: 100%;box-sizing: border-box;padding-top: 300px;display: none}
  15. .loading i {font-size: 25px}
  16. /* 时间选择 */
  17. .time-screen {margin-left: 50px}
  18. .time-screen .screen{display: flex}
  19. .time-screen .screen .item {height: 32px;line-height: 32px;padding: 0 20px;border: 1px solid #D2D2D2;cursor: pointer;border-right: none;border-left: none;position: relative}
  20. .time-screen .screen .item:after{content: '';position: absolute;top: -1px;left: 0;bottom: -1px;right: -1px;border-right: 1px solid #D2D2D2;border-left: 1px solid #D2D2D2;}
  21. .time-screen .screen .selected,.time-screen .item:hover{color: #fff;background: var(--base-color);border-color: var(--base-color) }
  22. .time-screen .screen .selected:after, .time-screen .item:hover:after {border-right: 1px solid var(--base-color);border-left: 1px solid var(--base-color);}
  23. .layui-layer-content .layui-form-label {width: 100px}
  24. /* 营销日历 */
  25. .promotion-calendar {background: #fff;padding: 15px;margin-top: 15px;position: relative}
  26. .promotion-calendar .head {font-size: 16px;font-weight: bolder;text-align: center;line-height: 40px}
  27. .promotion-calendar .head .month {width: 150px;text-align: center;display: inline-block}
  28. .promotion-calendar .head .iconfont {cursor: pointer;}
  29. .promotion-calendar .head .iconfont:hover {color: var(--base-color)}
  30. .promotion-calendar .body .group {border-bottom: 1px solid #eee}
  31. .promotion-calendar .body .list {display: flex;line-height: 40px;height: 40px;}
  32. .promotion-calendar .body .promotion {width: 180px;border-right: 1px solid #eee;padding-right: 10px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
  33. .promotion-calendar .body .days {width: 0;flex: 1;display: flex}
  34. .promotion-calendar .days div {flex: 1;text-align: center;display: flex;align-items: center;justify-content: center;}
  35. .promotion-calendar .body .top-wrap {background: #F2F3F5;margin-top: 15px;line-height: 36px;height: 36px;}
  36. .promotion-calendar .promotion-tag {color: #fff;font-size: 12px;background: var(--base-color);padding: 2px 5px;line-height: 1;border-radius: 3px}
  37. .promotion-calendar .progress {width: 100%;height: 15px;background: var(--base-color);}
  38. .promotion-calendar .progress.start {border-bottom-left-radius: 15px;border-top-left-radius: 15px;}
  39. .promotion-calendar .progress.end {border-bottom-right-radius: 15px;border-top-right-radius: 15px;}
  40. .promotion-list {background: #fff;padding: 15px;margin-top: 15px;}
  41. .promotion-list .head {display: flex;align-items: center;justify-content: space-between;}
  42. .promotion-list .head .title {font-size: 16px;font-weight: bolder}
  43. .promotion-list .body {display: flex;flex-wrap: wrap;}
  44. .promotion-list .body .promotion-item {width: 25%;margin-top: 15px}
  45. .promotion-list .promotion-item .box {border: 1px solid #eee;margin-right: 15px;}
  46. .promotion-list .promotion-item .info-wrap {display: flex;padding: 10px}
  47. .promotion-list .info-wrap .info {cursor:pointer;flex: 1;width: 0;display: flex;flex-direction: column;justify-content: space-between;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}
  48. .promotion-list .info-wrap .icon {cursor:pointer;width: 40px;height: 40px;margin-right: 10px}
  49. .promotion-list .info-wrap .desc {color: #999;font-size: 12px;}
  50. .promotion-list .layui-form-switch {margin-top: 0;cursor: pointer!important;}
  51. .promotion-list .promotion-item .detail {cursor: pointer;border-top: 1px solid #eee;padding: 10px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;line-height: 1}
  52. </style>
  53. {/block}
  54. {block name="main"}
  55. <div class="summary-wrap">
  56. <div class="head">
  57. <div class="title">营销数据</div>
  58. <div class="sub-title">{:date('Y-m-d')}</div>
  59. </div>
  60. <div class="layui-card-body">
  61. <div class="content">
  62. <p class="title">进行中活动数(个)</p>
  63. <p class="num">{$summary.in_progress_num}</p>
  64. </div>
  65. <div class="content">
  66. <p class="title">订单数量(笔)</p>
  67. <p class="num">{$order_num}</p>
  68. </div>
  69. <div class="content">
  70. <p class="title">当前营销工具数(个)</p>
  71. <p class="num">{$summary.promotion_num}</p>
  72. </div>
  73. </div>
  74. </div>
  75. <div class="promotion-list">
  76. <div class="head">
  77. <span class="title">营销配置</span>
  78. </div>
  79. <div class="body layui-form">
  80. {foreach name="$summary.unlimited_time" item="promotion"}
  81. <div class="promotion-item">
  82. <div class="box">
  83. <div class="info-wrap">
  84. <img src="{:img($promotion.icon)}" alt="" class="icon" onclick="location.href = ns.url('{$promotion.url}')">
  85. <div class="info" onclick="location.href = ns.url('{$promotion.url}')">
  86. <div>{$promotion.title}</div>
  87. <div class="desc">{$promotion.description}</div>
  88. </div>
  89. {if $promotion.switch_type == 'switch'}
  90. <input type="checkbox" lay-skin="switch" data-keyword="{$promotion.config_key}" {if $promotion.status}checked{/if} lay-filter="promotion">
  91. {else/}
  92. <a href="{:addon_url($promotion.url)}" target="_blank">
  93. <input type="checkbox" lay-skin="switch" {if $promotion.status}checked{/if} disabled>
  94. </a>
  95. {/if}
  96. </div>
  97. <div class="detail" title="{$promotion.detail}" onclick="location.href = ns.url('{$promotion.url}')">{$promotion.detail}</div>
  98. </div>
  99. </div>
  100. {/foreach}
  101. </div>
  102. </div>
  103. <div class="promotion-list">
  104. <div class="head">
  105. <span class="title">营销活动</span>
  106. <a href="{:addon_url('shop/promotion/market')}" class="text-color">更多</a>
  107. </div>
  108. <div class="body layui-form">
  109. {foreach name="all_promotion" item="promotion" index="index"}
  110. {if $index < 9}
  111. <div class="promotion-item">
  112. <a href="{:addon_url($promotion.url)}">
  113. <div class="box">
  114. <div class="info-wrap">
  115. <img src="{:img($promotion.icon)}" alt="" class="icon">
  116. <div class="info">
  117. <div>{$promotion.title}</div>
  118. <div class="desc">{$promotion.description}</div>
  119. </div>
  120. </div>
  121. </div>
  122. </a>
  123. </div>
  124. {/if}
  125. {/foreach}
  126. </div>
  127. </div>
  128. <div class="promotion-calendar">
  129. <div class="head">
  130. <i class="iconfont iconback_light" onclick="getPromotion(-1)"></i>
  131. <span class="month">{$month}</span>
  132. <i class="iconfont iconyoujiantou" onclick="getPromotion(1)"></i>
  133. </div>
  134. <div class="body">
  135. <div class="list top-wrap">
  136. <div class="promotion"></div>
  137. <div class="days">
  138. {for start="1" end="$days + 1"}
  139. <div>{$i}</div>
  140. {/for}
  141. </div>
  142. </div>
  143. {notempty name="$summary.time_limit"}
  144. {foreach name="$summary.time_limit" item="promotion"}
  145. <div class="group">
  146. {foreach name="$promotion.detail" item="item"}
  147. <div class="list">
  148. <div class="promotion">
  149. <span class="promotion-tag" {notempty name="$promotion.color"}style="background: {$promotion.color}"{/notempty}>{$promotion.title}</span>
  150. <span><a href="{:addon_url($promotion.url)}" target="_blank">{$item.promotion_name}</a></span>
  151. </div>
  152. <div class="days">
  153. {for start="0" end="$days"}
  154. <div>
  155. {php}$curr_time = $start_time + ($i + 1) * 86400;{/php}
  156. {if $curr_time > $item.start_time && ($curr_time - 86399) <= $item.end_time}
  157. <div class="progress{if $item.start_time >= ($curr_time - 86400) } start{/if}{if $item.end_time <= $curr_time } end{/if}" {notempty name="$promotion.color"}style="background: {$promotion.color}"{/notempty}></div>
  158. {/if}
  159. </div>
  160. {/for}
  161. </div>
  162. </div>
  163. {/foreach}
  164. </div>
  165. {/foreach}
  166. {else/}
  167. <div class="empty">
  168. 暂无相关活动数据,<a href="{:addon_url('shop/promotion/market')}" class="text-color">去创建</a>
  169. </div>
  170. {/notempty}
  171. <div class="loading">
  172. <i class="common-loading-layer layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>
  173. </div>
  174. </div>
  175. </div>
  176. <script type="text/html" id="promotionData">
  177. <div class="head">
  178. <i class="iconfont iconback_light" onclick="getPromotion(-1)"></i>
  179. <span class="month">{{ d.month }}</span>
  180. <i class="iconfont iconyoujiantou" onclick="getPromotion(1)"></i>
  181. </div>
  182. <div class="body">
  183. <div class="list top-wrap">
  184. <div class="promotion"></div>
  185. <div class="days">
  186. {{# for (var i = 1; i < d.days + 1; i++) { }}
  187. <div>{{ i }}</div>
  188. {{# } }}
  189. </div>
  190. </div>
  191. {{# if (d.data.time_limit.length){ }}
  192. {{# d.data.time_limit.forEach(function(promotion){ }}
  193. <div class="group">
  194. {{# promotion.detail.forEach(function(item){ }}
  195. <div class="list">
  196. <div class="promotion">
  197. <span class="promotion-tag" style="{{ promotion.color ? 'background: ' + promotion.color : '' }}">{{ promotion.title }}</span>
  198. <span><a href="{{ ns.url(promotion.url) }}" target="_blank">{{ item.promotion_name }}</a></span>
  199. </div>
  200. <div class="days">
  201. {{# for (var i = 0; i < d.days; i++) { }}
  202. <div>
  203. {{# var curr_time = d.start_time + (i + 1) * 86400;}}
  204. {{# if (curr_time > item.start_time && (curr_time - 86399) <= item.end_time){ }}
  205. <div class="progress {{# if (item.start_time >= (curr_time - 86400) ){ }} start{{# } }}{{# if (item.end_time <= curr_time){ }} end{{# } }}" style="{{ promotion.color ? 'background: ' + promotion.color : '' }}"></div>
  206. {{# } }}
  207. </div>
  208. {{# } }}
  209. </div>
  210. </div>
  211. {{# }) }}
  212. </div>
  213. {{# }) }}
  214. {{# } else { }}
  215. <div class="empty">
  216. 暂无相关活动数据,<a href="{:addon_url('shop/promotion/market')}" class="text-color">去创建</a>
  217. </div>
  218. {{# } }}
  219. <div class="loading">
  220. <i class="common-loading-layer layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>
  221. </div>
  222. </div>
  223. </script>
  224. <script type="text/html" id="custom-box">
  225. <div class="layui-form-item">
  226. <div class="layui-inline">
  227. <label class="layui-form-label">选择时间:</label>
  228. <div class="layui-inline layui-inline-margin" id="time_fission">
  229. <div class="layui-input-inline">
  230. <input type="text" id="date" name="date" autocomplete="off" class="layui-input" placeholder="请选择日期">
  231. <i class="iconfont iconriqi"></i>
  232. </div>
  233. </div>
  234. </div>
  235. </div>
  236. </script>
  237. {/block}
  238. {block name="script"}
  239. <script>
  240. var form,laydate, laytpl, repeat = false;
  241. layui.use(['laydate','laytpl', 'form'], function(){
  242. laydate = layui.laydate;
  243. laytpl = layui.laytpl;
  244. form = layui.form;
  245. form.render()
  246. form.on('switch(promotion)', function (data) {
  247. $.ajax({
  248. dataType: "JSON",
  249. type: "POST",
  250. data: {
  251. is_use: $(data.elem).is(':checked') ? 1 : 0,
  252. config_key: $(data.elem).attr('data-keyword')
  253. },
  254. url: ns.url("shop/config/modifyconfigisuse"),
  255. success: function(res){
  256. }
  257. })
  258. })
  259. })
  260. var length = 0;
  261. function getPromotion(value) {
  262. if (repeat) return;
  263. repeat = true;
  264. $('.loading').show();
  265. length += value;
  266. $.ajax({
  267. dataType: "JSON",
  268. type: "POST",
  269. data: {
  270. length: length
  271. },
  272. url: ns.url("shop/promotion/index"),
  273. success: function(res){
  274. repeat = false;
  275. $('.loading').hide();
  276. if (res.code == 0) {
  277. laytpl($('#promotionData').html()).render(res.data, function(string){
  278. $('.promotion-calendar').html(string);
  279. });
  280. }
  281. }
  282. })
  283. }
  284. </script>
  285. {/block}