refactor: 统一接口响应格式处理
- 修改 axios 响应拦截器,统一处理包装后的响应格式: - code === 0: 返回 data 中的实际数据 - code === -1: ElMessage.error 提示 message 并 reject - 其他情况: 兼容原始响应格式 - 更新各页面数据取值方式: - 分页列表: data.data → data.list - SystemUser.vue, SystemRole.vue, Article.vue - Music.vue, Hitokoto.vue, PhotoWall.vue, SourceImage.vue - SystemConfigAdd.vue: data.data.exists → data.exists - Home.vue: 简化 verifyToken 响应处理 - SystemConfig.vue: 简化 save 响应处理 - SystemRole.vue/SystemUser.vue: 简化 delete 响应处理 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
4bad97a81d
commit
4dd48489a5
@ -23,16 +23,29 @@ http.interceptors.request.use(config => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
http.interceptors.response.use(res => {
|
http.interceptors.response.use(res => {
|
||||||
return res.data
|
const responseBody = res.data
|
||||||
|
// 统一响应格式处理
|
||||||
|
switch (responseBody.code) {
|
||||||
|
case 0:
|
||||||
|
// 成功,直接返回数据
|
||||||
|
return responseBody.data
|
||||||
|
case -1:
|
||||||
|
// 失败,显示错误信息
|
||||||
|
ElMessage.error(responseBody.message || '请求失败')
|
||||||
|
return Promise.reject(new Error(responseBody.message || '请求失败'))
|
||||||
|
default:
|
||||||
|
// 其他情况,兼容没有包装格式的响应
|
||||||
|
return res.data
|
||||||
|
}
|
||||||
}, err => {
|
}, err => {
|
||||||
if (err.response.status >= 500) {
|
if (err.response?.status >= 500) {
|
||||||
ElMessage.error('服务器内部错误')
|
ElMessage.error('服务器内部错误')
|
||||||
} else if (err.response.status >= 400) {
|
} else if (err.response?.status >= 400) {
|
||||||
if (typeof err.response.data.message === 'string') {
|
const message = err.response.data?.message
|
||||||
ElMessage.warning(err.response.data.message)
|
if (typeof message === 'string') {
|
||||||
} else if (Array.isArray(err.response.data.message)) {
|
ElMessage.error(message)
|
||||||
let message = err.response.data.message.join('<br/>')
|
} else if (Array.isArray(message)) {
|
||||||
ElMessage.warning(message)
|
ElMessage.error(message.join('<br/>'))
|
||||||
}
|
}
|
||||||
if (err.response.status === 403) {
|
if (err.response.status === 403) {
|
||||||
router.push('/login')
|
router.push('/login')
|
||||||
|
|||||||
@ -91,11 +91,9 @@ if (!store.state.loginInfo.token) {
|
|||||||
router.push('/login')
|
router.push('/login')
|
||||||
} else {
|
} else {
|
||||||
http.post<{token: string}, any>('/api/v2/common/verifyToken', {token: store.state.loginInfo.token}).then(data => {
|
http.post<{token: string}, any>('/api/v2/common/verifyToken', {token: store.state.loginInfo.token}).then(data => {
|
||||||
if (data.status) {
|
store.commit('login', {token: data.newToken || store.state.loginInfo.token, userInfo: data.userInfo})
|
||||||
store.commit('login', {token: data.newToken || store.state.loginInfo.token, userInfo: data.userInfo})
|
}).catch(() => {
|
||||||
} else {
|
router.push('/login')
|
||||||
router.push('/login')
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -105,7 +105,7 @@ async function loadData() {
|
|||||||
selectedData = []
|
selectedData = []
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
hitokotoData.value = data.data
|
hitokotoData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
|
|||||||
@ -211,7 +211,7 @@ async function loadData() {
|
|||||||
selectedIds = []
|
selectedIds = []
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
musicData.value = data.data
|
musicData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
|
|||||||
@ -117,7 +117,7 @@ async function loadData() {
|
|||||||
selectedData = []
|
selectedData = []
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
photowallData.value = data.data
|
photowallData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
|
|||||||
@ -112,7 +112,7 @@ async function loadData(): Promise<void> {
|
|||||||
selectedData = []
|
selectedData = []
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
sourceImageData.value = data.data
|
sourceImageData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
|
|||||||
@ -165,7 +165,7 @@ async function loadData() {
|
|||||||
selectedData = []
|
selectedData = []
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
articleData.value = data.data
|
articleData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
@ -175,24 +175,16 @@ function splitWord() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
ElMessageBox.confirm(`是否确认对选中的${selectedData.length}篇文章执行分词处理?`, '操作确认', {type: 'info'}).then(async () => {
|
ElMessageBox.confirm(`是否确认对选中的${selectedData.length}篇文章执行分词处理?`, '操作确认', {type: 'info'}).then(async () => {
|
||||||
const data = await http.put<{_ids: string[]}, any>('/api/v2/article/splitWord', {_ids: selectedData})
|
const successNum = await http.put<{_ids: string[]}, any>('/api/v2/article/splitWord', {_ids: selectedData})
|
||||||
if (data.status) {
|
ElMessage.success(`${successNum}篇文章分词处理成功`)
|
||||||
ElMessage.success(data.message)
|
})
|
||||||
} else {
|
|
||||||
ElMessage.warning(data.message)
|
|
||||||
}
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
function pullArticles() {
|
function pullArticles() {
|
||||||
ElMessageBox.confirm('确认拉取全部文章?', '操作确认', {type: 'info'}).then(async () => {
|
ElMessageBox.confirm('确认拉取全部文章?', '操作确认', {type: 'info'}).then(async () => {
|
||||||
const data = await http.put<never, any>('/api/v2/article/pull')
|
const { updateCount, createCount } = await http.put<never, any>('/api/v2/article/pull')
|
||||||
if (data.status) {
|
ElMessage.success(`拉取文章完成,更新 ${updateCount} 篇,创建 ${createCount} 篇`)
|
||||||
ElMessage.success(data.message)
|
loadData()
|
||||||
loadData()
|
})
|
||||||
} else {
|
|
||||||
ElMessage.warning(data.message)
|
|
||||||
}
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
function dataSelect(selection: ArticleModel[]) {
|
function dataSelect(selection: ArticleModel[]) {
|
||||||
selectedData = selection.map(item => item._id)
|
selectedData = selection.map(item => item._id)
|
||||||
|
|||||||
@ -122,14 +122,10 @@ async function save() {
|
|||||||
|
|
||||||
function remove(row: SystemConfigModel) {
|
function remove(row: SystemConfigModel) {
|
||||||
ElMessageBox.confirm(`是否确认删除 ${row.name} 配置项?`, '确认删除', {type: 'warning'}).then(async () => {
|
ElMessageBox.confirm(`是否确认删除 ${row.name} 配置项?`, '确认删除', {type: 'warning'}).then(async () => {
|
||||||
const data = await http.delete<{params: {id: string}}, any>('/api/v2/system/config/delete', {params: {id: row._id}})
|
await http.delete<{params: {id: string}}, any>('/api/v2/system/config/delete', {params: {id: row._id}})
|
||||||
if(data.code === 0) {
|
ElMessage.success('删除成功')
|
||||||
ElMessage.success(data.message)
|
loadData()
|
||||||
loadData()
|
})
|
||||||
} else {
|
|
||||||
ElMessage.warning(data.message)
|
|
||||||
}
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function datetimeFormat(dateStr: string) {
|
function datetimeFormat(dateStr: string) {
|
||||||
|
|||||||
@ -36,7 +36,7 @@ const ruleValidate = computed(() => ({
|
|||||||
{ required: true, message: '请输入配置项名称', trigger: 'blur' },
|
{ required: true, message: '请输入配置项名称', trigger: 'blur' },
|
||||||
{ validator: (rule: object, value: string, callback: Function) => {
|
{ validator: (rule: object, value: string, callback: Function) => {
|
||||||
http.get<any, any>('/api/v2/system/config/exists', {params: {name: value, id: props.formData._id}}).then(data => {
|
http.get<any, any>('/api/v2/system/config/exists', {params: {name: value, id: props.formData._id}}).then(data => {
|
||||||
if(data.data.exists) {
|
if(data.exists) {
|
||||||
callback(new Error('配置项名称已存在'))
|
callback(new Error('配置项名称已存在'))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
|
|||||||
@ -143,7 +143,7 @@ async function loadData() {
|
|||||||
const data = await http.get<{params: SystemRolePage}, any>('/api/v2/system/role/list', {params: search})
|
const data = await http.get<{params: SystemRolePage}, any>('/api/v2/system/role/list', {params: search})
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
systemRoleData.value = data.data
|
systemRoleData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
@ -195,14 +195,10 @@ function update(row: SystemRoleModel) {
|
|||||||
|
|
||||||
function remove(row: SystemRoleModel) {
|
function remove(row: SystemRoleModel) {
|
||||||
ElMessageBox.confirm(`是否确认删除 ${row.name} 角色?`, '确认删除', {type: 'warning'}).then(async () => {
|
ElMessageBox.confirm(`是否确认删除 ${row.name} 角色?`, '确认删除', {type: 'warning'}).then(async () => {
|
||||||
const data = await http.delete<{params: {id: string}}, any>('/api/v2/system/role/delete', {params: {id: row._id}})
|
await http.delete<{params: {id: string}}, any>('/api/v2/system/role/delete', {params: {id: row._id}})
|
||||||
if(data.code === 0) {
|
ElMessage.success('删除成功')
|
||||||
ElMessage.success(data.message)
|
loadData()
|
||||||
loadData()
|
})
|
||||||
} else {
|
|
||||||
ElMessage.warning(data.message)
|
|
||||||
}
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function save() {
|
async function save() {
|
||||||
|
|||||||
@ -55,7 +55,7 @@
|
|||||||
<el-form-item label="昵称" prop="realname">
|
<el-form-item label="昵称" prop="realname">
|
||||||
<el-input v-model="formData.realname" />
|
<el-input v-model="formData.realname" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色" prop="realname">
|
<el-form-item label="角色" prop="roleIds">
|
||||||
<el-select v-model="formData.roleIds" multiple >
|
<el-select v-model="formData.roleIds" multiple >
|
||||||
<el-option v-for="role in roles" :key="role._id" :value="role._id" :label="role.name"></el-option>
|
<el-option v-for="role in roles" :key="role._id" :value="role._id" :label="role.name"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -110,12 +110,8 @@ const ruleValidate = computed(() => ({
|
|||||||
username: [
|
username: [
|
||||||
{ required: true, message: '请输入用户名', trigger: 'blur' },
|
{ required: true, message: '请输入用户名', trigger: 'blur' },
|
||||||
{ validator: async (rule: object, value: string, callback: Function) => {
|
{ validator: async (rule: object, value: string, callback: Function) => {
|
||||||
const data = await http.get<any, any>('/api/v2/system/user/exists', {params: {username: value, id: formData._id}})
|
const res = await http.get<any, any>('/api/v2/system/user/exists', {params: {username: value, id: formData._id}})
|
||||||
if(data.data.exists) {
|
res.exists ? callback(new Error('用户名已存在')) : callback()
|
||||||
callback(new Error('用户名已存在'))
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
}, trigger: 'blur'
|
}, trigger: 'blur'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -131,7 +127,7 @@ async function loadData() {
|
|||||||
const data = await http.get<{params: SystemUserPage}, any>('/api/v2/system/user/list', {params: search})
|
const data = await http.get<{params: SystemUserPage}, any>('/api/v2/system/user/list', {params: search})
|
||||||
loading.value = false
|
loading.value = false
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
systemUserData.value = data.data
|
systemUserData.value = data.list
|
||||||
}
|
}
|
||||||
setLoadData(loadData)
|
setLoadData(loadData)
|
||||||
|
|
||||||
@ -174,14 +170,10 @@ async function save() {
|
|||||||
|
|
||||||
function remove(row: SystemUserModel) {
|
function remove(row: SystemUserModel) {
|
||||||
ElMessageBox.confirm(`是否确认删除 ${row.username} 用户?`, '确认删除', {type: 'warning'}).then(async () => {
|
ElMessageBox.confirm(`是否确认删除 ${row.username} 用户?`, '确认删除', {type: 'warning'}).then(async () => {
|
||||||
const data = await http.delete<{params: {id: string}}, any>('/api/v2/system/user/delete', {params: {id: row._id}})
|
await http.delete<{params: {id: string}}, any>('/api/v2/system/user/delete', {params: {id: row._id}})
|
||||||
if(data.code === 0) {
|
ElMessage.success('删除成功')
|
||||||
ElMessage.success(data.message)
|
loadData()
|
||||||
loadData()
|
})
|
||||||
} else {
|
|
||||||
ElMessage.warning(data.message)
|
|
||||||
}
|
|
||||||
}).catch(() => {})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function clearValidate() {
|
function clearValidate() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user