修改了主题切换的问题,但登录故障问题还有残留
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
import { View, Text, Input, Button } from '@tarojs/components'
|
||||
import Taro from '@tarojs/taro'
|
||||
import { useState, useEffect } from 'react'
|
||||
import './index.scss'
|
||||
import {
|
||||
listAllUsers,
|
||||
switchUser,
|
||||
deleteUser,
|
||||
createUser,
|
||||
getUserInfo,
|
||||
verifyAdminPassword
|
||||
} from '../../utils/store'
|
||||
import ThemeToggle from '../../components/ThemeToggle'
|
||||
import { useThemeContext } from '../../context/ThemeContext'
|
||||
|
||||
export default function UserDatabasePage() {
|
||||
const { theme } = useThemeContext()
|
||||
const [isUnlocked, setIsUnlocked] = useState(false)
|
||||
const [password, setPassword] = useState('')
|
||||
const [pwdError, setPwdError] = useState(false)
|
||||
const [users, setUsers] = useState<any[]>([])
|
||||
const [showAdd, setShowAdd] = useState(false)
|
||||
const [newNick, setNewNick] = useState('')
|
||||
|
||||
const refresh = () => setUsers(listAllUsers())
|
||||
|
||||
useEffect(() => {
|
||||
refresh()
|
||||
}, [])
|
||||
|
||||
const handleUnlock = () => {
|
||||
if (verifyAdminPassword(password)) {
|
||||
setIsUnlocked(true)
|
||||
setPwdError(false)
|
||||
refresh()
|
||||
} else {
|
||||
setPwdError(true)
|
||||
}
|
||||
}
|
||||
|
||||
const handleSwitch = (openid: string) => {
|
||||
if (switchUser(openid)) {
|
||||
Taro.showToast({ title: '切换成功', icon: 'success' })
|
||||
refresh()
|
||||
} else {
|
||||
Taro.showToast({ title: '切换失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
const handleDelete = (openid: string) => {
|
||||
Taro.showModal({
|
||||
title: '确认删除',
|
||||
content: '删除后将清空该用户所有数据,无法恢复',
|
||||
confirmColor: '#e64340',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
deleteUser(openid)
|
||||
refresh()
|
||||
Taro.showToast({ title: '已删除', icon: 'success' })
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleCreate = () => {
|
||||
if (!newNick.trim()) {
|
||||
Taro.showToast({ title: '请输入昵称', icon: 'none' })
|
||||
return
|
||||
}
|
||||
createUser(newNick.trim())
|
||||
setShowAdd(false)
|
||||
setNewNick('')
|
||||
refresh()
|
||||
Taro.showToast({ title: '创建成功', icon: 'success' })
|
||||
}
|
||||
|
||||
const activeOpenid = getUserInfo()?.openid || ''
|
||||
|
||||
if (!isUnlocked) {
|
||||
return (
|
||||
<View className={`theme-${theme}`}>
|
||||
<View className='udb-page'>
|
||||
<ThemeToggle />
|
||||
<View className='udb-lock-card dashed-card mt-20'>
|
||||
<View className='star-badge' />
|
||||
<Text className='udb-lock-icon'>🔐</Text>
|
||||
<Text className='udb-lock-title'>管理员验证</Text>
|
||||
<Text className='udb-lock-desc'>请输入密码以访问用户数据库</Text>
|
||||
<Input
|
||||
className='udb-password-input'
|
||||
type='text'
|
||||
password
|
||||
placeholder='输入密码'
|
||||
value={password}
|
||||
onInput={(e: any) => setPassword(e.detail.value)}
|
||||
/>
|
||||
{pwdError && (
|
||||
<Text className='udb-error'>密码错误,请重试</Text>
|
||||
)}
|
||||
<View className='btn-gradient udb-btn' onClick={handleUnlock}>
|
||||
<Text>进入数据库</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<View className={`theme-${theme}`}>
|
||||
<View className='udb-page'>
|
||||
<ThemeToggle />
|
||||
|
||||
<View className='page-header dashed-card mt-20'>
|
||||
<View className='star-badge' />
|
||||
<Text className='page-title'>本地用户数据库</Text>
|
||||
</View>
|
||||
|
||||
<View className='udb-toolbar'>
|
||||
<View className='btn-gradient udb-add-btn' onClick={() => setShowAdd(true)}>
|
||||
<Text>+ 新建账号</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View className='udb-table'>
|
||||
<View className='udb-row udb-header'>
|
||||
<Text className='udb-col col-nick'>昵称</Text>
|
||||
<Text className='udb-col col-id'>ID</Text>
|
||||
<Text className='udb-col col-stats'>设计/订单</Text>
|
||||
<Text className='udb-col col-action'>操作</Text>
|
||||
</View>
|
||||
{users.map((u) => (
|
||||
<View key={u.openid} className={`udb-row ${u.openid === activeOpenid ? 'active' : ''}`}>
|
||||
<Text className='udb-col col-nick'>{u.nickName}</Text>
|
||||
<Text className='udb-col col-id'>{u.openid}</Text>
|
||||
<Text className='udb-col col-stats'>{u.designCount} / {u.orderCount}</Text>
|
||||
<View className='udb-col col-action'>
|
||||
{u.openid !== activeOpenid && (
|
||||
<View className='udb-link' onClick={() => handleSwitch(u.openid)}>
|
||||
<Text>切换</Text>
|
||||
</View>
|
||||
)}
|
||||
{u.openid === activeOpenid && (
|
||||
<Text className='udb-current'>当前</Text>
|
||||
)}
|
||||
<View className='udb-link udb-danger' onClick={() => handleDelete(u.openid)}>
|
||||
<Text>删除</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
))}
|
||||
{users.length === 0 && (
|
||||
<View className='udb-empty'>
|
||||
<Text>暂无用户数据</Text>
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
|
||||
{/* 新建账号弹窗 */}
|
||||
{showAdd && (
|
||||
<View className='modal-overlay'>
|
||||
<View className='udb-add-card dashed-card'>
|
||||
<View className='star-badge' />
|
||||
<Text className='udb-add-title'>新建本地账号</Text>
|
||||
<Input
|
||||
className='udb-add-input'
|
||||
type='text'
|
||||
placeholder='请输入昵称'
|
||||
value={newNick}
|
||||
onInput={(e: any) => setNewNick(e.detail.value)}
|
||||
/>
|
||||
<View className='udb-add-actions'>
|
||||
<View className='btn-outline' onClick={() => setShowAdd(false)}>
|
||||
<Text>取消</Text>
|
||||
</View>
|
||||
<View className='btn-gradient' onClick={handleCreate}>
|
||||
<Text>创建</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user