fix(task): 支持为未领取任务指定负责人

This commit is contained in:
kuaifan 2026-09-01 03:07:48 +00:00
parent b05b0874f8
commit ac43f630d3
2 changed files with 27 additions and 5 deletions

View File

@ -15,10 +15,10 @@ related_tools: [update_task, get_task]
related_pages: [task_detail]
prerequisites: []
negative:
- 一个任务必须至少有一个负责人,不能"无主"
- 任务暂时没有负责人时只能自己领取,不能指定其他项目成员
- 协作者不能完成任务,只有负责人能(或有 TASK_UPDATE 权限的项目角色)
- 负责人 / 协作者不会自动获得评论权限以外的项目权限
last_verified: v1.7.90
last_verified: v1.9.18
---
# 负责人与协作者
@ -28,7 +28,12 @@ DooTask 通过 `ProjectTaskUser` 表维护任务参与人:每条记录 `userid
- `owner=1` — **负责人**
- `owner=0`**协作者**assist
一个任务允许多个负责人(多 owner=1和多个协作者但每个任务必须至少 1 个负责人。
一个任务允许多个负责人(多 owner=1和多个协作者也可以暂时没有负责人。
## 设置入口
- 已有负责人:打开任务详情,在「负责人」字段中增删项目成员
- 暂无负责人:既可以通过顶部「领取任务」将自己设为负责人,也可以在详情底部的「添加」菜单选择「负责人」,再指定项目成员
- 「负责人」和「协助人员」未设置时都收纳在详情底部的统一「添加」菜单中,设置后显示为独立字段
## 权限差异

View File

@ -203,16 +203,17 @@
</li>
</ul>
</FormItem>
<FormItem v-if="getOwner.length > 0">
<FormItem v-if="getOwner.length > 0 || ownerForce">
<div class="item-label" slot="label">
<i class="taskfont">&#xe6e4;</i>{{$L('负责人')}}
</div>
<UserSelect
ref="owner"
class="item-content user"
v-model="ownerData.owner_userid"
:multiple-max="10"
:avatar-size="28"
:title="$L('修改负责人')"
:title="$L(getOwner.length > 0 ? '修改负责人' : '选择任务负责人')"
:project-id="taskDetail.project_id"
:add-icon="false"
:disabled="isDepartmentReadonly"
@ -638,6 +639,7 @@ export default {
ownerData: {},
ownerLoad: 0,
ownerForce: false,
removeLoad: 0,
@ -928,6 +930,13 @@ export default {
name: '优先级',
});
}
if (!($A.isArray(taskDetail.task_user) && taskDetail.task_user.find(({owner}) => owner === 1))) {
list.push({
command: 'owner',
icon: '&#xe6e4;',
name: '负责人',
});
}
if (!($A.isArray(taskDetail.task_user) && taskDetail.task_user.find(({owner}) => owner === 0 ))) {
list.push({
command: 'assist',
@ -1061,6 +1070,7 @@ export default {
this.timeForce = false;
this.loopForce = false;
this.tagForce = false;
this.ownerForce = false;
this.assistForce = false;
this.visibleForce = false;
this.addsubForce = false;
@ -1839,6 +1849,13 @@ export default {
})
break;
case 'owner':
this.ownerForce = true;
this.$nextTick(() => {
this.$refs.owner.onSelection();
});
break;
case 'assist':
this.assistForce = true;
this.$nextTick(() => {