修复重复弹msg的bug

This commit is contained in:
chenxing
2026-08-18 23:31:27 +08:00
parent 8fd5a21fcc
commit 02f1fd2b14
32 changed files with 4843 additions and 2530 deletions
+1 -1
View File
@@ -271,7 +271,7 @@ async function saveSingleApp(appid: number, add: boolean, before: number[]) {
});
Message.success(add ? "已开通" : "已取消开通");
} catch (e: any) {
Message.error(e?.message || "操作失败");
console.warn(e?.message || "操作失败");
selectedAppIds.value = [...before];
prevAppIds.value = [...before];
}
+2 -2
View File
@@ -485,7 +485,7 @@ async function onTreeCheck(node: any) {
}
syncInheritDoms(treeObj);
} catch (e: any) {
Message.error(e?.message || "操作失败");
console.warn(e?.message || "操作失败");
await reloadCurrent();
}
}
@@ -530,7 +530,7 @@ async function onInheritToggle(treeId: string, node: any, inherit: boolean) {
}
syncInheritDoms(treeObj);
} catch (e: any) {
Message.error(e?.message || "操作失败");
console.warn(e?.message || "操作失败");
await reloadCurrent();
}
}
+6 -6
View File
@@ -74,7 +74,7 @@
<script lang="ts" setup>
import { ref } from "vue";
import { Input, Message } from "view-ui-plus";
import { Input } from "view-ui-plus";
import GroupTreeSearchPanel from "@/components/GroupTreeSearchPanel.vue";
import MyTree from "@/components/MyTree.vue";
import Apis from "@/api";
@@ -188,7 +188,7 @@ async function loadGroupUsers(groupId?: number) {
try {
userList.value = (await Apis.GroupAuthz.groupUsers({ params: { groupId }, cacheFor: null })) as UserItem[];
} catch (e: any) {
Message.error(e?.message || "加载组用户失败");
console.warn(e?.message || "加载组用户失败");
userList.value = [];
} finally {
userLoading.value = false;
@@ -209,7 +209,7 @@ async function onSearchUser() {
try {
userList.value = (await Apis.GroupAuthz.searchUsers({ params: { keyword: kw }, cacheFor: null })) as UserItem[];
} catch (e: any) {
Message.error(e?.message || "搜索用户失败");
console.warn(e?.message || "搜索用户失败");
userList.value = [];
} finally {
userLoading.value = false;
@@ -249,19 +249,19 @@ async function onSelectUser(user: UserItem) {
if (permRes.status === "fulfilled") {
permissionTree.value = formatPermissionTree((permRes.value as CategoryNode[]) || []);
} else {
Message.error(permRes.reason?.message || "加载权限树失败");
console.warn(permRes.reason?.message || "加载权限树失败");
permissionTree.value = [];
}
if (deptRes.status === "fulfilled") {
deptTree.value = formatDeptTree((deptRes.value as GroupNode[]) || []);
} else {
Message.error(deptRes.reason?.message || "加载所属部门失败");
console.warn(deptRes.reason?.message || "加载所属部门失败");
deptTree.value = [];
}
if (roleRes.status === "fulfilled") {
roleTree.value = formatRoleTree((roleRes.value as RoleItem[]) || []);
} else {
Message.error(roleRes.reason?.message || "加载所属角色失败");
console.warn(roleRes.reason?.message || "加载所属角色失败");
roleTree.value = [];
}
treeLoading.value = false;
+2 -1
View File
@@ -282,7 +282,8 @@ async function removeSave(id: number) {
tableRef.value?.reloadData(OperatorEnum.del);
} catch (error) {
Message.error(error);
// 全局拦截器已弹窗,这里仅记录日志避免二次弹窗
console.warn(error);
}
},
});
+2 -1
View File
@@ -31,7 +31,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event) => {
Message.error(event?.error?.message || '新增失败');
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[AddAppContainer] 新增应用失败:', event?.error?.message || '新增失败');
});
/* ---------- 打开弹窗 ---------- */
+1 -1
View File
@@ -211,7 +211,7 @@ async function handleDelete(row: any) {
Message.success('删除成功!');
tableRef.value?.reloadData(OperatorEnum.del);
} catch (e: any) {
Message.error(e?.message || '删除失败');
console.warn(e?.message || '删除失败');
}
},
});
+2 -2
View File
@@ -89,7 +89,7 @@ async function fetchSortList() {
sortList.value = (res ?? []).slice().sort((a: any, b: any) => (a.sortNo ?? 0) - (b.sortNo ?? 0));
hasChanged.value = false;
} catch (e: any) {
Message.error(e?.message || "获取排序列表失败");
console.warn(e?.message || "获取排序列表失败");
} finally {
loading.value = false;
}
@@ -115,7 +115,7 @@ async function handleSave() {
modalVisible.value = false;
emit("saved");
} catch (e: any) {
Message.error(e?.message || "排序保存失败");
console.warn(e?.message || "排序保存失败");
} finally {
saving.value = false;
}
+2 -1
View File
@@ -31,7 +31,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event) => {
Message.error(event?.error?.message || '编辑失败');
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[EditAppContainer] 编辑应用失败:', event?.error?.message || '编辑失败');
});
/* ---------- 打开编辑弹窗 ---------- */
+1 -1
View File
@@ -215,7 +215,7 @@ async function handleDelete(item: any) {
Message.success("删除成功!");
await fetchModuleList();
} catch (e: any) {
Message.error(e?.message || '删除失败');
console.warn(e?.message || '删除失败');
}
},
});
+3 -3
View File
@@ -142,7 +142,7 @@ async function loadSettings() {
? String(d.pushRoleIds).split(',').filter(Boolean).map(Number)
: [];
} catch (e: any) {
Message.error(e?.message || '加载推送设置失败');
console.warn(e?.message || '加载推送设置失败');
} finally {
loading.value = false;
}
@@ -187,7 +187,7 @@ async function handleSave() {
show.value = false;
emit('saved');
})
.catch((e: any) => Message.error(e?.message || '保存失败'))
.catch((e: any) => console.warn(e?.message || '保存失败'))
.finally(() => (saving.value = false));
}
@@ -222,7 +222,7 @@ function doSync(interfacePath: string, loadingRef: Ref<boolean>, name: string):
cacheFor: null,
})
.then((res: any) => Message.success(res?.message || `${name}已触发`))
.catch((e: any) => Message.error(e?.message || `${name}失败`))
.catch((e: any) => console.warn(e?.message || `${name}失败`))
.finally(() => (loadingRef.value = false));
}
</script>
@@ -91,7 +91,7 @@ async function loadUserGroups(userId: number) {
pendingGroupIds.value = groupIds || [];
}
} catch (e: any) {
Message.error(e?.message || '加载用户所在组失败');
console.warn(e?.message || '加载用户所在组失败');
}
}
@@ -128,7 +128,7 @@ async function handleSubmit() {
visible.value = false;
onSuccessCallback?.();
} catch (e: any) {
Message.error(e?.message || '调整失败');
console.warn(e?.message || '调整失败');
} finally {
submitting.value = false;
}
+1 -1
View File
@@ -85,7 +85,7 @@ async function submit() {
emit('success');
visible.value = false;
} catch (e: any) {
Message.error(e?.message || '添加失败');
console.warn(e?.message || '添加失败');
} finally {
loading.value = false;
}
+1 -1
View File
@@ -83,7 +83,7 @@ async function confirmMove() {
emit('saved', { movedId: props.moveId, newPid: targetPid.value });
visible.value = false;
} catch (e: any) {
Message.error(e?.message || '移动失败');
console.warn(e?.message || '移动失败');
} finally {
loading.value = false;
}
+1 -1
View File
@@ -73,7 +73,7 @@ async function saveSort() {
emit('saved')
visible.value = false
} catch (e: any) {
Message.error(e?.message || '保存失败')
console.warn(e?.message || '保存失败')
} finally {
saving.value = false
}
+2 -2
View File
@@ -295,7 +295,7 @@ function showDeleteNode() {
Message.success('删除成功!');
refTreePanel.value?.removeNode(node?.id);
} catch (e: any) {
Message.error(e?.message || '删除失败');
console.warn(e?.message || '删除失败');
}
},
});
@@ -323,7 +323,7 @@ async function saveEditNode() {
}
editNodeModal.modal = false;
} catch (e: any) {
Message.error(e?.message || '保存失败');
console.warn(e?.message || '保存失败');
} finally {
editNodeModal.loading = false;
}
+3 -3
View File
@@ -297,7 +297,7 @@ async function handleDelete(row: any) {
Message.success('删除成功!');
tableRef.value?.reloadData(OperatorEnum.del);
} catch (e: any) {
Message.error(e?.message || '删除失败');
console.warn(e?.message || '删除失败');
}
},
});
@@ -329,7 +329,7 @@ async function openBatchDelete(checkList: number[]) {
Message.success('删除成功!');
tableRef.value?.reloadData(OperatorEnum.del);
} catch (e: any) {
Message.error(e?.message || '删除失败');
console.warn(e?.message || '删除失败');
}
},
});
@@ -365,7 +365,7 @@ async function confirmBatchStatus() {
statusModal.value = false;
tableRef.value?.reloadData(OperatorEnum.sel);
} catch (e: any) {
Message.error(e?.message || '设置失败');
console.warn(e?.message || '设置失败');
} finally {
statusSubmitting.value = false;
}
+4 -11
View File
@@ -36,8 +36,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event) => {
const msg = event?.error?.message || '新增失败';
Message.error(normalizeAccountError(msg, form.value.account));
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[AddUserContainer] 新增失败:', event?.error?.message || '新增失败');
});
/* ---------- 打开弹窗 ---------- */
@@ -73,7 +73,8 @@ async function handleSubmit(formData: Record<string, any>) {
try {
await Apis.AppRole.saveUserRoles({ data: { userId: newId, roleIds: appRolesToSave } });
} catch (e: any) {
Message.error('用户已创建,但角色属性保存失败:' + (e?.message || '未知错误'));
// 全局拦截器已弹窗,这里仅记录日志避免二次弹窗
console.warn('[AddUserContainer] 用户已创建,但角色属性保存失败:', e?.message || '未知错误');
}
}
}
@@ -98,13 +99,5 @@ function buildPayload(formData: Record<string, any>) {
};
}
/* ---------- 工具:账号重复提示标准化 ---------- */
function normalizeAccountError(msg: string, account: string): string {
if (account && /账号/.test(msg) && /(已存在|重复|已被其他用户使用)/.test(msg)) {
return `账号${account}已存在`;
}
return msg;
}
defineExpose({ open, visible });
</script>
@@ -42,8 +42,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event) => {
const msg = event?.error?.message || '编辑失败';
Message.error(normalizeAccountError(msg, form.value.account));
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[EditUserContainer] 编辑失败:', event?.error?.message || '编辑失败');
});
/* ---------- 打开编辑弹窗 ---------- */
@@ -100,7 +100,8 @@ async function open(row: any, groups: any[], curGroupId?: number | null, onSucce
roleOptions.value = list.map((r: any) => ({ id: r.id, name: r.name }));
roleOptionsLoaded.value = true;
} catch (e: any) {
Message.error('加载角色列表失败:' + (e?.message || '未知错误'));
// 全局拦截器已弹窗,这里仅记录日志避免二次弹窗
console.warn('[EditUserContainer] 加载角色列表失败:', e?.message || '未知错误');
}
// 3) 已绑定角色 -> appRoles 回填(相互独立)
@@ -118,7 +119,8 @@ async function open(row: any, groups: any[], curGroupId?: number | null, onSucce
} catch (e: any) {
// 已绑定角色加载失败:仍回填其它字段,但标记未加载成功(提交时不回写,避免误清空)
detailData.value = buildInitForm(row, [], defaultGroupId);
Message.error('加载用户已绑定角色失败:' + (e?.message || '未知错误'));
// 全局拦截器已弹窗,这里仅记录日志避免二次弹窗
console.warn('[EditUserContainer] 加载用户已绑定角色失败:', e?.message || '未知错误');
}
}
@@ -159,7 +161,8 @@ async function handleSubmit(formData: Record<string, any>) {
try {
await Apis.AppRole.saveUserRoles({ data: { userId: currentId.value as number, roleIds: appRolesToSave } });
} catch (e: any) {
Message.error('用户已更新,但角色属性保存失败:' + (e?.message || '未知错误'));
// 全局拦截器已弹窗,这里仅记录日志避免二次弹窗
console.warn('[EditUserContainer] 用户已更新,但角色属性保存失败:', e?.message || '未知错误');
}
}
}
@@ -190,13 +193,5 @@ function buildPayload(formData: Record<string, any>, id: number) {
return payload;
}
/* ---------- 工具:账号重复提示标准化 ---------- */
function normalizeAccountError(msg: string, account: string): string {
if (account && /账号/.test(msg) && /(已存在|重复|已被其他用户使用)/.test(msg)) {
return `账号${account}已存在`;
}
return msg;
}
defineExpose({ open, visible });
</script>
+1 -1
View File
@@ -80,7 +80,7 @@ async function handleSubmit() {
emit('update:visible', false);
emit('saved');
} catch (e: any) {
Message.error(e?.message || '排序设置失败');
console.warn(e?.message || '排序设置失败');
} finally {
submitting.value = false;
}
+1 -1
View File
@@ -189,7 +189,7 @@ async function handleRetry(row: any) {
Message.success('已重新投递,稍后在列表中查看结果');
tableRef.value?.refreshData();
} catch (e: any) {
Message.error(e?.message || '重试失败');
console.warn(e?.message || '重试失败');
}
}
+1 -1
View File
@@ -155,7 +155,7 @@ function handleSend() {
preview.value = res?.preview || null;
sendMessage.value = res?.message || '已发送';
})
.catch((e: any) => Message.error(e?.message || '发送失败'))
.catch((e: any) => console.warn(e?.message || '发送失败'))
.finally(() => (sending.value = false));
}
+2 -1
View File
@@ -26,7 +26,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event: any) => {
Message.error(event?.error?.message || "新增失败");
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[AddRoleContainer] 新增角色失败:', event?.error?.message || '新增失败');
});
function open(onSuccess?: () => void) {
+1 -2
View File
@@ -44,7 +44,6 @@
<script lang="ts" setup>
import { computed, ref, shallowRef, reactive, watch } from "vue";
import { Message } from "view-ui-plus";
import { debounce } from "lodash";
import Apis from "@/api";
import MyTree from "@/components/MyTree.vue";
@@ -296,7 +295,7 @@ const saveNow = async () => {
try {
await Apis.AppRole.saveRoleModules({ data: { roleId, moduleIds }, cacheFor: null });
} catch (e: any) {
Message.error(e?.message || "保存失败");
console.warn(e?.message || "保存失败");
await loadRoleModuleTree(roleId);
}
};
+2 -1
View File
@@ -27,7 +27,8 @@ onSuccess(() => {
onSuccessCallback?.();
});
onError((event: any) => {
Message.error(event?.error?.message || "编辑失败");
// 错误提示已由全局 alova 拦截器统一弹出,这里仅记录日志避免二次弹窗
console.warn('[EditRoleContainer] 编辑角色失败:', event?.error?.message || '编辑失败');
});
function open(id: number, row: any, onSuccess?: () => void) {
+1 -1
View File
@@ -87,7 +87,7 @@ async function handleDelete(row: any) {
Message.success("删除成功!");
await sendRoles();
} catch (e: any) {
Message.error(e?.message || "删除失败");
console.warn(e?.message || "删除失败");
}
},
});
+2 -2
View File
@@ -96,7 +96,7 @@ async function onTreeChange(node: any) {
const res = await Apis.GroupAuthz.groupUsers({ params: { groupId: groupId.value }, cacheFor: null });
candidates.value = (res as any[]) ?? [];
} catch (e: any) {
Message.error(e?.message || "加载用户失败");
console.warn(e?.message || "加载用户失败");
candidates.value = [];
}
}
@@ -124,7 +124,7 @@ async function save() {
emit("success");
visible.value = false;
} catch (e: any) {
Message.error(e?.message || "保存失败");
console.warn(e?.message || "保存失败");
} finally {
saving.value = false;
}
+2 -2
View File
@@ -53,7 +53,7 @@ async function loadUsers() {
const res = await Apis.AppRole.roleUsers({ params: { roleId: props.roleId }, cacheFor: null });
userList.value = (res as any[]) ?? [];
} catch (e: any) {
Message.error(e?.message || "加载角色用户失败");
console.warn(e?.message || "加载角色用户失败");
} finally {
loading.value = false;
}
@@ -72,7 +72,7 @@ function removeUser(row: any) {
Message.success("已移除");
await loadUsers();
} catch (e: any) {
Message.error(e?.message || "移除失败");
console.warn(e?.message || "移除失败");
}
},
});