export function createUserSearchState() {
|
return {
|
username: '',
|
nickname: '',
|
phone: '',
|
email: '',
|
status: void 0,
|
deptId: void 0,
|
roleIds: [],
|
code: '',
|
sex: void 0,
|
realName: '',
|
idCard: '',
|
condition: ''
|
}
|
}
|
|
export function createUserFormState() {
|
return {
|
id: void 0,
|
username: '',
|
nickname: '',
|
deptId: 0,
|
roleIds: [],
|
userRoleIds: [],
|
password: '',
|
confirmPassword: '',
|
sex: 0,
|
code: '',
|
phone: '',
|
email: '',
|
realName: '',
|
idCard: '',
|
memo: '',
|
status: 1
|
}
|
}
|
|
export function buildUserSearchParams(params = {}) {
|
const searchParams = {
|
username: params.username,
|
nickname: params.nickname,
|
phone: params.phone,
|
email: params.email,
|
status: params.status,
|
deptId: params.deptId,
|
roleIds: normalizeRoleIds(params),
|
code: params.code,
|
sex: params.sex,
|
realName: params.realName,
|
idCard: params.idCard,
|
condition: params.condition
|
}
|
|
return Object.fromEntries(
|
Object.entries(searchParams).filter(([, value]) => {
|
if (Array.isArray(value)) {
|
return value.length > 0
|
}
|
return value !== '' && value !== undefined && value !== null
|
})
|
)
|
}
|
|
export function buildUserPageQueryParams(params = {}) {
|
const { current, size, pageSize, ...filters } = params
|
return {
|
current: current || 1,
|
pageSize: pageSize || size || 20,
|
...buildUserSearchParams(filters)
|
}
|
}
|
|
export function buildUserDialogModel(record = {}) {
|
const roleIds = normalizeRoleIds(record)
|
return {
|
...createUserFormState(),
|
id: record.id !== undefined && record.id !== null && record.id !== '' ? record.id : void 0,
|
username: record.username || '',
|
nickname: record.nickname || '',
|
deptId: normalizeDeptId(record.deptId),
|
roleIds,
|
userRoleIds: [...roleIds],
|
sex: record.sex !== undefined && record.sex !== null ? record.sex : 0,
|
code: record.code || '',
|
phone: record.phone || '',
|
email: record.email || '',
|
realName: record.realName || '',
|
idCard: record.idCard || '',
|
memo: record.memo || '',
|
status: record.status !== undefined && record.status !== null ? record.status : 1
|
}
|
}
|
|
export function mergeUserDetailRecord(detail = {}, fallback = {}) {
|
const merged = {
|
...(fallback && typeof fallback === 'object' ? fallback : {}),
|
...(detail && typeof detail === 'object' ? detail : {})
|
}
|
|
if (!hasRoleSelection(detail) && hasRoleSelection(fallback)) {
|
merged.roles = fallback.roles
|
}
|
|
if (merged.deptLabel === undefined && fallback?.deptLabel) {
|
merged.deptLabel = fallback.deptLabel
|
}
|
|
if (merged.roleNames === undefined && fallback?.roleNames) {
|
merged.roleNames = fallback.roleNames
|
}
|
|
return merged
|
}
|
|
export function buildUserSavePayload(form = {}) {
|
const roleIds = normalizeRoleIds(form)
|
const password = form.password || form.newPassword || ''
|
const payload = {
|
id: form.id !== undefined && form.id !== null && form.id !== '' ? form.id : void 0,
|
username: form.username || '',
|
nickname: form.nickname || '',
|
deptId: normalizeDeptId(form.deptId),
|
roleIds,
|
sex: form.sex !== undefined && form.sex !== null ? form.sex : 0,
|
code: form.code || '',
|
phone: form.phone || '',
|
email: form.email || '',
|
realName: form.realName || '',
|
idCard: form.idCard || '',
|
memo: form.memo || '',
|
status: form.status !== undefined && form.status !== null ? form.status : 1
|
}
|
|
if (password) {
|
payload.password = password
|
}
|
|
return payload
|
}
|
|
export function normalizeUserListRow(record = {}) {
|
const roles = Array.isArray(record.roles) ? record.roles : []
|
const statusMeta = getUserStatusMeta(record.statusBool ?? record.status)
|
return {
|
...record,
|
deptLabel:
|
record.deptLabel ||
|
record.deptId$ ||
|
record.deptName ||
|
record.dept?.name ||
|
(record.deptId === 0 ? '根部门' : '-'),
|
roleNames: formatUserRoleNames(roles) || record.roleNames || '',
|
statusBool: record.statusBool !== undefined ? Boolean(record.statusBool) : statusMeta.bool,
|
statusText: statusMeta.text,
|
statusType: statusMeta.type,
|
createTimeText: record.createTime$ || record.createTime || '',
|
updateTimeText: record.updateTime$ || record.updateTime || ''
|
}
|
}
|
|
export function normalizeDeptTreeOptions(tree = []) {
|
if (!Array.isArray(tree)) {
|
return []
|
}
|
|
return tree
|
.map((node) => normalizeDeptTreeNode(node))
|
.filter(Boolean)
|
}
|
|
export function normalizeRoleOptions(roles = []) {
|
if (!Array.isArray(roles)) {
|
return []
|
}
|
|
return roles
|
.map((role) => {
|
if (!role || typeof role !== 'object') {
|
return null
|
}
|
const value = normalizeRoleId(role.id ?? role.roleId)
|
if (value === void 0) {
|
return null
|
}
|
return {
|
value,
|
label: role.name || role.roleName || role.code || ''
|
}
|
})
|
.filter(Boolean)
|
}
|
|
export function getUserStatusMeta(status) {
|
if (status === true || status === 1) {
|
return { type: 'success', text: '正常', bool: true }
|
}
|
if (status === false || status === 0) {
|
return { type: 'danger', text: '禁用', bool: false }
|
}
|
return { type: 'info', text: '未知', bool: false }
|
}
|
|
export function formatUserRoleNames(roles = []) {
|
if (!Array.isArray(roles) || roles.length === 0) {
|
return ''
|
}
|
|
const names = roles
|
.map((role) => {
|
if (typeof role === 'string') {
|
return role
|
}
|
if (role && typeof role === 'object') {
|
return role.name || role.roleName || role.code || ''
|
}
|
return ''
|
})
|
.filter(Boolean)
|
|
return names.join('、')
|
}
|
|
function normalizeDeptTreeNode(node) {
|
if (!node || typeof node !== 'object') {
|
return null
|
}
|
|
return {
|
value: normalizeDeptId(node.id ?? node.value),
|
label: node.name || node.label || '',
|
children: normalizeDeptTreeOptions(node.children)
|
}
|
}
|
|
function normalizeRoleIds(source) {
|
if (!source || typeof source !== 'object') {
|
return []
|
}
|
|
const directRoleIds = Array.isArray(source.roleIds)
|
? source.roleIds
|
: Array.isArray(source.userRoleIds)
|
? source.userRoleIds
|
: Array.isArray(source.roles)
|
? source.roles.map((item) => item?.id ?? item?.roleId)
|
: []
|
|
return Array.from(
|
new Set(
|
directRoleIds
|
.map((item) => normalizeRoleId(item))
|
.filter((item) => item !== void 0)
|
)
|
)
|
}
|
|
function normalizeDeptId(value) {
|
if (value === '' || value === null || value === undefined) {
|
return 0
|
}
|
return value
|
}
|
|
function normalizeRoleId(value) {
|
if (value === '' || value === null || value === undefined) {
|
return void 0
|
}
|
const numeric = Number(value)
|
if (Number.isNaN(numeric)) {
|
return value
|
}
|
return numeric
|
}
|
|
function hasRoleSelection(source) {
|
if (!source || typeof source !== 'object') {
|
return false
|
}
|
if (Array.isArray(source.roleIds) && source.roleIds.length > 0) {
|
return true
|
}
|
if (Array.isArray(source.userRoleIds) && source.userRoleIds.length > 0) {
|
return true
|
}
|
return Array.isArray(source.roles) && source.roles.length > 0
|
}
|