Brand.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace app\admin\controller;
  3. use app\user\model\AccountItem;use think\App;use think\facade\Validate;
  4. class Brand extends Base{
  5. public function __construct(App $app) {
  6. parent::__construct($app);
  7. $this->model=new \app\admin\model\Brand();
  8. }
  9. /**
  10. * 列出品牌管理列表
  11. *
  12. * 根据请求参数分页查询品牌管理信息,支持根据品牌名称、状态、创建时间范围进行过滤。
  13. * 返回品牌的分页列表,包含每条品牌信息的详细数据。
  14. *
  15. * @param string $param 搜索条件,包括页码、每页数量、品牌名称、状态、时间范围等。
  16. * @return \think\Response|\think\response\Json 返回查询结果的分页对象或JSON响应。
  17. * @throws \think\db\exception\DbException 如果数据库查询出错,则抛出异常。
  18. */
  19. public function list()
  20. {
  21. // 获取请求参数,包括页码、每页数量、品牌名称、状态和时间范围,并进行trim操作。
  22. $param = $this->request->param(['page' => 1, 'size' => 10, 'brand_name' => '', 'status' => '', "start" => "", "end" => ""], "post", "trim");
  23. // 定义初始查询条件,排除已删除的记录。
  24. $where = [["is_del", "=", 0]];
  25. // 如果品牌名称不为空,则添加到查询条件中,进行模糊搜索。
  26. if ($param['brand_name'] != "") $where[] = ["brand_name", "like", "%{$param['brand_name']}%"];
  27. // 如果状态不为空,则添加到查询条件中,进行精确查询。
  28. if ($param['status'] !== "") $where[] = ["status", "=", $param['status']];
  29. // 如果开始时间不为空,则添加到查询条件中,查询大于等于开始时间的记录。
  30. if ($param['start'] != "") $where[] = ["addtime", ">=", startTime($param['start'])];
  31. // 如果结束时间不为空,则添加到查询条件中,查询小于结束时间的记录。
  32. if ($param['end'] != "") $where[] = ["addtime", "<", endTime($param['end'])];
  33. // 根据查询条件进行查询,并按id降序排序,分页获取数据。
  34. $list = $this->model->where($where)
  35. ->order("id desc")
  36. ->paginate(["page" => $param['page'], "list_rows" => $param['size']]);
  37. // 遍历查询结果,补充每个品牌的创建者所属公司的名称。
  38. $list->each(function (&$item) {
  39. $userinfo = AccountItem::with(['ItemName'])->where(["account_id" => $item['createrid']])->findOrEmpty();
  40. $item['company_name'] = $userinfo->depart_name ?? "";
  41. });
  42. // 返回成功响应,包含品牌列表数据和总条数。
  43. return success("获取成功", ["list" => $list->items(), "count" => $list->total()]);
  44. }
  45. /**
  46. * 添加品牌
  47. *
  48. * 根据请求参数添加新的品牌信息。
  49. * 返回添加成功或失败的消息。
  50. *
  51. * @param string $param 添加品牌信息的请求参数,包括品牌名称、logo URL、创建者ID、创建者名称等。
  52. * @return \think\Response|\think\response\Json 返回添加成功或失败的消息。
  53. */
  54. public function create()
  55. {
  56. $param = $this->request->param(['brand_name' => '', 'logo_url' => '', 'is_del' => '0'], "post", "trim");
  57. $valid=Validate::rule([
  58. 'brand_name|品牌名称'=>'require|max:255|unique:\app\admin\model\Brand,brand_name^is_del',
  59. 'logo_url|品牌logo'=>'url'
  60. ]);
  61. if(!$valid->check($param)){
  62. return error($valid->getError());
  63. }
  64. $data=[
  65. 'brand_name'=>$param['brand_name'],
  66. 'logo_url'=>$param['logo_url'],
  67. 'createrid'=>$this->uid,
  68. 'creater'=>$this->uname,
  69. ];
  70. $save=$this->model->save($data);
  71. if($save){
  72. return success("添加成功");
  73. }else{
  74. return error("添加失败");
  75. }
  76. }
  77. /**
  78. * 修改品牌
  79. * @param string $param 修改品牌信息的请求参数,包括品牌ID、品牌名称、logo URL、状态等。
  80. * @return \think\Response|\think\response\Json|void
  81. */
  82. public function save()
  83. {
  84. $param = $this->request->param(['id' => '', 'brand_name' => '', 'logo_url' => '', 'is_del' => '0'], "post", "trim");
  85. $valid=Validate::rule([
  86. 'id|品牌id'=>'require|integer',
  87. 'brand_name|品牌名称'=>'require|max:255|unique:\app\admin\model\Brand,brand_name^is_del',
  88. 'logo_url|品牌logo'=>'url'
  89. ]);
  90. if(!$valid->check($param)){
  91. return error($valid->getError());
  92. }
  93. $info = $this->model->findOrEmpty($param['id']);
  94. if ($info->isEmpty()) {
  95. return error("未找到该品牌");
  96. }
  97. $info->brand_name = $param['brand_name'];
  98. $info->logo_url = $param['logo_url'];
  99. $save = $info->save();
  100. if ($save) {
  101. return success("修改成功");
  102. } else {
  103. return error("修改失败");
  104. }
  105. }
  106. /** 删除品牌
  107. * @param string $param 删除品牌信息的请求参数,包括品牌ID。
  108. * @return \think\Response|\think\response\Json|void
  109. */
  110. public function delete()
  111. {
  112. $param = $this->request->param(['id' => '', 'is_del' => '0'], "post", "trim");
  113. $valid=Validate::rule([
  114. 'id|品牌id'=>'require|integer',
  115. ]);
  116. if(!$valid->check($param)){
  117. return error($valid->getError());
  118. }
  119. $info = $this->model->findOrEmpty($param['id']);
  120. if ($info->isEmpty()) {
  121. return error("未找到该品牌");
  122. }
  123. if($info->is_del==1){
  124. return error("该品牌已被删除");
  125. }
  126. if($info->status==1){
  127. return error("该品牌已被使用,无法删除");
  128. }
  129. $info->is_del = 1;
  130. $save = $info->save();
  131. if ($save) {
  132. return success("删除成功");
  133. } else {
  134. return error("删除失败");
  135. }
  136. }
  137. /** 品牌状态
  138. * @param string $param 品牌状态的请求参数,包括品牌ID、状态。
  139. */
  140. public function status()
  141. {
  142. $param = $this->request->param(['id' => '', 'status' => '0'], "post", "trim");
  143. $valid=Validate::rule([
  144. 'id|品牌id'=>'require|number|gt:0',
  145. 'status|状态'=>'require|in:0,1'
  146. ]);
  147. if(!$valid->check($param)){
  148. return error($valid->getError());
  149. }
  150. $info = $this->model->findOrEmpty($param['id']);
  151. if ($info->isEmpty()) {
  152. return error("未找到该品牌");
  153. }
  154. if($info->status==$param['status']){
  155. return error("该品牌状态已为".\app\admin\model\Brand::$statusCn[$param['status']]);
  156. }
  157. $info->status = $param['status'];
  158. $save = $info->save();
  159. if($save==false)return error(\app\admin\model\Brand::$statusCn[$param['status']]."失败");
  160. return success(\app\admin\model\Brand::$statusCn[$param['status']]."成功");
  161. }
  162. /** 获取品牌列表
  163. * @param string $param 获取品牌列表的请求参数,包括每页条数、品牌名称。
  164. * @return \think\Response|\think\response\Json|void
  165. */
  166. public function getBrandList()
  167. {
  168. $param = $this->request->param(['size' => 100,"brand_name"=>""], "post", "trim");
  169. $where=[["is_del","=",0]];
  170. if($param['brand_name']!=''){
  171. $where[]=["brand_name","like","%".$param['brand_name']."%"];
  172. }
  173. $list = $this->model->where($where)->field("id,brand_name,status,length(brand_name) len_name")
  174. ->order("len_name asc")->limit($param['size'])->select();
  175. return success("获取成功", $list);
  176. }
  177. }