From bd6b518aae61608ddc2d82b43ccc283dc95b9c54 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 11 三月 2026 13:59:33 +0800
Subject: [PATCH] #
---
src/main/webapp/views/detail.html | 77 ++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 1 deletions(-)
diff --git a/src/main/webapp/views/detail.html b/src/main/webapp/views/detail.html
index 301d6b2..bbed975 100644
--- a/src/main/webapp/views/detail.html
+++ b/src/main/webapp/views/detail.html
@@ -394,6 +394,47 @@
</div>
</el-form-item>
</el-col>
+ <el-col :xs="24">
+ <el-form-item label="閫氳瀵嗛挜">
+ <div class="mfa-panel">
+ <div class="mfa-head">
+ <div class="mfa-title">璁惧鐢熺墿璇嗗埆 / 瀹夊叏瀵嗛挜鐧诲綍</div>
+ <div class="mfa-actions">
+ <el-button
+ v-if="!form.passkeyBound"
+ type="primary"
+ plain
+ icon="el-icon-key"
+ @click="openPasskeyRegisterDialog">缁戝畾閫氳瀵嗛挜</el-button>
+ <el-button
+ v-else
+ type="danger"
+ plain
+ icon="el-icon-delete"
+ @click="openPasskeyRemoveDialog">瑙g粦閫氳瀵嗛挜</el-button>
+ </div>
+ </div>
+ <div class="mfa-meta">
+ <div class="mfa-meta-item">
+ <div class="mfa-meta-label">缁戝畾鐘舵��</div>
+ <div class="mfa-meta-value">{{ form.passkeyBound ? '宸茬粦瀹�' : '鏈粦瀹�' }}</div>
+ </div>
+ <div class="mfa-meta-item">
+ <div class="mfa-meta-label">鏄剧ず鍚嶇О</div>
+ <div class="mfa-meta-value">{{ form.passkeyName || '--' }}</div>
+ </div>
+ <div class="mfa-meta-item">
+ <div class="mfa-meta-label">缁戝畾鏃堕棿</div>
+ <div class="mfa-meta-value">{{ form.passkeyBoundTime$ || '--' }}</div>
+ </div>
+ </div>
+ <div class="mfa-tip">
+ <span v-if="form.passkeyBound">鏈�杩戜娇鐢細{{ form.passkeyLastUsedTime$ || '--' }}</span>
+ <span v-else>缁戝畾鍚庡彲鐩存帴浣跨敤璁惧鎸囩汗銆佷汉鑴告垨瀹夊叏瀵嗛挜鐧诲綍銆傝鑳藉姏瑕佹眰娴忚鍣ㄦ敮鎸侀�氳瀵嗛挜锛屼笖绯荤粺浠� HTTPS 鎴� localhost 鎵撳紑銆�</span>
+ </div>
+ </div>
+ </el-form-item>
+ </el-col>
</el-row>
<div class="footer-bar">
<el-button type="primary" :loading="saving" @click="handleSave">纭淇敼</el-button>
@@ -476,12 +517,46 @@
</div>
</el-form>
</el-dialog>
+
+ <el-dialog
+ class="mfa-dialog"
+ :title="passkeyDialogMode === 'register' ? '缁戝畾閫氳瀵嗛挜' : '瑙g粦閫氳瀵嗛挜'"
+ :visible.sync="passkeyDialogVisible"
+ width="520px"
+ :close-on-click-modal="false"
+ @close="closePasskeyDialog"
+ append-to-body>
+ <div class="mfa-setup">
+ <div v-if="passkeyDialogMode === 'register'" class="mfa-setup-tip">缁戝畾鏃朵細寮瑰嚭绯荤粺绾ц韩浠介獙璇佺獥鍙o紝璇蜂娇鐢ㄥ綋鍓嶈澶囩殑浜鸿劯銆佹寚绾广�丳IN 鎴栧畨鍏ㄥ瘑閽ュ畬鎴愮‘璁ゃ�傝嫢娴忚鍣ㄦ垨鐜涓嶆敮鎸侊紝鏃犳硶鍚敤璇ヨ兘鍔涖��</div>
+ <div v-else class="mfa-setup-tip">瑙g粦鍓嶈杈撳叆褰撳墠瀵嗙爜纭銆傝В缁戝悗灏嗕笉鑳藉啀鐢ㄥ綋鍓嶉�氳瀵嗛挜鐩存帴鐧诲綍銆�</div>
+ </div>
+ <el-form
+ ref="passkeyForm"
+ class="password-form"
+ :model="passkeyForm"
+ :rules="passkeyRules"
+ label-width="112px"
+ size="small"
+ @submit.native.prevent>
+ <el-form-item v-if="passkeyDialogMode === 'register'" label="鏄剧ず鍚嶇О" prop="name">
+ <el-input v-model.trim="passkeyForm.name" maxlength="100" autocomplete="off" placeholder="渚嬪锛氬姙鍏鐢佃剳"></el-input>
+ </el-form-item>
+ <el-form-item label="褰撳墠瀵嗙爜" prop="currentPassword">
+ <el-input v-model="passkeyForm.currentPassword" type="password" show-password autocomplete="off"></el-input>
+ </el-form-item>
+ <div class="mfa-footer">
+ <el-button @click="closePasskeyDialog">鍏抽棴</el-button>
+ <el-button type="primary" :loading="passkeySubmitting" @click="handlePasskeySubmit">淇濆瓨</el-button>
+ </div>
+ </el-form>
+ </el-dialog>
</div>
</body>
<script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../static/js/tools/md5.js"></script>
<script type="text/javascript" src="../static/js/common.js"></script>
+<script type="text/javascript" src="../static/js/webauthn-utils.js"></script>
<script type="text/javascript" src="../static/vue/js/vue.min.js"></script>
<script type="text/javascript" src="../static/vue/element/element.js"></script>
-<script type="text/javascript" src="../static/js/detail/detail.js?v=20260311_detail_mfa"></script>
+<script type="text/javascript" src="../static/js/detail/detail.js?v=20260311_detail_passkey"></script>
</html>
--
Gitblit v1.9.1