*/ public function index() { // 查询 $map = $this->getMap(); // 数据列表 $data_list = DocumentModel::where($map)->order('sort,id desc')->paginate(); // 字段管理按钮 $btnField = [ 'title' => '字段管理', 'icon' => 'fa fa-fw fa-navicon', 'href' => url('field/index', ['id' => '__id__']) ]; // 使用ZBuilder快速创建数据表格 return ZBuilder::make('table') ->setSearch(['name' => '标识', 'title' => '标题']) // 设置搜索框 ->addColumns([ // 批量添加数据列 ['id', 'ID'], ['icon', '图标', 'icon'], ['title', '标题'], ['name', '标识'], ['table', '附加表'], ['type', '模型', 'text', '', ['系统', '普通', '独立']], ['create_time', '创建时间', 'datetime'], ['sort', '排序', 'text.edit'], ['status', '状态', 'switch'], ['right_button', '操作', 'btn'] ]) ->addFilter('type', ['系统', '普通', '独立']) ->addTopButtons('add,enable,disable') // 批量添加顶部按钮 ->addRightButtons(['edit', 'custom' => $btnField, 'delete' => ['data-tips' => '删除模型将同时删除该模型下的所有字段,且无法恢复。']]) // 批量添加右侧按钮 ->setRowList($data_list) // 设置表格数据 ->fetch(); // 渲染模板 } /** * 新增内容模型 * @author 蔡伟明 <314013107@qq.com> * @return mixed * @throws \think\Exception */ public function add() { // 保存数据 if ($this->request->isPost()) { $data = $this->request->post(); if ($data['table'] == '') { $data['table'] = config('database.prefix') . 'cms_document_' . $data['name']; } else { $data['table'] = str_replace('#@__', config('database.prefix'), $data['table']); } // 验证 $result = $this->validate($data, 'Model'); if(true !== $result) $this->error($result); // 严格验证附加表是否存在 if (table_exist($data['table'])) { $this->error('附加表已存在'); } if ($model = DocumentModel::create($data)) { // 创建附加表 if (false === DocumentModel::createTable($model)) { $this->error('创建附加表失败'); } // 创建菜单节点 $map = [ 'module' => 'cms', 'title' => '内容管理' ]; $menu_data = [ "module" => "cms", "pid" => Db::name('admin_menu')->where($map)->value('id'), "title" => $data['title'], "url_type" => "module_admin", "url_value" => "cms/content/{$data['name']}", "url_target" => "_self", "icon" => "fa fa-fw fa-list", "online_hide" => "0", "sort" => "100", ]; MenuModel::create($menu_data); // 记录行为 action_log('model_add', 'cms_model', $model['id'], UID, $data['title']); Cache::clear(); $this->success('新增成功', 'index'); } else { $this->error('新增失败'); } } $type_tips = '此选项添加后不可更改。如果为 系统模型 将禁止删除,对于 独立模型,将强制创建字段id,cid,uid,model,title,create_time,update_time,sort,status,trash,view'; // 显示添加页面 return ZBuilder::make('form') ->addFormItems([ ['text', 'name', '模型标识', '由小写字母、数字或下划线组成,不能以数字开头'], ['text', 'title', '模型标题', '可填写中文'], ['text', 'table', '附加表', '创建后不可更改。由小写字母、数字或下划线组成,如果不填写默认为 '. config('database.prefix') . 'cms_document_模型标识,如果需要自定义,请务必填写系统表前缀,#@__表示当前系统表前缀'], ['radio', 'type', '模型类别', $type_tips, ['系统模型', '普通模型', '独立模型(不使用主表)'], 1], ['icon', 'icon', '图标'], ['radio', 'status', '立即启用', '', ['否', '是'], 1], ['text', 'sort', '排序', '', 100], ]) ->fetch(); } /** * 编辑内容模型 * @param null $id 模型id * @author 蔡伟明 <314013107@qq.com> * @return mixed * @throws \think\Exception */ public function edit($id = null) { if ($id === null) $this->error('参数错误'); // 保存数据 if ($this->request->isPost()) { $data = $this->request->post(); // 验证 $result = $this->validate($data, 'Model.edit'); if(true !== $result) $this->error($result); if (DocumentModel::update($data)) { cache('cms_model_list', null); cache('cms_model_title_list', null); // 记录行为 action_log('model_edit', 'cms_model', $id, UID, "ID({$id}),标题({$data['title']})"); $this->success('编辑成功', 'index'); } else { $this->error('编辑失败'); } } $list_model_type = ['系统模型', '普通模型', '独立模型(不使用主表)']; // 模型信息 $info = DocumentModel::get($id); $info['type'] = $list_model_type[$info['type']]; // 显示编辑页面 return ZBuilder::make('form') ->addFormItems([ ['hidden', 'id'], ['hidden', 'name'], ['static', 'name', '模型标识'], ['static', 'type', '模型类别'], ['static', 'table', '附加表'], ['text', 'title', '模型标题', '可填写中文'], ['icon', 'icon', '图标'], ['radio', 'status', '立即启用', '', ['否', '是']], ['text', 'sort', '排序'], ]) ->setFormData($info) ->fetch(); } /** * 删除内容模型 * @param null $ids 内容模型id * @author 蔡伟明 <314013107@qq.com> * @throws \think\Exception * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException * @throws \think\exception\PDOException */ public function delete($ids = null) { if ($ids === null) $this->error('参数错误'); $model = DocumentModel::where('id', $ids)->find(); if ($model['type'] == 0) { $this->error('禁止删除系统模型'); } // 删除表和字段信息 if (DocumentModel::deleteTable($ids)) { // 删除主表中的文档 if (false === Db::name('cms_document')->where('model', $ids)->delete()) { $this->error('删除主表文档失败'); } // 删除菜单节点 $map = [ 'module' => 'cms', 'url_value' => "cms/content/{$model['name']}" ]; if (false === Db::name('admin_menu')->where($map)->delete()) { $this->error('删除菜单节点失败'); } // 删除字段数据 if (false !== Db::name('cms_field')->where('model', $ids)->delete()) { cache('cms_model_list', null); cache('cms_model_title_list', null); return parent::delete(); } else { $this->error('删除内容模型字段失败'); } } else { $this->error('删除内容模型表失败'); } } }