This commit is contained in:
zzyuan 2024-11-26 18:30:57 +08:00
commit e33fffc973
18 changed files with 667 additions and 247 deletions

17
components.d.ts vendored
View File

@ -3,28 +3,29 @@
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
export {}
export { }
declare module 'vue' {
export interface GlobalComponents {
Breadcrumb: typeof import('./src/components/Breadcrumb/index.vue')['default']
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElImage: typeof import('element-plus/es')['ElImage']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTag: typeof import('element-plus/es')['ElTag']
EquipCard: typeof import('./src/components/equipCard.vue')['default']
EquipCardHall: typeof import('./src/components/equipCardHall/index.vue')['default']

1
env/.env.dev vendored
View File

@ -8,6 +8,7 @@ VITE_API_URL = '/proxyApi'
# VITE_proxyTarget = 'http://10.40.92.74:8080' #盛旭
VITE_proxyTarget = 'http://192.168.2.246:18080' # 马帅
# VITE_proxyTarget = 'http://192.168.2.129:18080' # 马帅
# VITE_proxyTarget = 'http://10.40.92.185:9206' # 赵福海 ( 设备类型)
# VITE_proxyTarget = 'http://10.40.92.16:9502' # 牛 (个人中心 基础信息企业申请认证)

View File

@ -54,6 +54,12 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe862;</span>
<div class="name">电话</div>
<div class="code-name">&amp;#xe862;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe639;</span>
<div class="name">购物车</div>
@ -498,9 +504,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1732329564134') format('woff2'),
url('iconfont.woff?t=1732329564134') format('woff'),
url('iconfont.ttf?t=1732329564134') format('truetype');
src: url('iconfont.woff2?t=1732599020939') format('woff2'),
url('iconfont.woff?t=1732599020939') format('woff'),
url('iconfont.ttf?t=1732599020939') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -526,6 +532,15 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-dianhua"></span>
<div class="name">
电话
</div>
<div class="code-name">.icon-dianhua
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gouwuche2"></span>
<div class="name">
@ -1192,6 +1207,14 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-dianhua"></use>
</svg>
<div class="name">电话</div>
<div class="code-name">#icon-dianhua</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gouwuche2"></use>

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 3152246 */
src: url('iconfont.woff2?t=1732329564134') format('woff2'),
url('iconfont.woff?t=1732329564134') format('woff'),
url('iconfont.ttf?t=1732329564134') format('truetype');
src: url('iconfont.woff2?t=1732599020939') format('woff2'),
url('iconfont.woff?t=1732599020939') format('woff'),
url('iconfont.ttf?t=1732599020939') format('truetype');
}
.iconfont {
@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-dianhua:before {
content: "\e862";
}
.icon-gouwuche2:before {
content: "\e639";
}

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,13 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "8288971",
"name": "电话",
"font_class": "dianhua",
"unicode": "e862",
"unicode_decimal": 59490
},
{
"icon_id": "3826040",
"name": "购物车",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,23 @@
<template>
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: backPath }">{{ backName }}</el-breadcrumb-item>
<el-breadcrumb-item>{{ currentName }}</el-breadcrumb-item>
</el-breadcrumb>
</template>
<script setup lang="ts">
defineProps({
backPath: {
type: String,
default: () => '',
},
backName: {
type: String,
default: () => '',
},
currentName: {
type: String,
default: () => '',
},
})
</script>

View File

@ -35,7 +35,7 @@
</li>
</ul>
<ul class="mobile-info">
<!-- <ul class="mobile-info">
<li>商城热线</li>
<li>供应商入驻开店续费资讯010-2345-1234</li>
<li>供应商咨询010-2345-1234</li>
@ -45,84 +45,83 @@
工作时间周一至周五 8:30-1200 &nbsp;&nbsp;&nbsp;&nbsp;
1400-1730
</li>
</ul>
</ul> -->
</div>
</div>
</template>
<style lang="scss">
.footer-container {
margin-top: 40px;
height: 650px;
border-top: 1px solid #979797;
background: url("../../assets/img/home/2023_12_01_beijing2/beijing2.png")
no-repeat;
background-size: cover;
.footer-container {
margin-top: 40px;
// height: 650px;
border-top: 1px solid #979797;
background: url('../../assets/img/home/2023_12_01_beijing2/beijing2.png') no-repeat;
background-size: cover;
.icon-info {
.icon-info {
height: 100px;
margin-top: 30px;
display: flex;
justify-content: space-around;
li {
height: 100px;
margin-top: 30px;
display: flex;
justify-content: space-around;
align-items: center;
li {
height: 100px;
span:first-child {
display: block;
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
border-radius: 50%;
border: 3px solid #3cb4a6;
color: #3cb4a6;
font-weight: bold;
font-size: 22px;
}
span:last-child {
display: block;
height: 50px;
margin-left: 15px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
span:first-child {
display: block;
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
border-radius: 50%;
border: 3px solid #3cb4a6;
color: #3cb4a6;
i {
color: #8c8c8c;
}
i:first-child {
font-weight: bold;
font-size: 22px;
font-size: 18px;
color: #333;
}
span:last-child {
display: block;
height: 50px;
margin-left: 15px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
i {
color: #8c8c8c;
}
i:first-child {
font-weight: bold;
font-size: 18px;
color: #333;
}
}
}
}
.mobile-info {
margin-top: 30px;
text-align: center;
li {
padding: 20px 0;
}
li:first-child {
padding: 30px 0;
font-size: 20px;
font-weight: bold;
letter-spacing: 1px;
}
li:last-child {
font-weight: bold;
}
}
}
.mobile-info {
margin-top: 30px;
text-align: center;
li {
padding: 20px 0;
}
li:first-child {
padding: 30px 0;
font-size: 20px;
font-weight: bold;
letter-spacing: 1px;
}
li:last-child {
font-weight: bold;
}
}
}
</style>

View File

@ -1,5 +1,15 @@
import { get } from '../../index'
import { get, post } from '../../index'
// 预约车列表详情接口
export const getBookCarDetailsApi = () => {
return get('/material-mall/bookCar/getBookCarDetails', {})
}
// 预约车列表提交
export const submitBookCarApi = (data: any) => {
return post('/material-mall/order/submitBookCar', data)
}
// 预约车列表提交
export const deleteCartByIdApi = (data: any) => {
return post('/material-mall/bookCar/deleteById', data)
}

View File

@ -30,7 +30,9 @@ service.interceptors.request.use(
)
// 响应拦截
service.interceptors.response.use(
(res) => {
ElMessage.closeAll()
const { data } = res
if (data.code == '200') {
return data
@ -40,13 +42,16 @@ service.interceptors.response.use(
} else if (data.code == '401') {
ElMessage.error(data.msg)
router.push('/login')
} else if (data.code == '500') {
ElMessage.error('请求失败')
}
else {
return data
}
},
(error) => {
ElMessage.closeAll()
ElMessage.error('请求失败')
console.log('error-异常', error)
}
)

View File

@ -95,7 +95,7 @@ const routes: Array<RouteRecordRaw> = [
name: 'equipList',
component: () => import('views/equip/list.vue'),
meta: {
title: '',
title: '装备共享大厅',
activeName: 'equipList',
}
},

View File

@ -15,7 +15,9 @@
<el-row class="cart-th">
<el-col :span="2">
<div>
<el-checkbox v-model="allChecked" @change="onChangeAll"> 全选 </el-checkbox>
<el-checkbox v-model="allChecked" @change="onChangeAll" :key="allKey">
全选
</el-checkbox>
</div>
</el-col>
<el-col :span="9">
@ -47,6 +49,7 @@
<div style="text-align: center">
<el-checkbox
v-model="item.isChecked"
:key="index"
@change="onChangeCompany($event, index, item)"
>
</el-checkbox>
@ -59,10 +62,14 @@
</el-col>
</el-row>
<el-row class="cart-list" v-for="(goods, j) in item.devInfoVoList" :key="j">
<el-row class="cart-list" v-for="(goods, j) in item.devInfoVoList" :key="goods.id">
<el-col :span="1">
<div style="text-align: center">
<el-checkbox v-model="goods.isChecked" @change="onChangeGoods(index)">
<el-checkbox
v-model="goods.isChecked"
@change="onChangeGoods(index)"
:key="goods.id"
>
</el-checkbox>
</div>
</el-col>
@ -79,7 +86,9 @@
</el-col>
<el-col :span="4">
<div class="lease-date">
<div>{{ goods.lease_date_string }}</div>
<div v-if="goods.rentBeginTime && goods.rentEndTime">
{{ goods.rentBeginTime }}-{{ goods.rentEndTime }}
</div>
<el-date-picker
style="width: 100px; margin-top: 10px"
v-model="goods.lease_date"
@ -92,44 +101,65 @@
</el-col>
<el-col :span="2">
<div class="red-font">
{{ goods.lease_pic }}
{{ goods.dayLeasePrice }}
</div>
</el-col>
<el-col :span="2">
<div class="red-font" style="color: #0062ff">
{{ goods.lease_day }}
{{ goods.days }}
</div>
</el-col>
<el-col :span="2">
<div>
<el-input-number
v-model="goods.goods_num"
v-model="goods.num"
style="width: 100px"
:min="1"
:max="goods.deviceCount"
size="small"
/>
</div>
</el-col>
<el-col :span="2">
<div class="red-font">
{{ goods.goods_num * goods.lease_pic * goods.lease_day }}
{{ goods.num * goods.days * goods.dayLeasePrice }}
</div>
</el-col>
<el-col :span="2">
<div>
<el-button
@click="onDeleteGoods(j)"
type="text"
<!-- <el-button
link
@click="onDeleteGoods(goods.id)"
style="color: #ff4800; font-weight: bold"
>
删除
</el-button>
</el-button> -->
<el-popconfirm
width="220"
:icon="InfoFilled"
icon-color="#626AEF"
title="确定删除该条预约车记录吗?"
@confirm="onDeleteGoods(goods.id)"
>
<template #reference>
<el-button link style="color: #ff4800; font-weight: bold">
删除</el-button
>
</template>
<template #actions="{ confirm }">
<el-button size="small">取消</el-button>
<el-button type="danger" size="small" @click="confirm()">
确定
</el-button>
</template>
</el-popconfirm>
</div>
</el-col>
</el-row>
</div>
<div class="protocol-handle">
<div class="protocol-handle" v-if="cardList.length > 0">
<el-row style="display: flex; align-items: center">
<el-col :span="16">
<div class="checkbox-container">
@ -174,23 +204,33 @@
import Header from '../../components/header/index.vue'
import FooterInfo from '../../components/FooterInfo/index.vue'
import { ElMessage } from 'element-plus'
import { getBookCarDetailsApi } from '../../http/api/cart/index'
import moment from 'moment'
import {
getBookCarDetailsApi,
submitBookCarApi,
deleteCartByIdApi,
} from '../../http/api/cart/index'
import moment, { max } from 'moment'
import { InfoFilled } from '@element-plus/icons-vue'
const protocolChecked = ref<boolean>(false)
const allKey = ref(0)
const cardList = ref<any>([])
const getBookCarDetailsData = async () => {
const res: any = await getBookCarDetailsApi()
console.log(res, '----')
cardList.value = res.data
cardList.value = []
cardList.value = JSON.parse(JSON.stringify(res.data))
cardList.value.forEach((e: any) => {
e.isChecked = false
e.devInfoVoList.forEach((j: any) => {
j.isChecked = false
j.days = 0
j.num = 1
j.costs = 0
j.rentBeginTime = ''
j.rentEndTime = ''
})
})
@ -204,13 +244,30 @@ onMounted(() => {
// change
const onLeaseDateChange = (e: any, item: any) => {
item.lease_date_string = `${e[0]}${e[1]}`
item.lease_day = moment(e[1]).diff(e[0], 'day')
console.log(e, '*****')
if (!e) {
item.rentBeginTime = ''
item.rentEndTime = ''
item.days = 0
} else {
item.rentBeginTime = e[0]
item.rentEndTime = e[1]
item.days = moment(e[1]).diff(e[0], 'day')
}
}
//
const onDeleteGoods = (index: number) => {
console.log('删除---', index)
const onDeleteGoods = async (id: number | string) => {
const res: any = deleteCartByIdApi({ id })
if (res.code === 200) {
ElMessage({
showClose: false,
message: '删除成功',
type: 'success',
})
getBookCarDetailsData()
}
}
// change
@ -237,21 +294,25 @@ const onChangeCompany = (e: boolean, index: number, item: any) => {
//
const amountNum = computed(() => {
let amountNum = 0
cardList.value.forEach((e) => {
cardList.value.forEach((e: any) => {
amountNum = e.devInfoVoList.length + amountNum
})
return amountNum
})
//
const allChecked = computed(() => {
return cardList.value.every((e: any) => e.isChecked === true)
if (cardList.value.length < 1) {
return false
} else {
return cardList.value.every((e: any) => e.isChecked === true)
}
})
//
//
const amountDevice = computed(() => {
let amountNum = 0
cardList.value.forEach((e) => {
e.devInfoVoList.forEach((g) => {
cardList.value.forEach((e: any) => {
e.devInfoVoList.forEach((g: any) => {
if (g.isChecked) {
amountNum++
}
@ -259,14 +320,26 @@ const amountDevice = computed(() => {
})
return amountNum
})
//
const amountDeviceList = computed(() => {
let selectList: any = []
cardList.value.forEach((e: any) => {
e.devInfoVoList.forEach((g: any) => {
if (g.isChecked) {
selectList.push(g)
}
})
})
return selectList
})
//
const orderAmountPice = computed(() => {
let orderAmountPice = 0
cardList.value.forEach((e) => {
e.devInfoVoList.forEach((g) => {
cardList.value.forEach((e: any) => {
e.devInfoVoList.forEach((g: any) => {
if (g.isChecked) {
orderAmountPice = g.goods_num * g.lease_pic * g.lease_day + orderAmountPice
orderAmountPice = g.num * g.dayLeasePrice * g.days + orderAmountPice
}
})
})
@ -274,16 +347,56 @@ const orderAmountPice = computed(() => {
})
//
const onCartSubmit = () => {
const onCartSubmit = async () => {
ElMessage.closeAll()
if (amountDevice.value < 1) {
ElMessage({
showClose: false,
message: '请选择装备',
type: 'error',
})
return
}
if (!protocolChecked.value) {
ElMessage({
showClose: false,
message: '请阅读公司合同',
type: 'error',
})
return
}
console.log('提交订单')
//
const detailsList = amountDeviceList.value.map((e: any) => {
return {
maId: e.maId,
id: e.id,
rentBeginTime: e.rentBeginTime + ' ' + '00:00:00',
rentEndTime: e.rentEndTime + ' ' + '00:00:00',
manageType: e.manageType,
days: e.days,
num: e.num,
costs: e.num * e.days * e.dayLeasePrice,
}
})
const submitParams = {
cost: orderAmountPice.value,
detailsList,
}
const res: any = await submitBookCarApi(submitParams)
if (res.code === 200) {
ElMessage({
showClose: false,
message: '提交成功',
type: 'success',
})
allKey.value++
getBookCarDetailsData()
}
// console.log(res, '')
}
</script>

View File

@ -1,9 +1,32 @@
<template>
<Navmenu></Navmenu>
<!-- <Navmenu></Navmenu> -->
<Breadcrumb :backPath="backPath" :backName="backName" :currentName="currentName" />
<div class="equipDetail">
<div class="top">
<div class="showImg">
<!-- <showImg :url-list="pageData.bmFileInfoList"></showImg> -->
<img alt="" :src="viewImgUrl" />
<div class="img-slide">
<div class="btn" @click="onPrevImg">
<el-icon><ArrowLeftBold /></el-icon>
</div>
<div class="img-slide-container">
<div
class="img-item"
:class="{ activeUrl: activeIndex === index }"
v-for="(item, index) in goodsImgList"
:key="index"
@click="onCheckImg(item.fileUrl, index)"
>
<img :src="item.fileUrl" alt="" />
</div>
</div>
<div class="btn" @click="onNextImg">
<el-icon><ArrowRightBold /></el-icon>
</div>
</div>
</div>
<div class="baseInfo">
<div class="equipInfo">
@ -18,7 +41,7 @@
</div> -->
</div>
<div class="viewNnum">
<div>浏览 100</div>
<div>浏览 {{ pageData.searchNum }}</div>
<div style="color: #409eff; display: flex; align-items: center">
<Location style="width: 1em; height: 1em; margin-right: 8px" />
安徽省合肥市蜀山区
@ -44,9 +67,26 @@
</el-row>
<div class="options">
<div class="item_btn contact" @click="onAddCart">加入预约车</div>
<div class="item_btn applyFor" v-authBtn="() => openLease">
立即承租
<div>
<el-button
class="item_btn"
type="primary"
:disabled="pageData.isBookCar == 0"
@click="onAddCart"
>加入预约车</el-button
>
</div>
<div>
<el-button
class="item_btn applyFor"
:disabled="pageData.isBookCar == 0"
:style="pageData.isBookCar == 0 ? 'opacity:0.5' : ''"
style="background-color: #1abc9c"
v-authBtn="() => openLease"
>
立即承租
</el-button>
</div>
</div>
</div>
@ -69,10 +109,13 @@
</div> -->
</div>
<div class="phone">
<PhoneFilled
<!-- <PhoneFilled
style="width: 2em; height: 2em; margin-right: 8px; color: #409eff"
/>
<div style="font-size: 20px">187555555</div>
/> -->
<svg class="icon" aria-hidden="true" style="width: 24px; height: 24px">
<use xlink:href="#icon-dianhua"></use>
</svg>
<div style="font-size: 20px">{{ pageData.personPhone }}</div>
</div>
<div style="text-align: right">
<el-button type="primary" round icon="ChatDotRound">在线聊</el-button>
@ -80,16 +123,16 @@
</div>
</div>
<div class="businessInfo">
<img class="bgCar" src="@/assets/img/equipDetail/gouwu.png" />
<!-- <img class="bgCar" src="@/assets/img/equipDetail/gouwu.png" /> -->
<div class="business">
<img src="@/assets/img/bns-logo.png" class="avatar" />
<!-- <img src="@/assets/img/bns-logo.png" class="avatar" /> -->
<div class="fonts">
<div class="name">{{ pageData.companyName }}</div>
<div class="other">
<div class="item" v-for="(v, i) in businessList" :key="i">
<div class="label">{{ v.label }}</div>
<div class="value">{{ pageData[v.key] }}{{ v.unit }}</div>
<div class="value">{{ pageData[v.key] }}</div>
</div>
</div>
</div>
@ -100,7 +143,7 @@
<div class="detail">
<div class="publicTitle">装备详情</div>
<div class="publicLine"></div>
<!-- <div class="publicLine"></div> -->
<div class="list publicContent">
<div class="item" v-for="(v, i) in equipDetailKeyList" :key="i">
<div class="label">{{ v.label }}</div>
@ -115,12 +158,38 @@
</div>
<div class="appearance">
<div class="publicTitle">装备外观</div>
<div class="publicLine"></div>
<div class="urlList publicContent">
<img :src="v" v-for="(v, i) in pageData.pictures || []" :key="i" />
<!-- <div class="publicLine"></div> -->
<div class="urlList">
<img :src="v" v-for="(v, i) in goodsAppearanceList" :key="i" />
</div>
</div>
<div class="recommend">
<div class="appearance">
<div class="publicTitle">证书展示</div>
<div class="certificate">
<div>
合格证
<a>xxxxxx.pdf</a>
</div>
<div>
检测证明
<a>xxxxxx.pdf</a>
</div>
</div>
</div>
<div class="appearance">
<div class="publicTitle">出租记录</div>
<div class="rental-record">
<el-table :data="tableData" border style="width: 100%">
<el-table-column align="center" type="index" label="序号" width="80" />
<el-table-column align="center" prop="order_code" label="订单号" />
<el-table-column align="center" prop="lease_user" label="出租方" />
<el-table-column align="center" prop="start_time" label="租赁开始时间" />
<el-table-column align="center" prop="end_time" label="租赁结束时间" />
<el-table-column align="center" prop="lease_price" label="租赁费用" />
</el-table>
</div>
</div>
<!-- <div class="recommend">
<div class="publicTitle">
<div>为您推荐</div>
@ -141,7 +210,7 @@
:id="v.maId"
></equip-card>
</div>
</div>
</div> -->
<el-dialog
v-model="dialoglease"
@ -287,33 +356,128 @@
</div>
</template>
<script lang="ts" setup>
import ShowImg from './comoonents/showImg.vue'
import { computed, reactive, ref } from 'vue'
import EquipCard from 'components/equipCard.vue'
import Breadcrumb from '../../components/Breadcrumb/index.vue'
import {
getDetail,
getHotList,
equipCollect,
addBookCarApi,
apiSubmitLease,
apiGetAddressList,
addBookCarApi,
} from '@/http/api/equip'
import { useRoute, useRouter } from 'vue-router'
import Navmenu from '@/components/Navmenu/index.vue'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
// import Navmenu from '@/components/Navmenu/index.vue'
import equipDetailTable from '@/components/equipDetailTable.vue'
import { ElMessage } from 'element-plus'
import { mainStore } from '@/store/main'
const router = useRouter()
const route = useRoute()
const ruleFormRef = ref()
const store = mainStore()
const ruleFormRef = ref()
const pageParams = route.params
const backPath = ref<any>('')
const backName = ref<any>('')
const currentName = ref<any>('装备详情')
const viewImgUrl = computed(() => {
if (goodsImgList.value.length > 0) {
return goodsImgList.value[activeIndex.value].fileUrl
} else {
return ''
}
})
if (router.options.history.state.back) {
backPath.value = router.options.history.state.back
const previousRoute: any = []
if (router.options.history.state.back === '/home') {
backName.value = '首页'
}
router.options.routes.forEach((route: any) => {
if (route.path === router.options.history.state.back) {
previousRoute.push(route)
} else {
if (route.children && route.children.length > 0) {
route.children.forEach((r: any) => {
if (r.path === router.options.history.state.back) {
previousRoute.push(r)
}
})
}
}
})
if (previousRoute.length > 0) {
backName.value = previousRoute[0].meta.title
}
}
//
const goodsImgList: any = ref([
// 'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
// 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg',
// 'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
// 'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
])
//
const goodsAppearanceList: any = ref([
'https://fc1tn.baidu.com/it/u=4185529537,1682541874&fm=202&src=766&fc=tdmatt&mola=new&crop=v1',
'https://img.d1cm.com/news/img/202406071013545196.jpg',
])
const tableData = ref([
{
order_code: '2024102310223xxx',
lease_user: '王先生',
start_time: '2024-10-11',
end_time: '2025-10-10',
lease_price: 600,
},
{
order_code: '2024102310223xxx',
lease_user: '王先生',
start_time: '2024-10-11',
end_time: '2025-10-10',
lease_price: 600,
},
{
order_code: '2024102310223xxx',
lease_user: '王先生',
start_time: '2024-10-11',
end_time: '2025-10-10',
lease_price: 600,
},
{
order_code: '2024102310223xxx',
lease_user: '王先生',
start_time: '2024-10-11',
end_time: '2025-10-10',
lease_price: 600,
},
])
// viewImgUrl.value = goodsImgList.value[0]
//
const activeIndex = ref<number>(0)
//
const onCheckImg = (item: string, index: number) => {
activeIndex.value = index
}
//
const onPrevImg = () => {
if (activeIndex.value > 0) {
activeIndex.value--
}
}
//
const onNextImg = () => {
if (activeIndex.value + 1 < goodsImgList.value.length) {
activeIndex.value++
}
}
//
const equipBaseInfoList = reactive([
{
@ -358,9 +522,14 @@ const businessList = reactive([
},
{
label: '上架数量',
key: 'companyUpNum',
key: 'devUapNum',
unit: '台',
},
{
label: '访问量',
key: 'companyVisitNum',
unit: '',
},
])
//map
@ -372,71 +541,71 @@ const equipDetailKeyList = reactive([
arg: '',
},
{
label: '装备类别',
key: 'typeName',
fn: '',
arg: '',
},
{
label: '装备组别',
key: 'groupName',
fn: '',
arg: '',
},
{
label: '装备名称',
key: 'deviceName',
fn: '',
arg: '',
},
{
label: '规格',
key: 'specification',
fn: '',
arg: '',
},
{
label: '品牌',
label: '装备品牌',
key: 'brand',
fn: '',
arg: '',
},
{
label: '装备类目',
key: 'groupName',
fn: '',
arg: '',
},
{
label: '装备型号',
key: 'modelName',
key: 'typeName',
fn: '',
arg: '',
},
{
label: '序列号码',
key: 'serialNumber',
label: '出厂时间',
key: 'specification',
fn: '',
arg: '',
},
{
label: '出场时间',
key: 'productionDate',
label: '整机重量(KG)',
key: '',
fn: '',
arg: '',
},
{
label: '工作时长',
key: 'workingHours',
fn: '',
arg: '',
},
{
label: '检验信息',
key: 'isExaminationPdf',
fn: 'openPdf',
arg: 'examinationPdf',
},
{
label: '保险信息',
key: 'isInsurancePdf',
fn: 'openPdf',
arg: 'insurancePdf',
},
// {
// label: '',
// key: 'modelName',
// fn: '',
// arg: '',
// },
// {
// label: '',
// key: 'serialNumber',
// fn: '',
// arg: '',
// },
// {
// label: '',
// key: 'productionDate',
// fn: '',
// arg: '',
// },
// {
// label: '',
// key: 'workingHours',
// fn: '',
// arg: '',
// },
// {
// label: '',
// key: 'isExaminationPdf',
// fn: 'openPdf',
// arg: 'examinationPdf',
// },
// {
// label: '',
// key: 'isInsurancePdf',
// fn: 'openPdf',
// arg: 'insurancePdf',
// },
])
//
@ -614,6 +783,7 @@ const getData = async () => {
console.log('res详情数据', res)
pageData.value = res.data
goodsImgList.value = res.data.mainFileList
}
//
@ -750,8 +920,54 @@ const onAddCart = async () => {
.showImg {
width: 38%;
border-radius: 15px;
overflow: hidden;
// overflow: hidden;
margin-right: 30px;
// display: flex;
// flex-direction: column;
// justify-content: space-between;
img {
width: 100%;
height: 73%;
}
.img-slide {
height: 25%;
width: 100%;
display: flex;
align-items: center;
.btn {
cursor: pointer;
font-size: 26px;
// &:hover {
// color: white;
// }
}
.img-slide-container {
flex: 1;
display: flex;
height: 80%;
justify-content: space-around;
.img-item {
width: calc((100% - 30px) / 4);
cursor: pointer;
img {
height: 90%;
margin-top: 5%;
}
// width: 25%;
// background-color: orange;
}
.activeUrl {
border: 1px solid #1abc9c;
}
}
}
}
.baseInfo {
@ -837,13 +1053,13 @@ const onAddCart = async () => {
.options {
display: flex;
align-items: center;
.item_btn {
cursor: pointer;
width: 110px;
height: 40px;
line-height: 40px;
border-radius: 8px;
height: 36px;
line-height: 36px;
border-radius: 4px;
font-size: 14px;
text-align: center;
}
@ -855,7 +1071,8 @@ const onAddCart = async () => {
}
.applyFor {
background-color: #1abc9c;
margin-left: 50px;
// background-color: #1abc9c;
color: #f7f9fa;
box-sizing: border-box;
line-height: 38px;
@ -914,7 +1131,8 @@ const onAddCart = async () => {
.businessInfo {
width: 100%;
height: 147px;
margin-top: 10px;
// height: 147px;
background: #f7f9fa;
border-radius: 15px;
position: relative;
@ -942,7 +1160,7 @@ const onAddCart = async () => {
.fonts {
.name {
font-size: 20px;
font-size: 16px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #333333;
@ -953,12 +1171,12 @@ const onAddCart = async () => {
display: flex;
.item {
font-size: 14px;
font-size: 12px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #333333;
color: #747373;
display: flex;
margin-right: 15px;
margin-right: 60px;
.label {
}
@ -974,14 +1192,15 @@ const onAddCart = async () => {
}
.publicTitle {
font-size: 20px;
font-size: 18px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #333333;
display: flex;
align-items: center;
justify-content: space-between;
color: #fff;
background-color: #1abc9c;
width: 150px;
height: 65px;
line-height: 65px;
text-align: center;
letter-spacing: 1px;
}
.publicLine {
@ -1004,7 +1223,9 @@ const onAddCart = async () => {
.publicContent {
box-sizing: border-box;
padding: 40px 70px 10px;
padding: 40px 30px 10px;
border: 1px solid #1abc9c;
margin-bottom: 20px;
}
.detail {
@ -1015,9 +1236,9 @@ const onAddCart = async () => {
.item {
cursor: pointer;
width: calc(100% / 3);
font-size: 16px;
font-size: 14px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
// font-weight: 600;
display: flex;
margin-bottom: 35px;
@ -1049,6 +1270,20 @@ const onAddCart = async () => {
width: 100%;
}
}
.certificate {
padding: 40px 30px 10px;
div {
display: flex;
align-items: center;
margin-bottom: 30px;
a {
color: #54b4ff;
cursor: pointer;
}
}
}
}
.recommend {

View File

@ -96,6 +96,7 @@
:price="v.dayLeasePrice"
:company="v.companyName"
:personPhone="v.personPhone"
@click="onHandleDetails(v.maId)"
/>
<!-- <equip-card
class="card"
@ -372,7 +373,7 @@ const getDeviceListData = async (params: any = null, keyWord: any = null) => {
}
if (index === 3 && j.isChecked) {
searchParams.companyId = j.value
searchParams.level = 1
searchParams.level = j.value ? 1 : ''
}
})
})
@ -427,17 +428,9 @@ const selectScreen = (type: any, item: any, index: number) => {
e.isChecked = false
})
item.isChecked = !item.isChecked
// activeParams[type] = item.value
getDeviceListData()
}
//card
const toDetail = (data) => {
router.push({
path: `/equipDetail/${data.id}`,
})
}
//page
const onCurrentChange = (val: number) => {
pageData.pageNum = val
@ -471,6 +464,11 @@ onMounted(() => {
onUnmounted(() => {
$bus.off('search')
})
//
const onHandleDetails = (id: number | string) => {
router.push(`/equipDetail/${id}`)
}
</script>
<style lang="scss" scoped>
.equipList {

View File

@ -163,32 +163,27 @@ const onSelectItem = (type: number) => {
{{ child.name }}
</span>
<span
style="
display: flex;
flex: 1;
flex-direction: column;
flex-wrap: wrap;
"
>
<span style="display: flex; flex: 1; flex-wrap: wrap">
<a
v-for="son in child.children"
:key="son.id"
style="font-size: 14px; font-weight: normal"
@click="onSharedHall(3, son.id)"
>
{{ son.name }}
</a>
</span>
<!-- <span style="display: flex; flex: 1">
<span
v-for="son in child.children"
:key="son.id"
style="
font-size: 14px;
font-weight: bold;
width: 100%;
display: flex;
"
style="font-size: 14px; font-weight: normal"
@click="onSharedHall(3, son.id)"
>
<!-- {{ son.name }} -->
{{ son.name }} -->
<span style="width: 30%">
{{ son.name }}
</span>
<span
<!-- <span
style="
width: 70%;
display: flex;
@ -209,9 +204,9 @@ const onSelectItem = (type: number) => {
>
{{ son_1.name }}
</span>
</span>
</span>
</span>
</span> -->
<!-- </span>
</span> -->
<!-- <span>{{ child.name }}</span>
<span>
@ -446,11 +441,12 @@ const onSelectItem = (type: number) => {
top: 0;
left: 200px;
width: 915px;
min-height: 100%;
max-height: 100%;
background-color: #f5f4f4;
background-color: #fff;
z-index: 999;
// opacity: 0.9;
border: 1px solid #333;
border: 1px solid #eee;
overflow-y: auto;
box-sizing: border-box;
@ -469,6 +465,11 @@ const onSelectItem = (type: number) => {
margin: 0 15px;
font-size: 14px;
font-weight: normal;
color: #333;
&:hover {
color: #1abc9c;
border-bottom: 1px solid #1abc9c !important;
}
}
.last-level {