Study.php 5.9 KB
<?php

namespace app\admin\controller;

use app\common\controller\Backend;

/**
 * 学生管理
 *
 * @icon fa fa-circle-o
 */
class Study extends Backend
{

    /**
     * Study模型对象
     * @var \app\admin\model\Study
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new \app\admin\model\Study;
        $this->view->assign("genderList", $this->model->getGenderList());
    }

    /**
     * 导入
     */
    public function import(){
        return parent::import();
    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */


    /**
     * 查看
     */
    public function index()
    {
        //当前是否为关联查询
        $this->relationSearch = true;
        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if ($this->request->isAjax()) {
            //如果发送的来源是Selectpage,则转发到Selectpage
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $list = $this->model
                    ->with(['team','user'])
                    ->where($where)
                    ->order($sort, $order)
                    ->paginate($limit);

            foreach ($list as $row) {
                
                $row->getRelation('team')->visible(['title']);
				$row->getRelation('user')->visible(['username']);
            }

            $result = array("total" => $list->total(), "rows" => $list->items());

            return json($result);
        }
        return $this->view->fetch();
    }

    //导出数据
    public function export(){
        if ($this->request->isPost()){
            set_time_limit(0);//设置时间限制
            $ids = $this->request->post('ids'); //获取数据的所有id
            $excel = new \PHPExcel();   // 生成新的excel对象
            $excel->getProperties()
                ->setCreator("FastAdmin")           //设置作者
                ->setLastModifiedBy("FastAdmin")    //设置上次修改者
                ->setTitle("考勤打卡表")                   //设置表格标题
                ->setSubject("Subject");            //设置主题
            $excel->getDefaultStyle()->getFont()->setName('楷体');    //设置默认字体
            $excel->getDefaultStyle()->getFont()->setSize(15);        //设置默认字体大小
            $excel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
            $excel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
            $excel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
            $excel->getActiveSheet()->getColumnDimension('D')->setWidth(10);
            $excel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
            $excel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
            $excel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
            $excel->getActiveSheet()->getColumnDimension('H')->setWidth(10);
            // 开始操作excel表
            $worksheet = $excel->setActiveSheetIndex(0)    //操作第一个工作表
                ->setCellValue('A1','序号')   //设置表格标题名称
                ->setCellValue('B1','姓名')   //设置表格标题名称
                ->setCellValue('C1','性别')
                ->setCellValue('D1','班级')
                ->setCellValue('E1','学校')
                ->setCellValue('F1','手环ID')
                ->setCellValue('G1','学号')
                ->setCellValue('H1','总积分');
            if ($ids=='all' || empty($ids)){    //判断当前数据为全部或者选中的
                $list = $this->model->with('school')->select();
            }else{
                $list = $this->model->with('school')->select($ids);
            }

            foreach ($list as $k => $val){
                $k = $k + 2;//表格是从2开始的
                $worksheet
                    ->setCellValue('A'.$k,$val['id'])
                    ->setCellValue('B'.$k,$val['name'])
                    ->setCellValue('C'.$k,$val['gender']?'男':'女')
                    ->setCellValue('D'.$k,$val['grade'])
                    ->setCellValue('E'.$k,$val['school']['title'])
                    ->setCellValue('F'.$k,$val['unique'])
                    ->setCellValue('G'.$k,$val['sno'])
                    ->setCellValue('H'.$k,$val['earn_score']);
            }

            $excel->createSheet();  //创建excel表
            $title = "学生成绩".date("Y-m-dHis");    //考勤打卡数据_2023-01-07145656.xlsx
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//表明当前文件是.xlsx
            header('Content-Disposition: attachment;filename="'.$title.'.xlsx"');//文件名称[考勤打卡数据_2023-01-07145656.xlsx]
            header('Cache-Control: max-age=0'); //禁用缓存
            header('Cache-Control: max-age=1'); //通知浏览器:1 秒之内不要烦我,自己从缓冲区中刷新。
            header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // 缓存过期时间(禁用缓存)
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // 上一次修改时间
            header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 缓存控制:必须重新验证
            header('Pragma: public'); // 可被任何缓存所缓存 http1.0协议
            $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
            $objWriter->save('php://output');       //保存地址
            exit;
        }
    }
}