first commit

This commit is contained in:
ylj20011123 2025-08-21 18:29:29 +08:00
parent 41d431011b
commit 4d514a9008
12 changed files with 2797 additions and 1591 deletions

View File

@ -12,11 +12,11 @@
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
<view class="select">
<view class="content">
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME :
<view class="uni-input">{{ serviceInfo.SAName ? serviceInfo.SAName :
'请选择服务区' }}
</view>
<p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}
</p>
<!-- <p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}
</p> -->
<image class="rightArrow"
src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"></image>
</view>
@ -262,14 +262,15 @@ export default {
this.menu = uni.getMenuButtonBoundingClientRect()
let currentService = uni.getStorageSync('currentService')
this.serviceInfo = currentService
this.handleGetServerpartDetail(currentService.Serverpart_ID || currentService.SERVERPART_ID)
this.handleGetData(currentService.SERVERPART_NAME)
// this.handleGetServerpartDetail(currentService.Serverpart_ID || currentService.SERVERPART_ID)
this.handleGetData(currentService.SAName)
},
async onShow() {
let currentService = uni.getStorageSync('currentService')
if (currentService.Serverpart_ID !== this.serviceInfo.SERVERPART_ID && !this.isFirst) {
this.handleGetServerpartDetail(currentService.Serverpart_ID)
this.handleGetData(currentService.SERVERPART_NAME)
if (currentService.SACode !== this.serviceInfo.SACode && !this.isFirst) {
// this.handleGetServerpartDetail(currentService.Serverpart_ID)
this.serviceInfo = currentService
this.handleGetData(currentService.SAName)
}
this.isFirst = false
},
@ -283,7 +284,7 @@ export default {
retryLoad() {
if (this.retryCount < 3) {
this.retryCount++
this.handleGetData(this.serviceInfo.SERVERPART_NAME)
this.handleGetData(this.serviceInfo.SAName)
} else {
uni.showToast({
title: '多次重试失败,请检查网络连接',
@ -391,7 +392,7 @@ export default {
onCalendarConfirm(e) {
console.log('选择日期:', e)
this.selectDate = e.fulldate
this.handleGetData(this.serviceInfo.SERVERPART_NAME)
this.handleGetData(this.serviceInfo.SAName)
},
//
@ -518,7 +519,7 @@ export default {
this.selectDate = `${y}-${m}-${d}`;
this.retryCount = 0 //
await this.handleGetData(this.serviceInfo.SERVERPART_NAME)
await this.handleGetData(this.serviceInfo.SAName)
},
}
}

View File

@ -339,7 +339,7 @@ export default {
this.showList = []
const req = {
bsessionKey: "EA65F66FA29B47FD8072A4AFC66967B3",
saName: this.serviceInfo.SERVERPART_NAME
saName: this.serviceInfo.SAName
}
const data = await new Promise((resolve, reject) => {
uni.request({
@ -368,7 +368,7 @@ export default {
this.showList = []
const req = {
bsessionKey: "0DAF3A5982D54A619D4B63A34CA20C55",
saName: this.serviceInfo.SERVERPART_NAME
saName: this.serviceInfo.SAName
}
const data = await new Promise((resolve, reject) => {
uni.request({

View File

@ -11,11 +11,11 @@
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
<view class="select">
<view class="content">
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME :
<view class="uni-input">{{ serviceInfo.SAName ? serviceInfo.SAName :
'' }}
</view>
<p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}
</p>
<!-- <p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }} -->
<!-- </p> -->
<image class="rightArrow"
src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"></image>
</view>
@ -28,14 +28,13 @@
<!-- 服务区的信息 -->
<view class="serviceDetail" style="margin-top: 16rpx;">
<view class="detailTop">
<view class="serviceImg" v-if="serviceInfo.ImageLits && serviceInfo.ImageLits.length > 0">
<view class="serviceImg" v-if="serviceInfo.fileId && serviceInfo.fileId.length > 0">
<swiper scroll-x="true" circular="true" class="banner" indicator-dots="true"
indicator-active-color="#272625" autoplay interval="3000" :current="pageMsg.current"
style="width: 100%; height: 100%">
<swiper-item v-for="(img, i) in serviceInfo.ImageLits" :key="i"
style="width: 100%; height: 100%">
<swiper-item v-for="(img, i) in serviceInfo.fileId" :key="i" style="width: 100%; height: 100%">
<image style="width: 100%; height: 100%" mode="aspectFill" lazy-load="true"
:src="img || 'https://eshangtech.com/ShopICO/ahyd-BID/service/default.png'">
:src="img.fileID ? 'https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + img.fileID : 'https://eshangtech.com/ShopICO/ahyd-BID/service/default.png'">
</image>
</swiper-item>
</swiper>
@ -504,12 +503,15 @@ export default {
onLoad() {
this.menu = uni.getMenuButtonBoundingClientRect()
let currentService = uni.getStorageSync('currentService')
console.log('currentServicecurrentServicecurrentService', currentService);
// currentService
if (currentService && (currentService.Serverpart_ID || currentService.SERVERPART_ID)) {
this.handleGetServerpartDetail(currentService.Serverpart_ID || currentService.SERVERPART_ID)
this.handleGetCurrentServiceAttendanceData(currentService.SERVERPART_NAME)
this.handleGetEventsData(currentService.SERVERPART_NAME)
if (currentService && (currentService.SAName || currentService.SACode)) {
this.serviceInfo = {
...currentService,
}
this.handleGetCurrentServiceAttendanceData(currentService.SAName)
this.handleGetEventsData(currentService.SAName)
} else {
console.warn('onLoad: currentService 为空或无效')
//
@ -517,24 +519,28 @@ export default {
},
onShow() {
let currentService = uni.getStorageSync('currentService')
console.log('currentService', currentService);
console.log('onShowonShowonShowonShow', currentService);
// currentService
if (!currentService || (!currentService.Serverpart_ID && !currentService.SERVERPART_ID)) {
if (!currentService || (!currentService.SACode)) {
console.warn('currentService 为空或无效,跳过更新');
this.isFirst = false;
return;
}
// ID
const currentServiceId = currentService.Serverpart_ID || currentService.SERVERPART_ID;
const currentServiceName = currentService.SERVERPART_NAME;
const currentServiceId = currentService.SACode;
const currentServiceName = currentService.SAName;
//
if (currentServiceId && currentServiceId !== this.serviceInfo.SERVERPART_ID && !this.isFirst) {
if (currentServiceId && currentServiceId !== this.serviceInfo.SACode && !this.isFirst) {
console.log('111111', currentService);
this.emergencyListLength = 0
this.dailyListLength = 0
this.handleGetServerpartDetail(currentServiceId);
this.serviceInfo = {
...currentService,
}
// this.handleGetServerpartDetail(currentServiceId);
this.handleGetCurrentServiceAttendanceData(currentServiceName);
this.handleGetEventsData(currentServiceName)
} else {
@ -546,7 +552,7 @@ export default {
async handleGetEventsData(saName) {
const req = {
bsessionKey: "EA65F66FA29B47FD8072A4AFC66967B3",
saName: saName || this.serviceInfo.SERVERPART_NAME
saName: saName || this.serviceInfo.SAName
}
console.log('reqreq', req);
@ -568,7 +574,7 @@ export default {
const req2 = {
bsessionKey: "0DAF3A5982D54A619D4B63A34CA20C55",
saName: saName || this.serviceInfo.SERVERPART_NAME
saName: saName || this.serviceInfo.SAName
}
const data2 = await new Promise((resolve, reject) => {
uni.request({
@ -672,7 +678,7 @@ export default {
this.selectDate = `${year}-${month}-${day}`;
console.log('serviceInfo', this.serviceInfo);
await this.handleGetCurrentServiceAttendanceData(this.serviceInfo.SERVERPART_NAME)
await this.handleGetCurrentServiceAttendanceData(this.serviceInfo.SAName)
},
//
async handleGetServerpartDetail(id) {
@ -716,7 +722,7 @@ export default {
latitude: obj.latitude ? obj.latitude * 1 : obj.SERVERPART_Y * 1,
longitude: obj.longitude ? obj.longitude * 1 : obj.SERVERPART_X * 1,
scale: 16, //
name: obj.SERVERPART_NAME,
name: obj.SAName,
// address: "", //
success(data) {
},
@ -748,7 +754,7 @@ export default {
// this.selectDate = e.detail.value
this.selectDate = e.fulldate
await this.handleGetCurrentServiceAttendanceData(this.serviceInfo.SERVERPART_NAME)
await this.handleGetCurrentServiceAttendanceData(this.serviceInfo.SAName)
},
// tab
handleChangeTab(e) {

View File

@ -10,11 +10,11 @@
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
<view class="select">
<view class="content">
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME :
<view class="uni-input">{{ serviceInfo.SAName ? serviceInfo.SAName :
'' }}
</view>
<p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}
</p>
<!-- <p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}
</p> -->
<image class="rightArrow"
src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"></image>
</view>
@ -175,25 +175,25 @@ export default {
this.serviceInfo = currentService
this.handleGetNewMonthData()
//
this.loadRosterData(currentService.SERVERPART_NAME)
this.loadRosterData(currentService.SAName)
},
onShow() {
let currentService = uni.getStorageSync('currentService')
console.log('currentService', currentService);
// currentService
if (!currentService || (!currentService.Serverpart_ID && !currentService.SERVERPART_ID)) {
if (!currentService || (!currentService.SACode)) {
console.warn('currentService 为空或无效,跳过更新');
this.isFirst = false;
return;
}
// ID
const currentServiceId = currentService.Serverpart_ID || currentService.SERVERPART_ID;
const currentServiceName = currentService.SERVERPART_NAME;
const currentServiceId = currentService.SACode;
const currentServiceName = currentService.SAName;
//
if (currentServiceId && currentServiceId !== this.serviceInfo.SERVERPART_ID && !this.isFirst) {
if (currentServiceId && currentServiceId !== this.serviceInfo.SACode && !this.isFirst) {
this.serviceInfo = currentService
this.rosterData = []
this.userList = []
@ -213,7 +213,7 @@ export default {
retryLoad() {
if (this.retryCount < 3) {
this.retryCount++
this.loadRosterData(this.serviceInfo.SERVERPART_NAME)
this.loadRosterData(this.serviceInfo.SAName)
} else {
uni.showToast({
title: '多次重试失败,请检查网络连接',

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,11 @@
<template>
<view :style="showUnUpLoad ? 'overflow:hideen;height:100vh;':'height:100%;width:750rpx;'" class="page-body"
<view :style="showUnUpLoad ? 'overflow:hideen;height:100vh;' : 'height:100%;'" class="page-body"
scroll-with-animation v-if="showPage">
<div class="box-card" :style="'opacity:' + (1 - opacity) + ';'">
<div class="box-top-title">
<span class="box-center-title">{{ sMsg.serverpartname }}</span>
<picker mode="date" @change="bindDateChange" :value="theRequest&&theRequest.time" :start="startTime" :end="endTime"
class="title-clock">
<picker mode="date" @change="bindDateChange" :value="theRequest && theRequest.time" :start="startTime"
:end="endTime" class="title-clock">
<view>{{ searchDate }} <text class="uni-icon uni-icon-arrowdown"></text></view>
</picker>
@ -17,9 +17,11 @@
<div class="tab-unit" @tap="showPop">
<span>上传门店</span>
<span class="tab-unit-num"
:class="{'priceRed':sMsg.uploadCount!==sMsg.totalUploadCount}">{{sMsg.uploadCount}}</span>
:class="{ 'priceRed': sMsg.uploadCount !== sMsg.totalUploadCount }">{{ sMsg.uploadCount
}}</span>
<span class="tab-unit-num "
:class="{'more-btn':sMsg.uploadCount!==sMsg.totalUploadCount}">{{sMsg.totalUploadCount}}</span>
:class="{ 'more-btn': sMsg.uploadCount !== sMsg.totalUploadCount }">{{
sMsg.totalUploadCount }}</span>
</div>
</div>
<div class="uni-flex ai-base jc-between">
@ -72,7 +74,8 @@
</div>
</view>
</div>
<cover-view class="fixed-box page-title" :style="'transform: translateY('+fixedY+'px);opacity:'+opacity+';'">
<cover-view class="fixed-box page-title"
:style="'transform: translateY(' + fixedY + 'px);opacity:' + opacity + ';'">
<cover-view>{{ sMsg.serverpartname || '' }}</cover-view>
<cover-view class="price-text" style="width: 200rpx;text-align: right;">¥ {{ sMsg.totalMoneyShow }}
</cover-view>
@ -112,14 +115,21 @@
</div>
<div class="uni-flex jc-between">
<div style="color: #667ED5;">{{ operationModel[0].name }}: <span
style="font-size: 32rpx;">{{operationModel[0].bili}}</span>%</div>
<div style="color: #F3AF50;" v-if="operationModel[1].name">{{operationModel[1].name}}: <span
style="font-size: 32rpx;">{{operationModel[1].bili}}</span>%</div>
style="font-size: 32rpx;">{{
operationModel[0].bili }}</span>%</div>
<div style="color: #F3AF50;" v-if="operationModel[1].name">{{ operationModel[1].name }}:
<span style="font-size: 32rpx;">{{ operationModel[1].bili }}</span>%
</div>
</div>
<div class="uni-flex jc-between">
<div><span style="font-size: 32rpx;">{{operationModel[0].data}}</span></div>
<div v-if="operationModel[1].data"><span
style="font-size: 32rpx;">{{operationModel[1].data}}</span></div>
<div style="margin-bottom: 0;"><span style="font-size: 32rpx;">{{ operationModel[0].data
}}</span>
</div>
<div style="margin-bottom: 0;" v-if="operationModel[1].data"><span
style="font-size: 32rpx;">{{
operationModel[1].data
}}</span>
</div>
</div>
</div>
</div>
@ -130,7 +140,8 @@
:class="{ 'active': nowShop == i }" @click="selectCate(i)">{{ n.Bussiness_Name }}</div>
</scroll-view>
<div class="tab-content" v-if="cateBrandList.length">
<div class="shop-card" v-for="(m,i) in cateBrandList[nowShop].listBrandModel" :key="i" @click="toBrandPage(m,i)">
<div class="shop-card" v-for="(m, i) in cateBrandList[nowShop].listBrandModel" :key="i"
@click="toBrandPage(m, i)">
<div>
<image v-if="m.Brand_ICO" :src="m.Brand_ICO" mode="aspectFit"></image>
<image v-else src="/static/images/revenue/home.png" mode="aspectFit"></image>
@ -697,16 +708,17 @@
}
</script>
<style scoped>
<style lang="scss" scoped>
.page-body {
background-color: #fff;
padding-bottom: 20rpx;
background-color: #f8f9fa;
padding: 0 32rpx 32rpx;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
min-height: 100vh;
}
.mt8 {
margin-top: 16rpx;
margin-top: 20rpx;
}
cover-view.page-title {
@ -730,16 +742,18 @@
}
.fixed-box {
background-color: #686D8F;
/* background: linear-gradient(to right, #686D8F, #A1ACC6); */
transition: all .2s;
background: linear-gradient(135deg, #27B25F, #4CCC7F);
transition: all .3s ease;
position: fixed;
top: 0;
left: 0;
width: 100%;
left: 32rpx;
width: calc(100% - 64rpx);
z-index: 999;
box-sizing: border-box;
color: #fff;
box-shadow: 0 4rpx 20rpx rgba(39, 178, 95, 0.3);
backdrop-filter: blur(10rpx);
border-radius: 0 0 16rpx 16rpx;
}
/* 业态 */
@ -757,11 +771,12 @@
/* 门店 */
.shop-box {
margin: 32rpx 20rpx;
border-radius: 8rpx;
background-color: #F6F8FA;
padding: 36rpx 20rpx;
margin: 24rpx 0;
border-radius: 16rpx;
background-color: #fff;
padding: 32rpx 24rpx;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
border: 1rpx solid #f0f0f0;
}
.tab-shop {
@ -802,130 +817,187 @@
}
.pie-content {
margin: 0 30rpx;
border-radius: 12rpx;
box-shadow: 0 2rpx 10rpx 0 rgba(230, 230, 230, 0.49);
margin: 24rpx 0 32rpx;
border-radius: 16rpx;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
background-color: #fff;
position: relative;
margin-bottom: 48rpx;
padding-top: 32rpx;
padding-bottom: 30rpx;
padding: 32rpx 24rpx;
border: 1rpx solid #f0f0f0;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4rpx;
background: linear-gradient(90deg, #27B25F, #4CCC7F);
}
}
.pie-title {
padding: 0 20rpx;
line-height: 80rpx;
font-size: 26rpx;
padding: 0;
line-height: 1.5;
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 24rpx;
}
/* 门店卡片 */
.shop-card {
width: 210rpx;
height: 227rpx;
border-radius: 8rpx;
height: 240rpx;
border-radius: 16rpx;
color: #fff;
text-align: center;
padding-top: 20rpx;
padding: 24rpx 16rpx;
box-sizing: border-box;
margin-top: 16rpx;
margin-top: 20rpx;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
&:active {
transform: scale(0.98);
}
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0) 100%);
pointer-events: none;
}
}
.shop-card:nth-child(6n-5) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #ed7c77, #d6524c);
background-size: contain;
background: linear-gradient(135deg, #ff6b6b, #ee5a52);
}
.shop-card:nth-child(6n-4) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #d1bea8, #ba9d7b);
background: linear-gradient(135deg, #feca57, #ff9ff3);
margin-left: 18rpx;
background-size: contain;
}
.shop-card:nth-child(6n-3) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #929cc0, #aab3d0);
background: linear-gradient(135deg, #a8e6cf, #7fcdcd);
margin-left: 18rpx;
background-size: contain;
}
.shop-card:nth-child(6n-2) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #779cb1, #a3bbc9);
background-size: contain;
background: linear-gradient(135deg, #74b9ff, #0984e3);
margin-left: 0rpx;
}
.shop-card:nth-child(6n-1) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #c08d80, #e8cbc7);
background: linear-gradient(135deg, #fd79a8, #e84393);
margin-left: 18rpx;
background-size: contain;
}
.shop-card:nth-child(6n) {
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/shop-card.png') no-repeat center 50%, linear-gradient(-35deg, #5cbe9c, #95d5bf);
margin-left: 18rpx;
background-size: contain;
background: linear-gradient(135deg, #27B25F, #4CCC7F);
margin-left: 18rpx;
}
.shop-card .shop-name {
font-size: 24rpx;
text-shadow: 0 2rpx 2rpx #A9a5a0;
font-size: 26rpx;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
line-height: 1.4;
max-height: 62rpx;
max-height: 64rpx;
overflow: hidden;
font-weight: 500;
margin: 12rpx 0;
}
.shop-card image {
border-radius: 50%;
border: 2rpx solid #fff;
border: 3rpx solid rgba(255, 255, 255, 0.9);
background-color: #FFFFFF;
width: 62rpx;
height: 62rpx;
width: 64rpx;
height: 64rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.2);
}
.shop-card .price-num {
font-size: 38rpx;
font-family: Bahnschrift Regular;
font-size: 36rpx;
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
font-weight: 700;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
margin-top: auto;
}
.box-card {
padding: 24upx 24upx 0;
padding: 32rpx 24rpx 0;
background-color: #fff;
width: 100%;
box-sizing: border-box;
transition: all .2s;
background: url('https://eshangtech.com/ShopICO/ahyd-BID/effective/bg-top.png') no-repeat center;
background-size: contain;
background-repeat: no-repeat;
background-position: top center;
transition: all .3s ease;
margin: 0 0 24rpx;
border-radius: 16rpx;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 8rpx;
background: linear-gradient(90deg, #27B25F, #4CCC7F);
}
}
.top-card {
background: linear-gradient(to top, #989fb9, #686d8f);
margin-top: 24upx;
padding: 32upx 0 32rpx 0;
border-radius: 8rpx;
background: linear-gradient(135deg, #27B25F 0%, #4CCC7F 100%);
margin-top: 32rpx;
padding: 40rpx 0;
border-radius: 16rpx;
position: relative;
box-shadow: 0 8rpx 24rpx rgba(39, 178, 95, 0.2);
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle cx="90" cy="10" r="2" fill="white" opacity="0.3"/><circle cx="80" cy="20" r="1" fill="white" opacity="0.2"/><circle cx="70" cy="5" r="1.5" fill="white" opacity="0.4"/></svg>') repeat;
pointer-events: none;
}
}
.budgetamount {
margin-left: 14rpx;
color: #fff;
font-family: 'Bahnschrift Regular';
margin-left: 16rpx;
color: rgba(255, 255, 255, 0.9);
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
font-weight: 500;
}
.budget-title {
color: #DEE1F1;
padding: 4rpx 6rpx 2rpx 6rpx;
border-radius: 2rpx;
margin-right: 4rpx;
color: rgba(255, 255, 255, 0.8);
padding: 6rpx 12rpx;
border-radius: 12rpx;
margin-right: 8rpx;
background: rgba(255, 255, 255, 0.1);
font-size: 22rpx;
}
.up-text-title,
.down-text-title {
font-size: 32rpx;
font-family: 'Bahnschrift Regular';
/* line-height: 1.2; */
font-size: 34rpx;
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
font-weight: 600;
line-height: 1.3;
}
.up-text-title:after {
@ -954,12 +1026,17 @@
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8rpx;
}
.title-clock {
color: #999;
font-size: 24upx;
color: #666;
font-size: 26rpx;
text-align: right;
padding: 8rpx 16rpx;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 20rpx;
border: 1rpx solid #e5e5e5;
}
/*
@ -981,13 +1058,14 @@
}
.box-center-title {
font-size: 24upx;
color: #010101;
border-radius: 24upx;
padding: 0 16upx;
background-color: #DEDEDE;
font-size: 28rpx;
color: #fff;
border-radius: 24rpx;
padding: 8rpx 20rpx;
background: linear-gradient(90deg, #27B25F, #4CCC7F);
text-align: center;
font-weight: 400;
box-shadow: 0 4rpx 12rpx rgba(39, 178, 95, 0.3);
}
.uni-icon-arrowdown {
@ -1005,40 +1083,46 @@
}
.center-num {
font-size: 64rpx;
font-size: 40rpx;
color: #fff;
font-family: Bahnschrift Regular;
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
font-weight: 700;
text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2);
letter-spacing: 2rpx;
}
.check-unit,
.budgetamount {
font-size: 24rpx;
color: #DEE1F1;
font-size: 26rpx;
color: rgba(255, 255, 255, 0.9);
text-align: center;
line-height: 1.4;
}
.main-amount-title {
color: #DEE1F1;
font-size: 24rpx;
/* flex: 1; */
color: rgba(255, 255, 255, 0.9);
font-size: 26rpx;
font-weight: 500;
}
.tab-unit {
background-color: #3A3E5B;
border-radius: 24rpx 0 0 24rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 20rpx;
color: #fff;
font-size: 24rpx;
position: relative;
right: -12px;
padding: 0 20rpx;
font-size: 26rpx;
padding: 8rpx 16rpx;
font-weight: 500;
backdrop-filter: blur(10rpx);
border: 1rpx solid rgba(255, 255, 255, 0.3);
}
.check-price-color {
color: #fff;
font-size: 34rpx;
font-family: Bahnschrift Regular;
line-height: 1.2;
font-size: 38rpx;
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
line-height: 1.3;
font-weight: 600;
margin-top: 8rpx;
}
.check-price-color text {
@ -1096,69 +1180,81 @@
}
.uni-popup-middle {
/* overflow: hidden; */
display: flex;
flex-direction: column;
align-items: center;
min-width: 400upx;
min-height: 400upx;
border-radius: 16upx;
min-width: 500rpx;
min-height: 400rpx;
border-radius: 20rpx;
top: 30%;
left: 50%;
transform: translate(-50%, -20%);
justify-content: flex-start;
padding: 0 30upx 30upx 30upx;
padding: 0 32rpx 32rpx;
box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.3);
border: 1rpx solid rgba(255, 255, 255, 0.2);
}
.header-top {
font-size: 30rpx;
font-weight: 600;
font-size: 32rpx;
font-weight: 700;
color: #333;
text-align: left;
width: 100%;
padding: 32rpx 0;
padding: 32rpx 0 24rpx;
background-color: #fff;
position: relative;
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2rpx;
background: linear-gradient(90deg, #27B25F, #4CCC7F);
}
}
.pop-body {
width: 600rpx;
max-height: 600rpx;
width: 100%;
max-height: 500rpx;
overflow-y: auto;
background-color: #fff;
padding-bottom: 8rpx;
padding-bottom: 16rpx;
border-radius: 8rpx;
}
.pop-row {
padding: 24rpx 10rpx 24rpx 0;
font-size: 24rpx;
padding: 20rpx 0;
font-size: 26rpx;
align-items: center;
justify-content: space-between;
justify-content: flex-start;
box-sizing: border-box;
position: relative;
color: #333;
}
.pop-row .pop-row-bottom {
position: absolute;
height: 2rpx;
height: 1rpx;
width: 100%;
background-color: #efefef;
background: linear-gradient(90deg, transparent 0%, #e5e5e5 50%, transparent 100%);
bottom: 0;
left: 0;
}
.pop-index {
color: #DF7F42;
border: 1rpx solid #DF7F42;
border-radius: 8rpx;
padding: 2rpx 12rpx 0 12rpx;
margin-right: 12rpx;
font-size: 24rpx;
line-height: 30rpx;
height: 30rpx;
display: inline-block;
vertical-align: middle;
color: #fff;
background: linear-gradient(135deg, #27B25F, #4CCC7F);
border-radius: 12rpx;
padding: 4rpx 12rpx;
margin-right: 16rpx;
font-size: 22rpx;
font-weight: 600;
min-width: 48rpx;
text-align: center;
box-shadow: 0 2rpx 8rpx rgba(39, 178, 95, 0.3);
}
/* .customer-title {
@ -1185,53 +1281,73 @@
}
.analysis-tabs {
margin: 24rpx auto;
width: 708rpx;
margin: 24rpx 0;
overflow: hidden;
/* color: #777777; */
border: 1rpx solid #647bd1;
border-radius: 39rpx;
background-color: #fff;
border-radius: 12rpx;
display: flex;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
border: 1rpx solid #f0f0f0;
}
.tab {
text-align: center;
flex: 1;
height: 76rpx;
line-height: 76rpx;
height: 80rpx;
line-height: 80rpx;
font-size: 28rpx;
color: #666;
transition: all 0.3s ease;
font-weight: 500;
position: relative;
}
.tab.active {
background: #f2f4f9;
color: #647BD1;
background: linear-gradient(135deg, #27B25F, #4CCC7F);
color: #fff;
font-weight: 600;
box-shadow: 0 4rpx 12rpx rgba(39, 178, 95, 0.3);
border-radius: 8rpx;
margin: 4rpx;
height: 72rpx;
line-height: 72rpx;
}
//
.model-busniess {
margin: 12rpx 30rpx;
font-family: 'Bahnschrift Regular';
font-family: 'DIN Alternate', 'Bahnschrift', sans-serif;
padding: 24rpx 24rpx 0;
background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
border-radius: 12rpx;
border: 1rpx solid #f0f0f0;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
}
.model-busniess view {
font-size: 26rpx;
font-size: 28rpx;
font-weight: 600;
color: #333;
margin-bottom: 16rpx;
}
.model-busniess .progress-content {
width: 100%;
height: 28rpx;
border-radius: 2rpx;
height: 12rpx;
border-radius: 6rpx;
display: flex;
justify-content: space-between;
margin-top: 30rpx;
margin-bottom: 4rpx;
margin: 20rpx 0 16rpx;
overflow: hidden;
box-shadow: inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
}
.model-busniess .progress-left {
background-color: #667ED5;
background: linear-gradient(90deg, #27B25F, #4CCC7F);
border-radius: 6rpx 0 0 6rpx;
}
.model-busniess .progress-right {
background-color: #F3AF50;
background: linear-gradient(90deg, #ff9f43, #ffb84d);
border-radius: 0 6rpx 6rpx 0;
}
</style>

View File

@ -12,12 +12,13 @@
<div class="ranking-list" v-for="(item, index) in wechatPushSalesList[nowRank]" :key="index">
<div class="rank-index">{{ item.RANK_ID || item.Rank_ID }}</div>
<div class="ranking-list-unit">
<div>{{item.COMMODITY_NAME || item.Commodity_Name}}</div>
<div style="font-size: 24rpx;">{{ item.COMMODITY_NAME || item.Commodity_Name }}</div>
<div class="ranking-unit-info">
<text>销售金额 </text>
<text>¥{{$util.fmoney(item.TOTALPRICE || item.TotalPrice)}}</text>
<text>销售数量 </text>
<text>{{item.SELLCOUNT || item.SellCount}}</text>
<text style="font-size: 24rpx;">销售金额 </text>
<text style="font-size: 28rpx;font-weight: 600;">¥{{ $util.fmoney(item.TOTALPRICE ||
item.TotalPrice) }}</text>
<text style="font-size: 24rpx;">销售数量 </text>
<text style="font-size: 28rpx;font-weight: 600;">{{ item.SELLCOUNT || item.SellCount }}</text>
</div>
</div>
</div>
@ -114,7 +115,7 @@
}
.ranking-content .ranking-list-unit {
font-size: 28rpx;
font-size: 24rpx;
flex: 1;
}

View File

@ -407,7 +407,7 @@ export default {
color: #bed4f4;
/* color: #FAD5D2; */
font-size: 30rpx;
font-size: 28rpx;
}
.head-cost-text .date-tag {
@ -549,7 +549,7 @@ export default {
.revenue-card-cont {
border-radius: 12rpx;
margin: 38rpx 20rpx 0 20rpx;
margin: 38rpx 32rpx 0 32rpx;
overflow: hidden;
box-shadow: 1rpx 2rpx 8rpx 0px rgba(224, 224, 224, 0.4);
background: linear-gradient(to top, #ffffff 0%, #ffffff 51%, #e5e9fc 100%);
@ -559,7 +559,7 @@ export default {
.revenue-card-title {
font-weight: 500;
text-align: left;
font-size: 30rpx;
font-size: 28rpx;
}
.center-amount,

View File

@ -356,6 +356,7 @@ export default {
latitude: res.latitude,
longitude: res.longitude,
};
uni.setStorageSync("seatInfo", JSON.stringify(seatInfo));
_this.handleGetNearService(seatInfo.latitude, seatInfo.longitude)
},
@ -410,6 +411,23 @@ export default {
_this.monthDataCache = {};
_this.loadingMap = {};
_this.handleGetOnLoad();
//
uni.getLocation({
type: "gcj02",
altitude: true,
success: (res) => {
let seatInfo = {
latitude: res.latitude,
longitude: res.longitude,
};
uni.setStorageSync("seatInfo", JSON.stringify(seatInfo));
_this.handleGetNearService(seatInfo.latitude, seatInfo.longitude)
},
fail: (err) => {
},
});
}
uni.stopPullDownRefresh();
},
@ -799,20 +817,88 @@ export default {
},
//
async handleGetNearService(latitude, longitude) {
let req = {
Province_Code: "530000",
longitude: latitude,
latitude: longitude,
ShowService: true,
PageIndex: 1,
PageSize: 1
}
const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
console.log('sdjkajdas', data);
let list = data.Result_Data.List
uni.setStorageSync('currentService', list[0]);
},
// let req = {
// Province_Code: "530000",
// longitude: latitude,
// latitude: longitude,
// ShowService: true,
// PageIndex: 1,
// PageSize: 1
// }
// const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
// console.log('sdjkajdas', data);
// let list = data.Result_Data.List
// //
// // uni.setStorageSync('currentService', list[0]);
// let nearObj = list[0]
// console.log('nearObjnearObjnearObj', nearObj);
let YNList = await this.handleGetYNServiceList()
console.log('YNListYNList', YNList);
if (YNList && YNList.length > 0) {
let nearList = []
YNList.forEach((item) => {
let obj = JSON.parse(JSON.stringify(item))
obj.SERVERPART_DISTANCE = this.haversineDistance({ lat: latitude, lng: longitude }, { lat: obj.latitude, lng: obj.longitude })
obj.fileId = obj.fileId ? JSON.parse(obj.fileId) : []
obj.businessModel = obj.businessModel ? JSON.parse(obj.businessModel) : []
nearList.push(obj)
})
nearList = nearList.sort((a, b) => {
const da = parseFloat(a.SERVERPART_DISTANCE) || 0;
const db = parseFloat(b.SERVERPART_DISTANCE) || 0;
return da - db;
});
uni.setStorageSync('currentService', nearList[0]);
//
uni.setStorageSync('ServerpartList', nearList)
}
},
//
haversineDistance({ lat: lat1, lng: lon1 }, { lat: lat2, lng: lon2 }) {
const toRad = (d) => d * Math.PI / 180;
const R = 6378137; // () WGS84
const φ1 = toRad(lat1);
const φ2 = toRad(lat2);
const Δφ = toRad(lat2 - lat1);
const Δλ = toRad(lon2 - lon1);
const a = Math.sin(Δφ / 2) ** 2 +
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) ** 2;
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distanceMeters = R * c;
return (distanceMeters / 1000).toFixed(2); // km
},
//
async handleGetYNServiceList() {
let req = {
bsessionKey: "46BC6D5E069411B39C215C8A3B474B31",
pageNum: 1,
pageSize: 500
}
const data = await new Promise((resolve, reject) => {
uni.request({
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/getSaMsgAll",
method: "POST",
data: req,
header: {
"content-type": "application/x-www-form-urlencoded",
},
success(res) {
resolve(res.data.data)
},
});
});
//
// let YNList = data.data
return data.data
},
// uniapp
getCurrentMonthText(index) {
if (this.selectIndex === index && this.monthList[index]) {

View File

@ -28,8 +28,9 @@
@click="handleGoDetail(item.SERVERPART_ID, item)">
<div class="topItem">
<view class="leftItem">
<p class="title">{{ item.SERVERPART_NAME }}</p>
<view class="typeBox">{{ serviceTypeObj[item.SERVERPART_TYPE] }}</view>
<!-- <p class="title">{{ item.SERVERPART_NAME }}</p> -->
<p class="title">{{ item.SAName }}</p>
<!-- <view class="typeBox">{{ serviceTypeObj[item.SERVERPART_TYPE] }}</view> -->
</view>
<div class="box">
<div class="imgBox">
@ -43,7 +44,7 @@
<p class="distance">距您 <text class="number">{{ item.SERVERPART_DISTANCE }}</text> km</p>
<div class="info">
<image class="infoIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/address.svg"></image>
<p class="address">{{ item.SERVERPART_ADDRESS }}</p>
<p class="address">{{ item.belongArea }}-{{ item.belongRegion }}-{{ item.belongLine }}</p>
</div>
<div class="info" v-if="item.STARTDATE">
<image class="infoIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/time.svg"></image>
@ -96,7 +97,8 @@ export default {
type: '',//
serviceTypeObj: {},
serviceMessage: {},//
seatInfo: {}
seatInfo: {},
allServiceList: []
}
},
onLoad(option) {
@ -204,10 +206,10 @@ export default {
handleGomap(item) {
let obj = item;
uni.openLocation({
latitude: obj.latitude ? obj.latitude * 1 : obj.SERVERPART_Y * 1,
longitude: obj.longitude ? obj.longitude * 1 : obj.SERVERPART_X * 1,
latitude: obj.latitude * 1,
longitude: obj.longitude * 1,
scale: 16, //
name: obj.SERVERPART_NAME,
name: obj.SAName,
// address: "", //
success(data) {
},
@ -313,34 +315,47 @@ export default {
},
//
async handleSearch() {
let req = {
longitude: this.longitude,
Province_Code: '530000',
latitude: this.latitude,
Serverpart_Name: this.searchText
if (this.searchText) {
let res = []
if (this.allServiceList && this.allServiceList.length > 0) {
this.allServiceList.forEach((item) => {
if (item.SAName.indexOf(this.searchText) !== -1) {
res.push(item)
}
const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
this.serviceList = data.Result_Data.List
})
}
this.serviceList = res
} else {
this.serviceList = JSON.parse(JSON.stringify(this.allServiceList))
}
// let req = {
// longitude: this.longitude,
// Province_Code: '530000',
// latitude: this.latitude,
// Serverpart_Name: this.searchText
// }
// const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
// this.serviceList = data.Result_Data.List
},
//
handleGoDetail(id, item) {
let res = {
SERVERPART_NAME: item.SERVERPART_NAME,//
SPREGIONTYPE_NAME: item.SPREGIONTYPE_NAME,//
Serverpart_ID: item.SERVERPART_ID,
SPRegionType_ID: item.SPREGIONTYPE_ID,
longitude: item.SERVERPART_X,
latitude: item.SERVERPART_Y,
...item,
// SERVERPART_NAME: item.SAName,//
// SPREGIONTYPE_NAME: item.belongArea,//
// Serverpart_ID: "",
// SPRegionType_ID: "",
// longitude: item.longitude,
// latitude: item.latitude,
}
uni.setStorageSync('currentService', res) //
uni.setStorageSync('currentService', res)
let pageList = getCurrentPages()
if (this.type === 'index') {
this.$util.toNextRoute('navigateTo', `/pages/summaryOfPortraits/index?index=0`)
} else if (this.type === 'springTravel') {
uni.setStorageSync('springService', res) //
uni.navigateBack({
delta: 1
})
} else if (this.type === 'attendanceStatus') {
uni.navigateBack({
delta: 1
@ -358,22 +373,120 @@ export default {
}
}
}
// let res = {
// SERVERPART_NAME: item.SERVERPART_NAME,//
// SPREGIONTYPE_NAME: item.SPREGIONTYPE_NAME,//
// Serverpart_ID: item.SERVERPART_ID,
// SPRegionType_ID: item.SPREGIONTYPE_ID,
// longitude: item.SERVERPART_X,
// latitude: item.SERVERPART_Y,
// }
// uni.setStorageSync('currentService', res) //
// let pageList = getCurrentPages()
// if (this.type === 'index') {
// this.$util.toNextRoute('navigateTo', `/pages/summaryOfPortraits/index?index=0`)
// } else if (this.type === 'springTravel') {
// uni.setStorageSync('springService', res) //
// uni.navigateBack({
// delta: 1
// })
// } else if (this.type === 'attendanceStatus') {
// uni.navigateBack({
// delta: 1
// })
// } else {
// if (this.chartType) {
// uni.navigateBack({
// delta: 1
// })
// } else {
// if (pageList.length > 2) {
// uni.navigateBack({
// delta: 1
// })
// }
// }
// }
},
async getListData() {
let user = uni.getStorageSync('seatInfo')
let req = {
Province_Code: '530000',
Serverpart_ID: '',
longitude: this.seatInfo.longitude,
latitude: this.seatInfo.latitude
bsessionKey: "46BC6D5E069411B39C215C8A3B474B31",
pageNum: 1,
pageSize: 500
}
console.log('req', req)
// const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
const data = await request.$webJavaGet('third-party/getServerPartList', req)
console.log('datadatadatadata', data);
const data = await new Promise((resolve, reject) => {
uni.request({
url: "https://fwqznxj.yciccloud.com:9081/ynjt/pushManage/getSaMsgAll",
method: "POST",
data: req,
header: {
"content-type": "application/x-www-form-urlencoded",
},
success(res) {
resolve(res.data.data)
},
});
});
this.serviceList = data.Result_Data.List
//
let YNList = data.data
if (YNList && YNList.length > 0) {
YNList.forEach((item, index) => {
item.SERVERPART_DISTANCE = this.haversineDistance({ lat: this.seatInfo.latitude, lng: this.seatInfo.longitude }, { lat: item.latitude, lng: item.longitude })
item.fileId = item.fileId ? JSON.parse(item.fileId) : []
item.businessModel = item.businessModel ? JSON.parse(item.businessModel) : []
// fileId: obj.fileId ? JSON.parse(obj.fileId) : [],
// businessModel: obj.businessModel ? JSON.parse(obj.businessModel) : [],
})
uni.setStorageSync('YNList', YNList)
this.serviceList = YNList
this.allServiceList = YNList
}
// let serverpartList = uni.getStorageSync('ServerpartList')
// console.log('serverpartListserverpartListserverpartList', serverpartList);
// // serverpartList
// let list = []
// if (serverpartList && serverpartList.length > 0) {
// list = serverpartList
// } else {
// let req = {
// Province_Code: "530000",
// ShowService: true,
// longitude: this.seatInfo.longitude,
// latitude: this.seatInfo.latitude,
// PageIndex: 1,
// PageSize: 300
// }
// console.log('req', req)
// const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList', req)
// // const data = await request.$webJavaGet('third-party/getServerPartList', req)
// console.log('datadatadatadata', data);
// list = data.Result_Data.List
// uni.setStorageSync('ServerpartList', list)
// }
// if (list && list.length > 0) {
// }
// console.log('this.serviceListthis.serviceListthis.serviceList', this.serviceList);
},
//
haversineDistance({ lat: lat1, lng: lon1 }, { lat: lat2, lng: lon2 }) {
const toRad = (d) => d * Math.PI / 180;
const R = 6378137; // () WGS84
const φ1 = toRad(lat1);
const φ2 = toRad(lat2);
const Δφ = toRad(lat2 - lat1);
const Δλ = toRad(lon2 - lon1);
const a = Math.sin(Δφ / 2) ** 2 +
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) ** 2;
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distanceMeters = R * c;
return (distanceMeters / 1000).toFixed(2); // km
},
//
handleChangeUp() {

View File

@ -4,11 +4,12 @@
<!-- 服务区的信息 -->
<view class="serviceDetail" style="margin-top: 16rpx;">
<view class="detailTop">
<view class="serviceImg" v-if="topBg && topBg.length > 0">
<view class="serviceImg" v-if="info.fileId && info.fileId.length > 0">
<swiper scroll-x="true" circular="true" class="banner" indicator-dots="true" indicator-active-color="#272625"
autoplay interval="3000" style="width: 100%; height: 100%">
<swiper-item v-for="(img, i) in topBg" :key="i" style="width: 100%; height: 100%">
<image style="width: 100%; height: 100%" mode="aspectFill" lazy-load="true" :src="img"
<swiper-item v-for="(img, i) in info.fileId" :key="i" style="width: 100%; height: 100%">
<image style="width: 100%; height: 100%" mode="aspectFill" lazy-load="true"
:src="'https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + img.fileID"
@click="handlePreview"></image>
</swiper-item>
</swiper>
@ -19,20 +20,15 @@
<view class="detailBottom">
<view class="detailFirst">
<text class="serviceName">{{
info.SERVERPART_NAME || ""
info.SAName || ""
}}</text>
<text class="serviceStatus">营业中</text>
</view>
<view class="detailSecond">
<image class="detailFixedIcon" src="/static/images/home/address.png" />
<text class="address">
<text class="distance">{{
info.SERVERPART_DISTANCE === 0
? 0
: info.SERVERPART_DISTANCE || "-"
}}km</text>
<text class="addressText">{{ info.ServerpartInfo.SERVERPART_ADDRESS || "-"
}}{{ info.ServerpartInfo.EXPRESSWAY_NAME || "-" }}</text>
<text class="distance">{{ info.SERVERPART_DISTANCE || "-" }}km</text>
<text class="addressText">{{ info.belongRegion || "-" }}{{ info.belongLine || "-" }}</text>
</text>
</view>
<view class="navigationBox" @click="handleGoMap">
@ -42,7 +38,8 @@
</view>
<!-- 主要内容区域 -->
<scroll-view scroll-y="true" class="content-scroll" :style="{ height: `calc(100vh - ${(menu.bottom + 14)}px - 560rpx ) ` }">
<scroll-view scroll-y="true" class="content-scroll"
:style="{ height: `calc(100vh - ${(menu.bottom + 14)}px - 560rpx ) ` }">
<view class="content-container">
<!-- 基本信息卡片 -->
@ -52,28 +49,34 @@
</view>
<view class="info-grid">
<!-- <view class="info-item">
<text class="info-label">服务区编码</text>
<text class="info-value">{{ info.SACode || '-' }}</text>
</view> -->
<view class="info-item">
<text class="info-label">取水方式</text>
<text class="info-value">{{ getWaterIntakeType(info.ServerpartInfo &&
info.ServerpartInfo.WATERINTAKE_TYPE) }}</text>
<text class="info-label">所属片区</text>
<text class="info-value">{{ info.belongArea || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">污水处理</text>
<text class="info-value">{{ getSewageType(info.ServerpartInfo && info.ServerpartInfo.SEWAGEDISPOSAL_TYPE)
}}</text>
<text class="info-label">所在线路</text>
<text class="info-value">{{ info.belongLine || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">所在地区</text>
<text class="info-value">{{ (info.ServerpartInfo && info.ServerpartInfo.SERVERPART_ADDRESS) || '-'
}}</text>
<text class="info-value">{{ info.belongRegion || '-' }}</text>
</view>
<!-- <view class="info-item">
<text class="info-label">桩号位置</text>
<text class="info-value">{{ info.pileNumLocation || '-' }}</text>
</view> -->
<view class="info-item">
<text class="info-label">经营模式</text>
<text class="info-value">{{ info.businessModel && info.businessModel.length > 0 ?
info.businessModel.toString() : '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">管理单位</text>
<text class="info-value">{{ (info.ServerpartInfo && info.ServerpartInfo.MANAGERCOMPANY) || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">产权单位</text>
<text class="info-value">{{ (info.ServerpartInfo && info.ServerpartInfo.OWNEDCOMPANY) || '-' }}</text>
<text class="info-label">产权归属</text>
<text class="info-value">{{ info.propertyOwnership || '-' }}</text>
</view>
</view>
</view>
@ -86,31 +89,31 @@
<view class="area-stats">
<view class="stat-item">
<text class="stat-number">{{ formatArea(info.ServerpartInfo && info.ServerpartInfo.FLOORAREA) }}</text>
<text class="stat-number">{{ formatArea(info.floorArea) }}</text>
<text class="stat-label">占地面积</text>
<text class="stat-unit"></text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-number">{{ formatArea(info.ServerpartInfo && info.ServerpartInfo.SHAREAREA) }}</text>
<text class="stat-number">{{ formatArea(info.parkArea) }}</text>
<text class="stat-label">停车场面积</text>
<text class="stat-unit"></text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-number">{{ formatArea(info.ServerpartInfo && info.ServerpartInfo.SERVERPART_AREA)
}}</text>
<text class="stat-label">建筑面积</text>
<text class="stat-number">{{ formatArea((info.synthesisCatering || 0) + (info.supermarket || 0) +
(info.synthesiOther || 0)) }}</text>
<text class="stat-label">综合楼面积</text>
<text class="stat-unit"></text>
</view>
</view>
</view>
<!-- 服务详情卡片 -->
<view class="service-card" v-for="(region, regionIndex) in info.RegionInfo" :key="regionIndex">
<view class="service-header">
<text class="service-title">🏢 {{ region.SERVERPART_REGIONNAME || '服务区域' }}</text>
</view>
<view class="service-card">
<!-- <view class="service-header">
<text class="service-title">🏢 {{ info.SAName || '服务区域' }}</text>
</view> -->
<!-- 服务信息 -->
<view class="service-section">
@ -121,42 +124,45 @@
<view class="service-grid">
<view class="service-row">
<view class="service-item" :class="{ 'available': region.HASPANTRY, 'unavailable': !region.HASPANTRY }">
<view class="service-item"
:class="{ 'available': info.manToiletNum > 0, 'unavailable': !info.manToiletNum }">
<image class="service-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/manWc.svg" />
<text class="service-name">男厕</text>
<text class="service-count" v-if="region.HASPANTRY">({{ region.HASPANTRY }})</text>
<text class="service-count" v-if="info.manToiletNum">({{ info.manToiletNum }})</text>
</view>
<view class="service-item" :class="{ 'available': region.HASWIFI, 'unavailable': !region.HASWIFI }">
<view class="service-item"
:class="{ 'available': info.womanToiletNum > 0, 'unavailable': !info.womanToiletNum }">
<image class="service-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/womanWc.svg" />
<text class="service-name">女厕</text>
<text class="service-count" v-if="region.HASWIFI">({{ region.HASWIFI }})</text>
<text class="service-count" v-if="info.womanToiletNum">({{ info.womanToiletNum }})</text>
</view>
</view>
<view class="service-row">
<view class="service-item"
:class="{ 'available': region.HASTHIRDTOILETS, 'unavailable': !region.HASTHIRDTOILETS }">
:class="{ 'available': info.otherWCNum > 0, 'unavailable': !info.otherWCNum }">
<text class="service-name">第三卫生间</text>
<text class="service-count" v-if="info.otherWCNum">({{ info.otherWCNum }})</text>
</view>
<view class="service-item"
:class="{ 'available': region.TOILETCOUNT, 'unavailable': !region.TOILETCOUNT }">
<text class="service-name">潮汐厕位</text>
<text class="service-count" v-if="region.TOILETCOUNT">({{ region.TOILETCOUNT }})</text>
:class="{ 'available': info.babyCareRoomNum > 0, 'unavailable': !info.babyCareRoomNum }">
<text class="service-name">母婴室</text>
<text class="service-count" v-if="info.babyCareRoomNum">({{ info.babyCareRoomNum }})</text>
</view>
</view>
<view class="service-row">
<view class="service-item" :class="{ 'available': info.faucetNum > 0, 'unavailable': !info.faucetNum }">
<text class="service-name">水龙头</text>
<text class="service-count" v-if="info.faucetNum">({{ info.faucetNum }})</text>
</view>
<view class="service-item"
:class="{ 'available': info.repairStationArea > 0, 'unavailable': !info.repairStationArea }">
<text class="service-name">汽修站</text>
</view>
</view>
<view class="service-row">
<view class="service-item"
:class="{ 'available': region.HASWATERROOM, 'unavailable': !region.HASWATERROOM }">
<text class="service-name">开水器</text>
<text class="service-count" v-if="region.HASWATERROOM">({{ region.HASWATERROOM }})</text>
</view>
<view class="service-item" :class="{ 'available': region.HASCHILD, 'unavailable': !region.HASCHILD }">
<text class="service-name">车辆维修</text>
</view>
</view>
<view class="service-row">
<view class="service-item"
:class="{ 'available': region.HASSHOWERROOM, 'unavailable': !region.HASSHOWERROOM }">
<text class="service-name">车辆加水</text>
:class="{ 'available': info.addWaterArea > 0, 'unavailable': !info.addWaterArea }">
<text class="service-name">加水区域</text>
</view>
<view class="service-item empty-item">
<!-- 空白项保持对齐 -->
@ -175,22 +181,22 @@
<view class="parking-grid">
<view class="parking-row">
<view class="parking-item">
<text class="parking-label">轿车车位</text>
<text class="parking-count">{{ region.SMALLPARKING || 0 }}</text>
<text class="parking-label">小型车位</text>
<text class="parking-count">{{ info.minStallNum || 0 }}</text>
</view>
<view class="parking-item">
<text class="parking-label">客车车位</text>
<text class="parking-count">{{ region.PACKING || 0 }}</text>
<text class="parking-label">中型车位</text>
<text class="parking-count">{{ info.middleStallNum || 0 }}</text>
</view>
</view>
<view class="parking-row">
<view class="parking-item">
<text class="parking-label">货车车位</text>
<text class="parking-count">{{ region.TRUCKPACKING || 0 }}</text>
<text class="parking-label">大型车位</text>
<text class="parking-count">{{ info.maxStallNum || 0 }}</text>
</view>
<view class="parking-item">
<text class="parking-label">危化品车位</text>
<text class="parking-count">{{ region.DANPACKING || 0 }}</text>
<text class="parking-label">加油车道</text>
<text class="parking-count">{{ info.addOilRoadNum || 0 }}</text>
</view>
</view>
</view>
@ -206,36 +212,115 @@
<view class="business-grid">
<view class="business-row">
<view class="business-item"
:class="{ 'available': region.DININGROOMCOUNT, 'unavailable': !region.DININGROOMCOUNT }">
:class="{ 'available': info.synthesisCatering > 0, 'unavailable': !info.synthesisCatering }">
<text class="business-name">餐饮服务</text>
<text class="business-count" v-if="info.synthesisCatering">({{ formatArea(info.synthesisCatering)
}})</text>
</view>
<view class="business-item"
:class="{ 'available': region.HASMESSAGESEARCH, 'unavailable': !region.HASMESSAGESEARCH }">
<text class="business-name">住宿服务</text>
:class="{ 'available': info.supermarket > 0, 'unavailable': !info.supermarket }">
<text class="business-name">超市便利店</text>
<text class="business-count" v-if="info.supermarket">({{ formatArea(info.supermarket) }}m²)</text>
</view>
</view>
<view class="business-row">
<view class="business-item"
:class="{ 'available': region.HASBACKGROUNDRADIO, 'unavailable': !region.HASBACKGROUNDRADIO }">
<text class="business-name">便利店</text>
:class="{ 'available': info.LPGStationsArea > 0, 'unavailable': !info.LPGStationsArea }">
<text class="business-name">加气站</text>
<text class="business-count" v-if="info.LPGStationsArea">({{ formatArea(info.LPGStationsArea)
}})</text>
</view>
<view class="business-item"
:class="{ 'available': region.DININGBXCOUNT, 'unavailable': !region.DININGBXCOUNT }">
<text class="business-name">商铺</text>
<text class="business-count" v-if="region.DININGBXCOUNT">({{ region.DININGBXCOUNT }})</text>
:class="{ 'available': info.chargingStationArea > 0, 'unavailable': !info.chargingStationArea }">
<text class="business-name">充电站</text>
<text class="business-count" v-if="info.chargingStationArea">({{ formatArea(info.chargingStationArea)
}})</text>
</view>
</view>
</view>
<view class="business-type" v-if="region.BUSINESSTYPE">
<view class="business-type" v-if="info.businessModel && info.businessModel.length > 0">
<text class=" business-type-label">经营模式</text>
<view class="business-type-tag">
<text class="business-type-text">{{ region.BUSINESSTYPE }}</text>
<text class="business-type-text">{{ info.businessModel && info.businessModel.length > 0 ?
info.businessModel.toString() : '-' }}</text>
</view>
</view>
</view>
</view>
<!-- 设施详情卡片 -->
<view class="info-card">
<view class="card-header">
<text class="card-title"> 设施详情</text>
</view>
<view class="info-grid">
<view class="info-item">
<text class="info-label">污水处理方量</text>
<text class="info-value">{{ info.sewageTreatmentVolume || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">变压器功率</text>
<text class="info-value">{{ info.transformerVA || '-' }}VA</text>
</view>
<view class="info-item">
<text class="info-label">加油枪数量</text>
<text class="info-value">{{ info.oilGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">充电桩数量</text>
<text class="info-value">{{ info.chargingStationPileNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">充电枪数量</text>
<text class="info-value">{{ info.chargingStationGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">直流快充枪</text>
<text class="info-value">{{ info.DCFastGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">直流慢充枪</text>
<text class="info-value">{{ info.slowGunNum || 0 }}</text>
</view>
</view>
</view>
<!-- 区域面积卡片 -->
<view class="info-card">
<view class="card-header">
<text class="card-title">🏗 区域面积 <text
style="font-size: 24rpx;font-weight: 400;margin-left: 8rpx;">/m²</text></text>
</view>
<view class="info-grid">
<view class="info-item">
<text class="info-label">行车道面积</text>
<text class="info-value">{{ formatArea(info.drivewayArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">办公区面积</text>
<text class="info-value">{{ formatArea(info.officeArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">卫生间面积</text>
<text class="info-value">{{ formatArea(info.WCArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">绿化面积</text>
<text class="info-value">{{ formatArea(info.greenArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">员工住宿区</text>
<text class="info-value">{{ formatArea(info.employeeRoomArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">驾驶员休息室</text>
<text class="info-value">{{ formatArea(info.driverRoomArea) }}</text>
</view>
</view>
</view>
</view>
</scroll-view>
@ -288,10 +373,10 @@ export default {
//
handleGoMap() {
uni.openLocation({
latitude: this.info.SERVERPART_Y * 1,
longitude: this.info.SERVERPART_X * 1,
latitude: this.info.latitude * 1,
longitude: this.info.longitude * 1,
scale: 16,
name: this.info.SERVERPART_NAME,
name: this.info.SAName,
success(data) {
console.log(data);
},
@ -316,10 +401,20 @@ export default {
let systemInfo = uni.getSystemInfoSync()
this.menu = uni.getMenuButtonBoundingClientRect()
let seat = uni.getStorageSync('currentService')
this.handleSearch(seat)
// this.handleSearch(seat)
this.handleGetData(seat)
this.topBg = []
},
handleGetData(obj) {
//
let res = {
...obj,
// fileId: obj.fileId ? JSON.parse(obj.fileId) : [],
// businessModel: obj.businessModel ? JSON.parse(obj.businessModel) : [],
}
console.log('新数据结构示例:', res);
this.info = res
},
//
async handleSearch(seat) {
let currentService = uni.getStorageSync("currentService");
@ -372,23 +467,6 @@ export default {
return typeMap[type] || ''
},
//
getWaterIntakeType(type) {
const typeMap = {
1: '自来水',
2: '井水'
}
return typeMap[type] || '-'
},
//
getSewageType(type) {
const typeMap = {
1: '市政',
2: '污水处理设备'
}
return typeMap[type] || '-'
},
//
formatArea(area) {
@ -624,7 +702,7 @@ export default {
.content-scroll {
background: @bg;
margin-top: 24rpx;
// margin-top: 24rpx;
}
.content-container {

View File

@ -17,9 +17,9 @@
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/fixed.svg"></image>
<view class="select">
<view class="content">
<view class="uni-input">{{ serviceInfo.SERVERPART_NAME ? serviceInfo.SERVERPART_NAME : '' }}</view>
<p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}</p>
<text class="noticeText" v-if="serviceInfo.SERVERPART_NAME === '安徽驿达'">选择您要看的服务区</text>
<view class="uni-input">{{ serviceInfo.SAName ? serviceInfo.SAName : '' }}</view>
<!-- <p class="area">{{ serviceInfo.SPREGIONTYPE_NAME ? serviceInfo.SPREGIONTYPE_NAME : '' }}</p> -->
<!-- <text class="noticeText" v-if="serviceInfo.SERVERPART_NAME === '安徽驿达'">选择您要看的服务区</text> -->
<image class="rightArrow" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg">
</image>
</view>