From 4dd48489a54716500f9154425843ef655f1f3661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=8C=E7=B3=96=E5=8C=85=E5=AD=90?= Date: Sat, 21 Mar 2026 11:46:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=BB=9F=E4=B8=80=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 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 --- src/utils/http.ts | 29 ++++++++++++++++++++-------- src/views/Home.vue | 8 +++----- src/views/api/Hitokoto.vue | 2 +- src/views/api/Music.vue | 2 +- src/views/api/PhotoWall.vue | 2 +- src/views/api/SourceImage.vue | 2 +- src/views/system/Article.vue | 24 ++++++++--------------- src/views/system/SystemConfig.vue | 12 ++++-------- src/views/system/SystemConfigAdd.vue | 2 +- src/views/system/SystemRole.vue | 14 +++++--------- src/views/system/SystemUser.vue | 24 ++++++++--------------- 11 files changed, 54 insertions(+), 67 deletions(-) diff --git a/src/utils/http.ts b/src/utils/http.ts index 0bd0d5f..7fa1c93 100644 --- a/src/utils/http.ts +++ b/src/utils/http.ts @@ -23,16 +23,29 @@ http.interceptors.request.use(config => { }) 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 => { - if (err.response.status >= 500) { + if (err.response?.status >= 500) { ElMessage.error('服务器内部错误') - } else if (err.response.status >= 400) { - if (typeof err.response.data.message === 'string') { - ElMessage.warning(err.response.data.message) - } else if (Array.isArray(err.response.data.message)) { - let message = err.response.data.message.join('
') - ElMessage.warning(message) + } else if (err.response?.status >= 400) { + const message = err.response.data?.message + if (typeof message === 'string') { + ElMessage.error(message) + } else if (Array.isArray(message)) { + ElMessage.error(message.join('
')) } if (err.response.status === 403) { router.push('/login') diff --git a/src/views/Home.vue b/src/views/Home.vue index 358c250..d7e08d8 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -91,11 +91,9 @@ if (!store.state.loginInfo.token) { router.push('/login') } else { 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}) - } else { - router.push('/login') - } + store.commit('login', {token: data.newToken || store.state.loginInfo.token, userInfo: data.userInfo}) + }).catch(() => { + router.push('/login') }) } diff --git a/src/views/api/Hitokoto.vue b/src/views/api/Hitokoto.vue index 4ebeb28..244cdc1 100644 --- a/src/views/api/Hitokoto.vue +++ b/src/views/api/Hitokoto.vue @@ -105,7 +105,7 @@ async function loadData() { selectedData = [] loading.value = false total.value = data.total - hitokotoData.value = data.data + hitokotoData.value = data.list } setLoadData(loadData) diff --git a/src/views/api/Music.vue b/src/views/api/Music.vue index 673d1be..afae26e 100644 --- a/src/views/api/Music.vue +++ b/src/views/api/Music.vue @@ -211,7 +211,7 @@ async function loadData() { selectedIds = [] loading.value = false total.value = data.total - musicData.value = data.data + musicData.value = data.list } setLoadData(loadData) diff --git a/src/views/api/PhotoWall.vue b/src/views/api/PhotoWall.vue index d491101..fbf067b 100644 --- a/src/views/api/PhotoWall.vue +++ b/src/views/api/PhotoWall.vue @@ -117,7 +117,7 @@ async function loadData() { selectedData = [] loading.value = false total.value = data.total - photowallData.value = data.data + photowallData.value = data.list } setLoadData(loadData) diff --git a/src/views/api/SourceImage.vue b/src/views/api/SourceImage.vue index bbe94ce..5bc77c3 100644 --- a/src/views/api/SourceImage.vue +++ b/src/views/api/SourceImage.vue @@ -112,7 +112,7 @@ async function loadData(): Promise { selectedData = [] loading.value = false total.value = data.total - sourceImageData.value = data.data + sourceImageData.value = data.list } setLoadData(loadData) diff --git a/src/views/system/Article.vue b/src/views/system/Article.vue index f234a64..4689b88 100644 --- a/src/views/system/Article.vue +++ b/src/views/system/Article.vue @@ -165,7 +165,7 @@ async function loadData() { selectedData = [] loading.value = false total.value = data.total - articleData.value = data.data + articleData.value = data.list } setLoadData(loadData) @@ -175,24 +175,16 @@ function splitWord() { return } ElMessageBox.confirm(`是否确认对选中的${selectedData.length}篇文章执行分词处理?`, '操作确认', {type: 'info'}).then(async () => { - const data = await http.put<{_ids: string[]}, any>('/api/v2/article/splitWord', {_ids: selectedData}) - if (data.status) { - ElMessage.success(data.message) - } else { - ElMessage.warning(data.message) - } - }).catch(() => {}) + const successNum = await http.put<{_ids: string[]}, any>('/api/v2/article/splitWord', {_ids: selectedData}) + ElMessage.success(`${successNum}篇文章分词处理成功`) + }) } function pullArticles() { ElMessageBox.confirm('确认拉取全部文章?', '操作确认', {type: 'info'}).then(async () => { - const data = await http.put('/api/v2/article/pull') - if (data.status) { - ElMessage.success(data.message) - loadData() - } else { - ElMessage.warning(data.message) - } - }).catch(() => {}) + const { updateCount, createCount } = await http.put('/api/v2/article/pull') + ElMessage.success(`拉取文章完成,更新 ${updateCount} 篇,创建 ${createCount} 篇`) + loadData() + }) } function dataSelect(selection: ArticleModel[]) { selectedData = selection.map(item => item._id) diff --git a/src/views/system/SystemConfig.vue b/src/views/system/SystemConfig.vue index 51e7e45..054ce8f 100644 --- a/src/views/system/SystemConfig.vue +++ b/src/views/system/SystemConfig.vue @@ -122,14 +122,10 @@ async function save() { function remove(row: SystemConfigModel) { 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}}) - if(data.code === 0) { - ElMessage.success(data.message) - loadData() - } else { - ElMessage.warning(data.message) - } - }).catch(() => {}) + await http.delete<{params: {id: string}}, any>('/api/v2/system/config/delete', {params: {id: row._id}}) + ElMessage.success('删除成功') + loadData() + }) } function datetimeFormat(dateStr: string) { diff --git a/src/views/system/SystemConfigAdd.vue b/src/views/system/SystemConfigAdd.vue index 88bec34..865a84a 100644 --- a/src/views/system/SystemConfigAdd.vue +++ b/src/views/system/SystemConfigAdd.vue @@ -36,7 +36,7 @@ const ruleValidate = computed(() => ({ { required: true, message: '请输入配置项名称', trigger: 'blur' }, { validator: (rule: object, value: string, callback: Function) => { http.get('/api/v2/system/config/exists', {params: {name: value, id: props.formData._id}}).then(data => { - if(data.data.exists) { + if(data.exists) { callback(new Error('配置项名称已存在')) } else { callback() diff --git a/src/views/system/SystemRole.vue b/src/views/system/SystemRole.vue index c8e62ef..6870c5e 100644 --- a/src/views/system/SystemRole.vue +++ b/src/views/system/SystemRole.vue @@ -143,7 +143,7 @@ async function loadData() { const data = await http.get<{params: SystemRolePage}, any>('/api/v2/system/role/list', {params: search}) loading.value = false total.value = data.total - systemRoleData.value = data.data + systemRoleData.value = data.list } setLoadData(loadData) @@ -195,14 +195,10 @@ function update(row: SystemRoleModel) { function remove(row: SystemRoleModel) { 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}}) - if(data.code === 0) { - ElMessage.success(data.message) - loadData() - } else { - ElMessage.warning(data.message) - } - }).catch(() => {}) + await http.delete<{params: {id: string}}, any>('/api/v2/system/role/delete', {params: {id: row._id}}) + ElMessage.success('删除成功') + loadData() + }) } async function save() { diff --git a/src/views/system/SystemUser.vue b/src/views/system/SystemUser.vue index 4d047db..5bb9e57 100644 --- a/src/views/system/SystemUser.vue +++ b/src/views/system/SystemUser.vue @@ -55,7 +55,7 @@ - + @@ -110,12 +110,8 @@ const ruleValidate = computed(() => ({ username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { validator: async (rule: object, value: string, callback: Function) => { - const data = await http.get('/api/v2/system/user/exists', {params: {username: value, id: formData._id}}) - if(data.data.exists) { - callback(new Error('用户名已存在')) - } else { - callback() - } + const res = await http.get('/api/v2/system/user/exists', {params: {username: value, id: formData._id}}) + res.exists ? callback(new Error('用户名已存在')) : callback() }, trigger: 'blur' } ], @@ -131,7 +127,7 @@ async function loadData() { const data = await http.get<{params: SystemUserPage}, any>('/api/v2/system/user/list', {params: search}) loading.value = false total.value = data.total - systemUserData.value = data.data + systemUserData.value = data.list } setLoadData(loadData) @@ -174,14 +170,10 @@ async function save() { function remove(row: SystemUserModel) { 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}}) - if(data.code === 0) { - ElMessage.success(data.message) - loadData() - } else { - ElMessage.warning(data.message) - } - }).catch(() => {}) + await http.delete<{params: {id: string}}, any>('/api/v2/system/user/delete', {params: {id: row._id}}) + ElMessage.success('删除成功') + loadData() + }) } function clearValidate() {