fastadmin 默认是没有 export_url的 需要在js 文件里加入 export的配置 自定义的筛选条件 也都能直接自动带入了
在extend 加入 export_url
在 config 配置中加入 exportbtn:‘btn-export’
if ($(".export .exporttips").length === 0) { $(".export .dropdown-menu").prepend("<li class='exporttips alert alert-warning-light mb-0 no-border p-2'></li>") } $(".export .exporttips").html("导出记录:" + (selectedIds.length > 0 ? "选中" : "全部"));
//导出按钮事件 toolbar.on('click',Table.config.exportbtn, function(){ var search = options.queryParams({}); var filter = search.filter; var op = search.op; var _url = options.extend.export_url; var urlA = _url.indexOf('?'); if(urlA === -1){// 没有 var url = _url+'?filter='+ filter +'&op='+ op; }else { var url = _url + '&filter=' + filter + '&op=' + op; } window.location.href = url; });
index.html 加入按钮
<a href="javascript:;" class="btn btn-success btn-export {:$auth->check('order/order/export')?'':'hide'}" title="{:__('Export')}" ><i class="fa fa-download"></i> {:__('Export')}</a>
js文件加入export_url
下面是 php 导出方法
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; //图片导出
/** * 导出 */ public function export(){ $filter = $this->request->param("filter"); list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $filter = json_decode($filter,true); $map = []; if(isset($filter['information_id'])) { $map['order.information_id'] = $filter['information_id']; } if(isset($filter['create_time'])) { $start = substr($filter['create_time'],0,19); $end = substr($filter['create_time'],22); $map['order.create_time'] = ['between',[$start,$end]]; } $map['is_accept'] = 1; // 设置数据 $lists = $this->model->with(["information","user"]) ->field('order.content,order.create_time,order.remark,order.pay_time,user.username,information.title') ->where($where) ->where($map) ->where(function($query) { $query->where(["information.is_upload" => 0])->whereOr(function($query1) { $query1->where(["information.is_upload" => 1,"order.shenqingbiao"=>["neq",""]]); }); }) ->select(); $list = []; $check_status = ['-1'=>'审核未通过','0'=>'待审核','1'=>'已审核']; $status = ['-2'=>'未通过','-1'=>'已过期','0'=>'待审批','1'=>'已审批']; $pay_status = ['-1'=>'缴费驳回','0'=>'待缴费','1'=>'支付待审核','2'=>'已缴费']; foreach($lists as $key=>$item) { $content = json_decode($item['content'], true);
$list[$key]['gongzuodanwei'] = $content['gongzuodanwei']??''; $list[$key]['username'] = $item['username']??''; $list[$key]['title'] = $item['title']??''; $list[$key]['name'] = $content['name']??''; $list[$key]['idcard'] = $content['idcard']??''; $list[$key]['mobile'] = $content['mobile']??''; $list[$key]['create_time'] = $item['create_time']??''; $list[$key]['pay_time'] = $item['pay_time']??''; $list[$key]['remark'] = $item['remark']??''; $list[$key]['voucher'] = $item['voucher']??''; //check_status status pay_status $list[$key]['check_status'] = $check_status[$item['check_status']]??''; $list[$key]['status'] = $status[$item['status']]??''; $list[$key]['pay_status'] = $pay_status[$item['pay_status']]??''; if ($content["shenbaokemu"]) { $list[$key]["shenbaokemu"] = Subject::where("id","in",$content["shenbaokemu"])->column("title"); $list[$key]["shenbaokemu"] = implode(",",$list[$key]["shenbaokemu"]); } else { $list[$key]["shenbaokemu"] = ""; } $list[$key]['dianzizhaopian'] = $content['dianzizhaopian']??''; $list[$key]['idcard_front'] = $content['idcard_front']??''; $list[$key]['idcard_back'] = $content['idcard_back']??''; $list[$key]['biyezheng'] = $content['biyezheng']??''; $list[$key]['gongzuonianxian'] = $content['gongzuonianxian']??''; $list[$key]['shenqingbiao'] = $item['shenqingbiao']??''; $list[$key]['dianzizhengshu'] = $content['dianzizhengshu']??''; } $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->getStyle('A:S')->getAlignment() ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER) //设置垂直居中 ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER) //设置水平居中 ->setWrapText(true); //设置自动换行 //设置表头 $sheet->setCellValue('A1', '单位'); $sheet->setCellValue('B1', '用户'); $sheet->setCellValue('C1', '项目'); $sheet->setCellValue('D1', '真实姓名'); $sheet->setCellValue('E1', '身份证号'); $sheet->setCellValue('F1', '联系电话'); $sheet->setCellValue('G1', 'xxx'); $sheet->setCellValue('H1', '报名和交费时间'); $sheet->setCellValue('I1', '审核状态'); $sheet->setCellValue('J1', '订单状态'); $sheet->setCellValue('K1', '缴费状态'); $sheet->setCellValue('L1', '备注'); $sheet->setCellValue('M1', 'xxxx'); $sheet->setCellValue('N1', 'xxx'); $sheet->setCellValue('O1', 'xxxx'); $sheet->setCellValue('P1', 'xxxx'); $sheet->setCellValue('Q1', 'xxxxx'); $sheet->setCellValue('R1', 'xxxx'); $sheet->setCellValue('S1', 'xxxx'); $sheet->getColumnDimension('A')->setWidth(20); $sheet->getColumnDimension('B')->setWidth(20); $sheet->getColumnDimension('C')->setWidth(30); $sheet->getColumnDimension('D')->setWidth(20); $sheet->getColumnDimension('E')->setWidth(30); $sheet->getColumnDimension('F')->setWidth(30); $sheet->getColumnDimension('G')->setWidth(60); $sheet->getColumnDimension('H')->setWidth(30); $sheet->getColumnDimension('I')->setWidth(30); $sheet->getColumnDimension('J')->setWidth(30); $sheet->getColumnDimension('K')->setWidth(30); $sheet->getColumnDimension('L')->setWidth(30); $sheet->getColumnDimension('M')->setWidth(30); $sheet->getColumnDimension('N')->setWidth(30); $sheet->getColumnDimension('O')->setWidth(30); $sheet->getColumnDimension('P')->setWidth(30); $sheet->getColumnDimension('Q')->setWidth(30); $sheet->getColumnDimension('R')->setWidth(30); $sheet->getColumnDimension('S')->setWidth(120); $sheet->getDefaultRowDimension()->setRowHeight(60); //输出表格 foreach($list as $keys => $value) { $keys = $keys + 2; $sheet->setCellValue('A'.$keys,$value['gongzuodanwei']??''); $sheet->setCellValue('B'.$keys,$value['username']??''); $sheet->setCellValue('C'.$keys,$value['title']??''); $sheet->setCellValue('D'.$keys,$value['name']??''); $sheet->setCellValue('E'.$keys,' '.($value['idcard']??'')); $sheet->setCellValue('F'.$keys,$value['mobile']??''); $sheet->setCellValue('G'.$keys,$value['shenbaokemu']??''); $sheet->setCellValue('H'.$keys,'xx:'.($value['create_time']??'')."\r\n".'交费:'.(!empty($value['pay_time'])?date('Y-m-d H:i:s',$value['pay_time']):'')); $sheet->setCellValue('I'.$keys,$value['check_status']??''); $sheet->setCellValue('J'.$keys,$value['status']??''); $sheet->setCellValue('K'.$keys,$value['pay_status']??''); $sheet->setCellValue('L'.$keys,$value['remark']??''); if($value['idcard_front']) { $objDrawing = new Drawing(); $objDrawing->setPath(ROOT_PATH.'public'.$value['idcard_front']);// 本地图片文件路径 $objDrawing->setHeight(40);// 图片高 $objDrawing->setCoordinates('N'.$keys);// 单元格 $objDrawing->setOffsetX(20);// 水平偏移 $objDrawing->setOffsetY(20);// 垂直偏移 $objDrawing->getShadow()->setVisible(true); $objDrawing->setWorksheet($sheet); } if($value['idcard_back']) { $objDrawing = new Drawing(); $objDrawing->setPath(ROOT_PATH.'public'.$value['idcard_back']);// 本地图片文件路径 $objDrawing->setHeight(40);// 图片高 $objDrawing->setCoordinates('O'.$keys);// 单元格 $objDrawing->setOffsetX(20);// 水平偏移 $objDrawing->setOffsetY(20);// 垂直偏移 $objDrawing->getShadow()->setVisible(true); $objDrawing->setWorksheet($sheet); } if($value['dianzizhengshu']) { $aa = explode(',',$value['dianzizhengshu']); $b = []; foreach ($aa as $it){ $b[] = ROOT_PATH.'public'.$it;// 本地图片文件路径 } $h = 20; foreach ($b as $p){ $objDrawing = new Drawing(); $objDrawing->setPath($p);// 本地图片文件路径 $objDrawing->setHeight(40);// 图片高 $objDrawing->setCoordinates('S'.$keys);// 单元格 $objDrawing->setOffsetX($h);// 水平偏移 $objDrawing->setOffsetY(20);// 垂直偏移 $objDrawing->getShadow()->setVisible(true); $objDrawing->setWorksheet($sheet); $h += 50; } } } $filename = '导出'.date('ymdhis',time()).'.xlsx'; header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$filename.'"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); exit; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具