Files
cn-rdms-web/src/views/project/shared/project-master-data.ts

88 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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';
}