update
This commit is contained in:
parent
035f5f8d31
commit
b816c7b5b5
@ -4,8 +4,9 @@
|
||||
<view class="meng" v-if="showHaveNotice" @click.stop="handleShowHaveNoticeBox"></view>
|
||||
<view class="meng" v-if="showMonthDetail" @click.stop="handleShowTrafficDetail"></view>
|
||||
<!-- 根据要显示的内容 切换高度 -->
|
||||
<view :class="1<=selectMonth && selectMonth<=3?'header':4<=selectMonth && selectMonth<=6?'header secondHeader':7<=selectMonth && selectMonth<=9?'header thirdHeader':'header forthHeader'"
|
||||
:style="{height:loadMore?`calc(${(776/750)*phoneWidth + 260}px)`:`calc(${(776/750)*phoneWidth - 10}px)`}">
|
||||
<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'"
|
||||
>
|
||||
<!-- :style="{height:loadMore?`calc(${(776/750)*phoneWidth + 260}px)`:`calc(${(776/750)*phoneWidth - 10}px)`}"-->
|
||||
<!-- 时间选择 -->
|
||||
<div class="headerTop"
|
||||
:style="{ height: menu.bottom + 5 + 'px'}">
|
||||
@ -15,12 +16,13 @@
|
||||
<picker mode="date" fields="month" :value="single" :start="startDate" :end="endData" @change="bindDateChange" >
|
||||
<view class="time">
|
||||
<!-- <text class="day" >{{ thisDay }}</text>-->
|
||||
<view class="uni-input" :style="{color: 1<=selectMonth && selectMonth<=3?'#B33115':4<=selectMonth && selectMonth<=6?'#025B93':7<=selectMonth && selectMonth<=9?'#2249A2':'#783F0F'}" style="background: transparent;padding: 0;height:100%">{{ single }}</view>
|
||||
<view class="uni-input" :style="{color: 1<=selectMonth && selectMonth<=3?'#B33115':4<=selectMonth && selectMonth<=6?'#025B93':7<=selectMonth && selectMonth<=9?'#2249A2':10<=selectMonth && selectMonth<=12?'#783F0F':''}" style="background: transparent;padding: 0;height:100%">{{ single }}</view>
|
||||
<image class="icon" :src="1<=selectMonth && selectMonth<=3?'https://eshangtech.com/ShopICO/ahyd-BID/newIndex/1stDownArrow.svg':4<=selectMonth && selectMonth<=6?'https://eshangtech.com/ShopICO/ahyd-BID/newIndex/2stDownArrow.svg':7<=selectMonth && selectMonth<=9?'https://eshangtech.com/ShopICO/ahyd-BID/newIndex/3stDownArrow.svg':'https://eshangtech.com/ShopICO/ahyd-BID/newIndex/4stDownArrow.svg'"></image>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
</div>
|
||||
<div :style="{height: menu.bottom + 5 + 'px',width:'100%'}"></div>
|
||||
|
||||
<!-- ,height:loadMore?'200px':'38px'-->
|
||||
<div class="storeDetail" :style="{ top: menu.bottom + 13 + 'px',left:0 + 'px'}">
|
||||
@ -377,6 +379,162 @@
|
||||
<text class="funItemText">{{item.name}}</text>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 营收占比-->
|
||||
<view class="proportion">
|
||||
<view class="proportionTitle">营收占比</view>
|
||||
|
||||
<view class="contentPropor">
|
||||
<view class="tabs">
|
||||
<view
|
||||
v-for="(item, index) in propOfRevenList"
|
||||
:key="index"
|
||||
:class="selectTab === item.value ? 'active tabItem' : 'tabItem'"
|
||||
@click="handleSelectTab(item.value)">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="chart">
|
||||
<div v-show="selectTab===1" v-if="regionProgress.length>0">
|
||||
<div>
|
||||
<div class="operation-c-list" v-for="(item,o) in regionProgress" :key="o">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<div class="icon">
|
||||
<image :src="o===0?'https://eshangtech.com/ShopICO/ahyd-BID/index/No1.svg':o===1?'https://eshangtech.com/ShopICO/ahyd-BID/index/No2.svg':o===2?'https://eshangtech.com/ShopICO/ahyd-BID/index/No3.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/No4.svg'"></image>
|
||||
<text>{{o+1}}</text>
|
||||
</div>
|
||||
<p class="name">{{item.name}}</p>
|
||||
</div>
|
||||
<p class="price">{{$util.fmoney(item.value,2)}}</p>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="bar">
|
||||
<div class="progress" :style="{width:item.percentage+'%'}"></div>
|
||||
</div>
|
||||
<p class="number">{{item.percentage+'%'}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="selectTab===2" v-if="areaProgress.length>0">
|
||||
<div>
|
||||
<div class="operation-c-list" v-for="(item,o) in areaProgress" :key="o">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<div class="icon">
|
||||
<image :src="o===0?'https://eshangtech.com/ShopICO/ahyd-BID/index/No1.svg':o===1?'https://eshangtech.com/ShopICO/ahyd-BID/index/No2.svg':o===2?'https://eshangtech.com/ShopICO/ahyd-BID/index/No3.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/No4.svg'"></image>
|
||||
<text>{{o+1}}</text>
|
||||
</div>
|
||||
<p class="name">{{item.name}}</p>
|
||||
</div>
|
||||
<p class="price">{{$util.fmoney(item.value,2)}}</p>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="bar">
|
||||
<div class="progress" :style="{width:item.percentage+'%'}"></div>
|
||||
</div>
|
||||
<p class="number">{{item.percentage+'%'}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 自营计划-->
|
||||
<view class="selfPlan">
|
||||
<view class="selfPlanTitle">自营计划</view>
|
||||
|
||||
<view class="content">
|
||||
<view class="contentItem" style="border-bottom: 2rpx solid #F6F6F7;padding-bottom: 32rpx" >
|
||||
<view class="contentTop">
|
||||
<view class="contentLeft">
|
||||
<image class="dateImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/monthIcon.svg"/>
|
||||
<text class="smallTitle">本月计划</text>
|
||||
</view>
|
||||
<view class="contentRight" @click="handlePlanPageGo('month')">
|
||||
<text class="moreText">查看更多</text>
|
||||
<image class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="contentBottom">
|
||||
<view class="canvaBox">
|
||||
<MonthCharts :success="plan.percentageMonth"/>
|
||||
</view>
|
||||
|
||||
<view class="messageBox">
|
||||
<view class="messageTop">
|
||||
<image class="topIcon" :src="Number(plan.MonthGrowth_Rate)>0?'/static/images/examine/add.svg':Number(plan.MonthGrowth_Rate)<0?'/static/images/examine/reduce.svg':''"/>
|
||||
<text class="messageValue">{{monthAdd}}%</text>
|
||||
<text class="messageDesc">(比计划)</text>
|
||||
</view>
|
||||
|
||||
<view class="messageBottom">
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.RevenueMonth_Amount?plan.RevenueMonth_Amount:'-'}}</view>
|
||||
<view class="itemLabel">已完成<text class="unit">/万元</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.BudgetMonth_Amount?plan.BudgetMonth_Amount:'-'}}</view>
|
||||
<view class="itemLabel">计划<text class="unit">/万元</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.MonthYOY_Rate?plan.MonthYOY_Rate>0?`+${plan.MonthYOY_Rate}%`:`${plan.MonthYOY_Rate}%`:'-'}}</view>
|
||||
<view class="itemLabel">同比</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="contentItem" style="margin-top: 32rpx" >
|
||||
<view class="contentTop">
|
||||
<view class="contentLeft">
|
||||
<image class="dateImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/yearIcon.svg"/>
|
||||
<text class="smallTitle">本年计划</text>
|
||||
</view>
|
||||
<view class="contentRight" @click="handlePlanPageGo('year')">
|
||||
<text class="moreText">查看更多</text>
|
||||
<image class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="contentBottom">
|
||||
<view class="canvaBox">
|
||||
<MonthCharts :success="plan.percentageYear"/>
|
||||
</view>
|
||||
|
||||
<view class="messageBox">
|
||||
<view class="messageTop">
|
||||
<image class="topIcon" :src="Number(yearAdd)>0?'/static/images/examine/add.svg':Number(yearAdd)<0?'/static/images/examine/reduce.svg':''"/>
|
||||
<text class="messageValue">{{yearAdd}}%</text>
|
||||
<text class="messageDesc">(比计划)</text>
|
||||
</view>
|
||||
|
||||
<view class="messageBottom">
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.RevenueYear_Amount?plan.RevenueYear_Amount:'-'}}</view>
|
||||
<view class="itemLabel">已完成<text class="unit">/{{ plan.revenueType==='yi'?'亿元':'万元' }}</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.BudgetYear_Amount?plan.BudgetYear_Amount:'-'}}</view>
|
||||
<view class="itemLabel">计划<text class="unit">/{{ plan.budgetType==='yi'?'亿元':'万元' }}</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.YearYOY_Rate?plan.YearYOY_Rate>0?`+${plan.YearYOY_Rate}%`:`${plan.YearYOY_Rate}%`:'-'}}</view>
|
||||
<view class="itemLabel">同比</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 车流预警-->
|
||||
<view class="carWarning" v-if="special">
|
||||
<div class="carWarningTop">
|
||||
@ -526,159 +684,9 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 自营计划-->
|
||||
<view class="selfPlan">
|
||||
<view class="selfPlanTitle">自营计划</view>
|
||||
|
||||
<view class="content">
|
||||
<view class="contentItem" style="border-bottom: 2rpx solid #F6F6F7;padding-bottom: 32rpx" >
|
||||
<view class="contentTop">
|
||||
<view class="contentLeft">
|
||||
<image class="dateImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/monthIcon.svg"/>
|
||||
<text class="smallTitle">本月计划</text>
|
||||
</view>
|
||||
<view class="contentRight" @click="handlePlanPageGo('month')">
|
||||
<text class="moreText">查看更多</text>
|
||||
<image class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="contentBottom">
|
||||
<view class="canvaBox">
|
||||
<MonthCharts :success="plan.percentageMonth"/>
|
||||
</view>
|
||||
|
||||
<view class="messageBox">
|
||||
<view class="messageTop">
|
||||
<image class="topIcon" :src="Number(plan.MonthGrowth_Rate)>0?'/static/images/examine/add.svg':Number(plan.MonthGrowth_Rate)<0?'/static/images/examine/reduce.svg':''"/>
|
||||
<text class="messageValue">{{monthAdd}}%</text>
|
||||
<text class="messageDesc">(比计划)</text>
|
||||
</view>
|
||||
|
||||
<view class="messageBottom">
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.RevenueMonth_Amount?plan.RevenueMonth_Amount:'-'}}</view>
|
||||
<view class="itemLabel">已完成<text class="unit">/万元</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.BudgetMonth_Amount?plan.BudgetMonth_Amount:'-'}}</view>
|
||||
<view class="itemLabel">计划<text class="unit">/万元</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.MonthYOY_Rate?plan.MonthYOY_Rate>0?`+${plan.MonthYOY_Rate}%`:`${plan.MonthYOY_Rate}%`:'-'}}</view>
|
||||
<view class="itemLabel">同比</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="contentItem" style="margin-top: 32rpx" >
|
||||
<view class="contentTop">
|
||||
<view class="contentLeft">
|
||||
<image class="dateImg" src="https://eshangtech.com/ShopICO/ahyd-BID/newIndex/yearIcon.svg"/>
|
||||
<text class="smallTitle">本年计划</text>
|
||||
</view>
|
||||
<view class="contentRight" @click="handlePlanPageGo('year')">
|
||||
<text class="moreText">查看更多</text>
|
||||
<image class="moreIcon" src="https://eshangtech.com/ShopICO/ahyd-BID/commercial/rightArrow.svg"/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="contentBottom">
|
||||
<view class="canvaBox">
|
||||
<MonthCharts :success="plan.percentageYear"/>
|
||||
</view>
|
||||
|
||||
<view class="messageBox">
|
||||
<view class="messageTop">
|
||||
<image class="topIcon" :src="Number(yearAdd)>0?'/static/images/examine/add.svg':Number(yearAdd)<0?'/static/images/examine/reduce.svg':''"/>
|
||||
<text class="messageValue">{{yearAdd}}%</text>
|
||||
<text class="messageDesc">(比计划)</text>
|
||||
</view>
|
||||
|
||||
<view class="messageBottom">
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.RevenueYear_Amount?plan.RevenueYear_Amount:'-'}}</view>
|
||||
<view class="itemLabel">已完成<text class="unit">/{{ plan.revenueType==='yi'?'亿元':'万元' }}</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.BudgetYear_Amount?plan.BudgetYear_Amount:'-'}}</view>
|
||||
<view class="itemLabel">计划<text class="unit">/{{ plan.budgetType==='yi'?'亿元':'万元' }}</text></view>
|
||||
</view>
|
||||
<view class="bottomItem">
|
||||
<view class="itemValue">{{plan.YearYOY_Rate?plan.YearYOY_Rate>0?`+${plan.YearYOY_Rate}%`:`${plan.YearYOY_Rate}%`:'-'}}</view>
|
||||
<view class="itemLabel">同比</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 营收占比-->
|
||||
<view class="proportion">
|
||||
<view class="proportionTitle">营收占比</view>
|
||||
|
||||
<view class="contentPropor">
|
||||
<view class="tabs">
|
||||
<view
|
||||
v-for="(item, index) in propOfRevenList"
|
||||
:key="index"
|
||||
:class="selectTab === item.value ? 'active tabItem' : 'tabItem'"
|
||||
@click="handleSelectTab(item.value)">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="chart">
|
||||
<div v-show="selectTab===1" v-if="regionProgress.length>0">
|
||||
<div>
|
||||
<div class="operation-c-list" v-for="(item,o) in regionProgress" :key="o">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<div class="icon">
|
||||
<image :src="o===0?'https://eshangtech.com/ShopICO/ahyd-BID/index/No1.svg':o===1?'https://eshangtech.com/ShopICO/ahyd-BID/index/No2.svg':o===2?'https://eshangtech.com/ShopICO/ahyd-BID/index/No3.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/No4.svg'"></image>
|
||||
<text>{{o+1}}</text>
|
||||
</div>
|
||||
<p class="name">{{item.name}}</p>
|
||||
</div>
|
||||
<p class="price">{{$util.fmoney(item.value,2)}}</p>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="bar">
|
||||
<div class="progress" :style="{width:item.percentage+'%'}"></div>
|
||||
</div>
|
||||
<p class="number">{{item.percentage+'%'}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="selectTab===2" v-if="areaProgress.length>0">
|
||||
<div>
|
||||
<div class="operation-c-list" v-for="(item,o) in areaProgress" :key="o">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<div class="icon">
|
||||
<image :src="o===0?'https://eshangtech.com/ShopICO/ahyd-BID/index/No1.svg':o===1?'https://eshangtech.com/ShopICO/ahyd-BID/index/No2.svg':o===2?'https://eshangtech.com/ShopICO/ahyd-BID/index/No3.svg':'https://eshangtech.com/ShopICO/ahyd-BID/index/No4.svg'"></image>
|
||||
<text>{{o+1}}</text>
|
||||
</div>
|
||||
<p class="name">{{item.name}}</p>
|
||||
</div>
|
||||
<p class="price">{{$util.fmoney(item.value,2)}}</p>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="bar">
|
||||
<div class="progress" :style="{width:item.percentage+'%'}"></div>
|
||||
</div>
|
||||
<p class="number">{{item.percentage+'%'}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
@ -1756,7 +1764,7 @@ export default {
|
||||
this.dailyExamineObj = null
|
||||
this.monthAdd = null
|
||||
|
||||
// 阻止调用swiper的滚动
|
||||
// 阻止调用swiper的滚动 防止切换时间调了一次方法 swiper移动又会自动调用接口的问题
|
||||
this.stopSwiper = true
|
||||
let isOnRefresh = false
|
||||
const date = new Date(e.detail.value)
|
||||
@ -1940,20 +1948,13 @@ $iphoneHeight: env(safe-area-inset-bottom);
|
||||
}
|
||||
.header {
|
||||
width: 100%;
|
||||
background: linear-gradient(315deg, #FF8670 0%, #FFDCA8 100%);
|
||||
//background: linear-gradient(315deg, #FF8670 0%, #FFDCA8 100%);
|
||||
box-sizing: border-box;
|
||||
padding: 0 16px;
|
||||
position: relative;
|
||||
//.headerBg {
|
||||
// width: 100%;
|
||||
// height: 100%;
|
||||
// position: absolute;
|
||||
// left: 0;
|
||||
// top: 0;
|
||||
//}
|
||||
//padding: 0 16px;
|
||||
//position: relative;
|
||||
.headerTop{
|
||||
width: 100%;
|
||||
background: linear-gradient(315deg, #FFAF95 0%, #FFD6A6 100%);
|
||||
//background: linear-gradient(315deg, #FFAF95 0%, #FFD6A6 100%);
|
||||
position: fixed;
|
||||
top: 0;left:0;
|
||||
box-sizing: border-box;
|
||||
@ -1999,7 +2000,9 @@ $iphoneHeight: env(safe-area-inset-bottom);
|
||||
|
||||
.storeDetail{
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
margin-top: 16rpx;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: 64rpx;
|
||||
.storeName{
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
|
||||
@ -361,7 +361,8 @@ export default {
|
||||
useInfo:{},
|
||||
sortType:'sequence',// reverse倒序 sequence正序
|
||||
dailyServiceList:[],// 整改显示的列表
|
||||
dailyAllList:[] // 整改的全部列表
|
||||
dailyAllList:[], // 整改的全部列表
|
||||
dailyFlag:true,// 是否能调用巡检方法
|
||||
}
|
||||
},
|
||||
onLoad(query){
|
||||
@ -475,6 +476,7 @@ export default {
|
||||
},
|
||||
// 拿到考核和巡检上面的详情
|
||||
handleGetDailyPatrol(){
|
||||
|
||||
const req = {
|
||||
StartDate:this.singleDay,
|
||||
EndDate:this.singleDay,
|
||||
@ -557,6 +559,7 @@ export default {
|
||||
},
|
||||
// 拿到巡检的列表数据
|
||||
handleNewGetPatrol(){
|
||||
|
||||
const req = {
|
||||
StartDate:this.singleDay,
|
||||
EndDate:this.singleDay,
|
||||
@ -617,16 +620,14 @@ export default {
|
||||
this.handleNewGetPatrol()
|
||||
}
|
||||
},
|
||||
// 增加日期
|
||||
// 增加减少日期
|
||||
handleAddDate(type){
|
||||
this.selectContentTab = 1
|
||||
const nowDate = new Date(this.lastDay)
|
||||
let nowMonth = nowDate.getMonth() + 1
|
||||
let nowDay = nowDate.getDate()
|
||||
this.rate = null
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
})
|
||||
|
||||
// 先判断是加 还是 减 再判断是哪个选项卡下面的 再调用方法
|
||||
// 1 是减 2是加
|
||||
if (type===1){
|
||||
@ -641,6 +642,9 @@ export default {
|
||||
}
|
||||
this.single = `${y}-${m}`
|
||||
}
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
})
|
||||
// 获取月度考核数据
|
||||
this.handleGetExamine()
|
||||
this.handleNewGetExamine()
|
||||
@ -667,6 +671,9 @@ export default {
|
||||
}
|
||||
this.singleDay = `${y}-${m}-${d}`
|
||||
}
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
})
|
||||
// 拿到顶部的巡检数据
|
||||
this.handleGetDailyPatrol()
|
||||
this.handleNewGetPatrol()
|
||||
@ -685,17 +692,17 @@ export default {
|
||||
}
|
||||
this.single = `${y}-${m}`
|
||||
// 获取月度考核数据
|
||||
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
})
|
||||
this.handleGetExamine()
|
||||
this.handleNewGetExamine()
|
||||
}else if(this.selectTab===2){
|
||||
const date = new Date(this.singleDay)
|
||||
let y = date.getFullYear()
|
||||
let m = date.getMonth() + 1
|
||||
|
||||
let d = date.getDate() + 1
|
||||
if (nowMonth===m && d>nowDay){
|
||||
return
|
||||
if (nowMonth===m && d>nowDay+1){
|
||||
}else{
|
||||
if (nowMonth>m){
|
||||
let allDay = this.$util.getThisMonthDay(`${y}-${m<10?'0'+m:m}`)
|
||||
@ -709,10 +716,14 @@ export default {
|
||||
}else{
|
||||
this.singleDay = `${y}-${m<10?'0'+m:m}-${d<10?'0'+d:d}`
|
||||
}
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
})
|
||||
// 拿到顶部的巡检数据
|
||||
this.handleGetDailyPatrol()
|
||||
this.handleNewGetPatrol()
|
||||
}
|
||||
// 拿到顶部的巡检数据
|
||||
this.handleGetDailyPatrol()
|
||||
this.handleNewGetPatrol()
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -857,7 +868,7 @@ export default {
|
||||
}
|
||||
.tabBox{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
width: calc(100% - 64rpx);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.tabItem{
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<view class="main">
|
||||
<image v-if="preferPath" style="width: 128rpx;height: 128rpx" :src="preferPath"></image>
|
||||
<canvas v-else class="month" canvas-id="month" id="month"/>
|
||||
<image v-if="preferPath" style="width: 136rpx;height: 136rpx" :src="preferPath"></image>
|
||||
<canvas v-else style="width: 136rpx;height: 136rpx" class="month" canvas-id="month" id="month"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -85,27 +85,26 @@ export default {
|
||||
}
|
||||
});
|
||||
setTimeout( ()=>{
|
||||
_this.canvasToTempImage('month')
|
||||
},500)
|
||||
this.canvasToTempImage('month')
|
||||
},100)
|
||||
},
|
||||
canvasToTempImage(id){
|
||||
let _this = this
|
||||
uni.canvasToTempFilePath({
|
||||
canvasId:id,
|
||||
complete:(res)=>{
|
||||
console.log('res',res)
|
||||
console.log('res2',res)
|
||||
if (res.tempFilePath){
|
||||
uni.getFileSystemManager().readFile({
|
||||
filePath: res.tempFilePath,
|
||||
encoding: 'base64',
|
||||
success: res => {
|
||||
let base64 = 'data:image/png;base64,' + res.data;
|
||||
_this.preferPath = base64
|
||||
this.preferPath = base64
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},_this)
|
||||
},this)
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -115,9 +114,5 @@ export default {
|
||||
.main{
|
||||
width: 128rpx;
|
||||
height: 128rpx;
|
||||
.month{
|
||||
width: 128rpx;
|
||||
height: 128rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<view style="width: 68rpx;height: 68rpx">
|
||||
<image v-if="preferPath" style="width: 68rpx;height: 68rpx" :src="preferPath"></image>
|
||||
<canvas v-else style="width: 68rpx;height: 68rpx" canvas-id="month" id="month"/>
|
||||
<canvas v-else style="width: 68rpx;height: 68rpx" class="month" canvas-id="month" id="month"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -76,32 +76,38 @@ export default {
|
||||
}
|
||||
});
|
||||
setTimeout( ()=>{
|
||||
console.log('变成图片')
|
||||
_this.canvasToTempImage('month')
|
||||
},500)
|
||||
this.canvasToTempImage('month')
|
||||
},100)
|
||||
},
|
||||
canvasToTempImage(id){
|
||||
let _this = this
|
||||
uni.canvasToTempFilePath({
|
||||
canvasId:id,
|
||||
complete:(res)=>{
|
||||
console.log('res1',res)
|
||||
if (res.tempFilePath){
|
||||
uni.getFileSystemManager().readFile({
|
||||
filePath: res.tempFilePath,
|
||||
encoding: 'base64',
|
||||
success: res => {
|
||||
let base64 = 'data:image/png;base64,' + res.data;
|
||||
_this.preferPath = base64
|
||||
console.log('this.preferPath',_this.preferPath)
|
||||
this.preferPath = base64
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},_this)
|
||||
},this)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.main{
|
||||
width: 68rpx;
|
||||
height: 68rpx;
|
||||
.month{
|
||||
width: 68rpx;
|
||||
height: 68rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<view class="main">
|
||||
<!-- 当蒙层框里面的if判断中的任意一个参数变为true 就表示有悬浮框产生 然后生成一层最上面的蒙层 让它可以点击任意位置关闭悬浮框 -->
|
||||
<view class="meng" v-if="showCost || showPay|| showMonthRevenue|| showMonthExpenditure|| successRate|| thisYearSum|| nowYearSumRate|| showNetProfit|| budget|| showYearNetProfit|| revenueAll|| revenueSuccess|| revenueCostRate|| nowYearSum|| budgetSum|| incomeSuccess|| nowYearBudget|| nowYearRevenueCost|| compareYesSuccessRate|| userRevenueSmallSum|| thisMonthSum|| thisMonthRevenueRate|| thisMonthSmallSumSuccess1st|| thisMonthSmallSumSuccess2st|| thisMonthSmallSumSuccess2stTitle|| otherSmallSum"
|
||||
@click="handleShowNotice('false')"></view>
|
||||
<view class="meng" v-if="otherLeftChar || otherMonthSum ||otherThisMonthRate ||otherThisMonthSuccess || serviceSmallSum" @click="handleShowNotice2('false')"></view>
|
||||
@ -16,7 +17,7 @@
|
||||
</view>
|
||||
<view :style="{width: '100%',height:(menu.top + menu.height) + 'px'}"></view>
|
||||
<!-- :style="{top: (menu.bottom+18) +'px'}"-->
|
||||
<view class="pageTitle" >收支预测</view>
|
||||
<view class="pageTitle">财务营收报表</view>
|
||||
|
||||
<view class="headerDetail" :style="{top: (menu.bottom+68) +'px'}">
|
||||
<view class="detailBox">
|
||||
@ -24,7 +25,14 @@
|
||||
|
||||
<view class="detailPage">
|
||||
<text class="detailPageTitle">7月累计收支比例</text>
|
||||
|
||||
<view class="notice" @click="handleShowNotice('showCost')">?
|
||||
<view class="noticeBox" :style="{left:'10%'}" v-if="showCost" @click.stop="handleShowNotice('showCost')">
|
||||
<view>成本比:本月成本 / 本月收入</view>
|
||||
<view>本月收入:营业收入 + 营业外收入</view>
|
||||
<view>收支比:本月成本 / 本月支出</view>
|
||||
<view>本月支出=管理费用 + 销售费用 + 财务费用 + 营业外支出</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="moneyBox">
|
||||
@ -37,11 +45,11 @@
|
||||
<text class="itemRate">39.39%</text>
|
||||
<view class="itemLabel">
|
||||
成本比
|
||||
<view class="notice" @click="handleShowNotice('showCost')">?
|
||||
<view class="noticeBox" :style="{left:0,zIndex:9}" v-if="showCost" @click.stop="handleShowNotice('showCost')">
|
||||
<text>成本比:本月成本 / 本月收入</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showCost')">?-->
|
||||
<!-- <view class="noticeBox" :style="{left:0,zIndex:9}" v-if="showCost" @click.stop="handleShowNotice('showCost')">-->
|
||||
<!-- <text>成本比:本月成本 / 本月收入</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -50,11 +58,11 @@
|
||||
<text class="successNumber">7,099.41</text>
|
||||
<view class="successTime">本月收入
|
||||
<text class="successUnit">/万元</text>
|
||||
<view class="notice" @click="handleShowNotice('showMonthRevenue')">?
|
||||
<view class="noticeBox" v-if="showMonthRevenue" @click.stop="handleShowNotice('showMonthRevenue')">
|
||||
<text>本月收入:营业收入 + 营业外收入</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showMonthRevenue')">?-->
|
||||
<!-- <view class="noticeBox" v-if="showMonthRevenue" @click.stop="handleShowNotice('showMonthRevenue')">-->
|
||||
<!-- <text>本月收入:营业收入 + 营业外收入</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
<view class="successBoxItem" style="margin-top: 12rpx">
|
||||
@ -74,11 +82,11 @@
|
||||
<text class="itemRate">167.27%</text>
|
||||
<view class="itemLabel">
|
||||
收支比
|
||||
<view class="notice" @click="handleShowNotice('showPay')">?
|
||||
<view class="noticeBox" :style="{right: 0}" v-if="showPay" @click.stop="handleShowNotice('showPay')">
|
||||
<text>收支比:本月成本 / 本月支出</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showPay')">?-->
|
||||
<!-- <view class="noticeBox" :style="{right: 0}" v-if="showPay" @click.stop="handleShowNotice('showPay')">-->
|
||||
<!-- <text>收支比:本月成本 / 本月支出</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -88,12 +96,12 @@
|
||||
<view class="successTime">
|
||||
本月支出
|
||||
<text class="successUnit">/万元</text>
|
||||
<view class="notice" @click="handleShowNotice('showMonthExpenditure')">?
|
||||
<view class="noticeBox" v-if="showMonthExpenditure"
|
||||
@click.stop="handleShowNotice('showMonthExpenditure')">
|
||||
<text>本月支出=管理费用 + 销售费用 + 财务费用 + 营业外支出</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showMonthExpenditure')">?-->
|
||||
<!-- <view class="noticeBox" v-if="showMonthExpenditure"-->
|
||||
<!-- @click.stop="handleShowNotice('showMonthExpenditure')">-->
|
||||
<!-- <text>本月支出=管理费用 + 销售费用 + 财务费用 + 营业外支出</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
|
||||
</view>
|
||||
@ -111,17 +119,28 @@
|
||||
<view class="content">
|
||||
<view class="profitYear">
|
||||
<view class="itemBox">
|
||||
<view class="itemBoxTitle">2023年度累计利润</view>
|
||||
<view style="display: flex;align-items: center">
|
||||
<view class="itemBoxTitle">2023年度累计利润</view>
|
||||
<view class="notice" @click="handleShowNotice('successRate')">?
|
||||
<view class="noticeBox" :style="{left:'10%',top:'15px'}" v-if="successRate" @click.stop="handleShowNotice('successRate')">
|
||||
<view>利润总额完成率=本年累计/年度预算<br/>(389.00/275.00)</view>
|
||||
<view>本年累计:本年度利润总额的累计数</view>
|
||||
<view>年度预算:本年度利润总额的预算数</view>
|
||||
<view>净利润预算:本年度净利润的预算数</view>
|
||||
<view>净利润完成度=本年净利润/净利润预算<br/>(292.00/156.00)</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<image class="monthSumBg" src="https://eshangtech.com/ShopICO/ahyd-BID/revenueBox/yearSum.png"/>
|
||||
<view class="itemDetailBox">
|
||||
<view class="detailBoxTop">
|
||||
<view class="successLabel">
|
||||
<text class="successLabelText"></text>完成率
|
||||
<view class="notice" @click="handleShowNotice('successRate')">?
|
||||
<view class="noticeBox" v-if="successRate" @click.stop="handleShowNotice('successRate')">
|
||||
<text>完成率=本年累计/年度预算(389.00/275.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('successRate')">?-->
|
||||
<!-- <view class="noticeBox" v-if="successRate" @click.stop="handleShowNotice('successRate')">-->
|
||||
<!-- <text>完成率=本年累计/年度预算<br/>(389.00/275.00)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<text class="successValue">{{secondBoxProgress + '%'}}</text>
|
||||
</view>
|
||||
@ -134,11 +153,11 @@
|
||||
<view class="yearItem">
|
||||
<view class="itemValue">
|
||||
389.00
|
||||
<view class="notice" @click="handleShowNotice('thisYearSum')">?
|
||||
<view class="noticeBox" v-if="thisYearSum" @click.stop="handleShowNotice('thisYearSum')">
|
||||
<text>本年度利润总额的累计数</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('thisYearSum')">?-->
|
||||
<!-- <view class="noticeBox" style="top: 40px;left: 0" v-if="thisYearSum" @click.stop="handleShowNotice('thisYearSum')">-->
|
||||
<!-- <text>本年度利润总额的累计数</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<text class="itemLabel">本年累计<text class="itemUnit">/万元</text></text>
|
||||
</view>
|
||||
@ -146,12 +165,12 @@
|
||||
<view class="yearItem">
|
||||
<view class="itemValue">
|
||||
275.00
|
||||
<view class="notice" @click="handleShowNotice('budget')">?
|
||||
<view class="noticeBox" :style="{ left: 'calc(33.3% + 30px)', top: '40px' }" v-if="budget"
|
||||
@click.stop="handleShowNotice('budget')">
|
||||
<text>本年度利润总额的预算数</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('budget')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ left: 'calc(33.3% + 30px)', top: '40px' }" v-if="budget"-->
|
||||
<!-- @click.stop="handleShowNotice('budget')">-->
|
||||
<!-- <text>本年度利润总额的预算数</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<text class="itemLabel">年度预算<text class="itemUnit">/万元</text></text>
|
||||
</view>
|
||||
@ -170,12 +189,12 @@
|
||||
<view class="yearItem">
|
||||
<view class="itemValue">
|
||||
156.00
|
||||
<view class="notice" @click="handleShowNotice('showNetProfit')">?
|
||||
<view class="noticeBox" :style="{ left: 'calc(33.3% + 30px)', top: '115px' }" v-if="showNetProfit"
|
||||
@click.stop="handleShowNotice('showNetProfit')">
|
||||
<text>本年度净利润的预算数</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showNetProfit')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ left: 'calc(33.3% + 30px)', top: '115px' }" v-if="showNetProfit"-->
|
||||
<!-- @click.stop="handleShowNotice('showNetProfit')">-->
|
||||
<!-- <text>本年度净利润的预算数</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<text class="itemLabel">净利润预算<text class="itemUnit">/万元</text></text>
|
||||
</view>
|
||||
@ -184,12 +203,12 @@
|
||||
<view class="itemValue" style="color: #E83944">187.18%</view>
|
||||
<view class="itemLabel" style="display: flex;align-items: center">
|
||||
完成度
|
||||
<view class="notice" @click="handleShowNotice('showYearNetProfit')">?
|
||||
<view class="noticeBox" :style="{ left: 'calc(33.3% + 30px)', top: '115px' }" v-if="showYearNetProfit"
|
||||
@click.stop="handleShowNotice('showYearNetProfit')">
|
||||
<text>完成度=本年净利润/净利润预算(292.00/156.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('showYearNetProfit')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0', top: '115px' }" v-if="showYearNetProfit"-->
|
||||
<!-- @click.stop="handleShowNotice('showYearNetProfit')">-->
|
||||
<!-- <view>完成度=本年净利润/净利润预算<br/>(292.00/156.00)</view>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -202,24 +221,28 @@
|
||||
<view style="width:100%;display: flex;align-items: center">
|
||||
<view class="itemBoxTitle">2023年营收累计</view>
|
||||
<view class="notice" @click="handleShowNotice('revenueAll')">?
|
||||
<view class="noticeBox" :style="{ left: '50%', top: '0px' }" v-if="revenueAll"
|
||||
<view class="noticeBox" :style="{ left: '10%', top: '15px' }" v-if="revenueAll"
|
||||
@click.stop="handleShowNotice('revenueAll')">
|
||||
<text>不包含营业外收入</text>
|
||||
<view>不包含营业外收入</view>
|
||||
<view>完成率=本年累计 / 年度预算<br/>(472,356,021.71/725,370,000.00)</view>
|
||||
<view>成本比=本年成本/本年累计收入<br/>(180,563,832.50/472,356,021.71)</view>
|
||||
<view>年度预算同比:本年累计营收的同比值</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<image class="monthSumBg" src="https://eshangtech.com/ShopICO/ahyd-BID/revenueBox/yearRevenue.png" />
|
||||
<view class="itemDetailBox">
|
||||
<view class="leftCharts" @click="handleShowNotice('revenueSuccess')">
|
||||
<!-- @click="handleShowNotice('revenueSuccess')"-->
|
||||
<view class="leftCharts" >
|
||||
<OtherCharts :success="thirdBoxRate" :colorList="['#9E3CE9', '#ECD8FB']" />
|
||||
<text class="numberValue">65.12%</text>
|
||||
</view>
|
||||
<view class="notices">
|
||||
<view class="noticeBox" :style="{ left: '0px', top: '50%' }" v-if="revenueSuccess"
|
||||
@click.stop="handleShowNotice('revenueSuccess')">
|
||||
<text>完成率=本年累计 / 年度预算(472,356,021.71/725,370,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notices">-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '0px', top: '50%' }" v-if="revenueSuccess"-->
|
||||
<!-- @click.stop="handleShowNotice('revenueSuccess')">-->
|
||||
<!-- <text>完成率=本年累计 / 年度预算(472,356,021.71/725,370,000.00)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
<view class="rightBox">
|
||||
<view class="rightBoxTop">
|
||||
<view class="itemTop">
|
||||
@ -230,12 +253,12 @@
|
||||
<view class="addRate">38.23%</view>
|
||||
<view class="rateText" style="display: flex;align-items: center">
|
||||
成本比
|
||||
<view class="notice" @click="handleShowNotice('revenueCostRate')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '30%' }" v-if="revenueCostRate"
|
||||
@click.stop="handleShowNotice('revenueCostRate')">
|
||||
<text>成本比=本年成本/本年累计收入(180,563,832.50/472,356,021.71)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('revenueCostRate')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '30%' }" v-if="revenueCostRate"-->
|
||||
<!-- @click.stop="handleShowNotice('revenueCostRate')">-->
|
||||
<!-- <text>成本比=本年成本/本年累计收入(180,563,832.50/472,356,021.71)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -248,12 +271,12 @@
|
||||
<view class="addRate">+47.81%</view>
|
||||
<view class="rateText" style="display: flex;align-items: center">
|
||||
同比
|
||||
<view class="notice" @click="handleShowNotice('budgetSum')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '80%' }" v-if="budgetSum"
|
||||
@click.stop="handleShowNotice('budgetSum')">
|
||||
<text>本年累计营收的同比值</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('budgetSum')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '80%' }" v-if="budgetSum"-->
|
||||
<!-- @click.stop="handleShowNotice('budgetSum')">-->
|
||||
<!-- <text>本年累计营收的同比值</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -267,23 +290,28 @@
|
||||
<view style="width:100%;display: flex;align-items: center">
|
||||
<view class="itemBoxTitle" style="color: #EC6C00">2023年收入合计</view>
|
||||
<view class="notice" @click="handleShowNotice('nowYearSum')">?
|
||||
<view class="noticeBox" :style="{ left: '33%', top: '20px' }" v-if="nowYearSum"
|
||||
<view class="noticeBox" :style="{ left: '10%', top: '20px' }" v-if="nowYearSum"
|
||||
@click.stop="handleShowNotice('nowYearSum')">
|
||||
<text>包含营业外收入</text>
|
||||
<view>包含营业外收入</view>
|
||||
<view>完成率=本年累计 / 年度预算<br/>(473,766,021.71/726,870,000.00)</view>
|
||||
<view>成本比=本年累计成本/本年累计收入<br/>(180,563,832.50/473,766,021.71)</view>
|
||||
<view>年度预算:年度预算包含营业外</view>
|
||||
<view>年度预算同比: 本年累计收入的同比值</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<image class="monthSumBg" src="https://eshangtech.com/ShopICO/ahyd-BID/revenueBox/allInCome.png" />
|
||||
<view class="itemDetailBox">
|
||||
<view class="leftCharts" @click="handleShowNotice('incomeSuccess')">
|
||||
<!-- @click="handleShowNotice('incomeSuccess')"-->
|
||||
<view class="leftCharts" >
|
||||
<OtherCharts :success="firthBox1stRate" :colorList="['#FC7909', '#FEE4CE']" />
|
||||
<text class="numberValue" style="color: #FE7500">65.18%</text>
|
||||
<view class="notices">
|
||||
<view class="noticeBox" :style="{ left: '0px', top: '50%' }" v-if="incomeSuccess"
|
||||
@click.stop="handleShowNotice('incomeSuccess')">
|
||||
<text>完成率=本年累计 / 年度预算(473,766,021.71/726,870,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notices">-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '0px', top: '50%' }" v-if="incomeSuccess"-->
|
||||
<!-- @click.stop="handleShowNotice('incomeSuccess')">-->
|
||||
<!-- <text>完成率=本年累计 / 年度预算(473,766,021.71/726,870,000.00)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<view class="rightBox">
|
||||
<view class="rightBoxTop">
|
||||
@ -299,12 +327,12 @@
|
||||
<view class="addRate">38.11%</view>
|
||||
<view class="rateText" style="display: flex;align-items: center">
|
||||
成本比
|
||||
<view class="notice" @click="handleShowNotice('nowYearRevenueCost')">?
|
||||
<view class="noticeBox" :style="{ right: '0', top: '20px' }" v-if="nowYearRevenueCost"
|
||||
@click.stop="handleShowNotice('nowYearRevenueCost')">
|
||||
<text>成本比=本年累计成本/本年累计收入(180,563,832.50/473,766,021.71)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('nowYearRevenueCost')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0', top: '20px' }" v-if="nowYearRevenueCost"-->
|
||||
<!-- @click.stop="handleShowNotice('nowYearRevenueCost')">-->
|
||||
<!-- <text>成本比=本年累计成本/本年累计收入(180,563,832.50/473,766,021.71)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -314,24 +342,24 @@
|
||||
<view class="itemTopTitle" style="display: flex;align-items: center">
|
||||
年度预算
|
||||
<text class="itemTopUnit">/万元</text>
|
||||
<view class="notice" @click="handleShowNotice('nowYearBudget')">?
|
||||
<view class="noticeBox" :style="{ left: '33%', top: '80%' }" v-if="nowYearBudget"
|
||||
@click.stop="handleShowNotice('nowYearBudget')">
|
||||
<text>年度预算包含营业外</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('nowYearBudget')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '33%', top: '80%' }" v-if="nowYearBudget"-->
|
||||
<!-- @click.stop="handleShowNotice('nowYearBudget')">-->
|
||||
<!-- <text>年度预算包含营业外</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
<view class="itemRateBox">
|
||||
<view class="addRate">+48.54%</view>
|
||||
<view class="rateText" style="display: flex;align-items: center">
|
||||
同比
|
||||
<view class="notice" @click="handleShowNotice('nowYearSumRate')">?
|
||||
<view class="noticeBox" :style="{ right: '0%', top: '80%' }" v-if="nowYearSumRate"
|
||||
@click.stop="handleShowNotice('nowYearSumRate')">
|
||||
<text>本年累计收入的同比值</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('nowYearSumRate')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0%', top: '80%' }" v-if="nowYearSumRate"-->
|
||||
<!-- @click.stop="handleShowNotice('nowYearSumRate')">-->
|
||||
<!-- <text>本年累计收入的同比值</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -349,9 +377,14 @@
|
||||
<view style="display: flex;align-items: center">
|
||||
<view class="smallTitle">自营收入小计</view>
|
||||
<view class="notice" @click="handleShowNotice('userRevenueSmallSum')">?
|
||||
<view class="noticeBox" :style="{ left: '30%', top: '0%' }" v-if="userRevenueSmallSum"
|
||||
<view class="noticeBox" :style="{ left: '10%', top: '20px' }" v-if="userRevenueSmallSum"
|
||||
@click.stop="handleShowNotice('userRevenueSmallSum')">
|
||||
<text>便利店、餐饮及客房的累计数</text>
|
||||
<view>便利店、餐饮及客房的累计数</view>
|
||||
<view>完成率=本年累计自营收入 / 自营收入的年度预算<br/>(339,787,552.17/473,920,000.00)</view>
|
||||
<view>本月占比=7月自营收入 / 本年累计自营收入(50,708,267.25/339,787,552.17)</view>
|
||||
<view>服务区自营小计:完成率=服务区自营收入 / 自营收入的年度预算<br/>(304,283,297.04/473,920,000.00)</view>
|
||||
<view>服务区自营小计:城市店、批发团购及通道费的累计数</view>
|
||||
<view>分公司收入小计:完成率=分公司收入 / 自营收入的年度预算<br/>(35,504,255.13/473,920,000.00)</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -363,15 +396,16 @@
|
||||
</view>
|
||||
|
||||
<view class="itemSmallDetail">
|
||||
<view class="itemSmallLeftBox" @click="handleShowNotice('compareYesSuccessRate')">
|
||||
<view class="itemSmallLeftBox" >
|
||||
<!-- @click="handleShowNotice('compareYesSuccessRate')"-->
|
||||
<OtherCharts :success="firthBox2stRate" :colorList="['#FC7909', '#F9DCC2']" />
|
||||
<text class="leftValue">71.70%</text>
|
||||
<view class="notices">
|
||||
<view class="noticeBox" :style="{ left: '30%', top: '100px' }" v-if="compareYesSuccessRate"
|
||||
@click.stop="handleShowNotice('compareYesSuccessRate')">
|
||||
<text>完成率=本年累计自营收入 / 自营收入的年度预算(339,787,552.17/473,920,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notices">-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '30%', top: '100px' }" v-if="compareYesSuccessRate"-->
|
||||
<!-- @click.stop="handleShowNotice('compareYesSuccessRate')">-->
|
||||
<!-- <text>完成率=本年累计自营收入 / 自营收入的年度预算(339,787,552.17/473,920,000.00)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<view class="itemSmallRightBox">
|
||||
<view class="rightTopItem">
|
||||
@ -392,7 +426,6 @@
|
||||
<view class="detailTitle">
|
||||
7月累计
|
||||
<text class="detailTitleUnit">/万元</text>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -405,12 +438,12 @@
|
||||
<view class="rightValue">14.92%</view>
|
||||
<view class="rightLabel" style="display: flex;align-items: center">
|
||||
本月占比
|
||||
<view class="notice" @click="handleShowNotice('thisMonthRevenueRate')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '120px' }" v-if="thisMonthRevenueRate"
|
||||
@click.stop="handleShowNotice('thisMonthRevenueRate')">
|
||||
<text>本月占比=7月自营收入 / 本年累计自营收入(50,708,267.25/339,787,552.17)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('thisMonthRevenueRate')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '120px' }" v-if="thisMonthRevenueRate"-->
|
||||
<!-- @click.stop="handleShowNotice('thisMonthRevenueRate')">-->
|
||||
<!-- <text>本月占比=7月自营收入 / 本年累计自营收入(50,708,267.25/339,787,552.17)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -427,12 +460,12 @@
|
||||
<view class="smallSumRight" style="display: flex;align-items: center">
|
||||
<text class="successText" style="margin-left: 4rpx">完成率</text>
|
||||
<text class="successValue">64.21%</text>
|
||||
<view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess1st')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '190px' }" v-if="thisMonthSmallSumSuccess1st"
|
||||
@click.stop="handleShowNotice('thisMonthSmallSumSuccess1st')">
|
||||
<text>完成率=服务区自营收入 / 自营收入的年度预算(304,283,297.04/473,920,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess1st')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '190px' }" v-if="thisMonthSmallSumSuccess1st"-->
|
||||
<!-- @click.stop="handleShowNotice('thisMonthSmallSumSuccess1st')">-->
|
||||
<!-- <view>完成率=服务区自营收入 / 自营收入的年度预算<br/>(304,283,297.04/473,920,000.00)</view>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -440,24 +473,24 @@
|
||||
<view class="smallSumLeft" style="display: flex;align-items: center">
|
||||
<view class="smallSumItemBox"></view>
|
||||
<text class="smallTitle">分公司收入小计</text>
|
||||
<view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess2stTitle')">?
|
||||
<view class="noticeBox" :style="{ left: '0px', top: '210px' }"
|
||||
v-if="thisMonthSmallSumSuccess2stTitle"
|
||||
@click.stop="handleShowNotice('thisMonthSmallSumSuccess2stTitle')">
|
||||
<text>城市店、批发团购及通道费的累计数</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess2stTitle')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '0px', top: '210px' }"-->
|
||||
<!-- v-if="thisMonthSmallSumSuccess2stTitle"-->
|
||||
<!-- @click.stop="handleShowNotice('thisMonthSmallSumSuccess2stTitle')">-->
|
||||
<!-- <text>城市店、批发团购及通道费的累计数</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
|
||||
<view class="smallSumRight" style="display: flex;align-items: center">
|
||||
<text class="successText" style="margin-left: 4rpx">完成率</text>
|
||||
<text class="successValue">7.49%</text>
|
||||
<view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess2st')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '210px' }" v-if="thisMonthSmallSumSuccess2st"
|
||||
@click.stop="handleShowNotice('thisMonthSmallSumSuccess2st')">
|
||||
<text>完成率=分公司收入 / 自营收入的年度预算(35,504,255.13/473,920,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice('thisMonthSmallSumSuccess2st')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '210px' }" v-if="thisMonthSmallSumSuccess2st"-->
|
||||
<!-- @click.stop="handleShowNotice('thisMonthSmallSumSuccess2st')">-->
|
||||
<!-- <view>完成率=分公司收入 / 自营收入的年度预算<br/>(35,504,255.13/473,920,000.00)</view>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -471,9 +504,13 @@
|
||||
</view>
|
||||
<view class="smallTitle">其他收入小计</view>
|
||||
<view class="notice" @click="handleShowNotice('otherSmallSum')">?
|
||||
<view class="noticeBox" :style="{ left: '30%', top: '20px' }" v-if="otherSmallSum"
|
||||
<view class="noticeBox" :style="{ left: '10%', top: '20px' }" v-if="otherSmallSum"
|
||||
@click.stop="handleShowNotice('otherSmallSum')">
|
||||
<text>场地租赁、物业及受托代管、公共服务补贴、营业外收入的累计数</text>
|
||||
<view>场地租赁、物业及受托代管、公共服务补贴、营业外收入的累计数</view>
|
||||
<view>完成率=7月其他收入 / 其他收入的年度预算(133,978,469.54/252,950,000.00)</view>
|
||||
<view>本月占比=7月其他收入 / 本年累计其他收入(20,285,867.69/133,978,469.54)</view>
|
||||
<view>服务区租赁小计:商铺、充电桩、汽修、加油站的租赁累计收入</view>
|
||||
<view>服务区租赁小计完成率=服务区租赁累计收入 / 本年累计其他收入<br/>(91,051,247.82/252,950,000.00)</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -484,15 +521,16 @@
|
||||
</view>
|
||||
|
||||
<view class="itemSmallDetail">
|
||||
<view class="itemSmallLeftBox" @click="handleShowNotice2('otherLeftChar')">
|
||||
<!-- @click="handleShowNotice2('otherLeftChar')"-->
|
||||
<view class="itemSmallLeftBox" >
|
||||
<OtherCharts :success="firthBox3stRate" :colorList="['#FC7909', '#F9DCC2']" />
|
||||
<text class="leftValue">52.97%</text>
|
||||
<view class="notices">
|
||||
<view class="noticeBox" :style="{ left: '30%', top: '100px' }" v-if="otherLeftChar"
|
||||
@click.stop="handleShowNotice2('otherLeftChar')">
|
||||
<text>完成率=7月其他收入 / 其他收入的年度预算(133,978,469.54/252,950,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notices">-->
|
||||
<!-- <view class="noticeBox" :style="{ left: '30%', top: '100px' }" v-if="otherLeftChar"-->
|
||||
<!-- @click.stop="handleShowNotice2('otherLeftChar')">-->
|
||||
<!-- <text>完成率=7月其他收入 / 其他收入的年度预算(133,978,469.54/252,950,000.00)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
<view class="itemSmallRightBox">
|
||||
<view class="rightTopItem">
|
||||
@ -516,12 +554,12 @@
|
||||
<view class="rightValue">15.14%</view>
|
||||
<view class="rightLabel" style="display: flex;align-items: center">
|
||||
本月占比
|
||||
<view class="notice" @click="handleShowNotice2('otherThisMonthRate')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '120px' }" v-if="otherThisMonthRate"
|
||||
@click.stop="handleShowNotice2('otherThisMonthRate')">
|
||||
<text>本月占比=7月其他收入 / 本年累计其他收入(20,285,867.69/133,978,469.54)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice2('otherThisMonthRate')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '120px' }" v-if="otherThisMonthRate"-->
|
||||
<!-- @click.stop="handleShowNotice2('otherThisMonthRate')">-->
|
||||
<!-- <text>本月占比=7月其他收入 / 本年累计其他收入(20,285,867.69/133,978,469.54)</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -533,23 +571,23 @@
|
||||
<view class="smallSumLeft">
|
||||
<view class="smallSumItemBox"></view>
|
||||
<text class="smallTitle">服务区租赁小计</text>
|
||||
<view class="notice" @click="handleShowNotice2('serviceSmallSum')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '180px' }" v-if="serviceSmallSum"
|
||||
@click.stop="handleShowNotice2('serviceSmallSum')">
|
||||
<text>商铺、充电桩、汽修、加油站的租赁累计收入(91,051,247.82/252,950,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice2('serviceSmallSum')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '180px' }" v-if="serviceSmallSum"-->
|
||||
<!-- @click.stop="handleShowNotice2('serviceSmallSum')">-->
|
||||
<!-- <text>商铺、充电桩、汽修、加油站的租赁累计收入</text>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
|
||||
<view class="smallSumRight" style="display: flex;align-items: center">
|
||||
<text class="successText" style="margin-left: 4rpx">完成率</text>
|
||||
<text class="successValue">35.99%</text>
|
||||
<view class="notice" @click="handleShowNotice2('otherThisMonthSuccess')">?
|
||||
<view class="noticeBox" :style="{ right: '0px', top: '180px' }" v-if="otherThisMonthSuccess"
|
||||
@click.stop="handleShowNotice2('otherThisMonthSuccess')">
|
||||
<text>完成率=服务区租赁累计收入 / 本年累计其他收入(91,051,247.82/252,950,000.00)</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="notice" @click="handleShowNotice2('otherThisMonthSuccess')">?-->
|
||||
<!-- <view class="noticeBox" :style="{ right: '0px', top: '180px' }" v-if="otherThisMonthSuccess"-->
|
||||
<!-- @click.stop="handleShowNotice2('otherThisMonthSuccess')">-->
|
||||
<!-- <view>完成率=服务区租赁累计收入 / 本年累计其他收入<br/>(91,051,247.82/252,950,000.00)</view>-->
|
||||
<!-- </view>-->
|
||||
<!-- </view>-->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -938,6 +976,7 @@ export default {
|
||||
this.menu = uni.getMenuButtonBoundingClientRect()
|
||||
console.log('this.menu',this.menu)
|
||||
let _this = this
|
||||
// 延迟时间 相当于接口 把数据给图表组件
|
||||
setTimeout(()=>{
|
||||
_this.number = 40
|
||||
_this.firstBox1st = 39.39
|
||||
@ -946,7 +985,7 @@ export default {
|
||||
_this.firthBox1stRate = 65.18
|
||||
_this.firthBox2stRate = 71.70
|
||||
_this.firthBox3stRate = 52.97
|
||||
},100)
|
||||
},1000)
|
||||
},
|
||||
methods:{
|
||||
// 点击出现备注
|
||||
@ -1090,17 +1129,9 @@ export default {
|
||||
uni.switchTab({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
// if (this.come==='index'){
|
||||
//
|
||||
// }else{
|
||||
// uni.switchTab({
|
||||
// url: '/pages/userCenter/userCenter'
|
||||
// })
|
||||
// }
|
||||
},
|
||||
// 进入收入详情
|
||||
handleGoInComeDetail(){
|
||||
console.log('1111')
|
||||
uni.navigateTo({
|
||||
url: '/pages/revenue/incomeDetail'
|
||||
});
|
||||
@ -1224,6 +1255,30 @@ export default {
|
||||
color: #018ABD;
|
||||
line-height: 44rpx;
|
||||
}
|
||||
.notice{
|
||||
margin-left: 8rpx;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 2px solid #A69E9F;
|
||||
border-radius: 50%;
|
||||
color: #A69E9F;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
.noticeBox{
|
||||
max-width: 80%;
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
background: #fff;
|
||||
border-radius: 10rpx;
|
||||
box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(166, 158, 159, 0.3);
|
||||
z-index:9;
|
||||
}
|
||||
}
|
||||
}
|
||||
.moneyBox{
|
||||
width: 100%;
|
||||
@ -1386,6 +1441,30 @@ export default {
|
||||
color: #474EF4;
|
||||
line-height: 44rpx;
|
||||
}
|
||||
.notice{
|
||||
margin-left: 8rpx;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 2px solid #A69E9F;
|
||||
border-radius: 50%;
|
||||
color: #A69E9F;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
.noticeBox{
|
||||
max-width: 80%;
|
||||
position: absolute;
|
||||
left: 0;top: 0;
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
background: #fff;
|
||||
border-radius: 10rpx;
|
||||
box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(166, 158, 159, 0.3);
|
||||
z-index:9;
|
||||
}
|
||||
}
|
||||
.monthSumBg{
|
||||
position: absolute;
|
||||
width: 320rpx;
|
||||
@ -1496,7 +1575,7 @@ export default {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
.noticeBox{
|
||||
max-width: 60%;
|
||||
max-width: 100%;
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
@ -1527,7 +1606,7 @@ export default {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
.noticeBox{
|
||||
max-width: 60%;
|
||||
max-width: 80%;
|
||||
position: absolute;
|
||||
right: 0;top: 0;
|
||||
display: inline-block;
|
||||
@ -1975,7 +2054,7 @@ export default {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
.noticeBox{
|
||||
max-width: 60%;
|
||||
max-width: 80%;
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'Alimama ShuHeiTi';
|
||||
src:url("/static/public/fontRevenue/up9HUFeeQJsE.woff2");
|
||||
src:url("/static/public/fontRevenue/PlSxUbHwNZJZ.woff2");
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user