This commit is contained in:
Vinjor 2024-12-09 18:10:47 +08:00
parent 14aa6c65d1
commit fea7282216
6 changed files with 230 additions and 89 deletions

View File

@ -16,7 +16,7 @@
</view>
<view class="msg-box" @click="gotoMsg">
<image mode="aspectFita" src="@/pages-home/static/msg.png" style="width: 48rpx;height: 48rpx"></image>
<view class="msg-num" v-if="noReadNum>0">{{noReadNum}}</view>
<view class="msg-num" >{{noReadNum}}</view>
</view>
<image @click="showUserDetail" style="width: 48rpx;height: 48rpx" src="/static/icons/more.png" mode="aspectFita"></image>
</view>
@ -76,43 +76,62 @@
<text class="label">维修中</text>
<text class="value">{{ bossNum.workingNum }}</text>
</view>
<view class="line"></view>
<!-- <view class="line"></view>-->
<view class="orderCountItem">
<text class="label">未结算</text>
<text class="value">{{ bossNum.noPayNum }}</text>
</view>
<!-- <view class="line"></view>-->
<view class="orderCountItem">
<text class="label">在厂数</text>
<text class="value">{{ bossNum.inCompanyNum }}</text>
</view>
<!-- <view class="orderCountItem">-->
<!-- <text class="label">进厂数</text>-->
<!-- <text class="value">{{ bossNum.newOrderNum }}</text>-->
<!-- </view>-->
<!-- &lt;!&ndash; <view class="line"></view>&ndash;&gt;-->
<!-- <view class="orderCountItem">-->
<!-- <text class="label">已竣工</text>-->
<!-- <text class="value">{{ bossNum.overNum }}</text>-->
<!-- </view>-->
<!-- &lt;!&ndash; <view class="line"></view>&ndash;&gt;-->
<!-- <view class="orderCountItem">-->
<!-- <text class="label">已交车</text>-->
<!-- <text class="value">{{ bossNum.giveCusNum }}</text>-->
<!-- </view>-->
</view>
<view v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">
<view class="body-top-tab" >
<view v-for="(item, index) in timePicker" @click="activeTab(index)" :key="index"
:class="{ active: active === index }"
class="body-top-tab-item" style="font-weight: bold">
{{ item }}
<view v-if="index === active" class="activeLine"></view>
</view>
</view>
<view class="orderCount" style="margin-bottom: 0" v-if="active==2">
<uni-datetime-picker v-model="range" type="daterange" @maskClick="maskClick" />
</view>
<view class="body-top-tab" style="margin-bottom: 0" v-if="active==2">
<view v-for="(item, index) in timePickerSon" @click="activeTabSon(index)" :key="index"
:class="{ active: activeSon === index }"
class="body-top-tab-item">
{{ item }}
<view v-if="index === activeSon" class="activeLine"></view>
</view>
</view>
<!-- <view class="body-top-tab" >-->
<!-- <view v-for="(item, index) in timePicker" @click="activeTab(index)" :key="index"-->
<!-- :class="{ active: active === index }"-->
<!-- class="body-top-tab-item" style="font-weight: bold">-->
<!-- {{ item }}-->
<!-- <view v-if="index === active" class="activeLine"></view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="orderCount" style="margin-bottom: 0" v-if="active==2">-->
<!-- <uni-datetime-picker v-model="range" type="daterange" @maskClick="maskClick" />-->
<!-- </view>-->
<!-- <view class="body-top-tab" style="margin-bottom: 0" v-if="active==2">-->
<!-- <view v-for="(item, index) in timePickerSon" @click="activeTabSon(index)" :key="index"-->
<!-- :class="{ active: activeSon === index }"-->
<!-- class="body-top-tab-item">-->
<!-- {{ item }}-->
<!-- <view v-if="index === activeSon" class="activeLine"></view>-->
<!-- </view>-->
<!-- </view>-->
<view class="orderCount" >
<view class="orderCountItem">
<text class="label"></text>
<text class="label"></text>
<text class="value">{{ bossNum.newOrderNum }}</text>
</view>
<view class="line"></view>
<!-- <view class="line"></view>-->
<view class="orderCountItem">
<text class="label">完成</text>
<text class="label">竣工</text>
<text class="value">{{ bossNum.overNum }}</text>
</view>
<view class="line"></view>
<!-- <view class="line"></view>-->
<view class="orderCountItem">
<text class="label">已交车</text>
<text class="value">{{ bossNum.giveCusNum }}</text>
@ -122,33 +141,40 @@
<!-- 服务顾问角色 -->
<view class="orderCount" v-if="userInfo.roleCodes.includes('service_advisor') || userInfo.roleCodes.includes('weixiu')|| userInfo.roleCodes.includes('general_inspection')" @click="serviceWork">
<view class="orderCountItem">
<text class="label">待审批配件申请单</text>
<text class="value">{{serviceNum}}</text>
<view class="label">待审批配件申请单<view class="number-box">{{serviceNum}}</view></view>
</view>
<!-- <view class="orderCountItem">-->
<!-- <view class="label">待办工单<view class="number-box">{{total}}</view></view>-->
<!-- </view>-->
</view>
<view class="orderCount">
<view class="orderCountItem">
<view class="label">待办工单<view class="number-box">{{total}}</view></view>
</view>
</view>
<view class="todoListBox">
<view class="title">
待办工单
<text class="titleDesc">当前共
<text class="titleCount">{{total}}</text>
个工单需要处理
</text>
</view>
<!-- <view class="title">-->
<!-- 待办工单-->
<!-- <text class="titleDesc">当前共-->
<!-- <text class="titleCount">{{total}}</text>-->
<!-- 个工单需要处理-->
<!-- </text>-->
<!-- </view>-->
<view class="todoList">
<view class="body-top-tab" v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">
<view class="body-top-tab-item">
<picker @change="bindCusFromChange" :value="cusFromIndex" :range="cusFromList">
<view class="uni-input">{{cusFromList[cusFromIndex]}}</view>
</picker>
</view>
<view class="line"></view>
<view class="body-top-tab-item">
<picker @change="bindRepairTypeChange" :value="repairTypeIndex" :range="repairTypeList">
<view class="uni-input">{{repairTypeList[repairTypeIndex]}}</view>
</picker>
</view>
</view>
<scroll-view v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')" scroll-y="true" style="height: calc(100% - 50px)" class="itemContent" @scrolltolower="onReachBottomCus"
<!-- <view class="body-top-tab" v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">-->
<!-- <view class="body-top-tab-item">-->
<!-- <picker @change="bindCusFromChange" :value="cusFromIndex" :range="cusFromList">-->
<!-- <view class="uni-input">{{cusFromList[cusFromIndex]}}</view>-->
<!-- </picker>-->
<!-- </view>-->
<!-- <view class="line"></view>-->
<!-- <view class="body-top-tab-item">-->
<!-- <picker @change="bindRepairTypeChange" :value="repairTypeIndex" :range="repairTypeList">-->
<!-- <view class="uni-input">{{repairTypeList[repairTypeIndex]}}</view>-->
<!-- </picker>-->
<!-- </view>-->
<!-- </view>-->
<scroll-view v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')" scroll-y="true" style="height:100%" class="itemContent" @scrolltolower="onReachBottomCus"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered">
<order-card :userInfo="userInfo" v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @doVoid="doVoidReq" @getOrder="openFile" @startWork="startWork" @addProj="addProj"></order-card>
<view style="text-align: center" v-if="orderList.length==0">
@ -166,10 +192,10 @@
</view>
</view>
<project-picker ref="proj" @confirm="projConfirm"></project-picker>
<tabBarVue msg="1" ref="tarBar" @socketSuccess="socketSuccess"></tabBarVue>
<tabBarVue :title="myText" msg="1" ref="tarBar" @socketSuccess="socketSuccess"></tabBarVue>
<!-- 提示窗示例 -->
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="success" cancelText="线下告知" confirmText="去签字" title="系统提示" content="客户是否在进行签字确认?" @confirm="dialogConfirm"
<uni-popup-dialog type="success" cancelText="线下告知" confirmText="去签字" title="系统提示" content="客户是否在进行签字确认?" @confirm="dialogConfirm"
@close="dialogClose"></uni-popup-dialog>
</uni-popup>
<!-- 提示窗示例 -->
@ -282,13 +308,14 @@ export default {
},
//
serviceNum:0,
//
//
bossNum:{
workingNum:0,
inCompanyNum:0,
newOrderNum:0,
overNum:0,
giveCusNum:0
giveCusNum:0,
noPayNum:0
},
defaultAvatar: require('@/static/icons/avatar.png'),
//
@ -318,6 +345,8 @@ export default {
cusFromValueList:[''],
//
cusFromIndex:0,
//
myText:"工单",
}
},
watch: {
@ -365,6 +394,7 @@ export default {
//
this.setChooseDate("nowMonth")
this.getBossTodo()
this.myText="我的"
this.getServiceTodo()
}
}
@ -596,7 +626,7 @@ export default {
})
},
/**
* 客户不在手动输入
* 客户不在手动输入
*/
dialogClose() {
this.$refs.inputDialog.open()
@ -757,7 +787,7 @@ export default {
})
},
/**
* 从总检的角度差维修中完成的工单数量
* 从总检的角度差维修中竣工的工单数量
*/
getBossTodo(){
let params={}
@ -974,7 +1004,7 @@ export default {
flex: 1;
height: 0;
overflow: auto;
padding-bottom: 30rpx;
//padding-bottom: 30rpx;
}
.company-text {
font-size: 30rpx;
@ -1154,7 +1184,7 @@ export default {
margin: 0 40rpx 18rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
padding: 20rpx;
padding: 15rpx;
display: flex;
align-items: center;
.orderCountItem {
@ -1181,8 +1211,8 @@ export default {
}
.todoListBox {
margin: 40rpx 32rpx;
height: calc(100vh - 500rpx);
margin: 20rpx 32rpx;
height: calc(100vh - 370rpx);
.title {
margin-bottom: 30rpx;
@ -1206,7 +1236,7 @@ export default {
display: flex;
flex-direction: column;
//row-gap: 20rpx;
height: 98%;
height: 100%;
}
}
@ -1396,5 +1426,17 @@ export default {
}
}
.number-box{
width: 45rpx;
height: 45rpx;
line-height: 45rpx;
text-align: center;
font-weight: 800;
font-size: 26rpx;
border-radius: 50%;
display: inline-block;
background: #d74a43;
color: white;
}
}
</style>

View File

@ -155,7 +155,7 @@
</view>
<view style="display: flex;align-items: center">
<view class="infoItem" style="flex: 1">
<text class="label">时间</text>
<text class="label">时间</text>
<picker
mode="date"

View File

@ -1095,7 +1095,7 @@ export default {
}else{
resultObj.carRegisterDate = '未知'
}
//
//
if (null != resultObj.inTime){
resultObj.inTime = formatDate(resultObj.inTime)
}else{

View File

@ -1,12 +1,5 @@
<template>
<view class="container">
<view class="header" v-if="!isRepairWarehouse">
<view class="searchBox">
<input class="searchInput" type="text" v-model="searchText" placeholder="工单号、车牌号、手机号、客户姓名" placeholder-style="font-size: 28rpx">
<text class="searchBtn" @click="onRefresherrefresh">搜索</text>
<text class="searchBtn" @click="clearText">清空</text>
</view>
</view>
<view class="body">
<view class="tabList">
<view v-for="(item, index) in tabList" :key="index" :class="{actived: item.id === activeKey}" class="tabItem"
@ -16,8 +9,14 @@
<view v-if="activeKey === item.id" class="activeLine"></view>
</view>
</view>
<view class="orderList" v-if="!isRepairWarehouse">
<view class="body-top-tab" v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')">
<view class="header" v-if="!isRepairWarehouse && activeKey==1">
<view class="searchBox">
<input class="searchInput" type="text" v-model="searchText" placeholder="工单号、车牌号、手机号、客户姓名" placeholder-style="font-size: 28rpx">
<!-- <text class="searchBtn" @click="onRefresherrefresh">搜索</text>-->
<text class="searchBtn" @click="clearText">清空</text>
</view>
<uni-datetime-picker v-model="range" type="daterange" @maskClick="maskClick" />
<view class="body-top-tab">
<view class="body-top-tab-item">
<picker @change="bindCusFromChange" :value="cusFromIndex" :range="cusFromList">
<view class="uni-input">{{cusFromList[cusFromIndex]}}</view>
@ -29,15 +28,25 @@
<view class="uni-input">{{repairTypeList[repairTypeIndex]}}</view>
</picker>
</view>
<view class="line"></view>
<view class="body-top-tab-item">
<picker @change="bindTicketsStatusChange" :value="ticketsStatusIndex" :range="ticketsStatusList">
<view class="uni-input">{{ticketsStatusList[ticketsStatusIndex]}}</view>
</picker>
</view>
</view>
<scroll-view v-if="userInfo.roleCodes.includes('general_inspection') || userInfo.roleCodes.includes('weixiu')" scroll-y="true" style="height: calc(100% - 50px)" class="itemContent" @scrolltolower="onReachBottomCus"
</view>
<view class="orderList" v-if="!isRepairWarehouse && activeKey==1">
<scroll-view scroll-y="true" style="height: 100%" class="itemContent" @scrolltolower="onReachBottomCus"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered">
<order-card :userInfo="userInfo" v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @startWork="startWork"></order-card>
<view style="text-align: center" v-if="orderList.length==0">
<image class="" src="@/static/images/nothing.png" ></image>
</view>
</scroll-view>
<scroll-view v-else scroll-y="true" style="height:100%" class="itemContent" @scrolltolower="onReachBottomCus"
</view>
<view class="orderList" style="height: calc(100% - 86rpx)" v-if="!isRepairWarehouse && activeKey==0">
<scroll-view scroll-y="true" style="height: 100%" class="itemContent" @scrolltolower="onReachBottomCus"
refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered">
<order-card :userInfo="userInfo" v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @startWork="startWork"></order-card>
<view style="text-align: center" v-if="orderList.length==0">
@ -94,6 +103,8 @@ export default {
isRepairWarehouse : false, //
//
isTriggered:false,
//
range: [],
imageUrl: '',
tabList: [
{
@ -121,9 +132,32 @@ export default {
cusFromValueList:[''],
//
cusFromIndex:0,
//
ticketsStatusList:['按工单状态','进厂','维修中','已竣工','已交车','未结算','在厂'],
//--
ticketsStatusValueList:['','jinchang','weixiuzhong','yijungong','yijiaoche','weijiesuan','zaichang'],
//
ticketsStatusIndex:0,
twId: null,
}
},
watch: {
range(newval) {
this.onRefresherrefresh()
},
searchText(newval) {
this.onRefresherrefresh()
},
repairTypeIndex(newval) {
this.onRefresherrefresh()
},
cusFromIndex(newval) {
this.onRefresherrefresh()
},
ticketsStatusIndex(newval) {
this.onRefresherrefresh()
},
},
onLoad(data){
if (data && data.twId){
this.twId = data.twId
@ -149,6 +183,7 @@ export default {
//2----cus_sign_type-repair_type
this.initDict("repair_type")
this.initDict("cus_sign_type")
// this.initDict("repair_tickets_status")
}
},
onShow() {
@ -161,19 +196,29 @@ export default {
}
},
methods: {
maskClick(e){
console.log('maskClick事件:', e);
},
/**
* 切换客户来源
*/
bindCusFromChange(e){
this.cusFromIndex = e.detail.value
this.onRefresherrefresh()
// this.onRefresherrefresh()
},
/**
* 切换维修项目类型
*/
bindRepairTypeChange(e){
this.repairTypeIndex = e.detail.value
this.onRefresherrefresh()
// this.onRefresherrefresh()
},
/**
* 切换工单状态
*/
bindTicketsStatusChange(e){
this.ticketsStatusIndex = e.detail.value
// this.onRefresherrefresh()
},
/**
* 查2个数据字典备用---客户注册方式-cus_sign_type维修业务分类-repair_type
@ -208,10 +253,14 @@ export default {
//
this.repairTypeList.push(item.label)
this.repairTypeValueList.push(item.value)
}else{
}else if("cus_sign_type"==dictCode){
//
this.cusFromList.push(item.label)
this.cusFromValueList.push(item.value)
}else if("repair_tickets_status"==dictCode){
//
this.ticketsStatusList.push(item.label)
this.ticketsStatusValueList.push(item.value)
}
},
/**
@ -226,10 +275,12 @@ export default {
//+1,
this.pageNo++
//
if (this.isRepairWarehouse) {
this.getRepairSoList()
}else{
this.getOrderList()
if(this.repairSoList.length>0 || this.orderList.length>0){
if (this.isRepairWarehouse) {
this.getRepairSoList()
}else{
this.getOrderList()
}
}
},
/**
@ -252,7 +303,6 @@ export default {
*/
clearText(){
this.searchText = ""
this.onRefresherrefresh()
},
/**
* 开始施工
@ -301,11 +351,22 @@ export default {
}
},
getOrderList(){
let paramsObj = {pageNo: this.pageNo, pageSize: this.pageSize, isFinish: "0",cusFrom:this.cusFromValueList[this.cusFromIndex],repairType:this.repairTypeValueList[this.repairTypeIndex]}
let paramsObj = {
pageNo: this.pageNo,
pageSize: this.pageSize,
isFinish: "0",
cusFrom: this.cusFromValueList[this.cusFromIndex],
repairType: this.repairTypeValueList[this.repairTypeIndex],
ticketsStatus: this.ticketsStatusValueList[this.ticketsStatusIndex]
}
console.log("this.searchText",this.searchText)
if(''!=this.searchText){
paramsObj['ticketNo'] = this.searchText
}
if(this.range.length==2){
paramsObj['startDate'] = this.range[0]
paramsObj['endDate'] = this.range[1]
}
if(1==this.activeKey){
//
paramsObj['selectType'] = "all"
@ -411,7 +472,7 @@ export default {
color: #333333;
.header {
padding: 100rpx 32rpx 20rpx;
padding: 20rpx 32rpx 0 32rpx;
background-color: #fff;
.searchBox {
@ -441,9 +502,11 @@ export default {
}
.body-top-tab {
background: white;
display: flex;
font-size: 30rpx;
margin: 0 32rpx;
padding: 5rpx 0;
align-items: center;
.line {
width: 2rpx;
@ -477,7 +540,7 @@ export default {
.tabList {
background: #FFFFFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border-radius: 12rpx 12rpx 0 0;
display: flex;
align-items: center;
padding: 0 40rpx;
@ -510,7 +573,7 @@ export default {
.orderList {
//padding: 30rpx 0;
padding-top: 10rpx;
height: calc(100% - 90rpx);
height: calc(100% - 340rpx);
display: flex;
flex-direction: column;

View File

@ -869,7 +869,7 @@
.uni-date-x--border {
box-sizing: border-box;
border-radius: 4px;
border: 1px solid #e5e5e5;
//border: 1px solid #e5e5e5;
}
.uni-date-editor--x {

View File

@ -29,12 +29,12 @@ export function getWXStatusHeight() {
}
/**
* 根据订单的状态获取订单的文字展示状态
* 根据订单的状态获取订单的文字展示状态(这个状态范围少是按李总意思整理出来的状态)
* @param ticketsStatus 订单状态
* @param workStatus 维修工作状态
*/
export function getOrderStatusText(ticketsStatus,workStatus){
let str = "";
let str = "已进厂";
if("04"==ticketsStatus){
//待派工
str = "待维修"
@ -63,6 +63,42 @@ export function getOrderStatusText(ticketsStatus,workStatus){
return str;
}
/**
* 根据订单的状态获取订单的文字展示状态(这个状态多就是系统初始状态)
* @param ticketsStatus 订单状态
* @param workStatus 维修工作状态
*/
export function getOrderStatusTextAll(ticketsStatus,workStatus){
let str = "已进厂";
if("04"==ticketsStatus){
//待派工
str = "待派工"
}else if("05"==ticketsStatus){
//维修中
str = "维修中"
}else if("01"==ticketsStatus){
//待取车结算
str = "待取车结算"
}else if("06"==ticketsStatus){
//挂单/记账
str = "已挂单/记账待交车"
}else if("07"==ticketsStatus){
//待通知客户取车
str = "待通知客户取车"
}else if("08"==ticketsStatus){
//已交车
str = "已交车"
}else if("02"==ticketsStatus){
//已结账
str = "已结账待交车"
}else if("03"==ticketsStatus){
//已作废
str = "已作废"
}
return str;
}
/**
* 查询字典可选值
* @param dictCode
@ -217,7 +253,7 @@ export function builderOrder(order) {
flag: 1,
ticketsStatus: order.ticketsStatus,
ticketsWorkStatus: order.ticketsWorkStatus,
flagStr: getOrderStatusText(order.ticketsStatus, order.ticketsWorkStatus),
flagStr: getOrderStatusTextAll(order.ticketsStatus, order.ticketsWorkStatus),
carNum: order.carNo,
nowRepairId: order.nowRepairId,
carModel: order.carBrandName,