初始提交:彩票推测系统前端代码
This commit is contained in:
891
src/api/index.js
Normal file
891
src/api/index.js
Normal file
@@ -0,0 +1,891 @@
|
||||
import axios from 'axios'
|
||||
|
||||
// 创建axios实例
|
||||
const api = axios.create({
|
||||
// baseURL: 'http://localhost:8123/api',
|
||||
baseURL: 'https://www.yicaishuzhi.com/api',
|
||||
timeout: 300000, // 5分钟超时时间(300秒)
|
||||
withCredentials: true, // 关键:支持跨域携带cookie和session
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
|
||||
// 防止重复提示的标志
|
||||
let isKickedOut = false
|
||||
|
||||
// 响应拦截器
|
||||
api.interceptors.response.use(
|
||||
response => {
|
||||
const data = response.data
|
||||
|
||||
// 检查是否是session过期的响应
|
||||
if (data && data.success === false) {
|
||||
// 可以根据后端返回的错误码或消息判断是否是session过期
|
||||
const message = data.message || ''
|
||||
|
||||
// 专门处理账号在其他设备登录的情况
|
||||
if (message.includes('其他设备登录') || message.includes('当前会话已失效')) {
|
||||
if (!isKickedOut) {
|
||||
isKickedOut = true
|
||||
console.log('检测到账号在其他设备登录,正在踢出当前会话...')
|
||||
|
||||
// 动态导入 Element Plus 的消息组件
|
||||
import('element-plus').then(({ ElMessage }) => {
|
||||
ElMessage.warning({
|
||||
message: '您的账号已在其他设备登录,请重新登录',
|
||||
duration: 3000,
|
||||
showClose: true
|
||||
})
|
||||
})
|
||||
|
||||
// 检查当前路径是否为后台管理路径
|
||||
if (window.location.pathname.startsWith('/cpzsadmin') && window.location.pathname !== '/cpzsadmin/login') {
|
||||
// 后台管理会话
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.adminLogout(true) // 标记为被踢出
|
||||
setTimeout(() => {
|
||||
window.location.href = '/cpzsadmin/login'
|
||||
isKickedOut = false // 重置标志
|
||||
}, 1500)
|
||||
})
|
||||
} else {
|
||||
// 前台用户会话
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.logout(true) // 标记为被踢出
|
||||
setTimeout(() => {
|
||||
isKickedOut = false // 重置标志
|
||||
}, 3000)
|
||||
})
|
||||
}
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// 处理其他登录/权限相关的错误
|
||||
if (message.includes('未登录') || message.includes('登录过期') || message.includes('无权限') || message.includes('Invalid session')) {
|
||||
console.log('检测到session过期,清除本地登录状态')
|
||||
|
||||
// 检查当前路径是否为后台管理路径
|
||||
if (window.location.pathname.startsWith('/cpzsadmin') && window.location.pathname !== '/cpzsadmin/login') {
|
||||
console.log('后台管理会话过期,正在注销...')
|
||||
// 动态导入userStore避免循环依赖
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.adminLogout()
|
||||
window.location.href = '/cpzsadmin/login'
|
||||
})
|
||||
} else {
|
||||
// 前台用户会话过期处理
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.logout()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return data
|
||||
},
|
||||
error => {
|
||||
console.error('API请求错误:', error)
|
||||
|
||||
// 检查HTTP状态码,401/403通常表示未授权/session过期
|
||||
if (error.response && (error.response.status === 401 || error.response.status === 403)) {
|
||||
console.log('检测到401/403错误,可能是session过期或无权限')
|
||||
|
||||
// 检查当前路径是否为后台管理路径
|
||||
if (window.location.pathname.startsWith('/cpzsadmin') && window.location.pathname !== '/cpzsadmin/login') {
|
||||
console.log('后台管理会话过期,正在注销...')
|
||||
// 动态导入userStore避免循环依赖
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.adminLogout()
|
||||
window.location.href = '/cpzsadmin/login'
|
||||
})
|
||||
} else {
|
||||
// 前台用户会话过期处理
|
||||
import('../store/user.js').then(({ userStore }) => {
|
||||
userStore.logout()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// API接口方法
|
||||
export const lotteryApi = {
|
||||
// 用户登录
|
||||
userLogin(userAccount, userPassword) {
|
||||
return api.post('/user/login', {
|
||||
userAccount,
|
||||
userPassword
|
||||
})
|
||||
},
|
||||
|
||||
// 用户注册
|
||||
userRegister(userAccount, userPassword, checkPassword, userName) {
|
||||
return api.post('/user/register', {
|
||||
userAccount,
|
||||
userPassword,
|
||||
checkPassword,
|
||||
userName
|
||||
})
|
||||
},
|
||||
|
||||
// 用户注销
|
||||
userLogout() {
|
||||
return api.post('/user/logout')
|
||||
},
|
||||
|
||||
// 获取当前登录用户信息
|
||||
getLoginUser() {
|
||||
return api.get('/user/get/login')
|
||||
},
|
||||
|
||||
// 获取用户统计信息(总用户数和VIP用户数)
|
||||
getUserCount() {
|
||||
return api.get('/user/count')
|
||||
},
|
||||
|
||||
// 检查当前用户VIP是否过期
|
||||
checkVipExpire() {
|
||||
return api.get('/user/check-vip-expire')
|
||||
},
|
||||
|
||||
// 获取用户推测记录(支持分页)
|
||||
getPredictRecordsByUserId(userId, page = 1) {
|
||||
return api.get(`/ball-analysis/predict-records/${userId}?page=${page}`)
|
||||
},
|
||||
|
||||
// 按条件查询推测记录(支持分页和状态筛选)
|
||||
queryPredictRecords(userId, predictStatus, page = 1, pageSize = 10) {
|
||||
return api.post('/data-analysis/query-predict-records', {
|
||||
userId: userId,
|
||||
predictStatus,
|
||||
current: page,
|
||||
pageSize
|
||||
})
|
||||
},
|
||||
|
||||
// 获取近期开奖信息
|
||||
getRecentDraws(limit = 6) {
|
||||
return api.get(`/ball-analysis/recent-draws?limit=${limit}`)
|
||||
},
|
||||
|
||||
// 获取最新100条开奖信息(表相查询)
|
||||
getRecent100Draws() {
|
||||
return api.get('/ball-analysis/recent-100-draws')
|
||||
},
|
||||
|
||||
// 按日期范围查询开奖信息
|
||||
queryDraws(startDate, endDate) {
|
||||
const params = new URLSearchParams()
|
||||
if (startDate) params.append('startDate', startDate)
|
||||
if (endDate) params.append('endDate', endDate)
|
||||
return api.get(`/ball-analysis/query-draws?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 根据期号查询开奖信息
|
||||
getDrawById(drawId) {
|
||||
return api.get(`/ball-analysis/draw/${drawId}`)
|
||||
},
|
||||
|
||||
// 创建推测记录
|
||||
createPredictRecord(userId, drawId, drawDate, redBalls, blueBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('userId', userId)
|
||||
params.append('drawId', drawId)
|
||||
params.append('drawDate', drawDate)
|
||||
params.append('redBalls', redBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
|
||||
return api.post('/ball-analysis/create-predict', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 首球算法
|
||||
analyzeBalls(userId, level, redBalls, blueBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('userId', userId)
|
||||
params.append('level', level)
|
||||
params.append('redBalls', redBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
|
||||
return api.post('/ball-analysis/analyze', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 精推版双色球第一步分析
|
||||
jtssqFirstStepAnalysis(level, redBalls, blueBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('level', level)
|
||||
params.append('redBalls', redBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
|
||||
return api.post('/jtssq/analysis/first-step', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 精推版双色球第二步分析
|
||||
jtssqSecondStepAnalysis(level, redBalls, blueBall, nextFirstBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('level', level)
|
||||
params.append('redBalls', redBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
params.append('nextFirstBall', nextFirstBall)
|
||||
|
||||
return api.post('/jtssq/analysis/second-step', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 精推版双色球第三步分析
|
||||
jtssqThirdStepAnalysis(level, redBalls, blueBall, nextRedBalls) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('level', level)
|
||||
params.append('redBalls', redBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
params.append('nextRedBalls', nextRedBalls)
|
||||
|
||||
return api.post('/jtssq/analysis/third-step', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 跟随球号分析算法
|
||||
fallowBallAnalysis(userId, level, firstThreeRedBalls, lastSixRedBalls, blueBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('userId', userId)
|
||||
params.append('level', level)
|
||||
params.append('firstThreeRedBalls', firstThreeRedBalls)
|
||||
params.append('lastSixRedBalls', lastSixRedBalls)
|
||||
params.append('blueBall', blueBall)
|
||||
|
||||
return api.post('/ball-analysis/fallow', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 蓝球分析算法
|
||||
blueBallAnalysis(userId, level, predictedRedBalls, predictedBlueBalls, lastRedBalls, lastBlueBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('userId', userId)
|
||||
params.append('level', level)
|
||||
params.append('predictedRedBalls', predictedRedBalls)
|
||||
params.append('predictedBlueBalls', predictedBlueBalls)
|
||||
params.append('lastRedBalls', lastRedBalls)
|
||||
params.append('lastBlueBall', lastBlueBall)
|
||||
|
||||
return api.post('/ball-analysis/blue-ball', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取用户推测统计数据
|
||||
getUserPredictStat(userId, lotteryType) {
|
||||
return api.get(`/data-analysis/user-predict-stat/${userId}`, {
|
||||
params: { lotteryType }
|
||||
})
|
||||
},
|
||||
|
||||
// 获取首球命中率统计
|
||||
getFirstBallHitRate(lotteryType) {
|
||||
return api.get('/ball-analysis/first-ball-hit-rate', {
|
||||
params: { lotteryType }
|
||||
})
|
||||
},
|
||||
|
||||
// 获取蓝球命中率统计
|
||||
getBlueBallHitRate(lotteryType) {
|
||||
return api.get('/ball-analysis/blue-ball-hit-rate', {
|
||||
params: { lotteryType }
|
||||
})
|
||||
},
|
||||
|
||||
// 获取红球命中率统计
|
||||
getRedBallHitRate(lotteryType) {
|
||||
return api.get('/ball-analysis/red-ball-hit-rate', {
|
||||
params: { lotteryType }
|
||||
})
|
||||
},
|
||||
|
||||
// 获取奖金统计
|
||||
getPrizeStatistics() {
|
||||
return api.get('/ball-analysis/prize-statistics')
|
||||
},
|
||||
|
||||
// 激活会员码
|
||||
activateVipCode(userId, code) {
|
||||
return api.post('/user/activate-vip', {
|
||||
userId,
|
||||
code
|
||||
})
|
||||
},
|
||||
|
||||
// 批量生成会员码
|
||||
generateVipCodes(numCodes, vipExpireTime) {
|
||||
return api.post('/vip-code/generate', {
|
||||
numCodes,
|
||||
vipExpireTime
|
||||
})
|
||||
},
|
||||
|
||||
// 获取可用会员码
|
||||
getAvailableVipCode(vipExpireTime) {
|
||||
return api.get(`/vip-code/available?vipExpireTime=${vipExpireTime}`)
|
||||
},
|
||||
|
||||
// 上传Excel文件导入数据(T1-T7 sheet)
|
||||
uploadExcelFile(file) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return api.post('/excel/upload', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 上传Excel文件导入开奖数据(T10工作表)
|
||||
uploadLotteryDrawsFile(file) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return api.post('/excel/upload-lottery-draws', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 上传Excel文件追加导入开奖数据(T10工作表)
|
||||
appendLotteryDrawsFile(file) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return api.post('/excel/append-lottery-draws', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取用户兑换记录
|
||||
getExchangeRecordsByUserId(userId) {
|
||||
return api.get(`/vip-exchange-record/user/${userId}`)
|
||||
},
|
||||
|
||||
// 获取用户列表
|
||||
getUserList(params) {
|
||||
console.log('调用获取用户列表接口:', params)
|
||||
const queryParams = new URLSearchParams()
|
||||
|
||||
// 添加查询参数
|
||||
if (params?.userAccount) {
|
||||
queryParams.append('userAccount', params.userAccount)
|
||||
}
|
||||
|
||||
if (params?.userName) {
|
||||
queryParams.append('userName', params.userName)
|
||||
}
|
||||
|
||||
if (params?.phone) {
|
||||
queryParams.append('phone', params.phone)
|
||||
}
|
||||
|
||||
if (params?.userRole) {
|
||||
queryParams.append('userRole', params.userRole)
|
||||
}
|
||||
|
||||
if (params?.status !== undefined && params?.status !== '') {
|
||||
queryParams.append('status', params.status)
|
||||
}
|
||||
|
||||
if (params?.isVip !== undefined && params?.isVip !== '') {
|
||||
queryParams.append('isVip', params.isVip)
|
||||
}
|
||||
|
||||
// 分页参数
|
||||
if (params?.page) {
|
||||
queryParams.append('page', params.page)
|
||||
}
|
||||
|
||||
if (params?.size) {
|
||||
queryParams.append('size', params.size)
|
||||
}
|
||||
|
||||
return api.get(`/user/list${queryParams.toString() ? '?' + queryParams.toString() : ''}`)
|
||||
},
|
||||
|
||||
// 更新用户状态
|
||||
updateUserStatus(params) {
|
||||
console.log('调用更新用户状态接口:', params)
|
||||
// 使用Content-Type: application/json 调用接口
|
||||
return api.post('/user/update-status', params, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
timeout: 10000 // 设置10秒超时
|
||||
}).then(response => {
|
||||
console.log('更新用户状态接口响应:', response)
|
||||
return response
|
||||
}).catch(error => {
|
||||
console.error('更新用户状态接口错误:', error)
|
||||
throw error
|
||||
})
|
||||
},
|
||||
|
||||
// 添加用户
|
||||
addUser(userForm) {
|
||||
console.log('调用添加用户接口:', userForm)
|
||||
return api.post('/user/add', userForm)
|
||||
},
|
||||
|
||||
// 更新用户
|
||||
updateUser(userForm) {
|
||||
console.log('调用更新用户接口:', userForm)
|
||||
return api.post('/user/update', userForm)
|
||||
},
|
||||
|
||||
// 删除用户
|
||||
deleteUser(userId) {
|
||||
console.log('调用删除用户接口:', userId)
|
||||
return api.post('/user/delete', { id: userId }, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取所有推测记录总数
|
||||
getTotalPredictCount() {
|
||||
console.log('调用getTotalPredictCount接口...')
|
||||
return api.get('/data-analysis/total-predict-count').then(response => {
|
||||
console.log('getTotalPredictCount接口响应:', response)
|
||||
return response
|
||||
}).catch(error => {
|
||||
console.error('getTotalPredictCount接口错误:', error)
|
||||
throw error
|
||||
})
|
||||
},
|
||||
|
||||
// 根据用户ID和操作模块获取操作历史
|
||||
getOperationHistoryByUserIdAndModule(userId, operationModule) {
|
||||
return api.get(`/operation-history/user/${userId}/module/${operationModule}`)
|
||||
},
|
||||
|
||||
// 管理员登录
|
||||
adminLogin(username, password) {
|
||||
// 模拟API请求,实际项目中应该调用真实的后端API
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
// 模拟验证管理员账号密码
|
||||
if (username === 'admin' && password === '123456') {
|
||||
resolve({
|
||||
success: true,
|
||||
data: {
|
||||
id: 1,
|
||||
userName: '系统管理员',
|
||||
userAccount: 'admin',
|
||||
userRole: 'admin',
|
||||
avatar: null,
|
||||
createTime: new Date().toISOString()
|
||||
},
|
||||
message: '登录成功'
|
||||
})
|
||||
} else {
|
||||
resolve({
|
||||
success: false,
|
||||
data: null,
|
||||
message: '账号或密码错误'
|
||||
})
|
||||
}
|
||||
}, 1000) // 模拟网络延迟
|
||||
})
|
||||
},
|
||||
|
||||
// 获取会员码统计数据
|
||||
getVipCodeStats() {
|
||||
return api.get('/vip-code/stats')
|
||||
},
|
||||
|
||||
// 获取会员码统计数量
|
||||
getVipCodeCount() {
|
||||
console.log('调用getVipCodeCount接口...')
|
||||
return api.get('/vip-code/count').then(response => {
|
||||
console.log('getVipCodeCount接口响应:', response)
|
||||
return response
|
||||
}).catch(error => {
|
||||
console.error('getVipCodeCount接口错误:', error)
|
||||
throw error
|
||||
})
|
||||
},
|
||||
|
||||
// 获取会员码列表
|
||||
getVipCodeList(params) {
|
||||
// 构建查询参数
|
||||
const queryParams = new URLSearchParams()
|
||||
|
||||
// 分页参数
|
||||
if (params.page) queryParams.append('current', params.page)
|
||||
if (params.size) queryParams.append('pageSize', params.size)
|
||||
|
||||
// 搜索关键词(会员码)
|
||||
if (params.keyword) queryParams.append('code', params.keyword)
|
||||
|
||||
// 状态筛选
|
||||
if (params.status !== undefined && params.status !== '') {
|
||||
// 直接使用status值作为isUse参数
|
||||
queryParams.append('isUse', params.status)
|
||||
}
|
||||
|
||||
// 有效期筛选
|
||||
if (params.expireTime) queryParams.append('vipExpireTime', params.expireTime)
|
||||
|
||||
// 时间范围筛选
|
||||
if (params.startTime) queryParams.append('startTime', params.startTime)
|
||||
if (params.endTime) queryParams.append('endTime', params.endTime)
|
||||
|
||||
// 发起请求
|
||||
return api.get(`/vip-code/list/page?${queryParams.toString()}`)
|
||||
},
|
||||
|
||||
// 删除会员码
|
||||
deleteVipCode(id) {
|
||||
return api.post(`/vip-code/delete/${id}`)
|
||||
},
|
||||
|
||||
// 获取红球历史数据全部记录
|
||||
getHistoryAll() {
|
||||
return api.get('/ball-analysis/history-all')
|
||||
},
|
||||
|
||||
// 获取红球最近100期数据记录
|
||||
getHistory100() {
|
||||
return api.get('/ball-analysis/history-100')
|
||||
},
|
||||
|
||||
// 获取红球历史数据排行记录
|
||||
getHistoryTop() {
|
||||
return api.get('/ball-analysis/history-top')
|
||||
},
|
||||
|
||||
// 获取红球100期数据排行记录
|
||||
getHistoryTop100() {
|
||||
return api.get('/ball-analysis/history-top-100')
|
||||
},
|
||||
|
||||
// 获取蓝球历史数据全部记录
|
||||
getBlueHistoryAll() {
|
||||
return api.get('/ball-analysis/blue-history-all')
|
||||
},
|
||||
|
||||
// 获取蓝球最近100期数据记录
|
||||
getBlueHistory100() {
|
||||
return api.get('/ball-analysis/blue-history-100')
|
||||
},
|
||||
|
||||
// 获取蓝球历史数据排行记录
|
||||
getBlueHistoryTop() {
|
||||
return api.get('/ball-analysis/blue-history-top')
|
||||
},
|
||||
|
||||
// 获取蓝球100期数据排行记录
|
||||
getBlueHistoryTop100() {
|
||||
return api.get('/ball-analysis/blue-history-top-100')
|
||||
},
|
||||
|
||||
// 发送短信验证码
|
||||
sendSmsCode(phoneNumber) {
|
||||
return api.post('/sms/sendCode', null, {
|
||||
params: {
|
||||
phoneNumber
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 手机号登录
|
||||
userPhoneLogin(phone, code) {
|
||||
return api.post('/user/phone/login', {
|
||||
phone,
|
||||
code
|
||||
})
|
||||
},
|
||||
|
||||
// 手机号注册
|
||||
userPhoneRegister(userAccount, userPassword, checkPassword, phone, code, userName) {
|
||||
return api.post('/user/phone/register', {
|
||||
userAccount,
|
||||
userPassword,
|
||||
checkPassword,
|
||||
phone,
|
||||
code,
|
||||
userName
|
||||
})
|
||||
},
|
||||
|
||||
// 重置密码
|
||||
resetPassword(phone, code, newPassword, confirmPassword) {
|
||||
console.log('调用重置密码接口:', { phone, code, newPassword, confirmPassword })
|
||||
return api.post('/user/reset-password', {
|
||||
phone,
|
||||
code,
|
||||
newPassword,
|
||||
confirmPassword
|
||||
}, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 红球组合分析
|
||||
redBallCombinationAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/red-ball-combination-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 红球与蓝球的组合性分析
|
||||
redBlueCombinationAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/red-blue-combination-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 蓝球与红球的组合性分析
|
||||
blueRedCombinationAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/blue-red-combination-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 红球与红球的接续性分析
|
||||
redRedPersistenceAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/red-red-persistence-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 蓝球与蓝球的接续性分析
|
||||
blueBluePersistenceAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/blue-blue-persistence-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 红球与蓝球的接续性分析
|
||||
redBluePersistenceAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/red-blue-persistence-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 蓝球与红球的接续性分析
|
||||
blueRedPersistenceAnalysis(masterBall, slaveBall) {
|
||||
const params = new URLSearchParams()
|
||||
params.append('masterBall', masterBall)
|
||||
params.append('slaveBall', slaveBall)
|
||||
|
||||
return api.get(`/ball-analysis/blue-red-persistence-analysis?${params.toString()}`)
|
||||
},
|
||||
|
||||
// 根据开奖期号查询开奖球号
|
||||
getDrawNumbersById(drawId) {
|
||||
return api.get(`/ball-analysis/draw/${drawId}/numbers`)
|
||||
},
|
||||
|
||||
// 获取近10期开奖期号
|
||||
getRecent10DrawIds() {
|
||||
return api.get('/ball-analysis/recent-10-draw-ids')
|
||||
},
|
||||
|
||||
// 根据操作模块获取操作历史(真实接口)
|
||||
getOperationHistoryByModule(operationModule) {
|
||||
console.log('调用根据操作模块获取操作历史接口:', operationModule)
|
||||
return api.get(`/operation-history/module/${operationModule}`)
|
||||
},
|
||||
|
||||
// 根据操作结果获取操作历史(真实接口)
|
||||
getOperationHistoryByResult(operationResult) {
|
||||
console.log('调用根据操作结果获取操作历史接口:', operationResult)
|
||||
return api.get(`/operation-history/result/${operationResult}`)
|
||||
},
|
||||
|
||||
// 获取操作历史列表(统一接口)
|
||||
getOperationHistoryList(params) {
|
||||
console.log('调用获取操作历史列表接口:', params)
|
||||
const queryParams = new URLSearchParams()
|
||||
|
||||
if (params?.operationModule !== undefined && params.operationModule !== '') {
|
||||
queryParams.append('operationModule', params.operationModule)
|
||||
}
|
||||
|
||||
if (params?.operationResult !== undefined && params.operationResult !== '') {
|
||||
queryParams.append('operationResult', params.operationResult)
|
||||
}
|
||||
|
||||
if (params?.keyword !== undefined && params.keyword !== '') {
|
||||
queryParams.append('keyword', params.keyword)
|
||||
}
|
||||
|
||||
return api.get(`/operation-history/list${queryParams.toString() ? '?' + queryParams.toString() : ''}`)
|
||||
},
|
||||
|
||||
// ==================== 公告管理接口 ====================
|
||||
|
||||
// 添加公告
|
||||
addAnnouncement(data) {
|
||||
console.log('调用添加公告接口:', data)
|
||||
return api.post('/announcement/add', data)
|
||||
},
|
||||
|
||||
// 查询公告列表(分页)
|
||||
getAnnouncementList(params) {
|
||||
console.log('调用查询公告列表接口:', params)
|
||||
const queryParams = new URLSearchParams()
|
||||
|
||||
if (params?.current) queryParams.append('current', params.current)
|
||||
if (params?.pageSize) queryParams.append('pageSize', params.pageSize)
|
||||
if (params?.title) queryParams.append('title', params.title)
|
||||
if (params?.status !== undefined && params?.status !== null && params?.status !== '') {
|
||||
queryParams.append('status', params.status)
|
||||
}
|
||||
if (params?.priority !== undefined && params?.priority !== null && params?.priority !== '') {
|
||||
queryParams.append('priority', params.priority)
|
||||
}
|
||||
if (params?.publisherId) queryParams.append('publisherId', params.publisherId)
|
||||
if (params?.publisherName) queryParams.append('publisherName', params.publisherName)
|
||||
if (params?.startTime) queryParams.append('startTime', params.startTime)
|
||||
if (params?.endTime) queryParams.append('endTime', params.endTime)
|
||||
|
||||
return api.get(`/announcement/list/page${queryParams.toString() ? '?' + queryParams.toString() : ''}`)
|
||||
},
|
||||
|
||||
// 根据ID查询公告详情
|
||||
getAnnouncementById(id) {
|
||||
console.log('调用根据ID查询公告接口:', id)
|
||||
return api.get(`/announcement/${id}`)
|
||||
},
|
||||
|
||||
// 更新公告
|
||||
updateAnnouncement(data) {
|
||||
console.log('调用更新公告接口:', data)
|
||||
return api.post('/announcement/update', data)
|
||||
},
|
||||
|
||||
// 删除公告
|
||||
deleteAnnouncement(id) {
|
||||
console.log('调用删除公告接口:', id)
|
||||
return api.delete(`/announcement/delete/${id}`)
|
||||
},
|
||||
|
||||
// 获取置顶公告
|
||||
getTopAnnouncements() {
|
||||
console.log('调用获取置顶公告接口')
|
||||
return api.get('/announcement/top')
|
||||
},
|
||||
|
||||
// 获取所有已发布公告
|
||||
getPublishedAnnouncements() {
|
||||
console.log('调用获取所有已发布公告接口')
|
||||
return api.get('/announcement/published')
|
||||
},
|
||||
|
||||
// ==================== 推测管理接口 ====================
|
||||
|
||||
// 管理员获取所有双色球推测记录
|
||||
getAllSsqPredictRecords(params) {
|
||||
const queryParams = new URLSearchParams()
|
||||
if (params?.userId) queryParams.append('userId', params.userId)
|
||||
if (params?.predictResult) queryParams.append('predictResult', params.predictResult)
|
||||
if (params?.current) queryParams.append('current', params.current)
|
||||
if (params?.pageSize) queryParams.append('pageSize', params.pageSize)
|
||||
|
||||
return api.get(`/ball-analysis/admin/all-records?${queryParams.toString()}`)
|
||||
},
|
||||
|
||||
// 管理员获取所有大乐透推测记录
|
||||
getAllDltPredictRecords(params) {
|
||||
const queryParams = new URLSearchParams()
|
||||
if (params?.userId) queryParams.append('userId', params.userId)
|
||||
if (params?.predictResult) queryParams.append('predictResult', params.predictResult)
|
||||
if (params?.current) queryParams.append('current', params.current)
|
||||
if (params?.pageSize) queryParams.append('pageSize', params.pageSize)
|
||||
|
||||
return api.get(`/dlt-predict/admin/all-records?${queryParams.toString()}`)
|
||||
},
|
||||
|
||||
// ==================== 奖金统计接口 ====================
|
||||
|
||||
// 管理员获取双色球中奖记录明细
|
||||
getAdminPrizeStatistics(params) {
|
||||
const queryParams = new URLSearchParams()
|
||||
if (params?.userId) queryParams.append('userId', params.userId)
|
||||
if (params?.prizeGrade) queryParams.append('prizeGrade', params.prizeGrade)
|
||||
if (params?.current) queryParams.append('current', params.current)
|
||||
if (params?.pageSize) queryParams.append('pageSize', params.pageSize)
|
||||
|
||||
return api.get(`/ball-analysis/admin/prize-statistics?${queryParams.toString()}`)
|
||||
},
|
||||
|
||||
// 管理员获取大乐透中奖记录明细
|
||||
getAdminDltPrizeStatistics(params) {
|
||||
const queryParams = new URLSearchParams()
|
||||
if (params?.userId) queryParams.append('userId', params.userId)
|
||||
if (params?.prizeGrade) queryParams.append('prizeGrade', params.prizeGrade)
|
||||
if (params?.current) queryParams.append('current', params.current)
|
||||
if (params?.pageSize) queryParams.append('pageSize', params.pageSize)
|
||||
|
||||
return api.get(`/dlt-predict/admin/prize-statistics?${queryParams.toString()}`)
|
||||
},
|
||||
|
||||
// 记录页面访问PV
|
||||
recordPageView(pagePath) {
|
||||
return api.post(`/pv/record?pagePath=${encodeURIComponent(pagePath)}`)
|
||||
},
|
||||
|
||||
// 获取总PV
|
||||
getTotalPageViews() {
|
||||
return api.get('/pv/total')
|
||||
},
|
||||
|
||||
// 获取今日PV
|
||||
getTodayPageViews() {
|
||||
return api.get('/pv/today')
|
||||
},
|
||||
|
||||
// 获取近N天PV统计
|
||||
getPageViewsByDays(days = 7) {
|
||||
return api.get(`/pv/stats?days=${days}`)
|
||||
}
|
||||
}
|
||||
|
||||
export default api
|
||||
Reference in New Issue
Block a user