categoryModel = new \app\admin\model\app\complaint\Category; $this->recordModel = new \app\admin\model\app\complaint\Record; } /** * 获取投诉功能配置 */ public function config() { $this->success('获取成功', [ 'status' => $this->getComplaintStatus() ]); } /** * 获取投诉类型树 */ public function category() { if ($this->getComplaintStatus() !== '1') { $this->success('投诉功能已关闭', []); } $pid = $this->request->post('pid', 0); $list = $this->categoryModel ->where(['uniacid' => UNIACID, 'pid' => $pid, 'status' => 1]) ->field('id,pid,title,description') ->order('weigh desc,id asc') ->select(); $data = []; foreach ($list as $item) { $row = $item->toArray(); $row['has_children'] = $this->categoryModel ->where(['uniacid' => UNIACID, 'pid' => $row['id'], 'status' => 1]) ->count() > 0 ? 1 : 0; $data[] = $row; } $this->success('获取成功', $data); } /** * 提交投诉 */ public function submit() { if ($this->getComplaintStatus() !== '1') { $this->error('投诉功能已关闭'); } $categoryId = $this->request->post('category_id', 0); $content = trim($this->request->post('content', '')); $images = $this->request->post('images/a', []); $targetType = $this->request->post('target_type', ''); $targetId = $this->request->post('target_id', 0); $targetTitle = $this->request->post('target_title', ''); if (!$categoryId) { $this->error('请选择投诉类型'); } if ($content === '') { $this->error('请填写投诉内容'); } if (mb_strlen($content) > 200) { $this->error('投诉内容不能超过200字'); } $images = array_values(array_filter($images)); if (count($images) > 4) { $this->error('证据截图最多上传4张'); } $lastComplaint = $this->recordModel ->where(['uniacid' => UNIACID, 'user_id' => $this->auth->id]) ->where('createtime', '>', time() - 300) ->find(); if ($lastComplaint) { $this->error('投诉提交过于频繁,请5分钟后再试'); } $category = $this->categoryModel->where(['id' => $categoryId, 'uniacid' => UNIACID, 'status' => 1])->find(); if (!$category) { $this->error('投诉类型不存在'); } $data = [ 'uniacid' => UNIACID, 'user_id' => $this->auth->id, 'category_id' => $categoryId, 'category_path' => $this->buildCategoryPath($categoryId), 'target_type' => $targetType, 'target_id' => intval($targetId), 'target_title' => $targetTitle, 'content' => $content, 'images' => json_encode(array_values($images), JSON_UNESCAPED_UNICODE), 'status' => 0, 'createtime' => time(), 'updatetime' => time(), ]; $id = $this->recordModel->insertGetId($data); $this->success('提交成功', ['id' => $id]); } /** * 获取投诉功能开关状态 */ protected function getComplaintStatus() { $config = \app\common\model\app\Config::getConfig('complaint'); if (!is_array($config) || !isset($config['status'])) { return '1'; } return (string)$config['status']; } /** * 构建投诉类型路径 */ protected function buildCategoryPath($categoryId) { $names = []; while ($categoryId) { $category = $this->categoryModel->where(['id' => $categoryId, 'uniacid' => UNIACID])->find(); if (!$category) { break; } array_unshift($names, $category['title']); $categoryId = intval($category['pid']); } return implode(' / ', $names); } }