<template>
|
<GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm">
|
<div class="modal_wrap">
|
<div class="modal_content">
|
<div class="header">
|
<img v-if="info.status == '3' || info.status == '6'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png"
|
alt="">
|
<img v-else-if="info.status == '2' || info.status == '5'" class="head_bg"
|
src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
|
<img v-else-if="info.status == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt="">
|
<img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
|
<div class="left">
|
<div class="h1">物流车预约</div>
|
<div class="time">提交时间:{{ info.createDate }}</div>
|
</div>
|
<div class="right"
|
:class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{
|
statusMap[info.status] }}</div>
|
</div>
|
<div class="info">
|
<div class="title">物流车预约信息</div>
|
<div class="list">
|
<div class="item">
|
<div class="label">申请人</div>
|
<div class="value">{{ info.driverName }} {{ info.driverPhone }}</div>
|
</div>
|
<div class="item">
|
<div class="label">车牌照</div>
|
<div class="value">前 {{ info.carCodeFront }},后 {{ info.carCodeBack }}</div>
|
</div>
|
<div class="item">
|
<div class="label">合同编号</div>
|
<div class="value">{{ info.contractNum }}</div>
|
</div>
|
<div class="item">
|
<div class="label">到厂时间</div>
|
<div class="value">{{ info.arriveDate }}</div>
|
</div>
|
<div class="item">
|
<div class="label">入库类型</div>
|
<div class="value">{{ info.inType == 0 ? '整托盘' : '件烟' }}</div>
|
</div>
|
<div class="item">
|
<div class="label">总运输量</div>
|
<div class="value">{{ info.totalNum || info.ioQty }}万支</div>
|
</div>
|
<div class="item">
|
<div class="label">准运证照片</div>
|
<div v-if="info.transportImg" class="value">
|
<el-image style="width: 100px" :preview-src-list="[info.prefixUrl + info.transportImg]"
|
:src="info.prefixUrl + info.transportImg" alt="" />
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="side">
|
<div class="side_title">审批流程</div>
|
<div class="list" v-if="info.approveDateVO != null && info.approveDateVO.approveList != null">
|
<div class="item" v-for="item, index in info.approveDateVO.approveList">
|
<div v-if="index != info.approveDateVO.approveList.length - 1" class="separate"></div>
|
<div class="info">
|
<img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" />
|
<img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" />
|
<img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" />
|
<img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" />
|
</div>
|
<div class="avatar_wrap">
|
<img class="img" :src="item.faceImg
|
? item.faceImg
|
: require('@/assets/avatar/man.png')
|
" />
|
</div>
|
<div class="content">
|
<div class="head">
|
<div class="event">{{ item.title }}</div>
|
<div class="time">{{ item.checkDate }}</div>
|
</div>
|
<div class="name_wrap">
|
<span>{{ item.memberName }}<span v-if="item.statusInfo" class="status">({{ item.statusInfo
|
}})</span></span>
|
</div>
|
<div v-if="item.checkInfo" class="remark">
|
{{ item.checkInfo }}
|
</div>
|
<div v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="carbon">
|
<div class="carbon_item" v-for="child in item.approveList" :key="child.id">
|
<img v-if="child.faceImg != null && child.faceImg != ''" :src="child.faceImg" class="avatar" alt="" />
|
<img v-if="child.faceImg == null || child.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
|
alt="" />
|
<div class="text">{{ child.memberName }}</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<!-- -->
|
<template v-slot:footer>
|
<el-button @click="handleAppr(2)" type="primary" class="status-red" v-if="
|
info.approveDateVO != null &&
|
info.approveDateVO.canBeApproved != null &&
|
info.approveDateVO.canBeApproved == 1
|
">同意</el-button>
|
<el-button @click="handleAppr(3)" type="danger" v-if="
|
info.approveDateVO != null &&
|
info.approveDateVO.canBeApproved != null &&
|
info.approveDateVO.canBeApproved == 1
|
">拒绝</el-button>
|
<el-button @click="close">返回</el-button>
|
</template>
|
<!-- 同意/拒绝 -->
|
<el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px">
|
<el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
|
<el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '同意说明' : '拒绝说明'">
|
<el-input type="textarea" :placeholder="param.status == 2 ? '同意说明,非必填' : '拒绝说明必填'
|
" :rows="4" v-model="param.checkInfo" />
|
</el-form-item>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="isShowAppr = false">取消</el-button>
|
<el-button :loading="subLoading" type="primary" @click="onSubAppr">确定</el-button>
|
</span>
|
</el-dialog>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import {
|
getDriverJobDetail,
|
approveDo
|
} from '@/api'
|
export default {
|
components: { GlobalWindow },
|
data() {
|
return {
|
id: '',
|
type: '',
|
|
title: '物流车预约详情',
|
isShowModal: false,
|
info: {},
|
isShowAppr: false,
|
apprTitle: '同意',
|
subLoading: false,
|
param: {},
|
|
isShowProblem: false,
|
rules: {
|
checkInfo: [{ required: true, message: '请输入', trigger: 'blur' }]
|
},
|
statusMap: {
|
0: '待审核',
|
1: '处理中',
|
2: '已同意',
|
3: '已拒绝',
|
4: '已取消',
|
5: '他人或签',
|
6: '他人拒绝'
|
},
|
cateList: {
|
0: '访客申请',
|
1: '访客报备',
|
2: '用车申请',
|
3: '隐患随手拍',
|
4: '物流车申请'
|
}
|
}
|
},
|
methods: {
|
onSubAppr() {
|
this.$refs.ruleForm.validate((valid) => {
|
if (!valid) {
|
return
|
}
|
this.$dialog.actionConfirm('操作确认', this.param.status === 2 ? '您确认同意该申请吗?' : '您确认拒绝该申请吗?')
|
.then(() => {
|
this.subLoading = true
|
approveDo({
|
objId: this.id,
|
objType: 6,
|
status: this.param.status,
|
checkInfo: this.param.checkInfo
|
})
|
.then(res => {
|
this.subLoading = false
|
this.$tip.apiSuccess('处理成功')
|
this.getDetail()
|
this.$emit('success')
|
this.$emit('close')
|
this.isShowAppr = false
|
})
|
.finally(() => {
|
this.subLoading = false
|
})
|
})
|
})
|
},
|
getDetail() {
|
const { id } = this
|
getDriverJobDetail(id).then(res => {
|
this.info = res
|
if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) {
|
this.info.approveDateVO.approveList.forEach(item => {
|
if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
|
item.title = item.approveList[0].title
|
item.faceImg = item.approveList[0].faceImg
|
item.memberName = item.approveList[0].memberName
|
item.statusInfo = item.approveList[0].statusInfo
|
item.approveList = []
|
}
|
})
|
}
|
})
|
},
|
close() {
|
this.isShowModal = false
|
this.$emit('close')
|
},
|
handleAppr(val) {
|
this.$set(this.param, 'status', val)
|
this.apprTitle = val == 2 ? '同意' : '拒绝'
|
this.isShowAppr = true
|
},
|
confirm() {
|
console.log('--')
|
},
|
handleTransfer() {
|
this.isShowProblem = true
|
},
|
reject() { },
|
handleAvatarSuccess() { },
|
beforeAvatarUpload() { }
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
@import "@/assets/style/variables.scss";
|
|
.upload_box {
|
width: 84px;
|
height: 84px;
|
border-radius: 4px;
|
background-color: #f7f7f7;
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
align-items: center;
|
color: #999999;
|
border: 1px solid #e4e4e4;
|
|
.icon {
|
font-size: 24px;
|
}
|
|
.text {
|
font-size: 12px;
|
}
|
}
|
|
.side_title {
|
font-weight: 600;
|
font-size: 18px;
|
color: #111111;
|
margin-bottom: 20px;
|
margin-left: 20px;
|
margin-top: 20px;
|
}
|
|
.modal_wrap {
|
display: flex;
|
height: 100%;
|
|
.modal_content {
|
flex: 1;
|
padding: 0px 30px;
|
border-radius: 8px;
|
overflow: hidden;
|
height: 100%;
|
|
.title {
|
font-weight: 600;
|
font-size: 18px;
|
color: #333333;
|
margin-bottom: 20px;
|
margin-top: 30px;
|
}
|
|
.info {
|
.list {
|
display: flex;
|
flex-wrap: wrap;
|
|
.item {
|
display: flex;
|
width: 40%;
|
margin-bottom: 20px;
|
|
&:nth-of-type(2n) {
|
width: 60%;
|
}
|
|
.label {
|
color: #888888;
|
width: 100px;
|
}
|
|
.value {
|
color: #111111;
|
}
|
}
|
}
|
}
|
|
.header {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
padding: 20px 30px;
|
margin: 0 -30px;
|
border-radius: 8px 8px 0 0;
|
position: relative;
|
|
.head_bg {
|
position: absolute;
|
width: 100%;
|
height: 100%;
|
left: 0;
|
top: 0;
|
z-index: 9;
|
}
|
|
.h1 {
|
font-weight: 600;
|
font-size: 22px;
|
color: #111111;
|
margin-bottom: 8px;
|
}
|
|
.time {
|
font-size: 14px;
|
color: #999999;
|
}
|
|
.right {
|
height: 40px;
|
font-size: 16px;
|
color: #ffffff;
|
line-height: 40px;
|
padding: 0 20px;
|
background: #207ff7;
|
box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
|
border-radius: 16px 0px 16px 0px;
|
position: relative;
|
z-index: 99;
|
}
|
|
.scs {
|
background-color: #00BA67;
|
}
|
|
.msg {
|
background-color: #ED4545;
|
}
|
}
|
|
.table_info {
|
.name_wrap {
|
display: flex;
|
align-items: center;
|
|
.avatar {
|
width: 40px;
|
height: 40px;
|
border-radius: 50%;
|
margin-right: 12px;
|
}
|
|
.content {
|
.line {
|
display: flex;
|
}
|
|
.tag {
|
color: #b2cbf9;
|
border: 1px solid #b2cbf9;
|
padding: 0px 4px;
|
border-radius: 4px;
|
margin-left: 6px;
|
}
|
}
|
}
|
}
|
}
|
|
.side {
|
height: 100%;
|
width: 420px;
|
background: #ffffff;
|
border-left: 20px solid #f7f7f7;
|
|
.list {
|
.item {
|
padding: 8px 0;
|
display: flex;
|
margin-bottom: 24px;
|
position: relative;
|
|
.separate {
|
position: absolute;
|
border-left: 2px dashed #cccccc;
|
left: 31px;
|
height: calc(100% - 2px);
|
top: 42px;
|
}
|
|
.info {
|
padding-top: 10px;
|
margin-left: 20px;
|
margin-right: 16px;
|
|
.iconnew {
|
width: 24px;
|
height: 24px;
|
}
|
}
|
|
.avatar_wrap {
|
width: 40px;
|
height: 40px;
|
position: relative;
|
margin-right: 10px;
|
|
.img {
|
width: 40px;
|
height: 40px;
|
border-radius: 50%;
|
}
|
|
.status {
|
width: 14px;
|
height: 14px;
|
border-radius: 50%;
|
position: absolute;
|
right: 0;
|
bottom: 0;
|
}
|
|
}
|
|
.content {
|
flex: 1;
|
|
.head {
|
display: flex;
|
justify-content: space-between;
|
margin-bottom: 2px;
|
|
.event {
|
font-size: 15px;
|
}
|
|
.time {
|
font-size: 13px;
|
color: #999999;
|
}
|
}
|
|
.name_wrap {
|
font-size: 13px;
|
color: #777777;
|
|
.status {
|
color: $primaryColor;
|
}
|
}
|
|
.remark {
|
margin-top: 6px;
|
background-color: #f7f7f7;
|
padding: 7px 10px;
|
border-radius: 4px;
|
font-size: 13px;
|
color: #666666;
|
line-height: 18px;
|
}
|
}
|
|
.carbon {
|
display: flex;
|
width: 100%;
|
overflow-x: auto;
|
margin-top: 12px;
|
|
.carbon_item {
|
text-align: center;
|
flex-shrink: 0;
|
width: 60px;
|
|
img {
|
width: 36px;
|
height: 36px;
|
margin: 0 auto;
|
}
|
|
div {
|
font-size: 13px;
|
color: #777777;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
</style>
|