作者 开飞机的舒克

后台更新

@@ -25,7 +25,12 @@ class Study extends Backend @@ -25,7 +25,12 @@ class Study extends Backend
25 $this->view->assign("genderList", $this->model->getGenderList()); 25 $this->view->assign("genderList", $this->model->getGenderList());
26 } 26 }
27 27
28 - 28 + /**
  29 + * 导入
  30 + */
  31 + public function import(){
  32 + return parent::import();
  33 + }
29 34
30 /** 35 /**
31 * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法 36 * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
@@ -69,4 +74,69 @@ class Study extends Backend @@ -69,4 +74,69 @@ class Study extends Backend
69 return $this->view->fetch(); 74 return $this->view->fetch();
70 } 75 }
71 76
  77 + //导出数据
  78 + public function export(){
  79 + if ($this->request->isPost()){
  80 + set_time_limit(0);//设置时间限制
  81 + $ids = $this->request->post('ids'); //获取数据的所有id
  82 + $excel = new \PHPExcel(); // 生成新的excel对象
  83 + $excel->getProperties()
  84 + ->setCreator("FastAdmin") //设置作者
  85 + ->setLastModifiedBy("FastAdmin") //设置上次修改者
  86 + ->setTitle("考勤打卡表") //设置表格标题
  87 + ->setSubject("Subject"); //设置主题
  88 + $excel->getDefaultStyle()->getFont()->setName('楷体'); //设置默认字体
  89 + $excel->getDefaultStyle()->getFont()->setSize(15); //设置默认字体大小
  90 + $excel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
  91 + $excel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
  92 + $excel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
  93 + $excel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
  94 + $excel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
  95 + $excel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
  96 + $excel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
  97 + $excel->getActiveSheet()->getColumnDimension('H')->setWidth(10);
  98 + // 开始操作excel表
  99 + $worksheet = $excel->setActiveSheetIndex(0) //操作第一个工作表
  100 + ->setCellValue('A1','序号') //设置表格标题名称
  101 + ->setCellValue('B1','姓名') //设置表格标题名称
  102 + ->setCellValue('C1','性别')
  103 + ->setCellValue('D1','班级')
  104 + ->setCellValue('E1','学校')
  105 + ->setCellValue('F1','手环ID')
  106 + ->setCellValue('G1','学号')
  107 + ->setCellValue('H1','总积分');
  108 + if ($ids=='all' || empty($ids)){ //判断当前数据为全部或者选中的
  109 + $list = $this->model->with('school')->select();
  110 + }else{
  111 + $list = $this->model->with('school')->select($ids);
  112 + }
  113 +
  114 + foreach ($list as $k => $val){
  115 + $k = $k + 2;//表格是从2开始的
  116 + $worksheet
  117 + ->setCellValue('A'.$k,$val['id'])
  118 + ->setCellValue('B'.$k,$val['name'])
  119 + ->setCellValue('C'.$k,$val['gender']?'男':'女')
  120 + ->setCellValue('D'.$k,$val['grade'])
  121 + ->setCellValue('E'.$k,$val['school']['title'])
  122 + ->setCellValue('F'.$k,$val['unique'])
  123 + ->setCellValue('G'.$k,$val['sno'])
  124 + ->setCellValue('H'.$k,$val['earn_score']);
  125 + }
  126 +
  127 + $excel->createSheet(); //创建excel表
  128 + $title = "学生成绩".date("Y-m-dHis"); //考勤打卡数据_2023-01-07145656.xlsx
  129 + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//表明当前文件是.xlsx
  130 + header('Content-Disposition: attachment;filename="'.$title.'.xlsx"');//文件名称[考勤打卡数据_2023-01-07145656.xlsx]
  131 + header('Cache-Control: max-age=0'); //禁用缓存
  132 + header('Cache-Control: max-age=1'); //通知浏览器:1 秒之内不要烦我,自己从缓冲区中刷新。
  133 + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // 缓存过期时间(禁用缓存)
  134 + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // 上一次修改时间
  135 + header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 缓存控制:必须重新验证
  136 + header('Pragma: public'); // 可被任何缓存所缓存 http1.0协议
  137 + $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
  138 + $objWriter->save('php://output'); //保存地址
  139 + exit;
  140 + }
  141 + }
72 } 142 }
@@ -2,19 +2,21 @@ @@ -2,19 +2,21 @@
2 2
3 return [ 3 return [
4 'User_id' => '用户id', 4 'User_id' => '用户id',
  5 + 'Id' => 'ID',
5 'Avatar' => '头像', 6 'Avatar' => '头像',
6 'Name' => '姓名', 7 'Name' => '姓名',
7 'Gender' => '性别', 8 'Gender' => '性别',
8 'Gender 0' => '女', 9 'Gender 0' => '女',
9 'Gender 1' => '男', 10 'Gender 1' => '男',
10 - 'Birth' => '生日', 11 + 'Birthday' => '生日',
11 'Grade' => '班级', 12 'Grade' => '班级',
12 'School' => '学校', 13 'School' => '学校',
13 - 'Unique' => '手环ID',  
14 'Sno' => '学号', 14 'Sno' => '学号',
15 'Team_id' => '所属战队', 15 'Team_id' => '所属战队',
16 - 'Earn_score' => '积分',  
17 - 'Qrcode' => '条形码', 16 + 'Earn_score' => '总积分',
  17 + 'Phone' => '手机号',
  18 + 'Unique' => '手环ID',
  19 + 'Barcode' => '条形码',
18 'Createtime' => '创建时间', 20 'Createtime' => '创建时间',
19 'Updatetime' => '更新时间', 21 'Updatetime' => '更新时间',
20 'Team.title' => '战队昵称', 22 'Team.title' => '战队昵称',
1 <form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action=""> 1 <form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
2 2
3 <div class="form-group"> 3 <div class="form-group">
4 - <label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label> 4 + <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-name" class="form-control" name="row[name]" type="text">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
5 <div class="col-xs-12 col-sm-8"> 11 <div class="col-xs-12 col-sm-8">
6 - <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value=""> 12 + <select id="c-gender" class="form-control selectpicker" name="row[gender]">
  13 + {foreach name="genderList" item="vo"}
  14 + <option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
  15 + {/foreach}
  16 + </select>
7 </div> 17 </div>
8 </div> 18 </div>
9 <div class="form-group"> 19 <div class="form-group">
@@ -21,27 +31,9 @@ @@ -21,27 +31,9 @@
21 </div> 31 </div>
22 </div> 32 </div>
23 <div class="form-group"> 33 <div class="form-group">
24 - <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>  
25 - <div class="col-xs-12 col-sm-8">  
26 - <input id="c-name" class="form-control" name="row[name]" type="text">  
27 - </div>  
28 - </div>  
29 - <div class="form-group">  
30 - <label class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>  
31 - <div class="col-xs-12 col-sm-8">  
32 -  
33 - <select id="c-gender" class="form-control selectpicker" name="row[gender]">  
34 - {foreach name="genderList" item="vo"}  
35 - <option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>  
36 - {/foreach}  
37 - </select>  
38 -  
39 - </div>  
40 - </div>  
41 - <div class="form-group">  
42 - <label class="control-label col-xs-12 col-sm-2">{:__('Birth')}:</label> 34 + <label class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
43 <div class="col-xs-12 col-sm-8"> 35 <div class="col-xs-12 col-sm-8">
44 - <input id="c-birth" class="form-control" name="row[birth]" type="text"> 36 + <input id="c-birthday" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[birthday]" type="text">
45 </div> 37 </div>
46 </div> 38 </div>
47 <div class="form-group"> 39 <div class="form-group">
@@ -57,12 +49,6 @@ @@ -57,12 +49,6 @@
57 </div> 49 </div>
58 </div> 50 </div>
59 <div class="form-group"> 51 <div class="form-group">
60 - <label class="control-label col-xs-12 col-sm-2">{:__('Unique')}:</label>  
61 - <div class="col-xs-12 col-sm-8">  
62 - <input id="c-unique" class="form-control" name="row[unique]" type="number">  
63 - </div>  
64 - </div>  
65 - <div class="form-group">  
66 <label class="control-label col-xs-12 col-sm-2">{:__('Sno')}:</label> 52 <label class="control-label col-xs-12 col-sm-2">{:__('Sno')}:</label>
67 <div class="col-xs-12 col-sm-8"> 53 <div class="col-xs-12 col-sm-8">
68 <input id="c-sno" class="form-control" name="row[sno]" type="text"> 54 <input id="c-sno" class="form-control" name="row[sno]" type="text">
@@ -75,17 +61,29 @@ @@ -75,17 +61,29 @@
75 </div> 61 </div>
76 </div> 62 </div>
77 <div class="form-group"> 63 <div class="form-group">
78 - <label class="control-label col-xs-12 col-sm-2">{:__('Earn_score')}:</label>  
79 - <div class="col-xs-12 col-sm-8">  
80 - <input id="c-earn_score" class="form-control" step="0.01" name="row[earn_score]" type="number">  
81 - </div>  
82 - </div>  
83 - <div class="form-group">  
84 - <label class="control-label col-xs-12 col-sm-2">{:__('Qrcode')}:</label> 64 + <label class="control-label col-xs-12 col-sm-2">{:__('Phone')}:</label>
85 <div class="col-xs-12 col-sm-8"> 65 <div class="col-xs-12 col-sm-8">
86 - <input id="c-qrcode" class="form-control" name="row[qrcode]" type="text">  
87 - </div>  
88 - </div> 66 + <input id="c-phone" class="form-control" name="row[phone]" type="text">
  67 + </div>
  68 + </div>
  69 +{/* <div class="form-group">*/}
  70 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Earn_score')&cc;:</label>*/}
  71 +{/* <div class="col-xs-12 col-sm-8">*/}
  72 +{/* <input id="c-earn_score" class="form-control" step="0.01" name="row[earn_score]" type="number">*/}
  73 +{/* </div>*/}
  74 +{/* </div>*/}
  75 +{/* <div class="form-group">*/}
  76 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Unique')&cc;:</label>*/}
  77 +{/* <div class="col-xs-12 col-sm-8">*/}
  78 +{/* <input id="c-unique" class="form-control" name="row[unique]" type="number">*/}
  79 +{/* </div>*/}
  80 +{/* </div>*/}
  81 +{/* <div class="form-group">*/}
  82 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Barcode')&cc;:</label>*/}
  83 +{/* <div class="col-xs-12 col-sm-8">*/}
  84 +{/* <input id="c-barcode" class="form-control" name="row[barcode]" type="text">*/}
  85 +{/* </div>*/}
  86 +{/* </div>*/}
