三雷修复: canRecall父节点校验+task_type判定主干排序/标签+确认无db.delete
This commit is contained in:
@ -133,8 +133,8 @@ export default {
|
|||||||
};
|
};
|
||||||
if (this.product) walk(this.product.task_tree);
|
if (this.product) walk(this.product.task_tree);
|
||||||
result.sort((a, b) => {
|
result.sort((a, b) => {
|
||||||
const aIsMain = !a.parent_task_id;
|
const aIsMain = !a.parent_task_id || a.task_type !== 'SPAWN';
|
||||||
const bIsMain = !b.parent_task_id;
|
const bIsMain = !b.parent_task_id || b.task_type !== 'SPAWN';
|
||||||
if (aIsMain && !bIsMain) return -1;
|
if (aIsMain && !bIsMain) return -1;
|
||||||
if (!aIsMain && bIsMain) return 1;
|
if (!aIsMain && bIsMain) return 1;
|
||||||
return new Date(a.created_at) - new Date(b.created_at);
|
return new Date(a.created_at) - new Date(b.created_at);
|
||||||
@ -146,8 +146,10 @@ export default {
|
|||||||
canRecall() {
|
canRecall() {
|
||||||
if (!this.lockedTask || this.lockedTask.status !== 'PENDING') return false;
|
if (!this.lockedTask || this.lockedTask.status !== 'PENDING') return false;
|
||||||
if (this.isAssignee) return false;
|
if (this.isAssignee) return false;
|
||||||
// 非接收人即可撤回(后端会校验权限);parent_task_id 为空时也放开(旧数据兼容)
|
if (!this.lockedTask.parent_task_id) return false;
|
||||||
return true;
|
const parent = this.taskMap[this.lockedTask.parent_task_id];
|
||||||
|
if (!parent) return false;
|
||||||
|
return parent.assignee_id == this.currentUserId || parent.assignee_id == this.currentUsername;
|
||||||
},
|
},
|
||||||
branchLabelsMap() {
|
branchLabelsMap() {
|
||||||
const map = {};
|
const map = {};
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
<view v-for="task in filtered" :key="task.id" class="card" @tap="goDetail(task)">
|
<view v-for="task in filtered" :key="task.id" class="card" @tap="goDetail(task)">
|
||||||
<view class="card-row">
|
<view class="card-row">
|
||||||
<view style="display:flex;align-items:center;gap:6px;min-width:0;">
|
<view style="display:flex;align-items:center;gap:6px;min-width:0;">
|
||||||
<text :class="['tag-badge', task.parent_task_id ? 'tag-sub' : 'tag-main']">{{ task.parent_task_id ? '协助分支' : '主分支' }}</text>
|
<text :class="['tag-badge', task.task_type === 'SPAWN' ? 'tag-sub' : 'tag-main']">{{ task.task_type === 'SPAWN' ? '协助' : '主干' }}</text>
|
||||||
<text class="card-name">{{ task.task_name }}</text>
|
<text class="card-name">{{ task.task_name }}</text>
|
||||||
</view>
|
</view>
|
||||||
<text :class="['card-status', statusColor(task.status)]">{{ statusLabel(task.status) }}</text>
|
<text :class="['card-status', statusColor(task.status)]">{{ statusLabel(task.status) }}</text>
|
||||||
@ -101,8 +101,8 @@ export default {
|
|||||||
const username = this.currentUser?.username || "";
|
const username = this.currentUser?.username || "";
|
||||||
const res = await get("/tasks/", { assignee_id: username, limit: 100 });
|
const res = await get("/tasks/", { assignee_id: username, limit: 100 });
|
||||||
this.tasks = (res.tasks || []).sort((a, b) => {
|
this.tasks = (res.tasks || []).sort((a, b) => {
|
||||||
const aIsMain = !a.parent_task_id;
|
const aIsMain = !a.parent_task_id || a.task_type !== 'SPAWN';
|
||||||
const bIsMain = !b.parent_task_id;
|
const bIsMain = !b.parent_task_id || b.task_type !== 'SPAWN';
|
||||||
if (aIsMain && !bIsMain) return -1;
|
if (aIsMain && !bIsMain) return -1;
|
||||||
if (!aIsMain && bIsMain) return 1;
|
if (!aIsMain && bIsMain) return 1;
|
||||||
return new Date(a.created_at) - new Date(b.created_at);
|
return new Date(a.created_at) - new Date(b.created_at);
|
||||||
|
|||||||
Reference in New Issue
Block a user