Commit e43635dc by 焦子成

1

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