From 0c1110daa59bf77ddcff2704641280f417158c10 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 12 三月 2026 14:48:26 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/ai/prompt_config.html |  134 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 111 insertions(+), 23 deletions(-)

diff --git a/src/main/webapp/views/ai/prompt_config.html b/src/main/webapp/views/ai/prompt_config.html
index fc91051..6125dd8 100644
--- a/src/main/webapp/views/ai/prompt_config.html
+++ b/src/main/webapp/views/ai/prompt_config.html
@@ -265,14 +265,33 @@
       font-size: 12px;
       color: #6f859d;
     }
-    .editor-textarea .el-textarea__inner {
-      min-height: 430px !important;
+    .block-textarea .el-textarea__inner {
+      min-height: 190px !important;
       font-family: Menlo, Monaco, Consolas, "Liberation Mono", monospace;
       font-size: 12px;
       line-height: 1.7;
       color: #243447;
       background: #fbfdff;
       border-color: #dbe7f3;
+    }
+    .preview-textarea .el-textarea__inner {
+      min-height: 260px !important;
+      font-family: Menlo, Monaco, Consolas, "Liberation Mono", monospace;
+      font-size: 12px;
+      line-height: 1.75;
+      color: #203246;
+      background: linear-gradient(180deg, #fcfdff 0%, #f7fbff 100%);
+      border-color: #d5e3f1;
+    }
+    .dynamic-context-card {
+      margin-top: 10px;
+      padding: 10px 12px;
+      border-radius: 12px;
+      border: 1px solid #e2ebf5;
+      background: linear-gradient(180deg, #fdfefe 0%, #f5fbfa 100%);
+      color: #5f7288;
+      font-size: 12px;
+      line-height: 1.75;
     }
     .editor-hint {
       margin-top: 10px;
@@ -512,14 +531,56 @@
             <div class="field-label">澶囨敞</div>
             <el-input v-model="editor.memo" size="mini" placeholder="璁板綍杩欐浼樺寲鐩殑鎴栨祴璇曠粨璁�"></el-input>
           </div>
-          <div class="editor-full">
-            <div class="field-label">Prompt鍐呭</div>
+          <div>
+            <div class="field-label">Base Policy</div>
             <el-input
-              class="editor-textarea"
+              class="block-textarea"
               type="textarea"
-              v-model="editor.content"
-              placeholder="鍦ㄨ繖閲岀紪杈� Prompt 鍐呭"
-              :autosize="{ minRows: 20, maxRows: 28 }"></el-input>
+              v-model="editor.basePolicy"
+              placeholder="瑙掕壊銆佸簳绾胯鍒欍�佺ǔ瀹氱害鏉�"
+              :autosize="{ minRows: 8, maxRows: 14 }"></el-input>
+          </div>
+          <div>
+            <div class="field-label">Tool Policy</div>
+            <el-input
+              class="block-textarea"
+              type="textarea"
+              v-model="editor.toolPolicy"
+              placeholder="浠�涔堟椂鍊欏繀椤绘煡 MCP銆佹�庝箞浣跨敤宸ュ叿鍜屽紩鐢ㄨ瘉鎹�"
+              :autosize="{ minRows: 8, maxRows: 14 }"></el-input>
+          </div>
+          <div class="editor-full">
+            <div class="field-label">Output Contract</div>
+            <el-input
+              class="block-textarea"
+              type="textarea"
+              v-model="editor.outputContract"
+              placeholder="杈撳嚭鏍煎紡銆佺粨鏋勩�佺姝簨椤广�佸伐绋嬪寲瑕佹眰"
+              :autosize="{ minRows: 7, maxRows: 12 }"></el-input>
+          </div>
+          <div class="editor-full">
+            <div class="field-label">Scene Playbook</div>
+            <el-input
+              class="block-textarea"
+              type="textarea"
+              v-model="editor.scenePlaybook"
+              placeholder="鍦烘櫙绛栫暐锛屾瘮濡備换鍔′笉鎵ц銆佽澶囧紓甯搞�佷汉宸ラ棶绛旂瓑"
+              :autosize="{ minRows: 10, maxRows: 16 }"></el-input>
+          </div>
+          <div class="editor-full">
+            <div class="field-label">缁勮棰勮</div>
+            <el-input
+              class="preview-textarea"
+              type="textarea"
+              :value="assembledPromptPreview"
+              readonly
+              :autosize="{ minRows: 12, maxRows: 18 }"></el-input>
+          </div>
+          <div class="editor-full">
+            <div class="dynamic-context-card">
+              <strong>Dynamic Context</strong><br />
+              杩欎竴灞備笉鍦ㄨ繖閲屾寔涔呭寲缁存姢銆傝繍琛屾椂浠嶇敱璇锋眰瀹炴椂娉ㄥ叆锛屾瘮濡傦細鐢ㄦ埛闂銆佸憡璀︽弿杩般�侀噸鐐硅澶囥�佹棩蹇楄寖鍥淬�乪xtraContext锛屼互鍙� Agent 鍚庣画閫氳繃 MCP 鎷夊埌鐨勫疄鏃朵簨瀹炴暟鎹��
+            </div>
           </div>
         </div>
 
@@ -540,7 +601,7 @@
             褰撳墠姝e湪缂栬緫鑽夌 v{{ editor.version || '-' }}銆備繚瀛樺彧浼氭洿鏂拌繖浠借崏绋匡紝鍙戝竷鍚庡畠浼氭浛鎹㈠綋鍓嶅満鏅殑绾夸笂鐗堟湰銆�
           </div>
           <div v-else>
-            褰撳墠鏄柊鑽夌銆備綘涓�鏂板缓瀹冨氨浼氬嚭鐜板湪宸︿晶鐗堟湰鍒楄〃閲岋紱鍙互鍏堜繚瀛橈紝鍐嶅崟鐙彂甯冦��
+            褰撳墠鏄柊鑽夌銆備綘鐜板湪缂栬緫鐨勬槸 4 涓寔涔呭寲灞傦細Base Policy銆乀ool Policy銆丱utput Contract銆丼cene Playbook锛汥ynamic Context 缁х画鐢辫繍琛屾椂娉ㄥ叆銆�
           </div>
         </div>
       </div>
@@ -570,6 +631,10 @@
           sceneCode: '',
           version: null,
           content: '',
+          basePolicy: '',
+          toolPolicy: '',
+          outputContract: '',
+          scenePlaybook: '',
           status: 1,
           published: 0,
           memo: '',
@@ -622,19 +687,22 @@
           return '鍏堜粠宸︿晶閫夋嫨鍦烘櫙锛屾垨鑰呯洿鎺ユ柊寤鸿崏绋裤��';
         }
         if (this.editor.published === 1) {
-          return '宸插彂甯冪増鏈彧浣滀负鏌ョ湅鍜屽鍒舵潵婧愶紝涓嶇洿鎺ヨ鐩栦慨鏀广��';
+          return '褰撳墠鏄凡鍙戝竷鐗堟湰锛�4 灞傚唴瀹瑰彧鑳芥煡鐪嬶紱鑻ヨ淇敼锛屽厛鍙栨秷鍙戝竷銆�';
         }
         if (this.editor.id) {
-          return '姝e湪缂栬緫宸叉湁鑽夌锛屼繚瀛樺悗涓嶄細褰卞搷绾夸笂鐗堟湰锛屽彧鏈夊彂甯冩墠浼氬垏鎹€��';
+          return '姝e湪缂栬緫宸叉湁鑽夌銆備慨鏀圭殑鏄� Prompt 鐨� 4 涓寔涔呭寲灞傦紝淇濆瓨涓嶄細褰卞搷绾夸笂鐗堟湰銆�';
         }
-        return '褰撳墠鏄柊鑽夌锛屽彲浠ヨ嚜鐢辩紪杈戝苟淇濆瓨銆�';
+        return '褰撳墠鏄柊鑽夌銆備綘鍙互鍒嗗眰缂栬緫 Prompt锛屽啀閫氳繃鍙充晶棰勮妫�鏌ユ渶缁堟嫾鎺ユ晥鏋溿��';
+      },
+      assembledPromptPreview: function() {
+        return this.composePromptPreview(this.editor);
       },
       contentCharCount: function() {
-        return this.editor.content ? this.editor.content.length : 0;
+        return this.assembledPromptPreview ? this.assembledPromptPreview.length : 0;
       },
       contentLineCount: function() {
-        if (!this.editor.content) return 0;
-        return this.editor.content.split(/\r?\n/).length;
+        if (!this.assembledPromptPreview) return 0;
+        return this.assembledPromptPreview.split(/\r?\n/).length;
       }
     },
     methods: {
@@ -645,6 +713,10 @@
           sceneCode: '',
           version: null,
           content: '',
+          basePolicy: '',
+          toolPolicy: '',
+          outputContract: '',
+          scenePlaybook: '',
           status: 1,
           published: 0,
           memo: '',
@@ -686,6 +758,10 @@
           sceneCode: item && item.sceneCode ? item.sceneCode : '',
           version: item && item.version != null ? item.version : null,
           content: item && item.content ? item.content : '',
+          basePolicy: item && item.basePolicy ? item.basePolicy : '',
+          toolPolicy: item && item.toolPolicy ? item.toolPolicy : '',
+          outputContract: item && item.outputContract ? item.outputContract : '',
+          scenePlaybook: item && item.scenePlaybook ? item.scenePlaybook : '',
           status: item && item.status != null ? item.status : 1,
           published: item && item.published != null ? item.published : 0,
           memo: item && item.memo ? item.memo : '',
@@ -722,6 +798,19 @@
       },
       buildLocalDraftKey: function() {
         return 'draft_' + Date.now() + '_' + Math.floor(Math.random() * 100000);
+      },
+      composePromptPreview: function(editor) {
+        var sections = [];
+        var append = function(label, content) {
+          var value = content == null ? '' : String(content).trim();
+          if (!value) return;
+          sections.push('銆�' + label + '銆慭n' + value);
+        };
+        append('鍩虹绛栫暐', editor && editor.basePolicy);
+        append('宸ュ叿绛栫暐', editor && editor.toolPolicy);
+        append('杈撳嚭绾﹀畾', editor && editor.outputContract);
+        append('鍦烘櫙绛栫暐', editor && editor.scenePlaybook);
+        return sections.join('\n\n');
       },
       hasUnsavedEditorForScene: function(sceneCode) {
         return !!(this.editor
@@ -885,15 +974,14 @@
         this.cloneFromTemplate(this.currentPublishedTemplate);
       },
       buildSavePayload: function() {
-        var payloadId = this.editor.id;
-        if (this.editor.published === 1) {
-          payloadId = null;
-        }
         return {
-          id: payloadId,
+          id: this.editor.id,
           name: this.editor.name,
           sceneCode: this.editor.sceneCode,
-          content: this.editor.content,
+          basePolicy: this.editor.basePolicy,
+          toolPolicy: this.editor.toolPolicy,
+          outputContract: this.editor.outputContract,
+          scenePlaybook: this.editor.scenePlaybook,
           status: this.editor.status,
           memo: this.editor.memo
         };
@@ -911,8 +999,8 @@
           self.$message.warning('璇烽�夋嫨鍦烘櫙');
           return;
         }
-        if (!self.editor.content || !self.editor.content.trim()) {
-          self.$message.warning('Prompt鍐呭涓嶈兘涓虹┖');
+        if (!self.assembledPromptPreview || !self.assembledPromptPreview.trim()) {
+          self.$message.warning('鑷冲皯濉啓涓�涓� Prompt 鍒嗘');
           return;
         }
         self.saving = true;

--
Gitblit v1.9.1