From d8d82ceda75fa17972d6996f83078367a19c1730 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 12 三月 2026 15:38:32 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/ai/llm_config.html |   34 +++++++++++++++++++++++++++++++++-
 1 files changed, 33 insertions(+), 1 deletions(-)

diff --git a/src/main/webapp/views/ai/llm_config.html b/src/main/webapp/views/ai/llm_config.html
index d6e2849..ba79721 100644
--- a/src/main/webapp/views/ai/llm_config.html
+++ b/src/main/webapp/views/ai/llm_config.html
@@ -268,6 +268,7 @@
         </div>
       </div>
       <div class="hero-actions">
+        <el-button size="mini" @click="goPromptCenter">Prompt閰嶇疆</el-button>
         <el-button type="primary" size="mini" @click="addRoute">鏂板璺敱</el-button>
         <el-button size="mini" @click="exportRoutes">瀵煎嚭JSON</el-button>
         <el-button size="mini" @click="triggerImport">瀵煎叆JSON</el-button>
@@ -435,6 +436,12 @@
       </el-table-column>
       <el-table-column prop="httpStatus" label="鐘舵�佺爜" width="90"></el-table-column>
       <el-table-column prop="latencyMs" label="鑰楁椂(ms)" width="95"></el-table-column>
+      <el-table-column label="Tokens" width="140">
+        <template slot-scope="scope">
+          <div>{{ logTotalTokens(scope.row) }}</div>
+          <div style="color:#909399;font-size:12px;">杈搟{ logPromptTokens(scope.row) }} / 鍑簕{ logCompletionTokens(scope.row) }}</div>
+        </template>
+      </el-table-column>
       <el-table-column prop="traceId" label="TraceId" width="230"></el-table-column>
       <el-table-column label="閿欒" min-width="220">
         <template slot-scope="scope">
@@ -472,7 +479,7 @@
 
 <script type="text/javascript" src="../../static/vue/js/vue.min.js"></script>
 <script type="text/javascript" src="../../static/vue/element/element.js"></script>
-<script type="text/javascript" src="../../static/js/common.js?v=20260309_i18n_fix1" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
 <script>
   new Vue({
     el: '#app',
@@ -533,6 +540,9 @@
       displayRouteName: function(route) {
         var value = route && route.name ? String(route.name) : '';
         return this.translateLegacyText(value);
+      },
+      goPromptCenter: function() {
+        window.location.href = 'prompt_config.html';
       },
       handleRouteNameInput: function(route, value) {
         if (!route) {
@@ -826,6 +836,7 @@
           + '妯″瀷: ' + (row.model || '-') + '\n'
           + '鐘舵�佺爜: ' + (row.httpStatus != null ? row.httpStatus : '-') + '\n'
           + '鑰楁椂: ' + (row.latencyMs != null ? row.latencyMs : '-') + ' ms\n'
+          + 'Tokens: ' + this.logTotalTokens(row) + '锛堣緭' + this.logPromptTokens(row) + ' / 鍑�' + this.logCompletionTokens(row) + '锛塡n'
           + '缁撴灉: ' + (row.success === 1 ? '鎴愬姛' : '澶辫触') + '\n'
           + '閿欒: ' + (row.errorMessage || '-') + '\n\n'
           + '璇锋眰:\n' + (row.requestContent || '-') + '\n\n'
@@ -834,6 +845,27 @@
         this.logDetailText = text;
         this.logDetailVisible = true;
       },
+      parseLogExtra: function(row) {
+        if (!row || !row.extra) return {};
+        if (typeof row.extra === 'object') return row.extra;
+        try {
+          return JSON.parse(row.extra);
+        } catch (e) {
+          return {};
+        }
+      },
+      logPromptTokens: function(row) {
+        var extra = this.parseLogExtra(row);
+        return extra && extra.promptTokens != null ? extra.promptTokens : '-';
+      },
+      logCompletionTokens: function(row) {
+        var extra = this.parseLogExtra(row);
+        return extra && extra.completionTokens != null ? extra.completionTokens : '-';
+      },
+      logTotalTokens: function(row) {
+        var extra = this.parseLogExtra(row);
+        return extra && extra.totalTokens != null ? extra.totalTokens : '-';
+      },
       deleteLog: function(row) {
         var self = this;
         if (!row || !row.id) return;

--
Gitblit v1.9.1