ahyd_DIB/pages/plan/servicePlanMonth.vue
2023-05-24 18:56:24 +08:00

1046 lines
37 KiB
Vue

<template>
<view class="main">
<view class="header">
<view class="top" :style="{height:(menu.bottom + 6)+'px'}">
<image :style="{top:(menu.top + ((menu.height - 24)/2))+'px'}" @click="handleBack" class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/examine/leftArrowWhite.svg"></image>
</view>
<p class="pageTitle">服务区月度计划</p>
<view class="monthTabs">
<scroll-view class="big" :show-scrollbar="false" scroll-with-animation scroll-x="true" enable-flex :scrollIntoView="selectMonthId" >
<div :id="'item'+item.value" :class="selectMonth===item.value?'monthItem selectItem':'monthItem'" v-for="(item,index) in monthList" :key="index" @click="handleSelectMonth(item.value)">{{item.label}}</div>
</scroll-view>
</view>
<view class="monthDetailList">
<swiper class="swiper" previous-margin="40rpx" next-margin="40rpx" @change="handleDetailScroll" :current="selectDetail">
<block v-for="(item,index) in swiperList" :key="index">
<swiper-item class="swiper-item" :item-id="index" :data-item-id="index" bindtap='clickChange'>
<view class="box">
<view :class="selectDetail===index?'detail':'detail noShow'">
<view class="item" v-if="selectDetail===index">
<div class="picker">
<div class="selectService" @click="handleShowPopup">
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/plan/fixed.svg"></image>
<view class="select">
<view class="name">{{selectServiceName || '-'}}</view>
<p class="area">服务区</p>
<div style="width: 24px;height: 12px"></div>
<image class="rightArrow" src="https://eshangtech.com/ShopICO/ahyd-BID/plan/orangeArrow.svg"></image>
</view>
</div>
</div>
<view class="itemTop" :style="{marginTop: selectDetail===index?'16px':'4px'}">
<view class="left">
<view class="detailContent">
<view class="top">
<span class="money">{{serviceDetailObj.RevenueMonth_Amount || '-'}}</span>
<!-- <image class="icon" src="/static/images/index/yearSuccess.svg"></image>-->
</view>
<p class="text">本月已完成<text class="unit">/元</text></p>
</view>
</view>
<view class="right">
<p class="add" :style="{color:serviceDetailObj.MonthGrowth_Rate >0?'#E83944':'#049E77'}">{{serviceDetailObj.MonthGrowth_Rate >0?'+':''}}{{serviceDetailObj.MonthGrowth_Rate|| '-' }}%</p>
<text class="compare">比计划</text>
</view>
</view>
<view class="itemBottom" :style="{marginTop: selectDetail===index?'20px':'4px'}">
<view class="progress">
<view class="have" :style="{width:serviceDetailObj.MonthBudget_Degree + '%'}"></view>
</view>
<view class="text">
<span class="success">计划完成<span class="unit">/元</span></span>
<span class="target">{{serviceDetailObj.BudgetMonth_Amount || '-'}}</span>
</view>
</view>
</view>
<view class="item" v-if="selectDetail!==index">
<div class="picker">
<div class="selectService" @click="handleShowPopup">
<image class="img" src="https://eshangtech.com/ShopICO/ahyd-BID/plan/fixed.svg"></image>
<view class="select">
<view class="name">{{'-'}}</view>
<p class="area">服务区</p>
<div style="width: 24px;height: 12px"></div>
<image class="rightArrow" src="https://eshangtech.com/ShopICO/ahyd-BID/plan/orangeArrow.svg"></image>
</view>
</div>
</div>
<view class="itemTop" :style="{marginTop: selectDetail===index?'16px':'4px'}">
<view class="left">
<view class="detailContent">
<view class="top">
<span class="money">{{'-'}}</span>
<!-- <image class="icon" src="/static/images/index/yearSuccess.svg"></image>-->
</view>
<p class="text">本月已完成<text class="unit">/元</text></p>
</view>
</view>
<view class="right">
<p class="add" :style="{color:serviceDetailObj.MonthGrowth_Rate >0?'#E83944':'#049E77'}">{{''}}{{'-' }}%</p>
<text class="compare">比计划</text>
</view>
</view>
<view class="itemBottom" :style="{marginTop: selectDetail===index?'20px':'4px'}">
<view class="progress">
<view class="have" :style="{width:serviceDetailObj.MonthBudget_Degree + '%'}"></view>
</view>
<view class="text">
<span class="success">计划完成<span class="unit">/元</span></span>
<span class="target">{{'-'}}</span>
</view>
</view>
</view>
<image class="detailLogo" src="https://eshangtech.com/ShopICO/ahyd-BID/plan/detailLogo.svg"></image>
</view>
</view>
</swiper-item>
</block>
</swiper>
</view>
</view>
<view class="detail" :style="{height:`calc(100vh - 321px - ${menu.bottom + 6}px)`}">
<scroll-view scroll-y="true" style="height: calc(100% - 16px);width: 100%">
<view class="box" v-for="(item,index) in detailList" :key="index">
<p class="title">{{item.node.ACCOUNT_CODE}}</p>
<view class="top">
<image class="icon" :src="item.node.ACCOUNT_CODE==='营业收入'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/mainWork.svg':item.node.ACCOUNT_CODE==='营业成本'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/cost.svg':item.node.ACCOUNT_CODE==='毛利率'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/gross.svg':''"></image>
<view class="sum">
<span class="money">{{item.node.REVENUE_AMOUNT || '-'}}</span>
<span class="text">总计<span class="unit">/元</span></span>
</view>
<image class="meng" :src="item.node.ACCOUNT_CODE==='营业收入'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/mainWorkMeng.png':item.node.ACCOUNT_CODE==='营业成本'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/costBg.png':item.node.ACCOUNT_CODE==='毛利率'?'https://eshangtech.com/ShopICO/ahyd-BID/plan/grossBg.png':''"></image>
</view>
<view v-for="(subItem,subIndex) in item.children" :key="subIndex">
<view class="smallTitle">
<span class="type">{{subItem.node.ACCOUNT_CODE}}<span class="unit">/元</span></span>
<span class="money">{{subItem.node.REVENUE_AMOUNT || '-'}}</span>
</view>
<view class="subItem" v-for="(thirdItem,thirdIndex) in subItem.children" :key="thirdIndex">
<view class="link" v-if="thirdIndex + 1 !== subItem.children.length"></view>
<view class="subTop">
<image class="icon" :src="`https://eshangtech.com/ShopICO/ahyd-BID/plan/${item.node.ACCOUNT_CODE==='营业收入'?thirdItem.node.ACCOUNT_CODE==='便利店'?'store'
:thirdItem.node.ACCOUNT_CODE==='餐饮(含小吃)'?'mainWorkFood'
:thirdItem.node.ACCOUNT_CODE==='客房及其他'?'mainWorkRoom':''
:item.node.ACCOUNT_CODE==='营业成本'?thirdItem.node.ACCOUNT_CODE==='便利店'?'costStore'
:thirdItem.node.ACCOUNT_CODE==='餐饮销售成本'?'costFood'
:thirdItem.node.ACCOUNT_CODE==='员工餐成本'?'costBook'
:thirdItem.node.ACCOUNT_CODE==='客房'?'costRoom':''
:item.node.ACCOUNT_CODE==='毛利率'?thirdItem.node.ACCOUNT_CODE==='综合毛利率 (不含员工餐)'?'grossAdd'
:thirdItem.node.ACCOUNT_CODE==='综合毛利率 (含员工餐)'?'grossUser'
:thirdItem.node.ACCOUNT_CODE==='便利店'?'grossStore'
:thirdItem.node.ACCOUNT_CODE==='餐饮'?'grossFood':'':''}.svg`"></image>
<span class="text">{{thirdItem.node.ACCOUNT_CODE}}</span>
</view>
<view class="subBox">
<view class="subType">
<view class="upper">
<view class="icon" :style="{background:item.node.ACCOUNT_CODE==='营业收入'?'#FF7D35':item.node.ACCOUNT_CODE==='营业成本'?'#1E80FF':'#7242DE'}"></view>
<span class="subTitle">实际</span>
<span class="unit">/元</span>
</view>
<span class="value">{{thirdItem.node.REVENUE_AMOUNT || '-'}}</span>
</view>
<view class="subTypeNoAfter">
<view class="upper">
<view class="icon" :style="{opacity: 0.4,background:item.node.ACCOUNT_CODE==='营业收入'?'#FF7D35':item.node.ACCOUNT_CODE==='营业成本'?'#1E80FF':'#7242DE'}"></view>
<span class="subTitle">计划</span>
<span class="unit">/元</span>
</view>
<span class="value">{{thirdItem.node.BUDGETDETAIL_AMOUNT || '-'}}</span>
</view>
<view class="progress">
<view class="reality" v-if="thirdItem.node.Budget_Degree" :style="{width:thirdItem.node.Budget_Degree>=100?'100%':thirdItem.node.Budget_Degree + '%'}"></view>
<view class="plan"></view>
<view class="add">
<image v-if="thirdItem.node.Budget_Degree" class="addIcon" :src="thirdItem.node.Budget_Degree>0?'https://eshangtech.com/ShopICO/ahyd-BID/plan/add.svg':'https://eshangtech.com/ShopICO/ahyd-BID/plan/reduce.svg'"></image>
<span class="value" :style="{color:thirdItem.node.Budget_Degree>0?'#E83944':thirdItem.node.Budget_Degree<0?'#049E77':'#ccc'}">{{thirdItem.node.Budget_Degree || '-'}}%</span>
</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<uniPopup type="bottom" :round="true" :show="showPop" @hidePopup="hidePopup">
<view class="popup" :style="{height:selectTab!==2?'60vh':'78vh'}">
<view class="top">
<text class="popupTitle">选择片区</text>
<image @click="hidePopup" class="close" src="https://eshangtech.com/ShopICO/ahyd-BID/examine/close.svg"></image>
</view>
<view class="areaList">
<view @click="handleChangeArea(item)" :class="selectServiceId===item.value?'selectItem item':'item'" v-for="(item,index) in serviceList" :key="index">{{item.label}}<text class="unit">片区</text></view>
</view>
</view>
</uniPopup>
</view>
</template>
<script>
import request from '@/util/index.js'
import uniPopup from '@/components/uni-popup'
export default {
components:{
uniPopup
},
data(){
return{
menu:{},
serviceList:[],// 服务区选择列表
monthList:[{label:'1月',value:1},{label:'2月',value:2},{label:'3月',value:3},{label:'4月',value:4},{label:'5月',value:5},{label:'6月',value:6},{label:'7月',value:7}, {label:'8月',value:8},{label:'9月',value:9},{label:'10月',value:10},{label:'11月',value:11},{label:'12月',value:12}],
selectMonth:0,// 选中的月份
selectMonthId:'',// 选中月份的id
swiperList:[{label:1111},{label:2222},{label:3333},{label:4444},{label:5555},{label:6666},{label:7777},{label:8888},{label:9999},{label:1010}, {label:11111111},{label:1212}],
selectDetail:0,// 放大的月份详情
detailList:[{list:[1,2,3]},{list:[1,2,3]},{list:[1,2,3]},{list:[1,2,3]}],
serviceId:'',// 服务区ID
showPop:false,// 是否显示popup
selectAreaValue:'',// 选择的片区ID
selectServiceId:'',// 选择的服务区id
selectServiceName:'',// 选择的服务区名称
serviceDetailObj:{},// 服务区的详细信息
}
},
onLoad(query){
console.log(query)
// query 有id searchTime 片区名称和片区内码
// 获取手机参数对页面进行适配
this.menu = uni.getMenuButtonBoundingClientRect()
// 先拿到首页的时间 作为调用接口的统一时间 存的lastDay存当前月份的具体日期切换回本月的日期判断有用
if (query.search){
this.searchTime = query.search
}else{
this.searchTime = uni.getStorageSync('lastDay')
}
// 两个是一起的 一个有另一个一定有
if (query.selectAreaValue){
this.selectAreaValue = query.selectAreaValue
}
if (query.obj){
this.serviceDetailObj = JSON.parse(query.obj)
this.selectServiceName = this.serviceDetailObj.Serverpart_Name.split('服务区')[0]
this.selectServiceId = this.serviceDetailObj.Serverpart_ID
}
this.lastDay = uni.getStorageSync('lastDay')
// 拿到当前时间
console.log('this.searchTime',this.searchTime)
const date = new Date(this.searchTime)
let month = date.getMonth() + 1
// 滚动的月份列表
this.monthList = this.monthList.filter(item=>item.value<=month)
// 详情卡片的滑动列表
this.swiperList = this.swiperList.filter((item,index)=>index<month)
// 根据月份显示的详情卡片
this.selectDetail = month - 1
// 拿到服务区id
this.serviceId = query.id
// 拿到服务区列表
this.getServiceList()
this.getServiceDetail()
},
onReady(){
this.getThisMonth()
},
methods:{
getThisMonth(){
const date = new Date(this.searchTime)
const month = date.getMonth() + 1
this.selectMonth = month
this.selectMonthId = `item${month}`
},
handleDetailScroll(e){
console.log('e.detail.current',e.detail.current)
this.selectDetail = e.detail.current
this.selectMonth = e.detail.current + 1
const date = new Date(this.lastDay)
let y = date.getFullYear()
let m = date.getMonth() + 1
let d = date.getDate()
if (m === e.detail.current + 1){
this.searchTime=this.lastDay
}else{
let month = e.detail.current + 1
if (month<10){
month = '0' + month
}
this.searchTime = `${y}-${month}`
}
// 拿到列表
this.getServiceDetail()
// 拿到卡片详情
this.handleServiceDetail()
},
handleBack(){
uni.navigateBack({
delta: 1
});
},
async getServiceDetail(){
let req = {}
const date = new Date(this.searchTime)
let y = date.getFullYear()
let m = date.getMonth() + 1
const nowDate = new Date(this.lastDay)
let nowY = nowDate.getFullYear()
let nowM = nowDate.getMonth() + 1
if (m === nowM && y === nowY){
if (m<10){
m = '0' + m
}
req = {
BUDGETPROJECT_YEAR: y,
STATISTICS_MONTH:`${y}${m}`,
SERVERPART_ID:this.serviceId,
ACCOUNT_CODE:'6001,6401,6402',
STATISTICS_DATE: this.lastDay
}
}else{
if (m<10){
m = '0' + m
}
req = {
BUDGETPROJECT_YEAR: y,
STATISTICS_MONTH:`${y}${m}`,
SERVERPART_ID:this.serviceId,
ACCOUNT_CODE:'6001,6401,6402',
}
}
const totalData = await request.$webGet('CommercialApi/Budget/GetBudgetProjectDetailList',req)
console.log(totalData)
this.detailList = totalData.Result_Data.List
// 千分号格式化处理数字
this.detailList.forEach(item=>{
if (item.children){
item.children = this.editData(item.children)
if (item.node.ShowRevenue_Amount){
item.node.REVENUE_AMOUNT = item.node.REVENUE_AMOUNT ? this.$util.fmoney(item.node.REVENUE_AMOUNT ):''
item.node.REVENUE_AMOUNT = this.$util.fmoney(item.node.REVENUE_AMOUNT)
}
}else{
if (item.node.REVENUE_AMOUNT){
item.node.REVENUE_AMOUNT = item.node.REVENUE_AMOUNT ? this.$util.fmoney(item.node.REVENUE_AMOUNT ):''
item.node.REVENUE_AMOUNT = this.$util.fmoney(item.node.REVENUE_AMOUNT)
}else{
item.node.REVENUE_AMOUNT = '-'
}
}
})
console.log('this.detailList',this.detailList)
},
// 获取服务区详情信息
async handleServiceDetail(){
uni.showLoading({title:'正在加载'})
let reqTime = ''
const date = new Date(this.searchTime)
let y = date.getFullYear()
let m = date.getMonth() + 1
const nowDate = new Date(this.lastDay)
let nowY = nowDate.getFullYear()
let nowM = nowDate.getMonth() + 1
if (m === nowM && y === nowY){
reqTime= this.lastDay
}else{
let d = this.$util.getThisMonthDay(this.searchTime)
reqTime=`${y}-${m}-${d}`
}
let req = {
Province_Code:'340000',
Statistics_Date:reqTime,
Serverpart_ID:this.selectServiceId,
SPRegionType_ID:this.selectAreaValue
}
const data = await request.$webGet('CommercialApi/Revenue/GetRevenueBudget',req)
this.serviceDetailObj = data.Result_Data
for (let key in this.serviceDetailObj){
for (let key in this.serviceDetailObj){
if (key==='RevenueMonth_Amount' || key==='BudgetMonth_Amount'){
this.serviceDetailObj[key] = this.$util.fmoney(this.serviceDetailObj[key])
}
}
}
uni.hideLoading()
},
// 点击月份切换月份
handleSelectMonth(value){
this.selectMonth = value
this.selectMonthId = `item${value}`
this.selectDetail = value - 1
},
// 递归处理数据
editData(value){
value.forEach(item=>{
if (item.children){
item.children = this.editData(item.children)
if (item.node.ShowRevenue_Amount){
item.node.REVENUE_AMOUNT = item.node.REVENUE_AMOUNT ? this.$util.fmoney(item.node.REVENUE_AMOUNT ) :''
item.node.REVENUE_AMOUNT = this.$util.fmoney(item.node.REVENUE_AMOUNT)
}
}else{
item.children = [{},{},{}]
if (item.node.REVENUE_AMOUNT ){
item.node.REVENUE_AMOUNT = item.node.REVENUE_AMOUNT ? this.$util.fmoney(item.node.REVENUE_AMOUNT ) :''
item.node.REVENUE_AMOUNT = this.$util.fmoney(item.node.REVENUE_AMOUNT)
}else{
item.node.REVENUE_AMOUNT = '-'
}
}
})
return value
},
// 是否显示弹出框
handleShowPopup(){
this.showPop = true
},
// 弹出框点击蒙层关闭
hidePopup(){
this.showPop = false
},
// 修改当前选中的片区
handleChangeArea(item){
// 选择的片区名称和片区id
this.selectServiceId = item.value
this.selectServiceName = item.label.split('服务区')[0]
this.handleServiceDetail()
// 关闭弹出框方法
this.hidePopup()
},
async getServiceList(){
const req = {
StatisticsDate:this.searchTime,
ProvinceCode:'340000',
StatisticsType:4,
SPRegionTypeID:this.selectAreaValue
}
const data = await request.$webGet('CommercialApi/Revenue/GetProvinceRevenueBudget',req)
let list = []
data.Result_Data.RegionBudgetList.forEach(item=>{
list.push({label:item.Serverpart_Name,value:item.Serverpart_ID})
})
this.serviceList = list
}
}
}
</script>
<style scoped lang="scss">
@import '/static/public/font/stylesheet.css';
.main{
width: 100%;
height: 100vh;
display: flex;
flex-direction: column;
.header{
width: 100%;
padding-bottom: 32px;
background: linear-gradient(180deg, #FF6D40 0%, rgba(255,132,91,0.84) 44%, #FFEDBE 100%);
.top{
width: 100%;
position: relative;
.img{
width: 24px;
height: 24px;
position: absolute;
left: 16px;
}
}
.pageTitle{
font-size: 28px;
font-family: Alimama ShuHeiTi;
color: #160002;
line-height: 39px;
text-shadow: 0 4px 8px rgba(129,36,7,0.2);
background: linear-gradient(180deg, #FEFFFE 40%, #FFBEAA 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin: 12px 0 0 16px;
}
.monthTabs{
width: calc(100% - 32px);
height: 34px;
border-radius: 17px;
box-sizing: border-box;
border: 1px solid #FFA98D;
background: linear-gradient(180deg, #FC6C3F 0%, #FFAC91 100%);
overflow: hidden;
padding: 2px 0;
margin-top: 16px;
margin-left: 16px;
.big{
width: 100%;
height: 100%;
white-space: nowrap;
.monthItem{
display: inline-block;
font-size: 14px;
padding: 2px 16px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #FFCFC0;
line-height: 24px;
margin-right: 4px;
text-align: center;
border-radius: 12px;
}
.selectItem{
background: #fff;
}
.monthItem:first-child{
margin-left: 4px;
}
}
}
.monthDetailList{
width: 100%;
height: 188px;
margin-top: 12px;
.swiper{
width: 100%;
height: 188px;
.swiper-item{
.box{
width: 100%;
height: 100%;
.detail{
position: relative;
width: calc(100% - 20px);
height: 100%;
background: linear-gradient(314deg, #FFF7E4 0%, #F5F2FF 32%, #FFFAFA 54%, #FFF6F3 70%, #FFE4D9 100%); margin-left: 10px;
border-radius: 8px;
box-sizing: border-box;
padding: 16px;
margin-top: 16px;
z-index: 1;
.detailLogo{
width: 97px;
height: 103px;
position: absolute;
z-index:1;
top: 16px;right: 30px;
opacity: 0.6;
}
.item{
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 16px;
z-index: 99;
.picker{
.selectService{
display: flex;
align-items: center;
.img{
width: 40px;
height: 40px;
z-index: 2;
}
.select{
height: 32px;
min-width: 110px;
background: linear-gradient(270deg, #FFE8DE 0%, #FFDFD1 100%);
border-radius: 0 16px 16px 0;
transform: translateX(-20px);
box-sizing: border-box;
padding-left: 25px;
display: flex;
align-items: center;
position: relative;
.name{
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
}
.area{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
margin-left: 2px;
}
.rightArrow{
position: absolute;
right: 2px;
width: 24px;
height: 12px;
}
}
}
}
.itemTop{
margin-top: 16px;
width: 100%;
display: flex;
justify-content: space-between;
.left{
display: flex;
.detailContent{
.top{
display: flex;
align-items: center;
margin-bottom: 2px;
.money{
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 24px;
}
.icon{
width: 15px;
height: 15px;
margin-left: 6px;
}
}
.text{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 20px;
.unit{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 20px;
margin-left: 2px;
}
}
}
}
.right{
text-align: right;
.add{
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #E83944;
line-height: 24px;
}
.compare{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 18px;
}
}
}
.itemBottom{
.progress{
width: 100%;
height: 10px;
background: #FBD9CD;
border-radius: 5px;
position: relative;
overflow: hidden;
.have{
height: 100%;
position: absolute;
left: 0;
top: 0;
background: #FF6D40;
border-radius: 5px;
}
}
.text{
margin-top: 4px;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.success{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 20px;
.unit{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 20px;
margin-left: 2px;
}
}
.target{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
line-height: 20px;
}
}
}
}
}
.noShow{
height: 151px;
margin-top: 30px;
}
}
}
}
}
}
.detail{
width: 100%;
transform: translateY(-16px);
background: #fff;
border-radius: 16px 16px 2px 2px;
padding-top: 16px;
box-sizing: border-box;
.box{
width: 100%;
background: #fff;
border-radius: 16px 16px 2px 2px;
box-sizing: border-box;
padding: 8px 16px 16px;
position: relative;
.title{
font-size: 17px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
line-height: 24px;
}
.top{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 12px;
position: relative;
border-bottom: 1px solid #EEEEEE;
padding-bottom: 16px;
.icon{
width: 48px;
height: 48px;
}
.sum{
display: flex;
flex-direction: column;
align-items: flex-end;
.money{
font-size: 20px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 24px;
}
.text{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
line-height: 20px;
margin-top: 4px;
.unit{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 20px;
margin-left: 2px;
}
}
}
.meng{
position: absolute;
width: 80px;
height: 80px;
right: 0;top: -30px;
}
}
.smallTitle{
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 16px;
margin-bottom: 16px;
.type{
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
line-height: 20px;
.unit{
font-weight: 400;
color: #A69E9F;
margin-left: 2px;
}
}
.money{
font-size: 16px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 20px;
}
}
.subItem{
margin-bottom: 20px;
position: relative;
.link{
position: absolute;
left: 12px;top: 24px;
width: 2px;
height: 110px;
background: #E6E6E6;
}
.subTop{
width: 100%;
display: flex;
align-items: center;
margin-bottom: 6px;
.icon{
width: 24px;
height: 24px;
}
.text{
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
margin-left: 8px;
line-height: 24px;
}
}
.subBox{
width: calc(100vw - 64px);
height: 80px;
background: #F5F5F5;
box-sizing: border-box;
margin-left: 32px;
border-radius: 8rpx;
display: flex;
.subType,.subTypeNoAfter{
width: 33%;
height: 100%;
box-sizing: border-box;
padding: 16px 12px;
position: relative;
.upper{
display: flex;
align-items: center;
margin-bottom: 16rpx;
.icon{
width: 12rpx;
height: 12rpx;
border-radius: 50%;
}
.subTitle{
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
line-height: 40rpx;
margin-left: 4px;
}
.unit{
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #A69E9F;
line-height: 40rpx;
margin-left: 2px;
}
}
.value{
font-size: 27rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #160002;
line-height: 40rpx;
}
}
.subType:after{
content:'';
width: 1px;
height: 50px;
background: #E6E6E6;
border-radius: 1px;
position: absolute;
right: 0;top: 15px;
}
.progress{
width: 34%;
height: 100%;
box-sizing: border-box;
padding: 16px 10px;
.reality{
height: 6px;
background: #FF7D35;
border-radius: 4px;
}
.plan{
width: 40px;
height: 6px;
background: #FF7D35;
border-radius: 4px;
opacity: 0.4;
margin-top: 4px;
}
.add{
margin-top: 12px;
display: flex;
align-items: center;
.addIcon{
width: 14px;
height: 14px;
}
.value{
font-size: 32rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
line-height: 40rpx;
margin-left: 2px;
}
}
}
}
}
}
}
.popup{
width: 100%;
box-sizing: border-box;
padding: 16px;
.top{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.popupTitle{
font-size: 16px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
line-height: 22px;
}
.close{
width: 20px;
height: 20px;
}
}
.areaList{
width: 100%;
height: calc(60vh - 70px);
margin-top: 12px;
overflow-y: scroll;
.item{
width: 100%;
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
line-height: 20px;
text-align: left;
padding:9px 12px;
box-sizing: border-box;
.unit{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 18px;
}
}
.selectItem{
background: RGBA(243, 235, 255, 0.5);
}
}
.serviceList{
.tab{
width: 100%;
height: 38px;
background: #F3F1F5;
border-radius: 4px;
margin-top: 16px;
box-sizing: border-box;
padding: 4px;
.tabItem{
display: inline-block;
width: 50%;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 30px;
}
.selectTabItem{
background: #fff;
border-radius: 4px;
}
}
.list{
margin-top: 12px;
height: calc(78vh - 130px);
overflow-y: scroll;
.item{
display: flex;
justify-content: space-between;
.person{
margin-top: 12px;
text-align: left;
.value{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
line-height: 20px;
margin-bottom: 2px;
}
.label{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 18px;
}
.icon{
margin-bottom:-2px;
width: 16px;
height: 19px;
}
}
}
}
}
.meetList{
margin-top: 16px;
height: calc(60vh - 80px);
overflow-y: scroll;
.message{
display: flex;
align-items: flex-start;
.icon{
width: 16px;
height: 16px;
margin-top: 2px;
}
.value{
display: inline-block;
text-align: left;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #160002;
line-height: 20px;
margin-left: 8px;
width: 90%;
}
}
}
}
}
</style>