index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. <template>
  2. <div class="mianBox">
  3. <van-row class="headerBox">
  4. 智慧楼宇
  5. </van-row>
  6. <van-row class="people">
  7. <van-row class="top">
  8. <van-row class="left">
  9. <van-uploader :after-read="afterRead" class="upload" />
  10. <van-image :src="portrait57" class="portrait" />
  11. </van-row>
  12. <van-row class="right">
  13. <van-row class="name">
  14. {{nickName57}}
  15. </van-row>
  16. <van-row class="dept">
  17. {{dept57}}
  18. </van-row>
  19. <van-row class="phone">{{phone57}}</van-row>
  20. <van-icon name="arrow" class="arrowRight" @click="go"/>
  21. </van-row>
  22. <van-row class="bottom">
  23. <van-row >
  24. <span v-loading="loadingBalance">{{balance}}元<br>余额</span>
  25. </van-row>
  26. <van-row >
  27. <span v-loading="loadingPlateNumber">{{plateNumber}}<br>车牌信息</span>
  28. </van-row>
  29. </van-row>
  30. </van-row>
  31. </van-row>
  32. <van-row class="contentBox">
  33. <van-row class="system">
  34. <van-row type="flex" justify="space-between" gutter="10" >
  35. <van-col span="6" class="function" @click="sm('https://smartpark.caih.com/h5/#/licence',1)">
  36. <van-image :src="require('../../assets/image/function/icon2.png')" />
  37. <div class="title">车牌登记</div>
  38. </van-col>
  39. <van-col span="6" class="function" @click="ykt">
  40. <van-image :src="require('../../assets/image/function/icon3.png')" />
  41. <div class="title">一卡通</div>
  42. </van-col>
  43. <van-col span="6" class="function" @click="sm('https://smartpark.caih.com/h5/#/visitorApply',2)">
  44. <van-image :src="require('../../assets/image/function/icon6.png')" />
  45. <div class="title">访客申请</div>
  46. </van-col>
  47. <van-col span="6" class="function" @click="sm('https://smartpark.caih.com/h5/#/safeIndex',3)" v-if="people57 == '1'">
  48. <van-image :src="require('../../assets/image/function/icon10.png')" />
  49. <div class="title">综合安防</div>
  50. </van-col>
  51. <!-- <van-col span="6" class="function" v-if="people57 == '1'">
  52. <van-image :src="require('../../assets/image/function/icon11.png')" />
  53. <div class="title">预约场地</div>
  54. </van-col> -->
  55. </van-row>
  56. </van-row>
  57. <van-row class="record">
  58. <van-row class="recordList">
  59. <van-row class="listTitle"><span></span>最近消费记录</van-row>
  60. <el-table v-loading="loading2" :data="adminList2" style="margin-top:10px;" :header-cell-style="{background:'#F5F5F5'}" >
  61. <el-table-column label="序号" align="left" show-overflow-tooltip min-width="15%">
  62. <template slot-scope="scop">
  63. {{scop.$index+1}}
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="消费设备" align="left" prop="termName" show-overflow-tooltip min-width="25%"/>
  67. <el-table-column label="金额" align="left" prop="amt" show-overflow-tooltip min-width="22%">
  68. <template slot-scope="scop">
  69. {{scop.row.amt}}元
  70. </template>
  71. </el-table-column>
  72. <el-table-column label="时间" align="left" prop="createTime" show-overflow-tooltip min-width="40%"/>
  73. </el-table>
  74. </van-row>
  75. <van-row class="recordList" style="margin-bottom:20px;">
  76. <van-row class="listTitle"><span></span>最近访客预约记录</van-row>
  77. <el-table v-loading="loading3" :data="adminList3" style="margin-top:10px;" :header-cell-style="{background:'#F5F5F5'}" >
  78. <el-table-column label="序号" align="left" show-overflow-tooltip min-width="15%">
  79. <template slot-scope="scop">
  80. {{scop.$index+1}}
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="访客名称" align="left" prop="visitor_name" show-overflow-tooltip min-width="40%"/>
  84. <el-table-column label="到访时间" align="left" prop="start_time" show-overflow-tooltip min-width="45%"/>
  85. </el-table>
  86. </van-row>
  87. <van-row class="recordList" style="margin-bottom:20px;">
  88. <van-row class="listTitle"><span></span>最近停车记录</van-row>
  89. <el-table v-loading="loading4" :data="adminList4" style="margin-top:10px;" :header-cell-style="{background:'#F5F5F5'}" class="tableScroll">
  90. <el-table-column label="序号" align="left" show-overflow-tooltip min-width="15%">
  91. <template slot-scope="scop">
  92. {{scop.$index+1}}
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="车牌号" align="left" prop="plate_number" show-overflow-tooltip min-width="25%"/>
  96. <el-table-column label="方向" align="left" prop="" show-overflow-tooltip min-width="15%">
  97. <template slot-scope="scop">
  98. {{scop.row.ingatename ? "进":"出"}}
  99. </template>
  100. </el-table-column>
  101. <el-table-column label="时间" align="left" prop="" show-overflow-tooltip min-width="45%">
  102. <template slot-scope="scop">
  103. {{scop.row.intime ? scop.row.intime:scop.row.outtime}}
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. </van-row>
  108. <van-row class="recordList">
  109. <van-row class="listTitle"><span></span>最近通行记录</van-row>
  110. <el-table v-loading="loading1" :data="adminList1" style="margin-top:10px;" :header-cell-style="{background:'#F5F5F5'}" >
  111. <el-table-column label="序号" align="left" show-overflow-tooltip min-width="15%">
  112. <template slot-scope="scop">
  113. {{scop.$index+1}}
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="通行地点" align="left" prop="dmRoomDevice.name" show-overflow-tooltip min-width="40%"/>
  117. <el-table-column label="时间" align="left" prop="accessTime" show-overflow-tooltip min-width="45%"/>
  118. </el-table>
  119. </van-row>
  120. </van-row>
  121. </van-row>
  122. <van-loading
  123. size="24px"
  124. v-if="loading"
  125. color="#fff"
  126. vertical
  127. style="z-index: 999999; position: fixed; top: 40%; left: 0; right: 0"
  128. >加载中...</van-loading
  129. >
  130. <van-overlay :show="loading" style="z-index: 100; position: fixed" />
  131. </div>
  132. </template>
  133. <script>
  134. import axios from "axios";
  135. import { Toast } from "vant";
  136. import Cookies from "js-cookie";
  137. import { encrypt, encrypt2, decrypt } from '../../utils/jsencrypt';
  138. export default {
  139. data() {
  140. return {
  141. //个人信息
  142. portrait57:undefined,
  143. nickName57:undefined,
  144. dept57:undefined,
  145. phone57:undefined,
  146. people57:false,
  147. loading: false,
  148. loadingPlateNumber:true,
  149. plateNumber:undefined,//车牌号
  150. loadingBalance:true,
  151. balance:undefined,//余额
  152. //table
  153. adminList1:[],
  154. adminList2:[],
  155. adminList3:[],
  156. adminList4:[],
  157. loading1:true,
  158. loading2:true,
  159. loading3:true,
  160. loading4:false,
  161. //图片上传
  162. nonce:undefined,
  163. timestamp:undefined,
  164. token:undefined,
  165. userId:undefined,
  166. loading:false,
  167. formData:undefined,
  168. username:undefined,
  169. };
  170. },
  171. created(){
  172. if(Cookies.get("userId57")){
  173. this.userId = Cookies.get("userId57")
  174. }else{
  175. this.$router.push({ path: "/login"})
  176. }
  177. this.portrait57 = Cookies.get("portrait57")
  178. this.nickName57 = Cookies.get("nickName57")
  179. this.dept57 = Cookies.get("dept57")
  180. this.phone57 = Cookies.get("phone57")
  181. this.people57 = Cookies.get("people57")
  182. if(Cookies.get("token57")){
  183. this.token = Cookies.get("token57")
  184. }
  185. if(Cookies.get("nonce57")){
  186. this.nonce = Cookies.get("nonce57")
  187. }
  188. if(Cookies.get("timestamp57")){
  189. this.timestamp = Cookies.get("timestamp57")
  190. }
  191. if(Cookies.get("username57")){
  192. this.username = Cookies.get("username57")
  193. }
  194. if(Cookies.get("password57")){
  195. this.password = decrypt(Cookies.get("password57"))
  196. }
  197. if(!Cookies.get("openid57") || !Cookies.get("username57") || !Cookies.get("password57") || !localStorage.getItem('cipher57')){
  198. this.outLogin()
  199. }
  200. //余额
  201. axios.get(`/dxtop/staff/one?id=${Cookies.get("userId57")}`).then(res => { //验证充值信息是否同步
  202. if(res?.data?.data?.cardId){
  203. Cookies.set("cardId57",res?.data?.data?.cardId)
  204. axios.get(`/dxtop/staff/cardBalance?card=${res.data.data.cardId}`).then(res => { //验证充值信息是否同步
  205. if(res.data.data){
  206. this.balance = res.data.data
  207. }else{
  208. this.balance = "0.00"
  209. }
  210. this.loadingBalance = false
  211. })
  212. }else{
  213. this.loadingBalance = false
  214. }
  215. })
  216. //车牌号查询
  217. axios.post(`https://smartpark.caih.com/ykt/api/thirdparty/v1/openInterface/getPlateNumber`,
  218. {
  219. "nonce": Cookies.get("nonce57"),
  220. "timestamp": Cookies.get("timestamp57"),
  221. "query": {
  222. "userNumber":Cookies.get("userId57"),
  223. }
  224. },
  225. {headers: {
  226. "XYTACCESSTOKEN":Cookies.get("token57")
  227. }
  228. }).then(res => {
  229. if(res?.data?.data && res?.data?.data.length>0){
  230. this.plateNumber = res.data.data[0].plateNumber
  231. this.loadingPlateNumber = false
  232. }else{
  233. this.plateNumber = "未录入"
  234. this.loadingPlateNumber = false
  235. }
  236. }).catch(err =>{
  237. Toast(err.response.data.message)
  238. })
  239. //通行记录
  240. axios.post(`https://smartpark.caih.com/ykt/api/thirdparty/v1/openInterface/getAccessTraffic?page=0&size=10&sort=id,desc`,
  241. {
  242. "nonce": Cookies.get("nonce57"),
  243. "timestamp": Cookies.get("timestamp57"),
  244. "query": {
  245. "userNumber":Cookies.get("userId57"),
  246. }
  247. },
  248. {headers: {
  249. "XYTACCESSTOKEN":Cookies.get("token57")
  250. }
  251. }).then(res => {
  252. if(res?.data?.data?.content){
  253. this.adminList1 = res.data.data.content.slice(0,5)
  254. this.loading1 = false
  255. }else{
  256. this.loading1 = false
  257. }
  258. }).catch(err =>{
  259. Toast(err.response.data.message)
  260. })
  261. //停车记录
  262. axios.post(`https://smartpark.caih.com/ykt/api/thirdparty/v1/openInterface/getParkingTrafficByUserNumber?page=0&size=10&sort=id,desc`,
  263. {
  264. "nonce": Cookies.get("nonce57"),
  265. "timestamp": Cookies.get("timestamp57"),
  266. "query": {
  267. "userNumber":Cookies.get("userId57"),
  268. }
  269. },
  270. {headers: {
  271. "XYTACCESSTOKEN":Cookies.get("token57")
  272. }
  273. }).then(res => {
  274. if(res.data.data){
  275. let data = res.data.data.slice(0,5)
  276. let arr = []
  277. for(let i =0; i<data.length;i++){
  278. arr[i] = {}
  279. arr[i].plate_number = data[i].plate_number
  280. arr[i].ingatename = data[i].ingatename
  281. arr[i].intime = data[i].intime
  282. arr[i*2 +1] = {}
  283. arr[i*2 +1].plate_number = data[i].plate_number
  284. arr[i*2 +1].outgatename = data[i].outgatename
  285. arr[i*2 +1].outtime = data[i].outtime
  286. }
  287. this.adminList4 = arr
  288. this.loading4 = false
  289. }else{
  290. this.loading4 = false
  291. }
  292. }).catch(err =>{
  293. Toast(err.response.data.message)
  294. })
  295. // 消费记录
  296. axios.post(`/dxtop/dish/page`,{
  297. "size":10,
  298. "current":1,
  299. "userId":Cookies.get("userId57")
  300. }).then(res => {
  301. if (res?.data?.data?.records) {
  302. this.adminList2 = res.data.data.records.slice(0,5)
  303. this.loading2 = false
  304. }else{
  305. this.loading2 = false
  306. }
  307. })
  308. //访客查询
  309. axios.post(`https://smartpark.caih.com/ykt/api/thirdparty/v1/openInterface/getVisitant?page=0&size=10`,
  310. {
  311. timestamp:Cookies.get("timestamp57"),
  312. nonce:Cookies.get("nonce57"),
  313. query:Cookies.get("userId57"),
  314. },
  315. {
  316. headers: {
  317. 'Content-Type': "application/json",
  318. "XYTACCESSTOKEN":Cookies.get("token57")
  319. }
  320. }
  321. ).then(res => {
  322. if (res?.data?.data) {
  323. this.adminList3 = res.data.data.slice(0,5)
  324. this.loading3 = false
  325. }else{
  326. this.loading3 = false
  327. }
  328. })
  329. },
  330. mounted() {
  331. document.title = '中国东信智慧园区'
  332. },
  333. methods: {
  334. //上传
  335. afterRead(param) {
  336. this.formData = new FormData()// FormData 对象
  337. this.formData.append('file', param.file)// 文件对象
  338. let params = JSON.stringify({nonce:this.nonce,timestamp:this.timestamp,query:{userId:this.userId}})
  339. this.formData.append('params', params)// 参数
  340. this.formData.append('multipartFile', param.file)// 参数
  341. axios.post(`https://smartpark.caih.com/zkxt/api/thirdparty/v1/user/edit/zkuser/picture` ,this.formData,
  342. {headers: {
  343. 'Content-Type': "multipart/form-data",
  344. "XYTACCESSTOKEN":this.token
  345. }
  346. }).then(res => {
  347. axios.get(`https://smartpark.caih.com/zkxt/api/thirdparty/v1/user/appLogin?name=${this.username}&pass=${this.password}`).then(res => {
  348. if (res?.data?.data?.data?.cipher) {
  349. localStorage.setItem("cipher57",res?.data?.data?.data?.cipher)
  350. localStorage.setItem("classify","1")
  351. Cookies.set("password57", encrypt(this.password), { expires: 300 });
  352. Cookies.set("portrait57", res.data.data.data.user.avatarName, { expires: 300 });
  353. Cookies.set("userId57", res.data.data.data.userId, { expires: 300 });
  354. Cookies.set("token57", res.data.data.data.token, { expires: 300 });
  355. Cookies.set("nonce57", res.data.data.data.nonce, { expires: 300 });
  356. Cookies.set("timestamp57", res.data.data.data.timestamp, { expires: 300 });
  357. this.portrait = res.data.data.data.user.avatarName
  358. }
  359. }).catch(err =>{
  360. Toast(err.response.data.message)
  361. })
  362. }).catch(err =>{
  363. Toast(err.response.data.message)
  364. })
  365. },
  366. //一卡通充值
  367. ykt(){
  368. this.$router.push({ path: `/amount?token=${localStorage.getItem('cipher57')}&classify=''&passageway='weixin'`}) //passageway检测微信进入会app进入
  369. },
  370. //世茂
  371. sm(url){
  372. // https://smartpark.caih.com/h5/#/myVisitor 访客申请列表页
  373. let param = {
  374. userid:encrypt(Cookies.get("username57")),
  375. password:Cookies.get("password57"),
  376. type:"wx_yt"
  377. }
  378. window.location.href = `${url}?param=${encodeURIComponent(JSON.stringify(param))}`
  379. },
  380. //修改页
  381. go(){
  382. this.$router.push({ path: "/information"})
  383. },
  384. outLogin(){
  385. this.$router.push({ path: "/"})
  386. }
  387. },
  388. };
  389. </script>
  390. <style lang="scss" scoped>
  391. .mianBox{
  392. height: 100%;
  393. width: 100%;
  394. color: #FFF;
  395. padding-top: 44px;
  396. box-sizing: border-box;
  397. background-color: #F9F9F9;
  398. .people{
  399. width:100%;
  400. padding:15px 15px 20px 15px;
  401. box-sizing: border-box;
  402. background-color: #F22E3C;
  403. overflow-x: hidden;
  404. .top{
  405. margin-top:0;
  406. position: relative;
  407. .left{
  408. width:80px;
  409. height:80px;
  410. background-color: #fff;
  411. border-radius: 50%;
  412. display: inline-block;
  413. margin-right:15px;
  414. vertical-align: middle;
  415. position: relative;
  416. .upload{
  417. position: absolute;
  418. width:90px;
  419. height:80px;
  420. overflow: hidden;
  421. top:0px;
  422. opacity:0;
  423. z-index: 10;
  424. background: transparent;
  425. }
  426. .portrait{
  427. width:76px;
  428. height:76px;
  429. margin:2px;
  430. vertical-align: middle;
  431. ::v-deep .van-image__img{
  432. border-radius: 50% !important;
  433. }
  434. }
  435. }
  436. .right{
  437. display: inline-block;
  438. font-size: 14px;
  439. vertical-align: top;
  440. .name{
  441. margin:10px 0 6px;
  442. }
  443. .dept{
  444. margin-bottom:6px;
  445. }
  446. .arrowRight{
  447. display: inline-block;
  448. color:#fff;
  449. font-size: 20px;
  450. position: absolute;
  451. z-index: 2;
  452. right:-10px;
  453. top:22%;
  454. }
  455. }
  456. .bottom{
  457. font-size: 14px;
  458. margin-top:10px;
  459. .van-row{
  460. width:50%;
  461. text-align: center;
  462. display: inline-block;
  463. line-height: 25px;
  464. }
  465. }
  466. }
  467. }
  468. .contentBox{
  469. width: 100%;
  470. height: auto;
  471. overflow: hidden;
  472. .system{
  473. width:100%;
  474. background-color: #fff;
  475. padding: 15px;
  476. box-sizing: border-box;
  477. .function{
  478. width:20%;margin:10px 2.5%;
  479. .title{
  480. font-size: 12px;
  481. color:#000;
  482. text-align: center;
  483. margin-top:6px;
  484. }
  485. }
  486. }
  487. .record{
  488. .recordList{
  489. margin-top:10px;
  490. padding: 10px;
  491. box-sizing: border-box;
  492. background-color: #fff;
  493. .listTitle{
  494. font-size: 14px;
  495. color:#000;
  496. span{
  497. width:4px;
  498. height:14px;
  499. display: inline-block;
  500. background-color: #F22E3C;
  501. margin-right:4px;
  502. }
  503. }
  504. }
  505. }
  506. }
  507. }
  508. .el-table th>.cell{
  509. font-size: 11px;
  510. }
  511. </style>
  512. <style>
  513. .el-table td, .el-table th{
  514. padding:4px 0 !important;
  515. }
  516. .el-loading-mask{
  517. background-color: transparent !important;
  518. }
  519. .upload{
  520. position: absolute;
  521. width:100px;
  522. height:50px;
  523. overflow: hidden;
  524. top:0px;
  525. right:0;
  526. opacity: 0;
  527. z-index: 10;
  528. background-color: blue;
  529. }
  530. .el-table .cell{
  531. padding-right:0;
  532. }
  533. .tableScroll{
  534. overflow-x:scroll;
  535. }
  536. </style>