| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | width="900px" |
| | | :withFooter="false" |
| | | > |
| | | <div class="driver-approval"> |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">叿ºä¿¡æ¯</span> |
| | | <div class="approval-status"> |
| | | <el-tag v-if="detailInfo.auditStatus === 0" type="warning" class="status-tag">å¾
å®¡æ ¸</el-tag> |
| | | </div> |
| | | </div> |
| | | <div class="info-grid"> |
| | | <div class="info-item"> |
| | | <span class="label">叿ºå§åï¼</span> |
| | | <span class="value">{{ detailInfo.name || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ææææºå·ï¼</span> |
| | | <span class="value">{{ detailInfo.telephone || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">身份è¯å·ï¼</span> |
| | | <span class="value">{{ detailInfo.idcard || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">å©å§»æ
åµï¼</span> |
| | | <span class="value" v-if="detailInfo.maritalStatus === 3">丧å¶</span> |
| | | <span class="value" v-else-if="detailInfo.maritalStatus === 2">离å¼</span> |
| | | <span class="value" v-else-if="detailInfo.maritalStatus === 1">å·²å©</span> |
| | | <span class="value" v-else-if="detailInfo.maritalStatus === 0">æªå©</span> |
| | | <span class="value" v-else>-</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æ§å«ï¼</span> |
| | | <span class="value">{{ detailInfo.gender === 1 ? 'ç·' : detailInfo.gender === 2 ? '女' : '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ç°å±
ä½å°åï¼</span> |
| | | <span class="value">{{ detailInfo.livePlace || '-' }}</span> |
| | | </div> |
| | | <div class="info-item" v-if="detailInfo.auditStatus === 3 || detailInfo.auditStatus === 1" > |
| | | <span class="label">è¯çº§ï¼</span> |
| | | <span class="value" v-if="detailInfo.driverLevel ==5">S</span> |
| | | <span class="value" v-else-if="detailInfo.driverLevel ==4">A</span> |
| | | <span class="value" v-else-if="detailInfo.driverLevel ==3">B</span> |
| | | <span class="value" v-else-if="detailInfo.driverLevel ==2">C</span> |
| | | <span class="value" v-else-if="detailInfo.driverLevel ==1">D</span> |
| | | <span class="value" v-else>-</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ç¶æï¼</span> |
| | | <span class="value">{{ detailInfo.status === 0 ? 'å¯ç¨' : 'ç¦ç¨' }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">车è¾ä¿¡æ¯</span> |
| | | </div> |
| | | <div class="info-grid"> |
| | | <div class="info-item"> |
| | | <span class="label">车çå·ï¼</span> |
| | | <span class="value">{{ detailInfo.carCode || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">车è¾ç±»åï¼</span> |
| | | <span class="value">{{ detailInfo.carTypeName || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">车è¾é¢è²ï¼</span> |
| | | <span class="value">{{ detailInfo.carColor || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é©¾é©¶è¯æææï¼</span> |
| | | <span class="value">{{ detailInfo.cardStartDate || '-' }} è³ {{ detailInfo.cardEndDate || '-' }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">éä»¶ææ</span> |
| | | </div> |
| | | <div class="info-grid"> |
| | | <div class="info-item"> |
| | | <span class="label">èº«ä»½è¯æ£é¢ï¼</span> |
| | | <el-image |
| | | v-if="detailInfo.idcardImg" |
| | | style="width: 80px; height: 80px" |
| | | :src="detailInfo.imgPrefix + detailInfo.idcardImg" |
| | | :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImg]" |
| | | fit="cover" |
| | | ></el-image> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">身份è¯åé¢ï¼</span> |
| | | <el-image |
| | | v-if="detailInfo.idcardImgBack" |
| | | style="width: 80px; height: 80px" |
| | | :src="detailInfo.imgPrefix + detailInfo.idcardImgBack" |
| | | :preview-src-list="[detailInfo.imgPrefix + detailInfo.idcardImgBack]" |
| | | fit="cover" |
| | | ></el-image> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">车è¾ç
§çï¼</span> |
| | | <span v-if="!detailInfo.carImgList">-</span> |
| | | <div v-else class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.carImgList" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img.fileurlFull" |
| | | :preview-src-list="detailInfo.carImgList.map(item => item.fileurlFull)" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">驾驶è¯ç
§çï¼</span> |
| | | <span v-if="!detailInfo.licenseImgList">-</span> |
| | | <div v-else class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.licenseImgList" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img.fileurlFull" |
| | | :preview-src-list="detailInfo.licenseImgList.map(item => item.fileurlFull)" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">å
¶å®ææï¼</span> |
| | | <span v-if="!detailInfo.otherImgList">-</span> |
| | | <div v-else class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.otherImgList" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img.fileurlFull" |
| | | :preview-src-list="detailInfo.otherImgList.map(item => item.fileurlFull)" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="approval-form" v-if="detailInfo.auditStatus === 0" > |
| | | <el-form ref="approvalForm" :model="approvalForm" :rules="approvalForm.auditStatus ===0?approvalRules:approvalRules1"> |
| | | <el-form-item label="审æ¹ç»æ" prop="auditStatus"> |
| | | <el-radio-group v-model="approvalForm.auditStatus" @change="changeRadio"> |
| | | <el-radio :label="0">éè¿</el-radio> |
| | | <el-radio :label="1">æç»</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="叿ºè¯çº§" prop="driverLevel" v-if="approvalForm.auditStatus ===0"> |
| | | <el-select v-model="approvalForm.driverLevel" placeholder="è¯·éæ©å¸æºè¯çº§" style="width: 300px"> |
| | | <el-option label="S" :value="5"></el-option> |
| | | <el-option label="A" :value="4"></el-option> |
| | | <el-option label="B" :value="3"></el-option> |
| | | <el-option label="C" :value="2"></el-option> |
| | | <el-option label="D" :value="1"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å®¡æ¹æè§" prop="auditRemark" > |
| | | <el-input |
| | | type="textarea" |
| | | v-model="approvalForm.auditRemark" |
| | | placeholder="请è¾å
¥å®¡æ¹æè§" |
| | | :rows="3" |
| | | style="width: 400px" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div class="approval-buttons"> |
| | | <el-button @click="close">åæ¶</el-button> |
| | | <el-button type="primary" @click="handleConfirm" :loading="isWorking">ç¡®å®</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { getById, audit } from '@/api/business/driver' |
| | | export default { |
| | | name: 'OperaDriverApproval', |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | title: '叿ºå®¡æ ¸', |
| | | visible: false, |
| | | isWorking: false, |
| | | detailInfo: {}, |
| | | approvalForm: { |
| | | id: null, |
| | | auditStatus: 0, |
| | | driverLevel: '', |
| | | auditRemark: '' |
| | | }, |
| | | approvalRules: { |
| | | auditStatus: [{ required: true, message: 'è¯·éæ©å®¡æ¹ç»æ', trigger: 'change' }], |
| | | driverLevel: [{ required: true, message: 'è¯·éæ©å¸æºè¯çº§', trigger: 'change' }] |
| | | }, |
| | | approvalRules1: { |
| | | auditStatus: [{ required: true, message: 'è¯·éæ©å®¡æ¹ç»æ', trigger: 'change' }], |
| | | auditRemark: [{ required: true, message: '请è¾å
¥å®¡æ¹æè§', trigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | changeRadio(){ |
| | | this.$refs.approvalForm.clearValidate() |
| | | }, |
| | | open (title, row) { |
| | | this.title = title |
| | | this.approvalForm = { |
| | | id: row.id, |
| | | auditStatus: 0, |
| | | driverLevel: '', |
| | | auditRemark: '' |
| | | } |
| | | this.$nextTick(() => { |
| | | this.$refs.approvalForm && this.$refs.approvalForm.clearValidate() |
| | | }) |
| | | getById(row.id).then(res => { |
| | | this.detailInfo = res |
| | | this.visible = true |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | }, |
| | | close () { |
| | | this.visible = false |
| | | }, |
| | | handleConfirm () { |
| | | this.$refs.approvalForm.validate(valid => { |
| | | if (!valid) return |
| | | if (this.approvalForm.status === 2 && !this.approvalForm.remark) { |
| | | this.$message.warning('请è¾å
¥å®¡æ¹æè§') |
| | | return |
| | | } |
| | | this.isWorking = true |
| | | audit({ |
| | | id: this.approvalForm.id, |
| | | auditStatus: this.approvalForm.auditStatus, |
| | | driverLevel: this.approvalForm.driverLevel, |
| | | auditRemark: this.approvalForm.auditRemark |
| | | }).then(res => { |
| | | this.$tip.apiSuccess(res || 'å®¡æ ¸æå') |
| | | this.$emit('success', this.approvalForm) |
| | | this.visible = false |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }).finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .driver-approval { |
| | | |
| | | } |
| | | .section { |
| | | margin-bottom: 25px; |
| | | } |
| | | .checkinfo { |
| | | align-items:start !important; |
| | | display: flex !important; |
| | | flex-direction: column !important; |
| | | background-color: rgb(254 242 242); |
| | | min-height: 100px; |
| | | margin-bottom: 30px; |
| | | padding: 20px; |
| | | } |
| | | .section-header { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | margin-bottom: 15px; |
| | | flex-wrap: wrap; |
| | | } |
| | | .section-title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | padding-left: 10px; |
| | | border-left: 4px solid #2E68EC; |
| | | } |
| | | .approval-status { |
| | | margin-left: auto; |
| | | } |
| | | .status-tag { |
| | | font-size: 14px; |
| | | padding: 4px 12px; |
| | | } |
| | | .info-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(2, 1fr); |
| | | gap: 15px; |
| | | padding: 0 10px; |
| | | } |
| | | .info-item { |
| | | display: flex; |
| | | font-size: 14px; |
| | | } |
| | | .info-item.full-width { |
| | | grid-column: span 2; |
| | | } |
| | | .info-item .label { |
| | | color: #909399; |
| | | min-width: 110px; |
| | | } |
| | | .info-item .value { |
| | | color: #606266; |
| | | word-break: break-all; |
| | | } |
| | | .image-list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | .approval-form { |
| | | padding: 20px; |
| | | background: #f5f7fa; |
| | | border-top: 1px solid #eee; |
| | | } |
| | | .approval-form /deep/ .el-form-item { |
| | | margin-bottom: 15px; |
| | | } |
| | | .approval-form /deep/ .el-form-item:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | .approval-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | margin-top: 15px; |
| | | } |
| | | </style> |