From 6cd6a403fc6e447d38b9d58ef940abea76c4fda4 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期一, 09 二月 2026 10:10:01 +0800
Subject: [PATCH] 1
---
open-rcs/components/content/content-interface-word.html | 2200 +++++++++++++++++---------------------------------
/dev/null | 57 -
open-rcs/pages/index-main.html | 33
open-rcs/components/sidebar/sidebar-interface-word.html | 223 ++++
open-rcs/components/sidebar/sidebar-platform-spec.html | 17
5 files changed, 966 insertions(+), 1,564 deletions(-)
diff --git a/open-rcs/components/content/content-interface-word.html b/open-rcs/components/content/content-interface-word.html
index 1ea61fb..a3a0e67 100644
--- a/open-rcs/components/content/content-interface-word.html
+++ b/open-rcs/components/content/content-interface-word.html
@@ -923,11 +923,11 @@
<td><span style="color: #999;">閫夊~</span></td>
<td>璇锋眰鏃堕棿鎴筹紝鏍煎紡: <code>yyyy-MM-dd HH:mm:ss</code>銆傜敱涓婂眰绯荤粺璁惧畾銆�</td>
</tr>
- <!-- <tr>-->
- <!-- <td><code>clientCode</code></td>-->
- <!-- <td><span style="color: #999;">閫夊~</span></td>-->
- <!-- <td>瀹㈡埛绔紪鍙凤紝濡� PDA銆丠CWMS 绛夈�傚鏋滃~鍐欙紝闇�鍏堝湪 RCS-2000 绯荤粺閰嶇疆锛屼笂灞傜郴缁熻皟鐢ㄦ椂杩涜濉啓锛屽綋澶氱郴缁熻皟鐢ㄦ椂锛岃皟搴︾郴缁熷彲浠ヨ繘琛岃皟鐢ㄦ柟鍖哄垎銆�</td>-->
- <!-- </tr>-->
+ <!-- <tr>
+ <td><code>clientCode</code></td>
+ <td><span style="color: #999;">閫夊~</span></td>
+ <td>瀹㈡埛绔紪鍙凤紝濡� PDA銆丠CWMS 绛夈�傚鏋滃~鍐欙紝闇�鍏堝湪 RCS-2000 绯荤粺閰嶇疆锛屼笂灞傜郴缁熻皟鐢ㄦ椂杩涜濉啓锛屽綋澶氱郴缁熻皟鐢ㄦ椂锛岃皟搴︾郴缁熷彲浠ヨ繘琛岃皟鐢ㄦ柟鍖哄垎銆�</td>
+ </tr>-->
<tr>
<td><code>tokenCode</code></td>
<td><span style="color: #999;">閫夊~</span></td>
@@ -970,621 +970,10 @@
</section>
-<!-- 鐢熸垚浠诲姟鍗� -->
-<section id="api-task-create" class="api-section">
- <h2>鐢熸垚浠诲姟鍗�* <span class="tag">甯哥敤</span></h2>
- <div class="api-info">
- <h3>
- <span class="api-method method-post">POST</span>
- <span>鍒涘缓鎼繍浠诲姟</span>
- </h3>
- <div class="api-url">/api/open/bus/submit</div>
-
- <h4>璇锋眰鍙傛暟</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td><code>batchNo</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>鎵规缂栧彿锛堜笂灞傜郴缁熺敓鎴愶紝鍞竴鏍囪瘑锛�</td>
- </tr>
- <tr>
- <td><code>tasks</code></td>
- <td>array</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>浠诲姟鏁扮粍锛屽寘鍚叿浣撶殑浠诲姟璇︽儏</td>
- </tr>
- </tbody>
- </table>
-
- <h4>浠诲姟鏁扮粍鍏冪礌鍙傛暟</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>taskNo</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>浠诲姟缂栧彿锛堜笂灞傜郴缁熺敓鎴愶紝鍞竴鏍囪瘑锛�</td>
- </tr>
- <tr>
- <td><code>oriSta</code></td>
- <td>string</td>
- <td><span style="color: #999;">鍚�</span></td>
- <td>璧风偣绔欑偣缂栧彿</td>
- </tr>
- <tr>
- <td><code>destSta</code></td>
- <td>string</td>
- <td><span style="color: #999;">鍚�</span></td>
- <td>缁堢偣绔欑偣缂栧彿</td>
- </tr>
- <tr>
- <td><code>oriLoc</code></td>
- <td>string</td>
- <td><span style="color: #999;">鍚�</span></td>
- <td>璧风偣搴撲綅缂栧彿</td>
- </tr>
- <tr>
- <td><code>destLoc</code></td>
- <td>string</td>
- <td><span style="color: #999;">鍚�</span></td>
- <td>缁堢偣搴撲綅缂栧彿</td>
- </tr>
- <tr>
- <td><code>priority</code></td>
- <td>int</td>
- <td><span style="color: #999;">鍚�</span></td>
- <td>浼樺厛绾э細1-300锛岄粯璁や负1</td>
- </tr>
-
- </tbody>
- </table>
-
- <h4>璇锋眰绀轰緥</h4>
- <pre><code>{
-
- "batchNo": "122334",
- "tasks": [
- {
- "taskNo": "TASK20231220001",
- "oriLoc": "A100100101",
- "destSta": "STA001",
- "priority": 1
- },
- {
- "taskNo": "TASK20231220001",
- "oriSta": "STA002",
- "destLoc": "B02-03-05",
- "priority": 2
- }
- ]
-}</code></pre>
-
- <h4>杩斿洖绀轰緥</h4>
- <pre><code>{
- "code": 200,
- "message": "浠诲姟鍒涘缓鎴愬姛",
- "data": {
- "taskNo": "TASK20231220001",
- "taskId": "T1234567890",
- "status": "ASSIGN"
- },
- "timestamp": 1671526800000
-}</code></pre>
- </div>
-
- <div class="mock-container">
- <h4>Mock 娴嬭瘯</h4>
- <button class="mock-toggle-btn" onclick="toggleMockContent(this)">灞曞紑</button>
- <div class="mock-content collapsed">
- <div class="mode-switch">
- <button class="active" onclick="switchInputMode('task-create', 'form')" id="task-create-form-btn">
- 琛ㄥ崟杈撳叆
- </button>
- <button onclick="switchInputMode('task-create', 'json')" id="task-create-json-btn">JSON杈撳叆</button>
- </div>
- <div class="mock-form">
- <div class="form-input-container" id="task-create-form-container">
- <h5>璇锋眰鍙傛暟</h5>
- <div class="form-group">
- <label>taskNo <span class="required">*</span></label>
- <input type="text" id="task-create-taskNo" placeholder="TASK20231220001"
- value="TASK20231220001">
- <div class="error-msg" id="task-create-taskNo-error">璇疯緭鍏ヤ换鍔$紪鍙�</div>
- </div>
- <div class="form-group">
- <label>batchNo <span class="required">*</span></label>
- <input type="text" id="task-create-batchNo" placeholder="122334"
- value="122334">
- <div class="error-msg" id="task-create-batchNo-error">璇疯緭鍏ユ壒娆$紪鍙�</div>
- </div>
- <div class="form-group">
- <label>taskType <span class="required">*</span></label>
- <select id="task-create-taskType">
- <option value="1" selected>1 - 鍑哄簱(oriLoc鍜宒estSta蹇呭~)</option>
- <option value="2">2 - 鍏ュ簱(oriSta鍜宒estLoc蹇呭~)</option>
- <option value="3">3 - 搴撲綅闂寸Щ搴�(oriLoc鍜宒estLoc蹇呭~)</option>
- <option value="4">4 - 绔欑偣闂存惉杩�(oriSta鍜宒estSta蹇呭~)</option>
- </select>
- <div class="error-msg" id="task-create-taskType-error">璇烽�夋嫨浠诲姟绫诲瀷</div>
- </div>
- <div class="form-group">
- <label>oriSta</label>
- <input type="text" id="task-create-oriSta" placeholder="STA001" value="">
- <div class="hint">璧风偣绔欑偣缂栧彿</div>
- </div>
- <div class="form-group">
- <label>destSta</label>
- <input type="text" id="task-create-destSta" placeholder="STA002" value="STA001">
- <div class="hint">缁堢偣绔欑偣缂栧彿</div>
- </div>
- <div class="form-group">
- <label>oriLoc</label>
- <input type="text" id="task-create-oriLoc" placeholder="A100100101" value="A100100101">
- <div class="hint">璧风偣搴撲綅缂栧彿</div>
- </div>
- <div class="form-group">
- <label>destLoc</label>
- <input type="text" id="task-create-destLoc" placeholder="B02-03-05" value="">
- <div class="hint">缁堢偣搴撲綅缂栧彿</div>
- </div>
- <div class="form-group">
- <label>priority</label>
- <input type="text" id="task-create-priority" placeholder="1" value="1">
- <div class="hint">浼樺厛绾э細1-300锛岄粯璁や负1</div>
- </div>
-
- </div>
- <div class="json-input-container" id="task-create-json-container">
- <h5>JSON杈撳叆</h5>
- <textarea class="json-textarea" id="task-create-json">{
- "taskNo": "TASK20231220001",
- "batchNo": "122334",
- "tasks": [
- {
- "oriLoc": "A100100101",
- "destSta": "STA001",
- "priority": 1
-
- }
- ]
-}</textarea>
- <div class="error-msg" id="task-create-json-error">璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡</div>
- </div>
- <div class="mock-form-actions">
- <button class="mock-btn" onclick="mockTaskCreate()">鎵ц Mock 璇锋眰</button>
- <button class="reset-btn" onclick="resetTaskCreateForm()">閲嶇疆</button>
- </div>
- </div>
- <div id="mock-task-create-result" class="mock-result"></div>
- </div>
- </div>
-</section>
-
-<!-- 鍙栨秷浠诲姟 -->
-<section id="api-task-cancel" class="api-section">
- <h2>鍙栨秷浠诲姟鍗�* <span class="tag">甯哥敤</span></h2>
- <div class="api-info">
- <h3>
- <span class="api-method method-post">POST</span>
- <span>鍙栨秷宸插垱寤虹殑浠诲姟</span>
- </h3>
- <div class="api-url">/api/open/task/cancel</div>
-
- <h4>璇锋眰鍙傛暟</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td><code>tasks</code></td>
- <td>array</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>瑕佸彇娑堢殑浠诲姟缂栧彿鏁扮粍</td>
- </tr>
- <tr>
- <td><code>batchNo</code></td>
- <td>string</td>
- <td><span style="color: RED;">鏄�</span></td>
- <td>浠诲姟鎵规缂栧彿</td>
- </tr>
- </tbody>
- </table>
-
- <h4>璇锋眰绀轰緥</h4>
- <pre><code>{
- 鈥渂atchNo鈥�: 鈥�12345鈥�,
- 鈥渢asks鈥�: [鈥�123鈥�, 鈥�456鈥漖
-}</code></pre>
-
- <h4>杩斿洖绀轰緥</h4>
- <pre><code>{
- code: 200,
- msg: 鈥樷�︹��,
- data: [
- {
- 鈥渢askNo鈥�: 鈥�123鈥�,
- 鈥渟uccess鈥�: true,
- 鈥渕sg鈥�: null
- },
- {
- 鈥渢askNo鈥�: 鈥�456鈥�,
- 鈥渟uccess鈥�: false,
- 鈥渕sg鈥�: 鈥�456 is not exist鈥�
- }
- ]
-}</code></pre>
-
- <div class="note">
- <div class="note-title">娉ㄦ剰浜嬮」</div>
- <p>鈥� 宸茬粡鍦ㄦ墽琛屼腑鐨勪换鍔℃棤娉曞彇娑堬紝浼氳繑鍥炵浉搴旈敊璇爜</p>
- <p>鈥� 鍙栨秷浠诲姟鍚庯紝AGV浼氬仠姝㈡墽琛屽苟杩斿洖寰呭懡鐘舵��</p>
- </div>
- </div>
-
- <div class="mock-container">
- <h4>Mock 娴嬭瘯</h4>
- <button class="mock-toggle-btn" onclick="toggleMockContent(this)">灞曞紑</button>
- <div class="mock-content collapsed">
- <div class="mode-switch">
- <button class="active" onclick="switchInputMode('task-cancel', 'form')" id="task-cancel-form-btn">
- 琛ㄥ崟杈撳叆
- </button>
- <button onclick="switchInputMode('task-cancel', 'json')" id="task-cancel-json-btn">JSON杈撳叆</button>
- </div>
- <div class="mock-form">
- <div class="form-input-container" id="task-cancel-form-container">
- <h5>璇锋眰鍙傛暟</h5>
- <div class="form-group">
- <label>tasks <span class="required">*</span></label>
- <input type="text" id="task-cancel-tasks" placeholder="TASK20231220001,TASK20231220002"
- value="TASK20231220001,TASK20231220002">
- <div class="error-msg" id="task-cancel-tasks-error">璇疯緭鍏ヨ鍙栨秷鐨勪换鍔$紪鍙�</div>
- <div class="hint">澶氫釜浠诲姟缂栧彿璇风敤閫楀彿鍒嗛殧</div>
- </div>
- <div class="form-group">
- <label>batchNo</label>
- <input type="text" id="task-cancel-batchNo" placeholder="12345"
- value="12345">
- <div class="hint">浠诲姟鎵规缂栧彿锛堥�夊~锛�</div>
- </div>
- </div>
- <div class="json-input-container" id="task-cancel-json-container">
- <h5>JSON杈撳叆</h5>
- <textarea class="json-textarea" id="task-cancel-json">{
- "batchNo": "12345",
- "tasks": ["TASK20231220001", "TASK20231220002"]
-}</textarea>
- <div class="error-msg" id="task-cancel-json-error">璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡</div>
- </div>
- <div class="mock-form-actions">
- <button class="mock-btn" onclick="mockTaskCancel()">鎵ц Mock 璇锋眰</button>
- <button class="reset-btn" onclick="resetTaskCancelForm()">閲嶇疆</button>
- </div>
- </div>
- <div id="mock-task-cancel-result" class="mock-result"></div>
- </div>
- </div>
-</section>
-
-<!-- 浠诲姟鎵ц閫氱煡 -->
-<section id="api-task-notice" class="api-section">
- <h2>浠诲姟鎵ц閫氱煡* <span class="tag">鍥炶皟鎺ュ彛</span></h2>
- <div class="api-info">
- <h3>
- <span class="api-method method-post">POST</span>
- <span>RCS鍥炶皟涓婂眰绯荤粺鎺ュ彛</span>
- </h3>
- <div class="api-url">/api/open/task/report</div>
-
- <div class="note" style="background: linear-gradient(135deg, #e3f2fd, #bbdefb); border-left-color: #2196f3;">
- <div class="note-title" style="color: #1565c0;">馃摙 鎺ュ彛璇存槑</div>
- <p style="color: #1976d2;">姝ゆ帴鍙g敱<strong>涓婂眰绯荤粺鎻愪緵</strong>锛孯CS绯荤粺鍦ㄤ换鍔$姸鎬佸彂鐢熷彉鍖栨椂涓诲姩鍥炶皟銆備笂灞傜郴缁熼渶瑕佸疄鐜版鎺ュ彛骞堕厤缃洖璋冨湴鍧�鍒癛CS绯荤粺涓��
- </p>
- </div>
-
- <h4>璇锋眰鍙傛暟锛圧CS鎺ㄩ�侊級</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>batchNo</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>浠诲姟鎵规</td>
- </tr>
- <tr>
- <td><code>taskNo</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>浠诲姟缂栧彿</td>
- </tr>
- <tr>
- <td><code>timestamp</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>鏃堕棿鎴�</td>
- </tr>
- </tbody>
- </table>
-
- <h4>鎺ㄩ�佺ず渚嬶紙RCS 鈫� 涓婂眰绯荤粺锛�</h4>
- <pre><code>{
- "taskNo": "TASK20231220001",
- "batchNo": "2345",
- "timestamp": "2023-12-20 14:30:25"
-}</code></pre>
-
- <h4>杩斿洖绀轰緥锛堜笂灞傜郴缁熼渶杩斿洖锛�</h4>
- <pre><code>{
- "code": 200,
- "message": "鎺ユ敹鎴愬姛"
-}</code></pre>
-
-
- </div>
-
- <div class="mock-container">
- <h4>Mock 娴嬭瘯锛堟ā鎷烺CS鎺ㄩ�侊級</h4>
- <button class="mock-toggle-btn" onclick="toggleMockContent(this)">灞曞紑</button>
- <div class="mock-content collapsed">
- <div class="form-group">
- <label>鍥炶皟鍦板潃 <span class="required">*</span></label>
- <input type="text" id="task-notice-callback-url" placeholder="http://localhost:8080/api/callback" value="http://localhost:8080/api/callback">
- <span class="error-message" id="task-notice-callback-url-error">璇疯緭鍏ュ洖璋冨湴鍧�</span>
- </div>
- <div class="form-actions">
- <button class="mock-btn" onclick="mockTaskNotice()">鍙戦�佽姹�</button>
- <button class="reset-btn" onclick="resetTaskNoticeForm()">閲嶇疆</button>
- </div>
- <div id="mock-task-notice-result" class="mock-result"></div>
- </div>
- </div>
-</section>
-
-<!-- 鐢宠鍏ュ簱浠诲姟 -->
-<section id="api-task-priority" class="api-section">
- <h2>鐢宠鍏ュ簱浠诲姟* <span class="tag">甯哥敤</span></h2>
- <div class="api-info">
- <h3>
- <span class="api-method method-post">POST</span>
- <span>鐢宠鍏ュ簱浠诲姟</span>
- </h3>
- <div class="api-url">/api/open/location/allocate</div>
-<div class="note" style="background: linear-gradient(135deg, #e3f2fd, #bbdefb); border-left-color: #2196f3;">
- <div class="note-title" style="color: #1565c0;">馃摙 鎺ュ彛璇存槑</div>
- <p style="color: #1976d2;">姝ゆ帴鍙g敱<strong>涓婂眰绯荤粺鎻愪緵</strong>锛孯CS绯荤粺鍦ㄤ换鍔$姸鎬佸彂鐢熷彉鍖栨椂涓诲姩鍥炶皟銆備笂灞傜郴缁熼渶瑕佸疄鐜版鎺ュ彛骞堕厤缃洖璋冨湴鍧�鍒癛CS绯荤粺涓��
- </p>
- </div>
- <h4>璇锋眰鍙傛暟</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td><code>barcode</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>鏂欑鐮�</td>
- </tr>
- <tr>
- <td><code>staNo</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>鍏ュ簱绔欑偣</td>
- </tr>
- </tbody>
- </table>
-
- <h4>璇锋眰绀轰緥</h4>
- <pre><code>{
- "barcode": "8000001",
- "staNo": "1005"
-}</code></pre>
-
- <h4>杩斿洖绀轰緥</h4>
- <pre><code>{
- "code": 200,
- "message": "success",
- "data": {
- "locNo": "A100100101"
- }
-}</code></pre>
- </div>
-
- <div class="mock-container">
- <h4>Mock 娴嬭瘯</h4>
- <button class="mock-toggle-btn" onclick="toggleMockContent(this)">灞曞紑</button>
- <div class="mock-content collapsed">
- <div class="mode-switch">
- <button class="active" onclick="switchInputMode('task-priority', 'form')" id="task-priority-form-btn">
- 琛ㄥ崟杈撳叆
- </button>
- <button onclick="switchInputMode('task-priority', 'json')" id="task-priority-json-btn">JSON杈撳叆</button>
- </div>
- <div class="mock-form">
- <div class="form-input-container" id="task-priority-form-container">
- <h5>璇锋眰鍙傛暟</h5>
- <div class="form-group">
- <label>taskNo <span class="required">*</span></label>
- <input type="text" id="task-priority-taskNo" placeholder="TASK20231220001"
- value="TASK20231220001">
- <div class="error-msg" id="task-priority-taskNo-error">璇疯緭鍏ヤ换鍔$紪鍙�</div>
- </div>
- <div class="form-group">
- <label>priority <span class="required">*</span></label>
- <input type="text" id="task-priority-priority" placeholder="1-300" value="3">
- <div class="hint">浼樺厛绾ц寖鍥达細1-300</div>
- <div class="error-msg" id="task-priority-priority-error">璇疯緭鍏ヤ紭鍏堢骇锛�1-300锛�</div>
- </div>
- </div>
- <div class="json-input-container" id="task-priority-json-container">
- <h5>JSON杈撳叆</h5>
- <textarea class="json-textarea" id="task-priority-json">{
- "taskNo": "TASK20231220001",
- "priority": "3"
-}</textarea>
- <div class="error-msg" id="task-priority-json-error">璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡</div>
- </div>
- <div class="mock-form-actions">
- <button class="mock-btn" onclick="mockTaskPriority()">鎵ц Mock 璇锋眰</button>
- <button class="reset-btn" onclick="resetTaskPriorityForm()">閲嶇疆</button>
- </div>
- </div>
- <div id="mock-task-priority-result" class="mock-result"></div>
- </div>
- </div>
-</section>
-
-<!-- 搴撲綅鐘舵�佷慨鏀� -->
-<!-- <section id="api-loc-status" class="api-section">
- <h2>搴撲綅鐘舵�佷慨鏀�</h2>
- <div class="api-info">
- <h3>
- <span class="api-method method-post">POST</span>
- <span>淇敼搴撲綅鐘舵��</span>
- </h3>
- <div class="api-url">/api/open/loc/status/update</div>
-
- <h4>璇锋眰鍙傛暟</h4>
- <table>
- <thead>
- <tr>
- <th style="width: 20%;">鍙傛暟鍚�</th>
- <th style="width: 15%;">绫诲瀷</th>
- <th style="width: 15%;">蹇呭~</th>
- <th>璇存槑</th>
- </tr>
- </thead>
- <tbody>
-
- <tr>
- <td><code>locCode</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>搴撲綅缂栧彿</td>
- </tr>
- <tr>
- <td><code>status</code></td>
- <td>string</td>
- <td><span style="color: #f93e3e; font-weight: bold;">鏄�</span></td>
- <td>搴撲綅鐘舵�侊細0-绂佺敤銆�1-鍚敤銆�2-鍦ㄥ簱銆�3-绌哄簱浣�</td>
- </tr>
- </tbody>
- </table>
-
- <h4>璇锋眰绀轰緥</h4>
- <pre><code>{
- "locCode": "A100100101",
- "status": "0"
-}</code></pre>
-
- <h4>杩斿洖绀轰緥</h4>
- <pre><code>{
- "code": 200,
- "message": "搴撲綅鐘舵�佷慨鏀规垚鍔�"
-}</code></pre>
-
- <div class="note">
- <div class="note-title">浣跨敤鍦烘櫙</div>
- <p>鈥� 涓存椂灏侀棴鏌愪釜搴撲綅锛堢淮鎶ゃ�佹淇瓑锛�</p>
- <p>鈥� 搴撲綅寮傚父鏃剁鐢�</p>
- <p>鈥� 缁存姢瀹屾垚鍚庨噸鏂板惎鐢ㄥ簱浣�</p>
- </div>
- </div>
-
- <div class="mock-container">
- <h4>Mock 娴嬭瘯</h4>
- <button class="mock-toggle-btn" onclick="toggleMockContent(this)">灞曞紑</button>
- <div class="mock-content collapsed">
- <div class="mode-switch">
- <button id="loc-status-form-btn" class="mode-btn active"
- onclick="switchInputMode('loc-status', 'form')">琛ㄥ崟杈撳叆
- </button>
- <button id="loc-status-json-btn" class="mode-btn" onclick="switchInputMode('loc-status', 'json')">
- JSON杈撳叆
- </button>
- </div>
- <div class="form-input-container" id="loc-status-form-container">
- <h5>璇锋眰鍙傛暟</h5>
- <div class="form-group">
- <label>搴撲綅缂栫爜 <span class="required">*</span></label>
- <input type="text" id="loc-status-locCode" placeholder="A100100101" value="A100100101">
- <span class="error-message" id="loc-status-locCode-error">璇疯緭鍏ュ簱浣嶇紪鐮�</span>
- </div>
- <div class="form-group">
- <label>鐘舵�� <span class="required">*</span></label>
- <select id="loc-status-status">
- <option value="">璇烽�夋嫨鐘舵��</option>
- <option value="0">0 - 绂佺敤</option>
- <option value="1" selected>1 - 鍚敤</option>
- <option value="2">2 - 鍦ㄥ簱</option>
- <option value="3">3 - 绌哄簱浣�</option>
- </select>
- <span class="error-message" id="loc-status-status-error">璇烽�夋嫨鐘舵��</span>
- </div>
- <div class="form-actions">
- <button class="mock-btn" onclick="mockLocStatus()">鎵ц Mock 璇锋眰</button>
- <button class="reset-btn" onclick="resetLocStatusForm()">閲嶇疆</button>
- </div>
- </div>
- <div class="json-input-container" id="loc-status-json-container">
- <h5>JSON杈撳叆</h5>
- <textarea class="json-textarea" id="loc-status-json" rows="8">{
- "locCode": "A100100101",
- "status": "1"
-}</textarea>
- <span class="error-message" id="loc-status-json-error">璇疯緭鍏ユ湁鏁堢殑JSON鍙傛暟</span>
- <div class="form-actions">
- <button class="mock-btn" onclick="mockLocStatus()">鎵ц Mock 璇锋眰</button>
- <button class="reset-btn" onclick="resetLocStatusForm()">閲嶇疆</button>
- </div>
- </div>
- <div id="mock-loc-status-result" class="mock-result"></div>
- </div>
- </div>
-</section> -->
-
-
+<!-- 鍔ㄦ�佸姞杞界殑鎺ュ彛鍐呭 -->
+<div id="api-container">
+ <!-- 鎺ュ彛鍐呭灏嗛�氳繃JavaScript鍔ㄦ�佸姞杞� -->
+</div>
<!-- 閿欒鐮佽鏄� -->
<section id="error-codes" class="api-section">
@@ -1640,110 +1029,762 @@
</div>
<script>
- // 楠岃瘉浠诲姟鍒涘缓鍙傛暟
- function validateTaskCreate() {
- let isValid = true;
+ // 鍔ㄦ�佸姞杞紸PI閰嶇疆骞舵覆鏌撴帴鍙e唴瀹�
+ function loadApiConfigs() {
+ try {
+ // 鐩存帴瀹氫箟API閰嶇疆鏁版嵁锛岄伩鍏岰ORS閿欒
+ const apiConfigs = [
+ {
+ "apiId": "api-task-create",
+ "name": "鐢熸垚浠诲姟鍗�",
+ "description": "鍒涘缓鎼繍浠诲姟",
+ "isCommon": true,
+ "method": "POST",
+ "url": "/api/open/bus/submit",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 1
+ },
+ "request": {
+ "parameters": [
+ {
+ "name": "batchNo",
+ "type": "string",
+ "required": true,
+ "description": "鎵规缂栧彿锛堜笂灞傜郴缁熺敓鎴愶紝鍞竴鏍囪瘑锛�",
+ "default": "122334"
+ },
+ {
+ "name": "tasks",
+ "type": "array",
+ "required": true,
+ "description": "浠诲姟鏁扮粍锛屽寘鍚叿浣撶殑浠诲姟璇︽儏",
+ "items": [
+ {
+ "name": "taskNo",
+ "type": "string",
+ "required": true,
+ "description": "浠诲姟缂栧彿锛堜笂灞傜郴缁熺敓鎴愶紝鍞竴鏍囪瘑锛�",
+ "default": "TASK20231220001"
+ },
+ {
+ "name": "oriSta",
+ "type": "string",
+ "required": false,
+ "description": "璧风偣绔欑偣缂栧彿"
+ },
+ {
+ "name": "destSta",
+ "type": "string",
+ "required": false,
+ "description": "缁堢偣绔欑偣缂栧彿"
+ },
+ {
+ "name": "oriLoc",
+ "type": "string",
+ "required": false,
+ "description": "璧风偣搴撲綅缂栧彿"
+ },
+ {
+ "name": "destLoc",
+ "type": "string",
+ "required": false,
+ "description": "缁堢偣搴撲綅缂栧彿"
+ },
+ {
+ "name": "priority",
+ "type": "int",
+ "required": false,
+ "description": "浼樺厛绾э細1-300锛岄粯璁や负1",
+ "default": 1
+ }
+ ]
+ }
+ ],
+ "example": {
+ "batchNo": "122334",
+ "tasks": [
+ {
+ "taskNo": "TASK20231220001",
+ "oriLoc": "A100100101",
+ "destSta": "STA001",
+ "priority": 1
+ },
+ {
+ "taskNo": "TASK20231220001",
+ "oriSta": "STA002",
+ "destLoc": "B02-03-05",
+ "priority": 2
+ }
+ ]
+ }
+ },
+ "response": {
+ "parameters": [
+ {
+ "name": "code",
+ "type": "integer",
+ "description": "杩斿洖缂栧彿锛�200琛ㄧず鎴愬姛锛�1~N琛ㄧず澶辫触"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "description": "杩斿洖娑堟伅锛岃姹傛垚鍔熻〃绀烘垚鍔燂紝鍐呭涓鸿缁嗙殑閿欒鎻忚堪"
+ },
+ {
+ "name": "data",
+ "type": "object",
+ "description": "杩斿洖鐨勬暟鎹粨鏋�"
+ },
+ {
+ "name": "timestamp",
+ "type": "integer",
+ "description": "鏃堕棿鎴�"
+ }
+ ],
+ "example": {
+ "code": 200,
+ "message": "浠诲姟鍒涘缓鎴愬姛",
+ "data": {
+ "taskNo": "TASK20231220001",
+ "taskId": "T1234567890",
+ "status": "ASSIGN"
+ },
+ "timestamp": 1671526800000
+ }
+ }
+ },
+ {
+ "apiId": "api-task-cancel",
+ "name": "鍙栨秷浠诲姟",
+ "description": "鍙栨秷鎼繍浠诲姟",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/cancel",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 2
+ },
+ "request": {
+ "parameters": [
+ {
+ "name": "taskNo",
+ "type": "string",
+ "required": true,
+ "description": "浠诲姟缂栧彿",
+ "default": "TASK20231220001"
+ }
+ ],
+ "example": {
+ "taskNo": "TASK20231220001"
+ }
+ },
+ "response": {
+ "parameters": [
+ {
+ "name": "code",
+ "type": "integer",
+ "description": "杩斿洖缂栧彿锛�200琛ㄧず鎴愬姛锛�1~N琛ㄧず澶辫触"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "description": "杩斿洖娑堟伅锛岃姹傛垚鍔熻〃绀烘垚鍔燂紝鍐呭涓鸿缁嗙殑閿欒鎻忚堪"
+ },
+ {
+ "name": "timestamp",
+ "type": "integer",
+ "description": "鏃堕棿鎴�"
+ }
+ ],
+ "example": {
+ "code": 200,
+ "message": "浠诲姟鍙栨秷鎴愬姛",
+ "timestamp": 1671526800000
+ }
+ }
+ },
+ {
+ "apiId": "api-task-allocate",
+ "name": "鐢宠鍏ュ簱鎺ュ彛",
+ "description": "鐢宠浠诲姟鍏ュ簱",
+ "isCommon": true,
+ "method": "POST",
+ "url": "/api/open/task/allocate",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 3
+ },
+ "request": {
+ "parameters": [
+ {
+ "name": "staNo",
+ "type": "string",
+ "required": true,
+ "description": "绔欑偣缂栧彿",
+ "default": "1001"
+ },
+ {
+ "name": "barcode",
+ "type": "string",
+ "required": true,
+ "description": "鎵樼洏鐮�",
+ "default": "80000001"
+ }
+ ],
+ "example": {
+ "staNo": "1001",
+ "barcode": "80000001"
+ }
+ },
+ "response": {
+ "parameters": [
+ {
+ "name": "code",
+ "type": "integer",
+ "description": "杩斿洖缂栧彿锛�200琛ㄧず鎴愬姛锛�1~N琛ㄧず澶辫触"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "description": "杩斿洖娑堟伅锛岃姹傛垚鍔熻〃绀烘垚鍔燂紝鍐呭涓鸿缁嗙殑閿欒鎻忚堪"
+ },
+ {
+ "name": "data",
+ "type": "object",
+ "description": "杩斿洖鐨勬暟鎹粨鏋�"
+ },
+ {
+ "name": "timestamp",
+ "type": "integer",
+ "description": "鏃堕棿鎴�"
+ }
+ ],
+ "example": {
+ "code": 200,
+ "message": "鐢宠鍏ュ簱鎴愬姛",
+ "data": {
+ "taskNo": "TASK20231220001",
+ "locNo": "A100100101",
+ "batchNo": "TASK20231220001"
+ },
+ "timestamp": 1671526800000
+ }
+ }
+ },
+ {
+ "apiId": "api-task-notice",
+ "name": "浠诲姟鐘舵�侀�氱煡",
+ "description": "閫氱煡浠诲姟鐘舵�佸彉鏇�",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/notice",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 4
+ },
+ "request": {
+ "parameters": [
+ {
+ "name": "taskNo",
+ "type": "string",
+ "required": true,
+ "description": "浠诲姟缂栧彿",
+ "default": "TASK20231220001"
+ },
+ {
+ "name": "status",
+ "type": "string",
+ "required": true,
+ "description": "浠诲姟鐘舵��",
+ "default": "COMPLETE"
+ }
+ ],
+ "example": {
+ "taskNo": "TASK20231220001",
+ "status": "COMPLETE"
+ }
+ },
+ "response": {
+ "parameters": [
+ {
+ "name": "code",
+ "type": "integer",
+ "description": "杩斿洖缂栧彿锛�200琛ㄧず鎴愬姛锛�1~N琛ㄧず澶辫触"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "description": "杩斿洖娑堟伅锛岃姹傛垚鍔熻〃绀烘垚鍔燂紝鍐呭涓鸿缁嗙殑閿欒鎻忚堪"
+ },
+ {
+ "name": "timestamp",
+ "type": "integer",
+ "description": "鏃堕棿鎴�"
+ }
+ ],
+ "example": {
+ "code": 200,
+ "message": "鐘舵�侀�氱煡鎴愬姛",
+ "timestamp": 1671526800000
+ }
+ }
+ },
+ {
+ "apiId": "api-task-priority",
+ "name": "浠诲姟浼樺厛绾ц皟鏁�",
+ "description": "璋冩暣浠诲姟浼樺厛绾�",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/priority",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 5
+ },
+ "request": {
+ "parameters": [
+ {
+ "name": "taskNo",
+ "type": "string",
+ "required": true,
+ "description": "浠诲姟缂栧彿",
+ "default": "TASK20231220001"
+ },
+ {
+ "name": "priority",
+ "type": "int",
+ "required": true,
+ "description": "浼樺厛绾э細1-300",
+ "default": 10
+ }
+ ],
+ "example": {
+ "taskNo": "TASK20231220001",
+ "priority": 10
+ }
+ },
+ "response": {
+ "parameters": [
+ {
+ "name": "code",
+ "type": "integer",
+ "description": "杩斿洖缂栧彿锛�200琛ㄧず鎴愬姛锛�1~N琛ㄧず澶辫触"
+ },
+ {
+ "name": "message",
+ "type": "string",
+ "description": "杩斿洖娑堟伅锛岃姹傛垚鍔熻〃绀烘垚鍔燂紝鍐呭涓鸿缁嗙殑閿欒鎻忚堪"
+ },
+ {
+ "name": "timestamp",
+ "type": "integer",
+ "description": "鏃堕棿鎴�"
+ }
+ ],
+ "example": {
+ "code": 200,
+ "message": "浼樺厛绾ц皟鏁存垚鍔�",
+ "timestamp": 1671526800000
+ }
+ }
+ }
+ ];
- const taskNo = document.getElementById('task-create-taskNo');
- const taskType = document.getElementById('task-create-taskType');
- const oriSta = document.getElementById('task-create-oriSta');
- const destSta = document.getElementById('task-create-destSta');
- const oriLoc = document.getElementById('task-create-oriLoc');
- const destLoc = document.getElementById('task-create-destLoc');
+ // 娓叉煋鎺ュ彛鍐呭
+ const apiContainer = document.getElementById('api-container');
+ apiContainer.innerHTML = '';
- const taskNoError = document.getElementById('task-create-taskNo-error');
- const taskTypeError = document.getElementById('task-create-taskType-error');
+ apiConfigs.forEach(config => {
+ apiContainer.appendChild(renderApiSection(config));
+ });
- taskNo.classList.remove('error');
- taskType.classList.remove('error');
- oriSta.classList.remove('error');
- destSta.classList.remove('error');
- oriLoc.classList.remove('error');
- destLoc.classList.remove('error');
-
- taskNoError.classList.remove('show');
- taskTypeError.classList.remove('show');
-
- if (!taskNo.value.trim()) {
- taskNo.classList.add('error');
- taskNoError.classList.add('show');
- isValid = false;
+ } catch (error) {
+ console.error('Failed to load API configs:', error);
}
-
- if (!taskType.value) {
- taskType.classList.add('error');
- taskTypeError.classList.add('show');
- isValid = false;
- }
-
- const taskTypeValue = parseInt(taskType.value);
- if (taskTypeValue === 1 || taskTypeValue === 3) {
- if (!oriLoc.value.trim()) {
- oriLoc.classList.add('error');
- isValid = false;
- }
- }
- if (taskTypeValue === 2 || taskTypeValue === 4) {
- if (!oriSta.value.trim()) {
- oriSta.classList.add('error');
- isValid = false;
- }
- }
- if (taskTypeValue === 1 || taskTypeValue === 4) {
- if (!destSta.value.trim()) {
- destSta.classList.add('error');
- isValid = false;
- }
- }
- if (taskTypeValue === 2 || taskTypeValue === 3) {
- if (!destLoc.value.trim()) {
- destLoc.classList.add('error');
- isValid = false;
- }
- }
-
- if (oriLoc.value.trim() && destLoc.value.trim() && oriLoc.value.trim() === destLoc.value.trim()) {
- oriLoc.classList.add('error');
- destLoc.classList.add('error');
- isValid = false;
- }
-
- return isValid;
}
- // 閲嶇疆浠诲姟鍒涘缓琛ㄥ崟
- function resetTaskCreateForm() {
- document.getElementById('task-create-taskNo').value = 'TASK20231220001';
- document.getElementById('task-create-batchNo').value = '122334';
- document.getElementById('task-create-taskType').value = '1';
- document.getElementById('task-create-oriSta').value = '';
- document.getElementById('task-create-destSta').value = 'STA001';
- document.getElementById('task-create-oriLoc').value = 'A100100101';
- document.getElementById('task-create-destLoc').value = '';
- document.getElementById('task-create-priority').value = '1';
+ // 娓叉煋鍗曚釜API绔犺妭
+ function renderApiSection(config) {
+ const section = document.createElement('section');
+ section.id = config.apiId;
+ section.className = 'api-section';
- syncFormToJson('task-create');
+ // 鏍囬
+ const h2 = document.createElement('h2');
+ h2.textContent = config.name + (config.isCommon ? '*' : '');
+ if (config.isCommon) {
+ const tag = document.createElement('span');
+ tag.className = 'tag';
+ tag.textContent = '甯哥敤';
+ h2.appendChild(tag);
+ }
+ section.appendChild(h2);
- const inputs = document.querySelectorAll('#task-create-taskNo, #task-create-batchNo, #task-create-taskType, #task-create-oriSta, #task-create-destSta, #task-create-oriLoc, #task-create-destLoc');
- inputs.forEach(input => input.classList.remove('error'));
+ // API淇℃伅
+ const apiInfo = document.createElement('div');
+ apiInfo.className = 'api-info';
- const errors = document.querySelectorAll('[id^="task-create-"][id$="-error"]');
- errors.forEach(error => {
- error.classList.remove('show');
- if (error.id === 'task-create-taskNo-error') error.textContent = '璇疯緭鍏ヤ换鍔$紪鍙�';
- if (error.id === 'task-create-taskType-error') error.textContent = '璇烽�夋嫨浠诲姟绫诲瀷';
+ // API鏂规硶鍜屾弿杩�
+ const h3 = document.createElement('h3');
+ const methodSpan = document.createElement('span');
+ methodSpan.className = `api-method method-${config.method.toLowerCase()}`;
+ methodSpan.textContent = config.method;
+ h3.appendChild(methodSpan);
+ const descSpan = document.createElement('span');
+ descSpan.textContent = ' ' + config.description;
+ h3.appendChild(descSpan);
+ apiInfo.appendChild(h3);
+
+ // API URL
+ const apiUrl = document.createElement('div');
+ apiUrl.className = 'api-url';
+ apiUrl.textContent = config.url;
+ apiInfo.appendChild(apiUrl);
+
+ // 璇锋眰鍙傛暟
+ if (config.request && config.request.parameters) {
+ const h4 = document.createElement('h4');
+ h4.textContent = '璇锋眰鍙傛暟';
+ apiInfo.appendChild(h4);
+
+ const table = document.createElement('table');
+ const thead = document.createElement('thead');
+ const headerRow = document.createElement('tr');
+ headerRow.innerHTML = `
+ <th style="width: 20%;">鍙傛暟鍚�</th>
+ <th style="width: 15%;">绫诲瀷</th>
+ <th style="width: 15%;">蹇呭~</th>
+ <th>璇存槑</th>
+ `;
+ thead.appendChild(headerRow);
+ table.appendChild(thead);
+
+ const tbody = document.createElement('tbody');
+ config.request.parameters.forEach(param => {
+ const row = document.createElement('tr');
+ row.innerHTML = `
+ <td><code>${param.name}</code></td>
+ <td>${param.type}</td>
+ <td><span style="color: ${param.required ? '#f93e3e; font-weight: bold;' : '#999;'};">${param.required ? '鏄�' : '鍚�'}</span></td>
+ <td>${param.description}</td>
+ `;
+ tbody.appendChild(row);
+
+ // 濡傛灉鏄暟缁勭被鍨嬶紝娓叉煋鏁扮粍鍏冪礌鍙傛暟
+ if (param.type === 'array' && param.items) {
+ const h4Items = document.createElement('h4');
+ h4Items.textContent = `${param.name}鏁扮粍鍏冪礌鍙傛暟`;
+ apiInfo.appendChild(h4Items);
+
+ const tableItems = document.createElement('table');
+ const theadItems = document.createElement('thead');
+ const headerRowItems = document.createElement('tr');
+ headerRowItems.innerHTML = `
+ <th style="width: 20%;">鍙傛暟鍚�</th>
+ <th style="width: 15%;">绫诲瀷</th>
+ <th style="width: 15%;">蹇呭~</th>
+ <th>璇存槑</th>
+ `;
+ theadItems.appendChild(headerRowItems);
+ tableItems.appendChild(theadItems);
+
+ const tbodyItems = document.createElement('tbody');
+ param.items.forEach(itemParam => {
+ const rowItem = document.createElement('tr');
+ rowItem.innerHTML = `
+ <td><code>${itemParam.name}</code></td>
+ <td>${itemParam.type}</td>
+ <td><span style="color: ${itemParam.required ? '#f93e3e; font-weight: bold;' : '#999;'};">${itemParam.required ? '鏄�' : '鍚�'}</span></td>
+ <td>${itemParam.description}</td>
+ `;
+ tbodyItems.appendChild(rowItem);
+ });
+ tableItems.appendChild(tbodyItems);
+ apiInfo.appendChild(tableItems);
+ }
+ });
+ table.appendChild(tbody);
+ apiInfo.appendChild(table);
+ }
+
+ // 璇锋眰绀轰緥
+ if (config.request && config.request.example) {
+ const h4 = document.createElement('h4');
+ h4.textContent = '璇锋眰绀轰緥';
+ apiInfo.appendChild(h4);
+
+ const pre = document.createElement('pre');
+ const code = document.createElement('code');
+ code.textContent = JSON.stringify(config.request.example, null, 2);
+ pre.appendChild(code);
+ apiInfo.appendChild(pre);
+ }
+
+ // 杩斿洖绀轰緥
+ if (config.response && config.response.example) {
+ const h4 = document.createElement('h4');
+ h4.textContent = '杩斿洖绀轰緥';
+ apiInfo.appendChild(h4);
+
+ const pre = document.createElement('pre');
+ const code = document.createElement('code');
+ code.textContent = JSON.stringify(config.response.example, null, 2);
+ pre.appendChild(code);
+ apiInfo.appendChild(pre);
+ }
+
+ section.appendChild(apiInfo);
+
+ // Mock娴嬭瘯
+ if (config.mock) {
+ const mockContainer = document.createElement('div');
+ mockContainer.className = 'mock-container';
+
+ const h4 = document.createElement('h4');
+ h4.textContent = 'Mock 娴嬭瘯';
+ mockContainer.appendChild(h4);
+
+ const toggleBtn = document.createElement('button');
+ toggleBtn.className = 'mock-toggle-btn';
+ toggleBtn.onclick = function() { toggleMockContent(this); };
+ toggleBtn.textContent = '灞曞紑';
+ mockContainer.appendChild(toggleBtn);
+
+ const mockContent = document.createElement('div');
+ mockContent.className = 'mock-content collapsed';
+
+ // 妯″紡鍒囨崲
+ const modeSwitch = document.createElement('div');
+ modeSwitch.className = 'mode-switch';
+
+ const formBtn = document.createElement('button');
+ formBtn.className = 'active';
+ formBtn.onclick = function() { switchInputMode(config.apiId.replace('api-', ''), 'form'); };
+ formBtn.id = `${config.apiId.replace('api-', '')}-form-btn`;
+ formBtn.textContent = '琛ㄥ崟杈撳叆';
+ modeSwitch.appendChild(formBtn);
+
+ const jsonBtn = document.createElement('button');
+ jsonBtn.onclick = function() { switchInputMode(config.apiId.replace('api-', ''), 'json'); };
+ jsonBtn.id = `${config.apiId.replace('api-', '')}-json-btn`;
+ jsonBtn.textContent = 'JSON杈撳叆';
+ modeSwitch.appendChild(jsonBtn);
+
+ mockContent.appendChild(modeSwitch);
+
+ // Mock琛ㄥ崟
+ const mockForm = document.createElement('div');
+ mockForm.className = 'mock-form';
+
+ // 琛ㄥ崟杈撳叆瀹瑰櫒
+ const formContainer = document.createElement('div');
+ formContainer.className = 'form-input-container';
+ formContainer.id = `${config.apiId.replace('api-', '')}-form-container`;
+
+ const h5 = document.createElement('h5');
+ h5.textContent = '璇锋眰鍙傛暟';
+ formContainer.appendChild(h5);
+
+ // 娓叉煋琛ㄥ崟瀛楁
+ if (config.mock.formFields) {
+ config.mock.formFields.forEach(field => {
+ const formGroup = document.createElement('div');
+ formGroup.className = 'form-group';
+
+ const label = document.createElement('label');
+ label.textContent = field.label + (field.required ? ' <span class="required">*</span>' : '');
+ formGroup.appendChild(label);
+
+ if (field.type === 'select') {
+ const select = document.createElement('select');
+ select.id = `${config.apiId.replace('api-', '')}-${field.name}`;
+ if (field.options) {
+ field.options.forEach(option => {
+ const opt = document.createElement('option');
+ opt.value = option.value;
+ opt.textContent = option.label;
+ if (option.value === field.default) {
+ opt.selected = true;
+ }
+ select.appendChild(opt);
+ });
+ }
+ formGroup.appendChild(select);
+ } else {
+ const input = document.createElement('input');
+ input.type = field.type;
+ input.id = `${config.apiId.replace('api-', '')}-${field.name}`;
+ input.placeholder = field.default || '';
+ input.value = field.default || '';
+ formGroup.appendChild(input);
+ }
+
+ if (field.required) {
+ const errorMsg = document.createElement('div');
+ errorMsg.className = 'error-msg';
+ errorMsg.id = `${config.apiId.replace('api-', '')}-${field.name}-error`;
+ errorMsg.textContent = `璇疯緭鍏�${field.label}`;
+ formGroup.appendChild(errorMsg);
+ }
+
+ formContainer.appendChild(formGroup);
+ });
+ }
+
+ mockForm.appendChild(formContainer);
+
+ // JSON杈撳叆瀹瑰櫒
+ const jsonContainer = document.createElement('div');
+ jsonContainer.className = 'json-input-container';
+ jsonContainer.id = `${config.apiId.replace('api-', '')}-json-container`;
+
+ const h5Json = document.createElement('h5');
+ h5Json.textContent = 'JSON杈撳叆';
+ jsonContainer.appendChild(h5Json);
+
+ const textarea = document.createElement('textarea');
+ textarea.className = 'json-textarea';
+ textarea.id = `${config.apiId.replace('api-', '')}-json`;
+ textarea.value = JSON.stringify(config.mock.jsonExample, null, 2);
+ jsonContainer.appendChild(textarea);
+
+ const jsonError = document.createElement('div');
+ jsonError.className = 'error-msg';
+ jsonError.id = `${config.apiId.replace('api-', '')}-json-error`;
+ jsonError.textContent = '璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡';
+ jsonContainer.appendChild(jsonError);
+
+ mockForm.appendChild(jsonContainer);
+
+ // 琛ㄥ崟鎿嶄綔鎸夐挳
+ const formActions = document.createElement('div');
+ formActions.className = 'mock-form-actions';
+
+ const mockBtn = document.createElement('button');
+ mockBtn.className = 'mock-btn';
+ mockBtn.onclick = function() { mockApiRequest(config.apiId.replace('api-', ''), config); };
+ mockBtn.textContent = '鎵ц Mock 璇锋眰';
+ formActions.appendChild(mockBtn);
+
+ const resetBtn = document.createElement('button');
+ resetBtn.className = 'reset-btn';
+ resetBtn.onclick = function() { resetApiForm(config.apiId.replace('api-', ''), config); };
+ resetBtn.textContent = '閲嶇疆';
+ formActions.appendChild(resetBtn);
+
+ mockForm.appendChild(formActions);
+ mockContent.appendChild(mockForm);
+
+ // Mock缁撴灉
+ const resultDiv = document.createElement('div');
+ resultDiv.id = `mock-${config.apiId.replace('api-', '')}-result`;
+ resultDiv.className = 'mock-result';
+ mockContent.appendChild(resultDiv);
+
+ mockContainer.appendChild(mockContent);
+ section.appendChild(mockContainer);
+ }
+
+ return section;
+ }
+
+ // Mock API璇锋眰
+ function mockApiRequest(apiId, config) {
+ let params;
+ const isJsonMode = document.getElementById(`${apiId}-json-container`).classList.contains('active');
+
+ if (isJsonMode) {
+ params = getParamsFromJson(`${apiId}-json`);
+ if (!params) return;
+ } else {
+ const formParams = getParamsFromForm(apiId);
+ params = {};
+ Object.keys(formParams).forEach(key => {
+ params[key] = formParams[key];
+ });
+ }
+
+ const resultDiv = document.getElementById(`mock-${apiId}-result`);
+ resultDiv.classList.add('show');
+ resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
+
+ setTimeout(() => {
+ let response;
+ if (config.mock.responseTemplate) {
+ response = JSON.parse(JSON.stringify(config.mock.responseTemplate));
+ // 鏇挎崲妯℃澘鍙橀噺
+ if (response.data === '{{taskResults}}' && params.tasks && Array.isArray(params.tasks)) {
+ response.data = params.tasks.map(taskNo => ({
+ taskNo: taskNo,
+ success: true,
+ msg: null
+ }));
+ }
+ if (response.data && response.data.taskNo === '{{taskNo}}') {
+ response.data.taskNo = params.taskNo;
+ }
+ if (response.data && response.data.taskId === '{{taskId}}') {
+ response.data.taskId = 'T' + Math.random().toString(36).substr(2, 10);
+ }
+ if (response.timestamp === '{{timestamp}}') {
+ response.timestamp = Date.now();
+ }
+ } else {
+ response = {
+ code: 200,
+ message: '璇锋眰鎴愬姛'
+ };
+ }
+
+ resultDiv.innerHTML = `
+ <p style="color: #49cc90; font-weight: bold;">鉁� 璇锋眰鎴愬姛</p>
+ <pre><code>${JSON.stringify(response, null, 2)}</code></pre>
+ `;
+ }, 1000);
+ }
+
+ // 閲嶇疆API琛ㄥ崟
+ function resetApiForm(apiId, config) {
+ // 閲嶇疆琛ㄥ崟瀛楁
+ const inputs = document.querySelectorAll(`#${apiId}-form-container input, #${apiId}-form-container select`);
+ inputs.forEach(input => {
+ const fieldName = input.id.replace(`${apiId}-`, '');
+ const fieldConfig = config.mock.formFields.find(f => f.name === fieldName);
+ if (fieldConfig) {
+ input.value = fieldConfig.default || '';
+ }
+ input.classList.remove('error');
});
- document.getElementById('mock-task-create-result').classList.remove('show');
- document.getElementById('mock-task-create-result').innerHTML = '';
+ // 閲嶇疆JSON杈撳叆
+ const textarea = document.getElementById(`${apiId}-json`);
+ if (textarea) {
+ textarea.value = JSON.stringify(config.mock.jsonExample, null, 2);
+ }
- const jsonError = document.getElementById('task-create-json-error');
- if (jsonError) jsonError.classList.remove('show');
-
+ // 闅愯棌閿欒淇℃伅
+ const errors = document.querySelectorAll(`[id^="${apiId}-"][id$="-error"]`);
+ errors.forEach(error => error.classList.remove('show'));
- const resultDiv = document.getElementById('mock-task-create-result');
- resultDiv.classList.remove('show');
- resultDiv.innerHTML = '';
+ // 闅愯棌缁撴灉
+ const resultDiv = document.getElementById(`mock-${apiId}-result`);
+ if (resultDiv) {
+ resultDiv.classList.remove('show');
+ resultDiv.innerHTML = '';
+ }
+ }
+
+ // 椤甸潰鍔犺浇瀹屾垚鍚庡姞杞紸PI閰嶇疆
+ window.addEventListener('DOMContentLoaded', loadApiConfigs);
+
+ // 鍒囨崲Mock鍐呭灞曞紑/鎶樺彔
+ function toggleMockContent(element) {
+ const mockContent = element.nextElementSibling;
+ if (mockContent) {
+ mockContent.classList.toggle('collapsed');
+ mockContent.classList.toggle('expanded');
+ element.textContent = mockContent.classList.contains('expanded') ? '鏀惰捣' : '灞曞紑';
+ }
}
// 鍒囨崲杈撳叆妯″紡
@@ -1754,94 +1795,15 @@
const jsonContainer = document.getElementById(`${formId}-json-container`);
if (mode === 'form') {
- syncJsonToForm(formId);
formBtn.classList.add('active');
jsonBtn.classList.remove('active');
formContainer.classList.remove('hidden');
jsonContainer.classList.remove('active');
} else {
- syncFormToJson(formId);
formBtn.classList.remove('active');
jsonBtn.classList.add('active');
formContainer.classList.add('hidden');
jsonContainer.classList.add('active');
- }
- }
-
- function syncFormToJson(formId) {
- let params;
- if (formId === 'task-create') {
- // 瀵逛簬浠诲姟鍒涘缓琛ㄥ崟锛屼娇鐢ㄦ柊鐨勬暟缁勬牸寮�
- const formParams = getParamsFromForm(formId);
- params = {
- taskNo: formParams.taskNo,
- batchNo: formParams.batchNo || '122334',
- tasks: [{
- taskType: formParams.taskType,
- oriSta: formParams.oriSta,
- destSta: formParams.destSta,
- oriLoc: formParams.oriLoc,
- destLoc: formParams.destLoc,
- priority: formParams.priority ? parseInt(formParams.priority) : 1
- }]
- };
- } else if (formId === 'task-cancel') {
- // 瀵逛簬浠诲姟鍙栨秷琛ㄥ崟锛屼娇鐢╰asks鏁扮粍鏍煎紡
- const formParams = getParamsFromForm(formId);
- params = {
- batchNo: formParams.batchNo || '12345',
- tasks: formParams.tasks.split(',').map(task => task.trim())
- };
- } else {
- // 瀵逛簬鍏朵粬琛ㄥ崟锛屼娇鐢ㄥ師鏈夌殑鏍煎紡
- params = getParamsFromForm(formId);
- }
- const textarea = document.getElementById(`${formId}-json`);
- if (textarea) {
- textarea.value = JSON.stringify(params, null, 2);
- }
- }
-
- function syncJsonToForm(formId) {
- const textarea = document.getElementById(`${formId}-json`);
- if (!textarea) return;
-
- try {
- const params = JSON.parse(textarea.value);
- const inputs = document.querySelectorAll(`#${formId}-form-container input, #${formId}-form-container select`);
-
- if (formId === 'task-create' && params.tasks && Array.isArray(params.tasks) && params.tasks.length > 0) {
- // 瀵逛簬浠诲姟鍒涘缓琛ㄥ崟锛屼粠tasks鏁扮粍涓幏鍙栫涓�涓换鍔$殑鏁版嵁
- const task = params.tasks[0];
- inputs.forEach(input => {
- const key = input.id.replace(`${formId}-`, '');
- if (params[key] !== undefined) {
- input.value = params[key];
- } else if (task[key] !== undefined) {
- input.value = task[key];
- }
- });
- } else if (formId === 'task-cancel' && params.tasks && Array.isArray(params.tasks)) {
- // 瀵逛簬浠诲姟鍙栨秷琛ㄥ崟锛屽皢tasks鏁扮粍杞崲涓洪�楀彿鍒嗛殧鐨勫瓧绗︿覆
- inputs.forEach(input => {
- const key = input.id.replace(`${formId}-`, '');
- if (key === 'tasks') {
- input.value = params.tasks.join(', ');
- } else if (params[key] !== undefined) {
- input.value = params[key];
- }
- });
- } else {
- // 瀵逛簬鍏朵粬琛ㄥ崟锛屼娇鐢ㄥ師鏈夌殑閫昏緫
- inputs.forEach(input => {
- const key = input.id.replace(`${formId}-`, '');
- if (params[key] !== undefined) {
- input.value = params[key];
- }
- });
- }
- } catch (e) {
- console.error('JSON瑙f瀽澶辫触锛屾棤娉曞悓姝ュ埌琛ㄥ崟', e);
}
}
@@ -1873,660 +1835,16 @@
}
}
- // 楠岃瘉浠诲姟鍒涘缓JSON鍙傛暟
- function validateTaskCreateJson(params) {
- const errorDiv = document.getElementById('task-create-json-error');
-
- if (!params || typeof params !== 'object') {
- errorDiv.textContent = '璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.taskNo || !params.taskNo.trim()) {
- errorDiv.textContent = 'taskNo涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.batchNo || !params.batchNo.trim()) {
- errorDiv.textContent = 'batchNo涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.tasks || !Array.isArray(params.tasks)) {
- errorDiv.textContent = 'tasks蹇呴』鏄暟缁勬牸寮�';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (params.tasks.length === 0) {
- errorDiv.textContent = 'tasks鏁扮粍涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- }
-
- // 楠岃瘉tasks鏁扮粍涓殑姣忎釜浠诲姟
- for (let i = 0; i < params.tasks.length; i++) {
- const task = params.tasks[i];
- if (!task || typeof task !== 'object') {
- errorDiv.textContent = `tasks鏁扮粍绗�${i+1}涓厓绱犲繀椤绘槸瀵硅薄`;
- errorDiv.classList.add('show');
- return false;
- }
-
- // 楠岃瘉璧风偣鍜岀粓鐐�
- if (task.oriLoc && task.destLoc && task.oriLoc.trim() === task.destLoc.trim()) {
- errorDiv.textContent = `tasks鏁扮粍绗�${i+1}涓厓绱犵殑璧风偣搴撲綅鍜岀粓鐐瑰簱浣嶄笉鑳界浉鍚宍;
- errorDiv.classList.add('show');
- return false;
- }
- }
-
- errorDiv.classList.remove('show');
- return true;
- }
-
- // Mock 鐢熸垚浠诲姟鍗�
- function mockTaskCreate() {
- let params;
- const isJsonMode = document.getElementById('task-create-json-container').classList.contains('active');
-
- if (isJsonMode) {
- params = getParamsFromJson('task-create-json');
- if (!params) return;
- if (!validateTaskCreateJson(params)) return;
- } else {
- // 浠庤〃鍗曡幏鍙栧弬鏁板苟杞崲涓烘柊鐨勬暟缁勬牸寮�
- const formParams = getParamsFromForm('task-create');
- params = {
- taskNo: formParams.taskNo,
- batchNo: formParams.batchNo || '122334',
- tasks: [{
- taskType: formParams.taskType,
- oriSta: formParams.oriSta,
- destSta: formParams.destSta,
- oriLoc: formParams.oriLoc,
- destLoc: formParams.destLoc,
- priority: formParams.priority ? parseInt(formParams.priority) : 1
- }]
- };
- }
-
- const resultDiv = document.getElementById('mock-task-create-result');
- resultDiv.classList.add('show');
- resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
-
- setTimeout(() => {
- const response = {
- code: 200,
- message: "浠诲姟鍒涘缓鎴愬姛",
- data: {
- taskNo: params.taskNo,
- batchNo: params.batchNo,
- taskId: "T" + Math.random().toString(36).substr(2, 10),
- status: "ASSIGN",
- taskCount: params.tasks.length
- },
- timestamp: new Date().getTime()
- };
- resultDiv.innerHTML = `
- <p style="color: #49cc90; font-weight: bold;" class="success-icon">鉁� 璇锋眰鎴愬姛</p>
- <div style="margin-bottom: 20px; padding: 15px; background: #e3f2fd; border-radius: 8px; border-left: 4px solid #2196f3;">
- <p style="font-weight: bold; color: #1976d2; margin-bottom: 10px;">馃摛 鍙戦�佹暟鎹�</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(params, null, 2)}</code></pre>
- </div>
- </div>
- <div style="padding: 15px; background: #e8f5e9; border-radius: 8px; border-left: 4px solid #49cc90;">
- <p style="font-weight: bold; color: #2e7d32; margin-bottom: 10px;">馃摜 杩斿洖鏁版嵁</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(response, null, 2)}</code></pre>
- </div>
- </div>
- <p style="margin-top: 15px; color: #666; padding: 10px; background: #fff; border-radius: 8px; border: 2px solid #49cc90;">馃幆 鎴愬姛鍒涘缓 ${params.tasks.length} 涓惉杩愪换鍔★紝绛夊緟鍒嗛厤鏈哄櫒浜烘墽琛�</p>
- `;
- }, 800);
- }
-
- // 楠岃瘉浠诲姟鍙栨秷鍙傛暟
- function validateTaskCancel() {
- let isValid = true;
-
- const tasks = document.getElementById('task-cancel-tasks');
-
- const tasksError = document.getElementById('task-cancel-tasks-error');
-
- tasks.classList.remove('error');
-
- tasksError.classList.remove('show');
-
- if (!tasks.value.trim()) {
- tasks.classList.add('error');
- tasksError.classList.add('show');
- isValid = false;
- }
-
- return isValid;
- }
-
- // 閲嶇疆浠诲姟鍙栨秷琛ㄥ崟
- function resetTaskCancelForm() {
- document.getElementById('task-cancel-tasks').value = 'TASK20231220001,TASK20231220002';
- document.getElementById('task-cancel-batchNo').value = '12345';
-
- syncFormToJson('task-cancel');
-
- const inputs = document.querySelectorAll('#task-cancel-tasks');
- inputs.forEach(input => input.classList.remove('error'));
-
- const errors = document.querySelectorAll('[id^="task-cancel-"][id$="-error"]');
- errors.forEach(error => {
- error.classList.remove('show');
- if (error.id === 'task-cancel-tasks-error') error.textContent = '璇疯緭鍏ヨ鍙栨秷鐨勪换鍔$紪鍙�';
- });
-
- const resultDiv = document.getElementById('mock-task-cancel-result');
- resultDiv.classList.remove('show');
- resultDiv.innerHTML = '';
- }
-
- // 楠岃瘉浠诲姟鍙栨秷JSON鍙傛暟
- function validateTaskCancelJson(params) {
- const errorDiv = document.getElementById('task-cancel-json-error');
-
- if (!params || typeof params !== 'object') {
- errorDiv.textContent = '璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.tasks || !Array.isArray(params.tasks) || params.tasks.length === 0) {
- errorDiv.textContent = 'tasks蹇呴』鏄潪绌烘暟缁�';
- errorDiv.classList.add('show');
- return false;
- }
-
- errorDiv.classList.remove('show');
- return true;
- }
-
- // Mock 鍙栨秷浠诲姟
- function mockTaskCancel() {
- let params;
- const isJsonMode = document.getElementById('task-cancel-json-container').classList.contains('active');
-
- if (isJsonMode) {
- params = getParamsFromJson('task-cancel-json');
- if (!params) return;
- if (!validateTaskCancelJson(params)) return;
- } else {
- if (!validateTaskCancel()) return;
- const formParams = getParamsFromForm('task-cancel');
- // 灏嗛�楀彿鍒嗛殧鐨勪换鍔$紪鍙峰瓧绗︿覆杞崲涓烘暟缁�
- params = {
- tasks: formParams.tasks.split(',').map(task => task.trim()),
- batchNo: formParams.batchNo
- };
- }
-
- const resultDiv = document.getElementById('mock-task-cancel-result');
- resultDiv.classList.add('show');
- resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
-
- setTimeout(() => {
- // 鐢熸垚姣忎釜浠诲姟鐨勫彇娑堢粨鏋�
- const data = params.tasks.map(taskNo => {
- // 妯℃嫙闅忔満鐨勫彇娑堢粨鏋�
- const success = Math.random() > 0.2; // 80%鐨勬鐜囨垚鍔�
- return {
- taskNo: taskNo,
- success: success,
- msg: success ? null : `${taskNo} 涓嶅瓨鍦ㄦ垨鏃犳硶鍙栨秷`
- };
- });
-
- const response = {
- code: 200,
- msg: "浠诲姟鍙栨秷鎴愬姛",
- data: data,
- timestamp: new Date().getTime()
- };
-
- resultDiv.innerHTML = `
- <p style="color: #49cc90; font-weight: bold;" class="success-icon">鉁� 璇锋眰鎴愬姛</p>
- <div style="margin-bottom: 20px; padding: 15px; background: #e3f2fd; border-radius: 8px; border-left: 4px solid #2196f3;">
- <p style="font-weight: bold; color: #1976d2; margin-bottom: 10px;">馃摛 鍙戦�佹暟鎹�</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(params, null, 2)}</code></pre>
- </div>
- </div>
- <div style="padding: 15px; background: #e8f5e9; border-radius: 8px; border-left: 4px solid #49cc90;">
- <p style="font-weight: bold; color: #2e7d32; margin-bottom: 10px;">馃摜 杩斿洖鏁版嵁</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(response, null, 2)}</code></pre>
- </div>
- </div>
- <p style="margin-top: 15px; color: #666; padding: 10px; background: #e8f5e9; border-radius: 8px; border-left: 4px solid #4caf50;">鉁� 浠诲姟鍙栨秷璇锋眰宸插鐞嗭紝鍏卞彇娑� ${params.tasks.length} 涓换鍔�</p>
- `;
- }, 1000);
- }
-
- // Mock 浠诲姟鎵ц閫氱煡
- function mockTaskNotice() {
- const callbackUrl = document.getElementById('task-notice-callback-url');
-
- if (!callbackUrl.value.trim()) {
- callbackUrl.classList.add('error');
- document.getElementById('task-notice-callback-url-error').classList.add('show');
- return;
- } else {
- callbackUrl.classList.remove('error');
- document.getElementById('task-notice-callback-url-error').classList.remove('show');
- }
-
- const resultDiv = document.getElementById('mock-task-notice-result');
- resultDiv.classList.add('show');
- resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
-
- const pushData = {
- taskNo: "TASK20231220001",
- robotCode: "AGV" + Math.floor(Math.random() * 10 + 1).toString().padStart(3, '0'),
- finishTime: new Date().toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }).replace(/\//g, '-')
- };
-
- fetch(callbackUrl.value.trim(), {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(pushData)
- })
- .then(response => {
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
- return response.json();
- })
- .then(data => {
- resultDiv.innerHTML = `
- <p style="color: #49cc90; font-weight: bold;" class="success-icon">鉁� 璇锋眰鎴愬姛</p>
- <div style="margin-bottom: 20px; padding: 15px; background: #e3f2fd; border-radius: 8px; border-left: 4px solid #2196f3;">
- <p style="font-weight: bold; color: #1976d2; margin-bottom: 10px;">馃摛 鍙戦�佹暟鎹�</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(pushData, null, 2)}</code></pre>
- </div>
- </div>
- <div style="padding: 15px; background: #e8f5e9; border-radius: 8px; border-left: 4px solid #49cc90;">
- <p style="font-weight: bold; color: #2e7d32; margin-bottom: 10px;">馃摜 杩斿洖鏁版嵁</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(data, null, 2)}</code></pre>
- </div>
- </div>
- <p style="margin-top: 15px; color: #666; padding: 10px; background: #e8f5e9; border-radius: 8px; border-left: 4px solid #49cc90;">馃幆 浠诲姟鎵ц閫氱煡宸叉垚鍔熷彂閫�</p>
- `;
- })
- .catch(error => {
- resultDiv.innerHTML = `
- <p style="color: #f44336; font-weight: bold;" class="error-icon">鉁� 璇锋眰澶辫触</p>
- <div style="margin-bottom: 20px; padding: 15px; background: #e3f2fd; border-radius: 8px; border-left: 4px solid #2196f3;">
- <p style="font-weight: bold; color: #1976d2; margin-bottom: 10px;">馃摛 鍙戦�佹暟鎹�</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(pushData, null, 2)}</code></pre>
- </div>
- </div>
- <p style="margin-top: 15px; color: #f44336; padding: 10px; background: #ffebee; border-radius: 8px; border-left: 4px solid #f44336;">
- 鉂� 閿欒淇℃伅锛�<strong>${error.message}</strong>
- </p>
- <p style="margin-top: 10px; color: #999; font-size: 12px;">鎻愮ず锛氳纭繚鍥炶皟鍦板潃鍙闂紝涓旀湇鍔″櫒宸插惎鍔ㄥ苟鏀寔CORS璺ㄥ煙璇锋眰</p>
- `;
- });
- }
-
- function resetTaskNoticeForm() {
- document.getElementById('task-notice-callback-url').value = 'http://localhost:8080/api/callback';
-
- document.getElementById('mock-task-notice-result').classList.remove('show');
- document.getElementById('mock-task-notice-result').innerHTML = '';
-
- const inputs = document.querySelectorAll('#api-task-notice input');
- inputs.forEach(input => input.classList.remove('error'));
- const errors = document.querySelectorAll('#api-task-notice .error-message');
- errors.forEach(error => error.classList.remove('show'));
- }
-
- // 楠岃瘉搴撲綅鐘舵�佷慨鏀瑰弬鏁�
- function validateLocStatus() {
- let isValid = true;
- const locCode = document.getElementById('loc-status-locCode');
- const status = document.getElementById('loc-status-status');
-
- if (!locCode.value.trim()) {
- locCode.classList.add('error');
- document.getElementById('loc-status-locCode-error').classList.add('show');
- isValid = false;
- } else {
- locCode.classList.remove('error');
- document.getElementById('loc-status-locCode-error').classList.remove('show');
- }
-
- if (!status.value) {
- status.classList.add('error');
- document.getElementById('loc-status-status-error').classList.add('show');
- isValid = false;
- } else {
- status.classList.remove('error');
- document.getElementById('loc-status-status-error').classList.remove('show');
- }
-
- return isValid;
- }
-
- function validateLocStatusJson(params) {
- const errorDiv = document.getElementById('loc-status-json-error');
-
- if (!params || typeof params !== 'object') {
- errorDiv.textContent = '璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.locCode || !params.locCode.trim()) {
- errorDiv.textContent = 'locCode涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.status || !params.status.toString().trim()) {
- errorDiv.textContent = 'status涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- } else {
- const statusValue = params.status.toString().trim();
- if (!['0', '1', '2', '3'].includes(statusValue)) {
- errorDiv.textContent = 'status蹇呴』鏄�0-3涔嬮棿鐨勬暟瀛楋紙0-绂佺敤銆�1-鍚敤銆�2-鍦ㄥ簱銆�3-绌哄簱浣嶏級';
- errorDiv.classList.add('show');
- return false;
- }
- }
-
- errorDiv.classList.remove('show');
- return true;
- }
-
- // 閲嶇疆搴撲綅鐘舵�佷慨鏀硅〃鍗�
- function resetLocStatusForm() {
- document.getElementById('loc-status-locCode').value = 'A100100101';
- document.getElementById('loc-status-status').value = '1';
-
- syncFormToJson('loc-status');
-
- document.getElementById('mock-loc-status-result').classList.remove('show');
- document.getElementById('mock-loc-status-result').innerHTML = '';
-
- const inputs = document.querySelectorAll('#loc-status-form-container input, #loc-status-form-container select');
- inputs.forEach(input => input.classList.remove('error'));
- const errors = document.querySelectorAll('#loc-status-form-container .error-message');
- errors.forEach(error => error.classList.remove('show'));
-
- const jsonError = document.getElementById('loc-status-json-error');
- if (jsonError) jsonError.classList.remove('show');
- }
-
- // 楠岃瘉浠诲姟浼樺厛绾у弬鏁�
- function validateTaskPriority() {
- let isValid = true;
-
- const taskNo = document.getElementById('task-priority-taskNo');
- const priority = document.getElementById('task-priority-priority');
-
- const taskNoError = document.getElementById('task-priority-taskNo-error');
- const priorityError = document.getElementById('task-priority-priority-error');
-
- taskNo.classList.remove('error');
- priority.classList.remove('error');
-
- taskNoError.classList.remove('show');
- priorityError.classList.remove('show');
-
- if (!taskNo.value.trim()) {
- taskNo.classList.add('error');
- taskNoError.classList.add('show');
- isValid = false;
- }
-
- if (!priority.value.trim()) {
- priority.classList.add('error');
- priorityError.classList.add('show');
- isValid = false;
- } else {
- const priorityNum = parseInt(priority.value.trim());
- if (isNaN(priorityNum) || priorityNum < 1 || priorityNum > 300) {
- priority.classList.add('error');
- priorityError.textContent = '浼樺厛绾у繀椤绘槸1-300鐨勬暟瀛�';
- priorityError.classList.add('show');
- isValid = false;
- }
- }
-
- return isValid;
- }
-
- // 閲嶇疆浠诲姟浼樺厛绾ц〃鍗�
- function resetTaskPriorityForm() {
- document.getElementById('task-priority-taskNo').value = 'TASK20231220001';
- document.getElementById('task-priority-priority').value = '2';
-
- syncFormToJson('task-priority');
-
- const inputs = document.querySelectorAll('#task-priority-taskNo, #task-priority-priority');
- inputs.forEach(input => input.classList.remove('error'));
-
- const errors = document.querySelectorAll('[id^="task-priority-"][id$="-error"]');
- errors.forEach(error => {
- error.classList.remove('show');
- if (error.id === 'task-priority-taskNo-error') error.textContent = '璇疯緭鍏ヤ换鍔$紪鍙�';
- if (error.id === 'task-priority-priority-error') error.textContent = '璇疯緭鍏ヤ紭鍏堢骇锛�1-300锛�';
- });
-
- const resultDiv = document.getElementById('mock-task-priority-result');
- resultDiv.classList.remove('show');
- resultDiv.innerHTML = '';
- }
-
- // 楠岃瘉浠诲姟浼樺厛绾SON鍙傛暟
- function validateTaskPriorityJson(params) {
- const errorDiv = document.getElementById('task-priority-json-error');
-
- if (!params || typeof params !== 'object') {
- errorDiv.textContent = '璇疯緭鍏ユ湁鏁堢殑JSON鏍煎紡';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.taskNo || !params.taskNo.trim()) {
- errorDiv.textContent = 'taskNo涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- }
-
- if (!params.priority || !params.priority.toString().trim()) {
- errorDiv.textContent = 'priority涓嶈兘涓虹┖';
- errorDiv.classList.add('show');
- return false;
- } else {
- const priorityNum = parseInt(params.priority.toString().trim());
- if (isNaN(priorityNum) || priorityNum < 1 || priorityNum > 300) {
- errorDiv.textContent = 'priority蹇呴』鏄�1-300鐨勬暟瀛�';
- errorDiv.classList.add('show');
- return false;
- }
- }
-
- errorDiv.classList.remove('show');
- return true;
- }
-
- // Mock 浠诲姟浼樺厛绾ц缃�
- function mockTaskPriority() {
- let params;
- const isJsonMode = document.getElementById('task-priority-json-container').classList.contains('active');
-
- if (isJsonMode) {
- params = getParamsFromJson('task-priority-json');
- if (!params) return;
- if (!validateTaskPriorityJson(params)) return;
- } else {
- if (!validateTaskPriority()) return;
- params = getParamsFromForm('task-priority');
- }
-
- const taskNo = params.taskNo;
- const priority = params.priority;
-
- const resultDiv = document.getElementById('mock-task-priority-result');
- resultDiv.classList.add('show');
- resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
-
- setTimeout(() => {
- const response = {
- code: 200,
- message: "璇锋眰鎴愬姛",
- data: {
- taskNo: taskNo,
- priority: priority
- },
- timestamp: new Date().getTime()
- };
-
- const priorityNum = parseInt(priority);
- let priorityInfo;
- if (priorityNum <= 100) {
- priorityInfo = {text: '浣�', color: '#9e9e9e', icon: '猬囷笍'};
- } else if (priorityNum <= 200) {
- priorityInfo = {text: '涓�', color: '#2196f3', icon: '鉃★笍'};
- } else {
- priorityInfo = {text: '楂�', color: '#f44336', icon: '猬嗭笍'};
- }
-
- resultDiv.innerHTML = `
- <p style="color: #49cc90; font-weight: bold;" class="success-icon">鉁� 璇锋眰鎴愬姛</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(response, null, 2)}</code></pre>
- </div>
- <p style="margin-top: 15px; color: #666; padding: 10px; background: #f5f5f5; border-radius: 8px; border-left: 4px solid ${priorityInfo.color};">
- ${priorityInfo.icon} 浠诲姟浼樺厛绾у凡璁剧疆涓猴細<strong style="color: ${priorityInfo.color};">${priorityInfo.text}</strong>
- </p>
- `;
- }, 600);
- }
-
- // Mock 搴撲綅鐘舵�佷慨鏀�
- function mockLocStatus() {
- let params;
- const isJsonMode = document.getElementById('loc-status-json-container').classList.contains('active');
-
- if (isJsonMode) {
- params = getParamsFromJson('loc-status-json');
- if (!params) return;
- if (!validateLocStatusJson(params)) return;
- } else {
- if (!validateLocStatus()) return;
- params = getParamsFromForm('loc-status');
- }
-
- const resultDiv = document.getElementById('mock-loc-status-result');
- resultDiv.classList.add('show');
- resultDiv.innerHTML = '<p style="color: #999;" class="loading">鈴� 姝e湪鍙戦�佽姹�...</p>';
-
- setTimeout(() => {
- const locCode = params.locCode;
- const status = params.status;
-
- const response = {
- code: 200,
- message: "搴撲綅鐘舵�佷慨鏀规垚鍔�",
- timestamp: new Date().getTime()
- };
-
- const statusMap = {
- '0': {text: '绂佺敤', color: '#f44336', icon: '馃毇'},
- '1': {text: '鍚敤', color: '#4caf50', icon: '鉁�'},
- '2': {text: '鍦ㄥ簱', color: '#ff9800', icon: '馃摝'},
- '3': {text: '绌哄簱浣�', color: '#2196f3', icon: '猬�'}
- };
-
- const statusInfo = statusMap[status];
-
- resultDiv.innerHTML = `
- <p style="color: #49cc90; font-weight: bold;" class="success-icon">鉁� 璇锋眰鎴愬姛</p>
- <div class="code-wrapper">
- <button class="copy-btn" onclick="copyCode(this)">馃搵 澶嶅埗</button>
- <pre><code>${JSON.stringify(response, null, 2)}</code></pre>
- </div>
- <p style="margin-top: 15px; color: #666; padding: 10px; background: #f5f5f5; border-radius: 8px; border-left: 4px solid ${statusInfo.color};">
- ${statusInfo.icon} 搴撲綅 <strong>${locCode}</strong> 鐘舵�侊細<strong style="color: ${statusInfo.color};">${statusInfo.text}</strong>
- </p>
- `;
- }, 700);
- }
-
-
-
- // 澶嶅埗浠g爜鍔熻兘
- function copyCode(button) {
- const codeBlock = button.nextElementSibling.querySelector('code');
- const text = codeBlock.textContent;
-
- navigator.clipboard.writeText(text).then(() => {
- const originalText = button.innerHTML;
- button.innerHTML = '鉁� 宸插鍒�';
- button.style.background = 'rgba(73, 204, 144, 0.2)';
- button.style.borderColor = 'rgba(73, 204, 144, 0.4)';
- button.style.color = '#49cc90';
-
- setTimeout(() => {
- button.innerHTML = originalText;
- button.style.background = 'rgba(255, 255, 255, 0.1)';
- button.style.borderColor = 'rgba(255, 255, 255, 0.2)';
- button.style.color = '#d4d4d4';
- }, 2000);
- }).catch(err => {
- console.error('澶嶅埗澶辫触:', err);
- });
- }
-
- function toggleMockContent(button) {
- const content = button.nextElementSibling;
- if (content.classList.contains('expanded')) {
- content.classList.remove('expanded');
- content.classList.add('collapsed');
- button.textContent = '灞曞紑';
- } else {
- content.classList.remove('collapsed');
- content.classList.add('expanded');
- button.textContent = '鎶樺彔';
- }
- }
-
- // 鐩戝惉婊氬姩娑堟伅
- window.addEventListener('message', function (event) {
+ // 鐩戝惉鏉ヨ嚜鐖剁獥鍙g殑娑堟伅
+ window.addEventListener('message', function(event) {
if (event.data.type === 'scrollToSection') {
- const targetElement = document.getElementById(event.data.sectionId);
- if (targetElement) {
- targetElement.scrollIntoView({behavior: 'smooth', block: 'start'});
+ const sectionId = event.data.sectionId;
+ const section = document.getElementById(sectionId);
+ if (section) {
+ section.scrollIntoView({ behavior: 'smooth' });
}
}
});
</script>
</body>
-</html>
+</html>
\ No newline at end of file
diff --git a/open-rcs/components/rightsidebar/rightsidebar-interface-word.html b/open-rcs/components/rightsidebar/rightsidebar-interface-word.html
deleted file mode 100644
index eaf0907..0000000
--- a/open-rcs/components/rightsidebar/rightsidebar-interface-word.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
-
- body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
- background: linear-gradient(135deg, #ffffff, #f8f9fa);
- padding: 20px;
- }
-
- h3 {
- font-size: 16px;
- margin-bottom: 20px;
- padding-bottom: 15px;
- border-bottom: 2px solid #e0e0e0;
- color: #333;
- font-weight: 700;
- position: relative;
- }
-
- h3::before {
- content: '馃摑';
- margin-right: 8px;
- }
-
- h3::after {
- content: '';
- position: absolute;
- bottom: -2px;
- left: 0;
- width: 30px;
- height: 2px;
- background: linear-gradient(90deg, #667eea, #764ba2);
- }
-
- ul {
- list-style: none;
- }
-
- ul li {
- padding: 10px 12px;
- cursor: pointer;
- color: #555;
- font-size: 14px;
- border-radius: 6px;
- margin-bottom: 4px;
- transition: all 0.3s ease;
- position: relative;
- padding-left: 25px;
- }
-
- ul li::before {
- content: '鈻�';
- position: absolute;
- left: 10px;
- color: #0066cc;
- font-size: 10px;
- transition: all 0.3s ease;
- }
-
- ul li:hover {
- background: linear-gradient(135deg, #f0f4ff, #e8f0fe);
- padding-left: 30px;
- box-shadow: 0 2px 6px rgba(102, 126, 234, 0.1);
- }
-
- ul li:hover::before {
- left: 12px;
- color: #667eea;
- }
-
- ul li a {
- color: #555;
- text-decoration: none;
- display: block;
- font-weight: 500;
- transition: color 0.3s ease;
- }
-
- ul li a:hover {
- color: #667eea;
- font-weight: 600;
- }
-
- /* 婊氬姩鏉$編鍖� */
- ::-webkit-scrollbar {
- width: 6px;
- }
-
- ::-webkit-scrollbar-track {
- background: #f1f1f1;
- border-radius: 3px;
- }
-
- ::-webkit-scrollbar-thumb {
- background: linear-gradient(135deg, #667eea, #764ba2);
- border-radius: 3px;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background: linear-gradient(135deg, #764ba2, #667eea);
- }
- </style>
-</head>
-<body>
-<h3>鏈〉鍐呭</h3>
-<ul>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-overview'); return false;">鎺ュ彛姒傝</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-create'); return false;">鐢熸垚浠诲姟鍗�*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-cancel'); return false;">鍙栨秷浠诲姟鍗�*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-notice'); return false;">浠诲姟鎵ц閫氱煡*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-priority'); return false;">鐢宠鍏ュ簱浠诲姟*</a></li>
- <!-- <li><a href="javascript:void(0);" onclick="scrollToSection('api-loc-status'); return false;">搴撲綅鐘舵�佷慨鏀�</a></li> -->
- <li><a href="javascript:void(0);" onclick="scrollToSection('error-codes'); return false;">閿欒鐮佽鏄�</a></li>
-</ul>
-
-<script>
- function scrollToSection(sectionId) {
- window.parent.postMessage({
- type: 'scrollToSection',
- sectionId: sectionId
- }, '*');
- }
-</script>
-</body>
-</html>
diff --git a/open-rcs/components/rightsidebar/rightsidebar-platform-intro.html b/open-rcs/components/rightsidebar/rightsidebar-platform-intro.html
deleted file mode 100644
index d2a4178..0000000
--- a/open-rcs/components/rightsidebar/rightsidebar-platform-intro.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
-
- body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
- background-color: #fff;
- padding: 20px;
- }
-
- h3 {
- font-size: 16px;
- margin-bottom: 20px;
- padding-bottom: 10px;
- border-bottom: 1px solid #e0e0e0;
- }
-
- ul {
- list-style: none;
- }
-
- ul li {
- padding: 8px 0;
- cursor: pointer;
- color: #666;
- font-size: 14px;
- }
-
- ul li a {
- color: #666;
- text-decoration: none;
- display: block;
- }
-
- ul li a:hover {
- color: #0066cc;
- }
- </style>
-</head>
-<body>
-<h3>鏈〉鍐呭</h3>
-<ul>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('enterprise-admin'); return false;">浼佷笟绠$悊鍛�</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('enterprise-member'); return false;">浼佷笟鎴愬憳</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('device'); return false;">璁惧</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('product'); return false;">浜у搧</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('user-id'); return false;">寮�鍙戣�呰幏鍙朥ser ID</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('iot-enable'); return false;">鐗╄仈浣胯兘</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('dev-board'); return false;">娴峰皵璁惧寮�鍙戞澘</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('dev-kit'); return false;">鑱斿寮�鍙戣�呭浠�</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('firmware'); return false;">鍥轰欢</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('hw-direct'); return false;">纭欢鐩磋繛鎺ュ叆</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('hw-cloud'); return false;">纭欢浜戝浜戞帴鍏�</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('app-access'); return false;">搴旂敤&搴旂敤鎺ュ叆</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('sw-modeling'); return false;">杞欢寤烘ā</a></li>
- <li><a href="javascript:void(0);" onclick="sendScrollMessage('typeid'); return false;">TYPEID</a></li>
-</ul>
-
-<script>
- function sendScrollMessage(sectionId) {
- window.parent.postMessage({
- type: 'scrollToSection',
- sectionId: sectionId
- }, '*');
- }
-</script>
-</body>
-</html>
diff --git a/open-rcs/components/rightsidebar/rightsidebar-platform-spec.html b/open-rcs/components/rightsidebar/rightsidebar-platform-spec.html
deleted file mode 100644
index 670aa3e..0000000
--- a/open-rcs/components/rightsidebar/rightsidebar-platform-spec.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- }
-
- body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
- background-color: #fff;
- padding: 20px;
- }
-
- h3 {
- font-size: 16px;
- margin-bottom: 20px;
- padding-bottom: 10px;
- border-bottom: 1px solid #e0e0e0;
- }
-
- ul {
- list-style: none;
- }
-
- ul li {
- padding: 8px 0;
- cursor: pointer;
- color: #666;
- font-size: 14px;
- }
-
- ul li a {
- color: #666;
- text-decoration: none;
- display: block;
- }
-
- ul li a:hover {
- color: #0066cc;
- }
- </style>
-</head>
-<body>
-<h3>鏈〉鍐呭</h3>
-<ul>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('dev-spec'); return false;">寮�鍙戣鑼�</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('security-spec'); return false;">瀹夊叏瑙勮寖</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('data-spec'); return false;">鏁版嵁瑙勮寖</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('api-spec'); return false;">鎺ュ彛瑙勮寖</a></li>
-</ul>
-</body>
-</html>
diff --git a/open-rcs/components/sidebar/sidebar-interface-word.html b/open-rcs/components/sidebar/sidebar-interface-word.html
index f989e47..c3f1d7f 100644
--- a/open-rcs/components/sidebar/sidebar-interface-word.html
+++ b/open-rcs/components/sidebar/sidebar-interface-word.html
@@ -46,16 +46,51 @@
/* 涓�绾ц彍鍗曢」 */
.sidebar-menu > li {
+ padding: 0;
+ margin-bottom: 5px;
+ position: relative;
+ border-radius: 8px;
+ overflow: hidden;
+ }
+
+ /* 鑿滃崟澶撮儴 */
+ .menu-header {
padding: 12px 15px;
- cursor: pointer;
color: #555;
font-size: 14px;
- border-radius: 8px;
- margin-bottom: 5px;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
font-weight: 600;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ /* 鑿滃崟鏂囧瓧 */
+ .menu-text {
+ flex: 1;
+ user-select: none;
+ }
+
+ /* 鑿滃崟澶撮儴鍐呭瀹瑰櫒 */
+ .menu-header > * {
+ user-select: none;
+ }
+
+ .menu-header:hover {
+ background: linear-gradient(135deg, #e8f4ff, #d4e9ff);
+ box-shadow: 0 2px 8px rgba(0, 102, 204, 0.1);
+ }
+
+ .sidebar-menu > li:hover::before {
+ transform: scaleY(1);
+ }
+
+ .sidebar-menu > li.active .menu-header {
+ background: linear-gradient(135deg, #0066cc, #0052a3);
+ color: #fff;
+ box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3);
}
.sidebar-menu > li::before {
@@ -132,11 +167,18 @@
/* 灞曞紑/鎶樺彔鍥炬爣 */
.menu-toggle {
- float: right;
+ cursor: pointer;
font-size: 12px;
transition: transform 0.3s ease;
+ padding: 4px 8px;
+ border-radius: 4px;
+ user-select: none;
}
-
+
+ .menu-toggle:hover {
+ background: rgba(0, 102, 204, 0.1);
+ }
+
.menu-toggle.expanded {
transform: rotate(90deg);
}
@@ -163,51 +205,58 @@
</head>
<body>
<h3>RCS鎺ュ彛鏂囨。</h3>
-<ul class="sidebar-menu">
+<ul class="sidebar-menu" id="sidebar-menu-container">
<!-- 姒傝绫� -->
- <li onclick="toggleSubmenu(this)">
- 姒傝
- <span class="menu-toggle expanded">鈻�</span>
+ <li>
+ <div class="menu-header">
+ <span class="menu-text">姒傝</span>
+ <span class="menu-toggle expanded" onclick="toggleMenu(this)">鈻�</span>
+ </div>
<ul class="submenu expanded">
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-overview'); event.stopPropagation(); return false;">鎺ュ彛姒傝</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('error-codes'); event.stopPropagation(); return false;">閿欒鐮佽鏄�</a></li>
+ <li><a href="#api-overview" class="submenu-link" data-section="api-overview" onclick="navigateToSection(this); return false;">鎺ュ彛姒傝</a></li>
+ <li><a href="#error-codes" class="submenu-link" data-section="error-codes" onclick="navigateToSection(this); return false;">閿欒鐮佽鏄�</a></li>
</ul>
</li>
<!-- 浠诲姟绠$悊绫� -->
- <li onclick="toggleSubmenu(this)">
- 浠诲姟绠$悊
- <span class="menu-toggle">鈻�</span>
- <ul class="submenu expanded">
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-create'); event.stopPropagation(); return false;">鐢熸垚浠诲姟鍗�*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-cancel'); event.stopPropagation(); return false;">鍙栨秷浠诲姟*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-notice'); event.stopPropagation(); return false;">浠诲姟鎵ц閫氱煡*</a></li>
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-priority'); event.stopPropagation(); return false;">鐢宠鍏ュ簱浠诲姟*</a></li>
+ <li>
+ <div class="menu-header">
+ <span class="menu-text">浠诲姟绠$悊</span>
+ <span class="menu-toggle" onclick="toggleMenu(this)">鈻�</span>
+ </div>
+ <ul class="submenu expanded" id="menu-task-management">
+ <!-- 鍔ㄦ�佺敓鎴� -->
</ul>
</li>
-
- <!-- 璁惧绠$悊绫� -->
- <!-- <li onclick="toggleSubmenu(this)">
- 璁惧绠$悊
- <span class="menu-toggle">鈻�</span>
- <ul class="submenu expanded">
- <li><a href="javascript:void(0);" onclick="scrollToSection('api-loc-status'); event.stopPropagation(); return false;">搴撲綅鐘舵�佷慨鏀�</a></li>
- </ul>
- </li> -->
</ul>
<script>
+ // 娣诲姞闃叉姈鍙橀噺
+ let lastToggleTime = 0;
+ const toggleDebounceTime = 200; // 200姣闃叉姈
+
// 鍒囨崲浜岀骇鑿滃崟灞曞紑/鎶樺彔
- function toggleSubmenu(element) {
- const submenu = element.querySelector('.submenu');
- const menuToggle = element.querySelector('.menu-toggle');
-
- if (submenu) {
- submenu.classList.toggle('expanded');
+ function toggleMenu(element) {
+ // 闃叉蹇�熻繛缁偣鍑�
+ const currentTime = new Date().getTime();
+ if (currentTime - lastToggleTime < toggleDebounceTime) {
+ return;
}
+ lastToggleTime = currentTime;
- if (menuToggle) {
- menuToggle.classList.toggle('expanded');
+ // 鍙鐞嗙洿鎺ョ偣鍑昏彍鍗曞浘鏍囩殑鎯呭喌
+ const menuItem = element.closest('li');
+ if (menuItem) {
+ const submenu = menuItem.querySelector('.submenu');
+ const menuToggle = menuItem.querySelector('.menu-toggle');
+
+ if (submenu) {
+ submenu.classList.toggle('expanded');
+ }
+
+ if (menuToggle) {
+ menuToggle.classList.toggle('expanded');
+ }
}
}
@@ -218,6 +267,108 @@
sectionId: sectionId
}, '*');
}
+
+ // 瀵艰埅鍒版寚瀹氱珷鑺�
+ function navigateToSection(element) {
+ const sectionId = element.getAttribute('data-section');
+ if (sectionId) {
+ scrollToSection(sectionId);
+ }
+ }
+
+ // 鍔犺浇API閰嶇疆鏂囦欢骞剁敓鎴愯彍鍗�
+ function loadApiMenu() {
+ try {
+ // 鐩存帴瀹氫箟API閰嶇疆鏁版嵁锛岄伩鍏岰ORS閿欒
+ const apiConfigs = [
+ {
+ "apiId": "api-task-create",
+ "name": "鐢熸垚浠诲姟鍗�",
+ "description": "鍒涘缓鎼繍浠诲姟",
+ "isCommon": true,
+ "method": "POST",
+ "url": "/api/open/bus/submit",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 1
+ }
+ },
+ {
+ "apiId": "api-task-cancel",
+ "name": "鍙栨秷浠诲姟",
+ "description": "鍙栨秷鎼繍浠诲姟",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/cancel",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 2
+ }
+ },
+ {
+ "apiId": "api-task-allocate",
+ "name": "鐢宠鍏ュ簱鎺ュ彛",
+ "description": "鐢宠浠诲姟鍏ュ簱",
+ "isCommon": true,
+ "method": "POST",
+ "url": "/api/open/task/allocate",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 3
+ }
+ },
+ {
+ "apiId": "api-task-notice",
+ "name": "浠诲姟鐘舵�侀�氱煡",
+ "description": "閫氱煡浠诲姟鐘舵�佸彉鏇�",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/notice",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 4
+ }
+ },
+ {
+ "apiId": "api-task-priority",
+ "name": "浠诲姟浼樺厛绾ц皟鏁�",
+ "description": "璋冩暣浠诲姟浼樺厛绾�",
+ "isCommon": false,
+ "method": "POST",
+ "url": "/api/open/bus/priority",
+ "menu": {
+ "category": "浠诲姟绠$悊",
+ "order": 5
+ }
+ }
+ ];
+
+ // 鐢熸垚浠诲姟绠$悊鑿滃崟
+ const taskManagementMenu = document.getElementById('menu-task-management');
+ if (taskManagementMenu) {
+ taskManagementMenu.innerHTML = '';
+ apiConfigs.forEach(config => {
+ const li = document.createElement('li');
+ const a = document.createElement('a');
+ a.href = '#' + config.apiId;
+ a.className = 'submenu-link';
+ a.setAttribute('data-section', config.apiId);
+ a.setAttribute('onclick', 'navigateToSection(this); return false;');
+ a.textContent = config.name + (config.isCommon ? '*' : '');
+ li.appendChild(a);
+ taskManagementMenu.appendChild(li);
+ });
+ }
+
+ } catch (error) {
+ console.error('Failed to load API configs:', error);
+ }
+ }
+
+ // 椤甸潰鍔犺浇瀹屾垚鍚庡姞杞借彍鍗�
+ window.addEventListener('DOMContentLoaded', function() {
+ loadApiMenu();
+ });
</script>
</body>
</html>
diff --git a/open-rcs/components/sidebar/sidebar-platform-spec.html b/open-rcs/components/sidebar/sidebar-platform-spec.html
index 981c871..086f270 100644
--- a/open-rcs/components/sidebar/sidebar-platform-spec.html
+++ b/open-rcs/components/sidebar/sidebar-platform-spec.html
@@ -48,10 +48,19 @@
<body>
<h3>骞冲彴瑙勮寖</h3>
<ul class="sidebar-menu">
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('dev-spec'); return false;">寮�鍙戣鑼�</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('security-spec'); return false;">瀹夊叏瑙勮寖</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('data-spec'); return false;">鏁版嵁瑙勮寖</a></li>
- <li><a href="javascript:void(0);" onclick="parent.scrollToSection('api-spec'); return false;">鎺ュ彛瑙勮寖</a></li>
+ <li><a href="javascript:void(0);" onclick="sendScrollMessage('dev-spec'); return false;">寮�鍙戣鑼�</a></li>
+ <li><a href="javascript:void(0);" onclick="sendScrollMessage('security-spec'); return false;">瀹夊叏瑙勮寖</a></li>
+ <li><a href="javascript:void(0);" onclick="sendScrollMessage('data-spec'); return false;">鏁版嵁瑙勮寖</a></li>
+ <li><a href="javascript:void(0);" onclick="sendScrollMessage('api-spec'); return false;">鎺ュ彛瑙勮寖</a></li>
</ul>
+
+<script>
+ function sendScrollMessage(sectionId) {
+ window.parent.postMessage({
+ type: 'scrollToSection',
+ sectionId: sectionId
+ }, '*');
+ }
+</script>
</body>
</html>
diff --git a/open-rcs/pages/index-main.html b/open-rcs/pages/index-main.html
index e04e595..85ba237 100644
--- a/open-rcs/pages/index-main.html
+++ b/open-rcs/pages/index-main.html
@@ -35,11 +35,12 @@
/* 涓讳綋鍐呭鍖哄煙 */
.main-container {
- max-width: 1400px;
+ max-width: 1200px;
margin: 20px auto;
padding: 0 20px;
display: flex;
gap: 20px;
+ justify-content: center;
}
/* 宸︿晶杈规爮 */
@@ -61,6 +62,7 @@
/* 涓诲唴瀹瑰尯 */
.content-area {
flex: 1;
+ max-width: 900px;
background-color: #fff;
min-height: 800px;
}
@@ -73,21 +75,7 @@
display: block;
}
- /* 鍙充晶杈规爮 */
- .sidebar-right {
- width: 220px;
- background-color: #fff;
- height: fit-content;
- position: sticky;
- top: 140px;
- }
- #right-sidebar-frame {
- width: 100%;
- height: 600px;
- border: none;
- display: block;
- }
/* 搴曢儴 */
footer {
@@ -225,10 +213,7 @@
<iframe id="content-frame" src="../components/content/content-interface-word.html"></iframe>
</div>
- <!-- 鍙充晶杈规爮 -->
- <div class="sidebar-right">
- <iframe id="right-sidebar-frame" src="../components/rightsidebar/rightsidebar-interface-word.html"></iframe>
- </div>
+
</div>
<!-- 搴曢儴 -->
@@ -292,18 +277,15 @@
const tabConfig = {
'platform-intro': {
sidebar: '../components/sidebar/sidebar-platform-intro.html',
- content: '../components/content/content-platform-intro.html',
- rightSidebar: '../components/rightsidebar/rightsidebar-platform-intro.html'
+ content: '../components/content/content-platform-intro.html'
},
'platform-spec': {
sidebar: '../components/sidebar/sidebar-platform-spec.html',
- content: '../components/content/content-platform-spec.html',
- rightSidebar: '../components/rightsidebar/rightsidebar-platform-spec.html'
+ content: '../components/content/content-platform-spec.html'
},
'interface-word': {
sidebar: '../components/sidebar/sidebar-interface-word.html',
- content: '../components/content/content-interface-word.html',
- rightSidebar: '../components/rightsidebar/rightsidebar-interface-word.html'
+ content: '../components/content/content-interface-word.html'
}
};
@@ -326,7 +308,6 @@
// 鏇存柊iframe鍐呭
document.getElementById('sidebar-frame').src = config.sidebar;
document.getElementById('content-frame').src = config.content;
- document.getElementById('right-sidebar-frame').src = config.rightSidebar;
// 閫氱煡header鏇存柊active鐘舵��
const headerFrame = document.getElementById('header-frame');
--
Gitblit v1.9.1