From dea936828be7c11fedc6e583074517e7bc496977 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Wed, 21 Oct 2026 15:48:45 +0800 Subject: [PATCH] feat: enhance ChatLogDetailDrawer with resource API integration and update API key generation logic --- .../chat_user_api_key_serializers.py | 35 +++++++++++-------- ui/src/conversation-panel/view/log/index.vue | 17 +++++++-- .../chat-log/ChatLogDetailDrawer.vue | 4 +-- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/apps/chat/serializers/chat_user_api_key_serializers.py b/apps/chat/serializers/chat_user_api_key_serializers.py index ab0d7bce1f5..a22153428f0 100644 --- a/apps/chat/serializers/chat_user_api_key_serializers.py +++ b/apps/chat/serializers/chat_user_api_key_serializers.py @@ -14,20 +14,23 @@ class ChatUserApiKeyModelSerializer(serializers.ModelSerializer): class Meta: model = ChatUserApiKey - fields = ['id', 'secret_key', 'is_active', 'create_time', 'user_id'] + fields = ["id", "secret_key", "is_active", "create_time", "user_id"] class ChatUserApiKeySerializer(serializers.Serializer): - user_id = serializers.UUIDField(required=True, label=_('user id')) - order_by = serializers.CharField(required=False, label=_('order by'), allow_null=True, allow_blank=True) + user_id = serializers.UUIDField(required=True, label=_("user id")) + order_by = serializers.CharField(required=False, label=_("order by"), allow_null=True, allow_blank=True) def generate(self, with_valid=True): if with_valid: self.is_valid(raise_exception=True) + user_id = self.data.get("user_id") + # 一个用户只保留一个 key;每次生成都作废旧 key 并重新生成一个新的 + QuerySet(ChatUserApiKey).filter(user_id=user_id).delete() api_key = ChatUserApiKey( id=uuid.uuid7(), secret_key=hashlib.md5(uuid.uuid7().bytes).hexdigest(), - user_id=self.data.get('user_id') + user_id=user_id, ) api_key.save() return ChatUserApiKeyModelSerializer(api_key).data @@ -35,22 +38,24 @@ def generate(self, with_valid=True): def page(self, current_page: int, page_size: int, with_valid=True): if with_valid: self.is_valid(raise_exception=True) - user_id = self.data.get('user_id') + user_id = self.data.get("user_id") query_set = QuerySet(ChatUserApiKey).filter(user_id=user_id) - order_by = '-create_time' if self.data.get('order_by') is None or self.data.get('order_by') == '' else self.data.get('order_by') + order_by = ( + "-create_time" + if self.data.get("order_by") is None or self.data.get("order_by") == "" + else self.data.get("order_by") + ) query_set = query_set.order_by(order_by) - return page_search(current_page, page_size, - query_set, - post_records_handler=lambda u: ChatUserApiKeyModelSerializer(u).data) + return page_search( + current_page, page_size, query_set, post_records_handler=lambda u: ChatUserApiKeyModelSerializer(u).data + ) class Operate(serializers.Serializer): - id = serializers.UUIDField(required=True, label=_('api key id')) - user_id = serializers.UUIDField(required=True, label=_('user id')) + id = serializers.UUIDField(required=True, label=_("api key id")) + user_id = serializers.UUIDField(required=True, label=_("user id")) def destroy(self, with_valid=True): if with_valid: self.is_valid(raise_exception=True) - QuerySet(ChatUserApiKey).filter( - id=self.data.get('id'), user_id=self.data.get('user_id') - ).delete() - return True \ No newline at end of file + QuerySet(ChatUserApiKey).filter(id=self.data.get("id"), user_id=self.data.get("user_id")).delete() + return True diff --git a/ui/src/conversation-panel/view/log/index.vue b/ui/src/conversation-panel/view/log/index.vue index ac1a9a41e4b..01583eb52ce 100644 --- a/ui/src/conversation-panel/view/log/index.vue +++ b/ui/src/conversation-panel/view/log/index.vue @@ -1,6 +1,7 @@