fix(data): 清理旧数据并保护服务端写入
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
import { create } from 'zustand';
|
||||
import type { Department, Member, RoleItem, PasswordRule } from '@/lib/members';
|
||||
import { DEFAULT_PASSWORD_RULE, generatePassword } from '@/lib/members';
|
||||
import { DEFAULT_PASSWORD_RULE, ensureMemberUsernames, generatePassword, generateUsernameFromName } from '@/lib/members';
|
||||
import {
|
||||
SYSTEM_ADMIN_MEMBER,
|
||||
SYSTEM_ADMIN_ROLE_ID,
|
||||
@@ -87,14 +87,15 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
roles.length !== rolesWithNewDefaults.length ||
|
||||
roles.some((role, index) => JSON.stringify(role) !== JSON.stringify(rolesWithNewDefaults[index]));
|
||||
const ensured = ensureSystemAdminMember(cached.members);
|
||||
const usernameEnsured = ensureMemberUsernames(ensured.members);
|
||||
const next = {
|
||||
departments: cached.departments,
|
||||
members: ensured.members,
|
||||
members: usernameEnsured.members,
|
||||
roles,
|
||||
passwordRule: cached.passwordRule || DEFAULT_PASSWORD_RULE,
|
||||
};
|
||||
set(next);
|
||||
if (ensured.changed || rolesChanged) saveStored(next);
|
||||
if (ensured.changed || usernameEnsured.changed || rolesChanged) saveStored(next);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -121,7 +122,13 @@ export const useMemberStore = create<MemberState>((set, get) => ({
|
||||
},
|
||||
|
||||
createMember: (data) => {
|
||||
const member: Member = { ...data, id: `m-${Date.now()}`, createdAt: new Date().toISOString().slice(0, 10) };
|
||||
const member: Member = {
|
||||
...data,
|
||||
username: data.username || generateUsernameFromName(data.name, get().members.map((m) => m.username ?? '')),
|
||||
phone: data.phone ?? '',
|
||||
id: `m-${Date.now()}`,
|
||||
createdAt: new Date().toISOString().slice(0, 10),
|
||||
};
|
||||
const members = [...get().members, member];
|
||||
set({ members });
|
||||
saveStored({ departments: get().departments, members, roles: get().roles, passwordRule: get().passwordRule });
|
||||
|
||||
Reference in New Issue
Block a user