request->get('name'))) { $name = $this->request->get('name'); $where[] = ['wac.name', 'like', '%' . $name . '%']; } // 邮箱搜索 if (!empty($this->request->get('email'))) { $email = $this->request->get('email'); $where[] = ['wac.email', 'like', '%' . $email . '%']; } // 企业搜索 if (!empty($this->request->get('company'))) { $company = $this->request->get('company'); $where[] = ['wac.company', 'like', '%' . $company . '%']; } // 状态筛选 if (!empty($this->request->get('status'))) { $status = $this->request->get('status'); $where['wac.status'] = $status; } // 排序 $order = []; if (!empty($this->request->get('order'))) { $order_a = $this->request->get('order'); $order_a = explode(',', $order_a); $order[$order_a[0]] = $order_a[1]; } else { $order['wac.id'] = 'desc'; } // 分页 $page = $this->request->get('page', 1); $limit = $this->request->get('limit', 20); $userList = Db::name('user_on') ->alias('wac') ->leftJoin('company u', 'wac.company_id = u.id') ->where($where) ->field('wac.*, u.name as company_name') ->order($order) ->paginate([ 'list_rows' => $limit, 'page' => $page ]); $this->success('查询成功', [ 'list' => $userList->items(), 'total' => $userList->total() ]); } /** * 新增/编辑用户 * @return void */ public function edit():void { $id = $this->request->post('id'); $name = $this->request->post('name'); $email = $this->request->post('email'); $password = $this->request->post('password'); $company = $this->request->post('company'); $company_id = $this->request->post('company_id'); $status = $this->request->post('status', 1); if (empty($name) || empty($email)) { $this->error(__('姓名和邮箱不能为空')); } // 验证邮箱格式 if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $this->error(__('邮箱格式不正确')); } // 检查邮箱是否已存在(编辑时排除自己) $checkEmail = Db::name('user_on') ->where('email', $email); if (!empty($id)) { $checkEmail->where('id', '<>', $id); } if ($checkEmail->find()) { $this->error(__('邮箱已存在')); } $data = [ 'name' => $name, 'email' => $email, 'company' => $company?: null, 'company_id' => $company_id?: null, 'status' => $status, 'update_time' => date('Y-m-d H:i:s') ]; // 如果有密码,进行加密 if (!empty($password)) { $data['password'] = password_hash($password, PASSWORD_DEFAULT); } Db::startTrans(); try { if (!empty($id)) { // 编辑 $result = Db::name('user_on') ->where('id', $id) ->update($data); $message = '编辑成功'; } else { // 新增 $data['create_time'] = date('Y-m-d H:i:s'); $result = Db::name('user_on') ->insert($data); $id = Db::name('user_on')->getLastInsID(); $message = '新增成功'; } Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error('操作失败: ' . $e->getMessage()); } if ($result) { $this->success($message, ['id' => $id]); } else { $this->error(__('操作失败')); } } /** * 用户详情 * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function detail():void { $id = $this->request->get('id'); if (empty($id)) { $this->error(__('参数错误')); } // 获取用户基础信息 $userInfo = Db::name('user_on') ->where('id', $id) ->find(); if (!$userInfo) { $this->error(__('用户不存在')); } // 获取用户佣金信息 $commissionInfo = Db::name('user_commission') ->where('user_id', $id) ->find(); if (!$commissionInfo) { // 如果没有佣金记录,创建默认记录 $commissionInfo = [ 'total_commission' => 0, 'current_commission' => 0, 'promotion_link' => 'xxxx.com?from=' . $id ]; } // 获取用户购买的产品列表 $productList = Db::name('user_product') ->alias('up') ->leftJoin('product p', 'up.product_id = p.id') ->where('up.user_id', $id) ->field('up.*, p.name as product_name, p.type as product_type') ->order('up.create_time', 'desc') ->select() ->toArray(); // 计算产品状态 foreach ($productList as &$product) { if (!empty($product['expire_time'])) { $product['status'] = strtotime($product['expire_time']) < time() ? '已过期' : '正常'; } else { $product['status'] = '正常'; } } // 获取下级员工(关联其他用户) $subordinateList = Db::name('user_relation') ->alias('ur') ->leftJoin('user_on u', 'ur.subordinate_id = u.id') ->where('ur.user_id', $id) ->field('u.name, ur.commission_amount, ur.status, ur.bind_time, ur.id as relation_id') ->select() ->toArray(); $result = [ 'user_info' => $userInfo, 'commission_info' => $commissionInfo, 'product_list' => $productList, 'subordinate_list' => $subordinateList ]; $this->success('查询成功', $result); } /** * 删除用户 * @return void */ public function delete():void { $id = $this->request->post('id'); if (empty($id)) { $this->error(__('参数错误')); } // 检查是否有下级员工 $hasSubordinate = Db::name('user_relation') ->where('user_id', $id) ->count(); if ($hasSubordinate > 0) { $this->error(__('该用户存在下级员工,请先处理下级关系')); } Db::startTrans(); try { // 删除用户 $result = Db::name('user_on') ->where('id', $id) ->delete(); // 删除用户佣金记录 Db::name('user_commission') ->where('user_id', $id) ->delete(); // 删除用户产品记录 Db::name('user_product') ->where('user_id', $id) ->delete(); // 删除上级关系(如果该用户是别人的下级) Db::name('user_relation') ->where('subordinate_id', $id) ->delete(); Db::commit(); } catch (\Exception $e) { Db::rollback(); $this->error('删除失败: ' . $e->getMessage()); } if ($result) { $this->success('删除成功'); } else { $this->error(__('删除失败')); } } /** * 解除下级关系 * @return void */ public function removeSubordinate():void { $relationId = $this->request->post('relation_id'); if (empty($relationId)) { $this->error(__('参数错误')); } Db::startTrans(); try { $result = Db::name('user_relation') ->where('id', $relationId) ->delete(); Db::commit(); if ($result) { $this->success('解除成功'); } else { $this->error(__('解除失败')); } } catch (\Exception $e) { Db::rollback(); $this->error('解除失败: ' . $e->getMessage()); } } /** * 获取用户状态选项 * @return void */ public function statusOptions():void { $options = [ ['value' => 1, 'label' => '启用'], ['value' => 2, 'label' => '禁用'], ['value' => 3, 'label' => '待审核'], ['value' => 4, 'label' => '审核拒绝'] ]; $this->success('获取成功', $options); } }