feat: 编辑提交记录支持修改所属项目
- 编辑弹窗中所属项目改为可选下拉 - 后端 SubmissionUpdate 新增 project_id 字段 - 切换到内部事务项目时自动调整阶段和内容类型 - 修复编辑时产出时长校验变量名 bug Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a5d3739eef
commit
4629525d2a
@ -194,6 +194,11 @@ def update_submission(
|
||||
}
|
||||
|
||||
# 更新字段
|
||||
if req.project_id is not None:
|
||||
project = db.query(Project).filter(Project.id == req.project_id).first()
|
||||
if not project:
|
||||
raise HTTPException(status_code=404, detail="项目不存在")
|
||||
sub.project_id = req.project_id
|
||||
if req.project_phase is not None:
|
||||
sub.project_phase = PhaseGroup(req.project_phase)
|
||||
if req.work_type is not None:
|
||||
@ -221,7 +226,7 @@ def update_submission(
|
||||
# 产出时长校验:前期内容不需要,中期/后期内容必须 > 0
|
||||
NO_DURATION_TYPES = {'策划案', '大纲/梗概', '概念设计图', '测试片', '剧本', '分镜', '人设图', '场景图', '道具图', '培训', '招聘面试', '内部其他'}
|
||||
content_val = sub.content_type.value if hasattr(sub.content_type, 'value') else sub.content_type
|
||||
if content_val not in PRE_PHASE_TYPES and sub.total_seconds <= 0:
|
||||
if content_val not in NO_DURATION_TYPES and sub.total_seconds <= 0:
|
||||
raise HTTPException(status_code=422, detail="请填写产出时长")
|
||||
|
||||
# 保存新数据
|
||||
|
||||
@ -174,6 +174,7 @@ class SubmissionCreate(BaseModel):
|
||||
|
||||
|
||||
class SubmissionUpdate(BaseModel):
|
||||
project_id: Optional[int] = None
|
||||
project_phase: Optional[str] = None
|
||||
work_type: Optional[str] = None
|
||||
content_type: Optional[str] = None
|
||||
|
||||
@ -156,8 +156,10 @@
|
||||
<!-- 编辑提交对话框 -->
|
||||
<el-dialog v-model="showEdit" title="编辑提交记录" width="580px" destroy-on-close>
|
||||
<el-form :model="editForm" label-width="110px" label-position="left">
|
||||
<el-form-item label="所属项目">
|
||||
<el-input :model-value="editForm._project_name" disabled />
|
||||
<el-form-item label="所属项目" required>
|
||||
<el-select v-model="editForm._project_id" style="width:100%" @change="onEditProjectChange">
|
||||
<el-option v-for="p in activeProjects" :key="p.id" :label="p.name" :value="p.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<template v-if="!isEditInternalProject">
|
||||
<el-row :gutter="16">
|
||||
@ -323,9 +325,21 @@ const isInternalProject = computed(() => {
|
||||
return proj?.name === INTERNAL_PROJECT_NAME
|
||||
})
|
||||
const isEditInternalProject = computed(() => {
|
||||
return editForm._project_name === INTERNAL_PROJECT_NAME
|
||||
const proj = activeProjects.value.find(p => p.id === editForm._project_id)
|
||||
return proj?.name === INTERNAL_PROJECT_NAME
|
||||
})
|
||||
|
||||
// 编辑时切换项目
|
||||
function onEditProjectChange(projectId) {
|
||||
const proj = activeProjects.value.find(p => p.id === projectId)
|
||||
editForm._project_name = proj?.name || ''
|
||||
if (proj?.name === INTERNAL_PROJECT_NAME) {
|
||||
editForm.project_phase = '内部事务'
|
||||
editForm.work_type = '制作'
|
||||
editForm.content_type = PHASE_CONTENT_TYPES['内部事务'][0]
|
||||
}
|
||||
}
|
||||
|
||||
// 根据阶段过滤内容类型(内部事务项目只显示内部事务类型)
|
||||
const filteredContentTypes = computed(() => {
|
||||
if (isInternalProject.value) return PHASE_CONTENT_TYPES['内部事务']
|
||||
@ -532,6 +546,7 @@ async function handleUpdate() {
|
||||
editing.value = true
|
||||
try {
|
||||
const { _id, _project_name, _project_id, ...payload } = editForm
|
||||
payload.project_id = _project_id
|
||||
await submissionApi.update(_id, payload)
|
||||
ElMessage.success('修改成功')
|
||||
showEdit.value = false
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user