util.js 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965
  1. util = {
  2. log : function(){
  3. if (window.sys && window.sys.debug) {
  4. Function.apply.call(console.log, console, arguments)
  5. }
  6. },
  7. guid : (function(){
  8. var guid = 0
  9. return function(){
  10. return 'guid-' + guid++;
  11. };
  12. })(),
  13. search : function(name){
  14. var result = location.search.match(new RegExp("[\?\&]" + name+ "=([^\&]+)","i"));
  15. if (result == null || result.length < 1){
  16. return "";
  17. }
  18. return result[1];
  19. },
  20. };
  21. util.msg = function(content, callback, options) {
  22. var opts = {
  23. time : 2000,
  24. type :'success',
  25. skin: 'layer-ext-we7',
  26. shade : 0.3,
  27. };
  28. opts = $.extend({}, opts, options);
  29. var type = 1;
  30. if (opts.type == 'info') {
  31. type = 0;
  32. } else if (opts.type == 'error') {
  33. type = 2;
  34. } else {
  35. type = 1;
  36. }
  37. require(['layer'], function(){
  38. layer.msg(content, {
  39. time : opts.time, //2s后自动关闭
  40. icon : type, // 图标 0 叹号 1 正确 2 错误
  41. shade : opts.shade, // 遮罩
  42. }, function(data) {
  43. if ($.isFunction(callback)) {
  44. callback(data);
  45. };
  46. });
  47. });
  48. };
  49. util.confirm = function(content,success_callback, cancel_callback, options) {
  50. var opts = {
  51. title : '提示',
  52. btn : ['确定', '取消'],
  53. skin: 'layer-ext-we7',
  54. icon : 3,
  55. shade : 0.3,
  56. };
  57. opts = $.extend({}, opts, options);
  58. require(['layer'], function(){
  59. layer.confirm(
  60. content, //内容
  61. //配置
  62. {
  63. title: opts.title,
  64. btn: opts.btn, //按钮 可以不需要
  65. icon: opts.icon //图标
  66. },
  67. function(data) {
  68. if ($.isFunction(success_callback)) {
  69. success_callback(data);
  70. };
  71. util.closeAll();
  72. },
  73. function(data) {
  74. if ($.isFunction(cancel_callback)) {
  75. cancel_callback(data);
  76. };
  77. }
  78. );
  79. });
  80. };
  81. util.confirm_error = function(content) {
  82. util.confirm(content, '', '', {btn:['确定'], icon:2});
  83. };
  84. util.prompt = function(title, callback, options) {
  85. var opts = {
  86. skin: 'layer-ext-we7',
  87. formType: 1, // 0 input="text" 1 input="password" 2 textarea
  88. shade : 0.3,
  89. };
  90. opts = $.extend({}, opts, options);
  91. require(['layer'], function(){
  92. layer.prompt({
  93. title: title,
  94. skin: opts.skin,
  95. formType: opts.formType,
  96. shade : opts.shade
  97. }, function(data) {
  98. if ($.isFunction(callback)) {
  99. callback(data);
  100. };
  101. util.closeAll();
  102. });
  103. });
  104. };
  105. util.loading_layers = [];
  106. util.load = function() {
  107. require(['layer'], function(){
  108. var index = layer.load(2, {
  109. shade: 0.3 //不显示遮罩层
  110. });
  111. util.loading_layers.push(index);
  112. });
  113. };
  114. util.loadClose = function(){
  115. var index;
  116. while(index = util.loading_layers.pop()) {
  117. util.close(index);
  118. };
  119. };
  120. util.close = function(index) {
  121. require(['layer'], function(){
  122. layer.close(index);
  123. });
  124. };
  125. util.closeAll = function() {
  126. require(['layer'], function(){
  127. layer.closeAll();
  128. });
  129. };
  130. util.open = function(content, callback, options) {
  131. require(['layer'], function(){
  132. layer.open({
  133. title: '提示', //标题
  134. content: content, //内容
  135. moveOut: true,
  136. yes: function(data) {
  137. if ($.isFunction(callback)) {
  138. callback(data);
  139. };
  140. }
  141. });
  142. });
  143. };
  144. util.alert = function(content, callback) {
  145. require(['layer'], function(){
  146. layer.alert(content, {
  147. title: '提示',
  148. closeBtn: 1 //关闭按钮是否需要
  149. },
  150. function(data) {
  151. if ($.isFunction(callback)) {
  152. callback(data);
  153. };
  154. });
  155. });
  156. };
  157. util.tomedia = function(src){
  158. if(src.indexOf('http://') == 0 || src.indexOf('https://') == 0 || src.indexOf('./resource') == 0) {
  159. return src;
  160. } else if(src.indexOf('./addons') == 0) {
  161. var url=window.document.location.href;
  162. var pathName = window.document.location.pathname;
  163. var pos = url.indexOf(pathName);
  164. var host = url.substring(0,pos);
  165. if (src.substr(0,1)=='.') {
  166. src=src.substr(1);
  167. }
  168. return host + src;
  169. } else {
  170. return 'http://we7cloud-10016060.file.myqcloud.com/' + src;
  171. }
  172. };
  173. util.clip = function(elm, str) {
  174. if(elm.clip) {
  175. return;
  176. }
  177. require(['jquery.zclip'], function(){
  178. $(elm).zclip({
  179. path: './resource/components/zclip/ZeroClipboard.swf',
  180. copy: str,
  181. afterCopy: function(){
  182. var obj = $('<em> &nbsp; <span class="label label-success"><i class="fa fa-check-circle"></i> 复制成功</span></em>');
  183. var enext = $(elm).next().html();
  184. if (!enext || enext.indexOf('&nbsp; <span class="label label-success"><i class="fa fa-check-circle"></i> 复制成功</span>')<0) {
  185. $(elm).after(obj);
  186. }
  187. setTimeout(function(){
  188. obj.remove();
  189. }, 2000);
  190. }
  191. });
  192. elm.clip = true;
  193. });
  194. };
  195. util.colorpicker = function(elm, callback) {
  196. require(['colorpicker'], function(){
  197. $(elm).spectrum({
  198. className : "colorpicker",
  199. showInput: true,
  200. showInitial: true,
  201. showPalette: true,
  202. maxPaletteSize: 10,
  203. preferredFormat: "hex",
  204. change: function(color) {
  205. if($.isFunction(callback)) {
  206. callback(color);
  207. }
  208. },
  209. palette: [
  210. ["rgb(0, 0, 0)", "rgb(67, 67, 67)", "rgb(102, 102, 102)", "rgb(153, 153, 153)","rgb(183, 183, 183)",
  211. "rgb(204, 204, 204)", "rgb(217, 217, 217)","rgb(239, 239, 239)", "rgb(243, 243, 243)", "rgb(255, 255, 255)"],
  212. ["rgb(152, 0, 0)", "rgb(255, 0, 0)", "rgb(255, 153, 0)", "rgb(255, 255, 0)", "rgb(0, 255, 0)",
  213. "rgb(0, 255, 255)", "rgb(74, 134, 232)", "rgb(0, 0, 255)", "rgb(153, 0, 255)", "rgb(255, 0, 255)"],
  214. ["rgb(230, 184, 175)", "rgb(244, 204, 204)", "rgb(252, 229, 205)", "rgb(255, 242, 204)", "rgb(217, 234, 211)",
  215. "rgb(208, 224, 227)", "rgb(201, 218, 248)", "rgb(207, 226, 243)", "rgb(217, 210, 233)", "rgb(234, 209, 220)",
  216. "rgb(221, 126, 107)", "rgb(234, 153, 153)", "rgb(249, 203, 156)", "rgb(255, 229, 153)", "rgb(182, 215, 168)",
  217. "rgb(162, 196, 201)", "rgb(164, 194, 244)", "rgb(159, 197, 232)", "rgb(180, 167, 214)", "rgb(213, 166, 189)",
  218. "rgb(204, 65, 37)", "rgb(224, 102, 102)", "rgb(246, 178, 107)", "rgb(255, 217, 102)", "rgb(147, 196, 125)",
  219. "rgb(118, 165, 175)", "rgb(109, 158, 235)", "rgb(111, 168, 220)", "rgb(142, 124, 195)", "rgb(194, 123, 160)",
  220. "rgb(166, 28, 0)", "rgb(204, 0, 0)", "rgb(230, 145, 56)", "rgb(241, 194, 50)", "rgb(106, 168, 79)",
  221. "rgb(69, 129, 142)", "rgb(60, 120, 216)", "rgb(61, 133, 198)", "rgb(103, 78, 167)", "rgb(166, 77, 121)",
  222. "rgb(133, 32, 12)", "rgb(153, 0, 0)", "rgb(180, 95, 6)", "rgb(191, 144, 0)", "rgb(56, 118, 29)",
  223. "rgb(19, 79, 92)", "rgb(17, 85, 204)", "rgb(11, 83, 148)", "rgb(53, 28, 117)", "rgb(116, 27, 71)",
  224. "rgb(91, 15, 0)", "rgb(102, 0, 0)", "rgb(120, 63, 4)", "rgb(127, 96, 0)", "rgb(39, 78, 19)",
  225. "rgb(12, 52, 61)", "rgb(28, 69, 135)", "rgb(7, 55, 99)", "rgb(32, 18, 77)", "rgb(76, 17, 48)"]
  226. ]
  227. });
  228. });
  229. }
  230. util.uploadMultiPictures = function(callback, options){
  231. var opts = {
  232. type :'image',
  233. tabs : {
  234. 'upload' : 'active',
  235. 'browser' : '',
  236. 'crawler' : ''
  237. },
  238. path : '',
  239. direct : false,
  240. multi : true,
  241. dest_dir : ''
  242. };
  243. opts = $.extend({}, opts, options);
  244. require(['jquery', 'fileUploader'], function($, fileUploader){
  245. fileUploader.show(function(images){
  246. if(images.length > 0){
  247. if($.isFunction(callback)){
  248. callback(images);
  249. }
  250. }
  251. }, opts);
  252. });
  253. }
  254. util.editor = function(elm, callback){
  255. var id = elm.id;
  256. if(!id) {
  257. id = 'editor-' + Math.random();
  258. elm.id = id;
  259. }
  260. if(!elm.editor) {
  261. require(['editor'], function(){
  262. var editor = tinyMCE.createEditor(id, {
  263. plugins: [
  264. "advlist autolink lists link image multiimage charmap print preview hr anchor pagebreak",
  265. "searchreplace wordcount visualblocks visualchars code fullscreen",
  266. "insertdatetime media nonbreaking save table contextmenu directionality",
  267. "emoticons template paste textcolor"
  268. ],
  269. toolbar1: "undo redo | bold italic | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | preview fullscreen",
  270. toolbar2: "code print | styleselect fontsizeselect link image multiimage media emoticons ",
  271. language: 'zh_CN',
  272. paste_webkit_styles: 'all',
  273. paste_preprocess: function(plugin, args) {
  274. args.content = args.content.replace(/!important/g, '');
  275. },
  276. fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt",
  277. menubar: false
  278. });
  279. elm.editor = editor;
  280. editor.render();
  281. if($.isFunction(callback)) {
  282. callback(elm, editor);
  283. }
  284. });
  285. }
  286. return {
  287. getContent : function(){
  288. if(elm.editor) {
  289. return elm.editor.getContent();
  290. } else {
  291. return '';
  292. }
  293. }
  294. };
  295. };
  296. // target dom 对象
  297. util.emotion = function(elm, target, callback) {
  298. require(['jquery.caret', 'bootstrap', 'css!../../components/emotions/emotions.css'],function($){
  299. $(function() {
  300. var emotions_html = '<table class="emotions" cellspacing="0" cellpadding="0"><tbody><tr><td><div class="eItem" style="background-position:0px 0;" data-title="微笑" data-code="::)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/0.gif"></div></td><td><div class="eItem" style="background-position:-24px 0;" data-title="撇嘴" data-code="::~" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/1.gif"></div></td><td><div class="eItem" style="background-position:-48px 0;" data-title="色" data-code="::B" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/2.gif"></div></td><td><div class="eItem" style="background-position:-72px 0;" data-title="发呆" data-code="::|" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/3.gif"></div></td><td><div class="eItem" style="background-position:-96px 0;" data-title="得意" data-code=":8-)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/4.gif"></div></td><td><div class="eItem" style="background-position:-120px 0;" data-title="流泪" data-code="::<" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/5.gif"></div></td><td><div class="eItem" style="background-position:-144px 0;" data-title="害羞" data-code="::$" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/6.gif"></div></td><td><div class="eItem" style="background-position:-168px 0;" data-title="闭嘴" data-code="::X" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/7.gif"></div></td><td><div class="eItem" style="background-position:-192px 0;" data-title="睡" data-code="::Z" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/8.gif"></div></td><td><div class="eItem" style="background-position:-216px 0;" data-title="大哭" data-code="::\'(" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/9.gif"></div></td><td><div class="eItem" style="background-position:-240px 0;" data-title="尴尬" data-code="::-|" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/10.gif"></div></td><td><div class="eItem" style="background-position:-264px 0;" data-title="发怒" data-code="::@" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/11.gif"></div></td><td><div class="eItem" style="background-position:-288px 0;" data-title="调皮" data-code="::P" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/12.gif"></div></td><td><div class="eItem" style="background-position:-312px 0;" data-title="呲牙" data-code="::D" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/13.gif"></div></td><td><div class="eItem" style="background-position:-336px 0;" data-title="惊讶" data-code="::O" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/14.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-360px 0;" data-title="难过" data-code="::(" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/15.gif"></div></td><td><div class="eItem" style="background-position:-384px 0;" data-title="酷" data-code="::+" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/16.gif"></div></td><td><div class="eItem" style="background-position:-408px 0;" data-title="冷汗" data-code=":--b" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/17.gif"></div></td><td><div class="eItem" style="background-position:-432px 0;" data-title="抓狂" data-code="::Q" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/18.gif"></div></td><td><div class="eItem" style="background-position:-456px 0;" data-title="吐" data-code="::T" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/19.gif"></div></td><td><div class="eItem" style="background-position:-480px 0;" data-title="偷笑" data-code=":,@P" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/20.gif"></div></td><td><div class="eItem" style="background-position:-504px 0;" data-title="可爱" data-code=":,@-D" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/21.gif"></div></td><td><div class="eItem" style="background-position:-528px 0;" data-title="白眼" data-code="::d" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/22.gif"></div></td><td><div class="eItem" style="background-position:-552px 0;" data-title="傲慢" data-code=":,@o" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/23.gif"></div></td><td><div class="eItem" style="background-position:-576px 0;" data-title="饥饿" data-code="::g" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/24.gif"></div></td><td><div class="eItem" style="background-position:-600px 0;" data-title="困" data-code=":|-)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/25.gif"></div></td><td><div class="eItem" style="background-position:-624px 0;" data-title="惊恐" data-code="::!" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/26.gif"></div></td><td><div class="eItem" style="background-position:-648px 0;" data-title="流汗" data-code="::L" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/27.gif"></div></td><td><div class="eItem" style="background-position:-672px 0;" data-title="憨笑" data-code="::>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/28.gif"></div></td><td><div class="eItem" style="background-position:-696px 0;" data-title="大兵" data-code="::,@" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/29.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-720px 0;" data-title="奋斗" data-code=":,@f" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/30.gif"></div></td><td><div class="eItem" style="background-position:-744px 0;" data-title="咒骂" data-code="::-S" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/31.gif"></div></td><td><div class="eItem" style="background-position:-768px 0;" data-title="疑问" data-code=":?" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/32.gif"></div></td><td><div class="eItem" style="background-position:-792px 0;" data-title="嘘" data-code=":,@x" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/33.gif"></div></td><td><div class="eItem" style="background-position:-816px 0;" data-title="晕" data-code=":,@@" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/34.gif"></div></td><td><div class="eItem" style="background-position:-840px 0;" data-title="折磨" data-code="::8" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/35.gif"></div></td><td><div class="eItem" style="background-position:-864px 0;" data-title="衰" data-code=":,@!" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/36.gif"></div></td><td><div class="eItem" style="background-position:-888px 0;" data-title="骷髅" data-code=":!!!" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/37.gif"></div></td><td><div class="eItem" style="background-position:-912px 0;" data-title="敲打" data-code=":xx" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/38.gif"></div></td><td><div class="eItem" style="background-position:-936px 0;" data-title="再见" data-code=":bye" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/39.gif"></div></td><td><div class="eItem" style="background-position:-960px 0;" data-title="擦汗" data-code=":wipe" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/40.gif"></div></td><td><div class="eItem" style="background-position:-984px 0;" data-title="抠鼻" data-code=":dig" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/41.gif"></div></td><td><div class="eItem" style="background-position:-1008px 0;" data-title="鼓掌" data-code=":handclap" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/42.gif"></div></td><td><div class="eItem" style="background-position:-1032px 0;" data-title="糗大了" data-code=":&-(" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/43.gif"></div></td><td><div class="eItem" style="background-position:-1056px 0;" data-title="坏笑" data-code=":B-)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/44.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-1080px 0;" data-title="左哼哼" data-code=":<@" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/45.gif"></div></td><td><div class="eItem" style="background-position:-1104px 0;" data-title="右哼哼" data-code=":@>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/46.gif"></div></td><td><div class="eItem" style="background-position:-1128px 0;" data-title="哈欠" data-code="::-O" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/47.gif"></div></td><td><div class="eItem" style="background-position:-1152px 0;" data-title="鄙视" data-code=":>-|" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/48.gif"></div></td><td><div class="eItem" style="background-position:-1176px 0;" data-title="委屈" data-code=":P-(" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/49.gif"></div></td><td><div class="eItem" style="background-position:-1200px 0;" data-title="快哭了" data-code="::\'|" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/50.gif"></div></td><td><div class="eItem" style="background-position:-1224px 0;" data-title="阴险" data-code=":X-)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/51.gif"></div></td><td><div class="eItem" style="background-position:-1248px 0;" data-title="亲亲" data-code="::*" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/52.gif"></div></td><td><div class="eItem" style="background-position:-1272px 0;" data-title="吓" data-code=":@x" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/53.gif"></div></td><td><div class="eItem" style="background-position:-1296px 0;" data-title="可怜" data-code=":8*" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/54.gif"></div></td><td><div class="eItem" style="background-position:-1320px 0;" data-title="菜刀" data-code=":pd" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/55.gif"></div></td><td><div class="eItem" style="background-position:-1344px 0;" data-title="西瓜" data-code=":<W>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/56.gif"></div></td><td><div class="eItem" style="background-position:-1368px 0;" data-title="啤酒" data-code=":beer" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/57.gif"></div></td><td><div class="eItem" style="background-position:-1392px 0;" data-title="篮球" data-code=":basketb" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/58.gif"></div></td><td><div class="eItem" style="background-position:-1416px 0;" data-title="乒乓" data-code=":oo" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/59.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-1440px 0;" data-title="咖啡" data-code=":coffee" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/60.gif"></div></td><td><div class="eItem" style="background-position:-1464px 0;" data-title="饭" data-code=":eat" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/61.gif"></div></td><td><div class="eItem" style="background-position:-1488px 0;" data-title="猪头" data-code=":pig" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/62.gif"></div></td><td><div class="eItem" style="background-position:-1512px 0;" data-title="玫瑰" data-code=":rose" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/63.gif"></div></td><td><div class="eItem" style="background-position:-1536px 0;" data-title="凋谢" data-code=":fade" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/64.gif"></div></td><td><div class="eItem" style="background-position:-1560px 0;" data-title="示爱" data-code=":showlove" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/65.gif"></div></td><td><div class="eItem" style="background-position:-1584px 0;" data-title="爱心" data-code=":heart" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/66.gif"></div></td><td><div class="eItem" style="background-position:-1608px 0;" data-title="心碎" data-code=":break" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/67.gif"></div></td><td><div class="eItem" style="background-position:-1632px 0;" data-title="蛋糕" data-code=":cake" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/68.gif"></div></td><td><div class="eItem" style="background-position:-1656px 0;" data-title="闪电" data-code=":li" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/69.gif"></div></td><td><div class="eItem" style="background-position:-1680px 0;" data-title="炸弹" data-code=":bome" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/70.gif"></div></td><td><div class="eItem" style="background-position:-1704px 0;" data-title="刀" data-code=":kn" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/71.gif"></div></td><td><div class="eItem" style="background-position:-1728px 0;" data-title="足球" data-code=":footb" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/72.gif"></div></td><td><div class="eItem" style="background-position:-1752px 0;" data-title="瓢虫" data-code=":ladybug" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/73.gif"></div></td><td><div class="eItem" style="background-position:-1776px 0;" data-title="便便" data-code=":shit" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/74.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-1800px 0;" data-title="月亮" data-code=":moon" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/75.gif"></div></td><td><div class="eItem" style="background-position:-1824px 0;" data-title="太阳" data-code=":sun" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/76.gif"></div></td><td><div class="eItem" style="background-position:-1848px 0;" data-title="礼物" data-code=":gift" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/77.gif"></div></td><td><div class="eItem" style="background-position:-1872px 0;" data-title="拥抱" data-code=":hug" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/78.gif"></div></td><td><div class="eItem" style="background-position:-1896px 0;" data-title="强" data-code=":strong" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/79.gif"></div></td><td><div class="eItem" style="background-position:-1920px 0;" data-title="弱" data-code=":weak" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/80.gif"></div></td><td><div class="eItem" style="background-position:-1944px 0;" data-title="握手" data-code=":share" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/81.gif"></div></td><td><div class="eItem" style="background-position:-1968px 0;" data-title="胜利" data-code=":v" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/82.gif"></div></td><td><div class="eItem" style="background-position:-1992px 0;" data-title="抱拳" data-code=":@)" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/83.gif"></div></td><td><div class="eItem" style="background-position:-2016px 0;" data-title="勾引" data-code=":jj" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/84.gif"></div></td><td><div class="eItem" style="background-position:-2040px 0;" data-title="拳头" data-code=":@@" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/85.gif"></div></td><td><div class="eItem" style="background-position:-2064px 0;" data-title="差劲" data-code=":bad" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/86.gif"></div></td><td><div class="eItem" style="background-position:-2088px 0;" data-title="爱你" data-code=":lvu" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/87.gif"></div></td><td><div class="eItem" style="background-position:-2112px 0;" data-title="NO" data-code=":no" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/88.gif"></div></td><td><div class="eItem" style="background-position:-2136px 0;" data-title="OK" data-code=":ok" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/89.gif"></div></td></tr><tr><td><div class="eItem" style="background-position:-2160px 0;" data-title="爱情" data-code=":love" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/90.gif"></div></td><td><div class="eItem" style="background-position:-2184px 0;" data-title="飞吻" data-code=":<L>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/91.gif"></div></td><td><div class="eItem" style="background-position:-2208px 0;" data-title="跳跳" data-code=":jump" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/92.gif"></div></td><td><div class="eItem" style="background-position:-2232px 0;" data-title="发抖" data-code=":shake" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/93.gif"></div></td><td><div class="eItem" style="background-position:-2256px 0;" data-title="怄火" data-code=":<O>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/94.gif"></div></td><td><div class="eItem" style="background-position:-2280px 0;" data-title="转圈" data-code=":circle" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/95.gif"></div></td><td><div class="eItem" style="background-position:-2304px 0;" data-title="磕头" data-code=":kotow" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/96.gif"></div></td><td><div class="eItem" style="background-position:-2328px 0;" data-title="回头" data-code=":turn" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/97.gif"></div></td><td><div class="eItem" style="background-position:-2352px 0;" data-title="跳绳" data-code=":skip" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/98.gif"></div></td><td><div class="eItem" style="background-position:-2376px 0;" data-title="挥手" data-code=":oY" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/99.gif"></div></td><td><div class="eItem" style="background-position:-2400px 0;" data-title="激动" data-code=":#-0" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/100.gif"></div></td><td><div class="eItem" style="background-position:-2424px 0;" data-title="街舞" data-code=":hiphot" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/101.gif"></div></td><td><div class="eItem" style="background-position:-2448px 0;" data-title="献吻" data-code=":kiss" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/102.gif"></div></td><td><div class="eItem" style="background-position:-2472px 0;" data-title="左太极" data-code=":<&" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/103.gif"></div></td><td><div class="eItem" style="background-position:-2496px 0;" data-title="右太极" data-code=":&>" data-gifurl="http://res.mail.qq.com/zh_CN/images/mo/DEFAULT2/104.gif"></div></td></tr></tbody></table><div class="emotionsGif" style=""></div>';
  301. $(elm).popover({
  302. html: true,
  303. content: emotions_html,
  304. placement:"bottom"
  305. });
  306. $(elm).one('shown.bs.popover', function(){
  307. $(elm).next().mouseleave(function(){
  308. $(elm).popover('hide');
  309. });
  310. $(elm).next().delegate(".eItem", "mouseover", function(){
  311. var emo_img = '<img src="'+$(this).attr("data-gifurl")+'" alt="mo-'+$(this).attr("data-title")+'" />';
  312. var emo_txt = '/'+$(this).attr("data-code");
  313. $(elm).next().find(".emotionsGif").html(emo_img);
  314. });
  315. $(elm).next().delegate(".eItem", "click", function(){
  316. $(target).setCaret();
  317. var emo_txt = '/'+$(this).attr("data-code");
  318. $(target).insertAtCaret(emo_txt);
  319. $(elm).popover('hide');
  320. if($.isFunction(callback)) {
  321. callback(emo_txt, elm, target);
  322. }
  323. });
  324. });
  325. });
  326. });
  327. };
  328. util.loading = function() {
  329. var loadingid = 'modal-loading';
  330. var modalobj = $('#' + loadingid);
  331. if(modalobj.length == 0) {
  332. $(document.body).append('<div id="' + loadingid + '" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"></div>');
  333. modalobj = $('#' + loadingid);
  334. html =
  335. '<div class="modal-dialog">'+
  336. ' <div style="text-align:center; background-color: transparent;">'+
  337. ' <img style="width:48px; height:48px; margin-top:100px;" src="../attachment/images/global/loading.gif" title="正在努力加载...">'+
  338. ' </div>'+
  339. '</div>';
  340. modalobj.html(html);
  341. }
  342. modalobj.modal('show');
  343. modalobj.next().css('z-index', 999999);
  344. return modalobj;
  345. };
  346. util.loaded = function(){
  347. var loadingid = 'modal-loading';
  348. var modalobj = $('#' + loadingid);
  349. if(modalobj.length > 0){
  350. modalobj.modal('hide');
  351. }
  352. }
  353. util.dialog = function(title, content, footer, options) {
  354. if(!options) {
  355. options = {};
  356. }
  357. if(!options.containerName) {
  358. options.containerName = 'modal-message';
  359. }
  360. var modalobj = $('#' + options.containerName);
  361. if(modalobj.length == 0) {
  362. $(document.body).append('<div id="' + options.containerName + '" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true"></div>');
  363. modalobj = $('#' + options.containerName);
  364. }
  365. html =
  366. '<div class="modal-dialog">'+
  367. ' <div class="modal-content">';
  368. if(title) {
  369. html +=
  370. '<div class="modal-header">'+
  371. ' <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'+
  372. ' <h4>' + title + '</h4>'+
  373. '</div>';
  374. }
  375. if(content) {
  376. if(!$.isArray(content)) {
  377. html += '<div class="modal-body">'+ content + '</div>';
  378. } else {
  379. html += '<div class="modal-body">正在加载中</div>';
  380. }
  381. }
  382. if(footer) {
  383. html +=
  384. '<div class="modal-footer">'+ footer + '</div>';
  385. }
  386. html += ' </div></div>';
  387. modalobj.html(html);
  388. if(content && $.isArray(content)) {
  389. var embed = function(c) {
  390. modalobj.find('.modal-body').html(c);
  391. };
  392. if(content.length == 2) {
  393. $.post(content[0], content[1]).success(embed);
  394. } else {
  395. $.get(content[0]).success(embed);
  396. }
  397. }
  398. return modalobj;
  399. };
  400. util.message = function(msg, redirect, type){
  401. if (!redirect && !type) {
  402. type = 'info';
  403. }
  404. if ($.inArray(type, ['success', 'error', 'info', 'warning']) == -1) {
  405. type = '';
  406. }
  407. if (type == '') {
  408. type = redirect == '' ? 'error' : 'success';
  409. }
  410. var icons = {
  411. success: 'check-circle',
  412. error: 'times-circle',
  413. info: 'info-circle',
  414. warning: 'exclamation-triangle'
  415. };
  416. var p = '';
  417. if (redirect && redirect.length > 0) {
  418. if (redirect == 'back') {
  419. p = '<p>[<a href="javascript:;" onclick="history.go(-1)">返回上一页</a>] &nbsp; [<a href="./?refresh">回首页</a>]</p>';
  420. }
  421. }
  422. var content =
  423. '<div class="form-group">' +
  424. '<div class="col-sm-2">' +
  425. '<i class="pull-left fa fa-4x fa-'+icons[type]+'"></i>'+
  426. '</div>' +
  427. '<div class="col-sm-9">' +
  428. '<p>'+ msg +'</p>' + p +
  429. '</div>'+
  430. '<div class="clearfix"></div>' +
  431. '</div>';
  432. var footer = '<button type="button" class="btn btn-default" data-dismiss="modal">确认</button>';
  433. var modalobj = util.dialog('系统提示', content, footer, {'containerName': 'modal-message'});
  434. modalobj.find('.modal-content').addClass('alert alert-' + type);
  435. modalobj.on('hide.bs.modal', function () {
  436. if (redirect) {
  437. if (redirect == 'back') {
  438. history.go(-1);
  439. }else if (redirect == 'close'){
  440. (function(){
  441. if (navigator.appName=="Netscape") {
  442. window.open('','_self','');
  443. window.close();
  444. } else {
  445. window.close();
  446. }
  447. })();
  448. } else {
  449. window.location.href = redirect;
  450. }
  451. }
  452. });
  453. modalobj.on('hidden.bs.modal', function () {
  454. modalobj.remove();
  455. });
  456. modalobj.modal({
  457. backdrop: 'static'
  458. });
  459. return modalobj;
  460. };
  461. util.map = function(val, callback){
  462. require(['map'], function(BMap){
  463. if(!val) {
  464. val = {};
  465. }
  466. if(!val.lng) {
  467. val.lng = 116.403851;
  468. }
  469. if(!val.lat) {
  470. val.lat = 39.915177;
  471. }
  472. var point = new BMap.Point(val.lng, val.lat);
  473. var geo = new BMap.Geocoder();
  474. var modalobj = $('#map-dialog');
  475. if(modalobj.length == 0) {
  476. var content =
  477. '<div class="form-group">' +
  478. '<div class="input-group">' +
  479. '<input type="text" class="form-control" placeholder="请输入地址来直接查找相关位置">' +
  480. '<div class="input-group-btn">' +
  481. '<button class="btn btn-default"><i class="icon-search"></i> 搜索</button>' +
  482. '</div>' +
  483. '</div>' +
  484. '</div>' +
  485. '<div id="map-container" style="height:400px;"></div>';
  486. var footer =
  487. '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>' +
  488. '<button type="button" class="btn btn-primary">确认</button>';
  489. modalobj = util.dialog('请选择地点', content, footer, {containerName : 'map-dialog'});
  490. modalobj.find('.modal-dialog').css('width', '80%');
  491. modalobj.modal({'keyboard': false});
  492. map = util.map.instance = new BMap.Map('map-container');
  493. map.centerAndZoom(point, 12);
  494. map.enableScrollWheelZoom();
  495. map.enableDragging();
  496. map.enableContinuousZoom();
  497. map.addControl(new BMap.NavigationControl());
  498. map.addControl(new BMap.OverviewMapControl());
  499. marker = util.map.marker = new BMap.Marker(point);
  500. marker.setLabel(new BMap.Label('请您移动此标记,选择您的坐标!', {'offset': new BMap.Size(10,-20)}));
  501. map.addOverlay(marker);
  502. marker.enableDragging();
  503. marker.addEventListener('dragend', function(e){
  504. var point = marker.getPosition();
  505. geo.getLocation(point, function(address){
  506. modalobj.find('.input-group :text').val(address.address);
  507. });
  508. });
  509. function searchAddress(address) {
  510. geo.getPoint(address, function(point){
  511. map.panTo(point);
  512. marker.setPosition(point);
  513. marker.setAnimation(BMAP_ANIMATION_BOUNCE);
  514. setTimeout(function(){marker.setAnimation(null)}, 3600);
  515. });
  516. }
  517. modalobj.find('.input-group :text').keydown(function(e){
  518. if(e.keyCode == 13) {
  519. var kw = $(this).val();
  520. searchAddress(kw);
  521. }
  522. });
  523. modalobj.find('.input-group button').click(function(){
  524. var kw = $(this).parent().prev().val();
  525. searchAddress(kw);
  526. });
  527. }
  528. modalobj.off('shown.bs.modal');
  529. modalobj.on('shown.bs.modal', function(){
  530. marker.setPosition(point);
  531. map.panTo(marker.getPosition());
  532. });
  533. modalobj.find('button.btn-primary').off('click');
  534. modalobj.find('button.btn-primary').on('click', function(){
  535. if($.isFunction(callback)) {
  536. var point = util.map.marker.getPosition();
  537. geo.getLocation(point, function(address){
  538. var val = {lng: point.lng, lat: point.lat, label: address.address};
  539. callback(val);
  540. });
  541. }
  542. modalobj.modal('hide');
  543. });
  544. modalobj.modal('show');
  545. });
  546. }; // end of map
  547. util.iconBrowser = function(callback){
  548. var footer = '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>';
  549. var modalobj = util.dialog('请选择图标',['./index.php?c=utility&a=icon&callback=selectIconComplete'],footer,{containerName:'icon-container'});
  550. modalobj.modal({'keyboard': false});
  551. modalobj.find('.modal-dialog').css({'width':'70%'});
  552. modalobj.find('.modal-body').css({'height':'70%','overflow-y':'scroll'});
  553. modalobj.modal('show');
  554. window.selectIconComplete = function(ico){
  555. if($.isFunction(callback)){
  556. callback(ico);
  557. modalobj.modal('hide');
  558. }
  559. };
  560. }; // end of icon dialog
  561. util.emojiBrowser = function(callback){
  562. var footer = '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>';
  563. var modalobj = util.dialog('请选择表情',['./index.php?c=utility&a=emoji&callback=selectEmojiComplete'],footer,{containerName:'icon-container'});
  564. modalobj.modal({'keyboard': false});
  565. modalobj.find('.modal-dialog').css({'width':'70%'});
  566. modalobj.find('.modal-body').css({'height':'70%','overflow-y':'scroll'});
  567. modalobj.modal('show');
  568. window.selectEmojiComplete = function(emoji){
  569. if($.isFunction(callback)){
  570. callback(emoji);
  571. modalobj.modal('hide');
  572. }
  573. };
  574. }; // end of emoji dialog
  575. util.linkBrowser = function(callback){
  576. var footer = '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>';
  577. var modalobj = util.dialog('请选择链接',['./index.php?c=utility&a=link&callback=selectLinkComplete'],footer,{containerName:'link-container'});
  578. modalobj.modal({'keyboard': false});
  579. modalobj.find('.modal-body').css({'height':'300px','overflow-y':'auto' });
  580. modalobj.modal('show');
  581. window.selectLinkComplete = function(link){
  582. if($.isFunction(callback)){
  583. callback(link);
  584. modalobj.modal('hide');
  585. }
  586. };
  587. }; // end of icon dialog
  588. /**
  589. * val : image 值;
  590. * callback: 回调函数
  591. * base64options: base64(json($options))
  592. * options: {tabs: {'browser': 'active', 'upload': '', 'remote': ''}
  593. **/
  594. util.image = function(val, callback, base64options, options) {
  595. var opts = {
  596. type :'image',
  597. direct : false,
  598. multiple : false,
  599. path : val,
  600. dest_dir : '',
  601. global : false,
  602. thumb : false,
  603. width : 0
  604. };
  605. opts = $.extend({}, opts, options);
  606. opts.type = 'image';
  607. require(['jquery', 'fileUploader'], function($, fileUploader){
  608. fileUploader.show(function(images){
  609. if(images){
  610. if($.isFunction(callback)){
  611. callback(images);
  612. }
  613. }
  614. }, opts);
  615. });
  616. }; // end of image
  617. util.wechat_image = function(val, callback, options) {
  618. var opts = {
  619. type :'image',
  620. direct : false,
  621. multiple : false,
  622. acid : 0,
  623. path : val,
  624. dest_dir : ''
  625. };
  626. opts = $.extend({}, opts, options);
  627. require(['jquery', 'wechat_fileUploader'], function($, wechat_fileUploader){
  628. wechat_fileUploader.show(function(images){
  629. if(images){
  630. if($.isFunction(callback)){
  631. callback(images);
  632. }
  633. }
  634. }, opts);
  635. });
  636. };
  637. util.audio = function(val, callback, base64options, options) {
  638. var opts = {
  639. type :'audio',
  640. direct : false,
  641. multiple : false,
  642. path : '',
  643. dest_dir : ''
  644. };
  645. if(val){
  646. opts.path = val;
  647. }
  648. opts = $.extend({}, opts, options);
  649. opts.type = 'audio';
  650. require(['jquery', 'fileUploader'], function($, fileUploader){
  651. fileUploader.show(function(audios){
  652. if(audios){
  653. if($.isFunction(callback)){
  654. callback(audios);
  655. }
  656. }
  657. }, opts);
  658. });
  659. }; // end of audio
  660. /*
  661. 打开远程地址
  662. @params string url 目标远程地址
  663. @params string title 打开窗口标题,为空则不显示标题。可在返回的HTML定义<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>控制关闭
  664. @params object options 打开窗口的属性配置,可选项backdrop,show,keyboard,remote,width,height。具体参考bootcss模态对话框的options说明
  665. @params object events 窗口的一些回调事件,可选项show,shown,hide,hidden,confirm。回调函数第一个参数对话框JQ对象。具体参考bootcss模态对话框的on说明.
  666. @demo ajaxshow('url', 'title', {'show' : true}, {'hidden' : function(obj) {obj.remove();}});
  667. */
  668. util.ajaxshow = function(url, title, options, events) {
  669. var defaultoptions = {'show' : true};
  670. var defaultevents = {};
  671. var option = $.extend({}, defaultoptions, options);
  672. var events = $.extend({}, defaultevents, events);
  673. var footer = (typeof events['confirm'] == 'function' ? '<a href="javascript:;" class="btn btn-primary confirm">确定</a>' : '') + '<a href="javascript:;" class="btn btn-default" data-dismiss="modal" aria-hidden="true">关闭</a><iframe id="_formtarget" style="display:none;" name="_formtarget"></iframe>';
  674. var modalobj = util.dialog(title, '正在加载中', footer, {'containerName' : 'modal-panel-ajax'});
  675. if (typeof option['width'] != 'undeinfed') {
  676. modalobj.find('.modal-dialog').addClass('modal-lg');
  677. }
  678. if (events) {
  679. for (i in events) {
  680. if (typeof events[i] == 'function') {
  681. modalobj.on(i, events[i]);
  682. }
  683. }
  684. }
  685. modalobj.find('.modal-body').load(url, function(){
  686. $('.js-model-form').each(function(){
  687. $(this).attr('action', $(this).attr('action') + '&isajax=1&target=formtarget');
  688. $(this).attr('target', '_formtarget');
  689. })
  690. });
  691. modalobj.on('hidden.bs.modal', function(){modalobj.remove();});
  692. if (typeof events['confirm'] == 'function') {
  693. modalobj.find('.confirm', modalobj).on('click', events['confirm']);
  694. }
  695. return modalobj.modal(option);
  696. }; //end of ajaxshow
  697. util.cookie = {
  698. 'prefix' : '',
  699. // 保存 Cookie
  700. 'set' : function(name, value, seconds) {
  701. expires = new Date();
  702. expires.setTime(expires.getTime() + (1000 * seconds));
  703. document.cookie = this.name(name) + "=" + escape(value) + "; expires=" + expires.toGMTString() + "; path=/";
  704. },
  705. // 获取 Cookie
  706. 'get' : function(name) {
  707. cookie_name = this.name(name) + "=";
  708. cookie_length = document.cookie.length;
  709. cookie_begin = 0;
  710. while (cookie_begin < cookie_length)
  711. {
  712. value_begin = cookie_begin + cookie_name.length;
  713. if (document.cookie.substring(cookie_begin, value_begin) == cookie_name)
  714. {
  715. var value_end = document.cookie.indexOf ( ";", value_begin);
  716. if (value_end == -1)
  717. {
  718. value_end = cookie_length;
  719. }
  720. return unescape(document.cookie.substring(value_begin, value_end));
  721. }
  722. cookie_begin = document.cookie.indexOf ( " ", cookie_begin) + 1;
  723. if (cookie_begin == 0)
  724. {
  725. break;
  726. }
  727. }
  728. return null;
  729. },
  730. // 清除 Cookie
  731. 'del' : function(name) {
  732. var expireNow = new Date();
  733. document.cookie = this.name(name) + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT" + "; path=/";
  734. },
  735. 'name' : function(name) {
  736. return this.prefix + name;
  737. }
  738. };//end cookie
  739. util.wechat_audio = function(val, callback, options) {
  740. var opts = {
  741. type :'voice',
  742. direct : false,
  743. multiple : false,
  744. path : '',
  745. dest_dir : ''
  746. };
  747. if(val){
  748. opts.path = val;
  749. }
  750. opts = $.extend({}, opts, options);
  751. require(['jquery', 'wechat_fileUploader'], function($, wechat_fileUploader){
  752. wechat_fileUploader.show(function(audios){
  753. if(audios){
  754. if($.isFunction(callback)){
  755. callback(audios);
  756. }
  757. }
  758. }, opts);
  759. });
  760. };
  761. util.randomString = function(len) {
  762. len = len || 43;
  763. var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  764. var maxPos = $chars.length;
  765. var str = '';
  766. for (i = 0; i < len; i++) {
  767. str += $chars.charAt(Math.floor(Math.random() * maxPos));
  768. }
  769. return str;
  770. };
  771. util.countDown = function (time,day_elem,hour_elem,minute_elem,second_elem){
  772. require(['moment'], function(){
  773. var end_time = moment(time),//月份是实际月份-1
  774. sys_second = (end_time-moment())/1000;
  775. var timer = setInterval(function(){
  776. if (sys_second > 0) {
  777. sys_second -= 1;
  778. var day = Math.floor((sys_second / 3600) / 24);
  779. var hour = Math.floor((sys_second / 3600) % 24);
  780. var minute = Math.floor((sys_second / 60) % 60);
  781. var second = Math.floor(sys_second % 60);
  782. if(day<10){
  783. day = "0"+day;
  784. }
  785. if(day>999){
  786. day = "99+";
  787. }
  788. day_elem && $(day_elem).text(day);//计算天
  789. $(hour_elem).text(hour<10?"0"+hour:hour);//计算小时
  790. $(minute_elem).text(minute<10?"0"+minute:minute);//计算分
  791. $(second_elem).text(second<10?"0"+second:second);// 计算秒
  792. } else {
  793. clearInterval(timer);
  794. location.reload();
  795. }
  796. }, 1000);
  797. });
  798. };
  799. util.sms = {};
  800. util.sms.check = function(callback) {
  801. var content =
  802. '<div class="form-group clearfix">'+
  803. '<label class="col-sm-2 control-label">验证码</label>'+
  804. '<div class="col-sm-10 form-controls">'+
  805. '<div class="input-group">'+
  806. '<input type="text" class="form-control" id="captcha-text" placeholder="请输入验证码">'+
  807. '<div class="input-group-btn font-default">'+
  808. '<img id="captcha-code" onclick="this.src=\'./index.php?c=utility&a=code&v=\' + Math.random();" style="cursor:pointer; height: 34px;" src="./index.php?c=utility&a=code&v=1488354558" class="verification-img" alt="点击更换">'+
  809. '<a href="javascript:;" onclick="$(this).prev().trigger(\'click\')">看不清?</a>'+
  810. '</div>'+
  811. '</div>'+
  812. '</div>'+
  813. '</div>';
  814. var footer =
  815. '<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>'+
  816. '<button type="submit" class="btn btn-primary js-sure" name="submit">确认</button>';
  817. var $obj = util.dialog('发送短信验证', content, footer, {containerName : 'dialog-sms'});
  818. $obj.find('#captcha-code').trigger('click');
  819. $obj.find('#captcha-text').val('');
  820. $obj.modal('show');
  821. $obj.find('.js-sure').click(function() {
  822. var code = $obj.find('input').val();
  823. if (!code || code.length != 4) {
  824. util.confirm_error('验证码不正确');
  825. return false;
  826. };
  827. $obj.modal('hide');
  828. var url = "./index.php?c=utility&a=sms&do=check";
  829. $.post(url, {code : code}, function(data) {
  830. if ($.isFunction(callback)) {
  831. callback(data);
  832. };
  833. }, 'json');
  834. });
  835. };
  836. util.sms.send = function(mobile, callback) {
  837. var re = /^1\d{10}$/;
  838. if (!re.test(mobile)) {
  839. util.confirm_error('手机号不正确');
  840. return false;
  841. };
  842. var url = "./index.php?c=utility&a=sms&do=send";
  843. $.post(url, {mobile : mobile}, function(data) {
  844. if ($.isFunction(callback)) {
  845. callback(data);
  846. };
  847. }, 'json');
  848. }
  849. util.sms.verifycode_check = function(mobile, verifycode, callback) {
  850. var url = "./index.php?c=utility&a=sms&do=verifycode_check";
  851. $.post(url, {mobile : mobile, verifycode : verifycode}, function(data) {
  852. if ($.isFunction(callback)) {
  853. callback(data);
  854. };
  855. }, 'json');
  856. }
  857. util.scrollFixedTop = function(ele){
  858. var position = function() {
  859. var top = ele.position().top;
  860. var pos = ele.css("position");
  861. $(window).scroll(function() {
  862. var scrolls = $(this).scrollTop();
  863. (scrolls > top) ? ele.css({position: "fixed", top: 0}) : ele.css({position: pos, top: top});
  864. });
  865. };
  866. return $(this).each(function() {
  867. position($(this));
  868. });
  869. }
  870. util.scrollFixedBottom = function(ele){
  871. var position = function() {
  872. var top = ele.position().top;
  873. var pos = ele.css("position");
  874. var windowH = document.documentElement.clientHeight;
  875. var eleH = ele.height();
  876. if(top > windowH){
  877. ele.css({position: "fixed", top: windowH - eleH - 30});
  878. }
  879. $(window).scroll(function() {
  880. var scrolls = $(this).scrollTop();
  881. (scrolls > (top - windowH)) ? ele.css({position: pos, top: top}) : ele.css({position: "fixed", top: windowH - eleH - 30});
  882. });
  883. };
  884. return $(this).each(function() {
  885. position($(this));
  886. });
  887. }
  888. /**
  889. * 将数值四舍五入(保留2位小数)后格式化成金额形式
  890. *
  891. * @param num 数值(Number或者String)
  892. * @return 金额格式的字符串,如'1,234,567.45'
  893. * @type String
  894. */
  895. util.currencyFormat = function (num) {
  896. num = num.toString().replace(/\$|\,/g,'');
  897. if(isNaN(num))
  898. num = "0";
  899. sign = (num == (num = Math.abs(num)));
  900. num = Math.floor(num*100+0.50000000001);
  901. cents = num%100;
  902. num = Math.floor(num/100).toString();
  903. if(cents<10)
  904. cents = "0" + cents;
  905. for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
  906. num = num.substring(0,num.length-(4*i+3))+','+
  907. num.substring(num.length-(4*i+3));
  908. return (((sign)?'':'-') + num + '.' + cents);
  909. }