search_arr = ['module_name','table_name']; $id = $this->request->param('id', 0); $_op = $this->field('*'); if($id){ $_op = $this->where('id',$id); } //执行通用查询 return parent::parentLists($_op); } /** * 读取后 * @param Model $model * @return bool|void */ // public static function onAfterRead(Model $model) // { // if (in_array(request()->action(), [ 'delete', 'status'])) { // return true; // } // // } // public static function onBeforeWrite(Model $model) // { // if (!in_array(request()->action(), ['add'])) { // return; // } // // } public function delModule($id){ if (strpos($id, ',') !== false) { return -1; } // 当有栏目使用该模块时不可删除 // $count = \app\common\model\Cate::where('module_id', $id)->count(); // if ($count) { // return ['error' => 1, 'msg' => '删除失败,请先删除已使用该模块的栏目']; // } $site_id = SITE_ID; //获取module信息 $m_model = new Module(); //获取模型信息 $module_info = $m_model->find($id)->toArray(); if(!$module_info){ return -1; } $table_name = $this->cms_table.'_'.$module_info['table_name'].'_'.$site_id; // 模块删除的同时删除字段管理中对应的数据 $field_model = new \app\api\model\Field(); $f_ids = $field_model->where('module_id', '=' , $id)->where('site_id', SITE_ID)->select()->toArray(); $f_ids_str = ''; $f_ids_arr = []; foreach ($f_ids as $item){ $f_ids_arr[] = $item['id']; } $f_ids_str = implode(',',$f_ids_arr); if($f_ids_str){ $field_model->parentDel($f_ids_str); } // $field_model->where('module_id', $id)->delete(); $state = $this->parentDel($id); if($state){ //删除表 $tables = Db::getTables(); //表已存在不能创建该模型 需要修改表名 if(in_array($table_name,$tables)){ Db::execute("DROP TABLE `{$table_name}` "); } } return $state; } public function addModule(){ $_param = $this->request->post(); if(!$_param){ return 0; } $site_id = SITE_ID; $table_name = $this->cms_table.'_'.$_param['table_name'].'_'.$site_id; $tables = Db::getTables(); //表已存在不能创建该模型 需要修改表名 if(in_array($table_name,$tables)){ return 0; }else{ //添加数据 $module_id = $this->parentAdd($_param); //创建表结构 if($module_id>0){ $sqlStr = "`id` int(11) unsigned NOT NULL AUTO_INCREMENT, " . "`common_id` int(11) NOT NULL DEFAULT '0', "; $sql = "CREATE TABLE `{$table_name}` ( {$sqlStr} PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='".$_param['table_comment']."'"; Db::execute($sql); $data = [ ['module_id' => $module_id, 'field' => 'id', 'name' => '编号', 'type' => 'hidden', 'is_list' => '1', 'status' => '1', 'sort' => '1', 'remark' => '自增ID', 'setup' => "array ('default' => '0','extra_attr' => '','extra_class' => '','step' => '1','fieldtype' => 'int','group' => '')",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'site_id', 'name' => '网站编号', 'type' => 'hidden', 'is_list' => '1', 'status' => '1', 'sort' => '1', 'remark' => '', 'setup' => "array ('default' => '1','extra_attr' => '','extra_class' => '','step' => '','fieldtype' => 'int','group' => '')",'is_system' => '1'], ['title' => $module_id, 'field' => 'title', 'name' => '标题', 'type' => 'text', 'is_list' => '1','is_edit'=>'1','is_add'=>'1', 'status' => '1', 'remark' => '', 'setup' => "array ('default' => '','extra_attr' => '','extra_class' => '','step' => '','fieldtype' => 'varchar','group' => '')",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'common_id', 'name' => '主表id', 'type' => 'hidden', 'is_list' => '1', 'status' => '1', 'sort' => '1', 'remark' => '', 'setup' => "array ('default' => '0','extra_attr' => '','extra_class' => '','step' => '','fieldtype' => 'int','group' => '')",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'create_time', 'name' => '添加时间', 'maxlength' => '11', 'type' => 'datetime', 'is_list' => '1', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '添加时间', 'setup' => "array ('default' => '0', 'format' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'int',)",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'update_time', 'name' => '更新时间', 'maxlength' => '11', 'type' => 'datetime', 'is_list' => '1', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '更新时间', 'setup' => "array ('default' => '0', 'format' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'int',)",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'sort', 'name' => '排序', 'required' => '1', 'maxlength' => '8', 'type' => 'number', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '1', 'is_sort' => '1', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '', 'setup' => "array ('default' => '50', 'extra_attr' => '', 'extra_class' => '', 'step' => '1', 'fieldtype' => 'int',)",'is_system' => '1'], ['module_id' => $module_id, 'field' => 'status', 'name' => '状态', 'required' => '1', 'maxlength' => '1', 'type' => 'radio', 'data_source' => '1', 'dict_code' => '1', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '1', 'is_search' => '1', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '', 'setup' => "array ('default' => '1', 'extra_attr' => '', 'extra_class' => '', 'fieldtype' => 'tinyint',)",'is_system' => '1'], [ 'module_id' => $module_id, 'field' => 'cate_id', 'name' => '栏目', 'required' => '1', 'maxlength' => '0', 'type' => 'select', 'data_source' => '2', 'relation_model' => 'Cate', 'relation_field' => 'cate_name', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '1', 'is_search' => '1', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '栏目', 'setup' => "array ('default' => '0', 'extra_attr' => '', 'extra_class' => '', 'fieldtype' => 'tinyint',)" ,'is_system' => '1' ], [ 'module_id' => $module_id, 'field' => 'hits', 'name' => '点击次数', 'required' => '0', 'maxlength' => '0', 'type' => 'number', 'data_source' => '0', 'relation_model' => '', 'relation_field' => '', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '1', 'is_search' => '0', 'is_sort' => '1', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '点击次数', 'setup' => "array ('default' => '0', 'extra_attr' => '', 'extra_class' => '', 'step' => '1', 'fieldtype' => 'int', )" ,'is_system' => '1' ], [ 'module_id' => $module_id, 'field' => 'keywords', 'name' => '关键词', 'required' => '0', 'maxlength' => '255', 'type' => 'text', 'data_source' => '0', 'relation_model' => '', 'relation_field' => '', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '0', 'is_search' => '0', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '关键词', 'setup' => "array ( 'default' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'varchar', 'group' => '', )" ,'is_system' => '1' ], [ 'module_id' => $module_id, 'field' => 'description', 'name' => '描述', 'required' => '0', 'maxlength' => '255', 'type' => 'textarea', 'data_source' => '0', 'relation_model' => '', 'relation_field' => '', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '0', 'is_search' => '0', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '描述', 'setup' => "array ( 'default' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'varchar', )" ,'is_system' => '1' ], [ 'module_id' => $module_id, 'field' => 'template', 'name' => '模板', 'tips' => '单独设置此条记录的模板,如:article_show.html 或 article_show', 'required' => '0', 'maxlength' => '30', 'type' => 'text', 'data_source' => '0', 'relation_model' => '', 'relation_field' => '', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '0', 'is_search' => '0', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '模板', 'setup' => "array ( 'default' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'varchar', 'group' => '', )" ,'is_system' => '1' ], [ 'module_id' => $module_id, 'field' => 'url', 'name' => '跳转地址', 'tips' => '如需直接跳转,请填写完整的网站地址或相对地址', 'required' => '0', 'maxlength' => '255', 'type' => 'text', 'data_source' => '0', 'relation_model' => '', 'relation_field' => '', 'is_add' => '1', 'is_edit' => '1', 'is_list' => '0', 'is_search' => '0', 'is_sort' => '0', 'search_type' => '=', 'status' => '1', 'sort' => '1', 'remark' => '跳转地址', 'setup' => "array ( 'default' => '', 'extra_attr' => '', 'extra_class' => '', 'placeholder' => '', 'fieldtype' => 'varchar', 'group' => '',)" ,'is_system' => '1' ] ]; $fild = new \app\api\model\Field(); $fild->saveAll($data); return $module_id; }else{ return $module_id; } } } /** * 获取数据列表基类模型 * @param null $_op 模型链式对象 * @param int $ispage 是否分页,默认分页 * @return array|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function parentLists($_op = null, $ispage = 1,$issite=true) { //模型对象为空,设定默认查询对象 if($issite){ if (!is_object($_op) || empty($_op)) { $_op = $this->where('site_id', SITE_ID); //没有默认where查询 这个一定要 否则获取不到下面的getOptions查询条件值 } else { $_op->where('site_id', SITE_ID); //强制绑定站点参数 } } //公共搜索查询 if (count($this->search_arr) > 0) { $_param = request()->param(); //搜索参数集合 $_op->where(function ($query) use ($_param) { foreach ($this->search_arr as $k => $v) { $search_arr = explode(':', $v); $search_name = $search_arr[0]; $logic = $search_arr[1] ?? 'AND'; if (array_key_exists($search_name, $_param)) { if (!empty($_param[$search_name])) { $query->whereLike($search_name, "%{$_param[$search_name]}%", $logic); } } } }); } //执行分页查询 $page = $this->request->param('page', config('page')); $limit = $this->request->param('limit', config('limit')); $count = $_op->count(); $this->listsOrder($_op); //统一排序 //无分页判断 $ispage != 1 ?: $_op->page((int)$page, (int)$limit); $_data = [ 'data' => $_op->select()->toArray(), 'page_total' => $count, ]; return $_data; } /** * 数据排序 */ private function listsOrder(&$_op) { if ($_op->getOptions('order')) { return; } $sort = $this->request->get('sort'); $sort = in_array($sort, $this->checkAllowFields()) ? $sort : ''; $order = $this->request->get('order', 'DESC', 'strtoupper') == 'ASC' ? 'ASC' : 'DESC'; $sort_order = $sort . ' ' . $order; if (empty($sort)) { $sort_order = in_array('sort', $this->checkAllowFields()) ? 'sort DESC,create_time DESC' : 'create_time DESC'; } $_op->order($sort_order); } }