司机管理模块,开票通知模块

This commit is contained in:
2023-08-18 14:52:29 +08:00
parent 1a119820dd
commit 90e3353058
17 changed files with 701 additions and 232 deletions

View File

@ -1,47 +1,33 @@
<template>
<div class="wrap">
<cell-group label="司机姓名" placeholder="请输入司机姓名" @input="getName(name)" v-model="name"/>
<cell-group label="手机号码" placeholder="请输入手机号" @input="getPhone(phone)" v-model="phone"/>
<cell-group label="身份证号" placeholder="请输入身份证号" @input="getCarId(carId)" v-model="carId"/>
<!-- <div class="itemContent">-->
<!-- <div class="titleType">-->
<!-- <img class="startImg" src="@/assets/start.png" />-->
<!-- <span>司机姓名</span>-->
<!-- </div>-->
<!-- <div class="checkContent">-->
<!-- <input placeholder="请输入司机姓名" />-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="lineBot"></div>-->
<!-- <div class="itemContent">-->
<!-- <div class="titleType">-->
<!-- <img class="startImg" src="@/assets/start.png" />-->
<!-- <span>手机号码</span>-->
<!-- </div>-->
<!-- <div class="checkContent">-->
<!-- <input placeholder="请输入手机号码" />-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="lineBot"></div>-->
<!-- <div class="itemContent">-->
<!-- <div class="titleType">-->
<!-- <img class="startImg" src="@/assets/start.png" />-->
<!-- <span>身份证号</span>-->
<!-- </div>-->
<!-- <div class="checkContent">-->
<!-- <input placeholder="请输入身份证号" />-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="lineBot"></div>-->
<div class="navBar">
<van-nav-bar
:title="id ? '修改司机信息' : '添加司机'"
left-arrow
left-arrow-color="#FFFFFF"
:border="false"
:fixed="true"
:safe-area-inset-top="true"
@click-left="h5GoBack"
/>
</div>
<cell-group label="司机姓名" placeholder="请输入司机姓名" v-model="driverName"/>
<cell-group label="手机号码" v-model="driverPhone" @blurIn="validatePhoneNumber" placeholder="请输入手机号" />
<p v-if="phoneNumberError" class="error-message">{{ phoneNumberErrorMessage }}</p>
<cell-group label="身份证号" v-model="identityCardNumber" placeholder="请输入身份证号" />
<div class="itemContent">
<div class="titleType">
<img class="startImg" src="@/assets/start.png" />
<span>准驾车型</span>
</div>
<select id="mySelect" class="chosen-select" style="width: 44px">
<select id="mySelect" v-model="drivingModel" class="chosen-select" style="width: 44px">
<option value="A1">A1</option>
<option value="A2">A2</option>
<option value="A3">A3</option>
<option value="B1">B1</option>
<option value="B2">B2</option>
<option value="C1">C1</option>
<option value="C2">C2</option>
<option value="C3">C3</option>
</select>
</div>
<div class="lineBot"></div>
@ -51,8 +37,8 @@
<span>司机状态</span>
</div>
<div class="isJoin">
<van-radio-group v-model="radio" @change="isUse" class="joinWrap">
<van-radio name="启用" style="margin-right: 26px" class="item">
<van-radio-group v-model="states" @change="isUse" class="joinWrap">
<van-radio :name="1" style="margin-right: 26px" class="item">
启用
<img
slot="icon"
@ -60,7 +46,7 @@
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
<van-radio name="停用" class="item">
<van-radio :name="0" class="item">
停用
<img
slot="icon"
@ -77,46 +63,86 @@
</template>
<script>
import {myMixins} from "@/utils/myMixins"
import {timeFormat} from "@/utils/common"
import {saveDriver} from "@/api/mine"
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
import CellGroup from "@/components/cellGroup.vue"
export default {
name: "driverAdd",
mixins:[myMixins],
data(){
return{
name:"",
phone:"",
carId:"",
radio:'启用',
id:'',
driverName:"",
driverPhone:"",
identityCardNumber:"",
drivingModel:'',
states:'',
activeIcon: require('@/assets/check.png'),
inactiveIcon: require('@/assets/uncheck.png')
inactiveIcon: require('@/assets/uncheck.png'),
phoneNumberError: false,
phoneNumberErrorMessage: ''
}
},
mounted() {
console.log("radio",this.radio)
this.id = this.$route.params?.id;
this.driverName = this.$route.params?.name;
this.driverPhone = this.$route.params?.phone;
this.drivingModel = this.$route.params?.drivingModel;
this.identityCardNumber = this.$route.params?.identityCardNumber;
this.states = this.$route.params?.states;
const selectElement = document.getElementById('mySelect');
selectElement.addEventListener('change', function() {
const selectedValue = selectElement.value;
console.log('Selected value:', selectedValue);
this.drivingModel=selectedValue
});
},
methods:{
isUse(e){
console.log("是否启用",e)
this.states=e
},
cancelBtn(){
console.log("取消司机")
async submitBtn(){
let res = await saveDriver({
driverId:this.id ? this.id : '',
driverName:this.driverName ,
driverPhone:this.driverPhone,
identityCardNumber:this.identityCardNumber,
drivingModel:this.drivingModel,
states:Number(this.states),
createTime:timeFormat(new Date())
})
if(res.code === 200){
if(this.id){
this.$toast('修改成功')
}else{
this.$toast('添加成功')
}
setTimeout(()=>{
this.$router.back();
},2000)
}
},
submitBtn(){
console.log("提交司机")
cancelBtn(){//取消
this.driverName='';
this.driverPhone='',
this.identityCardNumber='',
this.drivingModel=''
this.states=''
},
getName(e){
console.log("NAME",e);
},
getPhone(e){
console.log("phone",e);
},
getCarId(e){
console.log("car",e);
validatePhoneNumber() {
const phoneNumberRegex = /^1[0-9]{10}$/;
if (phoneNumberRegex.test(this.driverPhone)) {
this.phoneNumberError = true;
this.phoneNumberErrorMessage = '电话号码格式不正确请输入有效的11位手机号码。';
} else {
this.phoneNumberError = false;
this.phoneNumberErrorMessage = '';
}
}
},
components:{
@ -129,12 +155,19 @@ export default {
<style scoped lang="scss">
@import "@/styles/mixin.scss";
@import "@/styles/common.scss";
.error-message {
color: red;
}
.wrap{
@include wh(100%,100%);
box-sizing: border-box;
padding-left: 16px;
}
.navBar{
//height: 46px;
margin-bottom: 46px;
}
.itemContent{
@include flexColBet;
line-height: 56px;

View File

@ -8,68 +8,41 @@
:border="false"
:fixed="true"
:safe-area-inset-top="true"
@click-left="goPage"
@click-left="goBack"
>
<template slot="right">
<div class="rightWrap" @click="addDriver">
<div class="rightWrap" @click="goPage('driverAdd')">
<img src="@/assets/addImg.png" />
<span class="addTxt">添加</span>
</div>
</template>
</van-nav-bar>
</div>
<div class="itemWrap">
<div class="itemWrap" v-for="(item,index) in driverList" :key="index">
<div class="name-status">
<div class="namephone">王小微 / 15234345656</div>
<div class="namephone">{{ item.driverName }} / {{ item.driverPhone }}</div>
<div class="twoBtn">
<button class="del">启用</button>
<button class="revise">修改</button>
<button class="del" @click="handleStatus(item)">{{ item.states?.label == '启用' ? '停用' : '启用' }}</button>
<button class="revise" @click="updateDriver(item)">修改</button>
</div>
</div>
<div class="" style="display: flex">
<div class="sex" style="margin-right: 40px">
<span class="halfOpci">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</span>
<span class="allOpci"></span>
<span class="allOpci">{{item.sex?.label}}</span>
</div>
<div class="carType">
<span class="halfOpci">准驾车型:</span>
<span class="allOpci">C2</span>
<span class="allOpci">{{item.drivingModel}}</span>
</div>
</div>
<div>
<span class="halfOpci">身份证号:</span>
<span class="allOpci">4115241999083449090</span>
</div>
<div class="">
<span class="halfOpci">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</span>
<span class="statusNo">停用</span>
</div>
</div>
<div class="itemWrap">
<div class="name-status">
<div class="namephone">王小微 / 15234345656</div>
<div class="twoBtn">
<button class="del">停用</button>
<button class="revise" @click="goPage('driverAdd')">修改</button>
</div>
</div>
<div class="" style="display: flex">
<div class="sex" style="margin-right: 40px">
<span class="halfOpci">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</span>
<span class="allOpci"></span>
</div>
<div class="carType">
<span class="halfOpci">准驾车型:</span>
<span class="allOpci">C2</span>
</div>
</div>
<div>
<span class="halfOpci">身份证号:</span>
<span class="allOpci">4115241999083449090</span>
<span class="allOpci">{{ item.identityCardNumber }}</span>
</div>
<div>
<span class="halfOpci">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</span>
<span class="statusYes">启用</span>
<span :class="item.states?.code == 1 ? 'statusYes' : 'statusNo'">{{ item.states?.label }}</span>
</div>
</div>
@ -79,10 +52,64 @@
<script>
import {myMixins} from "@/utils/myMixins"
import {driverList,enableAction} from "@/api/mine"
export default {
name: "driverManage",
mixins:[myMixins],
data(){
return{
pageNum:1,
pageSize:10,
total:'',
driverList:[],
states:''
}
},
mounted() {
this.getDriverList()
},
methods:{
async getDriverList(){
let res = await driverList({
pageNum:this.pageNum,
pageSize:this.pageSize
});
if(res.code == 200){
this.total=res.total
this.driverList=res.data
}
},
async handleStatus(item){
if(item.states.code === 0){
this.states = 1
}else{
this.states = 0
}
let res = await enableAction({
driverId:item.driverId,
states:this.states
})
await this.getDriverList();
setTimeout(()=>{
this.$toast('操作成功')
},)
console.log("item",res)
},
updateDriver(item){
// 在当前组件中进行路由跳转并传递参数对象
this.$router.push({
name: 'driverAdd', // 目标路由的名称
params: {
id: item.driverId, // 参数对象的属性
name: item.driverName,
phone:item.driverPhone,
drivingModel:item.drivingModel,
identityCardNumber:item.identityCardNumber,
states:item.states.code
}
});
}
}
}
</script>
@ -95,6 +122,7 @@ export default {
box-sizing: border-box;
padding: 13px;
@include wh(100%, 100%);
overflow-y: auto;
}
.navBar{
//height: 46px;

View File

@ -12,8 +12,12 @@
/>
</div>
<div class="contentWrap">
<div class="item" v-for="(item,index) in 4" :key="index">
<div class="itemContent">ZDZD230630253236 拖车 128</div>
<div class="item" v-for="(item,index) in detailList" :key="index">
<div class="itemContent">
<span> {{ item.orderCode }}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{ item.serviceName }}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span> {{item.settleAmount}}</span>
</div>
<div class="line"></div>
</div>
</div>
@ -22,11 +26,41 @@
<script>
import {myMixins} from "@/utils/myMixins"
import {notifyInvoiceDetail} from "@/api/mine"
export default {
name: "invoicingDetail",
mixins:[myMixins],
data(){
return{
pageNum:1,
pageSize:10,
detailList:[],
form:{
batchCode:'',
startTime:'',
overTime:'',
}
}
},
async mounted() {
console.log(this.$route.query?.id)
this.form.batchCode=this.$route.query?.id;
this.form.startTime=this.$route.query?.startTime;
this.form.overTime=this.$route.query?.overTime;
await this.getDetail()
},
methods:{
async getDetail(){
let res=await notifyInvoiceDetail({
pageNum:this.pageNum,
pageSize:this.pageSize,
...this.form,
})
if(res.code=== 200){
this.detailList=res.data
}
// console.log("resssss",res)
}
}
}
</script>

View File

@ -2,7 +2,7 @@
<div class="wrap">
<div class="navBar">
<van-nav-bar
title="工单对账"
title="开票通知"
left-arrow
left-arrow-color="#FFFFFF"
:border="false"
@ -11,52 +11,77 @@
@click-left="goBack"
/>
</div>
<div class="itemWrap" v-for="(item,index) in 3" :key="index">
<div class="itemWrap" v-for="(item,index) in notifyList" :key="index" >
<div class="item line1">
<div class="itemTime">
<span class="title">开票月份:</span>
<span class="content">2023年7月</span>
<span class="content">{{ item.invoiceMonth }}</span>
</div>
<div class="orderNum">
<span class="title">总案件数:</span>
<span class="content">86</span>
</div>
<div class="checkBtn" @click="goPage('invoicingDetail')">查看
<span class="content">{{ item.orderNum }}</span>
</div>
<div class="checkBtn" @click="goPage('invoicingDetail',{id:item.batchCode,startTime:item.startTime,overTime:item.overTime})">查看 </div>
</div>
<div class="item">
<span class="title">批次号:</span>
<span class="content">PC230626124283</span>
<span class="content">{{ item.batchCode }}</span>
</div>
<div class="item">
<span class="title">结算总金额:</span>
<span class="content">1238</span>
<span class="content">{{ item.totalMoney }}</span>
</div>
<div class="item">
<span class="title">扣款金额:</span>
<span class="content">2300</span>
<span class="content">{{ item.cutMoney }}</span>
</div>
<div class="item">
<span class="title">扣款原因:</span>
<span class="content" style="color: #FF8F37;">调度不及时导致客户等待时间过长</span>
<span class="content" style="color: #FF8F37;">{{ item.remark }}</span>
</div>
<div class="item">
<span class="title">最终开票金额:</span>
<span class="content">1008</span>
<span class="content">{{ item.invoiceMoney }}</span>
</div>
</div>
<div v-show="show" class="bgShow">
<img src="@/assets/empty.png">
</div>
</div>
</template>
<script>
import {myMixins} from "@/utils/myMixins"
import {notifyInvoiceList} from "@/api/mine"
export default {
name: "invoicingNotify",
mixins:[myMixins],
data(){
return{
notifyList:[],
pageNum:1,
pageSize:10,
show:false
}
},
mounted() {
this.getNotifyList()
},
methods:{
checkDetail(index){
console.log("查看详情"+index)
async getNotifyList(){
let res = await notifyInvoiceList({
pageNum:this.pageNum,
pageSize:this.pageSize
})
if(res.code === 0){
this.notifyList=res.data;
console.log(this.notifyList)
if(this.notifyList.length === 0){
this.show=true
}else{
this.show=false
}
}
},
}
}
@ -72,8 +97,8 @@ export default {
}
.navBar{
height: 46px;
//margin-bottom: 46px;
//height: 46px;
margin-bottom: 46px;
}
.itemWrap{
background: #FFFFFF;
@ -107,5 +132,9 @@ export default {
}
}
}
.bgShow{
@include wh(100%,80%);
@include flexCenter;
justify-content: center;
}
</style>

View File

@ -188,15 +188,15 @@ export default {
},
change(e) {
console.log("拖车服务",e)
// console.log("拖车服务",e)
this.trailerService=e
},
change2(e) {
console.log("小修服务",e)
// console.log("小修服务",e)
this.smallRepairService=e
},
isChange(e){
console.log("是否参与",e)
// console.log("是否参与",e)
this.isJoin=e
},
cancelBtn(){//取消车辆

View File

@ -1,5 +1,5 @@
<template>
<div class="wrap" >
<div class="wrap" @scroll="handleScroll">
<div class="navBar">
<van-nav-bar
title="车辆管理"
@ -33,7 +33,9 @@
</div>
</div>
<van-dialog v-model="show" title="确定删除吗" show-cancel-button @confirm="handleConfirm"></van-dialog>
<div v-if="loading">加载中...</div>
</div>
</template>
<script>
@ -50,6 +52,8 @@ export default {
pageNum:1,
pageSize:10,
total:'',
loading:false,
items: [], // 当前页数
}
},
mounted() {
@ -62,18 +66,21 @@ export default {
pageSize:this.pageSize
})
if(result.code === 200){
this.vehicleList=result.data;
this.total=result.total
//
if(this.pageNum == 1){// 第一页直接赋值
this.vehicleList=result.data;
}else{// 第二页数据拼接
let preList = this.vehicleList;
let arr = result.data;
this.vehicleList = preList.concat(arr)
}
}
},
deleteItem(id){//删除车辆
this.show=true
this.id=id
},
addVehicle(){//添加车辆
console.log("添加")
},
async handleConfirm(){//调删除车辆接口
let result= await deleteVehicle({
vehicleId:this.id
@ -81,16 +88,22 @@ export default {
if(result.code === 200){
this.$toast('删除成功');
await this.getVehicleList();
}else{
this.$toast(result.msg)
}
},
async handleScroll(){
this.pageNum += 1;
let res= await this.getVehicleList();
let newData=res.data
this.vehicleList=[...this.vehicleList,...newData]
// console.log("滑动")
let num = Math.ceil( this.total / 10)
if(num <= this.pageNum){
console.log("不在加载数据")
}else{
this.pageNum++;
await this.getVehicleList()
console.log("111111111111")
}
},
console.log("滑动")
}
}
}
</script>

View File

@ -23,8 +23,8 @@
<div class="rightItem">{{ orderDetailInfo.userName }}</div>
<div class="rightItem">{{ orderDetailInfo.userPhone }}</div>
<div class="rightItem">{{ orderDetailInfo.plateNumber }}</div>
<div class="rightItem" style="line-height: 17px">
<span >{{orderDetailInfo.model}}</span>
<div class="rightItem" style="line-height: 17px;width: 220px;align-items: baseline">
<span >{{orderDetailInfo.model}} </span>
<span>{{ orderDetailInfo.brand }}</span>
</div>
</div>