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'); | |||
|  |     } | |||
|  | 
 | |||
|  | } |