Skip to content

Commit 49ea5f1

Browse files
committed
feat: 实现渐进式设备注册功能,自动生成设备信息并获取访问令牌,优化用户体验
1 parent 670666a commit 49ea5f1

File tree

5 files changed

+902
-254
lines changed

5 files changed

+902
-254
lines changed

src/axios/axios.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ axiosInstance.interceptors.request.use(
1717

1818
// 只有在 kv-server 或 classworkscloud 模式下才添加请求头
1919
if (provider === "kv-server" || provider === "classworkscloud") {
20-
// 确保每次请求时都获取最新的 siteKey
21-
const siteKey = getSetting("server.siteKey");
22-
if (siteKey) {
23-
requestConfig.headers["x-site-key"] = Base64.encode(siteKey);
24-
}
25-
26-
// 自动添加命名空间密码
27-
const namespacePassword = getSetting("namespace.password");
28-
if (namespacePassword) {
29-
requestConfig.headers["x-namespace-password"] = Base64.encode(namespacePassword);
20+
// 优先使用新的 kvToken
21+
const kvToken = getSetting("server.kvToken");
22+
if (kvToken) {
23+
requestConfig.headers["x-app-token"] = kvToken;
24+
} else {
25+
// 向后兼容旧的 siteKey
26+
const siteKey = getSetting("server.siteKey");
27+
if (siteKey) {
28+
requestConfig.headers["x-site-key"] = Base64.encode(siteKey);
29+
}
3030
}
3131
}
3232

src/components/InitServiceChooser.vue

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -99,40 +99,41 @@
9999
</v-card-item>
100100
</v-card>
101101
</div>
102-
<div class="options-buttons">
103-
<v-btn
104-
variant="tonal"
105-
prepend-icon="mdi-laptop"
106-
size="small"
107-
@click="useLocalMode"
108-
>
109-
使用本地模式
110-
</v-btn>
111-
<v-btn
112-
variant="tonal"
113-
prepend-icon="mdi-flash"
114-
size="small"
115-
@click="handleAutoAuthorize"
116-
>
117-
授权码式授权(弃用)
118-
</v-btn>
119-
<v-btn
120-
variant="tonal"
121-
prepend-icon="mdi-key"
122-
size="small"
123-
@click="showTokenDialog = true"
124-
>
125-
输入 Token
126-
</v-btn>
127-
<v-btn
128-
variant="tonal"
129-
prepend-icon="mdi-code-tags"
130-
size="small"
131-
@click="showAlternativeCodeDialog = true"
132-
>
133-
输入替代代码
134-
</v-btn>
135-
</div>
102+
103+
<div class="options-buttons">
104+
<v-btn
105+
variant="tonal"
106+
prepend-icon="mdi-laptop"
107+
size="small"
108+
@click="useLocalMode"
109+
>
110+
使用本地模式
111+
</v-btn>
112+
<v-btn
113+
variant="tonal"
114+
prepend-icon="mdi-flash"
115+
size="small"
116+
@click="handleAutoAuthorize"
117+
>
118+
授权码式授权(弃用)
119+
</v-btn>
120+
<v-btn
121+
variant="tonal"
122+
prepend-icon="mdi-key"
123+
size="small"
124+
@click="showTokenDialog = true"
125+
>
126+
输入 Token
127+
</v-btn>
128+
<v-btn
129+
variant="tonal"
130+
prepend-icon="mdi-code-tags"
131+
size="small"
132+
@click="showAlternativeCodeDialog = true"
133+
>
134+
输入替代代码
135+
</v-btn>
136+
</div>
136137

137138

138139
<div class="footer-hint">
@@ -145,7 +146,10 @@
145146
v-model="showGuideDialog"
146147
max-width="600"
147148
>
148-
<FirstTimeGuide @close="showGuideDialog = false" />
149+
<FirstTimeGuide
150+
@close="showGuideDialog = false"
151+
@success="handleGuideSuccess"
152+
/>
149153
</v-dialog>
150154

151155
<v-dialog
@@ -275,6 +279,13 @@ const handleAutoAuthorize = () => {
275279
window.location.href = url
276280
}
277281
282+
const handleGuideSuccess = (tokenData) => {
283+
showGuideDialog.value = false
284+
console.log('渐进式注册成功:', tokenData)
285+
evaluateVisibility()
286+
emit('done')
287+
}
288+
278289
const handleAuthSuccess = (tokenData) => {
279290
showDeviceAuthDialog.value = false
280291
console.log('认证成功:', tokenData)

0 commit comments

Comments
 (0)