switchDetail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. <template>
  2. <view>
  3. <u-navbar
  4. @titleCk="titleCk" :title-icon="electricityMeterList.length>1?'arrow-down':''"
  5. :title="title" >
  6. <!-- <view class="u-nav-slot" slot="right" @click="tabsFrom.show2=true,params.day=true">
  7. <image class="img" src="@/assets/img/riLine-calendar-todo-line 1.svg" mode=""></image>
  8. </view> -->
  9. </u-navbar>
  10. <u-picker v-model="tabsFrom.show1"
  11. :defaultSelector="[tabsFrom.show1Index]"
  12. mode="selector" :range="tabsFrom.selector1" range-key="label" @confirm="selector1confirm" ></u-picker>
  13. <template v-if="meterDetails.meter&&meterDetails.meter.type!=6" >
  14. <view class="control-group" v-if="meterDetails.meter" >
  15. <view class="control">
  16. <view class="text">
  17. 电源
  18. </view>
  19. </view>
  20. <view class="control">
  21. <view class="text">
  22. 开关
  23. </view>
  24. <view class="icon" style=" display: flex;" >
  25. <span>关</span>
  26. <u-switch size="32" @change="switchBtnApi(meterDetails.meter,$event)"
  27. v-model="meterDetails.meter.switchStatus" inactive-color="#ff9900" ></u-switch >
  28. <span>开</span>
  29. <!--
  30. <img src="@/assets/img/switchIcon.png"
  31. @tap.stop="switchBtnApi(meterDetails.meter,0)" class="img"
  32. v-if="meterDetails.meter.switchStatus" alt="" ></img >
  33. <img src="@/assets/img/switchClose.png"
  34. @tap.stop="switchBtnApi(meterDetails.meter,1)" class="img"
  35. v-else alt="" ></img > -->
  36. <!-- <img src="@/assets/img/control.png" alt="" /> -->
  37. </view>
  38. </view>
  39. </view>
  40. <!-- 用电信息 -->
  41. <view class="electricity-information">
  42. <view class="title">
  43. <view class="text">
  44. 用电信息
  45. </view>
  46. <!-- <view class="more" @click="gotoUrl('/pages/tenantList/electricityInformation')">
  47. <u-icon name="arrow-right" size="24" color="#d4d4d4"></u-icon>
  48. </view> -->
  49. </view>
  50. <view class="infos">
  51. <view class="item" style="width: 30%;">
  52. <view class="item-value">
  53. {{meterDetails.thisDayKwh}}
  54. </view>
  55. <view class="item-title">
  56. 今日用电量(度)
  57. </view>
  58. </view>
  59. <view class="item" style="width: 30%;">
  60. <view class="item-value">
  61. {{meterDetails.thisMonthKwh}}
  62. </view>
  63. <view class="item-title">
  64. 当月用电量(度)
  65. </view>
  66. </view>
  67. <view class="item" style="width: 30%;">
  68. <view class="item-value" v-if="meterDetails.nowRecord">
  69. {{meterDetails.nowRecord.totalPower}}
  70. </view>
  71. <view class="item-title">
  72. 当前功率(千瓦)
  73. </view>
  74. </view>
  75. </view>
  76. </view>
  77. <!-- 日志 -->
  78. <view class="log" @click="gotoUrl('/pages/timing/timing?id='+meterId)">
  79. <view class="icon">
  80. <u-icon name="clock" color="#fff" size="40" ></u-icon>
  81. </view>
  82. <view class="text">
  83. 定时
  84. </view>
  85. <view class="more">
  86. <u-icon name="arrow-right" size="32" color="#bbbbbb" ></u-icon>
  87. </view>
  88. </view>
  89. <view class="log" @click="gotoUrl('/pages/remoteControl/operationLog?id='+meterId)">
  90. <view class="icon">
  91. <img src="@/assets/img/riLine-file-list-2-line.svg" alt="" />
  92. </view>
  93. <view class="text">
  94. 日志
  95. </view>
  96. <view class="more">
  97. <u-icon name="arrow-right" size="32" color="#bbbbbb" ></u-icon>
  98. </view>
  99. </view>
  100. </template>
  101. <template v-else>
  102. <view class="log" >
  103. <!-- <view class="icon">
  104. </view> -->
  105. <view class="text">
  106. 虚拟表不可操作
  107. </view>
  108. <view class="more">
  109. <!-- <u-icon name="arrow-right" size="32" color="#bbbbbb" ></u-icon> -->
  110. </view>
  111. </view>
  112. </template>
  113. </view>
  114. </template>
  115. <script>
  116. import * as API from '@/apis/pagejs/tenantElectricityMeter.js'
  117. import * as API_meterTimer from '@/apis/pagejs/meterTimer.js'
  118. export default {
  119. data() {
  120. return {
  121. codes:"",
  122. meterId:"",
  123. meterDetails:{},
  124. electricity:{},
  125. electricityMeterList:[],
  126. role:false,
  127. title:"",
  128. intervalId:"",
  129. getMeterReady:false,
  130. FormData:{
  131. },
  132. tabsFrom: {
  133. show1: false,
  134. show1Index:0,
  135. show2Index:'',
  136. show2: false,
  137. show1Text: "全部类型",
  138. show2Text: "全部时间",
  139. selector1:[
  140. {
  141. label: '全部类型',
  142. value: '',
  143. },
  144. {
  145. label: '线上充值',
  146. value: '1',
  147. },
  148. {
  149. label: '线下充值',
  150. value: '2',
  151. },
  152. ]
  153. },
  154. }
  155. },
  156. onLoad(op) {
  157. if(op.id){
  158. this.meterId=op.id;
  159. //this.getMeter()
  160. }
  161. this.getElectricityMeterList();
  162. },
  163. onShow() {
  164. if(this.meterId&&this.getMeterReady){
  165. this.startInterval()
  166. }
  167. },
  168. onHide() {
  169. this.clearTimer()
  170. },
  171. methods: {
  172. selector1confirm(e){
  173. var index=e[0]
  174. this.tabsFrom.show1Index=index
  175. this.tabsFrom.show1Text=this.tabsFrom.selector1[index].label
  176. this.title=this.tabsFrom.selector1[index].label
  177. this.FormData.meterId=this.tabsFrom.selector1[index].value
  178. this.meterId=this.FormData.meterId
  179. //this.value="4"
  180. this.electricity=this.electricityMeterList[index]
  181. this.getMeter()
  182. },
  183. titleCk(){
  184. if(this.electricityMeterList.length>1){
  185. this.tabsFrom.show1=true
  186. }
  187. },
  188. getElectricityMeterList(bl){
  189. uni.showLoading({
  190. title: "加载中",
  191. mask: true,
  192. })
  193. API.electricityMeterList().then((response) => {
  194. uni.hideLoading();
  195. this.electricityMeterList=response.data.meterList
  196. if(this.electricityMeterList.length){
  197. // this.electricityMeterList=[
  198. // ...this.electricityMeterList,
  199. // ...this.electricityMeterList
  200. // ]
  201. var index=0;
  202. for(var i in this.electricityMeterList){
  203. var obj=this.electricityMeterList[i]
  204. if(obj.id==this.meterId){
  205. index=i
  206. this.tabsFrom.show1Index=i;
  207. }
  208. }
  209. this.electricity=this.electricityMeterList[index];
  210. this.FormData.meterId=this.electricityMeterList[index].id
  211. this.meterId=this.FormData.meterId
  212. this.title=this.electricityMeterList[index].name
  213. // {
  214. // label: '全部类型',
  215. // value: '',
  216. // }
  217. this.tabsFrom.selector1=[]
  218. this.tabsFrom.selector1=this.electricityMeterList.map(item=>{
  219. return {
  220. label:item.name,
  221. value:item.id
  222. }
  223. })
  224. //this.tabsFrom.selector1.push({})
  225. this.getMeter()
  226. }else{
  227. uni.showModal({
  228. title:"提示",
  229. content:"未绑定电表,请联系管理员!",
  230. showCancel:false,
  231. success() {
  232. uni.navigateBack()
  233. }
  234. })
  235. }
  236. }).catch(error => {
  237. uni.showToast({
  238. title: error,
  239. icon: "none"
  240. })
  241. })
  242. },
  243. clearTimer() {
  244. if (this.intervalId) {
  245. clearInterval(this.intervalId); // 清除定时器
  246. this.intervalId = null; // 重置定时器ID
  247. }
  248. },
  249. startInterval() {
  250. this.clearTimer(); // 组件销毁前清除定时器
  251. this.intervalId = setInterval(() => {
  252. this.getMeter(true)
  253. }, 60000);
  254. },
  255. switchBtnApiMethod(node,key){
  256. uni.showLoading({
  257. title: "加载中",
  258. mask: true,
  259. })
  260. API.remoteSwitch({
  261. meterId:node.id,
  262. enabled:key
  263. }).then((res) => {
  264. uni.hideLoading();
  265. node.switchStatus=key
  266. }).catch(error => {
  267. uni.showToast({
  268. title: error,
  269. icon: "none"
  270. })
  271. })
  272. },
  273. switchBtnApi(node,key){
  274. uni.showModal({
  275. confirmColor:`${key?'#3CC51F':'red'}`,
  276. confirmText:`${key?'开启':'关闭'}`,
  277. content: `确认是否要"${key?'开启':'关闭'}"${node.name}`,
  278. title: "提示",
  279. success:res=> {
  280. if(res.confirm){
  281. this.switchBtnApiMethod(node,key);
  282. }else{
  283. node.switchStatus=!key
  284. }
  285. }
  286. })
  287. console.log(node,key)
  288. },
  289. getMeter(bl){
  290. if(!bl){
  291. uni.showLoading({
  292. title: "加载中",
  293. mask: true,
  294. })
  295. }
  296. API_meterTimer.meterDetails({
  297. meterId:this.FormData.meterId
  298. }).then((response) => {
  299. //this.codes =this.carhelp.getPersonInfo().codes;
  300. //this.role=this.codes&&this.codes.indexOf('switch')!=-1;
  301. this.meterDetails=response.data
  302. if(!bl){
  303. uni.hideLoading();
  304. }
  305. this.getMeterReady=true;
  306. if(this.meterDetails.meter){
  307. this.title=this.meterDetails.meter.name
  308. }
  309. }).catch(error => {
  310. uni.showToast({
  311. title: error,
  312. icon: "none"
  313. })
  314. })
  315. },
  316. }
  317. }
  318. </script>
  319. <style lang="scss" scoped>
  320. .control-group{
  321. margin: 24rpx 32rpx;
  322. padding: 40rpx 32rpx;
  323. background-color: #fff;
  324. border-radius: 8px;
  325. .control:first-of-type{
  326. margin-top: 0;
  327. }
  328. .control{
  329. display: flex;
  330. align-items: center;
  331. justify-content: space-between;
  332. margin-top: 56rpx;
  333. .text{
  334. color: rgba(51,51,51,1);
  335. font-size: 32rpx;
  336. font-weight: bold;
  337. }
  338. .icon{
  339. img{
  340. width: 64rpx;
  341. height: 64rpx;
  342. }
  343. }
  344. }
  345. }
  346. .electricity-information {
  347. margin: 24rpx 32rpx;
  348. padding: 40rpx 0rpx;
  349. background-color: #fff;
  350. border-radius: 8px;
  351. .title {
  352. display: flex;
  353. align-items: center;
  354. padding: 0 32rpx;
  355. margin-bottom: 40rpx;
  356. .text {
  357. display: flex;
  358. align-items: center;
  359. color: rgba(51, 51, 51, 1);
  360. font-size: 36rpx;
  361. margin-left: 16rpx;
  362. font-weight: bold;
  363. }
  364. .date {
  365. margin-left: auto;
  366. }
  367. .more {
  368. color: #838383;
  369. font-size: 24rpx;
  370. margin-left: auto;
  371. }
  372. }
  373. .chart {
  374. width: 100%;
  375. height: 440rpx;
  376. .img {
  377. width: 100%;
  378. height: 440rpx;
  379. }
  380. }
  381. .infos {
  382. padding: 0 32rpx;
  383. display: flex;
  384. justify-content: space-between;
  385. text-align: center;
  386. .item-title {
  387. color: rgba(119,119,119,1);
  388. font-size: 24rpx;
  389. margin-top: 8rpx;
  390. }
  391. .item-value {
  392. color: rgba(16, 16, 16, 1);
  393. font-size: 56rpx;
  394. margin-top: 16rpx;
  395. }
  396. }
  397. }
  398. .log{
  399. margin: 24rpx 32rpx;
  400. padding: 40rpx 32rpx;
  401. background-color: #fff;
  402. border-radius: 8px;
  403. display: flex;
  404. align-items: center;
  405. .icon{
  406. width: 88rpx;
  407. height: 88rpx;
  408. border-radius: 999px;
  409. background-color: rgba(22,119,255,1);
  410. display: flex;
  411. align-items: center;
  412. justify-content: center;
  413. img{
  414. width: 48rpx;
  415. height: 48rpx;
  416. }
  417. }
  418. .text{
  419. color: rgba(51,51,51,1);
  420. font-size: 32rpx;
  421. margin-left: 24rpx;
  422. font-weight: bold;
  423. }
  424. .more{
  425. margin-left: auto;
  426. }
  427. }
  428. </style>