Browse Source

增添device状态管理

lihuilin/feature-20251024095243-我的
Ethereal 4 weeks ago
parent
commit
6772cfb676
  1. 42
      components/login-prompt.vue
  2. 2
      pages/deepMate/deepMate.vue
  3. 9
      pages/start/startup/startup.vue
  4. 1
      stores/index.js
  5. 44
      stores/modules/deviceInfo.js
  6. 2
      stores/modules/userInfo.js
  7. 23
      utils/http.js

42
components/login-prompt.vue

@ -17,10 +17,12 @@
<script setup> <script setup>
import { ref, nextTick, onMounted } from "vue"; import { ref, nextTick, onMounted } from "vue";
import { useUserStore } from "../stores/modules/userInfo"; import { useUserStore } from "../stores/modules/userInfo";
import {LoginApi} from "../api/start/login"
const deviceId = ref('')
import { useDeviceStore } from "../stores/modules/deviceInfo";
import { LoginApi } from "../api/start/login";
const deviceId = ref("");
const userStore = useUserStore(); const userStore = useUserStore();
const deviceStore = useDeviceStore();
// //
onMounted(() => { onMounted(() => {
if (!userStore.userInfo) { if (!userStore.userInfo) {
@ -68,30 +70,22 @@ const goRegister = () => {
}; };
// 访 // 访
const continueAsVisitor = async() => {
// ID
uni.getSystemInfo({
success: (res) => {
// console.log("",res.deviceId);
deviceId.value = res.deviceId;
},
});
const continueAsVisitor = async () => {
// 访 // 访
const res = await LoginApi({ const res = await LoginApi({
"loginType":"VISITOR", //EMAIL,PHONE,DCCODE,APPLE,GOOGLE,VISITOR
"account":"" , // //dccode
"verifyCode":"", //
"password":"", //
"useCode":"", //使 true/false
"idToken":"", //idToken
"deviceId":deviceId.value
})
// hide();
loginType: "VISITOR", //EMAIL,PHONE,DCCODE,APPLE,GOOGLE,VISITOR
account: "", // //dccode
verifyCode: "", //
password: "", //
useCode: "", //使 true/false
idToken: "", //idToken
deviceId: deviceStore.deviceInfo.deviceId,
});
if (res.code === 200) {
userStore.setUserInfo(res.data);
hide();
}
}; };
// 使 // 使

2
pages/deepMate/deepMate.vue

@ -640,7 +640,7 @@ const simulateBotResponse = async (userMessage) => {
scrollToBottom(); scrollToBottom();
// //
const baseDelay = 165; //
const baseDelay = 5; //
const slowPunct = /[。!?!?;;]/; // const slowPunct = /[。!?!?;;]/; //
const midPunct = /[,、,::]/; // const midPunct = /[,、,::]/; //
const delay = slowPunct.test(ch) const delay = slowPunct.test(ch)

9
pages/start/startup/startup.vue

@ -12,8 +12,17 @@
<script setup> <script setup>
import { onShow } from "@dcloudio/uni-app"; import { onShow } from "@dcloudio/uni-app";
import { useUserStore } from "../../../stores/modules/userInfo"; import { useUserStore } from "../../../stores/modules/userInfo";
import { useDeviceStore } from "../../../stores/modules/deviceInfo";
onShow(() => { onShow(() => {
const deviceInfo = useDeviceStore();
// ID
uni.getSystemInfo({
success: (res) => {
deviceInfo.setDeviceInfo(res)
},
});
setTimeout(() => { setTimeout(() => {
const userStore = useUserStore(); const userStore = useUserStore();
if (!userStore.userInfo) if (!userStore.userInfo)

1
stores/index.js

@ -8,5 +8,6 @@ pinia.use(persist)
// 导入所有模块 // 导入所有模块
export * from './modules/userInfo' export * from './modules/userInfo'
export * from './modules/deviceInfo'
// 默认导出,给 main.js 使用 // 默认导出,给 main.js 使用
export default pinia export default pinia

44
stores/modules/deviceInfo.js

@ -0,0 +1,44 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
// 定义 Store
export const useDeviceStore = defineStore(
'device',
() => {
// 会员信息
const deviceInfo = ref()
// 保存会员信息,登录时使用
const setDeviceInfo = (val) => {
deviceInfo.value = val
}
// 清理会员信息,退出时使用
const clearDeviceInfo = () => {
deviceInfo.value = undefined
}
// 记得 return
return {
deviceInfo,
setDeviceInfo,
clearDeviceInfo,
}
},
// TODO: 持久化
{
// 网页端持久化
// persist: true,
// 小程序端持久化
persist: {
storage: {
getItem(key) {
return uni.getStorageSync(key)
},
setItem(key, value) {
uni.setStorageSync(key, value)
},
},
},
},
)

2
stores/modules/userInfo.js

@ -3,7 +3,7 @@ import { ref } from 'vue'
// 定义 Store // 定义 Store
export const useUserStore = defineStore( export const useUserStore = defineStore(
'member',
'user',
() => { () => {
// 会员信息 // 会员信息
const userInfo = ref() const userInfo = ref()

23
utils/http.js

@ -1,4 +1,5 @@
import { useUserStore } from "../stores/modules/userInfo" import { useUserStore } from "../stores/modules/userInfo"
import { useDeviceStore } from "../stores/modules/deviceInfo"
const baseURL = "https://hwjb.homilychart.com/testApi" const baseURL = "https://hwjb.homilychart.com/testApi"
@ -26,6 +27,9 @@ const httpInterceptor = {
//3 添加小程序端请求头 //3 添加小程序端请求头
const sys = uni.getSystemInfoSync(); const sys = uni.getSystemInfoSync();
// 为对齐后端文档示例,client 固定为 ios(如需按平台设置再改回) // 为对齐后端文档示例,client 固定为 ios(如需按平台设置再改回)
const deviceInfo =useDeviceStore()
const client = 'ios'; const client = 'ios';
options.header = { options.header = {
...options.header, ...options.header,
@ -34,15 +38,16 @@ const httpInterceptor = {
'content-type': 'application/json', 'content-type': 'application/json',
'contentType': 'application/json', 'contentType': 'application/json',
'version': '1', 'version': '1',
'client': client
'client': client,
'deviceId': deviceInfo.deviceId
} }
//4 添加token,优先用store,没有则回退到body中的token,保持与Apifox一致 //4 添加token,优先用store,没有则回退到body中的token,保持与Apifox一致
const memberStore = useUserStore() const memberStore = useUserStore()
const token = memberStore.userInfo?.token || options.data?.token
// const token = 'dccec0b65a94f498b8183a17589ab16e'
if (token) {
options.header.token = token
}
// const token = memberStore.userInfo?.token || options.data?.token
const token = 'dccec0b65a94f498b8183a17589ab16e'
if (token) {
options.header.token = token
}
// 避免误用 Authorization 头,后端要求的是 token 头 // 避免误用 Authorization 头,后端要求的是 token 头
// if (options.header.Authorization) delete options.header.Authorization // if (options.header.Authorization) delete options.header.Authorization
return options return options
@ -59,6 +64,12 @@ export const http = (options) => {
// 1.请求成功 // 1.请求成功
success: (result) => { success: (result) => {
if (result.statusCode >= 200 && result.statusCode < 300) { if (result.statusCode >= 200 && result.statusCode < 300) {
if (result.data.code === 401) {
uni.showToast({
title: '请先登录',
icon: 'none'
})
}
resolve(result.data) resolve(result.data)
} else if (result.statusCode === 401) { } else if (result.statusCode === 401) {
// 清除登录信息 // 清除登录信息

Loading…
Cancel
Save