Zlpt_Portal/src/views/equip/detail.vue

903 lines
24 KiB
Vue
Raw Normal View History

2023-12-04 09:15:31 +08:00
<template>
2023-12-05 17:25:00 +08:00
<Navmenu></Navmenu>
2023-12-04 09:15:31 +08:00
<div class="equipDetail">
<div class="top">
<div class="showImg">
2023-12-05 17:25:00 +08:00
<showImg :url-list="pageData.pictures || []"></showImg>
2023-12-04 09:15:31 +08:00
</div>
<div class="baseInfo">
<div class="equipInfo">
<div class="left">
<div class="title">
2023-12-05 17:25:00 +08:00
<div class="name">{{ pageData.modelName }}{{ pageData.deviceName }}</div>
2023-12-04 09:15:31 +08:00
<div class="tag">
2023-12-05 17:25:00 +08:00
<div class="item">{{ pageData.maStatus }}</div>
<div class="item otherItem" v-if="pageData.isAudit == 1">已审核</div>
2023-12-04 09:15:31 +08:00
</div>
</div>
2023-12-05 20:50:06 +08:00
<div class="viewNnum">浏览{{ pageData.searchNum }}</div>
2023-12-04 09:15:31 +08:00
<div class="infoBox">
2023-12-04 17:42:11 +08:00
<div class="item" v-for="(v, i) in equipBaseInfoList" :key="i">
<div class="label">{{ v.label }}</div>
2023-12-05 17:25:00 +08:00
<div class="value">{{
v.key.split(',').map(key => {
return pageData[key]
}).join('')
}}
</div>
2023-12-04 09:15:31 +08:00
</div>
</div>
</div>
<div class="right">
2023-12-05 17:25:00 +08:00
<div class="Top">
<div class="price">
<span>{{ pageData.monthLeasePrice }}</span>
/
</div>
<div class="collect" @click="collectChange">
<el-icon class="no" v-show="!isCollect">
<Star/>
</el-icon>
<el-icon class="yes" v-show="isCollect">
<StarFilled/>
</el-icon>
{{ isCollect ? '装备已收藏' : '收藏装备' }}
</div>
2023-12-04 09:15:31 +08:00
</div>
<div class="options">
2023-12-05 20:50:06 +08:00
<div class="item contact" @click="openPhone">联系商家</div>
2023-12-05 17:25:00 +08:00
<div class="item applyFor" @click="openLease">我要租</div>
2023-12-04 09:15:31 +08:00
</div>
</div>
</div>
<div class="businessInfo">
2023-12-05 17:25:00 +08:00
<img class="bgCar" src="@/assets/img/equipDetail/gouwu.png"/>
2023-12-04 09:15:31 +08:00
<div class="business">
2023-12-04 17:42:11 +08:00
<img
2023-12-08 20:30:52 +08:00
src="@/assets/img/bns-logo.png"
2023-12-05 17:25:00 +08:00
class="avatar"/>
2023-12-04 09:15:31 +08:00
<div class="fonts">
2023-12-05 17:25:00 +08:00
<div class="name">{{ pageData.companyName }}</div>
2023-12-04 09:15:31 +08:00
<div class="other">
2023-12-04 17:42:11 +08:00
<div class="item" v-for="(v, i) in businessList" :key="i">
<div class="label">{{ v.label }}</div>
2023-12-05 17:25:00 +08:00
<div class="value">{{ pageData[v.key] }}{{ v.unit }}</div>
2023-12-04 09:15:31 +08:00
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="detail">
2023-12-04 17:42:11 +08:00
<div class="publicTitle">装备详情</div>
2023-12-04 09:15:31 +08:00
<div class="publicLine"></div>
<div class="list publicContent">
2023-12-04 17:42:11 +08:00
<div class="item" v-for="(v, i) in equipDetailKeyList" :key="i">
<div class="label">{{ v.label }}</div>
2023-12-05 17:25:00 +08:00
<div :class="v.fn ? 'fnValue' : 'value'" @click="handelDetailListClick(v.fn,pageData[v.arg])">{{
pageData[v.key]
}}
</div>
2023-12-04 17:42:11 +08:00
</div>
2023-12-04 09:15:31 +08:00
</div>
</div>
<div class="appearance">
2023-12-04 17:42:11 +08:00
<div class="publicTitle">装备外观</div>
2023-12-04 09:15:31 +08:00
<div class="publicLine"></div>
<div class="urlList publicContent">
2023-12-05 17:25:00 +08:00
<img :src="v" v-for="(v, i) in (pageData.pictures || [])" :key="i"/>
2023-12-04 09:15:31 +08:00
</div>
</div>
<div class="recommend">
<div class="publicTitle">
<div>为您推荐</div>
2023-12-06 14:12:36 +08:00
<div class="change" @click="gethotList">换一批</div>
2023-12-04 09:15:31 +08:00
</div>
<div class="content">
2023-12-06 14:12:36 +08:00
<equip-card class="item"
@on-click="goDetail"
v-for="(v, i) in hotList"
:key="i"
:url="v.picUrl"
:name="`${v.modelName}${v.deviceName}`"
:tags="[v.maStatus,v.location]"
:company="v.companyName"
:price="v.monthLeasePrice"
timeUnit="月"
:id="v.maId"></equip-card>
2023-12-04 09:15:31 +08:00
</div>
</div>
2023-12-05 17:25:00 +08:00
<el-dialog
v-model="dialoglease"
title="填写租赁信息"
lock-scroll
2023-12-06 14:12:36 +08:00
class="dialoglease"
2023-12-05 17:25:00 +08:00
width="60%"
>
<el-config-provider :locale="zhCn">
<el-form
2023-12-05 20:50:06 +08:00
ref="ruleFormRef"
:model="ruleForm"
:rules="rules"
label-width="120px"
class="demo-ruleForm"
status-icon
2023-12-05 17:25:00 +08:00
>
<el-row>
<el-col :span="15">
<el-form-item label="设备进场地址" prop="address">
2023-12-06 14:12:36 +08:00
<el-cascader :props="addressCascader" v-model="ruleForm.address" />
2023-12-05 17:25:00 +08:00
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="15">
<el-form-item label="详细地址" prop="detailAddress">
<el-input placeholder="请输入地址" v-model="ruleForm.detailAddress"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="15">
<el-form-item label="进场时间" prop="entryTime">
<el-date-picker
2023-12-05 20:50:06 +08:00
v-model="ruleForm.entryTime"
2023-12-06 15:57:08 +08:00
value-format="YYYY-MM-DD"
2023-12-05 20:50:06 +08:00
type="date"
placeholder="请选择"
2023-12-05 17:25:00 +08:00
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="15">
<el-form-item label="工期时长" prop="duration">
2023-12-06 15:57:08 +08:00
<el-input v-model="ruleForm.duration" type="number" placeholder="请输入工期时长">
2023-12-06 14:12:36 +08:00
<template #append></template>
</el-input>
2023-12-05 17:25:00 +08:00
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="7">
<el-form-item label="是否需要机手" prop="machinist">
<el-radio-group v-model="ruleForm.machinist">
<el-radio-button :label="1" :disabled="!pageData.isOperator">
</el-radio-button>
2023-12-05 20:50:06 +08:00
<el-radio-button :label="0">
2023-12-05 17:25:00 +08:00
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发票类型" prop="invoiceType">
<el-radio-group v-model="ruleForm.invoiceType">
2023-12-07 17:49:10 +08:00
<el-radio-button label="">
2023-12-05 17:25:00 +08:00
不需要
</el-radio-button>
2023-12-05 20:50:06 +08:00
<el-radio-button :label="1">
2023-12-05 17:25:00 +08:00
增值税普票
</el-radio-button>
2023-12-05 20:50:06 +08:00
<el-radio-button :label="2">
2023-12-05 17:25:00 +08:00
增值税专票
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="15">
<el-form-item label="项目说明" prop="projectDescription">
2023-12-06 14:12:36 +08:00
<el-input placeholder="请填写项目说明" rows="5" type="textarea"
2023-12-05 20:50:06 +08:00
v-model="ruleForm.projectDescription"></el-input>
2023-12-05 17:25:00 +08:00
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-config-provider>
2023-12-05 20:50:06 +08:00
<equipDetailTable
:price="pageData.monthLeasePrice"
:name="`${pageData.modelName}${pageData.deviceName}`"
:company="pageData.companyName"
:url="pageData.picUrl"
:brand="pageData.brand"
:code="pageData.code"
:group="pageData.groupName"
:position="pageData.location"
:specifications="pageData.specification"
:type="pageData.typeName"
unit="月"
></equipDetailTable>
2023-12-05 17:25:00 +08:00
<template #footer>
<span class="dialog-footer">
2023-12-06 14:12:36 +08:00
<el-button type="primary" @click="submit">
2023-12-05 17:25:00 +08:00
提交
</el-button>
</span>
</template>
</el-dialog>
2023-12-05 20:50:06 +08:00
<el-dialog
v-model="dialogPhone"
title="服务电话"
width="30%"
>
<div style="font-size: 16px;font-weight: 600;">
{{ pageData.authPhone }}
</div>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="openPhone">
确认
</el-button>
</span>
</template>
</el-dialog>
2023-12-04 09:15:31 +08:00
</div>
</template>
<script lang="ts" setup>
2023-12-05 17:25:00 +08:00
import ShowImg from './comoonents/showImg.vue'
import {reactive, ref} from 'vue'
import EquipCard from 'components/equipCard.vue'
2023-12-08 17:49:22 +08:00
import {getDetail,getHotList,equipCollect,apiSubmitLease,apiGetAddressList} from "@/http/api/equip"
2023-12-06 14:12:36 +08:00
import {useRoute, useRouter} from "vue-router";
2023-12-05 17:25:00 +08:00
import Navmenu from '@/components/Navmenu/index.vue'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
2023-12-05 20:50:06 +08:00
import equipDetailTable from '@/components/equipDetailTable.vue'
2023-12-06 14:12:36 +08:00
import {ElMessage} from "element-plus";
2023-12-04 09:15:31 +08:00
2023-12-06 14:12:36 +08:00
const router = useRouter()
2023-12-05 17:25:00 +08:00
const route = useRoute()
2023-12-04 09:15:31 +08:00
2023-12-06 14:12:36 +08:00
2023-12-05 17:25:00 +08:00
const pageParams = route.params
//设备简略基本信息
const equipBaseInfoList = reactive([
{
label: '设备规格',
key: 'specification'
},
{
label: '设备单位',
key: 'companyName'
},
{
label: '配备机手',
key: 'isOperatorCn'
},
{
label: '发布时间',
key: 'createTime'
},
{
label: '更新时间',
key: 'updateTime'
2023-12-04 17:42:11 +08:00
}
2023-12-05 17:25:00 +08:00
])
//商家标签信息
const businessList = reactive([
{
label: '入驻时间',
key: 'companyCreateTime',
unit: ''
},
{
label: '上架数量',
key: 'companyUpNum',
unit: '台'
}
])
2023-12-04 09:15:31 +08:00
2023-12-05 17:25:00 +08:00
//装备详情数据map
const equipDetailKeyList = reactive([
{
label: '装备编号',
key: 'code',
fn: '',
arg: ''
},
{
label: '装备类别',
key: 'typeName',
fn: '',
arg: ''
},
{
label: '装备组别',
key: 'groupName',
fn: '',
arg: ''
},
{
label: '装备名称',
key: 'deviceName',
fn: '',
arg: ''
},
{
label: '规格/操作重量',
key: 'specification',
fn: '',
arg: ''
},
{
label: '品牌',
key: 'brand',
fn: '',
arg: ''
},
{
label: '装备型号',
key: 'modelName',
fn: '',
arg: ''
},
{
label: '序列号码',
key: 'serialNumber',
fn: '',
arg: ''
},
{
label: '出场时间',
key: 'productionDate',
fn: '',
arg: ''
},
{
label: '工作时长',
key: 'workingHours',
fn: '',
arg: ''
},
{
label: '检验信息',
2023-12-06 14:12:36 +08:00
key: 'isExaminationPdf',
2023-12-05 17:25:00 +08:00
fn: 'openPdf',
arg: 'examinationPdf'
},
{
label: '保险信息',
2023-12-06 14:12:36 +08:00
key: 'isInsurancePdf',
2023-12-05 17:25:00 +08:00
fn: 'openPdf',
arg: 'insurancePdf'
2023-12-04 17:42:11 +08:00
}
2023-12-05 17:25:00 +08:00
])
//
2023-12-05 20:50:06 +08:00
const dialogPhone = ref(false)
2023-12-05 17:25:00 +08:00
//装备详情数据
const pageData = ref({})
2023-12-05 20:50:06 +08:00
//我要租 弹窗
2023-12-05 17:25:00 +08:00
const dialoglease = ref(false)
//装备收藏状态
const isCollect = ref(false)
2023-12-06 14:12:36 +08:00
//推荐列表
const hotList = ref([])
2023-12-05 17:25:00 +08:00
//我要租 表单数据
const ruleForm = ref({
2023-12-06 15:57:08 +08:00
address: [],//进场地址
2023-12-05 20:50:06 +08:00
detailAddress: '',//详细地址
entryTime: '',//进场时间
duration: '',//工期时长
machinist: 0,//是否需要机手
2023-12-08 17:49:22 +08:00
invoiceType: '',//发票类型
2023-12-05 20:50:06 +08:00
projectDescription: ''//项目说明
2023-12-05 17:25:00 +08:00
})
const rules = reactive({
2023-12-05 20:50:06 +08:00
address: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入进场地址', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
detailAddress: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入详细地址', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
entryTime: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请选择进场时间', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
duration: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入工期时长', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
machinist: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入进场地址', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
invoiceType: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入进场地址', trigger: 'blur'}
],
2023-12-05 20:50:06 +08:00
projectDescription: [
2023-12-05 17:25:00 +08:00
{required: true, message: '请输入项目说明', trigger: 'blur'}
],
})
//打开我要租表单
const openLease = () => {
dialoglease.value = true
}
//切换收藏状态
2023-12-06 14:12:36 +08:00
const collectChange = async () => {
2023-12-05 17:25:00 +08:00
isCollect.value = !isCollect.value
2023-12-06 14:12:36 +08:00
const params = {
maId:pageData.value.maId,
isCollect:isCollect.value
}
const res = await equipCollect(params)
if(res.code == '200'){
ElMessage({
type:'success',
duration:1000,
message:`装备${isCollect.value ? '收藏' : '取消收藏'}成功`
})
}
2023-12-05 17:25:00 +08:00
}
2023-12-05 20:50:06 +08:00
//打开商家电话弹窗
const openPhone = () => {
dialogPhone.value = !dialogPhone.value
2023-12-06 14:12:36 +08:00
2023-12-05 20:50:06 +08:00
}
// 打开新标签页查看pdf
2023-12-05 17:25:00 +08:00
const openPdf = (name) => {
2023-12-06 14:12:36 +08:00
if(name){
window.open(name)
}
2023-12-05 17:25:00 +08:00
}
const that = {
openPdf
}
2023-12-08 17:49:22 +08:00
2023-12-06 14:12:36 +08:00
const addressCascader = {
lazy:true,
label:'name',
value:'id',
2023-12-08 17:49:22 +08:00
lazyLoad: async (node,resolve) =>{
const { level,data } = node
let nodes = []
if(level == 0){
const arr = await getAddressData()
nodes = arr
}else if(level == 1){
const arr = await getAddressData(data.code)
nodes = arr
}else if(level == 2){
const arr = await getAddressData(data.code)
nodes = arr.map((item) => ({
...item,
leaf:true
}))
}
resolve(nodes)
2023-12-06 14:12:36 +08:00
}
}
2023-12-08 17:49:22 +08:00
//获取地址列表
const getAddressData = async (code = '') => {
let params = {}
if(code){
params = { code }
}
const res = await apiGetAddressList(params)
return res.data || []
}
2023-12-05 20:50:06 +08:00
const handelDetailListClick = (fnName, arg) => {
if (fnName) {
2023-12-05 17:25:00 +08:00
that[fnName](arg)
}
}
//获取页面数据
const getData = async () => {
const res = await getDetail(pageParams.id)
res.data.isOperatorCn = res.data.isOperator ? '是' : '否'
2023-12-06 14:12:36 +08:00
res.data.isInsurancePdf = res.data.insurancePdf ? '点击查看' : '暂无'
res.data.isExaminationPdf = res.data.examinationPdf ? '点击查看' : '暂无'
2023-12-05 17:25:00 +08:00
isCollect.value = res.data.collectId ? true : false
pageData.value = res.data
}
2023-12-06 14:12:36 +08:00
//获取推荐列表
const gethotList = async () => {
const params = {
pageNum:1,
pageSize:3
}
const res = await getHotList(params)
hotList.value = res.rows
}
//获取详情数据
const goDetail = (val) => {
router.push({
path:`/equipDetail/${val.id}`
})
}
//提交申请
const submit = async() => {
console.log(ruleForm.value)
const params = {
2023-12-06 15:57:08 +08:00
addressId: ruleForm.value.address[2],
address: ruleForm.value.detailAddress,
realStartTime: ruleForm.value.entryTime,
duration: ruleForm.value.duration,
isMachinist: ruleForm.value.machinist,
2023-12-08 17:49:22 +08:00
invoiceType: ruleForm.value.invoiceType,
2023-12-06 15:57:08 +08:00
description: ruleForm.value.projectDescription
2023-12-06 14:12:36 +08:00
}
const res = await apiSubmitLease(params)
2023-12-06 15:57:08 +08:00
if(res.code == '200'){
ElMessage({
message:'提交租赁申请成功',
type:'success',
duration:1500
})
}
dialoglease.value = false
2023-12-06 14:12:36 +08:00
}
const init = async () => {
await gethotList()
await getData()
2023-12-05 17:25:00 +08:00
}
init()
2023-12-04 09:15:31 +08:00
</script>
<style scoped lang="scss">
2023-12-06 14:12:36 +08:00
:deep(.dialoglease){
margin: 10px auto 0 !important;
2023-12-08 17:49:22 +08:00
min-width: 855px !important;
2023-12-06 14:12:36 +08:00
}
:deep(.el-form-item){
2023-12-05 20:50:06 +08:00
display: flex;
width: 100%;
.el-form-item__content {
flex: 1;
}
2023-12-05 17:25:00 +08:00
}
.equipDetail {
2023-12-05 20:50:06 +08:00
user-select: none;
margin-top: 20px;
2023-12-05 17:25:00 +08:00
.top {
display: flex;
margin-bottom: 50px;
.showImg {
width: 38%;
border-radius: 15px;
overflow: hidden;
margin-right: 30px;
}
.baseInfo {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.equipInfo {
display: flex;
.left {
margin-right: 5px;
.title {
2023-12-04 09:15:31 +08:00
display: flex;
2023-12-05 17:25:00 +08:00
align-items: center;
.name {
font-size: 24px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #000000;
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
.tag {
display: flex;
align-items: center;
.item {
font-size: 13px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #005af2;
margin-left: 15px;
padding: 2px 10px;
border: 1px solid #005af2;
border-radius: 4px;
}
.otherItem {
border-color: #ff6734;
color: #ff6734;
}
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
2023-12-04 17:42:11 +08:00
2023-12-05 17:25:00 +08:00
.viewNnum {
font-size: 13px;
2023-12-04 17:42:11 +08:00
font-family: PingFangSC, PingFang SC;
2023-12-05 17:25:00 +08:00
font-weight: 500;
color: #bcbcbc;
margin-top: 10px;
}
2023-12-04 17:42:11 +08:00
2023-12-05 17:25:00 +08:00
.infoBox {
margin-top: 20px;
.item {
display: flex;
align-items: center;
margin-bottom: 18px;
.label {
font-size: 15px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #8e8e8e;
margin-right: 15px;
}
.value {
font-size: 14px;
font-family: PingFangSC, PingFang SC;
color: #333333;
}
}
}
}
.right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.collect {
user-select: none;
margin-top: 10px;
2023-12-04 17:42:11 +08:00
display: flex;
align-items: center;
2023-12-05 17:25:00 +08:00
justify-content: flex-end;
font-size: 14px;
color: #acacac;
cursor: pointer;
.no {
font-size: 16px;
2023-12-04 17:42:11 +08:00
}
2023-12-04 09:15:31 +08:00
2023-12-05 17:25:00 +08:00
.yes {
font-size: 20px;
color: #1b7eff;
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
2023-12-04 09:15:31 +08:00
2023-12-05 17:25:00 +08:00
.price {
font-size: 15px;
font-weight: 500;
font-family: PingFangSC, PingFang SC;
color: #ff4800;
text-align: right;
span {
font-size: 30px;
font-weight: 600;
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
.options {
display: flex;
justify-content: flex-end;
.item {
cursor: pointer;
width: 110px;
height: 40px;
line-height: 40px;
border-radius: 4px;
font-size: 18px;
font-weight: 600;
text-align: center;
}
.contact {
color: #ffffff;
background: #3cabff;
margin-right: 20px;
}
.applyFor {
border: 1px solid #3cabff;
color: #3cabff;
box-sizing: border-box;
line-height: 38px;
}
}
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
2023-12-04 09:15:31 +08:00
2023-12-05 17:25:00 +08:00
.businessInfo {
width: 100%;
height: 147px;
background: #f7f9fa;
border-radius: 15px;
position: relative;
box-sizing: border-box;
padding: 25px 15px;
.bgCar {
position: absolute;
top: 0;
right: 0;
height: 100%;
z-index: 0;
}
.business {
display: flex;
align-items: center;
.avatar {
width: 65px;
height: 65px;
border-radius: 100%;
margin-right: 10px;
}
.fonts {
.name {
font-size: 20px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #333333;
margin-bottom: 12px;
2023-12-04 17:42:11 +08:00
}
2023-12-04 09:15:31 +08:00
2023-12-05 17:25:00 +08:00
.other {
display: flex;
.item {
font-size: 14px;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #333333;
2023-12-04 17:42:11 +08:00
display: flex;
2023-12-05 17:25:00 +08:00
margin-right: 15px;
.label {
2023-12-04 17:42:11 +08:00
}
2023-12-05 17:25:00 +08:00
.value {
}
}
2023-12-04 17:42:11 +08:00
}
2023-12-05 17:25:00 +08:00
}
}
}
}
}
.publicTitle {
font-size: 20px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
color: #333333;
display: flex;
align-items: center;
justify-content: space-between;
}
.publicLine {
width: 100%;
height: 12px;
border-bottom: 1px solid #e0e0e0;
position: relative;
&:before {
content: '';
height: 3px;
width: 40px;
background: #2282ff;
border-radius: 2px;
position: absolute;
bottom: -1px;
left: 20px;
}
}
.publicContent {
box-sizing: border-box;
padding: 40px 70px 10px;
}
.detail {
.list {
display: flex;
flex-wrap: wrap;
.item {
cursor: pointer;
width: calc(100% / 3);
font-size: 16px;
font-family: PingFangSC, PingFang SC;
font-weight: 600;
display: flex;
margin-bottom: 35px;
.label {
color: #8e8e8e;
}
.value {
color: #333333;
}
.fnValue {
color: #0087cd;
}
}
}
}
.appearance {
margin-bottom: 20px;
.urlList {
img {
width: 100%;
}
}
}
.recommend {
.change {
font-size: 14px;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
color: #9d9d9d;
cursor: pointer;
}
.content {
margin-top: 20px;
width: 100%;
display: flex;
.item {
width: calc((100% - 40px) / 3);
&:nth-child(3n - 1) {
margin: 0 20px;
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
2023-12-04 09:15:31 +08:00
}
2023-12-05 17:25:00 +08:00
}
}
2023-12-04 09:15:31 +08:00
</style>