customer_list.html 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075
  1. {extend name="public/layout" /}
  2. {block name="title"}客户统计列表{/block}
  3. {block name="head"}
  4. {include file="public/head"}
  5. <style>
  6. html,
  7. body {
  8. min-width: 1100px;
  9. }
  10. .layui-table th:last-child {
  11. border-right: none;
  12. }
  13. .layui-table-view .layui-table {
  14. /* width:100% */
  15. }
  16. .layui-table thead tr,
  17. .layui-table-header {
  18. background-color: #D8E6F1 !important;
  19. }
  20. .line-middle {
  21. width: 10px;
  22. height: 100%;
  23. margin: 0px 10px;
  24. }
  25. .line {
  26. width: 10px;
  27. height: 2px;
  28. background-color: #999999;
  29. }
  30. .mb0 {
  31. margin-bottom: 0px;
  32. }
  33. .layui-btn {
  34. background-color: #fff;
  35. color: #555;
  36. border: 1px solid #c9c9c9
  37. }
  38. .layui-btn:hover {
  39. background-color: #fff;
  40. color: #555;
  41. border: 1px solid #249efb;
  42. }
  43. .layui-btn-primary,
  44. .sBtn {
  45. background-color: #249efb;
  46. color: #fff;
  47. border: 1px solid #249efb;
  48. }
  49. .layui-btn-primary:hover {
  50. background-color: #249efb;
  51. color: #fff;
  52. border: 1px solid #249efb;
  53. }
  54. .sBtn:hover {
  55. background-color: #249efb;
  56. color: #fff;
  57. border: 1px solid #249efb;
  58. }
  59. .flex-row,
  60. .row {
  61. display: flex;
  62. }
  63. .align-center {
  64. align-items: center;
  65. }
  66. .ml10 {
  67. margin-left: 10px;
  68. }
  69. .mt10 {
  70. margin-top: 10px;
  71. }
  72. .padding-tlr {
  73. padding: 15px 15px 0px;
  74. }
  75. .layui-input-block {
  76. margin-left: 0px;
  77. }
  78. .justify-between {
  79. justify-content: space-between;
  80. }
  81. table tr td a {
  82. color: #249EFB;
  83. }
  84. .qdtj_m {
  85. padding: 0 15px;
  86. width: 100%;
  87. box-sizing: border-box;
  88. margin: 20px 0 10px;
  89. }
  90. .qdtj_ul {
  91. overflow: hidden;
  92. border: 1px solid #94D0FF;
  93. padding: 15px 0;
  94. background-color: #FBFDFF;
  95. }
  96. .qdtj_ul li {
  97. float: left;
  98. position: relative;
  99. text-align: center;
  100. width: 10%;
  101. }
  102. .qdtj_1 {
  103. font-size: 20px;
  104. font-weight: 400;
  105. }
  106. .qdtj_2 {
  107. font-size: 14px;
  108. color: #888;
  109. margin-top: 5px
  110. }
  111. .qdtj_r_x {
  112. height: 40px;
  113. width: 1px;
  114. background: #D8D8D9;
  115. position: absolute;
  116. right: 0;
  117. top: 50%;
  118. margin-top: -20px;
  119. }
  120. .layui-card-body .layui-table-body {
  121. overflow-y: auto !important;
  122. height: 75vh;
  123. }
  124. .layui-table td,
  125. .layui-table th,
  126. .layui-table-col-set,
  127. .layui-table-fixed-r,
  128. .layui-table-grid-down,
  129. .layui-table-header,
  130. .layui-table-page,
  131. .layui-table-tips-main,
  132. .layui-table-tool,
  133. .layui-table-total,
  134. .layui-table-view,
  135. .layui-table[lay-skin=line],
  136. .layui-table[lay-skin=row] {
  137. border-color: #ccc !important;
  138. }
  139. .layui-table-fixed-r .layui-table-body {
  140. overflow: hidden !important;
  141. }
  142. .relative {
  143. position: relative;
  144. }
  145. .lay-setting {
  146. position: absolute;
  147. right: 40px;
  148. top: 20px;
  149. z-index: 999 !important;
  150. cursor: pointer;
  151. }
  152. .selectDateBox {
  153. position: absolute;
  154. width: 330px;
  155. height: 100px;
  156. box-shadow: 0 2px 4px rgb(0 0 0 / 12%);
  157. background-color: #fff;
  158. z-index: 99999 !important;
  159. top: 45px;
  160. box-sizing: border-box;
  161. padding: 5px 8px;
  162. }
  163. .selecstDateBox {
  164. position: absolute;
  165. width: 330px;
  166. height: 100px;
  167. box-shadow: 0 2px 4px rgb(0 0 0 / 12%);
  168. background-color: #fff;
  169. z-index: 99999 !important;
  170. top: 45px;
  171. right: 0;
  172. box-sizing: border-box;
  173. padding: 5px 8px;
  174. }
  175. .date-flex,
  176. .date-flex1 {
  177. display: flex;
  178. align-items: center;
  179. }
  180. .date-box {
  181. padding: 15px 0px 10px;
  182. }
  183. #rangeDepart {
  184. width: 260px;
  185. height: 38px;
  186. }
  187. xm-select>.xm-body {
  188. z-index: 99999 !important;
  189. }
  190. xm-select > .xm-label .scroll .label-content {
  191. flex-wrap: nowrap !important;
  192. overflow-x: auto;
  193. overflow-y: hidden;
  194. white-space: nowrap;
  195. }
  196. xm-select > .xm-label .scroll .label-content::-webkit-scrollbar {
  197. display: none;
  198. }
  199. </style>
  200. {/block}
  201. {block name="body"}
  202. <div class="layui-fluid" style="background-color: #fff;">
  203. <div class="layui-card">
  204. <div class="search-form layui-form padding-tlr">
  205. <div class="flex-row align-center justify-between">
  206. <div class="flex-row align-center">
  207. <div class="layui-input-block" style="margin-right: 10px;">
  208. <button class="layui-btn ml10" id="tablebtn">导出</button>
  209. </div>
  210. <div class="layui-input-block" style="line-height:36px;">
  211. <a href="javascript:void(0)" id="customer-export-list" style="color:#249efb;">查看</a>
  212. </div>
  213. </div>
  214. <div class="flex-row align-center">
  215. <div class="layui-input-block">
  216. <input type="text" class="layui-input" id="employee_name" autocomplete="off" name="employee_name"
  217. placeholder="请输入员工名称">
  218. </div>
  219. <div class="layui-input-inline layui-form ml10">
  220. <div id="rangeDepart"></div>
  221. </div>
  222. <div class="layui-input-inline layui-form ml10" style="display:inline-block;width:210px;">
  223. <!-- <label class="layui-form-label" style="width: 60px;">跟进时间</label> -->
  224. <div class="layui-input-inline select-date relative">
  225. <!-- 注意:这一层元素并不是必须的 -->
  226. <input type="text" class="layui-input" id="sDate" name="start_date" placeholder="开始日期 - 结束日期"
  227. autocomplete="off">
  228. <div data-type="" class="selecstDateBox layui-hide">
  229. <div data-type="" class="date-flex1">
  230. <div data-type="today" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">今日
  231. </div>
  232. <div data-type="yesterday" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">昨日</div>
  233. <div data-type="week" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">本周
  234. </div>
  235. <div data-type="lastWeek" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">上周</div>
  236. <div data-type="month" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">本月
  237. </div>
  238. <div data-type="lastMonth" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">上月</div>
  239. <div data-type="all" class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs">
  240. 累计</div>
  241. </div>
  242. <div data-type="" class="date-box">
  243. <input data-type="" type="text" id="select_sDate" placeholder="选择开始时间 - 结束时间" readonly
  244. autocomplete="off" class="layui-input">
  245. </div>
  246. </div>
  247. </div>
  248. </div>
  249. <div class="layui-input-inline layui-form ml10">
  250. <select name="source_id" class="type_id" id="source_id" lay-search>
  251. <option value="">请选择来源</option>
  252. {volist name="source" id="i"}
  253. <option value="{$i.id}">{$i.source}</option>
  254. {/volist}
  255. </select>
  256. </div>
  257. <div class="layui-input-inline layui-form ml10">
  258. <select name="customer_type" id="customer_type_ele" lay-search>
  259. <option value="">客户种类</option>
  260. <option value="1">资源库</option>
  261. <option value="2">活动报名</option>
  262. <option value="3">装修推荐官</option>
  263. <option value="4">自建</option>
  264. <option value="5">公海获取</option>
  265. </select>
  266. </div>
  267. </div>
  268. <div style="width:160px;display: flex;">
  269. <button class="layui-btn sBtn ml10 submitbtn" lay-submit lay-filter="table-search">筛选</button>
  270. <button class="layui-btn sBtn" style="margin-left: 18px;" id="resetbtn" type="reset">重置</button>
  271. </div>
  272. </div>
  273. </div>
  274. <div class="layui-card-body relative">
  275. <i class="layui-icon layui-icon-set-fill lay-setting"></i>
  276. <table lay-filter="datalist" id="list"></table>
  277. </div>
  278. </div>
  279. </div>
  280. {/block}
  281. {block name="js"}
  282. <script src="__STATIC__/layui/layui/lay/modules/xm-select.js" type="text/javascript" charset="utf-8"></script>
  283. <script type="text/html" id="name">
  284. {{# if(d.name == '未知'){ }}
  285. <span style="color: #CCCCCC">{{d.name}}</span>
  286. {{# }else{ }}
  287. <span>{{d.name}}</span>
  288. {{# } }}
  289. </script>
  290. <script type="text/html" id="community_name">
  291. {{# if(d.community_name == '未知'){ }}
  292. <span style="color: #CCCCCC">{{d.community_name}}</span>
  293. {{# }else{ }}
  294. <span>{{d.community_name}}</span>
  295. {{# } }}
  296. </script>
  297. <script type="text/html" id="house_type">
  298. {{# if(d.house_type == '未知'){ }}
  299. <span style="color: #CCCCCC">{{d.house_type}}</span>
  300. {{# }else{ }}
  301. <span>{{d.house_type}}</span>
  302. {{# } }}
  303. </script>
  304. <script type="text/html" id="house_delivery_time">
  305. {{# if(d.house_delivery_time == '未知'){ }}
  306. <span style="color: #CCCCCC">{{d.house_delivery_time}}</span>
  307. {{# }else{ }}
  308. <span>{{d.house_delivery_time}}</span>
  309. {{# } }}
  310. </script>
  311. <script type="text/html" id="square">
  312. {{# if(d.square == '未知'){ }}
  313. <span style="color: #CCCCCC">{{d.square}}</span>
  314. {{# }else{ }}
  315. <span>{{d.square}}</span>
  316. {{# } }}
  317. </script>
  318. <script type="text/html" id="employee">
  319. {{# if(d.employee_name == '无'){ }}
  320. <span style="color: #CCCCCC">{{d.employee_name}}</span>
  321. {{# }else{ }}
  322. <span>{{d.employee_name}}</span>
  323. {{# } }}
  324. </script>
  325. <script type="text/html" id="source">
  326. {{# if(d.source_name == '未知'){ }}
  327. <span style="color: #CCCCCC">{{d.source_name}}</span>
  328. {{# }else{ }}
  329. <span>{{d.source_name}}</span>
  330. {{# } }}
  331. </script>
  332. <script type="text/html" id="assigned_personal_manager">
  333. {{# if(d.assigned_personal_manager == '无'){ }}
  334. <span style="color: #CCCCCC">{{d.assigned_personal_manager}}</span>
  335. {{# }else{ }}
  336. <span>{{d.assigned_personal_manager}}</span>
  337. {{# } }}
  338. </script>
  339. <script type="text/html" id="assigned_personal_designer_org">
  340. {{# if(d.assigned_personal_designer_org == '无'){ }}
  341. <span style="color: #CCCCCC">{{d.assigned_personal_designer_org}}</span>
  342. {{# }else{ }}
  343. <span>{{d.assigned_personal_designer_org}}</span>
  344. {{# } }}
  345. </script>
  346. <script type="text/html" id="assigned_personal_designer">
  347. {{# if(d.assigned_personal_designer == '无'){ }}
  348. <span style="color: #CCCCCC">{{d.assigned_personal_designer}}</span>
  349. {{# }else{ }}
  350. <span>{{d.assigned_personal_designer}}</span>
  351. {{# } }}
  352. </script>
  353. <script type="text/html" id="add_wechat_type">
  354. {{# if(d.add_wechat_type == '无'){ }}
  355. <span style="color: #CCCCCC">{{d.add_wechat_type}}</span>
  356. {{# }else{ }}
  357. <span>{{d.add_wechat_type}}</span>
  358. {{# } }}
  359. </script>
  360. <script type="text/html" id="add_wechat_time">
  361. {{# if(d.add_wechat_time == '无'){ }}
  362. <span style="color: #CCCCCC">{{d.add_wechat_time}}</span>
  363. {{# }else{ }}
  364. <span>{{d.add_wechat_time}}</span>
  365. {{# } }}
  366. </script>
  367. <script type="text/html" id="group_building_date">
  368. {{# if(d.group_building_date == '无'){ }}
  369. <span style="color: #CCCCCC">{{d.group_building_date}}</span>
  370. {{# }else{ }}
  371. <span>{{d.group_building_date}}</span>
  372. {{# } }}
  373. </script>
  374. <script type="text/html" id="liangfang_date">
  375. {{# if(d.liangfang_date == '无'){ }}
  376. <span style="color: #CCCCCC">{{d.liangfang_date}}</span>
  377. {{# }else{ }}
  378. <span>{{d.liangfang_date}}</span>
  379. {{# } }}
  380. </script>
  381. <script type="text/html" id="once_liangfang_days">
  382. {{# if(d.once_liangfang_days == '无'){ }}
  383. <span style="color: #CCCCCC">{{d.once_liangfang_days}}</span>
  384. {{# }else{ }}
  385. <span>{{d.once_liangfang_days}}</span>
  386. {{# } }}
  387. </script>
  388. <script type="text/html" id="plan_issuing_date">
  389. {{# if(d.plan_issuing_date == '无'){ }}
  390. <span style="color: #CCCCCC">{{d.plan_issuing_date}}</span>
  391. {{# }else{ }}
  392. <span>{{d.plan_issuing_date}}</span>
  393. {{# } }}
  394. </script>
  395. <script type="text/html" id="daodian_date">
  396. {{# if(d.daodian_date == '无'){ }}
  397. <span style="color: #CCCCCC">{{d.daodian_date}}</span>
  398. {{# }else{ }}
  399. <span>{{d.daodian_date}}</span>
  400. {{# } }}
  401. </script>
  402. <script type="text/html" id="once_daodian_shop">
  403. {{# if(d.once_daodian_shop == '无' || d.once_daodian_shop == '未知'){ }}
  404. <span style="color: #CCCCCC">{{d.once_daodian_shop}}</span>
  405. {{# }else{ }}
  406. <span>{{d.once_daodian_shop}}</span>
  407. {{# } }}
  408. </script>
  409. <script type="text/html" id="twice_daodian_shop">
  410. {{# if(d.twice_daodian_shop == '无' || d.twice_daodian_shop == '未知'){ }}
  411. <span style="color: #CCCCCC">{{d.twice_daodian_shop}}</span>
  412. {{# }else{ }}
  413. <span>{{d.twice_daodian_shop}}</span>
  414. {{# } }}
  415. </script>
  416. <script type="text/html" id="once_daodian_days">
  417. {{# if(d.once_daodian_days == '无'){ }}
  418. <span style="color: #CCCCCC">{{d.once_daodian_days}}</span>
  419. {{# }else{ }}
  420. <span>{{d.once_daodian_days}}</span>
  421. {{# } }}
  422. </script>
  423. <script type="text/html" id="liangfang_daodian_days">
  424. {{# if(d.liangfang_daodian_days == '无'){ }}
  425. <span style="color: #CCCCCC">{{d.liangfang_daodian_days}}</span>
  426. {{# }else{ }}
  427. <span>{{d.liangfang_daodian_days}}</span>
  428. {{# } }}
  429. </script>
  430. <script type="text/html" id="twice_daodian_date">
  431. {{# if(d.twice_daodian_date == '无'){ }}
  432. <span style="color: #CCCCCC">{{d.twice_daodian_date}}</span>
  433. {{# }else{ }}
  434. <span>{{d.twice_daodian_date}}</span>
  435. {{# } }}
  436. </script>
  437. <script type="text/html" id="twice_daodian_days">
  438. {{# if(d.twice_daodian_days == '无'){ }}
  439. <span style="color: #CCCCCC">{{d.twice_daodian_days}}</span>
  440. {{# }else{ }}
  441. <span>{{d.twice_daodian_days}}</span>
  442. {{# } }}
  443. </script>
  444. <script type="text/html" id="deposit_date">
  445. {{# if(d.deposit_date == '无'){ }}
  446. <span style="color: #CCCCCC">{{d.deposit_date}}</span>
  447. {{# }else{ }}
  448. <span>{{d.deposit_date}}</span>
  449. {{# } }}
  450. </script>
  451. <script type="text/html" id="drawing_date">
  452. {{# if(d.drawing_date == '无'){ }}
  453. <span style="color: #CCCCCC">{{d.drawing_date}}</span>
  454. {{# }else{ }}
  455. <span>{{d.drawing_date}}</span>
  456. {{# } }}
  457. </script>
  458. <script type="text/html" id="sign_date">
  459. {{# if(d.sign_date == '无'){ }}
  460. <span style="color: #CCCCCC">{{d.sign_date}}</span>
  461. {{# }else{ }}
  462. <span>{{d.sign_date}}</span>
  463. {{# } }}
  464. </script>
  465. <script type="text/html" id="sign_days">
  466. {{# if(d.sign_days == '无'){ }}
  467. <span style="color: #CCCCCC">{{d.sign_days}}</span>
  468. {{# }else{ }}
  469. <span>{{d.sign_days}}</span>
  470. {{# } }}
  471. </script>
  472. <script type="text/html" id="signed_money">
  473. {{# if(d.signed_money_data){ }}
  474. <span>{{d.signed_money_data}}</span>
  475. {{# }else{ }}
  476. <span style="color: #CCCCCC">无</span>
  477. {{# } }}
  478. </script>
  479. <script type="text/html" id="first_visit_no_sign">
  480. {{# if(d.first_visit_no_sign == '无'){ }}
  481. <span style="color: #CCCCCC">{{d.first_visit_no_sign}}</span>
  482. {{# }else{ }}
  483. <span>{{d.first_visit_no_sign}}</span>
  484. {{# } }}
  485. </script>
  486. <script type="text/html" id="manager_visit_times">
  487. {{# if(d.manager_visit_times == '无'){ }}
  488. <span style="color: #CCCCCC">{{d.manager_visit_times}}</span>
  489. {{# }else{ }}
  490. <span>{{d.manager_visit_times}}</span>
  491. {{# } }}
  492. </script>
  493. <script type="text/html" id="manager_visit_cycle">
  494. {{# if(d.manager_visit_cycle == '无'){ }}
  495. <span style="color: #CCCCCC">{{d.manager_visit_cycle}}</span>
  496. {{# }else{ }}
  497. <span>{{d.manager_visit_cycle}}</span>
  498. {{# } }}
  499. </script>
  500. <script type="text/html" id="employee_visit_times">
  501. {{# if(d.employee_visit_times == '无'){ }}
  502. <span style="color: #CCCCCC">{{d.employee_visit_times}}</span>
  503. {{# }else{ }}
  504. <span>{{d.employee_visit_times}}</span>
  505. {{# } }}
  506. </script>
  507. <script type="text/html" id="employee_visit_cycle">
  508. {{# if(d.employee_visit_cycle == '无'){ }}
  509. <span style="color: #CCCCCC">{{d.employee_visit_cycle}}</span>
  510. {{# }else{ }}
  511. <span>{{d.employee_visit_cycle}}</span>
  512. {{# } }}
  513. </script>
  514. <script type="text/html" id="group_building_date">
  515. {{# if(d.group_building_date == '无'){ }}
  516. <span style="color: #CCCCCC">{{d.group_building_date}}</span>
  517. {{# }else{ }}
  518. <span>{{d.group_building_date}}</span>
  519. {{# } }}
  520. </script>
  521. <script type="text/html" id="cz">
  522. <a class="layui-btn layui-btn-xs " lay-event="toview">详情</a>
  523. <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="foot">足迹</a>
  524. <a class="layui-btn layui-btn-xs " lay-event="log">跟进记录</a>
  525. </script>
  526. <script>
  527. layui.use(['table', 'form', 'laydate', 'element'], function () {
  528. let table = layui.table,
  529. laydate = layui.laydate,
  530. form = layui.form,
  531. element = layui.element,
  532. $ = layui.$;
  533. $('body').attr('layadmin-themealias', 'default');
  534. var bodyH = $('.body-h').height() * 0.82;
  535. var istypes = 0;
  536. //执行一个laydate实例
  537. // laydate.render({
  538. // elem: '#sDate' //指定元素
  539. // });
  540. // laydate.render({
  541. // elem: '#eDate' //指定元素
  542. // });
  543. $('#addWechatTime').click(function () {
  544. $('.selectDateBox').toggleClass('layui-hide');
  545. $('.selecstDateBox').addClass('layui-hide');
  546. })
  547. $('#sDate').click(function () {
  548. $('.selecstDateBox').toggleClass('layui-hide');
  549. $('.selectDateBox').addClass('layui-hide');
  550. })
  551. laydate.render({
  552. elem: '#select_date'
  553. , type: 'date'
  554. , range: true
  555. , format: 'yyyy/MM/dd'
  556. , trigger: 'click',//呼出事件改成click
  557. done: function (value, date, endDate) {
  558. $('.selectDateBox').addClass('layui-hide');
  559. $('#addWechatTime').val(value);
  560. }
  561. });
  562. laydate.render({
  563. elem: '#select_sDate' //指定元素
  564. , type: 'date'
  565. , format: 'yyyy/MM/dd'
  566. , range: true
  567. , trigger: 'click',//呼出事件改成click
  568. done: function (value, date, endDate) {
  569. $('.selecstDateBox').addClass('layui-hide');
  570. $('#sDate').val(value);
  571. }
  572. });
  573. var dateObj = {};
  574. setDate();
  575. function setDate() {
  576. let date = new Date();
  577. let year = date.getFullYear();
  578. let month = date.getMonth() + 1;
  579. let day = date.getDate();
  580. let lastDate = new Date(new Date().getTime() - (1 * 24 * 60 * 60 * 1000));
  581. let lastYear = lastDate.getFullYear();
  582. let lastMonth = lastDate.getMonth() + 1;
  583. let lastDay = lastDate.getDate();
  584. let weekObj = getMondayAndSunday();
  585. let monthObj = getMonthFirstDayAndLastDay();
  586. dateObj = {
  587. today: `${year}/${month}/${day}`,
  588. yesterday: `${lastYear}/${lastMonth}/${lastDay}`,
  589. ...weekObj,
  590. ...monthObj
  591. }
  592. }
  593. var departTree = xmSelect.render({
  594. el: "#rangeDepart",
  595. name: 'select_org_id',
  596. autoRow: true,
  597. filterable: true,
  598. tips: '请选择',
  599. tree: {
  600. show: true,
  601. showFolderIcon: true,
  602. showLine: true,
  603. indent: 20,
  604. expandedKeys: [-3],
  605. //是否严格遵守父子模式
  606. strict: false,
  607. },
  608. height: "200px",
  609. data: [],
  610. //文本显示模式
  611. //处理方式
  612. });
  613. $.ajax({
  614. url: '{:url("statistics/get_person")}',
  615. type: "post",
  616. data: {},
  617. success: function (res) {
  618. departTree.update({ data: res })
  619. }
  620. })
  621. $('.date-flex div').click(function () {
  622. let type = $(this).prop('dataset').type;
  623. if (type == 'today') {
  624. $('#select_date').val(`${dateObj.today} - ${dateObj.today}`);
  625. $('#addWechatTime').val(`${dateObj.today} - ${dateObj.today}`);
  626. } else if (type == 'yesterday') {
  627. $('#select_date').val(`${dateObj.yesterday} - ${dateObj.yesterday}`);
  628. $('#addWechatTime').val(`${dateObj.yesterday} - ${dateObj.yesterday}`);
  629. } else if (type == 'week') {
  630. $('#select_date').val(`${dateObj.thisWeekMonday} - ${dateObj.thisWeekSunday}`);
  631. $('#addWechatTime').val(`${dateObj.thisWeekMonday} - ${dateObj.thisWeekSunday}`);
  632. } else if (type == 'lastWeek') {
  633. $('#select_date').val(`${dateObj.lastWeekMonday} - ${dateObj.lastWeekSunday}`);
  634. $('#addWechatTime').val(`${dateObj.lastWeekMonday} - ${dateObj.lastWeekSunday}`);
  635. } else if (type == 'month') {
  636. $('#select_date').val(`${dateObj.thisMonthFirstDay} - ${dateObj.thisMonthLastDay}`);
  637. $('#addWechatTime').val(`${dateObj.thisMonthFirstDay} - ${dateObj.thisMonthLastDay}`);
  638. } else if (type == 'lastMonth') {
  639. $('#select_date').val(`${dateObj.lastMonthFirstDay} - ${dateObj.lastMonthLastDay}`);
  640. $('#addWechatTime').val(`${dateObj.lastMonthFirstDay} - ${dateObj.lastMonthLastDay}`);
  641. } else {
  642. $('#select_date').val('');
  643. $('#sDate').val('')
  644. $('#addWechatTime').val('');
  645. }
  646. $('.selectDateBox').addClass('layui-hide');
  647. })
  648. $('.date-flex1 div').click(function () {
  649. let type = $(this).prop('dataset').type;
  650. if (type == 'today') {
  651. itmesss = dateToYYYYMMDD(dateObj.today);
  652. itmesss2 = dateToYYYYMMDD(dateObj.today);
  653. $('#select_sDate').val(itmesss + ' - ' + itmesss2);
  654. $('#sDate').val(itmesss + ' - ' + itmesss2);
  655. } else if (type == 'yesterday') {
  656. itmesss = dateToYYYYMMDD(dateObj.yesterday);
  657. itmesss2 = dateToYYYYMMDD(dateObj.yesterday);
  658. $('#select_sDate').val(itmesss + ' - ' + itmesss2);
  659. $('#sDate').val(itmesss + ' - ' + itmesss2);
  660. } else if (type == 'week') {
  661. $('#select_sDate').val(`${dateObj.thisWeekMonday} - ${dateObj.thisWeekSunday}`);
  662. $('#sDate').val(`${dateObj.thisWeekMonday} - ${dateObj.thisWeekSunday}`);
  663. } else if (type == 'lastWeek') {
  664. $('#select_sDate').val(`${dateObj.lastWeekMonday} - ${dateObj.lastWeekSunday}`);
  665. $('#sDate').val(`${dateObj.lastWeekMonday} - ${dateObj.lastWeekSunday}`);
  666. } else if (type == 'month') {
  667. $('#select_sDate').val(`${dateObj.thisMonthFirstDay} - ${dateObj.thisMonthLastDay}`);
  668. $('#sDate').val(`${dateObj.thisMonthFirstDay} - ${dateObj.thisMonthLastDay}`);
  669. } else if (type == 'lastMonth') {
  670. $('#select_sDate').val(`${dateObj.lastMonthFirstDay} - ${dateObj.lastMonthLastDay}`);
  671. $('#sDate').val(`${dateObj.lastMonthFirstDay} - ${dateObj.lastMonthLastDay}`);
  672. } else {
  673. $('#select_sDate').val('');
  674. $('#sDate').val('');
  675. }
  676. $('.selecstDateBox').addClass('layui-hide');
  677. })
  678. function getMondayAndSunday() {
  679. var today = new Date();
  680. //构建当前日期,格式:2022-08-22 00:00:00
  681. var year = today.getFullYear(); //本年
  682. var month = today.getMonth() + 1; //本月
  683. var day = today.getDate(); //本日
  684. var newDate = new Date(year + "/" + month + "/" + day + " 00:00:00"); //年月日拼接
  685. var nowTime = newDate.getTime(); //当前的时间戳
  686. var weekDay = newDate.getDay(); //当前星期 0.1.2.3.4.5.6 【0 = 周日】
  687. var oneDayTime = 24 * 60 * 60 * 1000; //一天的总ms
  688. // 当前星期减去天数,如今天为周五,则本周一为周五的时间戳减去4天的时间戳。但周日特殊,周一至周六是周几的到的weekDay就是几,但是周日的到的为0,需特殊处理
  689. var thisWeekMondayTime = (1 - weekDay) * oneDayTime + nowTime; //本周一的时间戳
  690. if (weekDay == 0) {
  691. // weekDay = 0 为周日,此时本周一时间为周日减去6天的时间
  692. thisWeekMondayTime = nowTime - 6 * oneDayTime
  693. }
  694. var thisWeekSundayTime = thisWeekMondayTime + 6 * 24 * 60 * 60 * 1000 // 本周日
  695. var lastWeekMondayTime = thisWeekMondayTime - 7 * oneDayTime // 上周一
  696. var lastWeekSundayTime = thisWeekMondayTime - oneDayTime // 上周日
  697. var res = {
  698. thisWeekMonday: dateToYYYYMMDD(thisWeekMondayTime),
  699. thisWeekSunday: dateToYYYYMMDD(thisWeekSundayTime),
  700. lastWeekMonday: dateToYYYYMMDD(lastWeekMondayTime),
  701. lastWeekSunday: dateToYYYYMMDD(lastWeekSundayTime),
  702. }
  703. return res;
  704. }
  705. function getMonthFirstDayAndLastDay() {
  706. var date = new Date()
  707. // 值得注意的是,如果day取值为0,意味着取的是date时间的上一个月的最后一天,简单理解:date当前月的第一天,再减去一天
  708. var thisMonthFirstDay = date.setDate(1) // 本月第一天
  709. var thisMonthLastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0) // 本月最后一天
  710. var lastMonthFirstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1) // 上月第一天
  711. var lastMonthLastDay = date.setDate(0) // 上月最后一天
  712. // var day = new Date(date.getFullYear(), date.getMonth(), 0).getDate()
  713. // var lastMonthLastDay = new Date(date.getFullYear(), date.getMonth() - 1, day) // 上月最后一天
  714. var res = {
  715. thisMonthFirstDay: dateToYYYYMMDD(thisMonthFirstDay),
  716. thisMonthLastDay: dateToYYYYMMDD(thisMonthLastDay),
  717. lastMonthFirstDay: dateToYYYYMMDD(lastMonthFirstDay),
  718. lastMonthLastDay: dateToYYYYMMDD(lastMonthLastDay),
  719. }
  720. return res
  721. }
  722. function dateToYYYYMMDD(date) {
  723. var time = new Date(date);
  724. var y = time.getFullYear();
  725. var m = (time.getMonth() + 1);
  726. m = m > 9 ? m : '0' + m;
  727. var d = time.getDate();
  728. d = d > 9 ? d : '0' + d;
  729. return y + "/" + m + "/" + d;
  730. }
  731. window.parent.ajaxslist = function () {
  732. ajaxlist();
  733. };
  734. ajaxlist();
  735. function ajaxlist() {
  736. $.ajax({
  737. type: "post",
  738. url: '{:url("statistics/fieldList")}',
  739. data: {
  740. type: 4
  741. },
  742. success: function (res) {
  743. data = res.data;
  744. tableData = JSON.parse(JSON.stringify(data));
  745. renderTableHtml(data);
  746. }
  747. });
  748. }
  749. function renderTableHtml(data) {
  750. msgindex = layer.msg('加载中...', {
  751. icon: 16, time: -1
  752. })
  753. let cols = [[]];
  754. Object.keys(data).forEach(key => {
  755. if (key == 'name' && data[key].show == 1) {
  756. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#name', ...data[key] });
  757. } else if (key == 'community_name' && data[key].show == 1) {
  758. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#community_name', ...data[key] });
  759. } else if (key == 'house_type' && data[key].show == 1) {
  760. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#house_type', ...data[key] });
  761. } else if (key == 'house_delivery_time' && data[key].show == 1) {
  762. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#house_delivery_time', ...data[key] });
  763. } else if (key == 'square' && data[key].show == 1) {
  764. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#square', ...data[key] });
  765. } else if (key == 'employee_name' && data[key].show == 1) {
  766. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#employee', ...data[key] });
  767. } else if (key == 'source_name' && data[key].show == 1) {
  768. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#source', ...data[key] });
  769. } else if (key == 'assigned_personal_manager' && data[key].show == 1) {
  770. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#assigned_personal_manager', ...data[key] });
  771. } else if (key == 'assigned_personal_designer_org' && data[key].show == 1) {
  772. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#assigned_personal_designer_org', ...data[key] });
  773. } else if (key == 'assigned_personal_designer' && data[key].show == 1) {
  774. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#assigned_personal_designer', ...data[key] });
  775. } else if (key == 'add_wechat_type' && data[key].show == 1) {
  776. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#add_wechat_type', ...data[key] });
  777. } else if (key == 'add_wechat_time' && data[key].show == 1) {
  778. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#add_wechat_time', ...data[key] });
  779. } else if (key == 'group_building_date' && data[key].show == 1) {
  780. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#group_building_date', ...data[key] });
  781. } else if (key == 'liangfang_date' && data[key].show == 1) {
  782. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#liangfang_date', ...data[key] });
  783. } else if (key == 'once_liangfang_days' && data[key].show == 1) {
  784. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#once_liangfang_days', ...data[key] });
  785. } else if (key == 'plan_issuing_date' && data[key].show == 1) {
  786. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#plan_issuing_date', ...data[key] });
  787. } else if (key == 'daodian_date' && data[key].show == 1) {
  788. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#daodian_date', ...data[key] });
  789. } else if (key == 'once_daodian_shop' && data[key].show == 1) {
  790. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#once_daodian_shop', ...data[key] });
  791. } else if (key == 'once_daodian_days' && data[key].show == 1) {
  792. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#once_daodian_days', ...data[key] });
  793. } else if (key == 'liangfang_daodian_days' && data[key].show == 1) {
  794. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#liangfang_daodian_days', ...data[key] });
  795. } else if (key == 'twice_daodian_date' && data[key].show == 1) {
  796. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#twice_daodian_date', ...data[key] });
  797. } else if (key == 'twice_daodian_shop' && data[key].show == 1) {
  798. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#twice_daodian_shop', ...data[key] });
  799. } else if (key == 'twice_daodian_days' && data[key].show == 1) {
  800. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#twice_daodian_days', ...data[key] });
  801. } else if (key == 'deposit_date' && data[key].show == 1) {
  802. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#deposit_date', ...data[key] });
  803. } else if (key == 'drawing_date' && data[key].show == 1) {
  804. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#drawing_date', ...data[key] });
  805. } else if (key == 'sign_date' && data[key].show == 1) {
  806. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#sign_date', ...data[key] });
  807. } else if (key == 'sign_days' && data[key].show == 1) {
  808. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#sign_days', ...data[key] });
  809. } else if (key == 'signed_money_data' && data[key].show == 1) {
  810. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#signed_money', ...data[key] });
  811. } else if (key == 'first_visit_no_sign' && data[key].show == 1) {
  812. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#first_visit_no_sign', ...data[key] });
  813. } else if (key == 'manager_visit_times' && data[key].show == 1) {
  814. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#manager_visit_times', ...data[key] });
  815. } else if (key == 'manager_visit_cycle' && data[key].show == 1) {
  816. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#manager_visit_cycle', ...data[key] });
  817. } else if (key == 'employee_visit_times' && data[key].show == 1) {
  818. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#employee_visit_times', ...data[key] });
  819. } else if (key == 'employee_visit_cycle' && data[key].show == 1) {
  820. cols[0].push({ title: data[key]['name'], align: 'center', field: key, templet: '#employee_visit_cycle', ...data[key] });
  821. } else {
  822. if (data[key].show == 1) {
  823. cols[0].push({ title: data[key]['name'], align: 'center', field: key, ...data[key] });
  824. }
  825. }
  826. })
  827. cols[0].push({ title: '', width: 30, align: 'center', fixed: "right" })
  828. let url = '{:url("statistics/customer_list_data")}';
  829. table.render({
  830. elem: '#list'
  831. , url: url
  832. , page: true
  833. , height: bodyH
  834. , cols: cols
  835. , id: 'tablelist'
  836. , limit: 50,
  837. done: function () {
  838. layer.close(msgindex);
  839. }
  840. });
  841. }
  842. $('.lay-setting').click(function () {
  843. let arr = [];
  844. $.each(data, function (key, val) {
  845. arr.push({ ...val, field: key });
  846. })
  847. localStorage.setItem('XQ$SORT', '4');
  848. window.parent.dialogFunc(arr, 4);
  849. })
  850. function setYMD(time) {
  851. let dateTime = new Date(time);
  852. let year = dateTime.getFullYear();
  853. let Month = dateTime.getMonth() + 1;
  854. let days = dateTime.getDate();
  855. return `${year}-${Month > 9 ? Month : '0' + Month}-${days > 9 ? days : '0' + days}`;
  856. }
  857. document.onkeydown = function (event) {
  858. var e = event || window.event || arguments.callee.caller.arguments[0];
  859. if (e && e.keyCode == 13) {
  860. $(".submitbtn").trigger("click");
  861. }
  862. };
  863. var dateArr = {};
  864. var today = new Date().getTime();
  865. var oneTime = 24 * 60 * 60 * 1000;
  866. var threeDay1 = today - 3 * oneTime;
  867. var sevenDay1 = today - 6 * oneTime;
  868. var oneMonth = today - 30 * oneTime;
  869. dateArr = {
  870. nowS: setYMD(today),
  871. nowE: setYMD(today),
  872. threeDayS: setYMD(threeDay1),
  873. threeDayE: setYMD(today),
  874. sevenDayS: setYMD(sevenDay1),
  875. sevenDayE: setYMD(today),
  876. oneMonthS: setYMD(oneMonth),
  877. oneMonthE: setYMD(today),
  878. }
  879. $('#timeBtn').on('click', function (e) {
  880. if (!!(e.target.localName != 'input')) return;
  881. let o = document.querySelector('#timeBtn').children;
  882. if (e.target.classList.contains('layui-btn-primary') == true) {
  883. for (var i = 0; i < o.length; i++) {
  884. o[i].className = 'layui-btn';
  885. }
  886. $('#sDate').val('');
  887. $('#eDate').val('');
  888. return;
  889. } else {
  890. for (var i = 0; i < o.length; i++) {
  891. o[i].className = 'layui-btn';
  892. }
  893. e.target.className = 'layui-btn layui-btn-primary';
  894. if (!!(e.target.className.indexOf('layui-btn-primary') > 0)) {
  895. if (e.target.value == '今日') {
  896. $('#sDate').val(dateArr.nowS);
  897. $('#eDate').val(dateArr.nowE);
  898. } else if (e.target.value == '3天') {
  899. $('#sDate').val(dateArr.threeDayS);
  900. $('#eDate').val(dateArr.threeDayE);
  901. } else if (e.target.value == '7天') {
  902. $('#sDate').val(dateArr.sevenDayS);
  903. $('#eDate').val(dateArr.sevenDayE);
  904. } else {
  905. $('#sDate').val(dateArr.oneMonthS);
  906. $('#eDate').val(dateArr.oneMonthE);
  907. }
  908. }
  909. }
  910. })
  911. form.on('submit(table-search)', function (data) {
  912. let field = data.field;
  913. let element = $('.layui-btn-primary');
  914. if (element && element[0]) {
  915. let el = element[0].value;
  916. }
  917. let option = {
  918. where: field
  919. , page: {
  920. curr: 1
  921. }
  922. };
  923. //执行重载
  924. table.reload('tablelist', option);
  925. });
  926. //重置
  927. $('#resetbtn').click(function () {
  928. $('#employee_name').val('');
  929. $('#select_org_id').val('');
  930. $('#customer_type_ele').val('');
  931. $('#source_id').val('');
  932. $('#sDate').val('');
  933. $('#eDate').val('');
  934. $('#timeBtn').children().each(function () {
  935. $(this).removeClass('layui-btn-primary')
  936. })
  937. form.render();
  938. departTree.setValue([]);
  939. let option = {
  940. where: { start_date: "", end_date: "", select_org_id: "", employee_name: "" }
  941. , page: {
  942. curr: 1
  943. }
  944. };
  945. table.reload('tablelist', option);
  946. })
  947. //导出
  948. $('#tablebtn').click(function () {
  949. let sdate = $('#sDate').val();
  950. let edate = $('#eDate').val();
  951. // let select_org_id = $('#select_org_id').val();
  952. let select_org_id = departTree.getValue();
  953. orgid = select_org_id.length == 0 ? '' : select_org_id[0].id;
  954. let employee_name = $('#employee_name').val();
  955. let url = "{:url('statistics/export2',['m'=>'customer_list_data'])}";
  956. layer.confirm('确定要导出该查询结果么?', function () {
  957. $.post(url, { start_date: sdate, end_date: edate, employee_name: employee_name, select_org_id: orgid }, function (rs) {
  958. if (typeof rs == 'string') rs = JSON.parse(rs);
  959. layer.msg(rs.msg);
  960. })
  961. })
  962. })
  963. //调用内容
  964. table.on('tool(datalist)', function (obj) {
  965. var id = obj.data.id;
  966. var layEvent = obj.event;
  967. if (layEvent === 'foot') {
  968. layer.open({
  969. type: 2,
  970. title: ['客户足迹', 'color:#333333;background-color:#D8E6F1;'],
  971. content: '{:url("crm/foot")}?id=' + id,
  972. resize: false,
  973. area: ['80%', '80%']
  974. });
  975. } else if (layEvent === 'log') {
  976. layer.open({
  977. type: 2,
  978. title: ['跟进记录', 'color:#333333;background-color:#D8E6F1;'],
  979. content: '{:url("crm/log")}?id=' + id,
  980. resize: false,
  981. area: ['80%', '80%'],
  982. yes: function (index, layero) {
  983. }
  984. });
  985. } else if (layEvent === 'toview') {
  986. layer.open({
  987. type: 2,
  988. title: ['客户详情', 'color:#333333;background-color:#D8E6F1;'],
  989. content: '{:url("crm/view")}?id=' + id,
  990. resize: false,
  991. area: ['80%', '80%'],
  992. yes: function (index, layero) {
  993. }
  994. });
  995. }
  996. })
  997. $('#customer-export-list').click(function () {
  998. layer.open({
  999. type: 2,
  1000. area: ['600px', '600px'],
  1001. content: '{:url("statistics/exportList2",array("type"=>"customer_list_data"))}'
  1002. });
  1003. });
  1004. })
  1005. </script>
  1006. {/block}