• 停车场系统、智慧城市停车、智慧社区、物业管理、新能源充电、人脸门禁 uniapp 系统源码


    1. 智慧停车

    • 支持模式

      • 封闭性单个停车场
      • 路边停车(车位级管理)
      • 大小场(场中场),多场子并行或嵌套
    • 所有者模式

      • 统一平台管理
      • 总平台下子账号(区域代理)自建场地资源,自行维护数据
      • 总平台下子账号(区域代理)再分配和单个停车场管理人员(物业管理/维保/保安/财务等人员)
    • 场站管理

      • 车位控制
        精准的实时车位统计和数据及时推送到场地led/lcd屏幕,车位满后禁止车辆进入
        
      • 责任制
        每个场地标记所有者,负责人信息,有需要直连联系实际控制负责人
        
      • 完整证据链
        详细实时记录每一辆车进出时间/场地/进出口/值班人员/图片/视频/金额/优惠/车辆情况(车辆类型|套餐|颜色|品牌)/开闸情况
        
    • 值班调度

      • 值守模式
        支持有人值守/无人值守/统一远程值守调度,数字数据全自动化录入,处理,资产数据产出并计算汇报展现
        
      • 重复过滤
        支持入场二次确认,避免路过和倒车车辆误拍产生歧义账单。短时间内重复多次抓拍只记录一条数据
        
      • 无处可逃
        出场跟车逃费标记,逃费入场提示追缴,补缴入场。支持单场追缴和全网追缴。黑名单通知,违法在逃车辆协同公安网络实时上报
        
      • 万无一失
        入场车牌识别错误可手动校正车牌,出场识别错误自动模糊相似车牌尝试匹配
        
      • 应急响应
        支持一键放行,处理紧急情况,手动免单。支持远程可视对讲。
        
      • 特殊群体
        支持自定义公务车自动免单放行,例如警车,军车,大使馆车,消防车等
        
      • 断电断网
        1. 断电支持值守人员手机一键进出场拍照录入,入场录入人工放行入场,出场时值守人员向车主展示账单,车主扫码支付离场。
        2. 断网支持硬件设备白名单快速自动放行。保障断网解决方案:增加车牌识别相机4G模块/或者使用双网络路由器(4G/有线智能切换)
      • 安保互动
        支持入场时值守人员留言,出场时备注留言提示
        
      • 一码识车
        新车无牌/车牌受污/车牌变形/非常规车牌无法识别/三轮代步车等,一键扫码自助入场,扫码缴费出场。公众号/小程序/APP数据一号互通
        
    • 进出控制与显示

      • 私人定制
        1. 支持自定义车辆类型,每个停车场都可以单独对每种车辆类型设定独立的进出收费规则,放行规则,文字播报,语音提示,图片,视频等
        2. 例如黑名单禁止入场,且禁止录入数据,并提示。免费车,在有效期内,享受不一样的停车特权
      • 停车VIP
        1. 每个停车场都可以独立发行内部和公开的车辆套餐产品,车主可以通过手机端新购和续费停车套餐,生效期进出无阻,套餐即将过期通知续费
        2. 例如黑名单禁止入场,且禁止录入数据,并提示。免费车,在有效期内,享受不一样的停车特权
      • 特殊车辆
        例如日包车(白天停车免费),夜包车(晚上停车免费)。支持特殊车辆自助购买和续费,弥补车辆套餐不够灵活的缺陷
        
    • 车位管理

      • 多位多车
        支持一位多车和多位多车自动切换享受套餐停车特权
        
      • 神圣私产
        支持车位级别管理,车位主人一键扫码升降地锁
        
      • 车位共享
        支持公共车位扫码降锁入位,计时,超时扫码缴费降锁离场
        
      • 快速停车
        手机端实时数据显示当前位置和目的地附近停车场车位情况(余位/价格/免停时长/禁停时段/车场图片/具体位置),可一键导航到空位车
        
      • 反向寻车
        1. 面对复杂多层大型停车场(例如:大型商场地下停车场,机场,超大型立体停车楼等),忘记了自己停在几楼哪个车位,利用车位相机自动记录
        2. 您车辆所在楼层和车位,使用室内导航实时引导您走到你的车辆跟前,导航精度0.5米左右

    2. 智慧充电

    • 新能源汽车充电

    • 两轮/三轮电动车充电

    3. 智慧社区

    • 社区管理

    • 物业管理

    • 人脸门禁

    • 上门维修

    4. 电子支付

    • 本平台聚合支付

    • 第三方聚合支付

    • 银行支付

    • 无感支付

    5. 用户资源

    • 权限分配

    • 资源分配

    1. <template>
    2. <view>
    3. <view class="bgBox">
    4. <view class="flex">
    5. <image class="backIcon" src="../../static/images/jiantouLeft.png" mode="" @click="intoBack"></image>
    6. <view class="navTitle">车场详情</view>
    7. </view>
    8. <view class="infoBox flex-col bb">
    9. <view class="name">{{ changeInfo.stationName }}</view>
    10. <view class="address flex">
    11. <view class="single-line">{{ changeInfo.address }}</view>
    12. </view>
    13. <view class="spaces flex flex-row-between">
    14. <view class="flex">
    15. 停车费:免费停车{{ (changeInfo.freeParkTime / 60000).toFixed(0) }}分钟
    16. </view>
    17. <view class="flex">
    18. <image src="../../static/images/man@2x.png" mode="" style="width: 32rpx; height: 32rpx" />
    19. <view style="margin-left: 8rpx">
    20. {{
    21. changeInfo.stationName == null ? '暂无数据' : changeInfo.usedSlowChargeNumber + '/' + changeInfo.slowChargeNumber
    22. }}
    23. </view>
    24. <image src="../../static/images/kuai@2x.png" mode=""
    25. style="width: 32rpx; height: 32rpx; margin-left: 14rpx" />
    26. <view style="margin-left: 8rpx">
    27. {{
    28. changeInfo.stationName == null ? '暂无数据' : changeInfo.usedFastChargeNumber + '/' + changeInfo.fastChargeNumber
    29. }}
    30. </view>
    31. </view>
    32. </view>
    33. <view class="price flex flex-col-center flex-row-between">
    34. <view class="flex distance">
    35. <image src="../../static/images/daohang@2x.png" mode="" style="width: 32rpx; height: 32rpx">
    36. </image>
    37. <view>距你{{(changeInfo.distance / 1000).toFixed(2)}}km</view>
    38. </view>
    39. </view>
    40. <view class="line"></view>
    41. <view class="flex flex-row-between" style="margin-top: 32rpx;">
    42. <view class="flex-col flex-col-center" v-for="item in iconStatusArr" :key="item.icon">
    43. <image :src="'../../static/images/' + item.icon + '.png'" mode=""
    44. style="width: 48rpx;height: 48rpx;">
    45. </image>
    46. <view style="font-size: 22rpx;font-weight: 400;color: #323233;margin-top: 8rpx;">{{ item.name }}
    47. </view>
    48. </view>
    49. </view>
    50. </view>
    51. </view>
    52. <view class="imageBox">
    53. <scroll-view :scroll-x="true" style="width: 100%;height: 100%;display: flex; white-space:nowrap;">
    54. <image class="scrollViewImage" :src="item" v-for="item,index in changeInfo.newImageUrl" :key="item"
    55. @click="previewImage(index)"></image>
    56. </scroll-view>
    57. </view>
    58. <view class="feeBox bb">
    59. <view class="name">忙闲情况</view>
    60. <view class="flex flex-row-between" style="margin-top: 54rpx;">
    61. <view class="flex-col flex-col-center">
    62. <view class="changeStatusBox_text flex">
    63. <view style="line-height: 42rpx;"></view>
    64. <view style="font-size: 42rpx;color: #000;font-weight: 900;margin-left: 6rpx;">
    65. {{changeInfo.usedFastChargeNumber}}
    66. </view>
    67. <view style="line-height: 42rpx;margin-left: 6rpx;">/{{changeInfo.fastChargeNumber}}</view>
    68. </view>
    69. <view class="changeStatusBox_red">快桩空闲</view>
    70. </view>
    71. <view class="flex-col flex-col-center">
    72. <view class="changeStatusBox_text flex">
    73. <view style="line-height: 42rpx;"></view>
    74. <view style="font-size: 42rpx;color: #000;font-weight: 900;margin-left: 6rpx;">
    75. {{changeInfo.usedSlowChargeNumber}}
    76. </view>
    77. <view style="line-height: 42rpx;margin-left: 6rpx;">/{{changeInfo.slowChargeNumber}}</view>
    78. </view>
    79. <view class="changeStatusBox_blue">慢桩空闲</view>
    80. </view>
    81. <view class="flex-col flex-col-center">
    82. <view
    83. style="line-height: 22rpx;font-size: 42rpx;color: #000;font-weight: 900;text-align: center;height: 66rpx;">
    84. -
    85. </view>
    86. <view class="changeStatusBox_gray">即将充满</view>
    87. </view>
    88. </view>
    89. </view>
    90. <view class="feeBox bb">
    91. <view class="name">充电费用</view>
    92. <view class="feeBox_item1 bb flex flex-col-center">
    93. <view style="margin-left: 32rpx;">
    94. 收费时段
    95. </view>
    96. <view style="margin-left: 156rpx;">充电费</view>
    97. <view style="margin-left: 26rpx;">=</view>
    98. <view style="margin-left: 34rpx;">电费</view>
    99. <view style="margin-left: 50rpx;">服务费</view>
    100. </view>
    101. <view class="feeBox_item2 bb flex flex-col-center" v-for="item in rulesList" :key="item.id">
    102. <view style="font-size: 24rpx;color: #434343;font-weight: 500;margin-left: 24rpx;">
    103. {{ item.startTimeString + ' - ' + item.endTimeTimeString }}
    104. </view>
    105. <view
    106. style="font-size: 24rpx;color: #434343;font-weight: 500;margin-left: 62rpx;width: 60rpx;text-align: center;">
    107. {{item.fee + item.serviceFee}}
    108. </view>
    109. <view
    110. style="font-size: 24rpx;color: #434343;font-weight: 500;margin-left: 72rpx;width: 60rpx;text-align: center;">
    111. {{item.fee}}
    112. </view>
    113. <view
    114. style="font-size: 24rpx;color: #434343;font-weight: 500;margin-left: 56rpx;width: 60rpx;text-align: center;">
    115. {{item.serviceFee}}
    116. </view>
    117. </view>
    118. </view>
    119. <view class="feeBox bb" v-if="changeInfo.stationType !== 1">
    120. <view class="name">停车费</view>
    121. <view class="flex" style="margin-top: 40rpx;">
    122. <view class="feeBoxItem1 bb">停车费</view>
    123. <view class="feeBoxItem2 bb">免费停车 {{changeInfo.freeParkTime / 60000}} 分钟</view>
    124. </view>
    125. <view class="feeBoxText">该站点充电即可免费停车 {{changeInfo.freeParkTime / 60000}}分钟(充电启动前,请确认输入车牌是否准确)</view>
    126. </view>
    127. <uni-safe-area>
    128. <view class="bottomBox bb flex flex-col-center flex-row-between">
    129. <view class="left flex flex-col-center flex-row-center" @click="onNavigation">
    130. <image src="../../static/images/feiji@2x.png" mode=""></image>
    131. <view class="text">导航</view>
    132. </view>
    133. <view class="right flex flex-col-center flex-row-center" @click="onScanChange">
    134. <image src="../../static/images/VIP@2x(3).png" mode=""></image>
    135. <view class="text">开始充电</view>
    136. </view>
    137. </view>
    138. </uni-safe-area>
    139. </view>
    140. </template>
    141. <script>
    142. import {
    143. cfChargingStationGetInfoById,
    144. getChargeRulesListByQuery
    145. } from '../../network/api.js'
    146. export default {
    147. data() {
    148. return {
    149. iconStatusArr: [{
    150. name: '充电桩',
    151. icon: 'cdz@2x',
    152. status: false
    153. }, {
    154. name: '便利店',
    155. icon: 'bianlidian@2x',
    156. status: false
    157. }, {
    158. name: '卫生间',
    159. icon: 'wsj@2x',
    160. status: false
    161. }, {
    162. name: '休息室',
    163. icon: 'xxs@2x',
    164. status: false
    165. }, {
    166. name: '雨棚',
    167. icon: 'yupeng@2x',
    168. status: false
    169. }, {
    170. name: '简餐',
    171. icon: 'jz@2x',
    172. status: false
    173. }, {
    174. name: '人工值守',
    175. icon: 'rgzs@2x',
    176. status: false
    177. }],
    178. chargeId: '',
    179. changeInfo: {
    180. name: '',
    181. address: '',
    182. freeTime: '',
    183. parkingSpaceNumber: '',
    184. usedParkingSpaceNumber: '',
    185. distance: 0,
    186. freeParkTime: 0,
    187. usedFastChargeNumber: 0,
    188. fastChargeNumber: 0,
    189. usedSlowChargeNumber: 0,
    190. slowChargeNumber: 0,
    191. },
    192. rulesList: [],
    193. locationInfo: {
    194. longitude: "",
    195. latitude: "",
    196. },
    197. }
    198. },
    199. onLoad(e) {
    200. this.chargeId = e.id
    201. this.getLocation()
    202. },
    203. methods: {
    204. getLocation() {
    205. uni.getLocation({
    206. type: "wgs84",
    207. success: (res) => {
    208. console.log("当前位置的经度:" + res.longitude);
    209. console.log("当前位置的纬度:" + res.latitude);
    210. this.locationInfo.longitude = res.longitude;
    211. this.locationInfo.latitude = res.latitude;
    212. this.fenchData()
    213. this.fenchRulesData()
    214. },
    215. });
    216. },
    217. onScanChange() {
    218. uni.showActionSheet({
    219. itemList: ['扫码充电', '查看充电桩'],
    220. success: ({
    221. tapIndex
    222. }) => {
    223. if (tapIndex === 0) {
    224. uni.scanCode({
    225. success: (scanRes) => {
    226. console.log(scanRes);
    227. }
    228. })
    229. } else if (tapIndex === 1) {
    230. if (this.changeInfo.stationType === 2) {
    231. uni.navigateTo({
    232. url: '/pages/chargeDetail/electricVehicleStart?chargeId=' + this
    233. .chargeId
    234. })
    235. } else {
    236. uni.navigateTo({
    237. url: '/pages/chargeDetail/bicycleStart?chargeId=' + this
    238. .chargeId
    239. })
    240. }
    241. }
    242. }
    243. })
    244. },
    245. intoBack() {
    246. uni.navigateBack()
    247. },
    248. onNavigation() {
    249. uni.openLocation({
    250. latitude: this.changeInfo.positionY,
    251. longitude: this.changeInfo.positionX,
    252. name: this.changeInfo.stationName,
    253. address: this.changeInfo.address,
    254. success: function() {
    255. console.log('success');
    256. }
    257. });
    258. },
    259. async fenchRulesData() {
    260. const {
    261. data,
    262. code,
    263. message
    264. } = await getChargeRulesListByQuery({
    265. chargingStationId: this.chargeId,
    266. page: 1,
    267. size: 100
    268. })
    269. console.log(data, code);
    270. if (code == 10002) {
    271. this.rulesList = data
    272. } else {
    273. uni.showToast({
    274. title: message,
    275. icon: 'none'
    276. })
    277. }
    278. },
    279. async fenchData() {
    280. const {
    281. data,
    282. code
    283. } = await cfChargingStationGetInfoById({
    284. id: this.chargeId,
    285. positionX: this.locationInfo.longitude,
    286. positionY: this.locationInfo.latitude,
    287. })
    288. console.log(data, code);
    289. if (code == 10002) {
    290. this.changeInfo = data
    291. this.changeInfo.newImageUrl = this.changeInfo.imageUrl.split(',')
    292. } else {
    293. uni.showToast({
    294. title: '获取停车场详情失败',
    295. icon: 'none'
    296. })
    297. setTimeout(function() {
    298. uni.navigateBack()
    299. }, 1500);
    300. }
    301. },
    302. previewImage(index) {
    303. uni.previewImage({
    304. current: index,
    305. urls: this.changeInfo.newImageUrl
    306. })
    307. }
    308. }
    309. }
    310. </script>
    311. <style lang="scss">
    312. page {
    313. background: #F5F7FF;
    314. padding-bottom: 200rpx;
    315. }
    316. .bottomBox {
    317. width: 750rpx;
    318. height: 165rpx;
    319. background: #FFFFFF;
    320. box-shadow: 0rpx -12rpx 14rpx 0rpx rgba(222, 220, 238, 0.5);
    321. position: fixed;
    322. left: 0;
    323. bottom: 0;
    324. padding: 0 32rpx;
    325. overflow: hidden;
    326. padding-bottom: 20rpx;
    327. .left {
    328. width: 332rpx;
    329. height: 100rpx;
    330. background: rgba(03, 148, 246, 0.18);
    331. border-radius: 10rpx;
    332. image {
    333. width: 40rpx;
    334. height: 40rpx;
    335. }
    336. .text {
    337. height: 50rpx;
    338. font-size: 36rpx;
    339. font-weight: 600;
    340. color: #6794F6;
    341. line-height: 50rpx;
    342. margin-left: 12rpx;
    343. }
    344. }
    345. .right {
    346. width: 332rpx;
    347. height: 100rpx;
    348. background: #6794F6;
    349. border-radius: 10rpx;
    350. image {
    351. width: 40rpx;
    352. height: 40rpx;
    353. }
    354. .text {
    355. height: 50rpx;
    356. font-size: 36rpx;
    357. font-weight: 600;
    358. color: #FFFFFF;
    359. line-height: 50rpx;
    360. margin-left: 12rpx;
    361. }
    362. }
    363. }
    364. .imageBox {
    365. width: 686rpx;
    366. height: 216rpx;
    367. background: #FFFFFF;
    368. border-radius: 10rpx;
    369. margin-left: 32rpx;
    370. }
    371. .feeBox {
    372. width: 686rpx;
    373. background: #FFFFFF;
    374. border-radius: 10rpx;
    375. margin: 32rpx 0 0 32rpx;
    376. padding: 32rpx;
    377. .feeBox_item2 {
    378. width: 622rpx;
    379. height: 70rpx;
    380. background: #F8F8F8;
    381. border-radius: 8rpx;
    382. margin-top: 28rpx;
    383. // padding: 20rpx 24rpx;
    384. }
    385. .feeBox_item1 {
    386. width: 622rpx;
    387. height: 70rpx;
    388. background: rgba(103, 148, 246, 0.1);
    389. border-radius: 8rpx;
    390. border: 2rpx solid #6794F6;
    391. margin-top: 24rpx;
    392. font-size: 24rpx;
    393. color: #6794F6;
    394. font-weight: 400;
    395. // padding: 20rpx 24rpx 16rpx 24rpx;
    396. }
    397. .name {
    398. height: 50rpx;
    399. font-size: 36rpx;
    400. font-weight: 600;
    401. color: #323233;
    402. line-height: 50rpx;
    403. }
    404. }
    405. .scrollViewImage {
    406. width: 262rpx;
    407. height: 152rpx;
    408. border-radius: 16rpx;
    409. margin: 32rpx 0 0 32rpx;
    410. display: inline-block;
    411. }
    412. .price {
    413. margin-top: 24rpx;
    414. .distance {
    415. view:nth-child(2) {
    416. height: 34rpx;
    417. font-size: 24rpx;
    418. font-weight: 400;
    419. color: #434343;
    420. line-height: 34rpx;
    421. margin-left: 8rpx;
    422. }
    423. }
    424. }
    425. .changeStatusBox_text {
    426. height: 66rpx;
    427. font-size: 24rpx;
    428. font-weight: 400;
    429. color: rgba(50, 50, 51, 0.5);
    430. line-height: 34rpx;
    431. }
    432. .changeStatusBox_red {
    433. width: 120rpx;
    434. height: 44rpx;
    435. background: rgba(255, 158, 158, .34);
    436. border-radius: 22rpx;
    437. font-size: 22rpx;
    438. font-weight: 600;
    439. color: #FF7777;
    440. line-height: 44rpx;
    441. text-align: center;
    442. }
    443. .changeStatusBox_blue {
    444. background: rgba(168, 179, 255, .34);
    445. color: #8393FD;
    446. @extend .changeStatusBox_red;
    447. }
    448. .changeStatusBox_gray {
    449. background: rgba(190, 194, 223, .34);
    450. color: #A1A3B1;
    451. @extend .changeStatusBox_red;
    452. }
    453. .bgBox {
    454. width: 750rpx;
    455. height: 666rpx;
    456. background: linear-gradient(360deg, #F5F7FF 0%, #A6C1FB 100%);
    457. .backIcon {
    458. width: 64rpx;
    459. height: 64rpx;
    460. margin: 100rpx 0 0 32rpx;
    461. }
    462. .navTitle {
    463. width: 160rpx;
    464. height: 56rpx;
    465. font-size: 40rpx;
    466. font-weight: 600;
    467. color: #FFFFFF;
    468. line-height: 56rpx;
    469. margin: 100rpx 0 0 190rpx;
    470. }
    471. .infoBox {
    472. width: 686rpx;
    473. height: 415rpx;
    474. background: #FFFFFF;
    475. border-radius: 10rpx;
    476. margin: 60rpx 0 0 32rpx;
    477. padding: 32rpx;
    478. .line {
    479. width: 630rpx;
    480. opacity: 0.43;
    481. border: 2rpx dashed #979797;
    482. margin: 42rpx 0 0 0;
    483. }
    484. .name {
    485. height: 50rpx;
    486. font-size: 36rpx;
    487. font-weight: 600;
    488. color: #323233;
    489. line-height: 50rpx;
    490. }
    491. .address {
    492. margin-top: 8rpx;
    493. view:nth-child(1) {
    494. width: 514rpx;
    495. height: 32rpx;
    496. font-size: 24rpx;
    497. font-weight: 400;
    498. color: #434343;
    499. line-height: 34rpx;
    500. }
    501. }
    502. .spaces {
    503. height: 32rpx;
    504. font-size: 24rpx;
    505. font-weight: 400;
    506. color: #323233;
    507. line-height: 32rpx;
    508. margin-top: 16rpx;
    509. }
    510. }
    511. }
    512. .feeBoxItem1 {
    513. width: 92rpx;
    514. height: 50rpx;
    515. background: linear-gradient(138deg, #A0C6FB 0%, #6794F6 100%);
    516. border-radius: 6rpx 0rpx 0rpx 6rpx;
    517. font-size: 24rpx;
    518. font-weight: 400;
    519. color: #FFFFFF;
    520. line-height: 50rpx;
    521. text-align: center;
    522. }
    523. .feeBoxItem2 {
    524. height: 50rpx;
    525. border-radius: 0rpx 6rpx 6rpx 0;
    526. border: 2rpx solid #6794F6;
    527. font-size: 24rpx;
    528. font-weight: 400;
    529. color: #6D99F7;
    530. line-height: 50rpx;
    531. text-align: center;
    532. padding: 0 16rpx;
    533. }
    534. .feeBoxText {
    535. width: 622rpx;
    536. height: 70rpx;
    537. font-size: 24rpx;
    538. font-family: PingFangSC-Regular, PingFang SC;
    539. font-weight: 400;
    540. color: #434343;
    541. line-height: 34rpx;
    542. margin-top: 24rpx;
    543. }
    544. </style>

    源码下载地址(小程序开源地址):停车场系统小程序,新能源电动车充电系统,智慧社区物业人脸门禁小程序: 【涵盖内容】:城市智慧停车系统,汽车新能源充电,两轮电动车充电,物业缴费,社区到访记录,人脸门禁,上门报修等。【开发框】架:union【使用场景】:微信小程序,支付宝小程序,其它平台小程序,混合app【使用教程】:本代码全开源且完整,没有任何缺失和加密,不会存在我们故意动手脚导致你跑不起来的情况,建议使用HBuilder打开和运行本代码

    源码下载地址(后台管理开源地址):停车场系统后台管理,新能源电动车充电系统,智慧社区物业人脸门禁后台管理: 城市智慧停车系统,汽车新能源充电,两轮电动车充电,物业缴费,社区到访记录,人脸门禁,上门报修等

  • 相关阅读:
    剑指 Offer 32 - III. 从上到下打印二叉树 III(双端队列deque)
    《流畅的python》— 列表推导与生成器表达式
    关于Unity 如何与Blazor Server结合
    看红帽巨佬解析⭐《二、G1垃圾回收配置解析》⭐
    Go 的三种指针
    【语音识别】搭建本地的语音转文字系统:FunASR
    新一代信息技术与制造业融合发展背景下网络安全挑战和思考
    CS5268完美代替AG9321MCQ Typec多合一扩展坞方案
    管理学精要
    杰理之复位源【篇】
  • 原文地址:https://blog.csdn.net/df981011512/article/details/133121730