model = new ComplaintModel(); } public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * 获取数据列表 * @param array $params 请求参数 * @param int $pageSize 分页大小 */ public function getDataList($params, $pageSize = 15) { try { $query = $this->model->where('mark', 1); // 状态筛选 if (isset($params['status']) && $params['status'] !== '') { $query->where('status', $params['status']); } // 关键词搜索 if (isset($params['keyword']) && $params['keyword']) { $keyword = $params['keyword']; $query->where(function ($q) use ($keyword) { $q->where('realname', 'like', '%' . $keyword . '%') ->orWhere('mobile', 'like', '%' . $keyword . '%') ->orWhere('content', 'like', '%' . $keyword . '%'); }); } $list = $query->with(['user']) ->orderBy('id', 'desc') ->paginate($pageSize); $list = $list ? $list->toArray() : []; if ($list && isset($list['data'])) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? date('Y-m-d H:i:s', $item['create_time']) : ''; $item['update_time'] = $item['update_time'] ? date('Y-m-d H:i:s', $item['update_time']) : ''; // 处理图片 if (!empty($item['albums'])) { $albums = json_decode($item['albums'], true); if (is_array($albums)) { $item['albums_array'] = array_map(function($album) { // 如果是对象格式 {"url": "..."} if (is_array($album) && isset($album['url'])) { return get_image_url($album['url']); } // 如果是字符串格式 return get_image_url($album); }, $albums); } else { $item['albums_array'] = []; } } else { $item['albums_array'] = []; } // 状态文本 $item['status_text'] = $this->getStatusText($item['status']); // 用户信息 if (isset($item['user']) && !empty($item['user'])) { $item['user_name'] = $item['user']['nickname'] ?? $item['user']['username'] ?? '-'; $item['user_avatar'] = isset($item['user']['avatar']) ? get_image_url($item['user']['avatar']) : ''; } else { $item['user_name'] = '-'; $item['user_avatar'] = ''; } } } return [ 'msg' => '操作成功', 'code' => 0, 'data' => $list['data'] ?? [], 'count' => $list['total'] ?? 0, ]; } catch (\Exception $e) { return [ 'msg' => '查询失败: ' . $e->getMessage(), 'code' => 1, 'data' => [], 'count' => 0, ]; } } /** * 获取状态文本 */ private function getStatusText($status) { $statusMap = [ 1 => '待处理', 2 => '已处理' ]; return isset($statusMap[$status]) ? $statusMap[$status] : '未知'; } /** * 编辑(处理投诉) */ public function edit($data = []) { if (empty($data)) { $data = request()->all(); } if (empty($data['id'])) { return ['code' => 1, 'msg' => '参数错误']; } // 只允许修改备注和状态 $updateData = [ 'update_time' => time() ]; if (isset($data['remark'])) { $updateData['remark'] = $data['remark']; } if (isset($data['status'])) { $updateData['status'] = $data['status']; } $result = $this->model->where('id', $data['id'])->update($updateData); if ($result !== false) { ActionLogModel::setTitle("处理投诉建议"); ActionLogModel::record(); return ['code' => 0, 'msg' => '操作成功']; } return ['code' => 1, 'msg' => '操作失败']; } /** * 删除 */ public function delete() { $id = request()->post('id'); if (!$id) { return ['code' => 1, 'msg' => '参数错误']; } // 支持批量删除 if (is_array($id)) { $result = $this->model->whereIn('id', $id)->update(['mark' => 0]); } else { $result = $this->model->where('id', $id)->update(['mark' => 0]); } if ($result) { ActionLogModel::setTitle("删除投诉建议"); ActionLogModel::record(); return ['code' => 0, 'msg' => '删除成功']; } return ['code' => 1, 'msg' => '删除失败']; } /** * 修改状态 */ public function status() { $params = request()->all(); $id = isset($params['id']) ? intval($params['id']) : 0; $status = isset($params['status']) ? intval($params['status']) : 0; if (!$id) { return ['code' => 1, 'msg' => 'ID不能为空']; } if (!$status || ($status != 1 && $status != 2)) { return ['code' => 1, 'msg' => '状态参数错误']; } $result = $this->model->where('id', $id)->update([ 'status' => $status, 'update_time' => time() ]); if ($result !== false) { ActionLogModel::setTitle("修改投诉状态"); ActionLogModel::record(); return ['code' => 0, 'msg' => '状态修改成功']; } return ['code' => 1, 'msg' => '状态修改失败']; } /** * 获取详情 */ public function getInfo($id) { $info = $this->model->with(['user'])->where('id', $id)->where('mark', 1)->first(); if (!$info) { return ['code' => 1, 'msg' => '数据不存在']; } $info = $info->toArray(); // 处理图片 if (!empty($info['albums'])) { $albums = json_decode($info['albums'], true); if (is_array($albums)) { $info['albums_array'] = array_map(function($album) { // 如果是对象格式 {"url": "..."} if (is_array($album) && isset($album['url'])) { return get_image_url($album['url']); } // 如果是字符串格式 return get_image_url($album); }, $albums); } else { $info['albums_array'] = []; } } else { $info['albums_array'] = []; } // 用户信息 if (isset($info['user']) && !empty($info['user'])) { $info['user_name'] = $info['user']['nickname'] ?? $info['user']['username'] ?? '-'; $info['user_avatar'] = isset($info['user']['avatar']) ? get_image_url($info['user']['avatar']) : ''; } else { $info['user_name'] = '-'; $info['user_avatar'] = ''; } return ['code' => 0, 'data' => $info]; } }