feat: 适配5.x后端,重构前端架构
主要变更: 1. 重构API目录结构,采用模块化设计,适配5.x后端接口规范 2. 优化布局组件,提升用户界面体验 3. 增强国际化支持,完善多语言配置 4. 新增权限控制功能,支持前端路由权限管理 5. 优化认证流程,支持JWT认证机制 6. 新增中间件和插件,提升系统扩展性 7. 优化状态管理,采用更清晰的模块化设计 8. 新增搜索框、广告等组件,丰富页面功能 9. 更改包管理工具从npm到pnpm,提升依赖管理效率 10. 完善配置系统,支持多环境配置 适配5.x后端特性: - 采用新的API接口规范 - 支持JWT认证机制 - 适配后端权限控制体系 - 支持后端国际化接口 - 优化数据交互方式
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
|
||||
/**
|
||||
* 用户登录认证
|
||||
*/
|
||||
export function authenticateUser(data: AnyObject) {
|
||||
return request.post('/auth/login', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机验证码登录
|
||||
*/
|
||||
export function authenticateWithMobile(data: AnyObject) {
|
||||
return request.post('/auth/login/mobile', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录配置信息
|
||||
*/
|
||||
export function getLoginConfig() {
|
||||
return request.get('/auth/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户退出登录
|
||||
*/
|
||||
export function logoutUser() {
|
||||
return request.post('/auth/logout')
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注册
|
||||
*/
|
||||
export function registerUser(data: AnyObject) {
|
||||
const url = data.pid ? `/auth/register?pid=${data.pid}` : '/auth/register'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号注册
|
||||
*/
|
||||
export function registerWithMobile(data: AnyObject) {
|
||||
const url = data.pid ? `/auth/register/mobile?pid=${data.pid}` : '/auth/register/mobile'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信授权登录
|
||||
*/
|
||||
export function authenticateWithWechat(data: AnyObject) {
|
||||
return request.post('/auth/wechat', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序登录
|
||||
*/
|
||||
export function authenticateWithWeapp(data: AnyObject) {
|
||||
return request.post('/auth/weapp', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机号
|
||||
*/
|
||||
export function bindMobile(data: AnyObject) {
|
||||
const url = data.pid ? `/auth/bind?pid=${data.pid}` : '/auth/bind'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成微信扫码登录二维码
|
||||
*/
|
||||
export function generateWechatQrCode() {
|
||||
return request.post('/auth/wechat/scan')
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查微信扫码状态
|
||||
*/
|
||||
export function checkWechatScanStatus(data: AnyObject) {
|
||||
return request.get('/auth/wechat/scan/status', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查微信登录可用性
|
||||
*/
|
||||
export function checkWechatAvailability() {
|
||||
return request.get('/auth/wechat/availability')
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
import request from '~/utils/request'
|
||||
|
||||
/**
|
||||
* 用户登录认证
|
||||
*/
|
||||
export function authenticateUser(data: {
|
||||
username: string
|
||||
password: string
|
||||
}): Promise<any> {
|
||||
return request.post('/auth/login', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机验证码登录
|
||||
*/
|
||||
export function authenticateWithMobile(data: {
|
||||
mobile: string
|
||||
code: string
|
||||
key: string
|
||||
}): Promise<any> {
|
||||
return request.post('/auth/login/mobile', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户退出登录
|
||||
*/
|
||||
export function logoutUser(): Promise<boolean> {
|
||||
return request.post('/auth/logout')
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注册
|
||||
*/
|
||||
export function registerUser(data: {
|
||||
username: string
|
||||
email: string
|
||||
password: string
|
||||
confirm_password: string
|
||||
pid?: string
|
||||
}): Promise<any> {
|
||||
const url = data.pid ? `/auth/register?pid=${data.pid}` : '/auth/register'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号注册
|
||||
*/
|
||||
export function registerWithMobile(data: {
|
||||
mobile: string
|
||||
code: string
|
||||
key: string
|
||||
pid?: string
|
||||
}): Promise<any> {
|
||||
const url = data.pid ? `/auth/register/mobile?pid=${data.pid}` : '/auth/register/mobile'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信授权登录
|
||||
*/
|
||||
export function authenticateWithWechat(data: any): Promise<any> {
|
||||
return request.post('/auth/wechat', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序登录
|
||||
*/
|
||||
export function authenticateWithWeapp(data: any): Promise<any> {
|
||||
return request.post('/auth/weapp', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机号
|
||||
*/
|
||||
export function bindMobile(data: {
|
||||
mobile: string
|
||||
code: string
|
||||
pid?: string
|
||||
}): Promise<any> {
|
||||
const url = data.pid ? `/auth/bind?pid=${data.pid}` : '/auth/bind'
|
||||
return request.post(url, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成微信扫码登录二维码
|
||||
*/
|
||||
export function generateWechatQrCode(): Promise<any> {
|
||||
return request.post('/auth/wechat/scan')
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查微信扫码状态
|
||||
*/
|
||||
export function checkWechatScanStatus(data: { scene_id: string }): Promise<any> {
|
||||
return request.get('/auth/wechat/scan/status', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查微信登录可用性
|
||||
*/
|
||||
export function checkWechatAvailability(): Promise<boolean> {
|
||||
return request.get('/auth/wechat/availability')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取第三方绑定列表
|
||||
*/
|
||||
export function getThirdPartyList(): Promise<any[]> {
|
||||
return request.get('/auth/third-party/list')
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定第三方账号
|
||||
*/
|
||||
export function bindThirdParty(data: { platform: number }): Promise<boolean> {
|
||||
return request.post('/auth/third-party/bind', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑第三方账号
|
||||
*/
|
||||
export function unbindThirdParty(platform: number): Promise<boolean> {
|
||||
return request.delete(`/auth/third-party/unbind/${platform}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成第三方绑定二维码
|
||||
*/
|
||||
export function generateBindQrCode(platform: number): Promise<any> {
|
||||
return request.post('/auth/third-party/qr-code', { platform })
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查绑定二维码状态
|
||||
*/
|
||||
export function checkBindQrStatus(sceneId: string): Promise<any> {
|
||||
return request.get('/auth/third-party/qr-status', { scene_id: sceneId })
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证邮箱(第一步:验证邮箱和验证码)
|
||||
*/
|
||||
export function verifyEmail(data: {
|
||||
email: string
|
||||
code: string
|
||||
}): Promise<boolean> {
|
||||
return request.post('/auth/verify-email', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮箱验证码
|
||||
*/
|
||||
export function sendEmailCode(data: {
|
||||
email: string
|
||||
captcha_key: string
|
||||
captcha_code: string
|
||||
}): Promise<boolean> {
|
||||
return request.post('/auth/send-email-code', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 忘记密码 - 重置密码(第二步:设置新密码)
|
||||
*/
|
||||
export function forgetPassword(data: {
|
||||
email: string
|
||||
code: string
|
||||
new_password: string
|
||||
confirm_password: string
|
||||
}): Promise<boolean> {
|
||||
return request.post('/auth/forget-password', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新 Token
|
||||
*/
|
||||
export function refreshToken(refresh_token: string): Promise<{
|
||||
code: number
|
||||
msg: string
|
||||
data?: {
|
||||
access_token: string
|
||||
refresh_token: string
|
||||
}
|
||||
}> {
|
||||
return request.post('/auth/refresh', { refresh_token }, {
|
||||
// 不带 token 请求,避免 401 循环
|
||||
headers: {}
|
||||
} as any)
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* 认证模块相关类型定义
|
||||
*/
|
||||
|
||||
/**
|
||||
* 登录数据
|
||||
*/
|
||||
export interface LoginData {
|
||||
username?: string
|
||||
password?: string
|
||||
phone?: string
|
||||
verify_code?: string
|
||||
pid?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册数据
|
||||
*/
|
||||
export interface RegisterData {
|
||||
username?: string
|
||||
password?: string
|
||||
phone?: string
|
||||
verify_code?: string
|
||||
pid?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定手机号数据
|
||||
*/
|
||||
export interface BindMobileData {
|
||||
mobile: string
|
||||
code: string
|
||||
pid?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户信息(登录/注册后返回)
|
||||
*/
|
||||
export interface UserInfo {
|
||||
id: number
|
||||
username: string
|
||||
nickname?: string
|
||||
avatar?: string
|
||||
phone?: string
|
||||
email?: string
|
||||
token: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录配置
|
||||
*/
|
||||
export interface LoginConfig {
|
||||
enable_username_login: boolean
|
||||
enable_mobile_login: boolean
|
||||
enable_wechat_login: boolean
|
||||
enable_weapp_login: boolean
|
||||
enable_register: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码状态
|
||||
*/
|
||||
export enum ScanStatus {
|
||||
WAITING = 'waiting',
|
||||
SCANNED = 'scanned',
|
||||
CONFIRMED = 'confirmed',
|
||||
EXPIRED = 'expired',
|
||||
CANCELED = 'canceled'
|
||||
}
|
||||
|
||||
/**
|
||||
* 第三方平台类型
|
||||
*/
|
||||
export enum ThirdPartyPlatform {
|
||||
WECHAT = 1,
|
||||
QQ = 2,
|
||||
ALIPAY = 3
|
||||
}
|
||||
|
||||
/**
|
||||
* 第三方绑定信息
|
||||
*/
|
||||
export interface ThirdPartyBinding {
|
||||
platform: number
|
||||
platform_name: string
|
||||
nickname?: string
|
||||
avatar?: string
|
||||
bind_time: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫码登录信息
|
||||
*/
|
||||
export interface QrCodeLoginInfo {
|
||||
scene_id: string
|
||||
qrcode_url: string
|
||||
expires_in: number
|
||||
}
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
/**
|
||||
* 获取会员基本信息
|
||||
*/
|
||||
export function getMemberProfile() {
|
||||
return request.get('/member/profile')
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新会员信息
|
||||
*/
|
||||
export function updateMemberInfo(data: AnyObject) {
|
||||
return request.put(`/member/profile/${data.field}`, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分流水记录
|
||||
*/
|
||||
export function getPointTransactions(data: AnyObject) {
|
||||
return request.get('/member/points/transactions', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员积分总额
|
||||
*/
|
||||
export function getMemberPointsTotal() {
|
||||
return request.get('/member/points/total')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取余额流水记录
|
||||
*/
|
||||
export function getBalanceTransactions(data: AnyObject) {
|
||||
return request.get('/member/balance/transactions', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有余额流水记录
|
||||
*/
|
||||
export function getAllBalanceTransactions(data: AnyObject) {
|
||||
return request.get('/member/balance/transactions/all', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定会员手机号
|
||||
*/
|
||||
export function bindMemberMobile(data: AnyObject) {
|
||||
return request.put('/member/mobile', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员等级信息
|
||||
*/
|
||||
export function getMemberLevel() {
|
||||
return request.get('/member/level')
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
import request from '~/utils/request'
|
||||
import type {
|
||||
MemberInfo,
|
||||
Address,
|
||||
PointTransactionsResponse,
|
||||
BalanceTransactionsResponse,
|
||||
SignCalendar,
|
||||
SignStatistics,
|
||||
MemberLevel,
|
||||
SignStatus
|
||||
} from './types'
|
||||
|
||||
/**
|
||||
* 获取会员基本信息
|
||||
*/
|
||||
export function getMemberProfile(): Promise<MemberInfo> {
|
||||
return request.get('/member/user-info')
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新会员信息
|
||||
*/
|
||||
export function updateMemberInfo(data: Partial<MemberInfo>): Promise<boolean> {
|
||||
return request.put('/member/user/update', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分流水记录
|
||||
*/
|
||||
export function getPointTransactions(data: {
|
||||
page?: number
|
||||
page_size?: number
|
||||
}): Promise<PointTransactionsResponse> {
|
||||
return request.get('/member/points/record', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员积分总额
|
||||
*/
|
||||
export function getMemberPointsTotal(): Promise<number> {
|
||||
return request.get('/member/points/total')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取余额流水记录
|
||||
*/
|
||||
export function getBalanceTransactions(data: {
|
||||
page?: number
|
||||
page_size?: number
|
||||
}): Promise<BalanceTransactionsResponse> {
|
||||
return request.get('/member/balance/record', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有余额流水记录
|
||||
*/
|
||||
export function getAllBalanceTransactions(data?: {
|
||||
page?: number
|
||||
page_size?: number
|
||||
}): Promise<BalanceTransactionsResponse> {
|
||||
return request.get('/member/balance/all', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员等级信息
|
||||
*/
|
||||
export function getMemberLevel(): Promise<MemberLevel> {
|
||||
return request.get('/member/points/level')
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员签到
|
||||
*/
|
||||
export function memberSign(): Promise<number> {
|
||||
return request.post('/member/points/sign')
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行签到
|
||||
*/
|
||||
export function signIn(): Promise<boolean> {
|
||||
return request.post('/member/sign')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取签到状态
|
||||
*/
|
||||
export function getSignStatus(): Promise<SignStatus> {
|
||||
return request.get('/member/sign/status')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取签到日历
|
||||
*/
|
||||
export function getSignCalendar(year: number, month: number): Promise<SignCalendar> {
|
||||
return request.get('/member/sign/calendar', { year, month })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取签到统计
|
||||
*/
|
||||
export function getSignStatistics(type: string = 'month'): Promise<SignStatistics> {
|
||||
return request.get('/member/sign/statistics', { type })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
export function changePassword(data: {
|
||||
old_password: string
|
||||
new_password: string
|
||||
confirm_password: string
|
||||
}): Promise<boolean> {
|
||||
return request.put('/member/user/change-password', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址列表
|
||||
*/
|
||||
export function getAddressList(): Promise<Address[]> {
|
||||
return request.get('/member/user/address/list')
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建地址
|
||||
*/
|
||||
export function createAddress(data: Partial<Address>): Promise<Address> {
|
||||
return request.post('/member/user/address/create', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新地址
|
||||
*/
|
||||
export function updateAddress(id: number, data: Partial<Address>): Promise<boolean> {
|
||||
return request.put(`/member/user/address/update/${id}`, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除地址
|
||||
*/
|
||||
export function deleteAddress(id: number): Promise<boolean> {
|
||||
return request.delete(`/member/user/address/delete/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取验证码
|
||||
*/
|
||||
export function getVerificationCode(data: { type: string; phone: string }): Promise<boolean> {
|
||||
return request.post('/member/user/send-code', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改手机号码
|
||||
*/
|
||||
export function updateMemberMobile(data: {
|
||||
oldMobile: string
|
||||
newMobile: string
|
||||
code: string
|
||||
}): Promise<boolean> {
|
||||
return request.put('/member/user/update-phone', {
|
||||
old_phone: data.oldMobile,
|
||||
new_phone: data.newMobile,
|
||||
verify_code: data.code
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改邮箱
|
||||
*/
|
||||
export function updateMemberEmail(data: { email: string; code: string }): Promise<boolean> {
|
||||
return request.put('/member/user/update-email', {
|
||||
email: data.email,
|
||||
verify_code: data.code
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传头像
|
||||
*/
|
||||
export function uploadAvatar(file: File): Promise<string> {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return request.post('/member/user/avatar', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
} as any
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* 会员模块相关类型定义
|
||||
*/
|
||||
|
||||
/**
|
||||
* 会员基本信息
|
||||
*/
|
||||
export interface MemberInfo {
|
||||
id: number
|
||||
username: string
|
||||
nickname?: string
|
||||
avatar?: string
|
||||
phone?: string
|
||||
email?: string
|
||||
points: number
|
||||
balance: number
|
||||
level: number
|
||||
level_name?: string
|
||||
created_at: number
|
||||
updated_at: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址
|
||||
*/
|
||||
export interface Address {
|
||||
id: number
|
||||
user_id: number
|
||||
consignee: string
|
||||
phone: string
|
||||
province: string
|
||||
city: string
|
||||
district: string
|
||||
address: string
|
||||
postal_code?: string
|
||||
is_default: number
|
||||
created_at: number
|
||||
updated_at: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分流水记录
|
||||
*/
|
||||
export interface PointTransaction {
|
||||
id: number
|
||||
user_id: number
|
||||
type: string
|
||||
amount: number
|
||||
balance: number
|
||||
description: string
|
||||
created_at: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分流水响应
|
||||
*/
|
||||
export interface PointTransactionsResponse {
|
||||
total: number
|
||||
list: PointTransaction[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额流水记录
|
||||
*/
|
||||
export interface BalanceTransaction {
|
||||
id: number
|
||||
user_id: number
|
||||
type: string
|
||||
amount: number
|
||||
balance: number
|
||||
description: string
|
||||
created_at: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额流水响应
|
||||
*/
|
||||
export interface BalanceTransactionsResponse {
|
||||
total: number
|
||||
list: BalanceTransaction[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到日历
|
||||
*/
|
||||
export interface SignCalendar {
|
||||
year: number
|
||||
month: number
|
||||
signed_dates: number[]
|
||||
total_signed: number
|
||||
total_can_sign: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到统计
|
||||
*/
|
||||
export interface SignStatistics {
|
||||
total_signed: number
|
||||
continuous_signed: number
|
||||
this_month_signed: number
|
||||
today_signed: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员等级信息
|
||||
*/
|
||||
export interface MemberLevel {
|
||||
level: number
|
||||
level_name: string
|
||||
points: number
|
||||
next_level_points?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 签到状态
|
||||
*/
|
||||
export interface SignStatus {
|
||||
today_signed: boolean
|
||||
continuous_days: number
|
||||
can_sign: boolean
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
import request from '~/utils/request'
|
||||
import type { LinkItem, AdvertisementItem, NavigationItem, SiteData } from './types'
|
||||
|
||||
/**
|
||||
* 获取友情链接列表
|
||||
*/
|
||||
export function getLinks(params?: { type?: string }): Promise<LinkItem[]> {
|
||||
return request.get('/site/link', params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有友情链接
|
||||
*/
|
||||
export function getAllLinks(): Promise<LinkItem[]> {
|
||||
return request.get('/site/link/all')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取广告位信息
|
||||
*/
|
||||
export function getAdvertisements(params?: { type?: string }): Promise<AdvertisementItem[]> {
|
||||
return request.get('/site/ads', params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取导航菜单列表
|
||||
*/
|
||||
export function getNavigationList(): Promise<NavigationItem[]> {
|
||||
return request.get('/site/nav')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点首页数据(广告、导航、友情链接等)
|
||||
*/
|
||||
export function getSiteData(): Promise<SiteData> {
|
||||
return request.get('/site/site-data')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Web 分组所有配置
|
||||
* 一次性获取前台站点设置、搜索配置、统计分析配置等
|
||||
*/
|
||||
export function getWebGroupConfigs(): Promise<Record<string, any>> {
|
||||
return request.get('/system/config/group/web')
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* 站点首页模块相关类型定义
|
||||
*/
|
||||
|
||||
/**
|
||||
* 友情链接项
|
||||
*/
|
||||
export interface LinkItem {
|
||||
id: number
|
||||
name: string
|
||||
url: string
|
||||
logo?: string
|
||||
description?: string
|
||||
category?: string
|
||||
sort: number
|
||||
target?: string
|
||||
click_count?: number
|
||||
enabled: number
|
||||
created_at: number
|
||||
updated_at: number
|
||||
deleted_at: number | null
|
||||
}
|
||||
|
||||
/**
|
||||
* 广告项
|
||||
*/
|
||||
export interface AdvertisementItem {
|
||||
id: number
|
||||
title: string
|
||||
link: string
|
||||
image: string
|
||||
description?: string
|
||||
sort: number
|
||||
enabled: number
|
||||
start_time: number
|
||||
end_time: number
|
||||
created_at: number
|
||||
updated_at: number
|
||||
deleted_at: number | null
|
||||
}
|
||||
|
||||
/**
|
||||
* 导航菜单项
|
||||
*/
|
||||
export interface NavigationItem {
|
||||
id: number
|
||||
title: string
|
||||
url: string
|
||||
icon?: string
|
||||
code: string | null
|
||||
sort: number
|
||||
enabled: number
|
||||
is_show: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 站点首页数据
|
||||
*/
|
||||
export interface SiteData {
|
||||
advertisements: AdvertisementItem[]
|
||||
navigation: NavigationItem[]
|
||||
links: LinkItem[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索配置项
|
||||
*/
|
||||
export interface SearchConfig {
|
||||
keyword: string // 搜索引擎关键字
|
||||
keyword_enabled: number // 是否启用关键字搜索 (0/1)
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计分析配置项
|
||||
*/
|
||||
export interface AnalyticsConfig {
|
||||
baidu_tongji_code: string // 百度统计代码
|
||||
baidu_tongji_enabled: number // 是否启用百度统计 (0/1)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
/**
|
||||
* 获取验证码图片
|
||||
*/
|
||||
export function getCaptchaImage() {
|
||||
return request.get('/system/captcha', { time: Date.now() })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信授权码
|
||||
*/
|
||||
export function getWechatAuthCode(data: AnyObject) {
|
||||
return request.get('/system/wechat/auth-code', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步微信用户信息
|
||||
*/
|
||||
export function syncWechatUserInfo(data: AnyObject) {
|
||||
return request.get('/system/wechat/sync', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取协议内容
|
||||
*/
|
||||
export function getAgreementContent(key: string) {
|
||||
return request.get(`/system/agreement/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
*/
|
||||
export function resetUserPassword(data: AnyObject) {
|
||||
return request.post('/system/password/reset', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
*/
|
||||
export function sendSmsVerificationCode(data: AnyObject) {
|
||||
return request.post(`/system/sms/${data.type}`, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信 JSSDK 配置
|
||||
*/
|
||||
export function getWechatJssdkConfig(data: AnyObject) {
|
||||
return request.get('/system/wechat/jssdk-config', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取远程图片
|
||||
*/
|
||||
export function fetchRemoteImage(data: AnyObject) {
|
||||
return request.post('/system/image/fetch', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Base64 格式图片
|
||||
*/
|
||||
export function fetchBase64Image(data: AnyObject) {
|
||||
return request.post('/system/image/base64', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取版权信息
|
||||
*/
|
||||
export function getCopyrightInfo() {
|
||||
return request.get('/system/copyright')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点信息
|
||||
*/
|
||||
export function getSiteInformation() {
|
||||
return request.get('/system/site')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取广告位信息
|
||||
*/
|
||||
export function getAdvertisementInfo(params: Record<string, any>) {
|
||||
return request.get('/system/web/advertisements', params, { showErrorMessage: false })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取导航菜单列表
|
||||
*/
|
||||
export function getNavigationList() {
|
||||
return request.get('/system/web/navigation')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取友情链接列表
|
||||
*/
|
||||
export function getFriendlyLinks() {
|
||||
return request.get('/system/web/friendly-links')
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import request from '~/utils/request'
|
||||
import type { SiteConfig, AgreementType, SmsType } from './types'
|
||||
|
||||
/**
|
||||
* 按分组获取配置
|
||||
*/
|
||||
export function getConfigByGroup(groupCode: string, options?: {
|
||||
enabled_only?: boolean
|
||||
with_metadata?: boolean
|
||||
}) {
|
||||
return request.get(`/system/config/group/${groupCode}`, options)
|
||||
}
|
||||
|
||||
/**
|
||||
* 按 code 获取配置
|
||||
*/
|
||||
export function getConfigByCode(code: string, options?: { group_code?: string}) {
|
||||
return request.get(`/system/config/code/${code}`, options)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取协议内容
|
||||
*/
|
||||
export function getAgreementContent(key: AgreementType): Promise<string> {
|
||||
return request.get(`/agreement/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
*/
|
||||
export function sendSmsVerificationCode(data: {
|
||||
type: SmsType
|
||||
phone: string
|
||||
[key: string]: any
|
||||
}): Promise<boolean> {
|
||||
return request.post(`/sms/${data.type}`, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取验证码图片
|
||||
*/
|
||||
export function getCaptchaImage() {
|
||||
return request.get('/captcha', { time: Date.now() }, {
|
||||
showSuccessMessage: false,
|
||||
returnFullResponse: true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取远程图片
|
||||
*/
|
||||
export function fetchRemoteImage(data: { url: string }): Promise<string> {
|
||||
return request.post('/image/fetch', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Base64 格式图片
|
||||
*/
|
||||
export function fetchBase64Image(data: { url: string }): Promise<string> {
|
||||
return request.post('/image/base64', data)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* 系统配置相关类型定义
|
||||
*/
|
||||
|
||||
/**
|
||||
* 配置项
|
||||
*/
|
||||
export interface ConfigItem {
|
||||
id: number
|
||||
group_code: string
|
||||
code: string
|
||||
name: string
|
||||
content: Record<string, any>
|
||||
is_sys: number
|
||||
enabled: number
|
||||
created_at: number
|
||||
updated_at: number
|
||||
remark?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 站点设置配置
|
||||
*/
|
||||
export interface SiteConfig {
|
||||
copyright: string
|
||||
icp: string
|
||||
icp_url: string
|
||||
network_security: string
|
||||
network_security_url: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 协议类型
|
||||
*/
|
||||
export type AgreementType = 'user' | 'privacy' | 'service'
|
||||
|
||||
/**
|
||||
* 短信/邮箱验证码类型
|
||||
*/
|
||||
export type SmsType = 'register' | 'login' | 'reset_password' | 'reset_password_email' | 'change_phone' | 'change_email'
|
||||
|
||||
Reference in New Issue
Block a user