tpl.func.php 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. function _tpl_form_field_date($name, $value = '', $withtime = false) {
  8. $s = '';
  9. $withtime = empty($withtime) ? false : true;
  10. if (!empty($value)) {
  11. $value = strexists($value, '-') ? strtotime($value) : $value;
  12. } else {
  13. $value = TIMESTAMP;
  14. }
  15. $value = ($withtime ? date('Y-m-d H:i:s', $value) : date('Y-m-d', $value));
  16. $s .= '<input type="text" name="' . $name . '" value="'.$value.'" placeholder="请选择日期时间" readonly="readonly" class="datetimepicker form-control" style="padding-left:12px;" />';
  17. $s .= '
  18. <script type="text/javascript">
  19. require(["datetimepicker"], function(){
  20. var option = {
  21. lang : "zh",
  22. step : 5,
  23. timepicker : ' . (!empty($withtime) ? "true" : "false") .',
  24. closeOnDateSelect : true,
  25. format : "Y-m-d' . (!empty($withtime) ? ' H:i"' : '"') .'
  26. };
  27. $(".datetimepicker[name = \'' . $name . '\']").datetimepicker(option);
  28. });
  29. </script>';
  30. return $s;
  31. }
  32. function tpl_form_field_link($name, $value = '', $options = array()) {
  33. global $_GPC;
  34. if(!empty($options)) {
  35. foreach ($options as $key => $val){
  36. $options .= $key.':'.$val.',';
  37. }
  38. }
  39. $s = '';
  40. if (!defined('TPL_INIT_LINK')) {
  41. $s = '
  42. <script type="text/javascript">
  43. function showLinkDialog(elm) {
  44. var ipt = $(elm).parent().parent().parent().prev();
  45. util.linkBrowser(function(href){
  46. var multiid = "'. $_GPC['multiid'] .'";
  47. if (multiid) {
  48. href = /(&)?t=/.test(href) ? href : href + "&t=" + multiid;
  49. }
  50. ipt.val(href);
  51. });
  52. }
  53. function newsLinkDialog(elm, page) {
  54. var ipt = $(elm).parent().parent().parent().prev();
  55. util.newsBrowser(function(href, page){
  56. if (page != "" && page != undefined) {
  57. newsLinkDialog(elm, page);
  58. return false;
  59. }
  60. var multiid = "'. $_GPC['multiid'] .'";
  61. if (multiid) {
  62. href = /(&)?t=/.test(href) ? href : href + "&t=" + multiid;
  63. }
  64. ipt.val(href);
  65. }, page);
  66. }
  67. function pageLinkDialog(elm, page) {
  68. var ipt = $(elm).parent().parent().parent().prev();
  69. util.pageBrowser(function(href, page){
  70. if (page != "" && page != undefined) {
  71. pageLinkDialog(elm, page);
  72. return false;
  73. }
  74. var multiid = "'. $_GPC['multiid'] .'";
  75. if (multiid) {
  76. href = /(&)?t=/.test(href) ? href : href + "&t=" + multiid;
  77. }
  78. ipt.val(href);
  79. }, page);
  80. }
  81. function articleLinkDialog(elm, page) {
  82. var ipt = $(elm).parent().parent().parent().prev();
  83. util.articleBrowser(function(href, page){
  84. if (page != "" && page != undefined) {
  85. articleLinkDialog(elm, page);
  86. return false;
  87. }
  88. var multiid = "'. $_GPC['multiid'] .'";
  89. if (multiid) {
  90. href = /(&)?t=/.test(href) ? href : href + "&t=" + multiid;
  91. }
  92. ipt.val(href);
  93. }, page);
  94. }
  95. function phoneLinkDialog(elm, page) {
  96. var ipt = $(elm).parent().parent().parent().prev();
  97. util.phoneBrowser(function(href, page){
  98. if (page != "" && page != undefined) {
  99. phoneLinkDialog(elm, page);
  100. return false;
  101. }
  102. ipt.val(href);
  103. }, page);
  104. }
  105. function mapLinkDialog(elm) {
  106. var ipt = $(elm).parent().parent().parent().prev();
  107. util.map(elm, function(val){
  108. var href = \'https://api.map.baidu.com/marker?location=\'+val.lat+\',\'+val.lng+\'&output=html&src=we7\';
  109. var multiid = "'. $_GPC['multiid'] .'";
  110. if (multiid) {
  111. href = /(&)?t=/.test(href) ? href : href + "&t=" + multiid;
  112. }
  113. ipt.val(href);
  114. });
  115. }
  116. </script>';
  117. define('TPL_INIT_LINK', true);
  118. }
  119. $s .= '
  120. <div class="input-group">
  121. <input type="text" value="'.$value.'" name="'.$name.'" class="form-control" autocomplete="off" style="'.($options ? $options : 'width:525px').'">
  122. <span class="input-group-btn">
  123. <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button" aria-haspopup="true" aria-expanded="false">选择链接 <span class="caret"></span></button>
  124. <ul class="dropdown-menu">
  125. <li><a href="javascript:" data-type="system" onclick="showLinkDialog(this);">系统菜单</a></li>
  126. <li><a href="javascript:" data-type="page" onclick="pageLinkDialog(this);">微页面</a></li>
  127. <li><a href="javascript:" data-type="article" onclick="articleLinkDialog(this)">文章及分类</a></li>
  128. <li><a href="javascript:" data-type="news" onclick="newsLinkDialog(this)">图文回复</a></li>
  129. <li><a href="javascript:" data-type="map" onclick="mapLinkDialog(this)">一键导航</a></li>
  130. <li><a href="javascript:" data-type="phone" onclick="phoneLinkDialog(this)">一键拨号</a></li>
  131. </ul>
  132. </span>
  133. </div>
  134. ';
  135. return $s;
  136. }
  137. function tpl_form_module_link($name) {
  138. $s = '';
  139. if (!defined('TPL_INIT_module')) {
  140. $s = '
  141. <script type="text/javascript">
  142. function showModuleLink(elm) {
  143. util.showModuleLink(function(href, permission) {
  144. var ipt = $(elm).parent().prev();
  145. var ipts = $(elm).parent().prev().prev();
  146. ipt.val(href);
  147. ipts.val(permission);
  148. });
  149. }
  150. </script>';
  151. define('TPL_INIT_module', true);
  152. }
  153. $s .= '
  154. <div class="input-group">
  155. <input type="text" class="form-control" name="permission" style="display: none">
  156. <input type="text" class="form-control" name="'.$name.'">
  157. <span class="input-group-btn">
  158. <a href="javascript:" class="btn btn-default" onclick="showModuleLink(this)">选择链接</a>
  159. </span>
  160. </div>
  161. ';
  162. return $s;
  163. }
  164. function tpl_form_field_emoji($name, $value = '') {
  165. $s = '';
  166. if (!defined('TPL_INIT_EMOJI')) {
  167. $s = '
  168. <script type="text/javascript">
  169. function showEmojiDialog(elm) {
  170. var btn = $(elm);
  171. var spview = btn.parent().prev();
  172. var ipt = spview.prev();
  173. if(!ipt.val()){
  174. spview.css("display","none");
  175. }
  176. util.emojiBrowser(function(emoji){
  177. ipt.val("\\\" + emoji.find("span").text().replace("+", "").toLowerCase());
  178. spview.show();
  179. spview.find("span").removeClass().addClass(emoji.find("span").attr("class"));
  180. });
  181. }
  182. </script>';
  183. define('TPL_INIT_EMOJI', true);
  184. }
  185. $s .= '
  186. <div class="input-group" style="width: 500px;">
  187. <input type="text" value="' . $value . '" name="' . $name . '" class="form-control" autocomplete="off">
  188. <span class="input-group-addon" style="display:none"><span></span></span>
  189. <span class="input-group-btn">
  190. <button class="btn btn-default" type="button" onclick="showEmojiDialog(this);">选择表情</button>
  191. </span>
  192. </div>
  193. ';
  194. return $s;
  195. }
  196. function tpl_form_field_color($name, $value = '') {
  197. $s = '';
  198. if (!defined('TPL_INIT_COLOR')) {
  199. $s = '
  200. <script type="text/javascript">
  201. $(function(){
  202. $(".colorpicker").each(function(){
  203. var elm = this;
  204. util.colorpicker(elm, function(color){
  205. $(elm).parent().prev().prev().val(color.toHexString());
  206. $(elm).parent().prev().css("background-color", color.toHexString());
  207. });
  208. });
  209. $(".colorclean").click(function(){
  210. $(this).parent().prev().prev().val("");
  211. $(this).parent().prev().css("background-color", "#FFF");
  212. });
  213. });
  214. </script>';
  215. define('TPL_INIT_COLOR', true);
  216. }
  217. $s .= '
  218. <div class="row row-fix">
  219. <div class="col-xs-8 col-sm-8" style="padding-right:0;">
  220. <div class="input-group">
  221. <input class="form-control" type="text" name="'.$name.'" placeholder="请选择颜色" value="'.$value.'">
  222. <span class="input-group-addon" style="width:35px;border-left:none;background-color:'.$value.'"></span>
  223. <span class="input-group-btn">
  224. <button class="btn btn-default colorpicker" type="button">选择颜色 <i class="fa fa-caret-down"></i></button>
  225. <button class="btn btn-default colorclean" type="button"><span><i class="fa fa-remove"></i></span></button>
  226. </span>
  227. </div>
  228. </div>
  229. </div>
  230. ';
  231. return $s;
  232. }
  233. function tpl_form_field_icon($name, $value='') {
  234. if(empty($value)){
  235. $value = 'fa fa-external-link';
  236. }
  237. $s = '';
  238. if (!defined('TPL_INIT_ICON')) {
  239. $s = '
  240. <script type="text/javascript">
  241. function showIconDialog(elm) {
  242. var btn = $(elm);
  243. var spview = btn.parent().prev();
  244. var ipt = spview.prev();
  245. if(!ipt.val()){
  246. spview.css("display","none");
  247. }
  248. util.iconBrowser(function(ico){
  249. ipt.val(ico);
  250. spview.show();
  251. spview.find("i").attr("class","");
  252. spview.find("i").addClass("fa").addClass(ico);
  253. });
  254. }
  255. </script>';
  256. define('TPL_INIT_ICON', true);
  257. }
  258. $s .= '
  259. <div class="input-group" style="width: 300px;">
  260. <input type="text" value="'.$value.'" name="'.$name.'" class="form-control" autocomplete="off">
  261. <span class="input-group-addon"><i class="'.$value.' fa"></i></span>
  262. <span class="input-group-btn">
  263. <button class="btn btn-default" type="button" onclick="showIconDialog(this);">选择图标</button>
  264. </span>
  265. </div>
  266. ';
  267. return $s;
  268. }
  269. function tpl_form_field_image($name, $value = '', $default = '', $options = array()) {
  270. global $_W;
  271. if (empty($default)) {
  272. $default = './resource/images/nopic.jpg';
  273. }
  274. $val = $default;
  275. if (!empty($value)) {
  276. $val = tomedia($value);
  277. }
  278. if (!empty($options['global'])) {
  279. $options['global'] = true;
  280. } else {
  281. $options['global'] = false;
  282. }
  283. if (empty($options['class_extra'])) {
  284. $options['class_extra'] = '';
  285. }
  286. if (isset($options['dest_dir']) && !empty($options['dest_dir'])) {
  287. if (!preg_match('/^\w+([\/]\w+)?$/i', $options['dest_dir'])) {
  288. exit('图片上传目录错误,只能指定最多两级目录,如: "we7_store","we7_store/d1"');
  289. }
  290. }
  291. $options['direct'] = true;
  292. $options['multiple'] = false;
  293. if (isset($options['thumb'])) {
  294. $options['thumb'] = !empty($options['thumb']);
  295. }
  296. $options['fileSizeLimit'] = intval($GLOBALS['_W']['setting']['upload']['image']['limit']) * 1024;
  297. $s = '';
  298. if (!defined('TPL_INIT_IMAGE')) {
  299. $s = '
  300. <script type="text/javascript">
  301. function showImageDialog(elm, opts, options) {
  302. require(["util"], function(util){
  303. var btn = $(elm);
  304. var ipt = btn.parent().prev();
  305. var val = ipt.val();
  306. var img = ipt.parent().next().children();
  307. options = '.str_replace('"', '\'', json_encode($options)).';
  308. util.image(val, function(url){
  309. if(url.url){
  310. if(img.length > 0){
  311. img.get(0).src = url.url;
  312. }
  313. ipt.val(url.attachment);
  314. ipt.attr("filename",url.filename);
  315. ipt.attr("url",url.url);
  316. }
  317. if(url.media_id){
  318. if(img.length > 0){
  319. img.get(0).src = "";
  320. }
  321. ipt.val(url.media_id);
  322. }
  323. }, options);
  324. });
  325. }
  326. function deleteImage(elm){
  327. $(elm).prev().attr("src", "./resource/images/nopic.jpg");
  328. $(elm).parent().prev().find("input").val("");
  329. }
  330. </script>';
  331. define('TPL_INIT_IMAGE', true);
  332. }
  333. $s .= '
  334. <div class="input-group ' . $options['class_extra'] . '">
  335. <input type="text" name="' . $name . '" value="' . $value . '"' . ($options['extras']['text'] ? $options['extras']['text'] : '') . ' class="form-control" autocomplete="off">
  336. <span class="input-group-btn">
  337. <button class="btn btn-default" type="button" onclick="showImageDialog(this);">选择图片</button>
  338. </span>
  339. </div>
  340. <div class="input-group ' . $options['class_extra'] . '" style="margin-top:.5em;">
  341. <img src="' . $val . '" onerror="this.src=\'' . $default . '\'; this.title=\'图片未找到.\'" class="img-responsive img-thumbnail" ' . ($options['extras']['image'] ? $options['extras']['image'] : '') . ' width="150" />
  342. <em class="close" style="position:absolute; top: 0px; right: -14px;" title="删除这张图片" onclick="deleteImage(this)">×</em>
  343. </div>';
  344. return $s;
  345. }
  346. function tpl_form_field_multi_image($name, $value = array(), $options = array()) {
  347. global $_W;
  348. $options['multiple'] = true;
  349. $options['direct'] = false;
  350. $options['fileSizeLimit'] = intval($GLOBALS['_W']['setting']['upload']['image']['limit']) * 1024;
  351. if (isset($options['dest_dir']) && !empty($options['dest_dir'])) {
  352. if (!preg_match('/^\w+([\/]\w+)?$/i', $options['dest_dir'])) {
  353. exit('图片上传目录错误,只能指定最多两级目录,如: "we7_store","we7_store/d1"');
  354. }
  355. }
  356. $s = '';
  357. if (!defined('TPL_INIT_MULTI_IMAGE')) {
  358. $s = '
  359. <script type="text/javascript">
  360. function uploadMultiImage(elm) {
  361. var name = $(elm).next().val();
  362. util.image( "", function(urls){
  363. $.each(urls, function(idx, url){
  364. $(elm).parent().parent().next().append(\'<div class="multi-item"><img onerror="this.src=\\\'./resource/images/nopic.jpg\\\'; this.title=\\\'图片未找到.\\\'" src="\'+url.url+\'" class="img-responsive img-thumbnail"><input type="hidden" name="\'+name+\'[]" value="\'+url.attachment+\'"><em class="close" title="删除这张图片" onclick="deleteMultiImage(this)">×</em></div>\');
  365. });
  366. }, ' . json_encode($options) . ');
  367. }
  368. function deleteMultiImage(elm){
  369. $(elm).parent().remove();
  370. }
  371. </script>';
  372. define('TPL_INIT_MULTI_IMAGE', true);
  373. }
  374. $s .= <<<EOF
  375. <div class="input-group">
  376. <input type="text" class="form-control" readonly="readonly" value="" placeholder="批量上传图片" autocomplete="off">
  377. <span class="input-group-btn">
  378. <button class="btn btn-default" type="button" onclick="uploadMultiImage(this);">选择图片</button>
  379. <input type="hidden" value="{$name}" />
  380. </span>
  381. </div>
  382. <div class="input-group multi-img-details">
  383. EOF;
  384. if (is_array($value) && count($value) > 0) {
  385. foreach ($value as $row) {
  386. $s .= '
  387. <div class="multi-item">
  388. <img src="' . tomedia($row) . '" onerror="this.src=\'./resource/images/nopic.jpg\'; this.title=\'图片未找到.\'" class="img-responsive img-thumbnail">
  389. <input type="hidden" name="' . $name . '[]" value="' . $row . '" >
  390. <em class="close" title="删除这张图片" onclick="deleteMultiImage(this)">×</em>
  391. </div>';
  392. }
  393. }
  394. $s .= '</div>';
  395. return $s;
  396. }
  397. function tpl_form_field_audio($name, $value = '', $options = array()) {
  398. if (!is_array($options)) {
  399. $options = array();
  400. }
  401. $options['direct'] = true;
  402. $options['multiple'] = false;
  403. $options['fileSizeLimit'] = intval($GLOBALS['_W']['setting']['upload']['audio']['limit']) * 1024;
  404. $s = '';
  405. if (!defined('TPL_INIT_AUDIO')) {
  406. $s = '
  407. <script type="text/javascript">
  408. function showAudioDialog(elm, base64options, options) {
  409. require(["util"], function(util){
  410. var btn = $(elm);
  411. var ipt = btn.parent().prev();
  412. var val = ipt.val();
  413. util.audio(val, function(url){
  414. if(url && url.attachment && url.url){
  415. btn.prev().show();
  416. ipt.val(url.attachment);
  417. ipt.attr("filename",url.filename);
  418. ipt.attr("url",url.url);
  419. setAudioPlayer();
  420. }
  421. if(url && url.media_id){
  422. ipt.val(url.media_id);
  423. }
  424. }, "" , ' . json_encode($options) . ');
  425. });
  426. }
  427. function setAudioPlayer(){
  428. require(["jquery.jplayer"], function(){
  429. $(function(){
  430. $(".audio-player").each(function(){
  431. $(this).prev().find("button").eq(0).click(function(){
  432. var src = $(this).parent().prev().val();
  433. if($(this).find("i").hasClass("fa-stop")) {
  434. $(this).parent().parent().next().jPlayer("stop");
  435. } else {
  436. if(src) {
  437. $(this).parent().parent().next().jPlayer("setMedia", {mp3: util.tomedia(src)}).jPlayer("play");
  438. }
  439. }
  440. });
  441. });
  442. $(".audio-player").jPlayer({
  443. playing: function() {
  444. $(this).prev().find("i").removeClass("fa-play").addClass("fa-stop");
  445. },
  446. pause: function (event) {
  447. $(this).prev().find("i").removeClass("fa-stop").addClass("fa-play");
  448. },
  449. swfPath: "resource/components/jplayer",
  450. supplied: "mp3"
  451. });
  452. $(".audio-player-media").each(function(){
  453. $(this).next().find(".audio-player-play").css("display", $(this).val() == "" ? "none" : "");
  454. });
  455. });
  456. });
  457. }
  458. setAudioPlayer();
  459. </script>';
  460. echo $s;
  461. define('TPL_INIT_AUDIO', true);
  462. }
  463. $s .= '
  464. <div class="input-group">
  465. <input type="text" value="' . $value . '" name="' . $name . '" class="form-control audio-player-media" autocomplete="off" ' . ($options['extras']['text'] ? $options['extras']['text'] : '') . '>
  466. <span class="input-group-btn">
  467. <button class="btn btn-default audio-player-play" type="button" style="display:none;"><i class="fa fa-play"></i></button>
  468. <button class="btn btn-default" type="button" onclick="showAudioDialog(this, \'' . base64_encode(iserializer($options)) . '\',' . str_replace('"', '\'', json_encode($options)) . ');">选择媒体文件</button>
  469. </span>
  470. </div>
  471. <div class="input-group audio-player"></div>';
  472. return $s;
  473. }
  474. function tpl_form_field_multi_audio($name, $value = array(), $options = array()) {
  475. $s = '';
  476. $options['direct'] = false;
  477. $options['multiple'] = true;
  478. $options['fileSizeLimit'] = intval($GLOBALS['_W']['setting']['upload']['audio']['limit']) * 1024;
  479. if (!defined('TPL_INIT_MULTI_AUDIO')) {
  480. $s .= '
  481. <script type="text/javascript">
  482. function showMultiAudioDialog(elm, name) {
  483. require(["util"], function(util){
  484. var btn = $(elm);
  485. var ipt = btn.parent().prev();
  486. var val = ipt.val();
  487. util.audio(val, function(urls){
  488. $.each(urls, function(idx, url){
  489. var obj = $(\'<div class="multi-audio-item" style="height: 40px; position:relative; float: left; margin-right: 18px;"><div class="multi-audio-player"></div><div class="input-group"><input type="text" class="form-control" readonly value="\' + url.attachment + \'" /><div class="input-group-btn"><button class="btn btn-default" type="button"><i class="fa fa-play"></i></button><button class="btn btn-default" onclick="deleteMultiAudio(this)" type="button"><i class="fa fa-remove"></i></button></div></div><input type="hidden" name="\'+name+\'[]" value="\'+url.attachment+\'"></div>\');
  490. $(elm).parent().parent().next().append(obj);
  491. setMultiAudioPlayer(obj);
  492. });
  493. }, ' . json_encode($options) . ');
  494. });
  495. }
  496. function deleteMultiAudio(elm){
  497. $(elm).parent().parent().parent().remove();
  498. }
  499. function setMultiAudioPlayer(elm){
  500. require(["jquery.jplayer"], function(){
  501. $(".multi-audio-player",$(elm)).next().find("button").eq(0).click(function(){
  502. var src = $(this).parent().prev().val();
  503. if($(this).find("i").hasClass("fa-stop")) {
  504. $(this).parent().parent().prev().jPlayer("stop");
  505. } else {
  506. if(src) {
  507. $(this).parent().parent().prev().jPlayer("setMedia", {mp3: util.tomedia(src)}).jPlayer("play");
  508. }
  509. }
  510. });
  511. $(".multi-audio-player",$(elm)).jPlayer({
  512. playing: function() {
  513. $(this).next().find("i").eq(0).removeClass("fa-play").addClass("fa-stop");
  514. },
  515. pause: function (event) {
  516. $(this).next().find("i").eq(0).removeClass("fa-stop").addClass("fa-play");
  517. },
  518. swfPath: "resource/components/jplayer",
  519. supplied: "mp3"
  520. });
  521. });
  522. }
  523. </script>';
  524. define('TPL_INIT_MULTI_AUDIO', true);
  525. }
  526. $s .= '
  527. <div class="input-group">
  528. <input type="text" class="form-control" readonly="readonly" value="" placeholder="批量上传音乐" autocomplete="off">
  529. <span class="input-group-btn">
  530. <button class="btn btn-default" type="button" onclick="showMultiAudioDialog(this,\'' . $name . '\');">选择音乐</button>
  531. </span>
  532. </div>
  533. <div class="input-group multi-audio-details clear-fix" style="margin-top:.5em;">';
  534. if (!empty($value) && !is_array($value)) {
  535. $value = array($value);
  536. }
  537. if (is_array($value) && count($value) > 0) {
  538. $n = 0;
  539. foreach ($value as $row) {
  540. $m = random(8);
  541. $s .= '
  542. <div class="multi-audio-item multi-audio-item-' . $n . '-' . $m . '" style="height: 40px; position:relative; float: left; margin-right: 18px;">
  543. <div class="multi-audio-player"></div>
  544. <div class="input-group">
  545. <input type="text" class="form-control" value="' . $row . '" readonly/>
  546. <div class="input-group-btn">
  547. <button class="btn btn-default" type="button"><i class="fa fa-play"></i></button>
  548. <button class="btn btn-default" onclick="deleteMultiAudio(this)" type="button"><i class="fa fa-remove"></i></button>
  549. </div>
  550. </div>
  551. <input type="hidden" name="' . $name . '[]" value="' . $row . '">
  552. </div>
  553. <script language="javascript">setMultiAudioPlayer($(".multi-audio-item-' . $n . '-' . $m . '"));</script>';
  554. $n++;
  555. }
  556. }
  557. $s .= '
  558. </div>';
  559. return $s;
  560. }
  561. function tpl_form_field_video($name, $value = '', $options = array()) {
  562. if(!is_array($options)){
  563. $options = array();
  564. }
  565. if (!is_array($options)) {
  566. $options = array();
  567. }
  568. $options['direct'] = true;
  569. $options['multi'] = false;
  570. $options['type'] = 'video';
  571. $options['fileSizeLimit'] = intval($GLOBALS['_W']['setting']['upload']['audio']['limit']) * 1024;
  572. $s = '';
  573. if (!defined('TPL_INIT_VIDEO')) {
  574. $s = '
  575. <script type="text/javascript">
  576. function showVideoDialog(elm, options) {
  577. require(["util"], function(util){
  578. var btn = $(elm);
  579. var ipt = btn.parent().prev();
  580. var val = ipt.val();
  581. util.audio(val, function(url){
  582. if(url && url.attachment && url.url){
  583. btn.prev().show();
  584. ipt.val(url.attachment);
  585. ipt.attr("filename",url.filename);
  586. ipt.attr("url",url.url);
  587. }
  588. if(url && url.media_id){
  589. ipt.val(url.media_id);
  590. }
  591. }, '.json_encode($options).');
  592. });
  593. }
  594. </script>';
  595. echo $s;
  596. define('TPL_INIT_VIDEO', true);
  597. }
  598. $s .= '
  599. <div class="input-group">
  600. <input type="text" value="'.$value.'" name="'.$name.'" class="form-control" autocomplete="off" '.($options['extras']['text'] ? $options['extras']['text'] : '').'>
  601. <span class="input-group-btn">
  602. <button class="btn btn-default" type="button" onclick="showVideoDialog(this,'.str_replace('"','\'', json_encode($options)).');">选择媒体文件</button>
  603. </span>
  604. </div>';
  605. return $s;
  606. }
  607. function tpl_form_field_wechat_image($name, $value = '', $default = '', $options = array()) {
  608. global $_W;
  609. if(!$_W['acid'] || $_W['account']['level'] < 3) {
  610. $options['account_error'] = 1;
  611. } else {
  612. $options['acid'] = $_W['acid'];
  613. }
  614. if(empty($default)) {
  615. $default = './resource/images/nopic.jpg';
  616. }
  617. $val = $default;
  618. if (!empty($value)) {
  619. $media_data = (array)media2local($value, true);
  620. $val = $media_data['attachment'];
  621. }
  622. if (empty($options['class_extra'])) {
  623. $options['class_extra'] = '';
  624. }
  625. $options['direct'] = true;
  626. $options['multiple'] = false;
  627. $options['type'] = empty($options['type']) ? 'image' : $options['type'];
  628. $s = '';
  629. if (!defined('TPL_INIT_WECHAT_IMAGE')) {
  630. $s = '
  631. <script type="text/javascript">
  632. function showWechatImageDialog(elm, options) {
  633. require(["util"], function(util){
  634. var btn = $(elm);
  635. var ipt = btn.parent().prev();
  636. var val = ipt.val();
  637. var img = ipt.parent().next().children();
  638. util.wechat_image(val, function(url){
  639. if(url.media_id){
  640. if(img.length > 0){
  641. img.get(0).src = url.url;
  642. }
  643. ipt.val(url.media_id);
  644. }
  645. }, options);
  646. });
  647. }
  648. function deleteImage(elm){
  649. $(elm).prev().attr("src", "./resource/images/nopic.jpg");
  650. $(elm).parent().prev().find("input").val("");
  651. }
  652. </script>';
  653. define('TPL_INIT_WECHAT_IMAGE', true);
  654. }
  655. $s .= '
  656. <div class="input-group ' . $options['class_extra'] . '">
  657. <input type="text" name="' . $name . '" value="' . $value . '"' . ($options['extras']['text'] ? $options['extras']['text'] : '') . ' class="form-control" autocomplete="off">
  658. <span class="input-group-btn">
  659. <button class="btn btn-default" type="button" onclick="showWechatImageDialog(this, ' . str_replace('"', '\'', json_encode($options)) . ');">选择图片</button>
  660. </span>
  661. </div>';
  662. $s .=
  663. '<div class="input-group ' . $options['class_extra'] . '" style="margin-top:.5em;">
  664. <img src="' . $val . '" onerror="this.src=\'' . $default . '\'; this.title=\'图片未找到.\'" class="img-responsive img-thumbnail" ' . ($options['extras']['image'] ? $options['extras']['image'] : '') . ' width="150" />
  665. <em class="close" style="position:absolute; top: 0px; right: -14px;" title="删除这张图片" onclick="deleteImage(this)">×</em>
  666. </div>';
  667. if (!empty($media_data) && $media_data['model'] == 'temp' && (time() - $media_data['createtime'] > 259200)) {
  668. $s .= '<span class="help-block"><b class="text-danger">该素材已过期 [有效期为3天],请及时更新素材</b></span>';
  669. }
  670. return $s;
  671. }
  672. function tpl_form_field_wechat_multi_image($name, $value = '', $default = '', $options = array()) {
  673. global $_W;
  674. if(!$_W['acid'] || $_W['account']['level'] < 3) {
  675. $options['account_error'] = 1;
  676. } else {
  677. $options['acid'] = $_W['acid'];
  678. }
  679. if(empty($default)) {
  680. $default = './resource/images/nopic.jpg';
  681. }
  682. if(empty($options['class_extra'])) {
  683. $options['class_extra'] = '';
  684. }
  685. $options['direct'] = false;
  686. $options['multiple'] = true;
  687. $options['type'] = empty($options['type']) ? 'image' : $options['type'];
  688. $s = '';
  689. if (!defined('TPL_INIT_WECHAT_MULTI_IMAGE')) {
  690. $s = '
  691. <script type="text/javascript">
  692. function uploadWechatMultiImage(elm) {
  693. var name = $(elm).next().val();
  694. util.wechat_image("", function(urls){
  695. $.each(urls, function(idx, url){
  696. $(elm).parent().parent().next().append(\'<div class="multi-item"><img onerror="this.src=\\\'./resource/images/nopic.jpg\\\'; this.title=\\\'图片未找到.\\\'" src="\'+url.url+\'" class="img-responsive img-thumbnail"><input type="hidden" name="\'+name+\'[]" value="\'+url.media_id+\'"><em class="close" title="删除这张图片" onclick="deleteWechatMultiImage(this)">×</em></div>\');
  697. });
  698. }, '.json_encode($options).');
  699. }
  700. function deleteWechatMultiImage(elm){
  701. $(elm).parent().remove();
  702. }
  703. </script>';
  704. define('TPL_INIT_WECHAT_MULTI_IMAGE', true);
  705. }
  706. $s .= <<<EOF
  707. <div class="input-group">
  708. <input type="text" class="form-control" readonly="readonly" value="" placeholder="批量上传图片" autocomplete="off">
  709. <span class="input-group-btn">
  710. <button class="btn btn-default" type="button" onclick="uploadWechatMultiImage(this);">选择图片</button>
  711. <input type="hidden" value="{$name}" />
  712. </span>
  713. </div>
  714. <div class="input-group multi-img-details">
  715. EOF;
  716. if (is_array($value) && count($value)>0) {
  717. foreach ($value as $row) {
  718. $s .='
  719. <div class="multi-item">
  720. <img src="'.media2local($row).'" onerror="this.src=\'./resource/images/nopic.jpg\'; this.title=\'图片未找到.\'" class="img-responsive img-thumbnail">
  721. <input type="hidden" name="'.$name.'[]" value="'.$row.'" >
  722. <em class="close" title="删除这张图片" onclick="deleteWechatMultiImage(this)">×</em>
  723. </div>';
  724. }
  725. }
  726. $s .= '</div>';
  727. return $s;
  728. }
  729. function tpl_form_field_wechat_voice($name, $value = '', $options = array()) {
  730. global $_W;
  731. if(!$_W['acid'] || $_W['account']['level'] < 3) {
  732. $options['account_error'] = 1;
  733. } else {
  734. $options['acid'] = $_W['acid'];
  735. }
  736. if(!empty($value)) {
  737. $media_data = (array)media2local($value, true);
  738. $val = $media_data['attachment'];
  739. }
  740. if(!is_array($options)){
  741. $options = array();
  742. }
  743. $options['direct'] = true;
  744. $options['multiple'] = false;
  745. $options['type'] = 'voice';
  746. $s = '';
  747. if (!defined('TPL_INIT_WECHAT_VOICE')) {
  748. $s = '
  749. <script type="text/javascript">
  750. function showWechatVoiceDialog(elm, options) {
  751. require(["util"], function(util){
  752. var btn = $(elm);
  753. var ipt = btn.parent().prev();
  754. var val = ipt.val();
  755. util.wechat_audio(val, function(url){
  756. if(url && url.media_id && url.url){
  757. btn.prev().show();
  758. ipt.val(url.media_id);
  759. ipt.attr("media_id",url.media_id);
  760. ipt.attr("url",url.url);
  761. setWechatAudioPlayer();
  762. }
  763. if(url && url.media_id){
  764. ipt.val(url.media_id);
  765. }
  766. } , '.json_encode($options).');
  767. });
  768. }
  769. function setWechatAudioPlayer(){
  770. require(["jquery.jplayer"], function(){
  771. $(function(){
  772. $(".audio-player").each(function(){
  773. $(this).prev().find("button").eq(0).click(function(){
  774. var src = $(this).parent().prev().attr("url");
  775. if($(this).find("i").hasClass("fa-stop")) {
  776. $(this).parent().parent().next().jPlayer("stop");
  777. } else {
  778. if(src) {
  779. $(this).parent().parent().next().jPlayer("setMedia", {mp3: util.tomedia(src)}).jPlayer("play");
  780. }
  781. }
  782. });
  783. });
  784. $(".audio-player").jPlayer({
  785. playing: function() {
  786. $(this).prev().find("i").removeClass("fa-play").addClass("fa-stop");
  787. },
  788. pause: function (event) {
  789. $(this).prev().find("i").removeClass("fa-stop").addClass("fa-play");
  790. },
  791. swfPath: "resource/components/jplayer",
  792. supplied: "mp3"
  793. });
  794. $(".audio-player-media").each(function(){
  795. $(this).next().find(".audio-player-play").css("display", $(this).val() == "" ? "none" : "");
  796. });
  797. });
  798. });
  799. }
  800. setWechatAudioPlayer();
  801. </script>';
  802. echo $s;
  803. define('TPL_INIT_WECHAT_VOICE', true);
  804. }
  805. $s .= '
  806. <div class="input-group">
  807. <input type="text" value="'.$value.'" name="'.$name.'" class="form-control audio-player-media" autocomplete="off" '.($options['extras']['text'] ? $options['extras']['text'] : '').'>
  808. <span class="input-group-btn">
  809. <button class="btn btn-default audio-player-play" type="button" style="display:none"><i class="fa fa-play"></i></button>
  810. <button class="btn btn-default" type="button" onclick="showWechatVoiceDialog(this,'.str_replace('"','\'', json_encode($options)).');">选择媒体文件</button>
  811. </span>
  812. </div>
  813. <div class="input-group audio-player">
  814. </div>';
  815. if(!empty($media_data) && $media_data['model'] == 'temp' && (time() - $media_data['createtime'] > 259200)){
  816. $s .= '<span class="help-block"><b class="text-danger">该素材已过期 [有效期为3天],请及时更新素材</b></span>';
  817. }
  818. return $s;
  819. }
  820. function tpl_form_field_wechat_video($name, $value = '', $options = array()) {
  821. global $_W;
  822. if(!$_W['acid'] || $_W['account']['level'] < 3) {
  823. $options['account_error'] = 1;
  824. } else {
  825. $options['acid'] = $_W['acid'];
  826. }
  827. if(!empty($value)) {
  828. $media_data = (array)media2local($value, true);
  829. $val = $media_data['attachment'];
  830. }
  831. if(!is_array($options)){
  832. $options = array();
  833. }
  834. if(empty($options['tabs'])){
  835. $options['tabs'] = array('video'=>'active', 'browser'=>'');
  836. }
  837. $options = array_elements(array('tabs','global','dest_dir', 'acid', 'error'), $options);
  838. $options['direct'] = true;
  839. $options['multi'] = false;
  840. $options['type'] = 'video';
  841. $s = '';
  842. if (!defined('TPL_INIT_WECHAT_VIDEO')) {
  843. $s = '
  844. <script type="text/javascript">
  845. function showWechatVideoDialog(elm, options) {
  846. require(["util"], function(util){
  847. var btn = $(elm);
  848. var ipt = btn.parent().prev();
  849. var val = ipt.val();
  850. util.wechat_audio(val, function(url){
  851. if(url && url.media_id && url.url){
  852. btn.prev().show();
  853. ipt.val(url.media_id);
  854. ipt.attr("media_id",url.media_id);
  855. ipt.attr("url",url.url);
  856. }
  857. if(url && url.media_id){
  858. ipt.val(url.media_id);
  859. }
  860. }, '.json_encode($options).');
  861. });
  862. }
  863. </script>';
  864. echo $s;
  865. define('TPL_INIT_WECHAT_VIDEO', true);
  866. }
  867. $s .= '
  868. <div class="input-group">
  869. <input type="text" value="'.$value.'" name="'.$name.'" class="form-control" autocomplete="off" '.($options['extras']['text'] ? $options['extras']['text'] : '').'>
  870. <span class="input-group-btn">
  871. <button class="btn btn-default" type="button" onclick="showWechatVideoDialog(this,'.str_replace('"','\'', json_encode($options)).');">选择媒体文件</button>
  872. </span>
  873. </div>
  874. <div class="input-group audio-player">
  875. </div>';
  876. if(!empty($media_data) && $media_data['model'] == 'temp' && (time() - $media_data['createtime'] > 259200)){
  877. $s .= '<span class="help-block"><b class="text-danger">该素材已过期 [有效期为3天],请及时更新素材</b></span>';
  878. }
  879. return $s;
  880. }
  881. function tpl_form_field_location_category($name, $values = array(), $del = false) {
  882. $html = '';
  883. if (!defined('TPL_INIT_LOCATION_CATEGORY')) {
  884. $html .= '
  885. <script type="text/javascript">
  886. require(["location"], function(loc){
  887. $(".tpl-location-container").each(function(){
  888. var elms = {};
  889. elms.cate = $(this).find(".tpl-cate")[0];
  890. elms.sub = $(this).find(".tpl-sub")[0];
  891. elms.clas = $(this).find(".tpl-clas")[0];
  892. var vals = {};
  893. vals.cate = $(elms.cate).attr("data-value");
  894. vals.sub = $(elms.sub).attr("data-value");
  895. vals.clas = $(elms.clas).attr("data-value");
  896. loc.render(elms, vals, {withTitle: true});
  897. });
  898. });
  899. </script>';
  900. define('TPL_INIT_LOCATION_CATEGORY', true);
  901. }
  902. if (empty($values) || !is_array($values)) {
  903. $values = array('cate'=>'','sub'=>'','clas'=>'');
  904. }
  905. if(empty($values['cate'])) {
  906. $values['cate'] = '';
  907. }
  908. if(empty($values['sub'])) {
  909. $values['sub'] = '';
  910. }
  911. if(empty($values['clas'])) {
  912. $values['clas'] = '';
  913. }
  914. $html .= '
  915. <div class="row row-fix tpl-location-container">
  916. <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
  917. <select name="' . $name . '[cate]" data-value="' . $values['cate'] . '" class="form-control tpl-cate">
  918. </select>
  919. </div>
  920. <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
  921. <select name="' . $name . '[sub]" data-value="' . $values['sub'] . '" class="form-control tpl-sub">
  922. </select>
  923. </div>
  924. <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3">
  925. <select name="' . $name . '[clas]" data-value="' . $values['clas'] . '" class="form-control tpl-clas">
  926. </select>
  927. </div>';
  928. if($del) {
  929. $html .='
  930. <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3" style="padding-top:5px">
  931. <a title="删除" onclick="$(this).parents(\'.tpl-location-container\').remove();return false;"><i class="fa fa-times-circle"></i></a>
  932. </div>
  933. </div>';
  934. } else {
  935. $html .= '</div>';
  936. }
  937. return $html;
  938. }
  939. function tpl_ueditor($id, $value = '', $options = array()) {
  940. $s = '';
  941. $options['height'] = empty($options['height']) ? 200 : $options['height'];
  942. $options['allow_upload_video'] = isset($options['allow_upload_video']) ? $options['allow_upload_video'] : true;
  943. $s .= !empty($id) ? "<textarea id=\"{$id}\" name=\"{$id}\" type=\"text/plain\" style=\"height:{$options['height']}px;\">{$value}</textarea>" : '';
  944. $s .= "
  945. <script type=\"text/javascript\">
  946. require(['util'], function(util){
  947. util.editor('" . ($id ? $id : "") . "', {
  948. height : {$options['height']},
  949. dest_dir : '" .($options['dest_dir'] ? $options['dest_dir'] : "") . "',
  950. image_limit : " . (intval($GLOBALS['_W']['setting']['upload']['image']['limit']) * 1024) . ",
  951. allow_upload_video : " . ($options['allow_upload_video'] ? 'true' : 'false') . ",
  952. audio_limit : " . (intval($GLOBALS['_W']['setting']['upload']['audio']['limit']) * 1024) . ",
  953. callback : ''
  954. });
  955. });
  956. </script>";
  957. return $s;
  958. }
  959. function tpl_edit_sms($name, $value, $uniacid, $url, $num) {
  960. $s = '
  961. <div class="input-group">
  962. <input type="text" name="'.$name.'" id="balance" readonly value="'.$value.'" class="form-control" autocomplete="off">
  963. <span class="input-group-btn">
  964. <button type="button" class="btn btn-default" data-toggle="modal" data-target="#edit_sms">编辑短信条数</button>
  965. </span>
  966. </div>
  967. <span class="help-block">请填写短信剩余条数,必须为整数。</span>
  968. <div class="modal fade" id="edit_sms" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  969. <div class="modal-dialog" role="document">
  970. <div class="modal-content">
  971. <div class="modal-header">
  972. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  973. <h4 class="modal-title" id="">修改短信条数</h4>
  974. </div>
  975. <div class="modal-body" style="height: 100px;">
  976. <div class="form-group">
  977. <label class="col-xs-12 col-sm-5 col-md-6 col-lg-3 control-label">短信条数</label>
  978. <div class="col-sm-6 col-xs-12 col-md-7">
  979. <div class="input-group" style="width: 180px;">
  980. <div class="input-group-btn">
  981. <button type="button" class="btn btn-defaultt label-success" id="edit_add">+</button>
  982. </div>
  983. <!--<span class="input-group-addon label-danger" id="edit_alert" style="width: 10px;">+ </span>-->
  984. <input type="text" class="form-control" id="edit_num" value="+">
  985. <div class="input-group-btn">
  986. <button type="button" class="btn btn-default" id="edit_minus">-</button>
  987. </div>
  988. </div>
  989. <div class="help-block">点击加号或减号切换修改短信条数方式<br>最多可添加<span id="count_sms">'.$num.'</span>条短信</div>
  990. </div>
  991. </div>
  992. </div>
  993. <div class="modal-footer">
  994. <button type="button" id="edit_sms_sub" class="btn btn-primary">保存</button>
  995. </div>
  996. </div>
  997. </div>
  998. </div>
  999. <script>
  1000. var status = \'add\';
  1001. $(\'#edit_add\').click(function() {
  1002. status = \'add\';
  1003. var sign = status == \'add\' ? \'+\' : \'-\';
  1004. var edit_num = $(\'#edit_num\').val();
  1005. if (edit_num == \'\') {
  1006. $(\'#edit_num\').val(sign)
  1007. return;
  1008. }
  1009. if (isNaN(edit_num.substr(1)) || edit_num.substr(1) == \'\') {
  1010. edit_num = \'\';
  1011. }
  1012. $(\'#edit_num\').val(\'+\'+Math.abs(edit_num));
  1013. if (edit_num == \'\') {
  1014. $(\'#edit_num\').val(sign);
  1015. }
  1016. $(\'#edit_add\').attr(\'class\', \'btn btn-defaultt label-success\');
  1017. $(\'#edit_minus\').attr(\'class\', \'btn btn-default\');
  1018. });
  1019. $(\'#edit_num\').keyup(function() {
  1020. var sign = status == \'add\' ? \'+\' : \'-\';
  1021. if ($(\'#edit_num\').val() == \'\') {
  1022. return ;
  1023. }
  1024. if (isNaN($(\'#edit_num\').val()) && $(\'#edit_num\').val() != sign) {
  1025. $(\'#edit_num\').val(\'\');
  1026. return;
  1027. }
  1028. if ($(\'#edit_num\').val().indexOf(sign) < 0) {
  1029. var val = parseInt(Math.abs($(\'#edit_num\').val()));
  1030. if (val == 0) {
  1031. $(\'#edit_num\').val(sign);
  1032. } else {
  1033. $(\'#edit_num\').val(sign + val);
  1034. }
  1035. }
  1036. });
  1037. $(\'#edit_minus\').click(function() {
  1038. status = \'minus\';
  1039. var sign = status == \'add\' ? \'+\' : \'-\';
  1040. var edit_num = $(\'#edit_num\').val();
  1041. if (edit_num == \'\') {
  1042. $(\'#edit_num\').val(sign)
  1043. return;
  1044. }
  1045. if (isNaN(edit_num.substr(1)) || edit_num.substr(1) == \'\') {
  1046. edit_num = \'\';
  1047. }
  1048. $(\'#edit_num\').val(\'-\'+Math.abs(edit_num));
  1049. if (edit_num == \'\') {
  1050. $(\'#edit_num\').val(sign);
  1051. }
  1052. $(\'#edit_minus\').attr(\'class\', \'btn btn-defaultt label-danger\');
  1053. $(\'#edit_add\').attr(\'class\', \'btn btn-default\');
  1054. });
  1055. $(\'#edit_sms_sub\').click(function () {
  1056. var edit_num = $(\'#edit_num\').val() == \'\' ? 0 : Math.abs(parseInt($(\'#edit_num\').val()));
  1057. var uniacid = '.$uniacid.';
  1058. $.post(\''.$url.'\', {\'balance\' : edit_num, \'uniacid\' : uniacid, \'status\' : status}, function(data) {
  1059. var data = $.parseJSON(data);
  1060. $(\'#count_sms\').html(data.message.message.count);
  1061. if (data.message.errno > 0) {
  1062. $(\'#balance\').val(data.message.message.num);
  1063. $(\'#edit_sms\').modal(\'toggle\');
  1064. } else {
  1065. util.message(\'您现有短信数量为0,请联系服务商购买短信\');
  1066. $(\'#edit_sms\').modal(\'toggle\');
  1067. }
  1068. $(\'#edit_num\').val(\'\');
  1069. $(\'#edit_add\').trigger(\'click\');
  1070. });
  1071. });
  1072. </script>
  1073. ';
  1074. return $s;
  1075. }
  1076. function tpl_coupon_colors($name, $value = 'Color082') {
  1077. load()->model('activity');
  1078. $options = activity_coupon_colors();
  1079. empty($name) && ($name = 'coupon_color');
  1080. if (!defined('TPL_INIT_COUPON_COLOR')) {
  1081. $html = '
  1082. <script type="text/javascript">
  1083. function showCouponColor(eml) {
  1084. var dropdown = $(eml).parent().parent().next();
  1085. dropdown.show();
  1086. $(document).click(function(){
  1087. dropdown.hide();
  1088. });
  1089. $(".coupon-color").click(function(e){
  1090. e.stopPropagation();
  1091. });
  1092. $(".dropdown-menu li").click(function(){
  1093. $(eml).parent().prev().css("background", $(this).attr("data-color"));
  1094. $(eml).parent().prev().css("border-color", $(this).attr("data-color"));
  1095. $(eml).parent().prev().prev().prev().val($(this).attr("data-name"));
  1096. $(eml).parent().prev().prev().val($(this).attr("data-color"));
  1097. dropdown.hide();
  1098. $(document).unbind("click");
  1099. $(".dropdown-menu li, .coupon-color").unbind("click");
  1100. });
  1101. }
  1102. </script>';
  1103. define('TPL_INIT_COUPON_COLOR', true);
  1104. }
  1105. $html .= '
  1106. <div class="col-sm-9 col-xs-12 coupon-color" style="position: relative;width:200px;">
  1107. <div class="input-group" style="width:200px;">
  1108. <input type="text" class="form-control" name="'.$name.'" value="'.$value.'"/>
  1109. <input type="hidden" name="'.$name.'-value" class="form-control" value="'.$value.'"/>
  1110. <span class="input-group-addon" style="width:35px;background:'.$options[$value].'"></span>
  1111. <span class="input-group-btn">
  1112. <button class="btn btn-default" type="button" onclick="showCouponColor(this);">选择颜色</button>
  1113. </span>
  1114. </div>
  1115. <div class="dropdown-menu" style="display:none;padding:6px 0 0 6px;width:185px;position: absolute;top:35px;left:15px">
  1116. <ul style="padding:0">
  1117. ';
  1118. if(!empty($options)) {
  1119. foreach($options as $colorname => $colorvalue) {
  1120. $html .= '<li data-name="'.$colorname.'" data-color="'.$colorvalue.'" style="padding: 0;margin-right:5px;margin-bottom:5px;width:30px;height:30px;background:'.$colorvalue.';float:left;list-style: none;"></li>';
  1121. }
  1122. }
  1123. $html .= '
  1124. </ul>
  1125. </div>
  1126. </div>
  1127. ';
  1128. return $html;
  1129. }