stationDetails.vue 49 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961
  1. <template>
  2. <view>
  3. <ujp-navbar title="站点详情">
  4. <view slot="right" style="margin-right: 10px;" @click="openModalBl=true">
  5. <view class="iconfont service">
  6. &#xe60d;
  7. </view>
  8. </view>
  9. </ujp-navbar>
  10. <u-alert-tips type="warning" @click="noticeShow=false" icon="volume-up-fill"
  11. v-show="noticeShow&&stationDetail.station&&stationDetail.station.maxSoc&&stationDetail.station.maxSoc!=100"
  12. :descStyle="{
  13. fontSize: '28rpx',
  14. color: '#ef7a30',
  15. }" :show-icon="true"
  16. :description="'【充电SOC限制】为保障充电安全,并积极响应主管部门对新能源汽车充电安全工作,从即日起,该站充电设施SOC上限阈值为'+(stationDetail&&stationDetail.station&&stationDetail.station.maxSoc?stationDetail.station.maxSoc:'')+'%,即充电量达到满充电量'+(stationDetail&&stationDetail.station&&stationDetail.station.maxSoc?stationDetail.station.maxSoc:'')+'%时,充电设施将自动结束充电。'">
  17. </u-alert-tips>
  18. <u-notice-bar mode="vertical" font-size="36" :more-icon="true" @click="noticeShow=true"
  19. v-show="!noticeShow&&stationDetail.station&&stationDetail.station.maxSoc&&stationDetail.station.maxSoc!=100"
  20. :list="['【充电SOC限制】为保障充电安全,并积极响应主管部门对新能源汽车充电安全工作,从即日起,该站充电设施SOC上限阈值为'+(stationDetail&&stationDetail.station&&stationDetail.station.maxSoc?stationDetail.station.maxSoc:'')+'%,即充电量达到满充电量'+(stationDetail&&stationDetail.station&&stationDetail.station.maxSoc?stationDetail.station.maxSoc:'')+'%时,充电设施将自动结束充电。']">
  21. </u-notice-bar>
  22. <view class="head" v-if="stationDetail.station!=null">
  23. <img @click="previewImage(stationDetail.station.image)" :src="stationDetail.station.image" mode=""></img>
  24. </view>
  25. <!-- 站点详情 -->
  26. <view class="stationDetail">
  27. <view class="stationDetailHead">
  28. <!-- 标题 -->
  29. <view class="title">
  30. {{stationDetail.station.name}}
  31. </view>
  32. <!-- 标签 -->
  33. <view class="tags sign">
  34. <view class="tags1 sign-1"
  35. v-if="station.giveDiscount&&station.discountRatio&&station.discountRatio!=100">
  36. 会员服务费{{discountRatio10(station.discountRatio)}}折</view>
  37. <view class="tags1 sign-3" v-if="station.category=='超充'">160kW超充站</view>
  38. <view class="tags1 sign-4" v-if="stationDetail.station.nightLowPriceEnabled">
  39. 夜间超低价</view>
  40. <view class="tags1 sign-2" v-if="stationDetail.station.tagList.length != 0"
  41. v-for="(tagName,tagIndex) in stationDetail.station.tagList" :key="tagIndex">{{tagName}}</view>
  42. </view>
  43. <u-line color="#EEF2F0" margin="24rpx 0"></u-line>
  44. <!-- 定位 -->
  45. <template v-if="stationDetail&&stationAddressList&&stationAddressList.length" >
  46. <view class="position" v-for="(item ,i) in stationAddressList" :key="i" >
  47. <view class="block">
  48. {{item.areaTitle}}
  49. </view>
  50. <view class="address">
  51. {{item.address}}
  52. </view>
  53. <view class="distance" @click="map(item)" >
  54. <view class="distance-icon">
  55. <img src="../../../assets/img/riFill-navigation-fill@1x.png" alt="">
  56. </view>
  57. <view class="distance-text">
  58. {{item.distance!=null&&item.distance>0.1 ? item.distance.toFixed(1)+'公里':'小于100米'}}
  59. </view>
  60. </view>
  61. </view>
  62. </template>
  63. <view class="position" v-else >
  64. <view class="address">
  65. {{stationDetail.station.address}}
  66. </view>
  67. <view class="distance" @click="map()" >
  68. <view class="distance-icon">
  69. <img src="../../../assets/img/riFill-navigation-fill@1x.png" alt="">
  70. </view>
  71. <view class="distance-text" v-if="stationDetail.station.distance">
  72. {{stationDetail.station.distance!=null&&stationDetail.station.distance>0.1 ? stationDetail.station.distance.toFixed(1)+'公里':'小于100米'}}
  73. </view>
  74. </view>
  75. </view>
  76. </view>
  77. <view class="stationDetailBody">
  78. <!-- 充电桩类型 -->
  79. <view class="type" v-if="numShowBl">
  80. <view class="type-box"
  81. v-if="stationDetail.station.superNum"
  82. :class="{
  83. 'checked':flag=='super',
  84. numShowview2:(stationDetail.station.superNum==0||stationDetail.station.slowNum==0||stationDetail.station.fastNum-stationDetail.station.superNum==0)
  85. }"
  86. @click="flag!='super'?flag='super':flag=''">
  87. <view class="box-top">
  88. <view class="super">
  89. </view>
  90. <view class="pile-type">
  91. 直流超充
  92. </view>
  93. </view>
  94. <view class="pile-amount">
  95. <view class="super">
  96. {{stationDetail.station.superAvailableNum}}空闲
  97. </view>
  98. <view class="cut">
  99. |
  100. </view>
  101. <view class="sum">
  102. {{stationDetail.station.superNum}}总
  103. </view>
  104. </view>
  105. <!-- 尖角 -->
  106. <view class="angle" v-if="flag=='super'">
  107. </view>
  108. </view>
  109. <view class="type-box"
  110. v-if="stationDetail.station.fastNum-stationDetail.station.superNum"
  111. :class="{
  112. 'checked':flag=='fast',
  113. numShowview2:(stationDetail.station.superNum==0||stationDetail.station.slowNum==0||stationDetail.station.fastNum-stationDetail.station.superNum==0),
  114. numShowviewleft:stationDetail.station.slowNum
  115. }"
  116. @click="flag!='fast'?flag='fast':flag=''">
  117. <view class="box-top">
  118. <view class="fast">
  119. </view>
  120. <view class="pile-type">
  121. 直流快充
  122. </view>
  123. </view>
  124. <view class="pile-amount">
  125. <view class="fast">
  126. {{stationDetail.station.fastAvailableNum-stationDetail.station.superAvailableNum}}空闲
  127. </view>
  128. <view class="cut">
  129. |
  130. </view>
  131. <view class="sum">
  132. {{stationDetail.station.fastNum-stationDetail.station.superNum}}总
  133. </view>
  134. </view>
  135. <!-- 尖角 -->
  136. <view class="angle" v-if="flag=='fast'">
  137. </view>
  138. </view>
  139. <view class="type-box"
  140. v-if="stationDetail.station.slowNum"
  141. :class="{
  142. 'checked':flag=='slow',
  143. numShowview2:(stationDetail.station.superNum==0||stationDetail.station.slowNum==0||stationDetail.station.fastNum-stationDetail.station.superNum==0)
  144. }"
  145. @click="flag!='slow'?flag='slow':flag=''">
  146. <view class="box-top">
  147. <view class="slow">
  148. </view>
  149. <view class="pile-type">
  150. 交流慢充
  151. </view>
  152. </view>
  153. <view class="pile-amount">
  154. <view class="free">
  155. {{stationDetail.station.slowAvailableNum}}空闲
  156. </view>
  157. <view class="cut">
  158. |
  159. </view>
  160. <view class="sum">
  161. {{stationDetail.station.slowNum}}总
  162. </view>
  163. </view>
  164. <!-- 尖角 -->
  165. <view class="angle" v-if="flag=='slow'">
  166. </view>
  167. </view>
  168. </view>
  169. <!-- 充电桩状态 -->
  170. <view class="pile-state" >
  171. <!-- 总计 -->
  172. <view class="statistics" >
  173. <view class="free">
  174. {{pilestate.num1}} 空闲
  175. </view>
  176. <view class="cut">
  177. |
  178. </view>
  179. <view class="busy">
  180. {{pilestate.num2}} 占用
  181. </view>
  182. <view class="cut">
  183. |
  184. </view>
  185. <view class="malfunction">
  186. {{pilestate.num3}}故障
  187. </view>
  188. </view>
  189. <!-- 充电枪详情 -->
  190. <view class="gun-details">
  191. <view class="item" v-for="(item,index) in stationDetailDevices"
  192. v-show="getShow(item)"
  193. :key="index">
  194. <view class="itemShowOpen">
  195. <view class="itemView">
  196. <!-- 充电桩状态 -->
  197. <view class="state" v-if="item.device.online" :class="{
  198. //预约
  199. 'charging a ':item.enableShare&&!item.enableShareWithinTime&&item.device.online,
  200. 'charging b ':item.enableShare&&item.workStatus!=0,
  201. 'charging c ':item.workStatus==2,
  202. //插枪
  203. 'off-line a ':(item.workStatus == 0&&item.insertStatus&&stationDetail.station.stationType!=50),
  204. 'off-line b':item.isRed&&item.workStatus!=2,
  205. }">
  206. <view class="state-icon">
  207. <img src="../../../assets/img/pileIcon.png" alt="">
  208. </view>
  209. <view class="state-text" v-if="item.workStatus == 0&&item.insertStatus&&stationDetail.station.stationType!=50">
  210. 已插枪
  211. </view>
  212. <view class="state-text" v-else>
  213. <span v-if="item.workStatusText.length<4">{{item.workStatusText}}</span>
  214. <span v-else-if="item.workStatusText.length==4" style=" display: flex; flex-direction: column;">
  215. <span>{{item.workStatusText.substring(0,2)}}</span>
  216. <span>{{item.workStatusText.substring(2)}}</span>
  217. </span>
  218. <span v-else>{{item.workStatusText}}</span>
  219. </view>
  220. </view>
  221. <view class="state off-line" v-else>
  222. <view class="state-icon">
  223. <img src="../../../assets/img/pileIcon.png" alt="">
  224. </view>
  225. <view class="state-text ">
  226. 离线
  227. </view>
  228. </view>
  229. <!-- 详细信息 -->
  230. <view class="infos">
  231. <view class="gun-name">
  232. <span v-if="item.sortNo">{{item.sortNo}}号<text>/</text></span>{{item.device.name}}{{item.device.gunList.length>1?'枪'+item.channelNo:''}}
  233. </view>
  234. <view class="else" @click="setOpen(item)">
  235. <view class="gun-type" :class="{
  236. colorCA9DFF:item.device.chargingType=='超充',
  237. color185AC6:item.device.chargingType=='快充',
  238. color00B962:item.device.chargingType=='慢充',
  239. }">
  240. {{item.device.interfaceType}}{{item.device.chargingType}}
  241. </view>|
  242. <view class="voltage">
  243. {{item.device.chargingPower!=null?item.device.chargingPower+'kW':''}}
  244. </view>
  245. <view class="more">
  246. <u-icon v-show="openlist.get(item.id)" name="arrow-down" color="#999999" size="12"></u-icon>
  247. <u-icon v-show="!openlist.get(item.id)" name="arrow-up" color="#999999" size="12"></u-icon>
  248. </view>
  249. </view>
  250. </view>
  251. </view>
  252. <template v-if="!item.isRed&&item.enableShare&&item.enableShareWithinTime&&item.device.online">
  253. <!-- 充电按钮 -->
  254. <view class="charge"
  255. v-if="!enableAppointmentBl(item)"
  256. @click="book(item,item.isAppointment&&!item.insertStatus)"
  257. :class="item.isAppointment&&!item.insertStatus?'':'not-open-tag'"
  258. >
  259. 预约
  260. </view>
  261. <!-- 充电按钮 -->
  262. <view class="charge"
  263. :style="item.haveLock&&item.lockStatus==1?'background-color:#009ED7':''"
  264. @click="book2(item,item.enableShare&&item.enableShareWithinTime)"
  265. :class="{
  266. 'not-open-tag':!(item.enableShare&&item.enableShareWithinTime),
  267. 'not-enable-Appointment':enableAppointmentBl(item)
  268. }"
  269. >
  270. 充电
  271. </view>
  272. </template>
  273. <!-- 电量 -->
  274. <view class="electric-quantity"
  275. :class="{
  276. 'not-enable-Appointment2':enableAppointmentBl(item)
  277. }"
  278. v-if="item.workStatus == 2 ">
  279. <img src="../../../assets/img/electricQuantity.png" alt="">
  280. <view class="percentage">
  281. {{item.soc?item.soc+'%':'充电中'}}
  282. </view>
  283. </view>
  284. </view>
  285. <view class="open-time" v-show="openlist&&openlist.get(item.id)" >
  286. <table>
  287. <tr v-if="pricesInfoCurrent">
  288. <td colspan="2">当前电价:
  289. <b style="color:#080808;margin-left: 4px;"
  290. v-if="(station&&station.giveDiscount||pricesInfoCurrent2.discountServicePrice)&&(!personInfo||personInfo.userType==1)">{{((pricesInfoCurrent.servicePrice*1000+pricesInfoCurrent.electricityPrice*1000)/1000).toFixed(2)}}元/度</b>
  291. <b v-else style="color:#080808;margin-left: 4px;">{{pricesInfoCurrent.costPrice.toFixed(2)}}元/度</b>
  292. </td>
  293. </tr>
  294. <tr v-if="item.device.deviceAddress">
  295. <td colspan="2">充电桩地址:
  296. <span style=" margin-left: 4px;">{{item.device.deviceAddress}}</span>
  297. </td>
  298. </tr>
  299. <tr>
  300. <td>开放充电时段:</td>
  301. <td
  302. v-if="!item.enableShare||!(item.sharedWeekSettingList&&item.sharedWeekSettingList.length)">
  303. 充电功能未开放</td>
  304. <template v-else v-for="(time,index) in item.sharedWeekSettingList">
  305. <td :key="index" v-if="index==0">{{time.startTime}}-{{time.endTime}}</td>
  306. </template>
  307. </tr>
  308. <template v-if="item.enableShare" v-for="(time,index) in item.sharedWeekSettingList">
  309. <tr :key="index" v-if="index==1">
  310. <td></td>
  311. <td>{{time.startTime}}-{{time.endTime}}</td>
  312. </tr>
  313. </template>
  314. <tr>
  315. <td>开放预约时段:</td>
  316. <td
  317. v-if="enableAppointmentBl(item)">
  318. 预约功能未开放
  319. </td>
  320. <template v-else v-for="(time,index) in item.reserveWeekSettingList">
  321. <td :key="index" v-if="index==0">{{time.startTime}}-{{time.endTime}}</td>
  322. </template>
  323. </tr>
  324. <template v-if="item.enableAppointment"
  325. v-for="(time,index) in item.reserveWeekSettingList">
  326. <tr :key="index" v-if="index==1">
  327. <td></td>
  328. <td>{{time.startTime}}-{{time.endTime}}</td>
  329. </tr>
  330. </template>
  331. </table>
  332. </view>
  333. </view>
  334. </view>
  335. </view>
  336. <!-- 价格信息 -->
  337. <view class="price-infos" v-if="pricesInfoCurrent2">
  338. <view class="title">
  339. 价格信息<text>({{pricesInfoCurrent2.startTime}}-{{pricesInfoCurrent2.endTime}})</text>
  340. </view>
  341. <view class="classify" v-if="(!personInfo||personInfo.userType==1)&&station&&(station.giveDiscount||(pricesInfoCurrent2.discountServicePrice))">
  342. <view class="item item-visitor">
  343. <view class="visitor">
  344. 游客价
  345. </view>
  346. <view class="unit-price">
  347. <text>{{(pricesInfoCurrent2.servicePrice+pricesInfoCurrent2.electricityPrice).toFixed(2)}}</text>
  348. <text class="unit">元/度</text>
  349. </view>
  350. </view>
  351. <view class="item item-member">
  352. <view class="visitor">
  353. 会员价
  354. </view>
  355. <view class="unit-price">
  356. <text>{{pricesInfoCurrent2.costPrice.toFixed(2)}}</text>
  357. <text class="unit">元/度</text>
  358. <text class="register" @click="gotoUrl('pages/login/login')">注册</text>
  359. </view>
  360. </view>
  361. </view>
  362. <view class="classify" v-else>
  363. <view class="item item-member-all">
  364. <view class="visitor">
  365. 当前电价
  366. </view>
  367. <view class="unit-price">
  368. <text>{{pricesInfoCurrent2.costPrice.toFixed(2)}}</text>
  369. <text class="unit">元/度</text>
  370. </view>
  371. </view>
  372. </view>
  373. <!-- 提示 -->
  374. <p class="hint">*该价格为含服务费价格,实际价格以扫码价格为准。</p>
  375. <!-- 表格 -->
  376. <view class="chat-box">
  377. <view class="chat-infos">
  378. <view class="item">
  379. <view class="name">
  380. <view class="icon icon1">
  381. </view>
  382. <view class="text">
  383. 时段
  384. </view>
  385. </view>
  386. <view class="value">
  387. {{pricesInfoCurrent2.startTime}}-{{pricesInfoCurrent2.endTime}}
  388. </view>
  389. </view>
  390. <view class="item">
  391. <view class="name">
  392. <view class="icon icon2">
  393. </view>
  394. <view class="text">
  395. 电价
  396. </view>
  397. </view>
  398. <view class="value">
  399. {{pricesInfoCurrent2.electricityPrice.toFixed(2)}}元/度
  400. </view>
  401. </view>
  402. <view class="item">
  403. <view class="name">
  404. <view class="icon icon3">
  405. </view>
  406. <view class="text">
  407. 服务费
  408. </view>
  409. </view>
  410. <view class="value" v-if="station">
  411. <span v-if="(personInfo&&personInfo.userType==2)&&(station.giveDiscount||(pricesInfoCurrent2.discountServicePrice))">
  412. {{pricesInfoCurrent2.discountServicePrice.toFixed(2)}}元/度</span>
  413. <span v-else>{{pricesInfoCurrent2.servicePrice.toFixed(2)}}元/度</span>
  414. </view>
  415. </view>
  416. </view>
  417. </view>
  418. <view class="chat_hhh">
  419. <view class="chatTime" v-for="(item,i) in pricesInfo"
  420. :style="'width:'+getW(item)"
  421. :class="{
  422. current1: pricesInfoCurrent.startTime==item.startTime,
  423. current2: pricesInfoCurrent2.startTime==item.startTime,
  424. }"
  425. @click="pricesInfoCurrent2=item"
  426. >
  427. <template v-if="station">
  428. <template v-if="(personInfo&&personInfo.userType==2)&&(station.giveDiscount||(item.discountServicePrice))">
  429. <span class="chats1" :style="'height:'+getH(item.discountServicePrice)">{{item.discountServicePrice}}</span>
  430. </template>
  431. <template v-else>
  432. <span class="chats1" :style="'height:'+getH(item.servicePrice)">{{item.servicePrice}}</span>
  433. </template>
  434. </template>
  435. <span class="chats2" :style="'height:'+getH(item.electricityPrice)">
  436. <span>{{item.electricityPrice}}</span>
  437. <span class="chats0" v-if="pricesInfoCurrent.startTime==item.startTime" >
  438. <span>当前</span>
  439. <span>时段</span>
  440. </span>
  441. <span class="chats9" v-else >
  442. <span>当前</span>
  443. <span>时段</span>
  444. </span>
  445. </span>
  446. </view>
  447. </view>
  448. <view class="chat_hhh_time">
  449. <span>00:00</span>
  450. <span>12:00</span>
  451. <span>24:00</span>
  452. </view>
  453. </view>
  454. <!-- 附加信息 -->
  455. <view class="overhead-infos" v-if="stationDetail&&(stationDetail.station.describe||stationDetail.station.parkingDescription)">
  456. <view class="item" v-if="stationDetail.station.describe" >
  457. <view class="title">
  458. 营业时间
  459. </view>
  460. <view class="value">
  461. {{stationDetail.station.describe}}<text></text>
  462. </view>
  463. </view>
  464. <u-line margin="24rpx 0 " color="#F0F0F2"></u-line>
  465. <view class="item" v-if="stationDetail.station.parkingDescription" >
  466. <view class="title">
  467. 停车费
  468. </view>
  469. <view class="value" @click="()=>{if(stationDetail.station.parkingSimpleDescription){parkingTips=true}}">
  470. {{stationDetail.station.parkingDescription}}
  471. <text v-if="stationDetail.station.parkingSimpleDescription" ><u-icon name="arrow-right" color="#999999" size="28"></u-icon></text>
  472. </view>
  473. </view>
  474. </view>
  475. </view>
  476. </view>
  477. <u-modal v-model="parkingTips" title="新能源汽车停车费说明" :title-style="{fontSize: '40rpx'}" confirm-text="知道了"
  478. confirm-color="#53b56b">
  479. <view style="padding: 15px;" v-html="stationDetail.station.parkingSimpleDescription"></view>
  480. </u-modal>
  481. <u-modal v-model="show" confirm-text="去看空闲桩" cancel-text="查看处罚规则" confirm-color="#00B962">
  482. <view class="" style="padding: 15px 20px;">
  483. 因您近期存在预约超时未前往充电的违约行为,平台为保证每位车主的合理权益,
  484. 对您作出停用预约充电功能1天的处罚。
  485. 您可于<span style="color: #00b962;">2022年6月20日09时45分</span>后使用此功能。
  486. </view>
  487. </u-modal>
  488. <u-modal v-model="openModalBl" @confirm="confirmPhoneBl" confirm-text="拨打电话" confirm-color="#606266"
  489. :show-cancel-button="true" ref="uModal" :asyncClose="true" title="客服电话" :content="consumerPhone"
  490. :content-style="{fontSize: '24px',color: '#101010'}"></u-modal>
  491. </view>
  492. </template>
  493. <script>
  494. import * as indexAPI from '@/apis/index.js'
  495. import * as WxJsApi from '@/utils/wxJsApi.js'
  496. import MapLoader from '@/utils/AMap'
  497. import * as api from "@/apis/site.js"
  498. let _self;
  499. export default {
  500. data() {
  501. return {
  502. openModalBl: false,
  503. showNt: false,
  504. showNtStep: 0,
  505. showNtValue: 30,
  506. pricesInfoCurrent: null,
  507. pricesInfoCurrent2:null,
  508. noticeShow: false,
  509. parkingTips: false,
  510. stationId: '',
  511. pricesInfo: [],
  512. devicesId: '',
  513. elderMode: false,
  514. userId: '',
  515. show: false,
  516. showtips: true,
  517. list: [{
  518. "name": "充电桩"
  519. },
  520. {
  521. "name": "价格说明"
  522. }
  523. ],
  524. current: 0,
  525. currentPos: {
  526. /* name:'荆鹏软件园充电站',
  527. longitude: 112.28468,
  528. latitude: 30.307094,*/
  529. },
  530. stationAddressList: [],
  531. station: {},
  532. stationDetail: {
  533. devices: [],
  534. slowPrice: null,
  535. station: {},
  536. fastPrice: null
  537. },
  538. openlist: null,
  539. personInfo: null,
  540. info: {
  541. station: {
  542. time: '周一到周日 07:00~22:00(节假日除外)',
  543. /* id:1,
  544. name:'荆鹏软件园充电站',
  545. longitude: 112.28468,
  546. latitude: 30.307094,
  547. type:'交流慢充',
  548. distance:0.1,
  549. address:'湖北省荆州市沙市区江津东路附155号'*/
  550. },
  551. prices: [
  552. ],
  553. park: {
  554. price: '2小时免费停车'
  555. },
  556. uuid: '',
  557. setIntervalBool: true,
  558. priceList: [],
  559. platform: '',
  560. personInfo: {},
  561. consumerPhone: "",
  562. devices: {
  563. idleNum: 1,
  564. total: 6,
  565. items: [
  566. ]
  567. },
  568. },
  569. flag: "",
  570. pilestate:{}
  571. }
  572. },
  573. onLoad(op) {
  574. uni.getSystemInfo({
  575. success: (res) => {
  576. // console.log("----------")
  577. // console.log(res.platform)
  578. this.platform = res.platform
  579. }
  580. })
  581. _self = this;
  582. // document.getElementsByTagName('body')[0].style.setProperty('--mode',1)
  583. if (op.jg == '1') {
  584. this.current = 1;
  585. }
  586. if (op != null) {
  587. if (op.id != null && op.id != undefined) {
  588. this.stationId = op.id;
  589. this.getPriceList(op.id)
  590. this.getChargingStationDetail()
  591. }
  592. }
  593. },
  594. onHide() {
  595. this.setIntervalBool = false
  596. if (this.uuid) {
  597. clearInterval(this.uuid)
  598. this.uuid = '';
  599. }
  600. },
  601. onShow() {
  602. this.setIntervalBool = true
  603. if (!this.uuid) {
  604. this.uuid = setInterval(() => {
  605. if (this.setIntervalBool) {
  606. this.getChargingStationDetail(true)
  607. }
  608. }, 5 * 1000)
  609. }
  610. },
  611. onUnload() {
  612. if (this.uuid) {
  613. clearInterval(this.uuid)
  614. }
  615. },
  616. onReady() {
  617. var consumerPhone = this.carhelp.getConfig().consumerPhone
  618. // img="https://yktwechat.xiaoxinda.com/config/xxd2021.jpg"
  619. if (consumerPhone) {
  620. this.consumerPhone = consumerPhone
  621. }
  622. this.elderMode = this.carhelp.get('getElderModeClass') == '长辈模式';
  623. if (this.elderMode)
  624. this.theme('elder')
  625. else
  626. this.theme('standard')
  627. if (this.carhelp.getPersonInfo()) {
  628. this.userId = this.carhelp.getPersonInfo().id;
  629. this.personInfo = this.carhelp.getPersonInfo()
  630. }
  631. WxJsApi.getWxConfig(['getLocation', 'openLocation', 'addEventListener', 'scanQRCode']).then((res) => {
  632. // //(res)
  633. }).catch(error => {
  634. //(res)
  635. })
  636. },
  637. computed: {
  638. numShowBl() {
  639. //true tab false line
  640. var superNum = this.stationDetail.station.superNum;
  641. var fastNumZ = this.stationDetail.station.fastNum;
  642. var fastNum = fastNumZ - superNum;
  643. var slowNum = this.stationDetail.station.slowNum;
  644. if (superNum && fastNum == 0 && slowNum == 0) {
  645. return false
  646. }
  647. if (fastNum && superNum == 0 && slowNum == 0) {
  648. return false
  649. }
  650. if (slowNum && fastNum == 0 && superNum == 0) {
  651. return false
  652. }
  653. return true;
  654. },
  655. stationDetailDevices() {
  656. var sz = [];
  657. for (var i in this.stationDetail.devices) {
  658. var item = this.stationDetail.devices[i]
  659. for (var j in item.gunList) {
  660. var gun = item.gunList[j]
  661. gun.device = item;
  662. sz.push(gun);
  663. }
  664. }
  665. sz = sz.sort(function(it1, it2) {
  666. var i = 1;
  667. if (it1.device.online) {
  668. i = 1
  669. }
  670. if (it1.enableShare && !it1.enableShareWithinTime) {
  671. i = 1
  672. }
  673. i = it1.workStatus == 0 ? -1 : 1
  674. if (it2.workStatus == 0) {
  675. i = 1
  676. }
  677. if (!it2.enableShare || it2.enableShare && !it2.enableShareWithinTime) {
  678. i = -1
  679. }
  680. //console.log(it1,i)
  681. return i
  682. })
  683. return sz
  684. }
  685. },
  686. watch:{
  687. flag(b){
  688. this.pilestate=this.getpilestate()
  689. }
  690. },
  691. methods: {
  692. getpilestate() {
  693. var num1=0
  694. var num2=0
  695. var num3=0
  696. for (var i in this.stationDetailDevices) {
  697. var item = this.stationDetailDevices[i]
  698. if(this.getShow(item)){
  699. if(item.isRed&&item.workStatus!=2||!item.device.online){
  700. num3++
  701. }else if(item.workStatusText=='空闲中'){
  702. num1++
  703. }else{
  704. num2++
  705. }
  706. }
  707. }
  708. return {
  709. num1:num1,
  710. num2:num2,
  711. num3:num3
  712. }
  713. },
  714. getShow(item){
  715. if(this.flag==''){
  716. return true
  717. }else if(this.flag=='super'&&item.device.chargingType=='超充'){
  718. return true
  719. }else if(this.flag=='fast'&&item.device.chargingType=='快充'){
  720. return true
  721. }else if(this.flag=='slow'&&item.device.chargingType=='慢充'){
  722. return true
  723. }else {
  724. return false
  725. }
  726. },
  727. getH(item){
  728. return item*100+'px'
  729. },
  730. getW(item){
  731. var t1=item.endTime.substring(0,2)
  732. var t2=item.startTime.substring(0,2)
  733. var k=parseInt(t1)-parseInt(t2);
  734. return 100/24*k+"%"
  735. },
  736. changeFlag() {
  737. this.flag = !this.flag
  738. },
  739. enableAppointmentBl(item) {
  740. return !item.enableAppointment || !(item.reserveWeekSettingList && item.reserveWeekSettingList.length);
  741. },
  742. confirmPhoneBl() {
  743. this.openModalBl = false;
  744. uni.makePhoneCall({
  745. phoneNumber: this.consumerPhone //仅为示例
  746. });
  747. },
  748. confirmPhone() {
  749. if (this.stationDetail.station && this.stationDetail.station.contactPhone) {
  750. uni.makePhoneCall({
  751. phoneNumber: this.stationDetail.station.contactPhone //仅为示例
  752. });
  753. }
  754. },
  755. getChargingStationDetail(bl) {
  756. if (!this.stationId) {
  757. return false
  758. }
  759. var _self = this;
  760. if (!bl) {
  761. uni.showLoading({
  762. })
  763. }
  764. let data = {
  765. stationId: this.stationId
  766. };
  767. var distance = null;
  768. if (bl && this.stationDetail && this.stationDetail.station) {
  769. distance = this.stationDetail.station.distance
  770. //防止重新获取定位
  771. }
  772. api.getChargingStationDetail(data).then(function(res) {
  773. uni.hideLoading()
  774. if (res && res.result && res.data) {
  775. let data = res.data;
  776. _self.stationDetail = data;
  777. //console.log(data)
  778. if (_self.stationDetail.station.contactPhone) {
  779. _self.consumerPhone = _self.stationDetail.station.contactPhone
  780. }
  781. if (_self.stationAddressList.length == 0) {
  782. _self.stationAddressList = _self.stationDetail.stationAddressList
  783. }
  784. if (_self.stationDetail.station.parkingDescription != null && _self.stationDetail.station
  785. .parkingSimpleDescription != null) {
  786. var tagList = _self.stationDetail.station.tagList;
  787. for (var i = 0; i < tagList.length; i++) {
  788. if (tagList[i] == _self.stationDetail.station.parkingDescription) {
  789. tagList.splice(i, 1);
  790. }
  791. }
  792. _self.stationDetail.station.tagList = tagList;
  793. }
  794. if (distance) {
  795. _self.stationDetail.station.distance = distance
  796. }
  797. var totalNum = 0;
  798. // _self.stationDetail.station.chargingType1=0;
  799. // _self.stationDetail.station.chargingType2=0;
  800. // _self.stationDetail.station.chargingType3=0;
  801. // _self.stationDetail.station.chargingType1run=0;
  802. // _self.stationDetail.station.chargingType2run=0;
  803. // _self.stationDetail.station.chargingType3run=0;
  804. // for(var i in _self.stationDetail.devices ){
  805. // var device=_self.stationDetail.devices[i]
  806. // var keyset="";
  807. // if(device.chargingType=='超充'){
  808. // keyset="chargingType1";
  809. // }
  810. // if(device.chargingType=='快充'){
  811. // keyset="chargingType2";
  812. // }
  813. // if(device.chargingType=='慢充'){
  814. // keyset="chargingType3";
  815. // }
  816. // for (let j = 0; j < device.gunList.length; j++) {
  817. // if(device.gunList[j].workStatus==0){
  818. // _self.stationDetail.station[keyset+"run"]++;
  819. // }
  820. // _self.stationDetail.station[keyset]++;
  821. // }
  822. // }
  823. if (_self.openlist == null) {
  824. _self.openlist = new Map();
  825. for (var i in _self.stationDetail.devices) {
  826. var device = _self.stationDetail.devices[i]
  827. totalNum += device.gunList.length
  828. for (let j = 0; j < device.gunList.length; j++) {
  829. _self.openlist.set(device.gunList[j].id, false);
  830. }
  831. //console.log(_self.stationDetail.station)
  832. }
  833. _self.list[0].name = "充电桩(" + totalNum + ")"
  834. }
  835. if (_self.stationDetail.station.distance == null && !bl) {
  836. _self.getPoint();
  837. }
  838. _self.pilestate=_self.getpilestate()
  839. }
  840. })
  841. },
  842. setOpen(item) {
  843. var obj = this.openlist.get(item.id)
  844. if (obj) {
  845. obj = false;
  846. } else {
  847. obj = true
  848. }
  849. this.openlist.set(item.id, obj)
  850. this.$forceUpdate()
  851. },
  852. change(index) {
  853. this.current = index;
  854. this.items = this.list[index].items;
  855. },
  856. previewImage(img) {
  857. let imgs = [];
  858. imgs.push(img);
  859. uni.previewImage({
  860. urls: imgs,
  861. current: 0
  862. })
  863. },
  864. book2(item, bl) {
  865. if (bl) {
  866. } else {
  867. return
  868. }
  869. uni.navigateTo({
  870. url: '/pages/searchPile/stationAndPile/chargingPileDetails?isback=1&id=' + item.gunNo,
  871. })
  872. ////('book'+JSON.stringify(item))
  873. },
  874. book(item, bl) {
  875. if (bl) {
  876. } else {
  877. uni.showToast({
  878. title: '当前设备不可预约'
  879. })
  880. return
  881. }
  882. uni.navigateTo({
  883. url: '/pages/searchPile/apointment/apointmentRecharge?id=' + item.gunNo,
  884. })
  885. ////('book'+JSON.stringify(item))
  886. },
  887. getPoint() {
  888. // //('getPoint')
  889. WxJsApi.getLocation().then((res) => {
  890. var latitude = parseFloat(res.latitude);
  891. var longitude = parseFloat(res.longitude);
  892. var startLngLat = {
  893. longitude: longitude,
  894. latitude: latitude
  895. };
  896. var endLngLat = {
  897. longitude: _self.stationDetail.station.longitude,
  898. latitude: _self.stationDetail.station.latitude
  899. };
  900. _self.calculateDistance(startLngLat, endLngLat);
  901. _self.calculateDistanceList(startLngLat)
  902. /*uni.showToast({
  903. title:'getPoint'+JSON.stringify(res)
  904. })*/
  905. ////('当前位置' +JSON.stringify(data))
  906. //this.latitude2 = latitude;
  907. //this.longitude2 = longitude;
  908. /*uni.showToast({
  909. title:JSON.stringify(res)
  910. })*/
  911. //this.message=JSON.stringify(res)
  912. }).catch(error => {
  913. // uni.showToast({
  914. // title: error //'getPoint'+JSON.stringify()
  915. // })
  916. })
  917. },
  918. calculateDistanceList(startLngLat) {
  919. if (_self.stationDetail && _self.stationDetail.stationAddressList && _self.stationDetail.stationAddressList
  920. .length) {
  921. } else {
  922. return
  923. }
  924. var list = _self.stationDetail.stationAddressList;
  925. MapLoader().then(AMap1 => {
  926. for (var i in list) {
  927. var endLngLat = list[i]
  928. var lnglat = new AMap.LngLat(startLngLat.longitude, startLngLat.latitude);
  929. var myDistance = lnglat.distance([endLngLat.longitude, endLngLat.latitude]);
  930. endLngLat.distance = myDistance / 1000;
  931. endLngLat.time = myDistance / 500;
  932. }
  933. _self.stationAddressList = list;
  934. _self.$forceUpdate()
  935. //console.log("11111111111111")
  936. //console.log(_self.stationDetail.stationAddressList)
  937. })
  938. },
  939. calculateDistance(startLngLat, endLngLat) {
  940. var _this = this;
  941. //直线距离
  942. MapLoader().then(AMap1 => {
  943. var lnglat = new AMap.LngLat(startLngLat.longitude, startLngLat.latitude);
  944. var myDistance = lnglat.distance([endLngLat.longitude, endLngLat.latitude]);
  945. _self.stationDetail.station.distance = myDistance / 1000;
  946. _self.stationDetail.station.time = myDistance / 500;
  947. })
  948. //
  949. return
  950. //驾车距离
  951. var _this = this;
  952. MapLoader().then(AMap1 => {
  953. this.AMap = AMap;
  954. var map = new AMap.Map("container", {
  955. center: [116.397559, 39.89621],
  956. zoom: 14
  957. });
  958. var lnglat = new AMap.LngLat(117.186602, 34.261579);
  959. //AMap.Walking
  960. AMap.plugin('AMap.Driving', function() {
  961. var driving = new AMap.Driving({
  962. // 驾车路线规划策略,AMap.DrivingPolicy.LEAST_TIME是最快捷模式
  963. policy: AMap.DrivingPolicy.LEAST_TIME
  964. })
  965. //var startLngLat = [116.379028, 39.865042]
  966. //var endLngLat = [116.427281, 39.903719]
  967. var startLngLat2 = [startLngLat.longitude, startLngLat.latitude]
  968. var endLngLat2 = [endLngLat.longitude, endLngLat.latitude]
  969. driving.search(startLngLat2, endLngLat2, function(status, result) {
  970. //(result)
  971. //(result.routes[0].time)//秒
  972. //(result.routes[0].distance)//米
  973. _self.stationDetail.station.distance = result.routes[0].distance /
  974. 1000;
  975. _self.stationDetail.station.time = result.routes[0].time / 60;
  976. })
  977. })
  978. }, e => {
  979. //_this.mui.toast('地图加载失败');
  980. //('地图加载失败', e)
  981. console.log(e)
  982. })
  983. },
  984. getScanCode() {
  985. WxJsApi.scanQRCode(1).then(res => {
  986. if (res) {
  987. indexAPI.scanCode(res).then((response) => {
  988. }).catch(error => {
  989. uni.showToast({
  990. title: error,
  991. icon: "none"
  992. })
  993. })
  994. }
  995. }).catch(error => {
  996. })
  997. },
  998. getPriceList(id) {
  999. var formatNum = function(num) {
  1000. let res = Number(num);
  1001. return res < 10 ? '0' + res : res;
  1002. };
  1003. let data = {
  1004. stationId: id
  1005. };
  1006. api.getChargingStationPrice(data).then((res) => {
  1007. if (res.data.prices.length) {
  1008. let date = new Date();
  1009. this.station = res.data.chargingStation
  1010. let hours = date.getHours();
  1011. let minutes = date.getMinutes();
  1012. let seconds = date.getSeconds();
  1013. let date_str = formatNum(hours) + ':' + formatNum(minutes); //+ ' ' +formatWeek;
  1014. this.pricesInfo = res.data.prices[0].priceList
  1015. //console.log(this.pricesInfo)
  1016. for (var i in this.pricesInfo) {
  1017. var obj = this.pricesInfo[i]
  1018. if (date_str >= obj.startTime && date_str <= obj.endTime) {
  1019. obj.current = true;
  1020. this.pricesInfoCurrent = obj
  1021. this.pricesInfoCurrent2 = obj
  1022. if (obj.electricityPrice == 0 || this.station.stationType == 50) {
  1023. this.showtips = false
  1024. }
  1025. }
  1026. }
  1027. }
  1028. })
  1029. },
  1030. navigate(item) {
  1031. if (item) {
  1032. if (item.areaTitle) {
  1033. item.name = _self.stationDetail.station.name
  1034. }
  1035. } else {
  1036. item = _self.stationDetail.station
  1037. }
  1038. //console.log(item)
  1039. uni.showLoading({
  1040. })
  1041. WxJsApi.openLocation({
  1042. latitude: parseFloat(item.latitude), //目的地latitude
  1043. longitude: parseFloat(item.longitude), //目的地longitude
  1044. name: item.name,
  1045. address: item.address,
  1046. scale: 15, //地图缩放大小,可根据情况具体调整
  1047. success(res) {
  1048. uni.hideLoading()
  1049. },
  1050. complete() {
  1051. // uni.hideLoading()
  1052. }
  1053. });
  1054. // //('station'+JSON.stringify(_self.stationDetail.station))
  1055. // window.location.href = "https://uri.amap.com/marker?position=" + _self.stationDetail.station.longitude +
  1056. // "," + _self.stationDetail.station.latitude + "&name=" + _self.stationDetail.station.name;
  1057. },
  1058. charge() {
  1059. //('扫码充电')
  1060. //#ifdef MP-WEIXIN
  1061. uni.scanCode({
  1062. success: function(res) {
  1063. uni.navigateTo({
  1064. url: 'chargingPileDetails?pile=' + encodeURIComponent(JSON.stringify(data))
  1065. })
  1066. }
  1067. })
  1068. return;
  1069. //#endif
  1070. //('扫码充电1')
  1071. uni.navigateTo({
  1072. url: 'chargingPileDetails'
  1073. })
  1074. },
  1075. priceDetail(t, id) {
  1076. uni.navigateTo({
  1077. url: 'chargePriceDetails?stationId=' + _self.stationDetail.station.id + "&type=" + t + "&id=" +
  1078. id
  1079. })
  1080. },
  1081. map(item) {
  1082. this.navigate(item)
  1083. //var item= _self.stationDetail.station
  1084. //window.location.href="https://uri.amap.com/marker?position="+ item.longitude+","+item.latitude+"&name="+item.name;
  1085. // //('map'+JSON.stringify(_self.station))
  1086. // _self.station.address = 'xxxxxxxxxxxxx'
  1087. // //this.carhelp.set(_self.stationDetail.station.id,_self.station);
  1088. // uni.navigateTo({
  1089. // url: 'stationDetailsMap?stationId=' + _self.stationDetail.station.id
  1090. // //url:'stationDetailsMap?station='+encodeURIComponent(JSON.stringify(_self.station))
  1091. // })
  1092. },
  1093. theme(type) {
  1094. if (type == 'elder') {
  1095. document.getElementsByTagName('body')[0].setAttribute('data-theme', type);
  1096. } else {
  1097. document.getElementsByTagName('body')[0].setAttribute('data-theme', type);
  1098. }
  1099. }
  1100. }
  1101. }
  1102. </script>
  1103. <style lang="scss" scoped>
  1104. .oldTextClassF{
  1105. .stationDetail .title{
  1106. font-size: 62rpx;
  1107. }
  1108. .stationDetail .position .address{
  1109. font-size: 38rpx;
  1110. }
  1111. .stationDetail .type .type-box .box-top .pile-type{
  1112. font-size: 38rpx;
  1113. color: #101010;
  1114. }
  1115. .stationDetail .pile-state .gun-details .item .itemShowOpen .itemView .infos .gun-name{
  1116. font-size: 48rpx;
  1117. }
  1118. .stationDetail .price-infos .title{
  1119. font-size: 38rpx;
  1120. }
  1121. }
  1122. .service {
  1123. font-size: 24px;
  1124. color: #101010;
  1125. }
  1126. page {
  1127. background-color: #F2F2F2;
  1128. }
  1129. .head {
  1130. width: 100%;
  1131. height: 360rpx;
  1132. img {
  1133. width: 100%;
  1134. height: 100%;
  1135. }
  1136. }
  1137. // 站点详情
  1138. .stationDetail {
  1139. background-color: #F2F2F2;
  1140. // background: linear-gradient(180deg, rgba(255,255,255,1) 59%,rgba(255,255,255,0) 100%);
  1141. border-radius: 24rpx 24rpx 0px 0px;
  1142. margin-top: -48rpx;
  1143. color: #101010;
  1144. z-index: 999;
  1145. position: absolute;
  1146. left: 0;
  1147. right: 0;
  1148. padding-bottom: 100rpx;
  1149. .stationDetailHead{
  1150. border-radius: 24rpx 24rpx 0px 0px;
  1151. background-color: #FFF;
  1152. padding: 24rpx 32rpx 12rpx 32rpx;
  1153. }
  1154. .stationDetailBody{
  1155. padding: 24rpx 32rpx;
  1156. }
  1157. // 标题
  1158. .title {
  1159. color: rgba(16, 16, 16, 1);
  1160. font-size: 40rpx;
  1161. font-weight: bold;
  1162. }
  1163. // 标签
  1164. .tags {
  1165. display: flex;
  1166. margin-top: 8rpx;
  1167. flex-wrap: wrap;
  1168. .tags1 {
  1169. //border: 1px solid rgba(255, 139, 0, 1);
  1170. height: 40rpx;
  1171. line-height: 40rpx;
  1172. border-radius: 4px;
  1173. //color: rgba(255, 139, 0, 1);
  1174. font-size: 24rpx;
  1175. text-align: center;
  1176. padding: 0 8rpx 0 8rpx;
  1177. margin-right: 16rpx;
  1178. margin-bottom: 8rpx;
  1179. }
  1180. .sign-1 {
  1181. background-color: rgba(255, 255, 255, 100);
  1182. color: rgba(255, 139, 0, 100);
  1183. border: 1px solid rgba(255, 139, 0, 100);
  1184. }
  1185. .sign-3 {
  1186. background-color: rgba(255, 255, 255, 100);
  1187. color: #8161FF;
  1188. border: 1px solid #8161FF;
  1189. }
  1190. .sign-4 {
  1191. background-color: rgba(255, 255, 255, 100);
  1192. color: #00B962;
  1193. border: 1px solid #00B962;
  1194. }
  1195. .sign-2 {
  1196. background-color: rgba(255, 255, 255, 100);
  1197. color: rgba(153, 153, 153, 100);
  1198. border: 1px solid rgba(204, 204, 204, 100);
  1199. }
  1200. }
  1201. // 定位
  1202. .position {
  1203. display: flex;
  1204. justify-content: space-between;
  1205. margin-bottom: 24rpx;
  1206. .block {
  1207. width: 96rpx;
  1208. height: 40rpx;
  1209. line-height: 40rpx;
  1210. border-radius: 50px;
  1211. background-color: rgba(0, 185, 98, 1);
  1212. color: rgba(255, 255, 255, 1);
  1213. font-size: 22rpx;
  1214. text-align: center;
  1215. padding:0 4rpx;
  1216. }
  1217. .address {
  1218. width: 460rpx;
  1219. //margin-left: 16rpx;
  1220. color: rgba(16, 16, 16, 1);
  1221. font-size: 32rpx;
  1222. line-height: 44rpx;
  1223. }
  1224. .distance {
  1225. display: flex;
  1226. flex-direction: column;
  1227. align-items: center;
  1228. .distance-icon {
  1229. width: 40rpx;
  1230. height: 40rpx;
  1231. display: flex;
  1232. justify-content: center;
  1233. align-items: center;
  1234. background-color: rgba(0, 185, 98, 1);
  1235. border-radius: 999px;
  1236. }
  1237. .distance-text {
  1238. color: rgba(153, 153, 153, 1);
  1239. font-size: 24rpx;
  1240. margin-top: 16rpx;
  1241. }
  1242. }
  1243. }
  1244. // 充电桩类型
  1245. .type {
  1246. display: flex;
  1247. justify-content: space-between;
  1248. .checked {
  1249. background-color: rgba(20, 23, 43, 1) !important;
  1250. .pile-type {
  1251. color: #fff !important;
  1252. }
  1253. .cut {
  1254. color: #fff !important;
  1255. }
  1256. }
  1257. .numShowview{
  1258. width: 100% !important;
  1259. }
  1260. .numShowview2{
  1261. width: 49% !important;
  1262. }
  1263. .type-box {
  1264. //width: 334rpx;
  1265. padding: 8rpx 0;
  1266. width: 32%;
  1267. border-radius: 8rpx;
  1268. background-color: rgba(255, 255, 255, 1);
  1269. position: relative;
  1270. .box-top {
  1271. display: flex;
  1272. align-items: center;
  1273. justify-content: center;
  1274. .super,.fast,.slow{
  1275. width: 40rpx;
  1276. height: 40rpx;
  1277. display: flex;
  1278. justify-content: center;
  1279. align-items: center;
  1280. border-radius: 8rpx;
  1281. color: rgba(255, 255, 255, 1);
  1282. font-size: 20rpx
  1283. }
  1284. .super{
  1285. background-color: #8161FF;
  1286. }
  1287. .fast {
  1288. background-color: #1677FF;
  1289. }
  1290. .slow {
  1291. background-color: #00B962;
  1292. }
  1293. .pile-type {
  1294. color: #303133;
  1295. font-size: 32rpx;
  1296. margin-left: 4rpx;
  1297. }
  1298. }
  1299. .pile-amount {
  1300. display: flex;
  1301. justify-content: center;
  1302. .super{
  1303. color:#8161FF;
  1304. margin-right: 8rpx;
  1305. }
  1306. .fast{
  1307. color: #1677FF;
  1308. margin-right: 8rpx;
  1309. }
  1310. .free {
  1311. color: #00B962;
  1312. margin-right: 8rpx;
  1313. }
  1314. .sum {
  1315. color: #999;
  1316. margin-left: 8rpx;
  1317. }
  1318. }
  1319. }
  1320. // 尖角
  1321. .angle {
  1322. position: absolute;
  1323. width: 0;
  1324. height: 0;
  1325. display: inline-block;
  1326. border-top: 16rpx solid #000000;
  1327. border-left: 16rpx solid transparent;
  1328. border-right: 16rpx solid transparent;
  1329. bottom: -16rpx;
  1330. left: 167rpx;
  1331. }
  1332. }
  1333. // 充电桩状态
  1334. .pile-state {
  1335. border-radius: 8px 8px 0 0;
  1336. margin-top: 32rpx;
  1337. background-color: rgba(255, 255, 255, 1);
  1338. padding: 24rpx;
  1339. // 总计
  1340. .statistics {
  1341. width: 406rpx;
  1342. border: 1px solid rgba(204, 204, 204, 1);
  1343. padding: 0 16rpx;
  1344. height: 48rpx;
  1345. display: flex;
  1346. justify-content: space-between;
  1347. align-items: center;
  1348. color: #777777;
  1349. .cut {
  1350. color: #8FCFB1;
  1351. }
  1352. }
  1353. // 充电枪详情
  1354. .gun-details {
  1355. .item{
  1356. .open-time{
  1357. border-bottom: 1px solid rgba(238, 242, 240, 100);
  1358. // padding-left: 150rpx;
  1359. // padding-bottom: 40rpx;
  1360. display: flex;
  1361. justify-content: center;
  1362. line-height: 18px;
  1363. font-size: 14px;
  1364. color: rgb(136, 136, 136);
  1365. p {
  1366. text-indent: 112px;
  1367. }
  1368. }
  1369. .itemShowOpen{
  1370. display: flex;
  1371. align-items: center;
  1372. justify-content: space-between;
  1373. .itemView {
  1374. margin-top: 24rpx;
  1375. display: flex;
  1376. align-items: center;
  1377. .state {
  1378. width: 100rpx;
  1379. border-radius: 4px;
  1380. background: linear-gradient(180deg, rgba(98, 228, 167, 1) 0%, rgba(0, 180, 95, 1) 100%);
  1381. padding: 8rpx 0;
  1382. display: flex;
  1383. flex-direction: column;
  1384. align-items: center;
  1385. .state-text {
  1386. color: rgba(255, 255, 255, 1);
  1387. font-size: 22rpx;
  1388. }
  1389. }
  1390. //充电中
  1391. .charging {
  1392. background: linear-gradient(180deg, rgba(154, 192, 255, 1) 0%, rgba(22, 119, 255, 1) 100%);
  1393. }
  1394. // 离线
  1395. .off-line {
  1396. background: linear-gradient(180deg, rgba(209, 204, 204, 1) 0%, rgba(148, 145, 145, 1) 100%);
  1397. }
  1398. // 详细信息
  1399. .infos {
  1400. margin-left: 16rpx;
  1401. .gun-name {
  1402. color: rgba(51, 51, 51, 1);
  1403. font-size: 36rpx;
  1404. font-weight: bold;
  1405. width: 320rpx;
  1406. white-space: nowrap;
  1407. overflow: hidden;
  1408. text-overflow: ellipsis;
  1409. text {
  1410. color: #D6D6D6;
  1411. font-weight: normal;
  1412. }
  1413. }
  1414. }
  1415. .else {
  1416. display: flex;
  1417. align-items: center;
  1418. margin-top: 8rpx;
  1419. .gun-type {
  1420. //color: rgba(22, 119, 255, 1);
  1421. margin-right: 8rpx;
  1422. }
  1423. .voltage {
  1424. margin: 0 8rpx;
  1425. }
  1426. }
  1427. }
  1428. }
  1429. }
  1430. // 充电按钮
  1431. .charge {
  1432. width: 96rpx;
  1433. height: 48rpx;
  1434. line-height: 48rpx;
  1435. border-radius: 50px;
  1436. background-color: rgba(0, 185, 98, 1);
  1437. color: rgba(255, 255, 255, 1);
  1438. text-align: center;
  1439. }
  1440. .not-open-tag {
  1441. background-color: rgba(192, 196, 208, 100);
  1442. }
  1443. .not-enable-Appointment{
  1444. width: 168rpx ;
  1445. height: 56rpx ;
  1446. line-height: 56rpx;
  1447. font-size: 32rpx;
  1448. }
  1449. .electric-quantity {
  1450. width: 126rpx;
  1451. height: 52rpx;
  1452. position: relative;
  1453. img {
  1454. width: 100%;
  1455. }
  1456. .percentage {
  1457. text-align: center;
  1458. width: 86rpx;
  1459. color: rgba(255, 255, 255, 1);
  1460. font-size: 24rpx;
  1461. position: absolute;
  1462. left: 50%;
  1463. top: 50%;
  1464. transform: translate(-50%, -50%);
  1465. }
  1466. }
  1467. }
  1468. }
  1469. // 价格信息
  1470. .price-infos {
  1471. background-color: #fff;
  1472. padding: 24rpx;
  1473. border-radius: 0 0 8px 8px;
  1474. .title {
  1475. color: rgba(51, 51, 51, 1);
  1476. font-weight: bold;
  1477. font-size: 32rpx;
  1478. text {
  1479. color: #777777;
  1480. font-weight: normal;
  1481. }
  1482. }
  1483. // 分类
  1484. .classify {
  1485. display: flex;
  1486. justify-content: space-between;
  1487. margin-top: 24rpx;
  1488. .item {
  1489. border-radius: 4px;
  1490. background-color: rgba(230, 245, 237, 1);
  1491. padding: 22rpx;
  1492. .unit-price {
  1493. font-size: 56rpx;
  1494. }
  1495. .unit {
  1496. color: rgba(119, 119, 119, 1);
  1497. font-size: 28rpx
  1498. }
  1499. }
  1500. // 游客价
  1501. .item-visitor {
  1502. color: #333333;
  1503. width: 39%;
  1504. }
  1505. // 会员价
  1506. .item-member {
  1507. color: #27B148;
  1508. width: 60%;
  1509. }
  1510. // 会员价
  1511. .item-member-all {
  1512. color: #27B148;
  1513. width: 100%;
  1514. }
  1515. .register {
  1516. padding: 4rpx 12rpx;
  1517. height: 24px;
  1518. border-radius: 50px;
  1519. background: linear-gradient(87.64deg, rgba(253, 129, 69, 1) 1.81%, rgba(252, 63, 3, 1) 100.04%);
  1520. color: rgba(255, 255, 255, 1);
  1521. font-size: 14px;
  1522. text-align: center;
  1523. margin-left: 38rpx;
  1524. }
  1525. }
  1526. // 提示
  1527. .hint {
  1528. margin-top: 16rpx;
  1529. color: rgba(119, 119, 119, 1);
  1530. }
  1531. // 图表
  1532. .chat-box {
  1533. border-radius: 4px;
  1534. background-color: rgba(249, 249, 249, 1);
  1535. padding: 24rpx;
  1536. .chat-infos {
  1537. .item {
  1538. display: flex;
  1539. justify-content: space-between;
  1540. align-items: center;
  1541. margin-bottom: 32rpx;
  1542. .name {
  1543. display: flex;
  1544. align-items: center;
  1545. .icon {
  1546. width: 56rpx;
  1547. height: 28rpx;
  1548. margin-right: 8rpx;
  1549. }
  1550. .icon1 {
  1551. border: 2px solid rgba(0, 0, 0, 1);
  1552. }
  1553. .icon2 {
  1554. background-color: rgba(87, 228, 160, 1);
  1555. }
  1556. .icon3 {
  1557. background-color: rgba(220, 220, 220, 1);
  1558. }
  1559. .text {
  1560. color: rgba(102, 102, 102, 1);
  1561. font-size: 32rpx;
  1562. }
  1563. }
  1564. .value {
  1565. color: rgba(16, 16, 16, 1);
  1566. font-size: 32rpx;
  1567. font-weight: bold;
  1568. }
  1569. }
  1570. }
  1571. }
  1572. }
  1573. .chat_hhh_time{
  1574. display: flex;
  1575. justify-content: space-between;
  1576. }
  1577. .chat_hhh {
  1578. background: #f9f9f9;
  1579. text-align: center;
  1580. min-height: 160px;
  1581. display: flex;
  1582. font-size: 20rpx;
  1583. .current1{
  1584. .chats2{
  1585. //border: 1px solid red;
  1586. }
  1587. }
  1588. .current2{
  1589. .chats1{
  1590. border: 1px solid #333333;
  1591. border-bottom: 0px;
  1592. }
  1593. .chats2{
  1594. border: 1px solid #333333;
  1595. background: #26FF6B !important;
  1596. border-top: 0px;
  1597. }
  1598. }
  1599. .chatTime{
  1600. min-width: 68rpx;
  1601. display: flex;
  1602. flex-direction: column;
  1603. justify-content: flex-end;
  1604. border :1px solid #f9f9f9;
  1605. .chats0{
  1606. // background-color: #ff8b17;
  1607. // color: #ffecdd;
  1608. display: flex;
  1609. justify-content: center;
  1610. flex-wrap:wrap;
  1611. flex-direction: column;
  1612. }
  1613. .chats9{
  1614. opacity: 0;
  1615. display: flex;
  1616. justify-content: center;
  1617. flex-wrap:wrap;
  1618. flex-direction: column;
  1619. }
  1620. .chats1{
  1621. background: #dcdcdc;
  1622. min-height: 30rpx
  1623. }
  1624. .chats2{
  1625. background: #80e0a6;
  1626. display: flex;
  1627. flex-direction: column;
  1628. justify-content: space-between;
  1629. }
  1630. }
  1631. }
  1632. // 附加信息
  1633. .overhead-infos {
  1634. margin-top: 24rpx;
  1635. background-color: #fff;
  1636. padding: 24rpx;
  1637. border-radius: 8px;
  1638. .item {
  1639. display: flex;
  1640. align-items: center;
  1641. justify-content: space-between;
  1642. font-size: 32rpx;
  1643. .title {
  1644. color: rgba(119, 119, 119, 1);
  1645. font-size: 32rpx;
  1646. }
  1647. .value {
  1648. color: rgba(51, 51, 51, 1);
  1649. }
  1650. }
  1651. }
  1652. }
  1653. .color185AC6 {
  1654. color: #185AC6
  1655. }
  1656. .color00B962 {
  1657. color: #00B962
  1658. }
  1659. .colorCA9DFF {
  1660. color: #8161FF;
  1661. }
  1662. </style>