正在显示
12 个修改的文件
包含
312 行增加
和
105 行删除
@@ -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', |
-
请 注册 或 登录 后发表评论