floorplan.blade.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <div class="box">
  2. <form action="{{route('floorplans.floors')}}" enctype="multipart/form-data" method="post" id="form1">
  3. {{ csrf_field() }}
  4. <input type="hidden" value="{{ $content->id or '' }}" name="floorplan_id" id="floorplan_id">
  5. <input type="hidden" name="floor_position" id="floor_position" value="">
  6. <div class="box-body table-responsive">
  7. <div class="form-group clearfix">
  8. <label for="uploadImg" class="control-label astrisk">展位图:</label>
  9. <div style="float: left;width: 580px;">
  10. <div tabindex="500" class="btn btn-primary btn-file" style="float: left;">
  11. <i class="glyphicon glyphicon-folder-open"></i>&nbsp;
  12. <span class="hidden-xs">上传图片</span>
  13. <input type="file" accept="image/*" class="uploadImg" name="uploadImg" id="uploadImg" onchange="changeImg(this)">
  14. </div>
  15. <div class="tips">
  16. (建议图片大小1000x800)
  17. </div>
  18. </div>
  19. </div>
  20. <div class="form-group clearfix">
  21. <label for="imgName" class="control-label astrisk">展位平面图名称:</label>
  22. <div style="float: left;width: 380px;">
  23. <div class="input-group">
  24. <span class="input-group-addon"><i class="fa fa-pencil fa-fw"></i></span>
  25. <input type="text" id="imgName" name="imgName" value="{{ $content->name or '' }}" class="form-control" placeholder="请输入展位图名称">
  26. </div>
  27. </div>
  28. <div class="tips"></div>
  29. </div>
  30. <div class="form-group clearfix zwNamePre">
  31. <label for="prefix" class="control-label">展位号前缀:</label>
  32. <div style="float: left;width: 180px;">
  33. <div class="input-group">
  34. <span class="input-group-addon"><i class="fa fa-pencil fa-fw"></i></span>
  35. <input type="text" name="prefixCode" class="form-control" placeholder="请输入前缀">
  36. </div>
  37. </div>
  38. {{--<div style="float: left;width: 55px;">
  39. <button type="button" class="btn btn-primary prefixSave">保存</button>
  40. </div>--}}
  41. <div class="tips"></div>
  42. </div>
  43. <div class="form-group clearfix sbIdPre">
  44. <label for="prefix" class="control-label">设备ID前缀:</label>
  45. <div style="float: left;width: 180px;">
  46. <div class="input-group">
  47. <span class="input-group-addon"><i class="fa fa-pencil fa-fw"></i></span>
  48. <input type="text" name="prefixId" class="form-control" placeholder="请输入前缀">
  49. </div>
  50. </div>
  51. {{--<div style="float: left;width: 55px;">--}}
  52. {{--<button type="button" class="btn btn-primary prefixSave" >保存</button>--}}
  53. {{--</div>--}}
  54. <div class="tips"></div>
  55. </div>
  56. <div class="form-group clearfix sbIdPre">
  57. <label for="prefix" class="control-label">批量创建展位:</label>
  58. <div style="float: left;width: 180px;">
  59. <div class="input-group">
  60. <span class="input-group-addon"><i class="fa fa-pencil fa-fw"></i></span>
  61. <input type="text" name="tempZwNum" class="form-control" placeholder="请输入展位数" onkeyup="if(event.keyCode !=37 &amp;&amp; event.keyCode != 39) value=value.replace(/\D/g,'');" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))">
  62. </div>
  63. </div>
  64. <div style="float: left;width: 55px;">
  65. <button type="button" class="btn btn-primary tempZwSave">确定</button>
  66. </div>
  67. <div class="tips"></div>
  68. </div>
  69. <div class="col-md-12" style="width:1000px;">
  70. <div>
  71. 在平面图上点击新增、移动展位。(左键新增可预定展位,右键新增预留展位)
  72. <img src="{{ theme_asset('app/images/jobfair/zw-order.png')}}" alt="" /><span style="padding: 0px 10px;">可预定展位</span>
  73. <img src="{{ theme_asset('app/images/jobfair/zw-stayLock.png')}}" alt="" /><span style="padding: 0px 10px;">预留展位</span>
  74. </div>
  75. </div>
  76. <div class="clearfix">
  77. <div class="col-md-12 no-padding jobfairbox" id="jobfairShow" oncontextmenu="return false" data-manage="true">
  78. <img id="floorplanImg" class="floorplanImg" src="{{ theme_asset('app/images/1000x800.png')}}" alt="平面图"/>
  79. </div>
  80. <div class="lists-info">
  81. <div class="list-box">
  82. <table class="table table-hover no-border">
  83. <thead>
  84. <tr><th colspan="4" style="text-align:center;vertical-align:middle;font-size: 16px;">展位清单</th> </tr>
  85. <tr style="border: 1px solid #f4f4f4;"><th style="width: 60px;">展位号</th><th style="width: 65px;" >类型</th><th style="width: 60px;">排序</th><th style="width: 90px;">设备ID</th></tr>
  86. </thead>
  87. </table>
  88. <div class="main-table">
  89. <table class="table table-hover">
  90. <tbody></tbody>
  91. </table>
  92. </div>
  93. </div>
  94. <div class="total-num"></div>
  95. <div style="margin:20px 0px 0px 95px;"><button type="button" class="btn btn-primary" id="refresh">更新列表</button></div>
  96. </div>
  97. </div>
  98. </div>
  99. <div class="box-footer">
  100. <div class="btn-group" style="margin-left: 440px;">
  101. <button type="button" class="btn btn-primary" id="save">保存</button>
  102. </div>
  103. </div>
  104. </form>
  105. </div>
  106. @if(isset($content->images))
  107. <input type="hidden" id="kP" value="{{ upload_asset($content->images) }}">
  108. @else
  109. <input type="hidden" id="kP" value="">
  110. @endif
  111. <input type="hidden" id="kD" value={!! $content->value or '' !!}>
  112. <style type="text/css">
  113. /*body{min-width: 1680px;overflow: auto;}*/
  114. .clearfix:after{display:block;clear:both;content:"";visibility:hidden;height:0;}
  115. .clearfix{zoom:1; /*为了兼容IE*/}
  116. .box .lists-info{float: left;margin-left: 20px;position: relative;/*left: 0px;top: -55px;*/margin-top: 10px;}
  117. .box .lists-info .list-box{margin-bottom:20px;}
  118. .box .lists-info .list-box table{margin-bottom: 0px;}
  119. .box .lists-info .list-box .main-table{max-height: 620px;overflow-y: auto;}
  120. .box .lists-info .list-box .main-table table{border: 1px solid #f4f4f4;}
  121. .box .lists-info .list-box table input{border:none;}
  122. .box .lists-info .list-box table tr td{width: 63px;}
  123. .box .lists-info .list-box table tr .td-sort{width: 64px;}
  124. .box .lists-info .list-box table tr .td-enable{color: #009900;width: 69px;}
  125. .box .lists-info .list-box table tr .td-disable{color: #FF6600;width: 69px;}
  126. .box .lists-info .list-box table tr .equipment-id{width: 80px;}
  127. .box .lists-info .total-num{text-align: center;padding: 5px;font-size: 12px;}
  128. .box .form-group{margin: 20px 0px;width: 1000px;}
  129. .box .form-group label{float: left;width: 120px;line-height: 34px;text-align: right;}
  130. .tips{float: left;color: #999999;line-height: 34px;}
  131. .addbox{width: 140px;float: left;}
  132. .jobfairbox{width: 1002px;height:auto;min-height:802px;background-color: #fff; border: 1px solid #ccc;margin-top:20px;position: relative;float: left;}
  133. .jobfairbox .floorplanImg{max-width: 1000px;position: absolute;left: 0px;top: 0px;}
  134. .jobfairbox .del{background:#ffffff url("{{ theme_asset('app/images/252.png') }}")no-repeat center;width: 18px;height: 18px;border-radius: 10px;display: inline-block;background-size: 16px;position: absolute;left: 22px; top: -12px;cursor: default;display: none;}
  135. .jobfairbox .sign{display: none;}
  136. .jobfairbox .zw-box:hover .del{display: block;}
  137. .jobfairbox .zw-box{display:block;width: 30px;height: 30px;float: left;color: #333;}
  138. .jobfairbox .zw-box:nth-child(20n+1){margin-right: 0px;}
  139. .jobfairbox .zw-box.zw-lock{background: url("{{ theme_asset('app/images/jobfair/zw-stayLock.png') }}")no-repeat;position: absolute;}
  140. .jobfairbox .zw-box.zw-order{background: url("{{ theme_asset('app/images/jobfair/zw-order.png') }}")no-repeat;position: absolute;}
  141. .jobfairbox .zw-box .zw-num{position: absolute;left: 0px;top: 5px;width: 30px;height: 16px;background: transparent;border: none;text-align: center;}
  142. .jobfairbox .zw-box.zw-lock .zw-num{color: #fff;}
  143. .jobfairbox .zw-box.zw-order .zw-num{color: #333;}
  144. </style>
  145. <script type="text/javascript">
  146. //同步右侧展位清单
  147. function ayncZwLists(zwLists){
  148. var listHtml = "";
  149. $(".main-table tbody").html("");
  150. //console.log(zwLists);
  151. $(".total-num").html("总展位:"+$(".jobfairbox .zw-box").length+",<span style='color:#009900;'>可预订:</span>"+$(".jobfairbox .zw-box.zw-order").length+",<span style='color:#FF6600;'>预留:</span>"+$(".jobfairbox .zw-box.zw-lock").length);
  152. for(var i=0;i<zwLists.length;i++){
  153. var zwName,zwStatus,zwStatusClass,zwType,zwPositionleft,zwPositiontop,zwSortIndex,zwEquipmentId;
  154. zwName = zwLists[i].name;
  155. zwType = zwLists[i].type;
  156. zwPositionleft =zwLists[i].left;
  157. zwPositiontop =zwLists[i].top;
  158. zwSortIndex = zwLists[i].sortindex? zwLists[i].sortindex: (i+1);
  159. zwEquipmentId = zwLists[i].equipment_id;
  160. if(zwType==1){
  161. zwStatus= "可预定";
  162. zwStatusClass = "td-enable";
  163. }else{
  164. zwStatus= "预留";
  165. zwStatusClass = "td-disable";
  166. }
  167. listHtml = '<tr data-name="'+zwName+'" data-type="'+zwType+'" data-postionleft="'+zwPositionleft+'" data-postiontop="'+zwPositiontop+'" >'+
  168. '<td><span style="color:#3c8dbc;">'+zwName+'</span></td>'+
  169. '<td class="'+zwStatusClass+'">'+zwStatus+'</td>'+
  170. '<td><input type="text" class="td-sort" value="'+zwSortIndex+'"></td>'+
  171. '<td><input type="text" class="equipment-id" value="'+zwEquipmentId+'"></td>'+
  172. '</tr>';
  173. $(".main-table tbody").append(listHtml);
  174. }
  175. }
  176. // 获取右侧清单展位信息
  177. function getRightArr() {
  178. var newzwlists = new Array();
  179. $(".main-table tbody tr").each(function(){
  180. var name = $(this).data("name");
  181. var type = $(this).data("type");
  182. var left = $(this).data("postionleft");
  183. var top = $(this).data("postiontop");
  184. var sortIndex = parseInt($(this).find(".td-sort").val());
  185. var equipmentId = $.trim($(this).find(".equipment-id").val());
  186. var positionObj = {
  187. id:0,
  188. name:name,
  189. type:type,
  190. left:left,
  191. top:top,
  192. sortindex:sortIndex,
  193. equipment_id:equipmentId
  194. }
  195. newzwlists.push(positionObj);
  196. })
  197. return newzwlists;
  198. }
  199. // 获取左侧展位图中展位信息
  200. function getzwArr(){
  201. var zwArr = new Array();
  202. $("#jobfairShow .zw-box").each(function(){
  203. var left = $(this).css("left");
  204. var top = $(this).css("top");
  205. var name = $.trim($(this).find(".zw-num").val());
  206. var type = $(this).data("type");
  207. var sortIndex = $(this).data("index");
  208. var equipmentId = $(this).data("equipment");
  209. var obj = {
  210. id:0,
  211. name:name,
  212. type:type,
  213. left:left,
  214. top:top,
  215. sortindex:sortIndex,
  216. equipment_id:equipmentId
  217. }
  218. zwArr.push(obj);
  219. })
  220. return zwArr;
  221. }
  222. //更新列表同步恢复左侧展位
  223. function recoveryZw(zwArr) {
  224. $("#jobfairShow .zw-box").remove();
  225. for(var i =0; i< zwArr.length;i++){
  226. var zwClass = zwArr[i].type==1?"zw-order":"zw-lock";
  227. var jobfairHtml = '<a class="zw-box '+zwClass+'" data-type="'+zwArr[i].type+'" style="left:'+zwArr[i].left+';top:'+zwArr[i].top+';" data-index="'+zwArr[i].sortindex+'" data-equipment="'+zwArr[i].equipment_id+'">'+
  228. '<span class="del"/></span>'+
  229. '<input type="text" class="zw-num" value="'+zwArr[i].name+'" /></a>';
  230. $("#jobfairShow").append(jobfairHtml);
  231. }
  232. }
  233. </script>
  234. <script type="text/javascript" src="{{ theme_asset('app/js/drag.js') }}"></script>
  235. <script type="text/javascript" src="{{ theme_asset('app/js/jobfair.js') }}"></script>
  236. <script type="text/javascript">
  237. //判断浏览器是否支持FileReader接口
  238. if (typeof FileReader == 'undefined') {
  239. alert("浏览器不支持")
  240. //使选择控件不可操作
  241. $("#uploadImg").prop("disable",true)
  242. }
  243. //上传平面图预览
  244. function changeImg(obj) {
  245. var file = obj.files[0];
  246. if((file.type).indexOf("image/")==-1){
  247. swal('请上传图片', '', 'warning');
  248. return false;
  249. }
  250. var reader = new FileReader();
  251. reader.onload = function (e) {
  252. //console.log("成功读取....");
  253. var image = document.getElementById("floorplanImg");
  254. image.src = e.target.result;
  255. };
  256. reader.readAsDataURL(file)
  257. setTimeout(resetHeiht,1000);
  258. }
  259. function resetHeiht(){
  260. var h = $("#floorplanImg").outerHeight();
  261. if(h>800){
  262. $("#jobfairShow").css("minHeight",(h+2)+"px");
  263. }else{
  264. $("#jobfairShow").css("minHeight","802px");
  265. }
  266. }
  267. $(function () {
  268. var jobfair = $("#floorplan_id").val();
  269. var imgUrl = $("#kP").val();
  270. var positionArr = $("#kD").val();
  271. // 恢复展位
  272. if(jobfair){
  273. positionArr = JSON.parse(positionArr);
  274. $("#floorplanImg").attr("src", imgUrl);
  275. //console.log(positionArr)
  276. recoveryZw(positionArr);
  277. ayncZwLists(positionArr);
  278. resetHeiht();
  279. }
  280. $(document).on("keyup",".zw-num",function(){
  281. ayncZwLists(getzwArr());
  282. })
  283. $(document).on("mousemove",".zw-box",function(){
  284. ayncZwLists(getzwArr());
  285. })
  286. //批量创建临时展位
  287. $(".tempZwSave").click(function () {
  288. var tempZwNum = parseInt($("input[name='tempZwNum']").val());
  289. var prefixCode = $.trim($("input[name='prefixCode']").val());
  290. var prefixId = $.trim($("input[name='prefixId']").val());
  291. if (!tempZwNum) {
  292. swal('请输入批量创建个数', '', 'warning');
  293. return false;
  294. }
  295. $("#jobfairShow .zw-box").remove();
  296. for(var i =0; i<tempZwNum;i++){
  297. var html2 = '<a class="zw-box" data-type="1" style="margin:10px" data-equipment="'+prefixId+(i+1)+'">'+
  298. '<span class="del"/></span>'+
  299. '<input type="text" class="zw-num" value="'+prefixCode+(i+1)+
  300. '"/>' +
  301. '</a>';
  302. $("#jobfairShow").append(html2);
  303. }
  304. $(".zw-box").each(function () {
  305. var left = $(this).position().left+10;
  306. var top = $(this).position().top+10;
  307. //console.log("left:"+left+"top:"+top)
  308. $(this).css({left:left,top:top});
  309. })
  310. $(".zw-box").addClass("zw-order").css({margin:"0px"});
  311. ayncZwLists(getzwArr());
  312. })
  313. $(".main-table").on("change",".equipment-id",function () {
  314. var newzwlists = getRightArr();
  315. recoveryZw(newzwlists);
  316. })
  317. //更新列表
  318. $("#refresh").click(function () {
  319. var newzwlists = getRightArr()
  320. newzwlists.sort(function(a,b){
  321. if(a.sortindex <b.sortindex ){
  322. return -1;
  323. }
  324. if(a.sortindex >b.sortindex ){
  325. return 1;
  326. }
  327. return 0;
  328. })
  329. ayncZwLists(newzwlists);
  330. recoveryZw(newzwlists);
  331. })
  332. //保存
  333. $("#save").off().click(function(){
  334. if($("#jobfairShow #floorplanImg").attr("src").indexOf("1000x800.png")!==-1){
  335. swal('请上传展位图', '', 'warning');
  336. return false;
  337. }
  338. var imgName = $("#imgName").val();
  339. if (imgName == "") {
  340. swal('请填写展位图名称', '', 'warning');
  341. return false;
  342. }
  343. var zwArr =getRightArr();
  344. //console.log(zwArr)
  345. $("#floor_position").val(JSON.stringify(zwArr));
  346. $("#form1").submit();
  347. $(this).prop("disabled","true");
  348. })
  349. })
  350. </script>