|
@@ -768,8 +768,7 @@
|
|
<!-- 评论 -->
|
|
<!-- 评论 -->
|
|
<div class="remark" v-show="addForm.id != null">
|
|
<div class="remark" v-show="addForm.id != null">
|
|
<span class="zh">
|
|
<span class="zh">
|
|
-
|
|
|
|
- <div class="player" v-if="critic.length > 0">
|
|
|
|
|
|
+ <div class="player">
|
|
<p>{{ $t('participantin') }}</p>
|
|
<p>{{ $t('participantin') }}</p>
|
|
<div class="bj">
|
|
<div class="bj">
|
|
<span v-for="(pl, i) in critic" :key="i">
|
|
<span v-for="(pl, i) in critic" :key="i">
|
|
@@ -782,8 +781,11 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="subject">
|
|
<div class="subject">
|
|
- <div class="sub-all">{{ $t('alldynamic') }}</div>
|
|
|
|
- <div class="sub-details" ref="main">
|
|
|
|
|
|
+ <div class="sub-all">
|
|
|
|
+ <div :class="dynamicTab ? 'subOn' : ''" @click="dynamicTab = true">{{ $t('alldynamic') }}</div>
|
|
|
|
+ <div :class="dynamicTab ? '' : 'subOn'" @click="dynamicTab = false">{{ $t('lai-zi-ri-bao') }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="sub-details" ref="main" v-if="dynamicTab">
|
|
<ul class="infinite-list" v-infinite-scroll="load" ref="contRoll">
|
|
<ul class="infinite-list" v-infinite-scroll="load" ref="contRoll">
|
|
<div style="width: 100%" v-if="commentList.length <= 0">
|
|
<div style="width: 100%" v-if="commentList.length <= 0">
|
|
<img src="../../assets/image/xiao.png" alt="">
|
|
<img src="../../assets/image/xiao.png" alt="">
|
|
@@ -826,8 +828,130 @@
|
|
</li>
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
|
|
+ <div class="Daily" v-if="!dynamicTab">
|
|
|
|
+ <div class="one_daily_body DailyBody">
|
|
|
|
+ <el-card shadow="never" v-for="(item2,index2) in dailyList" :key="index2" style="margin-bottom: 20px;">
|
|
|
|
+ <p>
|
|
|
|
+ {{ $t('tian-bao-ren') }}: <span v-if="user.userNameNeedTranslate != 1">{{item2.userName}}</span>
|
|
|
|
+ <span v-if="user.userNameNeedTranslate == 1">
|
|
|
|
+ <ww-open-data type='userName' :openid='item2.userName'></ww-open-data>
|
|
|
|
+ </span>
|
|
|
|
+ </p>
|
|
|
|
+ <p>{{ $t('other.approvalStatus') }}:
|
|
|
|
+ <span v-if="user.company.packageEngineering == 0">
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0">[
|
|
|
|
+ <span v-if="item2.isDeptAudit==0">
|
|
|
|
+ <span v-if="item2.projectAuditState==0">
|
|
|
|
+ <!-- 待项目审核人 --> {{$t('other.waitForTheProjectReviewer')}}
|
|
|
|
+ <span v-if="item2.projectAuditorName != null">(
|
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
|
+ <ww-open-data type='userName' :openid='item2.projectAuditorName'></ww-open-data>
|
|
|
|
+ </span>
|
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item2.projectAuditorName}}</span>
|
|
|
|
+ )</span>
|
|
|
|
+ <!-- 审核 --> {{$t('other.audit')}}
|
|
|
|
+ </span>
|
|
|
|
+ <span style="color:#32CD32;" v-else-if="item2.projectAuditState==1">
|
|
|
|
+ <!-- 项目审核人 --> {{$t('other.projectAuditor')}}
|
|
|
|
+ <span v-if="item2.projectAuditorName != null">(
|
|
|
|
+ <!-- {{item2.projectAuditorName}} -->
|
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
|
+ <ww-open-data type='userName' :openid='item2.projectAuditorName'></ww-open-data>
|
|
|
|
+ </span>
|
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item2.projectAuditorName}}</span>
|
|
|
|
+ )</span>
|
|
|
|
+ <!-- 审核通过 --> {{$t('state.approved')}}
|
|
|
|
+ </span>
|
|
|
|
+ </span>
|
|
|
|
+ <span v-else-if="item2.isDeptAudit==1">
|
|
|
|
+ ({{$t('other.await')}}
|
|
|
|
+ <span v-if="user.userNameNeedTranslate == '1'">
|
|
|
|
+ <ww-open-data type='departmentName' :openid='item2.auditDeptName'></ww-open-data>
|
|
|
|
+ </span>
|
|
|
|
+ <span v-if="user.userNameNeedTranslate != '1'">{{item2.auditDeptName}}</span>
|
|
|
|
+ {{$t('other.audit')}})
|
|
|
|
+ </span>
|
|
|
|
+ ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ {{$t('state.alreadyPassed')}} ]
|
|
|
|
+ <span style="color:#c7e944" v-if="item2.reportAutoApprove == 1">{{$t('other.automaticReview')}}</span>
|
|
|
|
+ </span>
|
|
|
|
+
|
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ {{$t('state.rejected')}} ] {{$t('other.reason')}}:{{item2.rejectReason}}</span>
|
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ {{$t('state.waitingsubmit')}} ]</span>
|
|
|
|
+ </span>
|
|
|
|
+ <span v-if="user.company.packageEngineering == 1">
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ {{$t('other.waitingForProfessionalReview')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ {{$t('other.waitingForDepartmentReview')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ {{$t('other.waitForTheProjectReviewer')}}<span v-if="item2.projectAuditorName != null">
|
|
|
|
+ (
|
|
|
|
+ <span v-if="user.userNameNeedTranslate != 1">
|
|
|
|
+ {{item2.projectAuditorName}}
|
|
|
|
+ </span>
|
|
|
|
+ <span v-if="user.userNameNeedTranslate == 1">
|
|
|
|
+ <ww-open-data type='userName' :openid='item2.projectAuditorName'></ww-open-data>
|
|
|
|
+ </span>
|
|
|
|
+ )
|
|
|
|
+ </span>{{$t('other.audit')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ {{$t('state.alreadyPassed')}} ]</span>
|
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ {{$t('state.rejected')}} ] {{$t('other.reason')}}:{{item2.rejectReason}}</span>
|
|
|
|
+ <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ {{$t('state.waitingsubmit')}} ]</span>
|
|
|
|
+ </span>
|
|
|
|
+ </p>
|
|
|
|
+ <!-- 自定义日报文本 -->
|
|
|
|
+ <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item2.customText}}</p>
|
|
|
|
+ <p v-if="user.company.packageEngineering == 1">
|
|
|
|
+ {{$t('other.professionalProgress')}}:
|
|
|
|
+ <span style="margin-right:10px;" v-for="progressItem in item2.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%)
|
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 0" :content="$t('state.WaitingAudit')" effect="light" placement="top">
|
|
|
|
+ <i class="iconfont firerock-icondaibandengdaishenhe"></i>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 1" :content="$t('state.alreadyPassed')" effect="light" placement="top">
|
|
|
|
+ <i class="iconfont firerock-iconshenhetongguo"></i>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ <el-tooltip v-if="progressItem.auditState == 2" :content="$t('state.notThrough')" effect="light" placement="top">
|
|
|
|
+ <i class="iconfont firerock-iconshenhebohui"></i>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ </span>
|
|
|
|
+ </p>
|
|
|
|
+ <div v-if="item2.multiWorktime==0">
|
|
|
|
+ <p style="display: inline-block;">{{$t('time.duration')}}:
|
|
|
|
+ <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
|
|
|
|
+ <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
|
|
|
|
+ {{item2.time.toFixed(1)}}h
|
|
|
|
+ <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">{{$t('other.WorkOvertime')}}<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
|
|
|
|
+ </p>
|
|
|
|
+ <p>{{$t('other.matters')}}:<span v-html="item2.content"></span></p>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="item2.multiWorktime==1" >
|
|
|
|
+ <p>{{$t('other.projectDuration')}}:{{item2.time.toFixed(1)}}h <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">{{ $t('other.WorkOvertime') }}<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
|
|
|
|
+ <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
|
|
|
|
+ style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
|
|
|
|
+ <p style="display: inline-block;">{{$t('time.duration')}}:
|
|
|
|
+ <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
|
|
|
|
+ {{timeItem.time.toFixed(1)}}h
|
|
|
|
+ </p>
|
|
|
|
+ <p>{{$t('other.matters')}}:<span v-html="timeItem.content"></span></p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <p v-if="item2.state == 1 && user.timeType.needEvaluate == 1">{{$t('other.evaluation')}}:<span v-html="item2.evaluate"></span></p>
|
|
|
|
+
|
|
|
|
+ <!--照片的显示 -->
|
|
|
|
+ <p v-if="item2.pics != null && item2.pics.length > 0">
|
|
|
|
+ <el-image v-for="(pic, index) in item2.pics" :key="index"
|
|
|
|
+ style="width: 100px; height: 100px; margin-right:10px;"
|
|
|
|
+ :src="pic"
|
|
|
|
+ :preview-src-list="item2.pics">
|
|
|
|
+ </el-image>
|
|
|
|
+ </p>
|
|
|
|
+ </el-card>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
- <div class="issue">
|
|
|
|
|
|
+ <div class="issue" v-if="dynamicTab">
|
|
<!-- <el-input type="textarea" class="textareays" label-width="100%" label-height="140px"></el-input> -->
|
|
<!-- <el-input type="textarea" class="textareays" label-width="100%" label-height="140px"></el-input> -->
|
|
<div class="issue_fixation">
|
|
<div class="issue_fixation">
|
|
<div class="inputDeep"><el-input
|
|
<div class="inputDeep"><el-input
|
|
@@ -1307,7 +1431,9 @@
|
|
|
|
|
|
taskListPage: 1,
|
|
taskListPage: 1,
|
|
taskListSize: 20,
|
|
taskListSize: 20,
|
|
- taskListTotal: 0
|
|
|
|
|
|
+ taskListTotal: 0,
|
|
|
|
+ dynamicTab: true,
|
|
|
|
+ dailyList: []
|
|
};
|
|
};
|
|
|
|
|
|
},
|
|
},
|
|
@@ -1317,6 +1443,29 @@
|
|
}
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ // 获取来自日报
|
|
|
|
+ getDailyList(id) {
|
|
|
|
+ this.http.post('/report/getTaskReportList',{
|
|
|
|
+ // taskId: '22131'
|
|
|
|
+ taskId: id
|
|
|
|
+ },
|
|
|
|
+ res => {
|
|
|
|
+ if (res.code == "ok") {
|
|
|
|
+ this.dailyList = res.data
|
|
|
|
+ } else {
|
|
|
|
+ this.$message({
|
|
|
|
+ message: res.msg,
|
|
|
|
+ type: "error"
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ error => {
|
|
|
|
+ this.$message({
|
|
|
|
+ message: error,
|
|
|
|
+ type: "error"
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ },
|
|
restrictNumber(targetId) {
|
|
restrictNumber(targetId) {
|
|
let inpu = document.getElementById(targetId)
|
|
let inpu = document.getElementById(targetId)
|
|
inpu.value = inpu.value.replace(/[^\d.]/g, ""); //仅保留数字和"."
|
|
inpu.value = inpu.value.replace(/[^\d.]/g, ""); //仅保留数字和"."
|
|
@@ -2472,6 +2621,7 @@
|
|
this.getTaskProgressList(task.id); // 获取任务进展列表
|
|
this.getTaskProgressList(task.id); // 获取任务进展列表
|
|
this.getUsers(); // 获取名单数据
|
|
this.getUsers(); // 获取名单数据
|
|
this.gain(task); // 获取评论列表
|
|
this.gain(task); // 获取评论列表
|
|
|
|
+ this.getDailyList(task.id) // 获取来自日报
|
|
this.getRelationTaskList(1, task.id)
|
|
this.getRelationTaskList(1, task.id)
|
|
this.getTaskFileList(1,task.id)
|
|
this.getTaskFileList(1,task.id)
|
|
},
|
|
},
|
|
@@ -2540,6 +2690,7 @@
|
|
sk.push(e.userName)
|
|
sk.push(e.userName)
|
|
})
|
|
})
|
|
this.critic = new Set(sk)
|
|
this.critic = new Set(sk)
|
|
|
|
+ console.log(this.critic, '参与人',this.critic.length)
|
|
},
|
|
},
|
|
|
|
|
|
// 点击发布
|
|
// 点击发布
|
|
@@ -3403,6 +3554,30 @@
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+ .Daily p {
|
|
|
|
+ margin: 0 !important;
|
|
|
|
+ padding: 0 0 10px 0 !important;
|
|
|
|
+ }
|
|
|
|
+ .sub-all {
|
|
|
|
+ div {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ padding: 0 20px;
|
|
|
|
+ font-size: 20px;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ }
|
|
|
|
+ .subOn {
|
|
|
|
+ color: #66b1ff;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .DailyBody {
|
|
|
|
+ margin: 0 20px;
|
|
|
|
+ }
|
|
|
|
+ .Daily{
|
|
|
|
+ height: 120%;
|
|
|
|
+ overflow: auto;
|
|
|
|
+ }
|
|
|
|
+</style>
|
|
|
|
|
|
<style >
|
|
<style >
|
|
.taskCardCircleBox{
|
|
.taskCardCircleBox{
|