_tablejs.php 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. <script>
  2. var $tableConfig = JSON.parse('<?php echo json_encode(Yii::$app->controller->tableConfig);?>');
  3. var $tableTitle = JSON.parse('<?php echo json_encode(Yii::$app->controller->tableTitle);?>');
  4. var $table = $('#table');
  5. var $rowdata = JSON.parse('<?php echo json_encode(Yii::$app->controller->result);?>');;
  6. if($tableConfig!=null&&$tableConfig.fixed)
  7. {
  8. if($(".main-wrapper").length==1)
  9. {
  10. var max_width = $(".main-wrapper").width()-25;
  11. }
  12. else
  13. {
  14. var max_width = $(".main-wrapper").eq(1).width()-25;
  15. }
  16. $('#fixed_table_box').css({'max-width':max_width+'px'})
  17. }
  18. function renderChart(chartdata) {
  19. if (chartdata && $(".card-charts").length == 1) {
  20. var myChart = [], i = 1;
  21. $.each(chartdata, function (key, opt) {
  22. myChart[i] = echarts.init(document.getElementById(key), 'walden');
  23. if (opt && typeof opt === "object") {
  24. myChart[i].setOption(opt, true);
  25. }
  26. i++;
  27. })
  28. }
  29. }
  30. renderChart($rowdata.chartdata)
  31. function loadData(getall) {
  32. getall==0 && layer.msg('请求中,请稍候...', { icon: 16 ,shade: 0.2,time:20000 });
  33. var data = $.extend({getall: getall}, $("#searchform").serializeJson());
  34. $.get($tableConfig.url, data, function (res) {
  35. $table.bootstrapTable('load', res.rows)
  36. layer.closeAll();
  37. getall==0 && renderChart(res.chartdata);
  38. if(res.needgetall){
  39. setTimeout(function () {
  40. loadData(1)
  41. },800);
  42. }
  43. })
  44. }
  45. function reLoad() {
  46. if($tableConfig.pagination)
  47. {
  48. var pageNumber = $table.bootstrapTable('getOptions').pageNumber; // 获取当前页码
  49. $table.bootstrapTable('refreshOptions',{pageNumber:pageNumber}); // 指定页码
  50. initTable();
  51. }
  52. else
  53. {
  54. //$table.bootstrapTable('destroy');
  55. loadData(0);
  56. }
  57. //$('.admin-table').removeClass("table-bordered");
  58. }
  59. function initTable()
  60. {
  61. if($tableConfig.tree)
  62. {
  63. var start = 1;
  64. $table.bootstrapTable({
  65. //url: $tableConfig.url,
  66. data: $rowdata.rows || [],
  67. idField: $tableConfig.idField,
  68. showColumns: false,
  69. showHeader:$tableConfig.showHeader!=false?true:false,
  70. showExport:true, //是否显示导出按钮
  71. columns: $tableTitle,
  72. treeShowField: $tableConfig.treeShowField,
  73. parentIdField: $tableConfig.parentIdField,
  74. toolbarAlign:'right',//工具栏的位置
  75. exportDataType:'basic',
  76. exportTypes: ['excel'],
  77. height:$tableConfig.height>0?$tableConfig.height:null,
  78. showExport:true,
  79. exportOptions: {
  80. fileName: $tableConfig.exportFileName?$tableConfig.exportFileName:'tableExport', //file name setting
  81. },
  82. queryParams : function(params) {//上传服务器的参数
  83. //console.log(Date.parse(new Date()),'queryParams')
  84. var temp = {};
  85. temp = $.extend(temp,$("#searchform").serializeJson());
  86. return temp;
  87. },
  88. onPostBody: function() {
  89. //console.log(Date.parse(new Date()),'onPostBody')
  90. var columns = $table.bootstrapTable('getOptions').columns
  91. if (columns && columns[0][1].visible) {
  92. $table.treegrid({
  93. treeColumn: typeof $tableConfig.treeColumn!='undefined'?$tableConfig.treeColumn:1,
  94. initialState: $tableConfig.expand?'expanded':'collapsed',
  95. expanderExpandedClass: 'layui-icon layui-icon-down', // 展开时,图标样式
  96. expanderCollapsedClass: 'layui-icon layui-icon-right', // 折叠时,图标样式
  97. onChange: function() {
  98. $table.bootstrapTable('resetView')
  99. }
  100. })
  101. }
  102. $(".table").removeClass('table-striped');
  103. $(".treegrid-collapsed:even").css('background-color', '#f8f9fa');
  104. $(".table tr:not(.treegrid-collapsed):even").css('background-color', '#f8f9fa');
  105. if ($(".treegrid-expander").length > 0 && $tableConfig.expand != 'expanded') {
  106. $(".treegrid-expander")[0].click()
  107. }
  108. if ($rowdata.needgetall && start){
  109. start = 0;
  110. var data = $.extend({getall: 1}, $("#searchform").serializeJson());
  111. setTimeout(function () {
  112. $.get($tableConfig.url, data, function (res) {
  113. if ($rowdata.rows.length != res.rows.length) {
  114. $table.bootstrapTable('load', res.rows)
  115. //renderChart(res.chartdata)
  116. }
  117. })
  118. },800);
  119. }
  120. //针对树状表格出现的重复情况的处理(仅后台菜单管理)
  121. if($tableConfig.parentIdField=='parent_hash')
  122. {
  123. var indexs = [];
  124. $table.find('tr').each(function(){
  125. if($.inArray($(this).data('index'),indexs)!=-1)
  126. {
  127. $(this).remove();
  128. }
  129. else
  130. {
  131. indexs[indexs.length] = $(this).data('index');
  132. }
  133. })
  134. }
  135. $('.editUnit').editable({
  136. inputclass:'form-control-sm',
  137. params: function(params) {
  138. params.table = $tableConfig.table;
  139. params.field = params.name;
  140. return params;
  141. },
  142. ajaxOptions: {
  143. type: 'get',
  144. dataType: 'json'
  145. },
  146. success: function(result, newValue) {
  147. if(result.error==1)
  148. {
  149. Toast.fire({icon: 'error',title: result.msg})
  150. }else{
  151. Toast.fire({icon: 'success',title: result.msg})
  152. }
  153. }
  154. });
  155. //为了让右侧操作菜单全部显示,需要调整表格高度
  156. if($(".admin-table").length>0)
  157. {
  158. var operUnitLength = $("ul.dropdown-menu ").eq(0).children('li').length;
  159. var dropmenuHeight = operUnitLength*40;
  160. if(dropmenuHeight>0)
  161. {
  162. var min_height = 160+dropmenuHeight;
  163. $(".fixed-table-body").css({'min-height':min_height+'px','overflow-y':'hidden'});
  164. $(".bootstrap-table").css({'min-height':$(".fixed-table-container").height()+'px'});
  165. }
  166. }
  167. //图片支持点击预览
  168. $('.image-popup').magnificPopup({type:"image",closeOnContentClick:!0,closeBtnInside:!1,fixedContentPos:!0,mainClass:"mfp-no-margins mfp-with-zoom",image:{verticalFit:!0},zoom:{enabled:!0,duration:300}})
  169. },
  170. onLoadSuccess:function(result) {
  171. //console.log(Date.parse(new Date()), 'onLoadSuccess')
  172. if (result.chartdata && $(".card-charts").length == 1) {
  173. var myChart = [], i = 1;
  174. $.each(result.chartdata, function (key, opt) {
  175. myChart[i] = echarts.init(document.getElementById(key), 'walden');
  176. if (opt && typeof opt === "object") {
  177. myChart[i].setOption(opt, true);
  178. }
  179. i++;
  180. })
  181. }
  182. },
  183. onCheck:function(row){
  184. var datas = $table.bootstrapTable('getData');
  185. // 勾选子类
  186. selectChilds(datas,row,$tableConfig.idField,$tableConfig.parentIdField,true);
  187. // 勾选父类
  188. selectParentChecked(datas,row,$tableConfig.idField,$tableConfig.parentIdField);
  189. $table.bootstrapTable('load', datas);
  190. },
  191. onUncheck:function(row){
  192. var datas = $table.bootstrapTable('getData');
  193. selectChilds(datas,row,$tableConfig.idField,$tableConfig.parentIdField,false);
  194. $table.bootstrapTable('load', datas);
  195. },
  196. onUncheckAll:function(){
  197. var datas = $table.bootstrapTable('getData');
  198. checkAll(datas,false)
  199. },
  200. onCheckAll:function(){
  201. var datas = $table.bootstrapTable('getData');
  202. checkAll(datas,true)
  203. },
  204. })
  205. if(!$rowdata.rows){
  206. $table.bootstrapTable('refreshOptions',{url:$tableConfig.url,data:[]});
  207. }
  208. }
  209. else
  210. {
  211. $table.bootstrapTable({
  212. url: $tableConfig.url,
  213. idField: $tableConfig.idField,
  214. striped:true,
  215. showColumns: false,
  216. showHeader:$tableConfig.showHeader!=false?true:false,
  217. fixedColumns: $tableConfig.fixed?true:false,
  218. fixedNumber: +parseInt($tableConfig.fixedNum),
  219. fixedRightNumber: +parseInt($tableConfig.fixedRightNumber),
  220. columns: $tableTitle,
  221. pagination: $tableConfig.pagination,
  222. pageList: [10, 15 , 20, 25, 30, 50, 100, 200,'所有'],
  223. sidePagination: "server",
  224. pageSize: $tableConfig.pagesize,
  225. paginationHAlign:"right",
  226. paginationDetailHAlign:"left",
  227. showJumpTo: true,
  228. toolbarAlign:'right',//工具栏的位置
  229. exportDataType:'basic',
  230. exportTypes: ['excel'],
  231. height:$tableConfig.height>0?$tableConfig.height:null,
  232. showExport:true,
  233. exportOptions: {
  234. fileName: $tableConfig.exportFileName?$tableConfig.exportFileName:'tableExport', //file name setting
  235. },
  236. queryParams : function(params) {//上传服务器的参数
  237. var temp = {//如果是在服务器端实现分页,limit、offset这两个参数是必须的
  238. limit : params.limit, // 每页显示数量
  239. offset : params.offset, // SQL语句起始索引
  240. page : (params.offset / params.limit) + 1, //当前页码
  241. sort: params.sort, //排序列名
  242. sortOrder: params.order //排位命令(desc,asc)
  243. };
  244. temp = $.extend(temp,$("#searchform").serializeJson());
  245. return temp;
  246. },
  247. onLoadSuccess:function(result){
  248. $(".table").addClass('table-striped');
  249. //if(result.rows){
  250. // var t = result.rows[0], d = t && (t.year_info && t.month_info ? (t.year_info + '-' + (t.month_info+'').padStart(2,'0')) :(t.statistical_month ? (t.statistical_month+'').substr(0,4) + '-' + (t.statistical_month+'').substr(4,2) :''));
  251. // d && $('[data-toggle="datepicker"]').val(d);
  252. // }
  253. $(".no-records-found td").css({'color':'#000'});
  254. //为了让右侧操作菜单全部显示,需要调整表格高度
  255. if($(".admin-table").length>0)
  256. {
  257. var operUnitLength = $("ul.dropdown-menu").eq(0).children('li').length;
  258. var dropmenuHeight = operUnitLength*40;
  259. if(dropmenuHeight>0)
  260. {
  261. /*if($tableConfig.fixed==true&&result.total>1)
  262. {
  263. var min_height = 60+dropmenuHeight;
  264. }
  265. else
  266. {
  267. var min_height = 110+dropmenuHeight;
  268. }*/
  269. var min_height = 110+dropmenuHeight;
  270. $(".fixed-table-body").css({'min-height':min_height+'px','overflow-y':'hidden'});
  271. $(".bootstrap-table").css({'min-height':$(".fixed-table-container").height()+'px'});
  272. }
  273. //调整底部分页位置
  274. if($tableConfig.fixed!=true)
  275. {
  276. var heightDiff = $(".fixed-table-container").height()-$(".admin-table").height();
  277. $(".fixed-table-pagination").css({'margin-top':'-'+(heightDiff-10)+'px'});
  278. }
  279. //调整固定列时候内容高度(避免遮挡底部滚动条)
  280. if($tableConfig.fixed==true)
  281. {
  282. $('.fixed-columns .fixed-table-body').css({"min-height":($('.fixed-columns .fixed-table-body').height()-20)+'px'});
  283. }
  284. /* if($(".fixed-table-pagination").html()=='')
  285. {
  286. $(".fixed-table-body").css({'min-height':'110px','overflow-y':'hidden'});
  287. }*/
  288. }
  289. if($(".fixed-columns-right").length>0 && $table.bootstrapTable('getData').length>0)
  290. {
  291. $(".fixed-columns-right").css({"width":"20%"})
  292. }
  293. if($(".fixed-columns-right").length>0&&$(".fixed-columns").html()==''){
  294. $(".fixed-columns-right").hide();
  295. }
  296. },
  297. onPostBody: function() {
  298. $(".no-records-found td").css({'color':'#fff'});
  299. $('.editUnit').editable({
  300. inputclass:'form-control-sm',
  301. params: function(params) {
  302. params.table = $tableConfig.table;
  303. params.field = params.name;
  304. return params;
  305. },
  306. ajaxOptions: {
  307. type: 'get',
  308. dataType: 'json'
  309. },
  310. success: function(result, newValue) {
  311. if(result.error==1)
  312. {
  313. Toast.fire({icon: 'error',title: result.msg})
  314. }
  315. else
  316. {
  317. Toast.fire({icon: 'success',title: result.msg})
  318. }
  319. }
  320. });
  321. //表格列表重置样式
  322. if($(".admin-table").length>0)
  323. {
  324. if($(".fixed-table-pagination").html()!='')
  325. {
  326. $(".bootstrap-table").css({position:'relative',height:($(".bootstrap-table").height()+10)+'px'});
  327. }
  328. $(".fixed-table-loading").css({height:($(".admin-table tbody").height())+'px','border-bottom':'none','padding-top':'10px'});
  329. }
  330. //图片支持点击预览
  331. $('.image-popup').magnificPopup({type:"image",closeOnContentClick:!0,closeBtnInside:!1,fixedContentPos:!0,mainClass:"mfp-no-margins mfp-with-zoom",image:{verticalFit:!0},zoom:{enabled:!0,duration:300}})
  332. }
  333. })
  334. }
  335. }
  336. //表格加载数据时候的样式
  337. function loadingTemplate(message) {
  338. return '<div class="row"><a href="javascript:void(0);" class="text-dark"><i class="bx bx-loader bx-spin font-size-18 align-middle me-2"></i>加载中... </a></div>'
  339. }
  340. //格式化可编辑单元格样式
  341. function editFormatter(value, row, index,field){
  342. var pk;
  343. $.each(row, function(key, val) {
  344. if(key==$tableConfig.idField)
  345. {
  346. pk = val;
  347. }
  348. });
  349. if (value == null || value == "" || value == undefined) value = '-';
  350. return '<a href="javascript:;" data-pk="'+pk+'" id="'+field+'" data-url="'+$tableConfig.setFieldUrl+'" class="editUnit" data-title="'+value+'" data-type="text">'+value+'</a>';
  351. }
  352. //格式化复选框样式
  353. function checkboxFormatter(value, row, index,field) {
  354. var checkedStr = '';
  355. if (row.check == true) {
  356. checkedStr = "checked";
  357. }
  358. else
  359. {
  360. checkedStr = "";
  361. }
  362. return '<div class="form-check table-checkbox">'
  363. + '<input data-index="'+index+'" class="form-check-input" '+checkedStr+' name="btSelectItem" type="checkbox" >'
  364. +'<label class="form-check-label"></label></div>';
  365. }
  366. //序号格式化
  367. function numberFormatter(value,row,index)
  368. {
  369. var pageSize = $table.bootstrapTable('getOptions').pageSize;
  370. var pageNumber = $table.bootstrapTable('getOptions').pageNumber;
  371. return pageSize * (pageNumber - 1) + index + 1;
  372. }
  373. //数字格式化
  374. function numericFormatter(value,row,index)
  375. {
  376. if (value === null || value === "" || value === undefined)
  377. return "-";
  378. return Number(value).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  379. }
  380. //数字格式化保留两位小数
  381. function numeric1Formatter(value,row,index)
  382. {
  383. if (/[^0-9\.]/.test(value))
  384. return "-";
  385. if (value === null || value === "" || value == undefined)
  386. return "-";
  387. var s = Number(value).toFixed(2);
  388. s = s.toString().replace(/^(\d*)$/, "$1.");
  389. s = (s + "00").replace(/(\d*\.\d{2})\d*/, "$1");
  390. s = s.replace(".", ",");
  391. var re = /(\d)(\d{3},)/;
  392. while (re.test(s))
  393. s = s.replace(re, "$1,$2");
  394. s = s.replace(/,(\d{2})$/, ".$1");
  395. return s;
  396. }
  397. //开关渲染(仅适用于bool值)
  398. function switchFormatter(value, row, index,field)
  399. {
  400. var pk;
  401. $.each(row, function(key, val) {
  402. if(key==$tableConfig.idField)
  403. {
  404. pk = val;
  405. }
  406. });
  407. var checkedHtml = value==1?'checked':'';
  408. return '<div class="form-check switch-check-unit"><input data-pk="'+pk+'" data-field="'+field+'"'
  409. +' value="'+value+'" onchange="switchChange(this)" '
  410. + checkedHtml
  411. + ' id="switch-'+field+'-'+index+'" type="checkbox" switch="success" class="row-switch" />'
  412. + '<label class="switch-check-label" for="switch-'+field+'-'+index+'" data-on-label="开" data-off-label="关"></label></div>';
  413. }
  414. //开关事件
  415. function switchChange(obj)
  416. {
  417. var value = obj.checked==true?1:0;
  418. var table = $tableConfig.table;
  419. var field = $(obj).data('field');
  420. var pk = $(obj).data('pk');
  421. var url = $tableConfig.setFieldUrl;
  422. var loading = layer.load(2);
  423. $.get(url,{table:table,pk:pk,field:field,value:value},function(result){
  424. layer.close(loading);
  425. if(result.error==1)
  426. {
  427. Toast.fire({icon: 'error',title: result.msg})
  428. }
  429. else
  430. {
  431. Toast.fire({icon: 'success',title: result.msg})
  432. if($tableConfig.fixed)reLoad();
  433. }
  434. })
  435. }
  436. function doExport()
  437. {
  438. if($tableConfig.tree) {
  439. $table.table2excel({
  440. filename: '<?php echo Yii::$app->controller->tableConfig['exportFileName'];?>.xlsx',
  441. sheetName: 'Sheet1'
  442. });
  443. }else {
  444. console.log("doexport");
  445. $table.one('post-body.bs.table', function () {
  446. $table.table2excel({
  447. filename: '<?php echo Yii::$app->controller->tableConfig['exportFileName'];?>.xlsx',
  448. sheetName: 'Sheet1'
  449. });
  450. $table.bootstrapTable('togglePagination');
  451. });
  452. $table.bootstrapTable('togglePagination');
  453. }
  454. }
  455. function operateFormatter(value, row, index) {
  456. var pk;
  457. $.each(row, function(key, val) {
  458. if(key==$tableConfig.idField)
  459. {
  460. pk = val;
  461. }
  462. });
  463. if($tableConfig.dropmenu)
  464. {
  465. var html = '<div class="dropdown">';
  466. html += '<a href="javascript:;" class="dropdown-toggle card-drop" data-bs-toggle="dropdown" aria-expanded="false" > ';
  467. html += '<i class="mdi mdi-dots-horizontal font-size-18"></i></a>';
  468. html += '<ul class="dropdown-menu dropdown-menu-end">';
  469. <?php
  470. if(is_array(Yii::$app->controller->operTableMenu))foreach(Yii::$app->controller->operTableMenu as $menu){
  471. $url = $menu['action']?Yii::$app->controller->createRealUrl($menu['module'].'/'.$menu['controller'].'/'.$menu['action']):'';
  472. $params = [];
  473. $url = explode("?",$url);
  474. if(!empty($url[1]))$params = explode("&",$url[1]);
  475. if(!empty($menu['data']))
  476. {
  477. $data = $menu['data'];
  478. if(@eval("$data;")==false)
  479. {
  480. $evalResult = $data;
  481. }
  482. else
  483. {
  484. $evalResult = @eval("$data;");
  485. }
  486. $params = array_merge($params,explode('&',$evalResult));
  487. }
  488. $url = $url[0]."?".join('&',$params);
  489. ?>
  490. var enable = true;
  491. <?php if(!empty($menu['show_function'])&&strpos($menu['show_function'],'return')===false){?>
  492. if(!(<?php echo $menu['show_function'];?>)) enable = false;
  493. <?php }?>
  494. if(enable)
  495. {
  496. html += '<li><a href="javascript:;" data-title="<?php echo Yii::t('resource',$menu['name']);?>" data-type="<?php echo $menu['menu_type'];?>" data-url="<?php echo $url;?>&'+$tableConfig.idField+'='+pk+'" data-large="<?php echo $menu['pop_large'];?>" class="dropdown-item tablebtn"><i class="<?php echo $menu['icon_class'];?> font-size-16 me-1"></i> <?php echo Yii::t('resource',$menu['name']);?></a></li>'
  497. }
  498. <?php }?>
  499. html += '</ul></div>';
  500. return html;
  501. }
  502. else
  503. {
  504. var html = '<div class="">';
  505. <?php
  506. if(is_array(Yii::$app->controller->operTableMenu))foreach(Yii::$app->controller->operTableMenu as $menu){
  507. $url = $menu['action']?Yii::$app->controller->createRealUrl($menu['module'].'/'.$menu['controller'].'/'.$menu['action']):'';
  508. $params = [];
  509. $url = explode("?",$url);
  510. if(!empty($url[1]))$params = explode("&",$url[1]);
  511. if(!empty($menu['data']))
  512. {
  513. $data = $menu['data'];
  514. if(@eval("$data;")==false)
  515. {
  516. $evalResult = $data;
  517. }
  518. else
  519. {
  520. $evalResult = @eval("$data;");
  521. }
  522. $params = array_merge($params,explode('&',$evalResult));
  523. }
  524. $url = $url[0]."?".join('&',$params);
  525. ?>
  526. var disabledTxt= '';
  527. <?php if(!empty($menu['show_function'])&&strpos($menu['show_function'],'return')===false){?>
  528. if(!(<?php echo $menu['show_function'];?>)) disabledTxt = 'disabled';
  529. <?php }?>
  530. html += '<button data-title="<?php echo Yii::t('resource',$menu['name']);?>" data-type="<?php echo $menu['menu_type'];?>" data-url="<?php echo $url;?>&'+$tableConfig.idField+'='+pk+'" '+disabledTxt+' data-large="<?php echo $menu['pop_large'];?>" type="button" class="tablebtn btn btn-outline-<?php echo $menu['btn_class'];?> btn-sm waves-effect waves-light me-1">'
  531. html += '<?php echo Yii::t('resource',$menu['name']);?>'
  532. html += '</button>'
  533. <?php }?>
  534. html += '</div>';
  535. return html;
  536. }
  537. }
  538. //返回选中的复选框值
  539. function getIdSelections() {
  540. if($tableConfig.tree)
  541. {
  542. var result = [];
  543. var datas = $table.bootstrapTable('getData');
  544. for(i=0;i<datas.length;i++)
  545. {
  546. if(datas[i].check)
  547. {
  548. result[result.length] = datas[i][$tableConfig.idField];
  549. }
  550. }
  551. return result;
  552. }
  553. else
  554. {
  555. return $.map($table.bootstrapTable('getSelections'), function (row) {
  556. var result;
  557. $.each(row, function(key, val) {
  558. if(key==$tableConfig.idField)
  559. {
  560. result = val;
  561. }
  562. });
  563. return result;
  564. })
  565. }
  566. }
  567. function checkAll(datas,checked)
  568. {
  569. for(var i in datas){
  570. datas[i].check=checked;
  571. }
  572. }
  573. /**
  574. * 选中父项时,同时选中子项
  575. * @param datas 所有的数据
  576. * @param row 当前数据
  577. * @param id id 字段名
  578. * @param pid 父id字段名
  579. */
  580. function selectChilds(datas,row,id,pid,checked) {
  581. row.check = checked;
  582. for(var i in datas){
  583. if(datas[i][pid] == row[id]){
  584. datas[i].check=checked;
  585. selectChilds(datas,datas[i],id,pid,checked);
  586. };
  587. }
  588. }
  589. function selectParentChecked(datas,row,id,pid){
  590. row.check = true;
  591. for(var i in datas){
  592. if(datas[i][id] == row[pid]){
  593. datas[i].check=true;
  594. selectParentChecked(datas,datas[i],id,pid);
  595. };
  596. }
  597. }
  598. window.operateEvents = {
  599. 'click .like': function (e, value, row, index) {
  600. alert('You click like action, row: ' + JSON.stringify(row))
  601. },
  602. 'click .remove': function (e, value, row, index) {
  603. $table.bootstrapTable('remove', {
  604. field: 'id',
  605. values: [row.id]
  606. })
  607. }
  608. }
  609. $(function(){
  610. //可编辑单元格设置
  611. if($('#table').length>0)
  612. {
  613. $.fn.editable.defaults.mode = 'inline';
  614. $.fn.editableform.template = '<form class="form-inline editableform col-sm-auto"><div class="control-group"><div><div class="editable-input"></div><div class="editable-buttons"></div></div><div class="editable-error-block"></div></div></form>';
  615. $.fn.editableform.buttons = '<button type="submit" class="editable-submit btn btn-success btn-sm"><i class="mdi mdi-check"></i></button><button type="button" class="editable-cancel btn btn-danger btn-sm "><i class="mdi mdi-close"></i></button>';
  616. //获取父级窗口高度
  617. var height = $(window).height()-0;
  618. if($('.searchbox ').length>0)
  619. {
  620. height = height-$('.searchbox').height();
  621. }
  622. if($(".bglegend").length>0)
  623. {
  624. height = height-$(".bglegend").height()-40;
  625. }
  626. if($(".cartab").length>0)
  627. {
  628. height = height-$(".cartab").height();
  629. }
  630. if($(".main-wrapper-inner .card-charts").length>0)
  631. {
  632. height = height-$(".main-wrapper-inner .card-charts").height();
  633. }
  634. if($tableConfig.height)
  635. {
  636. $tableConfig.height = height;
  637. $("body").css("overflow-y","hidden");
  638. }
  639. initTable();
  640. //$(".th-inner").css("width","100px");
  641. }
  642. $(document).on("click", ".tablebtn", function(){
  643. var modalType = $(this).data('type');
  644. var modalTitle = $(this).data('title');
  645. var ids = [];
  646. if($(this).hasClass('multioper')){
  647. ids = getIdSelections();
  648. }
  649. else
  650. {
  651. ids = getIdSelections();
  652. }
  653. if($.inArray(modalType,[5,6,7,8,11,12,13,14])!=-1)
  654. {
  655. var sizeClass = $.inArray(modalType,[7,8,13,14])!=-1?'modal-fullscreen':($(this).data('large')==1?'modal-lg':'');
  656. var maxHeight = $.inArray(modalType,[7,8,13,14])!=-1?'':'max-height:500px';
  657. var haveBtn = $.inArray(modalType,[5,7,11,13])!=-1?true:false;
  658. var modalHtml = '';
  659. modalHtml += '<div class="modal fade" id="mymodal" tabindex="-1" aria-labelledby="mymodalLabel" aria-hidden="true">';
  660. modalHtml += '<div class="modal-dialog '+sizeClass+' modal-dialog-scrollable">';
  661. modalHtml += '<div class="modal-content" style="'+maxHeight+'">';
  662. modalHtml += '<div class="modal-header">';
  663. modalHtml += '<h5 class="modal-title" id="mymodalLabel">'+modalTitle+'</h5>';
  664. modalHtml += '<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="layer.closeAll();"></button>';
  665. modalHtml += '</div>';
  666. modalHtml += '<div class="modal-body" >';
  667. modalHtml += '<div class="row"><p class="text-center" style="margin-top:15px;"><i class="fa fa-spinner fa-spin fa-2x"></i></p></div>';
  668. modalHtml += '</div>';
  669. if(haveBtn){
  670. modalHtml += '<div class="modal-footer">';
  671. modalHtml += '<button type="button" class="btn btn-secondary closeModal" data-bs-dismiss="modal" onclick="layer.closeAll();">关闭</button>';
  672. modalHtml += '<button type="button" class="btn btn-primary submitBtn" >提交</button>';
  673. modalHtml += '</div>';
  674. }
  675. modalHtml += '</div>';
  676. modalHtml += '</div>';
  677. modalHtml += '</div>';
  678. //之前存在模态窗口删除
  679. if ($("#mymodal").length > 0) {
  680. //删除之前存在的ueditor
  681. $('.kiivoeditor').each(function(){
  682. UE.delEditor($(this).attr('id'));
  683. }
  684. )
  685. $("#mymodal").remove();
  686. $('.uploadModal').remove();
  687. //纠正bootstrap 颜色选择器显示bug
  688. if($tableConfig.removesp)$('.sp-container').remove();
  689. }
  690. //插入新的模态窗口html
  691. $('body').append(modalHtml);
  692. $.get($(this).data('url'),{},function(html){
  693. $("#mymodal .modal-body").html(html);
  694. //美化下拉框
  695. $('select.form-select').each(function()
  696. {
  697. if(!$(this).hasClass('original')){dselect(this);}
  698. })
  699. })
  700. //显示模态窗口
  701. $('#mymodal').modal('show');
  702. var saveFlag = true;//避免多次提交
  703. //提交表单
  704. $('.submitBtn').click(function(){
  705. var form = $('#modal-form');
  706. var submitId = 'modal-form-submit';
  707. var layuiSubmitBtn = $('#'+submitId);
  708. var closeBtn = $('.closeModal');
  709. //YII2 原生表单验证提交
  710. if(!form.hasClass('layui-form'))
  711. {
  712. form.on('afterValidate',function(){
  713. if(form.find(".has-error").length==0)
  714. {
  715. var loading = layer.load(2);
  716. var formAction = $(form).attr('action');
  717. if(ids.length==0)
  718. {
  719. var data = $(form).serialize();
  720. }
  721. else
  722. {
  723. var data = $(form).serialize()+'&ids='+ids.join(",");
  724. }
  725. $.post(formAction,data,function(result){
  726. layer.close(loading);
  727. closeBtn.trigger('click');
  728. if(result.error==1)
  729. {
  730. Toast.fire({
  731. icon: 'error',
  732. title: result.msg,
  733. didClose: (toast) => {
  734. // if($tableConfig.refresh)reLoad();
  735. }
  736. })
  737. }else{
  738. Toast.fire({
  739. icon: 'success',
  740. title: result.msg,
  741. didClose: (toast) => {
  742. if($tableConfig.refresh)reLoad();
  743. }
  744. })
  745. }
  746. })
  747. }
  748. })
  749. $(document).on("submit", form, function(e){return false;})
  750. form.trigger('submit');
  751. }
  752. if(form.hasClass('layui-form'))
  753. {
  754. layui.form.on('submit('+ submitId +')', function(data){
  755. var loading = layer.load(2);
  756. var formAction = $(form).attr('action');
  757. if(ids.length==0)
  758. {
  759. var data = $(form).serialize();
  760. }
  761. else
  762. {
  763. var data = $(form).serialize()+'&ids='+ids.join(",");
  764. }
  765. $.post(formAction,data,function(result){
  766. layer.close(loading);
  767. closeBtn.trigger('click');
  768. if(result.error==1)
  769. {
  770. Toast.fire({
  771. icon: 'error',
  772. title: result.msg,
  773. didClose: (toast) => {
  774. // if($tableConfig.refresh)reLoad();
  775. }
  776. })
  777. }else{
  778. Toast.fire({
  779. icon: 'success',
  780. title: result.msg,
  781. didClose: (toast) => {
  782. if($tableConfig.refresh)reLoad();
  783. }
  784. })
  785. }
  786. })
  787. return false;
  788. })
  789. layuiSubmitBtn.trigger('click');
  790. }
  791. })
  792. }
  793. else if(modalType==3)//批量操作
  794. {
  795. multiOperate($(this).data('url'),ids);
  796. }
  797. else if(modalType==4)//批量删除
  798. {
  799. multiDelConfirm($(this).data('url'),ids);
  800. }
  801. else if(modalType==15)//删除记录
  802. {
  803. delConfirm($(this).data('url'));
  804. }
  805. else if(modalType==16||modalType==2)//跳转链接
  806. {
  807. window.location.href=$(this).data('url');
  808. }
  809. else if(modalType==9)//Ajax
  810. {
  811. var loading = layer.load(2);
  812. $.get($(this).data('url'),{},function(result){
  813. layer.close(loading);
  814. if(result.error==1)
  815. {
  816. Toast.fire({
  817. icon: 'error',
  818. title: result.msg,
  819. didClose: (toast) => {
  820. // if($tableConfig.refresh)reLoad();
  821. }
  822. })
  823. }else{
  824. Toast.fire({
  825. icon: 'success',
  826. title: result.msg,
  827. didClose: (toast) => {
  828. if($tableConfig.refresh)reLoad();
  829. }
  830. })
  831. }
  832. })
  833. }
  834. else
  835. {
  836. //刷新
  837. if(modalType==10)
  838. {
  839. reLoad();
  840. }
  841. }
  842. })
  843. //搜索
  844. $(document).on("click", "#searchform-btn", function(){
  845. reLoad();
  846. })
  847. // $('.admin-table').removeClass("table-bordered");
  848. })
  849. </script>