| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |