feat(projects): 新增项目、执行、任务等功能
This commit is contained in:
87
src/views/project/shared/project-master-data.ts
Normal file
87
src/views/project/shared/project-master-data.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { transformRecordToOption } from '@/utils/common';
|
||||
|
||||
/** 项目状态编码与中文标签映射 */
|
||||
export const projectStatusRecord: Record<Api.Project.ProjectStatusCode, string> = {
|
||||
pending: '待开始',
|
||||
active: '进行中',
|
||||
paused: '已暂停',
|
||||
completed: '已完成',
|
||||
cancelled: '已取消',
|
||||
archived: '已归档'
|
||||
};
|
||||
|
||||
export const projectStatusOptions = transformRecordToOption(projectStatusRecord);
|
||||
|
||||
/** 项目状态动作编码与中文标签映射 */
|
||||
export const projectStatusActionRecord: Record<Api.Project.ProjectStatusActionCode, string> = {
|
||||
auto_start: '自动开始',
|
||||
pause: '暂停项目',
|
||||
resume: '恢复项目',
|
||||
complete: '完成项目',
|
||||
cancel: '取消项目',
|
||||
reopen: '重新开启',
|
||||
archive: '归档项目'
|
||||
};
|
||||
|
||||
export function getProjectStatusLabel(status: Api.Project.ProjectStatusCode) {
|
||||
return projectStatusRecord[status];
|
||||
}
|
||||
|
||||
/** 根据项目状态返回对应的 Tag 类型,用于 ElTag 组件的颜色映射 */
|
||||
export function getProjectStatusTagType(status: Api.Project.ProjectStatusCode): UI.ThemeColor {
|
||||
const statusTagTypeMap: Record<Api.Project.ProjectStatusCode, UI.ThemeColor> = {
|
||||
pending: 'info',
|
||||
active: 'success',
|
||||
paused: 'warning',
|
||||
completed: 'success',
|
||||
cancelled: 'info',
|
||||
archived: 'info'
|
||||
};
|
||||
|
||||
return statusTagTypeMap[status];
|
||||
}
|
||||
|
||||
/** 判断项目是否可编辑:pending / active / paused 状态允许编辑 */
|
||||
export function isProjectEditable(status: Api.Project.ProjectStatusCode) {
|
||||
return status === 'active' || status === 'pending';
|
||||
}
|
||||
|
||||
/** 判断项目编辑是否受限:paused / completed 状态只能编辑部分字段 */
|
||||
export function isProjectEditLimited(status: Api.Project.ProjectStatusCode) {
|
||||
return status === 'paused' || status === 'completed';
|
||||
}
|
||||
|
||||
/** 根据当前状态获取允许的状态动作列表 */
|
||||
export function getAllowedProjectStatusActions(
|
||||
status: Api.Project.ProjectStatusCode
|
||||
): Array<Exclude<Api.Project.ProjectStatusActionCode, 'auto_start'>> {
|
||||
const actionMap: Record<
|
||||
Api.Project.ProjectStatusCode,
|
||||
Array<Exclude<Api.Project.ProjectStatusActionCode, 'auto_start'>>
|
||||
> = {
|
||||
pending: ['cancel'],
|
||||
active: ['pause', 'complete', 'cancel'],
|
||||
paused: ['resume', 'cancel'],
|
||||
completed: ['reopen', 'archive'],
|
||||
cancelled: [],
|
||||
archived: []
|
||||
};
|
||||
|
||||
return actionMap[status];
|
||||
}
|
||||
|
||||
export function getProjectStatusActionLabel(actionCode: Api.Project.ProjectStatusActionCode) {
|
||||
return projectStatusActionRecord[actionCode];
|
||||
}
|
||||
|
||||
export function getProjectStatusActionOptions(status: Api.Project.ProjectStatusCode) {
|
||||
return getAllowedProjectStatusActions(status).map(actionCode => ({
|
||||
value: actionCode,
|
||||
label: getProjectStatusActionLabel(actionCode)
|
||||
}));
|
||||
}
|
||||
|
||||
/** 判断状态动作是否必须填写原因:resume 和 auto_start 不需要原因 */
|
||||
export function isProjectActionReasonRequired(actionCode: Api.Project.ProjectStatusActionCode) {
|
||||
return actionCode !== 'resume' && actionCode !== 'auto_start';
|
||||
}
|
||||
Reference in New Issue
Block a user