script.js 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208
  1. /**
  2. * Created by Gt680 on 17/7/17.
  3. * 后台 Js
  4. */
  5. //> 加载完成后执行
  6. $(function () {
  7. // 添加后台 LogOut 退出弹框提示
  8. var logOut = function (event) {
  9. layer.open({
  10. id: 'oneLogOut',
  11. title: false,
  12. content: '确认安全退出?',
  13. icon: 3,
  14. btn: ['退出', '取消'],
  15. btn1: function (index, layero) {
  16. //> 安全退出 关闭层
  17. event.preventDefault();
  18. document.getElementById('logout-form').submit();
  19. layer.close(index);
  20. },
  21. btn2: function (index, layero) {
  22. //> 阻止退出
  23. layer.close(index);
  24. return false;
  25. },
  26. cancel: function (index, layero) {
  27. //> 阻止退出
  28. layer.close(index);
  29. return false;
  30. }
  31. })
  32. };
  33. // 延迟绑定 登出onclick事件
  34. $(document).on('click',".logOut",function (event) {
  35. logOut(event);
  36. });
  37. // 后台 锁屏
  38. var lock = function(){
  39. layer.open({
  40. btn:['取消'],
  41. title:false,
  42. icon:4,
  43. content: '<b>锁屏</b>',
  44. scrollbar: false,
  45. anim:3,
  46. success:function(layero,index){
  47. var nowTime = (new Date()).toLocaleTimeString();
  48. $(layero).find('div b').text('锁屏:'+nowTime)}
  49. });
  50. };
  51. // 延迟绑定 锁屏onclick事件
  52. $("#lock").on('click',function(){
  53. lock();
  54. });
  55. // 缩略图 thumbHover class 属性
  56. var thumbHoverLayer;
  57. $(document).on('mouseover', '.thumbHover', function() {
  58. thumbHoverLayer = layer.tips('<img src="'+$(this).data('img')+'" style="width:100%;" />', this, {
  59. tips:1,
  60. time : 0,
  61. area: ['300px', 'auto']
  62. });
  63. });
  64. $(document).on('mouseout', '.thumbHover', function() {
  65. layer.close(thumbHoverLayer);
  66. });
  67. var t_thumbHoverLayer;
  68. $(document).on('click', '.t_thumbHover', function() {
  69. // t_thumbHoverLayer = layer.tips('<img class="del_img" src="'+$(this).data('img')+'" style="width:100%;" />', this, {
  70. // tips:1,
  71. // time : 0,
  72. // area: ['380px', 'auto']
  73. // });
  74. var img_url=$(this).data('img');
  75. img_url=img_url.split(';');
  76. var img_data=[];
  77. for (var img_key in img_url) {
  78. img_data[img_key]={
  79. "alt": "img"+img_key,
  80. "pid": 666+img_key, //图片id
  81. "src": img_url[img_key], //原图地址
  82. "thumb": img_url[img_key] //缩略图地址
  83. }
  84. }
  85. t_thumbHoverLayer = layer.photos({
  86. photos: {
  87. "title": "", //相册标题
  88. "id": 123, //相册id
  89. "start": 0, //初始显示的图片序号,默认0
  90. "data":img_data
  91. // "data": [ //相册包含的图片,数组格式
  92. // {
  93. // "alt": "图片名",
  94. // "pid": 666, //图片id
  95. // "src": $(this).data('img'), //原图地址
  96. // "thumb": $(this).data('img') //缩略图地址
  97. // },
  98. //
  99. // ]
  100. }
  101. ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机(请注意,3.0之前的版本用shift参数)
  102. });
  103. // t_thumbHoverLayer = layer.open({
  104. // type: 2,
  105. // content:'<img class="del_img" src="'+$(this).data('img')+'" style="width:100%;" />',
  106. // area: ['300px', '195px'],
  107. // maxmin: true
  108. // });
  109. });
  110. $(document).on('click', '.del_img', function() {
  111. layer.close(t_thumbHoverLayer);
  112. });
  113. //> 层管理 存储当前层级关系
  114. window.tips_layer = [];
  115. // 新增弹出
  116. $(document).on('click','.createForm',function (event) {
  117. var evt = event || window.event;
  118. var th = null;
  119. if( $(evt.target).is('a') ){
  120. th = $(evt.target);
  121. }else{
  122. th = $($(evt.target).closest('a'));
  123. }
  124. var title = null;
  125. var title_name=$(this).data('name');
  126. if( th.data('title') == 'create' ){
  127. //> 新增
  128. title = '<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&ensp;<strong>'+title_name?title_name:新增+'</strong>';
  129. var area_width=th.data('area-width')?th.data('area-width'):'60%';
  130. }else if( th.data('title') == 'group' ){
  131. title = '<span class="glyphicon glyphicon-list" aria-hidden="true"></span>&ensp;<strong>'+(title_name?title_name:列表)+'</strong>';
  132. var area_width='100%';
  133. }else{
  134. //> 编辑
  135. title = '<span class="glyphicon glyphicon-edit" aria-hidden="true"></span>&ensp;<strong>'+(title_name?title_name:编辑)+'</strong>';
  136. var _check = $($(evt.target).closest('tr')).find('input[name="btSelectItem"]');
  137. _check.prop('checked',true);
  138. var area_width=th.data('area-width')?th.data('area-width'):'60%';
  139. }
  140. var zIndex=th.attr('target')*1;
  141. console.log(area_width+'---------------------------------------------'+zIndex);
  142. if(isNaN(zIndex))zIndex=99;
  143. console.log(area_width+'---------------------------------------------'+zIndex);
  144. window.createUrl = th.data('url');
  145. var area_height=th.data('area-height')?th.data('area-height'):'60%';
  146. if( th.data('area-width') && th.data('area-height') ){
  147. window.tips_layer.push(layer.open({
  148. type: 1,
  149. title: title,
  150. closeBtn: 1,
  151. time: 0,
  152. id: 'createLay'+zIndex,
  153. // move: false,
  154. maxmin:true,
  155. area: [area_width, area_height],
  156. scrollbar: false,
  157. shadeClose: false,
  158. skin: '',
  159. zIndex: zIndex, //> 当前设置层级
  160. content: '<div id="createForm"></div><script>var load = layer.load();$.ajax({url:window.createUrl,type:"get",async:true,dataType:"html",data:{},success:function(data){layer.close(load);$("#createForm").html(data)},error:function(){layer.close(load);$("#createForm").html("<div class=\'text-center\' style=\'margin-top:150px;\'>加载失败...</div>")}});</script>',
  161. full: function (ele) {
  162. // $($(ele).find("#createForm")).css({width:'100%'});
  163. },
  164. cancel: function () {
  165. if( window.tipsC ){
  166. for( closeT in window.tipsC){
  167. layer.close(window.tipsC[closeT]);
  168. }
  169. }
  170. if( _check ){
  171. _check.prop('checked',false);
  172. }
  173. tips_layer.pop();
  174. },
  175. moveEnd: function () {
  176. }
  177. }));
  178. }else if (th.data('max-height') && th.data('max-width')){
  179. window.tips_layer.push(layer.open({
  180. type: 1,
  181. title: title,
  182. closeBtn: 1,
  183. time: 0,
  184. id: 'createLay',
  185. // move: false,
  186. maxmin:true,
  187. maxWidth: th.data('max-width'),
  188. maxHeight: th.data('max-height'),
  189. scrollbar: false,
  190. shadeClose: false,
  191. skin: '',
  192. zIndex: 90, //> 当前设置层级
  193. content: '<div id="createForm" style="width:'+th.data('max-width')+'px;height:'+th.data('max-width')+'px;"></div><script>var load = layer.load();$.ajax({url:window.createUrl,type:"get",async:true,dataType:"html",data:{},success:function(data){layer.close(load);$("#createForm").html(data)},error:function(){layer.close(load);$("#createForm").html("<div class=\'text-center\' style=\'margin-top:150px;\'>加载失败...</div>")}});</script>',
  194. full: function (ele) {
  195. // $($(ele).find("#createForm")).css({width:'100%'});
  196. },
  197. cancel: function () {
  198. if( window.tipsC ){
  199. for( closeT in window.tipsC){
  200. layer.close(window.tipsC[closeT]);
  201. }
  202. }
  203. if( _check ){
  204. _check.prop('checked',false);
  205. }
  206. tips_layer.pop();
  207. },
  208. moveEnd: function () {
  209. }
  210. }));
  211. }else {
  212. window.tips_layer.push(layer.open({
  213. type: 1,
  214. title: title,
  215. closeBtn: 1,
  216. time: 0,
  217. id: 'createLay',
  218. // move: false,
  219. maxmin:true,
  220. maxWidth: 700,
  221. maxHeight: 400,
  222. scrollbar: false,
  223. shadeClose: false,
  224. skin: '',
  225. zIndex: 90, //> 当前设置层级
  226. content: '<div id="createForm" style="width:700px;height:400px;"></div><script>var load = layer.load();$.ajax({url:window.createUrl,type:"get",async:true,dataType:"html",data:{},success:function(data){layer.close(load);$("#createForm").html(data)},error:function(){layer.close(load);$("#createForm").html("<div class=\'text-center\' style=\'margin-top:150px;\'>加载失败...</div>")}});</script>',
  227. full: function (ele) {
  228. // $($(ele).find("#createForm")).css({width:'100%'});
  229. },
  230. cancel: function () {
  231. if( window.tipsC ){
  232. for( closeT in window.tipsC){
  233. layer.close(window.tipsC[closeT]);
  234. }
  235. }
  236. if( _check ){
  237. _check.prop('checked',false);
  238. }
  239. tips_layer.pop();
  240. },
  241. moveEnd: function () {
  242. }
  243. }));
  244. }
  245. });
  246. // bind 全屏弹出
  247. $(document).on('click','.maxOpen',function (event) {
  248. var evt = event || window.event;
  249. var th = null;
  250. if( $(evt.target).is('a') ){
  251. th = $(evt.target);
  252. }else{
  253. th = $($(evt.target).closest('a'));
  254. }
  255. var _check = $($(evt.target).closest('tr')).find('input[name="btSelectItem"]');
  256. _check.prop('checked',true);
  257. var indexOpen = layer.open({
  258. type: 2,
  259. title: '<span class="glyphicon glyphicon-list" aria-hidden="true"></span>&ensp;<strong>消息列表</strong>',
  260. closeBtn: 1,
  261. time: 0,
  262. id: 'maxOpen',
  263. content: th.data('url'),
  264. area: ['100%', '100%'],
  265. maxmin: true,
  266. scrollbar: false,
  267. shadeClose: false,
  268. fixed: false,
  269. resize: false,
  270. move: false,
  271. zIndex: 91, //> 当前设置层级
  272. full: function (ele) {
  273. // $($(ele).find("#createForm")).css({width:'100%'});
  274. },
  275. cancel: function () {
  276. _check.prop('checked',false);
  277. layer.close(indexOpen);
  278. tips_layer = []; //> 全部出栈
  279. },
  280. moveEnd: function () {
  281. }
  282. });
  283. tips_layer.push(indexOpen);
  284. });
  285. // 确认按钮
  286. $(document).on('click', '.layer-button', function (event) {
  287. var evt = event || window.event;
  288. var th = null;
  289. if( $(evt.target).is('a') ){
  290. th = $(evt.target);
  291. }else{
  292. th = $($(evt.target).closest('a'));
  293. }
  294. var _check = $($(evt.target).closest('tr')).find('input[name="btSelectItem"]');
  295. _check.prop('checked',true);
  296. var _index_index1 = layer.open({
  297. title: false,
  298. content: "确认执行 <span style='color: orangered;'>"+th.html()+"</span> ?",
  299. btn: ['执行', '取消'],
  300. yes: function () {
  301. layer.close(_index_index1);
  302. $.ajax({
  303. type: "post",
  304. url: th.data('url'),
  305. data: {},
  306. dataType: 'json',
  307. success: function (data1) {
  308. layer.msg(data1.message);
  309. refresh();
  310. }
  311. });
  312. _check.prop('checked',false);
  313. },
  314. btn2: function(){
  315. layer.close(_index_index1);
  316. _check.prop('checked',false);
  317. return false;
  318. },
  319. cancel: function () {
  320. layer.close(_index_index1);
  321. _check.prop('checked',false);
  322. return false;
  323. }
  324. });
  325. });
  326. // 确认按钮
  327. $(document).on('click', '.layer-button-ask', function (event) {
  328. var evt = event || window.event;
  329. var th = null;
  330. if( $(evt.target).is('a') ){
  331. th = $(evt.target);
  332. }else{
  333. th = $($(evt.target).closest('a'));
  334. }
  335. layer.prompt({
  336. title: "失败原因",
  337. formType: 0,
  338. maxlength: 250,
  339. area: ['600px', '180px']
  340. },
  341. function (value, index, elem){
  342. layer.close(index);
  343. $.ajax({
  344. type: "post",
  345. url: th.data('url'),
  346. data: {
  347. mark: value
  348. },
  349. dataType: 'json',
  350. success: function (data1) {
  351. layer.msg(data1.message);
  352. refresh();
  353. }
  354. });
  355. });
  356. });
  357. });
  358. //> 手动触发一次刷新事件
  359. function refresh() {
  360. $("button[name='refresh']").trigger('click');
  361. }
  362. // - - - - - - - - - - - - - - - - - - - - bootstrap-table - - - - - - - - - - - - - - - - -
  363. //> ajax 请求参数
  364. $.ajaxSetup({
  365. headers: {
  366. 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  367. },
  368. type: 'post',
  369. dataType: 'json'
  370. });
  371. //> 字段定义 使用 formatter:yesOrNo
  372. // bool_data:{
  373. // 'class' : 'cursor', //> 当前控制样式
  374. // 'url' : 'javascript:;', //> 当前链接Url地址;不写默认值 post 形式
  375. // 'table' : 'table', //> 修改当前表名称 table ; 修改字段来自当前的field字段值
  376. // 'pk' : 'id' //> 主键名称不写默认id主键名称
  377. // }
  378. function yesOrNo(value,row,index) {
  379. bool_datum = this.bool_data;
  380. //> value 当前字段值
  381. //> row 当前tr行元素对象
  382. //> index 当前行索引 0,1,2~...
  383. if( value > 0 ){
  384. return '<i class="fa fa-check-circle checkJ '+(bool_datum.class?bool_datum.class:'')+'" data-field='+(this.field)+(bool_datum.url?' data-url='+bool_datum.url:'')+(bool_datum.table?' data-table='+bool_datum.table:'')+(bool_datum.pk?' data-pk='+bool_datum.pk:'')+' data-id='+row.id+' data-bool="true" style="color: green;font-size: 24px;"></i>';
  385. }else{
  386. return '<i class="fa fa-times-circle checkJ '+(bool_datum.class?bool_datum.class:'')+'" data-field='+(this.field)+(bool_datum.url?' data-url='+bool_datum.url:'')+(bool_datum.table?' data-table='+bool_datum.table:'')+(bool_datum.pk?' data-pk='+bool_datum.pk:'')+' data-id='+row.id+' data-bool="false" style="font-size: 24px;"></i>';
  387. }
  388. }
  389. function yesOrNoTwo(value,row,index) {
  390. bool_datum = this.bool_data;
  391. //> value 当前字段值
  392. //> row 当前tr行元素对象
  393. //> index 当前行索引 0,1,2~...
  394. if( value > 0 ){
  395. return '<i class="fa fa-check-circle '+(bool_datum.class?bool_datum.class:'')+'" data-field='+(this.field)+(bool_datum.url?' data-url='+bool_datum.url:'')+(bool_datum.table?' data-table='+bool_datum.table:'')+(bool_datum.pk?' data-pk='+bool_datum.pk:'')+' data-id='+row.id+' data-bool="true" style="color: green;font-size: 24px;"></i>';
  396. }else{
  397. return '<i class="fa fa-times-circle '+(bool_datum.class?bool_datum.class:'')+'" data-field='+(this.field)+(bool_datum.url?' data-url='+bool_datum.url:'')+(bool_datum.table?' data-table='+bool_datum.table:'')+(bool_datum.pk?' data-pk='+bool_datum.pk:'')+' data-id='+row.id+' data-bool="false" style="font-size: 24px;"></i>';
  398. }
  399. }
  400. //> 使用规则
  401. // input_data: {
  402. // 'class' : 'cursor', //> 当前样式
  403. // 'url' : 'javascript', //> url存在 及请求指定地址修改数据
  404. // 'table' : 'table', //> url为空时采用,
  405. // 'pk' : 'id' //> 默认修改主键名称 不写 默认id为主键
  406. // }
  407. //> sort 排序字段更改
  408. function inputData(value,row,index) {
  409. input_datum = this.input_data; //> 获取上面input_data数据
  410. var html = '';
  411. html = '<input type="text" min="1" max="100" data-field="'+(this.field)+'" data-id="'+row.id+'" data-old="'+value+'" class="text-center classJ input-data '+(input_datum.class?input_datum.class:'')+'" value="'+value+'" '+(input_datum.url?' data-url='+input_datum.url:'')+(input_datum.pk?' data-pk='+input_datum.pk:'')+(input_datum.table?' data-table='+input_datum.table:'')+'>';
  412. return html;
  413. }
  414. //> bind 点击事件
  415. $(document).on('click','.input-data',function (event) {
  416. var evt = event || window.event;
  417. var th = $(evt.target);
  418. th.removeClass('classJ');
  419. th.prop('type','number');
  420. });
  421. //> 失去焦点
  422. $(document).on('blur','.input-data',function (event) {
  423. var evt = event || window.event;
  424. var th = $(evt.target);
  425. th.addClass('classJ');
  426. th.prop('type','text');
  427. var value = th.val(); //> 新修改的值
  428. var old = th.data('old'); //> 旧值
  429. var table = th.data('table'); //> table 表名称
  430. var num = new Number(value);
  431. var value_t = num.toLocaleString();
  432. var value_tt = parseInt(value_t.replace( /\,/g ,'' ));
  433. if( value_tt > 100 || value_tt <= 0){
  434. th.val(old);
  435. return false;
  436. }else{
  437. if( value == old ){
  438. return false;
  439. }else{
  440. var url = '';
  441. //> 判断是否请求
  442. if( th.url == undefined ){
  443. url = window.Domain + '/admin/update_sort';
  444. }else{
  445. url = th.url;
  446. }
  447. $.ajax({
  448. url: url,
  449. type: 'post',
  450. dataType: 'json',
  451. data: {
  452. value: value,
  453. id: th.data('id'),
  454. field: th.data('field'),
  455. table: table
  456. },
  457. success: function (data) {
  458. if( data.status == 0 ){
  459. //> 请求成功
  460. th.attr('data-old',data.value);
  461. th.val(data.value);
  462. }else if( data.status == 1 ){
  463. th.val(old);
  464. layer.msg('保存失败!!!',{icon:2,time:2000});
  465. }else{
  466. th.val(old);
  467. layer.msg('非法修改数据!!!',{icon:4,time:2000});
  468. }
  469. },
  470. error: function () {
  471. th.val(old);
  472. layer.msg('请求失败,网络问题!!!',{icon:4,time:2000});
  473. }
  474. });
  475. }
  476. }
  477. });
  478. //> 字段使用 formatter:thumbFormatter
  479. function thumbFormatter(value, row, index) {
  480. var html = '';
  481. if (value) {
  482. html = '<i class="fa fa-picture-o thumbHover" style="font-size:21px;" data-img="'+value+'"></i>';
  483. }
  484. return html;
  485. }
  486. function cthumbFormatter(value, row, index) {
  487. var html = '';
  488. if (value) {
  489. html = '<i class="fa fa-picture-o t_thumbHover" style="font-size:21px;" data-img="'+value+'"></i>';
  490. // for (var img_key in value){
  491. // html += '<i class="fa fa-picture-o t_thumbHover" style="font-size:21px;" data-img="'+value[img_key]+'"></i> ';
  492. // }
  493. }
  494. return html;
  495. }
  496. function thumbFormatterNum(value, row, index) {
  497. var html = '';
  498. console.log(value);
  499. if (value) {
  500. for (var img_key in value){
  501. html += '<i class="fa fa-picture-o thumbHover" style="font-size:21px;" data-img="'+value[img_key]+'"></i> ';
  502. }
  503. }
  504. return html;
  505. }
  506. function operateFormatterSH(value, row, index) {
  507. if( row.status == 1 ){
  508. if (this.btn_group) {
  509. var html = '<div class="btn-group">';
  510. var btns;
  511. if (typeof this.btn_group == 'function') {
  512. btns = this.btn_group(row, index);
  513. } else {
  514. btns = this.btn_group;
  515. }
  516. var item;
  517. var pkId = this.pkId?this.pkId:'id';
  518. for(var i in btns) {
  519. item = btns[i];
  520. url = item.url?item.url:'';
  521. url = url.replace('-val-', row[pkId]);
  522. confirm_url = item.confirm_url?item.confirm_url:'';
  523. confirm_url = confirm_url.replace('-val-', row[pkId]);
  524. title = item.title?item.title:'edit';
  525. name = item.name?item.name:'';
  526. console.log(name);
  527. html += '<a href="'+url+'" class="btn btn-sm '+(item.class?item.class:'btn-white')+'" data-index="'+index+'"'+(item.target?' target="'+item.target+'"':'"')+(confirm_url?' data-url="'+confirm_url+'"':'')+(name?' data-name="'+name+'"':'')+(title?' data-title="'+title+'"':'')+'>'+item.name+'</a>';
  528. }
  529. html += '</div>';
  530. }
  531. return html;
  532. }
  533. else{
  534. return "-";
  535. }
  536. }
  537. //构造操作的按钮 formatter:operateFormatter 预留字段skip表示跳过
  538. // btn_group:[
  539. // {
  540. // 'name' : '编辑',
  541. // 'url' : '{{ route('cars.edit', ['id'=>'-val-'])}}'
  542. // },
  543. // {
  544. // 'name' : '删除',
  545. // 'class' : 'deleteBtn', //> class标签
  546. // 'target': '_self', //> 标签跳转方式
  547. // 'url' : '{{ route('cars.delete', ['id'=>'-val-'])}}',
  548. // 'confirm_url': '{{ route('cars.delete', ['id'=>'-val-'])}}' //> 确认按钮
  549. // }
  550. // ]
  551. function operateFormatter(value, row, index) {
  552. if (this.btn_group) {
  553. var html = '<div class="btn-group">';
  554. var btns;
  555. if (typeof this.btn_group == 'function') {
  556. btns = this.btn_group(row, index);
  557. } else {
  558. btns = this.btn_group;
  559. }
  560. var item;
  561. var pkId = this.pkId?this.pkId:'id';
  562. for(var i in btns) {
  563. item = btns[i];
  564. if( row.skip && item.skip ){
  565. continue;
  566. }
  567. if( row.skip_one && item.skip_one ){
  568. continue;
  569. }
  570. if( row.skip_tow && item.skip_tow ){
  571. continue;
  572. }
  573. url = item.url?item.url:'';
  574. url = url.replace('-val-', row[pkId]);
  575. confirm_url = item.confirm_url?item.confirm_url:'';
  576. confirm_url = confirm_url.replace('-val-', row[pkId]);
  577. title = item.title?item.title:'edit';
  578. name = item.name?item.name:'';
  579. zIndex = item.zIndex?item.zIndex:'';
  580. html += '<a href="'+url+'" class="btn btn-sm '+(item.class?item.class:'btn-white')+'" data-index="'+index+'"'+(item.target?' target="'+item.target+'"':'"')+(confirm_url?' data-url="'+confirm_url+'"':'')+(zIndex?' data-zIndex="'+zIndex+'"':'99')+(name?' data-name="'+name+'"':'')+(title?' data-title="'+title+'"':'')+(item.areaWidth?' data-area-width="'+item.areaWidth+'"':'')+(item.areaHeight?' data-area-height="'+item.areaHeight+'"':'')+(item.maxWidth?' data-max-width="'+item.maxWidth+'"':'')+(item.maxHeight?' data-max-height="'+item.maxHeight+'"':'')+'>'+item.name+'</a>';
  581. }
  582. if( html == '<div class="btn-group">' ){
  583. html += '--</div>';
  584. }else{
  585. html += '</div>';
  586. }
  587. }
  588. return html;
  589. }
  590. //> a标签
  591. function aHttp(value, row, index) {
  592. var a = '';
  593. if( value ){
  594. a = '<a href="'+value+'" target="_blank">'+value+'</a>';
  595. }
  596. return a;
  597. }
  598. function aHttpAddress(value, row, index) {
  599. var a = '';
  600. if( value ){
  601. str = value.substring(0,9) + '...';
  602. a = '<a class="moveR" data-stringr="'+value+'" href="https://www.yitaifang.com/accounts/'+value+'" target="_blank">'+str+'</a>';
  603. }
  604. return a;
  605. }
  606. function aHttpHash(value, row, index) {
  607. var a = '';
  608. if( value ){
  609. str = value.substring(0,9) + '...';
  610. a = '<a class="moveR" data-stringr="'+value+'" href="https://www.yitaifang.com/txs/'+value+'" target="_blank">'+str+'</a>';
  611. }
  612. return a;
  613. }
  614. //> 字段剪切
  615. function qString(value, row, index) {
  616. var str = '';
  617. if( value && value.length > 9 ){
  618. str = value.substring(0,9) + '...';
  619. return '<span class="moveR" data-stringr="'+value+'">'+str+'</span>';
  620. }
  621. return '<span>'+value+'</span>';
  622. }
  623. function qStringOrTrim(value, row, index) {
  624. var str = '';
  625. if( value && value.length > 9 ){
  626. str = value.substring(0,9) + '...';
  627. return '<span class="moveR" data-stringr="'+value+'">'+str+'</span>';
  628. }else if( value === null ){
  629. return '<span>-</span>';
  630. }
  631. return '<span>'+value+'</span>';
  632. }
  633. // 发货字段
  634. function quantityOne(value, row, index){
  635. return '<span>'+(value - 4)+'</span>';
  636. }
  637. //> bind显示事件 移入事件
  638. $(document).on('mouseover','.moveR',function (event) {
  639. var evt = event || window.event;
  640. var th = $(evt.target);
  641. window.moveR = layer.tips(th.data('stringr'),th,{tips:[3,'#20A0FF'],time:0,maxWidth:400});
  642. });
  643. //> bind 移出事件
  644. $(document).on('mouseout','.moveR',function (event) {
  645. layer.close(window.moveR);
  646. });
  647. //> bootstrap-table 请求对象
  648. var BootStrapInit = {
  649. //> 替换参数设置
  650. init: function(models,mainId,init){
  651. var that = this;
  652. that.tableSession.init(models);
  653. that.bootstrapTable(mainId,init,that);
  654. that.buttonFormSearch(init,that); //> 搜索按钮绑定
  655. },
  656. //> bootstrap-table 插件调用
  657. bootstrapTable: function (mainId,init,that) {
  658. var tableSession = that.tableSession;
  659. var options = {
  660. searchForm: 'searchForm', //> 表单搜索id 自定义属性 【*】
  661. url: "", //> 请求url
  662. method: "post", //请求类型 POST 、GET
  663. contentType: 'application/json', //发送到服务器数据类型(请求头 application/json形式)
  664. dataType: 'json', //请求返回数据类型 json
  665. toolbar: '#toolbar', //工具按钮用哪个容器
  666. search: false, //显示搜索框(根据客户端搜索意义不大;未请求后台获取数据)
  667. showRefresh: true, //是否显示刷新按钮 (根据url地址请求数据)
  668. showColumns: true, //是否显示所有的列
  669. minimumCountColumns: 2, //最少允许的列数,
  670. striped: true, //隔行变色
  671. pagination: true, //是否显示分页(*)
  672. sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
  673. pageNumber: tableSession.getPage(), //初始化加载第一页,默认第一页
  674. pageSize: tableSession.getPageSize(),//每页的记录行数(*)
  675. pageList: [10, 15, 25, 50, 100], //可供选择的每页的行数(*)
  676. paginationHAlign: 'right', //指定分页条在水平方向上位置 left / right
  677. onlyInfoPagination: false, //true只显示总数 不显示 分页条
  678. cache: false, //是否使用缓存 false:禁用AJAX缓存
  679. sortName: tableSession.getSortedBy(),//默认排序字段
  680. sortable: true, //是否启用排序
  681. sortOrder: tableSession.getOrderBy(),//排序方式
  682. queryParams: that.queryParamsData, //传递参数(*)重写方法
  683. clickToSelect: false, //是否启用点击选中行(对checkbox或rediobox属性有用)
  684. idField: 'id', //指定主键列
  685. uniqueId: "id", //每一行的唯一标识,一般为主键列(在tr添加属性data-uniqueid='id'值)
  686. showToggle:false, //是否显示详细视图和列表视图的切换按钮
  687. cardView: false, //是否显示详细视图
  688. detailView: false, //是否显示父子表
  689. showPaginationSwitch: true, //隐藏/显示分页条 默认显示
  690. columns: [],
  691. onPageChange:function(number, size){//当前页码改变
  692. tableSession.setPage(number);
  693. tableSession.setPageSize(size);
  694. tableSession.save();
  695. },
  696. onSort: function (name,order) {
  697. tableSession.setOrderBy(name);
  698. tableSession.setSortedBy(order);
  699. tableSession.save();
  700. },
  701. onRefresh: function () {
  702. tableSession.setPage(1);
  703. tableSession.save();
  704. }
  705. };
  706. //> 合并配置
  707. $.extend(options,init);
  708. //> 调用Bootstrap-table插件
  709. $('#'+mainId).bootstrapTable(options);
  710. },
  711. //> 请求代参方法
  712. queryParamsData: function (params) {
  713. var sort = null;
  714. var order = null;
  715. if( params.sort === 'asc' || params.sort === 'desc' ){
  716. sort = params.sort;
  717. order = params.order;
  718. }else{
  719. sort = params.order;
  720. order = params.sort;
  721. }
  722. //> params 对象包含指定参数 limit、offset、order、search、sort
  723. var formData = {
  724. limit: params.limit, //页面大小
  725. offset: params.offset, //页码
  726. orderBy: order, //> order 排序字段
  727. sortedBy: sort, //> asc | desc
  728. search: params.search, //> 搜索字段以及搜索规则
  729. pageSize: params.limit, //> 当前页数据 后台分页函数接收该参数paginate($this->request->pageSize)
  730. page: params.offset/params.limit + 1, //> 当前页码
  731. searchJoin: 'and'
  732. };
  733. //> 自定义参数数据
  734. var temp = {};
  735. //> 获取指定搜索数据
  736. this.searchForm === undefined? formId = this.searchForm: formId = 'searchForm';
  737. var th = $(document).find('#'+formId);
  738. var searchDatum = [];
  739. //> 处理 input 输入框数据
  740. $(th).find('input').each(function(index,element){
  741. var name = $.trim($(element).prop('name'));
  742. var value = $.trim($(element).val());
  743. if( value !== '' ){
  744. searchDatum.push(name+':'+value);
  745. }
  746. });
  747. //> 处理 select 下拉框、输入数据
  748. $(th).find('select').each(function (index,element) {
  749. var name = $.trim($(element).prop('name'));
  750. var value = $.trim($(element).val());
  751. if( value !== '' ){
  752. searchDatum.push(name+':'+value);
  753. }
  754. });
  755. if( searchDatum.length !== 0 ){
  756. //> 合并需要字符串
  757. temp.search = searchDatum.join(';');
  758. }
  759. console.log('-------------------------------');
  760. return $.extend(formData,temp);
  761. },
  762. tableSession: { //> H5对象存储
  763. data:{}, //> 需要存储的数据
  764. index: null,
  765. init: function (index) {
  766. this.index = index;
  767. this.data = sessionStorage.getItem(this.index);
  768. if ( this.data == null ){
  769. this.data = {pageSize:15,page:1,orderBy:null,sortedBy:null};
  770. } else {
  771. this.data = JSON.parse(this.data);
  772. }
  773. },
  774. getData: function(){
  775. return this.data;
  776. },
  777. getPage: function () {
  778. return this.data.page;
  779. },
  780. setPage: function (page) {
  781. this.data.page = page;
  782. },
  783. getPageSize: function () {
  784. return this.data.pageSize;
  785. },
  786. setPageSize: function (pageSize) {
  787. this.data.pageSize = pageSize;
  788. },
  789. getOrderBy: function () {
  790. return this.data.orderBy;
  791. },
  792. setOrderBy: function (order) {
  793. this.data.orderBy = order;
  794. },
  795. getSortedBy: function () {
  796. return this.data.sortedBy;
  797. },
  798. setSortedBy: function(sortedBy){
  799. this.data.sortedBy = sortedBy;
  800. },
  801. save: function () {
  802. sessionStorage.setItem(this.index,JSON.stringify(this.data));
  803. }
  804. },
  805. buttonFormSearch: function (config,that) { //> 搜索按钮绑定
  806. config.searchForm === undefined? formId = config.searchForm: formId = 'searchForm';
  807. if( $(document).find('form').is('#'+formId) ){
  808. //> bind搜索按钮
  809. $(document).find('#'+formId).on('click',' button[type="button"]',function(event){
  810. if( $(document).find('div.bootstrap-table ul.pagination li').length > 3 && !$(document).find('div.bootstrap-table ul.pagination li').eq(1).is('.active') ){
  811. $(document).find('div.bootstrap-table ul.pagination li').eq(1).find('a').trigger('click');
  812. }else{
  813. refresh(); //> 刷新页面
  814. }
  815. });
  816. }
  817. }
  818. };
  819. //> 加载自定义皮肤 样式
  820. layer.config({
  821. extend: 'my-skin/skin.css'
  822. });
  823. //> 绑定删除按钮
  824. $(document).on('click','.deleteBtn',function (event) {
  825. var evt = event || window.event;
  826. var _check = $($(evt.target).closest('tr')).find('input[name="btSelectItem"]');
  827. _check.prop('checked',true);
  828. var index = layer.open({
  829. type: 0,
  830. content: '确认是否删除操作?',
  831. icon: 3,
  832. title: false,
  833. btn: ['删除','取消'],
  834. skin: 'demo-class-one',
  835. closeBtn: 1,
  836. anim:4,
  837. scrollbar:false,
  838. yes: function(){
  839. layer.close(index);
  840. url = $(evt.target).data('url');
  841. tr = $(evt.target).closest('tr');
  842. deleteAjax(tr,url);
  843. return false;
  844. },
  845. btn2: function () {
  846. //> 阻止事件冒泡
  847. evt.preventDefault();
  848. //> 关闭层
  849. layer.close(index);
  850. _check.prop('checked',false);
  851. return false;
  852. },
  853. cancel: function () {
  854. //> 阻止事件冒泡
  855. evt.preventDefault();
  856. //> 关闭层
  857. layer.close(index);
  858. _check.prop('checked',false);
  859. return false;
  860. }
  861. });
  862. //> 阻止a标签默认事件
  863. return false;
  864. });
  865. // 恢复
  866. $(document).on('click','.restoreBtn',function (event) {
  867. var evt = event || window.event;
  868. var _check = $($(evt.target).closest('tr')).find('input[name="btSelectItem"]');
  869. _check.prop('checked',true);
  870. var index = layer.open({
  871. type: 0,
  872. content: '确认是否执行恢复操作?',
  873. icon: 3,
  874. title: false,
  875. btn: ['恢复','取消'],
  876. skin: 'demo-class-one',
  877. closeBtn: 1,
  878. anim:4,
  879. scrollbar:false,
  880. yes: function(){
  881. layer.close(index);
  882. url = $(evt.target).data('url');
  883. tr = $(evt.target).closest('tr');
  884. deleteAjax(tr,url);
  885. return false;
  886. },
  887. btn2: function () {
  888. //> 阻止事件冒泡
  889. evt.preventDefault();
  890. //> 关闭层
  891. layer.close(index);
  892. _check.prop('checked',false);
  893. return false;
  894. },
  895. cancel: function () {
  896. //> 阻止事件冒泡
  897. evt.preventDefault();
  898. //> 关闭层
  899. layer.close(index);
  900. _check.prop('checked',false);
  901. return false;
  902. }
  903. });
  904. //> 阻止a标签默认事件
  905. return false;
  906. });
  907. //> 删除调用ajax
  908. function deleteAjax(tr,url) {
  909. $.ajax({
  910. url: url,
  911. type: 'post',
  912. data: {},
  913. dataType: 'json',
  914. success: function ( returnDatum ) {
  915. if( returnDatum.status === 0 ){
  916. //> 删除成功
  917. $(tr).remove(); //> 删除指定行
  918. //> 提示删除信息
  919. layer.msg('操作成功',{
  920. icon: 1,
  921. time: 1500
  922. });
  923. }else if( returnDatum.status === 1 ){
  924. //> 提示删除信息
  925. layer.msg(returnDatum.message,{
  926. icon: 2,
  927. time: 2000
  928. });
  929. }else{
  930. layer.msg(returnDatum.message,{
  931. icon: 4,
  932. time: 2000
  933. });
  934. }
  935. },
  936. error: function () {
  937. layer.msg('服务器繁忙,请稍后再试!!!',{
  938. icon:3,
  939. time:2000
  940. });
  941. }
  942. });
  943. }
  944. //> 绑定点击按钮 formatter:yesOrNo 函数调用ajax
  945. $(document).on('click',".checkJ",function(event){
  946. var evt = event || window.event;
  947. var th = $(evt.target);
  948. var id = th.data('id');
  949. var table = th.data('table');
  950. var field = th.data('field');
  951. var url = th.data('url')?th.data('url'):'';
  952. var pk = th.data('pk')?th.data('pk'):'id';
  953. if( !url ){url = window.Domain + '/admin/switch';}
  954. $.ajax({
  955. url: url,
  956. type: "POST",
  957. data: {'id' : id,'field' : field,'table' : table,'pk' : pk},
  958. success: function (msg) {
  959. if( msg.status == 0 ){
  960. if( msg.value ){
  961. //> true
  962. th.removeClass('fa-times-circle');
  963. th.removeAttr('style');
  964. th.css({color: 'green',fontSize: '24px'});
  965. th.addClass('fa-check-circle');
  966. }else{
  967. //> false
  968. th.removeClass('fa-check-circle');
  969. th.removeAttr('style');
  970. th.css({fontSize: '24px'});
  971. th.addClass('fa-times-circle');
  972. }
  973. }else{
  974. //> 修改失败
  975. layer.msg(msg.message,{icon:2,time:2000});
  976. }
  977. },
  978. error: function () {
  979. layer.msg('服务器繁忙,请稍后再试!!!',{icon:3,time:2000});
  980. }
  981. });
  982. });
  983. //> 多项绑定删除按钮
  984. $(document).on('click','#sendInfo',function(event){
  985. var evt = event || window.event;
  986. var data = [];
  987. //> 提示对话框
  988. index = layer.open({
  989. type: 0,
  990. content: '是否执行本操作?',
  991. icon: 3,
  992. title: false,
  993. btn: ['执行','取消'],
  994. skin: 'demo-class-one',
  995. closeBtn: 1,
  996. anim:6,
  997. yes: function(){
  998. layer.close(index);
  999. if( ! $(evt.target).is('button') ){
  1000. url = $($(evt.target).closest('button')).data('url');
  1001. }else{
  1002. url = $(evt.target).data('url');
  1003. }
  1004. destroyIds(url,[].join(';'));
  1005. return false;
  1006. },
  1007. btn2: function () {
  1008. //> 阻止事件冒泡
  1009. evt.preventDefault();
  1010. //> 关闭层
  1011. layer.close(index);
  1012. return false;
  1013. },
  1014. cancel: function () {
  1015. //> 阻止事件冒泡
  1016. evt.preventDefault();
  1017. //> 关闭层
  1018. layer.close(index);
  1019. return false;
  1020. }
  1021. });
  1022. });
  1023. //> 多项绑定删除按钮
  1024. $(document).on('click','#deleteAll',function(event){
  1025. var evt = event || window.event;
  1026. var th = $(document).find('table tbody tr');
  1027. var data = [];
  1028. th.each(function (index,value) {
  1029. bool = $(value).is('.selected');
  1030. if( bool ){
  1031. data.push($(value).data('uniqueid'));
  1032. }
  1033. });
  1034. if( data.length === 0 ) {
  1035. layer.msg('请选择删除选项',{icon:3,time:2000});
  1036. return false;
  1037. }else{
  1038. //> 提示对话框
  1039. index = layer.open({
  1040. type: 0,
  1041. content: '确认是否批量删除操作?',
  1042. icon: 3,
  1043. title: false,
  1044. btn: ['删除','取消'],
  1045. skin: 'demo-class-one',
  1046. closeBtn: 1,
  1047. anim:6,
  1048. yes: function(){
  1049. layer.close(index);
  1050. if( ! $(evt.target).is('button') ){
  1051. url = $($(evt.target).closest('button')).data('url');
  1052. }else{
  1053. url = $(evt.target).data('url');
  1054. }
  1055. destroyIds(url,data.join(';'));
  1056. return false;
  1057. },
  1058. btn2: function () {
  1059. //> 阻止事件冒泡
  1060. evt.preventDefault();
  1061. //> 关闭层
  1062. layer.close(index);
  1063. return false;
  1064. },
  1065. cancel: function () {
  1066. //> 阻止事件冒泡
  1067. evt.preventDefault();
  1068. //> 关闭层
  1069. layer.close(index);
  1070. return false;
  1071. }
  1072. });
  1073. }
  1074. });
  1075. function destroyIds(url,params) {
  1076. $.ajax({
  1077. url: url,
  1078. type: 'post',
  1079. data: {'params':params},
  1080. success: function(returnDatum){
  1081. if( returnDatum.status ){
  1082. layer.msg(returnDatum.message,{icon:2,time:2000});
  1083. }else{
  1084. layer.msg('操作成功!',{icon:1,time:1500});
  1085. refresh();
  1086. }
  1087. },
  1088. error: function(){
  1089. layer.msg('服务器繁忙,请稍后再试!!!',{icon:3,time:2000});
  1090. }
  1091. });
  1092. }
  1093. //> WeChat刷新缓存
  1094. $(document).on('click','#refresh-wx-datum',function (event) {
  1095. var evt = event || window.event;
  1096. var url = content = "";
  1097. var _this = null;
  1098. //> 提示对话框
  1099. if( ! $(evt.target).is('button') ){
  1100. _this = $($(evt.target).closest('button'));
  1101. url = $($(evt.target).closest('button')).data('url');
  1102. }else{
  1103. _this = $(evt.target);
  1104. url = $(evt.target).data('url');
  1105. }
  1106. content = "确认刷新"+_this.data('title')+"!?不建议多次刷新缓存";
  1107. var __wx_index = layer.open({
  1108. type: 0,
  1109. title: false,
  1110. content: content,
  1111. icon: 4,
  1112. btn: ['确定','删除'],
  1113. yes: function () {
  1114. layer.close( __wx_index );
  1115. $.ajax({
  1116. type: 'post',
  1117. url: url,
  1118. data: {},
  1119. dataType: 'json',
  1120. success: function (msg) {
  1121. if( msg.status === 0 ){
  1122. layer.msg(msg.message,{
  1123. icon: 1,
  1124. time: 2000
  1125. });
  1126. }else{
  1127. layer.msg(msg.message,{
  1128. icon: 1,
  1129. time: 1500
  1130. });
  1131. }
  1132. },
  1133. error: function () {
  1134. layer.msg('服务器繁忙,请稍后再试!!!',{icon:3,time:2000});
  1135. }
  1136. });
  1137. },
  1138. cancel: function () {
  1139. layer.close( __wx_index );
  1140. }
  1141. });
  1142. });
  1143. // 绑定复制按钮
  1144. $(document).on('click', '.copyNoticeLink', function (event) {
  1145. var evt = event || window.event;
  1146. var th = null;
  1147. if( $(evt.target).is('a') ){
  1148. th = $(evt.target);
  1149. }else{
  1150. th = $($(evt.target).closest('a'));
  1151. }
  1152. var oInput = document.createElement('input');
  1153. oInput.value = th.data('url');
  1154. document.body.appendChild(oInput);
  1155. oInput.select(); // 选择对象
  1156. document.execCommand("Copy"); // 执行浏览器复制命令
  1157. oInput.className = 'oInput';
  1158. oInput.style.display='none';
  1159. layer.msg("复制成功!");
  1160. });