<?php
// +----------------------------------------------------------------------
// | 海豚PHP框架 [ DolphinPHP ]
// +----------------------------------------------------------------------
// | 版权所有 2016~2017 河源市卓锐科技有限公司 [ http://www.zrthink.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://dolphinphp.com
// +----------------------------------------------------------------------
// | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
namespace app\common\builder\table;
use app\admin\model\Menu;
use app\common\builder\ZBuilder;
use app\user\model\Role;
use think\Cache;
/**
* 表格构建器
* @package app\common\builder\table
* @author 蔡伟明 <314013107@qq.com>
*/
class Builder extends ZBuilder
{
/**
* @var string 当前模型名称
*/
private $_module = '';
/**
* @var string 当前控制器名称
*/
private $_controller = '';
/**
* @var string 当前操作名称
*/
private $_action = '';
/**
* @var string 数据表名
*/
private $_table_name = '';
/**
* @var string 插件名称
*/
private $_plugin_name = '';
/**
* @var string 模板路径
*/
private $_template = '';
/**
* @var array 要替换的右侧按钮内容
*/
private $_replace_right_buttons = [];
/**
* @var bool 有分页数据
*/
private $_has_pages = true;
/**
* @var array 存储字段筛选选项
*/
private $_filter_options = [];
/***
* @var array 存储字段筛选列表
*/
private $_filter_list = [];
/**
* @var array 存储字段筛选类型
*/
private $_filter_type = [];
/**
* @var array 列名
*/
private $_field_name = [];
/**
* @var array 存储搜索框数据
*/
private $_search = [];
/**
* @var array 顶部下拉菜单默认选项集合
*/
private $_select_list_default = [];
/**
* @var array 行class
*/
private $_tr_class = [];
/**
* @var int 前缀模式:0-不含表前缀,1-含表前缀,2-使用模型
*/
private $_prefix = 1;
/**
* @var mixed 表格原始数据
*/
private $data;
/**
* @var array 使用原始数据的字段
*/
protected $rawField = [];
/**
* @var array 模板变量
*/
private $_vars = [
'page_title' => '', // 页面标题
'page_tips' => '', // 页面提示
'tips_type' => '', // 提示类型
'tab_nav' => [], // 页面Tab导航
'hide_checkbox' => false, // 是否隐藏第一列多选
'extra_html' => '', // 额外HTML代码
'extra_js' => '', // 额外JS代码
'extra_css' => '', // 额外CSS代码
'order_columns' => [], // 需要排序的列表头
'filter_columns' => [], // 需要筛选功能的列表头
'filter_map' => [], // 字段筛选的排序条件
'_field_display' => [], // 字段筛选的默认选项
'_filter_content' => [], // 字段筛选的默认选中值
'_filter' => [], // 字段筛选的默认字段名
'top_buttons' => [], // 顶部栏按钮
'right_buttons' => [], // 表格右侧按钮
'search' => [], // 搜索参数
'search_button' => false, // 搜索按钮
'columns' => [], // 表格列集合
'pages' => '', // 分页数据
'row_list' => [], // 表格数据列表
'_page_info' => '', // 分页信息
'primary_key' => 'id', // 表格主键名称
'_table' => '', // 表名
'js_list' => [], // js文件名
'css_list' => [], // css文件名
'validate' => '', // 快速编辑的验证器名
'_js_files' => [], // js文件
'_css_files' => [], // css文件
'_select_list' => [], // 顶部下拉菜单列表
'_filter_time' => [], // 时间段筛选
'empty_tips' => '暂无数据', // 没有数据时的提示信息
'_search_area' => [], // 搜索区域
'_search_area_url' => '', // 搜索区域url
'_search_area_op' => '', // 搜索区域匹配方式
];
/**
* 初始化
* @author 蔡伟明 <314013107@qq.com>
*/
public function _initialize()
{
$this->_module = $this->request->module();
$this->_controller = parse_name($this->request->controller());
$this->_action = $this->request->action();
$this->_table_name = strtolower($this->_module.'_'.$this->_controller);
$this->_template = APP_PATH. 'common/builder/table/layout.html';
// 默认加载快速编辑所需js和css
$this->_vars['_js_files'][] = 'editable_js';
$this->_vars['_css_files'][] = 'editable_css';
}
/**
* 模板变量赋值
* @param mixed $name 要显示的模板变量
* @param string $value 变量的值
* @author 蔡伟明 <314013107@qq.com>
* @return $this
*/
public function assign($name, $value = '')
{
if (is_array($name)) {
$this->_vars = array_merge($this->_vars, $name);
} else {
$this->_vars[$name] = $value;
}
return $this;
}
/**
* 设置页面标题
* @param string $page_title 页面标题
* @author 蔡伟明 <314013107@qq.com>
* @return $this
*/
public function setPageTitle($page_title = '')
{
if ($page_title != '') {
$this->_vars['page_title'] = $page_title;
}
return $this;
}
/**
* 隐藏第一列多选框
* @author 蔡伟明 <314013107@qq.com>
* @return $this
*/
public function hideCheckbox()
{
$this->_vars['hide_checkbox'] = true;
return $this;
}
/**
* 设置页面提示
* @param string $tips 提示信息
* @param string $type 提示类型:success/info/warning/danger,默认info
* @author 蔡伟明 <314013107@qq.com>
* @return $this
*/
public function setPageTips($tips = '', $type = 'info')
{
if ($tips != '') {
$this->_vars['page_tips'] = $tips;
$this->_vars['tips_type'] = $type;
}
return $this;
}
/**
* 添加顶部下拉框
* @param string $name 表单名,即name值
* @param string $title 第一个下来菜单项标题,不写则不显示
* @param array $options 表单项内容,传递数组形式,如:array([2015] => '2015年', [2016] => '2016年')
* @param string $default 默认选项,初始化时,默认选中的菜单项
* @param string $ignore 生成url时,需要忽略的参数,用于有父子关系的下拉菜单,比如省份和地区,省份URL不应该带有地区参数的,
* 所以可以在定义省份下拉菜单时,传入地区的下拉列表名,
* 如需忽略多个参数,用逗号隔开
* @author 蔡伟明 <314013107@qq.com>
* @return $this
*/
public function addTopSelect($name = '', $title = '', $options = [], $default