From 0fc9c0d48dccf86855a1210d97649dde38422a92 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 30 四月 2026 16:23:03 +0800
Subject: [PATCH] 小程序 | app
---
admin/src/components/business/OperaDriverEditWindow.vue | 353 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 353 insertions(+), 0 deletions(-)
diff --git a/admin/src/components/business/OperaDriverEditWindow.vue b/admin/src/components/business/OperaDriverEditWindow.vue
new file mode 100644
index 0000000..fc4f9e9
--- /dev/null
+++ b/admin/src/components/business/OperaDriverEditWindow.vue
@@ -0,0 +1,353 @@
+<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>
--
Gitblit v1.9.3