You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
5.7 KiB
PHP

<?php
namespace app\common\controller;
use think\Controller;
/**
* 项目公共控制器
* @package app\common\controller
*/
class Common extends Controller
{
/**
* 初始化
* @author 蔡伟明 <314013107@qq.com>
*/
protected function initialize()
{
// 后台公共模板
$this->assign('_admin_base_layout', config('admin_base_layout'));
// 当前配色方案
$this->assign('system_color', config('system_color'));
// 输出弹出层参数
$this->assign('_pop', $this->request->param('_pop'));
}
/**
* 获取筛选条件
* @author 蔡伟明 <314013107@qq.com>
* @alter 小乌 <82950492@qq.com>
* @return array
*/
final protected function getMap()
{
$search_field = input('param.search_field/s', '', 'trim');
$keyword = input('param.keyword/s', '', 'trim');
$filter = input('param._filter/s', '', 'trim');
$filter_content = input('param._filter_content/s', '', 'trim');
$filter_time = input('param._filter_time/s', '', 'trim');
$filter_time_from = input('param._filter_time_from/s', '', 'trim');
$filter_time_to = input('param._filter_time_to/s', '', 'trim');
$select_field = input('param._select_field/s', '', 'trim');
$select_value = input('param._select_value/s', '', 'trim');
$search_area = input('param._s', '', 'trim');
$search_area_op = input('param._o', '', 'trim');
$map = [];
// 搜索框搜索
if ($search_field != '' && $keyword !== '') {
$map[] = [$search_field, 'like', "%$keyword%"];
}
// 下拉筛选
if ($select_field != '') {
$select_field = array_filter(explode('|', $select_field), 'strlen');
$select_value = array_filter(explode('|', $select_value), 'strlen');
foreach ($select_field as $key => $item) {
if ($select_value[$key] != '_all') {
$map[] = [$item, '=', $select_value[$key]];
}
}
}
// 时间段搜索
if ($filter_time != '' && $filter_time_from != '' && $filter_time_to != '') {
$map[] = [$filter_time, 'between time', [$filter_time_from.' 00:00:00', $filter_time_to.' 23:59:59']];
}
// 表头筛选
if ($filter != '') {
$filter = array_filter(explode('|', $filter), 'strlen');
$filter_content = array_filter(explode('|', $filter_content), 'strlen');
foreach ($filter as $key => $item) {
if (isset($filter_content[$key])) {
$map[] = [$item, 'in', $filter_content[$key]];
}
}
}
// 搜索区域
if ($search_area != '') {
$search_area = explode('|', $search_area);
$search_area_op = explode('|', $search_area_op);
foreach ($search_area as $key => $item) {
list($field, $value) = explode('=', $item);
$value = trim($value);
$op = explode('=', $search_area_op[$key]);
if ($value != '') {
switch ($op[1]) {
case 'like':
$map[] = [$field, 'like', "%$value%"];
break;
case 'between time':
case 'not between time':
$value = explode(' - ', $value);
if ($value[0] == $value[1]) {
$value[0] = date('Y-m-d', strtotime($value[0])). ' 00:00:00';
$value[1] = date('Y-m-d', strtotime($value[1])). ' 23:59:59';
}
default:
$map[] = [$field, $op[1], $value];
}
}
}
}
return $map;
}
/**
* 获取字段排序
* @param string $extra_order 额外的排序字段
* @param bool $before 额外排序字段是否前置
* @author 蔡伟明 <314013107@qq.com>
* @return string
*/
final protected function getOrder($extra_order = '', $before = false)
{
$order = input('param._order/s', '');
$by = input('param._by/s', '');
if ($order == '' || $by == '') {
return $extra_order;
}
if ($extra_order == '') {
return $order. ' '. $by;
}
if ($before) {
return $extra_order. ',' .$order. ' '. $by;
} else {
return $order. ' '. $by . ',' . $extra_order;
}
}
/**
* 渲染插件模板
* @param string $template 模板名称
* @param string $suffix 模板后缀
* @author 蔡伟明 <314013107@qq.com>
* @return mixed
*/
/**
* 渲染插件模板
* @param string $template 模板文件名
* @param string $suffix 模板后缀
* @param array $vars 模板输出变量
* @param array $config 模板参数
* @author 蔡伟明 <314013107@qq.com>
* @return mixed
*/
final protected function pluginView($template = '', $suffix = '', $vars = [], $config = [])
{
$plugin_name = input('param.plugin_name');
if ($plugin_name != '') {
$plugin = $plugin_name;
$action = 'index';
} else {
$plugin = input('param._plugin');
$action = input('param._action');
}
$suffix = $suffix == '' ? 'html' : $suffix;
$template = $template == '' ? $action : $template;
$template_path = config('plugin_path'). "{$plugin}/view/{$template}.{$suffix}";
return parent::fetch($template_path, $vars, $config);
}
}