123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- // +----------------------------------------------------------------------
- // | Think.Admin
- // +----------------------------------------------------------------------
- // | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
- // +----------------------------------------------------------------------
- // | 官方网站: http://think.ctolog.com
- // +----------------------------------------------------------------------
- // | 开源协议 ( https://mit-license.org )
- // +----------------------------------------------------------------------
- // | github开源项目:https://github.com/zoujingli/Think.Admin
- // +----------------------------------------------------------------------
- namespace controller;
- use service\DataService;
- use think\Controller;
- use think\db\Query;
- use think\Db;
- /**
- * 后台权限基础控制器
- * Class BasicAdmin
- * @package controller
- */
- class BasicAdmin extends Controller
- {
- /**
- * 页面标题
- * @var string
- */
- public $title;
- /**
- * 默认操作数据表
- * @var string
- */
- public $table;
- /**
- * 表单默认操作
- * @param Query $dbQuery 数据库查询对象
- * @param string $tplFile 显示模板名字
- * @param string $pkField 更新主键规则
- * @param array $where 查询规则
- * @param array $extendData 扩展数据
- * @return array|string
- */
- protected function _form($dbQuery = null, $tplFile = '', $pkField = '', $where = [], $extendData = [])
- {
- $db = is_null($dbQuery) ? Db::name($this->table) : (is_string($dbQuery) ? Db::name($dbQuery) : $dbQuery);
- $pk = empty($pkField) ? ($db->getPk() ? $db->getPk() : 'id') : $pkField;
- $pkValue = $this->request->request($pk, isset($where[$pk]) ? $where[$pk] : (isset($extendData[$pk]) ? $extendData[$pk] : null));
- // 非POST请求, 获取数据并显示表单页面
- if (!$this->request->isPost()) {
- $vo = ($pkValue !== null) ? array_merge((array)$db->where($pk, $pkValue)->where($where)->find(), $extendData) : $extendData;
- if (false !== $this->_callback('_form_filter', $vo)) {
- empty($this->title) || $this->assign('title', $this->title);
- return $this->fetch($tplFile, ['vo' => $vo]);
- }
- return $vo;
- }
- // POST请求, 数据自动存库
- $data = array_merge($this->request->post(), $extendData);
- if (false !== $this->_callback('_form_filter', $data)) {
- $result = DataService::save($db, $data, $pk, $where);
- if (false !== $this->_callback('_form_result', $result)) {
- if ($result !== false) {
- $this->success('恭喜, 数据保存成功!', '');
- }
- $this->error('数据保存失败, 请稍候再试!');
- }
- }
- }
- /**
- * 列表集成处理方法
- * @param Query $dbQuery 数据库查询对象
- * @param bool $isPage 是启用分页
- * @param bool $isDisplay 是否直接输出显示
- * @param bool $total 总记录数
- * @return array|string
- */
- protected function _list($dbQuery = null, $isPage = true, $isDisplay = true, $total = false)
- {
- $db = is_null($dbQuery) ? Db::name($this->table) : (is_string($dbQuery) ? Db::name($dbQuery) : $dbQuery);
- // 列表排序默认处理
- if ($this->request->isPost() && $this->request->post('action') === 'resort') {
- $data = $this->request->post();
- unset($data['action']);
- foreach ($data as $key => &$value) {
- if (false === $db->where('id', intval(ltrim($key, '_')))->setField('sort', $value)) {
- $this->error('列表排序失败, 请稍候再试');
- }
- }
- $this->success('列表排序成功, 正在刷新列表', '');
- }
- // 列表数据查询与显示
- if (null === $db->getOptions('order')) {
- $fields = $db->getTableFields($db->getTable());
- in_array('sort', $fields) && $db->order('sort asc');
- }
- $result = [];
- if ($isPage) {
- $rows = intval($this->request->get('rows', cookie('rows')));
- cookie('rows', $rows >= 10 ? $rows : 20);
- $page = $db->paginate($rows, $total, ['query' => $this->request->get()]);
- $result['list'] = $page->all();
- $pattern = ['|href="(.*?)"|', '|pagination|'];
- $replacement = ['data-open="$1" href="javascript:void(0);"', 'pagination pull-right'];
- $result['page'] = preg_replace($pattern, $replacement, $page->render());
- } else {
- $result['list'] = $db->select();
- }
- if (false !== $this->_callback('_data_filter', $result['list']) && $isDisplay) {
- !empty($this->title) && $this->assign('title', $this->title);
- return $this->fetch('', $result);
- }
- return $result;
- }
- /**
- * 当前对象回调成员方法
- * @param string $method
- * @param array|bool $data
- * @return bool
- */
- protected function _callback($method, &$data)
- {
- foreach ([$method, "_" . $this->request->action() . "{$method}"] as $_method) {
- if (method_exists($this, $_method) && false === $this->$_method($data)) {
- return false;
- }
- }
- return true;
- }
- }
|