89 <div class="form-group layer-footer"> 87 <div class="form-group layer-footer">
90 <label class="control-label col-xs-12 col-sm-2"></label> 88 <label class="control-label col-xs-12 col-sm-2"></label>
91 <div class="col-xs-12 col-sm-8"> 89 <div class="col-xs-12 col-sm-8">
1 <form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action=""> 1 <form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
2 2
3 <div class="form-group"> 3 <div class="form-group">
4 - <label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label> 4 + <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-name" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>
5 <div class="col-xs-12 col-sm-8"> 11 <div class="col-xs-12 col-sm-8">
6 - <input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}"> 12 + <select id="c-gender" class="form-control selectpicker" name="row[gender]">
  13 + {foreach name="genderList" item="vo"}
  14 + <option value="{$key}" {in name="key" value="$row.gender"}selected{/in}>{$vo}</option>
  15 + {/foreach}
  16 + </select>
7 </div> 17 </div>
8 </div> 18 </div>
9 <div class="form-group"> 19 <div class="form-group">
@@ -20,28 +30,11 @@ @@ -20,28 +30,11 @@
20 <ul class="row list-inline faupload-preview" id="p-avatar"></ul> 30 <ul class="row list-inline faupload-preview" id="p-avatar"></ul>
21 </div> 31 </div>
22 </div> 32 </div>
23 - <div class="form-group">  
24 - <label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>  
25 - <div class="col-xs-12 col-sm-8">  
26 - <input id="c-name" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">  
27 - </div>  
28 - </div>  
29 - <div class="form-group">  
30 - <label class="control-label col-xs-12 col-sm-2">{:__('Gender')}:</label>  
31 - <div class="col-xs-12 col-sm-8">  
32 -  
33 - <select id="c-gender" class="form-control selectpicker" name="row[gender]">  
34 - {foreach name="genderList" item="vo"}  
35 - <option value="{$key}" {in name="key" value="$row.gender"}selected{/in}>{$vo}</option>  
36 - {/foreach}  
37 - </select>  
38 33
39 - </div>  
40 - </div>  
41 <div class="form-group"> 34 <div class="form-group">
42 - <label class="control-label col-xs-12 col-sm-2">{:__('Birth')}:</label> 35 + <label class="control-label col-xs-12 col-sm-2">{:__('Birthday')}:</label>
43 <div class="col-xs-12 col-sm-8"> 36 <div class="col-xs-12 col-sm-8">
44 - <input id="c-birth" class="form-control" name="row[birth]" type="text" value="{$row.birth|htmlentities}"> 37 + <input id="c-birthday" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[birthday]" type="text" value="{$row.birthday|htmlentities}">
45 </div> 38 </div>
46 </div> 39 </div>
47 <div class="form-group"> 40 <div class="form-group">
@@ -57,12 +50,6 @@ @@ -57,12 +50,6 @@
57 </div> 50 </div>
58 </div> 51 </div>
59 <div class="form-group"> 52 <div class="form-group">
60 - <label class="control-label col-xs-12 col-sm-2">{:__('Unique')}:</label>  
61 - <div class="col-xs-12 col-sm-8">  
62 - <input id="c-unique" class="form-control" name="row[unique]" type="number" value="{$row.unique|htmlentities}">  
63 - </div>  
64 - </div>  
65 - <div class="form-group">  
66 <label class="control-label col-xs-12 col-sm-2">{:__('Sno')}:</label> 53 <label class="control-label col-xs-12 col-sm-2">{:__('Sno')}:</label>
67 <div class="col-xs-12 col-sm-8"> 54 <div class="col-xs-12 col-sm-8">
68 <input id="c-sno" class="form-control" name="row[sno]" type="text" value="{$row.sno|htmlentities}"> 55 <input id="c-sno" class="form-control" name="row[sno]" type="text" value="{$row.sno|htmlentities}">
@@ -71,21 +58,33 @@ @@ -71,21 +58,33 @@
71 <div class="form-group"> 58 <div class="form-group">
72 <label class="control-label col-xs-12 col-sm-2">{:__('Team_id')}:</label> 59 <label class="control-label col-xs-12 col-sm-2">{:__('Team_id')}:</label>
73 <div class="col-xs-12 col-sm-8"> 60 <div class="col-xs-12 col-sm-8">
74 - <input id="c-team_id" data-rule="required" data-source="team/index" class="form-control selectpage" name="row[team_id]" type="text" value="{$row.team_id|htmlentities}"> 61 + <input id="c-team_id" data-rule="required" data-source="team/index" class="form-control selectpage" data-field="title" name="row[team_id]" type="text" value="{$row.team_id|htmlentities}">
75 </div> 62 </div>
76 </div> 63 </div>
77 <div class="form-group"> 64 <div class="form-group">
78 - <label class="control-label col-xs-12 col-sm-2">{:__('Earn_score')}:</label> 65 + <label class="control-label col-xs-12 col-sm-2">{:__('Phone')}:</label>
79 <div class="col-xs-12 col-sm-8"> 66 <div class="col-xs-12 col-sm-8">
80 - <input id="c-earn_score" class="form-control" step="0.01" name="row[earn_score]" type="number" value="{$row.earn_score|htmlentities}">  
81 - </div>  
82 - </div>  
83 - <div class="form-group">  
84 - <label class="control-label col-xs-12 col-sm-2">{:__('Qrcode')}:</label>  
85 - <div class="col-xs-12 col-sm-8">  
86 - <input id="c-qrcode" class="form-control" name="row[qrcode]" type="text" value="{$row.qrcode|htmlentities}">  
87 - </div>  
88 - </div> 67 + <input id="c-phone" class="form-control" name="row[phone]" type="text" value="{$row.phone|htmlentities}">
  68 + </div>
  69 + </div>
  70 +{/* <div class="form-group">*/}
  71 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Earn_score')&cc;:</label>*/}
  72 +{/* <div class="col-xs-12 col-sm-8">*/}
  73 +{/* <input id="c-earn_score" class="form-control" step="0.01" name="row[earn_score]" type="number" value="{$row.earn_score|htmlentities&cc;">*/}
  74 +{/* </div>*/}
  75 +{/* </div>*/}
  76 +{/* <div class="form-group">*/}
  77 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Unique')&cc;:</label>*/}
  78 +{/* <div class="col-xs-12 col-sm-8">*/}
  79 +{/* <input id="c-unique" class="form-control" name="row[unique]" type="number" value="{$row.unique|htmlentities&cc;">*/}
  80 +{/* </div>*/}
  81 +{/* </div>*/}
  82 +{/* <div class="form-group">*/}
  83 +{/* <label class="control-label col-xs-12 col-sm-2">{:__('Barcode')&cc;:</label>*/}
  84 +{/* <div class="col-xs-12 col-sm-8">*/}
  85 +{/* <input id="c-barcode" class="form-control" name="row[barcode]" type="text" value="{$row.barcode|htmlentities&cc;">*/}
  86 +{/* </div>*/}
  87 +{/* </div>*/}
