实现团队成员更新功能和筛选功能

This commit is contained in:
马诗敏 2025-08-11 15:54:44 +08:00
parent a80a23fd74
commit e60e4cf095
3 changed files with 677 additions and 139 deletions

View File

@ -156,14 +156,14 @@ export interface ProjectDetailResp extends ProjectCard {
export interface TeamMemberResp {
id: string | number
name: string
position: string
roleType: string
phone?: string
email?: string
avatar?: string
joinDate?: string
performance?: number
remark?: string
status?: 'available' | 'busy' | 'offline'
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
}
/** 后端返回的团队成员数据结构 */
@ -182,7 +182,7 @@ export interface BackendTeamMemberResp {
phone: string | null
email: string | null
position: string
status: 'ACTIVE' | 'BUSY' | 'OFFLINE'
status: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
skills: string
joinDate: string
remark: string
@ -201,11 +201,11 @@ export interface BackendTeamMemberResp {
export interface TeamMemberQuery extends PageQuery {
projectId: string | number
name?: string // 姓名搜索
position?: string // 岗位筛选
position?: string // 项目岗位筛选
status?: string // 状态筛选
joinDateStart?: string // 入职日期开始
joinDateEnd?: string // 入职日期结束
sortBy?: 'name' | 'position' | 'joinDate' | 'status' // 排序字段
sortBy?: 'name' | 'roleType' | 'joinDate' | 'status' // 排序字段
sortOrder?: 'asc' | 'desc' // 排序方向
}
@ -213,33 +213,33 @@ export interface TeamMemberQuery extends PageQuery {
export interface TeamMemberExportQuery {
projectId: string | number
name?: string // 姓名搜索
position?: string // 岗位筛选
position?: string // 项目岗位筛选
status?: string // 状态筛选
joinDateStart?: string // 入职日期开始
joinDateEnd?: string // 入职日期结束
sortBy?: 'name' | 'position' | 'joinDate' | 'status' // 排序字段
sortBy?: 'name' | 'roleType' | 'joinDate' | 'status' // 排序字段
sortOrder?: 'asc' | 'desc' // 排序方向
}
/** 创建团队成员表单 */
export interface CreateTeamMemberForm {
projectId: string | number
roleType: string // 项目岗位
name: string
phone: string
email?: string
position: string
status?: 'available' | 'busy' | 'offline'
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
joinDate?: string
remark?: string
}
/** 更新团队成员表单 */
export interface UpdateTeamMemberForm {
roleType?: string // 项目岗位
name?: string
phone?: string
email?: string
position?: string
status?: 'available' | 'busy' | 'offline'
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
joinDate?: string
remark?: string
}
@ -250,7 +250,7 @@ export interface UpdateTeamMemberForm {
export interface BatchOperationForm {
ids: (string | number)[]
operation: 'delete' | 'updateStatus'
status?: 'available' | 'busy' | 'offline'
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
}
/** 导入结果响应 */

View File

@ -265,7 +265,7 @@
<div class="member-position">{{ member.position || '未设置岗位' }}</div>
<div class="member-details">
<span class="member-status" :class="member.status">
{{ member.status === 'available' ? '在线' : '离线' }}
{{ member.status === 'ACTIVE' ? '在线' : '离线' }}
</span>
<span class="member-date">入职: {{ member.joinDate || '未设置' }}</span>
</div>
@ -468,7 +468,7 @@ const mapProjectRespToProjectCard = (projectResp: any): any => {
position: member.roleTypeDesc || member.jobCodeDesc || '未设置岗位',
phone: member.phone || '', //
email: member.email || '', //
status: member.status === 'ACTIVE' ? 'available' : 'offline',
status: member.status === 'ACTIVE' ? 'ACTIVE' : 'INACTIVE',
skills: [], //
joinDate: member.joinDate || '未设置',
remark: member.remark || member.jobDesc || '',
@ -1326,13 +1326,13 @@ onMounted(async () => {
text-transform: uppercase;
letter-spacing: 0.5px;
&.available {
&.ACTIVE {
background: linear-gradient(135deg, #e6f7ff 0%, #bae7ff 100%);
color: #1890ff;
border: 1px solid #91d5ff;
}
&.offline {
&.INACTIVE {
background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
color: #8c8c8c;
border: 1px solid #d9d9d9;