module_subscribe.html 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. {extend name="public/layout" /} {block name="title"}客户预约设置{/block} {block name="body"}
  2. <style type="text/css">
  3. html,
  4. body {
  5. display: block;
  6. width: 1300px;
  7. height: auto;
  8. overflow-y: hidden;
  9. overflow-x: auto;
  10. width: calc(100% - 6px);
  11. }
  12. .lay-main {
  13. background-color: #EEEEEE;
  14. width: 100%;
  15. height: 100%;
  16. }
  17. .flex {
  18. display: flex;
  19. }
  20. .lay-leftBox {
  21. width: 400px;
  22. height: calc(100vh - 35px);
  23. background-color: #fff;
  24. margin: 10px 13px 10px;
  25. box-sizing: border-box;
  26. overflow-y: auto;
  27. }
  28. .lay-rightBox {
  29. width: calc(100% - 400px);
  30. height: calc(100vh - 35px);
  31. background-color: #fff;
  32. margin-top: 10px;
  33. margin-left: 0px;
  34. box-sizing: border-box;
  35. padding: 10px;
  36. }
  37. .lay-leftTips {
  38. width: 100%;
  39. height: 18px;
  40. line-height: 18px;
  41. border-left: 5px solid #249EFB;
  42. box-sizing: border-box;
  43. padding-left: 6px;
  44. }
  45. .lay-rightTips {
  46. width: 100%;
  47. height: 20px;
  48. display: flex;
  49. align-items: center;
  50. }
  51. .labelIcon {
  52. width: 5px;
  53. height: 18px;
  54. border-radius: 2px;
  55. background-color: #249EFB;
  56. }
  57. .valid {
  58. color: #249EFB;
  59. font-weight: 700;
  60. }
  61. .ml6 {
  62. margin-left: 6px;
  63. }
  64. .layui-border-blue,
  65. .layui-border-blue:hover {
  66. color: #249EFB;
  67. border-color: #249EFB;
  68. }
  69. .visitlistBox {
  70. width: 100%;
  71. padding: 10px;
  72. display: flex;
  73. flex-wrap: wrap;
  74. }
  75. .visitItemBox {
  76. flex: 1;
  77. }
  78. .layui-border-black {
  79. margin: 0px 5px 6px !important;
  80. position: relative;
  81. }
  82. .lay-close {
  83. position: absolute;
  84. top: -15px;
  85. right: -10px;
  86. z-index: 99 !important;
  87. }
  88. .fieldBox {
  89. width: 100%;
  90. display: flex;
  91. box-sizing: border-box;
  92. padding: 10px 0px;
  93. height: calc(98% - 50px);
  94. }
  95. .fieldLeftBox {
  96. width: 60%;
  97. box-sizing: border-box;
  98. }
  99. .fieldRightBox {
  100. flex: 1;
  101. margin-left: 10px;
  102. box-sizing: border-box;
  103. }
  104. .fieldTitle {
  105. font-size: 13px;
  106. color: #333333;
  107. font-weight: 600;
  108. line-height: 25px;
  109. }
  110. .fieldViewBox {
  111. border: 1px solid #EEEEEE;
  112. padding: 5px;
  113. border-radius: 4px;
  114. box-sizing: border-box;
  115. height: 550px;
  116. overflow: auto;
  117. }
  118. /*里面的代码可以根据自己需求去进行更改*/
  119. /* 设置滚动条的样式 */
  120. .fieldViewBox::-webkit-scrollbar {
  121. width: 4px;
  122. }
  123. /* 滚动槽 */
  124. .fieldViewBox::-webkit-scrollbar-track {
  125. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
  126. border-radius: 0px;
  127. }
  128. /* 滚动条滑块 */
  129. .fieldViewBox::-webkit-scrollbar-thumb {
  130. border-radius: 10px;
  131. background: #cccccc;
  132. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
  133. }
  134. .searchBox {
  135. width: 100%;
  136. height: 40px;
  137. border: 1px solid #EEEEEE;
  138. border-radius: 4px;
  139. box-sizing: border-box;
  140. padding: 0px 10px;
  141. display: flex;
  142. align-items: center;
  143. }
  144. .searchBox>input {
  145. flex: 1;
  146. height: 100%;
  147. margin-left: 10px;
  148. outline: none;
  149. border: none;
  150. }
  151. .selectFieldBox {
  152. width: 100%;
  153. height: auto;
  154. overflow: hidden;
  155. box-sizing: border-box;
  156. padding: 10px 0px 10px;
  157. display: flex;
  158. flex-wrap: wrap;
  159. }
  160. .layui-icon-ok:before {
  161. font-size: 12px !important;
  162. }
  163. .layui-form-checkbox {
  164. margin-bottom: 5px;
  165. }
  166. .sortItemBox {
  167. width: 100%;
  168. height: 40px;
  169. display: flex;
  170. align-items: center;
  171. justify-content: space-between;
  172. background-color: #fff;
  173. }
  174. .sortLeft>img {
  175. width: 16px;
  176. }
  177. .sortRight>img {
  178. width: 16px;
  179. }
  180. .moveElement {
  181. cursor: move;
  182. }
  183. .fixed-btn {
  184. width: 100%;
  185. box-sizing: border-box;
  186. padding: 10px 10px;
  187. display: flex;
  188. justify-content: flex-end;
  189. border-top: 1px solid #cccccc;
  190. margin-top: 120px;
  191. }
  192. .lay-tab {
  193. width: 100%;
  194. height: 40px;
  195. border-bottom: 1px solid #cccccc;
  196. display: flex;
  197. align-items: center;
  198. }
  199. .lay-tab>div {
  200. width: 110px;
  201. height: 100%;
  202. display: flex;
  203. align-items: center;
  204. justify-content: center;
  205. cursor: pointer;
  206. }
  207. .lay-active {
  208. color: #249EFB;
  209. font-weight: 700;
  210. position: relative;
  211. }
  212. .lay-active::after {
  213. content: " ";
  214. width: 30px;
  215. height: 4px;
  216. background-color: #249EFB;
  217. border-radius: 2px;
  218. position: absolute;
  219. bottom: 0px;
  220. left: 50%;
  221. transform: translateX(-50%);
  222. }
  223. .layleft-content {
  224. width: 100%;
  225. box-sizing: border-box;
  226. padding: 10px;
  227. }
  228. .layleft-switch {
  229. padding: 15px 10px;
  230. display: flex;
  231. align-items: center;
  232. }
  233. .layleft-switch>span {
  234. margin-right: 10px;
  235. }
  236. .layui-form-switch {
  237. margin-top: 0px;
  238. }
  239. .allCheckedField {
  240. margin-top: 10px;
  241. }
  242. .fieldItem {
  243. width: 50%;
  244. }
  245. .fixed-btn {
  246. width: 30% !important;
  247. padding: 0 !important;
  248. margin-top: 0 !important;
  249. border-top: 0 !important;
  250. }
  251. .fieldViewBox {
  252. height: 94% !important;
  253. }
  254. .class_disabled .layui-form-checkbox[lay-skin=primary] i {
  255. border-color: #c2c2c2 !important;
  256. background-color: #c2c2c2 !important;
  257. }
  258. .subscribeCustom {
  259. width: 100%;
  260. height: 700px;
  261. overflow-y: auto;
  262. overflow-x: hidden;
  263. position: relative;
  264. margin: 15px 0px 0px;
  265. }
  266. /*里面的代码可以根据自己需求去进行更改*/
  267. /* 设置滚动条的样式 */
  268. .subscribeCustom::-webkit-scrollbar {
  269. width: 2px;
  270. }
  271. /* 滚动槽 */
  272. .subscribeCustom::-webkit-scrollbar-track {
  273. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.3);
  274. border-radius: 0px;
  275. }
  276. /* 滚动条滑块 */
  277. .subscribeCustom::-webkit-scrollbar-thumb {
  278. border-radius: 1px;
  279. background: #cccccc;
  280. -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
  281. }
  282. .leftHeader {
  283. width: 100%;
  284. height: 40px;
  285. background-color: #71c4ff;
  286. color: #fff;
  287. display: flex;
  288. align-items: center;
  289. box-sizing: border-box;
  290. padding: 0px 10px;
  291. }
  292. .leftHeaderText {
  293. width: calc(100% - 80px);
  294. display: flex;
  295. align-items: center;
  296. }
  297. .rightHeaderIcon {
  298. width: 80px;
  299. display: flex;
  300. align-items: center;
  301. justify-content: flex-end;
  302. }
  303. .leftHeaderTab {
  304. width: 100%;
  305. height: 42px;
  306. display: flex;
  307. align-items: center;
  308. }
  309. .leftHeaderTab>div {
  310. flex: 1;
  311. height: 100%;
  312. display: flex;
  313. justify-content: center;
  314. align-items: center;
  315. }
  316. .leftActive {
  317. color: #249EFB;
  318. font-weight: 600;
  319. position: relative;
  320. }
  321. .leftActive::after {
  322. content: " ";
  323. width: 100%;
  324. height: 4px;
  325. background-color: #249EFB;
  326. border-radius: 2px;
  327. position: absolute;
  328. bottom: 0px;
  329. left: 0px;
  330. }
  331. .switchTabBox {
  332. width: 100%;
  333. height: 42px;
  334. display: flex;
  335. align-items: center;
  336. overflow-x: auto;
  337. flex-wrap: nowrap;
  338. justify-content: space-around;
  339. }
  340. .switchTabBox>div {
  341. flex: none;
  342. display: inline-block;
  343. padding: 4px 15px;
  344. background-color: #d4e4ed;
  345. color: #384855;
  346. font-size: 13px;
  347. border-radius: 3px;
  348. margin: 0px 5px;
  349. }
  350. .switchActive {
  351. background-color: #249EFB !important;
  352. color: #fff !important;
  353. }
  354. .dateItemBox {
  355. width: 100%;
  356. height: 40px;
  357. font-size: 13px;
  358. display: flex;
  359. box-sizing: border-box;
  360. border-bottom: 1px solid #e7f1f7;
  361. }
  362. .dlabel {
  363. width: 150px;
  364. height: 100%;
  365. display: flex;
  366. align-items: center;
  367. }
  368. .dContent {
  369. width: calc(100% - 150px);
  370. height: 100%;
  371. display: flex;
  372. align-items: center;
  373. justify-content: flex-end;
  374. }
  375. .dContent>span {
  376. margin-right: 5px;
  377. }
  378. .dlineIcon {
  379. width: 40px;
  380. height: 30px;
  381. border: 1px solid #d4e4ed;
  382. display: flex;
  383. align-items: center;
  384. justify-content: center;
  385. }
  386. .dtips {
  387. color: #9db6cf;
  388. }
  389. .textareaBox {
  390. width: 100%;
  391. background-color: #f0f4f7;
  392. outline: none;
  393. border: none;
  394. box-sizing: border-box;
  395. padding: 5px;
  396. margin-top: 20px;
  397. font-size: 13px;
  398. resize: none;
  399. }
  400. .leftSubmitBtn {
  401. width: 95%;
  402. height: 40px;
  403. background-color: #249EFB;
  404. color: #fff;
  405. text-align: center;
  406. line-height: 40px;
  407. margin: 20px auto 20px;
  408. }
  409. .leftProgressBox {
  410. width: 100%;
  411. }
  412. .leftProgressHeader {
  413. width: 100%;
  414. height: 30px;
  415. display: flex;
  416. align-items: center;
  417. justify-content: space-between;
  418. color: #249EFB;
  419. font-size: 13px;
  420. box-sizing: border-box;
  421. padding: 0px 10px;
  422. margin-bottom: 20px;
  423. }
  424. .leftpItemBox {
  425. width: 100%;
  426. height: auto;
  427. overflow: hidden;
  428. position: relative;
  429. padding: 0px 10px;
  430. }
  431. .circle {
  432. width: 10px;
  433. height: 10px;
  434. background-color: #d8eeff;
  435. position: absolute;
  436. left: 0px;
  437. top: 3px;
  438. border-radius: 50%;
  439. display: flex;
  440. align-items: center;
  441. justify-content: center;
  442. z-index: 9;
  443. }
  444. .circle1 {
  445. width: 7px;
  446. height: 7px;
  447. background-color: #249EFB;
  448. border-radius: 50%;
  449. }
  450. .leftlinep1 {
  451. width: 1px;
  452. height: 100%;
  453. border-left: 1px dotted #b6cade;
  454. position: absolute;
  455. left: 4px;
  456. top: 8px;
  457. }
  458. .leftpBoxMsg {
  459. width: 80%;
  460. height: 60px;
  461. background-color: #fff;
  462. box-shadow: 0 3px 5px 0 rgb(36 158 251 / 17%);
  463. margin: 20px 0px 20px 20px;
  464. border-left: 3px solid #249EFB;
  465. border-top: 0.5px solid #249EFB;
  466. border-radius: 6px;
  467. box-sizing: border-box;
  468. padding: 5px;
  469. }
  470. .leftpBoxtop {
  471. width: 100%;
  472. display: flex;
  473. align-items: center;
  474. font-size: 12px;
  475. position: relative;
  476. }
  477. .leftpBoxBottom {
  478. width: 100%;
  479. font-size: 12px;
  480. margin-top: 10px;
  481. position: relative;
  482. }
  483. .visitBoxp {
  484. position: absolute;
  485. padding: 2px 5px;
  486. background-color: #f0f4f7;
  487. color: #249EFB;
  488. border-radius: 10px;
  489. right: 0px;
  490. top: 0px;
  491. font-size: 12px;
  492. }
  493. .circle3 {
  494. width: 7px;
  495. height: 7px;
  496. background-color: #249EFB;
  497. border-radius: 50%;
  498. position: absolute;
  499. left: 1px;
  500. top: 55%;
  501. transform: translateY(-50%);
  502. }
  503. .ml5 {
  504. margin-left: 5px;
  505. }
  506. .leftCustomField {
  507. width: 100%;
  508. height: auto;
  509. overflow: hidden;
  510. box-sizing: border-box;
  511. padding: 0px 0px 10px;
  512. }
  513. .layinputtext {
  514. width: 100%;
  515. height: 40px;
  516. border-bottom: 1px solid #DEEAF1;
  517. display: flex;
  518. font-size: 13px;
  519. }
  520. .textlabel {
  521. width: 150px;
  522. height: 100%;
  523. line-height: 40px;
  524. }
  525. .textinput {
  526. width: calc(100% - 150px);
  527. height: 100%;
  528. line-height: 40px;
  529. }
  530. .radiocontent {
  531. width: calc(100% - 150px);
  532. height: 100%;
  533. display: flex;
  534. }
  535. .radiocontent>div {
  536. flex: 1;
  537. display: flex;
  538. justify-content: flex-start;
  539. align-items: center;
  540. }
  541. .gradecontent {
  542. width: calc(100% - 150px);
  543. height: 100%;
  544. display: flex;
  545. align-items: center;
  546. }
  547. .gradecontent>span {
  548. flex: none;
  549. display: inline-block;
  550. padding: 2px 8px;
  551. height: 18px;
  552. border: 1px solid #9DB6CF;
  553. font-size: 13px;
  554. margin-right: 5px;
  555. }
  556. .selectContent {
  557. width: calc(100% - 150px);
  558. height: 100%;
  559. display: flex;
  560. align-items: center;
  561. justify-content: space-between;
  562. }
  563. .selectContent>img {
  564. width: 8px;
  565. }
  566. .dateContent {
  567. width: calc(100% - 150px);
  568. height: 100%;
  569. display: flex;
  570. align-items: center;
  571. justify-content: space-between;
  572. }
  573. .dateContent>img {
  574. width: 14px;
  575. }
  576. .leftlineMiddle {
  577. width: 100%;
  578. height: 10px;
  579. background-color: #f0f4f7;
  580. margin: 30px 0px 10px;
  581. }
  582. .checkboxStyle {
  583. width: 100%;
  584. display: flex;
  585. align-items: center;
  586. padding: 10px 0px;
  587. }
  588. .layui-form-checkbox span {
  589. font-size: 13px;
  590. }
  591. .layui-form-checkbox[lay-skin=primary] {
  592. padding-left: 22px;
  593. }
  594. .checkboxStyle .layui-form-checkbox > i {
  595. border-radius: 50%;
  596. }
  597. .layui-form-checked[lay-skin=primary] i {
  598. border-color: #249EFB;
  599. background-color: #249EFB;
  600. }
  601. </style>
  602. <body>
  603. <div class="lay-main">
  604. <form class="layui-form flex" action="">
  605. <div class="lay-leftBox">
  606. <div class="lay-tab">
  607. <div class="lay-active" data-index="0" data-type="subscribeHD">活动预约设置</div>
  608. <div data-index="1" data-type="subscribeDD">到店预约设置</div>
  609. <div data-index="2" data-type="subscribeLF">量房预约设置</div>
  610. </div>
  611. <div class="layleft-content">
  612. <div class="lay-leftTips">显示设置</div>
  613. <div class="">
  614. <div class="layleft-switch">
  615. <span>开启/关闭</span>
  616. <input type="checkbox" name="switch" lay-skin="switch" {if $hd_switch}checked{/if}>
  617. </div>
  618. <div class="layleft-switch layui-hide">
  619. <span>开启/关闭</span>
  620. <input type="checkbox" name="switch" lay-skin="switch" {if $dd_switch}checked{/if}>
  621. </div>
  622. <div class="layleft-switch layui-hide">
  623. <span>开启/关闭</span>
  624. <input type="checkbox" name="switch" lay-skin="switch" {if $lf_switch}checked{/if}>
  625. </div>
  626. </div>
  627. <div class="lay-leftTips">手机端示例</div>
  628. <div class="subscribeCustom">
  629. <div class="leftHeader">
  630. <div class="leftHeaderText">李逍遥 | XXX小区 | 200㎡</div>
  631. <div class="rightHeaderIcon">
  632. <img src="__STATIC__/img/collect.png" width="16px" alt="">
  633. </div>
  634. </div>
  635. <div class="leftHeaderTab">
  636. <div>客户跟踪</div>
  637. <div>信息完善</div>
  638. <div>客户转化</div>
  639. <div class="leftActive">客户预约</div>
  640. </div>
  641. <div class="switchTabBox">
  642. <div class="switchActive">活动预约</div>
  643. <div>到店预约</div>
  644. <div>量房预约</div>
  645. </div>
  646. <div class="allElement">
  647. <div class="hdElement">
  648. <div class="dateItemBox">
  649. <div class="dlabel">选择活动</div>
  650. <div class="dContent">
  651. <span style="color: #999999;font-size: 12px;">请选择外场活动</span>
  652. </div>
  653. </div>
  654. <div class="dateItemBox">
  655. <div class="dlabel">预计到场时间</div>
  656. <div class="dContent">
  657. <span>2022-12-12</span>
  658. <img src="__STATIC__/img/rili.png" width="14px" alt="">
  659. </div>
  660. </div>
  661. </div>
  662. <div class="ddElement layui-hide">
  663. <div class="checkboxStyle">
  664. <input type="checkbox" class="roundCheckbox" title="今天" lay-skin="primary" checked disabled>
  665. <input type="checkbox" class="roundCheckbox" title="明天" lay-skin="primary" disabled>
  666. <input type="checkbox" class="roundCheckbox" title="本周六" lay-skin="primary" disabled>
  667. <input type="checkbox" class="roundCheckbox" title="本周日" lay-skin="primary" disabled>
  668. <input type="checkbox" class="roundCheckbox" title="其他时间" lay-skin="primary" disabled>
  669. </div>
  670. <div class="dateItemBox">
  671. <div class="dlabel">选择活动</div>
  672. <div class="dContent">
  673. <span style="color: #999999;font-size: 12px;">请选择内场活动</span>
  674. </div>
  675. </div>
  676. <div class="dateItemBox">
  677. <div class="dlabel">预计到店时间</div>
  678. <div class="dContent">
  679. <span>2022-12-12</span>
  680. <img src="__STATIC__/img/rili.png" width="14px" alt="">
  681. </div>
  682. </div>
  683. </div>
  684. <div class="lfElement layui-hide">
  685. <div class="checkboxStyle">
  686. <input type="checkbox" title="今天" lay-skin="primary" checked disabled>
  687. <input type="checkbox" title="明天" lay-skin="primary" disabled>
  688. <input type="checkbox" title="本周六" lay-skin="primary" disabled>
  689. <input type="checkbox" title="本周日" lay-skin="primary" disabled>
  690. <input type="checkbox" title="其他时间" lay-skin="primary" disabled>
  691. </div>
  692. <div class="dateItemBox">
  693. <div class="dlabel">请选择预约时间</div>
  694. <div class="dContent">
  695. <span>2022-12-12</span>
  696. <img src="__STATIC__/img/rili.png" width="14px" alt="">
  697. </div>
  698. </div>
  699. </div>
  700. </div>
  701. <div class="dateItemBox">
  702. <div class="dlabel">指派人员<span class="dtips ml5">(可多选)</span></div>
  703. <div class="dContent">
  704. <img src="__STATIC__/img/cjtimg.png" width="8px" alt="">
  705. </div>
  706. </div>
  707. <div class="leftCustomField"></div>
  708. <textarea class="textareaBox" rows="5" readonly placeholder="请输入备注信息"></textarea>
  709. <div class="leftSubmitBtn">提交预约</div>
  710. <div class="leftlineMiddle"></div>
  711. <div class="leftProgressBox">
  712. <div class="leftProgressHeader">
  713. <span>预约记录</span>
  714. <span>共预约3次</span>
  715. </div>
  716. <div class="leftpItemBox">
  717. <div class="circle">
  718. <div class="circle1"></div>
  719. </div>
  720. <div class="ml5">2022-12-02</div>
  721. <div class="leftlinep1"></div>
  722. <div class="leftpBoxMsg">
  723. <div class="leftpBoxtop">
  724. <span class="ml5">李XX</span>
  725. <span class="ml5">11:50:12</span>
  726. </div>
  727. <div class="leftpBoxBottom">这是一段预约记录<span class="visitBoxp">取消预约</span></div>
  728. <div class="circle3"></div>
  729. </div>
  730. </div>
  731. <div class="leftpItemBox">
  732. <div class="circle">
  733. <div class="circle1"></div>
  734. </div>
  735. <div class="ml5">2022-12-02</div>
  736. <div class="leftlinep1"></div>
  737. <div class="leftpBoxMsg">
  738. <div class="leftpBoxtop">
  739. <span class="ml5">李XX</span>
  740. <span class="ml5">11:24:12</span>
  741. </div>
  742. <div class="leftpBoxBottom">这是一段预约记录<span class="visitBoxp">取消预约</span></div>
  743. <div class="circle3"></div>
  744. </div>
  745. </div>
  746. <div class="leftpItemBox">
  747. <div class="circle">
  748. <div class="circle1"></div>
  749. </div>
  750. <div class="ml5">2022-12-02</div>
  751. <div class="leftlinep1"></div>
  752. <div class="leftpBoxMsg">
  753. <div class="leftpBoxtop">
  754. <span class="ml5">李XX</span>
  755. <span class="ml5">11:12:12</span>
  756. </div>
  757. <div class="leftpBoxBottom">这是一段预约记录<span class="visitBoxp">取消预约</span></div>
  758. <div class="circle3"></div>
  759. </div>
  760. </div>
  761. </div>
  762. </div>
  763. </div>
  764. </div>
  765. <div class="lay-rightBox">
  766. <div class="lay-rightTips">
  767. <div class="labelIcon"></div>
  768. <span class="ml6">跟进字段设置</span>
  769. </div>
  770. <div class="fieldBox">
  771. <div class="fieldLeftBox">
  772. <div class="fieldTitle" id="visitAllField"></div>
  773. <div class="fieldViewBox">
  774. <div class="searchBox">
  775. <i class="layui-icon layui-icon-search"></i>
  776. <input type="text" id="allFieldInput" autocomplete="off">
  777. </div>
  778. <div class="allCheckedField">
  779. <input lay-filter="checkedAll" name="all" title="全选" type="checkbox" lay-skin="primary">
  780. </div>
  781. <div class="selectFieldBox">
  782. </div>
  783. </div>
  784. </div>
  785. <div class="fieldRightBox">
  786. <div class="fieldTitle" id="checkedFieldEl"></div>
  787. <div class="fieldViewBox" id="scrollTargetEl">
  788. <div class="searchBox">
  789. <i class="layui-icon layui-icon-search"></i>
  790. <input type="text" id="checkedSearchEl" autocomplete="off">
  791. </div>
  792. <div class="checkedFieldBox" id="checkedFieldBox">
  793. </div>
  794. </div>
  795. </div>
  796. </div>
  797. <div class="lay-default" style="overflow: hidden;">
  798. <div class="layui-btn layui-btn-primary" id="recoveryDefault" style="float:left;">恢复默认</div>
  799. <div class="fixed-btn" style="float:right;">
  800. <div class="layui-btn layui-btn-primary">取消</div>
  801. <div class="layui-btn layui-btn-normal" lay-submit lay-filter="layuiadmin-app-form-submit">确认
  802. </div>
  803. </div>
  804. </div>
  805. </div>
  806. </form>
  807. </div>
  808. </body>
  809. {/block} {block name="js"}
  810. <script type="text/javascript" src="__STATIC__/js/Sortable.js"></script>
  811. <script>
  812. layui.config({
  813. base: '__LAYUI__/' //静态资源所在路径
  814. ,
  815. urlbase: '/sys'
  816. }).extend({
  817. index: 'lib/index' //主入口模块
  818. }).use(['index', 'table', 'layedit', 'element', 'upload'], function () {
  819. var $ = layui.$,
  820. table = layui.table,
  821. element = layui.element,
  822. upload = layui.upload,
  823. form = layui.form,
  824. rType = 'subscribeHD',
  825. visitFieldAll = [],
  826. checkedArr = [],
  827. defaultArr = [];
  828. var rTypeIndex = 0;
  829. form.render();
  830. function setExampleHtml(dataArr) {
  831. let htmls = dataArr.map(v => {
  832. if (v.type == 1) {
  833. return `<div class="layinputtext">
  834. <div class="textlabel">${v.name}</div>
  835. <div class="textinput">请输入</div>
  836. </div>`;
  837. } else if (v.type == 2) {
  838. return `<div class="layinputtext">
  839. <div class="textlabel">${v.name}</div>
  840. <div class="textinput">请输入</div>
  841. </div>`;
  842. } else if (v.keyname == 'level') {
  843. return `<div class="layinputtext">
  844. <div class="textlabel">${v.name}</div>
  845. <div class="gradecontent">
  846. ${v.select.map(o => {
  847. return `<span>${o.name}类</span>`;
  848. }).join('')}
  849. </div>
  850. </div>`;
  851. } else if (v.type == 3 && v.select.length == 2) {
  852. return `<div class="layinputtext">
  853. <div class="textlabel">${v.name}</div>
  854. <div class="radiocontent">
  855. ${v.select.map(o => {
  856. return `<div>
  857. <img src="https://o.nczyzs.com/xcx/unselected.png" width="15px" alt="">
  858. <span style="margin-left: 5px;">${o.name}</span>
  859. </div>`;
  860. }).join('')}
  861. </div>
  862. </div>`;
  863. } else if (v.type == 3 && v.select.length > 2 && v.keyname != 'level') {
  864. return `<div class="layinputtext">
  865. <div class="textlabel">${v.name}</div>
  866. <div class="selectContent">
  867. <span>请选择</span>
  868. <img src="__STATIC__/img/cjtimg.png" alt="">
  869. </div>
  870. </div>`;
  871. } else if (v.type == 4) {
  872. return `<div class="layinputtext">
  873. <div class="textlabel">${v.name}</div>
  874. <div class="selectContent">
  875. <span>请选择</span>
  876. <img src="__STATIC__/img/cjtimg.png" alt="">
  877. </div>
  878. </div>`;
  879. } else if (v.type == 5) {
  880. return `<div class="layinputtext">
  881. <div class="textlabel">${v.name}</div>
  882. <div class="dateContent">
  883. <span>请选择</span>
  884. <img src="__STATIC__/img/rili.png" alt="">
  885. </div>
  886. </div>`;
  887. } else if (v.type == 6) {
  888. return `<div class="layinputtext">
  889. <div class="textlabel">${v.name}</div>
  890. <div class="dateContent">
  891. <span></span>
  892. <img src="__STATIC__/img/addimg.png" alt="">
  893. </div>
  894. </div>`;
  895. }
  896. }).join('');
  897. $('.leftCustomField').html(htmls);
  898. }
  899. $('.lay-tab div').click(function () {
  900. rType = $(this).prop('dataset').type;
  901. let index = parseInt($(this).prop('dataset').index);
  902. rTypeIndex = index;
  903. $(this).addClass('lay-active').siblings().removeClass("lay-active");
  904. $('.layleft-switch').eq(index).removeClass('layui-hide').siblings().addClass('layui-hide');
  905. $('.imgview').children().eq(index).removeClass('layui-hide').siblings().addClass('layui-hide');
  906. getVisitFiled();
  907. $('.switchTabBox').children().eq(index).addClass('switchActive').siblings().removeClass('switchActive');
  908. $('.allElement').children().eq(index).removeClass('layui-hide').siblings().addClass('layui-hide');
  909. })
  910. getVisitFiled();
  911. function getVisitFiled() {
  912. $.ajax({
  913. type: "get",
  914. url: "{:url('customerSetting/moduleField')}",
  915. data: {
  916. type: rType
  917. },
  918. dataType: 'json',
  919. success: function (res) {
  920. if (res.code == 0) {
  921. visitFieldAll = res.all;
  922. checkedArr = res.checked;
  923. defaultArr = res.default;
  924. renderVisitFieldHtmls(visitFieldAll);
  925. renderCheckedFieldHtmls(checkedArr);
  926. setExampleHtml(checkedArr);
  927. }
  928. }
  929. })
  930. }
  931. function renderVisitFieldHtmls(fields) {
  932. $('#visitAllField').text(`可选择字段(共${fields.length}个)`);
  933. let htmls = fields.map((item, index) => {
  934. return `<div class="fieldItem ${item.other_checked == 1 ? 'class_disabled' : ''}"><input lay-filter="checkboxs" class="visitFieldElement${item.id}" type="checkbox" ${(returnCheckedStatus(item.id)) ? 'checked' : ''} ${item.other_checked == 1 ? 'disabled' : ''} name="visit" value="${item.id}" title="${item.name}" lay-skin="primary"></div>`;
  935. }).join('');
  936. $('.selectFieldBox').html(htmls);
  937. setTimeout(() => {
  938. form.render();
  939. form.on('checkbox(checkboxs)', function (data) {
  940. if (data.elem.checked) {
  941. let OneValue = [];
  942. $(`input:checkbox[name='visit']:checked`).each(function (i) {
  943. OneValue.push({ id: $(this).val(), name: $(this).prop('title') });
  944. });
  945. let itemArr = [];
  946. OneValue.forEach(k => {
  947. let item = checkedArr.filter(o => o.id == k.id);
  948. if (!item.length) {
  949. itemArr.push(k)
  950. }
  951. })
  952. checkedArr.push(...itemArr);
  953. renderCheckedFieldHtmls(checkedArr);
  954. } else {
  955. checkedArr.forEach((y, i) => {
  956. if (data.value == y.id) {
  957. checkedArr.splice(i, 1);
  958. renderCheckedFieldHtmls(checkedArr);
  959. return;
  960. }
  961. })
  962. }
  963. })
  964. form.on('checkbox(checkedAll)', function (data) {
  965. if (data.elem.checked) {
  966. $(`input:checkbox[name='visit']`).each(function (i) {
  967. $(this).prop('checked', true);
  968. });
  969. checkedArr = visitFieldAll;
  970. renderCheckedFieldHtmls(checkedArr);
  971. form.render();
  972. } else {
  973. checkedArr = [];
  974. renderCheckedFieldHtmls(checkedArr);
  975. $(`input:checkbox[name='visit']:checked`).each(function (i) {
  976. $(this).prop('checked', false);
  977. });
  978. form.render();
  979. }
  980. })
  981. }, 600);
  982. }
  983. function renderCheckedFieldHtmls(checkedFields) {
  984. $('#checkedFieldEl').text(`已选择字段(共${checkedFields.length}个)`);
  985. let htmls = checkedFields.map((item, index) => {
  986. return `<div data-id="${item.id}" class="sortItemBox">
  987. <div data-id="${item.id}" class="sortLeft">
  988. <img data-id="${item.id}" class="moveElement" src="/static/img/move.png" alt="">
  989. <span data-id="${item.id}" class="getSortName">${item.name}</span>
  990. </div>
  991. <div data-id="${item.id}" class="sortRight">
  992. <img data-id="${item.id}" src="/static/img/sTop.png" alt="">
  993. <img data-id="${item.id}" src="/static/img/sDel.png" class="checkedDel" alt="">
  994. </div>
  995. </div>`;
  996. }).join('');
  997. $('.checkedFieldBox').html(htmls);
  998. setTimeout(() => {
  999. new Sortable($('.checkedFieldBox')[0], {
  1000. handle: '.moveElement', // handle's class
  1001. animation: 150
  1002. });
  1003. $('.sortRight').click(function () {
  1004. var ops1 = {
  1005. draggable: ".sortItemBox",
  1006. onChoose: function (evt) {
  1007. var index = evt.oldIndex;
  1008. $("#checkedFieldBox .sortItemBox").eq(index).insertBefore($("#checkedFieldBox .sortItemBox").eq(0));
  1009. }
  1010. };
  1011. var sortable1 = Sortable.create($('.checkedFieldBox')[0], ops1);
  1012. })
  1013. $('.checkedDel').click(function () {
  1014. let id = $(this).prop('dataset').id;
  1015. $(this).parent().parent().remove();
  1016. checkedArr.forEach((item, index) => {
  1017. if (item.id == id) {
  1018. $(`.visitFieldElement${id}`).removeAttr('checked');
  1019. checkedArr.splice(index, 1);
  1020. form.render();
  1021. return;
  1022. }
  1023. })
  1024. })
  1025. }, 600);
  1026. }
  1027. function returnCheckedStatus(vid) {
  1028. let ids = checkedArr.map(v => parseInt(v.id));
  1029. return ids.includes(parseInt(vid));
  1030. }
  1031. $('#checkedSearchEl').on('keyup', function (e) {
  1032. let val = $(this).val();
  1033. if (e.keyCode == 13 && val) {
  1034. let eleArr = $('.getSortName');
  1035. eleArr.each(function (index) {
  1036. let name = $(this).text();
  1037. if (name === val || name.indexOf(val) > -1) {
  1038. $('#scrollTargetEl').scrollTop((parseInt(index) + 1) * 40);
  1039. return;
  1040. }
  1041. })
  1042. }
  1043. });
  1044. $('#allFieldInput').on('keyup', function (e) {
  1045. let val = $(this).val();
  1046. if (e.keyCode == 13) {
  1047. if (val) {
  1048. let itemArr = visitFieldAll.filter(item => {
  1049. if (val == item.name || item.name.search(val) > -1) {
  1050. return item;
  1051. }
  1052. })
  1053. renderVisitFieldHtmls(itemArr);
  1054. } else {
  1055. renderVisitFieldHtmls(visitFieldAll);
  1056. }
  1057. }
  1058. })
  1059. $('#recoveryDefault').click(function () {
  1060. layer.confirm('确定要恢复默认设置吗?', { title: '提示' }, function (index) {
  1061. checkedArr = defaultArr;
  1062. renderVisitFieldHtmls(visitFieldAll);
  1063. renderCheckedFieldHtmls(checkedArr);
  1064. layer.close(index);
  1065. });
  1066. })
  1067. /* 监听提交 */
  1068. form.on('submit(layuiadmin-app-form-submit)', function (obj) {
  1069. var switchoff = $('.layleft-switch').eq(rTypeIndex).find('input').prop('checked') == true ? '1' : '0';
  1070. let getCheckedField = $('.sortItemBox');
  1071. let itemArr = [];
  1072. let subtype = 'HD';
  1073. getCheckedField.each(function (i) {
  1074. let id = $(this).prop('dataset').id;
  1075. itemArr.push({ id: id, sort: i + 1 });
  1076. })
  1077. if (rType == 'subscribeHD') {
  1078. subtype = 'HD';
  1079. } else if (rType == 'subscribeDD') {
  1080. subtype = 'DD';
  1081. } else if (rType == 'subscribeLF') {
  1082. subtype = 'LF';
  1083. }
  1084. $.ajax({
  1085. url: '{:url("customerSetting/moduleSubscribe")}',
  1086. type: 'post',
  1087. data: {
  1088. type: subtype,
  1089. content: itemArr,
  1090. switch: switchoff
  1091. },
  1092. dataType: 'json',
  1093. success: function (res) {
  1094. if (res.code === 0) {
  1095. layer.msg(res.msg, { anim: 0 });
  1096. setTimeout(() => {
  1097. window.parent.reloadFunc();
  1098. }, 1000)
  1099. } else {
  1100. layer.msg(res.msg, { anim: 6 });
  1101. }
  1102. }
  1103. });
  1104. return false;
  1105. });
  1106. });
  1107. </script>
  1108. {/block}