Commit e43635dc by 焦子成

1

parent d03986cd
......@@ -31,6 +31,8 @@ const config = {
fileUploadDetail: `${domain}/uploadBatch/fileUploadDetail`,
queryFileAll: `${domain}/uploadBatch/queryFileAll`,
detailInfo: `${domain}/uploadDetail/detailInfo`,
updateInfo: `${domain}/user/updateInfo`,
getInfo: `${domain}/user/getInfo`,
};
export default config;
......@@ -112,11 +112,11 @@ export const useAuthStore = defineStore('auth', () => {
loadUsersFromStorage()
}
console.log('当前用户列表:', users.value.map(u => u.userName))
// console.log('当前用户列表:', users.value.map(u => u.userName))
// 查找用户
let user = users.value.find(u => u.userName === userName)
console.log('--->查找用户:', user)
// console.log('--->查找用户:', user)
if (!user) {
console.log('未找到用户:', userName)
// user.value.userName = userName
......@@ -154,7 +154,9 @@ console.log('--->查找用户:', user)
// 设置当前用户
const setCurrentUser = (userData) => {
console.log('setCurrentUser userData->', userData)
user.value = userData
console.log('setCurrentUser user.value->', user.value)
isAuthenticated.value = true
// 保存到本地存储
......@@ -164,8 +166,11 @@ console.log('--->查找用户:', user)
// 用户登出
const logout = () => {
user.value = null
users.value = []
isAuthenticated.value = false
localStorage.removeItem('vue_downloader_current_user')
localStorage.removeItem('vue-downloader-settings')
localStorage.removeItem('vue_downloader_users')
}
// 更新用户设置
......@@ -246,12 +251,13 @@ console.log('--->查找用户:', user)
// 清除用户下载历史
const clearDownloadHistory = () => {
if (!user.value) return
// if (!user.value) return
try {
const allHistory = JSON.parse(localStorage.getItem('vue_downloader_history') || '[]')
const filteredHistory = allHistory.filter(history => history.userId !== user.value.id)
localStorage.setItem('vue_downloader_history', JSON.stringify(filteredHistory))
// const allHistory = JSON.parse(localStorage.getItem('vue_downloader_history') || '[]')
// const filteredHistory = allHistory.filter(history => history.userId !== user.value.id)
// localStorage.setItem('vue_downloader_history', JSON.stringify(filteredHistory))
localStorage.setItem('vue_downloader_history', JSON.stringify([]))
} catch (error) {
console.error('清除下载历史失败:', error)
}
......@@ -259,58 +265,67 @@ console.log('--->查找用户:', user)
// 初始化:从本地存储加载数据
const initialize = () => {
console.log('Auth store 初始化开始...')
// console.log('Auth store 初始化开始...')
// 清除旧的用户数据,重新创建默认管理员账号
console.log('清除旧的用户数据...')
// console.log('清除旧的用户数据...')
localStorage.removeItem('vue_downloader_users')
localStorage.removeItem('vue_downloader_current_user')
loadUsersFromStorage()
// loadUsersFromStorage()
// 如果没有用户,创建默认管理员账号
if (users.value.length === 0) {
console.log('创建默认管理员账号...')
const adminPassword = '123456'
const adminUser = {
id: 'admin',
userName: 'admin',
password: btoa(adminPassword),
email: '',
createdAt: new Date().toISOString(),
lastLoginAt: null,
settings: {
maxConcurrentDownloads: 3,
enableNotifications: true,
fileNamePrefix: ''
}
}
users.value.push(adminUser)
saveUsersToStorage()
console.log('默认管理员账号创建完成')
console.log('管理员密码:', adminPassword)
console.log('管理员密码编码后:', btoa(adminPassword))
}
console.log('当前用户列表:', users.value.map(u => u.userName))
// if (users.value.length === 0) {
// console.log('创建默认管理员账号...')
// const adminPassword = '123456'
// const adminUser = {
// id: 'admin',
// userName: 'admin',
// password: btoa(adminPassword),
// email: '',
// createdAt: new Date().toISOString(),
// lastLoginAt: null,
// settings: {
// maxConcurrentDownloads: 3,
// enableNotifications: true,
// fileNamePrefix: ''
// }
// }
// users.value.push(adminUser)
// saveUsersToStorage()
// console.log('默认管理员账号创建完成')
// console.log('管理员密码:', adminPassword)
// console.log('管理员密码编码后:', btoa(adminPassword))
// }
// console.log('当前用户列表:', users.value.map(u => u.userName))
// 尝试恢复当前用户会话
try {
const storedUser = localStorage.getItem('vue_downloader_current_user')
if (storedUser) {
const userData = JSON.parse(storedUser)
// 验证用户是否仍然存在
const existingUser = users.value.find(u => u.id === userData.id)
if (existingUser) {
setCurrentUser(existingUser)
console.log('用户会话已恢复:', existingUser.userName)
}
}
} catch (error) {
console.error('恢复用户会话失败:', error)
}
console.log('Auth store 初始化完成')
// try {
// const storedUser = localStorage.getItem('vue_downloader_current_user')
// if (storedUser) {
// const userData = JSON.parse(storedUser)
// // 验证用户是否仍然存在
// const existingUser = users.value.find(u => u.id === userData.id)
// if (existingUser) {
// setCurrentUser(existingUser)
// console.log('用户会话已恢复:', existingUser.userName)
// }
// }
// } catch (error) {
// console.error('恢复用户会话失败:', error)
// }
// console.log('Auth store 初始化完成')
}
// 新加-保存用户信息
function saveUserInfo(userInfo) {
// console.log('userInfo->',userInfo)
// users.value.push(userInfo)
// console.log('users->',users.value)
setCurrentUser(userInfo)
// saveUsersToStorage()
}
// 计算属性
......@@ -337,6 +352,7 @@ console.log('--->查找用户:', user)
validatePassword,
isUsernameExists,
initialize,
saveUserInfo,
// 计算属性
userCount
......
......@@ -30,7 +30,9 @@ export const useDownloadStore = defineStore('download', () => {
const loadFromStorage = () => {
try {
// 加载用户设置
const userSettings = authStore.getUserSettings()
// const userSettings = authStore.getUserSettings()
const userSettings = JSON.parse(sessionStorage.getItem('userInfo'))?.settings || {}
console.log('download.js userSettings-->',userSettings)
maxConcurrentDownloads.value = userSettings.maxConcurrentDownloads || 3
customSubFolder.value = userSettings.fileNamePrefix || ''
enableNotifications.value = userSettings.enableNotifications !== false
......@@ -635,6 +637,7 @@ export const useDownloadStore = defineStore('download', () => {
// 清除所有任务
const clearAll = () => {
downloads.value = []
// excelFiles.value = []
saveToStorage()
}
......
......@@ -50,6 +50,7 @@
<div class="header-actions">
<el-select v-model="statusFilter" placeholder="状态筛选" size="small" style="width: 120px;" @change="statusChange">
<el-option label="全部" value="all" />
<el-option label="等待中" value="pending" />
<el-option label="已完成" value="completed" />
<el-option label="失败" value="error" />
<el-option label="暂停" value="paused" />
......@@ -246,9 +247,11 @@ function laodFileAll(){
}
const statusFilterMap = {
'all': '',
'pending': 0,
'downloading': 1,
'paused': 2,
'completed': 3,
'error': 4,
'paused': 2
'error': 4
}
// 加载历史数据
const loadHistory = () => {
......@@ -268,7 +271,6 @@ const loadHistory = () => {
list.push({
"id": element.detailId,
"fileName": element.fileName,
"fileNamePrefix": "",
"excelFileName": element.uploadName,
"url": element.fileUrl,
"status": statusMap[element.fileStatus],
......
......@@ -219,6 +219,7 @@ const switchToLogin = () => {
// 切换到注册模式
const switchToRegister = () => {
isLoginMode.value = false
clearMessages()
resetForms()
......@@ -260,22 +261,43 @@ function handleLogin() {
loading.value = false
if (res.code === 200) {
sessionStorage.setItem("token", res.data)
let user = {
"id": res.data,
"username": loginForm.userName,
"password": loginForm.password,
"email": "",
"createdAt": new Date(),
"lastLoginAt": new Date(),
"settings": {
"maxConcurrentDownloads": 3,
"enableNotifications": true,
"fileNamePrefix": ""
}
}
authStore.setCurrentUser(user)
sessionStorage.setItem("userName", loginForm.userName)
loadUserInfo()
} else {
errorMessage.value = res.message
ElMessage.error(res.message)
}
})
}
function loadUserInfo() {
http.post(config.getInfo).then(res => {
if (res.code === 200) {
let userObj = {
id: res.data.userName,
username: res.data.userName,
password: loginForm.password,
email: res.data.email || '',
createdAt: res.data.createTime,
lastLoginAt: res.data.lastLoginTime,
settings: {
maxConcurrentDownloads: res.data.maxThread || 3,
enableNotifications: res.data.notifyStatus == 1 ? true : false,
fileNamePrefix: res.data.filePrefix,
}
}
console.log('登录用户信息:', userObj)
console.log('登录用户信息1:', userObj.settings)
sessionStorage.setItem('userInfo', JSON.stringify(userObj))
// authStore.saveUserInfo(userObj)
// authStore.users.value.push(user)
// authStore.saveUsersToStorage()
// authStore.setCurrentUser(user)
// sessionStorage.setItem("userName", loginForm.userName)
setTimeout(() => {
router.push('/downloader')
}, 1000);
} else {
errorMessage.value = res.message
ElMessage.error(res.message)
......@@ -377,8 +399,10 @@ function handleRegister() {
loading.value = false
if (res.code === 200) {
sessionStorage.setItem("token", res.data)
switchToLogin()
successMessage.value = '注册成功!请登录'
loginForm.userName = registerForm.userName
isLoginMode.value = true
// switchToLogin()
} else {
errorMessage.value = res.message
ElMessage.error(res.message)
......
......@@ -3,7 +3,9 @@
<!-- 头部 -->
<header class="header">
<div class="logo">
<el-icon><Setting /></el-icon>
<el-icon>
<Setting />
</el-icon>
个人设置
</div>
<el-button @click="goBack" type="primary" size="small">
......@@ -43,34 +45,23 @@
<template #header>
<div class="card-header">
<span>下载设置</span>
<el-button type="primary" @click="saveSettings">保存</el-button>
</div>
</template>
<el-form :model="downloadSettings" label-width="120px">
<el-form-item label="最大并发数">
<el-input-number
v-model="downloadSettings.maxConcurrentDownloads"
:min="1"
:max="10"
@change="saveSettings"
/>
<el-input-number v-model="downloadSettings.maxConcurrentDownloads" :min="1" :max="10" />
<span class="form-tip">同时下载的最大文件数量</span>
</el-form-item>
<el-form-item label="文件名前缀">
<el-input
v-model="downloadSettings.fileNamePrefix"
placeholder="例如: vue-downloader"
@input="saveSettings"
/>
<el-input v-model="downloadSettings.fileNamePrefix" placeholder="例如: vue-downloader" />
<span class="form-tip">为所有下载文件添加前缀</span>
</el-form-item>
<el-form-item label="下载通知">
<el-switch
v-model="downloadSettings.enableNotifications"
@change="saveSettings"
/>
<el-switch v-model="downloadSettings.enableNotifications" />
<span class="form-tip">下载完成后显示通知</span>
</el-form-item>
</el-form>
......@@ -138,27 +129,66 @@ const downloadSettings = reactive({
// 初始化数据
const initializeData = () => {
const user = authStore.user
// const user = authStore.user
const user = JSON.parse(sessionStorage.getItem('userInfo'))
console.log('Settings.vue initializeData user-->', user)
if (user) {
userInfo.userName = user.userName
userInfo.userName = user.username
userInfo.email = user.email || '未设置'
userInfo.createdAt = new Date(user.createdAt).toLocaleString()
userInfo.lastLoginAt = user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleString() : '从未登录'
// userInfo.createdAt = new Date(user.createdAt).toLocaleString()
// userInfo.lastLoginAt = user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleString() : '从未登录'
userInfo.createdAt = user.createdAt
userInfo.lastLoginAt = user.lastLoginAt
// 加载用户设置
const settings = authStore.getUserSettings()
// const settings = authStore.getUserSettings()
const settings = user.settings
Object.assign(downloadSettings, settings)
}
}
// 保存设置
const saveSettings = () => {
try {
authStore.updateUserSettings(downloadSettings)
// sessionStorage.setItem('userInfo', JSON.stringify({}))
http.post(config.updateInfo, {
maxThread: downloadSettings.maxConcurrentDownloads,
notifyStatus: downloadSettings.enableNotifications ? 1 : 0,
filePrefix: downloadSettings.fileNamePrefix
}).then(res => {
if (res.code === 200) {
ElMessage.success('设置已保存')
} catch (error) {
loadUserInfo()
} else {
ElMessage.error('保存设置失败')
}
})
// try {
// authStore.updateUserSettings(downloadSettings)
// } catch (error) {
// ElMessage.error('保存设置失败')
// }
}
function loadUserInfo() {
http.post(config.getInfo).then(res => {
if (res.code === 200) {
let userObj = {
id: res.data.userName,
username: res.data.userName,
password: '',
email: res.data.email || '',
createdAt: res.data.createTime,
lastLoginAt: res.data.lastLoginTime,
settings: {
maxConcurrentDownloads: res.data.maxThread || 3,
enableNotifications: res.data.notifyStatus == 1 ? true : false,
fileNamePrefix: res.data.filePrefix,
}
}
sessionStorage.setItem('userInfo', JSON.stringify(userObj))
} else {
ElMessage.error(res.message)
}
})
}
// 清除历史记录
......@@ -192,7 +222,7 @@ const clearHistory = async () => {
const deleteUserData = async () => {
try {
await ElMessageBox.confirm(
'确定要删除当前用户的所有数据吗?包括设置、历史记录等,此操作不可恢复。',
'确定要删除当前用户的所有数据吗?此操作不可恢复。',
'确认删除',
{
confirmButtonText: '确定',
......@@ -213,7 +243,7 @@ const deleteUserData = async () => {
authStore.updateUserSettings(defaultSettings)
Object.assign(downloadSettings, defaultSettings)
ElMessage.success('用户数据已删除')
ElMessage.success('数据已删除')
http.post(config.uploadDetailDeleteAll, {
type: 2
}).then(res => {
......@@ -234,7 +264,7 @@ const goBack = () => {
// 组件挂载时初始化
onMounted(() => {
initializeData()
userInfo.userName = sessionStorage.getItem("userName") || ''
// userInfo.userName = sessionStorage.getItem("userName") || ''
})
</script>
......@@ -276,6 +306,8 @@ onMounted(() => {
font-size: 16px;
font-weight: 600;
color: #333;
display: flex;
justify-content: space-between;
}
.form-tip {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment