2023-12-19 20:12:45 +08:00

1134 lines
36 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page-body">
<view class="meng" v-if="showNotice" @click="handleShowNotice"></view>
<!-- 日期筛选 -->
<div class="ai-center screen-box" style="padding-bottom: 8rpx">
<!-- <view class="searchBtn" @click="handleSelect">查询筛选</view>-->
<!-- 搜索框内容 -->
<div style="display: flex;align-items: center;justify-content: space-between;padding: 10rpx 0">
<!-- <div class="search_box">-->
<!-- <img src="/static/images/recons/search_icon.svg" alt="" class="search_icon">-->
<!-- <input v-model="searchText" confirm-type="search" @confirm="getList" placeholder="请输入关键字" class="select_input" clear/>-->
<!-- <img src="/static/images/recons/delete.svg" alt="" class="delete" @click="handleDelete">-->
<!-- </div>-->
<!-- <div class="select_btn" @click="handleSelect" >-->
<!-- <img src="/static/images/recons/select_icon.svg" alt="" class="select_icon">-->
<!-- 筛选-->
<!-- </div>-->
</div>
<!-- 查询时间 -->
<div style="display: flex;justify-content: space-between">
<view style="display: flex;">
<picker mode="date" @change="bindDateChange($event,0)" :value="pageData.searchTime[0]" :end="pageData.endDate" start="2018-12-01" class="screen-unit">
<text>{{pageData.searchTime[0]}}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</picker>
<text class="mr20">至</text>
<picker mode="date" @change="bindDateChange($event,1)" :value="pageData.searchTime[1]" :end="pageData.endDate" start="2018-12-01" class="screen-unit">
<text>{{pageData.searchTime[1]}}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</picker>
</view>
<div class="select_btn" @click="handleSelect" >
<img src="/static/images/recons/select_icon.svg" alt="" class="select_icon">
筛选
</div>
</div>
<!-- BusinessType【经营模式】 SettlementMode【结算模式】 -->
<!-- <view class="searchBox">-->
<!-- <view class="searchItem">-->
<!-- <span class="searchLabel">经营模式</span>-->
<!-- <picker mode="selector" :range="BusinessTypeList" :value="BusinessTypeIndex" range-key="label">-->
<!-- {{BusinessTypeList[BusinessTypeIndex].label}}-->
<!-- </picker>-->
<!-- </view>-->
<!-- <view class="searchItem">-->
<!-- <span class="searchLabel">结算模式</span>-->
<!-- <picker mode="selector" :range="SettlementModeList" :value="SettlementModeIndex" range-key="label">-->
<!-- {{SettlementModeList[SettlementModeIndex].label}}-->
<!-- </picker>-->
<!-- </view>-->
<!-- </view>-->
</div>
<template v-if="!pageData.isLoading && pageData.msg && pageData.msg.Total_Revenue">
<view class="uni-flex ai-center head-card" >
<!-- @tap="toTrend()"-->
<view class="topDetail" style="width: 100%">
<view class="label">实收总额</view>
<view class="price-num">¥{{$util.fmoney(pageData.msg.Total_Revenue,2)}}</view>
<view class="detailBox" style="margin-top: 12px">
<view class="detailItem" >
<view class="value">{{$util.fmoney(pageData.msg.Different_Price_More,2)}}</view>
<view class="label">长款金额 <span class="unit">/元</span></view>
</view>
<view class="detailItem">
<view class="value">{{$util.fmoney(pageData.msg.Different_Price_Less,2)}}</view>
<view class="label">短款金额 <span class="unit">/元</span></view>
</view>
<view class="detailItem">
<view class="value">{{$util.fmoney(pageData.msg.TotalOffAmount,2)}}</view>
<view class="label">优惠金额 <span class="unit">/元</span></view>
</view>
<view class="detailItem">
<view class="value">{{$util.noDecimal(pageData.msg.TicketCount)}}</view>
<view class="label">客单数量<span class="unit">/笔</span></view>
</view>
<view class="detailItem">
<view class="value">{{$util.fmoney(pageData.msg.TotalCount,2)}}</view>
<view class="label">商品出售 <span class="unit">/件</span></view>
</view>
<view class="detailItem">
<view class="value">{{$util.fmoney(pageData.msg.countave,2)}}</view>
<view class="label">商品均价 <span class="unit">/元</span></view>
</view>
</view>
</view>
</view>
<view class="modle-title">
<image src="https://eshangtech.com/ShopICO/ahyd-BID/revenue/yestoday-region.png" mode="aspectFit"></image>
<text>经营报表</text>
</view>
<view class="modleText" v-if="pageData.msg.SearchResult">
<div v-if="showModal">
<span v-if="copySearchText && BusinessTypeValue || copySearchText && BusinessTypeValue" class="text" style="color: red;display: block">温馨提示:模糊查询不支持选择经营方法/结算方式</span>
<span class="text">{{pageData.msg.SearchResult[0]}}</span>
<view class="text" v-if="BusinessTypeValue!==0">{{`经营模式: ${BusinessTypeList.filter(item=> item.value===BusinessTypeValue)[0].label}`}}</view>
<view class="text" v-if="SettlementModeValue!==0">{{`结算模式: ${SettlementModeList.filter(item=> item.value===SettlementModeValue)[0].label}`}}</view>
</div>
<div v-else>
<span v-if="copySearchText && BusinessTypeValue || copySearchText && BusinessTypeValue" class="text" style="color: red">温馨提示:模糊查询不支持选择经营方法/结算方式</span>
<div v-for="(item,index) in pageData.msg.SearchResult" :key="index">
<span class="text" v-for="(subItem,subIndex) in item" :key="subIndex">
<span class="text" style="color:red" v-if="item.length>1 && subItem.indexOf('')===-1">{{copySearchText}}</span>
{{subItem}}
</span>
</div>
</div>
</view>
<view class="bg-white" v-if="ServerpartList.length>0">
<view class="region-area-title uni-flex ai-center jc-between" v-show="pageData.msg.Province_ExternalAmount" :class="{'active':pageData.insideShow}" @tap="pageData.insideShow=!pageData.insideShow">
<text>省内区域</text>
</view>
<view v-show="pageData.insideShow">
<view v-for="(item,i) in ServerpartList" :key="i">
<div class=" region-cell" @tap="toggleRegion(item)">
<div class="region-cell-unit region-title cuIcon-triangledownfill" >
<text class="">{{item.Region_Name}}</text>
<div class="ct01">
<text class="strong-text">¥{{$util.fmoney(item.Total_Revenue,2)}}</text>
</div>
</div>
<div class="region-cell-unit">
<text>营收占比</text>
<div class="ct01">
<text class="strong-text">{{item.Revenue_Proportion}}</text>
</div>
</div>
<div class="region-cell-unit">
<text class="uni-icon uni-icon-arrowright" :class="{'active':item.show}"></text>
</div>
</div>
<ul class="region-cell-area" v-show="item.show">
<li v-for="(child,index) in item.revenueServerModels" :class="{'visited':child.visited}" :key="index" @tap="toDetail(child)">
<view>{{child.Serverpart_Name}}</view>
<view class="uni-flex ai-center data-number">
<text class="">{{child.Revenue_Proportion}}</text>
<text style="flex: 2;">¥{{$util.fmoney(child.Total_Revenue,2)}}</text>
</view>
</li>
</ul>
</view>
</view>
<template v-if="insideRegionList.length>0">
<view class="region-area-title uni-flex ai-center jc-between" :class="{'active':pageData.exsideShow }" @tap="pageData.exsideShow = !pageData.exsideShow">
<text>省外区域</text>
</view>
<view v-show="pageData.exsideShow">
<view v-for="(item,i) in insideRegionList" :key="i">
<div class=" region-cell" @tap="toggleRegion(item)">
<div class="region-cell-unit region-title cuIcon-triangledownfill" :class="{'active':item.show}">
<text class="">{{item.Region_Name}}</text>
<div class="ct01">
<text class="strong-text">¥{{$util.fmoney(item.Total_Revenue,2)}}</text>
</div>
</div>
<div class="region-cell-unit">
<text>营收占比</text>
<div class="ct01">
<text class="strong-text">{{item.Revenue_Proportion}}</text>
</div>
</div>
<div class="region-cell-unit"><text class="uni-icon uni-icon-arrowright" :class="{'active':item.show}"></text></div>
</div>
<ul class="region-cell-area" v-show="item.show">
<li v-for="(child,index) in item.revenueServerModels" :class="{'visited':child.visited}" :key="index" @tap="toDetail(child)">
<view>{{child.Serverpart_Name}}</view>
<view class="uni-flex ai-center data-number">
<text class="">{{child.Revenue_Proportion}}</text>
<text style="flex: 2;">¥{{$util.fmoney(child.Total_Revenue,2)}}</text>
</view>
</li>
</ul>
</view>
</view>
</template>
</view>
</template>
<view class="" v-else-if="!pageData.isLoading && !pageData.msg">
<noFound nodata=" true" :text="noDataText"/>
</view>
<uni-popup ref="popup" type="bottom" style="background: #fff" >
<div class="popupBox" style="box-sizing:border-box;height: 430px">
<!-- <div style="display: flex;align-items: center;justify-content: space-between">-->
<!-- <text class="title">查询配置</text>-->
<!-- <img src="/static/images/recons/delete.svg" alt="" class="delete" @click="handleClosePopup">-->
<!-- </div>-->
<div class="popupContent">
<div class="search_box">
<img src="/static/images/recons/search_icon.svg" alt="" class="search_icon">
<input v-model="searchText" confirm-type="search" @confirm="getList" placeholder="可以查询门店/服务区/品牌/商家等信息" class="select_input" clear/>
<img src="/static/images/recons/delete.svg" alt="" class="delete" @click="handleDelete">
</div>
<view class="popupTitle">日期选择</view>
<view class="timeList">
<view :class="selectTime===item.value?'timeItem timeSelectItem':'timeItem'" v-for="(item,index) in timeTypeList" :key="index" @click="handleChangeTime(item.value)">{{item.label}}</view>
</view>
<view class="timeList">
<view :class="selectTimeOther?'timeItem timeSelectItem':'timeItem'" @click="handleTimeOther">自定义</view>
</view>
<view class="popupTitle">经营模式</view>
<view class="timeList">
<view :class="BusinessTypeValue===item.value?'timeItem timeSelectItem':'timeItem'" v-for="(item,index) in BusinessTypeList" :key="index" @click="handleChangeBusiness(item.value)">{{item.label}}</view>
</view>
<view class="popupTitle" style="display: flex;position: relative;align-items: center">
<span class="title">结算模式</span>
<view class="notice" @click="handleShowNotice">?
<view class="noticeBox" v-if="showNotice" :style="{left: '10%',top:'20px'}">
<span class="noticeText">营收回款经营模式为商家收款商家按月/季度/半年/年度模式返款给驿达</span>
<span class="noticeText">资金返款经营模式为驿达收款驿达按月/季度/半年/年度模式打款给商家</span>
<span class="noticeText">营收分润经营模式为单个业态使用移动支付分账模式移动支付交易按照七三分成的模式营收达到保底后按照合同约定的提成比例进行分成</span>
<span class="noticeText">组合分润经营模式为多个业态使用移动支付分账模式移动支付交易按照七三分成的模式营收达到保底后按照合同约定的提成比例进行分成</span>
<span class="noticeText">阶段提成经营模式为合作分成根据营业额的高低提成比例会进行阶段性的变化</span>
</view>
</view>
</view>
<view class="timeList">
<view :class="SettlementModeValue===item.value?'timeItem timeSelectItem':'timeItem'" v-for="(item,index) in SettlementModeList" :key="index" @click="handleChangeSettlement(item.value)">{{item.label}}</view>
</view>
</div>
<div class="btn" @click="handleConfirmCheckChange">确认</div>
</div>
</uni-popup>
<uni-popup ref="timePopup" type="center" style="background: #fff">
<div class="timePopup">
<div style="display: flex;margin-left: 10%">
<picker mode="date" @change="handleChangeTimePopup($event,0)" :value="searchTimePopup[0]" :end="pageData.endDate" start="2018-12-01" class="screen-unit">
<text style="font-size: 32rpx">{{searchTimePopup[0]}}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</picker>
<text class="mr20"></text>
<picker mode="date" @change="handleChangeTimePopup($event,0)" :value="searchTimePopup[1]" :end="pageData.endDate" start="2018-12-01" class="screen-unit">
<text style="font-size: 32rpx">{{searchTimePopup[1]}}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</picker>
</div>
<div class="btn" @click="handleTimePopup">确认</div>
</div>
</uni-popup>
</view>
</template>
<script>
import {mapState} from 'vuex'
import request from '@/util/index.js'
import {wrapTreeNode} from "../../util/dateTime";
import moment from "moment";
export default {
data() {
let now = new Date()
let nowTime = this.$util.cutDate(now, 'YYYY-MM-DD',-1)
let sTime = this.$util.cutDate(now, 'YYYY-MM-DD', -1)
return {
pageData: {
endDate: nowTime,
searchTime: [sTime,nowTime],
msg: {},
isLoading: true,
exsideShow: true,
insideShow: true,
},
noDataText: '抱歉,没有数据,请稍后重试',
regionType: 0, // 0 东南 1 西北
ServerpartList: [],
insideRegionList: [], // 省外
queryTime:'',// 传入的时间
lastDay:'',// 首页的实际时间
searchText:'',// 搜索框内容
copySearchText:'',// 搜索框内容复制
requestText:'',// 已经请求过接口的查询框内容
isScreen:false,// 显示popup里面的内容
checkBoxValue:['MerchantName','Brand','Shop','Serverpart'],// 查询的字段放接口里的
checkChange:['MerchantName','Brand','Shop','Serverpart'],// checkBox里面选择了 但是没点确定的
BusinessTypeList:[],// 经营模式列表
BusinessTypeValue:0,// 经营模式的选择项
SettlementModeList:[],// 结算模式列表
SettlementModeValue:0,// 结算模式的选择项
timeTypeList:[{label:'近1周',value:1},{label:'近1月',value:2},{label:'近3月',value:3},{label:'近半年',value:4}],
selectTime:0,
selectTimeOther:false,
timePopup:false,
searchTimePopup: [null,null],
showNotice:false,
showModal:false,// 显示模式
}
},
computed:{
...mapState({'ProvinceCode':(state)=>{return state.userData.ProvinceCode}}),
},
methods: {
// 是否显示结算模式的悬浮框
handleShowNotice(){
this.showNotice = !this.showNotice
},
// 自定义时间选框里面的选择 改变悬浮框的自定义时间 外面页面上的时间也要跟着改变 强刷
handleChangeTimePopup(e,index){
this.searchTimePopup[index] = e.detail.value
this.$forceUpdate()
},
// 自定义时间选框的确定 赋值给页面上的时间
handleTimePopup(){
this.pageData.searchTime = this.searchTimePopup
this.$refs.timePopup.close()
},
// 经营模式和结算模式只能二选一 选了一个另一个就取消
// 选择了结算模式
handleChangeSettlement(value){
if (this.BusinessTypeValue!==0){
this.BusinessTypeValue = 0
}
this.SettlementModeValue = value
},
// 选择了经营模式
handleChangeBusiness(value){
if (this.SettlementModeValue!==0){
this.SettlementModeValue = 0
}
this.BusinessTypeValue = value
},
// 给悬浮框的自定义时间赋初始值
// 选择了自定义时间
handleTimeOther(){
this.searchTimePopup = JSON.parse(JSON.stringify(this.pageData.searchTime))
this.$refs.timePopup.open()
this.selectTimeOther = true
this.selectTime = 0
},
// 改变选择的时间
// 选择的时间类型 moment 拿到时间
handleChangeTime(value){
this.selectTimeOther = false
this.selectTime = value
let endTime
let startTime
let searchTime
if (this.selectTime===1){
endTime = moment().subtract(1, 'day').format('YYYY-MM-DD')
startTime = moment().subtract(7, 'day').format('YYYY-MM-DD')
searchTime = [startTime,endTime]
}else if(this.selectTime===2){
endTime = moment().subtract(1, 'day').format('YYYY-MM-DD')
startTime = moment().subtract(30, 'day').format('YYYY-MM-DD')
searchTime = [startTime,endTime]
}else if(this.selectTime===3){
endTime = moment().subtract(1, 'day').format('YYYY-MM-DD')
startTime = moment().subtract(90, 'day').format('YYYY-MM-DD')
searchTime = [startTime,endTime]
}else if(this.selectTime===4){
endTime = moment().subtract(1, 'day').format('YYYY-MM-DD')
startTime = moment().subtract(180, 'day').format('YYYY-MM-DD')
searchTime = [startTime,endTime]
}
this.pageData.searchTime = searchTime
},
// 拿到枚举的方法
async handleEnumeration(text){
const req ={
FieldExplainField: text,
sessionName: text,
FieldEnumStatus:true
}
const data = await request.$webGet('EShangApiMain/FrameWork/GetFieldEnumTree',req)
// 变成label、value的数据格式
let list = wrapTreeNode(data.Result_Data.List)
return list
},
handleConfirmCheckChange(){
// 老的选类型的方法 暂时不让他改 已经写死
this.checkBoxValue = this.checkChange
// 关闭悬浮框
this.$refs.popup.close()
// 没用的东西
this.isScreen= false
// 请求数据的方法
this.getList()
},
// 查询配置的关闭方法 暂时隐藏不用
handleClosePopup(){
this.checkChange = this.checkBoxValue
this.$refs.popup.close()
this.isScreen= false
this.BusinessTypeValue = 0
this.SettlementModeValue = 0
this.selectTime = 0
// this.getList()
},
// 删除查询字段
handleDelete(){
this.searchText = ''
},
// 更多筛选的点击打开悬浮框
handleSelect(){
this.$refs.popup.open()
this.isScreen= true
},
// 老的一个跳转方法 暂时用不到
toTrend(){
this.$util.toNextRoute('navigateTo','/pages/operatingStatements/operatingTrend?time='+this.pageData.searchTime[1])
},
// 改变时间的方法
bindDateChange(e,index){
let nowDate = this.pageData.searchTime[index]
if(e.detail.value != nowDate){
this.pageData.searchTime[index] = e.detail.value
this.$forceUpdate()
this.searchList()
}
},
// 套一层方法 可以进行其他操作 只有有其他操作的 业务更改之后就没了 暂时保留
searchList(){
this.getList()
},
// 老方法 显示具体条目
toggleRegion(item) {
item.show = !item.show ? true : false
this.$forceUpdate()
},
// 跳转详情带上参数
toDetail(item){
this.$util.toNextRoute('navigateTo', '/pages/operatingStatements/detail?pcode='+item.Province_Code+'&id=' +
item.Serverpart_Id + '&st=' + this.pageData.searchTime[0]+ '&et=' + this.pageData.searchTime[1]+
'&searchKey='+JSON.parse(JSON.stringify(this.checkBoxValue)) + '&searchValue='+this.requestText+
'&BusinessTypeValue='+this.BusinessTypeValue+'&SettlementModeValue='+this.SettlementModeValue)
item.visited = true
this.$forceUpdate()
},
// 页面请求的主要方法
getList(){
// copySearchText 是要显示在经营报表下方的红色字 每次请求前要清空 不能和searchText同源 不然清空搜索框 显示的文字也会消失
this.copySearchText= ''
uni.showLoading({
title:'正在加载',
mask:true
})
let _this = this
let searchTime = this.pageData.searchTime
// 接口要的查询字段类型 之前是可选的 用这样的方法写 暂时可以保留 不影响
let searchName = ''
this.checkBoxValue.forEach(item=>{
if (searchName){
searchName+=`,${item}`
}else{
searchName = item
}
})
let req;
req = {
startTime: searchTime[0],
endTime: searchTime[1],
SearchKeyName:searchName,
SearchKeyValue:this.searchText,
BusinessType:this.searchText?'':this.BusinessTypeValue?this.BusinessTypeValue:'',
SettlementMode:this.searchText?'':this.SettlementModeValue?this.SettlementModeValue:'',
}
// _this.$request.$webGet('WeChat/GetRevenueReport',{
request.$webGet('CommercialApi/Revenue/GetRevenueReport',req).then(res=>{
// 拿到数据之后的一些处理方法 看看就明白了
if(res.Result_Code==100) {
_this.pageData.msg = res.Result_Data
_this.pageData.msg.countave = (Number(_this.pageData.msg.Province_InsideAmount) / Number(_this.pageData.msg.TotalCount)).toFixed(2)
res.Result_Data.revenueRegionModels.map(n=>{
n.show = false
})
if(res.Result_Data.revenueInsideRegionModels){
res.Result_Data.revenueInsideRegionModels.map(n=>{
n.show = false
})
_this.insideRegionList = res.Result_Data.revenueInsideRegionModels
}
// _this.pageData.msg.SearchResult
// 判断一下 如果是有搜索框的值 就按照搜索框有的值显示
// 没有就出现结算模式 或者经营模式
if (this.searchText){
this.showModal = false
if (res.Result_Data.SearchResult){
let newList = []
res.Result_Data.SearchResult.forEach(item=>{
newList.push(item.split(this.searchText))
_this.pageData.msg.SearchResult = newList
_this.copySearchText = JSON.parse(JSON.stringify(this.searchText))
})
}
}else{
if (this.BusinessTypeValue || this.SettlementModeValue){
this.showModal = true
}
}
_this.ServerpartList = res.Result_Data.revenueRegionModels
}else if(res.Result_Code==200 || res.Result_Code==999){
_this.noDataText = '暂无数据'
_this.insideRegionList=[]
_this.pageData.msg = null
}else{
_this.pageData.msg = null
_this.noDataText = res.Result_Desc
_this.insideRegionList=[]
}
_this.requestText = _this.searchText
uni.hideLoading()
_this.pageData.isLoading =false
_this.$forceUpdate()
})
}
},
async onLoad(query) {
// 拿时间和拿传入的数据
this.lastDay = uni.getStorageSync('lastDay')
if (query.time){
this.queryTime = query.time
const date = new Date(this.queryTime)
let y = date.getFullYear()
let m = date.getMonth() + 1
const realDate = new Date(this.lastDay)
let realMonth = realDate.getMonth() + 1
if (m<realMonth){
if (m<10){
m = '0'+ m
}
let day = this.$util.getThisMonthDay(`${y}-${m}`)
let time = [`${y}-${m}-01`,`${y}-${m}-${day}`]
this.pageData.searchTime = time
}else{
if (m<10){
m = '0'+ m
}
let d = realDate.getDate()
if (d<10){
d = '0'+d
}
let time = [`${y}-${m}-01`,`${y}-${m}-${d}`]
this.pageData.searchTime = time
}
}
// 用枚举方法拿到枚举数组
this.BusinessTypeList = await this.handleEnumeration('BUSINESS_TYPE')
this.SettlementModeList = await this.handleEnumeration('SETTLEMENT_MODES')
// 调用接口拿到页面数据的方法
this.getList()
}
}
</script>
<style lang="scss" >
.page-body {
padding-bottom: 80rpx;
}
.meng{
width: 100vw;
height: 100vh;
position: fixed;
top: 0;left: 0;
z-index: 101;
}
.search_box {
position: relative;
width: 558rpx;
height: 72rpx;
background: #F2F4F5;
display: flex;
flex-direction: row;
align-items: center;
border-radius: 36rpx;
img {
width: 35rpx;
height: 35rpx;
margin: auto 16rpx auto 24rpx;
}
.select_input {
width: 420rpx;
border: none;
height: 40rpx;
font-size: 28rpx;
}
.delete{
width: 20px;
height: 20px;
position: absolute;
right: 0%;
z-index: 99;
}
}
.select_btn {
display: flex;
flex-direction: row;
align-items: center;
font-size: 28rpx;
color: #6C737A;
img {
width: 35rpx;
height: 35rpx;
margin-right:12rpx;
}
}
.popupBox{
width: 100%;
background: #fff;
box-sizing: border-box;
padding: 24rpx;
position: relative;
.popupContent{
margin-top: 24rpx;
.search_box {
position: relative;
width: 100%;
height: 72rpx;
background: #F2F4F5;
display: flex;
flex-direction: row;
align-items: center;
border-radius: 36rpx;
img {
width: 35rpx;
height: 35rpx;
margin: auto 16rpx auto 24rpx;
}
.select_input {
width: 80%;
border: none;
height: 40rpx;
font-size: 28rpx;
}
.delete{
width: 20px;
height: 20px;
position: absolute;
right: 0%;
z-index: 99;
}
}
.popupTitle{
font-size: 32rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: bold;
line-height: 40rpx;
margin-top: 24rpx;
.title{
font-size: 32rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: bold;
line-height: 40rpx;
}
.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: 500;
.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:100;
transform: translateY(-100%);
.noticeText{
display: block;
}
}
}
}
.timeList{
width: 100%;
display: flex;
align-items: center;
flex-flow: wrap;
padding: 12rpx 0;
.timeItem{
width: 22%;
margin-right: 3%;
box-sizing: border-box;
text-align: center;
background: #ffffff;
border: 1rpx solid #efefef;
margin-bottom: 8rpx;
}
.timeSelectItem{
background: #e8f3fd;
border: 1rpx solid #e8f3fd;
color: #4D95F0;
}
}
}
.title{
font-size: 32rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: bold;
line-height: 40rpx;
}
.delete{
width: 20px;
height: 20px;
}
.checkBox{
padding: 30rpx 0;
}
.btn{
position: absolute;
width: calc(100% - 48px);
//margin-left: 24px;
padding: 15rpx 0;
text-align: center;
border-radius: 16rpx;
color:#fff;
background: #0A98D5;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
}
}
::v-deep.vue-ref{
padding-bottom: 0px!important;
}
.timePopup{
width: 80vw;
height: 130px;
background: #fff;
box-sizing: border-box;
border-radius: 16rpx;
padding: 24rpx;
display: flex;
flex-direction: column;
justify-content: center;
.btn{
width: calc(100% - 48px);
margin-left: 24px;
padding: 15rpx 0;
text-align: center;
border-radius: 16rpx;
color:#fff;
background: #0A98D5;
margin-top: 30rpx;
}
}
.screen-box {
background-color: #fff;
padding: 0 20rpx;
position: sticky;
top: 0;
left: 0;
z-index: 9;
}
.screen-box .searchBtn{
margin-top: 12rpx;
box-sizing: border-box;
padding: 2rpx 10rpx;
border-radius: 6rpx;
background: rgba(22, 155, 213, 1);
color: #fff;
display: inline-block;
}
.screen-box .searchBox{
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.screen-box .searchBox .searchItem{
display: flex;
width: 50%;
align-items: center;
}
.searchBox .searchItem .searchLabel{
margin-right: 16rpx;
font-size: 16px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
line-height: 40rpx;
}
.screen-box .screen-unit {
display: flex;
align-items: center;
width: 200rpx;
padding: 0 14rpx;
line-height: 3;
}
.screen-box .mr20 {
margin-right: 20rpx;
color: #95999C;
}
.uni-icon-arrowdown {
font-size: 22rpx;
color: #C7C7C7;
margin-left: 8rpx;
}
.screen-box text {
line-height: 3;
}
.screen-box image{
width: 12rpx;
height: 8rpx;
margin: 0 16rpx;
vertical-align: middle;
}
.head-card {
padding: 12rpx 26rpx 40rpx;
background-color: #fff;
}
.head-card>view {
width: 330rpx;
//height: 190rpx;
color: #fff;
text-align: center;
padding-top: 30rpx;
font-size: 28rpx;
border-radius: 24rpx;
box-sizing: border-box;
}
.head-card .topDetail .detailBox{
width: 100%;
display: flex;
flex-wrap: wrap;
align-content: flex-start;
}
.head-card .topDetail .label{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
opacity: 0.8;
line-height: 40rpx;
margin-bottom: 2px;
}
.detailBox .detailItem{
width: 33%;
margin-bottom: 16px;
}
.detailBox .detailItem .value{
font-size: 16px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #fff;
line-height: 40rpx;
}
.detailBox .detailItem .label{
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
opacity: 0.8;
line-height: 40rpx;
margin-bottom: 2px;
}
.detailBox .detailItem .label .unit{
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #fff;
line-height: 40rpx;
margin-left: 2px;
}
.head-card>view:first-child {
background: linear-gradient(to left,#93a4ec 0%, #4b76e9 100%);
}
.head-card>view:last-child {
//margin-left: 30rpx;
background: linear-gradient(to left,#8cdade 0%, #82c2ce 100%);
position: relative;
//overflow: hidden;
}
.head-card .price-num {
font-family: 'Bahnschrift Regular';
font-size: 50rpx;
line-height: 1.5;
}
.all-diff {
background: linear-gradient(#f28785,#ee5b4c);
height: 36rpx;
line-height: 36rpx;
width: 126rpx;
color: #fff;
text-align: center;
position: absolute;
right: 0;
top: 0;
font-size: 20rpx;
border-radius: 0 0 0 54rpx;
}
.all-diff image {
width: 20rpx;
height: 17rpx;
margin-right: 8rpx;
}
.modle-title {
padding-left: 24rpx;
font-size: 30rpx;
padding-top: 32rpx;
//padding-bottom: 20rpx;
font-weight: bolder;
display: flex;
align-items: center;
}
.modleText{
width: 100%;
box-sizing: border-box;
padding: 0 24rpx 18rpx 74rpx;
.text{
font-size: 26rpx;
color: #929292;
white-space: pre-wrap;
}
}
.modle-title image {
max-width: 36rpx;
max-height: 36rpx;
margin-right: 14rpx;
}
.bg-white {
background-color: #fff;
margin: 0 24rpx;
border-radius: 12rpx;
padding-bottom: 26rpx;
}
.region-area-title {
color: #000;
font-weight: bolder;
padding: 26rpx 46rpx 0 56rpx;
position: relative;
display: flex;
}
/*日结上传*/
.region-title {
position: relative;
color: #929292;
/* font-weight: bolder; */
}
.region-title,.ct01 {
color: #000000;
}
.ct01 {
padding-top: 8rpx;
}
.region-area-title:before {
content: '';
position: absolute;
width: 0rpx;
height: 0rpx;
border: 0rpx;
border-left: 8rpx solid transparent;
border-right: 8rpx solid transparent;
border-top: 8rpx solid #BBB7B7;
left: 22rpx;
top: 48rpx;
transform: rotate(-90deg);
transition: all 0.4s;
display: block;
}
.active.region-area-title:before{
border-left: 8rpx solid transparent;
border-right: 8rpx solid transparent;
border-top: 8rpx solid #E0BB97;
transform: rotate(0deg);
}
.region-cell {
display: flex;
padding: 26rpx 46rpx 16rpx 56rpx;
align-items: flex-end;
}
.region-cell .active.uni-icon-arrowright::before {
transform: rotate(90deg);
}
.region-cell .uni-icon-arrowdown,.region-cell .uni-icon-arrowright {
font-size: 36rpx;
color: #5A5A5A;
/* padding-bottom: 12rpx; */
position: relative;
}
.region-cell .uni-icon-arrowright::before {
position: absolute;
right: -26rpx;
top: -46rpx;
transition: all 0.4s;
}
.region-cell .region-cell-unit {
flex: 2;
display: flex;
flex-direction: column;
color: #929292;
font-size: 26rpx;
line-height: 1.5;
text-align: right;
}
.region-cell .region-cell-unit:nth-child(1) {
flex: 3;
text-align: left;
}
.region-cell .region-cell-unit:nth-child(3) {
flex: 2.5;
}
.region-cell-image {
width: 48rpx;
display: flex;
align-items: center;
justify-content: flex-end;
height: 50rpx;
}
.region-cell image {
width: 14rpx;
height: 23rpx;
}
/*日结上传服务区*/
.region-cell-area {
box-sizing: border-box;
}
.region-cell-area li:nth-child(2n+1) {
background-color: #FCFCFC;
}
.region-cell-area li view:first-child{
display: flex;
align-items: center;
}
.region-cell-area li.visited view:first-child{
color:#007AFF;
}
.region-cell-area li:nth-child(2n+1) {
background-color: #F9F9FB;
}
.region-cell-area li:nth-child(2n) view:first-child:before {
content: '';
background-color: #5596F9;
width: 8rpx;
height: 8rpx;
border-radius: 8rpx;
display: block;
margin-right: 16rpx;
/* position: absolute;
left: 0rpx; */
}
.region-cell-area li:nth-child(2n+1) view:first-child:before {
content: '';
background-color: #FE6D67;
width: 8rpx;
height: 8rpx;
border-radius: 8rpx;
display: block;
margin-right: 16rpx;
/* position: absolute;
left: 0rpx; */
}
.region-cell-area li {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16rpx 46rpx 16rpx 56rpx;
position: relative;
text-align: left;
color: #2E2E2E;
}
.region-cell-area li>view {
flex: 2;
font-size: 22rpx;
position: relative;
}
.region-cell-area li>view text {
font-size: 22rpx;
flex: 1;
text-align: right;
}
.region-cell-area li>view text:last-child {
/* text-align: right; */
font-weight: bolder;
padding-right: 8rpx;
flex: 2;
}
.region-cell-area li> view:last-child:after {
content: '';
background: url('https://eshangtech.com/ShopICO/ahyd-BID/revenue/you-jt.png')no-repeat center;
width: 14rpx;
height: 24rpx;
background-size: contain;
display: block;
position: absolute;
right: -28rpx;
top: 8rpx;
}
</style>