wlzboy
2026-01-24 2f09efc660bf2cc94cbc5291ad25ca06fc9bdadf
app/pagesTask/detail.vue
@@ -7,6 +7,7 @@
      <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>
    
@@ -455,32 +456,32 @@
    <!-- 操作按钮区域 -->
    <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
            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')"
@@ -493,12 +494,19 @@
          >
            强制结束
          </button>
          <button
            v-if="showForceCompleteFeature()"
            class="action-btn force-complete"
            @click="showForceCompleteTimeDialog()"
          >
            强制完成
          </button>
        </template>
      </template>
      
      <!-- 已到达状态: 显示已返程 -->
      <template v-else-if="taskDetail.taskStatus === 'ARRIVED'">
        <template v-if="isCurrentUserAssignee()">
        <template v-if="canOperateTask()">
          <button 
            class="action-btn primary" 
            @click="handleTaskAction('return')"
@@ -510,13 +518,32 @@
      
      <!-- 返程中状态: 显示已完成 -->
      <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>
      
@@ -913,10 +940,8 @@
            break;
            
          case 'forceCancel':
            // 强制结束 -> 状态变为已取消
            this.$modal.confirm('确定要强制结束此任务吗?').then(() => {
              this.updateTaskStatus('CANCELLED', '任务已强制结束')
            }).catch(() => {});
            // 强制结束 -> 显示取消原因选择对话框
            this.showCancelReasonDialog();
            break;
            
          case 'return':
@@ -1421,9 +1446,14 @@
        console.log('附件删除成功:', attachmentId)
      },
      // 是否显示“就绪”功能(配置开关)
      // 是否显示"就绪"功能(配置开关)
      showAssigneeReadyFeature() {
        return !!(config && config.features && config.features.showAssigneeReadyButton)
      },
      // 是否显示"强制完成"功能(配置开关)
      showForceCompleteFeature() {
        return !!(config && config.features && config.features.showForceCompleteButton)
      },
      // 当前用户是否为该执行人
@@ -1497,6 +1527,19 @@
        console.log("当前用户ID:", userId)
        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()
      },
      // 是否多人执行
@@ -1871,12 +1914,18 @@
      }
      
      .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;
        }
      }
    }
    
@@ -2192,10 +2241,13 @@
        flex: 1;
        height: 80rpx;
        border-radius: 10rpx;
        font-size: 30rpx;
        font-size: 28rpx;
        margin: 0 10rpx;
        background-color: #f0f0f0;
        color: #333;
        white-space: nowrap;
        padding: 0 10rpx;
        min-width: 0;
        
        &.edit {
          background-color: #ff9500;
@@ -2212,6 +2264,11 @@
          color: white;
        }
        
        &.force-end {
          background-color: #ff6b22;
          color: white;
        }
        &.settlement {
          background-color: #34C759;
          color: white;