装备详情 订单详情页面完善

This commit is contained in:
BianLzhaoMin 2024-12-30 13:50:35 +08:00
parent fe6f641a1b
commit c26a49e728
11 changed files with 1152 additions and 28 deletions

View File

@ -0,0 +1,194 @@
<template>
<!-- 装备外观 -->
<view class="goods-details">
<!-- <h4 class="h4-title">装备外观</h4> -->
<van-image
style="margin-bottom: 6px"
fit="cover"
position="center"
v-for="item in deviceInfo.detailsFileList"
:key="item.id"
:src="item.fileUrl"
/>
</view>
</template>
<script setup>
import { computed, ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { useMemberStore } from '@/stores/index.js'
import { getDeviceDetailsAPI } from '@/services/goods/index.js'
import { addBookCarAPI, getBookCarDetailsAPI } from '@/services/cart/index.js'
const memberStore = useMemberStore()
const userCompanyId = ref()
const userCompanyName = ref()
const images = ref([])
const activeIndex = ref(1)
const deviceInfo = ref({})
const cartCount = ref(0)
const props = defineProps({
maId: {
type: [String, Number],
default: () => '',
},
})
const goodsLabel = ref([
{ goods_label: '装备编号:', label_content: 'code' },
{ goods_label: '装备类目:', label_content: 'groupName' },
{ goods_label: '装备型号:', label_content: 'typeName' },
{ goods_label: '规格:', label_content: '' },
{ goods_label: '品牌:', label_content: 'brand' },
{ goods_label: '出厂日期:', label_content: 'productionDate' },
{ goods_label: '功能特点:', label_content: '' },
])
const goodsPicCount = computed(() => {
return images.value.length
})
const onSwiperChange = (e) => {
activeIndex.value = e + 1
}
const getDeviceDetailsData = async () => {
const { data: res } = await getDeviceDetailsAPI(props.maId)
deviceInfo.value = res
console.log(deviceInfo.value, 'deviceInfo.value----****----')
images.value = res.mainFileList
}
//
const getBookCarDetailsData = async () => {
cartCount.value = 0
const { data: res } = await getBookCarDetailsAPI()
if (res.length > 0) {
res.forEach((e) => {
cartCount.value = e.devInfoVoList.length + cartCount.value
})
} else {
cartCount.value = 0
}
}
//
const onAddCart = () => {
showConfirmDialog({
title: '温馨提示',
message: '是否确认加入预约车',
})
.then(async () => {
console.log(deviceInfo.value, 'deviceInfo')
const { companyId, maId } = deviceInfo.value
const res = await addBookCarAPI({
maId,
orderCompany: companyId,
})
if (res.code === 200) {
showSuccessToast('加入成功')
getDeviceDetailsData()
getBookCarDetailsData()
}
})
.catch(() => {})
}
//
const onRentNow = () => {
uni.navigateTo({ url: `/pages/order/index?id=${deviceInfo.value.maId}` })
}
//
const onCartBarPage = () => {
uni.switchTab({ url: '/pages/cart/index' })
}
// 线
const onLineMessage = () => {
const { companyId, companyName, ownId } = deviceInfo.value
uni.navigateTo({
url: `/pages/message-pages/index?id=${companyId}&name=${companyName}&ownId=${ownId}&formName=${userCompanyName.value}`,
})
}
onLoad(() => {
userCompanyId.value = memberStore.userInfo.companyId
userCompanyName.value = memberStore.userCompanyName
getDeviceDetailsData()
getBookCarDetailsData()
})
</script>
<style lang="scss" scoped>
.swiper-container {
position: relative !important;
.count-tip {
position: absolute;
top: 10px;
right: 20px;
padding: 2px 8px;
border-radius: 2px;
background-color: #bcbcbc;
color: #fff;
}
}
.van-swipe {
width: 100%;
height: 40vh;
// .van-image {
// width: 100%;
// height: 100%;
// }
}
.card-style {
// width: 97%;
// margin: 5px auto 0;
border-radius: 6px;
padding: 8px 12px;
box-sizing: border-box;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.goods-name {
color: #fff;
background: linear-gradient(to right, #e8f4f3, #93dad1, #5fb0a5);
.box_1 {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 18px;
font-weight: bold;
letter-spacing: 2px;
.no-bold {
font-size: 13px;
font-weight: normal;
}
}
.text-right {
margin-top: 6px;
font-size: 12px;
text-align: right;
}
}
.goods-company text,
.goods-details text {
margin-right: 16px;
font-size: 13px;
color: #5c5b5b;
}
.goods-company view,
.goods-details view,
.goods-company h4 {
padding: 2px 0;
}
.h4-title {
padding: 12px 0;
margin: 5px 0;
border-bottom: 1px solid #ccc;
}
.prove-container {
font-size: 14px;
color: #00a288;
}
</style>

View File

@ -40,10 +40,33 @@
</view>
<view class="card-style goods-details">
<h4>装备详情</h4>
<h4 class="h4-title">装备详情</h4>
<view v-for="item in goodsLabel" :key="item.goods_label">
<text> {{ item.goods_label }}{{ deviceInfo[item.label_content] }}</text>
</view>
<!-- <h4 class="h4-title">装备外观</h4>
<van-image
style="margin-bottom: 6px"
fit="cover"
position="center"
v-for="item in deviceInfo.detailsFileList"
:key="item.id"
:src="item.fileUrl"
/>
<h4 class="h4-title">证书展示</h4>
<view>
合格证
<view v-for="item in deviceInfo.insurancePdf" :key="item.id" class="prove-container">
{{ item.fileName }}
</view>
</view>
<h4 class="h4-title">出租记录</h4>
<van-cell-group inset v-for="(item, index) in deviceInfo.leaseList" :key="index">
<van-cell title="订单号" :value="item.orderCode" />
<van-cell title="租赁方" :value="item.leaseName" />
<van-cell title="租赁开始时间" :value="item.leaseStartTime" />
<van-cell title="租赁结束时间" :value="item.leaseEndTime" />
</van-cell-group> -->
</view>
<van-action-bar v-if="memberStore.userType === 2">
@ -108,7 +131,9 @@ const onSwiperChange = (e) => {
const getDeviceDetailsData = async () => {
const { data: res } = await getDeviceDetailsAPI(props.maId)
deviceInfo.value = res
images.value = res.detailsFileList
console.log(deviceInfo.value, 'deviceInfo.value----****----')
images.value = res.mainFileList
}
//
const getBookCarDetailsData = async () => {
@ -186,10 +211,10 @@ onLoad(() => {
width: 100%;
height: 40vh;
.van-image {
width: 100%;
height: 100%;
}
// .van-image {
// width: 100%;
// height: 100%;
// }
}
.card-style {
@ -236,4 +261,15 @@ onLoad(() => {
.goods-company h4 {
padding: 2px 0;
}
.h4-title {
padding: 12px 0;
margin: 5px 0;
border-bottom: 1px solid #ccc;
}
.prove-container {
font-size: 14px;
color: #00a288;
}
</style>

View File

@ -0,0 +1,202 @@
<template>
<!-- 装备证书展示 -->
<view class="goods-details">
<!-- <h4 class="h4-title">证书展示</h4> -->
<!-- <view>
合格证
<view v-for="item in deviceInfo.insurancePdf" :key="item.id" class="prove-container">
{{ item.fileName }}
</view>
</view> -->
<van-image
style="margin-bottom: 6px"
fit="cover"
position="center"
v-for="item in deviceInfo.insurancePdf"
:key="item.id"
:src="item.fileUrl"
/>
</view>
</template>
<script setup>
import { computed, ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { useMemberStore } from '@/stores/index.js'
import { getDeviceDetailsAPI } from '@/services/goods/index.js'
import { addBookCarAPI, getBookCarDetailsAPI } from '@/services/cart/index.js'
const memberStore = useMemberStore()
const userCompanyId = ref()
const userCompanyName = ref()
const images = ref([])
const activeIndex = ref(1)
const deviceInfo = ref({})
const cartCount = ref(0)
const props = defineProps({
maId: {
type: [String, Number],
default: () => '',
},
})
const goodsLabel = ref([
{ goods_label: '装备编号:', label_content: 'code' },
{ goods_label: '装备类目:', label_content: 'groupName' },
{ goods_label: '装备型号:', label_content: 'typeName' },
{ goods_label: '规格:', label_content: '' },
{ goods_label: '品牌:', label_content: 'brand' },
{ goods_label: '出厂日期:', label_content: 'productionDate' },
{ goods_label: '功能特点:', label_content: '' },
])
const goodsPicCount = computed(() => {
return images.value.length
})
const onSwiperChange = (e) => {
activeIndex.value = e + 1
}
const getDeviceDetailsData = async () => {
const { data: res } = await getDeviceDetailsAPI(props.maId)
deviceInfo.value = res
console.log(deviceInfo.value, 'deviceInfo.value----****----')
images.value = res.mainFileList
}
//
const getBookCarDetailsData = async () => {
cartCount.value = 0
const { data: res } = await getBookCarDetailsAPI()
if (res.length > 0) {
res.forEach((e) => {
cartCount.value = e.devInfoVoList.length + cartCount.value
})
} else {
cartCount.value = 0
}
}
//
const onAddCart = () => {
showConfirmDialog({
title: '温馨提示',
message: '是否确认加入预约车',
})
.then(async () => {
console.log(deviceInfo.value, 'deviceInfo')
const { companyId, maId } = deviceInfo.value
const res = await addBookCarAPI({
maId,
orderCompany: companyId,
})
if (res.code === 200) {
showSuccessToast('加入成功')
getDeviceDetailsData()
getBookCarDetailsData()
}
})
.catch(() => {})
}
//
const onRentNow = () => {
uni.navigateTo({ url: `/pages/order/index?id=${deviceInfo.value.maId}` })
}
//
const onCartBarPage = () => {
uni.switchTab({ url: '/pages/cart/index' })
}
// 线
const onLineMessage = () => {
const { companyId, companyName, ownId } = deviceInfo.value
uni.navigateTo({
url: `/pages/message-pages/index?id=${companyId}&name=${companyName}&ownId=${ownId}&formName=${userCompanyName.value}`,
})
}
onLoad(() => {
userCompanyId.value = memberStore.userInfo.companyId
userCompanyName.value = memberStore.userCompanyName
getDeviceDetailsData()
getBookCarDetailsData()
})
</script>
<style lang="scss" scoped>
.swiper-container {
position: relative !important;
.count-tip {
position: absolute;
top: 10px;
right: 20px;
padding: 2px 8px;
border-radius: 2px;
background-color: #bcbcbc;
color: #fff;
}
}
.van-swipe {
width: 100%;
height: 40vh;
// .van-image {
// width: 100%;
// height: 100%;
// }
}
.card-style {
width: 97%;
margin: 5px auto 0;
border-radius: 6px;
padding: 8px 12px;
box-sizing: border-box;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.goods-name {
color: #fff;
background: linear-gradient(to right, #e8f4f3, #93dad1, #5fb0a5);
.box_1 {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 18px;
font-weight: bold;
letter-spacing: 2px;
.no-bold {
font-size: 13px;
font-weight: normal;
}
}
.text-right {
margin-top: 6px;
font-size: 12px;
text-align: right;
}
}
.goods-company text,
.goods-details text {
margin-right: 16px;
font-size: 13px;
color: #5c5b5b;
}
.goods-company view,
.goods-details view,
.goods-company h4 {
padding: 2px 0;
}
.h4-title {
padding: 12px 0;
margin: 5px 0;
border-bottom: 1px solid #ccc;
}
.prove-container {
font-size: 14px;
color: #00a288;
}
</style>

View File

@ -0,0 +1,192 @@
<template>
<!-- 装备出租记录 -->
<view class="goods-details">
<!-- <h4 class="h4-title">出租记录</h4> -->
<van-cell-group inset v-for="(item, index) in deviceInfo.leaseList" :key="index">
<van-cell title="订单号" :value="item.orderCode" />
<van-cell title="租赁方" :value="item.leaseName" />
<van-cell title="租赁开始时间" :value="item.leaseStartTime" />
<van-cell title="租赁结束时间" :value="item.leaseEndTime" />
</van-cell-group>
<van-empty description="暂无记录" v-if="!deviceInfo.leaseList" />
</view>
</template>
<script setup>
import { computed, ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { useMemberStore } from '@/stores/index.js'
import { getDeviceDetailsAPI } from '@/services/goods/index.js'
import { addBookCarAPI, getBookCarDetailsAPI } from '@/services/cart/index.js'
const memberStore = useMemberStore()
const userCompanyId = ref()
const userCompanyName = ref()
const images = ref([])
const activeIndex = ref(1)
const deviceInfo = ref({})
const cartCount = ref(0)
const props = defineProps({
maId: {
type: [String, Number],
default: () => '',
},
})
const goodsLabel = ref([
{ goods_label: '装备编号:', label_content: 'code' },
{ goods_label: '装备类目:', label_content: 'groupName' },
{ goods_label: '装备型号:', label_content: 'typeName' },
{ goods_label: '规格:', label_content: '' },
{ goods_label: '品牌:', label_content: 'brand' },
{ goods_label: '出厂日期:', label_content: 'productionDate' },
{ goods_label: '功能特点:', label_content: '' },
])
const goodsPicCount = computed(() => {
return images.value.length
})
const onSwiperChange = (e) => {
activeIndex.value = e + 1
}
const getDeviceDetailsData = async () => {
const { data: res } = await getDeviceDetailsAPI(props.maId)
deviceInfo.value.leaseList = res.leaseList
// images.value = res.mainFileList
}
//
const getBookCarDetailsData = async () => {
cartCount.value = 0
const { data: res } = await getBookCarDetailsAPI()
if (res.length > 0) {
res.forEach((e) => {
cartCount.value = e.devInfoVoList.length + cartCount.value
})
} else {
cartCount.value = 0
}
}
//
const onAddCart = () => {
showConfirmDialog({
title: '温馨提示',
message: '是否确认加入预约车',
})
.then(async () => {
console.log(deviceInfo.value, 'deviceInfo')
const { companyId, maId } = deviceInfo.value
const res = await addBookCarAPI({
maId,
orderCompany: companyId,
})
if (res.code === 200) {
showSuccessToast('加入成功')
getDeviceDetailsData()
getBookCarDetailsData()
}
})
.catch(() => {})
}
//
const onRentNow = () => {
uni.navigateTo({ url: `/pages/order/index?id=${deviceInfo.value.maId}` })
}
//
const onCartBarPage = () => {
uni.switchTab({ url: '/pages/cart/index' })
}
// 线
const onLineMessage = () => {
const { companyId, companyName, ownId } = deviceInfo.value
uni.navigateTo({
url: `/pages/message-pages/index?id=${companyId}&name=${companyName}&ownId=${ownId}&formName=${userCompanyName.value}`,
})
}
onLoad(() => {
userCompanyId.value = memberStore.userInfo.companyId
userCompanyName.value = memberStore.userCompanyName
getDeviceDetailsData()
getBookCarDetailsData()
})
</script>
<style lang="scss" scoped>
.swiper-container {
position: relative !important;
.count-tip {
position: absolute;
top: 10px;
right: 20px;
padding: 2px 8px;
border-radius: 2px;
background-color: #bcbcbc;
color: #fff;
}
}
.van-swipe {
width: 100%;
height: 40vh;
// .van-image {
// width: 100%;
// height: 100%;
// }
}
.card-style {
width: 97%;
margin: 5px auto 0;
border-radius: 6px;
padding: 8px 12px;
box-sizing: border-box;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.goods-name {
color: #fff;
background: linear-gradient(to right, #e8f4f3, #93dad1, #5fb0a5);
.box_1 {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 18px;
font-weight: bold;
letter-spacing: 2px;
.no-bold {
font-size: 13px;
font-weight: normal;
}
}
.text-right {
margin-top: 6px;
font-size: 12px;
text-align: right;
}
}
.goods-company text,
.goods-details text {
margin-right: 16px;
font-size: 13px;
color: #5c5b5b;
}
.goods-company view,
.goods-details view,
.goods-company h4 {
padding: 2px 0;
}
.h4-title {
padding: 12px 0;
margin: 5px 0;
border-bottom: 1px solid #ccc;
}
.prove-container {
font-size: 14px;
color: #00a288;
}
</style>

View File

@ -4,7 +4,7 @@
<view class="tabs-container">
<van-icon name="arrow-left" @click="onHandleBack" />
<van-tabs v-model:active="activeTabs" swipeable color="#00a288" background="#c9ead4">
<van-tab v-for="(t, i) in tabList" :title="t.tab_name"> </van-tab>
<van-tab v-for="(t, i) in tabList" :title="t.tab_name" />
</van-tabs>
</view>
@ -14,9 +14,12 @@
:style="{ paddingBottom: actionBarHeight + 'px' }"
>
<DetailsModel v-if="activeTabs === 0" :maId="maId" />
<view v-else>
<DetailsAppearance v-if="activeTabs === 1" :maId="maId" />
<DetailsProve v-if="activeTabs === 2" :maId="maId" />
<DetailsRecord v-if="activeTabs === 3" :maId="maId" />
<!-- <view v-else>
{{ tabList[activeTabs].tab_name }}
</view>
</view> -->
</scroll-view>
</view>
</template>
@ -24,6 +27,9 @@
<script setup>
import { nextTick, ref } from 'vue'
import DetailsModel from './components/details-model.vue'
import DetailsAppearance from './components/details-appearance.vue'
import DetailsProve from './components/details-prove.vue'
import DetailsRecord from './components/details-record.vue'
import { onLoad } from '@dcloudio/uni-app'
const activeTabs = ref(0)
const maId = ref('')

View File

@ -171,7 +171,7 @@ const activeSelect = ref(0)
const showBottom = ref(false)
const deviceList = ref([])
const total = ref(0)
const activeTypeName = ref('')
const activeTypeName = ref('机具')
const searchModelValue = ref('')
const searchParams = ref({
keyWord: '',
@ -395,8 +395,11 @@ onLoad((options) => {
if (options.type == 1) {
activeTypeName.value = '机具'
}
searchParams.value.keyWord = options.value
searchModelValue.value = options.value
searchParams.value.keyWord = options?.value
searchModelValue.value = options?.value
searchParams.value.typeId = options?.typeId
searchParams.value.companyId = options?.companyId
options?.typeId ? (searchParams.value.level = 3) : ''
getDeviceListData(true)
getTypeListData()
const companyList = memberStore.companyList.map((e) => {

View File

@ -52,9 +52,54 @@
</view>
</view>
<van-tabs
animated
color="#22AB9B"
v-model:active="activeClass"
title-active-color="#22AB9B"
>
<van-tab title="装备分类">
<van-sidebar v-model="activeLevel1">
<van-sidebar-item
:title="item.name"
:key="item.id"
v-for="item in classDeviceList"
/>
</van-sidebar>
<van-sidebar v-model="activeLevel2">
<van-sidebar-item
:title="item.name"
:key="item.id"
v-for="item in classDeviceList[activeLevel1]?.children"
/>
</van-sidebar>
<view style="flex: 1" class="deviceClass">
<view
class="van-ellipsis"
:key="item.id"
v-for="item in classDeviceList3"
@click="onClickDevice(item)"
>
{{ item.name }} ({{ item.maCount ? item.maCount : 0 }})
</view>
</view>
</van-tab>
<van-tab title="公司分类">
<view style="flex: 1" class="companyClass">
<view
class="van-ellipsis"
:key="item.companyId"
v-for="item in memberStore.companyList"
@click="onClickCompany(item)"
>
{{ item.companyName }}({{ item.maCount ? item.maCount : 0 }})
</view>
</view>
</van-tab>
</van-tabs>
<view class="order-data">
<TitleTip />
<van-cell-group inset>
<van-grid :column-num="3">
<van-grid-item v-for="(o, i) in orderData" :key="i" @click="onViewMyOrder(o)">
@ -83,7 +128,7 @@
</template>
<script setup>
import { ref } from 'vue'
import { computed, ref } from 'vue'
import orderIcon_1 from '@/static/index/order_icon1.png'
import orderIcon_2 from '@/static/index/order_icon2.png'
import orderIcon_3 from '@/static/index/order_icon3.png'
@ -96,10 +141,11 @@ import TitleTip from '@/components/TitleTip/index'
import { onLoad, onShow } from '@dcloudio/uni-app'
import { useMemberStore } from '@/stores/index.js'
import {
getOrderStatusCountAPI,
getToDoListAPI,
getNoticeLListAPI,
getOrderStatusCountAPI,
} from '@/services/index/index.js'
import { getEquipmentTypeAPI } from '@/services/common/index.js'
const activeTypeName = ref('机具')
const searchModelValue = ref('')
const memberStore = useMemberStore()
@ -109,6 +155,10 @@ const activeUser = ref(1)
const finished = ref(false)
const toDoListMessage = ref([])
const noticeListMessage = ref([])
const activeClass = ref(0)
const activeLevel1 = ref(0)
const activeLevel2 = ref(0)
const classDeviceList = ref([])
const orderData = ref([
{ order_title: '我的订单', order_count: 0, order_status: 0, order_icon: orderIcon_1 },
{
@ -192,6 +242,28 @@ const onViewMore = (item) => {
})
}
const getEquipmentTypeData = async () => {
const { data: result } = await getEquipmentTypeAPI()
classDeviceList.value = result
// classDeviceList3.value =
// classDeviceList.value[activeLevel1.value].children[activeLevel2.value].children
}
const classDeviceList3 = computed(() => {
return classDeviceList.value[activeLevel1.value]?.children[activeLevel2.value].children
})
const onClickDevice = (item) => {
uni.navigateTo({
url: `/pages/goods-list/index?typeId=${item.id}`,
})
}
const onClickCompany = (item) => {
uni.navigateTo({
url: `/pages/goods-list/index?companyId=${item.companyId}`,
})
}
onLoad(() => {
finished.value = true
userCompanyName.value = memberStore?.userCompanyName
@ -199,14 +271,13 @@ onLoad(() => {
onShow(async () => {
activeUser.value = memberStore.userType
if (activeUser.value === 2) {
uni.setTabBarItem({
index: 2,
visible: true,
})
}
getEquipmentTypeData()
getOrderStatusCountData()
const res = await getToDoListAPI()
@ -305,4 +376,70 @@ onShow(async () => {
padding: 0;
margin: 0;
}
:deep(.van-tabs__content--animated) {
padding: 0 10px;
}
:deep(.van-tab__panel) {
max-height: 40vh;
display: flex;
overflow-y: auto;
}
.companyClass {
display: flex;
flex-wrap: wrap;
view {
width: calc((100% - 20px) / 3);
margin-right: 10px;
margin-top: 10px;
padding: 0 6px;
height: 32px;
line-height: 32px;
text-align: center;
border-radius: 16px;
box-sizing: border-box;
color: #999999;
background-color: #e9e9e9;
font-size: 14px;
}
& view:nth-child(3n) {
margin-right: 0;
}
& view:hover {
background-color: #22ab9b !important;
color: #fff !important;
}
}
.deviceClass {
height: 100%;
display: flex;
flex-wrap: wrap;
padding-left: 10px;
view {
width: 100%;
margin-top: 10px;
padding: 0 6px;
height: 32px;
line-height: 32px;
text-align: center;
border-radius: 16px;
box-sizing: border-box;
color: #999999;
background-color: #e9e9e9;
font-size: 14px;
}
& view:nth-child(2n) {
margin-right: 0;
}
& view:hover {
background-color: #22ab9b !important;
color: #fff !important;
}
}
:deep(.van-sidebar-item--select:before) {
display: none;
}
</style>

View File

@ -179,13 +179,13 @@ onLoad(async (options) => {
fileList: [],
}
})
lossRecordList.value = res.lossRecordList
fileListAll.value = res.fileInfoList.map((e) => {
lossRecordList.value = res.lossRecordList.map((e) => {
return {
...e,
fileList: [],
}
})
fileListAll.value = res.fileInfoList
orderDetails.value = res
fileListAll.value.forEach((e) => {

View File

@ -6,16 +6,293 @@
<text style="color: #000"> 订单详情 </text>
</view>
<van-cell-group inset style="flex: 1"> </van-cell-group>
<!-- <van-cell-group inset style="flex: 1"> </van-cell-group> -->
<scroll-view scroll-y style="padding: 10px; box-sizing: border-box">
<view class="order-set">
<van-row>
<van-col span="12">
<view class="company-box">
<van-image width="1.5rem" height="1.2rem" :src="companyImg" />
<view class="company-name">
<view> 安徽送变电公司 </view>
<van-image fit="cover" height="0.5rem" :src="companyBg" />
</view>
</view>
</van-col>
<van-col span="10" class="contacts">
<!-- <van-tag :type="orderType(orderDetails.orderStatus)">
{{ orderText(orderDetails.orderStatus) }}
</van-tag> -->
</van-col>
</van-row>
<view v-for="goods in orderDetailsList">
<van-row>
<van-col span="24">
<view class="items-info">
<van-image
fit="cover"
height="4rem"
width="4rem"
:src="goods.url"
/>
<view class="info">
<view style="color: #000">
{{ goods.deviceName }}
<text style="color: var(--van-submit-bar-price-color)">
{{ goods.costs }}
</text>
</view>
<view>
装备编号{{ goods.code }}
<!-- <van-tag :type="orderType(goods.orderStatus)">
{{ orderText(goods.orderStatus) }}
</van-tag> -->
</view>
<view>装备型号{{ goods.typeName }}</view>
<view> 租赁时长 {{ goods.days }}</view>
</view>
</view>
</van-col>
</van-row>
</view>
</view>
<van-cell-group inset>
<TitleTip :title="`订单信息`" />
<van-cell title="订单编号:" :value="orderDetails.code" />
<van-cell title="下单时间:" :value="orderDetails.orderTime" />
<van-cell title="出租单位:" :value="orderDetails.czcompanyName" />
<van-cell title="出租人:" :value="orderDetails.person" />
<van-cell title="出租人电话:" :value="orderDetails.personPhone" />
<van-cell title="承租单位" :value="orderDetails.companyName" />
<van-cell title="承租人" :value="orderDetails.nickName" />
<van-cell title="承租人电话" :value="orderDetails.phoneNumber" />
<van-cell title="收货地址" :value="orderDetails.address" />
</van-cell-group>
<view v-if="orderDetails.orderStatus == 20">
<TitleTip :title="`租赁费用明细`" />
<view
:key="item.id"
class="items-container"
v-for="(item, index) in orderDetailDtoList"
>
<view class="count-title">
<text></text>
<text style="font-weight: bold">设备{{ index + 1 }}</text>
</view>
<van-cell-group inset>
<van-cell title="装备编号" :value="item.code" />
<van-cell title="装备名称" :value="item.deviceName" />
<van-cell title="装备型号" :value="item.typeName" />
<van-cell title="装备数量" :value="item.num" />
<van-cell title="租赁单价(元/天)" :value="item.dayLeasePrice" />
<van-cell title="租赁天数" :value="item.dateDays" />
<van-cell
title="租期"
:value="`${item.preOutboundTime}至${item.rentOverTime}`"
/>
<van-cell title="租赁费用" :value="item.costs" />
<van-cell title="改价后费用" :value="item.changeCost" />
<!-- <van-cell title="操作改价" /> -->
<van-field
v-model="item.costs"
name="密码"
label="操作改价"
placeholder="请输入改价后费用"
/>
</van-cell-group>
</view>
<van-empty description="暂无数据" v-if="orderDetailDtoList.length === 0" />
<TitleTip :title="`维修费用明细`" />
<view
:key="item.id"
class="items-container"
v-for="(item, index) in repairRecordList"
>
<view class="count-title">
<text></text>
<text style="font-weight: bold">设备{{ index + 1 }}</text>
</view>
<van-cell-group inset>
<van-cell title="装备编号" :value="item.code" />
<van-cell title="装备名称" :value="item.deviceName" />
<van-cell title="装备型号" :value="item.typeName" />
<van-cell title="维修数量" :value="item.repairNum" />
<van-cell title="维修费用(元)" :value="item.repairPrice" />
<van-cell title="改价后费用(元)" :value="item.repairChangePrice" />
<van-cell title="附件" center>
<template #right-icon>
<view>
<van-text-ellipsis :content="item.fileList[0]?.fileName" />
</view>
</template>
</van-cell>
<van-field
v-model="item.repairPrice"
label="操作改价"
placeholder="请输入改价后费用"
/>
</van-cell-group>
</view>
<van-empty description="暂无数据" v-if="repairRecordList.length === 0" />
<TitleTip :title="`报废费用明细`" />
<view
:key="item.id"
class="items-container"
v-for="(item, index) in scrapRecordList"
>
<view class="count-title">
<text></text>
<text style="font-weight: bold">设备{{ index + 1 }}</text>
</view>
<van-cell-group inset>
<van-cell title="装备编号" :value="item.code" />
<van-cell title="装备名称" :value="item.deviceName" />
<van-cell title="装备型号" :value="item.typeName" />
<van-cell title="报废数量" :value="item.scrapNum" />
<van-cell title="报废原因" :value="item.scrapReason" />
<van-cell title="报废费用(元)" :value="item.scrapPrice" />
<van-cell title="改价后费用(元)" :value="item.scrapChangePrice" />
<van-cell title="附件" center>
<template #right-icon>
<view>
<van-text-ellipsis :content="item.fileList[0]?.fileName" />
</view>
</template>
</van-cell>
<van-field
v-model="item.scrapPrice"
name="密码"
label="操作改价"
placeholder="请输入改价后费用"
/>
</van-cell-group>
</view>
<van-empty description="暂无数据" v-if="scrapRecordList.length === 0" />
<TitleTip :title="`丢失费用明细`" />
<view
:key="item.id"
class="items-container"
v-for="(item, index) in lossRecordList"
>
<view class="count-title">
<text></text>
<text style="font-weight: bold">设备{{ index + 1 }}</text>
</view>
<van-cell-group inset>
<van-cell title="装备编号" :value="item.code" />
<van-cell title="装备名称" :value="item.deviceName" />
<van-cell title="装备型号" :value="item.typeName" />
<van-cell title="丢失数量" :value="item.lossNum" />
<van-cell title="丢失费用(元)" :value="item.lossPrice" />
<van-cell title="改价后费用(元)" :value="item.lossChangePrice" />
<van-cell title="附件" center>
<template #right-icon>
<view>
<van-text-ellipsis :content="item.fileList[0]?.fileName" />
</view>
</template>
</van-cell>
<van-field
v-model="item.lossPrice"
name="密码"
label="操作改价"
placeholder="请输入改价后费用"
/>
</van-cell-group>
</view>
<van-empty description="暂无数据" v-if="lossRecordList.length === 0" />
</view>
</scroll-view>
</view>
</template>
<script setup>
import { useMemberStore } from '@/stores/index.js'
const memberStore = useMemberStore()
import companyImg from '@/static/goods/company-img.png'
import companyBg from '@/static/goods/company-bg.png'
import TitleTip from '@/components/TitleTip/index'
import { ref } from 'vue'
import { editOrderDetailsAPI, getOverhaulAPI } from '@/services/order/index.js'
import { onLoad } from '@dcloudio/uni-app'
const orderDetailsList = ref([])
const orderDetails = ref({})
const orderDetailDtoList = ref([])
const repairRecordList = ref([])
const scrapRecordList = ref([])
const lossRecordList = ref([])
const fileListAll = ref([])
const onClickLeft = () => {
uni.navigateBack()
uni.reLaunch({
url: '/pages/order-list/index',
})
}
const getOverhaulData = async (orderId) => {
const { data: res } = await getOverhaulAPI({ orderId })
orderDetailDtoList.value = res.orderDetailDtoList
repairRecordList.value = res.repairRecordList.map((e) => {
return {
...e,
fileList: [],
}
})
scrapRecordList.value = res.scrapRecordList.map((e) => {
return {
...e,
fileList: [],
}
})
lossRecordList.value = res.lossRecordList.map((e) => {
return {
...e,
fileList: [],
}
})
fileListAll.value = res.fileInfoList
fileListAll.value.forEach((e) => {
repairRecordList.value.forEach((j) => {
if (e.modelId == j.maId && e.fileType == 0) {
j.fileList.push({
fileName: e.fileName,
fileUrl: e.fileUrl,
})
}
})
scrapRecordList.value.forEach((j) => {
if (e.modelId == j.maId && e.fileType == 1) {
j.fileList.push({
fileName: e.fileName,
fileUrl: e.fileUrl,
})
}
})
lossRecordList.value.forEach((j) => {
if (e.modelId == j.maId && e.fileType == 2) {
j.fileList.push({
fileName: e.fileName,
fileUrl: e.fileUrl,
})
}
})
})
}
onLoad(async (options) => {
const { data: res } = await editOrderDetailsAPI({ orderId: options?.orderId })
orderDetails.value = res
orderDetailsList.value = res.detailsList
if (res.orderStatus == 20) {
getOverhaulData(options?.orderId)
}
})
</script>
<style lang="scss" scoped>
@ -27,6 +304,83 @@ const onClickLeft = () => {
}
:deep(.van-cell-group--inset) {
padding: 15px 0;
padding: 5px 10px;
margin: 0;
}
.order-set {
padding: 10px;
margin-bottom: 10px;
box-sizing: border-box;
border-radius: 6px;
background-color: #fff;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
.van-row {
padding: 2px 0;
display: flex;
align-items: center;
}
}
.company-box {
display: flex;
align-items: center;
width: 100%;
.company-name {
width: 100%;
display: flex;
flex-direction: column;
view {
padding-left: 6px;
font-size: 16px;
font-weight: bold;
}
.van-image {
width: 100%;
}
}
}
.items-info {
display: flex;
align-items: center;
.info {
font-size: 14px;
flex: 1;
view {
width: 100%;
padding: 1px 0 1px 10px;
font-size: 13px;
color: #6f6f6f;
display: flex;
align-items: center;
justify-content: space-between;
.van-image {
margin: 0 4px;
}
}
& view:first-child {
font-size: 14px;
font-weight: bold;
}
}
}
.items-container {
margin-bottom: 10px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
.count-title text:first-child {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 5px;
background-color: #ff660f;
margin-right: 8px;
}
}
</style>

View File

@ -88,7 +88,7 @@
(item.orderStatus == 1 || item.orderStatus == 2) &&
orderQueryParams.flag
"
@click="onEditOrderStatus(item, parseInt(item.orderStatus))"
@click.stop="onEditOrderStatus(item, parseInt(item.orderStatus))"
>
{{ initBtnText(item.orderStatus) }}
</van-button>
@ -792,7 +792,7 @@ const onSubmitRepairResult = () => {
}
const onJumpOrderDetails = (item) => {
uni.navigateTo({ url: '/pages/order-details/index' })
uni.navigateTo({ url: `/pages/order-details/index?orderId=${item.orderId}` })
}
onLoad((options) => {

View File

@ -203,13 +203,13 @@ onLoad(async (options) => {
fileList: [],
}
})
lossRecordList.value = res.lossRecordList
fileListAll.value = res.fileInfoList.map((e) => {
lossRecordList.value = res.lossRecordList.map((e) => {
return {
...e,
fileList: [],
}
})
fileListAll.value = res.fileInfoList
orderDetails.value = res
fileListAll.value.forEach((e) => {