CheckData.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * User: Mike
  4. * Email: m@9026.com
  5. * Date: 2016/6/28
  6. * Time: 16:49
  7. */
  8. namespace App\Widget\Tools;
  9. class CheckData {
  10. /**
  11. * 选择数据
  12. * @param $id 唯一编号
  13. * @param $dataUrl
  14. * @param $dataName 隐藏域
  15. * @param $field 数据
  16. * @param $data 默认数据
  17. * @param int $num 限制数量
  18. */
  19. public function run($id,$dataUrl,$dataName='data',$field=['id'=>'编号','name'=>'商品名称'],$data=[],$dataKey='id',$num=9999) {
  20. $callBack = "checkDataCallBack" . $id;
  21. $getData = "getData" . $id;
  22. $dataUrl = U($dataUrl,['callBack'=>$callBack,'getData'=>$getData]);
  23. $html ="<a id='{$id}_button' class='btn btn-success'>选择数据</a>";
  24. $th = "";
  25. $td = "";
  26. $dataTd = "";
  27. foreach($field as $key=>$val) {
  28. $th .="<th data-field='$key'>$val</th>";
  29. $td .= "<td><input type='hidden' name='$dataName\[$key\][]' value='\" + data.$key + \"'/> \"+data.$key+\"</td>";
  30. }
  31. foreach($data as $val) {
  32. $dataTd .= "<tr data-key=\"{$val[$dataKey]}\" align='center'>";
  33. foreach($field as $k=>$v) {
  34. $dataTd .= "<td><input type='hidden' name='{$dataName}[$k][]' value='{$val[$k]}'/>{$val[$k]}</td>";
  35. }
  36. $dataTd .= "<td><a href='#' onclick='$(this).parent().parent().remove();'>删除</a></td></tr>";
  37. }
  38. $html .= <<<EOF
  39. <div class='ng-scope img-input-block list'>
  40. <table id="checkDataTable$id" class='table table-striped table-bordered table-hover dataTables-example dataTable'>
  41. <thead>
  42. <tr>
  43. $th
  44. <th data-field='action' data-formatter='actionFormatter' data-events='actionEvents'>操作</th>
  45. </tr>
  46. </thead>
  47. <tbody>
  48. $dataTd
  49. </tbody>
  50. </table>
  51. </div>
  52. <script type='text/javascript'>
  53. $(function() {
  54. $("#{$id}_button").click(function() {
  55. layer.open({
  56. type: 2,
  57. title: '选择数据',
  58. shadeClose: true,
  59. shade: 0.8,
  60. area: ['80%', '80%'],
  61. maxmin: true,
  62. content: '$dataUrl',
  63. btn: ['完成选择'],
  64. yes:function(index, layero){
  65. layer.close(index);
  66. },
  67. end:function(index,msg){ }
  68. });
  69. });
  70. });
  71. function $callBack(index,data,checked) {
  72. dataTr = $('#checkDataTable$id tbody').find('tr[data-key="'+index+'"]');
  73. if(checked) {
  74. html = "<tr data-key="+index+" align='center'>";
  75. html +="$td";
  76. html +="<td><a href='#' onclick='$(this).parent().parent().remove();'>删除</a></td></tr>";
  77. //如果一条数据,那么处理逻辑就是替换
  78. if($num ==1) {
  79. $('#checkDataTable$id tbody').html(html);
  80. return 1;
  81. }
  82. if(dataTr.length>0) {
  83. return true;
  84. }
  85. if($('#checkDataTable$id tbody tr').length>$num-1) {
  86. layer.msg("最多选择{$num}条数据");
  87. return false;
  88. }
  89. $('#checkDataTable$id tbody').append(html);
  90. }else{
  91. if(dataTr.length>0) {
  92. dataTr.remove();
  93. }
  94. }
  95. return true;
  96. }
  97. function $getData() {
  98. var keys = [];
  99. dataTr = $('#checkDataTable$id tbody tr').each(function() {
  100. keys.push($(this).data('key').toString());
  101. });
  102. console.log(keys);
  103. return keys;
  104. }
  105. var arr = [ "xml", "html", "css", "js" ];
  106. </script>
  107. EOF;
  108. return $html;
  109. }
  110. }