promoter_scene.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. {extend name="public/layout"}
  2. {block name="body"}
  3. <style>
  4. .layui-layer-content {
  5. overflow: unset !important;
  6. }
  7. tr td:first-child a {
  8. float: right;
  9. }
  10. .layui-table thead tr,
  11. .layui-table-header {
  12. background-color: #D8E6F1 !important;
  13. }
  14. td a {
  15. margin-left: 5px;
  16. margin-right: 5px;
  17. color: blue;
  18. }
  19. td a:hover {
  20. color: rgb(85, 26, 139);
  21. }
  22. #edit .layui-form-item {
  23. padding: 0 10px;
  24. }
  25. #user {
  26. height: 100%;
  27. overflow: auto;
  28. }
  29. #user ul {
  30. padding-left: 10px;
  31. padding-right: 10px;
  32. }
  33. #user li {
  34. padding: 10px 0;
  35. font-size: 14px;
  36. border-bottom: 1px solid #f2f2f2;
  37. }
  38. .none {
  39. display: none;
  40. }
  41. .layui-tab-title .layui-this {
  42. background-color: #249EFB;
  43. color: #fff;
  44. }
  45. .layui-tab-title .layui-this:after {
  46. border-bottom: none;
  47. border: none;
  48. }
  49. .layui-tab-title li {
  50. background-color: #F2F2F2;
  51. margin: 0px 5px;
  52. padding: 0px 20px;
  53. }
  54. .layui-btn-xs,.layui-btn-xs:hover {
  55. border: 1px solid #249EFB;
  56. background-color: #fff;
  57. color: #249EFB;
  58. padding: 0px 10px;
  59. }
  60. .layui-btn-danger,.layui-btn-danger:hover{
  61. color: #FF5722;
  62. background-color: #fff;
  63. border: 1px solid #FF5722;
  64. padding: 0px 10px;
  65. }
  66. .layui-btn-border,.layui-btn-border:hover {
  67. background-color: #fff;
  68. color: #249EFB;
  69. border: 1px solid #249EFB;
  70. }
  71. </style>
  72. <body>
  73. <div class="layui-fluid">
  74. <div class="layui-row layui-col-space15">
  75. <div class="layui-col-md12" style="background-color:#ffffff">
  76. <div class="tplay-body-div">
  77. <div class="layui-tab" lay-filter="title">
  78. <ul class="layui-tab-title">
  79. <li style="margin-left: 0px;">
  80. <a href="{:url('broad/promoter')}"></a>新建推广</a>
  81. </li>
  82. <li class="layui-this">
  83. 数据报表
  84. </li>
  85. </ul>
  86. </div>
  87. <div class="layui-card-body">
  88. <div class="layui-form">
  89. <div class="layui-inline">
  90. <button class="layui-btn layui-btn-border" data-type="add"><i class="layui-icon layui-icon-add-circle-fine"></i>新建场次</button>
  91. <span style="color:#afb1b6;margin-left: 20px;">当前页面可统计在某个时间区间内员工的推广情况,以及监看客户的实时行为轨迹,并同步给员工。</span>
  92. </div>
  93. </div>
  94. <table class="layui-hide" id="data" lay-filter="dataTable"></table>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <div id="add" class="none">
  101. <div class="layui-tab" style="padding: 10px 20px 0px;">
  102. <ul class="layui-tab-title">
  103. <li class="layui-this" style="margin-left: 0px;">自定义时间新建</li>
  104. <li>按直播活动新建</li>
  105. </ul>
  106. <div class="layui-tab-content" style="margin-top: 10px;">
  107. <div class="layui-tab-item layui-show">
  108. <form class="layui-form">
  109. <div class="layui-form-item">
  110. <label class="layui-form-label" for="title">时间区间:</label>
  111. <div class="layui-input-block">
  112. <input type="text" name="date" id="date" placeholder="选择时间区间" autocomplete="off"
  113. class="layui-input">
  114. </div>
  115. </div>
  116. <div class="layui-form-item">
  117. <label class="layui-form-label" for="title">活动标题:</label>
  118. <div class="layui-input-block">
  119. <input type="text" name="title" placeholder="设置活动标题" autocomplete="off"
  120. class="layui-input">
  121. </div>
  122. </div>
  123. <div class="layui-form-item" style="float: right;margin-right: 50px;">
  124. <button type="submit" class="layui-btn" lay-submit="" lay-filter="date">确定</button>
  125. </div>
  126. </form>
  127. </div>
  128. <div class="layui-tab-item">
  129. <form class="layui-form">
  130. <div class="layui-form-item">
  131. <label class="layui-form-label" for="title">开始活动:</label>
  132. <div class="layui-input-block">
  133. <select name="start">
  134. <option value="">请选择开始时间</option>
  135. {volist name="course" id="item"}
  136. <option value="{$item.cid}">{$item.title}</option>
  137. {/volist}
  138. </select>
  139. </div>
  140. </div>
  141. <div class="layui-form-item">
  142. <label class="layui-form-label" for="title">结束活动:</label>
  143. <div class="layui-input-block">
  144. <select name="end">
  145. <option value="">请选择结束时间</option>
  146. {volist name="course" id="item"}
  147. <option value="{$item.cid}">{$item.title}</option>
  148. {/volist}
  149. </select>
  150. </div>
  151. </div>
  152. <div class="layui-form-item">
  153. <label class="layui-form-label" for="title">活动标题:</label>
  154. <div class="layui-input-inline">
  155. <input type="text" name="title" placeholder="设置活动标题" autocomplete="off"
  156. class="layui-input">
  157. </div>
  158. </div>
  159. <div class="layui-form-item" style="float: right;margin-right: 50px;">
  160. <button type="submit" class="layui-btn" lay-submit="" lay-filter="course">确定</button>
  161. </div>
  162. </form>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <div id="edit" style="text-align: center;" class="none">
  168. <form class="layui-form">
  169. <div class="layui-form-item">
  170. <input type="text" name="date" id="date1" placeholder="时间区间" autocomplete="off" class="layui-input">
  171. </div>
  172. <div class="layui-form-item">
  173. <input type="text" name="title" placeholder="场次标题" autocomplete="off" class="layui-input">
  174. </div>
  175. <div class="layui-form-item">
  176. <div class="layui-input-block">
  177. <input type="hidden" name="id" value="">
  178. <button type="submit" class="layui-btn" lay-submit="" lay-filter="edit">确定</button>
  179. </div>
  180. </div>
  181. <input type="hidden" name="type" value="1">
  182. </form>
  183. </div>
  184. <div id="course" style="width: 600px;height:400px;" class="none">
  185. </div>
  186. <div id="user" class="none">
  187. <ul class="flow-default" id="behaver"></ul>
  188. </div>
  189. </body>
  190. {/block}
  191. {block name="js"}
  192. <script src="__STATIC__/js/echarts.min.js"></script>
  193. <script type="text/html" id="scene_title">
  194. {{d.title}}
  195. <a title="删除" lay-event="del" class="layui-btn layui-btn-xs">删除</a>
  196. <a title="修改" lay-event="edit" class="layui-btn layui-btn-xs layui-btn-danger">修改</a>
  197. </script>
  198. <script type="text/html" id="scene">
  199. {{d.start_date}} - {{d.end_date}}
  200. </script>
  201. <script type="text/html" id="tongji">
  202. <a title="活动监控" lay-event="course" class="layui-btn layui-btn-xs">PK监控</a>
  203. <a title="客户监控" lay-event="user" class="layui-btn layui-btn-xs">客户行为</a>
  204. <a title="排行榜" lay-event="rank" class="layui-btn layui-btn-xs">数据排行</a>
  205. </script>
  206. <script type="text/html" id="op">
  207. <input type="checkbox" name="show" value="{{d.id}}" lay-skin="switch" lay-text="是|否" lay-filter="show" {{ d.show == 1 ? 'checked' : '' }}>
  208. </script>
  209. <script type="text/html" id="team">
  210. <a lay-event="team">{{d.promoter}}</a>
  211. </script>
  212. <script>
  213. var indexurl = '{:url("broad/promoter_scene")}';
  214. var delurl = '{:url("promoter/delScene")}';
  215. var addurl = '{:url("promoter/addScene")}';
  216. var editurl = '{:url("promoter/editScene")}';
  217. var courseurl = '{:url("promoter/courseStatistics")}';
  218. var userurl = '{:url("promoter/userBehavior")}';
  219. var rankrurl = '{:url("promoter/rank")}';
  220. var showurl = '{:url("promoter/show")}';
  221. var myChart = echarts.init(document.getElementById('course'));
  222. var option = {
  223. tooltip: {},
  224. legend: {
  225. data: ['邀约人数', '预约人数', '观看人数', '下单人数']
  226. },
  227. xAxis: {
  228. data: []
  229. },
  230. yAxis: {
  231. minInterval: 1
  232. },
  233. series: [{
  234. name: '邀约人数',
  235. type: 'bar',
  236. data: []
  237. }, {
  238. name: '预约人数',
  239. type: 'bar',
  240. data: []
  241. }, {
  242. name: '观看人数',
  243. type: 'bar',
  244. data: []
  245. }, {
  246. name: '下单人数',
  247. type: 'bar',
  248. data: []
  249. }]
  250. };
  251. var t;
  252. layui.use(['table', 'form', 'laydate', 'element', 'flow'], function () {
  253. var form = layui.form
  254. , table = layui.table
  255. , laydate = layui.laydate
  256. , $ = layui.jquery
  257. , element = layui.element
  258. , flow = layui.flow
  259. , active = {
  260. reload: function () {
  261. //执行重载
  262. table.reload('dataTable', {
  263. page: {
  264. curr: 1 //重新从第 1 页开始
  265. }
  266. });
  267. }
  268. , del: function () {
  269. var id = this.data.id;
  270. layer.confirm('确定删除该场次么?',{title: ['信息', 'color:#333333;background-color:#D8E6F1;'],}, function () {
  271. $.post(delurl, { id: id }, function (rs) {
  272. if (rs.code == 1) {
  273. layer.msg(rs.msg, { anim: 6 });
  274. } else {
  275. layer.msg(rs.msg, { anim: 0 });
  276. active.reload();
  277. }
  278. });
  279. });
  280. }
  281. , add: function () {
  282. layer.open({
  283. type: 1
  284. , content: $('#add')
  285. , title: ['新建', 'color:#333333;background-color:#D8E6F1;']
  286. , resize: false,
  287. area: ['50%','50%']
  288. });
  289. }
  290. , edit: function () {
  291. var data = this.data;
  292. var input = $('#edit').find('input');
  293. input[0].value = data.start_date + ' - ' + data.end_date;
  294. input[1].value = data.title;
  295. input[2].value = data.id;
  296. layer.open({
  297. type: 1
  298. , content: $('#edit')
  299. , title: ['修改场次', 'color:#333333;background-color:#D8E6F1;'],
  300. resize: false,
  301. });
  302. }
  303. , course: function () {
  304. var id = this.data.id;
  305. $.post(courseurl, { id: id }, function (rs) {
  306. if (rs.code == 1) {
  307. layer.msg(rs.msg, { anim: 6 });
  308. } else {
  309. option.xAxis.data = rs.data.team;
  310. option.series[0].data = rs.data.user;
  311. option.series[1].data = rs.data.appoint;
  312. option.series[2].data = rs.data.join;
  313. option.series[3].data = rs.data.order;
  314. myChart.setOption(option);
  315. layer.open({
  316. type: 1
  317. , area: ['80%', '80%']
  318. , content: $('#course')
  319. , title: ['活动监控', 'color:#333333;background-color:#D8E6F1;']
  320. , closeBtn: 0
  321. , shadeClose: true
  322. , resize: false,
  323. });
  324. }
  325. });
  326. }
  327. , user: function () {
  328. var id = this.data.id;
  329. var max = 0;
  330. $('#behaver').html('');
  331. flow.load({
  332. elem: '#behaver' //流加载容器
  333. , done: function (page, next) {
  334. var lis = [];
  335. $.post(userurl, { id: id, page: page, max: max }, function (res) {
  336. max = res.max;
  337. layui.each(res.data, function (index, item) {
  338. lis.push('<li>' + item + '</li>');
  339. });
  340. next(lis.join(''), page < res.pages);
  341. });
  342. }
  343. });
  344. layer.open({
  345. type: 1
  346. , area: ['300px', '450px']
  347. , content: $('#user')
  348. , title: ['活动监控', 'color:#333333;background-color:#D8E6F1;']
  349. , closeBtn: 0
  350. , shadeClose: true
  351. , resize: false,
  352. });
  353. }
  354. , rank: function () {
  355. var id = this.data.id;
  356. layer.open({
  357. type: 2
  358. , area: ['380px', '560px']
  359. , content: rankrurl + '?id=' + id
  360. , title: ['排行榜', 'color:#333333;background-color:#D8E6F1;']
  361. , closeBtn: 0
  362. , shadeClose: true
  363. , resize: false,
  364. });
  365. }
  366. };
  367. element.on('tab(title)', function (data) {
  368. if ($(this).has('a').length) {
  369. location.href = $(this).find('a').eq(0).attr('href');
  370. }
  371. });
  372. laydate.render({
  373. elem: "#date",
  374. type: 'date',
  375. range: true
  376. });
  377. laydate.render({
  378. elem: "#date1",
  379. type: 'date',
  380. range: true
  381. });
  382. //展示已知数据
  383. t = table.render({
  384. elem: '#data'
  385. , page: true
  386. , height: 'full-180'
  387. , url: indexurl
  388. , cols: [[ //标题栏
  389. { field: 'title', templet: '#scene_title', title: '场次标题' }
  390. , { field: 'scene', templet: '#scene', title: '活动时间区间' }
  391. , { field: 'data', templet: '#tongji', title: '推广数据' }
  392. , { field: 'show', title: '在员工端展示', toolbar: '#op', width: 120, align: 'center', fixed: 'right' }
  393. ]]
  394. , id: 'dataTable'
  395. });
  396. $('.layui-form .layui-btn').on('click', function () {
  397. var type = $(this).data('type');
  398. active[type] ? active[type].call(this) : '';
  399. });
  400. table.on('tool(dataTable)', function (obj) {
  401. var type = obj.event;
  402. active[type] ? active[type].call(obj) : '';
  403. })
  404. form.on('switch(show)', function (obj) {
  405. var id = obj.value;
  406. var show = obj.elem.checked ? 1 : 0;
  407. if (show == 1) {
  408. var tobei = $(obj.elem).closest('tr').siblings('tr');
  409. tobei.find('input').attr('checked', false);
  410. tobei.find('.layui-form-switch').removeClass('layui-form-onswitch');
  411. tobei.find('.layui-form-switch').find('em').text('否');
  412. }
  413. $.post(showurl, { id: id, show: show }, function (rs) {
  414. if (rs.code == 1) {
  415. layer.msg(rs.msg, { anim: 6 });
  416. } else {
  417. layer.msg(rs.msg, { anim: 0 });
  418. }
  419. });
  420. });
  421. form.on('submit(course)', function (data) {
  422. layer.closeAll();
  423. var param = data.field;
  424. param.type = 2;
  425. addscene(param);
  426. return false;
  427. });
  428. form.on('submit(date)', function (data) {
  429. layer.closeAll();
  430. var param = data.field;
  431. param.type = 1;
  432. addscene(param);
  433. return false;
  434. });
  435. form.on('submit(edit)', function (data) {
  436. layer.closeAll();
  437. var param = data.field;
  438. $.post(editurl, param, function (rs) {
  439. if (rs.code == 1) {
  440. layer.msg(rs.msg, { anim: 6 });
  441. } else {
  442. layer.msg(rs.msg, { anim: 0 });
  443. active.reload();
  444. }
  445. });
  446. return false;
  447. });
  448. function addscene(data) {
  449. $.post(addurl, data, function (rs) {
  450. if (rs.code == 1) {
  451. layer.msg(rs.msg, { anim: 6 });
  452. } else {
  453. layer.msg(rs.msg, { anim: 0 });
  454. active.reload();
  455. }
  456. });
  457. }
  458. });
  459. </script>
  460. {/block}