common.js 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202
  1. /*+++++通用函数脚本++++++++*/
  2. var colorBackground = "#243f6d"; // 3255ee
  3. var colorBackground01 = "#243f6dDD"; // 3255ee
  4. var colorTitle = "#FFFFFF";
  5. var colorLine = "#00323af1";
  6. var eChartsResetTime = 50000; //统计图表重制时间周期
  7. /* +++++++++++屏幕适配++++++++++ */
  8. var PageSize = {
  9. smartSize: 600,
  10. middleSize: 1400,
  11. }
  12. /**
  13. * APP 获取GPS位置
  14. * @param {Object} callback 成功获取后回调
  15. */
  16. function plusGetLocation(callback) {
  17. mui.plusReady(function() {
  18. //获取位置信息
  19. plus.geolocation.getCurrentPosition(function(position) {
  20. var lng = position.coords.longitude;
  21. var lat = position.coords.latitude;
  22. // callback(lat, lng);
  23. callback(35.159, 118.203)
  24. }, function(e) {
  25. mui.alert(e.message);
  26. }, {
  27. provider: 'system',
  28. coordsType: 'wgs84',
  29. geocode: false,
  30. enableHighAccuracy: true, //这个布尔值用来表明应用是否使用其最高精度来表示结果。如果值为 true ,同时设备能够提供一个更精确的位置,那么设备就会使用这个位置
  31. maximumAge: 0, //它表明可以返回多长时间(即最长年龄,单位毫秒)内的可获取的缓存位置。如果设置为 0, 说明设备不能使用一个缓存位置
  32. });
  33. });
  34. }
  35. /* 方向监听标识Id */
  36. let watchOrientationId = undefined;
  37. /**
  38. * 开启方向变化监听
  39. * @param {Function} callChange 变化回调callChange(角度)
  40. */
  41. function plusOrientationListenerOn(callChange) {
  42. mui.plusReady(function() {
  43. watchOrientationId = plus.orientation.watchOrientation(function(o) {
  44. // console.log("精度指标 = " + o.headingAccuracy);
  45. if (callChange) callChange(o.trueHeading);
  46. }, function(err) {
  47. console.log("方向错误 = " + e.message);
  48. }, {
  49. frequency: 100,
  50. });
  51. })
  52. }
  53. /**
  54. * 关闭方向监听
  55. * @param {Function} callCompletion 完成回到callCompletion()
  56. */
  57. function plusOrientationListenerOff(callCompletion) {
  58. if (watchOrientationId) {
  59. plus.orientation.clearWatch(watchOrientationId);
  60. watchOrientationId = undefined;
  61. if (callCompletion) callCompletion();
  62. }
  63. }
  64. /* GPS位置监听 */
  65. let watchGpsId = undefined;
  66. /**
  67. * 开启GPS位置变化监听
  68. * @param {Function} callChange GPS位置变化回调callChange(纬度,经度);
  69. */
  70. function plusGPSListenerOn(callChange) {
  71. mui.plusReady(function() {
  72. watchGpsId = plus.geolocation.watchPosition(function(p) {
  73. if (callChange) callChange(p.coords.latitude, p.coords.longitude);
  74. }, function(err) {
  75. console.log('定位错误 = ' + err.message);
  76. }, {
  77. provider: 'system',
  78. coordsType: 'wgs84',
  79. geocode: false,
  80. enableHighAccuracy: true, //这个布尔值用来表明应用是否使用其最高精度来表示结果。如果值为 true ,同时设备能够提供一个更精确的位置,那么设备就会使用这个位置
  81. maximumAge: 0, //它表明可以返回多长时间(即最长年龄,单位毫秒)内的可获取的缓存位置。如果设置为 0, 说明设备不能使用一个缓存位置
  82. });
  83. })
  84. }
  85. /**
  86. * 关闭GPS位置监听
  87. * @param {Function} callCompletion 完成回到callCompletion()
  88. */
  89. function plusGPSListenerOff(callCompletion) {
  90. if (watchGpsId) {
  91. plus.geolocation.clearWatch(watchGpsId);
  92. watchGpsId = undefined;
  93. if (callCompletion) callCompletion();
  94. }
  95. }
  96. /**
  97. * 加载顶部导航栏
  98. * @param {Object} title 导航栏标题
  99. * @param {Object} showBackButton 导航栏是否具备返回按钮
  100. */
  101. function plusSetNavbar(title, showBackButton) {
  102. var ws = plus.webview.currentWebview();
  103. //设置导航条
  104. ws.setStyle({
  105. "titleNView": {
  106. backgroundColor: colorBackground,
  107. titleText: title,
  108. titleColor: colorTitle,
  109. autoBackButton: showBackButton,
  110. splitLine: {
  111. color: colorLine
  112. }
  113. }
  114. });
  115. }
  116. /**
  117. * 加载顶部导航栏
  118. * @param {Object} title 导航栏标题
  119. * @param {Object} showBackButton 导航栏是否具备返回按钮
  120. */
  121. function plusSetNavbarRef(title, showBackButton, callback) {
  122. var ws = plus.webview.currentWebview();
  123. //设置导航条
  124. ws.setStyle({
  125. "titleNView": {
  126. backgroundColor: colorBackground,
  127. titleText: title,
  128. titleColor: colorTitle,
  129. autoBackButton: showBackButton,
  130. splitLine: {
  131. color: colorLine
  132. },
  133. buttons: [{
  134. 'float': 'right',
  135. fontSrc: '../fonts/iconfont.ttf',
  136. text: '\ueb73',
  137. onclick: callback,
  138. }]
  139. }
  140. });
  141. }
  142. /**
  143. * UIWebView加载完成 大多数方法建议放到此处运行
  144. * @param {Object} callback
  145. */
  146. function UIView_DidLoad(callback) {
  147. mui.plusReady(function() {
  148. // var self = plus.webview.currentWebview();
  149. // //添加显示监听
  150. // self.addEventListener('show', function() {
  151. callback();
  152. // });
  153. });
  154. }
  155. /**
  156. * 输出控制台消息
  157. * @param {Object} msg 消息内容
  158. */
  159. function printToConsole(msg) {
  160. console.log(msg);
  161. }
  162. /**
  163. * 日期格式化
  164. * @param {Object} fmt 格式化字符串
  165. */
  166. Date.prototype.Format = function(fmt) {
  167. var o = {
  168. "M+": this.getMonth() + 1, //月份
  169. "d+": this.getDate(), //日
  170. "H+": this.getHours(), //小时
  171. "m+": this.getMinutes(), //分
  172. "s+": this.getSeconds(), //秒
  173. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  174. "S": this.getMilliseconds() //毫秒
  175. };
  176. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  177. for (var k in o)
  178. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
  179. "00" + o[
  180. k]).substr(("" + o[k]).length)));
  181. return fmt;
  182. }
  183. /**
  184. * @param {JSON} options 图片路径
  185. * path{string}:图片路径
  186. * lable{string}:文字描述
  187. * click{function}:回调函数
  188. */
  189. function createBigMenu(options) {
  190. var li = document.createElement("li");
  191. li.className = 'mui-table-view-cell mui-media mui-col-xs-3 mui-col-sm-3';
  192. var liHtml = "";
  193. liHtml += "<div class='cr-menu-panel'>";
  194. liHtml += "<img src='" + options.path + "'>";
  195. liHtml += "<span>" + options.label + "</span>";
  196. liHtml += "</div>";
  197. li.innerHTML = liHtml;
  198. if (options.click != undefined) li.onclick = function() {
  199. options.click();
  200. };
  201. return li;
  202. }
  203. /**
  204. * @param {JSON} options 图片路径
  205. * path{string}:图片路径
  206. * lable{string}:文字描述
  207. * click{function}:回调函数
  208. */
  209. function createSmartMenu(options) {
  210. var li = document.createElement("li");
  211. li.className = 'mui-table-view-cell mui-media mui-col-xs-3 mui-col-sm-3';
  212. var liHtml = "";
  213. liHtml += "<div class='cr-menu-smart-panel'>";
  214. liHtml += "<img src='" + options.path + "'>";
  215. liHtml += "<span>" + options.label + "</span>";
  216. liHtml += "</div>";
  217. li.innerHTML = liHtml;
  218. if (options.click != undefined) {
  219. li.onclick = function() {
  220. options.click('options');
  221. };
  222. }
  223. return li;
  224. }
  225. /**
  226. * 创建菜单Html
  227. * @param {JSON} options 图片路径
  228. * path{string}:图片路径
  229. * lable{string}:文字描述
  230. * click{function}:回调函数
  231. */
  232. function createSmartMenuHtml(options) {
  233. var menuHtml = "<li class='mui-table-view-cell mui-media mui-col-xs-3 mui-col-sm-3'";
  234. if (options.idx != undefined) {
  235. menuHtml += " idx='" + options.idx + "'";
  236. }
  237. menuHtml += " onclick='" + options.click + "()'>";
  238. menuHtml += "<div class='cr-menu-smart-panel'>";
  239. menuHtml += "<img src='" + options.path + "'>";
  240. menuHtml += "<span>" + options.label + "</span>";
  241. menuHtml += "</div>";
  242. menuHtml += "</li>";
  243. return menuHtml;
  244. }
  245. /**
  246. * 创建并打开页面
  247. * @param {JSON} options 配置项
  248. * htmlPath{string}:页面路径
  249. * top{number/undefined 可选项}:窗口距离顶端高度
  250. * bottom{number/undefined 可选项}:窗口距离底部高度
  251. * backgroundColor{color 可选项}:导航栏背景色
  252. * lineColor{color 可选项}:导航栏底框颜色
  253. * title{string}:导航栏标题
  254. * statusbar:{boolean 可选项}:状态栏是否透明
  255. * extras{JSON 可选项}:传递参数
  256. * showSlide{string 可选项}:动画方式 slide-in-bottom
  257. * isShow{boolean}:是否默认显示
  258. */
  259. function createAndOpenPage(options) {
  260. var viewId = options.id == undefined ? options.htmlPath : options.id;
  261. UIView_DidLoad(function() {
  262. var pageConfig = {
  263. "titleNView": {
  264. backgroundColor: options.backgroundColor == undefined ? colorBackground : options
  265. .backgroundColor,
  266. titleColor: options.titleColor == undefined ? colorTitle : options.titleColor,
  267. autoBackButton: options.autoback == undefined ? false : options.autoback,
  268. titleText: options.title,
  269. splitLine: {
  270. color: options.lineColor == undefined ? colorLine : options.lineColor,
  271. }
  272. },
  273. top: options.top == undefined ? '0' : options.top,
  274. bottom: options.bottom == undefined ? '0' : options.bottom,
  275. contentAdjust: false
  276. }
  277. /* 判断是否增加了按钮配置 */
  278. if (options.buttons != undefined) {
  279. pageConfig.titleNView.buttons = options.buttons;
  280. }
  281. /* 配置sttusbar 主要是为了配置任务栏的背景色 */
  282. if (options.statusbar != undefined && !options.statusbar) {
  283. pageConfig.statusbar = {
  284. background: colorBackground,
  285. }
  286. }
  287. /* 判断是否设置了高度 */
  288. if (options.height != undefined) {
  289. pageConfig.height = options.height;
  290. }
  291. /* 根据是否传参决定采用何种方式加载 */
  292. var subPage = undefined;
  293. if (options.extras != undefined) {
  294. subPage = plus.webview.create(options.htmlPath, viewId, pageConfig, options.extras);
  295. } else {
  296. subPage = plus.webview.create(options.htmlPath, viewId, pageConfig);
  297. }
  298. // subPage.addEventListener('show', function() {
  299. // subPage.evalJS('pageFirstShow()');
  300. // }, false);
  301. subPage.onloaded = function(e) {
  302. if (options.onloaded != undefined) options.onloaded(subPage);
  303. }
  304. /* 是否显示 */
  305. if (options.isShow == undefined || options.isShow == true) {
  306. /* 显示动画 */
  307. if (options.showSlide == undefined) {
  308. subPage.show('slide-in-right', 300);
  309. } else {
  310. subPage.show(options.showSlide, 300);
  311. }
  312. } else {
  313. subPage.hide();
  314. }
  315. if (options.success != undefined) options.success(subPage);
  316. });
  317. }
  318. /**
  319. * 获取值 对0值进行特殊处理
  320. * @param {string} strValue 字符串或其他
  321. */
  322. function getEChartsValue(strValue) {
  323. var value = parseFloat(strValue)
  324. if (value == 0) {
  325. return 0.1;
  326. } else {
  327. return value;
  328. }
  329. }
  330. /**
  331. * 验证Ip地址
  332. * @param {string} ip 输入的ip地址
  333. */
  334. function isValidIP(ip) {
  335. var reg =
  336. /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  337. return reg.test(ip);
  338. }
  339. /**
  340. * 验证Com端口号
  341. * @param {string} com 输入的com端口号
  342. */
  343. function isValidCom(com) {
  344. var reg =
  345. /^(\d{4,4})$/
  346. return reg.test(com);
  347. }
  348. /**
  349. * 验证电话号码
  350. * @param {string} phoneNumber 输入的电话号码
  351. */
  352. function isValidPhone(phoneNumber) {
  353. var reg =
  354. /^(\d{11,11})$/
  355. return reg.test(phoneNumber);
  356. }
  357. /**
  358. * 获取配置信息
  359. * @param {function} callback 回调函数
  360. */
  361. function getConfigInfo(callback) {
  362. mui.plusReady(function() {
  363. plus.runtime.getProperty(plus.runtime.appid, function(info) {
  364. plus.io.resolveLocalFileSystemURL('_www/manifest.json', function(entry) {
  365. entry.file(function(file) {
  366. var fileReader = new plus.io.FileReader();
  367. fileReader.readAsText(file, 'utf-8');
  368. fileReader.onloadend = function(evt) {
  369. var data = JSON.parse(evt.target.result);
  370. if (callback != undefined) {
  371. callback({
  372. appid: info.appid,
  373. version: info.version,
  374. versionCode: info.versionCode,
  375. name: info.name,
  376. devName: data.developer.name,
  377. devUrl: data.developer.url,
  378. devEmail: data.developer.email,
  379. devPhone: data.developer.phone,
  380. devTel: data.developer.tel,
  381. devCopyright: data.developer.copyright,
  382. })
  383. }
  384. }
  385. }, function(err) {
  386. printToConsole("读取文件错误:" + JSON.stringify(err));
  387. });
  388. }, function(err) {
  389. printToConsole("获取文件错误:" + JSON.stringify(err));
  390. });
  391. });
  392. });
  393. }
  394. /**
  395. * 生成随机颜色
  396. * @param {Array} red [0~255,0~255]
  397. * @param {Array} green [0~255,0~255]
  398. * @param {Array} blue [0~255,0~255]
  399. * return rgb(r,g,b)
  400. */
  401. function randomRgbColor(red, green, blue) { //随机生成RGB颜色
  402. var rStart = red[1] - red[0];
  403. var gStart = green[1] - green[0];
  404. var bStart = blue[1] - blue[0];
  405. var r = Math.floor(Math.random() * rStart + red[0]); //随机生成256以内r值
  406. var g = Math.floor(Math.random() * gStart + green[0]); //随机生成256以内g值
  407. var b = Math.floor(Math.random() * bStart + blue[0]); //随机生成256以内b值
  408. var color = 'rgb(' + r + ',' + g + ',' + b + ')';
  409. return color; //返回rgb(r,g,b)格式颜色
  410. }
  411. /**
  412. * 显示顶部日期+时间
  413. */
  414. var strDate = '';
  415. /**
  416. * 内部函数
  417. * 显示当前日期和时间
  418. */
  419. function _showTopTime() {
  420. /* 修改展示方式 */
  421. var strDay = new Date().Format('dd');
  422. var strYearAndMonth = new Date().Format('yyyy.MM')
  423. var strYear = new Date().Format('yyyy')
  424. var strMonth = new Date().Format('MM')
  425. var strDay = new Date().Format('dd')
  426. var china = calendar.solar2lunar(strYear, strMonth, strDay);
  427. var chinaDay = " 农历" + china.Animal + "年" + china.IMonthCn + china.IDayCn + " " + china.ncWeek;
  428. var time = new Date().Format('HH:mm:ss');
  429. var timeHtml = "";
  430. timeHtml += "<span>" + strDay + "</span>";
  431. timeHtml += "<span>" + strYearAndMonth + "</span>";
  432. timeHtml += "<span>" + chinaDay + "</span>";
  433. timeHtml += "<span>" + time + "</span>";
  434. $('.topTime').html(timeHtml);
  435. }
  436. /**
  437. * 开始显示日期
  438. */
  439. function beginShowTime() {
  440. _showTopTime();
  441. window.setInterval(_showTopTime, 1000);
  442. }
  443. /**
  444. * 创建轮播项
  445. * @param {string} imgPath 图片路径
  446. * @param {boolean} isFistOrLast 是否是第一项或最后一项
  447. */
  448. function _createSliderItemHtml(imgPath, isFistOrLast) {
  449. var divHtml = "";
  450. if (isFistOrLast) {
  451. divHtml += "<div class='mui-slider-item mui-slider-item-duplicate'>";
  452. } else {
  453. divHtml += "<div class='mui-slider-item'>";
  454. }
  455. divHtml += "<a href='#'>";
  456. divHtml += "<img src='" + imgPath + "'/>";
  457. divHtml += "</a>";
  458. divHtml += "</div>";
  459. return divHtml;
  460. }
  461. /**
  462. * 根据图片路径数组初始化轮播内容
  463. * @param {string} sliderId 轮播容器Id
  464. * @param {Array} sliderImages 轮播图片路径数组
  465. */
  466. function _initSliderContent(sliderId, sliderImages) {
  467. var sliderHtml = ""; //轮播内容
  468. var indicatorHtml = ""; //轮播指示器内容
  469. /* 额外增加的一个节点(循环轮播:第一个节点是最后一张轮播) */
  470. sliderHtml += _createSliderItemHtml(sliderImages[sliderImages.length - 1], true);
  471. for (var i = 0; i < sliderImages.length; i++) {
  472. sliderHtml += _createSliderItemHtml(sliderImages[i], false);
  473. if (i === 0) indicatorHtml += "<div class='mui-indicator mui-active'></div>";
  474. else indicatorHtml += "<div class='mui-indicator'></div>";
  475. }
  476. /* 额外增加的一个节点(循环轮播:最后一个节点是第一张轮播) */
  477. sliderHtml += _createSliderItemHtml(sliderImages[0], false);
  478. /* 组合展示 */
  479. var strHtml = "<div class='mui-slider-group mui-slider-loop'>";
  480. strHtml += sliderHtml;
  481. strHtml += "</div>";
  482. strHtml += "<div class='mui-slider-indicator'>";
  483. strHtml += indicatorHtml;
  484. strHtml += "</div>";
  485. $("#" + sliderId).html(strHtml);
  486. }
  487. /**
  488. * 启动图片轮播
  489. * @param {string} sliderId 轮播容器Id
  490. * @param {Array} imagePaths 图片路径数组
  491. * @param {int} sliderTimespan 轮播时间间隔 0 代表不轮播
  492. */
  493. function beginSliderContent(sliderId, imagePaths, sliderTimespan) {
  494. _initSliderContent(sliderId, imagePaths);
  495. /* 自动轮播 */
  496. var slider = mui('#' + sliderId);
  497. if (sliderTimespan > 0) {
  498. slider.slider({
  499. interval: sliderTimespan,
  500. });
  501. }
  502. }
  503. /**
  504. * 设置样式中变量的值
  505. * @param {string} variable 变量
  506. * @param {string} value 值
  507. */
  508. function setPropertyFromStyle(variable, value) {
  509. document.documentElement.style.setProperty(variable, value);
  510. }
  511. /* 给选择类型按钮添加监听 */
  512. function addListenerToSelectButton(btnDomId, config) {
  513. var btn = $("#" + btnDomId)[0];
  514. btn.addEventListener('tap', function() {
  515. var _self = this;
  516. if (_self.picker) {
  517. _self.picker.show(function(selectItems) {
  518. $(_self).html(selectItems[0].text);
  519. $(_self).attr('data-value', selectItems[0].text);
  520. $(_self).attr('data-code', selectItems[0].value);
  521. });
  522. } else {
  523. _self.picker = new mui.PopPicker({
  524. buttons: ['清除', '使用']
  525. });
  526. _self.picker.setData(config);
  527. _self.picker.cancel.addEventListener('tap', function() {
  528. $(_self).html($(_self).attr('value'));
  529. $(_self).attr('data-value', "");
  530. $(_self).attr('data-code', "");
  531. })
  532. _self.picker.show(function(selectItems) {
  533. $(_self).html(selectItems[0].text);
  534. $(_self).attr('data-value', selectItems[0].text);
  535. $(_self).attr('data-code', selectItems[0].value);
  536. });
  537. }
  538. })
  539. }
  540. /**
  541. *
  542. * @param {string} btnDomId 需要绑定的选择器Id
  543. * @param {string} tabName 选择器关联的表名
  544. * @param {string} fldName 选择器关联的字段名
  545. * @param {function} callback 选择回调函数
  546. */
  547. function bindListenerToSelectButton(btnDomId, tabName, fldName, callback) {
  548. var btn = $("#" + btnDomId)[0];
  549. btn.addEventListener('tap', function() {
  550. var _self = this;
  551. /* 首先进行查询 */
  552. querySimpleFieldInfo(tabName, fldName, function(config) {
  553. if (_self.picker) {
  554. _self.picker.setData(config);
  555. _self.picker.show(function(selectItems) {
  556. $(_self).html(selectItems[0].text);
  557. $(_self).attr('data-value', selectItems[0].text);
  558. $(_self).attr('data-code', selectItems[0].value);
  559. if (callback) callback(selectItems[0].text, selectItems[0].value);
  560. });
  561. } else {
  562. _self.picker = new mui.PopPicker({
  563. buttons: ['清除', '使用']
  564. });
  565. _self.picker.setData(config);
  566. _self.picker.cancel.addEventListener('tap', function() {
  567. $(_self).html($(_self).attr('value'));
  568. $(_self).attr('data-value', "");
  569. $(_self).attr('data-code', "");
  570. })
  571. _self.picker.show(function(selectItems) {
  572. $(_self).html(selectItems[0].text);
  573. $(_self).attr('data-value', selectItems[0].text);
  574. $(_self).attr('data-code', selectItems[0].value);
  575. if (callback) callback(selectItems[0].text, selectItems[0].value);
  576. });
  577. }
  578. });
  579. })
  580. }
  581. /**
  582. * 绑定日期控件
  583. * @param {string} btnDomId 需要绑定的选择器Id
  584. * @param {function} callback 选择回调函数
  585. */
  586. function bindListenerToDateButton(btnDomId, callback) {
  587. var btn = $("#" + btnDomId)[0];
  588. btn.addEventListener('tap', function() {
  589. var _self = this;
  590. if (_self.picker) {
  591. _self.picker.show(function(selectItems) {
  592. $(_self).html(selectItems.text);
  593. $(_self).attr('data-value', selectItems.text);
  594. $(_self).attr('data-code', selectItems.value);
  595. _self.picker.dispose();
  596. _self.picker = null;
  597. if (callback) callback(selectItems.text, selectItems.value);
  598. });
  599. } else {
  600. /* 获取存储的值 */
  601. let value = $(_self).attr("data-value") || '';
  602. // console.log("存储 = " + value);
  603. _self.picker = new mui.DtPicker({
  604. buttons: ['清除', '使用'],
  605. type: 'date',
  606. beginDate: new Date('1990', '1', '1'),
  607. endDate: new Date('2050', '12', '31'),
  608. value: value,
  609. });
  610. _self.picker.ui.cancel.addEventListener('tap', function() {
  611. $(_self).html($(_self).attr('value'));
  612. $(_self).attr('data-value', "");
  613. $(_self).attr('data-code', "");
  614. });
  615. _self.picker.show(function(selectItems) {
  616. $(_self).html(selectItems.text);
  617. $(_self).attr('data-value', selectItems.text);
  618. $(_self).attr('data-code', selectItems.value);
  619. _self.picker.dispose();
  620. _self.picker = null;
  621. if (callback) callback(selectItems.text, selectItems.value);
  622. });
  623. }
  624. })
  625. }
  626. /**
  627. * 查询单字段信息
  628. * @param {string} tabName 表名称
  629. * @param {string} fldName 字段名称
  630. * @param {function} callSuccess 成功回调函数
  631. */
  632. function querySimpleFieldInfo(tabName, fldName, callSuccess) {
  633. var iData = {
  634. tabName: tabName,
  635. fldName: fldName,
  636. }
  637. /* 查询结果 */
  638. var result = [];
  639. /* 开始联网查询 */
  640. sendAjax({
  641. waitMessate: '同步数据...',
  642. url: 'appQuerySimpleFiled',
  643. data: iData,
  644. success: function(resData) {
  645. for (var i in resData) {
  646. result.push({
  647. value: resData[i].selCode,
  648. text: resData[i].selName,
  649. })
  650. }
  651. if (callSuccess != undefined) callSuccess(result);
  652. },
  653. error: function(err) {
  654. muiAlertError(err);
  655. }
  656. })
  657. }
  658. /**
  659. * 清除选择器
  660. * @param {string} btnDomId 选择控件Id
  661. */
  662. function clearSelectButton(btnDomId) {
  663. console.log("调用清除!");
  664. var _self = document.getElementById(btnDomId);
  665. if (_self.picker) {
  666. _self.picker.setData([]);
  667. }
  668. $(_self).html($(_self).attr('value'));
  669. $(_self).attr('data-value', "");
  670. $(_self).attr('data-code', "");
  671. }
  672. /**
  673. * 联网获取并设置单项选择器
  674. * @param {JSON} options
  675. * tabName{string}:表名称
  676. * fldName{string}:字段名称
  677. * btnDomId{string}:挂接容器
  678. */
  679. function setSimpleConfig(options) {
  680. var iData = {
  681. tabName: options.tabName,
  682. fldName: options.fldName,
  683. }
  684. var btn = $("#" + options.btnDomId)[0];
  685. var dataConfig = [];
  686. sendAjax({
  687. waitMessate: '同步数据...',
  688. url: 'appQuerySimpleFiled',
  689. data: iData,
  690. success: function(resData) {
  691. for (var i in resData) {
  692. dataConfig.push({
  693. value: resData[i].selCode,
  694. text: resData[i].selName,
  695. })
  696. }
  697. btn.addEventListener('tap', function() {
  698. var _self = this;
  699. if (_self.picker) {
  700. _self.picker.show(function(selectItems) {
  701. $(_self).html(selectItems[0].text);
  702. $(_self).attr('data-value', selectItems[0].text);
  703. });
  704. } else {
  705. _self.picker = new mui.PopPicker({
  706. buttons: ['清除', '使用']
  707. });
  708. _self.picker.setData(dataConfig);
  709. _self.picker.cancel.addEventListener('tap', function() {
  710. $(_self).html($(_self).attr('value'));
  711. $(_self).attr('data-value', "");
  712. })
  713. _self.picker.show(function(selectItems) {
  714. $(_self).html(selectItems[0].text);
  715. $(_self).attr('data-value', selectItems[0].text);
  716. });
  717. }
  718. })
  719. if (options.success != undefined) options.success();
  720. },
  721. error: function(err) {
  722. if (options.error != undefined) options.error(err);
  723. }
  724. })
  725. }
  726. /**
  727. * 定位图斑
  728. * @param {string} longitude 经度
  729. * @param {string} latitude 纬度
  730. * @param {string} title 标题
  731. */
  732. function toMapLocation(longitude, latitude, title) {
  733. var lMapId = 'FeatureLocationByMap';
  734. /* 启动定位之前判断是否存在 */
  735. mui.plusReady(function() {
  736. var mapPageView = plus.webview.getWebviewById(lMapId);
  737. if (mapPageView != null) {
  738. plus.webview.show(mapPageView, 'slide-in-right', 300, function() {
  739. mapPageView.evalJS("jsLocation('" + longitude + "','" + latitude +
  740. "','" + title + "')")
  741. });
  742. } else {
  743. muiAlert("地图页面尚未加载,请稍后重试!");
  744. }
  745. });
  746. }
  747. /**
  748. * 通过表名和要素Id定位图斑要素
  749. * @param {string} tabName 经度
  750. * @param {string} feaId 纬度
  751. * @param {string} title 标题
  752. */
  753. function toMapLocation_tabName_feaId(tabName, feaId, title) {
  754. var lMapId = 'FeatureLocationByMap';
  755. /* 启动定位之前判断是否存在 */
  756. mui.plusReady(function() {
  757. var mapPageView = plus.webview.getWebviewById(lMapId);
  758. if (mapPageView != null) {
  759. plus.webview.show(mapPageView, 'slide-in-right', 300, function() {
  760. mapPageView.evalJS("jsLocation_tabName_feaId('" + tabName + "','" + feaId +
  761. "','" + title + "')");
  762. });
  763. } else {
  764. muiAlert("地图定位页面异常,请稍后重试!");
  765. }
  766. });
  767. }
  768. /**
  769. * 启动App
  770. * @param {string} appId App的Id
  771. * @param {string} appName App的名称
  772. */
  773. function beginApp(appId, appName) {
  774. mui.plusReady(function() {
  775. if (plus.runtime.isApplicationExist({
  776. pname: appId
  777. })) {
  778. plus.runtime.launchApplication({
  779. pname: appId,
  780. }, function(e) {
  781. muiAlertError("启动失败:" + e.message);
  782. });
  783. } else {
  784. muiAlert('您尚未安装' + appName + ',请安装后重试!', "警告")
  785. }
  786. });
  787. }
  788. /**
  789. * 获取页面的宽、高
  790. */
  791. function getPageSize() {
  792. return {
  793. width: document.body.clientWidth,
  794. height: document.body.clientHeight
  795. }
  796. }
  797. /**
  798. * 显示完整内容
  799. * @param {string} content
  800. */
  801. function showContent(content) {
  802. muiAlert(content, "提示");
  803. }
  804. /**
  805. * 文本循环移动动画 适用于容器内展示span且span宽度超过div宽度
  806. * @param {string} domId 容器Id
  807. * @param {int} time 动画时间,单位ms
  808. */
  809. function textMoveAnimateById(domId, time) {
  810. var obj = $("#" + domId);
  811. var widthSpan = $("#" + domId + ">span").width();
  812. var widthMove = widthSpan - obj.width();
  813. obj.scrollLeft(0);
  814. obj.animate({
  815. scrollLeft: widthMove,
  816. }, time, 'linear', function() {
  817. textMoveAnimateById(domId, time);
  818. });
  819. }
  820. /**
  821. * 文本循环移动动画 适用于容器内展示span且span宽度超过div宽度
  822. * @param {string} selector 容器选择器
  823. * @param {int} time 动画时间,单位ms
  824. */
  825. function textMoveAnimateBySelector(selector, time) {
  826. var obj = $("." + selector);
  827. var widthSpan = $('.' + selector + ">span").width();
  828. console.log(widthSpan);
  829. var widthMove = widthSpan - obj.width();
  830. obj.scrollLeft(0);
  831. obj.animate({
  832. scrollLeft: widthMove,
  833. }, time, 'linear', function() {
  834. textMoveAnimateBySelector(selector, time);
  835. });
  836. }
  837. /**
  838. * 获取通过URL传递的参数
  839. * main.html?key=124
  840. * @param {string} name 关键字
  841. * @return {string} 未获取到返回null 否则返回值
  842. */
  843. function GetQueryString(name) {
  844. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  845. var r = window.location.search.substr(1).match(reg);
  846. if (r != null) return unescape(r[2]);
  847. return null;
  848. }
  849. /**
  850. * 绑定搜索框 通过绑定监听 获取查询内容
  851. * @param {string} controlID 搜索框ID
  852. * @param {function} callback 返回监听
  853. */
  854. function bindSearchControlEvent(controlID, callback) {
  855. var self = this;
  856. /**
  857. * 搜索框追加事件
  858. */
  859. document.getElementById(controlID).addEventListener('keypress', function(e) {
  860. //判断点击的是否是 搜索 按钮
  861. if (e.keyCode == 13) {
  862. var value = this.value;
  863. document.activeElement.blur();
  864. if (callback != undefined) callback(value);
  865. }
  866. });
  867. }
  868. /**
  869. * 获取dom的属性值
  870. * @param {Object} domId
  871. * @param {Object} attrName
  872. */
  873. function getAttributeValue(domId, attrName) {
  874. var value = $("#" + domId).attr(attrName);
  875. if (value == undefined) return "";
  876. else return value;
  877. }
  878. /**
  879. * 打开侧滑菜单
  880. */
  881. function openMainMenu() {
  882. mui('.mui-off-canvas-wrap').offCanvas('show');
  883. }
  884. /**
  885. * 关闭侧滑菜单
  886. */
  887. function closeMainMenu() {
  888. mui('.mui-off-canvas-wrap').offCanvas('close');
  889. }
  890. /**
  891. * 给类添加点击事件
  892. * @param {string} className 类名称
  893. */
  894. function appendClickEventByClassName(className) {
  895. $("." + className).each(function(index, element) {
  896. $("." + className)[index].addEventListener('tap', function() {
  897. muiAlert($(this).text(), '详细内容');
  898. })
  899. })
  900. }
  901. /**
  902. * 显示内容
  903. * @param {Object} obj 显示内容的容器
  904. */
  905. function showDetails(obj) {
  906. muiAlert($(obj).text(), '详细内容');
  907. }
  908. /**
  909. * 重置图表的尺寸
  910. */
  911. function echartsSizeInit() {
  912. $(".jt-count-echarts-panel .jt-content").each(function(index, element) {
  913. var echartsDom = $(".jt-count-echarts-panel .jt-content")[index];
  914. var width = $(echartsDom).width();
  915. var height = $(echartsDom).height();
  916. if (height < 10) {
  917. $(echartsDom).height(width * 3 / 4);
  918. }
  919. });
  920. }
  921. /* +++++++++++++++++地块公用+++++++++++++++++++++ */
  922. /**
  923. * 查询地块数据
  924. * @param {string} title 标题
  925. * @param {string} tabName 数据表名称
  926. * @param {string} fldName 字段名称
  927. * @param {string} fldValue 字段值
  928. * @param {string} showFldName 展示字段名称
  929. */
  930. function queryFeatures(title, tabName, fldName, fldValue, showFldName) {
  931. var iData = {
  932. tabName: tabName,
  933. fldName: fldName,
  934. fldValue: fldValue,
  935. queryType: 'equal',
  936. showFldName: showFldName === undefined ? '' : showFldName,
  937. start: '1',
  938. count: '100',
  939. }
  940. sendAjax({
  941. url: 'appQueryFeatureData',
  942. data: iData,
  943. waitMessage: '查询中...',
  944. success: function(resData) {
  945. var data = resData[0];
  946. if (data.dataCount == 0) {
  947. muiAlert('未查询到任何数据!', '警告');
  948. } else {
  949. showFeaturesResult(title, data);
  950. }
  951. },
  952. error: function(err) {
  953. muiAlertError(err);
  954. }
  955. })
  956. }
  957. /**
  958. * 地块数据展示
  959. * @param {string} title 标题
  960. * @param {JSON} jsonData 数据集
  961. */
  962. function showFeaturesResult(title, jsonData) {
  963. /* 判断容器是否存在 */
  964. var rootPanel = document.getElementById('queryResultPopover');
  965. if (rootPanel) {
  966. $(rootPanel).html('');
  967. } else {
  968. rootPanel = document.createElement('div');
  969. rootPanel.id = 'queryResultPopover';
  970. rootPanel.className = 'mui-popover mui-popover-action mui-popover-bottom jt-query-result-popover';
  971. document.body.append(rootPanel);
  972. }
  973. /* 创建标题头 */
  974. var header = document.createElement('header');
  975. header.className = 'mui-bar';
  976. header.innerHTML = "<div class='jt-popover-title'>" + title + '</div>查询结果';
  977. rootPanel.append(header);
  978. /* 创建内容容器 */
  979. var divScroll = document.createElement('div');
  980. divScroll.className = 'mui-scroll-wrapper';
  981. rootPanel.append(divScroll);
  982. /* 创建滚动子容器 */
  983. var divScrollChild = document.createElement('div');
  984. divScrollChild.className = 'mui-scroll';
  985. divScroll.append(divScrollChild);
  986. /* 创建查询结果根容器 */
  987. var divRoot = document.createElement('div');
  988. divRoot.className = 'mui-card';
  989. divScrollChild.append(divRoot);
  990. /* 加入数据 */
  991. for (var i in jsonData.dataList) {
  992. var item = jsonData.dataList[i];
  993. var divItem = document.createElement('div');
  994. if (i % 2 == 0) {
  995. divItem.className = 'jt-feature-data-row jt-row-even-number';
  996. } else {
  997. divItem.className = 'jt-feature-data-row jt-row-odd-number';
  998. }
  999. divRoot.append(divItem);
  1000. var html = "";
  1001. html += "<span>" + item.feaNumber + "</span>";
  1002. html += "<span>" + item.feaName + "</span>";
  1003. html += "<span>" + item.feaArea + "亩</span>";
  1004. html += "<button type='button' class='mui-btn app-icon app-icon-location'";
  1005. // html += " onclick = \"toMapLocation_tabName_feaId('" + item.tabName + "','" + item.feaId +
  1006. // "','地块定位')\" />";
  1007. html += " onclick = \"CallMapLocation('" + item.tabName + "','" + item.feaId + "')\" />"
  1008. divItem.innerHTML = html;
  1009. }
  1010. /* 显示弹框 */
  1011. mui("#queryResultPopover").popover('show');
  1012. /* 重置滚动容器 该方法是必须的 否则将导致滚动容器滚动失败 */
  1013. mui('.mui-scroll-wrapper').scroll();
  1014. }
  1015. /**
  1016. * 添加水印
  1017. * @param {JSON} settings 配置项
  1018. * settings.watermarl_element{string}:你需要加水印的元素的id,例如#app
  1019. * settings.watermark_txt{string}:水印内容
  1020. */
  1021. function watermark(settings) {
  1022. //默认设置
  1023. var defaultSettings = {
  1024. watermarl_element: "body",
  1025. watermark_txt: "",
  1026. watermark_x: 20, //水印起始位置x轴坐标
  1027. watermark_y: 20, //水印起始位置Y轴坐标
  1028. watermark_rows: 2000, //水印行数
  1029. watermark_cols: 2000, //水印列数
  1030. watermark_x_space: 70, //水印x轴间隔
  1031. watermark_y_space: 30, //水印y轴间隔
  1032. watermark_color: '#aaa', //水印字体颜色
  1033. watermark_alpha: 0.3, //水印透明度
  1034. watermark_fontsize: '14px', //水印字体大小
  1035. watermark_font: '微软雅黑', //水印字体
  1036. watermark_width: 280, //水印宽度
  1037. watermark_height: 80, //水印长度
  1038. watermark_angle: 25 //水印倾斜度数
  1039. };
  1040. //采用配置项替换默认值,作用类似jquery.extend
  1041. if (arguments.length === 1 && typeof arguments[0] === "object") {
  1042. var src = arguments[0] || {};
  1043. for (let key in src) {
  1044. if (src[key] && defaultSettings[key] && src[key] === defaultSettings[key])
  1045. continue;
  1046. else if (src[key])
  1047. defaultSettings[key] = src[key];
  1048. }
  1049. }
  1050. var oTemp = document.createDocumentFragment();
  1051. var maskElement = document.getElementById(defaultSettings.watermarl_element) || document.body;
  1052. //获取页面最大宽度
  1053. var page_width = Math.max(maskElement.scrollWidth, maskElement.clientWidth);
  1054. //获取页面最大高度
  1055. var page_height = Math.max(maskElement.scrollHeight, maskElement.clientHeight);
  1056. //水印数量自适应元素区域尺寸
  1057. defaultSettings.watermark_cols = Math.ceil(page_width / (defaultSettings.watermark_x_space + defaultSettings
  1058. .watermark_width));
  1059. defaultSettings.watermark_rows = Math.ceil(page_height / (defaultSettings.watermark_y_space + defaultSettings
  1060. .watermark_height));
  1061. var x;
  1062. var y;
  1063. for (var i = 0; i < defaultSettings.watermark_rows; i++) {
  1064. y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
  1065. for (var j = 0; j < defaultSettings.watermark_cols; j++) {
  1066. x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;
  1067. var mask_div = document.createElement('div');
  1068. mask_div.id = 'mask_div' + i + j;
  1069. mask_div.className = 'mask_div';
  1070. //mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
  1071. mask_div.innerHTML = (defaultSettings.watermark_txt);
  1072. //设置水印div倾斜显示
  1073. mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  1074. mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  1075. mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  1076. mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  1077. mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
  1078. mask_div.style.visibility = "";
  1079. mask_div.style.position = "absolute";
  1080. mask_div.style.left = x + 'px';
  1081. mask_div.style.top = y + 'px';
  1082. mask_div.style.overflow = "hidden";
  1083. mask_div.style.zIndex = "1";
  1084. mask_div.style.pointerEvents = 'none'; //pointer-events:none 让水印不遮挡页面的点击事件
  1085. //mask_div.style.border="solid #eee 1px";          //兼容IE9以下的透明度设置 mask_div.style.filter="alpha(opacity=50)";
  1086. mask_div.style.opacity = defaultSettings.watermark_alpha;
  1087. mask_div.style.fontSize = defaultSettings.watermark_fontsize;
  1088. mask_div.style.fontFamily = defaultSettings.watermark_font;
  1089. mask_div.style.color = defaultSettings.watermark_color;
  1090. mask_div.style.textAlign = "center";
  1091. mask_div.style.width = defaultSettings.watermark_width + 'px';
  1092. mask_div.style.height = defaultSettings.watermark_height + 'px';
  1093. mask_div.style.display = "block";
  1094. oTemp.appendChild(mask_div);
  1095. };
  1096. };
  1097. maskElement.appendChild(oTemp);
  1098. }
  1099. /**
  1100. * 设置选择控件的显示内容和值
  1101. * @param {string} domId 控件Id
  1102. * @param {string} text 显示文本
  1103. * @param {string} value 内部值
  1104. */
  1105. function setSelectControlValue(domId, text, value) {
  1106. let _self = document.getElementById(domId);
  1107. $(_self).html(text);
  1108. $(_self).attr('data-value', text);
  1109. $(_self).attr('data-code', value);
  1110. }
  1111. /**
  1112. * 点击指示器事件
  1113. * @param {Object} objDom 点击的dom对象
  1114. */
  1115. function indicator(objDom) {
  1116. /* 循环所有指示器 */
  1117. $(".jt-indicator").each(function(index, element) {
  1118. element.classList.remove('jt-indicator-active');
  1119. if (!objDom && index === 0) {
  1120. element.classList.add('jt-indicator-active');
  1121. }
  1122. })
  1123. if (objDom) {
  1124. objDom.classList.add('jt-indicator-active');
  1125. }
  1126. }
  1127. /**
  1128. * 通过jQuery设置显示内容
  1129. * @param {String} domId domId
  1130. * @param {String} text 显示内容
  1131. */
  1132. function setTextByDomId(domId, text) {
  1133. $("#" + domId).text(text);
  1134. }
  1135. /**
  1136. * 通过jQuery设置显示内容
  1137. * @param {String} domId domId
  1138. * @param {String} text 显示内容
  1139. */
  1140. function setHtmlByDomId(domId, text) {
  1141. $("#" + domId).html(text);
  1142. }