148 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace app\controller\manager;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\model\{Message as MMessage, Log, VisitLogoModel};
							 | 
						|||
| 
								 | 
							
								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;
							 | 
						|||
| 
								 | 
							
								use think\response\View;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								class VisitLog 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 del()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if ($this->request->isPost()) {
							 | 
						|||
| 
								 | 
							
								            $id = input('post.id/d');
							 | 
						|||
| 
								 | 
							
								            if (is_numeric($id) && $id > 0) {
							 | 
						|||
| 
								 | 
							
								                $item = VisitLogoModel::getById($id);
							 | 
						|||
| 
								 | 
							
								                if (!empty($item)) {
							 | 
						|||
| 
								 | 
							
								                    VisitLogoModel::destroy($id);
							 | 
						|||
| 
								 | 
							
								                    if (!empty($item['file'])) {
							 | 
						|||
| 
								 | 
							
								                        Tool::delFile($item['file']);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    Log::write('visit_log', 'del', '删除访问记录,ID:'.$id);
							 | 
						|||
| 
								 | 
							
								                    return $this->json();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                return $this->json(3, '待删除记录不存在');
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return $this->json(2, '参数错误,请核对之后再操作!');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $this->json(1, '非法请求!');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //列表
							 | 
						|||
| 
								 | 
							
								    public function index(): View
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $startDate = input('param.startDate', '');
							 | 
						|||
| 
								 | 
							
								        $endDate   = input('param.endDate', '');
							 | 
						|||
| 
								 | 
							
								        $keyword   = input('param.keyword', '');
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $param = [];
							 | 
						|||
| 
								 | 
							
								        if (!empty($startDate)) {
							 | 
						|||
| 
								 | 
							
								            $param['startDate'] = $startDate;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if (!empty($endDate)) {
							 | 
						|||
| 
								 | 
							
								            $param['endDate'] = $endDate;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        if (!empty($keyword)) {
							 | 
						|||
| 
								 | 
							
								            $param['keyword'] = $keyword;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $paginate = [
							 | 
						|||
| 
								 | 
							
								            'list_rows' => 20,
							 | 
						|||
| 
								 | 
							
								            'query'     => $param
							 | 
						|||
| 
								 | 
							
								        ];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $items = VisitLogoModel::when(!empty($startDate) && strtotime($startDate), function ($query) use ($startDate) {
							 | 
						|||
| 
								 | 
							
								            $startTime = strtotime(date('Y-m-d 00:00:00', strtotime($startDate)));
							 | 
						|||
| 
								 | 
							
								            $query->where('create_time', '>=', $startTime);
							 | 
						|||
| 
								 | 
							
								        })
							 | 
						|||
| 
								 | 
							
								            ->when(!empty($endDate) && strtotime($endDate), function ($query) use ($endDate) {
							 | 
						|||
| 
								 | 
							
								                $endTime = strtotime(date('Y-m-d 23:59:59', strtotime($endDate)));
							 | 
						|||
| 
								 | 
							
								                $query->where('create_time', '<=', $endTime);
							 | 
						|||
| 
								 | 
							
								            })
							 | 
						|||
| 
								 | 
							
								            ->when(!empty($keyword), function ($query) use ($keyword) {
							 | 
						|||
| 
								 | 
							
								                $query->where('referer|visit', 'like', '%'.$keyword.'%');
							 | 
						|||
| 
								 | 
							
								            })
							 | 
						|||
| 
								 | 
							
								            ->order("create_time", 'desc')
							 | 
						|||
| 
								 | 
							
								            ->paginate($paginate);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $items->each(function ($item) {
							 | 
						|||
| 
								 | 
							
								           $item->source_title = '其他';
							 | 
						|||
| 
								 | 
							
								           if (str_contains($item->referer, 'baidu.com')) {
							 | 
						|||
| 
								 | 
							
								               $item->source_title = '百度';
							 | 
						|||
| 
								 | 
							
								           }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (str_contains($item->referer, 'so.com')) {
							 | 
						|||
| 
								 | 
							
								                $item->source_title = '360';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        });
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $this->data['items']     = $items;
							 | 
						|||
| 
								 | 
							
								        $this->data['startDate'] = $startDate;
							 | 
						|||
| 
								 | 
							
								        $this->data['endDate']   = $endDate;
							 | 
						|||
| 
								 | 
							
								        $this->data['keyword']   = $keyword;
							 | 
						|||
| 
								 | 
							
								        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');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |