carScheduleSectionSet.jsp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  2. <%@include file="/context/mytags.jsp" %>
  3. <t:base type="jquery,easyui,tools,DatePicker"></t:base>
  4. <script src="plug-in/tools/jquery.tips.js"></script>
  5. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Cq7aZVbka0L3UXDLgkKFoiFqnZAwPdS4"></script>
  6. <body style="overflow-y: hidden" scroll="no">
  7. <style type="text/css">
  8. body {
  9. font-size: 13px;
  10. margin: 0px
  11. }
  12. #container {
  13. width: 100%;
  14. height: 80%;
  15. }
  16. .label {
  17. margin-left: 20px;
  18. font-weight: bold;
  19. font-size: 14px
  20. }
  21. .lng-lat {
  22. margin: 0 0 30px 0px;
  23. }
  24. .lng-lat .item {
  25. margin: 10px;
  26. }
  27. .angle {
  28. display: inline-block;
  29. width: 0px;
  30. height: 0px;
  31. position: absolute;
  32. bottom: -60px;
  33. border: 14px solid;
  34. left: 15px;
  35. bottom: -25px;
  36. opacity: 0.8;
  37. border-color: #333333 transparent transparent transparent;
  38. }
  39. .datagrid-btable .datagrid-cell {
  40. text-overflow: ellipsis;
  41. white-space: nowrap;
  42. }
  43. </style>
  44. <div id="main_list" class="easyui-layout" fit="true">
  45. <div region="center" style="padding:0px;border:0px;">
  46. <input id="carid" name="carid" type="hidden" value='${schedule.carid}' }/>
  47. <input id="scheduleid" name="scheduleid" type="hidden" value='${schedule.id}'/>
  48. <t:datagrid name="detailList" checkbox="false" pagination="false" fitColumns="fasle" title="路段列表"
  49. actionUrl="carScheduleSectionController.do?datagrid&scheduleid=${schedule.id}"
  50. autoLoadData="true" idField="id" nowrap="true" extendParams="rownumbers : false," sortName="seq"
  51. sortOrder="asc" fit="true" queryMode="group" onLoadSuccess="onloaded">
  52. <t:dgCol title="主键" field="id" hidden="true" queryMode="single" width="120"></t:dgCol>
  53. <t:dgCol title="序号" field="seq" queryMode="single" width="50"></t:dgCol>
  54. <t:dgCol title="路段名" field="sectionName" queryMode="single" width="120" sortable="false"></t:dgCol>
  55. <t:dgCol title="车辆" field="carid" hidden="true" queryMode="single" width="120"></t:dgCol>
  56. <t:dgCol title="计划id" field="scheduleid" hidden="true" queryMode="single" width="120"></t:dgCol>
  57. <t:dgCol title="经度" field="lng" hidden="true" queryMode="single" width="80"></t:dgCol>
  58. <t:dgCol title="纬度" field="lat" hidden="true" queryMode="single" width="80"></t:dgCol>
  59. <%-- <t:dgCol title="开始时间" field="lat" hidden="false" queryMode="single" width="80"></t:dgCol>--%>
  60. <t:dgCol title="计划完成" field="planEndTime" hidden="false" queryMode="single" width="80"></t:dgCol>
  61. <t:dgCol title="操作" field="opt"></t:dgCol>
  62. <t:dgDelOpt title="删除" url="carScheduleSectionController.do?doDel&id={id}" urlclass="ace_button"
  63. urlfont="fa-trash-o"/>
  64. <t:dgFunOpt funname="showPoint(lng,lat,address)" title=" 显示" urlclass="ace_button"
  65. urlfont="fa-map-marker"></t:dgFunOpt>
  66. <%-- <t:dgToolBar title="录入" icon="icon-add" operationCode="add" url="carScheduleDetailController.do?goAdd" funname="adddetail"></t:dgToolBar> --%>
  67. <t:dgToolBar title="选择路段" icon="icon-edit" operationCode="edit" funname="openSectionSelect('${schedule.id}')"></t:dgToolBar>
  68. <t:dgToolBar title="修改" icon="icon-edit" operationCode="edit" url="carScheduleSectionController.do?goUpdate"
  69. funname="update"></t:dgToolBar>
  70. </t:datagrid>
  71. </div>
  72. </div>
  73. <div id="eastPanel" region="east" style="width: 750px;" split="true">
  74. <div id="userListpanel" class="easyui-panel" style="padding:0px;border:0px" fit="true" border="false">
  75. <div style="margin:10px;display: none;">搜&ensp;&ensp;&ensp;&ensp;索: <input type="text" id="suggestId" size="30"
  76. value="百度"
  77. style="width:300px;"/></div>
  78. <div class="lng-lat" style="display: none;">
  79. <div class="item">
  80. 当前经度:
  81. <input type="text" id="jing" type=""/>
  82. </div>
  83. <div class="item">
  84. 当前纬度:
  85. <input type="text" id="wei"/>
  86. <span style="display:-moz-inline-box;display:inline-block;float: right;margin-right: 10px;">
  87. &ensp;&ensp;&ensp;&ensp;路径点序号:
  88. <input type="text" id="seq" class="text"/>
  89. <a href="#" class="easyui-linkbutton l-btn" iconcls="icon-add" style="margin-left: 50px;"
  90. onclick="addPoint()" id="">
  91. <span>添加到路径点</span>
  92. </a>
  93. <a href="#" class="easyui-linkbutton l-btn" iconcls="icon-view" onclick="showAllPoint()" id="upexport">
  94. <span>显示全部路径点</span>
  95. </a>
  96. </span>
  97. </div>
  98. </div>
  99. <div id="container"></div>
  100. </div>
  101. </div>
  102. </body>
  103. <script src="webpage/cn/com/lzt/car/schedule/carScheduleList.js"></script>
  104. <script type="text/javascript">
  105. $(function () {
  106. var newtitle = '【' + '${schedule.carname}' + '】' + '${schedule.start}' + '~' + '${schedule.end}' + ' 路段列表'; //
  107. $("#detailList").datagrid({title: newtitle});
  108. });
  109. function addPoint() {
  110. if (!$('#jing').val()) {
  111. tip('请先在地图上选择位置,然后再添加到路径点');
  112. return;
  113. }
  114. var str = $('#seq').val();
  115. var n = Number(str);
  116. if (isNaN(n)) {
  117. tip('序号只能填写数字,请重新录入');
  118. return;
  119. }
  120. $.ajax({
  121. url: "carScheduleDetailController.do?doAddFromMap",
  122. data: {
  123. scheduleid: $('#scheduleid').val(),
  124. lng: $('#jing').val(),
  125. lat: $('#wei').val(),
  126. seq: $('#seq').val()
  127. },
  128. type: "Post",
  129. dataType: "json",
  130. success: function (data) {
  131. if (data.success) {
  132. tip(data.msg);
  133. $("#detailList").datagrid('reload');
  134. $('#seq').val('');
  135. } else {
  136. $.messager.alert('提示信息', data.msg);
  137. }
  138. }
  139. });
  140. /* //添加完刷新表格
  141. $('#detailList').datagrid({
  142. queryParams:{scheduleid:$('#scheduleid').val()}
  143. });
  144. $("#detailList").datagrid('reload'); */
  145. }
  146. var myLabels = [];
  147. function showAllPoint() {
  148. $.ajax({
  149. url: "carScheduleDetailController.do?all",
  150. data: {scheduleid: $('#scheduleid').val()},
  151. type: "Post",
  152. dataType: "json",
  153. success: function (data) {
  154. if (data.status == "success") {
  155. map.clearOverlays();
  156. var point = new BMap.Point(data.details[0]['lng'], data.details[0]['lat']);
  157. map.centerAndZoom(point, 13);
  158. myLabels = [];
  159. for (var i = 0; i < data.details.length; i++) {
  160. var maker = addMarker(new BMap.Point(data.details[i]['lng'], data.details[i]['lat']));
  161. addInfoWindow(maker, data.details[i]['address'], data.details[i]['seq']);
  162. }
  163. } else {
  164. $.messager.alert('提示信息', "未查询到途经点信息");
  165. }
  166. }
  167. });
  168. }
  169. //添加信息窗口
  170. function addInfoWindow(marker, content, number) {
  171. var offsetSize = new BMap.Size(0, 0);
  172. var labelStyle = {
  173. color: "#fff",
  174. backgroundColor: "0.05",
  175. border: "0"
  176. };
  177. //不同数字长度需要设置不同的样式。
  178. switch ((number + '').length) {
  179. case 1:
  180. labelStyle.fontSize = "14px";
  181. offsetSize = new BMap.Size(4, 2);
  182. break;
  183. case 2:
  184. labelStyle.fontSize = "12px";
  185. offsetSize = new BMap.Size(2, 4);
  186. break;
  187. case 3:
  188. labelStyle.fontSize = "10px";
  189. offsetSize = new BMap.Size(-2, 4);
  190. break;
  191. default:
  192. break;
  193. }
  194. var label = new BMap.Label(number, {
  195. offset: offsetSize
  196. });
  197. label.setStyle(labelStyle);
  198. marker.setLabel(label);
  199. var label = new window.BMap.Label(content, {offset: new BMap.Size(20, -10)});
  200. marker.setLabel(label);
  201. }
  202. //添加标注
  203. function addMarker(point) {
  204. var marker = new BMap.Marker(point);
  205. map.addOverlay(marker);
  206. return marker;
  207. }
  208. function deletePoine() {
  209. $.ajax({
  210. url: "carScheduleDetailController.do?doDelByPoint",
  211. data: {
  212. scheduleid: $('#scheduleid').val(),
  213. lng: $('#jing').val(),
  214. lat: $('#wei').val()
  215. },
  216. type: "Post",
  217. dataType: "json",
  218. success: function (data) {
  219. if (data.status == "success") {
  220. } else {
  221. $.messager.alert('提示信息', "添加到路径点失败");
  222. }
  223. }
  224. });
  225. }
  226. function showPoint(lng, lat, address) {
  227. //清除地图上的marker
  228. map.clearOverlays();
  229. var marker = new BMap.Marker(new BMap.Point(lng, lat));
  230. var myLabel = setLabelStyle(address);
  231. marker.addEventListener("mouseover", function () {
  232. marker.setLabel(myLabel) //鼠标移入maker显示文字标签
  233. });
  234. marker.addEventListener("mouseout", function (e) {
  235. map.removeOverlay(marker.getLabel()) //鼠标移除maker隐藏文字标签
  236. });
  237. map.addOverlay(marker);
  238. }
  239. function setLabelStyle(content) {
  240. //左偏移 右偏移
  241. var offsetSize = new BMap.Size(0, 0);
  242. var labelStyle = {
  243. color: "#fff",
  244. backgroundColor: "#333333",
  245. border: "0",
  246. fontSize: "14px",
  247. width: "200px",
  248. opacity: "0.8",
  249. verticalAlign: "center",
  250. borderRadius: "2px",
  251. whiteSpace: "normal",
  252. wordWrap: "break-word",
  253. padding: "7px",
  254. };
  255. //用于设置样式
  256. var spanA = "<span class='angle'><span>";
  257. //不同数字长度需要设置不同的样式。
  258. var num = parseInt(content.length / 10)
  259. switch (num) {
  260. case 0:
  261. offsetSize = new BMap.Size(-20, -40);
  262. break;
  263. case 1:
  264. offsetSize = new BMap.Size(-20, -40);
  265. break;
  266. case 2:
  267. offsetSize = new BMap.Size(-20, -60);
  268. break;
  269. case 3:
  270. offsetSize = new BMap.Size(-20, -80);
  271. break;
  272. default:
  273. break;
  274. }
  275. var label = new BMap.Label(content + spanA, {
  276. offset: offsetSize
  277. });
  278. label.setStyle(labelStyle);
  279. return label;
  280. }
  281. var lng = document.getElementById('jing');
  282. var lat = document.getElementById('wei');
  283. var map = new BMap.Map("container");
  284. var point = new BMap.Point(121.130254, 31.156433);
  285. var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野
  286. map.centerAndZoom(point, 13);
  287. map.enableScrollWheelZoom();
  288. map.addControl(new BMap.NavigationControl()); //缩放按钮
  289. var ac = new BMap.Autocomplete( //建立一个自动完成的对象
  290. {
  291. "input": "suggestId"
  292. , "location": map
  293. });
  294. ac.addEventListener("onhighlight", function (e) { //鼠标放在下拉列表上的事件
  295. /* var str = "";
  296. var _value = e.fromitem.value;
  297. var value = "";
  298. if (e.fromitem.index > -1) {
  299. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  300. }
  301. str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;
  302. value = "";
  303. if (e.toitem.index > -1) {
  304. _value = e.toitem.value;
  305. value = _value.province + _value.city + _value.district + _value.street + _value.business;
  306. }
  307. str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
  308. G("searchResultPanel").innerHTML = str; */
  309. });
  310. var myValue;
  311. ac.addEventListener("onconfirm", function (e) { //鼠标点击下拉列表后的事件
  312. lng.value = '';
  313. lat.value = '';
  314. var _value = e.item.value;
  315. myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
  316. /* G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue; */
  317. setPlace();
  318. });
  319. function setPlace() {// 创建地址解析器实例
  320. myGeo.getPoint(myValue, function (point) {
  321. if (point) {
  322. lng.value = point.lng;
  323. lat.value = point.lat;
  324. map.centerAndZoom(point, 16);
  325. map.addOverlay(new BMap.Marker(point));
  326. }
  327. }, "上海");
  328. }
  329. map.addEventListener('click', function (e) {
  330. lng.value = e.point.lng;
  331. lat.value = e.point.lat;
  332. //清除地图上的marker
  333. map.clearOverlays();
  334. var pt = e.point;
  335. var marker = new BMap.Marker(new BMap.Point(pt.lng, pt.lat));
  336. map.addOverlay(marker);
  337. //myGeo.getLocation(pt, function(rs){
  338. //addressComponents对象可以获取到详细的地址信息
  339. //var addComp = rs.addressComponents;
  340. //var site = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
  341. //$("#address").val(site);
  342. //设置放大倍数
  343. //map.centerAndZoom(new BMap.Point(pt.lng, pt.lat), 18);
  344. //将对应的HTML元素设置值
  345. //$("#addressLonglat").val(pt.lng+","+pt.lat);
  346. // });
  347. })
  348. function onloaded() {
  349. var _grid = $('#detailList');
  350. var tableTd = $('div.datagrid-body td[field="address"]');
  351. tableTd.each(function () {
  352. var $this = $(this);
  353. var index = $this.parent('tr').attr('datagrid-row-index');
  354. var rows = _grid.datagrid('getRows');
  355. var currentRow = rows[index];
  356. var content = '<div style="font-size:16px; max-width:700px;word-break: break-all; word-wrap: break-word;">' + currentRow.address + '</div>';
  357. $this.tips({content: content, wrapColor: 'black'});
  358. });
  359. }
  360. function openSectionSelect(schedule_id) {
  361. console.log('openSectionSelect schedule_id=' + schedule_id)
  362. $.dialog({
  363. content: 'url:publicpageController.do?roadSectionSelect&schedule_id=' + schedule_id,
  364. zIndex: getzIndex(),
  365. title: '路段列表',
  366. lock: true,
  367. width: '1000px',
  368. height: '650px',
  369. opacity: 0.4,
  370. button: [
  371. {
  372. name: '确定', callback: function () {
  373. var iframe = this.iframe.contentWindow;
  374. var selectRows = iframe.getReason()
  375. if (selectRows) {
  376. console.log('selectRows count=' + selectRows.length)
  377. selectRows.forEach(function (item) {
  378. addRoadSection(schedule_id, item)
  379. })
  380. }
  381. }, focus: true
  382. },
  383. {
  384. name: '取消', callback: function () {
  385. }
  386. }
  387. ]
  388. }).zindex();
  389. }
  390. function addRoadSection(scheduleid, item) {
  391. $.ajax({
  392. url : "carScheduleSectionController.do?doAdd",
  393. type : 'post',
  394. data : {
  395. scheduleId : scheduleid,
  396. sectionId : item.id,
  397. sectionCode : item.code
  398. },
  399. cache : false,
  400. success : function(data) {
  401. var d = data; // ------ $.parseJSON(data);
  402. if (d.success) {
  403. var msg = d.msg;
  404. tip(msg);
  405. $("#detailList").datagrid('reload');
  406. } else {
  407. layer.alert(d.msg);
  408. }
  409. }
  410. });
  411. }
  412. </script>