123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- namespace app\admin\controller\base\models;
- /**
- * @title : 模型字段管理控制器
- * @desc :
- * @Author : Rock
- * @Date : 2023-04-11 20:14:09
- */
- use app\admin\controller\Base;
- use app\common\model\base\models\ModelFields as ModelFieldsModel;
- use app\common\model\base\models\ModelManage;
- use think\facade\Db;
- class ModelFields extends Base
- {
- private $model = null;
- public function initialize()
- {
- parent::initialize();
- $this->model = new ModelFieldsModel;
- }
- /**
- * @title: 创建统一查询条件
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 14:08:58
- */
- private function createWhere()
- {
- $data = $this->request->param();
- return array_filter([
- !empty($data['model_name']) ? ['model_name','=',$data['model_name']] : null,
- !empty($data['field_type']) ? ['field_type','=',$data['field_type']] : null,
- !empty($data['db_type']) ? ['db_type','=',$data['db_type']] : null,
- !empty($data['show_in_table']) ? ['show_in_table','=',$data['show_in_table']] : null,
- !empty($data['search_type']) ? ['search_type','=',$data['search_type']] : null,
- !empty($data['status']) ? ['status','=',$data['status']] : null,
- !empty($data['keyword']) ? ['model_name|model_title','=',$data['keyword']] : null,
- ]);
- }
- /**
- * @title: 获取模型字段列表
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 11:28:27
- */
- public function getList(int $pageNo=0,int $pageSize = 20)
- {
- $where = $this->createWhere();
- if($pageNo){
- $res = $this->model->where($where)->order('weigh ASC')->paginate(['page'=>$pageNo,'list_rows'=>$pageSize]);
- return pageRes(1,"获取成功",$res->total(),$res->items());
- }
- $list = $this->model->where($where)->order('weigh ASC')->select();
- return res(1,"获取成功",$list);
- }
- /**
- * @title: 新增/编辑模型字段
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 11:28:13
- */
- public function doEdit()
- {
- $data = $this->request->param();
- try{
- Db::startTrans();
- if(empty($data['field_id'])){
- $data['model_title'] = ModelManage::where('name',$data['model_name'])->value('title');
- $this->model->replace()->save($data);
- $id = $this->model->field_id;
- $res = ModelFieldsModel::addField($id);
- }else{
- $oldField = $this->model->where('field_id',$data['field_id'])->value('field');
- $this->model->replace()->save($data);
- $id = $this->model->field_id;
- $res = ModelFieldsModel::updateField($id,$oldField);
- }
- Db::commit();
- return res(1,"编辑成功,请重新生成代码",$id);
- }catch(\Exception $e){
- Db::rollback();
- $msg = $e->getMessage();
- if(false!==strpos($msg,'1067 Invalid default value for')){
- return res(2,"默认值与数据类型不匹配");
- }elseif(false!==strpos($msg,'Column already exists')){
- return res(2,"字段名已存在");
- }
- return res(2,"编辑失败",$e->getMessage(),$e->getTrace());
- }
- }
- /**
- * @title: 删除模型字段
- * @desc: 描述
- * @param {int} {field_id} {} {模型字段ID}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 11:27:40
- */
- public function doDelete(int $field_id = 0)
- {
- $info = $this->model->find($field_id);
- if(!$info){
- return res(2,"未找到记录");
- }
- try{
- Db::startTrans();
- ModelFieldsModel::deleteField($field_id);
- $info->delete();
- Db::commit();
- return res(1,"删除成功,请重新生成代码");
- }catch(\Exception $e){
- Db::rollback();
- return res(2,"删除失败",$e->getMessage(),$e->getTrace());
- }
- }
- /**
- * @title: 启用禁用模型字段
- * @desc: 描述
- * @param {int} {field_id} {} {模型字段ID}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 11:27:28
- */
- public function changeStatus(int $field_id = 0)
- {
- $info = $this->model->find($field_id);
- if(!$info){
- return res(2,"未找到记录");
- }
- $info->status = abs(3*$info->status - 5);
- $info->save();
- return res(1,"操作成功,请重新生成代码");
- }
- /**
- * @title: 获取模型字段可选项
- * @desc: 描述
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-04-13 14:25:30
- */
- public function getOptions()
- {
- $data = [
- 'fieldTypeList' =>ModelFieldsModel::fieldTypeList(),
- 'dbTypeList' =>ModelFieldsModel::dbTypeList(),
- 'showInTableList' =>ModelFieldsModel::showInTableList(),
- 'searchTypeList' =>ModelFieldsModel::searchTypeList(),
- 'statusList' =>ModelFieldsModel::statusList()
- ];
- return res(1,"获取成功",$data);
- }
- /**
- * @title: 保存模型的多个字段
- * @desc: 描述
- * @param {string} {model_name} {} {模型名}
- * @param {array} {list} {} {字段列表}
- * @return {*}
- * @author: Rock
- * @method: POST
- * @Date: 2023-08-29 15:30:32
- */
- public function saveList($model_name='',$list=[])
- {
- $data = $this->request->param();
- $fields = $this->model->where('model_name',$model_name)->column('field');
- if(!empty($fields)){
- ModelFieldsModel::deleteFields($model_name,$fields);
- $this->model->destroy(function($query)use($model_name){
- $query->where('model_name',$model_name);
- });
- }
- $newList = [];
- foreach($list as $item){
- if(isset($item['field_id'])){
- unset($item['field_id']);
- }
- $newList[] = $item;
- }
- $this->model->replace()->saveAll($newList);
- $fields = $this->model->where('model_name',$model_name)->column('field');
- ModelFieldsModel::addFields($model_name,$fields);
- return res(1,"保存成功");
- }
- }
|