已添加16个文件
已删除59个文件
已修改8个文件
| | |
| | | # å¼åç¯å¢é
ç½® |
| | | NODE_ENV = 'development' |
| | | VUE_APP_API_URL = 'http://192.168.1.44:10010' |
| | | VUE_APP_API_URL = 'http://192.168.1.4:10010' |
| | | # VUE_APP_API_URL = 'https://jinkuai.832smartfarm.com/jinkuai_admin' |
| | |
| | | import request from '../../utils/request' |
| | | |
| | | export function fetchList (data) { |
| | | return request.post('/business/driver/page', data, { |
| | | return request.post('/business/driverInfo/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | export function getById (id) { |
| | | return request.get(`/business/driver/${id}`) |
| | | return request.get(`/business/driverInfo/detail/${id}`) |
| | | } |
| | | |
| | | export function updateStatus (data) { |
| | | return request.post('/business/driver/updateStatus', data, { |
| | | return request.post('/business/driverInfo/updateStatus', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | export function exportExcel (data) { |
| | | return request.post('/business/driver/exportExcel', data, { |
| | | return request.post('/business/driverInfo/exportExcel', data, { |
| | | download: true, |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | export function audit (data) { |
| | | return request.post('/business/driverInfo/audit', data, { |
| | | trim: true |
| | | }) |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '../../utils/request' |
| | | |
| | | export function fetchList (data) { |
| | | return request.post('/business/orders/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | export function getById (id) { |
| | | return request.get(`/business/orders/detail/${id}`) |
| | | } |
| | | |
| | | export function exportExcel (data) { |
| | | return request.post('/business/orders/exportExcel', data, { |
| | | download: true, |
| | | trim: true |
| | | }) |
| | | } |
| | |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | }, |
| | | // æ¥è¯¢å¼å°å¯éè§åå表 |
| | | // æ¥è¯¢é¢è®¡æ¶æ |
| | | fetchEstimatedDelivery () { |
| | | estimatedDelivery(this.form.cityId) |
| | | .then(data => { |
| | | this.timeTableData = [ |
| | | data |
| | | ] |
| | | this.timeTableData = data |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | |
| | | Promise.all([ |
| | | batchSave({ cityId: this.form.cityId, items: this.jiudiTableData }), |
| | | batchSaveRemoteDelivery({ cityId: this.form.cityId, items: this.remoteTableData }), |
| | | batchSaveEstimatedDelivery({ cityId: this.form.cityId, ...this.timeTableData[0] }), |
| | | batchSaveEstimatedDelivery({ cityId: this.form.cityId, items: this.timeTableData }), |
| | | batchSaveStoreDeposit({ cityId: this.form.cityId, items: this.storeDepositData }), |
| | | batchSaveRevenueShare({ cityId: this.form.cityId, items: this.shareTableData }) |
| | | ]) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('ä¿åæå') |
| | | // this.$tip.apiSuccess('ä¿åæå') |
| | | this.$emit('success') |
| | | }) |
| | | .catch(e => { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | title="æå¨æ´¾å" |
| | | :visible.sync="visible" |
| | | width="700px" |
| | | @confirm="handleConfirm" |
| | | @close="handleClose" |
| | | > |
| | | <div class="dispatch-info"> |
| | | <div class="info-row"> |
| | | <div class="info-item"> |
| | | <span class="label">订åç¼å·ï¼</span> |
| | | <span class="value">{{ orderInfo.orderNo }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">å®ä»éé¢ï¼</span> |
| | | <span class="value">Â¥{{ (orderInfo.payAmount / 100).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é
éæ¹å¼ï¼</span> |
| | | <span class="value"> |
| | | <span v-if="orderInfo.deliveryType === 1">æ®éé
é</span> |
| | | <span v-else-if="orderInfo.deliveryType === 2">æ¥éè¾¾</span> |
| | | <span v-else-if="orderInfo.deliveryType === 3">å¼å°å¯é</span> |
| | | <span v-else>-</span> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-table :data="orderInfo.goodsList" stripe class="goods-table"> |
| | | <el-table-column prop="goodsName" label="ç©ååç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="goodsSize" label="ç©å尺寸" min-width="80px"></el-table-column> |
| | | <el-table-column label="é
éä»·ï¼å
ï¼" min-width="100px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.deliveryPrice / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="quantity" label="æ°é" min-width="60px"></el-table-column> |
| | | <el-table-column label="å°è®¡ï¼å
ï¼" min-width="100px"> |
| | | <template slot-scope="{row}">Â¥{{ ((row.deliveryPrice * row.quantity) / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form"> |
| | | <el-form-item label="é
é叿º" prop="driverId"> |
| | | <el-select v-model="form.driverId" placeholder="è¯·éæ©é
é叿º" style="width: 100%"> |
| | | <el-option label="叿ºA" :value="1"></el-option> |
| | | <el-option label="叿ºB" :value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å æ¥è´¹" prop="urgentFee"> |
| | | <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 100%"></el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="夿³¨è¯´æ" prop="remark"> |
| | | <el-input type="textarea" v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨è¯´æ" :rows="3"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | |
| | | export default { |
| | | name: 'OperaDispatch', |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | visible: false, |
| | | orderInfo: { |
| | | orderNo: '', |
| | | payAmount: 0, |
| | | deliveryType: '', |
| | | goodsList: [] |
| | | }, |
| | | form: { |
| | | driverId: '', |
| | | urgentFee: 0, |
| | | remark: '' |
| | | }, |
| | | rules: { |
| | | driverId: [{ required: true, message: 'è¯·éæ©é
é叿º', trigger: 'change' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | open (row) { |
| | | this.orderInfo = { |
| | | orderNo: row.orderNo, |
| | | payAmount: row.payAmount || 0, |
| | | deliveryType: row.deliveryType || '', |
| | | goodsList: row.goodsList || [] |
| | | } |
| | | this.form = { |
| | | driverId: '', |
| | | urgentFee: 0, |
| | | remark: '' |
| | | } |
| | | this.visible = true |
| | | }, |
| | | handleClose () { |
| | | this.visible = false |
| | | }, |
| | | handleConfirm () { |
| | | this.$refs.form.validate(valid => { |
| | | if (!valid) return |
| | | this.$emit('confirm', { |
| | | orderId: this.orderInfo.id, |
| | | ...this.form |
| | | }) |
| | | this.visible = false |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .dispatch-info { |
| | | margin-bottom: 20px; |
| | | } |
| | | .info-row { |
| | | display: flex; |
| | | gap: 30px; |
| | | padding: 15px; |
| | | background: #f5f7fa; |
| | | border-radius: 4px; |
| | | } |
| | | .info-item { |
| | | display: flex; |
| | | font-size: 14px; |
| | | } |
| | | .info-item .label { |
| | | color: #909399; |
| | | } |
| | | .info-item .value { |
| | | color: #606266; |
| | | } |
| | | .goods-table { |
| | | margin-bottom: 20px; |
| | | } |
| | | .dispatch-form { |
| | | margin-top: 20px; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | | <el-tag type="success" v-if="detailInfo.auditStatus">å·²ææææºå·</el-tag> |
| | | <el-tag type="warning" v-else>æªææææºå·</el-tag> |
| | | <div class="approval-status"> |
| | | <el-tag v-if="detailInfo.auditStatus === 0" type="warning" class="status-tag">å¾
å®¡æ ¸</el-tag> |
| | | <el-tag v-else-if="detailInfo.auditStatus === 1" type="success" class="status-tag">审æ¹éè¿</el-tag> |
| | | <el-tag v-else-if="detailInfo.auditStatus === 2" type="danger" 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"> |
| | | <span class="label">è¯çº§ï¼</span> |
| | | <span class="value">{{ detailInfo.driverLevel || '-' }}</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="approvalRules"> |
| | | <el-form-item label="审æ¹ç»æ" prop="auditStatus"> |
| | | <el-radio-group v-model="approvalForm.auditStatus"> |
| | | <el-radio :label="0">éè¿</el-radio> |
| | | <el-radio :label="1">æç»</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="叿ºè¯çº§" prop="driverLevel"> |
| | | <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' }], |
| | | auditRemark: [{ required: true, message: '请è¾å
¥å®¡æ¹æè§', trigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, row) { |
| | | this.title = title |
| | | this.approvalForm = { |
| | | id: row.id, |
| | | auditStatus: 1, |
| | | 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; |
| | | } |
| | | .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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | width="900px" |
| | | :withFooter="false" |
| | | > |
| | | <div class="driver-detail"> |
| | | <el-tabs v-model="activeTab"> |
| | | <el-tab-pane label="åºæ¬ä¿¡æ¯" name="basic"></el-tab-pane> |
| | | <el-tab-pane label="叿ºä¸å¡" name="business"></el-tab-pane> |
| | | </el-tabs> |
| | | |
| | | <div v-show="activeTab === 'basic'" class="tab-content"> |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">叿ºä¿¡æ¯</span> |
| | | <el-tag type="success" v-if="detailInfo.auditStatus">å·²ææææºå·</el-tag> |
| | | <el-tag type="warning" v-else>æªææææºå·</el-tag> |
| | | </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> |
| | | </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"> |
| | | <span class="label">è¯çº§ï¼</span> |
| | | <span class="value">{{ detailInfo.driverLevel || '-' }}</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> |
| | | |
| | | <div v-show="activeTab === 'business'" class="tab-content"> |
| | | <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="订åç¼å·" prop="orderNo"> |
| | | <el-input v-model="searchForm.orderNo" clearable placeholder="请è¾å
¥è®¢åç¼å·"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç©åä¿¡æ¯" prop="goodsInfo"> |
| | | <el-input v-model="searchForm.goodsInfo" clearable placeholder="请è¾å
¥ç©åä¿¡æ¯"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å建æ¶é´" prop="createTime"> |
| | | <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd" |
| | | range-separator="-" start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ" @change="handleDateChange" /> |
| | | </el-form-item> |
| | | <el-form-item label="订åç¶æ" prop="orderStatus"> |
| | | <el-select v-model="searchForm.orderStatus" clearable placeholder="è¯·éæ©è®¢åç¶æ"> |
| | | <el-option label="å¾
åä»¶" :value="1"></el-option> |
| | | <el-option label="é
éä¸" :value="2"></el-option> |
| | | <el-option label="已宿" :value="3"></el-option> |
| | | <el-option label="已忶" :value="4"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»ç®ç¶æ" prop="settleStatus"> |
| | | <el-select v-model="searchForm.settleStatus" clearable placeholder="è¯·éæ©ç»ç®ç¶æ"> |
| | | <el-option label="æªç»ç®" :value="0"></el-option> |
| | | <el-option label="å·²ç»ç®" :value="1"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="searchBusiness">æç´¢</el-button> |
| | | <el-button @click="resetBusiness">éç½®</el-button> |
| | | </section> |
| | | </el-form> |
| | | |
| | | <div class="statistics"> |
| | | <span>è®¢åæ°ï¼{{ statistics.orderCount }}</span> |
| | | <span>è®¢åæ»ä»·ï¼Â¥{{ (statistics.orderAmount / 100).toFixed(2) }}</span> |
| | | <span>ç»ç®æ»ä»·ï¼Â¥{{ (statistics.settleAmount / 100).toFixed(2) }}</span> |
| | | </div> |
| | | |
| | | <el-table :data="businessData.list" stripe> |
| | | <el-table-column prop="orderNo" label="订åç¼å·" min-width="150px"></el-table-column> |
| | | <el-table-column prop="goodsInfo" label="ç©åä¿¡æ¯" min-width="120px"></el-table-column> |
| | | <el-table-column prop="type" label="ç±»å" min-width="80px"></el-table-column> |
| | | <el-table-column prop="level" label="订å级å«" min-width="80px"></el-table-column> |
| | | <el-table-column label="ç©åä¿è´¹ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.insuranceAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="åºç¡æå¡è´¹ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.serviceAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="订åç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.orderStatus === 1">å¾
åä»¶</span> |
| | | <span v-else-if="row.orderStatus === 2">é
éä¸</span> |
| | | <span v-else-if="row.orderStatus === 3">已宿</span> |
| | | <span v-else-if="row.orderStatus === 4">已忶</span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç»ç®ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span :style="{ color: row.settleStatus === 1 ? '#67c23a' : '#e6a23c' }"> |
| | | {{ row.settleStatus === 1 ? 'å·²ç»ç®' : 'æªç»ç®' }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleBusinessSizeChange" |
| | | @current-change="handleBusinessPageChange" |
| | | :pagination="businessData.pagination" |
| | | ></pagination> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import { getById } from '@/api/business/driver' |
| | | |
| | | export default { |
| | | name: 'OperaDriverDetail', |
| | | components: { GlobalWindow, Pagination }, |
| | | data () { |
| | | return { |
| | | title: '叿ºè¯¦æ
', |
| | | visible: false, |
| | | activeTab: 'basic', |
| | | detailInfo: {}, |
| | | searchForm: { |
| | | orderNo: '', |
| | | goodsInfo: '', |
| | | createTime: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | orderStatus: '', |
| | | settleStatus: '' |
| | | }, |
| | | statistics: { |
| | | orderCount: 0, |
| | | orderAmount: 0, |
| | | settleAmount: 0 |
| | | }, |
| | | businessData: { |
| | | list: [], |
| | | pagination: { page: 1, size: 10, total: 0 } |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | open (title, row) { |
| | | this.title = title |
| | | this.activeTab = 'basic' |
| | | getById(row.id).then(res => { |
| | | this.detailInfo = res |
| | | this.visible = true |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | }, |
| | | searchBusiness () { |
| | | }, |
| | | resetBusiness () { |
| | | this.searchForm = { |
| | | orderNo: '', |
| | | goodsInfo: '', |
| | | createTime: '', |
| | | startTime: '', |
| | | endTime: '', |
| | | orderStatus: '', |
| | | settleStatus: '' |
| | | } |
| | | this.searchBusiness() |
| | | }, |
| | | handleDateChange (val) { |
| | | this.searchForm.startTime = val ? val[0] : '' |
| | | this.searchForm.endTime = val ? val[1] : '' |
| | | }, |
| | | handleBusinessSizeChange () { |
| | | }, |
| | | handleBusinessPageChange () { |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .driver-detail { |
| | | width: 100%; |
| | | } |
| | | .tab-content { |
| | | margin-top: 20px; |
| | | } |
| | | .section { |
| | | margin-bottom: 25px; |
| | | } |
| | | .section-header { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | margin-bottom: 15px; |
| | | } |
| | | .section-title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | padding-left: 10px; |
| | | border-left: 4px solid #2E68EC; |
| | | } |
| | | .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; |
| | | } |
| | | .statistics { |
| | | display: flex; |
| | | gap: 40px; |
| | | padding: 15px; |
| | | background: #f5f7fa; |
| | | border-radius: 4px; |
| | | margin-bottom: 15px; |
| | | font-size: 14px; |
| | | color: #606266; |
| | | margin: 20px 0; |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | width="900px" |
| | | :withFooter="false" |
| | | > |
| | | <div class="order-detail" v-if="detailInfo"> |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">订å详æ
</span> |
| | | <el-tag v-if="detailInfo.status === 1" type="warning">å¾
åä»¶</el-tag> |
| | | <el-tag v-else-if="detailInfo.status === 2" type="primary">é
éä¸</el-tag> |
| | | <el-tag v-else-if="detailInfo.status === 3" type="success">已宿</el-tag> |
| | | <el-tag v-else-if="detailInfo.status === 4" type="info">已忶</el-tag> |
| | | </div> |
| | | <div class="info-grid"> |
| | | <div class="info-item"> |
| | | <span class="label">订åç¼å·ï¼</span> |
| | | <span class="value">{{ detailInfo.order.code || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">å建æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.order.createTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">订åç±»åï¼</span> |
| | | <span class="value"> |
| | | <span v-if="detailInfo.order.type === 0">å°±å°åå</span> |
| | | <span v-else-if="detailInfo.order.type === 1">å¼å°åå</span> |
| | | <span v-else>-</span> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="info-item"> |
| | | <span class="label">æ¯ä»æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.order.payTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æ¯ä»æ¹å¼ï¼</span> |
| | | <span class="value"> |
| | | <span>微信æ¯ä»</span> |
| | | </span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">å®ä»éé¢ï¼</span> |
| | | <span class="value"> |
| | | <span>Â¥{{ (detailInfo.order.payAmount / 100).toFixed(2) }}</span> |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="info-item"> |
| | | <span class="label">订å级å«ï¼</span> |
| | | <span class="value">{{ detailInfo.order.orderLevel || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é¢è®¡å°åºæ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.order.expectedDepositTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é¢è®¡åä»¶æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.order.expectedTakeTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">è®¢åæ»ä»·ï¼</span> |
| | | <span class="value">Â¥{{ (detailInfo.order.totalAmount / 100).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ä¿ä»·éé¢ï¼</span> |
| | | <span class="value">Â¥{{ (detailInfo.order.declaredAmount / 100).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ç©åä¿è´¹ï¼</span> |
| | | <span class="value">Â¥{{ (detailInfo.order.declaredFee / 100).toFixed(2) }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é¢è®¡å¯å天æ°/é
ééç¨ï¼</span> |
| | | <span class="value">{{ detailInfo.order.estimatedDepositDays || '-' }}天/{{ detailInfo.order.distance || '-' }}å
Ž</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">客æ·å¤æ³¨ï¼</span> |
| | | <span class="value">{{ detailInfo.order.remark || '-' }}</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">ç©åæç
§ï¼</span> |
| | | <div v-if="detailInfo.depositImages && detailInfo.depositImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.depositImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.depositImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</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.memberName || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">ææºå·ç ï¼</span> |
| | | <span class="value">{{ detailInfo.memberPhone || '-' }}</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.order.takeUser || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æ¶ä»¶äººçµè¯ï¼</span> |
| | | <span class="value">{{ detailInfo.order.takePhone || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">å¯ä»¶å°åï¼</span> |
| | | <span class="value">{{ detailInfo.order.depositLocation || '' }}{{ detailInfo.order.depositLocationRemark || '' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æ¶ä»¶å°åï¼</span> |
| | | <span class="value">{{ detailInfo.order.takeLocation || '' }}{{ detailInfo.order.takeLocationRemark || '' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æ¯å¦æ¶ä»¶æå¡ç¹ï¼</span> |
| | | <span class="value">{{ detailInfo.order.takeShopId ? 'æ¯' : 'å¦' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">é
é叿ºï¼</span> |
| | | <span class="value">{{ detailInfo.driverName || '-' }}</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">é¨åºæ¶ä»¶æç
§ï¼</span> |
| | | <div v-if="detailInfo.storeInImages && detailInfo.storeInImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.storeInImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.storeInImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">叿ºåä»¶æç
§ï¼</span> |
| | | <div v-if="detailInfo.driverTakeImages && detailInfo.driverTakeImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.driverTakeImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.driverTakeImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">叿ºéè¾¾æç
§/é¨åºå
¥åºæç
§ï¼</span> |
| | | <div v-if="detailInfo.driverDoneImages && detailInfo.driverDoneImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.driverDoneImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.driverDoneImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">é¨åºåºåºæç
§ï¼</span> |
| | | <div v-if="detailInfo.storeOutImages && detailInfo.storeOutImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.storeOutImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.storeOutImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</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.platformUserName || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">åæ¶æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.order.cancelTime || '-' }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="section" v-if="detailInfo.ordersRefund"> |
| | | <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.ordersRefund.cancelInfo || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">鿬¾ç³è¯·æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.ordersRefund.createTime || '-' }}</span> |
| | | </div> |
| | | |
| | | |
| | | <div class="info-item"> |
| | | <span class="label">鿬¾éé¢ï¼</span> |
| | | <span class="value">{{ detailInfo.ordersRefund.createTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">鿬¾å¤çæ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.ordersRefund.refundTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">鿬¾æ¹å¼ï¼</span> |
| | | <span class="value" v-if="detailInfo.ordersRefund.type === 0">æªåä»¶ç´æ¥åæ¶</span> |
| | | <span class="value" v-else-if="detailInfo.ordersRefund.type === 1">å¹³å°ç´æ¥åæ¶</span> |
| | | <span class="value" v-else-if="detailInfo.ordersRefund.type === 2">å·²åä»¶ç³è¯·åæ¶</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">鿬¾å¤æ³¨ï¼</span> |
| | | <span class="value">{{ detailInfo.ordersRefund.remark || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æä½äººï¼</span> |
| | | <span class="value">{{ detailInfo.platformUserName || '-' }}</span> |
| | | </div> |
| | | <div class="info-item"> |
| | | <span class="label">æä½æ¶é´ï¼</span> |
| | | <span class="value">{{ detailInfo.ordersRefund.updateTime || '-' }}</span> |
| | | </div> |
| | | <div class="info-item full-width"> |
| | | <span class="label">é¨åºé款æç
§ï¼</span> |
| | | <div v-if="detailInfo.refundTakeImages && detailInfo.refundTakeImages.length" class="image-list"> |
| | | <el-image |
| | | v-for="(img, index) in detailInfo.refundTakeImages" |
| | | :key="index" |
| | | style="width: 80px; height: 80px; margin-right: 10px" |
| | | :src="img" |
| | | :preview-src-list="detailInfo.refundTakeImages" |
| | | fit="cover" |
| | | ></el-image> |
| | | </div> |
| | | <span v-else>-</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="section"> |
| | | <div class="section-header"> |
| | | <span class="section-title">ç©åä¿¡æ¯</span> |
| | | </div> |
| | | <el-table :data="detailInfo.detailList" stripe class="goods-table"> |
| | | <el-table-column prop="typeName" label="ç©ååç§°" min-width="80px"></el-table-column> |
| | | <el-table-column prop="luggageName" label="ç©å尺寸" min-width="80px"></el-table-column> |
| | | <el-table-column label="åä»·ï¼å
ï¼" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | ¥{{ (row.unitPriceYuan / 100).toFixed(2) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="num" label="æ°é" min-width="60px"></el-table-column> |
| | | <el-table-column label="å°è®¡ï¼å
ï¼" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | ¥{{ (row.subtotal / 100).toFixed(2) }} |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="price-summary"> |
| | | <span>åºç¡æå¡è´¹ï¼Â¥{{ (detailInfo.order.price / 100).toFixed(2) }}</span> |
| | | <span>ç©åä¿è´¹ï¼Â¥{{ (detailInfo.order.declaredFee / 100).toFixed(2) }}</span> |
| | | <span>è®¢åæ»ä»·ï¼Â¥{{ (detailInfo.order.totalAmount / 100).toFixed(2) }}</span> |
| | | <span>å®é
æ¯ä»ï¼Â¥{{ (detailInfo.order.payAmount / 100).toFixed(2) }}</span> |
| | | <span>鿬¾éé¢ï¼Â¥{{ (detailInfo.order.refundAmount / 100).toFixed(2) }}</span> |
| | | <span>è¶
æ¶éé¢ï¼Â¥{{ (detailInfo.order.overdueAmount / 100).toFixed(2) }}</span> |
| | | <span>å¼å¸¸éé¢ï¼Â¥{{ (detailInfo.order.exceptionAmount / 100).toFixed(2) }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { getById } from '@/api/business/orderManagement' |
| | | |
| | | export default { |
| | | name: 'OperaOrderDetail', |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | title: '订å详æ
', |
| | | visible: false, |
| | | detailInfo: null |
| | | } |
| | | }, |
| | | methods: { |
| | | open (row) { |
| | | this.title = '订å详æ
' |
| | | getById(row.id).then(res => { |
| | | console.log(res) |
| | | this.detailInfo = res |
| | | this.visible = true |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .order-detail { |
| | | |
| | | } |
| | | .section { |
| | | margin-bottom: 25px; |
| | | } |
| | | .section-header { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | margin-bottom: 15px; |
| | | } |
| | | .section-title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | color: #303133; |
| | | padding-left: 10px; |
| | | border-left: 4px solid #2E68EC; |
| | | } |
| | | .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: 140px; |
| | | } |
| | | .info-item .value { |
| | | color: #606266; |
| | | word-break: break-all; |
| | | } |
| | | .image-list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | .goods-table { |
| | | margin-bottom: 15px; |
| | | } |
| | | .price-summary { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 11px; |
| | | padding: 15px; |
| | | background: #f5f7fa; |
| | | border-radius: 4px; |
| | | font-size: 14px; |
| | | color: #606266; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:driver:query']"> |
| | | <TableLayout :permissions="['business:driverInfo:query']"> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="叿ºä¿¡æ¯" prop="keyword"> |
| | | <el-input v-model="searchForm.keyword" clearable placeholder="请è¾å
¥å¸æºå§å/ææºå·" @keypress.enter.native="search"></el-input> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="ç¶æ" prop="status"> |
| | | <el-select v-model="searchForm.status" clearable placeholder="è¯·éæ©ç¶æ" @change="search"> |
| | | <el-option label="ç¦ç¨" :value="0"></el-option> |
| | | <el-option label="å¯ç¨" :value="1"></el-option> |
| | | <el-option label="ç¦ç¨" :value="1"></el-option> |
| | | <el-option label="å¯ç¨" :value="0"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ§å«" prop="sex"> |
| | |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | <el-button :loading="isWorking.export" @click="handleExport">导åº</el-button> |
| | | <el-button :loading="isWorking.export" @click="exportExcel">导åº</el-button> |
| | | </section> |
| | | </el-form> |
| | | <template v-slot:table-wrap> |
| | |
| | | :data="tableData.list" |
| | | stripe |
| | | > |
| | | <el-table-column prop="nickName" label="ç¨æ·æµç§°" min-width="100px"></el-table-column> |
| | | <el-table-column prop="name" label="叿ºå§å" min-width="100px"></el-table-column> |
| | | <el-table-column label="æ§å«" min-width="60px"> |
| | | <template slot-scope="{row}">{{ row.sex === 1 ? 'ç·' : row.sex === 2 ? '女' : '-' }}</template> |
| | | <template slot-scope="{row}">{{ row.gender === 1 ? 'ç·' : row.gender === 2 ? '女' : '-' }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="phone" label="æ³¨åææºå·" min-width="120px"></el-table-column> |
| | | <el-table-column prop="idCard" label="身份è¯å·" min-width="160px"></el-table-column> |
| | | <el-table-column prop="telephone" label="æ³¨åææºå·" min-width="120px"></el-table-column> |
| | | <el-table-column prop="idcard" label="身份è¯å·" min-width="160px"></el-table-column> |
| | | <el-table-column label="è´¦æ·ä½é¢" min-width="100px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.amount / 100).toFixed(2) }}</template> |
| | | <template slot-scope="{row}">Â¥{{ (row.memberAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="carNo" label="车çå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="carCode" label="车çå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" min-width="160px"></el-table-column> |
| | | <el-table-column label="ç¶æ" min-width="80px"> |
| | | <template slot-scope="{row}"> |
| | |
| | | v-model="row.status" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | :active-value="1" |
| | | :inactive-value="0" |
| | | :active-value="0" |
| | | :inactive-value="1" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | :pagination="tableData.pagination" |
| | | ></pagination> |
| | | </template> |
| | | <OperaDriverDetail ref="operaDriverDetail" /> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import { fetchList, updateStatus, exportExcel } from '@/api/business/driver' |
| | | import OperaDriverDetail from '@/components/business/OperaDriverDetail' |
| | | import { updateStatus, exportExcel } from '@/api/business/driver' |
| | | |
| | | export default { |
| | | name: 'DriverList', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination }, |
| | | components: { TableLayout, Pagination, OperaDriverDetail }, |
| | | data () { |
| | | return { |
| | | searchForm: { |
| | |
| | | sex: '', |
| | | createTime: '', |
| | | startTime: '', |
| | | endTime: '' |
| | | endTime: '', |
| | | auditStatus: 1 |
| | | } |
| | | } |
| | | }, |
| | |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | loadTableData (resolve) { |
| | | this.isWorking.search = true |
| | | fetchList(this.getTableParams()) |
| | | .then(data => { |
| | | this.tableData.list = data.list || [] |
| | | this.tableData.pagination.total = data.total || 0 |
| | | if (resolve) resolve(data) |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e, 'å 载失败') |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking.search = false |
| | | }) |
| | | }, |
| | | handleDateChange (val) { |
| | | this.searchForm.startTime = val ? val[0] : '' |
| | | this.searchForm.endTime = val ? val[1] : '' |
| | |
| | | this.search() |
| | | }, |
| | | handleDetail (row) { |
| | | this.$refs.operaDriverDetail.open('叿ºè¯¦æ
', row) |
| | | }, |
| | | handleStatusChange (val, row) { |
| | | updateStatus({ id: row.id, status: val }).then(res => { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:driverInfo:query']"> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="叿ºä¿¡æ¯" prop="keyword"> |
| | | <el-input v-model="searchForm.keyword" clearable placeholder="请è¾å
¥å¸æºå§å/ææºå·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="车çå·" prop="carNo"> |
| | | <el-input v-model="searchForm.carNo" clearable placeholder="请è¾å
¥è½¦çå·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å®¡æ ¸ç¶æ" prop="auditStatus"> |
| | | <el-select v-model="searchForm.auditStatus" clearable placeholder="è¯·éæ©ç¶æ" @change="search"> |
| | | <el-option label="å¾
审æ¹" :value="0"></el-option> |
| | | <el-option label="审æ¹éè¿" :value="1"></el-option> |
| | | <el-option label="审æ¹é©³å" :value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å建æ¶é´" prop="createTime"> |
| | | <el-date-picker type="daterange" v-model="searchForm.createTime" clearable value-format="yyyy-MM-dd" |
| | | range-separator="-" start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ" @change="handleDateChange" /> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | <el-button :loading="isWorking.export" @click="exportExcel">导åº</el-button> |
| | | </section> |
| | | </el-form> |
| | | <template v-slot:table-wrap> |
| | | <el-table |
| | | :height="tableHeightNew" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | > |
| | | <el-table-column prop="name" label="叿ºå§å" min-width="100px"></el-table-column> |
| | | <el-table-column label="æ§å«" min-width="60px"> |
| | | <template slot-scope="{row}">{{ row.gender === 1 ? 'ç·' : row.gender === 2 ? '女' : '-' }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="telephone" label="æ³¨åææºå·" min-width="120px"></el-table-column> |
| | | <el-table-column prop="idcard" label="身份è¯å·" min-width="160px"></el-table-column> |
| | | <el-table-column label="å©å§»ç¶åµ" min-width="100px"> |
| | | <template slot-scope="{row}">{{ row.maritalStatus === 0 ? 'æªå©' : row.maritalStatus === 1 ? 'å·²å©' : row.maritalStatus === 2 ? '离å¼' : '丧å¶' }}</template> |
| | | </el-table-column> |
| | | <el-table-column prop="carCode" label="车çå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createTime" label="å建æ¶é´" min-width="160px"></el-table-column> |
| | | <el-table-column label="å®¡æ ¸ç¶æ"> |
| | | <template slot-scope="{row}"> |
| | | <span style="color: #e6a23c;" v-if="row.auditStatus === 0">å¾
审æ¹</span> |
| | | <span style="color: #13ce66;" v-else-if="row.auditStatus === 1">审æ¹éè¿</span> |
| | | <span style="color: #ff4949;" v-else>审æ¹é©³å</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç¶æ" min-width="80px"> |
| | | <template slot-scope="{row}"> |
| | | <el-switch |
| | | @change="handleStatusChange($event, row)" |
| | | v-model="row.status" |
| | | active-color="#13ce66" |
| | | inactive-color="#ff4949" |
| | | :active-value="0" |
| | | :inactive-value="1" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="100" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDetail(row)">详æ
</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | ></pagination> |
| | | </template> |
| | | <OperaDriverApproval ref="operaDriverApproval" @success="handleApprovalSuccess" /> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaDriverApproval from '@/components/business/OperaDriverApproval' |
| | | import { updateStatus, exportExcel } from '@/api/business/driver' |
| | | |
| | | export default { |
| | | name: 'DriverVerification', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaDriverApproval }, |
| | | data () { |
| | | return { |
| | | searchForm: { |
| | | keyword: '', |
| | | carNo: '', |
| | | auditStatus: '', |
| | | sex: '', |
| | | createTime: '', |
| | | startTime: '', |
| | | endTime: '' |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/driver', |
| | | 'field.id': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | handleDateChange (val) { |
| | | this.searchForm.startTime = val ? val[0] : '' |
| | | this.searchForm.endTime = val ? val[1] : '' |
| | | this.search() |
| | | }, |
| | | reset () { |
| | | this.searchForm = { |
| | | keyword: '', |
| | | carNo: '', |
| | | status: '', |
| | | sex: '', |
| | | createTime: '', |
| | | startTime: '', |
| | | endTime: '' |
| | | } |
| | | this.search() |
| | | }, |
| | | handleDetail (row) { |
| | | this.$refs.operaDriverApproval.open('叿ºå®¡æ ¸', row) |
| | | }, |
| | | handleApprovalSuccess (data) { |
| | | this.$tip.apiSuccess('å®¡æ ¸æäº¤æå') |
| | | this.search() |
| | | }, |
| | | handleStatusChange (val, row) { |
| | | updateStatus({ id: row.id, status: val }).then(res => { |
| | | this.$tip.apiSuccess(res || 'ä¿®æ¹æå') |
| | | }).catch(e => { |
| | | row.status = val === 1 ? 0 : 1 |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | }, |
| | | handleExport () { |
| | | this.isWorking.export = true |
| | | exportExcel(this.getTableParams()) |
| | | .then(res => { |
| | | this.download(res) |
| | | this.$tip.apiSuccess('å¯¼åºæå') |
| | | }) |
| | | .catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking.export = false |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <TableLayout :permissions="['business:orders:query']"> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="订åç¼å·" prop="code"> |
| | | <el-input v-model="searchForm.code" clearable placeholder="请è¾å
¥è®¢åç¼å·" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç©åä¿¡æ¯" prop="goodsInfo"> |
| | | <el-input v-model="searchForm.goodsInfo" clearable placeholder="请è¾å
¥ç©åä¿¡æ¯" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å建æ¶é´" prop="createTime1"> |
| | | <el-date-picker type="daterange" v-model="searchForm.createTime1" clearable value-format="yyyy-MM-dd" |
| | | range-separator="-" start-placeholder="å¼å§æ¥æ" end-placeholder="ç»ææ¥æ" @change="handleDateChange" /> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ä»¶é¨åº" prop="depositShopName"> |
| | | <el-input v-model="searchForm.depositShopName" clearable placeholder="请è¾å
¥å¯ä»¶é¨åº" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æ¶ä»¶é¨åº" prop="takeShopName"> |
| | | <el-input v-model="searchForm.takeShopName" clearable placeholder="请è¾å
¥æ¶ä»¶é¨åº" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç±»å" prop="type"> |
| | | <el-select v-model="searchForm.type" clearable placeholder="è¯·éæ©ç±»å" @change="search"> |
| | | <el-option label="å°±å°åå" :value="0"></el-option> |
| | | <el-option label="å¼å°åå" :value="1"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="订åç¶æ" prop="status"> |
| | | <el-select v-model="searchForm.status" clearable placeholder="è¯·éæ©è®¢åç¶æ" @change="search"> |
| | | <el-option label="å
¨é¨" value=""></el-option> |
| | | <el-option label="å¾
æ¯ä»" :value="0"></el-option> |
| | | <el-option label="å¾
å¯å" :value="1"></el-option> |
| | | <el-option label="å·²å¯å" :value="2"></el-option> |
| | | <el-option label="å·²æ¥å" :value="3"></el-option> |
| | | <el-option label="æ´¾éä¸" :value="4"></el-option> |
| | | <el-option label="å·²å°åº/å·²éè¾¾" :value="5"></el-option> |
| | | <el-option label="åå¨é¾æ" :value="6"></el-option> |
| | | <el-option label="已宿" :value="7"></el-option> |
| | | <el-option label="订åå
³éï¼é款ï¼" :value="96"></el-option> |
| | | <el-option label="忶龿" :value="97"></el-option> |
| | | <el-option label="åæ¶ä¸" :value="98"></el-option> |
| | | <el-option label="已忶" :value="99"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ç»ç®ç¶æ" prop="settlementStatus"> |
| | | <el-select v-model="searchForm.settlementStatus" clearable placeholder="è¯·éæ©ç»ç®ç¶æ" @change="search"> |
| | | <el-option label="å¾
ç»ç®" :value="0"></el-option> |
| | | <el-option label="å·²ç»ç®" :value="1"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | | <el-button :loading="isWorking.export" @click="exportExcel">导åº</el-button> |
| | | </section> |
| | | </el-form> |
| | | <template v-slot:table-wrap> |
| | | <el-table |
| | | :height="tableHeightNew" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | > |
| | | <el-table-column prop="code" label="订åç¼å·" min-width="150px"> |
| | | <template slot-scope="{row}"> |
| | | <span class="order-no" @click="handleOrderDetail(row)">{{ row.code }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="goodsInfo" label="ç©åä¿¡æ¯" min-width="120px"></el-table-column> |
| | | <el-table-column label="ç±»å" min-width="80px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.type === 0">å°±å°åå</span> |
| | | <span v-else-if="row.type === 1">å¼å°åå</span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="orderLevel" label="订å级å«" min-width="80px"></el-table-column> |
| | | <el-table-column label="ç©åä¿è´¹ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.declaredFee / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="åºç¡æå¡è´¹ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.price / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="è®¢åæ»ä»·ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.totalAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="å®ä»ç°éï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.payAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="鿬¾éé¢ï¼å
ï¼" min-width="120px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.refundAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="è¶
æ¶éé¢" min-width="100px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.overdueAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="å¼å¸¸éé¢" min-width="100px"> |
| | | <template slot-scope="{row}">Â¥{{ (row.exceptionAmount / 100).toFixed(2) }}</template> |
| | | </el-table-column> |
| | | <el-table-column label="ç»ç®ç¶æ" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span :style="{ color: row.settlementStatus === 1 ? '#67c23a' : '#e6a23c' }"> |
| | | {{ row.settlementStatus === 1 ? 'å·²ç»ç®' : 'æªç»ç®' }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="120" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDispatch(row)">æå¨æ´¾å</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="handlePageChange" |
| | | :pagination="tableData.pagination" |
| | | ></pagination> |
| | | </template> |
| | | <OperaDispatch ref="operaDispatch" /> |
| | | <OperaOrderDetail ref="operaOrderDetail" /> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaDispatch from '@/components/business/OperaDispatch' |
| | | import OperaOrderDetail from '@/components/business/OperaOrderDetail' |
| | | export default { |
| | | name: 'OrderManagement', |
| | | extends: BaseTable, |
| | | components: { TableLayout, Pagination, OperaDispatch, OperaOrderDetail }, |
| | | data () { |
| | | return { |
| | | searchForm: { |
| | | code: '', |
| | | goodsInfo: '', |
| | | createTime1: '', |
| | | createStartTime: '', |
| | | createEndTime: '', |
| | | depositShopName: '', |
| | | takeShopName: '', |
| | | type: '', |
| | | status: '', |
| | | settlementStatus: '' |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | api: '/business/orderManagement', |
| | | 'field.id': 'id' |
| | | }) |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | handleDateChange (val) { |
| | | this.searchForm.createStartTime = val ? val[0] : '' |
| | | this.searchForm.createEndTime = val ? val[1] : '' |
| | | this.search() |
| | | }, |
| | | reset () { |
| | | this.searchForm = { |
| | | orderNo: '', |
| | | goodsInfo: '', |
| | | createTime1: '', |
| | | createStartTime: '', |
| | | createEndTime: '', |
| | | sendShopName: '', |
| | | receiveShopName: '', |
| | | type: '', |
| | | orderStatus: '', |
| | | settleStatus: '' |
| | | } |
| | | this.search() |
| | | }, |
| | | handleDispatch (row) { |
| | | this.$refs.operaDispatch.open(row) |
| | | }, |
| | | handleOrderDetail (row) { |
| | | this.$refs.operaOrderDetail.open(row) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .order-no { |
| | | color: #2E68EC; |
| | | text-decoration: underline; |
| | | cursor: pointer; |
| | | } |
| | | </style> |
| | |
| | | <div class="form-item"> |
| | | <span class="label">叿ºæ¯æ¥å¯åæ¶è®¢å次æ°ä¸º</span> |
| | | <el-input-number v-model="form.driverDailyCancelLimit" :min="0" controls-position="right"></el-input-number> |
| | | <span class="desc">次ï¼è¶
è¿æ¬¡æ°åï¼ä»æ¥ä¸å¯æ¢å</span> |
| | | <span class="label">次ï¼è¶
è¿æ¬¡æ°åï¼ä»æ¥ä¸å¯æ¢å</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span class="label">叿ºæå¤§åæ¶è¿è¡ä¸è®¢åæ°é为</span> |
| | | <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number> |
| | | <span class="desc">个ï¼è¶
è¿è¯¥æ°éä¸å
许æ¢å<span class="red">ï¼å³è®¢åç¶æ=å¾
åä»¶/é
éä¸ï¼</span></span> |
| | | <span class="label">个ï¼è¶
è¿è¯¥æ°éä¸å
许æ¢å<span class="red">ï¼å³è®¢åç¶æ=å¾
åä»¶/é
éä¸ï¼</span></span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span class="label">客æ·ä¸å忝é</span> |
| | | <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number> |
| | | <span class="label">åéæªæå¸æºæ¢åï¼ç³»ç»æ¨éå¹³å°ç®¡çå</span> |
| | | <el-input-number v-model="form.orderAcceptLimit" :min="0" controls-position="right"></el-input-number> |
| | | <span class="label">æéå æ¥æ´¾åå¤çã</span> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | <div class="form-item"> |
| | | <span class="label">è¶
æ¶</span> |
| | | <el-input-number v-model="form.autoCancelTime" :min="0" controls-position="right"></el-input-number> |
| | | <span class="desc">åéæªæ¯ä»ï¼è®¢åèªå¨åæ¶</span> |
| | | <span class="label">åéæªæ¯ä»ï¼è®¢åèªå¨åæ¶</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span class="label">æ¥é达订å计价系æ°</span> |
| | |
| | | <div class="form-item"> |
| | | <span class="label">订åéè¾¾åé»è®¤</span> |
| | | <el-input-number v-model="form.autoConfirmReceipt" :min="0" controls-position="right"></el-input-number> |
| | | <span class="desc">天åèªå¨ç¡®è®¤æ¶è´§<span class="red">ï¼ä»
éæ¶ä»¶å°å䏿¯æå¡ç¹çæ
åµï¼</span></span> |
| | | <span class="label">天åèªå¨ç¡®è®¤æ¶è´§<span class="red">ï¼ä»
éæ¶ä»¶å°å䏿¯æå¡ç¹çæ
åµï¼</span></span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span class="label">订å宿å</span> |
| | | <el-input-number v-model="form.settlementDate" :min="0" controls-position="right"></el-input-number> |
| | | <span class="desc">天åç³»ç»ç»ç®è®¢åï¼å¹¶ç»ä¸åä¸è§è²ææ¯ä¾åæ</span> |
| | | <span class="label">天åç³»ç»ç»ç®è®¢åï¼å¹¶ç»ä¸åä¸è§è²ææ¯ä¾åæ</span> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | Vue.prototype.$isResolve = resolve; |
| | | }) |
| | | |
| | | // Vue.prototype.$baseUrl = 'http://192.168.1.54:10011/' |
| | | // Vue.prototype.$baseUrl = 'http://192.168.1.54:10011/' |
| | | |
| | | // Vue.prototype.$baseUrl = 'https://test.doumee.cn/jinkuai_web/' |
| | | Vue.prototype.$baseUrl = 'https://jinkuai.832smartfarm.com/jinkuai_web/' |
| | | import shareMixin from '@/utils/shareMixin' |
| | | Vue.mixin(shareMixin) |
| | | |
| | | const app = new Vue({ |
| | | store, |
| | | ...App |
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/demand-hall/demand-hall", |
| | | "style": { |
| | | "navigationBarTitleText": "æç订å", |
| | | "navigationStyle": "custom" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/mine/mine", |
| | | "style": { |
| | | "navigationBarTitleText": "æç", |
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/seleCity/seleCity", |
| | | "path": "pages/itinerary/itinerary", |
| | | "style": { |
| | | "navigationBarTitleText": "åå¸éæ©" |
| | | "navigationBarTitleText": "" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/using-workers/using-workers", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "éæå·¥" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/sorting/sorting", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "忣工" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/packaging-worker/packaging-worker", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "å
è£
å·¥" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/success/success", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "ååæå" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/freight/freight", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "è¿è´§" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/order-details/order-details", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "订å详æ
" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/freight-order/freight-order", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "订å详æ
" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/order-food/order-food", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "订å详æ
" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/login/login", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "ç»å½é¡µ" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/balance-details/balance-details", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "ä½é¢æç»" |
| | | } |
| | | }, |
| | | |
| | | { |
| | | "path" : "pages/rich-text-page/rich-text-page", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "坿æ¬é¡µé¢" |
| | | "path": "pages/message/message", |
| | | "style": { |
| | | "navigationBarTitleText": "æ¶æ¯" |
| | | } |
| | | } |
| | | ], |
| | | "subPackages": [{ |
| | | "root": "packageA", // åå
çæ ¹ç®å½ |
| | | "name": "packageA", // åå
çæ ¹ç®å½ |
| | | "pages":[ |
| | | { |
| | | "path" : "pages/withdrawal/withdrawal", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "æç°" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/withdrawal-successful/withdrawal-successful", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "æç°æå" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/set-up/set-up", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "设置" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/employment-certification/employment-certification", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "ç¨å·¥è®¤è¯" |
| | | } |
| | | }, |
| | | { |
| | | "path" : "pages/certification-results/certification-results", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText" : "认è¯ç»æ" |
| | | } |
| | | } |
| | | ] |
| | | }], |
| | | "preloadRule":{ |
| | | "pages/mine/mine":{ |
| | | "network": "all", |
| | | "packages": ["packageA"] |
| | | } |
| | | }, |
| | | ], |
| | | "globalStyle": { |
| | | "navigationBarTextStyle": "black", |
| | | "navigationBarTitleText": "", |
| | |
| | | "list": [ |
| | | { |
| | | "pagePath": "pages/index/index", |
| | | "iconPath": "static/icon/nav_home_sel@2x (1).png", |
| | | "iconPath": "static/icon/nav_home@2x.png", |
| | | "selectedIconPath": "static/icon/nav_home_sel@2x.png", |
| | | "text": "é¦é¡µ" |
| | | }, |
| | | { |
| | | "pagePath": "pages/demand-hall/demand-hall", |
| | | "iconPath": "static/icon/nav_order@2x.png", |
| | | "selectedIconPath": "static/icon/nav_order_sel@2x.png", |
| | | "text": "订å" |
| | | "pagePath": "pages/itinerary/itinerary", |
| | | "iconPath": "static/icon/nav_xingcheng@2x.png", |
| | | "selectedIconPath": "static/icon/nav_xingcheng_sel@2x.png", |
| | | "text": "è¡ç¨" |
| | | }, |
| | | { |
| | | "pagePath": "pages/message/message", |
| | | "iconPath": "static/icon/nav_xiaoxi@2x.png", |
| | | "selectedIconPath": "static/icon/nav_xiaoxi_sel@2x.png", |
| | | "text": "æ¶æ¯" |
| | | }, |
| | | { |
| | | "pagePath": "pages/mine/mine", |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view> |
| | | |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | |
| | | }; |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | |
| | | </style> |