|
@@ -3,13 +3,22 @@
|
|
|
<div class="approve-detail-wrap">
|
|
|
<div class="approve-detail">
|
|
|
<div class="approve-info">
|
|
|
- <span>研报名称:国内碰上了疫情,美国碰上了倒挂(1234)国内碰上了疫情,美国碰上了倒挂(1234)</span>
|
|
|
- <span>研报分类:中文研报/日度点评/知白守黑日评</span>
|
|
|
- <span style="min-width: 100px;">发起人:789</span>
|
|
|
+ <span>研报名称:{{reportInfo.title}}</span>
|
|
|
+ <span>研报分类:{{reportInfo.classify}}</span>
|
|
|
+ <span style="min-width: 100px;">发起人:{{reportInfo.approver}}</span>
|
|
|
</div>
|
|
|
<div class="approve-content"
|
|
|
v-loading="isLoading"
|
|
|
element-loading-text="研报加载中...">
|
|
|
+ <component v-if="reportInfo.reportId&&!isError"
|
|
|
+ :is="reportInfo.componentName"
|
|
|
+ :reportId="reportInfo.reportId"
|
|
|
+ :isPreview="true"
|
|
|
+ :isEn="reportInfo.type===2"
|
|
|
+ @reportStartLoading="isLoading=true"
|
|
|
+ @reportEndLoading="isLoading=false"
|
|
|
+ @reportError="isError=true"
|
|
|
+ ></component>
|
|
|
<!-- <ReportDetail
|
|
|
v-if="!isError"
|
|
|
:reportId="107"
|
|
@@ -18,11 +27,11 @@
|
|
|
@reportEndLoading="isLoading=false"
|
|
|
@reportError="isError=true"
|
|
|
/> -->
|
|
|
- <Reportdtl
|
|
|
+ <!-- <Reportdtl
|
|
|
:reportId="3528"
|
|
|
:isEn="false"
|
|
|
@reportError="isError=true"
|
|
|
- />
|
|
|
+ /> -->
|
|
|
<!-- <Reportdtl
|
|
|
:reportId="3750"
|
|
|
:isEn="true"
|
|
@@ -34,10 +43,10 @@
|
|
|
<div class="approve-tool">
|
|
|
<div class="tool-btn">
|
|
|
<!-- 根据审批的状态决定显示 -->
|
|
|
- <el-button>驳回</el-button>
|
|
|
- <el-button>通过</el-button>
|
|
|
- <el-button>撤销</el-button>
|
|
|
- <el-button>返回</el-button>
|
|
|
+ <el-button type="danger" v-if="formType==='approve'&&approveInfo.isCurrentApprover" @click="handleRejectApprove">驳回</el-button>
|
|
|
+ <el-button type="primary" v-if="formType==='approve'&&approveInfo.isCurrentApprover" @click="changeApprove('pass')">通过</el-button>
|
|
|
+ <el-button type="primary" v-if="formType==='myself'&&approveInfo.state!==4" @click="changeApprove('return')">撤销</el-button>
|
|
|
+ <el-button type="primary" plain @click="$router.replace('/approveList')">返回</el-button>
|
|
|
</div>
|
|
|
<div class="approve-timeline-wrap">
|
|
|
<p>审批流程</p>
|
|
@@ -46,11 +55,17 @@
|
|
|
:TimeLineData="TimeLineData"
|
|
|
/>
|
|
|
</div>
|
|
|
- <div class="approve-status">
|
|
|
- <img src="~@/assets/img/approve_m/pending.png" alt="">
|
|
|
+ <div class="approve-status" >
|
|
|
+ <img :src="require(`@/assets/img/approve_m/${approveInfo.stateText||'pending'}.png`)" alt="">
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <RejectDialog
|
|
|
+ :isDetailDialogShow="isDetailDialogShow"
|
|
|
+ :isEdit="true"
|
|
|
+ @close="isDetailDialogShow=false;"
|
|
|
+ @edit="rejectApprove"
|
|
|
+ />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -58,15 +73,37 @@
|
|
|
import ReportDetail from '@/views/smartReport/reportDetail.vue';
|
|
|
import Reportdtl from '@/views/report_manage/reportdtl.vue'
|
|
|
import TimeLine from './components/timeLine.vue';
|
|
|
+import RejectDialog from './components/rejectDialog.vue';
|
|
|
import {approveInterence} from '@/api/modules/approve.js';
|
|
|
export default {
|
|
|
+ components: { RejectDialog },
|
|
|
data() {
|
|
|
return {
|
|
|
isError:false,
|
|
|
isLoading:false,
|
|
|
- TimeLineData:[]
|
|
|
+ isDetailDialogShow:false,
|
|
|
+ TimeLineData:[],
|
|
|
+ formType:'detail',//进入审批详情的方式:approve(待处理)/detail(已处理)/myself(我发起的)
|
|
|
+ reportInfo:{ //报告相关信息
|
|
|
+ reportId:0,//研报or智能研报的报告id
|
|
|
+ title:'',
|
|
|
+ classify:'',
|
|
|
+ approver:'',
|
|
|
+ componentName:'',
|
|
|
+ type:0,//1中文研报 2英文研报 3智能研报
|
|
|
+ },
|
|
|
+ approveInfo:{//审批相关的信息
|
|
|
+ state:1,//当前审批的状态:1-待审批;2-已审批;3-已驳回;4-已撤回
|
|
|
+ stateText:'pending',//审批状态对应图片文字:待审批(pending),已通过(passed),已驳回(reject),已撤回(return)
|
|
|
+ isCurrentApprover:false,//审批进行中的节点审批人是否是当前用户
|
|
|
+ },
|
|
|
};
|
|
|
},
|
|
|
+ computed:{
|
|
|
+ UserId(){
|
|
|
+ return Number(localStorage.getItem("AdminId"));
|
|
|
+ }
|
|
|
+ },
|
|
|
methods: {
|
|
|
getApproveDetail(){
|
|
|
const {type,approveId} = this.$route.query
|
|
@@ -74,49 +111,139 @@ export default {
|
|
|
approveInterence.getApproveDetail({
|
|
|
ReportApproveId:Number(approveId)
|
|
|
}).then(res=>{
|
|
|
- if(res.Ret!==200) return
|
|
|
- console.log('res',res)
|
|
|
+ if(res.Ret!==200) return
|
|
|
+ //格式化时间线数据
|
|
|
this.formatTimeLineData(res.Data)
|
|
|
-
|
|
|
+ const {Report={},Approve={}} = res.Data||{}
|
|
|
+ this.reportInfo = {
|
|
|
+ reportId:Report.ReportId||0,
|
|
|
+ title:Report.ReportTitle||'',
|
|
|
+ classify:Report.ReportClassify||'',
|
|
|
+ approver:Approve.ApplyUserName||'',
|
|
|
+ componentName:Report.ReportType===3?'ReportDetail':'Reportdtl',
|
|
|
+ type:Report.ReportType
|
|
|
+ }
|
|
|
+ this.formType = type||'detail'
|
|
|
+ this.approveInfo.state=Approve.State
|
|
|
+ this.approveInfo.stateText=['','pending','passed','reject','return'][Approve.State]
|
|
|
})
|
|
|
},
|
|
|
//转换接口数据
|
|
|
formatTimeLineData({Approve={},ApproveFlowNodes=[]}){
|
|
|
const ApproveType = ['','依次审批','会签','或签']
|
|
|
+ const ApproveState = ['','待审批','已审批','已驳回']
|
|
|
+ //发起人节点
|
|
|
const startNode = {
|
|
|
nodeType:1,
|
|
|
nodeText:'发起人:',
|
|
|
+ nodeStatus:'passed',
|
|
|
approveList:[{
|
|
|
- approveName:Approve.ApplyUserName||'',
|
|
|
+ approverName:Approve.ApplyUserName||'',
|
|
|
approveTime:Approve.CreateTime||''
|
|
|
}]
|
|
|
}
|
|
|
- let Nodes = ApproveFlowNodes.map(i=>{
|
|
|
+ //审批节点,已做了排序
|
|
|
+ let currentIndex = 0
|
|
|
+ let Nodes = ApproveFlowNodes.map((i,index)=>{
|
|
|
+ //找到当前节点的index
|
|
|
+ if(i.ReportApproveNodeId===Approve.CurrNodeId){
|
|
|
+ currentIndex = index
|
|
|
+ }
|
|
|
const node = {
|
|
|
nodeType:2,
|
|
|
nodeText:'审批人:'+i.Users.length+'人('+ApproveType[i.ApproveType]+')',
|
|
|
- nodeStatus:i.ReportApproveNodeId===Approve.CurrNodeId?'process':'reject',
|
|
|
+ nodeStatus:i.ReportApproveNodeId===Approve.CurrNodeId?'process':'future',
|
|
|
approveType:ApproveType[i.ApproveType]
|
|
|
}
|
|
|
const approveList = i.Users.map(u=>{
|
|
|
+ const {State='',ApproveTime='',ApproveRemark=''}=u.ApproveRecord||{}
|
|
|
return {
|
|
|
approverName:u.UserName,
|
|
|
- approveStatus:u.ApproveRecord.State,
|
|
|
- approveTime:u.ApproveRecord.ApproveTime,
|
|
|
- approveReason:u.ApproveRecord.ApproveRemark
|
|
|
+ approveStatus:ApproveState[State]||'',
|
|
|
+ approveTime:ApproveTime,
|
|
|
+ approveReason:ApproveRemark
|
|
|
}
|
|
|
})
|
|
|
+ //检测当前节点的User与当前用户是否匹配
|
|
|
+ if(i.ReportApproveNodeId===Approve.CurrNodeId){
|
|
|
+ //当前节点的User中,有没有当前用户
|
|
|
+ const hasUser = i.Users.findIndex(u=>u.UserId===this.UserId)
|
|
|
+ if(hasUser!==-1){
|
|
|
+ //只有依次审批需要看顺序
|
|
|
+ if(i.ApproveType===1){
|
|
|
+ this.approveInfo.isCurrentApprover = i.Users[hasUser].ApproveRecord?true:false
|
|
|
+ }else{
|
|
|
+ this.approveInfo.isCurrentApprover = true
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ this.approveInfo.isCurrentApprover = false
|
|
|
+ }
|
|
|
+ }
|
|
|
node.approveList = approveList
|
|
|
return node
|
|
|
})
|
|
|
- this.TimeLineData = [...startNode,...Nodes]
|
|
|
-
|
|
|
+ Nodes.forEach((n,index)=>{
|
|
|
+ if(index<currentIndex){
|
|
|
+ n.nodeStatus = 'passed'
|
|
|
+ }
|
|
|
+ if(index>currentIndex){
|
|
|
+ n.nodeStatus = 'future'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ //如果当前审批是已驳回,移除当前节点后面的节点
|
|
|
+ if(Approve.State===3){
|
|
|
+ Nodes = Nodes.filter((_,index)=>index<=currentIndex)
|
|
|
+ Nodes[currentIndex].nodeStatus = 'reject'
|
|
|
+ }
|
|
|
+ //如果当前审批已撤销,移除当前节点后面的节点,在最后加上撤销节点
|
|
|
+ if(Approve.State===4){
|
|
|
+ Nodes = Nodes.filter((_,index)=>index<=currentIndex)
|
|
|
+ //检查最后一个节点是否有人审批
|
|
|
+ let hasApprove = true
|
|
|
+ Nodes[currentIndex].approveList.forEach(u=>{
|
|
|
+ if(!u.approveStatus){
|
|
|
+ hasApprove = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ //若没有,则把这个节点删除
|
|
|
+ !hasApprove&&(Nodes.pop())
|
|
|
+ Nodes.push({
|
|
|
+ nodeType:3,
|
|
|
+ nodeText:'发起人:',
|
|
|
+ nodeStatus:'return',
|
|
|
+ approveList:[{
|
|
|
+ approverName:(Approve.ApplyUserName||'')+'(已撤销)',
|
|
|
+ approveTime:Approve.ModifyTime||''
|
|
|
+ }],
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.TimeLineData = [startNode,...Nodes]
|
|
|
+ },
|
|
|
+ changeApprove(type){
|
|
|
+ const {approveId} = this.$route.query
|
|
|
+ if(!approveId) return
|
|
|
+ },
|
|
|
+ handleRejectApprove(){
|
|
|
+ console.log('a?')
|
|
|
+ //打开驳回理由弹窗
|
|
|
+ this.isDetailDialogShow = true
|
|
|
+ },
|
|
|
+ rejectApprove(reason){
|
|
|
+ this.isDetailDialogShow = false
|
|
|
+ approveInterence.rejectApprove({
|
|
|
+ ReportApproveId:Number(this.$route.query.approveId),
|
|
|
+ ApproveRemark:reason||''
|
|
|
+ }).then(res=>{
|
|
|
+ if(res.Ret!==200) return
|
|
|
+ this.$message.success("驳回成功")
|
|
|
+ this.$router.replace("/approveList")
|
|
|
+ })
|
|
|
}
|
|
|
},
|
|
|
mounted(){
|
|
|
this.getApproveDetail()
|
|
|
},
|
|
|
- components: { TimeLine, ReportDetail ,Reportdtl }
|
|
|
+ components: { TimeLine, ReportDetail, Reportdtl, RejectDialog }
|
|
|
};
|
|
|
</script>
|
|
|
|