feat: Multi-user system with PostgreSQL - WIP temporary save

This commit is contained in:
TIANHE
2026-01-14 05:29:55 +08:00
parent 996e3b38fe
commit 61a5e5e6aa
68 changed files with 91057 additions and 1920 deletions
+32 -16
View File
@@ -1,4 +1,4 @@
import request from '@/utils/request'
import request, { ANALYSIS_TIMEOUT } from '@/utils/request'
const marketApi = {
// Watchlist
@@ -11,6 +11,7 @@ const marketApi = {
CreateAnalysisTask: '/api/analysis/createTask',
GetAnalysisTaskStatus: '/api/analysis/getTaskStatus',
GetAnalysisHistoryList: '/api/analysis/getHistoryList',
DeleteAnalysisTask: '/api/analysis/deleteTask',
ReflectAnalysis: '/api/analysis/reflect',
// AI chat (optional)
ChatMessage: '/api/ai/chat/message',
@@ -34,8 +35,8 @@ const marketApi = {
export function getWatchlist (parameter) {
return request({
url: marketApi.GetWatchlist,
method: 'post',
data: parameter
method: 'get',
params: parameter
})
}
@@ -73,8 +74,10 @@ export function removeWatchlist (parameter) {
export function getWatchlistPrices (parameter) {
return request({
url: marketApi.GetWatchlistPrices,
method: 'post',
data: parameter
method: 'get',
params: {
watchlist: JSON.stringify(parameter.watchlist || [])
}
})
}
@@ -99,8 +102,8 @@ export function chatMessage (parameter) {
export function getChatHistory (parameter) {
return request({
url: marketApi.GetChatHistory,
method: 'post',
data: parameter
method: 'get',
params: parameter
})
}
@@ -126,7 +129,8 @@ export function multiAnalysis (parameter) {
return request({
url: marketApi.MultiAnalysis,
method: 'post',
data: parameter
data: parameter,
timeout: ANALYSIS_TIMEOUT // Extended timeout for AI analysis
})
}
@@ -151,8 +155,8 @@ export function createAnalysisTask (parameter) {
export function getAnalysisTaskStatus (parameter) {
return request({
url: marketApi.GetAnalysisTaskStatus,
method: 'post',
data: parameter
method: 'get',
params: parameter
})
}
@@ -164,6 +168,19 @@ export function getAnalysisTaskStatus (parameter) {
export function getAnalysisHistoryList (parameter) {
return request({
url: marketApi.GetAnalysisHistoryList,
method: 'get',
params: parameter
})
}
/**
* Delete analysis task
* @param parameter { task_id: number }
* @returns {*}
*/
export function deleteAnalysisTask (parameter) {
return request({
url: marketApi.DeleteAnalysisTask,
method: 'post',
data: parameter
})
@@ -200,8 +217,7 @@ export function getConfig () {
export function getMenuFooterConfig () {
return request({
url: marketApi.GetMenuFooterConfig,
method: 'post',
data: {}
method: 'get'
})
}
@@ -224,8 +240,8 @@ export function getMarketTypes () {
export function searchSymbols (parameter) {
return request({
url: marketApi.SearchSymbols,
method: 'post',
data: parameter
method: 'get',
params: parameter
})
}
@@ -237,7 +253,7 @@ export function searchSymbols (parameter) {
export function getHotSymbols (parameter) {
return request({
url: marketApi.GetHotSymbols,
method: 'post',
data: parameter
method: 'get',
params: parameter
})
}
+126
View File
@@ -0,0 +1,126 @@
/**
* User Management API
*/
import request from '@/utils/request'
// ==================== Admin APIs ====================
/**
* Get user list (admin only)
* @param {Object} params - { page, page_size }
*/
export function getUserList (params) {
return request({
url: '/api/users/list',
method: 'get',
params
})
}
/**
* Get user detail (admin only)
* @param {Number} id - User ID
*/
export function getUserDetail (id) {
return request({
url: '/api/users/detail',
method: 'get',
params: { id }
})
}
/**
* Create new user (admin only)
* @param {Object} data - { username, password, email, nickname, role }
*/
export function createUser (data) {
return request({
url: '/api/users/create',
method: 'post',
data
})
}
/**
* Update user (admin only)
* @param {Number} id - User ID
* @param {Object} data - { email, nickname, role, status }
*/
export function updateUser (id, data) {
return request({
url: '/api/users/update',
method: 'put',
params: { id },
data
})
}
/**
* Delete user (admin only)
* @param {Number} id - User ID
*/
export function deleteUser (id) {
return request({
url: '/api/users/delete',
method: 'delete',
params: { id }
})
}
/**
* Reset user password (admin only)
* @param {Object} data - { user_id, new_password }
*/
export function resetUserPassword (data) {
return request({
url: '/api/users/reset-password',
method: 'post',
data
})
}
/**
* Get available roles
*/
export function getRoles () {
return request({
url: '/api/users/roles',
method: 'get'
})
}
// ==================== Self-Service APIs ====================
/**
* Get current user profile
*/
export function getProfile () {
return request({
url: '/api/users/profile',
method: 'get'
})
}
/**
* Update current user profile
* @param {Object} data - { nickname, email, avatar }
*/
export function updateProfile (data) {
return request({
url: '/api/users/profile/update',
method: 'put',
data
})
}
/**
* Change current user password
* @param {Object} data - { old_password, new_password }
*/
export function changePassword (data) {
return request({
url: '/api/users/change-password',
method: 'post',
data
})
}