This commit is contained in:
cclu 2023-12-14 19:40:08 +08:00
parent 93251d869e
commit e96e4d3347
18 changed files with 2053 additions and 119 deletions

View File

@ -295,6 +295,12 @@
"navigationStyle": "custom",
"disableScroll": true
}
},
{
"path": "detail",
"style": {
"navigationBarTitleText": ""
}
}
]
},

View File

@ -43,7 +43,7 @@
<div class="detailBox">
<div class="detailTop">
<div class="topLeft">A类</div>
<div class="topRight">
<div class="topRight" @click="handleGoServiceMessage">
<span class="rightText">查看更多</span>
<img class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
</div>
@ -513,6 +513,10 @@ export default {
this.searchText=''
},
methods:{
//
handleGoServiceMessage(){
this.$util.toNextRoute('navigateTo', `/pages/map/detail`)
},
showScoreAnimation1(copyRightItems,id) {
/*
cxt_arc.arc(x, y, r, sAngle, eAngle, counterclockwise);
@ -1211,6 +1215,7 @@ export default {
width:100%;
background: #fff;
min-height: 100vh;
overflow: hidden;
.header{
width: 100%;
height: 648rpx;
@ -1447,6 +1452,7 @@ export default {
.moreIcon{
width: 24rpx;
height: 24rpx;
margin-left: 4rpx;
}
}
}

View File

@ -1,9 +1,29 @@
<template>
<div class="typeBigList">
<view class="bigBox">
<view :class="expand?'ItemBox second':'ItemBox first'">
<view class="item" @click="handleChangeExpand">
<view class="iconBox">
<image class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">展开</text>
</view>
</view>
<view :class="expand?'ItemBox first':'ItemBox second'" :style="{opacity: show?1:0}">
<div class="item" @click="handleChangeExpand">
<view class="iconBox">
<image style="transform: rotate(-180deg)" class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">隐藏</text>
</div>
<div class="item" v-for="(item,index) in showTypeList" :key="index" @click="handleGo(item.url)">
<image class="icon" :src="item.img"/>
<text class="text">{{item.text}}</text>
</div>
</view>
</view>
</div>
</template>
@ -19,18 +39,20 @@ export default {
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/business_icon.svg',url:'/pages/commercialBI/managePortrait',text:'经营'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/trade.svg',url:'/pages/commercialBI/businessPortrait',text:'交易'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/brand.svg',url:'/pages/commercialBI/formatPortrait',text:'品牌'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/newExamineIcon.svg',url:`/pages/newamine/index?come=index&type=${1}&time=${this.time}`,text:'考核'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/inspectionIcon.svg',url:`/pages/newamine/index?come=index&type=${2}&time=${this.time}`,text:'巡检'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/newExamineIcon.svg',url:`/pages/examine/detail?type=${1}`,text:'考核'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/inspectionIcon.svg',url:`/pages/examine/detail?type=${2}`,text:'巡检'},
],
showTypeList:[],
selectIndex: 5,
selectIndex: 7,
pageList : [],//
expand: false,//
show:false,
}
},
props:{
have:{
type:Number,
default:5
default:7
},
time:{
type: String,
@ -48,7 +70,10 @@ export default {
}
})
this.showTypeList = list
setTimeout(()=>{
this.show = true
console.log('this.show',this.show)
},2000)
},
deep:true,
immediate:true
@ -61,6 +86,9 @@ export default {
},
methods:{
handleChangeExpand(){
this.expand = !this.expand
},
handleGo(url){
let pageList = getCurrentPages()
if (pageList.length>=2){
@ -82,6 +110,11 @@ export default {
position: fixed;
right: 0;
top: 12%;
.bigBox{
width: 100%;
height: 100%;
position: relative;
.ItemBox,.ItemBox2{
.item{
width: 150rpx;
height: 80rpx;
@ -89,6 +122,7 @@ export default {
box-sizing: border-box;
padding: 14rpx;
background: rgba(255,255,255,0.8);
box-shadow: 0rpx 0rpx 40rpx 0rpx rgba(88,82,82,0.3);
display: flex;
align-items: center;
margin-bottom: 10px;
@ -97,7 +131,20 @@ export default {
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
}
.iconBox{
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
margin-right: 10rpx;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
.icon{
width: 30rpx;
height: 30rpx;
}
}
.text{
font-size: 24rpx;
@ -107,5 +154,58 @@ export default {
line-height: 36rpx;
}
}
.firstItem{
animation:toLeft 2s;
}
.secondItem{
animation:toRight 2s;
}
@keyframes toLeft {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
@keyframes toRight {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
}
.first{
position: absolute;
top: 0;
animation: second 1.5s;
animation-fill-mode:forwards;
}
.second{
position: absolute;
top: 0;
animation: first 1.5s;
animation-fill-mode:forwards;
}
@keyframes first {
0%{
left: -150rpx;
}
100%{
left: 0;
}
}
@keyframes second {
0%{
left: 0;
}
100%{
left: -150rpx;
}
}
}
}
</style>

View File

@ -11,7 +11,7 @@
<p class="price">{{ info.TicketCount?info.TicketCount:'-' }}</p>
<view class="right" v-if="info.TicketCount">
<image class="arrowTop" :src="Number((info.TicketCount / info.TicketAvgCount)-1)>0?'https://eshangtech.com/ShopICO/ahyd-BID/index/addIcon.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/reduce.svg'"></image>
<text class="text">{{info.TicketCount / info.TicketAvgCount?Math.abs((((info.TicketCount / info.TicketAvgCount) - 1) *100).toFixed(2)) + '%':'-' + '%'}}</text>
<text class="text">{{orderTransaction+'%'}}</text>
</view>
</div>
<p class="text">客单交易 <text class="unit">/</text></p>
@ -21,7 +21,7 @@
<p class="price">{{ info.AvgTicketPrice?info.AvgTicketPrice:'-' }}</p>
<view class="right" v-if="info.AvgTicketPrice">
<image class="arrowTop" :src="Number((info.AvgTicketPrice / info.MonthAvgTicketPrice)-1)>0?'https://eshangtech.com/ShopICO/ahyd-BID/index/addIcon.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/reduce.svg'"></image>
<text class="text">{{info.AvgTicketPrice / info.MonthAvgTicketPrice?Math.abs((((info.AvgTicketPrice / info.MonthAvgTicketPrice) - 1) *100).toFixed(2)) + '%':'-' + '%'}}</text>
<text class="text">{{orderAveragePrice+'%'}}</text>
</view>
</div>
<p class="text">客单均价 <text class="unit">/</text></p>
@ -110,6 +110,8 @@ export default {
genderList:[false,false,false],
addAreaCarNumber:'',//
oneCarPrice:'',//
orderTransaction:'',
orderAveragePrice:''
}
},
props: {
@ -121,10 +123,12 @@ export default {
watch: {
data: {
handler(value) {
console.log('value',value)
console.log('value111',value)
this.info = value
this.addAreaCarNumber = this.info.VehicleCount ? Math.abs((this.info.VehicleCount / this.info.MonthVehicleCount - 1)*100).toFixed(2):''
this.oneCarPrice = this.info.MonthVehicleAmount?Math.abs(((this.info.AvgVehicleAmount / this.info.MonthVehicleAmount) - 1) *100).toFixed(2):''
this.orderTransaction = this.info.TicketAvgCount? Math.abs((((this.info.TicketCount / this.info.TicketAvgCount) - 1) *100).toFixed(2)):'-'
this.orderAveragePrice = this.info.MonthAvgTicketPrice? Math.abs((((this.info.AvgTicketPrice / this.info.MonthAvgTicketPrice) - 1) *100).toFixed(2)):'-'
this.$forceUpdate()
},
deep:true

View File

@ -28,7 +28,7 @@
<div class="detailBox" :style="{background: detailBoxBg}">
<div class="detailTop">
<div class="topLeft" :style="{background:topLeftBg,color:topLeftColor}">A类</div>
<div class="topRight">
<div class="topRight" @click="handleGoServiceMessage">
<span class="rightText">查看更多</span>
<img class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
</div>
@ -177,6 +177,10 @@ export default {
// this.getLabelDetail()
// },
methods:{
//
handleGoServiceMessage(){
this.$util.toNextRoute('navigateTo', `/pages/map/detail`)
},
//
async getLabelDetail(){
let storeTime = uni.getStorageSync('lastDay')
@ -377,6 +381,7 @@ export default {
.moreIcon{
width: 24rpx;
height: 24rpx;
margin-left: 4rpx;
}
}
}

View File

@ -1,42 +1,86 @@
<template>
<div class="revenueAnalysisMain">
<div class="revenueAnalysis">
<div class="item">
<image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/agreement.svg"></image>
<div class="info" style="margin-bottom: 24px;">
<p class="title">合同总金额<text class="unit">/万元</text></p>
<p class="value">{{dataInfo.ContractProfitLoss}}</p>
<div class="revenueTop">
<div class="revenueTopLeft">
<image class="revenueLogo" src="https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/managerLogo.svg"/>
<div class="revenueTopMoney">
<div class="moneyBox">
<text class="text">{{dataInfo.CashPay}}</text>
<image class="moneyIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/managerGood.svg"/>
</div>
<text class="labelText">实收总额<text class="labelUnit">/</text></text>
</div>
</div>
<div class="item" style="margin-bottom: 24px;">
<image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/shopNumber.svg"></image>
<div class="info">
<p class="title">店铺数量<text class="unit">/</text></p>
<p class="value">{{dataInfo.ShopCount}}</p>
<div class="revenueTopRight">
<!-- <span class="addText">+8.24%</span>-->
<!-- <span class="addType">比计划</span>-->
</div>
</div>
<div class="item">
<image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/add.svg"></image>
<div class="info">
<p class="title">欠款金额<text class="unit">/万元</text></p>
<p class="value">{{dataInfo.SalesPerSquareMeter}}</p>
<div class="revenueDetailList">
<div class="revenueDetailItem">
<text class="itemValue">{{dataInfo.Different_Price_More}}</text>
<text class="itemLabel">长款金额<text class="itemUnit">/</text></text>
</div>
<div class="revenueDetailItem">
<text class="itemValue">{{dataInfo.Different_Price_Less}}</text>
<text class="itemLabel">短款金额<text class="itemUnit">/</text></text>
</div>
<div class="revenueDetailItem">
<text class="itemValue">{{dataInfo.TotalOffAmount}}</text>
<text class="itemLabel">优惠金额<text class="itemUnit">/</text></text>
</div>
<div class="revenueDetailItem" style="margin-top: 32rpx">
<text class="itemValue">{{dataInfo.TicketCount}}</text>
<text class="itemLabel">客单数量<text class="itemUnit">/</text></text>
</div>
<div class="revenueDetailItem" style="margin-top: 32rpx">
<text class="itemValue">{{dataInfo.TotalCount}}</text>
<text class="itemLabel">商品出售<text class="itemUnit">/</text></text>
</div>
<div class="revenueDetailItem" style="margin-top: 32rpx">
<text class="itemValue">{{dataInfo.average}}</text>
<text class="itemLabel">商品均价<text class="itemUnit">/</text></text>
</div>
</div>
<div class="item">
<image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/overShop.svg"></image>
<div class="info">
<p class="title">半年到期合同<text class="unit">/</text></p>
<p class="value">{{dataInfo.ExpiredShopCount}}</p>
</div>
</div>
</div>
<div class="list" v-if="id">
<!-- <p class="bigTitle" v-if="dataInfo.ContractList.length>0">即将到期合同列表: </p>-->
<div class="item" v-for="(item,index) in dataInfo.ContractList" :key="index">
<div class="title">{{item.name}}</div>
<div class="value">{{item.value}}到期</div>
</div>
<!-- <div class="item">-->
<!-- <image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/agreement.svg"></image>-->
<!-- <div class="info" style="margin-bottom: 24px;">-->
<!-- <p class="title">合同总金额<text class="unit">/万元</text></p>-->
<!-- <p class="value">{{dataInfo.ContractProfitLoss}}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="item" style="margin-bottom: 24px;">-->
<!-- <image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/shopNumber.svg"></image>-->
<!-- <div class="info">-->
<!-- <p class="title">店铺数量<text class="unit">/</text></p>-->
<!-- <p class="value">{{dataInfo.ShopCount}}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="item">-->
<!-- <image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/add.svg"></image>-->
<!-- <div class="info">-->
<!-- <p class="title">欠款金额<text class="unit">/万元</text></p>-->
<!-- <p class="value">{{dataInfo.SalesPerSquareMeter}}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="item">-->
<!-- <image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/overShop.svg"></image>-->
<!-- <div class="info">-->
<!-- <p class="title">半年到期合同<text class="unit">/</text></p>-->
<!-- <p class="value">{{dataInfo.ExpiredShopCount}}</p>-->
<!-- </div>-->
<!-- </div>-->
</div>
<!-- <div class="list" v-if="id">-->
<!--&lt;!&ndash; <p class="bigTitle" v-if="dataInfo.ContractList.length>0">即将到期合同列表: </p>&ndash;&gt;-->
<!-- <div class="item" v-for="(item,index) in dataInfo.ContractList" :key="index">-->
<!-- <div class="title">{{item.name}}</div>-->
<!-- <div class="value">{{item.value}}到期</div>-->
<!-- </div>-->
<!-- </div>-->
</div>
</template>
@ -61,9 +105,16 @@ export default {
watch: {
data: {
handler(value) {
this.dataInfo = value
this.dataInfo.ContractProfitLoss = this.$util.fmoney(this.dataInfo.ContractProfitLoss)
this.dataInfo.SalesPerSquareMeter = this.$util.fmoney(this.dataInfo.SalesPerSquareMeter)
this.dataInfo = JSON.parse(JSON.stringify(value))
this.dataInfo.CashPay = this.$util.fmoney(this.dataInfo.CashPay,2)
this.dataInfo.Different_Price_More = this.$util.fmoney(this.dataInfo.Different_Price_More,2)
this.dataInfo.Different_Price_Less = this.$util.fmoney(this.dataInfo.Different_Price_Less,2)
this.dataInfo.TotalOffAmount = this.$util.fmoney(this.dataInfo.TotalOffAmount,2)
this.dataInfo.TicketCount = this.$util.fmoney(this.dataInfo.TicketCount,2)
this.dataInfo.TotalCount = this.$util.fmoney(this.dataInfo.TotalCount,2)
this.dataInfo.average = this.$util.fmoney((value.CashPay / value.TicketCount),2)
// this.dataInfo.ContractProfitLoss = this.$util.fmoney(this.dataInfo.ContractProfitLoss)
// this.dataInfo.SalesPerSquareMeter = this.$util.fmoney(this.dataInfo.SalesPerSquareMeter)
console.log('value',value)
}
}
@ -77,14 +128,117 @@ export default {
<style scoped lang="scss">
.revenueAnalysisMain{
.revenueAnalysis{
width: calc(100%);
background: #F7F7F7;
border-radius: 4px;
padding: 12px;
width: 100%;
background: #FAF9FC;
border-radius: 16rpx;
padding: 32rpx 24rpx;
box-sizing: border-box;
display: flex;
flex-flow: wrap;
margin-top: 12px;
.revenueTop{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.revenueTopLeft{
display: flex;
height: 88rpx;
.revenueLogo{
width: 88rpx;
height: 88rpx;
margin-right: 16rpx;
}
.revenueTopMoney{
display: flex;
flex-direction: column;
justify-content: space-between;
height: 88rpx;
.moneyBox{
height: 48rpx;
.text{
font-size: 40rpx;
font-family: DINAlternate, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 48rpx;
}
.moneyIcon{
width: 32rpx;
height: 32rpx;
margin-left: 12rpx;
}
}
.labelText{
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 40rpx;
.labelUnit{
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 40rpx;
margin-left: 4rpx;
}
}
}
}
.revenueTopRight{
height: 88rpx;
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: space-between;
.addText{
font-size: 40rpx;
font-family: DINAlternate, DINAlternate;
font-weight: bold;
color: #E83944;
line-height: 48rpx;
}
.addType{
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 40rpx;
}
}
}
.revenueDetailList{
width: 100%;
margin-top: 48rpx;
.revenueDetailItem{
display: inline-block;
width: calc(100% / 3);
.itemValue{
font-size: 28rpx;
font-family: DINAlternate, DINAlternate;
font-weight: bold;
color: #341D00;
line-height: 40rpx;
}
.itemLabel{
display: block;
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 40rpx;
.itemUnit{
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 40rpx;
margin-left: 4rpx;
}
}
}
}
.item{
width: 50%;
display: flex;

View File

@ -1,6 +1,9 @@
<template>
<div class="main">
<div style="position: fixed;right: 0;top: 20%;z-index:99999999999">
<commercial-type :have="4"/>
</div>
<div style="position: fixed;right: 0;top: 20%;z-index:99999999999">
<!-- <commercial-type :have="4"/>-->
</div>
<!-- <header-top :bgUrl="bgUrl" :menu="menu" :bgColor="bgColor" :title="title" :analyseInfo="analyseInfo" :topBg="topBg" :page="page" :backType="backType"-->

View File

@ -10,8 +10,8 @@
<div class="charts">
<div class="chartsItem">
<p class="title">合同执行情况</p>
<revenue-analysis :data="revenueList"/>
<p class="title">营收分析</p>
<revenue-analysis :data="monthDetail"/>
</div>
<div class="chartsItem" style="margin-top: 32px">
<p class="title">合同保底</p>
@ -34,7 +34,7 @@
<p class="sumMoney">{{revenue.data?revenue.data:'-'}}</p>
</div>
<div class="bottom">
<image class="icon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/addArrow.svg"></image>
<image class="icon" :src="revenue.add>0?'https://eshangtech.com/ShopICO/ahyd-BID/commercial/addArrow.svg':revenue.add<0?'https://eshangtech.com/ShopICO/ahyd-BID/commercial/decline.svg':''"></image>
<p class="add">{{revenue.add?revenue.add+'%':'-'}}</p>
<p class="text">(相比去年同日)</p>
</div>
@ -246,7 +246,8 @@ export default {
yearNoticeText:'',
lastDay:'',
month:'',
haveFun:{}
haveFun:{},
monthDetail:{},//
}
},
onLoad(option) {
@ -283,7 +284,6 @@ export default {
}
//
this.getRevenueList()
//
// this.getOrderTransaction()
//
@ -299,6 +299,8 @@ export default {
this.handleNoticeYear()
//
this.getServiceInfo()
//
this.getSummaryMonth()
},
onUnload() {
this.$util.addUserBehavior()
@ -439,6 +441,23 @@ export default {
handleNoShowNoticeYear(){
this.showNoticeYear = false
},
async getSummaryMonth(){
console.log('this.time',this.time)
const date = new Date(this.time)
let y = date.getFullYear()
let m = date.getMonth() + 1
if (m<10){
m = '0'+m
}
const req= {
pushProvinceCode:'340000',
StatisticsMonth:`${y}${m}`,
}
const data = await request.$webGet('CommercialApi/Revenue/GetSummaryRevenueMonth',req)
console.log('data22222',data)
this.monthDetail = data.Result_Data.MonthRevenueModel
},
async getRevenueList(){
let req = {
statisticsDate:this.time,

View File

@ -0,0 +1,211 @@
<template>
<div class="typeBigList">
<view class="bigBox">
<view :class="expand?'ItemBox second':'ItemBox first'">
<view class="item" @click="handleChangeExpand">
<view class="iconBox">
<image class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">展开</text>
</view>
</view>
<view :class="expand?'ItemBox first':'ItemBox second'" :style="{opacity: show?1:0}">
<div class="item" @click="handleChangeExpand">
<view class="iconBox">
<image style="transform: rotate(-180deg)" class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">隐藏</text>
</div>
<div class="item" v-for="(item,index) in showTypeList" :key="index" @click="handleGo(item.url)">
<image class="icon" :src="item.img"/>
<text class="text">{{item.text}}</text>
</div>
</view>
</view>
</div>
</template>
<script>
export default {
name: "commercialType",
data(){
return {
typeList:[
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/car.svg',url:'/pages/commercialBI/carPortrait',text:'车流'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/guest.svg',url:'/pages/commercialBI/guestPortrait',text:'客群'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/business_icon.svg',url:'/pages/commercialBI/managePortrait',text:'经营'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/trade.svg',url:'/pages/commercialBI/businessPortrait',text:'交易'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/brand.svg',url:'/pages/commercialBI/formatPortrait',text:'品牌'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/newExamineIcon.svg',url:`/pages/examine/detail?type=${1}`,text:'考核'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/inspectionIcon.svg',url:`/pages/examine/detail?type=${2}`,text:'巡检'},
],
showTypeList:[],
selectIndex: 7,
pageList : [],//
expand: false,//
show:false,
}
},
props:{
have:{
type:Number,
default:7
},
time:{
type: String,
default: ''
}
},
watch:{
have:{
handler(value){
this.selectIndex = value
let list = []
this.typeList.forEach((item,index)=>{
if (index !== this.selectIndex){
list.push(item)
}
})
this.showTypeList = list
setTimeout(()=>{
this.show = true
console.log('this.show',this.show)
},2000)
},
deep:true,
immediate:true
}
},
onLoad(){
},
onShow(){
},
methods:{
handleChangeExpand(){
this.expand = !this.expand
},
handleGo(url){
let pageList = getCurrentPages()
if (pageList.length>=2){
uni.redirectTo({
url:url
})
} else{
uni.navigateTo({
url:url
})
}
}
}
}
</script>
<style scoped lang="scss">
.typeBigList{
position: fixed;
right: 0;
top: 12%;
.bigBox{
width: 100%;
height: 100%;
position: relative;
.ItemBox,.ItemBox2{
.item{
width: 150rpx;
height: 80rpx;
border-radius: 20px 0 0 20px;
box-sizing: border-box;
padding: 14rpx;
background: rgba(255,255,255,0.8);
box-shadow: 0rpx 0rpx 40rpx 0rpx rgba(88,82,82,0.3);
display: flex;
align-items: center;
margin-bottom: 10px;
border: 1px solid #ccc;
.icon{
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
}
.iconBox{
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
margin-right: 10rpx;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
.icon{
width: 30rpx;
height: 30rpx;
}
}
.text{
font-size: 24rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 36rpx;
}
}
.firstItem{
animation:toLeft 2s;
}
.secondItem{
animation:toRight 2s;
}
@keyframes toLeft {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
@keyframes toRight {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
}
.first{
position: absolute;
top: 0;
animation: second 1.5s;
animation-fill-mode:forwards;
}
.second{
position: absolute;
top: 0;
animation: first 1.5s;
animation-fill-mode:forwards;
}
@keyframes first {
0%{
left: -150rpx;
}
100%{
left: 0;
}
}
@keyframes second {
0%{
left: 0;
}
100%{
left: -150rpx;
}
}
}
}
</style>

1104
pages/examine/detail.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
<template>
<view class="rateMain">
<image v-if="preferPath" style="width: 144rpx;height: 144rpx" :src="preferPath"></image>
<canvas style="width: 144rpx;height: 144rpx;position:fixed;left: 100%" canvas-id="rate" id="rate"/>
<canvas v-if="name" style="width: 144rpx;height: 144rpx;position:fixed;left: 100%" :canvas-id="name" :id="name"/>
</view>
</template>
@ -23,6 +23,10 @@ export default {
colorList:{
type: Array,
default:[]
},
name:{
type:String,
default:''
}
},
watch:{
@ -36,8 +40,7 @@ export default {
data:[{name:'驿站营收',value:0},{name:'未完成',value:0}]
}]
}
console.log('res',res)
this.drawCharts('rate',res)
this.drawCharts(this.name,res)
}else{
let firstRate = Number(((value[0] / sum)*100).toFixed(2))
let secondRate = 100 - Number(firstRate)
@ -46,8 +49,7 @@ export default {
data:[{name:'驿站营收',value:firstRate},{name:'未完成',value:secondRate}]
}]
}
console.log('res',res)
this.drawCharts('rate',res)
this.drawCharts(this.name,res)
}
},
}
@ -95,7 +97,7 @@ export default {
}
});
setTimeout( ()=>{
this.canvasToTempImage('rate')
this.canvasToTempImage(this.name)
},500)
},
canvasToTempImage(id){

View File

@ -3,6 +3,7 @@
<view class="meng" v-if="showRealBox" @click="changeShowRealBox"></view>
<view class="meng" v-if="showHaveNotice" @click.stop="handleShowHaveNoticeBox"></view>
<view class="meng" v-if="showMonthDetail" @click.stop="handleShowTrafficDetail"></view>
<view class="meng" v-if="ydModal" @click.stop="handleShowYDModal"></view>
<!-- 根据要显示的内容 切换高度 -->
<view :class="1<=selectMonth && selectMonth<=3?'header':4<=selectMonth && selectMonth<=6?'header secondHeader':7<=selectMonth && selectMonth<=9?'header thirdHeader':8<=selectMonth && selectMonth<=12?'header forthHeader':'header'"
>
@ -102,19 +103,23 @@
</view>
</view>
<view class="moneyRate">
<view class="leftBox">
<rateCharts :success="moneyRateList" :colorList="['#A66A37','#DCA858']"/>
<view class="leftBox" @click="handleShowYDModal">
<rateCharts :success="moneyRateList" :colorList="['#A66A37','#DCA858']" :name="`${selectMonth}rate`"/>
<view class="haveNoticeBox" v-if="ydModal" @click.stop="handleShowYDModal">
<text class="label">驿达入账:<text class="value">{{ydRate}}%</text></text>
<text class="label">商家入账:<text class="value">{{shopRate}}%</text></text>
</view>
</view>
<view class="rightBox">
<view class="noticeItem">
<view class="noticeTop"></view>
<view class="noticeTop" :style="{background:1<=selectMonth && selectMonth<=3?'#DB573B':4<=selectMonth && selectMonth<=6?'#137BBD':7<=selectMonth && selectMonth<=9?'#3663CB':'#A66A37'}"></view>
<view class="noticeText">驿达入账<span class="noticeSmallText">/万元</span></view>
<view class="noticeMoney">-</view>
<text class="noticeMoney">{{currentPeriodData.Royalty_Theory?$util.fmoney(currentPeriodData.Royalty_Theory / 10000,2):'-'}}</text>
</view>
<view class="noticeItem">
<view class="noticeTop" style="background: #DCA858"></view>
<view class="noticeTop" :style="{background:1<=selectMonth && selectMonth<=3?'#FFAB30':4<=selectMonth && selectMonth<=6?'#5DC1E0':7<=selectMonth && selectMonth<=9?'#7CADF8':'#DCA858'}"></view>
<view class="noticeText">商家入账<span class="noticeSmallText">/万元</span></view>
<view class="noticeMoney">-</view>
<text class="noticeMoney">{{ currentPeriodData.SubRoyalty_Theory?$util.fmoney(currentPeriodData.SubRoyalty_Theory / 10000,2):'-' }}</text>
</view>
</view>
</view>
@ -362,7 +367,7 @@
<image class="typeImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/1stTypeImg.svg"/>
</view>
<view class="report" >
<view class="report" @click="handleGoServiceMessage">
<text class="reportTitle">服务区信息</text>
<image class="timeIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex2/2stTypeImg.svg"/>
<image class="typeImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex2/serviceCar.svg"/>
@ -461,7 +466,7 @@
</div>
</view>
<!-- 人流预警-->
<view class="peopleWarning" >
<view class="peopleWarning" v-if="false">
<div class="carWarningTop">
<div class="warningBox">
<image class="warningIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/personIcon.svg"/>
@ -920,7 +925,11 @@ export default {
trafficCurrentObj:{},//
showMonthDetail:false,//
yesObjCompared:'',//
moneyRateList:[]
moneyRateList:[],
currentPeriodData:{},//
ydModal: false,// 驿
ydRate:'',// 驿
shopRate:'',//
}
},
watch:{
@ -1015,9 +1024,9 @@ export default {
},
onLoad(option){
const _this = this
setTimeout(()=>{
_this.moneyRateList = [0,0]
},3000)
// setTimeout(()=>{
// _this.moneyRateList = [0,0]
// },3000)
//
this.single = timestampToTimeMonth((new Date(this.lastDay).getTime()))
//
@ -1129,6 +1138,39 @@ export default {
},
methods:{
...mapActions(['memberLogin','getLoginCode']),
//
handleGoServiceMessage(){
this.$util.toNextRoute('navigateTo', `/pages/map/detail?isPicker=${true}&come=index`)
// let _this = this
// let currentService = uni.getStorageSync('currentService')
// let nearService = uni.getStorageSync('nearService')
// if (currentService){
// }else if (nearService){
// uni.setStorageSync('currentService',nearService)
// }else{
// wx.getPrivacySetting({
// success: res=>{
// if (res.needAuthorization){
// this.$util.toNextRoute('redirectTo', '/pages/register/register')
// }else{
// wx.getFuzzyLocation({
// type:'gcj02',
// altitude:true,
// success: (res) =>{
// let seatInfo = {
// latitude:res.latitude,
// longitude:res.longitude
// }
// uni.setStorageSync('seatInfo', seatInfo);
// this.seat = seatInfo
// }
// })
// }
// }
// })
// }
},
//
async handleGetNationalData(){
let req = {
@ -1245,14 +1287,30 @@ export default {
}
const data = await request.$webGet('CommercialApi/BaseInfo/GetServerpartList',req)
console.log('datanearestService',data)
// let res = {
// SERVERPART_NAME:data.Result_Data.List[0].SERVERPART_NAME,//
// SPREGIONTYPE_NAME:data.Result_Data.List[0].SPREGIONTYPE_NAME,//
// SPRegionType_ID:data.Result_Data.List[0].SPREGIONTYPE_ID,//id
// Serverpart_ID:data.Result_Data.List[0].SERVERPART_ID,//id
// longitude:data.Result_Data.List[0].SERVERPART_X,
// latitude:data.Result_Data.List[0].SERVERPART_Y,
// }
let nearService = uni.getStorageSync('nearService')
if (!nearService){
let res = {
SERVERPART_NAME:data.Result_Data.List[0].SERVERPART_NAME,//
SPREGIONTYPE_NAME:data.Result_Data.List[0].SPREGIONTYPE_NAME,//
SPRegionType_ID:data.Result_Data.List[0].SPREGIONTYPE_ID,//id
Serverpart_ID:data.Result_Data.List[0].SERVERPART_ID,//id
longitude:data.Result_Data.List[0].SERVERPART_X,
latitude:data.Result_Data.List[0].SERVERPART_Y,
}
uni.setStorageSync('nearService',res)
}
let currentService = uni.getStorageSync('currentService')
if (!currentService){
let res = {
SERVERPART_NAME:data.Result_Data.List[0].SERVERPART_NAME,//
SPREGIONTYPE_NAME:data.Result_Data.List[0].SPREGIONTYPE_NAME,//
SPRegionType_ID:data.Result_Data.List[0].SPREGIONTYPE_ID,//id
Serverpart_ID:data.Result_Data.List[0].SERVERPART_ID,//id
longitude:data.Result_Data.List[0].SERVERPART_X,
latitude:data.Result_Data.List[0].SERVERPART_Y,
}
uni.setStorageSync('currentService',res)
}
// let res = {
@ -1595,6 +1653,9 @@ export default {
this.handleGetAllCarTraffic()
}
},
handleShowYDModal(){
this.ydModal = !this.ydModal
},
getCarInfo(date){
const data = {
Statistics_Date:date?date:this.lastDay,
@ -1714,6 +1775,16 @@ export default {
flag3 = true
let result = lastData.Result_Data
let progressAll = 0
this.currentPeriodData = result.MonthRevenueModel.CurAccountRoyalty
this.moneyRateList = [this.currentPeriodData.Royalty_Theory,this.currentPeriodData.SubRoyalty_Theory]
let sum = this.currentPeriodData.Royalty_Theory+this.currentPeriodData.SubRoyalty_Theory
if(sum===0){
this.ydRate = '-'
this.shopRate = '-'
}else{
this.ydRate = ((this.currentPeriodData.Royalty_Theory / sum)*100).toFixed(2)
this.shopRate = ((this.currentPeriodData.SubRoyalty_Theory / sum)*100).toFixed(2)
}
result.BusinessTypeList.forEach(item=>{
progressAll+=Number(item.value)
@ -2003,7 +2074,6 @@ export default {
}
let index1= (this.showTableData.CashPay / 10000).toString().indexOf('.')
this.showTableData.CashPayChange = (this.showTableData.CashPay / 10000).toString().substring(0,index1+3)
// for (let key in this.showTableData){
// if (this.showTableData[key]){
// //
@ -2284,7 +2354,7 @@ $iphoneHeight: env(safe-area-inset-bottom);
width: 100%;
box-sizing: border-box;
padding: 32rpx 16rpx;
background: linear-gradient(135deg, #FFE3BA 0%, #FFF5E5 40%, #FFF1DB 78%, #FFDABC 100%); border-radius: 16rpx;
//background: linear-gradient(135deg, #FFE3BA 0%, #FFF5E5 40%, #FFF1DB 78%, #FFDABC 100%); border-radius: 16rpx;
margin-top: 32rpx;
.progress{
width: 100%;
@ -2311,6 +2381,7 @@ $iphoneHeight: env(safe-area-inset-bottom);
border-radius: 10rpx;
box-shadow: 0rpx 0rpx 40rpx 0rpx rgba(244, 138, 143, 0.21);
z-index:9;
}
}
.message{
@ -2402,6 +2473,21 @@ $iphoneHeight: env(safe-area-inset-bottom);
width: 144rpx;
height: 144rpx;
margin-right: 16rpx;
position: relative;
.haveNoticeBox{
position: absolute;
bottom: 0;left: 0;
transform: translateY(80%);
display: inline-block;
padding: 5px 10px;
background: #fff;
border-radius: 10rpx;
box-shadow: 0rpx 0rpx 40rpx 0rpx rgba(244, 138, 143, 0.21);
z-index:9;
.label{
display: block;
}
}
}
.rightBox{
flex: 1;
@ -2434,7 +2520,7 @@ $iphoneHeight: env(safe-area-inset-bottom);
}
.noticeMoney{
font-size: 36rpx;
font-family: DINAlternate, DINAlternate;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 44rpx;

View File

@ -0,0 +1,211 @@
<template>
<div class="typeBigList">
<view class="bigBox">
<view :class="expand?'ItemBox second':'ItemBox first'">
<view class="item" @click="handleChangeExpand">
<view class="iconBox">
<image class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">展开</text>
</view>
</view>
<view :class="expand?'ItemBox first':'ItemBox second'" :style="{opacity: show?1:0}">
<div class="item" @click="handleChangeExpand">
<view class="iconBox">
<image style="transform: rotate(-180deg)" class="icon" src="/static/images/user/expand.svg"/>
</view>
<text class="text">隐藏</text>
</div>
<div class="item" v-for="(item,index) in showTypeList" :key="index" @click="handleGo(item.url)">
<image class="icon" :src="item.img"/>
<text class="text">{{item.text}}</text>
</div>
</view>
</view>
</div>
</template>
<script>
export default {
name: "commercialType",
data(){
return {
typeList:[
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/car.svg',url:'/pages/commercialBI/carPortrait',text:'车流'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/guest.svg',url:'/pages/commercialBI/guestPortrait',text:'客群'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/business_icon.svg',url:'/pages/commercialBI/managePortrait',text:'经营'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/trade.svg',url:'/pages/commercialBI/businessPortrait',text:'交易'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/index/brand.svg',url:'/pages/commercialBI/formatPortrait',text:'品牌'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/newExamineIcon.svg',url:`/pages/examine/detail?type=${1}`,text:'考核'},
{img:'https://eshangtech.com/ShopICO/ahyd-BID/newCommercialBI/inspectionIcon.svg',url:`/pages/examine/detail?type=${2}`,text:'巡检'},
],
showTypeList:[],
selectIndex: 7,
pageList : [],//
expand: false,//
show:false,
}
},
props:{
have:{
type:Number,
default:7
},
time:{
type: String,
default: ''
}
},
watch:{
have:{
handler(value){
this.selectIndex = value
let list = []
this.typeList.forEach((item,index)=>{
if (index !== this.selectIndex){
list.push(item)
}
})
this.showTypeList = list
setTimeout(()=>{
this.show = true
console.log('this.show',this.show)
},2000)
},
deep:true,
immediate:true
}
},
onLoad(){
},
onShow(){
},
methods:{
handleChangeExpand(){
this.expand = !this.expand
},
handleGo(url){
let pageList = getCurrentPages()
if (pageList.length>=2){
uni.redirectTo({
url:url
})
} else{
uni.navigateTo({
url:url
})
}
}
}
}
</script>
<style scoped lang="scss">
.typeBigList{
position: fixed;
right: 0;
top: 12%;
.bigBox{
width: 100%;
height: 100%;
position: relative;
.ItemBox,.ItemBox2{
.item{
width: 150rpx;
height: 80rpx;
border-radius: 20px 0 0 20px;
box-sizing: border-box;
padding: 14rpx;
background: rgba(255,255,255,0.8);
box-shadow: 0rpx 0rpx 40rpx 0rpx rgba(88,82,82,0.3);
display: flex;
align-items: center;
margin-bottom: 10px;
border: 1px solid #ccc;
.icon{
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
}
.iconBox{
width: 52.5rpx;
height: 52.5rpx;
border-radius: 50%;
margin-right: 10rpx;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
.icon{
width: 30rpx;
height: 30rpx;
}
}
.text{
font-size: 24rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 36rpx;
}
}
.firstItem{
animation:toLeft 2s;
}
.secondItem{
animation:toRight 2s;
}
@keyframes toLeft {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
@keyframes toRight {
0%{
transform: translateX(0px);
}
100%{
transform: translateX(150rpx);
}
}
}
.first{
position: absolute;
top: 0;
animation: second 1.5s;
animation-fill-mode:forwards;
}
.second{
position: absolute;
top: 0;
animation: first 1.5s;
animation-fill-mode:forwards;
}
@keyframes first {
0%{
left: -150rpx;
}
100%{
left: 0;
}
}
@keyframes second {
0%{
left: 0;
}
100%{
left: -150rpx;
}
}
}
}
</style>

View File

@ -1,5 +1,8 @@
<template>
<div class="main">
<div style="position: fixed;right: 0;top: 20%;z-index:99999999999">
<commercial-type :have="7"/>
</div>
<div class="leftArrow" :style="{top:(menu.top + ((menu.height - 24)/2) )+ 'px'}" >
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/navigation-left.svg" @click="handleBack"></image>
<div class="pickers" v-if="isShowPicker" @click="handleChangeService">
@ -160,8 +163,10 @@
<script>
import request from '@/util/index.js'
import commercialType from "./commercialType.vue";
export default {
name: "detail",
components: {commercialType},
data(){
return {
info:{},
@ -255,6 +260,10 @@ export default {
uni.navigateBack({
delta: 1
})
}else{
uni.navigateTo({
url:`/pages/map/index?time=${lastDay}&serviceInfo=${JSON.stringify(currentService)}`
})
}
}else{
uni.navigateTo({
@ -289,10 +298,14 @@ export default {
uni.switchTab({
url: '/pages/index/index'
})
}else{
}else if (this.come==='user'){
uni.switchTab({
url: '/pages/userCenter/userCenter'
})
}else{
uni.navigateBack({
delta: 1
});
}
},

View File

@ -1363,9 +1363,12 @@ export default {
// swiper
handleChangeSwiper(e){
this.selectMonth = e.target.current
console.log('this.selectMonth',this.selectMonth)
this.thisMonth = this.monthList[this.selectMonth]
this.single = `${this.thisYear}-${this.thisMonth<10?'0'+this.thisMonth:this.thisMonth}`
console.log('this.single',this.single)
// this.currentResult = this.monthResult[this.selectMonth]
console.log('11111')
this.handleGetPageData()
},
//
@ -1377,13 +1380,16 @@ export default {
Month:this.thisMonth
}
const data = await request.$webGetTest('EShangApiMain/Budget/GetbudgetProjectReport',req)
console.log('data',data)
this.currentResult = data.Result_Data
let sum = 0
console.log('this.currentResult',this.currentResult)
if (this.currentResult.outList && this.currentResult.outList.length>0){
this.currentResult.outList.forEach(item=>{
sum+=item.expenditureCostThisYearNumber
})
this.outAll = sum
console.log('this.outAll',this.outAll)
this.outFirst = (this.currentResult.outList[0].expenditureCostThisYearNumber/sum)*100
this.outSecond = (this.currentResult.outList[1].expenditureCostThisYearNumber/sum)*100
this.outThird = (this.currentResult.outList[2].expenditureCostThisYearNumber/sum)*100

View File

@ -233,7 +233,7 @@
<view class="revenueContent">
<view class="revenueAmount">
<view class="revenueAmount" style="margin-top: 48rpx">
<view class="amountItem">
<view class="itemTop">
<view class="itemTopLeft">
@ -608,7 +608,7 @@ export default {
.ydRevenue{
.revenueBoxHeader{
background: linear-gradient(#FCF3E5 0%, #FDF6EC 22%,#FFFFFF 30%, #FFFFFF 100%);
background: linear-gradient(#FCF3E5 0%, #FDF6EC 22%,#FFFFFF 40%, #FFFFFF 100%);
.headerTitle{
color: #EC6C00;
}
@ -616,7 +616,7 @@ export default {
}
.merchantRevenue{
.revenueBoxHeader{
background: linear-gradient(#E9F5F9 0%, #E9F5F9 22%,#FFFFFF 30%, #FFFFFF 100%);
background: linear-gradient(#E9F5F9 0%, #E9F5F9 22%,#FFFFFF 40%, #FFFFFF 100%);
.headerTitle{
color: #018ABD;
}
@ -626,6 +626,9 @@ export default {
.revenueBoxHeader{
height: 530px;
background: linear-gradient(#F1F7FF 0%, #FFFFFF 20% , #FFFFFF 100%);
.headerTitle{
color: #096EF7;
}
}
}
}

View File

@ -236,7 +236,7 @@ import Tabbar from "../../components/tabbar/tabbar.vue";
{
id:'',
name: '基础信息',
homeUrl: '/pages/map/detail',
homeUrl: '/pages/map/detail?come=user',
imagePath: 'https://eshangtech.com/ShopICO/ahyd-BID/user/basicInformation.svg',
isNotice:true,
notice:0,

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702525217291" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16726" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M511.12 880c-12.28 0-24.57-4.69-33.94-14.06l-320-320c-18.74-18.75-18.74-49.14 0-67.88l320-320c18.75-18.74 49.14-18.74 67.88 0 18.74 18.75 18.74 49.14 0 67.88L259 512l286.06 286.06c18.74 18.75 18.74 49.14 0 67.88-9.37 9.37-21.65 14.06-33.94 14.06z" fill="#8a8a8a" p-id="16727"></path><path d="M831.12 880c-12.28 0-24.57-4.69-33.94-14.06l-320-320c-18.74-18.75-18.74-49.14 0-67.88l320-320c18.75-18.74 49.14-18.74 67.88 0 18.74 18.75 18.74 49.14 0 67.88L579 512l286.06 286.06c18.74 18.75 18.74 49.14 0 67.88-9.37 9.37-21.65 14.06-33.94 14.06z" fill="#8a8a8a" p-id="16728"></path></svg>

After

Width:  |  Height:  |  Size: 915 B