fix(member): 修复成员密码保存失败误报成功
This commit is contained in:
@@ -43,15 +43,15 @@ interface MemberState {
|
||||
updateDepartment: (id: string, data: Partial<Department>) => void;
|
||||
deleteDepartment: (id: string) => void;
|
||||
createMember: (data: Omit<Member, 'id' | 'createdAt'>) => void;
|
||||
updateMember: (id: string, data: Partial<Member>) => void;
|
||||
updateMember: (id: string, data: Partial<Member>) => Promise<void>;
|
||||
deleteMember: (id: string) => void;
|
||||
createRole: (data: Omit<RoleItem, 'id' | 'createdAt'>) => void;
|
||||
updateRole: (id: string, data: Partial<RoleItem>) => void;
|
||||
deleteRole: (id: string) => void;
|
||||
}
|
||||
|
||||
function saveStored(state: { departments: Department[]; members: Member[]; roles: RoleItem[]; passwordRule: PasswordRule }) {
|
||||
saveServerData('members', state).catch(() => {});
|
||||
async function saveStored(state: { departments: Department[]; members: Member[]; roles: RoleItem[]; passwordRule: PasswordRule }) {
|
||||
await saveServerData('members', state);
|
||||
}
|
||||
|
||||
async function loadStored(): Promise<{ departments: Department[]; members: Member[]; roles: RoleItem[]; passwordRule: PasswordRule } | null> {
|
||||
@@ -101,7 +101,7 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
passwordRule: cached.passwordRule || DEFAULT_PASSWORD_RULE,
|
||||
};
|
||||
set({ ...next, loaded: true });
|
||||
if (ensured.changed || usernameEnsured.changed || rolesChanged) saveStored(next);
|
||||
if (ensured.changed || usernameEnsured.changed || rolesChanged) void saveStored(next).catch(() => {});
|
||||
} else {
|
||||
set({ loaded: true });
|
||||
}
|
||||
@@ -109,24 +109,24 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
|
||||
updatePasswordRule: (rule) => {
|
||||
set({ passwordRule: rule });
|
||||
saveStored({ departments: get().departments, members: get().members, roles: get().roles, passwordRule: rule });
|
||||
void saveStored({ departments: get().departments, members: get().members, roles: get().roles, passwordRule: rule }).catch(() => {});
|
||||
},
|
||||
|
||||
createDepartment: (data) => {
|
||||
const dept: Department = { ...data, id: `dept-${Date.now()}`, createdAt: new Date().toISOString().slice(0, 10) };
|
||||
const departments = [...get().departments, dept];
|
||||
set({ departments });
|
||||
saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
updateDepartment: (id, data) => {
|
||||
const departments = get().departments.map((d) => d.id === id ? { ...d, ...data } : d);
|
||||
set({ departments });
|
||||
saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
deleteDepartment: (id) => {
|
||||
const departments = get().departments.filter((d) => d.id !== id && d.parentId !== id);
|
||||
set({ departments });
|
||||
saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments, members: get().members, roles: get().roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
|
||||
createMember: (data) => {
|
||||
@@ -139,20 +139,26 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
};
|
||||
const members = [...get().members, member];
|
||||
set({ members });
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
updateMember: (id, data) => {
|
||||
updateMember: async (id, data) => {
|
||||
const previousMembers = get().members;
|
||||
const safeData = sanitizeSystemAdminPatch(id, data);
|
||||
const updatedMembers = get().members.map((m) => m.id === id ? { ...m, ...safeData } : m);
|
||||
const ensured = ensureSystemAdminMember(updatedMembers);
|
||||
set({ members: ensured.members });
|
||||
saveStored({ departments: get().departments, members: ensured.members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
try {
|
||||
await saveStored({ departments: get().departments, members: ensured.members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
} catch (error) {
|
||||
set({ members: previousMembers });
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
deleteMember: (id) => {
|
||||
if (!canDeleteSystemMember(id)) return;
|
||||
const members = get().members.filter((m) => m.id !== id);
|
||||
set({ members });
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
|
||||
createRole: (data) => {
|
||||
@@ -164,7 +170,7 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
};
|
||||
const roles = [...get().roles, role];
|
||||
set({ roles });
|
||||
saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
updateRole: (id, data) => {
|
||||
const roles = get().roles.map((r) => {
|
||||
@@ -177,12 +183,12 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
return { ...r, ...data };
|
||||
});
|
||||
set({ roles });
|
||||
saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
deleteRole: (id) => {
|
||||
if (id === SYSTEM_ADMIN_ROLE_ID) return;
|
||||
const roles = get().roles.filter((r) => r.id !== id);
|
||||
set({ roles });
|
||||
saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule });
|
||||
void saveStored({ departments: get().departments, members: get().members, roles, passwordRule: get().passwordRule }).catch(() => {});
|
||||
},
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user