|
|
@@ -6,121 +6,110 @@
|
|
|
<text>任务详情</text>
|
|
|
</view>
|
|
|
<scroll-view class="content" scroll-y>
|
|
|
- <!-- 任务卡片 -->
|
|
|
- <view class="task-card" v-if="auditData">
|
|
|
- <view class="card-header">
|
|
|
- <view class="card-title">{{ auditData.projectVO.projectName }}</view>
|
|
|
- <view class="card-lable" :class="'pending'">待审核</view>
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 审核表单(根据类型动态渲染) -->
|
|
|
+ <view v-if="auditData">
|
|
|
+ <!-- 只有完成任务审核和创建任务审核才涉及文章、短视频、长视频 -->
|
|
|
+ <view v-if="businessType === 'ADUIT_WCRWSH' || businessType === 'ADUIT_CJRW'">
|
|
|
+ <!-- 短视频审核 -->
|
|
|
+ <ShortVideoAudit v-if="auditData.shortVideoData" :data="auditData.shortVideoData" />
|
|
|
+
|
|
|
+ <!-- 长视频审核 -->
|
|
|
+ <LongVideoAudit v-else-if="auditData.longVideoData" :data="auditData.longVideoData" />
|
|
|
+
|
|
|
+ <!-- 文章审核 -->
|
|
|
+ <ArticleAudit v-else-if="auditData.articleData" :data="auditData.articleData" />
|
|
|
</view>
|
|
|
- <view class="card-meta">
|
|
|
- <view class="item">
|
|
|
- <image src="/static/image/icon_user.png"></image>
|
|
|
- {{ auditData.AuditTaskInfoVO.companyUserName }}</view>
|
|
|
- <view class="item">
|
|
|
-
|
|
|
- <image src="/static/image/icon_time.png"></image>
|
|
|
- {{ auditData.projectVO.startDate }}</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <!-- 任务信息 -->
|
|
|
- <view class="info-section" v-if="auditData">
|
|
|
- <view class="section-header">
|
|
|
- <view class="section-indicator"></view>
|
|
|
- <text class="section-title">任务信息</text>
|
|
|
- </view>
|
|
|
- <view class="info-list">
|
|
|
- <view class="info-item">
|
|
|
- <text class="info-label">任务名称</text>
|
|
|
- <text class="info-value">{{ auditData.auditTaskInfoVO.projectName }}</text>
|
|
|
- </view>
|
|
|
- <view class="info-item">
|
|
|
- <text class="info-label">任务类型</text>
|
|
|
- <text class="info-value">{{ auditData.auditTaskInfoVO.projectName }}</text>
|
|
|
- </view>
|
|
|
- <view class="info-item">
|
|
|
- <text class="info-label">归属部门</text>
|
|
|
- <text class="info-value">{{ auditData.auditTaskInfoVO.deptName }}</text>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-<!-- 项目信息 -->
|
|
|
- <view class="info-section" v-if="auditData">
|
|
|
- <view class="section-header">
|
|
|
- <view class="section-indicator"></view>
|
|
|
- <text class="section-title">项目信息</text>
|
|
|
- </view>
|
|
|
- <view class="info-list">
|
|
|
- <view class="info-item">
|
|
|
- <text class="info-label">项目名称</text>
|
|
|
- <text class="info-value">{{ auditData.projectVO.projectName }}</text>
|
|
|
+
|
|
|
+ <!-- 讲者审核 -->
|
|
|
+ <SpeakerAudit v-else-if="businessType === 'ADUIT_JZSH'" :data="{ docterVO: auditData.docterVO, companyUserVO: auditData.companyUserVO }" />
|
|
|
+
|
|
|
+ <!-- 提现审核 -->
|
|
|
+ <WithdrawAudit v-else-if="businessType === 'ADUIT_TXSH'" :data="auditData.withdrawData" />
|
|
|
+
|
|
|
+ <!-- 服务单生成配置模板审核 -->
|
|
|
+ <view v-else-if="businessType === 'AUDIT_FWDRWSCPZ'" class="info-section">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-indicator"></view>
|
|
|
+ <text class="section-title">服务单生成配置模板信息</text>
|
|
|
</view>
|
|
|
- <view class="info-item">
|
|
|
- <text class="info-label">项目活动ID</text>
|
|
|
- <text class="info-value">{{ auditData.projectVO.projectTypeId }}</text>
|
|
|
+ <view class="info-list">
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">任务编号</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.taskNo ? auditData.auditTaskInfoVO.taskNo : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">任务名称</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.taskName ? auditData.auditTaskInfoVO.taskName : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">项目名称</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.projectName ? auditData.auditTaskInfoVO.projectName : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">归属部门</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.deptName ? auditData.auditTaskInfoVO.deptName : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">归属类型</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.belongTypeName ? auditData.auditTaskInfoVO.belongTypeName : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">任务数量</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.taskCount ? auditData.auditTaskInfoVO.taskCount : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">任务积分</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.taskIntegral ? auditData.auditTaskInfoVO.taskIntegral : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">计划开始时间</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.planStartTime ? auditData.auditTaskInfoVO.planStartTime : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">计划结束时间</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.planEndTime ? auditData.auditTaskInfoVO.planEndTime : '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-item">
|
|
|
+ <text class="info-label">申请人</text>
|
|
|
+ <text class="info-value">{{ auditData.auditTaskInfoVO && auditData.auditTaskInfoVO.companyUserName ? auditData.auditTaskInfoVO.companyUserName : '-' }}</text>
|
|
|
</view>
|
|
|
- <!-- <view class="info-item">
|
|
|
- <text class="info-label">任务备注</text>
|
|
|
- <text class="info-value">{{ auditData.projectVO.thirdPartyCode }}</text>
|
|
|
- </view> -->
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <!-- 客户信息 -->
|
|
|
- <view class="info-section" v-if="auditData">
|
|
|
- <view class="section-header">
|
|
|
- <view class="section-indicator"></view>
|
|
|
- <text class="section-title">客户信息</text>
|
|
|
</view>
|
|
|
- <view class="client-list">
|
|
|
- <view class="client-item">
|
|
|
- <view class="client-info">
|
|
|
- <image class="avatar" src="/static/image/my_heads_icon.png"></image>
|
|
|
- <view class="client-txt">
|
|
|
- <view class="client-name">
|
|
|
- {{ auditData.docterVO.doctorName }}
|
|
|
- <text class="client-level">一级</text>
|
|
|
+
|
|
|
+ <!-- 审核流程信息 -->
|
|
|
+ <view class="info-section" v-if="auditData.auditFlowVO && auditData.auditFlowVO.length > 0">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-indicator"></view>
|
|
|
+ <text class="section-title">审核流程信息</text>
|
|
|
+ </view>
|
|
|
+ <view class="flow-list">
|
|
|
+ <view v-for="(flow, index) in auditData.auditFlowVO" :key="index" class="flow-item">
|
|
|
+ <view class="flow-step">
|
|
|
+ <view class="step-number">{{ flow.stepNumber }}</view>
|
|
|
+ <view class="step-line" v-if="index < auditData.auditFlowVO.length - 1"></view>
|
|
|
</view>
|
|
|
- <view class="client-hospital">
|
|
|
- <text>{{ auditData.docterVO.institution }} </text>
|
|
|
- <view class="line"></view>
|
|
|
- <text>{{ auditData.docterVO.department || '-' }}</text>
|
|
|
+ <view class="flow-content">
|
|
|
+ <view class="flow-header">
|
|
|
+ <text class="flow-title">{{ flow.stepDescription }}</text>
|
|
|
+ <text class="flow-status" :class="{'status-pending': flow.status === 1, 'status-completed': flow.status === 2, 'status-submitted': flow.status === 0}">{{ flow.statusName }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="flow-info">
|
|
|
+ <text>审核人:{{ flow.auditUserName || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="flow-info" v-if="flow.auditTime">
|
|
|
+ <text>审核时间:{{ flow.auditTime }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="flow-info" v-if="flow.comment">
|
|
|
+ <text>审核意见:{{ flow.comment }}</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view class="client-stats">
|
|
|
- <view class="stat-item"><text class="num">{{ auditData.auditTaskInfoVO.taskCount }} </text>任务</view>
|
|
|
- <view class="stat-item"><text class="num">{{ auditData.auditTaskInfoVO.taskIntegral }} </text>积分</view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
-
|
|
|
- <!-- 审批信息 -->
|
|
|
- <view class="info-section" v-if="auditData">
|
|
|
- <view class="section-header">
|
|
|
- <view class="section-indicator"></view>
|
|
|
- <text class="section-title">审批流程</text>
|
|
|
- </view>
|
|
|
- <view class="approval-list">
|
|
|
- <view class="approval-item" v-for="(item, index) in auditData.auditFlowVO" :key="index">
|
|
|
- <view class="left">
|
|
|
- <view class="avatar-box">
|
|
|
- <image class="avatar" src="/static/image/my_heads_icon.png"></image>
|
|
|
- <image class="icon" v-if="item.status==1" src="/static/image/icon_wait.png"></image>
|
|
|
- <image class="icon" v-if="item.status==0" src="/static/image/icon_pass.png"></image>
|
|
|
- <image class="icon" v-if="item.status==2" src="/static/image/icon_refuse.png"></image>
|
|
|
- </view>
|
|
|
- <view class="approval-user">
|
|
|
- <view class="user-name">{{ item.auditUserName }}</view>
|
|
|
- <view class="user-status" :style="{ color: item.status === 0 ? '#4CAF50' : item.status === 1 ? '#FF9800' : '#F44336' }">{{ item.statusName }}</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <text class="approval-time">{{ item.auditTime || '' }}</text>
|
|
|
- <view class="approval-line" v-if="index < auditData.auditFlowVO.length - 1"></view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
+
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="bottom-bar">
|
|
|
@@ -159,9 +148,20 @@
|
|
|
|
|
|
<script>
|
|
|
import { doAudit, getAuditFlows, getTaskFinishAuditInfo } from '@/api/audit.js'
|
|
|
-import image from 'uview-ui/libs/config/props/image';
|
|
|
+import ShortVideoAudit from './components/ShortVideoAudit.vue'
|
|
|
+import LongVideoAudit from './components/LongVideoAudit.vue'
|
|
|
+import ArticleAudit from './components/ArticleAudit.vue'
|
|
|
+import SpeakerAudit from './components/SpeakerAudit.vue'
|
|
|
+import WithdrawAudit from './components/WithdrawAudit.vue'
|
|
|
|
|
|
export default {
|
|
|
+ components: {
|
|
|
+ ShortVideoAudit,
|
|
|
+ LongVideoAudit,
|
|
|
+ ArticleAudit,
|
|
|
+ SpeakerAudit,
|
|
|
+ WithdrawAudit
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
userInfo:JSON.parse(uni.getStorageSync('userInfo')),
|
|
|
@@ -177,10 +177,17 @@ export default {
|
|
|
// 接口返回的原始数据
|
|
|
auditData: null,
|
|
|
// 审批信息
|
|
|
- approvalInfo: []
|
|
|
+ approvalInfo: [],
|
|
|
+ businessType:null
|
|
|
}
|
|
|
},
|
|
|
onLoad(options) {
|
|
|
+ console.log("options参数",options)
|
|
|
+
|
|
|
+ if(options.businessType){
|
|
|
+ this.businessType = options.businessType
|
|
|
+ }
|
|
|
+
|
|
|
if (options.taskId) {
|
|
|
this.taskId = options.taskId
|
|
|
this.loadData()
|
|
|
@@ -366,6 +373,157 @@ export default {
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
+ // 通用信息部分样式
|
|
|
+ .info-section {
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
|
|
|
+ }
|
|
|
+
|
|
|
+ .section-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .section-indicator {
|
|
|
+ width: 8rpx;
|
|
|
+ height: 24rpx;
|
|
|
+ background: #1989fa;
|
|
|
+ border-radius: 4rpx;
|
|
|
+ margin-right: 12rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .section-title {
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-list {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-item {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 16rpx 0;
|
|
|
+ border-bottom: 1rpx solid #f2f2f2;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-item:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-label {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-value {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 2;
|
|
|
+ text-align: right;
|
|
|
+ word-break: break-all;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 审核流程样式
|
|
|
+ .flow-list {
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-item {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 32rpx;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-step {
|
|
|
+ width: 40rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-number {
|
|
|
+ width: 40rpx;
|
|
|
+ height: 40rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: #1989fa;
|
|
|
+ color: #fff;
|
|
|
+ font-size: 24rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ z-index: 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-line {
|
|
|
+ width: 2rpx;
|
|
|
+ height: 100%;
|
|
|
+ background: #e5e5e5;
|
|
|
+ position: absolute;
|
|
|
+ top: 40rpx;
|
|
|
+ left: 19rpx;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-content {
|
|
|
+ flex: 1;
|
|
|
+ margin-left: 24rpx;
|
|
|
+ background: #f9f9f9;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 24rpx;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 16rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-title {
|
|
|
+ font-size: 26rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-status {
|
|
|
+ font-size: 24rpx;
|
|
|
+ padding: 4rpx 16rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .status-pending {
|
|
|
+ background: #fff7e6;
|
|
|
+ color: #fa8c16;
|
|
|
+ }
|
|
|
+
|
|
|
+ .status-completed {
|
|
|
+ background: #f0f9eb;
|
|
|
+ color: #52c41a;
|
|
|
+ }
|
|
|
+
|
|
|
+ .status-submitted {
|
|
|
+ background: #e6f7ff;
|
|
|
+ color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .flow-info {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #666;
|
|
|
+ margin-bottom: 8rpx;
|
|
|
+ }
|
|
|
+
|
|
|
// 弹窗样式
|
|
|
.reject-popup-content {
|
|
|
padding: 32rpx;
|