team.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  1. {extend name="public/layout" /} {block name="title"}分配{/block} {block name="body"}
  2. <link rel="stylesheet" href="__STATIC__/css/csspc.css">
  3. <link rel="stylesheet" href="__STATIC__/css/font.css">
  4. <link rel="stylesheet" " href=" __STATIC__/css/common.css">
  5. <style>
  6. html,body{
  7. background:#F0F4F7;
  8. font-size: 12px;
  9. box-sizing: border-box;
  10. min-width:1200px;
  11. overflow-x: auto;
  12. }
  13. .toptitbox{
  14. display: block;
  15. width:1200px;
  16. padding: 15px 10px;
  17. border: 1px solid #F0F0F0;
  18. background: #FCFCFC;
  19. margin-bottom: 10px;
  20. position: relative;
  21. line-height: 28px;
  22. }
  23. .golastbtn{
  24. display: block;
  25. margin-right: 21px;
  26. color: #000;
  27. background: url(__STATIC__/img/btn_bg.gif) repeat-x;
  28. border: 1px solid #C0C0C0;
  29. padding: 0 12px;
  30. padding: 0 6px;
  31. height: 28px;
  32. cursor: pointer;
  33. }
  34. .mainbox{
  35. }
  36. .bodys{
  37. background-color: #fff;
  38. }
  39. .cardheader {
  40. padding-left: 10px;
  41. }
  42. .laytable-cell-1-0-1 {
  43. height: 32px !important;
  44. line-height: 32px !important;
  45. }
  46. .layui-tree-set,
  47. .layui-tree-entry {
  48. margin-top: 5px !important;
  49. }
  50. .layui-table tr {
  51. height: 7vh;
  52. }
  53. @media screen and (min-width: 992px) {
  54. .layui-col-md9 {
  55. margin-left: 1%;
  56. width: 74%;
  57. }
  58. }
  59. .layui-table thead tr,
  60. .layui-table-header {
  61. background-color: #D8E6F1 !important;
  62. }
  63. #root-list {
  64. border-right: 1px solid #f6f6f6;
  65. }
  66. #addRoot {
  67. border-top: 1px solid #f6f6f6;
  68. }
  69. .root {
  70. cursor: pointer;
  71. text-align: center;
  72. padding: 10px 1px;
  73. font-size: 1rem;
  74. font-weight: bold;
  75. }
  76. .root.selected {
  77. font-size: x-large;
  78. color: #269efb;
  79. }
  80. .root:hover {
  81. font-size: x-large;
  82. color: #269efb;
  83. }
  84. .layui-form-label {
  85. width: 150px;
  86. }
  87. .layui-input-block {
  88. margin-left: 180px;
  89. }
  90. .strucinfo {
  91. cursor: pointer;
  92. }
  93. .setleader {
  94. float: right;
  95. display: none;
  96. }
  97. .setleader:hover {
  98. display: block;
  99. }
  100. .leader {
  101. float: right;
  102. }
  103. /*重要 样式*/
  104. .layui-tree-entry.tree-node-current .layui-tree-main {
  105. background-color: #d7edbf87;
  106. }
  107. /*重要 样式*/
  108. .layui-btn.layui-btn-success {
  109. background-color: #009688;
  110. }
  111. .filterbutton {
  112. float: right;
  113. }
  114. .layui-layer-content {
  115. overflow: inherit !important;
  116. }
  117. .layui-zz-box {
  118. border: 1px solid #f2f2f2;
  119. margin-right: 20px;
  120. }
  121. .list>ul:first-child>li>div {
  122. /*background-color: #f2f2f2;*/
  123. display: block;
  124. padding: 5px
  125. }
  126. .list li {
  127. min-width: 150px;
  128. }
  129. .list li div {
  130. padding: 3px;
  131. padding-right: 5px;
  132. }
  133. .list>ul ul {
  134. margin-left: 15px;
  135. }
  136. .list .op {
  137. float: right;
  138. margin-left: 2px;
  139. }
  140. .list i.op:hover,
  141. .list i.group:hover,
  142. .list span:hover {
  143. cursor: pointer;
  144. }
  145. .list span {
  146. overflow: hidden;
  147. text-overflow: ellipsis;
  148. white-space: nowrap;
  149. max-width: 184px;
  150. display: inline-block;
  151. }
  152. .list li i:first-child {
  153. position: relative;
  154. top: -6px;
  155. margin-right: 5px;
  156. }
  157. .list {
  158. padding-bottom: 24px;
  159. padding-right: 24px;
  160. }
  161. .everydepart {
  162. display: block;
  163. position: relative;
  164. padding-right: 24px !important;
  165. }
  166. .everydepart .checkdiv {
  167. display: block;
  168. position: absolute;
  169. right: 4px;
  170. top: 10px;
  171. }
  172. .addbtn {
  173. position: absolute;
  174. display: block;
  175. width: 48px;
  176. height: 32px;
  177. top: 40%;
  178. left: 50%;
  179. margin-left: -24px;
  180. }
  181. .clearfix {
  182. clear: both;
  183. }
  184. .clearfix::after {
  185. clear: both;
  186. content: ' ';
  187. display: table;
  188. }
  189. .clearfix::before {
  190. content: ' ';
  191. display: table;
  192. }
  193. .height100 {
  194. height: 100%;
  195. }
  196. .showdepartbox {
  197. /*border: 1px solid #f2f2f2;*/
  198. width: 64%;
  199. }
  200. .left {
  201. float: left;
  202. }
  203. .right {
  204. float: right;
  205. }
  206. .everynowdepart {
  207. position: relative;
  208. height: 32px;
  209. padding-left: 16px;
  210. line-height: 32px;
  211. border-bottom: 1px solid #e9e9e9;
  212. padding-right: 48px;
  213. }
  214. .del {
  215. position: absolute;
  216. top: 0;
  217. right: 0;
  218. height: 32px;
  219. width: 48px;
  220. text-align: center;
  221. cursor: pointer;
  222. }
  223. .rightitlebox {
  224. padding: 0 8px;
  225. border-bottom: 1px solid #e4e4e4;
  226. }
  227. div {
  228. box-sizing: border-box;
  229. }
  230. .leftcontentbox {
  231. position: relative;
  232. height: 100%;
  233. overflow: hidden;
  234. width: 36%;
  235. }
  236. .rotate {
  237. transform: rotateY(90deg);
  238. }
  239. .layui-zz-box {
  240. display: block;
  241. height: 100%;
  242. }
  243. .layui-fluid {
  244. display: block;
  245. box-shadow: 0 0 4px 0 #B6CADE;
  246. border-radius: 5px;
  247. margin: 15px;
  248. background-color: #ffffff;
  249. }
  250. .keyword {
  251. height: 35px;
  252. margin: 4px;
  253. }
  254. .keywords {
  255. height: 35px;
  256. margin: 4px;
  257. }
  258. input[disabled][type="checkbox"]:checked::before {
  259. content: "\2713";
  260. background-color: #2196F3;
  261. color: #fff;
  262. position: absolute;
  263. top: 0;
  264. left: 0;
  265. width: 100%;
  266. border: 1px solid #2196F3;
  267. font-size: 12px;
  268. font-weight: bold;
  269. text-align: center;
  270. line-height: 18px;
  271. z-index: 999;
  272. }
  273. #range_person{
  274. height: calc(100vh - 230px);
  275. }
  276. .layui-border-left {
  277. display: inline-block;
  278. border-left: 5px solid #666666;
  279. padding-left: 10px;
  280. }
  281. .flex {
  282. display: flex;
  283. align-items: center;
  284. padding: 0px 20px;
  285. }
  286. .plr20 {
  287. padding: 0px 20px;
  288. }
  289. .circle {
  290. width: 5px;
  291. height: 5px;
  292. background-color: #333;
  293. border-radius: 50%;
  294. position: absolute;
  295. left: 0px;
  296. top: 10px;
  297. }
  298. .relative {
  299. position: relative;
  300. height: 30px;
  301. line-height: 30px;
  302. }
  303. .line {
  304. position: absolute;
  305. width: 1px;
  306. height: 30px;
  307. background-color: #666666;
  308. left: 2.3px;
  309. top: 13px;
  310. }
  311. .mt10 {
  312. margin-top: 10px;
  313. }
  314. .delcolor {
  315. color: #249EFB;
  316. }
  317. .layui-card .layui-tab-brief .layui-tab-content {
  318. padding: 8px;
  319. }
  320. .dapartbox li {
  321. width: 50%;
  322. padding: 0;
  323. }
  324. .layui-table td, .layui-table th{width:25%;}
  325. .layui-table-body{
  326. height: auto !important;
  327. overflow: initial;
  328. }
  329. .datashow_dl{overflow: hidden;}
  330. .datashow_dl dd{float:left;padding:8px 20px;border: 1px solid #DCE1E5;color:#555;margin:15px 20px 0 0;border-radius: 4px;}
  331. .jf_li{float: left;width:380px;margin-top:30px;}
  332. .layui-card{box-shadow: none;}
  333. .flex-sub2{align-content:flex-end}
  334. .flex-sub2 a{text-decoration: underline;color:#535DFD;font-size:14px;}
  335. .header-nav {
  336. display: flex;
  337. align-items: center;
  338. background-color: #fff;
  339. padding: 15px 20px;
  340. }
  341. .justify-between {
  342. justify-content: space-between;
  343. }
  344. .flex {
  345. display: flex;
  346. }
  347. .justify-center {
  348. justify-content: center;
  349. }
  350. .align-center {
  351. align-items: center;
  352. }
  353. .flex-sub {
  354. flex: 1;
  355. }
  356. .flex-sub a{color:#666;}
  357. .circleBox {
  358. width: 20px;
  359. height: 20px;
  360. background-color: #000;
  361. border-radius: 50%;
  362. }
  363. .layui-tab-title,.layui-tab-title .layui-this:after{border: 0 !important;}
  364. .layui-this a{color:#1e9fff !important;}
  365. .mr10 {
  366. margin-right: 10px;
  367. }
  368. </style>
  369. <body>
  370. <div class="layui-tab" style="margin-top: 0;">
  371. <div class="header-nav">
  372. <div class="mr10 circleBox flex align-center justify-center" style="padding: 0;">
  373. <a href="index.html"><i class="layui-icon layui-icon-return"
  374. style="color: #fff;font-size: 14px;"></i></a>
  375. </div>
  376. <ul class="layui-tab-title flex-sub">
  377. <li><a href="setting.html?id={$activity.id}">规则设置</a></li>
  378. <li class="layui-this"><a href="team.html?id={$activity.id}">团队设置</a></li>
  379. <li><a href="panel_setting.html?id={$activity.id}">控制面板</a></li>
  380. </ul>
  381. {notempty name="activity.course"}
  382. <div class="flex-sub2">
  383. <a target="_blank" href="{$url}">打开大屏</a>
  384. <a style="margin-left:25px;cursor: pointer;" id="Copy" data-urls="{$url}">复制大屏链接</a>
  385. </div>
  386. {/notempty}
  387. </div>
  388. <div class="layui-tab-content" style="padding: 0;">
  389. <div class="layui-tab-item layui-show">
  390. <div class="layui-fluid">
  391. <div class="layui-card" style="height: calc(100vh - 140px);">
  392. <div class="mainbox height100_">
  393. <div class="bodys wpsr height100_">
  394. <div style="overflow: hidden;">
  395. <div class="layui-col-md5 layui-col-xs5 layui-col-sm5 leftcontentbox">
  396. <div class="layui-zz-box">
  397. <div class="layui-inline" style="display:block;">
  398. <div class="layui-tab layui-tab-card" lay-filter="maintenanceOrder">
  399. <div class="layui-tab-content">
  400. <div class="layui-tab-item layui-show lay-dapartbox">
  401. <div class="list" id="range_person" style="overflow: auto;"></div>
  402. </div>
  403. </div>
  404. </div>
  405. </div>
  406. </div>
  407. </div>
  408. <div class="layui-col-md5 layui-col-xs5 layui-col-sm5 showdepartbox" style="overflow: auto;height: calc(100vh - 206px);">
  409. <div class="nowdepartbox1">
  410. <table class="layui-table">
  411. <thead>
  412. <tr>
  413. <th>团队名称</th>
  414. <th>人数</th>
  415. <th>操作</th>
  416. </tr>
  417. </thead>
  418. <tbody id="nowdepartbox1">
  419. </tbody>
  420. </table>
  421. </div>
  422. </div>
  423. </div>
  424. <div class="plr20 mt10" style="margin-top: 20px;">
  425. <button class="layui-btn layuiadmin-btn" style="display: flex;align-items: center;" id="team_submit"> 确定
  426. </button>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. </div>
  432. </div>
  433. </div>
  434. </div>
  435. <script src="__STATIC__/layui/layui/layui.js"></script>
  436. <script src="__STATIC__/layui/layui/lay/modules/xm-select.js" type="text/javascript" charset="utf-8"></script>
  437. {/block} {block name="js"}
  438. <script>
  439. layui.config({
  440. base: '__LAYUI__/',
  441. }).extend({
  442. index: 'lib/index' //主入口模块
  443. }).use(['index', 'jquery', 'table', 'tree', 'layer', 'element', 'form', 'laydate'], function () {
  444. var table = layui.table,
  445. tree = layui.tree,
  446. layer = layui.layer,
  447. $ = layui.jquery,
  448. element = layui.element,
  449. laydate = layui.laydate,
  450. form = layui.form,
  451. customertable = [],
  452. aid = '{$activity.id}';
  453. //点击选择人员
  454. $(document).on('click', '.leftcontentbox li', function (e) {
  455. if (e.target.localName === 'i') {
  456. let o = $(this).next();
  457. if (o && o[0] && o[0].localName === 'ul') {
  458. if (!o[0].style.display || o[0].style.display == 'block') {
  459. o[0].style.display = 'none';
  460. e.target.className = "group layui-icon layui-icon-triangle-r"
  461. } else {
  462. o[0].style.display = 'block';
  463. e.target.className = "group layui-icon layui-icon-triangle-d"
  464. }
  465. }
  466. }
  467. if (!(e.target.localName == 'input')) {
  468. return;
  469. }
  470. var perclass = $(this).data('perclass');
  471. var c = $('.' + perclass).prop("checked");
  472. var id = $(this).data('id');
  473. var title = $(this).data('title');
  474. var count = $(this).data('count');
  475. var select = $(this).data('select');
  476. var datalist=[];
  477. if (c == true) {
  478. datalist.push({
  479. id:id,
  480. title:title,
  481. count:count,
  482. select:select
  483. })
  484. customertable.push(datalist[0])
  485. leftlist(customertable)
  486. }else{
  487. $('.' + perclass).prop("checked", false);
  488. for(var i=0;i<customertable.length;i++){
  489. if(customertable.length>0){
  490. if(customertable[i].id==id){
  491. customertable.splice(i,1)
  492. }
  493. }else{
  494. customertable=[];
  495. }
  496. }
  497. $('#del' + id).remove();
  498. }
  499. })
  500. function leftlist(setdatalist){
  501. var html = '';
  502. setdatalist.forEach(function (item, index) {
  503. istrue = item.select?1:0;
  504. html += '<tr data-id=' + item.id + ' id=del' + item.id + '>';
  505. html += '<td>' + item.title + '</td>';
  506. html += '<td>' + item.count + '</td>';
  507. html += '<td data-id=' + item.id + ' data-detid="per_org_' + item.id + '" data-select="'+ istrue +'" class="strucinfo">删除</td>';
  508. html += '</tr>';
  509. })
  510. $('#nowdepartbox1').html(html);
  511. for (let i = 0; i < $('#nowdepartbox1 .strucinfo').length; i++) {
  512. $($('#nowdepartbox1 .strucinfo')[i]).off('click').on('click', function (e) {
  513. let id = e.currentTarget.dataset.id;
  514. let detid = e.currentTarget.dataset.detid;
  515. let select = e.currentTarget.dataset.select;
  516. $('.'+detid).prop("checked", false);
  517. for(var i=0;i<customertable.length;i++){
  518. if(customertable.length>0){
  519. if(customertable[i].id==id){
  520. customertable.splice(i,1)
  521. }
  522. }else{
  523. customertable=[];
  524. }
  525. }
  526. $('#del' + id).remove();
  527. console.log(select)
  528. if(select==1){
  529. $.ajax({
  530. url: '{:url("wechatActivity/del_team")}',
  531. type: 'post',
  532. data: {
  533. tid:id,
  534. aid:aid
  535. },
  536. dataType: 'json',
  537. success: function (res) {
  538. if(res.code === 0) {
  539. layer.msg(res.msg, {
  540. time: 300,
  541. anim: 0
  542. })
  543. } else {
  544. layer.msg(res.msg, {
  545. anim: 6
  546. ,time: 400
  547. });
  548. }
  549. }
  550. });
  551. }
  552. })
  553. }
  554. }
  555. var operate = {
  556. struct: function (keyword) {
  557. var that = this;
  558. that.send({ 'keyword': keyword }, '{:url("WechatActivity/get_orgs",array("aid"=>$activity["id"]))}', function (res) {
  559. if (res.code == 0) {
  560. if(res.data.length!==0){
  561. $('.list').html(that.setStruct(res.data, res.checkOrg));
  562. }
  563. } else {
  564. $('.list').html('<span>' + res.msg + '</span>');
  565. }
  566. });
  567. },
  568. send: function (data, url, callback) {
  569. return $.ajax({
  570. type: 'post',
  571. url: url,
  572. data: data,
  573. success: function (res) {
  574. callback(res)
  575. }
  576. })
  577. },
  578. setStruct: function (data, checkOrg) {
  579. var that = this;
  580. var arr = checkOrg ? checkOrg.split(',') : [];
  581. var html = '<ul>';
  582. data.forEach(function (elem, index) {
  583. var flag = false;
  584. html += '<li data-id="' + elem.id + '" data-title="' + elem.title + '" data-type=' + elem.type + ' data-perclass=' + elem.per_class + ' data-orgclass=' + elem.org_class + ' data-count="' + elem.count + '" data-select="'+elem.select+'"><div class="everydepart">';
  585. if (elem.children.length !== 0)
  586. html += '<i class="group layui-icon layui-icon-triangle-d"></i>';
  587. else
  588. html += '<i class="layui-icon layui-icon-user"></i>';
  589. html += '<span>' + elem.title + '</span>';
  590. for (var i in arr) {
  591. if (arr[i] == elem.id) {
  592. html += '<input data-did="' + elem.id + '" data-title="' + elem.title + '" data-class=' + elem.class + ' class="checkdiv ' + elem.org_class + ' ' + elem.per_class + '" data-type="' + elem.type + '" type="checkbox" checked/></div>';
  593. flag = true;
  594. }
  595. }
  596. if (!flag) {
  597. if(elem.select){
  598. html += '<input data-did="' + elem.id + '" data-title="' + elem.title + '" data-class=' + elem.class + ' class="checkdiv ' + elem.org_class + ' ' + elem.per_class + '" id="' + elem.class + '" data-type="' + elem.type + '" type="checkbox" checked/></div>';
  599. customertable.push({
  600. id:elem.id,
  601. title:elem.title,
  602. count:elem.count,
  603. select:elem.select
  604. })
  605. leftlist(customertable)
  606. }else{
  607. html += '<input data-did="' + elem.id + '" data-title="' + elem.title + '" data-class=' + elem.class + ' class="checkdiv ' + elem.org_class + ' ' + elem.per_class + '" id="' + elem.class + '" data-type="' + elem.type + '" type="checkbox" /></div>';
  608. }
  609. }
  610. html += '</li>';
  611. if (elem.children.length > 0) {
  612. html += that.setStruct(elem.children, checkOrg);
  613. }
  614. });
  615. html += '</ul>';
  616. return html
  617. }
  618. }
  619. // 结构初始化
  620. operate.struct();
  621. $('#team_submit').on('click',function(){
  622. let aid = '{$activity.id}';
  623. $.ajax({
  624. url: '{:url("WechatActivity/add_team")}',
  625. type: 'post',
  626. data: {
  627. team:customertable,aid:aid
  628. },
  629. dataType: 'json',
  630. success: function (res) {
  631. if(res.code === 0) {
  632. layer.msg(res.msg, {
  633. time: 300,
  634. anim: 0
  635. })
  636. } else {
  637. layer.msg(res.msg, {
  638. anim: 6
  639. ,time: 400
  640. });
  641. }
  642. }
  643. });
  644. })
  645. $("#Copy").on('click',function() {
  646. var flag = copyText($(this).attr('data-urls')); //传递文本
  647. alert(flag ? "复制成功!" : "复制失败!");
  648. })
  649. function copyText(text) {
  650. var textarea = document.createElement("input");//创建input对象
  651. var currentFocus = document.activeElement;//当前获得焦点的元素
  652. document.body.appendChild(textarea);//添加元素
  653. textarea.value = text;
  654. textarea.focus();
  655. if(textarea.setSelectionRange)
  656. textarea.setSelectionRange(0, textarea.value.length);//获取光标起始位置到结束位置
  657. else
  658. textarea.select();
  659. try {
  660. var flag = document.execCommand("copy");//执行复制
  661. } catch(eo) {
  662. var flag = false;
  663. }
  664. document.body.removeChild(textarea);//删除元素
  665. currentFocus.focus();
  666. return flag;
  667. }
  668. });
  669. </script>
  670. </body>
  671. {/block}