From dcfe83a022f2c4aa2a707baa6d5e98a67753bf76 Mon Sep 17 00:00:00 2001 From: zuoxiao <zuoxiao> Date: 星期二, 18 三月 2025 16:11:12 +0800 Subject: [PATCH] 添加clientId字段到全局状态,优化请求参数处理,更新页面路由,调整取水口和灌溉相关界面,增强用户体验。 --- pages/irrigation/irrigation.js | 21 pages/groupDetail/groupDetail.js | 168 ++ pages/home/home.js | 1169 ++++++++++++++++++++---- pages/login/login.js | 351 ++++++- images/irrigation.svg | 1 pages/createIrrigation/createIrrigation.wxml | 4 pages/createIrrigation/createIrrigation.wxss | 47 + app.json | 10 app.js | 1 utils/storage.js | 70 + api/request.js | 27 pages/irrigation/irrigation.wxml | 4 pages/login/login.wxss | 21 pages/login/login.wxml | 2 pages/groupDetail/groupDetail.wxml | 55 pages/groupDetail/groupDetail.wxss | 199 ++- pages/irrigationDetail/irrigationDetail.js | 308 ++++++ pages/waterIntake/waterIntake.js | 4 pages/home/home.wxml | 6 pages/irrigationDetail/irrigationDetail.json | 4 pages/irrigationDetail/irrigationDetail.wxss | 234 ++++ pages/irrigationDetail/irrigationDetail.wxml | 74 + 22 files changed, 2,370 insertions(+), 410 deletions(-) diff --git a/api/request.js b/api/request.js index 1f7bc0a..ab0c6e7 100644 --- a/api/request.js +++ b/api/request.js @@ -31,8 +31,16 @@ form, isShowLoding, timeout, - header + header, + useParams } = _options + + // 妫�鏌rl鏄惁涓簎ndefined + if (!url) { + console.error('璇锋眰URL涓嶈兘涓虹┖'); + return Promise.reject(new Error('璇锋眰URL涓嶈兘涓虹┖')); + } + const app = getApp() // 璁剧疆璇锋眰澶� if (form) { @@ -58,7 +66,7 @@ return new Promise((resolve, reject) => { // 鑾峰彇鏈�鏂扮殑 BASEURL let currentBaseUrl = app.globalData.baseUrl || config.BASEURL; - + console.log("url:" + currentBaseUrl + url); if (isShowLoding) { wx.showLoading({ @@ -71,6 +79,12 @@ myUrl = url; } else { myUrl = currentBaseUrl + url; + } + // 濡傛灉 useParams 涓� true锛屾嫾鎺ユ煡璇㈠弬鏁� + if (useParams && data) { + const queryString = objToQueryString(data); // 浣跨敤涓婇潰瀹氫箟鐨勫嚱鏁� + myUrl += `?${queryString}`; // 鎷兼帴鏌ヨ瀛楃涓� + data = {}; // 璇锋眰浣撴暟鎹涓虹┖ } wx.request({ url: myUrl, @@ -116,7 +130,14 @@ }) }) } - +function objToQueryString(obj) { + return Object.keys(obj) + .map(key => { + // 瀵归敭鍜屽�艰繘琛� URL 缂栫爜 + return `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`; + }) + .join('&'); // 灏嗘墍鏈夐敭鍊煎鐢� '&' 杩炴帴璧锋潵 +} // 灏佽toast鍑芥暟 function showToast(title, icon = 'none', duration = 2500, mask = false) { wx.showToast({ diff --git a/app.js b/app.js index ed3fbd2..ae3b8f1 100644 --- a/app.js +++ b/app.js @@ -23,6 +23,7 @@ token:"", isLoggedIn:false, operator:"2025030416200600006", + clientId:"", AppID:"wxbc2b6a00dd904ead" } }) diff --git a/app.json b/app.json index c133742..4d1ea1c 100644 --- a/app.json +++ b/app.json @@ -1,8 +1,6 @@ { "pages": [ - "pages/irrigation/irrigation", - "pages/createIrrigation/createIrrigation", - "pages/groupDetail/groupDetail", + "pages/home/home", "pages/valveList/valveList", "pages/feedback/feedback", @@ -17,7 +15,11 @@ "pages/personCharge/personcharge", "pages/openCard/openCard", "pages/rechargeMoney/rechargMoney", - "pages/rechargeCard/rechargeCard" + "pages/rechargeCard/rechargeCard", + "pages/irrigation/irrigation", + "pages/createIrrigation/createIrrigation", + "pages/irrigationDetail/irrigationDetail", + "pages/groupDetail/groupDetail" ], "window": { "navigationBarTextStyle": "white", diff --git a/images/irrigation.svg b/images/irrigation.svg new file mode 100644 index 0000000..a5b16b6 --- /dev/null +++ b/images/irrigation.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 6.67578C8.02198 10.1339 4 16.5973 4 24.0001M14 6.67578V14.0001M14 6.67578H6.67564" stroke="#4090FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.67564 34C10.1337 39.978 16.5972 44 24 44M6.67564 34H14M6.67564 34V41.3244" stroke="#4090FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M34 41.3244C39.978 37.8663 44 31.4028 44 24M34 41.3244V34M34 41.3244H41.3244" stroke="#4090FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/><path d="M41.3242 14C37.8661 8.02199 31.4027 4 23.9999 4M41.3242 14H33.9999M41.3242 14V6.67564" stroke="#4090FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file diff --git a/pages/createIrrigation/createIrrigation.wxml b/pages/createIrrigation/createIrrigation.wxml index e1a77ca..5ba5323 100644 --- a/pages/createIrrigation/createIrrigation.wxml +++ b/pages/createIrrigation/createIrrigation.wxml @@ -34,8 +34,8 @@ <!-- 杞亴缁勫垪琛� --> <view class="group-list {{item.expanded ? 'expanded' : ''}}"> <block wx:for="{{item.groups}}" wx:for-item="group" wx:for-index="groupIndex" wx:key="id"> - <view class="group-item {{group.selected ? 'selected' : ''}}"> - <view class="group-info" bindtap="navigateToGroupDetail" data-project-index="{{index}}" data-group-index="{{groupIndex}}"> + <view class="group-item {{group.selected ? 'selected' : ''}}" bindtap="navigateToGroupDetail" data-project-index="{{index}}" data-group-index="{{groupIndex}}"> + <view class="group-info" > <view class="group-name">{{group.name}}</view> </view> <view class="group-duration"> diff --git a/pages/createIrrigation/createIrrigation.wxss b/pages/createIrrigation/createIrrigation.wxss index 93c27a6..e91a1ec 100644 --- a/pages/createIrrigation/createIrrigation.wxss +++ b/pages/createIrrigation/createIrrigation.wxss @@ -162,6 +162,25 @@ align-items: center; padding: 25rpx 30rpx; border-top: 1rpx solid #eee; + position: relative; + transition: all 0.3s ease; +} + +.group-item::after { + content: ''; + position: absolute; + right: 15rpx; + top: 50%; + transform: translateY(-50%); + width: 16rpx; + height: 16rpx; + border-top: 2rpx solid #999; + border-right: 2rpx solid #999; + transform: translateY(-50%) rotate(45deg); +} + +.group-item:active { + background-color: #e6f7ff; } .group-item.selected { @@ -172,16 +191,44 @@ flex: 1; display: flex; align-items: center; + flex-wrap: wrap; } .group-name { font-size: 26rpx; color: #666; + position: relative; + padding-left: 10rpx; + background-color: rgba(24, 144, 255, 0.1); + padding: 4rpx 20rpx; + border-radius: 10rpx; } + +.group-hint { + font-size: 22rpx; + color: #1890FF; + margin-left: 10rpx; + background-color: rgba(24, 144, 255, 0.1); + padding: 4rpx 10rpx; + border-radius: 10rpx; +} + +/* .group-name::before { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 6rpx; + height: 6rpx; + background-color: #1890FF; + border-radius: 50%; +} */ .group-duration { display: flex; align-items: center; + margin-right: 20rpx; /* 涓哄彸渚х澶寸暀鍑虹┖闂� */ } .duration-input { diff --git a/pages/groupDetail/groupDetail.js b/pages/groupDetail/groupDetail.js index ad8fb75..f663689 100644 --- a/pages/groupDetail/groupDetail.js +++ b/pages/groupDetail/groupDetail.js @@ -5,79 +5,179 @@ * 椤甸潰鐨勫垵濮嬫暟鎹� */ data: { - projectId: '', projectName: '', - groupId: '', groupName: '', - valveList: [ - // 妯℃嫙鏁版嵁锛屽疄闄呭簲浠嶢PI鑾峰彇 - { id: '1', name: '闃�鎺у櫒1', status: 'online', location: '浣嶇疆A' }, - { id: '2', name: '闃�鎺у櫒2', status: 'offline', location: '浣嶇疆B' }, - { id: '3', name: '闃�鎺у櫒3', status: 'online', location: '浣嶇疆C' }, - { id: '4', name: '闃�鎺у櫒4', status: 'online', location: '浣嶇疆D' }, - { id: '5', name: '闃�鎺у櫒5', status: 'offline', location: '浣嶇疆E' } - ], - loading: false + groupId: '', + waterOutletList: [], + refreshing: false, + isIrrigating: false // 鏄惁姝e湪鐏屾簤涓� }, /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 */ onLoad: function (options) { + console.log('鎺ユ敹鍒扮殑鍙傛暟:', options); + if (options) { + // 鐩存帴浣跨敤浼犻�掔殑isIrrigating鍙傛暟锛岃�屼笉鏄牴鎹畇tatus鍒ゆ柇 + const isIrrigating = options.isIrrigating === 'true'; + console.log('鐏屾簤鐘舵�佸垽鏂�:', options.status, '鏄惁姝e湪鐏屾簤:', isIrrigating); + + // 澶勭悊鎺ユ敹鍒扮殑鍙傛暟 this.setData({ - projectId: options.projectId || '', projectName: options.projectName || '', + groupName: options.groupName || '', groupId: options.groupId || '', - groupName: options.groupName || '' + isIrrigating: isIrrigating }); + console.log('璁剧疆鍚庣殑鏁版嵁:', this.data); + + // 璁剧疆瀵艰埅鏍忔爣棰� wx.setNavigationBarTitle({ title: this.data.groupName || '杞亴缁勮鎯�' }); - // 鑾峰彇闃�鎺у櫒鍒楄〃 - this.fetchValveList(); + this.loadWaterOutletData(); } }, /** - * 鑾峰彇闃�鎺у櫒鍒楄〃 + * 鍔犺浇鍙栨按鍙f暟鎹� */ - fetchValveList: function () { - this.setData({ loading: true }); + loadWaterOutletData: function() { + this.setData({ + refreshing: true + }); - // 杩欓噷搴旇鏄疄闄呯殑API璇锋眰 - // 妯℃嫙API璇锋眰寤惰繜 + console.log('鍔犺浇鍙栨按鍙f暟鎹紝鐏屾簤鐘舵��:', this.data.isIrrigating); + + // 妯℃嫙鏁版嵁 + let mockData = { + waterOutlets: [] + }; + + // 鐢熸垚鍙栨按鍙f暟鎹紝鎵�鏈夊彇姘村彛閮芥湁鍛戒护鐘舵�� + mockData.waterOutlets = [ + { + id: 1, + name: '鍙栨按鍙� A-1', + status: 'online', + commandStatus: 'sent' // 鍛戒护宸蹭笅鍙� + }, + { + id: 2, + name: '鍙栨按鍙� A-2', + status: 'online', + commandStatus: 'unsent' // 鍛戒护鏈笅鍙� + }, + { + id: 3, + name: '鍙栨按鍙� A-3', + status: 'offline', + commandStatus: 'unsent' // 鍛戒护鏈笅鍙� + } + ]; + + // 妯℃嫙缃戠粶璇锋眰寤惰繜 setTimeout(() => { - this.setData({ loading: false }); - // 瀹為檯鏁版嵁宸插湪data涓垵濮嬪寲锛岃繖閲屽彧鏄ā鎷熻姹傚畬鎴� + this.setData({ + waterOutletList: mockData.waterOutlets, + refreshing: false + }); + console.log('璁剧疆鍙栨按鍙f暟鎹畬鎴�:', this.data.waterOutletList); }, 1000); - // 瀹為檯API璇锋眰绀轰緥 + // 瀹為檯椤圭洰涓簲璇ヤ娇鐢╳x.request鑾峰彇鏁版嵁 // wx.request({ - // url: 'your-api-url', - // data: { - // projectId: this.data.projectId, - // groupId: this.data.groupId - // }, + // url: `https://your-api-url/groups/${this.data.groupId}/waterOutlets`, + // method: 'GET', // success: (res) => { - // this.setData({ - // valveList: res.data, - // loading: false - // }); + // if (res.data && res.data.code === 0) { + // this.setData({ + // waterOutletList: res.data.data.waterOutlets, + // refreshing: false + // }); + // } else { + // wx.showToast({ + // title: '鑾峰彇鏁版嵁澶辫触', + // icon: 'none' + // }); + // this.setData({ + // refreshing: false + // }); + // } // }, // fail: () => { - // this.setData({ loading: false }); // wx.showToast({ - // title: '鑾峰彇鏁版嵁澶辫触', + // title: '缃戠粶閿欒', // icon: 'none' + // }); + // this.setData({ + // refreshing: false // }); // } // }); }, /** + * 涓嬫媺鍒锋柊澶勭悊鍑芥暟 + */ + onRefresh: function() { + this.loadWaterOutletData(); + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload: function () { + + }, + + /** + * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔 + */ + onPullDownRefresh: function () { + + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom: function () { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage: function () { + + }, + + /** * 杩斿洖涓婁竴椤� */ goBack: function () { diff --git a/pages/groupDetail/groupDetail.wxml b/pages/groupDetail/groupDetail.wxml index a024557..512385b 100644 --- a/pages/groupDetail/groupDetail.wxml +++ b/pages/groupDetail/groupDetail.wxml @@ -9,40 +9,49 @@ </view> </view> - <!-- 闃�鎺у櫒鍒楄〃 --> + <!-- 鍙栨按鍙e垪琛� --> <view class="valve-list-container"> - <view class="section-title">鍙栨按鍙i榾鎺у櫒鍒楄〃</view> - - <!-- 鍔犺浇涓� --> + + <!-- 鍔犺浇涓� <view class="loading-container" wx:if="{{loading}}"> <view class="loading-icon"></view> <view class="loading-text">鍔犺浇涓�...</view> - </view> + </view> --> - <!-- 闃�鎺у櫒鍒楄〃 --> - <view class="valve-list" wx:else> - <block wx:for="{{valveList}}" wx:key="id"> + <!-- 鍙栨按鍙e垪琛� - 鍙笅鎷夊埛鏂扮殑scroll-view --> + <scroll-view + class="valve-list" + scroll-y="true" + refresher-enabled="{{true}}" + refresher-threshold="50" + refresher-default-style="black" + refresher-background="#f2f2f2" + refresher-triggered="{{refreshing}}" + bindrefresherrefresh="onRefresh" + > + <block wx:for="{{waterOutletList}}" wx:key="id"> <view class="valve-item"> <view class="valve-info"> - <view class="valve-name">{{item.name}}</view> - <view class="valve-location">{{item.location}}</view> + <view class="valve-name"> + <text>{{item.name}}</text> + <view class="valve-status-inline {{item.status === 'online' ? 'online' : 'offline'}}"> + {{item.status === 'online' ? '鍦ㄧ嚎' : '绂荤嚎'}} + </view> + </view> </view> - <view class="valve-status {{item.status === 'online' ? 'online' : 'offline'}}"> - {{item.status === 'online' ? '鍦ㄧ嚎' : '绂荤嚎'}} + <view class="command-status {{item.commandStatus}}"> + {{item.commandStatus === 'sent' ? '鍛戒护宸蹭笅鍙�' : '鍛戒护鏈笅鍙�'}} </view> </view> </block> - </view> - - <!-- 绌虹姸鎬� --> - <view class="empty-state" wx:if="{{!loading && valveList.length === 0}}"> - <image class="empty-icon" src="/images/empty.svg" mode="aspectFit"></image> - <view class="empty-text">鏆傛棤闃�鎺у櫒鏁版嵁</view> - </view> + + <!-- 绌虹姸鎬� --> + <view class="empty-state" wx:if="{{waterOutletList.length === 0}}"> + <image class="empty-icon" src="/images/empty.svg" mode="aspectFit"></image> + <view class="empty-text">鏆傛棤鍙栨按鍙f暟鎹�</view> + </view> + </scroll-view> </view> - <!-- 搴曢儴鎸夐挳 --> - <view class="bottom-button"> - <button class="back-button" hover-class="back-button-hover" bindtap="goBack">杩斿洖</button> - </view> + </view> \ No newline at end of file diff --git a/pages/groupDetail/groupDetail.wxss b/pages/groupDetail/groupDetail.wxss index c27f91f..b614d46 100644 --- a/pages/groupDetail/groupDetail.wxss +++ b/pages/groupDetail/groupDetail.wxss @@ -1,15 +1,16 @@ .group-detail-container { display: flex; flex-direction: column; - min-height: 100vh; - background-color: #f5f5f5; + height: 100vh; + background-color: #F5F5F5; } /* 椤甸潰鏍囬鏍峰紡 */ .page-header { - background-color: #1890FF; + background-color: #FFFFFF; padding: 30rpx; - color: #fff; + box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); + margin-bottom: 20rpx; } .header-content { @@ -23,43 +24,141 @@ } .project-name { - font-size: 24rpx; - opacity: 0.8; + font-size: 28rpx; + color: #666666; margin-bottom: 10rpx; } .group-name { - font-size: 32rpx; - font-weight: 500; + font-size: 36rpx; + font-weight: bold; + color: #333333; } -/* 闃�鎺у櫒鍒楄〃瀹瑰櫒 */ +/* 鍙栨按鍙e垪琛ㄥ鍣� */ .valve-list-container { flex: 1; - padding: 30rpx; + padding: 0 30rpx; + overflow: hidden; } -.section-title { - font-size: 28rpx; - color: #333; - font-weight: 500; +/* 鍙栨按鍙e垪琛� */ +.valve-list { + height: 100%; +} + +/* 鍙栨按鍙i」鐩� */ +.valve-item { + background-color: #FFFFFF; + border-radius: 12rpx; + padding: 30rpx; margin-bottom: 20rpx; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); +} + +.valve-info { + flex: 1; +} + +.valve-name { + font-size: 32rpx; + font-weight: 500; + color: #333333; + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.valve-status-container { + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.valve-status { + padding: 8rpx 20rpx; + border-radius: 30rpx; + font-size: 24rpx; + font-weight: 500; + margin-bottom: 10rpx; +} + +.valve-status.online { + background-color: rgba(82, 196, 26, 0.1); + color: #52C41A; +} + +.valve-status.offline { + background-color: rgba(245, 34, 45, 0.1); + color: #F5222D; +} + +/* 鍐呰仈鐘舵�佹牱寮� */ +.valve-status-inline { + font-size: 24rpx; + font-weight: 500; + padding: 4rpx 12rpx; + border-radius: 20rpx; + margin-left: 12rpx; + display: inline-flex; + align-items: center; + justify-content: center; + height: 32rpx; + line-height: 1; +} + +.valve-status-inline.online { + background-color: rgba(82, 196, 26, 0.1); + color: #52C41A; +} + +.valve-status-inline.offline { + background-color: rgba(245, 34, 45, 0.1); + color: #F5222D; +} + +/* 鍛戒护鐘舵�佹牱寮� */ +.command-status { + padding: 8rpx 20rpx; + border-radius: 30rpx; + font-size: 24rpx; + font-weight: 500; + text-align: center; + min-width: 160rpx; + display: flex; + align-items: center; + justify-content: center; + height: 40rpx; + line-height: 1; +} + +.command-status.sent { + background-color: rgba(82, 196, 26, 0.1); + color: #52C41A; +} + +.command-status.unsent { + background-color: rgba(250, 173, 20, 0.1); + color: #FAAD14; } /* 鍔犺浇涓牱寮� */ .loading-container { display: flex; flex-direction: column; - align-items: center; justify-content: center; - padding: 60rpx 0; + align-items: center; + height: 300rpx; } .loading-icon { - width: 60rpx; - height: 60rpx; - border: 4rpx solid #f3f3f3; - border-top: 4rpx solid #1890FF; + width: 80rpx; + height: 80rpx; + border: 6rpx solid #f3f3f3; + border-top: 6rpx solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 20rpx; @@ -71,67 +170,17 @@ } .loading-text { - font-size: 26rpx; - color: #999; -} - -/* 闃�鎺у櫒鍒楄〃鏍峰紡 */ -.valve-list { - display: flex; - flex-direction: column; -} - -.valve-item { - display: flex; - justify-content: space-between; - align-items: center; - padding: 30rpx; - background-color: #fff; - margin-bottom: 20rpx; - border-radius: 8rpx; - box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); -} - -.valve-info { - display: flex; - flex-direction: column; -} - -.valve-name { font-size: 28rpx; - color: #333; - margin-bottom: 10rpx; - font-weight: 500; -} - -.valve-location { - font-size: 24rpx; - color: #999; -} - -.valve-status { - padding: 8rpx 20rpx; - border-radius: 30rpx; - font-size: 24rpx; -} - -.valve-status.online { - background-color: #e6f7ff; - color: #1890FF; -} - -.valve-status.offline { - background-color: #fff1f0; - color: #f5222d; + color: #666666; } /* 绌虹姸鎬佹牱寮� */ .empty-state { display: flex; flex-direction: column; - align-items: center; justify-content: center; - padding: 100rpx 0; + align-items: center; + height: 400rpx; } .empty-icon { @@ -141,8 +190,8 @@ } .empty-text { - font-size: 26rpx; - color: #999; + font-size: 28rpx; + color: #999999; } /* 搴曢儴鎸夐挳鏍峰紡 */ diff --git a/pages/home/home.js b/pages/home/home.js index d38e37d..080656a 100644 --- a/pages/home/home.js +++ b/pages/home/home.js @@ -4,7 +4,9 @@ get, post } = require('../../api/request.js'); -const { PROJECT_URLS } = require('../../api/config.js'); +const { + PROJECT_URLS +} = require('../../api/config.js'); Page({ /** @@ -17,7 +19,7 @@ waterIntakeName: "", image: "/images/ic_head_bg.jpg", userPhone: "", - userName: "璇风櫥褰�", + userName: "璇风偣鍑荤櫥褰�", scrollViewHeight: 0, listData: [], isRefreshing: false, @@ -32,13 +34,22 @@ lastIntakeName: "", showProjectDialog: false, selectedProject: '', - avatarTapCount: 0 + avatarTapCount: 0, + isFromLogin: false }, openValve: function (e) { - wx.navigateTo({ - url: '/pages/waterIntake/waterIntake', - }) + const app = getApp(); + if (app.globalData.isLoggedIn) { + wx.navigateTo({ + url: '/pages/waterIntake/waterIntake', + }) + } else { + wx.showToast({ + title: '璇峰厛鐧诲綍', + icon: 'error' + }) + } }, calculateScrollViewHeight: function () { wx.createSelectorQuery().selectAll('.list-item').boundingClientRect((rects) => { @@ -79,67 +90,171 @@ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 */ onLoad(options) { - // 妫�鏌ユ槸鍚﹀凡閫夋嫨椤圭洰 - const { PROJECT_URLS } = require('../../api/config.js'); - - storage.getItem('selectedProject').then((project) => { - if (project) { - this.setData({ - selectedProject: project - }); - - // 纭繚鍏ㄥ眬鍙橀噺瀛樺湪 - getApp().globalData = getApp().globalData || {}; - // 璁剧疆 baseUrl - const baseUrl = PROJECT_URLS[project]; - getApp().globalData.baseUrl = baseUrl; - getApp().globalData.selectedProject = project; - - // 鏍规嵁椤圭洰璁剧疆瀵瑰簲鐨則ag - if (project === 'JYG') { - getApp().globalData.tag = 'ym'; // 鍢夊唱鍏抽」鐩搴攖ag涓簓m - } else if (project === 'MQ') { - getApp().globalData.tag = 'mq'; // 姘戝嫟椤圭洰瀵瑰簲tag涓簃q - } - - console.log('鍔犺浇宸蹭繚瀛樼殑椤圭洰:', project, '鍩熷悕:', baseUrl, 'tag:', getApp().globalData.tag); - - // 妫�鏌ョ櫥褰曠姸鎬� - if (!getApp().globalData.isLoggedIn) { - this.checkLoginStatus(); - return; // 濡傛灉鏈櫥褰曪紝绛夊緟璺宠浆鍒扮櫥褰曢〉闈� - } - } else { - // 棣栨杩涘叆锛屾樉绀洪」鐩�夋嫨寮圭獥 - this.setData({ - showProjectDialog: true - }); - return; // 绛夊緟鐢ㄦ埛閫夋嫨椤圭洰 + console.log('home椤甸潰onLoad寮�濮嬶紝鍙傛暟:', options); + + // 妫�鏌ユ槸鍚︿粠鐧诲綍椤甸潰杩斿洖 + let fromLogin = false; + + // 妫�鏌RL鍙傛暟 + if (options && options.fromLogin === 'true') { + console.log('妫�娴嬪埌URL鍙傛暟fromLogin=true'); + fromLogin = true; + } + + // 妫�鏌ユ槸鍚︽湁涓存椂鏍囪 + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + console.log('璇诲彇鍒扮殑涓存椂鏍囪鍊�:', tempFromLogin); + + if (tempFromLogin === 'true') { + console.log('妫�娴嬪埌涓存椂fromLogin鏍囪'); + fromLogin = true; + + // 寤惰繜娓呴櫎涓存椂鏍囪锛岀‘淇濆叾浠栧湴鏂规湁瓒冲鏃堕棿璇诲彇 + setTimeout(() => { + try { + wx.removeStorageSync('_temp_from_login'); + console.log('鑷姩娓呴櫎涓存椂fromLogin鏍囪'); + } catch (e) { + console.error('娓呴櫎涓存椂鏍囪澶辫触:', e); + } + }, 10000); // 寤堕暱鍒�10绉� } - - //鍒ゆ柇鏈湴鏄惁淇濆瓨sessionId - // 浣跨敤 wx.nextTick 绛夊緟椤甸潰娓叉煋瀹屾垚 - wx.nextTick(() => { - this.calculateScrollViewHeight(); - }); - //褰撳紑闃�鎴愬姛鍚庤皟鐢ㄥ埛鏂� - console.log("onLoad锛�" + options.param); - if (options.param) { - wx.showToast({ - title: '寮�闃�鎴愬姛', - icon: 'success', - duration: 3000 - }) - this.getOpenList(); - } - this.initData(); - }).catch(err => { - console.error('Failed to get selectedProject:', err); - // 鍑洪敊鏃朵篃鏄剧ず椤圭洰閫夋嫨寮圭獥 + } catch (e) { + console.error('璇诲彇涓存椂鏍囪澶辫触:', e); + } + + console.log('home椤甸潰鍔犺浇锛宖romLogin:', fromLogin, '鍙傛暟:', options); + + // 璁剧疆fromLogin鏍囧織 + if (fromLogin) { + console.log('璁剧疆isFromLogin=true'); this.setData({ - showProjectDialog: true + isFromLogin: true }); - }); + } + + // 寤惰繜鎵ц鍓╀綑鐨勫垵濮嬪寲杩囩▼锛屼互纭繚涓存椂鏍囪鍜孶RL鍙傛暟鑳借姝g‘澶勭悊 + setTimeout(() => { + this.initializePage(options, fromLogin); + }, 100); + }, + + // 鏂板鐨勫垵濮嬪寲椤甸潰杈呭姪鍑芥暟锛屽垎绂诲嚭onLoad涓殑閫昏緫浠ヤ究寤惰繜鎵ц + initializePage(options, fromLogin) { + // 妫�鏌ユ槸鍚﹀凡閫夋嫨椤圭洰 + const { + PROJECT_URLS + } = require('../../api/config.js'); + + // 纭繚鍏ㄥ眬鍙橀噺瀛樺湪 + getApp().globalData = getApp().globalData || {}; + + storage.getItemSafe('selectedProject') + .then((project) => { + if (project) { + this.setData({ + selectedProject: project + }); + + // 璁剧疆 baseUrl + const baseUrl = PROJECT_URLS[project]; + getApp().globalData.baseUrl = baseUrl; + getApp().globalData.selectedProject = project; + + // 鏍规嵁椤圭洰璁剧疆瀵瑰簲鐨則ag + if (project === 'JYG') { + getApp().globalData.tag = 'ym'; // 鍢夊唱鍏抽」鐩搴攖ag涓簓m + } else if (project === 'MQ') { + getApp().globalData.tag = 'mq'; // 姘戝嫟椤圭洰瀵瑰簲tag涓簃q + } + + console.log('鍔犺浇宸蹭繚瀛樼殑椤圭洰:', project, '鍩熷悕:', baseUrl, 'tag:', getApp().globalData.tag); + + // 妫�鏌essionId鏄惁瀛樺湪 + return storage.getItemSafe('sessionId'); + } else { + // 棣栨杩涘叆锛屾樉绀洪」鐩�夋嫨寮圭獥 + this.setData({ + showProjectDialog: true + }); + return Promise.reject({ + type: 'project_not_selected', + message: '鏈�夋嫨椤圭洰' + }); // 缁堟鍚庣画澶勭悊 + } + }) + .then(sessionId => { + if (sessionId) { + // 濡傛灉sessionId瀛樺湪锛岃缃叏灞�鐧诲綍鐘舵�� + getApp().globalData.sessionId = sessionId; + getApp().globalData.isLoggedIn = true; + + // 灏濊瘯鑾峰彇clientId + return storage.getItemSafe('clientId'); + } else { + return Promise.reject({ + type: 'session_not_found', + message: '鏈壘鍒皊essionId' + }); + } + }) + .then(clientId => { + if (clientId) { + getApp().globalData.clientId = clientId; + } + + // 缁х画鍒濆鍖栭〉闈� + this.continueInitPage(options); + }) + .catch(err => { + // 灏嗛敊璇璞¤鑼冨寲 + const error = typeof err === 'object' ? err : { + type: 'unknown', + message: String(err) + }; + console.log('鑾峰彇瀛樺偍鏁版嵁涓柇:', error.message); + + // 濡傛灉鏄粠鐧诲綍椤佃繑鍥炴垨宸茬櫥褰曪紝涓嶅啀璺宠浆 + if (fromLogin || getApp().globalData.isLoggedIn) { + console.log('浠庣櫥褰曢〉杩斿洖鎴栧凡鐧诲綍锛岀户缁垵濮嬪寲椤甸潰'); + this.continueInitPage(options); + return; + } + + // 澶勭悊鏈�夋嫨椤圭洰鐨勬儏鍐� + if (error.type === 'project_not_selected') { + console.log('鏈�夋嫨椤圭洰锛屾樉绀洪」鐩�夋嫨寮圭獥'); + this.setData({ + showProjectDialog: true + }); + return; + } + + // 澶勭悊鏈壘鍒皊essionId鐨勬儏鍐� + if (error.type === 'session_not_found' && this.data.selectedProject) { + // 妫�鏌ユ槸鍚﹀凡浠庣櫥褰曢〉杩斿洖 + const isReturning = this.getFromLogin(); + console.log('鏈壘鍒皊essionId锛屾槸鍚︿粠鐧诲綍椤佃繑鍥�:', isReturning); + + // 濡傛灉宸茬粡鏄粠鐧诲綍椤佃繑鍥炵殑锛屼笉瑕佸啀璺冲洖鍘� + if (isReturning) { + console.log('宸茬粡浠庣櫥褰曢〉杩斿洖锛屼笉鍐嶈烦杞洖鍘�'); + this.continueInitPage(options); + return; + } + + console.log('鏈壘鍒皊essionId锛岃烦杞埌鐧诲綍椤�'); + wx.redirectTo({ + url: `/pages/login/login?project=${this.data.selectedProject}` + }); + return; + } + + // 鍏朵粬鏈煡閿欒锛屽皾璇曠户缁垵濮嬪寲椤甸潰 + console.warn('鏈煡閿欒锛屽皾璇曠户缁垵濮嬪寲椤甸潰:', error); + this.continueInitPage(options); + }); }, /** @@ -153,21 +268,83 @@ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず */ onShow() { + console.log('home椤甸潰onShow寮�濮�'); + // 鑾峰彇褰撳墠椤甸潰鐨勫弬鏁� + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + + let fromLogin = false; + + // 妫�鏌ユ槸鍚︽湁fromLogin鍙傛暟 + if (currentPage && currentPage.options && currentPage.options.fromLogin === 'true') { + console.log('onShow: 妫�娴嬪埌fromLogin鍙傛暟锛岃缃甶sFromLogin鏍囪'); + fromLogin = true; + this.setData({ + isFromLogin: true + }); + } + + // 妫�鏌ユ槸鍚︽湁涓存椂鏍囪 + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + console.log('onShow: 璇诲彇鍒扮殑涓存椂鏍囪鍊�:', tempFromLogin); + + if (tempFromLogin === 'true') { + console.log('onShow: 妫�娴嬪埌涓存椂fromLogin鏍囪'); + fromLogin = true; + this.setData({ + isFromLogin: true + }); + } + } catch (e) { + console.error('onShow: 璇诲彇涓存椂鏍囪澶辫触:', e); + } + + // 鍒濆鍖栧鐞� + if (fromLogin || this.data.isFromLogin) { + console.log('onShow: 浠庣櫥褰曢〉杩斿洖锛屼笉杩涜鐧诲綍妫�鏌�'); + } else { + console.log('onShow: 姝e父鏄剧ず椤甸潰'); + // 寤惰繜妫�鏌ョ櫥褰曠姸鎬侊紝纭繚鑳芥纭瘑鍒复鏃舵爣璁� + setTimeout(() => { + this.checkLoginStatusIfNeeded(); + }, 300); + } + }, + + // 妫�鏌ョ櫥褰曠姸鎬侊紙浠呭湪闇�瑕佹椂锛� + checkLoginStatusIfNeeded() { + // 鍐嶆纭鏄惁浠庣櫥褰曢〉杩斿洖 + if (this.getFromLogin()) { + console.log('妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝涓嶈繘琛岀櫥褰曟鏌�'); + return; + } + + // 鍐嶆妫�鏌ュ叏灞�鐧诲綍鐘舵�� + if (getApp().globalData.isLoggedIn) { + console.log('妫�娴嬪埌鍏ㄥ眬鐧诲綍鐘舵�侊紝涓嶈繘琛岀櫥褰曟鏌�'); + return; + } + + console.log('鎵ц鐧诲綍鐘舵�佹鏌�'); + this.checkLoginStatus(); }, /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 */ onHide() { - + // 椤甸潰闅愯棌鏃惰�冭檻娓呯悊涓存椂鏍囪 + this.cleanupTempMarkers(); }, /** * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 */ onUnload() { - + // 椤甸潰鍗歌浇鏃舵竻鐞嗕复鏃舵爣璁� + this.cleanupTempMarkers(); }, /** @@ -222,6 +399,24 @@ icon: 'none' }) }, + //瑙g粦鐢ㄦ埛 + unbind() { + wx.showModal({ + title: '瑙g粦纭', + content: '纭畾瑕佽В缁戝綋鍓嶈处鍙峰悧锛�', + success: (res) => { + if (res.confirm) { + this.unBindPost() + } + } + }); + }, + //杞亴 + irrigation() { + wx.navigateTo({ + url: '/pages/irrigation/irrigation', + }) + }, handleChange(e) { const item = e.currentTarget.dataset.item; console.log(item); @@ -261,7 +456,7 @@ rtuAddr: rtuAddr, vcNum: vcNum, //铏氭嫙鍗D orderNo: orderNo, - operator: app.globalData.operator //鎿嶄綔鍛� + operator: app.globalData.clientId //鎿嶄綔鍛� }; console.log("postCloseValaue" + data); post({ @@ -298,29 +493,83 @@ */ getOpenList() { const app = getApp(); + + // 妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + const fromLogin = this.getFromLogin(); + + // 妫�鏌lientId鏄惁瀛樺湪 + if (!app.globalData.clientId) { + console.log('getOpenList: clientId涓嶅瓨鍦紝涓嶆墽琛孉PI璇锋眰'); + + // 濡傛灉鏄粠鐧诲綍椤佃繑鍥烇紝灏辨樉绀虹┖鍒楄〃鑰屼笉鏄敊璇彁绀� + this.setData({ + listData: [], + isRefreshing: false, + isWXRefreshing: false + }); + + // 濡傛灉涓嶆槸浠庣櫥褰曢〉杩斿洖涓斾笉澶勪簬鍒锋柊鐘舵�侊紝鑰冭檻妫�鏌ョ櫥褰曠姸鎬� + if (!fromLogin && !this.data.isRefreshing && !this.data.isWXRefreshing) { + console.log('getOpenList: 闈炲埛鏂扮姸鎬佷笅妫�娴嬪埌鏃燾lientId锛屽皾璇曡嚜鍔ㄧ櫥褰�'); + // 寤惰繜璋冪敤寰俊鐧诲綍锛屽皾璇曡嚜鍔ㄦ仮澶嶄細璇� + setTimeout(() => { + if (!getApp().globalData.clientId && !this.getFromLogin()) { + this.wxLogin(); + } + }, 1000); + } + return; + } + + console.log('getOpenList: 寮�濮嬭幏鍙栧垪琛ㄦ暟鎹�, clientId:', app.globalData.clientId); + const params = { url: 'wx/valve/get', data: { - operator: app.globalData.operator + operator: app.globalData.clientId } }; + get(params).then(data => { + console.log('鑾峰彇鍒楄〃鏁版嵁鎴愬姛:', data); this.setData({ listData: data.content, isRefreshing: false, // 灏唗riggered灞炴�ц缃负false锛岃〃绀轰笅鎷夊埛鏂板凡瀹屾垚 isWXRefreshing: false, // 灏唗riggered灞炴�ц缃负false锛岃〃绀轰笅鎷夊埛鏂板凡瀹屾垚 - }) + }); + + // 鎴愬姛鑾峰彇鏁版嵁鍚庡埛鏂癠I楂樺害 + setTimeout(() => { + this.calculateScrollViewHeight(); + }, 200); }).catch(err => { + console.error('鑾峰彇鍒楄〃鏁版嵁澶辫触:', err); // 閿欒鍥炶皟 this.setData({ isRefreshing: false, // 灏唗riggered灞炴�ц缃负false锛岃〃绀轰笅鎷夊埛鏂板凡瀹屾垚 isWXRefreshing: false, // 灏唗riggered灞炴�ц缃负false锛岃〃绀轰笅鎷夊埛鏂板凡瀹屾垚 - }) - wx.showToast({ - title: err.msg, - icon: 'error', - duration: 3000 - }) + }); + + // 妫�鏌ラ敊璇被鍨� + if (err && err.code === '0003') { + console.log('浼氳瘽鏃犳晥鎴栬繃鏈燂紝浣嗕笉杩涜璺宠浆'); + + // 濡傛灉涓嶆槸浠庣櫥褰曢〉杩斿洖锛屾樉绀洪敊璇彁绀� + if (!fromLogin) { + wx.showToast({ + title: '鐧诲綍宸茶繃鏈燂紝璇峰埛鏂伴噸璇�', + icon: 'none', + duration: 3000 + }); + } + } else { + // 涓�鑸敊璇紝鏄剧ず閿欒淇℃伅 + wx.showToast({ + title: err.msg || '鑾峰彇鍒楄〃鏁版嵁澶辫触', + icon: 'none', + duration: 3000 + }); + } }); }, /** @@ -335,26 +584,65 @@ }, //鏍规嵁session鑾峰彇鍐滄埛淇℃伅 getUserDataBySession() { + // 鍏堟鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + if (this.getFromLogin()) { + console.log('getUserDataBySession: 妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝涓嶆墽琛孉PI璇锋眰'); + return; + } + const app = getApp(); + + // 妫�鏌ユ槸鍚︽湁sessionId + if (!app.globalData.sessionId) { + console.log('getUserDataBySession: sessionId涓嶅瓨鍦紝涓嶆墽琛孉PI璇锋眰'); + return; + } + + console.log('getUserDataBySession: 寮�濮嬭幏鍙栫敤鎴锋暟鎹�, sessionId:', app.globalData.sessionId); + const params = { url: 'wx/client/simple_info', data: { sessionId: app.globalData.sessionId } }; + get(params).then(data => { + console.log('鑾峰彇鐢ㄦ埛鏁版嵁鎴愬姛:', data); this.setData({ userName: data.content.clientName, userPhone: this.maskPhoneNumber(data.content.phone) - }) + }); }).catch(err => { - // 閿欒鍥炶皟 - wx.showToast({ - title: err.msg, - icon: 'error', - duration: 3000 - }) - }) + console.error('鑾峰彇鐢ㄦ埛鏁版嵁澶辫触:', err); + // 閿欒鍥炶皟锛屼絾涓嶈繘琛岄〉闈㈣烦杞� + + // 妫�鏌ラ敊璇被鍨� + if (err && err.code === '0003') { + console.log('浼氳瘽鏃犳晥鎴栬繃鏈燂紝浣嗕笉杩涜璺宠浆'); + // 涓嶅啀鐩存帴璺宠浆鍒扮櫥褰曢〉 + + // 娓呴櫎浼氳瘽淇℃伅 + app.globalData.sessionId = ''; + app.globalData.isLoggedIn = false; + + // 濡傛灉涓嶆槸浠庣櫥褰曢〉杩斿洖锛屾樉绀洪敊璇彁绀� + if (!this.getFromLogin()) { + wx.showToast({ + title: '鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�', + icon: 'none', + duration: 3000 + }); + } + } else { + // 鍏朵粬閿欒锛屾樉绀洪敊璇俊鎭� + wx.showToast({ + title: err.msg || '鑾峰彇鐢ㄦ埛淇℃伅澶辫触', + icon: 'none', + duration: 3000 + }); + } + }); }, maskPhoneNumber(phoneNumber) { if (phoneNumber.length !== 11) { @@ -421,7 +709,7 @@ const data = { intakeName: intakeName, //鍙栨按鍙D // vcId: vcId, //铏氭嫙鍗D - operator: app.globalData.operator, //鎿嶄綔鍛� + operator: app.globalData.clientId, //鎿嶄綔鍛� forceOpen: !!isforce // 浣跨敤閫昏緫闈炴搷浣滅 !! 鏉ョ‘淇� isForce 鏄竷灏斿�� }; post({ @@ -468,32 +756,118 @@ //杩涘叆鐣岄潰鑾峰彇鐣岄潰鏁版嵁 initData() { const app = getApp(); - console.log("tag>>>>:" +app.globalData.tag) - - if (storage.isHasKeySync("userData")) { - storage.getItem('userData').then((data) => { - let jsonObj = JSON.parse(data); - app.globalData.sessionId = jsonObj.sessionId; - app.globalData.tag = jsonObj.tag; + console.log("initData寮�濮嬶紝tag:", app.globalData.tag); + + // 棣栧厛妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + if (this.getFromLogin()) { + console.log('initData: 妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝浠呰幏鍙栧熀鏈暟鎹�'); + + // 鍗充娇浠庣櫥褰曢〉杩斿洖锛屼篃灏濊瘯鑾峰彇寮�闃�鍒楄〃浠ユ樉绀哄熀鏈琔I + // 浣嗗厛妫�鏌ユ槸鍚︽湁瀹㈡埛绔疘D鍙敤 + if (!app.globalData.clientId) { + console.log('initData: 浠庣櫥褰曢〉杩斿洖涓旀棤clientId锛屽皾璇曚粠瀛樺偍鎭㈠'); + // 灏濊瘯浠庡瓨鍌ㄦ仮澶峜lientId + storage.getItemSafe('clientId') + .then(clientId => { + if (clientId) { + console.log('initData: 浠庡瓨鍌ㄦ仮澶峜lientId鎴愬姛:', clientId); + app.globalData.clientId = clientId; + this.getOpenList(); + } else { + console.log('initData: 鏃犳硶鎭㈠clientId锛屾樉绀虹┖鍒楄〃'); + this.setData({ + listData: [] + }); + } + }) + .catch(err => { + console.error('initData: 鎭㈠clientId澶辫触:', err); + this.setData({ + listData: [] + }); + }); + } else { + this.getOpenList(); + } + return; + } + + // 灏濊瘯鑾峰彇鐢ㄦ埛鏁版嵁鍜屽凡寮�闃�璁板綍 + try { + // 浼樺厛妫�鏌ュ叏灞�鍙橀噺涓槸鍚︽湁sessionId + if (app.globalData.sessionId) { + console.log('initData: 浣跨敤鍏ㄥ眬sessionId鑾峰彇鏁版嵁'); this.getUserDataBySession(); this.getOpenList(); - console.log("userData>>>>>>>" + data) - }).catch((err) => { - console.error('Failed to load parameter:', err); - }); - } else { - this.getUserDataBySession(); - this.getOpenList(); - console.log('Failed to load parameter:false'); + return; + } + + // 妫�鏌ユ槸鍚︽湁瀛樺偍鐨剈serData + const hasUserData = storage.isHasKeySync("userData"); + console.log('initData: 鏄惁瀛樺湪userData:', hasUserData); + + if (hasUserData) { + storage.getItemSafe('userData') + .then((data) => { + console.log('initData: 鎴愬姛璇诲彇userData'); + if (data) { + try { + let jsonObj = JSON.parse(data); + app.globalData.sessionId = jsonObj.sessionId; + app.globalData.tag = jsonObj.tag; + console.log("userData宸插姞杞�:", data); + } catch (e) { + console.error('userData瑙f瀽澶辫触:', e); + } + } + // 鏃犺濡備綍閮藉皾璇曡幏鍙栫敤鎴蜂俊鎭拰寮�闃�鍒楄〃 + this.getUserDataBySession(); + this.getOpenList(); + }) + .catch((err) => { + console.error('鍔犺浇userData澶辫触:', err); + + // 鍐嶆妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + if (this.getFromLogin()) { + console.log('initData:catch: 妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝鍙幏鍙栧紑闃�鍒楄〃'); + this.getOpenList(); + } else { + this.getUserDataBySession(); + this.getOpenList(); + } + }); + } else { + console.log('鏈壘鍒皍serData锛岀洿鎺ヨ幏鍙栨暟鎹�'); + + // 鍐嶆妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + if (this.getFromLogin()) { + console.log('initData:else: 妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝鍙幏鍙栧紑闃�鍒楄〃'); + this.getOpenList(); + } else { + this.getUserDataBySession(); + this.getOpenList(); + } + } + } catch (e) { + console.error('initData鎵ц鍑洪敊:', e); + + // 鍐嶆妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + if (this.getFromLogin()) { + console.log('initData:error: 妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝鍙幏鍙栧紑闃�鍒楄〃'); + this.getOpenList(); + } else { + // 鍑洪敊鏃朵粛灏濊瘯鑾峰彇鏁版嵁 + this.getUserDataBySession(); + this.getOpenList(); + } } - }, // 澶勭悊澶村儚鐐瑰嚮 handleAvatarTap() { this.setData({ avatarTapCount: this.data.avatarTapCount + 1 }); - + if (this.data.avatarTapCount >= 5) { this.setData({ showProjectDialog: true, @@ -508,7 +882,9 @@ if (!e.detail.visible && !this.data.selectedProject) { return; } - this.setData({ showProjectDialog: e.detail.visible }); + this.setData({ + showProjectDialog: e.detail.visible + }); }, // 澶勭悊椤圭洰閫夋嫨鍙樺寲 @@ -528,164 +904,575 @@ }); return; } - const projectName = this.data.selectedProject === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰'; - + + // 鑾峰彇褰撳墠宸查�夐」鐩拰鏂伴�夋嫨鐨勯」鐩� + const currentProject = getApp().globalData.selectedProject; + const newProject = this.data.selectedProject; + const projectName = newProject === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰'; + + // 妫�鏌ユ槸鍚﹀垏鎹簡椤圭洰锛堝鏋滃綋鍓嶉」鐩笉鍚屼簬鏂伴�夋嫨鐨勯」鐩級 + const isProjectChanged = currentProject && currentProject !== newProject; + + // 濡傛灉鍒囨崲浜嗛」鐩紝鍏堟竻闄ょ櫥褰曠姸鎬� + if (isProjectChanged) { + console.log(`姝e湪浠庨」鐩� ${currentProject} 鍒囨崲鍒� ${newProject}锛屽皢娓呴櫎鐧诲綍鐘舵�乣); + + // 娓呴櫎鍏ㄥ眬鐧诲綍鐘舵�� + getApp().globalData.sessionId = ''; + getApp().globalData.clientId = ''; + getApp().globalData.isLoggedIn = false; + getApp().globalData.userInfo = null; + + // 娓呴櫎瀛樺偍涓殑鐧诲綍鐘舵�� + try { + wx.removeStorageSync('sessionId'); + wx.removeStorageSync('clientId'); + wx.removeStorageSync('userData'); + wx.removeStorageSync('isLoggedIn'); + console.log('宸叉竻闄ょ櫥褰曠浉鍏崇殑瀛樺偍鏁版嵁'); + } catch (e) { + console.error('娓呴櫎瀛樺偍鏁版嵁澶辫触:', e); + } + + // 閲嶇疆UI鏄剧ず鐘舵�� + this.setData({ + userName: "璇风櫥褰�", + userPhone: "", + listData: [] + }); + } + // 淇濆瓨椤圭洰閫夋嫨鍒版湰鍦板瓨鍌� - storage.setItem('selectedProject', this.data.selectedProject).then(() => { + storage.setItem('selectedProject', newProject).then(() => { // 鏇存柊 BASEURL - const { PROJECT_URLS } = require('../../api/config.js'); - const baseUrl = PROJECT_URLS[this.data.selectedProject]; - - // 鐩存帴淇敼鍏ㄥ眬鍙橀噺 + const { + PROJECT_URLS + } = require('../../api/config.js'); + const baseUrl = PROJECT_URLS[newProject]; + + // 鏇存柊鍏ㄥ眬鍙橀噺 getApp().globalData = getApp().globalData || {}; getApp().globalData.baseUrl = baseUrl; - getApp().globalData.selectedProject = this.data.selectedProject; - + getApp().globalData.selectedProject = newProject; + // 鏍规嵁椤圭洰璁剧疆瀵瑰簲鐨則ag - if (this.data.selectedProject === 'JYG') { + if (newProject === 'JYG') { getApp().globalData.tag = 'ym'; // 鍢夊唱鍏抽」鐩搴攖ag涓簓m - } else if (this.data.selectedProject === 'MQ') { + } else if (newProject === 'MQ') { getApp().globalData.tag = 'mq'; // 姘戝嫟椤圭洰瀵瑰簲tag涓簃q } - + console.log('宸插垏鎹㈠埌椤圭洰:', projectName, '鍩熷悕:', baseUrl, 'tag:', getApp().globalData.tag); - + this.setData({ showProjectDialog: false }); + // 鏄剧ず鍒囨崲鎴愬姛鎻愮ず wx.showToast({ - title: `宸查�夋嫨${projectName}`, + title: isProjectChanged ? `宸插垏鎹㈣嚦${projectName}锛岃閲嶆柊鐧诲綍` : `宸查�夋嫨${projectName}`, icon: 'success', duration: 2000 }); - // 妫�鏌ョ櫥褰曠姸鎬� - // setTimeout(() => { - // this.checkLoginStatus(); - // }, 500); + // 濡傛灉鍒囨崲浜嗛」鐩紝寤惰繜璺宠浆鍒扮櫥褰曢〉闈� + if (isProjectChanged) { + setTimeout(() => { + console.log('椤圭洰宸插垏鎹紝姝e湪璺宠浆鍒扮櫥褰曢〉闈�'); + wx.redirectTo({ + url: `/pages/login/login?project=${newProject}`, + success: () => console.log('鎴愬姛璺宠浆鍒扮櫥褰曢〉'), + fail: (err) => console.error('璺宠浆鍒扮櫥褰曢〉澶辫触:', err) + }); + }, 2000); + } }).catch(err => { console.error('淇濆瓨椤圭洰閫夋嫨澶辫触锛�', err); wx.showToast({ title: '淇濆瓨澶辫触锛岃閲嶈瘯', - icon: 'success', + icon: 'none', duration: 2000 }); }); }, - + // 妫�鏌ョ櫥褰曠姸鎬� checkLoginStatus() { const app = getApp(); - + + // 棣栧厛锛屽己鍒跺啀娆℃鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + if (tempFromLogin === 'true') { + console.log('checkLoginStatus: 妫�娴嬪埌涓存椂瀛樺偍_temp_from_login=true锛屼笉鎵ц璺宠浆'); + this.setData({ + isFromLogin: true + }); + return; + } + } catch (e) { + console.error('checkLoginStatus: 璇诲彇涓存椂鏍囪澶辫触:', e); + } + // 妫�鏌ユ槸鍚﹀凡鐧诲綍 if (app.globalData.isLoggedIn && app.globalData.sessionId) { - // 宸茬櫥褰曪紝閲嶆柊鍔犺浇椤甸潰 - wx.reLaunch({ - url: '/pages/home/home' + console.log('宸蹭粠鍏ㄥ眬鍙橀噺妫�娴嬪埌鐧诲綍鐘舵��'); + return; + } + + // 妫�鏌ユ湰椤甸潰鏄惁姝e湪澶勭悊杩斿洖閫昏緫 + const fromLogin = this.getFromLogin(); + if (fromLogin) { + console.log('浠庣櫥褰曢〉杩斿洖锛屼笉鍐嶉噸瀹氬悜'); + return; + } + + // 鑾峰彇褰撳墠椤甸潰璺敱鍜屽弬鏁� + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + const currentRoute = currentPage ? currentPage.route : ''; + const currentOptions = currentPage ? currentPage.options || {} : {}; + + console.log('褰撳墠椤甸潰璺敱:', currentRoute, '鍙傛暟:', currentOptions); + + // 妫�鏌RL鍙傛暟涓槸鍚︽湁fromLogin + if (currentOptions.fromLogin === 'true') { + console.log('URL鍙傛暟涓娴嬪埌fromLogin=true锛屼笉鎵ц璺宠浆'); + this.setData({ + isFromLogin: true }); - } else { - // 灏濊瘯浠庢湰鍦板瓨鍌ㄨ幏鍙栫敤鎴蜂俊鎭� - storage.getItem('userInfo').then(userInfoStr => { - if (userInfoStr) { + return; + } + + // 濡傛灉褰撳墠宸插湪鐧诲綍椤碉紝涓嶅啀璺宠浆 + if (currentRoute === 'pages/login/login') { + console.log('褰撳墠宸插湪鐧诲綍椤碉紝涓嶅啀璺宠浆'); + return; + } + + // Promise閾惧鐞嗗瓨鍌ㄦ鏌� + Promise.all([ + storage.getItemSafe('sessionId'), + storage.getItemSafe('clientId'), + storage.getItemSafe('isLoggedIn') + ]) + .then(([sessionId, clientId, isLoggedIn]) => { + // 鏈�鍚庝竴娆℃鏌ヤ复鏃舵爣璁� + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + if (tempFromLogin === 'true') { + console.log('Promise鍐呴儴: 妫�娴嬪埌涓存椂瀛樺偍_temp_from_login=true锛屼笉鎵ц璺宠浆'); + this.setData({ + isFromLogin: true + }); + return; + } + } catch (e) {} + + if (sessionId) { + // 浠庡瓨鍌ㄤ腑鎭㈠鐧诲綍鐘舵�� + app.globalData.sessionId = sessionId; + app.globalData.isLoggedIn = true; + + if (clientId) { + app.globalData.clientId = clientId; + } + + console.log('宸蹭粠瀛樺偍鎭㈠鐧诲綍鐘舵��'); + // 宸茬櫥褰曪紝鍒锋柊椤甸潰 + wx.reLaunch({ + url: '/pages/home/home' + }); + } else { + // 鏍囪褰撳墠椤甸潰姝e湪澶勭悊杩斿洖閫昏緫 + this.setData({ + isFromLogin: true + }); + + // 鏈櫥褰曪紝鍙兘闇�瑕佽烦杞埌鐧诲綍椤甸潰 + console.log('鏈娴嬪埌鐧诲綍鐘舵�侊紝鍙兘闇�瑕佽烦杞埌鐧诲綍椤�'); + + // 鏈�鍚庡啀妫�鏌ヤ竴娆℃槸鍚﹀凡浠庣櫥褰曢〉杩斿洖 + const finalCheck = this.getFromLogin(); + if (finalCheck) { + console.log('鏈�缁堟鏌�: 宸蹭粠鐧诲綍椤佃繑鍥烇紝涓嶅啀璺宠浆'); + return; + } + + console.log('纭闇�瑕佽烦杞埌鐧诲綍椤�'); + + // 璺宠浆鍓嶅啀娆℃鏌ョ櫥褰曢〉闈复鏃舵爣璁� try { - const userInfo = JSON.parse(userInfoStr); - // 楠岃瘉鐢ㄦ埛淇℃伅鏄惁鏈夋晥 - if (userInfo && userInfo.sessionId) { - // 鎭㈠鐧诲綍鐘舵�� - app.globalData.sessionId = userInfo.sessionId; - app.globalData.token = userInfo.token; - app.globalData.userInfo = userInfo; - app.globalData.isLoggedIn = true; - - // 宸茬櫥褰曪紝閲嶆柊鍔犺浇椤甸潰 - wx.reLaunch({ - url: '/pages/home/home' - }); - return; - } - } catch (e) { - console.error('瑙f瀽鐢ㄦ埛淇℃伅澶辫触:', e); - } + wx.setStorageSync('_attempted_login_redirect', 'true'); + } catch (e) {} + + wx.redirectTo({ + url: `/pages/login/login?project=${this.data.selectedProject}`, + success: () => console.log('鎴愬姛璺宠浆鍒扮櫥褰曢〉'), + fail: (err) => console.error('璺宠浆鍒扮櫥褰曢〉澶辫触:', err) + }); } - - // 鏈櫥褰曪紝璺宠浆鍒扮櫥褰曢〉闈� - wx.redirectTo({ - url: `/pages/login/login?project=${this.data.selectedProject}` + }) + .catch(err => { + console.error('妫�鏌ョ櫥褰曠姸鎬佹椂鍑洪敊:', err); + + // 鏍囪褰撳墠椤甸潰姝e湪澶勭悊杩斿洖閫昏緫 + this.setData({ + isFromLogin: true }); - }).catch(err => { - console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', err); - // 鏈櫥褰曪紝璺宠浆鍒扮櫥褰曢〉闈� + + // 鍐嶆妫�鏌ユ槸鍚﹀凡浠庣櫥褰曢〉杩斿洖 + if (this.getFromLogin()) { + console.log('閿欒澶勭悊: 宸蹭粠鐧诲綍椤佃繑鍥烇紝涓嶅啀璺宠浆'); + return; + } + + // 鍑洪敊鏃朵篃璺宠浆鍒扮櫥褰曢〉 wx.redirectTo({ - url: `/pages/login/login?project=${this.data.selectedProject}` + url: `/pages/login/login?project=${this.data.selectedProject}`, + success: () => console.log('閿欒鍚庢垚鍔熻烦杞埌鐧诲綍椤�'), + fail: (err) => console.error('閿欒鍚庤烦杞埌鐧诲綍椤靛け璐�:', err) }); }); + }, + + // 杈呭姪鍑芥暟锛氭鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + getFromLogin() { + // 鍏堟鏌ュ叏灞�鍙橀噺锛堜綔涓哄鐢ㄦ柟妗堬級 + if (getApp().globalData && getApp().globalData._tempFromLogin === true) { + console.log('getFromLogin: 妫�娴嬪埌鍏ㄥ眬鍙橀噺_tempFromLogin=true'); + // 璁剧疆鏍囧織锛岀‘淇濅笅娆℃鏌ユ椂鑳借瘑鍒� + this.setData({ + isFromLogin: true + }); + + // 娓呴櫎鍏ㄥ眬鏍囪锛岄槻姝㈤噸澶嶈瘑鍒� + setTimeout(() => { + getApp().globalData._tempFromLogin = false; + console.log('宸叉竻闄ゅ叏灞�鍙橀噺_tempFromLogin鏍囪'); + }, 100); + + return true; + } + + // 妫�鏌ユ槸鍚︽湁璁剧疆fromLogin鏍囧織 + if (this.data.isFromLogin) { + console.log('getFromLogin: 妫�娴嬪埌this.data.isFromLogin=true'); + return true; + } + + // 妫�鏌ュ綋鍓嶉〉闈㈢殑options + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + if (currentPage && currentPage.options && currentPage.options.fromLogin === 'true') { + console.log('getFromLogin: 妫�娴嬪埌URL鍙傛暟fromLogin=true'); + // 璁剧疆鏍囧織锛岀‘淇濅笅娆℃鏌ユ椂鑳借瘑鍒� + this.setData({ + isFromLogin: true + }); + return true; + } + + // 妫�鏌ヤ复鏃舵爣璁� + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + console.log('getFromLogin: 璇诲彇鍒扮殑涓存椂鏍囪鍊�:', tempFromLogin); + + if (tempFromLogin === 'true') { + console.log('getFromLogin: 妫�娴嬪埌涓存椂瀛樺偍_temp_from_login=true'); + // 璁剧疆鏍囧織锛岀‘淇濅笅娆℃鏌ユ椂鑳借瘑鍒� + this.setData({ + isFromLogin: true + }); + return true; + } + } catch (e) { + console.error('getFromLogin: 璇诲彇涓存椂鏍囪澶辫触:', e); + } + + console.log('getFromLogin: 鏈娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁�'); + return false; + }, + + // 缁х画鍒濆鍖栭〉闈� + continueInitPage(options) { + console.log('缁х画鍒濆鍖栭〉闈紝options:', options); + + // 妫�鏌ユ槸鍚︿粠鐧诲綍椤佃繑鍥� + let fromLogin = false; + + // 浠嶶RL鍙傛暟涓鏌� + if (options && options.fromLogin === 'true') { + console.log('continueInitPage: 浠嶶RL鍙傛暟妫�娴嬪埌fromLogin=true'); + fromLogin = true; + this.setData({ + isFromLogin: true + }); + } + + // 浠庝复鏃舵爣璁颁腑妫�鏌� + try { + const tempFromLogin = wx.getStorageSync('_temp_from_login'); + if (tempFromLogin === 'true') { + console.log('continueInitPage: 妫�娴嬪埌涓存椂鏍囪_temp_from_login=true'); + fromLogin = true; + this.setData({ + isFromLogin: true + }); + } + } catch (e) { + console.error('continueInitPage: 璇诲彇涓存椂鏍囪澶辫触:', e); + } + + // 浠庨〉闈㈡暟鎹腑妫�鏌� + if (this.data.isFromLogin) { + console.log('continueInitPage: 浠庨〉闈㈡暟鎹腑妫�娴嬪埌isFromLogin=true'); + fromLogin = true; + } + + // 鍒ゆ柇鏈湴鏄惁淇濆瓨sessionId + // 浣跨敤 wx.nextTick 绛夊緟椤甸潰娓叉煋瀹屾垚 + wx.nextTick(() => { + this.calculateScrollViewHeight(); + }); + + // 褰撳紑闃�鎴愬姛鍚庤皟鐢ㄥ埛鏂� + if (options && options.param) { + console.log("寮�闃�鎴愬姛鍙傛暟:", options.param); + wx.showToast({ + title: '寮�闃�鎴愬姛', + icon: 'success', + duration: 3000 + }); + this.getOpenList(); + } + + // 鍒濆鍖栨暟鎹� + this.initData(); + + // 濡傛灉涓嶆槸浠庣櫥褰曢〉杩斿洖锛屽垯璁剧疆寤惰繜妫�鏌ョ櫥褰曠姸鎬� + if (!fromLogin) { + console.log('涓嶆槸浠庣櫥褰曢〉杩斿洖锛屽欢杩熸鏌ョ櫥褰曠姸鎬�'); + setTimeout(() => { + // 鍐嶆妫�鏌ユ槸鍚﹀凡浠庣櫥褰曢〉杩斿洖锛堝彲鑳藉湪鍒濆鍖栬繃绋嬩腑鐘舵�佸凡鍙橈級 + if (this.getFromLogin()) { + console.log('寤惰繜妫�鏌ワ細妫�娴嬪埌浠庣櫥褰曢〉杩斿洖鐨勬爣璁帮紝涓嶅啀妫�鏌ョ櫥褰曠姸鎬�'); + return; + } + + // 浠呭湪鏈櫥褰曚笖涓嶆槸浠庣櫥褰曢〉杩斿洖鏃舵鏌ョ櫥褰曠姸鎬� + if (!getApp().globalData.isLoggedIn) { + console.log('寤惰繜妫�鏌ワ細鏈櫥褰曚笖涓嶆槸浠庣櫥褰曢〉杩斿洖锛屾墽琛岀櫥褰曠姸鎬佹鏌�'); + this.checkLoginStatus(); + } + }, 500); + } else { + console.log('浠庣櫥褰曢〉杩斿洖锛屼笉妫�鏌ョ櫥褰曠姸鎬�'); } }, - wxLogin(){ - if(!getApp().globalData.isLoggedIn){ - const that = this; + + // 寰俊鐧诲綍 + wxLogin() { + if (!getApp().globalData.isLoggedIn) { + wx.showLoading({ + title: '姝e湪鐧诲綍璇风◢鍊�...', + mask: true + }); + wx.login({ - success: function (res) { + success: (res) => { if (res.code) { - var code = res.code; - console.log(code); // 灏哻ode鍙戦�佸埌鏈嶅姟鍣ㄨ幏鍙杘penid - that.codeLogin(code); + post({ + url: "wx/client/code_login", + data: { + code: res.code + } + }).then(response => { + wx.hideLoading(); + if (response.code === "0001") { + if (response.content.client.clientId === "") { + // 鏈粦瀹氳处鍙凤紝璺宠浆鍒扮櫥褰曢〉闈� + wx.redirectTo({ + url: `/pages/login/login?project=${this.data.selectedProject}` + }); + } else { + this.setData({ + userName: response.content.client.clientName, + userPhone: response.content.client.userPhone + }) + // 宸叉湁璐﹀彿锛屼繚瀛樻暟鎹苟鍒濆鍖� + const sessionId = response.content.client.sessionId; + const clientId = response.content.client.clientId; + + // 璁剧疆鍏ㄥ眬鍙橀噺 + getApp().globalData.sessionId = sessionId; + getApp().globalData.clientId = clientId; + getApp().globalData.isLoggedIn = true; + + // 璁剧疆姝g‘鐨勯」鐩畉ag + const tag = this.data.selectedProject === 'JYG' ? 'ym' : 'mq'; + getApp().globalData.tag = tag; + + // 淇濆瓨鍒板瓨鍌� + storage.setItem("sessionId", sessionId); + storage.setItem("clientId", clientId); + storage.setItem("isLoggedIn", "true"); + + // 淇濆瓨userData淇℃伅锛屽寘鍚玸essionId鍜宼ag + const userData = JSON.stringify({ + sessionId: sessionId, + tag: tag, + project: this.data.selectedProject, + userName: response.content.client.clientName, + userPhone: response.content.client.userPhone + }); + storage.setItem("userData", userData) + .then(() => { + console.log('鐢ㄦ埛鏁版嵁淇濆瓨鎴愬姛锛屽寘鍚」鐩俊鎭�:', this.data.selectedProject, 'tag:', tag); + this.initData(); + }) + .catch(err => { + console.warn('淇濆瓨userData澶辫触锛屼絾缁х画鍒濆鍖�:', err); + this.initData(); + }); + + } + } else { + wx.showToast({ + title: '鐧诲綍澶辫触', + icon: 'error', + duration: 2000 + }); + wx.redirectTo({ + url: `/pages/login/login?project=${this.data.selectedProject}` + }); + } + }).catch(error => { + wx.hideLoading(); + console.error('鐧诲綍璇锋眰澶辫触:', error); + wx.showToast({ + title: '鐧诲綍澶辫触锛岃閲嶈瘯', + icon: 'none' + }); + wx.redirectTo({ + url: `/pages/login/login?project=${this.data.selectedProject}` + }); + }); } else { + wx.hideLoading(); console.log('鐧诲綍澶辫触锛�' + res.errMsg); - + wx.showToast({ + title: '寰俊鐧诲綍澶辫触', + icon: 'none' + }); } + }, + fail: (err) => { + wx.hideLoading(); + console.error('寰俊鐧诲綍API璋冪敤澶辫触:', err); + wx.showToast({ + title: '鐧诲綍澶辫触锛岃閲嶈瘯', + icon: 'none' + }); } }); } }, - //寰俊code鐧诲綍 - codeLogin(codeData) { + + // 杈呭姪鍑芥暟锛氭竻鐞嗕复鏃舵爣璁� + cleanupTempMarkers() { + // 鍙湁鍦╥sFromLogin涓簍rue鏃舵墠杩涜娓呯悊 + if (this.data.isFromLogin) { + console.log('娓呯悊涓存椂鏍囪'); + + // 娓呯悊瀛樺偍鏍囪 + try { + wx.removeStorageSync('_temp_from_login'); + } catch (e) { + console.error('娓呯悊瀛樺偍鏍囪澶辫触:', e); + } + + // 娓呯悊鍏ㄥ眬鍙橀噺鏍囪 + if (getApp().globalData) { + getApp().globalData._tempFromLogin = false; + } + + // 閲嶈isFromLogin涓篺alse锛屼絾娣诲姞寤惰繜锛岄伩鍏嶅奖鍝嶅綋鍓嶉〉闈㈢殑杩斿洖閫昏緫 + setTimeout(() => { + this.setData({ + isFromLogin: false + }); + console.log('閲嶇疆isFromLogin=false'); + }, 5000); + } + }, //纭瑙g粦 + unBindPost() { + this.setData({ + showUnBind: false + }) wx.showLoading({ - title: '姝e湪鐧诲綍璇风◢鍊�...', // 鍔犺浇鎻愮ず鏂囧瓧 + title: '姝e湪瑙g粦璇风◢鍊�...', // 鍔犺浇鎻愮ず鏂囧瓧 mask: true // 鏄惁鏄剧ず閫忔槑钂欏眰锛岄槻姝㈣Е鎽哥┛閫忥紝榛樿涓� false }); const data = { - code: codeData, //涓存椂鐧诲綍鍑瘉 + sessionId: getApp().globalData.sessionId //鍙栨按鍙D }; post({ - url: "wx/client/code_login", + url: 'wx/client/unbind', data: data, + useParams: true }).then(response => { // 澶勭悊鎴愬姛鍝嶅簲 console.log('璇锋眰鎴愬姛:', response); // 鍔犺浇瀹屾垚鍚庨殣钘忓姞杞藉姩鐢� wx.hideLoading(); - if (response.code === "0001") { - //鍋囧涓虹┖鍒欒烦杞埌缁戝畾鐣岄潰 - if (response.content.client.clientId === "") { - wx.navigateTo({ - url: '/pages/login/login' - }) - } else { - //缂撳瓨鍦ㄦ湰鍦� + const app = getApp(); + + // 娓呴櫎鍏ㄥ眬鐧诲綍鐘舵�� + app.globalData.sessionId = ''; + app.globalData.clientId = ''; + app.globalData.isLoggedIn = false; + app.globalData.userInfo = null; + + // 娓呴櫎瀛樺偍涓殑鐧诲綍鐘舵�� + const storage = require('../../utils/storage.js'); + storage.removeItem('sessionId') + .then(() => storage.removeItem('clientId')) + .then(() => storage.removeItem('userData')) + .then(() => storage.removeItem('isLoggedIn')) + .then(() => { + wx.showToast({ + title: '瑙g粦鎴愬姛', + icon: 'success', + duration: 2000 + }); + + // 閲嶇疆UI鏄剧ず鐘舵�� this.setData({ - isLogin: true - }) - getApp().globalData.sessionId = response.content.client.sessionId - storage.setItem("sessionId", response.content.client.sessionId) - getApp().globalData.clientId = response.content.client.clientId - storage.setItem("clientId", response.content.client.clientId) - this.initData(); - } - } else { - wx.showToast({ - title: 'title', - icon: 'error', - duration: 2000 + userName: "璇风偣鍑荤櫥褰�", + userPhone: "", + listData: [] + }); }) - } + .catch(err => { + console.error('瑙g粦杩囩▼涓嚭閿�:', err); + wx.showToast({ + title: '瑙g粦澶辫触锛岃閲嶈瘯', + icon: 'none', + duration: 2000 + }); + }); }).catch(error => { // 鍔犺浇瀹屾垚鍚庨殣钘忓姞杞藉姩鐢� wx.hideLoading(); // 澶勭悊閿欒鍝嶅簲 console.error('璇锋眰澶辫触:', error); + wx.showToast({ + title: '瑙g粦澶辫触', + icon: 'error', + duration: 3000 + }) }); }, }) \ No newline at end of file diff --git a/pages/home/home.wxml b/pages/home/home.wxml index 923d87d..292b406 100644 --- a/pages/home/home.wxml +++ b/pages/home/home.wxml @@ -9,7 +9,7 @@ <text class="head-bottom">{{userPhone}}</text> </view> <view class="head-button-wrapper"> - <text class="unbind" bind:tap="feedBack">瑙g粦</text> + <text class="unbind" bind:tap="unbind">瑙g粦</text> <text class="head-bottom" bind:tap="feedBack">鑱旂郴瀹㈡湇</text> </view> <view class="scen-view" bind:tap="scenCode"> @@ -33,8 +33,8 @@ <image src="/images/record.svg" /> <text>寮�鍏抽榾璁板綍</text> </view> - <view class="center-view" bind:tap="feedBack"> - <image src="/images/question.svg" /> + <view class="center-view" bind:tap="irrigation"> + <image src="/images/irrigation.svg" /> <text>杞亴</text> </view> </view> diff --git a/pages/irrigation/irrigation.js b/pages/irrigation/irrigation.js index 6ff0e20..e906d7e 100644 --- a/pages/irrigation/irrigation.js +++ b/pages/irrigation/irrigation.js @@ -139,6 +139,19 @@ }, /** + * 鐐瑰嚮鍒楄〃椤� + */ + onItemTap: function (e) { + const id = e.currentTarget.dataset.id; + const status = e.currentTarget.dataset.status; + + // 瀵艰埅鍒扮亴婧夎鎯呴〉闈紝骞朵紶閫掑弬鏁� + wx.navigateTo({ + url: `/pages/irrigationDetail/irrigationDetail?id=${id}&fromList=true` + }); + }, + + /** * 鐐瑰嚮鍙戝竷鎸夐挳 */ onPublish: function (e) { @@ -214,6 +227,14 @@ }, /** + * 闃绘浜嬩欢鍐掓场 + */ + stopPropagation: function (e) { + // 闃绘浜嬩欢鍐掓场 + return false; + }, + + /** * 寮�濮嬩笅鎷夊埛鏂� */ startPullDownRefresh: function() { diff --git a/pages/irrigation/irrigation.wxml b/pages/irrigation/irrigation.wxml index 3b71e14..067fe45 100644 --- a/pages/irrigation/irrigation.wxml +++ b/pages/irrigation/irrigation.wxml @@ -19,7 +19,7 @@ <view class="scroll-bg"> <block wx:if="{{currentList.length > 0}}"> <!-- 缁熶竴鏄剧ず鎵�鏈夊垪琛ㄩ」锛屼笉鍐嶆寜鐘舵�佸垎缁� --> - <view class="list-item" wx:for="{{currentList}}" wx:key="id"> + <view class="list-item" wx:for="{{currentList}}" wx:key="id" bindtap="onItemTap" data-id="{{item.id}}" data-status="{{item.status}}"> <view class="item-header"> <view class="info-row title-row"> <view class="info-label">缂栧彿锛�</view> @@ -55,7 +55,7 @@ </view> </block> </view> - <view class="item-actions"> + <view class="item-actions" catchtap="stopPropagation"> <!-- 鏍规嵁鐘舵�佹樉绀轰笉鍚岀殑鎸夐挳 --> <block wx:if="{{item.status === '鏈彂甯�'}}"> <button class="action-button publish-button" hover-class="publish-button-hover" bindtap="onPublish" data-id="{{item.id}}">鍙戝竷</button> diff --git a/pages/irrigationDetail/irrigationDetail.js b/pages/irrigationDetail/irrigationDetail.js new file mode 100644 index 0000000..5b4907b --- /dev/null +++ b/pages/irrigationDetail/irrigationDetail.js @@ -0,0 +1,308 @@ +Page({ + /** + * 椤甸潰鐨勫垵濮嬫暟鎹� + */ + data: { + planCode: '', + startTime: '', + projects: [], + isRefreshing: false, // 涓嬫媺鍒锋柊鐘舵�� + planId: '' // 淇濆瓨璁″垝ID + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 + */ + onLoad: function (options) { + if (options.id) { + this.setData({ + planId: options.id + }); + // 浠庡垪琛ㄩ〉闈㈣繘鍏ユ椂锛屾墍鏈夐」鐩粯璁ゆ敹璧� + const fromListPage = options.fromList === 'true'; + this.loadIrrigationDetail(options.id, !fromListPage); + } + }, + + /** + * 鍔犺浇鐏屾簤璁″垝璇︽儏 + * @param {string} id 鐏屾簤璁″垝ID + * @param {boolean} isFirstLoad 鏄惁棣栨鍔犺浇 + */ + loadIrrigationDetail: function (id, isFirstLoad = false) { + // 寮�濮嬪姞杞斤紝璁剧疆鍒锋柊鐘舵�� + this.setData({ + isRefreshing: true + }); + + // 淇濆瓨褰撳墠椤圭洰鐨勫睍寮�鐘舵�� + const currentExpandStates = {}; + if (!isFirstLoad && this.data.projects.length > 0) { + this.data.projects.forEach((project, index) => { + currentExpandStates[project.id] = project.expanded; + }); + } + + // 杩欓噷搴旇鏄粠API鑾峰彇鏁版嵁 + // 浠ヤ笅鏄ā鎷熸暟鎹� + const mockData = { + planCode: 'IRG20240317001', + startTime: '2024-03-17 08:00', + projects: [ + { + id: 1, + name: '椤圭洰A', + expanded: isFirstLoad ? true : false, // 浠呭湪闈炲垪琛ㄩ〉杩涘叆涓旈娆″姞杞芥椂灞曞紑绗竴涓」鐩� + groups: [ + { + id: 1, + name: '杞亴缁凙-1', + status: 'irrigated', // 宸茬亴婧� + statusText: '宸茬亴婧�', + startTime: '2024-03-17 08:00', + endTime: '2024-03-17 09:30', + duration: 90 + }, + { + id: 2, + name: '杞亴缁凙-2', + status: 'irrigating', // 姝e湪鐏屾簤 + statusText: '姝e湪鐏屾簤', + startTime: '2024-03-17 09:30', + endTime: '2024-03-17 11:00', + duration: 90 + } + ] + }, + { + id: 2, + name: '椤圭洰B', + expanded: false, + groups: [ + { + id: 3, + name: '杞亴缁凚-1', + status: 'waiting', // 鏈亴婧� + statusText: '鏈亴婧�', + startTime: '2024-03-17 11:00', + endTime: '2024-03-17 12:30', + duration: 90 + }, + { + id: 4, + name: '杞亴缁凚-2', + status: 'waiting', // 鏈亴婧� + statusText: '鏈亴婧�', + startTime: '2024-03-17 12:30', + endTime: '2024-03-17 14:00', + duration: 90 + } + ] + }, + { + id: 3, + name: '椤圭洰C', + expanded: false, + groups: [ + { + id: 5, + name: '杞亴缁凜-1', + status: 'waiting', // 鏈亴婧� + statusText: '鏈亴婧�', + startTime: '2024-03-17 14:00', + endTime: '2024-03-17 15:30', + duration: 90 + } + ] + } + ] + }; + + // 璁$畻姣忎釜椤圭洰鐨勬�荤亴婧夋椂闀� + mockData.projects = this.calculateProjectTotalDuration(mockData.projects); + + // 濡傛灉涓嶆槸棣栨鍔犺浇锛屾仮澶嶉」鐩殑灞曞紑鐘舵�� + if (!isFirstLoad) { + mockData.projects.forEach(project => { + if (currentExpandStates[project.id] !== undefined) { + project.expanded = currentExpandStates[project.id]; + } + }); + } + + // 妯℃嫙缃戠粶璇锋眰寤惰繜 + setTimeout(() => { + // 璁剧疆椤甸潰鏁版嵁 + this.setData({ + planCode: mockData.planCode, + startTime: mockData.startTime, + projects: mockData.projects, + isRefreshing: false // 缁撴潫鍒锋柊鐘舵�� + }); + }, 1000); + + // 瀹為檯椤圭洰涓簲璇ヤ娇鐢╳x.request鑾峰彇鏁版嵁 + // wx.request({ + // url: 'https://your-api-url/irrigation/' + id, + // method: 'GET', + // success: (res) => { + // if (res.data && res.data.code === 0) { + // // 鑾峰彇鏂版暟鎹� + // let projects = res.data.data.projects; + // + // // 濡傛灉鏄娆″姞杞斤紝璁剧疆榛樿灞曞紑鐘舵�� + // if (isFirstLoad) { + // projects = projects.map((project, index) => { + // return { + // ...project, + // expanded: index === 0 // 榛樿鍙睍寮�绗竴涓」鐩� + // }; + // }); + // } else { + // // 濡傛灉涓嶆槸棣栨鍔犺浇锛屾仮澶嶉」鐩殑灞曞紑鐘舵�� + // projects = projects.map(project => { + // return { + // ...project, + // expanded: currentExpandStates[project.id] !== undefined + // ? currentExpandStates[project.id] + // : false + // }; + // }); + // } + // + // // 璁$畻姣忎釜椤圭洰鐨勬�荤亴婧夋椂闀� + // projects = this.calculateProjectTotalDuration(projects); + // + // this.setData({ + // planCode: res.data.data.planCode, + // startTime: res.data.data.startTime, + // projects: projects, + // isRefreshing: false // 缁撴潫鍒锋柊鐘舵�� + // }); + // } else { + // wx.showToast({ + // title: '鑾峰彇鏁版嵁澶辫触', + // icon: 'none' + // }); + // this.setData({ + // isRefreshing: false // 缁撴潫鍒锋柊鐘舵�� + // }); + // } + // }, + // fail: () => { + // wx.showToast({ + // title: '缃戠粶閿欒', + // icon: 'none' + // }); + // this.setData({ + // isRefreshing: false // 缁撴潫鍒锋柊鐘舵�� + // }); + // } + // }); + }, + + /** + * 璁$畻姣忎釜椤圭洰鐨勬�荤亴婧夋椂闀� + */ + calculateProjectTotalDuration: function(projects) { + return projects.map(project => { + // 璁$畻椤圭洰涓嬫墍鏈夎疆鐏岀粍鐨勬�绘椂闀� + const totalDuration = project.groups.reduce((total, group) => { + return total + (group.duration || 0); + }, 0); + + return { + ...project, + totalDuration: totalDuration + }; + }); + }, + + /** + * 鍒囨崲椤圭洰灞曞紑/鏀惰捣鐘舵�� + */ + toggleProject: function (e) { + const index = e.currentTarget.dataset.index; + const expanded = this.data.projects[index].expanded; + + // 鏇存柊椤圭洰鐨勫睍寮�鐘舵�� + const key = `projects[${index}].expanded`; + this.setData({ + [key]: !expanded + }); + }, + + /** + * 瀵艰埅鍒拌疆鐏岀粍璇︽儏椤甸潰 + */ + navigateToGroupDetail: function (e) { + const projectName = e.currentTarget.dataset.projectName; + const groupName = e.currentTarget.dataset.groupName; + const groupId = e.currentTarget.dataset.groupId; + const status = e.currentTarget.dataset.status; + + console.log('璺宠浆鍒扮粍璇︽儏椤甸潰锛屽師濮嬬姸鎬�:', status); + + // 瀵艰埅鍒扮粍璇︽儏椤甸潰锛屽苟浼犻�掑弬鏁� + // 娉ㄦ剰锛氶渶瑕佸皢status杞崲涓篿sIrrigating鍙傛暟锛屼互渚垮湪缁勮鎯呴〉闈㈡纭樉绀哄懡浠ょ姸鎬� + wx.navigateTo({ + url: `/pages/groupDetail/groupDetail?projectName=${projectName}&groupName=${groupName}&groupId=${groupId}&status=${status}&isIrrigating=${status === 'irrigating' ? 'true' : 'false'}` + }); + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚 + */ + onReady: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず + */ + onShow: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 + */ + onHide: function () { + + }, + + /** + * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇 + */ + onUnload: function () { + + }, + + /** + * 涓嬫媺鍒锋柊澶勭悊鍑芥暟 + */ + onPullDownRefresh: function () { + // 閲嶆柊鍔犺浇鏁版嵁锛屼絾淇濇寔灞曞紑鐘舵�� + if (this.data.planId) { + this.loadIrrigationDetail(this.data.planId, false); + } else { + this.setData({ + isRefreshing: false + }); + } + }, + + /** + * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁� + */ + onReachBottom: function () { + + }, + + /** + * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜� + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/irrigationDetail/irrigationDetail.json b/pages/irrigationDetail/irrigationDetail.json new file mode 100644 index 0000000..73e5515 --- /dev/null +++ b/pages/irrigationDetail/irrigationDetail.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "杞亴璇︽儏" +} \ No newline at end of file diff --git a/pages/irrigationDetail/irrigationDetail.wxml b/pages/irrigationDetail/irrigationDetail.wxml new file mode 100644 index 0000000..eb682a5 --- /dev/null +++ b/pages/irrigationDetail/irrigationDetail.wxml @@ -0,0 +1,74 @@ +<view class="irrigation-detail-container"> + <!-- 椤堕儴淇℃伅鍖哄煙 --> + <view class="header-section"> + <view class="plan-info"> + <view class="plan-code"> + <text class="label">璁″垝缂栧彿锛�</text> + <text class="value">{{planCode}}</text> + </view> + <image class="status-icon" src="/images/progress.svg" mode="aspectFit"></image> + </view> + + <!-- 鐏屾簤鏃堕棿淇℃伅 --> + <view class="time-info"> + <text class="label">鐏屾簤寮�濮嬫椂闂达細</text> + <text class="value">{{startTime}}</text> + </view> + </view> + + <!-- 椤圭洰鍜岃疆鐏岀粍鍒楄〃 --> + <scroll-view + scroll-y="true" + class="project-list" + refresher-enabled="{{true}}" + refresher-threshold="50" + refresher-triggered="{{isRefreshing}}" + bindrefresherrefresh="onPullDownRefresh"> + <view class="scroll-content"> + <block wx:for="{{projects}}" wx:key="id" wx:for-item="project" wx:for-index="projectIndex"> + <!-- 椤圭洰淇℃伅 --> + <view class="project-item {{project.expanded ? 'expanded' : 'collapsed'}}"> + <view class="project-header" bindtap="toggleProject" data-index="{{projectIndex}}"> + <image class="toggle-icon {{project.expanded ? 'expanded' : ''}}" src="/images/arrow-down.svg" mode="aspectFit"></image> + <view class="project-info"> + <view class="project-name">{{project.name}}</view> + <view class="project-duration">鎬荤亴婧夋椂闀�: {{project.totalDuration || 0}}鍒嗛挓</view> + </view> + </view> + + <!-- 杞亴缁勫垪琛� --> + <view class="group-list {{project.expanded ? 'expanded' : 'collapsed'}}"> + <block wx:for="{{project.groups}}" wx:key="id" wx:for-item="group"> + <view class="group-item {{group.status}}" bindtap="navigateToGroupDetail" data-project-name="{{project.name}}" data-group-name="{{group.name}}" data-group-id="{{group.id}}" data-status="{{group.status}}"> + <!-- 杞亴缁勭姸鎬佹爣璇� --> + <view class="group-status-indicator"> + <view class="status-dot"></view> + <text class="status-text">{{group.statusText}}</text> + </view> + + <!-- 杞亴缁勪俊鎭� --> + <view class="group-info"> + <view class="group-name">{{group.name}}</view> + <view class="group-time-info"> + <view class="time-row"> + <text class="time-label">寮�濮嬫椂闂达細</text> + <text class="time-value">{{group.startTime}}</text> + </view> + <view class="time-row"> + <text class="time-label">缁撴潫鏃堕棿锛�</text> + <text class="time-value">{{group.endTime}}</text> + </view> + <view class="time-row"> + <text class="time-label">鐏屾簤鏃堕暱锛�</text> + <text class="time-value">{{group.duration}}鍒嗛挓</text> + </view> + </view> + </view> + </view> + </block> + </view> + </view> + </block> + </view> + </scroll-view> +</view> \ No newline at end of file diff --git a/pages/irrigationDetail/irrigationDetail.wxss b/pages/irrigationDetail/irrigationDetail.wxss new file mode 100644 index 0000000..faa1876 --- /dev/null +++ b/pages/irrigationDetail/irrigationDetail.wxss @@ -0,0 +1,234 @@ +.irrigation-detail-container { + display: flex; + flex-direction: column; + height: 100vh; + background-color: #F5F5F5; +} + +/* 椤堕儴淇℃伅鍖哄煙鏍峰紡 */ +.header-section { + background-color: #FFFFFF; + padding: 20rpx 30rpx; + margin-bottom: 20rpx; + box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); +} + +.plan-info { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20rpx; +} + +.plan-code { + display: flex; + align-items: center; +} + +.status-icon { + width: 68rpx; + height: 68rpx; +} + +.time-info { + display: flex; + align-items: center; + padding: 10rpx 0; +} + +.label { + color: #666666; + font-size: 28rpx; + margin-right: 10rpx; +} + +.value { + color: #333333; + font-size: 28rpx; + font-weight: 500; +} + +/* 椤圭洰鍒楄〃鏍峰紡 */ +.project-list { + flex: 1; + overflow: hidden; +} + +.scroll-content { + padding: 0 30rpx 30rpx 30rpx; +} + +.project-item { + margin-bottom: 30rpx; + border-radius: 12rpx; + overflow: hidden; + box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05); + width: 100%; + box-sizing: border-box; +} + +.project-header { + background-color: #FFFFFF; + padding: 20rpx 30rpx; + margin-bottom: 0; + display: flex; + align-items: flex-start; + width: 100%; + box-sizing: border-box; +} + +/* 鎵�鏈夐」鐩爣棰橀兘鏈夊渾瑙� */ +.project-item .project-header { + border-radius: 12rpx; +} + +/* 灞曞紑鐘舵�佺殑椤圭洰鏍囬鍙湁椤堕儴鍦嗚 */ +.project-item.expanded .project-header { + border-radius: 12rpx 12rpx 0 0; +} + +.toggle-icon { + width: 32rpx; + height: 32rpx; + margin-right: 16rpx; + transition: transform 0.3s ease; + flex-shrink: 0; + margin-top: 6rpx; +} + +.toggle-icon.expanded { + transform: rotate(180deg); +} + +.project-info { + flex: 1; + width: calc(100% - 48rpx); +} + +.project-name { + font-size: 32rpx; + font-weight: bold; + color: #333333; + word-break: break-all; +} + +.project-duration { + font-size: 26rpx; + color: #666666; + margin-top: 10rpx; +} + +/* 杞亴缁勫垪琛ㄦ牱寮� */ +.group-list { + background-color: #FFFFFF; + border-radius: 0 0 12rpx 12rpx; + padding: 0 20rpx; + overflow: hidden; + max-height: 0; + transition: all 0.3s ease-in-out; + width: 100%; + box-sizing: border-box; +} + +.group-list.expanded { + max-height: 2000rpx; /* 瓒冲澶х殑楂樺害浠ュ绾冲唴瀹� */ + padding: 0 20rpx 20rpx 20rpx; +} + +.group-list.collapsed { + max-height: 0; + padding-top: 0; + padding-bottom: 0; +} + +.group-item { + border-radius: 8rpx; + margin-top: 20rpx; + padding: 20rpx; + background-color: #F9F9F9; + position: relative; +} + +/* 杞亴缁勭姸鎬佹牱寮� */ +.group-status-indicator { + display: flex; + align-items: center; + margin-bottom: 20rpx; +} + +.status-dot { + width: 16rpx; + height: 16rpx; + border-radius: 50%; + margin-right: 10rpx; +} + +.status-text { + font-size: 26rpx; + font-weight: 500; +} + +/* 宸茬亴婧夌姸鎬� */ +.irrigated .status-dot { + background-color: #52C41A; +} + +.irrigated .status-text { + color: #52C41A; +} + +/* 姝e湪鐏屾簤鐘舵�� */ +.irrigating .status-dot { + background-color: #D43030; +} + +.irrigating .status-text { + color: #D43030; +} + +/* 鏈亴婧夌姸鎬� */ +.waiting .status-dot { + background-color: #FAAD14; +} + +.waiting .status-text { + color: #FAAD14; +} + +/* 杞亴缁勪俊鎭牱寮� */ +.group-info { + padding-left: 26rpx; +} + +.group-name { + font-size: 30rpx; + font-weight: bold; + color: #333333; + margin-bottom: 20rpx; +} + +.group-time-info { + background-color: #FFFFFF; + border-radius: 8rpx; + padding: 20rpx; +} + +.time-row { + display: flex; + margin-bottom: 10rpx; +} + +.time-row:last-child { + margin-bottom: 0; +} + +.time-label { + color: #666666; + font-size: 26rpx; + width: 150rpx; +} + +.time-value { + color: #333333; + font-size: 26rpx; +} \ No newline at end of file diff --git a/pages/login/login.js b/pages/login/login.js index a4dd503..f7edc39 100644 --- a/pages/login/login.js +++ b/pages/login/login.js @@ -17,7 +17,9 @@ countDown: 60, projectName: '鍢夊唱鍏抽」鐩�', // 榛樿椤圭洰鍚嶇О selectedProject: 'JYG', // 榛樿椤圭洰浠g爜 - showErrorDialog: false + showErrorDialog: false, + fromBack: false, // 鏍囪鏄惁鏄粠杩斿洖鎸夐挳杩斿洖鐨� + manualNavigate: false // 鏍囪鏄惁鏄�氳繃缂栫▼鏂瑰紡瀵艰埅鐨� }, /** @@ -61,8 +63,7 @@ return; } - // 寮�濮嬪�掕鏃� - this.startCountDown(); + // 鍙戦�侀獙璇佺爜璇锋眰 this.postCode(); @@ -140,40 +141,14 @@ title: '鐧诲綍涓�...', mask: true }); - this.wsLogin(); - - - // 鍙戦�佺櫥褰曡姹� - post('/api/loginByCode', { - phone: phone, - code: verificationCode, - projectCode: this.data.selectedProject - }).then(res => { - wx.hideLoading(); - - if (res.code === 0 && res.data) { - // 淇濆瓨鐢ㄦ埛淇℃伅鍜宼oken - storage.setUserInfo(res.data); - storage.setToken(res.data.token); - - // 璺宠浆鍒伴椤� - wx.switchTab({ - url: '/pages/index/index' - }); - } else { - wx.showToast({ - title: res.msg || '鐧诲綍澶辫触锛岃閲嶈瘯', - icon: 'none' - }); - } - }).catch(err => { - wx.hideLoading(); - console.error('鐧诲綍澶辫触', err); - wx.showToast({ - title: '缃戠粶寮傚父锛岃閲嶈瘯', - icon: 'none' - }); + + // 鏍囪涓烘墜鍔ㄥ鑸紝纭繚涓嶄細瑙﹀彂杩斿洖閫昏緫 + console.log('鐧诲綍鎸夐挳鐐瑰嚮锛岃缃甿anualNavigate=true'); + this.setData({ + manualNavigate: true }); + + this.wsLogin(); }, /** @@ -202,20 +177,63 @@ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇 */ onLoad: function (options) { - // 鑾峰彇閫夋嫨鐨勯」鐩� - if (options.project) { + console.log('login椤甸潰鍔犺浇锛宱ptions:', options); + + // 璁剧疆椤甸潰鏁版嵁 + this.setData({ + fromBack: false, // 鏍囪鏄惁鏄粠杩斿洖鎸夐挳杩斿洖鐨� + manualNavigate: false // 鏍囪鏄惁鏄�氳繃缂栫▼鏂瑰紡瀵艰埅鐨� + }); + + // 鑾峰彇閫夋嫨鐨勯」鐩� - 浼樺厛浣跨敤URL鍙傛暟 + if (options && options.project) { + const project = options.project; + const projectName = project === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰'; + + console.log(`浠嶶RL鍙傛暟鑾峰彇椤圭洰淇℃伅: ${project} (${projectName})`); + this.setData({ - selectedProject: options.project, - projectName: options.project === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰' + selectedProject: project, + projectName: projectName }); + + // 鍚屾鏇存柊鍏ㄥ眬椤圭洰璁剧疆 + if (getApp().globalData) { + getApp().globalData.selectedProject = project; + + // 璁剧疆瀵瑰簲鐨則ag + if (project === 'JYG') { + getApp().globalData.tag = 'ym'; + } else if (project === 'MQ') { + getApp().globalData.tag = 'mq'; + } + + // 鏇存柊 BASEURL + try { + const { PROJECT_URLS } = require('../../api/config.js'); + getApp().globalData.baseUrl = PROJECT_URLS[project]; + } catch (e) { + console.error('璁剧疆baseUrl澶辫触:', e); + } + } + + // 淇濆瓨椤圭洰閫夋嫨鍒版湰鍦板瓨鍌紝纭繚椤圭洰淇℃伅涓�鑷� + storage.setItem('selectedProject', project) + .then(() => console.log('鎴愬姛淇濆瓨椤圭洰閫夋嫨鍒板瓨鍌�')) + .catch(err => console.error('淇濆瓨椤圭洰閫夋嫨鍒板瓨鍌ㄥけ璐�:', err)); } else { - // 灏濊瘯浠庢湰鍦板瓨鍌ㄨ幏鍙栧凡閫夋嫨鐨勯」鐩� - storage.getItem('selectedProject').then(project => { + // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧凡閫夋嫨鐨勯」鐩� + storage.getItemSafe('selectedProject').then(project => { if (project) { + const projectName = project === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰'; + console.log(`浠庡瓨鍌ㄨ幏鍙栭」鐩俊鎭�: ${project} (${projectName})`); + this.setData({ selectedProject: project, - projectName: project === 'JYG' ? '鍢夊唱鍏抽」鐩�' : '姘戝嫟椤圭洰' + projectName: projectName }); + } else { + console.log('鏈壘鍒板凡閫夋嫨鐨勯」鐩紝浣跨敤榛樿椤圭洰'); } }).catch(err => { console.error('鑾峰彇宸查�夋嫨椤圭洰澶辫触:', err); @@ -241,7 +259,21 @@ * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌 */ onHide() { - + // 濡傛灉涓嶆槸閫氳繃缂栫▼鏂瑰紡瀵艰埅锛屽垯鍙兘鏄偣鍑讳簡杩斿洖鎸夐挳 + // 娉ㄦ剰锛氬湪鏌愪簺鎯呭喌涓嬶紝寰俊鍙兘浼氱洿鎺ヨ皟鐢╫nUnload鑰岃烦杩噊nHide + if (!this.data.manualNavigate) { + console.log('椤甸潰闅愯棌锛屽彲鑳芥槸鐐瑰嚮浜嗚繑鍥炴寜閽�'); + this.setData({ + fromBack: true + }); + + // 濡傛灉椤甸潰闅愯棌浣嗘湭鐧诲綍锛岃褰曚竴涓椂闂存埑锛屽府鍔╄瘑鍒槸鍚︽槸杩斿洖鎿嶄綔 + if (!getApp().globalData.isLoggedIn) { + this.hideTimestamp = Date.now(); + } + } else { + console.log('椤甸潰闅愯棌锛屾槸閫氳繃浠g爜瀵艰埅鐨�'); + } }, /** @@ -253,6 +285,103 @@ clearInterval(this.countDownTimer); this.countDownTimer = null; } + + // 璁板綍閫�鍑虹櫥褰曢〉闈㈢殑鎯呭喌 + console.log('鐧诲綍椤甸潰鍗歌浇锛宖romBack:', this.data.fromBack, 'manualNavigate:', this.data.manualNavigate, '鐧诲綍鐘舵��:', !!getApp().globalData.isLoggedIn); + + // 濡傛灉鏄櫥褰曟垚鍔燂紝涓嶆墽琛岃繑鍥為�昏緫 + if (getApp().globalData.isLoggedIn) { + console.log('鐢ㄦ埛宸茬櫥褰曪紝鏃犻渶鎵ц杩斿洖閫昏緫'); + return; + } + + // 妫�鏌ユ槸鍚︽槸閫氳繃缂栫▼鏂瑰紡鏄庣‘璁剧疆浜嗗鑸� + // 濡傛灉娌℃湁鏄庣‘璁剧疆锛屽氨鍋囧畾鏄繑鍥炴搷浣� + if (!this.data.manualNavigate) { + console.log('椤甸潰鍗歌浇鏃舵湭璁剧疆manualNavigate锛屽亣瀹氭槸杩斿洖鎸夐挳鎿嶄綔'); + + // 绔嬪嵆鍐欏叆涓存椂鏍囪锛屼互渚块椤垫娴嬪埌 + try { + // 澶氱鏂瑰紡纭繚鍐欏叆鎴愬姛 + wx.setStorageSync('_temp_from_login', 'true'); + console.log('绔嬪嵆鍐欏叆_temp_from_login鏍囪涓簍rue'); + + // 鍒涘缓涓�涓叏灞�瀵硅薄锛屼綔涓哄鐢ㄦ柟妗� + if (!getApp().globalData) { + getApp().globalData = {}; + } + getApp().globalData._tempFromLogin = true; + console.log('鍚屾椂璁剧疆鍏ㄥ眬鍙橀噺_tempFromLogin=true'); + + // 妫�鏌ュ啓鍏ユ槸鍚︽垚鍔� + const check = wx.getStorageSync('_temp_from_login'); + console.log('妫�鏌ヤ复鏃舵爣璁版槸鍚﹀啓鍏ユ垚鍔�:', check); + } catch (e) { + console.error('鍐欏叆鏍囪澶辫触:', e); + // 澶囩敤鏂瑰紡鍐欏叆 + wx.setStorage({ + key: '_temp_from_login', + data: 'true' + }); + } + + // 灏濊瘯浣跨敤wx.navigateBack杩斿洖涓婁竴椤碉紙濡傛灉鍙锛� + const pages = getCurrentPages(); + if (pages.length > 1) { + console.log('妫�娴嬪埌鏈変笂涓�椤碉紝浣跨敤navigateBack杩斿洖'); + wx.navigateBack({ + delta: 1, + success: () => console.log('navigateBack鎴愬姛'), + fail: (err) => { + console.error('navigateBack澶辫触:', err); + // 濡傛灉navigateBack澶辫触锛屽皾璇時eLaunch + this.backupReturnToHome(); + } + }); + } else { + console.log('鏃犱笂涓�椤碉紝浣跨敤澶囩敤杩斿洖鏂瑰紡'); + // 娌℃湁涓婁竴椤碉紝浣跨敤澶囩敤鏂规硶 + this.backupReturnToHome(); + } + } else { + console.log('閫氳繃缂栫▼鏂瑰紡绂诲紑鐧诲綍椤甸潰'); + } + }, + + // 澶囩敤鐨勮繑鍥為椤垫柟娉� + backupReturnToHome() { + console.log('浣跨敤澶囩敤鏂规硶杩斿洖棣栭〉'); + + // 灏濊瘯浣跨敤switchTab锛堝鏋滈椤靛湪tabBar涓級 + const useReLaunch = () => { + console.log('浣跨敤reLaunch杩斿洖棣栭〉'); + wx.reLaunch({ + url: '/pages/home/home?fromLogin=true', + success: () => console.log('reLaunch鎴愬姛杩斿洖棣栭〉'), + fail: (err) => { + console.error('reLaunch杩斿洖棣栭〉澶辫触:', err); + // 鏈�鍚庣殑澶囩敤鏂规锛氫娇鐢╮edirectTo + setTimeout(() => { + console.log('寤惰繜浣跨敤redirectTo灏濊瘯杩斿洖棣栭〉'); + wx.redirectTo({ + url: '/pages/home/home?fromLogin=true', + success: () => console.log('redirectTo鎴愬姛杩斿洖棣栭〉'), + fail: (err) => console.error('鎵�鏈夎繑鍥炴柟娉曢兘澶辫触:', err) + }); + }, 100); + } + }); + }; + + // 鍏堝皾璇曚娇鐢╯witchTab锛堟煇浜涚増鏈彲鑳藉皢棣栭〉璁剧疆涓簍abBar锛� + wx.switchTab({ + url: '/pages/home/home', + success: () => console.log('switchTab鎴愬姛杩斿洖棣栭〉'), + fail: (err) => { + console.log('switchTab澶辫触锛堝彲鑳介椤典笉鍦╰abBar涓級:', err); + useReLaunch(); + } + }); }, /** @@ -290,8 +419,8 @@ this.setData({ codeSent: true, }); - // 鍚姩鍊掕鏃� - this.startCountdown(); + // 寮�濮嬪�掕鏃� + this.startCountDown(); }) .catch((error) => { wx.showToast({ @@ -302,20 +431,39 @@ }); }, wsLogin() { + // 鏍囪涓烘墜鍔ㄥ鑸� + console.log('wsLogin璋冪敤锛岃缃甿anualNavigate=true'); + this.setData({ + manualNavigate: true + }); + wx.login({ success: res => { if (res.code) { - console.log('鐧诲綍鎴愬姛锛岃幏鍙栧埌鐨刢ode:', res.code); + console.log('寰俊鐧诲綍鎴愬姛锛岃幏鍙栧埌鐨刢ode:', res.code); // 鍙戦�� res.code 鍒板悗鍙版湇鍔″櫒鎹㈠彇 openId, sessionKey, unionId this.verify(res.code) } else { - console.log('鐧诲綍澶辫触锛�' + res.errMsg); + console.log('寰俊鐧诲綍澶辫触锛�' + res.errMsg); + // 鐧诲綍澶辫触鏃堕噸缃姸鎬� + this.setData({ + manualNavigate: false + }); } + }, + fail: err => { + console.error('寰俊鐧诲綍API璋冪敤澶辫触:', err); + // 鐧诲綍澶辫触锛岄噸缃鑸爣璁� + this.setData({ + manualNavigate: false + }); } }); }, //鐢ㄦ埛缁戝畾 verify(wxCode) { + console.log('verify璋冪敤锛岀‘璁anualNavigate=', this.data.manualNavigate); + const params = { url: 'wx/client/verify', data: { @@ -324,34 +472,115 @@ code: wxCode } }; + post(params) .then((data) => { wx.hideLoading(); - getApp().globalData.sessionId = String(data.content.sessionId) - storage.setItem("sessionId", String(data.content.sessionId)) - getApp().globalData.clientId = String(data.content.clientId) - storage.setItem("clientId", String(data.content.clientId)) - this.bindSuccess(); + + console.log('楠岃瘉鎴愬姛锛屽噯澶囦繚瀛樼敤鎴锋暟鎹�'); + + // 纭繚鍏ㄥ眬瀵硅薄宸插垵濮嬪寲 + if (!getApp().globalData) { + getApp().globalData = {}; + } + + // 淇濆瓨浼氳瘽ID鍜屽鎴风ID + getApp().globalData.sessionId = String(data.content.sessionId); + storage.setItem("sessionId", String(data.content.sessionId)); + getApp().globalData.clientId = String(data.content.clientId); + storage.setItem("clientId", String(data.content.clientId)); + + // 璁剧疆褰撳墠椤圭洰鐨則ag + const tag = this.data.selectedProject === 'JYG' ? 'ym' : 'mq'; + getApp().globalData.tag = tag; + + // 淇濆瓨鐢ㄦ埛淇℃伅 + const userInfo = { + sessionId: String(data.content.sessionId), + clientId: String(data.content.clientId), + phone: this.data.phone, + token: data.content.token || '', + project: this.data.selectedProject, + tag: tag + }; + + // 淇濆瓨鍒板叏灞�鍙橀噺 + getApp().globalData.userInfo = userInfo; + getApp().globalData.isLoggedIn = true; + + // 淇濆瓨鍒版湰鍦板瓨鍌� + storage.setItem("userInfo", JSON.stringify(userInfo)) + .then(() => { + console.log('鐢ㄦ埛淇℃伅淇濆瓨鎴愬姛'); + return storage.setItem("isLoggedIn", "true"); + }) + .then(() => { + // 淇濆瓨userData淇℃伅锛屽寘鍚玸essionId鍜宼ag + const userData = JSON.stringify({ + sessionId: String(data.content.sessionId), + tag: tag + }); + return storage.setItem("userData", userData); + }) + .then(() => { + console.log('鐧诲綍鐘舵�佸拰椤圭洰淇℃伅淇濆瓨鎴愬姛'); + this.bindSuccess(); + }) + .catch(err => { + console.warn('淇濆瓨鐢ㄦ埛淇℃伅杩囩▼涓嚭閿欙紝浣嗕笉褰卞搷缁х画鎿嶄綔:', err); + this.bindSuccess(); + }); }) .catch((error) => { wx.hideLoading(); + console.error('楠岃瘉璇锋眰澶辫触:', error); + + // 楠岃瘉澶辫触锛岄渶瑕侀噸缃鑸爣璁� + console.log('楠岃瘉澶辫触锛岄噸缃甿anualNavigate=false'); + this.setData({ + manualNavigate: false + }); + wx.showToast({ - title: error.msg, + title: error.msg || '楠岃瘉澶辫触', icon: 'error', duration: 3000, }); - console.error('Failed to add item:', error); }); }, bindSuccess: function () { - if (!this.data.isButtonEnabled) return; + // 璁剧疆鏍囪锛岃〃绀洪�氳繃缂栫▼鏂瑰紡瀵艰埅 + console.log('缁戝畾鎴愬姛锛屾渶缁堢‘璁anualNavigate=true'); + this.setData({ + manualNavigate: true, + fromBack: false // 纭繚涓嶄細琚瘑鍒负杩斿洖鎿嶄綔 + }); + + // 璁剧疆鍏ㄥ眬鐧诲綍鐘舵�� + getApp().globalData.isLoggedIn = true; + + // 纭繚娓呴櫎涓存椂鏍囪 + try { + wx.removeStorageSync('_temp_from_login'); + } catch(e) { + console.warn('娓呴櫎涓存椂鏍囪澶辫触', e); + } + wx.showToast({ title: '缁戝畾鎴愬姛', - icon: 'success' - }); - // 璺宠浆鍒� TabBar 椤甸潰 - wx.redirectTo({ - url: '/pages/home/home' // 杩欓噷濉啓浣犳兂瑕佽烦杞殑 TabBar 椤甸潰璺緞 + icon: 'success', + duration: 1500, + mask: true, + success: () => { + // 寤惰繜璺宠浆锛岀‘淇漈oast鏄剧ず瀹屾垚 + setTimeout(() => { + console.log('鐧诲綍鎴愬姛锛屽噯澶囪烦杞埌棣栭〉'); + // 璺宠浆鍒伴椤碉紝浣跨敤reLaunch鑰屼笉鏄痳edirectTo + wx.reLaunch({ + url: '/pages/home/home' + }); + }, 1500); + } }); }, }) \ No newline at end of file diff --git a/pages/login/login.wxml b/pages/login/login.wxml index b45afd7..cef1f9f 100644 --- a/pages/login/login.wxml +++ b/pages/login/login.wxml @@ -25,7 +25,7 @@ </view> </view> - <view class="project-info"> + <view class="project-info {{selectedProject === 'MQ' ? 'mq' : 'jyg'}}"> <text>褰撳墠椤圭洰: {{projectName}}</text> </view> diff --git a/pages/login/login.wxss b/pages/login/login.wxss index e44353a..2f94d3c 100644 --- a/pages/login/login.wxss +++ b/pages/login/login.wxss @@ -123,8 +123,25 @@ bottom: 40rpx; width: 100%; text-align: center; - font-size: 28rpx; - color: #999; + font-size: 32rpx; + padding: 16rpx 0; + background-color: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(5px); + box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1); +} + +.project-info text { + display: inline-block; + padding: 8rpx 24rpx; + color: #fff; + border-radius: 30rpx; + font-weight: 500; + box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.2); + background: linear-gradient(45deg, #1890FF, #36a9fc); +} + +.project-info.mq text { + background: linear-gradient(45deg, #18c063, #36d486); } image { diff --git a/pages/waterIntake/waterIntake.js b/pages/waterIntake/waterIntake.js index 7059ee3..22ec85b 100644 --- a/pages/waterIntake/waterIntake.js +++ b/pages/waterIntake/waterIntake.js @@ -102,7 +102,7 @@ const data = { intakeId: intakeId, //鍙栨按鍙D // vcId: vcId, //铏氭嫙鍗D - operator: app.globalData.operator, //鎿嶄綔鍛� + operator: app.globalData.clientId, //鎿嶄綔鍛� forceOpen: !!isforce // 浣跨敤閫昏緫闈炴搷浣滅 !! 鏉ョ‘淇� isForce 鏄竷灏斿�� }; post({ @@ -243,7 +243,7 @@ get({ url: 'wx/intake/used_intakes', data: { - operatorId: getApp().globalData.operator + operatorId: getApp().globalData.clientId } }) .then((data) => { diff --git a/utils/storage.js b/utils/storage.js index 3ca562d..698b9ea 100644 --- a/utils/storage.js +++ b/utils/storage.js @@ -1,30 +1,79 @@ const setItem = (key, data) => { return new Promise((resolve, reject) => { + if (!key) { + reject(new Error('瀛樺偍閿笉鑳戒负绌�')); + return; + } + wx.setStorage({ key: key, data: data, success: resolve, - fail: reject + fail: (err) => { + console.error(`璁剧疆瀛樺偍椤� ${key} 澶辫触:`, err); + reject(err); + } }); }); }; const getItem = (key) => { return new Promise((resolve, reject) => { + if (!key) { + reject(new Error('瀛樺偍閿笉鑳戒负绌�')); + return; + } + wx.getStorage({ key: key, success: (res) => resolve(res.data), - fail: reject + fail: (err) => { + console.error(`鑾峰彇瀛樺偍椤� ${key} 澶辫触:`, err); + reject(err); + } + }); + }); +}; + +// 瀹夊叏鑾峰彇瀛樺偍椤癸紝澶辫触鏃惰繑鍥為粯璁ゅ�艰�屼笉鏄嫆缁漃romise +const getItemSafe = (key, defaultValue = null) => { + return new Promise((resolve) => { + if (!key) { + resolve(defaultValue); + return; + } + + wx.getStorage({ + key: key, + success: (res) => resolve(res.data), + fail: (err) => { + // 鍦ㄥ紑鍙戠幆澧冧笅璁板綍璀﹀憡锛屼絾涓嶄綔涓洪敊璇鐞� + // 鏁版嵁涓嶅瓨鍦ㄦ槸姝e父鎯呭喌锛屼笉闇�瑕佷綔涓鸿鍛婅緭鍑� + if (err.errMsg !== "getStorage:fail data not found") { + console.warn(`瀹夊叏鑾峰彇瀛樺偍椤� ${key} 澶辫触:`, err); + } else { + console.log(`瀛樺偍椤� ${key} 涓嶅瓨鍦紝杩斿洖榛樿鍊糮); + } + resolve(defaultValue); + } }); }); }; const removeItem = (key) => { return new Promise((resolve, reject) => { + if (!key) { + reject(new Error('瀛樺偍閿笉鑳戒负绌�')); + return; + } + wx.removeStorage({ key: key, success: resolve, - fail: reject + fail: (err) => { + console.error(`鍒犻櫎瀛樺偍椤� ${key} 澶辫触:`, err); + reject(err); + } }); }); }; @@ -33,21 +82,27 @@ return new Promise((resolve, reject) => { wx.clearStorage({ success: resolve, - fail: reject + fail: (err) => { + console.error('娓呴櫎瀛樺偍澶辫触:', err); + reject(err); + } }); }); }; /** * 鍒ゆ柇鏈湴鏄惁淇濆瓨浜嗘煇涓猭ey - * @param {} key + * @param {String} key 瀛樺偍閿� + * @returns {Boolean} 鏄惁瀛樺湪璇ラ敭 */ -const isHasKeySync= (key) => { +const isHasKeySync = (key) => { + if (!key) return false; + try { const res = wx.getStorageInfoSync(); return res.keys.includes(key); } catch (e) { - console.error('Failed to get storage info:', e); + console.error('鑾峰彇瀛樺偍淇℃伅澶辫触:', e); return false; } }; @@ -55,6 +110,7 @@ module.exports = { setItem, getItem, + getItemSafe, removeItem, clear, isHasKeySync -- Gitblit v1.8.0