Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f519767af |
@@ -82,6 +82,10 @@ request.interceptors.response.use(
|
||||
localStorage.removeItem('token')
|
||||
const { default: router } = await import('@/router')
|
||||
router.push('/login')
|
||||
} else if (error.response?.data?.message) {
|
||||
message.error(error.response.data.message)
|
||||
} else if (error.message && !error.message.includes('canceled')) {
|
||||
message.error(error.message)
|
||||
}
|
||||
return Promise.reject(error)
|
||||
}
|
||||
|
||||
@@ -83,8 +83,8 @@ const onAddSubmit = handleAddSubmit(async (values) => {
|
||||
toast.success('生成卡密成功')
|
||||
addDialogOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '生成卡密失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
addLoading.value = false
|
||||
}
|
||||
@@ -97,8 +97,8 @@ function handleBan(id: number) {
|
||||
await cardApi.ban(id)
|
||||
toast.success('禁用成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '禁用失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -198,8 +198,8 @@ async function handleFetchSystemLeaves() {
|
||||
} else {
|
||||
reportStep.value = 2
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '获取请假列表失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
systemLeavesLoading.value = false
|
||||
}
|
||||
@@ -265,8 +265,8 @@ async function handleImageUpload(event: Event) {
|
||||
} else {
|
||||
toast.error('上传失败')
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '图片上传失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
uploadLoading.value = false
|
||||
input.value = ''
|
||||
@@ -294,8 +294,8 @@ async function handleReport() {
|
||||
toast.success('销假成功')
|
||||
reportDialogOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '销假失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
reportLoading.value = false
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ async function handleImageUpload(field: CpTaskFormItem, event: Event) {
|
||||
list[idx] = { ...list[idx], url: previewUrl, previewUrl, status: 'finished' }
|
||||
updateImageContent(field)
|
||||
} else { removeImage(field, id); toast.error('上传失败') }
|
||||
} catch { removeImage(field, id); toast.error('上传失败') }
|
||||
} catch { removeImage(field, id) }
|
||||
}
|
||||
input.value = ''
|
||||
}
|
||||
@@ -262,8 +262,8 @@ async function loadForm() {
|
||||
}
|
||||
if (field.type === 4) initImageField(field)
|
||||
})
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '获取表单数据失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally { formLoading.value = false }
|
||||
}
|
||||
|
||||
@@ -281,8 +281,8 @@ async function loadExecute() {
|
||||
execute_hour: data.execute_hour ?? 8, execute_minute: data.execute_minute ?? 0,
|
||||
execute_days: Array.isArray(data.execute_days) && data.execute_days.length ? data.execute_days : [1, 2, 3, 4, 5, 6, 7],
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '获取执行参数失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally { executeLoading.value = false }
|
||||
}
|
||||
|
||||
@@ -298,8 +298,8 @@ async function saveForm() {
|
||||
const formData = formItems.value.map(f => ({ ...f, content: f.content || '', otherValue: f.otherValue || '' }))
|
||||
await cpTaskApi.updateForm(taskId.value, formData)
|
||||
toast.success('表单保存成功')
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '保存表单失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally { savingForm.value = false }
|
||||
}
|
||||
|
||||
@@ -314,8 +314,8 @@ async function saveExecute() {
|
||||
execute_days: executeParams.value.execute_days,
|
||||
})
|
||||
toast.success('执行参数保存成功')
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '保存执行参数失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally { savingExecute.value = false }
|
||||
}
|
||||
|
||||
|
||||
@@ -139,8 +139,8 @@ async function handleQueryRecent() {
|
||||
const res = await cpTaskApi.getRecent({ userId: addUserId.value, type: addType.value })
|
||||
recentTasks.value = res.data || []
|
||||
addStep.value = 2
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '查询失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
recentLoading.value = false
|
||||
}
|
||||
@@ -181,8 +181,8 @@ async function handleSaveTask() {
|
||||
toast.success('添加任务成功')
|
||||
addDialogOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '添加任务失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
addLoading.value = false
|
||||
}
|
||||
@@ -194,8 +194,8 @@ async function handleExecuteNow(id: number) {
|
||||
await cpTaskApi.executeNow(id)
|
||||
toast.success('任务已开始执行')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '执行失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,8 +206,8 @@ function handlePause(id: number, currentStatus: string) {
|
||||
await cpTaskApi.pause(id)
|
||||
toast.success(`${action}成功`)
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || `${action}失败`)
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -218,8 +218,8 @@ function handleDelete(id: number) {
|
||||
await cpTaskApi.delete(id)
|
||||
toast.success('删除成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ const onAddByPasswordSubmit = handleAddSubmit(async (values) => {
|
||||
tableRef.value?.refresh()
|
||||
}
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '添加账号失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
addLoading.value = false
|
||||
}
|
||||
@@ -238,7 +238,7 @@ async function onCaptchaConfirm(result: { captchaKey: string; dots: Array<{ x: n
|
||||
mobileCodeSent.value = true
|
||||
startCountdown()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '获取验证码失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
mobileCodeLoading.value = false
|
||||
addDialogOpen.value = true
|
||||
@@ -257,7 +257,6 @@ async function onCaptchaConfirm(result: { captchaKey: string; dots: Array<{ x: n
|
||||
toast.success('添加账号成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '添加失败')
|
||||
addDialogOpen.value = true
|
||||
} finally {
|
||||
mobileAddLoading.value = false
|
||||
@@ -308,7 +307,7 @@ async function onConfirmAddSubmit() {
|
||||
dynamicCode.value = ''
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '验证失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
confirmAddLoading.value = false
|
||||
}
|
||||
@@ -350,7 +349,7 @@ const onChangePwdSubmit = handleChangePwdSubmit(async (values) => {
|
||||
toast.success('密码修改成功')
|
||||
changePwdOpen.value = false
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '修改密码失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
changePwdLoading.value = false
|
||||
}
|
||||
@@ -364,7 +363,7 @@ function handleDelete(id: number) {
|
||||
toast.success('删除成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -399,7 +398,7 @@ async function onCustomDeviceSubmit() {
|
||||
customDeviceOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '设置失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
customDeviceLoading.value = false
|
||||
}
|
||||
@@ -418,7 +417,6 @@ async function openQrDialog() {
|
||||
const res = await cpUserApi.generateQr()
|
||||
qrUuid.value = res.data.uuid
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '生成二维码失败')
|
||||
qrDialogOpen.value = false
|
||||
} finally {
|
||||
qrLoading.value = false
|
||||
|
||||
@@ -93,8 +93,14 @@ onMounted(() => {
|
||||
<template>
|
||||
<div class="space-y-4 sm:space-y-6">
|
||||
<!-- 公告 -->
|
||||
<Card v-if="announcement" class="announcement-card border-primary/20 bg-primary/5">
|
||||
<CardContent class="p-3 sm:p-4">
|
||||
<Card v-if="announcementLoading">
|
||||
<CardContent class="space-y-2">
|
||||
<div class="h-4 w-3/4 rounded bg-muted animate-pulse" />
|
||||
<div class="h-4 w-1/2 rounded bg-muted animate-pulse" />
|
||||
</CardContent>
|
||||
</Card>
|
||||
<Card v-else-if="announcement">
|
||||
<CardContent>
|
||||
<MdPreview :modelValue="announcement" previewTheme="github" class="announcement-preview" />
|
||||
</CardContent>
|
||||
</Card>
|
||||
@@ -221,8 +227,13 @@ onMounted(() => {
|
||||
<style scoped>
|
||||
.announcement-preview :deep(.md-editor-preview-wrapper) {
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
}
|
||||
.announcement-preview :deep(.md-editor-preview) {
|
||||
font-size: 0.875rem;
|
||||
background: transparent;
|
||||
}
|
||||
.announcement-preview :deep(.md-editor-preview .md-editor-admonition) {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -61,8 +61,8 @@ const onSubmit = handleSubmit(async (values) => {
|
||||
})
|
||||
toast.success('密码重置成功,请重新登录')
|
||||
setTimeout(() => router.push('/login'), 1500)
|
||||
} catch (err: any) {
|
||||
toast.error(err?.response?.data?.message || err?.message || '重置失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ async function fetchData() {
|
||||
}
|
||||
aiTypes.value = typesRes.data?.types ?? []
|
||||
} catch {
|
||||
toast.error('获取 AI 配置失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -80,8 +80,8 @@ const onSave = handleSubmit(async (values) => {
|
||||
apiKey: values.apiKey,
|
||||
})
|
||||
toast.success('AI 配置保存成功')
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '保存失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
saveLoading.value = false
|
||||
}
|
||||
@@ -105,7 +105,7 @@ const onTest = handleSubmit(async (values) => {
|
||||
}
|
||||
} catch (err: any) {
|
||||
testResult.value = { success: false, message: err.response?.data?.message || '测试请求失败' }
|
||||
toast.error(testResult.value.message)
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
testLoading.value = false
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ async function fetchAnnouncement() {
|
||||
const val = res.data?.value ?? ''
|
||||
announcementContent.value = val
|
||||
originalAnnouncement.value = val
|
||||
} catch (err: any) {
|
||||
if (err.response?.status !== 404) toast.error('获取公告失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
announcementLoading.value = false
|
||||
}
|
||||
@@ -44,7 +44,7 @@ async function saveAnnouncement() {
|
||||
toast.success('公告保存成功')
|
||||
originalAnnouncement.value = announcementContent.value
|
||||
} catch {
|
||||
toast.error('保存失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
announcementSaving.value = false
|
||||
}
|
||||
@@ -82,7 +82,7 @@ async function saveRegisterConfig() {
|
||||
})
|
||||
toast.success('注册开关保存成功')
|
||||
} catch {
|
||||
toast.error('保存失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
registerSaving.value = false
|
||||
}
|
||||
@@ -119,7 +119,7 @@ async function savePriceConfig() {
|
||||
await systemPriceApi.update(priceConfig.value)
|
||||
toast.success('费率配置保存成功')
|
||||
} catch {
|
||||
toast.error('保存失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
priceSaving.value = false
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ async function fetchMenuTree() {
|
||||
updateChildMenuList()
|
||||
}
|
||||
} catch {
|
||||
toast.error('获取菜单树失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -199,8 +199,8 @@ function handleDelete(id: number, name: string) {
|
||||
toast.success('删除成功')
|
||||
if (selectedMenu.value?.id === id) selectedMenu.value = null
|
||||
fetchMenuTree()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -298,8 +298,8 @@ const onMenuSubmit = handleMenuSubmit(async (values) => {
|
||||
fetchMenuTree()
|
||||
// 刷新按钮列表
|
||||
if (selectedMenu.value) loadButtons(selectedMenu.value.id)
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '操作失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
editLoading.value = false
|
||||
}
|
||||
@@ -313,8 +313,8 @@ function handleDeleteBtn(id: number, name: string) {
|
||||
toast.success('删除成功')
|
||||
if (selectedMenu.value) loadButtons(selectedMenu.value.id)
|
||||
fetchMenuTree()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ async function fetchPrice() {
|
||||
})
|
||||
}
|
||||
} catch {
|
||||
toast.error('获取费率配置失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -63,8 +63,8 @@ const onSave = handleSubmit(async (values) => {
|
||||
try {
|
||||
await systemPriceApi.update(values)
|
||||
toast.success('费率配置保存成功')
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '保存失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
saveLoading.value = false
|
||||
}
|
||||
|
||||
@@ -104,8 +104,8 @@ const onRoleSubmit = handleRoleSubmit(async (values) => {
|
||||
}
|
||||
editDialogOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '操作失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
editLoading.value = false
|
||||
}
|
||||
@@ -118,8 +118,8 @@ function handleDelete(id: number) {
|
||||
await systemRoleApi.delete(id)
|
||||
toast.success('删除成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -157,7 +157,7 @@ async function openMenuAuth(roleId: number) {
|
||||
const ids = roleMenuRes.data
|
||||
selectedMenuIds.value = Array.isArray(ids) ? ids : []
|
||||
} catch {
|
||||
toast.error('获取菜单数据失败')
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
menuLoading.value = false
|
||||
}
|
||||
@@ -178,8 +178,8 @@ async function submitMenuAuth() {
|
||||
await systemRoleApi.authorizeMenu(menuRoleId.value, selectedMenuIds.value)
|
||||
toast.success('菜单授权成功')
|
||||
menuDialogOpen.value = false
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '菜单授权失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
menuLoading.value = false
|
||||
}
|
||||
|
||||
@@ -81,8 +81,8 @@ const onResetPwdSubmit = handleResetPwdSubmit(async (values) => {
|
||||
await systemUserApi.resetPassword(resetPwdUserId.value, values.password)
|
||||
toast.success('密码重置成功')
|
||||
resetPwdOpen.value = false
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '密码重置失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
resetPwdLoading.value = false
|
||||
}
|
||||
@@ -105,8 +105,8 @@ async function openRoleDialog(userId: number, currentRoles?: any[]) {
|
||||
roleList.value = Array.isArray(data) ? data : (data as any)?.pageData ?? []
|
||||
// 预选用户当前角色
|
||||
selectedRoleIds.value = currentRoles?.map((r: any) => r.id) ?? []
|
||||
} catch (err: any) {
|
||||
toast.error('获取角色列表失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
roleLoading.value = false
|
||||
}
|
||||
@@ -128,8 +128,8 @@ async function submitRoleAuth() {
|
||||
toast.success('角色授权成功')
|
||||
roleDialogOpen.value = false
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '角色授权失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
roleLoading.value = false
|
||||
}
|
||||
@@ -144,8 +144,8 @@ async function handleBlock(id: number, currentBlock: boolean) {
|
||||
await systemUserApi.blockUser(id, willBlock)
|
||||
toast.success(`${action}成功`)
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || `${action}失败`)
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -156,8 +156,8 @@ async function handleDelete(id: number) {
|
||||
await systemUserApi.deleteUser(id)
|
||||
toast.success('删除成功')
|
||||
tableRef.value?.refresh()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '删除失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -50,8 +50,8 @@ const onPasswordSubmit = handlePasswordSubmit(async (values) => {
|
||||
await userApi.resetPassword(values)
|
||||
toast.success('密码修改成功')
|
||||
resetPasswordForm()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '密码修改失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
passwordLoading.value = false
|
||||
}
|
||||
@@ -69,8 +69,8 @@ async function handleRecharge() {
|
||||
toast.success('充值成功')
|
||||
cardCode.value = ''
|
||||
userStore.fetchProfile()
|
||||
} catch (err: any) {
|
||||
toast.error(err.response?.data?.message || '充值失败')
|
||||
} catch {
|
||||
// 全局拦截器已处理错误提示
|
||||
} finally {
|
||||
rechargeLoading.value = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user