合伙人运营小程序
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

index.js 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. const api = require('../../api/index.js');
  2. Page({
  3. data: {
  4. // 点位类型:station(电站)/user(用电点)
  5. type: '',
  6. // 点位详情信息
  7. info: {},
  8. // 模拟全量点位数据(实际项目中从接口获取)
  9. allPointData: {
  10. // 电站详情
  11. station001: {
  12. id: 'station001',
  13. type: 'station',
  14. name: '张江电站',
  15. address: '上海市浦东新区张江路1238号张江高科技园区东区',
  16. longitude: 121.482000,
  17. latitude: 31.235000,
  18. status: '正常运行',
  19. powerCapacity: 5000, // 装机容量(kW)
  20. currentPower: 4200, // 当前出力(kW)
  21. todayGenerate: 85000,// 今日发电量(kWh)
  22. operationRate: 98.5, // 运行率(%)
  23. contactPerson: '王经理',
  24. contactPhone: '13800138000',
  25. buildTime: '2023-06-15',
  26. area: '浦东新区-张江',
  27. remark: '光伏+储能一体化电站,主要供应张江园区企业用电'
  28. },
  29. station002: {
  30. id: 'station002',
  31. type: 'station',
  32. name: '漕河泾电站',
  33. address: '上海市徐汇区虹漕路461号漕河泾新兴技术开发区',
  34. longitude: 121.440000,
  35. latitude: 31.205000,
  36. status: '正常运行',
  37. powerCapacity: 3000,
  38. currentPower: 2850,
  39. todayGenerate: 56000,
  40. operationRate: 99.2,
  41. contactPerson: '李主管',
  42. contactPhone: '13900139000',
  43. buildTime: '2023-09-20',
  44. area: '徐汇区-漕河泾',
  45. remark: '储能电站,配套园区峰谷电价调节'
  46. },
  47. // 用电点详情
  48. user001: {
  49. id: 'user001',
  50. type: 'user',
  51. name: '陆家嘴商业中心',
  52. address: '上海市浦东新区陆家嘴环路1000号上海环球金融中心',
  53. longitude: 121.506377,
  54. latitude: 31.238039,
  55. status: '用电正常',
  56. currentPower: 1200, // 当前用电功率(kW)
  57. todayConsume: 28800, // 今日用电量(kWh)
  58. peakPower: 1800, // 今日峰值功率(kW)
  59. contractPower: 2000, // 合同功率(kW)
  60. contactPerson: '张经理',
  61. contactPhone: '13700137000',
  62. buildTime: '2023-01-10',
  63. area: '浦东新区-陆家嘴',
  64. remark: '商业综合体,24小时用电,峰值集中在10:00-22:00'
  65. },
  66. user002: {
  67. id: 'user002',
  68. type: 'user',
  69. name: '人民广场商圈',
  70. address: '上海市黄浦区人民大道120号人民广场地下商城',
  71. longitude: 121.473081,
  72. latitude: 31.230664,
  73. status: '用电正常',
  74. currentPower: 800,
  75. todayConsume: 19200,
  76. peakPower: 1200,
  77. contractPower: 1500,
  78. contactPerson: '刘主管',
  79. contactPhone: '13600136000',
  80. buildTime: '2023-03-18',
  81. area: '黄浦区-人民广场',
  82. remark: '商圈配套用电,节假日峰值提升30%'
  83. }
  84. },
  85. activeTab:0,
  86. alertData: [], // 补充:告警列表数据(核心缺失字段)
  87. pageNum: 1, // 当前页码
  88. pageSize: 10, // 每页条数
  89. totalPages: 0, // 总数据量(建议字段名改为 totalCount 更易理解)
  90. hasMore: true, // 是否还有更多数据
  91. isLoading: false, // 是否正在加载(防止重复请求)
  92. options:'',
  93. electricitydata:[],
  94. powerstationdata:[]
  95. },
  96. onLoad(options) {
  97. // 接收从列表页传递的参数:id(点位ID)、type(点位类型)
  98. console.log(options);
  99. this.setData({
  100. options:options
  101. })
  102. const { id, type } = options;
  103. if (!id || !type) {
  104. wx.showToast({ title: '参数错误', icon: 'none' });
  105. wx.navigateBack();
  106. return;
  107. }
  108. // 设置点位类型和详情信息
  109. this.setData({
  110. type: type,
  111. info: this.data.allPointData[id] || {}
  112. }, () => {
  113. // 设置导航栏标题
  114. wx.setNavigationBarTitle({
  115. title: this.data.type === 'station' ? '电站详情' : '用电点详情'
  116. });
  117. });
  118. // 实际项目中替换为接口请求
  119. // this.getPointDetail(id, type);
  120. this.initAlertData()
  121. this.Electricalrecording()
  122. this.gitpowerstation()
  123. },
  124. // 充放电记录
  125. gitpowerstation(){
  126. let data = {
  127. addressId: this.data.options.id,
  128. }
  129. api.request(`/sysaddress/selectaddressdetails`, 'post', data, { isPublic: false })
  130. .then((data) => {
  131. console.log('实时数据:', data.data);
  132. if (data.code === 200) {
  133. this.setData({
  134. powerstationdata: data.data
  135. })
  136. }
  137. })
  138. .catch((err) => {
  139. console.error('实时数据请求失败:', err);
  140. });
  141. },
  142. /**
  143. * 实际项目中:从接口获取点位详情
  144. * @param {String} id 点位ID
  145. * @param {String} type 点位类型
  146. */
  147. getPointDetail(id, type) {
  148. wx.showLoading({ title: '加载中...' });
  149. wx.request({
  150. url: `https://你的接口地址/${type}/${id}`,
  151. method: 'GET',
  152. success: (res) => {
  153. if (res.data.code === 200) {
  154. this.setData({ info: res.data.data });
  155. wx.setNavigationBarTitle({
  156. title: type === 'station' ? '电站详情' : '用电点详情'
  157. });
  158. } else {
  159. wx.showToast({ title: res.data.msg || '加载失败', icon: 'none' });
  160. }
  161. },
  162. fail: () => {
  163. wx.showToast({ title: '网络错误', icon: 'none' });
  164. },
  165. complete: () => {
  166. wx.hideLoading();
  167. }
  168. });
  169. },
  170. // 充放电记录
  171. Electricalrecording(){
  172. let data = {
  173. addressId: this.data.options.id,
  174. pageNum:1,
  175. pageSize:10
  176. }
  177. api.request(`/sysworkorder/selectpartnerworkorder`, 'post', data, { isPublic: false })
  178. .then((data) => {
  179. console.log('实时数据:', data.data);
  180. if (data.code === 200) {
  181. this.setData({
  182. electricitydata: data.data.data
  183. })
  184. }
  185. })
  186. .catch((err) => {
  187. console.error('实时数据请求失败:', err);
  188. });
  189. },
  190. /**
  191. * 点击按钮:跳转回地图页并定位到该点位
  192. */
  193. navigateToMap() {
  194. const { id, type, longitude, latitude } = this.data.info;
  195. // 跳转回地图页(根据实际页面路径调整)
  196. wx.reLaunch({
  197. url: `/pages/index/index?targetId=${id}&targetType=${type}&lng=${longitude}&lat=${latitude}`
  198. });
  199. },
  200. /**
  201. * 点击按钮:拨打联系人电话
  202. */
  203. callContact() {
  204. const { contactPhone } = this.data.info;
  205. wx.makePhoneCall({
  206. phoneNumber: contactPhone,
  207. fail: () => {
  208. wx.showToast({ title: '拨打电话失败', icon: 'none' });
  209. }
  210. });
  211. },
  212. // 切换标签页(补充:切换后可根据标签筛选告警,示例逻辑)
  213. changeTab(e) {
  214. const index = e.currentTarget.dataset.index;
  215. this.setData({activeTab: index}, () => {
  216. // 可选:切换标签后重新加载对应状态的告警数据
  217. // this.initAlertData(true);
  218. });
  219. },
  220. // 告警数据加载(完整补充版)
  221. initAlertData(isRefresh = true) {
  222. // 防止重复加载
  223. if (this.data.isLoading) return;
  224. // 设置加载状态
  225. this.setData({ isLoading: true });
  226. // 分页参数处理:刷新重置为1,加载更多则+1
  227. const pageNum = isRefresh ? 1 : this.data.pageNum + 1;
  228. const pageSize = this.data.pageSize;
  229. // 请求参数(关联当前车辆ID)
  230. let data = {
  231. addressId: this.data.options.id,
  232. pageNum,
  233. pageSize
  234. };
  235. api.request(`/alarm/selectsysfault`, 'post', data, { isPublic: false })
  236. .then((res) => {
  237. console.log('告警数据请求结果:', res);
  238. if (res.code === 200) {
  239. const { data: responseData } = res;
  240. const { data: list, totalPages } = responseData;
  241. // 数据处理:刷新=覆盖,加载更多=追加
  242. const newAlertData = isRefresh
  243. ? list
  244. : [...this.data.alertData, ...list];
  245. // 修正:判断是否还有更多数据(当前列表长度 < 总数据量)
  246. const hasMore = newAlertData.length < totalPages;
  247. console.log('告警列表:', newAlertData);
  248. console.log('当前页码:', pageNum);
  249. console.log('总数据量:', totalPages);
  250. console.log('是否有更多:', hasMore);
  251. // 更新数据
  252. this.setData({
  253. alertData: newAlertData, // 告警列表
  254. pageNum: pageNum, // 更新当前页码
  255. totalPages: totalPages, // 更新总数据量
  256. hasMore: hasMore // 更新是否有更多数据
  257. });
  258. }
  259. })
  260. .catch((err) => {
  261. console.error('告警数据请求失败:', err);
  262. wx.showToast({
  263. title: '告警数据加载失败',
  264. icon: 'none',
  265. duration: 1500
  266. });
  267. })
  268. .finally(() => {
  269. // 无论成功失败,都结束加载状态
  270. this.setData({ isLoading: false });
  271. });
  272. },
  273. /**
  274. * 下拉刷新:重新加载详情
  275. */
  276. onPullDownRefresh() {
  277. const { id, type } = this.data;
  278. this.getPointDetail(id, type).then(() => {
  279. wx.stopPullDownRefresh();
  280. });
  281. },
  282. onUnload() {}
  283. });