Merge remote-tracking branch 'origin/huangzhenbao-admin'

This commit is contained in:
not-like-juvenile
2026-03-18 17:14:05 +08:00
676 changed files with 25158 additions and 46646 deletions

View File

@@ -58,11 +58,23 @@ export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise<Use
// 用户不存在,创建新用户资料
// 权威字段映射ak_users.auth_id = auth.uid(),业务主键 id 由数据库自动生成
const newUserData = new UTSJSONObject()
newUserData.set('id', userId)
newUserData.set('auth_id', userId)
newUserData.set('email', email)
newUserData.set('username', email.split('@')[0] ?? 'user') // 默认用户名为邮箱前缀
newUserData.set('role', 'consumer')
// 获取注册时带入的 meta_data 角色信息,在这个端(商家端/管理端)找不到则默认为 merchant
let userRole = 'merchant'
const metadata = sessionUser.getJSON('user_metadata') ?? sessionUser.getJSON('raw_user_meta_data')
if (metadata != null) {
const metaRole = metadata.getString('user_role')
if (metaRole != null && metaRole.trim() !== '') {
userRole = metaRole
}
}
newUserData.set('role', userRole)
const insertRes = await supabase.from('ak_users')
.insert(newUserData)
.select('*', {})
@@ -91,7 +103,7 @@ export async function ensureUserProfile(sessionUser: UTSJSONObject): Promise<Use
bio: newUser.getString('bio'),
avatar_url: newUser.getString('avatar_url'),
preferred_language: newUser.getString('preferred_language'),
role: newUser.getString('role') ?? 'consumer',
role: newUser.getString('role') ?? userRole,
created_at: newUser.getString('created_at'),
updated_at: newUser.getString('updated_at')
} as UserProfile

View File

@@ -1,4 +1,4 @@
import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
import type { UserProfile, UserStats } from '@/pages/user/types.uts'
import type { DeviceInfo } from '@/pages/sense/types.uts'
import { SenseDataService, type DeviceParams } from '@/pages/sense/senseDataService.uts'
@@ -17,6 +17,7 @@ export type DeviceState = {
export type State = {
globalNum : number
userProfile ?: UserProfile
authUser ?: UTSJSONObject
isLoggedIn : boolean // 新增字段
deviceState : DeviceState // 新增设备状态
// 如有需要,可增加更多属性
@@ -26,6 +27,7 @@ export type State = {
export const state = reactive({
globalNum: 0,
userProfile: { username: '', email: '' },
authUser: null,
isLoggedIn: false,
deviceState: {
devices: [],
@@ -54,7 +56,8 @@ export async function getCurrentUser() : Promise<UserProfile | null> {
} catch (_) {}
const sessionInfo = supa.getSession()
state.authUser = sessionInfo.user
// 如果没有 session 但 state 中已有用户信息(可能是 admin 这种 mock 账号),不再强制清空
if (sessionInfo.user == null) {
const existingId = state.userProfile?.id
@@ -237,6 +240,7 @@ export function getUserStore() {
return {
getUserId() : string | null {
const sessionInfo = supa.getSession()
state.authUser = sessionInfo.user
return sessionInfo.user?.getString("id") ?? null
},
@@ -245,11 +249,15 @@ export function getUserStore() {
},
getUserRole() : string | null {
const profile = state.userProfile
if (profile != null && profile.role != null) {
return profile.role
}
return null
// Default role logic - can be enhanced based on your needs
const sessionInfo = supa.getSession()
state.authUser = sessionInfo.user
if (sessionInfo.user == null) return null
// You can add role detection logic here
// For now, return a default role
return 'teacher' // or determine from user profile/database
},
},
getProfile() : UserProfile | null {

View File

@@ -129,9 +129,8 @@ class SupabaseService {
return session.user.getString('id')
}
// 后备:尝试从本地存储获取 (兼容旧逻辑)
const userId = uni.getStorageSync('user_id')
return userId ? userId as string : null
// 移除基于 storage 的后备获取,严格只认当前 Tab 独立 session
return null
} catch (e) {
console.error('获取用户ID失败:', e)
return null