89 <div class="form-group layer-footer"> 88 <div class="form-group layer-footer">
90 <label class="control-label col-xs-12 col-sm-2"></label> 89 <label class="control-label col-xs-12 col-sm-2"></label>
91 <div class="col-xs-12 col-sm-8"> 90 <div class="col-xs-12 col-sm-8">
@@ -8,12 +8,10 @@ @@ -8,12 +8,10 @@
8 <div id="toolbar" class="toolbar"> 8 <div id="toolbar" class="toolbar">
9 <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a> 9 <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
10 <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('study/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a> 10 <a href="javascript:;" class="btn btn-success btn-add {:$auth->check('study/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
11 - <a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('study/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>  
12 - <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('study/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>  
13 - 11 + <a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('你的权限规则')?'':'hide'}" title="导入" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload"></i> 导入</a>
  12 + <a href="javascript:;" class="btn btn-success btn-export {:$auth->check('study/export')?'':'hide'}" title="{:__('Export')}" id="btn-export-file"><i class="fa fa-download"></i> {:__('Export')}</a>
14 13
15 <div class="dropdown btn-group {:$auth->check('study/multi')?'':'hide'}"> 14 <div class="dropdown btn-group {:$auth->check('study/multi')?'':'hide'}">
16 - <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>  
17 <ul class="dropdown-menu text-left" role="menu"> 15 <ul class="dropdown-menu text-left" role="menu">
18 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li> 16 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
19 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li> 17 <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
@@ -31,7 +31,8 @@ @@ -31,7 +31,8 @@
31 "ext-pdo": "*", 31 "ext-pdo": "*",
32 "ext-bcmath": "*", 32 "ext-bcmath": "*",
33 "txthinking/mailer": "^2.0", 33 "txthinking/mailer": "^2.0",
34 - "chenbool/barcode": "^1.0" 34 + "chenbool/barcode": "^1.0",
  35 + "phpoffice/phpexcel": "^1.8"
35 }, 36 },
36 "config": { 37 "config": {
37 "preferred-install": "dist", 38 "preferred-install": "dist",
@@ -17,33 +17,88 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin @@ -17,33 +17,88 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
17 17
18 var table = $("#table"); 18 var table = $("#table");
19 19
  20 + //导出功能
  21 + $(document).on("click", ".btn-export", function () {
  22 + var ids = Table.api.selectedids(table);
  23 + var page = table.bootstrapTable('getData');
  24 + var all = table.bootstrapTable('getOptions').totalRows;
  25 + console.log(ids, page, all);
  26 + Layer.confirm("请选择导出的选项<form action='" + Fast.api.fixurl("study/export") + "' method='post' target='_blank'><input type='hidden' name='ids' value='' /><input type='hidden' name='filter' ><input type='hidden' name='op'><input type='hidden' name='search'><input type='hidden' name='columns'></form>", {
  27 + title: '导出数据',
  28 + btn: ["选中项(" + ids.length + "条)", "本页(" + page.length + "条)", "全部(" + all + "条)"],
  29 + success: function (layero, index) {
  30 + $(".layui-layer-btn a", layero).addClass("layui-layer-btn0");
  31 + }
  32 + , yes: function (index, layero) {
  33 + submitForm(ids.join(","), layero);
  34 + return false;
  35 + }
  36 + ,
  37 + btn2: function (index, layero) {
  38 + var ids = [];
  39 + $.each(page, function (i, j) {
  40 + ids.push(j.id);
  41 + });
  42 + submitForm(ids.join(","), layero);
  43 + return false;
  44 + }
  45 + ,
  46 + btn3: function (index, layero) {
  47 + submitForm("all", layero);
  48 + return false;
  49 + }
  50 + })
  51 + });
  52 + var submitForm = function (ids, layero) {
  53 + var options = table.bootstrapTable('getOptions');
  54 + console.log(options);
  55 + var columns = [];
  56 + $.each(options.columns[0], function (i, j) {
  57 + if (j.field && !j.checkbox && j.visible && j.field != 'operate') {
  58 + columns.push(j.field);
  59 + }
  60 + });
  61 + var search = options.queryParams({});
  62 + $("input[name=search]", layero).val(options.searchText);
  63 + $("input[name=ids]", layero).val(ids);
  64 + $("input[name=filter]", layero).val(search.filter);
  65 + $("input[name=op]", layero).val(search.op);
  66 + $("input[name=columns]", layero).val(columns.join(','));
  67 + $("form", layero).submit();
  68 + };
  69 +
20 // 初始化表格 70 // 初始化表格
21 table.bootstrapTable({ 71 table.bootstrapTable({
22 url: $.fn.bootstrapTable.defaults.extend.index_url, 72 url: $.fn.bootstrapTable.defaults.extend.index_url,
23 pk: 'id', 73 pk: 'id',
24 sortName: 'id', 74 sortName: 'id',
  75 + showToggle: false,//浏览模式功能关闭
  76 + showColumns: false,//显示隐藏列功能关闭
  77 + //commonSearch: false, //关闭通用搜索按钮
  78 + showExport: false,//导出功能关闭
  79 + clickToSelect: false, //是否启用点击选中
  80 + dblClickToEdit: false, //是否启用双击编辑
25 fixedColumns: true, 81 fixedColumns: true,
26 fixedRightNumber: 1, 82 fixedRightNumber: 1,
27 columns: [ 83 columns: [
28 [ 84 [
29 {checkbox: true}, 85 {checkbox: true},
30 {field: 'id', title: __('Id')}, 86 {field: 'id', title: __('Id')},
31 - {field: 'user_id', title: __('User_id')},  
32 - {field: 'avatar', title: __('Avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},  
33 {field: 'name', title: __('Name'), operate: 'LIKE'}, 87 {field: 'name', title: __('Name'), operate: 'LIKE'},
34 {field: 'gender', title: __('Gender'), searchList: {"0":__('Gender 0'),"1":__('Gender 1')}, formatter: Table.api.formatter.normal}, 88 {field: 'gender', title: __('Gender'), searchList: {"0":__('Gender 0'),"1":__('Gender 1')}, formatter: Table.api.formatter.normal},
35 - {field: 'birth', title: __('Birth'), operate: 'LIKE'}, 89 + {field: 'avatar', title: __('Avatar'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
  90 + {field: 'phone', title: __('Phone'), operate: 'LIKE'},
  91 + {field: 'team.title', title: __('Team.title'), operate: 'LIKE'},
  92 + {field: 'birthday', title: __('Birthday'),operate:false, addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime,datetimeFormat: "YYYY-MM-DD"},
36 {field: 'grade', title: __('Grade'), operate: 'LIKE'}, 93 {field: 'grade', title: __('Grade'), operate: 'LIKE'},
37 {field: 'school', title: __('School'), operate: 'LIKE'}, 94 {field: 'school', title: __('School'), operate: 'LIKE'},
38 - {field: 'unique', title: __('Unique')},  
39 {field: 'sno', title: __('Sno'), operate: 'LIKE'}, 95 {field: 'sno', title: __('Sno'), operate: 'LIKE'},
40 - {field: 'team_id', title: __('Team_id')},  
41 - {field: 'earn_score', title: __('Earn_score'), operate:'BETWEEN'},  
42 - {field: 'qrcode', title: __('Qrcode'), operate: 'LIKE'},  
43 - {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},  
44 - {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},  
45 - {field: 'team.title', title: __('Team.title'), operate: 'LIKE'},  
46 - {field: 'user.username', title: __('User.username'), operate: 'LIKE'}, 96 + // {field: 'team_id', title: __('Team_id')},
  97 + {field: 'earn_score', title: __('Earn_score'), operate:false},
  98 + {field: 'unique', title: __('Unique'), operate:false},
  99 + {field: 'barcode', title: __('Barcode'), operate:false},
  100 + // {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
  101 + // {field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
47 {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} 102 {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
48 ] 103 ]
49 ] 104 ]
@@ -7,5 +7,6 @@ $baseDir = dirname($vendorDir); @@ -7,5 +7,6 @@ $baseDir = dirname($vendorDir);
7 7
8 return array( 8 return array(
9 'Pimple' => array($vendorDir . '/pimple/pimple/src'), 9 'Pimple' => array($vendorDir . '/pimple/pimple/src'),
  10 + 'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
10 'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'), 11 'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
11 ); 12 );
@@ -9,7 +9,7 @@ return array( @@ -9,7 +9,7 @@ return array(
9 'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'), 9 'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
10 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'), 10 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
11 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'), 11 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
12 - 'think\\' => array($baseDir . '/thinkphp/library/think', $vendorDir . '/karsonzhang/fastadmin-addons/src', $vendorDir . '/topthink/think-queue/src'), 12 + 'think\\' => array($vendorDir . '/karsonzhang/fastadmin-addons/src', $baseDir . '/thinkphp/library/think', $vendorDir . '/topthink/think-queue/src'),
13 'chenbool\\' => array($vendorDir . '/chenbool/barcode/src'), 13 'chenbool\\' => array($vendorDir . '/chenbool/barcode/src'),
14 'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'), 14 'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
15 'Tx\\' => array($vendorDir . '/txthinking/mailer/src'), 15 'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
@@ -27,7 +27,7 @@ return array( @@ -27,7 +27,7 @@ return array(
27 'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'), 27 'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
28 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 28 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
29 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 29 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
30 - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'), 30 + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
31 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), 31 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
32 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), 32 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
33 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 33 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
@@ -113,8 +113,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -113,8 +113,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
113 ), 113 ),
114 'think\\' => 114 'think\\' =>
115 array ( 115 array (
116 - 0 => __DIR__ . '/../..' . '/thinkphp/library/think',  
117 - 1 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src', 116 + 0 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
  117 + 1 => __DIR__ . '/../..' . '/thinkphp/library/think',
118 2 => __DIR__ . '/..' . '/topthink/think-queue/src', 118 2 => __DIR__ . '/..' . '/topthink/think-queue/src',
119 ), 119 ),
120 'chenbool\\' => 120 'chenbool\\' =>
@@ -187,8 +187,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -187,8 +187,8 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
187 ), 187 ),
188 'Psr\\Http\\Message\\' => 188 'Psr\\Http\\Message\\' =>
189 array ( 189 array (
190 - 0 => __DIR__ . '/..' . '/psr/http-message/src',  
191 - 1 => __DIR__ . '/..' . '/psr/http-factory/src', 190 + 0 => __DIR__ . '/..' . '/psr/http-factory/src',
  191 + 1 => __DIR__ . '/..' . '/psr/http-message/src',
192 ), 192 ),
193 'Psr\\Http\\Client\\' => 193 'Psr\\Http\\Client\\' =>
194 array ( 194 array (
@@ -267,6 +267,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65 @@ -267,6 +267,10 @@ class ComposerStaticInit73f9e72fede2c36621e52f7b610bbb65
267 array ( 267 array (
268 0 => __DIR__ . '/..' . '/pimple/pimple/src', 268 0 => __DIR__ . '/..' . '/pimple/pimple/src',
269 ), 269 ),
  270 + 'PHPExcel' =>
  271 + array (
  272 + 0 => __DIR__ . '/..' . '/phpoffice/phpexcel/Classes',
  273 + ),
270 ), 274 ),
271 'H' => 275 'H' =>
272 array ( 276 array (
@@ -1245,6 +1245,76 @@ @@ -1245,6 +1245,76 @@
1245 "install-path": "../paragonie/random_compat" 1245 "install-path": "../paragonie/random_compat"
1246 }, 1246 },
1247 { 1247 {
  1248 + "name": "phpoffice/phpexcel",
  1249 + "version": "1.8.2",
  1250 + "version_normalized": "1.8.2.0",
  1251 + "source": {
  1252 + "type": "git",
  1253 + "url": "https://github.com/PHPOffice/PHPExcel.git",
  1254 + "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870"
  1255 + },
  1256 + "dist": {
  1257 + "type": "zip",
  1258 + "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/1441011fb7ecdd8cc689878f54f8b58a6805f870",
  1259 + "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870",
  1260 + "shasum": ""
  1261 + },
  1262 + "require": {
  1263 + "ext-mbstring": "*",
  1264 + "ext-xml": "*",
  1265 + "ext-xmlwriter": "*",
  1266 + "php": "^5.2|^7.0"
  1267 + },
  1268 + "require-dev": {
  1269 + "squizlabs/php_codesniffer": "2.*"
  1270 + },
  1271 + "time": "2018-11-22T23:07:24+00:00",
  1272 + "type": "library",
  1273 + "installation-source": "dist",
  1274 + "autoload": {
  1275 + "psr-0": {
  1276 + "PHPExcel": "Classes/"
  1277 + }
  1278 + },
  1279 + "notification-url": "https://packagist.org/downloads/",
  1280 + "license": [
  1281 + "LGPL-2.1"
  1282 + ],
  1283 + "authors": [
  1284 + {
  1285 + "name": "Maarten Balliauw",
  1286 + "homepage": "http://blog.maartenballiauw.be"
  1287 + },
  1288 + {
  1289 + "name": "Erik Tilt"
  1290 + },
  1291 + {
  1292 + "name": "Franck Lefevre",
  1293 + "homepage": "http://rootslabs.net"
  1294 + },
  1295 + {
  1296 + "name": "Mark Baker",
  1297 + "homepage": "http://markbakeruk.net"
  1298 + }
  1299 + ],
  1300 + "description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
  1301 + "homepage": "https://github.com/PHPOffice/PHPExcel",
  1302 + "keywords": [
  1303 + "OpenXML",
  1304 + "excel",
  1305 + "php",
  1306 + "spreadsheet",
  1307 + "xls",
  1308 + "xlsx"
  1309 + ],
  1310 + "support": {
  1311 + "issues": "https://github.com/PHPOffice/PHPExcel/issues",
  1312 + "source": "https://github.com/PHPOffice/PHPExcel/tree/master"
  1313 + },
  1314 + "abandoned": "phpoffice/phpspreadsheet",
  1315 + "install-path": "../phpoffice/phpexcel"
  1316 + },
  1317 + {
1248 "name": "phpoffice/phpspreadsheet", 1318 "name": "phpoffice/phpspreadsheet",
1249 "version": "1.19.0", 1319 "version": "1.19.0",
1250 "version_normalized": "1.19.0.0", 1320 "version_normalized": "1.19.0.0",
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 'name' => 'karsonzhang/fastadmin', 3 'name' => 'karsonzhang/fastadmin',
4 'pretty_version' => 'dev-master', 4 'pretty_version' => 'dev-master',
5 'version' => 'dev-master', 5 'version' => 'dev-master',
6 - 'reference' => 'cf512b490954a1f28e38e3588d8300ee784760b9', 6 + 'reference' => '9a8361a29c430477d49b4eccbb24941b30610f16',
7 'type' => 'project', 7 'type' => 'project',
8 'install_path' => __DIR__ . '/../../', 8 'install_path' => __DIR__ . '/../../',
9 'aliases' => array(), 9 'aliases' => array(),
@@ -67,7 +67,7 @@ @@ -67,7 +67,7 @@
67 'karsonzhang/fastadmin' => array( 67 'karsonzhang/fastadmin' => array(
68 'pretty_version' => 'dev-master', 68 'pretty_version' => 'dev-master',
69 'version' => 'dev-master', 69 'version' => 'dev-master',
70 - 'reference' => 'cf512b490954a1f28e38e3588d8300ee784760b9', 70 + 'reference' => '9a8361a29c430477d49b4eccbb24941b30610f16',
71 'type' => 'project', 71 'type' => 'project',
72 'install_path' => __DIR__ . '/../../', 72 'install_path' => __DIR__ . '/../../',
73 'aliases' => array(), 73 'aliases' => array(),
@@ -172,6 +172,15 @@ @@ -172,6 +172,15 @@
172 'aliases' => array(), 172 'aliases' => array(),
173 'dev_requirement' => false, 173 'dev_requirement' => false,
174 ), 174 ),
  175 + 'phpoffice/phpexcel' => array(
  176 + 'pretty_version' => '1.8.2',
  177 + 'version' => '1.8.2.0',
  178 + 'reference' => '1441011fb7ecdd8cc689878f54f8b58a6805f870',
  179 + 'type' => 'library',
  180 + 'install_path' => __DIR__ . '/../phpoffice/phpexcel',
  181 + 'aliases' => array(),
  182 + 'dev_requirement' => false,
  183 + ),
175 'phpoffice/phpspreadsheet' => array( 184 'phpoffice/phpspreadsheet' => array(
176 'pretty_version' => '1.19.0', 185 'pretty_version' => '1.19.0',
177 'version' => '1.19.0.0', 186 'version' => '1.19.0.0',