BMS.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <template>
  2. <view style="padding-bottom: 30rpx;">
  3. <!-- tab -->
  4. <view class="tab-box ddflex">
  5. <view class="fflex ddflex">
  6. <view :class="'tab-item fflex '+(queryType==1?'tab-item-active':'')" @click="queryTypeChange(1)">
  7. <view>实时状态</view>
  8. <image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
  9. </view>
  10. <view :class="'tab-item fflex '+(queryType==2?'tab-item-active':'')" @click="queryTypeChange(2)">
  11. <view>BMS控制</view>
  12. <image class="tab-active-icon" src="../../static/images/tab_cur.png"></image>
  13. </view>
  14. </view>
  15. </view>
  16. <view style="height: 110rpx;"></view>
  17. <block v-if="queryType==1">
  18. <view class="option-box">
  19. <view class="option-time ddflex">
  20. <view>更新时间: {{time}}</view>
  21. <view class="refresh ddflex" @click="getData()">
  22. <image src="../../static/pages/images/refresh.png"></image>
  23. <text>刷新</text>
  24. </view>
  25. </view>
  26. <view style="position: relative;">
  27. <view style="height: 140rpx;"></view>
  28. <view style="margin-top: 40rpx;justify-content: center;position: absolute;left: 50%;transform: translateX(-50%);top: -50%;" class="ddflex">
  29. <cell :width="99" :height="197" :soc="info.State.SOC" :showsoc="true" :rotate="90"></cell>
  30. </view>
  31. </view>
  32. </view>
  33. <view class="bms-info">
  34. <view class="bms-row ddflex">
  35. <view class="fflex ddflex">
  36. <text>电池类型:</text>
  37. <text class="bms-row-data">{{info.State.BetteryType==1?'铁锂':'三元'}} </text>
  38. </view>
  39. </view>
  40. <view class="bms-row ddflex">
  41. <view class="fflex ddflex">
  42. <text>工作状态:</text>
  43. <text class="bms-row-data">{{info.State.WorkStatus==1?'充电中':info.State.WorkStatus==2?'闲置':'放电中'}} </text>
  44. </view>
  45. </view>
  46. <view class="bms-row ddflex">
  47. <view class="fflex ddflex">
  48. <text>总电压:</text>
  49. <text class="bms-row-data">{{info.State.BetteryV_All}}V </text>
  50. </view>
  51. </view>
  52. <view class="bms-row ddflex">
  53. <view class="fflex ddflex">
  54. <text>标称容量:</text>
  55. <text class="bms-row-data">{{info.State.FCC}} </text>
  56. </view>
  57. </view>
  58. <view class="bms-row ddflex">
  59. <view class="fflex ddflex">
  60. <text>剩余容量:</text>
  61. <text class="bms-row-data">{{info.State.SYLA}} </text>
  62. </view>
  63. </view>
  64. <view class="bms-row ddflex">
  65. <view class="fflex ddflex">
  66. <text>充电电流:</text>
  67. <text class="bms-row-data">{{info.State.CPowerA}}A </text>
  68. </view>
  69. </view>
  70. <view class="bms-row ddflex">
  71. <view class="fflex ddflex">
  72. <text>放电电流:</text>
  73. <text class="bms-row-data">{{info.State.DPowerA}}A </text>
  74. </view>
  75. </view>
  76. <view class="bms-row ddflex">
  77. <view class="fflex ddflex">
  78. <text>剩余容量百分比:</text>
  79. <text class="bms-row-data">{{info.State.SOC}}% </text>
  80. </view>
  81. </view>
  82. <view class="bms-row ddflex">
  83. <view class="fflex ddflex">
  84. <text>充电保护状态:</text>
  85. <text class="bms-row-data">{{info.State.CPStatus==1?'硬控保护':info.State.CPStatus==2?'软控保护':'正常'}} </text>
  86. </view>
  87. </view>
  88. <view class="bms-row ddflex">
  89. <view class="fflex ddflex">
  90. <text>充电保护次数:</text>
  91. <text class="bms-row-data">{{info.State.CPCount}} </text>
  92. </view>
  93. </view>
  94. <view class="bms-row ddflex">
  95. <view class="fflex ddflex">
  96. <text>放电保护状态:</text>
  97. <text class="bms-row-data">{{info.State.DPStatus==1?'硬控保护':info.State.DPStatus==2?'软控保护':'正常'}} </text>
  98. </view>
  99. </view>
  100. <view class="bms-row ddflex">
  101. <view class="fflex ddflex">
  102. <text>放电保护次数:</text>
  103. <text class="bms-row-data">{{info.State.DPCount}} </text>
  104. </view>
  105. </view>
  106. <view class="bms-row ddflex">
  107. <view class="fflex ddflex">
  108. <text>短路保护:</text>
  109. <text class="bms-row-data">{{info.State.SCProtect==1?'保护':'正常'}} </text>
  110. </view>
  111. </view>
  112. <view class="bms-row ddflex">
  113. <view class="fflex ddflex">
  114. <text>短路保护次数:</text>
  115. <text class="bms-row-data">{{info.State.SCPCount}} </text>
  116. </view>
  117. </view>
  118. <view class="bms-row ddflex">
  119. <view class="fflex ddflex">
  120. <text>均衡类型:</text>
  121. <text class="bms-row-data">{{info.State.BetteryType==1?'被动':info.State.BetteryType==2?'主动':'无'}} </text>
  122. </view>
  123. </view>
  124. <view class="bms-row ddflex">
  125. <view class="fflex ddflex">
  126. <text>均衡开关:</text>
  127. <text class="bms-row-data">{{(info.State.EM==1||info.State.EM=='Open')?'打开':'关闭'}} </text>
  128. </view>
  129. </view>
  130. <view class="bms-row ddflex">
  131. <view class="fflex ddflex">
  132. <text>保护板温度:</text>
  133. <text class="bms-row-data">{{info.State.TC_T}}°C</text>
  134. </view>
  135. </view>
  136. <view class="bms-row ddflex">
  137. <view class="fflex ddflex">
  138. <text>电池温度:</text>
  139. <text class="bms-row-data">{{info.State.TC_B_1}}°C</text>
  140. </view>
  141. </view>
  142. <view class="bms-row ddflex">
  143. <view class="fflex ddflex">
  144. <text>充电过温次数:</text>
  145. <text class="bms-row-data">{{info.State.CPSuperheat}}</text>
  146. </view>
  147. </view>
  148. <view class="bms-row ddflex">
  149. <view class="fflex ddflex">
  150. <text>充电低温次数:</text>
  151. <text class="bms-row-data">{{info.State.CPSubcooled}}</text>
  152. </view>
  153. </view>
  154. <view class="bms-row ddflex">
  155. <view class="fflex ddflex">
  156. <text>放电过温次数:</text>
  157. <text class="bms-row-data">{{info.State.DPSuperheat}}</text>
  158. </view>
  159. </view>
  160. <view class="bms-row ddflex">
  161. <view class="fflex ddflex">
  162. <text>放电低温次数:</text>
  163. <text class="bms-row-data">{{info.State.DPSubcooled}}</text>
  164. </view>
  165. </view>
  166. <view class="bms-row ddflex">
  167. <view class="fflex ddflex">
  168. <text>出厂日期:</text>
  169. <text class="bms-row-data">{{info.State.CCXX}}</text>
  170. </view>
  171. </view>
  172. <view class="bms-row ddflex">
  173. <view class="fflex ddflex">
  174. <text>厂商编码:</text>
  175. <text class="bms-row-data">{{info.State.BMSCode}} </text>
  176. </view>
  177. </view>
  178. </view>
  179. </block>
  180. <block v-if="queryType==2">
  181. <view class="option-box">
  182. <view class="option-time ddflex">
  183. <view>更新时间: {{time}}</view>
  184. <view class="refresh ddflex" @click="getData()">
  185. <image src="../../static/pages/images/refresh.png"></image>
  186. <text>刷新</text>
  187. </view>
  188. </view>
  189. <view class="ddflex state">
  190. <view class="ddflex">
  191. <view>充电开关:</view>
  192. <view style="color: #A8A5A5;">{{info.Seting.CHON==1?'开启':'关闭'}}</view>
  193. </view>
  194. <switch style="transform: scale(0.7);" :checked="info.Seting.CHON==1?true:false" color="#FF753A" @change="switchChangeC"></switch>
  195. </view>
  196. <view class="ddflex state">
  197. <view class="ddflex">
  198. <view>放电开关:</view>
  199. <view style="color: #A8A5A5;">{{info.Seting.DHON==1?'开启':'关闭'}}</view>
  200. </view>
  201. <switch style="transform: scale(0.7);" :checked="info.Seting.DHON==1?true:false" color="#FF753A" @change="switchChange"></switch>
  202. </view>
  203. </view>
  204. </block>
  205. </view>
  206. </template>
  207. <script>
  208. const app = getApp();
  209. const req = require("../../utils/request.js");
  210. import cell from "../../components/cell/index";
  211. const utils = require("../../utils/util");
  212. export default {
  213. components: {
  214. cell
  215. },
  216. props: {},
  217. data() {
  218. return {
  219. systems: {},
  220. isTop:0,
  221. queryType: 1,
  222. id:null,
  223. info:{},
  224. time:''
  225. }
  226. },
  227. onLoad(options) {
  228. this.id = options.id
  229. this.getData()
  230. },
  231. onShow() {
  232. },
  233. methods: {
  234. jumpUrl(url) {
  235. if (req.isLogins(true)) {
  236. uni.navigateTo({
  237. url: url
  238. })
  239. }
  240. },
  241. queryTypeChange(val) {
  242. if (this.queryType == val) return false
  243. this.queryType = val
  244. },
  245. getData(){
  246. uni.showLoading({
  247. title:'加载中'
  248. })
  249. req.getRequest('/admin/v2/battery/bmsData',{batteryId:this.id},res=>{
  250. this.info = res[0]
  251. this.info.Seting = JSON.parse(this.info.Seting)
  252. this.info.State = JSON.parse(this.info.State)
  253. this.time = utils.formatTime(new Date()).t1
  254. uni.hideLoading()
  255. })
  256. },
  257. switchChange(event){
  258. event.detail.value = event.detail.value?1:0
  259. this.info.Seting.DHON = event.detail.value
  260. let that = this
  261. uni.showModal({
  262. title:'提示',
  263. content:event.detail.value?'确定开启放电开关?':'确定关闭放电开关?',
  264. success: (r) => {
  265. if(r.confirm){
  266. uni.showLoading({
  267. title:event.detail.value?'开启中':'关闭中',
  268. })
  269. req.postRequest('/admin/v2/battery/bmsSend',{batteryId:this.id,type:event.detail.value,operateType:1},res=>{
  270. uni.hideLoading()
  271. if(res){
  272. // req.msg(event.detail.value?'开启成功':'关闭成功')
  273. uni.showModal({
  274. title:'提示',
  275. content:'操作成功,该操作会有延迟,请稍候查看最新状态',
  276. showCancel:false,
  277. success() {
  278. that.getData()
  279. }
  280. })
  281. }else {
  282. req.msg(event.detail.value?'开启失败':'关闭失败')
  283. this.info.Seting.DHON = this.info.Seting.DHON==1?0:1
  284. }
  285. })
  286. }else{
  287. this.info.Seting.DHON = this.info.Seting.DHON==1?0:1
  288. // this.getData()
  289. }
  290. }
  291. })
  292. },
  293. switchChangeC(event){
  294. event.detail.value = event.detail.value?1:0
  295. this.info.Seting.CHON = event.detail.value
  296. let that = this
  297. uni.showModal({
  298. title:'提示',
  299. content:event.detail.value?'确定开启充电开关?':'确定关闭充电开关?',
  300. success: (r) => {
  301. if(r.confirm){
  302. uni.showLoading({
  303. title:event.detail.value?'开启中':'关闭中',
  304. })
  305. req.postRequest('/admin/v2/battery/bmsSend',{batteryId:this.id,type:event.detail.value,operateType:2},res=>{
  306. uni.hideLoading()
  307. if(res){
  308. // req.msg(event.detail.value?'开启成功':'关闭成功')
  309. uni.showModal({
  310. title:'提示',
  311. content:'操作成功,该操作会有延迟,请稍候查看最新状态',
  312. showCancel:false,
  313. success() {
  314. that.getData()
  315. }
  316. })
  317. }else {
  318. req.msg(event.detail.value?'开启失败':'关闭失败')
  319. this.info.Seting.CHON = this.info.Seting.CHON==1?0:1
  320. }
  321. })
  322. }else{
  323. this.info.Seting.CHON = this.info.Seting.CHON==1?0:1
  324. // this.getData()
  325. }
  326. }
  327. })
  328. },
  329. },
  330. mounted() {
  331. },
  332. onPageScroll: function(e) {
  333. }
  334. }
  335. </script>
  336. <style>
  337. @import "./BMS.css";
  338. </style>