liuq пре 1 месец
родитељ
комит
990a8c828d
2 измењених фајлова са 130 додато и 3 уклоњено
  1. 5 2
      frontend/src/views/Help.vue
  2. 125 1
      frontend/src/views/help/IntegrationOverview.vue

+ 5 - 2
frontend/src/views/Help.vue

@@ -27,7 +27,7 @@
     <div class="tabs-container" v-if="tabs.length > 0">
       <div class="tabs-wrapper">
         <div 
-          v-for="(tab, index) in tabs" 
+          v-for="tab in tabs" 
           :key="tab.id"
           class="tab-item"
           :class="{ active: activeTabId === tab.id }"
@@ -55,7 +55,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, computed } from 'vue'
+import { ref, computed, provide } from 'vue'
 import { Link, Close } from '@element-plus/icons-vue'
 import { useHelpDocs } from '../composables/useHelpDocs'
 
@@ -191,6 +191,9 @@ const initDefaultTab = () => {
 
 // 组件挂载时初始化
 initDefaultTab()
+
+// 提供给子组件使用,用于切换tab
+provide('switchHelpTab', handleTabSelect)
 </script>
 
 <style scoped>

+ 125 - 1
frontend/src/views/help/IntegrationOverview.vue

@@ -41,21 +41,145 @@
         <li><strong>手机号码(唯一标识):</strong> 用户的手机号码是统一认证平台的核心标识,<strong>同步后不能修改</strong>。</li>
         <li><strong>可修改字段:</strong> 您只能修改用户的 <strong>映射账号</strong> (Mapped Account/ID) 和 <strong>邮箱</strong>。这允许您在业务系统账号变更时更新映射关系。</li>
       </ul>
+
+      <div class="feature-card" style="margin-top: 20px;">
+        <h4>📌 同步接口使用场景</h4>
+        <p>普通对接的平台可以在自己平台的账号管理模块中使用同步接口,实现用户信息的实时同步:</p>
+        <ul>
+          <li><strong>新增用户:</strong> 当您的平台新增用户时,可以调用同步接口(<code>sync_action: UPSERT</code>)同步映射信息。此时支持传输手机号码、姓名等用户基本信息。</li>
+          <li><strong>修改用户:</strong> 当您的平台修改用户信息时,可以调用同步接口(<code>sync_action: UPSERT</code>)更新映射信息。注意:修改操作<strong>只支持更新映射信息</strong>(<code>mapped_key</code>、<code>mapped_email</code>、<code>is_active</code>),不支持修改手机号码、姓名等用户基本信息。</li>
+          <li><strong>删除用户:</strong> 当您的平台删除用户时,可以调用同步接口(<code>sync_action: DELETE</code>)删除映射关系。删除操作<strong>只删除映射关系</strong>,不会删除统一认证平台上的用户账号。</li>
+        </ul>
+        <p class="note" style="margin-top: 10px;">
+          <strong>重要提示:</strong> 同步接口只有在新增用户(用户不存在时)时才支持传输手机号码、姓名等用户信息;修改和删除操作仅支持映射信息的更新或删除。
+        </p>
+      </div>
     </div>
 
     <div class="section">
       <h3>3. 用户管理数据说明</h3>
       <ul>
-        <li><strong>姓名与英文名:</strong> 在“用户管理”中维护的姓名和英文名称字段,<strong>不与特定应用的账号映射强行关联</strong>。</li>
+        <li><strong>姓名与英文名:</strong> 在"用户管理"中维护的姓名和英文名称字段,<strong>不与特定应用的账号映射强行关联</strong>。</li>
         <li><strong>设计目的:</strong> 这部分是为了方便平台数据初始化和展示,方便管理员识别用户身份,而不作为业务系统的强校验字段。</li>
       </ul>
     </div>
+
+    <div class="section">
+      <h3>4. 快速对接统一登录平台</h3>
+      <p>这是最简单的集成方式,只需实现一个回调接口并配置用户映射信息,被配置的用户即可在快捷导航中看到该应用。</p>
+
+      <h4>4.1 准备工作</h4>
+      <ol>
+        <li>在 UAP 管理后台创建应用,获取 <code>App ID</code> 和 <code>App Secret</code></li>
+        <li><strong>关键配置:</strong> 在应用配置中填写合法的 <strong>回调地址 (Redirect URIs)</strong>,例如:<code>http://your-app.com/callback</code></li>
+      </ol>
+
+      <h4>4.2 实现回调接口</h4>
+      <p>用户登录成功后,统一认证平台会将用户重定向到您配置的回调地址,URL 格式如下:</p>
+      <div class="code-block">
+        <pre>http://your-app.com/callback?ticket=TICKET-xxxxx</pre>
+      </div>
+
+      <p>您的后端需要接收 <code>ticket</code> 参数,并调用 UAP 的验证接口换取用户信息。具体实现方式请参考:</p>
+      <p>
+        <a href="#" @click.prevent="switchToFastIntegration" class="help-link">
+          <el-icon style="margin-right: 5px;"><Link /></el-icon>
+          快速对接指南 (Redirect SSO)
+        </a>
+      </p>
+
+      <div class="feature-card">
+        <h4>📋 验证接口说明</h4>
+        <ul>
+          <li><strong>接口地址:</strong> <code>POST /api/v1/simple/validate</code></li>
+          <li><strong>请求参数:</strong>
+            <ul>
+              <li><code>app_id</code> (string, 必填): 您的应用 ID</li>
+              <li><code>ticket</code> (string, 必填): 接收到的票据</li>
+              <li><code>timestamp</code> (int, 必填): 当前时间戳(秒)</li>
+              <li><code>sign</code> (string, 必填): 签名(使用 App Secret 计算)</li>
+            </ul>
+          </li>
+          <li><strong>签名算法:</strong> HMAC-SHA256,详细说明请查看 <a href="#" @click.prevent="switchToFastIntegration" class="help-link">快速对接指南</a></li>
+        </ul>
+      </div>
+
+      <h4>4.3 配置用户映射信息</h4>
+      <p>为了让用户在快捷导航中看到您的应用,需要为该用户配置映射关系。有两种方式:</p>
+
+      <div class="feature-card">
+        <h4>方式一:通过账号同步接口(推荐)</h4>
+        <p>使用 M2M 账号同步接口批量配置用户映射关系,详见 <a href="#" @click.prevent="switchToAccountSync" class="help-link">账号同步 (M2M) 使用说明</a>。</p>
+        <p><strong>接口地址:</strong> <code>POST /api/v1/apps/mapping/sync</code></p>
+      </div>
+
+      <div class="feature-card">
+        <h4>方式二:通过管理后台手动配置</h4>
+        <ol>
+          <li>登录 UAP 管理后台,进入「应用管理」</li>
+          <li>选择您的应用,进入「账号映射」页面</li>
+          <li>点击「创建映射」,填写用户手机号和映射信息(<code>mapped_key</code>、<code>mapped_email</code>)</li>
+          <li>保存后,该用户即可在快捷导航中看到该应用</li>
+        </ol>
+      </div>
+
+      <h4>4.4 快捷导航显示规则</h4>
+      <ul>
+        <li>用户登录统一认证平台后,在「快捷导航」页面可以看到所有已配置映射关系的应用</li>
+        <li>只有 <code>is_active = true</code> 的映射关系才会显示</li>
+        <li>点击应用图标后,系统会自动跳转到统一登录页面,完成 SSO 登录</li>
+      </ul>
+
+      <el-alert title="提示" type="info" :closable="false" show-icon style="margin-top: 20px;">
+        <div>
+          <strong>完整对接流程:</strong>
+          <ol style="margin-top: 10px; padding-left: 20px;">
+            <li>创建应用并配置回调地址</li>
+            <li>实现回调接口,验证 ticket 并获取用户信息(详见 <a href="#" @click.prevent="switchToFastIntegration" class="help-link">快速对接指南</a>)</li>
+            <li>配置用户映射关系(通过同步接口或管理后台)</li>
+            <li>用户在快捷导航中点击应用,完成 SSO 登录</li>
+          </ol>
+        </div>
+      </el-alert>
+    </div>
   </div>
 </template>
 
 <script setup lang="ts">
+import { inject } from 'vue'
+import { Link } from '@element-plus/icons-vue'
+
+// 从父组件注入切换tab的方法
+const switchHelpTab = inject<(value: string) => void>('switchHelpTab')
+
+const switchToFastIntegration = () => {
+  if (switchHelpTab) {
+    switchHelpTab('fast-integration')
+  }
+}
+
+const switchToAccountSync = () => {
+  if (switchHelpTab) {
+    switchHelpTab('account-sync')
+  }
+}
 </script>
 
 <style scoped>
 @import './help.css';
+
+.help-link {
+  color: #409eff;
+  text-decoration: none;
+  display: inline-flex;
+  align-items: center;
+  font-weight: 500;
+  transition: color 0.3s;
+  cursor: pointer;
+}
+
+.help-link:hover {
+  color: #66b1ff;
+  text-decoration: underline;
+}
 </style>