| | |
| | | <view class="title">任务详情</view> |
| | | <view class="edit-btn" @click="handleEdit" v-if="taskDetail && !isTaskFinished"> |
| | | <uni-icons type="compose" size="20" color="#007AFF"></uni-icons> |
| | | <text class="edit-text">修改</text> |
| | | </view> |
| | | </view> |
| | | |
| | |
| | | <!-- 操作按钮区域 --> |
| | | <view class="action-buttons" v-if="taskDetail"> |
| | | <!-- 待处理状态: 显示出发、取消、强制完成 --> |
| | | <template v-if="taskDetail.taskStatus === 'PENDING'"> |
| | | <template v-if="isCurrentUserAssignee()"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleDepartAction()" |
| | | > |
| | | 出发 |
| | | </button> |
| | | <button |
| | | class="action-btn cancel" |
| | | @click="handleTaskAction('cancel')" |
| | | > |
| | | 取消 |
| | | </button> |
| | | <button |
| | | v-if="showForceCompleteFeature() && taskDetail.taskStatus === 'PENDING'" |
| | | class="action-btn force-complete" |
| | | @click="showForceCompleteTimeDialog()" |
| | | > |
| | | 强制完成 |
| | | </button> |
| | | </template> |
| | | <template v-if="taskDetail.taskStatus === 'PENDING' "> |
| | | <button |
| | | v-if="canOperateTask()" |
| | | class="action-btn primary" |
| | | @click="handleDepartAction()" |
| | | > |
| | | 出发 |
| | | </button> |
| | | <button |
| | | class="action-btn cancel" |
| | | @click="handleTaskAction('cancel')" |
| | | > |
| | | 取消 |
| | | </button> |
| | | <button |
| | | v-if="canOperateTask() && showForceCompleteFeature()" |
| | | class="action-btn force-complete" |
| | | @click="showForceCompleteTimeDialog()" |
| | | > |
| | | 强制完成 |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 出发中状态: 显示已到达、强制结束 --> |
| | | <template v-else-if="taskDetail.taskStatus === 'DEPARTING'"> |
| | | <template v-if="isCurrentUserAssignee()"> |
| | | <template v-if="canOperateTask()"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction('arrive')" |
| | |
| | | |
| | | <!-- 已到达状态: 显示已返程 --> |
| | | <template v-else-if="taskDetail.taskStatus === 'ARRIVED'"> |
| | | <template v-if="isCurrentUserAssignee()"> |
| | | <template v-if="canOperateTask()"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction('return')" |
| | |
| | | |
| | | <!-- 返程中状态: 显示已完成 --> |
| | | <template v-else-if="taskDetail.taskStatus === 'RETURNING'"> |
| | | <template v-if="isCurrentUserAssignee()"> |
| | | <template v-if="canOperateTask()"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction('complete')" |
| | | > |
| | | 已完成 |
| | | </button> |
| | | </template> |
| | | </template> |
| | | |
| | | <!-- 处理中状态: 显示强制完成、取消 --> |
| | | <template v-else-if="taskDetail.taskStatus === 'IN_PROGRESS'"> |
| | | <template v-if="canOperateTask()"> |
| | | <button |
| | | class="action-btn primary" |
| | | @click="handleTaskAction('arrive')" |
| | | > |
| | | 已到达 |
| | | </button> |
| | | <button |
| | | v-if="showForceCompleteFeature()" |
| | | class="action-btn force-complete" |
| | | @click="showForceCompleteTimeDialog()" |
| | | > |
| | | 强制完成 |
| | | </button> |
| | | </template> |
| | | </template> |
| | | |
| | |
| | | break; |
| | | |
| | | case 'forceCancel': |
| | | // 强制结束 -> 状态变为已取消 |
| | | this.$modal.confirm('确定要强制结束此任务吗?').then(() => { |
| | | this.updateTaskStatus('CANCELLED', '任务已强制结束') |
| | | }).catch(() => {}); |
| | | // 强制结束 -> 显示取消原因选择对话框 |
| | | this.showCancelReasonDialog(); |
| | | break; |
| | | |
| | | case 'return': |
| | |
| | | const list = (this.taskDetail && Array.isArray(this.taskDetail.assignees)) ? this.taskDetail.assignees : [] |
| | | return list.some(a => a && (a.userId === userId || a.oaUserId === userId)) |
| | | }, |
| | | |
| | | // 是否当前用户可以操作任务(执行人或管理员) |
| | | canOperateTask() { |
| | | // 检查是否是管理员(canViewAllConsult === '1') |
| | | |
| | | const canViewAllConsult = this.$store && this.$store.state && this.$store.state.user && this.$store.state.user.canViewAllConsult |
| | | console.log("当前用户是否是管理员:", canViewAllConsult) |
| | | if (canViewAllConsult === '1') { |
| | | return true |
| | | } |
| | | // 检查是否是任务执行人 |
| | | return this.isCurrentUserAssignee() |
| | | }, |
| | | |
| | | // 是否多人执行 |
| | | isMultipleAssignees() { |
| | |
| | | } |
| | | |
| | | .edit-btn { |
| | | width: 60rpx; |
| | | width: 120rpx; |
| | | height: 60rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: pointer; |
| | | |
| | | .edit-text { |
| | | margin-left: 8rpx; |
| | | font-size: 28rpx; |
| | | color: #007AFF; |
| | | } |
| | | } |
| | | } |
| | | |