stationDetails.vue 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264
  1. <template>
  2. <view style="padding-bottom: 138px;">
  3. <ujp-navbar title="站点详情">
  4. <!-- <view class="iconfont qr-code">
  5. &#xe61a;
  6. </view> -->
  7. </ujp-navbar>
  8. <view v-if="stationDetail.station!=null" class="station-details">
  9. <u-image border-radius='15rpx' v-if="stationDetail.station != null && stationDetail.station.image != null" class="img" width="26.6%" height="75px" :src="stationDetail.station.image" loading-icon="photo" @click="previewImage(stationDetail.station.image)"></u-image>
  10. <view class="station-name" >
  11. {{stationDetail.station.name}}
  12. </view>
  13. <view class="details-item" style="margin-top: 22px;">
  14. <view class="iconfont font5" :style="stationDetail.station.type.indexOf('1')>=0?(stationDetail.station.type.indexOf('2')>=0?'color: #00BAC8;':'color: #9d9fff;'):('color: #00b962;')">&#xe60a;</view>
  15. <!-- style="color: #00b962;"-->
  16. <view class="item-text oldTextjp2" oldstyle="font-size: 16px;" >{{(stationDetail.station.type.indexOf('1')>=0?'直流快充':'')}}{{(stationDetail.station.type.indexOf(',')>=0?'/':'')}}{{(stationDetail.station.type.indexOf('2')>=0?'交流慢充':'')}}</view>
  17. </view>
  18. <view class="details-item">
  19. <view class="iconfont font5" style="color: #4e94ff;">&#xe60e;</view>
  20. <view class="item-text oldTextjp2" oldstyle="font-size: 16px;" >
  21. {{stationDetail.station.distance!=null&&stationDetail.station.distance>0.1 ? stationDetail.station.distance.toFixed(1)+'公里':'小于100米'}}
  22. </view>
  23. </view>
  24. <view class="details-item">
  25. <view class="iconfont font5" style="color: #ffad79;">&#xe621;</view>
  26. <view class="item-text oldTextjp2" oldstyle="font-size: 16px;" >
  27. {{stationDetail.station.describe}}</view>
  28. </view>
  29. <view class="station-address" @click="map">
  30. <img src="static/img/Frame 201.png" alt="">
  31. <view class="address-text oldTextjp" oldstyle="font-size: 16px;" >
  32. {{stationDetail.station.address}}
  33. </view>
  34. <!--
  35. <view class="address-font">
  36. <view class="iconfont">
  37. &#xe60c;
  38. </view>
  39. <view class="view-map" >
  40. 查看地图
  41. </view>
  42. </view>
  43. -->
  44. <view class="address-box">
  45. <view class="iconfont address-font" >
  46. &#xe60c;
  47. </view>
  48. <view class="view-map" style="text-align: center;">导航</view>
  49. </view>
  50. </view>
  51. </view>
  52. <view class="tabs-box">
  53. <u-tabs inactive-color="#888888" active-color="#101010" :list="list" :is-scroll="true"
  54. :current="current" @change="change"></u-tabs>
  55. </view>
  56. <view class="charging-gun" v-if="stationDetail.devices&&current==0">
  57. <view v-for="(device,index) in stationDetail.devices" :key="index">
  58. <template v-for="(item,i) in device.gunList" >
  59. <view class="item"
  60. :style="item.open?'':' border-bottom: 1px solid rgba(238, 242, 240, 100);'"
  61. :key="i+'_'+index" >
  62. <view
  63. :style="item.workStatusText.length>3?' padding: 0 10px':(item.workStatusText.length==3?'padding: 4px;':'padding: 10px;')"
  64. :class="{
  65. free:true,
  66. charging:item.enableShare&&item.workStatus!=0,
  67. 'not-open':!(item.enableShare&&device.online)
  68. }">
  69. {{item.workStatusText}}
  70. </view>
  71. <view class="info">
  72. <view class="name oldTextjp" oldstyle="font-size: 20px;line-height: 23px;">
  73. {{item.sortNo?item.sortNo:item.channelNo}}号/{{device.name}}
  74. </view>
  75. <view class="details oldTextjp2" @click="setOpen(item)" oldstyle="font-size: 16px;line-height:16px;">
  76. <text :style="device.type=='1' ? 'color:#CA9DFF':'color:#00B962'" style="margin-right:1px;">{{device.interfaceType}}{{device.chargingType}}</text> |
  77. <text style="margin-left: 1px;">{{device.chargingPower!=null?device.chargingPower+'kW':''}} <text class="iconfont" >{{item.open?'&#xe62c;':'&#xe607;'}}</text></text>
  78. </view>
  79. </view>
  80. <template v-if="item.enableShare&&device.online">
  81. <view class="tag" v-if="item.workStatus != 2 ">
  82. <view class="tag-item" @click="book(item,item.isAppointment&&item.enableAppointment)" :class="item.isAppointment&&item.enableAppointment?'':'not-open-tag'">
  83. 预约
  84. </view>
  85. <view class="tag-item" @click="book2(item,item.enableShare)" :class="item.enableShare?'':'not-open-tag'" >
  86. 充电
  87. </view>
  88. </view>
  89. <view class="persent" v-else>
  90. {{item.soc?'电量:'+( item.soc.toFixed(0))+'%':item.workStatusText}}
  91. </view>
  92. </template>
  93. </view>
  94. <view :key="i+'_aa'+index" class="open-time" v-show="item.open">
  95. <table>
  96. <tr>
  97. <td>开放充电时段:</td>
  98. <td v-if="!item.sharedWeekSettingList||item.sharedWeekSettingList.length==0">充电功能未开放</td>
  99. <template v-for="(time,index) in item.sharedWeekSettingList" >
  100. <td :key="index" v-if="index==0">{{time.startTime}}-{{time.endTime}}</td>
  101. </template>
  102. </tr>
  103. <template v-for="(time,index) in item.sharedWeekSettingList" >
  104. <tr :key="index" v-if="index==1">
  105. <td></td>
  106. <td>{{time.startTime}}-{{time.endTime}}</td>
  107. </tr>
  108. </template>
  109. </table>
  110. <table>
  111. <tr>
  112. <td>开放预约时段:</td>
  113. <td v-if="!item.reserveWeekSettingList||item.reserveWeekSettingList.length==0">预约功能未开放</td>
  114. <template v-for="(time,index) in item.reserveWeekSettingList" >
  115. <td :key="index" v-if="index==0">{{time.startTime}}-{{time.endTime}}</td>
  116. </template>
  117. </tr>
  118. <template v-for="(time,index) in item.reserveWeekSettingList" >
  119. <tr :key="index" v-if="index==1">
  120. <td></td>
  121. <td>{{time.startTime}}-{{time.endTime}}</td>
  122. </tr>
  123. </template>
  124. </table>
  125. </view>
  126. </template>
  127. </view>
  128. </view>
  129. <view class="price-explain"
  130. :class="{
  131. 'elderMode':elderMode
  132. }"
  133. v-show="current==1" >
  134. <u-cell-group>
  135. <u-cell-item
  136. @click="priceDetail(1)" v-if="stationDetail.fastPrice != null" title="快充" :value="'当前时段:'+stationDetail.fastPrice.startTime+'~'+stationDetail.fastPrice.endTime+' '+stationDetail.fastPrice.costPrice+'元/度(含电费'+stationDetail.fastPrice.electricityPrice+'元/度+服务费'+stationDetail.fastPrice.servicePrice+'元/度'"></u-cell-item>
  137. <u-cell-item
  138. @click="priceDetail(2)" v-if="stationDetail.slowPrice != null" title="慢充" :value="'当前时段:'+stationDetail.slowPrice.startTime+'~'+stationDetail.slowPrice.endTime+' '+stationDetail.slowPrice.costPrice+'元/度(含电费'+stationDetail.slowPrice.electricityPrice+'元/度+服务费'+stationDetail.slowPrice.servicePrice+'元/度'"></u-cell-item>
  139. <u-cell-item :arrow="false" v-if="false" title="停车费用" value="充电免停2小时停车费(临牌车不享受免停)"></u-cell-item>
  140. </u-cell-group>
  141. </view>
  142. <!-- 弹窗 -->
  143. <view>
  144. <u-modal v-model="show" confirm-text="去看空闲桩" cancel-text="查看处罚规则"
  145. confirm-color="#00B962">
  146. <view class="" style="padding: 15px 20px;">
  147. 因您近期存在预约超时未前往充电的违约行为,平台为保证每位车主的合理权益,
  148. 对您作出停用预约充电功能1天的处罚。
  149. 您可于<span style="color: #00b962;">2022年6月20日09时45分</span>后使用此功能。
  150. </view>
  151. </u-modal>
  152. </view>
  153. </view>
  154. </template>
  155. <script>
  156. import * as indexAPI from '@/apis/index.js'
  157. import * as WxJsApi from '@/utils/wxJsApi.js'
  158. import MapLoader from '@/utils/AMap'
  159. import * as api from "@/apis/site.js"
  160. let _self;
  161. export default {
  162. data() {
  163. return {
  164. elderMode:false,
  165. userId:'',
  166. show:false,
  167. list:[
  168. {"name":"充电桩"},
  169. {"name":"价格说明"}
  170. ],
  171. current: 0,
  172. currentPos:{
  173. /* name:'荆鹏软件园充电站',
  174. longitude: 112.28468,
  175. latitude: 30.307094,*/
  176. },
  177. station:{},
  178. stationDetail:
  179. {
  180. devices:[],
  181. slowPrice:null,
  182. station:null,
  183. fastPrice:null
  184. },
  185. info:{
  186. station:{
  187. time:'周一到周日 07:00~22:00(节假日除外)',
  188. /* id:1,
  189. name:'荆鹏软件园充电站',
  190. longitude: 112.28468,
  191. latitude: 30.307094,
  192. type:'交流慢充',
  193. distance:0.1,
  194. address:'湖北省荆州市沙市区江津东路附155号'*/
  195. },
  196. prices: [
  197. {name:'慢充',price:1.20,time:'00:00:00 ~ 23:59.59'},
  198. {name:'快充',price:1.20,time:'00:00:00 ~ 23:59.59'},
  199. ] ,
  200. park:{
  201. price:'2小时免费停车'
  202. },
  203. priceList:[],
  204. devices:{
  205. idleNum:1,
  206. total:6,
  207. items:[
  208. ]
  209. }
  210. }
  211. }
  212. },
  213. onLoad(op){
  214. _self = this;
  215. // document.getElementsByTagName('body')[0].style.setProperty('--mode',1)
  216. _self.processStationsInfo();
  217. if(op!=null){
  218. if(op.id != null && op.id != undefined){
  219. let data = {stationId:op.id};
  220. //if(station.distance != null)
  221. // _self.stationDetail.station.distance = station.distance;
  222. ////('station'+JSON.stringify(station))
  223. //_self.station = station;
  224. api.getChargingStationDetail(data).then(function(res){
  225. // //('站点详情'+JSON.stringify(res))
  226. //this.info.st
  227. if(res && res.result)
  228. {
  229. if(res.data){
  230. let data = res.data;
  231. //data.station.distance = station.distance;
  232. _self.stationDetail = data;
  233. if(_self.stationDetail.station){
  234. _self.list[0].name="充电桩("+_self.stationDetail.station.totalNum+")"
  235. }
  236. _self.processStationsInfo();
  237. if(_self.stationDetail.station.distance == null){
  238. _self.getPoint();
  239. }
  240. // //('data'+JSON.stringify(data));
  241. }
  242. }
  243. })
  244. }
  245. if(op.station != null){
  246. let station = JSON.parse(decodeURIComponent(op.station))
  247. let data = {stationId:station.id};
  248. if(station.distance != null)
  249. _self.stationDetail.station.distance = station.distance;
  250. //('station'+JSON.stringify(station))
  251. _self.station = station;
  252. api.getChargingStationDetail(data).then(function(res){
  253. //('站点详情'+JSON.stringify(res))
  254. //this.info.st
  255. if(res && res.result)
  256. {
  257. if(res.data){
  258. let data = res.data;
  259. data.station.distance = station.distance;
  260. _self.stationDetail = data;
  261. _self.processStationsInfo();
  262. // //('data'+JSON.stringify(data));
  263. }
  264. }
  265. })
  266. /*api.getChargingStationPrice(data).then(function(res){
  267. if(res.result){
  268. let data = res.data;
  269. if(data.prices){
  270. _self.list = [];
  271. for(let i = 0;i< data.prices.length;i++){
  272. let _item = data.prices[i];
  273. let item = {name:data.prices[i].name,items:[]};
  274. for(let j = 0;j<_item.priceList.length;j++){
  275. let _subitem = _item.priceList[j];
  276. let subitem = {time:'00:00-07:00',single_price:0.5,service_price:0.25,price:0.75};
  277. subitem.time = _subitem.startTime + '-'+_subitem.endTime;
  278. subitem.single_price = _subitem.electricityPrice;
  279. subitem.service_price = _subitem.servicePrice;
  280. subitem.price = _subitem.costPrice;
  281. item.items.push(subitem);
  282. }
  283. _self.priceList.push(item);
  284. }
  285. //('站点价格详情'+JSON.stringify(list));
  286. }
  287. }
  288. })*/
  289. //this.info.station = station;
  290. //('stationDetail onLoad'+JSON.stringify(station))
  291. }
  292. }
  293. },
  294. onReady(){
  295. this.elderMode = this.carhelp.get('getElderModeClass') == '长辈模式';
  296. if(this.elderMode)
  297. this.theme('elder')
  298. else
  299. this.theme('standard')
  300. if (this.carhelp.getPersonInfo()) {
  301. this.userId = this.carhelp.getPersonInfo().id;
  302. }
  303. WxJsApi.getWxConfig(['getLocation', 'addEventListener', 'scanQRCode']).then((res) => {
  304. // //(res)
  305. }).catch(error => {
  306. //(res)
  307. })
  308. },
  309. methods:{
  310. setOpen(item){
  311. if(item.open){
  312. item.open=false;
  313. }else{
  314. item.open=true
  315. }
  316. this.$forceUpdate()
  317. },
  318. getItem(item,device){
  319. return !device.online?('离线'):(item.enableShare&&device.online?item.workStatusText:'暂不开放')
  320. },
  321. change(index) {
  322. this.current = index;
  323. this.items = this.list[index].items;
  324. },
  325. previewImage(img){
  326. let imgs = [];
  327. imgs.push(img);
  328. uni.previewImage({
  329. urls:imgs,
  330. current:0
  331. })
  332. },
  333. book2(item,bl){
  334. if(bl){
  335. }else{
  336. return
  337. }
  338. uni.navigateTo({
  339. url:'/pages/searchPile/stationAndPile/chargingPileDetails?isback=1&id='+item.gunNo,
  340. })
  341. ////('book'+JSON.stringify(item))
  342. },
  343. book(item,bl){
  344. if(bl){
  345. }else{
  346. uni.showToast({
  347. title:'当前设备不可预约'
  348. })
  349. return
  350. }
  351. uni.navigateTo({
  352. url:'/pages/searchPile/apointment/apointmentRecharge?id='+item.gunNo,
  353. })
  354. ////('book'+JSON.stringify(item))
  355. },
  356. getPoint() {
  357. // //('getPoint')
  358. WxJsApi.getLocation().then((res) => {
  359. var latitude = parseFloat(res.latitude);
  360. var longitude = parseFloat(res.longitude);
  361. var startLngLat = {longitude: longitude,latitude: latitude};
  362. var endLngLat = {longitude: _self.stationDetail.station.longitude,latitude: _self.stationDetail.station.latitude};
  363. _self.calculateDistance(startLngLat,endLngLat);
  364. /*uni.showToast({
  365. title:'getPoint'+JSON.stringify(res)
  366. })*/
  367. ////('当前位置' +JSON.stringify(data))
  368. //this.latitude2 = latitude;
  369. //this.longitude2 = longitude;
  370. /*uni.showToast({
  371. title:JSON.stringify(res)
  372. })*/
  373. //this.message=JSON.stringify(res)
  374. }).catch(error => {
  375. uni.showToast({
  376. title:error//'getPoint'+JSON.stringify()
  377. })
  378. })
  379. },
  380. calculateDistance(startLngLat,endLngLat){
  381. var lnglat = new AMap.LngLat(startLngLat.longitude,startLngLat.latitude);
  382. var myDistance = lnglat.distance([endLngLat.longitude, endLngLat.latitude]);
  383. _self.stationDetail.station.distance = myDistance/1000;
  384. _self.stationDetail.station.time = myDistance/500;
  385. /*
  386. var _this = this;
  387. MapLoader().then(AMap1 => {
  388. this.AMap=AMap;
  389. var map=new AMap.Map("container", {
  390. center: [116.397559, 39.89621],
  391. zoom: 14
  392. });
  393. var lnglat = new AMap.LngLat(117.186602, 34.261579);
  394. //AMap.Walking
  395. AMap.plugin('AMap.Driving', function() {
  396. var driving = new AMap.Driving({
  397. // 驾车路线规划策略,AMap.DrivingPolicy.LEAST_TIME是最快捷模式
  398. policy: AMap.DrivingPolicy.LEAST_TIME
  399. })
  400. //var startLngLat = [116.379028, 39.865042]
  401. //var endLngLat = [116.427281, 39.903719]
  402. driving.search(startLngLat, endLngLat, function (status, result) {
  403. //(result)
  404. //(result.routes[0].time)//秒
  405. //(result.routes[0].distance)//米
  406. _self.stationDetail.station.distance = result.routes[0].distance/1000;
  407. _self.stationDetail.station.time = result.routes[0].time/60;
  408. })
  409. })
  410. }, e => {
  411. //_this.mui.toast('地图加载失败');
  412. //('地图加载失败', e)
  413. })*/
  414. },
  415. getScanCode() {
  416. if (this.userId) {
  417. WxJsApi.scanQRCode(1).then(res => {
  418. if(res) {
  419. indexAPI.scanCode(res).then((response) => {
  420. }).catch(error => {
  421. uni.showToast({
  422. title: 'scanQRCode'+error,
  423. icon: "none"
  424. })
  425. })
  426. }
  427. }).catch(error => {
  428. })
  429. } else {
  430. uni.navigateTo({
  431. url: '/pages/login/login'
  432. })
  433. }
  434. },
  435. processStationsInfo(){
  436. for(let i = 0;i <_self.stationDetail.devices.length;i++){
  437. for(let j = 0;j < _self.stationDetail.devices[i].gunList.length;j++){
  438. ////('j'+JSON.stringify(_self.stationDetail.devices[i].gunList[j]))
  439. _self.stationDetail.devices[i].gunList[j].open=false;
  440. }
  441. if(!_self.stationDetail.devices[i].online)
  442. {
  443. _self.stationDetail.devices[i].workStatus = 99;
  444. _self.stationDetail.devices[i].workStatusText ='不在线';
  445. continue;
  446. }
  447. ////('device['+i.toString()+']'+JSON.stringify(_self.stationDetail.devices[i]))
  448. _self.stationDetail.devices[i].workStatus = 2;
  449. _self.stationDetail.devices[i].workStatusText ='充电中';
  450. // //('站点详情'+JSON.stringify(_self.stationDetail.devices[i]))
  451. for(let j = 0;j < _self.stationDetail.devices[i].gunList.length;j++){
  452. ////('j'+JSON.stringify(_self.stationDetail.devices[i].gunList[j]))
  453. if(_self.stationDetail.devices[i].gunList[j].workStatus == 0)
  454. {
  455. _self.stationDetail.devices[i].workStatus =0;
  456. _self.stationDetail.devices[i].workStatusText ='空闲';
  457. }
  458. }
  459. }
  460. },
  461. navigate(){
  462. /*wx.openLocation({
  463. latitude: _self.station.latitude,//目的地latitude
  464. longitude: _self.station.longitude,//目的地longitude
  465. name: _self.station.name,
  466. address: _self.station.address,
  467. scale: 15//地图缩放大小,可根据情况具体调整
  468. });*/
  469. //('station'+JSON.stringify(_self.stationDetail.station))
  470. window.location.href="https://uri.amap.com/marker?position="+ _self.stationDetail.station.longitude+","+_self.stationDetail.station.latitude+"&name="+_self.stationDetail.station.name;
  471. },
  472. charge(){
  473. //('扫码充电')
  474. //#ifdef MP-WEIXIN
  475. uni.scanCode({
  476. success:function(res){
  477. uni.navigateTo({
  478. url:'chargingPileDetails?pile='+encodeURIComponent(JSON.stringify(data))
  479. })
  480. }
  481. })
  482. return;
  483. //#endif
  484. //('扫码充电1')
  485. uni.navigateTo({
  486. url:'chargingPileDetails'
  487. })
  488. },
  489. priceDetail(t){
  490. uni.navigateTo({
  491. url:'chargePriceDetails?stationId='+_self.stationDetail.station.id+"&type="+t
  492. })
  493. },
  494. map(){
  495. //('map'+JSON.stringify(_self.station))
  496. _self.station.address = 'xxxxxxxxxxxxx'
  497. //this.carhelp.set(_self.stationDetail.station.id,_self.station);
  498. uni.navigateTo({
  499. url:'stationDetailsMap?stationId='+_self.stationDetail.station.id
  500. //url:'stationDetailsMap?station='+encodeURIComponent(JSON.stringify(_self.station))
  501. })
  502. },theme(type) {
  503. if(type == 'elder')
  504. {
  505. document.getElementsByTagName('body')[0].setAttribute('data-theme',type);
  506. }
  507. else
  508. {
  509. document.getElementsByTagName('body')[0].setAttribute('data-theme',type);
  510. }
  511. }
  512. }
  513. }
  514. </script>
  515. <style lang="scss" scoped>
  516. @import "@/_theme.scss";
  517. .qr-code{
  518. font-size: 24px;
  519. color: #666666;
  520. position: absolute;
  521. right: 16px;
  522. }
  523. // 站点信息
  524. .station-details {
  525. width: 100%;
  526. height: 100%;
  527. padding: 20px 16px 0px;
  528. background-color: #fff;
  529. position: relative;
  530. .img{
  531. position: absolute;
  532. top: 13px;right: 16px;
  533. }
  534. .station-name {
  535. //line-height: 18px;
  536. color: #101010;
  537. @include themeify{
  538. line-height: themed('font-size4');
  539. font-weight: themed('fontWeight');
  540. font-size: themed('font-size4');
  541. letter-spacing: themed('letterSpacing');
  542. }
  543. /* line-height: 18px;*/
  544. margin-bottom: 11px;
  545. }
  546. .details-item {
  547. display: flex;
  548. justify-content: start;
  549. width: 100%;
  550. margin-top: 8px;
  551. line-height: 17px;
  552. @include themeify{
  553. font-size: themed('font-size1');
  554. }
  555. /*font-size: 12px;*/
  556. // position: relative;
  557. }
  558. .font5{
  559. }
  560. .item-text {
  561. color: rgba(102, 102, 102, 100);
  562. margin-left: 10px;
  563. // position: absolute;
  564. // left: 24px;
  565. // top: 1px;
  566. }
  567. .station-address {
  568. width: 100%;
  569. height: 40px;
  570. margin-top: 14px;
  571. position: relative;
  572. img {
  573. width: 100%;
  574. height: 100%;
  575. }
  576. .address-text {
  577. position: absolute;
  578. top: 12px;
  579. left: 0;
  580. @include themeify{
  581. font-size: themed('font-size1');
  582. line-height: themed('font-size4');
  583. height: themed('font-size4');
  584. }
  585. /* font-size: 12px*/
  586. }
  587. .address-box {
  588. /* font-size: 28px;*/
  589. color: #4e94ff;
  590. position: absolute;
  591. top: 0;
  592. right: 0;
  593. .address-font{
  594. @include themeify{
  595. font-size: themed('font-size8');
  596. }
  597. }
  598. .view-map{
  599. @include themeify{
  600. font-size: themed('font-size1');
  601. /* line-height: themed('font-size2');
  602. height: themed('font-size2'); */
  603. }
  604. }
  605. }
  606. }
  607. }
  608. // 价格详情
  609. .price-details {
  610. width: 100%;
  611. margin-top: 12px;
  612. background-color: #fff;
  613. padding: 20px 15px 16px 16px;
  614. position: relative;
  615. .detail-title {
  616. display: flex;
  617. justify-content: space-between;
  618. .title-left {
  619. @include themeify{
  620. font-size: themed('font-size3');
  621. }
  622. /* font-size: 16px;*/
  623. color: #101010;
  624. }
  625. .title-right {
  626. @include themeify{
  627. font-size: themed('font-size2');
  628. line-height: themed('font-size2');
  629. }
  630. /* font-size: 14px;
  631. line-height: 14px;*/
  632. color: #00b962;
  633. }
  634. .right-text {
  635. @include themeify{
  636. font-size: themed('font-size2');
  637. }
  638. /* font-size: 14px;*/
  639. position: absolute;
  640. top: 23px;
  641. right: 36px;
  642. }
  643. .right-font {
  644. /* width: 24px;
  645. height: 24px;
  646. line-height: 24px;
  647. font-size: 24px;*/
  648. @include themeify{
  649. font-size: themed('font-size7');
  650. width: themed('font-size7');
  651. height: themed('font-size7');
  652. line-height: themed('font-size7');
  653. }
  654. position: absolute;
  655. top: 20px;
  656. right: 12px;
  657. }
  658. }
  659. .price-item{
  660. padding: 16px 0;
  661. display: flex;
  662. border-bottom: 1px solid rgba(238, 242, 240, 100);
  663. .text1{
  664. width: 44px;
  665. /* height: 20px;
  666. line-height: 20px;*/
  667. border-radius: 50px;
  668. background-color: rgba(0, 185, 98, 100);
  669. color: rgba(255, 255, 255, 100);
  670. /* font-size: 12px;*/
  671. @include themeify{
  672. font-size: themed('font-size1');
  673. height: themed('font-size5');
  674. line-height: themed('font-size5');
  675. }
  676. text-align: center;
  677. }
  678. .text5{
  679. width: 44px;
  680. /* height: 20px;
  681. line-height: 20px;*/
  682. border-radius: 50px;
  683. background-color: #9d9fff;
  684. color: rgba(255, 255, 255, 100);
  685. @include themeify{
  686. font-size: themed('font-size1');
  687. height: themed('font-size5');
  688. line-height: themed('font-size5');
  689. }
  690. /*font-size: 12px;*/
  691. text-align: center;
  692. }
  693. .text2{
  694. /* width: 40px;
  695. line-height: 19px;*/
  696. margin-left: 8px;
  697. color: rgba(255, 98, 0, 100);
  698. /* font-size: 20px;*/
  699. @include themeify{
  700. font-size: themed('font-size5');
  701. line-height: themed('font-size5');
  702. width:themed('font-size15')
  703. }
  704. text-align: left;
  705. }
  706. .text3{
  707. margin-left: 4px;
  708. color: rgba(51, 51, 51, 100);
  709. /* font-size: 16px;*/
  710. @include themeify{
  711. font-size: themed('font-size3');
  712. }
  713. }
  714. .text4{
  715. // margin-left: 72px;
  716. /* font-size: 12px;
  717. line-height: 20px;*/
  718. @include themeify{
  719. font-size: themed('font-size3');
  720. line-height: themed('font-size5');
  721. }
  722. color: rgba(102, 102, 102, 100);
  723. }
  724. }
  725. .park-item{
  726. padding: 16px 0;
  727. display: flex;
  728. justify-content: space-between;
  729. .text-box{
  730. display: flex;
  731. }
  732. .text1{
  733. width: 44px;
  734. @include themeify{
  735. font-size: themed('font-size1');
  736. line-height: themed('font-size5');
  737. height: themed('font-size5');
  738. }
  739. /* height: 20px;
  740. line-height: 20px;*/
  741. border-radius: 50px;
  742. background-color: rgba(78, 148, 255, 100);
  743. color: rgba(255, 255, 255, 100);
  744. /* font-size: 12px;*/
  745. text-align: center;
  746. }
  747. .text2{
  748. margin-left: 8px;
  749. color: rgba(51, 51, 51, 100);
  750. @include themeify{
  751. font-size: themed('font-size3');
  752. }
  753. /* font-size: 16px;*/
  754. }
  755. .text3{
  756. @include themeify{
  757. font-size: themed('font-size1');
  758. line-height: themed('font-size5');
  759. }
  760. color: #666666;
  761. /* font-size: 12px;
  762. line-height: 20px;*/
  763. }
  764. }
  765. }
  766. // 设备详情
  767. .equipment-details{
  768. background-color: #fff;
  769. margin-top: 12px;
  770. padding:16px;
  771. .title{
  772. display: flex;
  773. justify-content: space-between;
  774. .title-left{
  775. @include themeify{
  776. font-size: themed('font-size3');
  777. height: themed('font-size3');
  778. font-weight: themed('fontWeight');
  779. letter-spacing: themed('letterSpacing');
  780. }
  781. /* height: 16px;*/
  782. color: rgba(16, 16, 16, 100);
  783. /* font-size: 16px;*/
  784. }
  785. .title-right{
  786. @include themeify{
  787. font-size: themed('font-size2');
  788. height: themed('font-size3');
  789. font-weight: themed('fontWeight');
  790. letter-spacing: themed('letterSpacing');
  791. }
  792. /* height: 16px;
  793. font-size: 14px;*/
  794. .free{
  795. color: #00b962;
  796. }
  797. }
  798. }
  799. .equipment-item{
  800. margin-left: 52px;
  801. margin-top: 20px;
  802. padding-bottom: 17px;
  803. border-bottom: 1px solid rgba(238, 242, 240, 100);
  804. position: relative;
  805. .left-font{
  806. color:#00b962 ;
  807. @include themeify{
  808. font-size: themed('font-size13');
  809. }
  810. /* font-size: 36px;*/
  811. position: absolute;
  812. left: -52px;
  813. top: -4px
  814. }
  815. .name{
  816. display: flex;
  817. .name-text{
  818. color: #101010;
  819. @include themeify{
  820. font-size: themed('font-size3');
  821. line-height: themed('font-size3');
  822. font-weight: themed('fontWeight');
  823. }
  824. /* font-size: 16px;
  825. line-height: 16px;*/
  826. }
  827. }
  828. .type{
  829. /* height: 17px;*/
  830. color: rgba(102, 102, 102, 100);
  831. @include themeify{
  832. font-size: themed('font-size1');
  833. height: themed('font-size4');
  834. }
  835. /* font-size: 12px;*/
  836. margin-top: 4px;
  837. }
  838. .charging-gun{
  839. display: flex;
  840. justify-content: space-between;
  841. width: 100%;
  842. margin-top: 12px;
  843. .iconfont{
  844. color: #a5aaa8;
  845. @include themeify{
  846. font-size: themed('font-size5');
  847. }
  848. /* font-size: 20px*/
  849. }
  850. .gun-num{
  851. margin-left: 8px;
  852. @include themeify{
  853. font-size: themed('font-size1');
  854. line-height: themed('font-size5');
  855. }
  856. /* font-size: 12px;
  857. line-height: 20px; */
  858. color: rgba(102, 102, 102, 100);
  859. }
  860. .free-state{
  861. color: rgba(0, 185, 98, 100);
  862. @include themeify{
  863. font-size: themed('font-size1');
  864. line-height: themed('font-size5');
  865. }
  866. /* font-size: 12px;
  867. line-height: 20px;*/
  868. margin-left: 12px;
  869. }
  870. .recharge-state{
  871. height: 17px;
  872. color: rgba(255, 98, 0, 100);
  873. @include themeify{
  874. font-size: themed('font-size1');
  875. line-height: themed('font-size5');
  876. }
  877. /* font-size: 12px;
  878. line-height: 20px;*/
  879. margin-left: 12px;
  880. }
  881. }
  882. }
  883. .tag-recharge{
  884. /*
  885. height: 16px;
  886. line-height: 15px;*/
  887. @include themeify{
  888. font-size: themed('font-size0');
  889. line-height: themed('font-size2');
  890. height: themed('font-size3');
  891. //width: themed('font-size14');
  892. min-width: 38px;
  893. }
  894. border-radius: 2px;
  895. color: rgba(255, 98, 0, 100);
  896. /* font-size: 10px;*/
  897. text-align: center;
  898. font-family: Arial;
  899. border: 1px solid rgba(255, 98, 0, 100);
  900. margin-left: 8px;
  901. }
  902. .tag-free{
  903. /* width: 28px;*/
  904. @include themeify{
  905. font-size: themed('font-size0');
  906. line-height: themed('font-size2');
  907. height: themed('font-size3');
  908. width: themed('font-size9');
  909. }
  910. /* height: 16px;
  911. line-height: 15px;*/
  912. border-radius: 2px;
  913. color: rgba(0, 185, 98, 100);
  914. /* font-size: 10px;*/
  915. text-align: center;
  916. font-family: Arial;
  917. border: 1px solid rgba(0, 185, 98, 100);
  918. margin-left: 8px;
  919. }
  920. }
  921. // 底部
  922. .bottom{
  923. width: 100%;
  924. height: 56px;
  925. background-color: #fff;
  926. position: fixed;
  927. left: 0;
  928. bottom: 0;
  929. padding: 12px 16px;
  930. display: flex;
  931. justify-content: space-between;
  932. z-index: 9999;
  933. .button1{
  934. width: 44%;
  935. height: 32px;
  936. border: 1px solid rgba(0, 185, 98, 100);
  937. color: rgba(0, 185, 98, 100);
  938. /* font-size: 14px;*/
  939. @include themeify{
  940. font-size: themed('font-size2');
  941. }
  942. }
  943. .button2{
  944. width: 44%;
  945. height: 32px;
  946. border-radius: 50px;
  947. background-color: rgba(0, 185, 98, 100);
  948. color: rgba(255, 255, 255, 100);
  949. @include themeify{
  950. font-size: themed('font-size2');
  951. }
  952. /* font-size: 14px;*/
  953. margin-left: 13px;
  954. }
  955. }
  956. .buttonAppointment{
  957. width: 120rpx;
  958. height: 56rpx;
  959. position: relative;
  960. top : -10rpx;
  961. right: -10rpx;
  962. border-radius: 100rpx;
  963. background-color: rgba(0, 185, 98, 100);
  964. color: rgba(255, 255, 255, 100);
  965. @include themeify{
  966. font-size: themed('font-size2');
  967. }
  968. /* font-size: 14px;*/
  969. margin-left: 13px;
  970. }
  971. .tabs-box {
  972. width: 100%;
  973. line-height: 87px;
  974. border-bottom: 1px solid #7FDCB0;
  975. margin-top: 12px;
  976. /deep/.u-scroll-box{
  977. width: 53.6% !important;
  978. margin: 0 auto;
  979. // background-color: #4e94ff;
  980. display: flex;
  981. }
  982. }
  983. .elderMode .u-cell_title{
  984. font-size: 22px;
  985. font-weight: bold !important;
  986. }
  987. .charging-gun{
  988. padding-bottom: 50px;
  989. background-color: #fff;
  990. .item{
  991. padding: 12px 0 8px 0;
  992. margin: 0 16px;
  993. display: flex;
  994. .free{
  995. max-width: 50px;
  996. display: flex;
  997. align-items: center;
  998. justify-content: center;
  999. background-color: rgba(228, 246, 234, 100);
  1000. color: rgba(0, 140, 74, 100);
  1001. border-radius: 8px;
  1002. text-align: center;
  1003. }
  1004. .charging{
  1005. background-color: rgba(241, 241, 241, 100);
  1006. color: rgba(74, 74, 74, 100);
  1007. }
  1008. .not-open{
  1009. background-color: rgba(255, 233, 233, 100);
  1010. color: rgba(255, 70, 70, 100);
  1011. }
  1012. .info{
  1013. width: 45vw;
  1014. margin-left: 8px;
  1015. .name{
  1016. font-size: 12px;
  1017. line-height: 16px;
  1018. color: rgba(16, 16, 16, 100);
  1019. white-space: nowrap;
  1020. overflow: hidden;
  1021. text-overflow: ellipsis;
  1022. }
  1023. .details{
  1024. height: 16px;
  1025. margin-top: 8px;
  1026. font-size: 12px;
  1027. .iconfont{
  1028. color: #999999;
  1029. font-size: 16px;
  1030. margin-left: 4px;
  1031. }
  1032. }
  1033. }
  1034. .tag{
  1035. width: 30%;
  1036. display: flex;
  1037. justify-content: space-around;
  1038. align-items: center;
  1039. margin-left:4px;
  1040. .tag-item{
  1041. width: 48px;
  1042. height: 24px;
  1043. line-height:24px;
  1044. border-radius: 50px;
  1045. background-color: rgba(0, 185, 98, 100);
  1046. color: rgba(255, 255, 255, 100);
  1047. text-align: center;
  1048. margin-left: 8px;
  1049. }
  1050. .not-open-tag{
  1051. background-color: rgba(192, 196, 208, 100);
  1052. }
  1053. }
  1054. .persent{
  1055. text-align: right;
  1056. font-size: 16px;
  1057. flex: 1;
  1058. }
  1059. }
  1060. }
  1061. .open-time{
  1062. padding-top:5px;
  1063. border-bottom: 1px solid rgba(238, 242, 240, 100);
  1064. padding-left: 76px;
  1065. padding-bottom: 19px;
  1066. line-height: 24px;
  1067. font-size: 16px;
  1068. color: rgb(136, 136, 136);
  1069. p{
  1070. text-indent: 112px;
  1071. }
  1072. }
  1073. /deep/.u-tab-bar{
  1074. height: 4px !important;
  1075. background-color: #00b962 !important;
  1076. width: 50px !important;
  1077. left: -15px !important;
  1078. bottom: -5px !important;
  1079. }
  1080. /deep/.u-cell__value{
  1081. text-align: left;
  1082. margin-left: 12px;
  1083. color: #101010;
  1084. }
  1085. /deep/.u-model__content__message{
  1086. line-height: 22px;
  1087. }
  1088. </style>