function.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. /*
  2. * Author: huafg
  3. * Date: 2015-10-30
  4. * Desc: 自定义JS工具公共类库
  5. */
  6. //时间
  7. //laydate.skin('molv');
  8. //时间选择器
  9. function ldate(obj, format) {
  10. if (format == '') { format = "YYYY-MM-DD"; }
  11. var de = {
  12. elem: '#' + obj,
  13. format: format,
  14. min: '1900-01-01', //设定最小日期为当前日期
  15. max: '2099-06-16 23:59:59', //最大日期
  16. istime: true,
  17. istoday: false,
  18. choose: function (datas) {
  19. //end.min = datas; //开始日选好后,重置结束日的最小日期
  20. //end.start = datas //将结束日的初始值设定为开始日
  21. }
  22. };
  23. laydate(de);
  24. }
  25. //WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
  26. //GCJ - 02:中国坐标偏移标准,Google Map、高德、腾讯使用
  27. //BD - 09:百度坐标偏移标准,Baidu Map使用
  28. var GPS = {
  29. PI: 3.14159265358979324,
  30. x_pi: 3.14159265358979324 * 3000.0 / 180.0,
  31. delta: function (lat, lon) {
  32. // Krasovsky 1940
  33. //
  34. // a = 6378245.0, 1/f = 298.3
  35. // b = a * (1 - f)
  36. // ee = (a^2 - b^2) / a^2;
  37. var a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。
  38. var ee = 0.00669342162296594323; // ee: 椭球的偏心率。
  39. var dLat = this.transformLat(lon - 105.0, lat - 35.0);
  40. var dLon = this.transformLon(lon - 105.0, lat - 35.0);
  41. var radLat = lat / 180.0 * this.PI;
  42. var magic = Math.sin(radLat);
  43. magic = 1 - ee * magic * magic;
  44. var sqrtMagic = Math.sqrt(magic);
  45. dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI);
  46. dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);
  47. return { 'lat': dLat, 'lon': dLon };
  48. },
  49. //WGS-84 to GCJ-02
  50. gcj_encrypt: function (wgsLat, wgsLon) {
  51. if (this.outOfChina(wgsLat, wgsLon))
  52. return { 'lat': wgsLat, 'lon': wgsLon };
  53. var d = this.delta(wgsLat, wgsLon);
  54. return { 'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon };
  55. },
  56. //GCJ-02 to WGS-84
  57. gcj_decrypt: function (gcjLat, gcjLon) {
  58. if (this.outOfChina(gcjLat, gcjLon))
  59. return { 'lat': gcjLat, 'lon': gcjLon };
  60. var d = this.delta(gcjLat, gcjLon);
  61. return { 'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon };
  62. },
  63. //GCJ-02 to WGS-84 exactly
  64. gcj_decrypt_exact: function (gcjLat, gcjLon) {
  65. var initDelta = 0.01;
  66. var threshold = 0.000000001;
  67. var dLat = initDelta, dLon = initDelta;
  68. var mLat = gcjLat - dLat, mLon = gcjLon - dLon;
  69. var pLat = gcjLat + dLat, pLon = gcjLon + dLon;
  70. var wgsLat, wgsLon, i = 0;
  71. while (1) {
  72. wgsLat = (mLat + pLat) / 2;
  73. wgsLon = (mLon + pLon) / 2;
  74. var tmp = this.gcj_encrypt(wgsLat, wgsLon)
  75. dLat = tmp.lat - gcjLat;
  76. dLon = tmp.lon - gcjLon;
  77. if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold))
  78. break;
  79. if (dLat > 0) pLat = wgsLat; else mLat = wgsLat;
  80. if (dLon > 0) pLon = wgsLon; else mLon = wgsLon;
  81. if (++i > 10000) break;
  82. }
  83. //console.log(i);
  84. return { 'lat': wgsLat, 'lon': wgsLon };
  85. },
  86. //GCJ-02 to BD-09
  87. bd_encrypt: function (gcjLat, gcjLon) {
  88. var x = gcjLon, y = gcjLat;
  89. var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);
  90. var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);
  91. bdLon = z * Math.cos(theta) + 0.0065;
  92. bdLat = z * Math.sin(theta) + 0.006;
  93. return { 'lat': bdLat, 'lon': bdLon };
  94. },
  95. //BD-09 to GCJ-02
  96. bd_decrypt: function (bdLat, bdLon) {
  97. var x = bdLon - 0.0065, y = bdLat - 0.006;
  98. var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
  99. var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
  100. var gcjLon = z * Math.cos(theta);
  101. var gcjLat = z * Math.sin(theta);
  102. return { 'lat': gcjLat, 'lon': gcjLon };
  103. },
  104. //WGS-84 to Web mercator
  105. //mercatorLat -> y mercatorLon -> x
  106. mercator_encrypt: function (wgsLat, wgsLon) {
  107. var x = wgsLon * 20037508.34 / 180.;
  108. var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.);
  109. y = y * 20037508.34 / 180.;
  110. return { 'lat': y, 'lon': x };
  111. /*
  112. if ((Math.abs(wgsLon) > 180 || Math.abs(wgsLat) > 90))
  113. return null;
  114. var x = 6378137.0 * wgsLon * 0.017453292519943295;
  115. var a = wgsLat * 0.017453292519943295;
  116. var y = 3189068.5 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));
  117. return {'lat' : y, 'lon' : x};
  118. //*/
  119. },
  120. // Web mercator to WGS-84
  121. // mercatorLat -> y mercatorLon -> x
  122. mercator_decrypt: function (mercatorLat, mercatorLon) {
  123. var x = mercatorLon / 20037508.34 * 180.;
  124. var y = mercatorLat / 20037508.34 * 180.;
  125. y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2);
  126. return { 'lat': y, 'lon': x };
  127. /*
  128. if (Math.abs(mercatorLon) < 180 && Math.abs(mercatorLat) < 90)
  129. return null;
  130. if ((Math.abs(mercatorLon) > 20037508.3427892) || (Math.abs(mercatorLat) > 20037508.3427892))
  131. return null;
  132. var a = mercatorLon / 6378137.0 * 57.295779513082323;
  133. var x = a - (Math.floor(((a + 180.0) / 360.0)) * 360.0);
  134. var y = (1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * mercatorLat) / 6378137.0)))) * 57.295779513082323;
  135. return {'lat' : y, 'lon' : x};
  136. //*/
  137. },
  138. // two point's distance
  139. distance: function (latA, lonA, latB, lonB) {
  140. var earthR = 6371000.;
  141. var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180);
  142. var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.);
  143. var s = x + y;
  144. if (s > 1) s = 1;
  145. if (s < -1) s = -1;
  146. var alpha = Math.acos(s);
  147. var distance = alpha * earthR;
  148. return distance;
  149. },
  150. outOfChina: function (lat, lon) {
  151. if (lon < 72.004 || lon > 137.8347)
  152. return true;
  153. if (lat < 0.8293 || lat > 55.8271)
  154. return true;
  155. return false;
  156. },
  157. transformLat: function (x, y) {
  158. var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
  159. ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
  160. ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;
  161. ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;
  162. return ret;
  163. },
  164. transformLon: function (x, y) {
  165. var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
  166. ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
  167. ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;
  168. ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;
  169. return ret;
  170. }
  171. };
  172. /*时间判断,DateOne是开始时间,DateTwo结束时间,根据情况判断*/
  173. function compareDate(DateOne, DateTwo) {
  174. var OneMonth = DateOne.substring(5, DateOne.lastIndexOf("-"));
  175. var OneDay = DateOne.substring(DateOne.length, DateOne.lastIndexOf("-") + 1);
  176. var OneYear = DateOne.substring(0, DateOne.indexOf("-"));
  177. var TwoMonth = DateTwo.substring(5, DateTwo.lastIndexOf("-"));
  178. var TwoDay = DateTwo.substring(DateTwo.length, DateTwo.lastIndexOf("-") + 1);
  179. var TwoYear = DateTwo.substring(0, DateTwo.indexOf("-"));
  180. if (Date.parse(OneMonth + "/" + OneDay + "/" + OneYear) <= Date.parse(TwoMonth + "/" + TwoDay + "/" + TwoYear))
  181. return true;
  182. else
  183. return false;
  184. }
  185. //提交表单
  186. function submit() {
  187. //debugger;
  188. document.forms[0].submit();
  189. return false;
  190. }
  191. //增删改提交ajax
  192. var SubAjax = {
  193. BeforeSubmit: function () {
  194. },
  195. GetParams:function () {
  196. return null;
  197. },
  198. Loading: function () {
  199. SubAjax.BeforeSubmit();
  200. $(".btn-save").attr("disabled", "disabled").find("span").html("正在保存中...")
  201. },
  202. Success: function (result) {
  203. if (result.Status == undefined) {
  204. document.writeln(result);
  205. } else if (result.Status == "y") {
  206. dig.alertSuccess("提示", result.Msg, function () {
  207. var dialog = top.dialog.get(window);
  208. dialog.close('yes', SubAjax.GetParams()).remove();
  209. });
  210. } else {
  211. dig.alertError("错误提示:", result.Msg);
  212. SubAjax.Complete();
  213. }
  214. },
  215. SuccessBack: function (result) {
  216. if (result.Status == "y") {
  217. dig.alertSuccess("提示", result.Msg, function () {
  218. history.go(-1);
  219. });
  220. } else {
  221. dig.alertError("错误提示:", result.Msg);
  222. SubAjax.Complete();
  223. }
  224. },
  225. Failure: function () {
  226. dig.alertError("错误提示:", "网络超时,请稍后再试...");
  227. SubAjax.Complete();
  228. },
  229. Complete: function () {
  230. $(".btn-save").attr("disabled", false).find("span").html("确定保存");
  231. }
  232. };
  233. $(function () {
  234. //全选 反选
  235. $('input[name="checkall"]').change(function () {
  236. if ($(this).prop("checked")) {
  237. $("input[name='checkbox_name']:checkbox,input[name='checkall']:checkbox").each(function () {
  238. if ($(this).prop("checked") == false) {
  239. $(this).prop("checked", true);
  240. }
  241. });
  242. }
  243. else {
  244. $("input[name='checkbox_name']:checkbox,input[name='checkall']:checkbox").each(function () {
  245. if ($(this).prop("checked") == true) {
  246. $(this).prop("checked", false);
  247. }
  248. });
  249. }
  250. });
  251. //单机行,选中复选框
  252. $("#example tr").slice(1).each(function (g) {
  253. var p = this;
  254. $(this).children().slice(1).click(function () {
  255. $($(p).children()[0]).children().each(function () {
  256. if (this.type == "checkbox") {
  257. if (!this.checked) {
  258. this.checked = true;
  259. } else {
  260. this.checked = false;
  261. }
  262. }
  263. });
  264. });
  265. });
  266. //单机行,选中单选框
  267. $("#example tr").slice(1).each(function (g) {
  268. var p = this;
  269. $(this).children().slice(1).click(function () {
  270. $($(p).children()[0]).children().each(function () {
  271. if (this.type == "radio") {
  272. if (!this.checked) {
  273. this.checked = true;
  274. } else {
  275. this.checked = false;
  276. }
  277. }
  278. });
  279. });
  280. });
  281. //使用col插件实现表格头宽度拖拽
  282. $(".table").colResizable();
  283. //返回
  284. $("#btn-back").click(function () {
  285. history.go(-1);
  286. });
  287. //关闭弹窗
  288. $("#btn-dig-close").click(function () {
  289. dig.remove();
  290. });
  291. //列表选择删除
  292. $('#delete').click(function () {
  293. var vals = '';
  294. $('input[name="checkbox_name"]:checked').each(function () {
  295. vals += $(this).val() + ',';
  296. });
  297. if (vals == '' || vals == ',') {
  298. dig.alertError("提示", "对不起,请选中您要操作的记录!");
  299. return;
  300. }
  301. var url = window.location.href.split('?')[0].toLowerCase();
  302. if (url.lastIndexOf('/index') > 0) {
  303. url = url.substring(0, url.indexOf('/index'));
  304. }
  305. if (url.lastIndexOf('/distributorcarlist') > 0) {
  306. url = url.substring(0, url.indexOf('/distributorcarlist'));
  307. }
  308. if (url.lastIndexOf('/salesdealerslist') > 0) {
  309. url = url.substring(0, url.indexOf('/salesdealerslist'));
  310. }
  311. if (url.lastIndexOf('/firmwareupdate') > 0) {
  312. url = url.substring(0, url.indexOf('/firmwareupdate'));
  313. }
  314. if (url.lastIndexOf('/userlist') > 0 || url.lastIndexOf('/warehouselist') > 0) {
  315. if (url.lastIndexOf('/userlist') > 0)
  316. url = url.substring(0, url.indexOf('/userlist'));
  317. if (url.lastIndexOf('/warehouselist') > 0)
  318. url = url.substring(0, url.indexOf('/warehouselist'));
  319. url = url + '/UserDelete';
  320. }
  321. else {
  322. url = url + '/Delete';
  323. }
  324. //alert(url);
  325. var msg = "删除记录后不可恢复,您确定吗?";
  326. dig.confirm("删除确认", msg, function () {
  327. $.post(url, { idList: vals }, function (res) {
  328. if (res.Status == "y") {
  329. dig.alertSuccess('提示', '删除成功', function () {
  330. window.location.reload();
  331. });
  332. }
  333. else {
  334. dig.alertError("提示", res.Msg);
  335. }
  336. }, "json");
  337. });
  338. });
  339. });
  340. //验证控制页面上面的按钮权限
  341. function VaildatePermission(v) {
  342. var permissionlist = v
  343. $('.ibox a[action]').hide();
  344. if (permissionlist != '' && permissionlist != undefined) {
  345. for (var i = 0; i < permissionlist.length; i++) {
  346. $('.ibox a[action]').each(function () {
  347. var action = $(this).attr('action');
  348. //按钮显示隐藏
  349. if (permissionlist[i].PERVALUE != null) {
  350. if (permissionlist[i].PERVALUE.toLowerCase() == action.toLowerCase()) {
  351. $(this).show();
  352. }
  353. }
  354. });
  355. }
  356. //列表跳转
  357. var permission = '';
  358. $.each(permissionlist, function (p, t) {
  359. permission += t.PERVALUE + ',';
  360. });
  361. permission = permission.toLowerCase();
  362. $('.ibox a[listaction]').each(function () {
  363. var listaction = $(this).attr('listaction');
  364. if (permission.indexOf(listaction.toLowerCase() + ',') < 0) {
  365. $(this).attr('href', 'javascript:void(0)');
  366. }
  367. });
  368. }
  369. }