实现团队成员更新功能和筛选功能
This commit is contained in:
parent
a80a23fd74
commit
e60e4cf095
|
@ -156,14 +156,14 @@ export interface ProjectDetailResp extends ProjectCard {
|
||||||
export interface TeamMemberResp {
|
export interface TeamMemberResp {
|
||||||
id: string | number
|
id: string | number
|
||||||
name: string
|
name: string
|
||||||
position: string
|
roleType: string
|
||||||
phone?: string
|
phone?: string
|
||||||
email?: string
|
email?: string
|
||||||
avatar?: string
|
avatar?: string
|
||||||
joinDate?: string
|
joinDate?: string
|
||||||
performance?: number
|
performance?: number
|
||||||
remark?: string
|
remark?: string
|
||||||
status?: 'available' | 'busy' | 'offline'
|
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 后端返回的团队成员数据结构 */
|
/** 后端返回的团队成员数据结构 */
|
||||||
|
@ -182,7 +182,7 @@ export interface BackendTeamMemberResp {
|
||||||
phone: string | null
|
phone: string | null
|
||||||
email: string | null
|
email: string | null
|
||||||
position: string
|
position: string
|
||||||
status: 'ACTIVE' | 'BUSY' | 'OFFLINE'
|
status: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
|
||||||
skills: string
|
skills: string
|
||||||
joinDate: string
|
joinDate: string
|
||||||
remark: string
|
remark: string
|
||||||
|
@ -201,11 +201,11 @@ export interface BackendTeamMemberResp {
|
||||||
export interface TeamMemberQuery extends PageQuery {
|
export interface TeamMemberQuery extends PageQuery {
|
||||||
projectId: string | number
|
projectId: string | number
|
||||||
name?: string // 姓名搜索
|
name?: string // 姓名搜索
|
||||||
position?: string // 岗位筛选
|
position?: string // 项目岗位筛选
|
||||||
status?: string // 状态筛选
|
status?: string // 状态筛选
|
||||||
joinDateStart?: string // 入职日期开始
|
joinDateStart?: string // 入职日期开始
|
||||||
joinDateEnd?: string // 入职日期结束
|
joinDateEnd?: string // 入职日期结束
|
||||||
sortBy?: 'name' | 'position' | 'joinDate' | 'status' // 排序字段
|
sortBy?: 'name' | 'roleType' | 'joinDate' | 'status' // 排序字段
|
||||||
sortOrder?: 'asc' | 'desc' // 排序方向
|
sortOrder?: 'asc' | 'desc' // 排序方向
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,33 +213,33 @@ export interface TeamMemberQuery extends PageQuery {
|
||||||
export interface TeamMemberExportQuery {
|
export interface TeamMemberExportQuery {
|
||||||
projectId: string | number
|
projectId: string | number
|
||||||
name?: string // 姓名搜索
|
name?: string // 姓名搜索
|
||||||
position?: string // 岗位筛选
|
position?: string // 项目岗位筛选
|
||||||
status?: string // 状态筛选
|
status?: string // 状态筛选
|
||||||
joinDateStart?: string // 入职日期开始
|
joinDateStart?: string // 入职日期开始
|
||||||
joinDateEnd?: string // 入职日期结束
|
joinDateEnd?: string // 入职日期结束
|
||||||
sortBy?: 'name' | 'position' | 'joinDate' | 'status' // 排序字段
|
sortBy?: 'name' | 'roleType' | 'joinDate' | 'status' // 排序字段
|
||||||
sortOrder?: 'asc' | 'desc' // 排序方向
|
sortOrder?: 'asc' | 'desc' // 排序方向
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 创建团队成员表单 */
|
/** 创建团队成员表单 */
|
||||||
export interface CreateTeamMemberForm {
|
export interface CreateTeamMemberForm {
|
||||||
projectId: string | number
|
projectId: string | number
|
||||||
|
roleType: string // 项目岗位
|
||||||
name: string
|
name: string
|
||||||
phone: string
|
phone: string
|
||||||
email?: string
|
email?: string
|
||||||
position: string
|
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
|
||||||
status?: 'available' | 'busy' | 'offline'
|
|
||||||
joinDate?: string
|
joinDate?: string
|
||||||
remark?: string
|
remark?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 更新团队成员表单 */
|
/** 更新团队成员表单 */
|
||||||
export interface UpdateTeamMemberForm {
|
export interface UpdateTeamMemberForm {
|
||||||
|
roleType?: string // 项目岗位
|
||||||
name?: string
|
name?: string
|
||||||
phone?: string
|
phone?: string
|
||||||
email?: string
|
email?: string
|
||||||
position?: string
|
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
|
||||||
status?: 'available' | 'busy' | 'offline'
|
|
||||||
joinDate?: string
|
joinDate?: string
|
||||||
remark?: string
|
remark?: string
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ export interface UpdateTeamMemberForm {
|
||||||
export interface BatchOperationForm {
|
export interface BatchOperationForm {
|
||||||
ids: (string | number)[]
|
ids: (string | number)[]
|
||||||
operation: 'delete' | 'updateStatus'
|
operation: 'delete' | 'updateStatus'
|
||||||
status?: 'available' | 'busy' | 'offline'
|
status?: 'ACTIVE' | 'SUSPENDED' | 'INACTIVE'
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 导入结果响应 */
|
/** 导入结果响应 */
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -265,7 +265,7 @@
|
||||||
<div class="member-position">{{ member.position || '未设置岗位' }}</div>
|
<div class="member-position">{{ member.position || '未设置岗位' }}</div>
|
||||||
<div class="member-details">
|
<div class="member-details">
|
||||||
<span class="member-status" :class="member.status">
|
<span class="member-status" :class="member.status">
|
||||||
{{ member.status === 'available' ? '在线' : '离线' }}
|
{{ member.status === 'ACTIVE' ? '在线' : '离线' }}
|
||||||
</span>
|
</span>
|
||||||
<span class="member-date">入职: {{ member.joinDate || '未设置' }}</span>
|
<span class="member-date">入职: {{ member.joinDate || '未设置' }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -468,7 +468,7 @@ const mapProjectRespToProjectCard = (projectResp: any): any => {
|
||||||
position: member.roleTypeDesc || member.jobCodeDesc || '未设置岗位',
|
position: member.roleTypeDesc || member.jobCodeDesc || '未设置岗位',
|
||||||
phone: member.phone || '', // 后端数据中的电话字段
|
phone: member.phone || '', // 后端数据中的电话字段
|
||||||
email: member.email || '', // 后端数据中的邮箱字段
|
email: member.email || '', // 后端数据中的邮箱字段
|
||||||
status: member.status === 'ACTIVE' ? 'available' : 'offline',
|
status: member.status === 'ACTIVE' ? 'ACTIVE' : 'INACTIVE',
|
||||||
skills: [], // 后端数据中没有技能字段
|
skills: [], // 后端数据中没有技能字段
|
||||||
joinDate: member.joinDate || '未设置',
|
joinDate: member.joinDate || '未设置',
|
||||||
remark: member.remark || member.jobDesc || '',
|
remark: member.remark || member.jobDesc || '',
|
||||||
|
@ -1326,13 +1326,13 @@ onMounted(async () => {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
|
|
||||||
&.available {
|
&.ACTIVE {
|
||||||
background: linear-gradient(135deg, #e6f7ff 0%, #bae7ff 100%);
|
background: linear-gradient(135deg, #e6f7ff 0%, #bae7ff 100%);
|
||||||
color: #1890ff;
|
color: #1890ff;
|
||||||
border: 1px solid #91d5ff;
|
border: 1px solid #91d5ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.offline {
|
&.INACTIVE {
|
||||||
background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
|
background: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 100%);
|
||||||
color: #8c8c8c;
|
color: #8c8c8c;
|
||||||
border: 1px solid #d9d9d9;
|
border: 1px solid #d9d9d9;
|
||||||
|
|
Loading…
Reference in New Issue