ModelFields.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace app\admin\controller\base\models;
  3. /**
  4. * @title : 模型字段管理控制器
  5. * @desc :
  6. * @Author : Rock
  7. * @Date : 2023-04-11 20:14:09
  8. */
  9. use app\admin\controller\Base;
  10. use app\common\model\base\models\ModelFields as ModelFieldsModel;
  11. use app\common\model\base\models\ModelManage;
  12. use think\facade\Db;
  13. class ModelFields extends Base
  14. {
  15. private $model = null;
  16. public function initialize()
  17. {
  18. parent::initialize();
  19. $this->model = new ModelFieldsModel;
  20. }
  21. /**
  22. * @title: 创建统一查询条件
  23. * @desc: 描述
  24. * @return {*}
  25. * @author: Rock
  26. * @method: POST
  27. * @Date: 2023-04-13 14:08:58
  28. */
  29. private function createWhere()
  30. {
  31. $data = $this->request->param();
  32. return array_filter([
  33. !empty($data['model_name']) ? ['model_name','=',$data['model_name']] : null,
  34. !empty($data['field_type']) ? ['field_type','=',$data['field_type']] : null,
  35. !empty($data['db_type']) ? ['db_type','=',$data['db_type']] : null,
  36. !empty($data['show_in_table']) ? ['show_in_table','=',$data['show_in_table']] : null,
  37. !empty($data['search_type']) ? ['search_type','=',$data['search_type']] : null,
  38. !empty($data['status']) ? ['status','=',$data['status']] : null,
  39. !empty($data['keyword']) ? ['model_name|model_title','=',$data['keyword']] : null,
  40. ]);
  41. }
  42. /**
  43. * @title: 获取模型字段列表
  44. * @desc: 描述
  45. * @return {*}
  46. * @author: Rock
  47. * @method: POST
  48. * @Date: 2023-04-13 11:28:27
  49. */
  50. public function getList(int $pageNo=0,int $pageSize = 20)
  51. {
  52. $where = $this->createWhere();
  53. if($pageNo){
  54. $res = $this->model->where($where)->order('weigh ASC')->paginate(['page'=>$pageNo,'list_rows'=>$pageSize]);
  55. return pageRes(1,"获取成功",$res->total(),$res->items());
  56. }
  57. $list = $this->model->where($where)->order('weigh ASC')->select();
  58. return res(1,"获取成功",$list);
  59. }
  60. /**
  61. * @title: 新增/编辑模型字段
  62. * @desc: 描述
  63. * @return {*}
  64. * @author: Rock
  65. * @method: POST
  66. * @Date: 2023-04-13 11:28:13
  67. */
  68. public function doEdit()
  69. {
  70. $data = $this->request->param();
  71. try{
  72. Db::startTrans();
  73. if(empty($data['field_id'])){
  74. $data['model_title'] = ModelManage::where('name',$data['model_name'])->value('title');
  75. $this->model->replace()->save($data);
  76. $id = $this->model->field_id;
  77. $res = ModelFieldsModel::addField($id);
  78. }else{
  79. $oldField = $this->model->where('field_id',$data['field_id'])->value('field');
  80. $this->model->replace()->save($data);
  81. $id = $this->model->field_id;
  82. $res = ModelFieldsModel::updateField($id,$oldField);
  83. }
  84. Db::commit();
  85. return res(1,"编辑成功,请重新生成代码",$id);
  86. }catch(\Exception $e){
  87. Db::rollback();
  88. $msg = $e->getMessage();
  89. if(false!==strpos($msg,'1067 Invalid default value for')){
  90. return res(2,"默认值与数据类型不匹配");
  91. }elseif(false!==strpos($msg,'Column already exists')){
  92. return res(2,"字段名已存在");
  93. }
  94. return res(2,"编辑失败",$e->getMessage(),$e->getTrace());
  95. }
  96. }
  97. /**
  98. * @title: 删除模型字段
  99. * @desc: 描述
  100. * @param {int} {field_id} {} {模型字段ID}
  101. * @return {*}
  102. * @author: Rock
  103. * @method: POST
  104. * @Date: 2023-04-13 11:27:40
  105. */
  106. public function doDelete(int $field_id = 0)
  107. {
  108. $info = $this->model->find($field_id);
  109. if(!$info){
  110. return res(2,"未找到记录");
  111. }
  112. try{
  113. Db::startTrans();
  114. ModelFieldsModel::deleteField($field_id);
  115. $info->delete();
  116. Db::commit();
  117. return res(1,"删除成功,请重新生成代码");
  118. }catch(\Exception $e){
  119. Db::rollback();
  120. return res(2,"删除失败",$e->getMessage(),$e->getTrace());
  121. }
  122. }
  123. /**
  124. * @title: 启用禁用模型字段
  125. * @desc: 描述
  126. * @param {int} {field_id} {} {模型字段ID}
  127. * @return {*}
  128. * @author: Rock
  129. * @method: POST
  130. * @Date: 2023-04-13 11:27:28
  131. */
  132. public function changeStatus(int $field_id = 0)
  133. {
  134. $info = $this->model->find($field_id);
  135. if(!$info){
  136. return res(2,"未找到记录");
  137. }
  138. $info->status = abs(3*$info->status - 5);
  139. $info->save();
  140. return res(1,"操作成功,请重新生成代码");
  141. }
  142. /**
  143. * @title: 获取模型字段可选项
  144. * @desc: 描述
  145. * @return {*}
  146. * @author: Rock
  147. * @method: POST
  148. * @Date: 2023-04-13 14:25:30
  149. */
  150. public function getOptions()
  151. {
  152. $data = [
  153. 'fieldTypeList' =>ModelFieldsModel::fieldTypeList(),
  154. 'dbTypeList' =>ModelFieldsModel::dbTypeList(),
  155. 'showInTableList' =>ModelFieldsModel::showInTableList(),
  156. 'searchTypeList' =>ModelFieldsModel::searchTypeList(),
  157. 'statusList' =>ModelFieldsModel::statusList()
  158. ];
  159. return res(1,"获取成功",$data);
  160. }
  161. /**
  162. * @title: 保存模型的多个字段
  163. * @desc: 描述
  164. * @param {string} {model_name} {} {模型名}
  165. * @param {array} {list} {} {字段列表}
  166. * @return {*}
  167. * @author: Rock
  168. * @method: POST
  169. * @Date: 2023-08-29 15:30:32
  170. */
  171. public function saveList($model_name='',$list=[])
  172. {
  173. $data = $this->request->param();
  174. $fields = $this->model->where('model_name',$model_name)->column('field');
  175. if(!empty($fields)){
  176. ModelFieldsModel::deleteFields($model_name,$fields);
  177. $this->model->destroy(function($query)use($model_name){
  178. $query->where('model_name',$model_name);
  179. });
  180. }
  181. $newList = [];
  182. foreach($list as $item){
  183. if(isset($item['field_id'])){
  184. unset($item['field_id']);
  185. }
  186. $newList[] = $item;
  187. }
  188. $this->model->replace()->saveAll($newList);
  189. $fields = $this->model->where('model_name',$model_name)->column('field');
  190. ModelFieldsModel::addFields($model_name,$fields);
  191. return res(1,"保存成功");
  192. }
  193. }