param('page', 1, 'int'); $pageSize = $request->param('pageSize', 10, 'int'); $tenantId = $request->param('tenant_id', 0, 'int'); $status = $request->param('status', ''); $subDomain = $request->param('sub_domain', ''); $where = [['delete_time', '=', null]]; if ($tenantId > 0) { $where[] = ['tenant_id', '=', $tenantId]; } if ($status !== '' && $status !== null) { $where[] = ['status', '=', $status]; } if ($subDomain) { $where[] = ['sub_domain', 'like', "%$subDomain%"]; } $list = Db::name('mete_tenant_domain') ->where($where) ->page($page, $pageSize) ->order('id', 'desc') ->select() ->toArray(); $total = Db::name('mete_tenant_domain') ->where($where) ->count(); // 获取租户名称 $tenantIds = array_column($list, 'tenant_id'); $tenants = []; if ($tenantIds) { $tenantList = Db::name('mete_tenant') ->whereIn('id', $tenantIds) ->select() ->toArray(); $tenants = array_column($tenantList, null, 'id'); } // 附加租户名称 foreach ($list as &$item) { $item['tenant_name'] = $tenants[$item['tenant_id']]['tenant_name'] ?? ''; } return json([ 'code' => 200, 'msg' => 'success', 'data' => [ 'list' => $list, 'total' => $total ] ]); } /** * 获取当前租户的域名列表(租户端) */ public function myDomains(Request $request) { $tid = $request->param('tid', 0, 'int'); if ($tid <= 0) { return json([ 'code' => 400, 'msg' => '租户ID不能为空' ]); } $list = Db::name('mete_tenant_domain') ->where('tenant_id', $tid) ->where('delete_time', null) ->order('id', 'desc') ->select() ->toArray(); return json([ 'code' => 200, 'msg' => 'success', 'data' => $list ]); } /** * 租户申请二级域名 */ public function apply(Request $request) { $tid = $request->param('tenant_id', 0, 'int'); $subDomain = $request->param('sub_domain', ''); $mainDomain = $request->param('main_domain', ''); if ($tid <= 0) { return json([ 'code' => 400, 'msg' => '租户ID不能为空' ]); } if (empty($subDomain)) { return json([ 'code' => 400, 'msg' => '二级域名前缀不能为空' ]); } if (empty($mainDomain)) { return json([ 'code' => 400, 'msg' => '请选择主域名' ]); } // 验证域名格式(只能包含字母、数字、连字符) if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$/', $subDomain)) { return json([ 'code' => 400, 'msg' => '二级域名前缀格式不正确' ]); } // 检查主域名是否存在且启用 $mainDomainInfo = Db::name('mete_system_domain_pool') ->where('main_domain', $mainDomain) ->where('status', 1) ->where('delete_time', null) ->find(); if (!$mainDomainInfo) { return json([ 'code' => 400, 'msg' => '主域名不存在或已禁用' ]); } // 检查二级域名是否已被使用 $exists = Db::name('mete_tenant_domain') ->where('sub_domain', $subDomain) ->where('main_domain', $mainDomain) ->where('delete_time', null) ->find(); if ($exists) { return json([ 'code' => 400, 'msg' => '该二级域名已被使用' ]); } $fullDomain = $subDomain . '.' . $mainDomain; $now = date('Y-m-d H:i:s'); $id = Db::name('mete_tenant_domain')->insertGetId([ 'tenant_id' => $tid, 'sub_domain' => $subDomain, 'main_domain' => $mainDomain, 'full_domain' => $fullDomain, 'status' => 0, // 审核中 'create_time' => $now, 'update_time' => $now ]); return json([ 'code' => 200, 'msg' => '申请提交成功,等待审核', 'data' => ['id' => $id] ]); } /** * 审核租户域名(通过/拒绝) */ public function audit(Request $request) { $id = $request->param('id', 0, 'int'); $action = $request->param('action', ''); // 'approve' 或 'reject' if ($id <= 0) { return json([ 'code' => 400, 'msg' => '参数错误' ]); } $domain = Db::name('mete_tenant_domain') ->where('id', $id) ->find(); if (!$domain) { return json([ 'code' => 404, 'msg' => '域名不存在' ]); } if ($domain['status'] != 0) { return json([ 'code' => 400, 'msg' => '该域名已审核过了' ]); } $newStatus = $action === 'approve' ? 1 : 2; // 1-已生效 2-已拒绝 Db::name('mete_tenant_domain') ->where('id', $id) ->update([ 'status' => $newStatus, 'update_time' => date('Y-m-d H:i:s') ]); $msg = $action === 'approve' ? '审核通过' : '已拒绝'; return json([ 'code' => 200, 'msg' => $msg ]); } /** * 禁用/启用租户域名 */ public function toggleStatus(Request $request) { $id = $request->param('id', 0, 'int'); if ($id <= 0) { return json([ 'code' => 400, 'msg' => '参数错误' ]); } $domain = Db::name('mete_tenant_domain') ->where('id', $id) ->find(); if (!$domain) { return json([ 'code' => 404, 'msg' => '域名不存在' ]); } // 只有已生效的域名才能被禁用 if ($domain['status'] != 1) { return json([ 'code' => 400, 'msg' => '只有已生效的域名才能被禁用' ]); } // 切换为禁用状态 Db::name('mete_tenant_domain') ->where('id', $id) ->update([ 'status' => 2, 'update_time' => date('Y-m-d H:i:s') ]); return json([ 'code' => 200, 'msg' => '已禁用' ]); } /** * 删除租户域名(软删除) */ public function delete($id) { if ($id <= 0) { return json([ 'code' => 400, 'msg' => '参数错误' ]); } Db::name('mete_tenant_domain') ->where('id', $id) ->update([ 'delete_time' => date('Y-m-d H:i:s') ]); return json([ 'code' => 200, 'msg' => '删除成功' ]); } }