index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032
  1. <template>
  2. <view>
  3. <view class="navbar-tit">{{title}}</view>
  4. <view class="statisticsData">
  5. <view class="statisticsData-item">
  6. <h3 style="font-size: 20px;">{{info.merchantAccountName}}</h3>
  7. </view>
  8. <view class="statisticsDataMain" v-if="indexData">
  9. <view class="statisticsData-item">
  10. <view class="statisticsData-head" @click="gotoUrl('pagesFinance/detailed/index')">
  11. <p>今日充电流水</p>
  12. <u-icon name="arrow-right-s-line" custom-prefix="custom-icon" color="#637AA2" size="36">
  13. </u-icon>
  14. </view>
  15. <view class="statisticsData-main">
  16. <h2>{{indexData.todayAmount?indexData.todayAmount.toFixed(2):0}}元</h2>
  17. </view>
  18. <view class="statisticsData-foot">
  19. <p>昨日</p>
  20. <h2 style="margin-left: 10px;">
  21. {{indexData.yesterdayAmount?indexData.yesterdayAmount.toFixed(2):0}}元</h2>
  22. </view>
  23. </view>
  24. <view class="statisticsData-item">
  25. <view>
  26. <h3>&nbsp;</h3>
  27. </view>
  28. <view class="statisticsData-head">
  29. <p>今日充电笔数</p>
  30. </view>
  31. <view class="statisticsData-main">
  32. <h2>{{indexData.todayEQNum?indexData.todayEQNum:0}}笔</h2>
  33. </view>
  34. <view class="statisticsData-foot">
  35. <p>本月</p>
  36. <h2 style="margin-left: 10px;">
  37. {{indexData.thisMonthAmount?indexData.thisMonthAmount.toFixed(2):0}}元</h2>
  38. </view>
  39. </view>
  40. </view>
  41. </view>
  42. <u-picker mode="time" v-model="popupShow" @confirm="changedate" :default-time="queryTime" :params="params"></u-picker>
  43. <u-picker mode="time" v-model="popupShow2" @confirm="changedate2" :default-time="queryTime2+'-1'" :params="params"></u-picker>
  44. <u-picker mode="selector" v-model="popupShow3" @confirm="changedate3" :range="stationList" range-key="name" :default-selector="[selectstationIndex]"></u-picker>
  45. <view class="statisticsChart">
  46. <view class="statisticsChart-head" style="margin-top: 20px;">
  47. <h4>流水统计</h4>
  48. <!-- <view class="navbar-screen" >
  49. {{startTime}}至{{endTime}}
  50. </view> -->
  51. <view class="navbar-screen" @click="popupShow = true" v-if="false">
  52. <span>{{showTime(queryTime)}}</span>
  53. <u-icon name="arrow-down" color="#b0b8c8" size="32" v-show="!popupShow"></u-icon>
  54. <u-icon name="arrow-up" color="#b0b8c8" size="32" v-show="popupShow"></u-icon>
  55. </view>
  56. </view>
  57. <u-calendar v-model="popupShow4" mode="range" @change="changedate4"></u-calendar>
  58. <view class="details detailstable">
  59. <p style="text-align: center; margin-bottom: 5px;" @click="popupShow4 = true">{{startTime}}至{{endTime}}
  60. <u-icon name="arrow-down" color="#b0b8c8" size="32" v-show="!popupShow4"></u-icon>
  61. <u-icon name="arrow-up" color="#b0b8c8" size="32" v-show="popupShow4"></u-icon>
  62. </p>
  63. <u-collapse :headStyle="{
  64. color:'#101010',
  65. fontWeight: 'bold',
  66. padding:'12px 0',
  67. borderBottom: '1px solid #ededed'
  68. }"
  69. v-if="stationFlowList.length">
  70. <u-collapse-item
  71. v-for="(item, index) in stationFlowList" :open="index==0" :title="item.stationName+' 总收入'+item.actualMoney.toFixed(2)+'元'" :key="index">
  72. <!-- -->
  73. <view class="detailsline">
  74. <view class="details-row details-row-1">
  75. <view class="span1">电费</view>
  76. <view class="span2">{{item.elecMoney.toFixed(2)}}<span>元</span></view>
  77. </view>
  78. <view class="details-row">
  79. <view class="span1">服务费</view>
  80. <view class="span2">{{item.serviceMoney.toFixed(2)}}<span>元</span></view>
  81. </view>
  82. </view>
  83. <view class="detailsline">
  84. <view class="details-row details-row-1">
  85. <view class="span1">总用电量</view>
  86. <view class="span2">{{(item.eq/10000).toFixed(1)}}<span>度</span></view>
  87. </view>
  88. <view class="details-row">
  89. <view class="span1">充电枪数量</view>
  90. <view class="span2">快充{{item.fastNum}}/慢充{{item.slowNum}}</view>
  91. </view>
  92. </view>
  93. <view class="detailsline" v-if="item.fastNum&&item.slowNum">
  94. <view class="details-row details-row-1">
  95. <view class="span1">快充枪平均充电量</view>
  96. <view class="span2" v-if="item.fastNum">{{(item.averageFast/10000).toFixed(1)}}<span>度/枪/天</span></view>
  97. <view class="span2" v-else>0<span>度/枪/天</span></view>
  98. </view>
  99. <view class="details-row">
  100. <view class="span1">慢充枪平均充电量</view>
  101. <view class="span2" v-if="item.slowNum" >{{(item.averageSlow/10000).toFixed(1)}}<span>度/枪/天</span></view>
  102. <view class="span2" v-else>0<span>度/枪/天</span></view>
  103. </view>
  104. </view>
  105. <view :style="item.slowDayNum==nowTime?'color: #ffffff;':'border-bottom: 1px solid #ededed;'"
  106. >查询范围内实际订单天数{{item.slowDayNum}}</view>
  107. </u-collapse-item>
  108. </u-collapse>
  109. </view>
  110. <view class="statisticsChart-head" style="margin-top: 20px;">
  111. <h4>收益统计</h4>
  112. <!-- <view class="navbar-screen" >
  113. {{startTime}}至{{endTime}}
  114. </view> -->
  115. <!-- <view class="navbar-screen" @click="popupShow2 = true"><span>筛选</span>
  116. <u-icon name="filter-2-fill" custom-prefix="custom-icon" color="#b0b8c8" size="32"></u-icon>
  117. </view> -->
  118. </view>
  119. <view class="details" v-if="indexData2&&indexData2.incomeMap">
  120. <view class="details-row2">
  121. <p @click="popupShow3 = true">{{selectstationName}}
  122. <u-icon name="arrow-down" color="#b0b8c8" size="32" v-show="!popupShow3"></u-icon>
  123. <u-icon name="arrow-up" color="#b0b8c8" size="32" v-show="popupShow3"></u-icon>
  124. </p>
  125. <p @click="popupShow2 = true">
  126. {{showTime(queryTime2)}}
  127. <u-icon name="arrow-down" color="#b0b8c8" size="32" v-show="!popupShow2"></u-icon>
  128. <u-icon name="arrow-up" color="#b0b8c8" size="32" v-show="popupShow2"></u-icon>
  129. </p>
  130. </view>
  131. <view class="details-row">
  132. <p>投资人收入</p>
  133. <span>{{indexData2.incomeMap.incomeAmount.toFixed(2)}}元</span>
  134. </view>
  135. <view class="details-row" v-if="false">
  136. <p>用电度数</p>
  137. <span>{{indexData2.incomeMap.electricQuantity/10000}}度</span>
  138. </view>
  139. <view class="details-row">
  140. <p>预估电费</p>
  141. <span>{{indexData2.incomeMap.costAmount.toFixed(2)}}元</span>
  142. </view>
  143. <view class="details-row">
  144. <p>服务费预估收益</p>
  145. <span><b>{{indexData2.incomeMap.serviceAmount.toFixed(2)}}元</b></span>
  146. </view>
  147. <view class="details-row">
  148. <p>月卡收益</p>
  149. <span>{{indexData2.incomeMap.cardIncomeAmount.toFixed(2)}}元</span>
  150. </view>
  151. </view>
  152. </view>
  153. <Tabbar :current="0" ref="tabbarMain"></Tabbar>
  154. <!-- <u-tabbar v-model="current" :list="tabbarList" active-color="#185ac6"></u-tabbar>
  155. -->
  156. </view>
  157. </template>
  158. <script>
  159. import Tabbar from '@/components/TabbarFinance.vue'
  160. import * as API from '@/apis/finance.js'
  161. import * as echarts from "echarts";
  162. //require("@/apis/echarts-5-3.min.js")
  163. //import * as echarts from "@/apis/echarts-5-3.min.js";
  164. import {
  165. daysDistance,
  166. beforeTimeStamp,
  167. currentTimeStamp,
  168. parseUnixTime
  169. } from '@/utils'
  170. export default {
  171. data() {
  172. return {
  173. popupShow3:false,
  174. params: {
  175. year: true,
  176. month: true,
  177. day: false,
  178. hour: false,
  179. minute: false,
  180. second: false
  181. },
  182. isinit: true,
  183. form: {},
  184. form2: {},
  185. selecttype: "",
  186. selectstationId: "",
  187. selectdeviceNo: "",
  188. popupShow2: false,
  189. popupShow: false,
  190. popupShow4:false,
  191. nowTime:0,
  192. selectstationId2: "",
  193. selectstationIndex:0,
  194. selectstationName: "",
  195. info: {},
  196. title: "",
  197. showdate: false,
  198. showdate2: false,
  199. queryTime:"",
  200. queryTime2:"",
  201. indexData: {},
  202. indexData2: null,
  203. myChart: null,
  204. myChartReady: false,
  205. myChartTime: false,
  206. subsection: [{
  207. name: '金额'
  208. },
  209. {
  210. name: '笔数'
  211. }
  212. ],
  213. stationFlowList: [],
  214. stationList: [],
  215. stationListSon: [],
  216. tabbarList: [{
  217. iconPath: "bar-chart-box-fill",
  218. selectedIconPath: "bar-chart-box-fill",
  219. text: '统计',
  220. count: 0,
  221. isDot: true,
  222. customIcon: true,
  223. },
  224. {
  225. iconPath: "article-fill",
  226. selectedIconPath: "article-fill",
  227. text: '明细',
  228. midButton: true,
  229. customIcon: true,
  230. },
  231. {
  232. iconPath: "account-pin-box-fill",
  233. selectedIconPath: "account-pin-box-fill",
  234. text: '我的',
  235. count: 0,
  236. isDot: false,
  237. customIcon: true,
  238. },
  239. ],
  240. endTime:'',
  241. endTime2:'',
  242. current: 0,
  243. background: {
  244. background: 'none'
  245. },
  246. value: '',
  247. type: 'select',
  248. show: false,
  249. border: true,
  250. step: 0,
  251. stepname: '',
  252. startTime:'',
  253. stepid: 0,
  254. }
  255. },
  256. onShow() {
  257. if (this.$refs.tabbarMain) {
  258. this.$refs.tabbarMain.setcount(0);
  259. }
  260. },
  261. onLoad() {
  262. this.title = "收益统计"
  263. this.info = this.carhelp.getPersonInfo("merchantUser")
  264. },
  265. components: {
  266. Tabbar
  267. },
  268. onReady() {
  269. var date=new Date();
  270. this.nowTime=7
  271. this.queryTime=parseUnixTime(currentTimeStamp(), '{y}-{m}');
  272. this.queryTime2=parseUnixTime(currentTimeStamp(), '{y}-{m}'),
  273. console.log(this.queryTime);
  274. this.startTime = parseUnixTime(beforeTimeStamp(7), '{y}-{m}-{d}')
  275. this.endTime = parseUnixTime(beforeTimeStamp(1), '{y}-{m}-{d}')
  276. //this.startTime2 = parseUnixTime(beforeTimeStamp(6), '{y}-{m}-{d}')
  277. this.endTime2 = parseUnixTime(currentTimeStamp(), '{y}-{m}-{d}')
  278. this.getStation()
  279. },computed:{
  280. // startTime(){
  281. // return this.queryTime+'-1'
  282. // },
  283. startTime2(){
  284. return this.queryTime2+'-1'
  285. },
  286. },
  287. methods: {
  288. showTime(name){
  289. if(!name){
  290. return ''
  291. }
  292. return name.replace('-','年')+'月';
  293. },
  294. getStation(bl) {
  295. API.stationList().then((res) => {
  296. this.stationList = res.data.stationList
  297. this.stationList.unshift({
  298. id:'',name:"全部站点"
  299. })
  300. this.selectstationName="全部站点"
  301. this.stationListSon = res.data.deviceList
  302. this.getDataHome()
  303. this.getData()
  304. this.getData2()
  305. }).catch(error => {
  306. uni.showToast({
  307. title: error
  308. })
  309. })
  310. },
  311. resetBtn() {
  312. this.nowTime=7
  313. this.startTime = parseUnixTime(beforeTimeStamp(6), '{y}-{m}-{d}')
  314. this.endTime = parseUnixTime(currentTimeStamp(), '{y}-{m}-{d}')
  315. this.selecttype = ""
  316. this.selectstationId = ""
  317. this.selectdeviceNo = ""
  318. this.form = {
  319. type: this.selecttype,
  320. stationId: this.selectstationId,
  321. deviceNo: this.selectdeviceNo,
  322. };
  323. this.popupShow = false;
  324. this.list = [];
  325. this.getData()
  326. },
  327. okbtn() {
  328. this.popupShow = false;
  329. this.form = {
  330. type: this.selecttype,
  331. stationId: this.selectstationId,
  332. deviceNo: this.selectdeviceNo,
  333. };
  334. this.list = [];
  335. this.getData()
  336. },
  337. resetBtn2() {
  338. this.startTime2 = parseUnixTime(beforeTimeStamp(6), '{y}-{m}-{d}')
  339. this.endTime2 = parseUnixTime(currentTimeStamp(), '{y}-{m}-{d}')
  340. this.selectstationId2 = ""
  341. this.form2 = {
  342. stationId: this.selectstationId2,
  343. };
  344. this.popupShow2 = false;
  345. this.getData2()
  346. },
  347. okbtn2() {
  348. this.popupShow2 = false;
  349. this.form2 = {
  350. stationId: this.selectstationId2,
  351. };
  352. this.getData2()
  353. },
  354. getDataHome() {
  355. API.homeHeadStatistics().then((res) => {
  356. this.indexData = res.data;
  357. }).catch(error => {
  358. uni.showToast({
  359. title: error
  360. })
  361. })
  362. },
  363. getData() {
  364. this.form.startDate = this.startTime,
  365. this.form.endDate = this.endTime
  366. API.homeFlowStatistics(this.form).then((res) => {
  367. this.stationFlowList = res.data.stationFlowList;
  368. this.nowTime=daysDistance(this.startTime, this.endTime)+1;
  369. console.log(this.nowTime)
  370. }).catch(error => {
  371. uni.showToast({
  372. title: error
  373. })
  374. })
  375. },
  376. getData2() {
  377. uni.showLoading({
  378. title: "加载中",
  379. mask: true,
  380. })
  381. this.form2.startDate = this.startTime2,
  382. this.form2.endDate = this.endTime2
  383. API.homeIncomeStatistics(this.form2).then((res) => {
  384. this.indexData2 = res.data
  385. uni.hideLoading()
  386. }).catch(error => {
  387. uni.showToast({
  388. title: error
  389. })
  390. })
  391. },
  392. changesub(e) {
  393. this.current = e
  394. this.getPie()
  395. },
  396. changedate4(e) {
  397. this.startTime = e.startDate
  398. this.endTime = e.endDate
  399. this.okbtn()
  400. },
  401. changedate3(e) {
  402. console.log(e)
  403. var index=e[0];
  404. var obj=this.stationList[index];
  405. this.selectstationId2=obj.id;
  406. this.selectstationIndex=index;
  407. this.selectstationName=obj.name;
  408. this.okbtn2()
  409. },
  410. changedate(e) {
  411. console.log(e)
  412. this.queryTime=e.year+'-'+e.month;
  413. this.startTime=e.year+'-'+e.month+'-1';
  414. if(e.month=='12'){
  415. this.endTime=(e.year)+"/12/31"
  416. }else{
  417. var b=e.year+'/'+(parseInt(e.month)+1)+'/1';
  418. var a=beforeTimeStamp(1,b);
  419. this.endTime= parseUnixTime(a, '{y}-{m}-{d}')
  420. }
  421. this.okbtn()
  422. },
  423. changedate2(e) {
  424. console.log(e)
  425. this.queryTime2=e.year+'-'+e.month;
  426. if(e.month=='12'){
  427. this.endTime2=(e.year)+"/12/31"
  428. }else{
  429. var b=e.year+'/'+(parseInt(e.month)+1)+'/1';
  430. var a=beforeTimeStamp(1,b);
  431. this.endTime2= parseUnixTime(a, '{y}-{m}-{d}')
  432. }
  433. this.okbtn2()
  434. },
  435. getPie1(list) {
  436. var getData = [];
  437. var map = new Map()
  438. var stationNum = 0;
  439. list.forEach(item => {
  440. var value = this.current ? item.eqNum : item.amount
  441. if (value) {
  442. var stationName = ""
  443. var obj = this.stationListSon.find(item2 => {
  444. return item2.deviceNo == item.deviceNo
  445. })
  446. if (obj && obj.stationId) {
  447. var obj2 = this.stationList.find(item3 => {
  448. return item3.id == obj.stationId
  449. })
  450. if (obj2 && obj2.name) {
  451. stationName = obj2.name;
  452. }
  453. if (!map.has(obj.stationId)) {
  454. map.set(obj.stationId, {
  455. id: obj.stationId,
  456. value: value,
  457. name: stationName,
  458. })
  459. this.stepid = obj.stationId;
  460. stationNum++;
  461. } else {
  462. var omap = map.get(obj.stationId)
  463. var addvalue = (omap.value * 100 + value * 100) / 100
  464. map.set(obj.stationId, {
  465. id: obj.stationId,
  466. value: addvalue,
  467. name: stationName,
  468. })
  469. }
  470. }
  471. }
  472. })
  473. map.forEach((item, i) => {
  474. getData.push(item)
  475. })
  476. if (stationNum == 1) {
  477. this.step = 2; //只有一个站, 就不拆分了
  478. } else {
  479. this.stepid = 0;
  480. }
  481. return getData;
  482. },
  483. getPie2(list) {
  484. var getData = [];
  485. var sz = ['自行车充电桩', '直流汽车充电桩', '交流汽车充电桩']
  486. list.forEach(item => {
  487. var value = this.current ? item.eqNum : item.amount
  488. if (value) {
  489. var typeName = "";
  490. var stationName = ""
  491. var obj = this.stationListSon.find(item2 => {
  492. return item2.deviceNo == item.deviceNo
  493. })
  494. if (this.stepid != obj.stationId) {
  495. return
  496. }
  497. if (obj && obj.stationId) {
  498. var obj2 = this.stationList.find(item3 => {
  499. return item3.id == obj.stationId
  500. })
  501. if (obj2 && obj2.name) {
  502. stationName = obj2.name;
  503. }
  504. }
  505. if (obj && obj.type) {
  506. typeName = sz[obj.type]
  507. }
  508. getData.push({
  509. id: item.id,
  510. value: value,
  511. name: item.deviceName,
  512. typeName: typeName,
  513. stationName: stationName
  514. })
  515. }
  516. })
  517. return getData;
  518. },
  519. getPie() {
  520. var list = this.indexData.pieChart;
  521. var unit = this.current ? '笔' : '元'
  522. var getData = [];
  523. if (this.step == 0) {
  524. getData = this.getPie1(list)
  525. }
  526. if (this.step == 1 || this.step == 2) {
  527. getData = this.getPie2(list)
  528. }
  529. if (!this.myChart) {
  530. this.myChart = echarts.init(document.getElementById('pieEcharts'));
  531. }
  532. // 指定图表的配置项和数据
  533. var option = {
  534. tooltip: {
  535. trigger: 'item',
  536. formatter: (value) => {
  537. var info = value.data;
  538. var showvalue = info.value;
  539. if (!this.current) {
  540. showvalue = info.value.toFixed(2)
  541. }
  542. if (this.step == 0) {
  543. if (!info) {
  544. return ""
  545. }
  546. return info.name + ' <br/> ' + showvalue + unit
  547. }
  548. if (this.step == 1 || this.step == 2) {
  549. return info.stationName + ' <br/> ' + info.name + ' <br/> ' + showvalue + unit +
  550. ' <br/> ' + info.typeName
  551. }
  552. },
  553. position: function(point, params, dom, rect, size) {
  554. return ['10%', '0%']
  555. }
  556. },
  557. series: [{
  558. //name: 'Access From',
  559. type: 'pie',
  560. radius: '40%',
  561. data: getData,
  562. emphasis: {
  563. itemStyle: {
  564. shadowBlur: 10,
  565. shadowOffsetX: 0,
  566. shadowColor: 'rgba(0, 0, 0, 0.5)'
  567. }
  568. },
  569. label: {
  570. fontWeight: "bold",
  571. fontSize: 14,
  572. }
  573. }]
  574. };
  575. // 使用刚指定的配置项和数据显示图表。
  576. this.myChart.setOption(option);
  577. var _this = this;
  578. if (!this.myChartReady) {
  579. this.myChartReady = true;
  580. //双击事件不能生效 , 改为多次点击
  581. this.myChart.on('click', function(params) {
  582. var tid = _this.stepid; //上一次
  583. _this.stepid = params.data.id
  584. if (!_this.myChartTime || tid != _this.stepid) {
  585. _this.stepid = params.data.id
  586. _this.myChartTime = true;
  587. setTimeout(function() {
  588. console.log("setTimeout")
  589. _this.myChartTime = false;
  590. }, 500)
  591. return
  592. }
  593. if (_this.step == 0) {
  594. _this.step = 1
  595. _this.stepname = params.data.name
  596. _this.myChart.clear()
  597. _this.getPie()
  598. } else if (_this.step == 1) {
  599. //_this.step=0
  600. }
  601. // window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
  602. });
  603. }
  604. }
  605. }
  606. }
  607. </script>
  608. <style>
  609. page {
  610. background: url(../../assets/img/index_header_bg.png) no-repeat top center #f7f7f7;
  611. background-size: 100%;
  612. }
  613. </style>
  614. <style lang="scss" scoped>
  615. .detailstable {
  616. font-size: 16px;
  617. padding: 20px 15px !important;
  618. p{
  619. font-size: 14px;
  620. }
  621. .details-row-main{
  622. border-bottom: 1px solid #ededed;
  623. padding: 10px 0;
  624. }
  625. .detailsline {
  626. border-bottom: 1px solid #ededed;
  627. display: flex;
  628. .details-row {
  629. width: 48%;
  630. display: flex;
  631. justify-content: space-between;
  632. flex-direction: column;
  633. padding-left: 10px;
  634. margin-bottom: 10px;
  635. .span1 {
  636. color: rgba(136, 136, 136, 100);
  637. font-size: 14px;
  638. width: 100%;
  639. }
  640. .span2{
  641. font-size: 18px;
  642. width: 100%;
  643. color: #101010;
  644. span{
  645. font-size: 12px;
  646. }
  647. }
  648. }
  649. }
  650. .details-row-1 {
  651. padding-left: 0px !important;
  652. border-right: 1px solid #ededed;
  653. }
  654. }
  655. .details {
  656. margin-top: 16px;
  657. padding: 20px;
  658. background-color: #fff;
  659. border-radius: 8px;
  660. }
  661. .details-title {
  662. margin-bottom: 16px;
  663. h4 {
  664. font-weight: normal;
  665. font-size: 16px;
  666. position: relative;
  667. padding-left: 10px;
  668. &::after {
  669. content: '';
  670. position: absolute;
  671. height: 12px;
  672. width: 4px;
  673. background-color: #27B148;
  674. left: 0;
  675. top: 5px;
  676. }
  677. }
  678. }
  679. .details-row {
  680. display: flex;
  681. justify-content: space-between;
  682. align-items: center;
  683. margin-top: 15px;
  684. p {
  685. color: #37393c;
  686. font-weight: bold;
  687. }
  688. }
  689. .details-row2 {
  690. display: flex;
  691. justify-content: space-between;
  692. align-items: center;
  693. margin-top: 15px;
  694. p {
  695. // color: #37393c;
  696. // font-weight: bold;
  697. }
  698. }
  699. .popup-screen {
  700. padding: 20px;
  701. position: relative;
  702. .screen {
  703. padding-bottom: 30px;
  704. }
  705. .screen-item {
  706. margin-bottom: 20px;
  707. .screen-head {
  708. margin-bottom: 8px;
  709. font-size: 16px;
  710. }
  711. .screen-main {
  712. display: flex;
  713. // display: -webkit-box;
  714. flex-wrap: wrap;
  715. }
  716. .screen-entry {
  717. width: 29%;
  718. padding: 6px 0;
  719. display: flex;
  720. align-items: center;
  721. justify-content: center;
  722. background-color: #F2F5FA;
  723. text-align: center;
  724. margin-bottom: 10px;
  725. border-radius: 3px;
  726. margin-right: 6px;
  727. }
  728. .screen-entry.active {
  729. background-color: #185AC6;
  730. color: #fff;
  731. }
  732. }
  733. .screen-foot {
  734. position: fixed;
  735. left: 0;
  736. right: 0;
  737. bottom: 0;
  738. display: flex;
  739. height: 50px;
  740. border-top: 1px solid #ededed;
  741. .screen-btn-l {
  742. background-color: #fff;
  743. flex: 0.2;
  744. text-align: center;
  745. line-height: 50px;
  746. }
  747. .screen-btn-r {
  748. flex: 0.8;
  749. text-align: center;
  750. line-height: 50px;
  751. background-color: #185AC6;
  752. color: #fff;
  753. }
  754. }
  755. }
  756. .navbar-tit {
  757. color: #fff;
  758. font-size: 24px;
  759. padding-left: 15px;
  760. padding-top: 10px;
  761. }
  762. .statisticsData {
  763. background-color: #fff;
  764. margin: 12px;
  765. padding: 12px;
  766. border-radius: 8px;
  767. margin-top: 60px;
  768. }
  769. .statisticsDataMain {
  770. display: flex;
  771. }
  772. .statisticsData-item {
  773. flex: 1;
  774. .statisticsData-head {
  775. display: flex;
  776. align-items: center;
  777. p {
  778. color: #637AA2;
  779. font-size: 12px;
  780. }
  781. }
  782. .statisticsData-main {
  783. margin-top: 4px;
  784. font-size: 20px;
  785. }
  786. .statisticsData-foot {
  787. display: flex;
  788. align-items: center;
  789. margin-top: 16px;
  790. p {
  791. color: #637AA2;
  792. }
  793. h4 {
  794. margin-left: 8px;
  795. }
  796. }
  797. }
  798. .statisticsChart {
  799. margin: 16px;
  800. .statisticsChart-head {
  801. margin-bottom: 5px;
  802. display: flex;
  803. justify-content: space-between;
  804. align-items: center;
  805. h4 {
  806. font-weight: normal;
  807. font-size: 16px;
  808. position: relative;
  809. padding-left: 10px;
  810. &::after {
  811. content: '';
  812. position: absolute;
  813. height: 12px;
  814. width: 4px;
  815. background-color: #4E8DF6;
  816. left: 0;
  817. top: 5px;
  818. }
  819. }
  820. .statisticsChart-time {
  821. display: flex;
  822. align-items: center;
  823. p {
  824. color: #666;
  825. }
  826. }
  827. }
  828. .statisticsChart-main {
  829. background-color: #fff;
  830. padding: 10px 16px 16px 16px;
  831. border-radius: 8px;
  832. }
  833. }
  834. </style>