format(DB::table('agent_page_settings')->where('id', 1)->first()); } public function save(array $input): array { $data = Validator::make($input, [ 'commission_plan_html' => ['present', 'nullable', 'string', 'max:100000'], 'contact_tg_url' => ['present', 'nullable', 'string', 'max:2048'], 'agent_backend_url' => ['present', 'nullable', 'string', 'max:2048'], ], ['commission_plan_html.present' => '请提交佣金方案', 'contact_tg_url.present' => '请提交联系TG地址', 'agent_backend_url.present' => '请提交代理后台地址'])->validate(); $data['commission_plan_html'] = RichTextContent::clean((string)($data['commission_plan_html'] ?? '')); foreach (['contact_tg_url', 'agent_backend_url'] as $field) { $url = trim((string)($data[$field] ?? '')); if ($url !== '') { $parts = parse_url($url); if (preg_match('/[\x00-\x20\x7f\\\\]/', $url) || !filter_var($url, FILTER_VALIDATE_URL) || !$parts || !in_array(strtolower($parts['scheme'] ?? ''), ['http', 'https'], true) || isset($parts['user']) || isset($parts['pass'])) { throw ValidationException::withMessages([$field => '请填写完整的HTTP/HTTPS地址']); } } $data[$field] = $url; } return DB::transaction(function () use ($data) { DB::table('agent_page_settings')->insertOrIgnore(['id' => 1, 'created_at' => now(), 'updated_at' => now()]); $before = $this->format(DB::table('agent_page_settings')->where('id', 1)->lockForUpdate()->first()); if ($before !== $data) { DB::table('agent_page_settings')->where('id', 1)->update($data + ['updated_at' => now()]); OperationAuditService::record('agent_page_configuration', 1, 'update', $before, $data); } return $data; }, 3); } private function format(?object $row): array { $data = []; foreach (self::FIELDS as $field) $data[$field] = (string)($row->$field ?? ''); return $data; } }