detection-business/pages/index/ordermanage.vue
2025-05-07 16:06:58 +08:00

577 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 订单管理 -->
<template>
<view class="content">
<view style="width: 100%; height: 55px;"></view>
<headersVue titles="订单管理">
<u-icon name="arrow-left" color="#fff" size="18"></u-icon>
</headersVue>
<!-- <view class="top-heder">-->
<!-- </view>-->
<view class="search_box">
<u-search placeholder="搜索车牌号....." @clear="getList()" @search="getList()" :showAction="false"
v-model="carNum" searchIconColor="#427FFE"></u-search>
</view>
<!-- <view class="t-input">-->
<!-- <uni-icons type="search" color="#BCBCBC" size="22"></uni-icons>-->
<!-- <input type="text" v-model="carNum" placeholder="搜索车牌号.....">-->
<!-- </view>-->
<!-- <view class="sou" @click="getList()">搜索</view>-->
<view class="tap">
<view class="tap-box" v-for="(item,index) in tapList" :key="index" @click="tapqh(index,item)">
<view class="xhuihui" :class="{'xzhei':tapindex == index}">{{ item.text }}</view>
<view class="gang" v-if="tapindex == index"></view>
</view>
</view>
<view class="mub">
<view class="top-ail">
<scroll-view class="school-scroll-view" scroll-y @scrolltolower="onReachBottomCus"
:style="{ height: scrollHeight + 'px' }" refresher-enabled @refresherrefresh="onRefresherrefresh"
:refresher-triggered="isTriggered">
<view class="jsy" v-if="infoDatas.length == 0">
<image src="http://www.nuoyunr.com/lananRsc/detection/qs.png" mode=""></image>
</view>
<view class="m-box" v-for="(item,index) in infoDatas" :key="index">
<view class="sshi" v-if="item.isPass == '0'">
<image v-if="item.status == 1" :src="imgurl + '/noPass.png'" mode=""></image>
<view v-else class="csz">
<text>重审中</text>
</view>
</view>
<view class="sshi" v-if="item.isPass == '1'">
<image :src="imgurl + '/pass.png'" mode=""></image>
</view>
<view class="m-top">
<view class="top-left" style="display: flex;gap: 1.5rem">
<view class="dhei">车型:{{ item.goodsName }}</view>
<view class="dhei">检测类型:{{ item.skuName }}</view>
<!-- <text class="xhui">施工人员:{{ item.workerName }}</text>-->
</view>
<view @click="callUser(item.buyPhone)" class="top-right">
<image src="/static/imgs/tel.png" style="width: 36rpx; height: 36rpx; " mode=""></image>
</view>
</view>
<view class="" @click="godetails(item.id)">
<view class="on-input">
<uni-icons type="person" color="#999999" size="16"></uni-icons>
<text>客户:</text>
<text>{{ item.buyName ? item.buyName : "" }}</text>
</view>
<view class="on-input">
<uni-icons type="phone" color="#999999" size="16"></uni-icons>
<text>电话:</text>
<text>{{ item.buyPhone }}</text>
</view>
<view class="on-input">
<uni-icons type="map" color="#999999" size="16"></uni-icons>
<text>车牌号:</text>
<text>{{ item.carNum }}</text>
</view>
<view class="on-input">
<uni-icons type="more" color="#999999" size="16"></uni-icons>
<text>客户来源:</text>
<text>{{ item.customerSource }}</text>
</view>
<view class="on-input" v-if="item.otherPhone">
<uni-icons type="more" color="#999999" size="16"></uni-icons>
<text>代办人手机号:</text>
<text>{{ item.otherPhone }}</text>
</view>
<view class="on-input" v-if="item.nodeNames">
<uni-icons type="more" color="#999999" size="16"></uni-icons>
<text class="single-line" style="color: red;" v-if="tapValue == '4'">需复检项目:</text>
<text class="single-line" style="color: red;width: 150rpx;" v-else>异常项目:</text>
<text class="multi-line" :style="true ? 'color:red' : ''">{{ item.nodeNames }}</text>
</view>
<view style="justify-content: space-between;display: flex;">
<view class="bottom-di">
<text v-if="tapindex === 1">商品原价:</text>
<text v-if="tapindex === 1" class="ju"
style="margin-right: 0.5rem">{{ item.goodsPrice / 100 }}元</text>
<text>实付金额:</text>
<text class="ju">{{ item.realPayMoney / 100 }}元</text>
</view>
<view class="bottom-di" v-if="tapValue == '5'">
<button @tap.stop="submitException(item, $event)">消除异常</button>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
<!-- <view class="lanniu" @click="gogogo">
<text>+ 添加线下订单</text>
<text>+ 接车</text>
</view> -->
<view class="lanniu-container">
<!-- <view class="lanniu" @click="gogogo">
<text>添加线下订单</text>
</view> -->
<view class="lanniu" @click="gogogoMeetCarOrder">
<text>接车</text>
</view>
</view>
</view>
</template>
<script>
import config from '@/config'
import request from '../../utils/request';
import headersVue from "@/components/header/headers.vue";
export default {
components: {
headersVue
},
data() {
return {
imgurl: this.$imgeUrl,
baseUrl: this.$baseUrl,
infoDatas: [],
partnerId: uni.getStorageSync("partnerId"),
goodsTitle: '',
tapindex: 0,
tapValue: 0,
scrollHeight: 0,
isTriggered: false,
msg: 2,
carNum: '',
pageNum: 1, //第几页
pageSize: 20, //一页多少张
totalPages: 0, //总数
tapList: [{
text: "进行中",
value: "0"
},
{
text: "已完成",
value: "1",
},
{
text: "待重检",
value: "2"
},
{
text: "待复检",
value: "4"
},
{
text: "异常工单",
value: "5"
}
]
}
},
onLoad() {
this.getList()
},
onShow() {
this.getList()
},
// onReachBottom() {
// if (this.pageNum >= this.totalPages) {
// uni.showToast({
// title: '没有下一页数据',
// icon: 'none'
// })
// } else {
// this.pageNum++
// this.getList()
// }
// },
onReady() {
// 动态计算滚动区域高度
this.calculateScrollHeight();
},
methods: {
calculateScrollHeight() {
// 获取屏幕高度
const screenHeight = uni.getSystemInfoSync().windowHeight;
// 获取顶部区域高度
const topHeight = 250;
// 计算滚动区域高度
this.scrollHeight = screenHeight - topHeight;
},
/**
* 上滑加载数据
*/
onReachBottomCus() {
//判断 如果页码*页容量大于等于总条数,提示该页数据加载完毕
if (this.pageNum >= this.totalPages) {
uni.$u.toast('没有更多数据了')
return
}
//页码+1,调用获取数据的方法获取第二页数据
this.pageNum++
//此处调用自己获取数据列表的方法
this.getList()
},
/**
* 下拉刷新数据
*/
onRefresherrefresh() {
this.isTriggered = true
this.pageNum = 1
this.total = 0
this.infoDatas = []
this.getList()
},
submitException(data) {
console.log('取消异常', data);
let this_ = this
uni.showModal({
title: '提示',
content: '确认消除该条异常吗?',
success: function(res) {
if (res.confirm) {
// 执行确认后的操作
request({
url: '/system/info/updateException',
data: {
inspectionInfoId: data.id,
idList: data.nodeIds
},
method: 'post'
})
// 执行取消后的操作
this_.onRefresherrefresh()
} else {
return
}
}
})
},
searchList() {
this.infoDatas = []
this.getList()
},
gogogoMeetCarOrder() {
uni.navigateTo({
url: '/pages/index/meetCarOrder'
})
},
callUser(phone) {
uni.makePhoneCall({
phoneNumber: phone //仅为示例
});
},
async getList() {
let res = await request({
url: '/partnerOwn/partner/inspectionList',
method: 'get',
params: {
partnerId: this.partnerId,
status: this.tapValue,
carNum: this.carNum,
pageSize: this.pageSize,
pageNum: this.pageNum,
}
})
if (res.code == 200) {
if (this.pageNum != 1) {
this.infoDatas = this.infoDatas.concat(res.rows)
} else {
this.infoDatas = res.rows
}
if (this.tapValue == '4' || this.tapValue == '5') {
const ids = this.infoDatas.filter(item => !item.nodeNames).map(item => item.id)
if (ids && ids.length > 0) {
let response = null;
if (this.tapValue == '4') {
response = await request({
url: `/partnerOwn/partner/getProjectBelowStandardByIds`,
method: 'get',
params: {
ids: ids.join(','),
status: 3,
type: this.tapValue == '7' ? '0' : ''
}
})
} else if (this.tapValue == '5') {
response = await request({
url: `/partnerOwn/partner/getProjectExceptionByIds`,
method: 'get',
params: {
ids: ids.join(',')
}
})
}
if (response.data) {
const data = response.data
this.infoDatas.forEach(item => {
let nodeNamesArr = []
let nodeIds = []
if (data[item.id]) {
data[item.id].forEach(data => {
nodeNamesArr.push(data.name)
nodeIds.push(data.id)
})
const nodeNames = nodeNamesArr.join('、')
this.$set(item, 'nodeNames', nodeNames)
this.$set(item, 'nodeIds', nodeIds)
console.log('数据', item);
}
})
}
}
}
let total = res.total
this.totalPages = Math.ceil(total / this.pageSize);
}
this.isTriggered = false
},
getfan() {
uni.navigateBack()
},
godetails(inspectionInfoId) {
uni.navigateTo({
url: "/pages/index/orderdetails?inspectionInfoId=" + inspectionInfoId
})
},
gogogo() {
uni.navigateTo({
url: '/pages/index/Neworder'
})
},
tapqh(index, data) {
this.pageNum = 1
this.tapindex = index
this.tapValue = data.value
this.infoDatas = []
this.getList()
}
}
}
</script>
<style scoped lang="scss">
.content {
box-sizing: border-box;
width: 100%;
// height: calc(100vh);
background: white;
}
.search_box {
box-sizing: border-box;
padding: 0 20rpx;
border-bottom: 2rpx solid #F5F5F5;
margin-top: 130rpx;
}
.sshi {
position: absolute;
top: 180rpx;
right: 20px;
width: 115px;
height: 115px;
box-sizing: border-box;
padding: 10px;
image {
width: 100%;
height: 100%;
}
}
.top-heder {
width: 100%;
height: 46px;
background: white;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 5px 15px;
}
.t-left {
width: 10%;
}
.t-input {
width: 75%;
height: 36px;
background: #F0F0F0;
border-radius: 50px;
box-sizing: border-box;
padding: 0 15px;
display: flex;
align-items: center;
margin-top: 120rpx;
}
.top-ail {
width: 100%;
box-sizing: border-box;
padding: 0 15px;
//background-color: #F4F4F4;
background: white;
}
.mub {
background-color: #F4F4F4;
// height: calc(100vh);
}
.tap {
width: 100%;
height: 44px;
background: #FFFFFF;
display: flex;
align-items: center;
justify-content: space-between;
}
.tap-box {
width: 50%;
}
.xhuihui {
width: 100%;
text-align: center;
font-size: 16px;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #666666;
}
.gang {
width: 24px;
height: 4px;
//background: #0D2E8D;
background: #327DFB;
border-radius: 4px;
margin: 2px auto;
}
.xzhei {
font-weight: bold !important;
color: #333333 !important;
}
.m-box {
position: relative;
background: #F7F8FC;
border-radius: 8px;
box-sizing: border-box;
padding: 15px 10px;
margin: 10px auto;
}
.m-top {
width: 100%;
box-sizing: border-box;
padding-bottom: 15px;
border-bottom: 1px solid #EEEEEE;
display: flex;
align-items: center;
justify-content: space-between;
}
.top-left {}
.top-right {
z-index: 9999;
width: 33px;
height: 33px;
//border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.dhei {
font-size: 16px;
font-weight: bold;
color: #333333;
margin-bottom: 5px;
}
.xhui {
font-size: 15px;
font-weight: 400;
color: #999999;
}
.lanniu-container {
width: 90%;
position: fixed;
bottom: 30rpx;
display: flex;
align-items: center;
justify-content: space-between;
/* 控制子元素之间的间距可以改为 center/space-around */
transform: translate(-50%);
left: 50%;
z-index: 10074;
}
.on-input {
width: 100%;
display: flex;
align-items: center;
font-size: 15px;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #999999;
margin-bottom: 10px;
margin-top: 10px;
// justify-content: space-between;
}
.bottom-di {
padding-top: 10px;
box-sizing: border-box;
border-top: 1px solid #EEEEEE;
}
.ju {
font-size: 24px;
font-weight: 600;
color: #FF571A;
}
.lanniu {
display: flex;
align-items: center;
justify-content: center;
background: #327DFB;
color: white;
height: 44px;
border-radius: 8px;
font-weight: bold;
flex: 1;
/* 子元素均分宽度 */
margin: 0 5px;
/* 控制子元素之间的间距 */
}
.csz {
font-size: 20px;
font-weight: bold;
color: #FF571A;
}
</style>