pzct/app/controller/manager/Message.php

142 lines
4.8 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace app\controller\manager;
use app\model\{Message as MMessage, Log};
use app\service\Tool;
use app\service\File;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
class Message extends Base
{
protected $excelStyle = [
'font' => [
'name' => '宋体',
],
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER, // 水平居中
'vertical' => Alignment::VERTICAL_CENTER, // 垂直居中
'wrapText' => true,
],
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['rgb' => 'eeeeee'],
]
],
];
protected $defaultSetting = [
'cell_width' => 30,
'font_size' => 12
];
//下载文件
public function file()
{
$id = input('param.id/d');
if(is_numeric($id) && $id > 0) {
$item = MMessage::getById($id);
if(empty($item)){
return $this->error('留言不存在');
}
if(empty($item['file'])){
return $this->error('无文件需要下载');
}
$file = app()->getRootPath() . 'public' . $item['file'];
if(!file_exists($file)){
return $this->error('无文件需要下载');
}
$fileInfo = pathinfo($file);
$fileName = $item['name'] . '上传文件.' . $fileInfo['extension'];
$fileSize = filesize($file);
//以只读和二进制模式打开文件
$file = fopen ( $file, "rb" );
//告诉浏览器这是一个文件流格式的文件
Header ( "Content-type: application/octet-stream" );
//请求范围的度量单位
Header ( "Accept-Ranges: bytes" );
//Content-Length是指定包含于请求或响应中数据的字节长度
Header ( "Accept-Length: " . $fileSize );
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header ( "Content-Disposition: attachment; filename=" . $fileName );
//读取文件内容并直接输出到浏览器
echo fread ( $file, $fileSize );
fclose ( $file );
exit ();
}
return $this->error('参数错误,请核对之后再操作!');
}
//可以删除一个
public function del()
{
if ($this->request->isPost()) {
$id = input('post.id/d');
if(is_numeric($id) && $id > 0) {
$item = MMessage::getById($id);
if(!empty($item)){
MMessage::destroy($id);
if(!empty($item['file'])){
Tool::delFile($item['file']);
}
Log::write('link', 'del', '删除留言ID' . $id . ',姓名:' . $item['name']);
return $this->json();
}
return $this->json(3, '待删除留言不存在');
}
return $this->json(2, '参数错误,请核对之后再操作!');
}
return $this->json(1, '非法请求!');
}
//列表
public function index()
{
$startDate = input('param.startDate', '');
$endDate = input('param.endDate', '');
$items = MMessage::getList(20, $startDate, $endDate);
$this->data['items'] = $items;
$this->data['startDate'] = $startDate;
$this->data['endDate'] = $endDate;
return $this->view();
}
// 导出留言
public function export()
{
File::cancelTimeLimit();
$startDate = input('param.startDate', '');
$endDate = input('param.endDate', '');
$list = MMessage::getExportList($startDate, $endDate, 10000);
$spreadsheet = new Spreadsheet();
$header = ['序号', '姓名', '电话', '公司/团队名称', '申请日期'];
$sheet = $spreadsheet->getActiveSheet();
$sheetTitle = '预约记录';
$cellValues = [];
$cellWidthList = [];
foreach ($list as $item) {
$cellValues[] = [
[$item['id'], DataType::TYPE_STRING],
$item['name'],
$item['tel'],
$item['company'],
date('Y-m-d H:i', $item['create_time']),
];
}
File::setExcelCells($sheet, $cellValues, $header, $sheetTitle, $cellWidthList, $this->excelStyle, $this->defaultSetting);
File::export($spreadsheet, '预约记录导出_' . date('YmdHis') . '.xlsx');
}
}