Showing
23 changed files
with
827 additions
and
1134 deletions
... | ... | @@ -113,20 +113,6 @@ export default { |
113 | 113 | }, |
114 | 114 | onLoad() {}, |
115 | 115 | created() { |
116 | - let httpData = { | |
117 | - page: 1, | |
118 | - pageSize: 10, | |
119 | - entityType: 'DEVICE', | |
120 | - entityId: '' | |
121 | - }; | |
122 | - uni.$u.http | |
123 | - .get('/yt/alarm', { params: httpData }) | |
124 | - .then(res => { | |
125 | - this.list[2].badge = res.total; | |
126 | - }) | |
127 | - .catch(e => { | |
128 | - uni.$u.toast(e.data.message); | |
129 | - }); | |
130 | 116 | //获取页面路径 |
131 | 117 | let currentPages = getCurrentPages(); |
132 | 118 | let page = currentPages[currentPages.length - 1]; |
... | ... | @@ -139,7 +125,24 @@ export default { |
139 | 125 | }); |
140 | 126 | }, |
141 | 127 | methods: { |
128 | + loadData() { | |
129 | + let httpData = { | |
130 | + page: 1, | |
131 | + pageSize: 10 | |
132 | + }; | |
133 | + uni.$u.http | |
134 | + .get('/yt/alarm', { params: httpData }) | |
135 | + .then(res => { | |
136 | + this.list[2].badge = res.total; | |
137 | + }) | |
138 | + .catch(e => { | |
139 | + uni.$u.toast(e.data?.message); | |
140 | + }); | |
141 | + }, | |
142 | 142 | onTabbar(index) { |
143 | + if (index !== 5) { | |
144 | + this.loadData(); | |
145 | + } | |
143 | 146 | if (this.path !== this.list[index].url) { |
144 | 147 | uni.switchTab({ |
145 | 148 | url: '/' + this.list[index].url | ... | ... |
1 | 1 | import store from '@/store'; |
2 | 2 | import base from "@/config/baseUrl"; |
3 | 3 | import QQMapWX from '@/plugins/qqmap-wx-jssdk.js'; |
4 | -import { getAppLatLon} from '@/plugins/utils'; | |
4 | +import { | |
5 | + getAppLatLon | |
6 | +} from '@/plugins/utils'; | |
5 | 7 | |
6 | 8 | //檢查小程序更新 |
7 | -function mpUpData(callback){ | |
8 | - if (uni.getUpdateManager) { | |
9 | - const updateManager = uni.getUpdateManager(); | |
10 | - updateManager.onCheckForUpdate(function(res) { | |
11 | - // 请求完新版本信息的回调 | |
12 | - // console.log(res.hasUpdate); | |
13 | - // if(!res.hasUpdate){ | |
14 | - // uni.showToast({ | |
15 | - // title: '当前没有新版发布~', | |
16 | - // duration: 2000 | |
17 | - // }); | |
18 | - // } | |
19 | - let info = { | |
20 | - type: 1, | |
21 | - data: res | |
22 | - } | |
23 | - callback && callback(info) | |
24 | - }); | |
25 | - updateManager.onUpdateReady(function(res) { | |
26 | - uni.showModal({ | |
27 | - title: "更新提示", | |
28 | - content: "检测到新版本,是否下载新版本并重启小程序?", | |
29 | - success(res) { | |
30 | - if (res.confirm) { | |
31 | - // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 | |
32 | - updateManager.applyUpdate(); | |
33 | - } | |
34 | - } | |
35 | - }); | |
36 | - }); | |
37 | - updateManager.onUpdateFailed(function(res) { | |
38 | - // 新的版本下载失败 | |
39 | - uni.showModal({ | |
40 | - title: "已经有新版本了哟~", | |
41 | - content: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~", | |
42 | - showCancel: false | |
43 | - }); | |
44 | - }); | |
45 | - }else { | |
46 | - // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示 | |
47 | - // uni.showModal({ | |
48 | - // title: '提示', | |
49 | - // content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' | |
50 | - // }) | |
51 | - let info = { | |
52 | - type: 2 | |
53 | - } | |
54 | - callback && callback(info) | |
55 | - } | |
9 | +function mpUpData(callback) { | |
10 | + if (uni.getUpdateManager) { | |
11 | + const updateManager = uni.getUpdateManager(); | |
12 | + updateManager.onCheckForUpdate(function(res) { | |
13 | + // 请求完新版本信息的回调 | |
14 | + // console.log(res.hasUpdate); | |
15 | + // if(!res.hasUpdate){ | |
16 | + // uni.showToast({ | |
17 | + // title: '当前没有新版发布~', | |
18 | + // duration: 2000 | |
19 | + // }); | |
20 | + // } | |
21 | + let info = { | |
22 | + type: 1, | |
23 | + data: res | |
24 | + } | |
25 | + callback && callback(info) | |
26 | + }); | |
27 | + updateManager.onUpdateReady(function(res) { | |
28 | + uni.showModal({ | |
29 | + title: "更新提示", | |
30 | + content: "检测到新版本,是否下载新版本并重启小程序?", | |
31 | + success(res) { | |
32 | + if (res.confirm) { | |
33 | + // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 | |
34 | + updateManager.applyUpdate(); | |
35 | + } | |
36 | + } | |
37 | + }); | |
38 | + }); | |
39 | + updateManager.onUpdateFailed(function(res) { | |
40 | + // 新的版本下载失败 | |
41 | + uni.showModal({ | |
42 | + title: "已经有新版本了哟~", | |
43 | + content: "新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~", | |
44 | + showCancel: false | |
45 | + }); | |
46 | + }); | |
47 | + } else { | |
48 | + // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示 | |
49 | + // uni.showModal({ | |
50 | + // title: '提示', | |
51 | + // content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' | |
52 | + // }) | |
53 | + let info = { | |
54 | + type: 2 | |
55 | + } | |
56 | + callback && callback(info) | |
57 | + } | |
56 | 58 | } |
57 | 59 | |
58 | 60 | // App计算缓存 |
59 | -function formatSize(callback){ | |
60 | - let fileSizeString = "0B"; | |
61 | - plus.cache.calculate(function(size) { | |
62 | - let sizeCache = parseInt(size); | |
63 | - if (sizeCache == 0) { | |
64 | - fileSizeString = "0B"; | |
65 | - } else if (sizeCache < 1024) { | |
66 | - fileSizeString = sizeCache + "B"; | |
67 | - } else if (sizeCache < 1048576) { | |
68 | - fileSizeString = (sizeCache / 1024).toFixed(2) + "KB"; | |
69 | - } else if (sizeCache < 1073741824) { | |
70 | - fileSizeString = (sizeCache / 1048576).toFixed(2) + "MB"; | |
71 | - } else { | |
72 | - fileSizeString = (sizeCache / 1073741824).toFixed(2) + "GB"; | |
73 | - } | |
74 | - callback && callback(fileSizeString) | |
75 | - }); | |
61 | +function formatSize(callback) { | |
62 | + let fileSizeString = "0B"; | |
63 | + plus.cache.calculate(function(size) { | |
64 | + let sizeCache = parseInt(size); | |
65 | + if (sizeCache == 0) { | |
66 | + fileSizeString = "0B"; | |
67 | + } else if (sizeCache < 1024) { | |
68 | + fileSizeString = sizeCache + "B"; | |
69 | + } else if (sizeCache < 1048576) { | |
70 | + fileSizeString = (sizeCache / 1024).toFixed(2) + "KB"; | |
71 | + } else if (sizeCache < 1073741824) { | |
72 | + fileSizeString = (sizeCache / 1048576).toFixed(2) + "MB"; | |
73 | + } else { | |
74 | + fileSizeString = (sizeCache / 1073741824).toFixed(2) + "GB"; | |
75 | + } | |
76 | + callback && callback(fileSizeString) | |
77 | + }); | |
76 | 78 | } |
77 | 79 | /* |
78 | 80 | * App清理缓存 |
79 | 81 | * fileSizeString:当前缓存 |
80 | 82 | */ |
81 | -function clearCache(fileSizeString){ | |
82 | - if(fileSizeString == '0B'){ | |
83 | - uni.showToast({ | |
84 | - title: '暂无缓存~', | |
85 | - duration: 2000, | |
86 | - icon: 'none' | |
87 | - }); | |
88 | - return | |
89 | - } | |
90 | - return new Promise((resolve, reject) => { | |
91 | - let os = plus.os.name; | |
92 | - if (os == 'Android') { | |
93 | - let main = plus.android.runtimeMainActivity(); | |
94 | - let sdRoot = main.getCacheDir(); | |
95 | - let files = plus.android.invoke(sdRoot, "listFiles"); | |
96 | - let len = files.length; | |
97 | - for (let i = 0; i < len; i++) { | |
98 | - let filePath = '' + files[i]; // 没有找到合适的方法获取路径,这样写可以转成文件路径 | |
99 | - plus.io.resolveLocalFileSystemURL(filePath, function(entry) { | |
100 | - if (entry.isDirectory) { | |
101 | - entry.removeRecursively(function(entry) { //递归删除其下的所有文件及子目录 | |
102 | - uni.showToast({ | |
103 | - title: '缓存清理完成', | |
104 | - duration: 2000 | |
105 | - }); | |
106 | - // 回调 | |
107 | - resolve() | |
108 | - }, function(e) { | |
109 | - console.log(e.message) | |
110 | - }); | |
111 | - } else { | |
112 | - entry.remove(); | |
113 | - } | |
114 | - }, function(e) { | |
115 | - console.log('文件路径读取失败') | |
116 | - }); | |
117 | - } | |
118 | - } else { // ios | |
119 | - plus.cache.clear(function() { | |
120 | - uni.showToast({ | |
121 | - title: '缓存清理完成', | |
122 | - duration: 2000 | |
123 | - }); | |
124 | - // 回调 | |
125 | - resolve() | |
126 | - }); | |
127 | - } | |
128 | - }); | |
83 | +function clearCache(fileSizeString) { | |
84 | + if (fileSizeString == '0B') { | |
85 | + uni.showToast({ | |
86 | + title: '暂无缓存~', | |
87 | + duration: 2000, | |
88 | + icon: 'none' | |
89 | + }); | |
90 | + return | |
91 | + } | |
92 | + return new Promise((resolve, reject) => { | |
93 | + let os = plus.os.name; | |
94 | + if (os == 'Android') { | |
95 | + let main = plus.android.runtimeMainActivity(); | |
96 | + let sdRoot = main.getCacheDir(); | |
97 | + let files = plus.android.invoke(sdRoot, "listFiles"); | |
98 | + let len = files.length; | |
99 | + for (let i = 0; i < len; i++) { | |
100 | + let filePath = '' + files[i]; // 没有找到合适的方法获取路径,这样写可以转成文件路径 | |
101 | + plus.io.resolveLocalFileSystemURL(filePath, function(entry) { | |
102 | + if (entry.isDirectory) { | |
103 | + entry.removeRecursively(function(entry) { //递归删除其下的所有文件及子目录 | |
104 | + uni.showToast({ | |
105 | + title: '缓存清理完成', | |
106 | + duration: 2000 | |
107 | + }); | |
108 | + // 回调 | |
109 | + resolve() | |
110 | + }, function(e) { | |
111 | + console.log(e.message) | |
112 | + }); | |
113 | + } else { | |
114 | + entry.remove(); | |
115 | + } | |
116 | + }, function(e) { | |
117 | + console.log('文件路径读取失败') | |
118 | + }); | |
119 | + } | |
120 | + } else { // ios | |
121 | + plus.cache.clear(function() { | |
122 | + uni.showToast({ | |
123 | + title: '缓存清理完成', | |
124 | + duration: 2000 | |
125 | + }); | |
126 | + // 回调 | |
127 | + resolve() | |
128 | + }); | |
129 | + } | |
130 | + }); | |
129 | 131 | } |
130 | 132 | |
131 | 133 | //e 扫码参数 |
132 | 134 | //flag uni.scanCode方法点击扫码的参数没有q,为true转换参数 |
133 | -function scene(e,callback,flag=false){ | |
134 | - store.commit("setChatScenesInfo", {});//先请空 | |
135 | - console.log(e,'scene') | |
136 | - var qrCodeValue = '' | |
137 | - // #ifndef MP-ALIPAY | |
138 | - if(flag){ | |
139 | - e.query = {q:e.result} | |
140 | - console.log(e,'scene-转换后') | |
141 | - } | |
142 | - if(e.query.q){ | |
143 | - let scene = decodeURIComponent(e.query.q).split("?")[1]; | |
144 | - scene = scene.split("&"); | |
145 | - let data = { | |
146 | - //场景值 | |
147 | - scene: e.scene, | |
148 | - }; | |
149 | - scene.forEach(item => { | |
150 | - let arr = item.split("="); | |
151 | - if (arr.length == 2) { | |
152 | - data[arr[0]] = arr[1]; | |
153 | - } | |
154 | - }); | |
155 | - store.commit("setChatScenesInfo", Object.assign(e.query, data)); | |
156 | - console.log(store.state.chatScenesInfo,'scene--解码参数') | |
157 | - }else{ | |
158 | - store.commit("setChatScenesInfo", Object.assign(e.query, {path:e.path})); | |
159 | - } | |
160 | - // #endif | |
161 | - // #ifdef MP-ALIPAY | |
162 | - var AliqrCode = {} | |
163 | - if(flag){ | |
164 | - e.query = {qrCode:e.result} | |
165 | - console.log(e,'scene-转换后') | |
166 | - } | |
167 | - if (e.query && e.query.qrCode) { | |
168 | - AliqrCode.q = e.query.qrCode; | |
169 | - } else if (e.query && !e.query.qrCode) { | |
170 | - AliqrCode = e.query; | |
171 | - } | |
172 | - if (AliqrCode.q) { | |
173 | - var queryParam = AliqrCode.q.split("?")[1] //二维码清除域名 | |
174 | - var scene = queryParam.split("&"); | |
175 | - let data = {}; | |
176 | - scene.forEach(item => { | |
177 | - let arr = item.split("="); | |
178 | - if (arr.length == 2) { | |
179 | - data[arr[0]] = arr[1]; | |
180 | - } | |
181 | - }); | |
182 | - store.commit("setChatScenesInfo", Object.assign(AliqrCode, data)); | |
183 | - console.log(store.state.chatScenesInfo,'scene--支付宝小程序解码参数') | |
184 | - }else{ | |
185 | - store.commit("setChatScenesInfo", Object.assign(AliqrCode, {path:e.path})); | |
186 | - } | |
187 | - // #endif | |
188 | - callback && callback() | |
135 | +function scene(e, callback, flag = false) { | |
136 | + store.commit("setChatScenesInfo", {}); //先请空 | |
137 | + console.log(e, 'scene') | |
138 | + var qrCodeValue = '' | |
139 | + // #ifndef MP-ALIPAY | |
140 | + if (flag) { | |
141 | + e.query = { | |
142 | + q: e.result | |
143 | + } | |
144 | + console.log(e, 'scene-转换后') | |
145 | + } | |
146 | + if (e.query.q) { | |
147 | + let scene = decodeURIComponent(e.query.q).split("?")[1]; | |
148 | + scene = scene.split("&"); | |
149 | + let data = { | |
150 | + //场景值 | |
151 | + scene: e.scene, | |
152 | + }; | |
153 | + scene.forEach(item => { | |
154 | + let arr = item.split("="); | |
155 | + if (arr.length == 2) { | |
156 | + data[arr[0]] = arr[1]; | |
157 | + } | |
158 | + }); | |
159 | + store.commit("setChatScenesInfo", Object.assign(e.query, data)); | |
160 | + console.log(store.state.chatScenesInfo, 'scene--解码参数') | |
161 | + } else { | |
162 | + store.commit("setChatScenesInfo", Object.assign(e.query, { | |
163 | + path: e.path | |
164 | + })); | |
165 | + } | |
166 | + // #endif | |
167 | + // #ifdef MP-ALIPAY | |
168 | + var AliqrCode = {} | |
169 | + if (flag) { | |
170 | + e.query = { | |
171 | + qrCode: e.result | |
172 | + } | |
173 | + console.log(e, 'scene-转换后') | |
174 | + } | |
175 | + if (e.query && e.query.qrCode) { | |
176 | + AliqrCode.q = e.query.qrCode; | |
177 | + } else if (e.query && !e.query.qrCode) { | |
178 | + AliqrCode = e.query; | |
179 | + } | |
180 | + if (AliqrCode.q) { | |
181 | + var queryParam = AliqrCode.q.split("?")[1] //二维码清除域名 | |
182 | + var scene = queryParam.split("&"); | |
183 | + let data = {}; | |
184 | + scene.forEach(item => { | |
185 | + let arr = item.split("="); | |
186 | + if (arr.length == 2) { | |
187 | + data[arr[0]] = arr[1]; | |
188 | + } | |
189 | + }); | |
190 | + store.commit("setChatScenesInfo", Object.assign(AliqrCode, data)); | |
191 | + console.log(store.state.chatScenesInfo, 'scene--支付宝小程序解码参数') | |
192 | + } else { | |
193 | + store.commit("setChatScenesInfo", Object.assign(AliqrCode, { | |
194 | + path: e.path | |
195 | + })); | |
196 | + } | |
197 | + // #endif | |
198 | + callback && callback() | |
189 | 199 | } |
190 | 200 | |
191 | 201 | /* |
... | ... | @@ -194,92 +204,120 @@ function scene(e,callback,flag=false){ |
194 | 204 | * errCallback:失败回调 |
195 | 205 | * isOpenSetting:是否检验授权 默认不检验 |
196 | 206 | */ |
197 | -function loGetLocation(successCallback, errCallback, isOpenSetting=false){ | |
198 | - var that = this | |
199 | - getAppLatLon(item=>{ | |
200 | - if(base.mapData?.key){ | |
201 | - var latitude = item.latitude; // 纬度,浮点数,范围为90 ~ -90 | |
202 | - var longitude = item.longitude; // 经度,浮点数,范围为180 ~ -180 | |
203 | - var qqmapsdk = new QQMapWX({ | |
204 | - key: base.mapData?.key, // 您的key---秘钥key值可通过https://lbs.qq.com/qqmap_wx_jssdk/index.html申请 | |
205 | - // #ifdef H5 | |
206 | - vm: that | |
207 | - // #endif | |
208 | - }); | |
209 | - // 地址逆解析可获取省市区等信息 | |
210 | - qqmapsdk.reverseGeocoder({ | |
211 | - location: { latitude: latitude, longitude: longitude }, | |
212 | - sig: base.mapData?.sk, | |
213 | - success: function(res) { | |
214 | - store.commit('setLocateInformation',res.result) | |
215 | - successCallback && successCallback(res.result) | |
216 | - },fail: function(err) { | |
217 | - item.location = { | |
218 | - lat:latitude, | |
219 | - lng:longitude, | |
220 | - } | |
221 | - store.commit('setLocateInformation',item) | |
222 | - successCallback && successCallback(item) | |
223 | - } | |
224 | - }); | |
225 | - }else{ | |
226 | - item.location = { | |
227 | - lat:item.latitude, | |
228 | - lng:item.longitude, | |
229 | - } | |
230 | - store.commit('setLocateInformation',item) | |
231 | - successCallback && successCallback(item) | |
232 | - } | |
233 | - },err=>{ | |
234 | - store.commit('setLocateInformation',{}) | |
235 | - errCallback && errCallback(err) | |
236 | - },isOpenSetting) | |
207 | +function loGetLocation(successCallback, errCallback, isOpenSetting = false) { | |
208 | + var that = this | |
209 | + getAppLatLon(item => { | |
210 | + if (base.mapData?.key) { | |
211 | + var latitude = item.latitude; // 纬度,浮点数,范围为90 ~ -90 | |
212 | + var longitude = item.longitude; // 经度,浮点数,范围为180 ~ -180 | |
213 | + var qqmapsdk = new QQMapWX({ | |
214 | + key: base.mapData | |
215 | + ?.key, // 您的key---秘钥key值可通过https://lbs.qq.com/qqmap_wx_jssdk/index.html申请 | |
216 | + // #ifdef H5 | |
217 | + vm: that | |
218 | + // #endif | |
219 | + }); | |
220 | + // 地址逆解析可获取省市区等信息 | |
221 | + qqmapsdk.reverseGeocoder({ | |
222 | + location: { | |
223 | + latitude: latitude, | |
224 | + longitude: longitude | |
225 | + }, | |
226 | + sig: base.mapData?.sk, | |
227 | + success: function(res) { | |
228 | + store.commit('setLocateInformation', res.result) | |
229 | + successCallback && successCallback(res.result) | |
230 | + }, | |
231 | + fail: function(err) { | |
232 | + item.location = { | |
233 | + lat: latitude, | |
234 | + lng: longitude, | |
235 | + } | |
236 | + store.commit('setLocateInformation', item) | |
237 | + successCallback && successCallback(item) | |
238 | + } | |
239 | + }); | |
240 | + } else { | |
241 | + item.location = { | |
242 | + lat: item.latitude, | |
243 | + lng: item.longitude, | |
244 | + } | |
245 | + store.commit('setLocateInformation', item) | |
246 | + successCallback && successCallback(item) | |
247 | + } | |
248 | + }, err => { | |
249 | + store.commit('setLocateInformation', {}) | |
250 | + errCallback && errCallback(err) | |
251 | + }, isOpenSetting) | |
237 | 252 | } |
238 | 253 | // 选择地址 |
239 | 254 | function choiseRegion(callback) { |
240 | - var that = this; | |
241 | - uni.chooseLocation({ | |
242 | - success: function(res) { | |
243 | - callback && callback(res) | |
244 | - }, | |
245 | - fail: function() { | |
246 | - uni.getSetting({ | |
247 | - success: function(res) { | |
248 | - if (res.authSetting['scope.userLocation']) { | |
249 | - uni.showModal({ | |
250 | - title: '是否授权当前位置', | |
251 | - content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用', | |
252 | - success: function(tip) { | |
253 | - if (tip.confirm) { | |
254 | - uni.openSetting({ | |
255 | - success: function(data) { | |
256 | - if (data.authSetting["scope.userLocation"] === true) { | |
257 | - that.$u.toast('授权成功~'); | |
258 | - //授权成功之后,再调用chooseLocation选择地方 | |
259 | - that.choiseRegion() | |
260 | - } else { | |
261 | - that.$u.toast('授权失败~'); | |
262 | - } | |
263 | - } | |
264 | - }) | |
265 | - } | |
266 | - } | |
267 | - }) | |
268 | - } | |
269 | - }, | |
270 | - fail: function(res) { | |
271 | - that.$u.toast('调用授权窗口失败~'); | |
272 | - } | |
273 | - }) | |
274 | - } | |
275 | - }) | |
255 | + var that = this; | |
256 | + uni.chooseLocation({ | |
257 | + success: function(res) { | |
258 | + callback && callback(res) | |
259 | + }, | |
260 | + fail: function() { | |
261 | + uni.getSetting({ | |
262 | + success: function(res) { | |
263 | + if (res.authSetting['scope.userLocation']) { | |
264 | + uni.showModal({ | |
265 | + title: '是否授权当前位置', | |
266 | + content: '需要获取您的地理位置,请确认授权,否则地图功能将无法使用', | |
267 | + success: function(tip) { | |
268 | + if (tip.confirm) { | |
269 | + uni.openSetting({ | |
270 | + success: function(data) { | |
271 | + if (data.authSetting[ | |
272 | + "scope.userLocation" | |
273 | + ] === true) { | |
274 | + that.$u.toast('授权成功~'); | |
275 | + //授权成功之后,再调用chooseLocation选择地方 | |
276 | + that.choiseRegion() | |
277 | + } else { | |
278 | + that.$u.toast('授权失败~'); | |
279 | + } | |
280 | + } | |
281 | + }) | |
282 | + } | |
283 | + } | |
284 | + }) | |
285 | + } | |
286 | + }, | |
287 | + fail: function(res) { | |
288 | + that.$u.toast('调用授权窗口失败~'); | |
289 | + } | |
290 | + }) | |
291 | + } | |
292 | + }) | |
276 | 293 | } |
277 | 294 | |
295 | + | |
296 | +function transOrgFunc(arr) { | |
297 | + arr.forEach((item) => { | |
298 | + if (item.name) { | |
299 | + item.name = item.name; | |
300 | + } | |
301 | + if (item.id) { | |
302 | + item.value = item.id; | |
303 | + item.checked = false | |
304 | + item.id = item.id | |
305 | + } | |
306 | + if (item.children) { | |
307 | + if (item.children.length) { | |
308 | + transOrgFunc(item.children); | |
309 | + } | |
310 | + } | |
311 | + }); | |
312 | + return arr | |
313 | +}; | |
314 | + | |
278 | 315 | export { |
279 | - mpUpData, //小程序更新 | |
280 | - formatSize, //App计算缓存 | |
281 | - clearCache, //App清理缓存 | |
282 | - scene, //扫码信息 | |
283 | - loGetLocation, //获取定位信息 | |
284 | - choiseRegion, //选择地址 | |
285 | -} | |
\ No newline at end of file | ||
316 | + mpUpData, //小程序更新 | |
317 | + formatSize, //App计算缓存 | |
318 | + clearCache, //App清理缓存 | |
319 | + scene, //扫码信息 | |
320 | + loGetLocation, //获取定位信息 | |
321 | + choiseRegion, //选择地址 | |
322 | + transOrgFunc //转化树组件 | |
323 | +} | ... | ... |
config/constant.js
0 → 100644
1 | 1 | import store from '@/store'; |
2 | -import { h5Login } from '@/config/h5Utils'; | |
2 | +import { | |
3 | + h5Login | |
4 | +} from '@/config/h5Utils'; | |
3 | 5 | // APP--授权登录 |
4 | 6 | // type授权登录平台 'qq'、'weixin'、'apple' |
5 | -export const loginApp = (type,successCallback,errorCallback) => { | |
6 | - uni.login({ | |
7 | - provider: type, | |
8 | - success: function(loginRes) { | |
9 | - // 获取用户信息 | |
10 | - uni.getUserInfo({ | |
11 | - provider: type, | |
12 | - success: function(infoRes) { | |
13 | - let data = {} | |
14 | - if(type=='qq'){ | |
15 | - data = { | |
16 | - 'openid': loginRes.authResult.openid, | |
17 | - 'nickname': infoRes.userInfo.nickname, | |
18 | - 'gender': infoRes.userInfo.gender, | |
19 | - 'province': infoRes.userInfo.province, | |
20 | - 'city': infoRes.userInfo.city, | |
21 | - 'figureurl': infoRes.userInfo.figureurl_qq | |
22 | - } | |
23 | - }else if(type=='weixin'){ | |
24 | - data = { | |
25 | - 'openid': loginRes.authResult.openid, | |
26 | - 'nickname': infoRes.userInfo.nickName, | |
27 | - 'sex': infoRes.userInfo.gender, | |
28 | - 'province': infoRes.userInfo.province, | |
29 | - 'city': infoRes.userInfo.city, | |
30 | - 'country': infoRes.userInfo.country, | |
31 | - 'headimgurl': infoRes.userInfo.avatarUrl, | |
32 | - 'unionid': loginRes.authResult.unionid | |
33 | - } | |
34 | - }else if(type=='apple'){ | |
35 | - data = { | |
36 | - verifyType: 'password', | |
37 | - personalPhone: '13888888888', | |
38 | - personalPhoneCountryCode: '86', | |
39 | - password:'123456' | |
40 | - } | |
41 | - } | |
42 | - successCallback && successCallback(data) | |
43 | - } | |
44 | - }); | |
45 | - },fail: function (err) { | |
46 | - console.log(res, "失败") | |
47 | - errorCallback && errorCallback(res) | |
48 | - } | |
49 | - }); | |
7 | +export const loginApp = (type, successCallback, errorCallback) => { | |
8 | + uni.login({ | |
9 | + provider: type, | |
10 | + success: function(loginRes) { | |
11 | + // 获取用户信息 | |
12 | + uni.getUserInfo({ | |
13 | + provider: type, | |
14 | + success: function(infoRes) { | |
15 | + let data = {} | |
16 | + if (type == 'qq') { | |
17 | + data = { | |
18 | + 'openid': loginRes.authResult.openid, | |
19 | + 'nickname': infoRes.userInfo.nickname, | |
20 | + 'gender': infoRes.userInfo.gender, | |
21 | + 'province': infoRes.userInfo.province, | |
22 | + 'city': infoRes.userInfo.city, | |
23 | + 'figureurl': infoRes.userInfo.figureurl_qq | |
24 | + } | |
25 | + } else if (type == 'weixin') { | |
26 | + data = { | |
27 | + 'openid': loginRes.authResult.openid, | |
28 | + 'nickname': infoRes.userInfo.nickName, | |
29 | + 'sex': infoRes.userInfo.gender, | |
30 | + 'province': infoRes.userInfo.province, | |
31 | + 'city': infoRes.userInfo.city, | |
32 | + 'country': infoRes.userInfo.country, | |
33 | + 'headimgurl': infoRes.userInfo.avatarUrl, | |
34 | + 'unionid': loginRes.authResult.unionid | |
35 | + } | |
36 | + } else if (type == 'apple') { | |
37 | + data = { | |
38 | + verifyType: 'password', | |
39 | + personalPhone: '13888888888', | |
40 | + personalPhoneCountryCode: '86', | |
41 | + password: '123456' | |
42 | + } | |
43 | + } | |
44 | + successCallback && successCallback(data) | |
45 | + } | |
46 | + }); | |
47 | + }, | |
48 | + fail: function(err) { | |
49 | + console.log(res, "失败") | |
50 | + errorCallback && errorCallback(res) | |
51 | + } | |
52 | + }); | |
50 | 53 | } |
51 | 54 | // 微信/支付宝小程序---手机号授权登录时使用 |
52 | 55 | // info: uni.login获取的参数 |
53 | 56 | export const getPhoneInfo = (info, successCallback, errCallback) => { |
54 | - let httpData = {} | |
55 | - // #ifdef MP-WEIXIN | |
56 | - httpData = { | |
57 | - code: info.code, //小程序code | |
58 | - iv: info.iv, //小程序加密算法的初始向量 | |
59 | - encryptedData: info.encryptedData, //包括敏感数据在内的完整用户信息的加密数据 | |
60 | - }; | |
61 | - // #endif | |
62 | - // #ifdef MP-ALIPAY | |
57 | + let httpData = {} | |
58 | + // #ifdef MP-WEIXIN | |
59 | + httpData = { | |
60 | + code: info.code, //小程序code | |
61 | + iv: info.iv, //小程序加密算法的初始向量 | |
62 | + encryptedData: info.encryptedData, //包括敏感数据在内的完整用户信息的加密数据 | |
63 | + }; | |
64 | + // #endif | |
65 | + // #ifdef MP-ALIPAY | |
63 | 66 | httpData = { |
64 | 67 | code: '', //小程序code |
65 | 68 | iv: '', //小程序加密算法的初始向量 |
66 | 69 | encryptedData: info, //包括敏感数据在内的完整用户信息的加密数据 |
67 | 70 | }; |
68 | - // #endif | |
69 | - | |
70 | - // 此时需要您的接口返回个人信息 | |
71 | + // #endif | |
72 | + | |
73 | + // 此时需要您的接口返回个人信息 | |
71 | 74 | // uni.$u.http.post('您的接口', httpData).then(res => { |
72 | - var loginInfo = { | |
73 | - // userId: res.id, | |
74 | - // sessionId: res.sessionId, | |
75 | - // phoneNum: res.phoneNum, | |
76 | - // userName: res.userName, | |
77 | - // openId: res.openId, | |
78 | - }; | |
79 | - successCallback && successCallback(loginInfo) | |
80 | - // }, err => { | |
81 | - // errCallback && errCallback(err) | |
82 | - // }); | |
75 | + var loginInfo = { | |
76 | + // userId: res.id, | |
77 | + // sessionId: res.sessionId, | |
78 | + // phoneNum: res.phoneNum, | |
79 | + // userName: res.userName, | |
80 | + // openId: res.openId, | |
81 | + }; | |
82 | + successCallback && successCallback(loginInfo) | |
83 | + // }, err => { | |
84 | + // errCallback && errCallback(err) | |
85 | + // }); | |
83 | 86 | } |
84 | 87 | // 微信/支付宝小程序---通用授权个人信息登录 |
85 | -export const getUserInfo = (successCallback,errorCallback) => { | |
86 | - uni.showLoading({ | |
87 | - title: '正在申请授权', | |
88 | - }); | |
89 | - // #ifdef MP-WEIXIN | |
90 | - uni.getUserProfile({ | |
91 | - desc: '用于完善会员资料', | |
92 | - success: function(res) { | |
93 | - uni.hideLoading() | |
94 | - var offUserInfo = res.userInfo | |
95 | - successCallback && successCallback(offUserInfo) | |
96 | - },fail: (res) => { | |
97 | - uni.hideLoading() | |
98 | - errorCallback && errorCallback(res) | |
99 | - } | |
100 | - }) | |
101 | - // #endif | |
102 | - // #ifdef MP-ALIPAY | |
103 | - uni.getOpenUserInfo({ | |
104 | - success: (res) => { | |
105 | - uni.hideLoading() | |
106 | - var offUserInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 response | |
107 | - offUserInfo.avatarUrl = offUserInfo.avatar | |
108 | - successCallback && successCallback(offUserInfo) | |
109 | - },fail: (res) => { | |
110 | - uni.hideLoading() | |
111 | - console.log(res, "失败") | |
112 | - errorCallback && errorCallback(res) | |
113 | - } | |
114 | - }) | |
115 | - // #endif | |
88 | +export const getUserInfo = (successCallback, errorCallback) => { | |
89 | + uni.showLoading({ | |
90 | + title: '正在申请授权', | |
91 | + }); | |
92 | + // #ifdef MP-WEIXIN | |
93 | + uni.getUserProfile({ | |
94 | + desc: '用于完善会员资料', | |
95 | + success: function(res) { | |
96 | + uni.hideLoading() | |
97 | + var offUserInfo = res.userInfo | |
98 | + successCallback && successCallback(offUserInfo) | |
99 | + }, | |
100 | + fail: (res) => { | |
101 | + uni.hideLoading() | |
102 | + errorCallback && errorCallback(res) | |
103 | + } | |
104 | + }) | |
105 | + // #endif | |
106 | + // #ifdef MP-ALIPAY | |
107 | + uni.getOpenUserInfo({ | |
108 | + success: (res) => { | |
109 | + uni.hideLoading() | |
110 | + var offUserInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 response | |
111 | + offUserInfo.avatarUrl = offUserInfo.avatar | |
112 | + successCallback && successCallback(offUserInfo) | |
113 | + }, | |
114 | + fail: (res) => { | |
115 | + uni.hideLoading() | |
116 | + console.log(res, "失败") | |
117 | + errorCallback && errorCallback(res) | |
118 | + } | |
119 | + }) | |
120 | + // #endif | |
116 | 121 | } |
117 | 122 | |
118 | 123 | //判断是否登录(所有端) |
119 | 124 | export const judgeLogin = (callback) => { |
120 | - let storeUserInfo = store.state.userInfo; | |
121 | - if (!storeUserInfo.userId){ // nvue页面读取不到vuex里面数据,将取缓存 | |
122 | - storeUserInfo = uni.getStorageSync('userInfo') | |
123 | - } | |
124 | - if (!storeUserInfo.token) { | |
125 | - // #ifdef MP | |
126 | - store.commit('setLoginPopupShow', true); | |
127 | - // #endif | |
128 | - // #ifdef APP-PLUS | |
129 | - uni.$showModal({ | |
130 | - title: "登录提示", | |
131 | - confirmVal:'去登录', | |
132 | - cancelVal:'再逛会', | |
133 | - content:'此时此刻需要您登录喔~', | |
134 | - }).then(res=>{ | |
135 | - uni.navigateTo({ | |
136 | - url: "/pages/user/login" | |
137 | - }); | |
138 | - }).catch(res=>{}) | |
139 | - // #endif | |
140 | - // #ifdef H5 | |
141 | - h5Login(); | |
142 | - // #endif | |
143 | - }else{ | |
144 | - callback() | |
145 | - } | |
146 | -} | |
\ No newline at end of file | ||
125 | + let storeUserInfo = store.state.userInfo; | |
126 | + if (!storeUserInfo.userId) { // nvue页面读取不到vuex里面数据,将取缓存 | |
127 | + storeUserInfo = uni.getStorageSync('userInfo') | |
128 | + } | |
129 | + if (!storeUserInfo.isToken) { | |
130 | + // #ifdef MP | |
131 | + return uni.$u.toast('请登录') | |
132 | + // uni.$showModal({ | |
133 | + // title: "登录提示", | |
134 | + // confirmVal: '去登录', | |
135 | + // cancelVal: '再逛会', | |
136 | + // content: '此时此刻需要您登录喔~', | |
137 | + // }).then(res => { | |
138 | + // uni.navigateTo({ | |
139 | + // url: "/pages/personal/login" | |
140 | + // }); | |
141 | + // }).catch(res => {}) | |
142 | + // store.commit('setLoginPopupShow', true); | |
143 | + // #endif | |
144 | + // #ifdef APP-PLUS | |
145 | + uni.$showModal({ | |
146 | + title: "登录提示", | |
147 | + confirmVal: '去登录', | |
148 | + cancelVal: '再逛会', | |
149 | + content: '此时此刻需要您登录喔~', | |
150 | + }).then(res => { | |
151 | + uni.navigateTo({ | |
152 | + url: "/pages/personal/login" | |
153 | + }); | |
154 | + }).catch(res => {}) | |
155 | + // #endif | |
156 | + // #ifdef H5 | |
157 | + h5Login(); | |
158 | + // #endif | |
159 | + } else { | |
160 | + callback() | |
161 | + } | |
162 | +} | ... | ... |
... | ... | @@ -7,14 +7,12 @@ import { |
7 | 7 | // 初始化请求配置 |
8 | 8 | uni.$u.http.setConfig((config) => { |
9 | 9 | let token |
10 | + //#ifndef H5 | |
10 | 11 | token = store.state.userInfo.isToken || (uni.getStorageSync('userInfo').isToken || undefined) |
11 | - //#ifdef MP | |
12 | - token = store.state.userInfo.isToken || (wx.getStorageSync('userInfo').isToken || undefined) | |
13 | 12 | //#endif |
14 | 13 | // #ifdef H5 |
15 | - window.sessionStorage.getItem('userInfo'); | |
14 | + window.sessionStorage.getItem('userInfo').isToken; | |
16 | 15 | // #endif |
17 | - console.log('Get Token',token); | |
18 | 16 | if (!token) { |
19 | 17 | uni.showToast({ |
20 | 18 | title: '请先登录', |
... | ... | @@ -47,14 +45,12 @@ uni.$u.http.interceptors.request.use((config) => { // 蜿ッ菴ソ逕ィasync await 蛛壼シ |
47 | 45 | config.data = config.data || {} |
48 | 46 | // 根据custom参数中配置的是否需要token,添加对应的请求头 |
49 | 47 | if (config?.custom?.auth) { |
50 | - config.header.token = store.state.userInfo.token | |
48 | + config.header.Authorization = 'Bearer ' + store.state.userInfo.isToken | |
51 | 49 | } |
52 | - // console.log("请求开始", config); | |
53 | 50 | if (config?.custom?.load) { |
54 | 51 | //打开加载动画 |
55 | 52 | store.commit("setLoadingShow", true); |
56 | 53 | } |
57 | - | |
58 | 54 | return config |
59 | 55 | }, config => { // 可使用async await 做异步操作 |
60 | 56 | return Promise.reject(config) |
... | ... | @@ -100,13 +96,19 @@ uni.$u.http.interceptors.response.use((response) => { |
100 | 96 | store.commit("setLoadingShow", false); |
101 | 97 | // 对响应错误做点什么 (statusCode !== 200) |
102 | 98 | let errorData = '请检查网络或服务器' |
103 | - let message = response.data.message || response.errMsg | |
99 | + let message = response.data?.message || response?.errMsg | |
104 | 100 | if (message == "request:fail url not in domain list") { |
105 | 101 | errorData = '检查请求域名是否添加了域名白名单' |
106 | 102 | } else if (message == 'request:fail timeout') { |
107 | 103 | errorData = '请求超时:请检查网络' |
108 | 104 | } else if (message == 'Token has expired') { |
109 | 105 | errorData = 'Token失效,请重新登录' |
106 | + setTimeout(() => { | |
107 | + uni.reLaunch({ | |
108 | + url: '/pages/personal/login' | |
109 | + }) | |
110 | + }, 500) | |
111 | + store.commit('emptyUserInfo') | |
110 | 112 | } else { |
111 | 113 | errorData = message || '请检查网络或服务器' |
112 | 114 | } | ... | ... |
... | ... | @@ -11,9 +11,7 @@ |
11 | 11 | { |
12 | 12 | "path": "pages/device/device", |
13 | 13 | "style": { |
14 | - "navigationBarTitleText": "设备", | |
15 | - "backgroundColorTop": "gray", | |
16 | - "backgroundColorBottom": "gray" | |
14 | + "navigationBarTitleText": "设备" | |
17 | 15 | } |
18 | 16 | }, |
19 | 17 | { |
... | ... | @@ -88,6 +86,12 @@ |
88 | 86 | "navigationBarTitleText": "查看摄像头" |
89 | 87 | } |
90 | 88 | |
89 | + }, | |
90 | + { | |
91 | + "path": "pages/index/camera/org/org", | |
92 | + "style": { | |
93 | + "navigationBarTitleText": "组织筛选" | |
94 | + } | |
91 | 95 | }, { |
92 | 96 | "path": "pages/index/orgStatus/orgStatus", |
93 | 97 | "style": { | ... | ... |
... | ... | @@ -11,18 +11,18 @@ |
11 | 11 | </f-navbar> |
12 | 12 | <!-- 公共组件-每个页面必须引入 --> |
13 | 13 | <public-module></public-module> |
14 | - <view class="org-sty"> | |
14 | + <view @click="openOrg" class="org-sty"> | |
15 | 15 | <view class="org-item"> |
16 | 16 | <view class="u-flex" style="flex-direction: row;margin-top: 26rpx;margin-left: 15rpx;"> |
17 | 17 | <text style="color:#333333;font-size: 15px;margin-left: 14rpx;">组织关系</text> |
18 | 18 | </view> |
19 | 19 | <view style="margin-top: 5rpx;margin-left: 15rpx;flex-direction: row;" class="u-flex"> |
20 | 20 | <image style="margin-left: 14rpx;width: 30rpx;height: 30rpx;" src="../../static/org.png" mode=""></image> |
21 | - <text style="margin-left: 10rpx;color:#666666;font-size: 12px;">设备数:1234</text> | |
21 | + <text style="margin-left: 10rpx;color:#666666;font-size: 12px;">告警数:{{ alertTotal }}</text> | |
22 | 22 | </view> |
23 | 23 | </view> |
24 | 24 | <view class="org-item" style=""> |
25 | - <image @click="openOrg" style="width: 6px;height: 10px;float: right; margin-right: 34rpx; margin-top: 58rpx;" src="../../static/right-arrow.png" mode=""></image> | |
25 | + <image style="width: 6px;height: 10px;float: right; margin-right: 34rpx; margin-top: 58rpx;" src="../../static/right-arrow.png" mode=""></image> | |
26 | 26 | </view> |
27 | 27 | </view> |
28 | 28 | <mescroll-body ref="mescrollRef" @init="mescrollInit" :down="downOption" @down="downCallback" @up="upCallback"> |
... | ... | @@ -217,6 +217,7 @@ |
217 | 217 | import fTabbar from '@/components/module/f-tabbar/f-tabbar'; |
218 | 218 | import fNavbar from '@/components/module/f-navbar/f-navbar'; |
219 | 219 | import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js'; |
220 | +import { pageNumber, pageSize } from '@/config/constant.js'; | |
220 | 221 | |
221 | 222 | export default { |
222 | 223 | mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件) |
... | ... | @@ -398,12 +399,24 @@ export default { |
398 | 399 | bgColor: '#F6F6F6', |
399 | 400 | textColor: '#F6F6F6' |
400 | 401 | } |
401 | - ] | |
402 | + ], | |
403 | + ordId: '', | |
404 | + detailStatus: false, | |
405 | + alertTotal: 0 | |
402 | 406 | }; |
403 | 407 | }, |
404 | 408 | onShow() { |
405 | - console.log('Show'); | |
406 | - this.loadData(1); | |
409 | + if (this.detailStatus) { | |
410 | + this.loadData(1); | |
411 | + } | |
412 | + if (this.ordId == '') { | |
413 | + } else { | |
414 | + this.loadData(1, null, null, null, null, null, this.ordId); | |
415 | + } | |
416 | + }, | |
417 | + onHide() { | |
418 | + this.ordId = ''; | |
419 | + this.detailStatus = false; | |
407 | 420 | }, |
408 | 421 | onLoad(e) { |
409 | 422 | // 隐藏原生的tabbar |
... | ... | @@ -485,7 +498,7 @@ export default { |
485 | 498 | this.page.num += 1; |
486 | 499 | this.loadData(this.page.num); |
487 | 500 | }, |
488 | - loadData(pageNo, statusV, startTimeV, endTimeV, severityV, deviceTypeV) { | |
501 | + loadData(pageNo, statusV, startTimeV, endTimeV, severityV, deviceTypeV, organizationV) { | |
489 | 502 | let httpData = { |
490 | 503 | page: pageNo, |
491 | 504 | pageSize: 10, |
... | ... | @@ -493,13 +506,15 @@ export default { |
493 | 506 | startTime: startTimeV, |
494 | 507 | endTime: endTimeV, |
495 | 508 | severity: severityV, |
496 | - deviceType: deviceTypeV | |
509 | + deviceType: deviceTypeV, | |
510 | + organizationId: organizationV | |
497 | 511 | }; |
498 | 512 | uni.$u.http |
499 | 513 | .get('/yt/alarm', { params: httpData, custom: { load: false } }) |
500 | 514 | .then(res => { |
501 | 515 | uni.stopPullDownRefresh(); |
502 | 516 | this.mescroll.endByPage(res.items.length, res.total); |
517 | + this.alertTotal = res.total; | |
503 | 518 | if (pageNo == 1) { |
504 | 519 | this.list = res.items; |
505 | 520 | } else { | ... | ... |
... | ... | @@ -8,7 +8,6 @@ |
8 | 8 | class="u-flex" |
9 | 9 | style="flex-direction: row;justify-content: space-between;margin-top: 10rpx;line-height:68rpx;width: 614rpx;height:90rpx;text-align: left;border-bottom: 0.1rpx solid #F0F0F0;" |
10 | 10 | > |
11 | - {{list}} | |
12 | 11 | <text style="color:#333333;font-size: 15px;">{{ list.deviceName == null ? '暂无数据' : list.deviceName }}</text> |
13 | 12 | <image style="width: 30rpx;height: 30rpx;" src="../../static/alert-detail.png" mode=""></image> |
14 | 13 | </view> |
... | ... | @@ -16,13 +15,13 @@ |
16 | 15 | <text style="color:#333333;font-size: 14px;">告警级别:</text> |
17 | 16 | <text style="color:#DE4437"> |
18 | 17 | {{ |
19 | - item.severity == 'CRITICAL' | |
18 | + list.severity == 'CRITICAL' | |
20 | 19 | ? '危险' |
21 | - : item.severity == 'MAJOR' | |
20 | + : list.severity == 'MAJOR' | |
22 | 21 | ? '重要' |
23 | - : item.severity == 'MINOR' | |
22 | + : list.severity == 'MINOR' | |
24 | 23 | ? '次要' |
25 | - : item.severity == 'WARNING' | |
24 | + : list.severity == 'WARNING' | |
26 | 25 | ? '警告' |
27 | 26 | : '不确定' |
28 | 27 | }} |
... | ... | @@ -44,11 +43,11 @@ |
44 | 43 | <text style="color:#333333;font-size: 15px;">告警状态:</text> |
45 | 44 | <text style="color:#DE4437;font-size: 14px;"> |
46 | 45 | {{ |
47 | - item.status == 'CLEARED_UNACK' | |
46 | + list.status == 'CLEARED_UNACK' | |
48 | 47 | ? '清除未确认' |
49 | - : item.status == 'ACTIVE_UNACK' | |
48 | + : list.status == 'ACTIVE_UNACK' | |
50 | 49 | ? '激活未确认' |
51 | - : item.status == 'CLEARED_ACK' | |
50 | + : list.status == 'CLEARED_ACK' | |
52 | 51 | ? '清除已确认' |
53 | 52 | : '激活已确认' |
54 | 53 | }} |
... | ... | @@ -56,14 +55,22 @@ |
56 | 55 | </view> |
57 | 56 | </view> |
58 | 57 | </view> |
58 | + <!-- #ifdef MP --> | |
59 | 59 | <view style="color:#333333,font-size:15px;margin-top: 20rpx;">处理结果</view> |
60 | 60 | <view style="margin-top: 20rpx;;border-radius: 20px;width: 688rpx;height: 273rpx;background-color: #FFFFFF;"> |
61 | - <u--form labelPosition="left" :model="formModel" ref="form1"> | |
61 | + <u--form :label-style="{ 'font-size': '0rpx' }" style="padding-left: 26rpx;" labelPosition="left" :model="formModel" ref="form1"> | |
62 | 62 | <u-form-item label="." prop="result" ref="item3"> |
63 | - <u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea> | |
63 | + <view style="margin-left: -60rpx;"><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> | |
64 | 64 | </u-form-item> |
65 | 65 | </u--form> |
66 | 66 | </view> |
67 | + <!-- #endif --> | |
68 | + <!-- #ifdef APP-PLUS --> | |
69 | + <view style="color:#333333,font-size:15px;margin-top: 20rpx;">处理结果</view> | |
70 | + <view style="margin-top: 20rpx;;border-radius: 20px;width: 688rpx;height: 273rpx;background-color: #FFFFFF;"> | |
71 | + <view><u--textarea border="none" height="96" placeholder="请输入处理结果" v-model="formModel.result" count></u--textarea></view> | |
72 | + </view> | |
73 | + <!-- #endif --> | |
67 | 74 | <view style="width: 500rpx;margin-left: 80rpx;margin-top: 44rpx;"><u-button @click="handleSubmit" type="primary" shape="circle" text="处理"></u-button></view> |
68 | 75 | <f-tabbar></f-tabbar> |
69 | 76 | </view> |
... | ... | @@ -98,15 +105,16 @@ export default { |
98 | 105 | .post(`/alarm/${this.list.id}/ack`) |
99 | 106 | .then(res => { |
100 | 107 | uni.$u.toast('处理成功'); |
101 | - setTimeout(() => { | |
102 | - uni.navigateBack({ | |
103 | - delta: 1 | |
104 | - }); | |
105 | - }, 500); | |
108 | + let pages = getCurrentPages(); //获取所有页面栈实例列表 | |
109 | + let nowPage = pages[pages.length - 1]; //当前页页面实例 | |
110 | + let prevPage = pages[pages.length - 2]; //上一页页面实例 | |
111 | + prevPage.$vm.detailStatus = true; | |
112 | + uni.navigateBack({ | |
113 | + delta: 1 | |
114 | + }); | |
106 | 115 | }) |
107 | 116 | .catch(e => { |
108 | - console.log(e); | |
109 | - uni.$u.toast(e); | |
117 | + uni.$u.toast(e.data?.message); | |
110 | 118 | }); |
111 | 119 | } |
112 | 120 | } | ... | ... |
... | ... | @@ -3,7 +3,7 @@ |
3 | 3 | <!-- 公共组件-每个页面必须引入 --> |
4 | 4 | <public-module></public-module> |
5 | 5 | <view> |
6 | - <luyj-tree search-placeholder="请输入搜索内容" :is-check="true" :search-if="true" v-slot:default="{ item }" :max="max" :trees="tree"> | |
6 | + <luyj-tree @sendValue="confirm" :is-check="isCheck" search-placeholder="请输入搜索内容" :search-if="true" v-slot:default="{ item }" :max="max" :trees="tree"> | |
7 | 7 | <view> |
8 | 8 | <view class="content-item"> |
9 | 9 | <view class="word">{{ item.name }}</view> |
... | ... | @@ -18,6 +18,7 @@ |
18 | 18 | <script> |
19 | 19 | import fTabbar from '@/components/module/f-tabbar/f-tabbar'; |
20 | 20 | import dataList from '@/config/mockOrg.js'; |
21 | +import { transOrgFunc } from '@/config/common.js'; | |
21 | 22 | |
22 | 23 | export default { |
23 | 24 | components: { |
... | ... | @@ -25,13 +26,41 @@ export default { |
25 | 26 | }, |
26 | 27 | data() { |
27 | 28 | return { |
28 | - tree: dataList, | |
29 | - max: 5 | |
29 | + isCheck: true, // 是否可选 | |
30 | + tree: [], | |
31 | + max: 5, | |
32 | + id: '' | |
30 | 33 | }; |
31 | 34 | }, |
32 | 35 | onLoad(e) { |
33 | 36 | // 隐藏原生的tabbar |
34 | 37 | uni.hideTabBar(); |
38 | + this.loadData(); | |
39 | + }, | |
40 | + methods: { | |
41 | + loadData() { | |
42 | + uni.$u.http | |
43 | + .get('/yt/organization/me/list') | |
44 | + .then(res => { | |
45 | + if (res) { | |
46 | + const list = transOrgFunc(res); | |
47 | + this.tree = list; | |
48 | + } | |
49 | + }) | |
50 | + .catch(e => { | |
51 | + uni.$u.toast(e.data.message); | |
52 | + }); | |
53 | + }, | |
54 | + confirm(val) { | |
55 | + this.id = val[0].id; | |
56 | + let pages = getCurrentPages(); //获取所有页面栈实例列表 | |
57 | + let nowPage = pages[pages.length - 1]; //当前页页面实例 | |
58 | + let prevPage = pages[pages.length - 2]; //上一页页面实例 | |
59 | + prevPage.$vm.ordId = this.id; | |
60 | + uni.navigateBack({ | |
61 | + delta: 1 | |
62 | + }); | |
63 | + } | |
35 | 64 | } |
36 | 65 | }; |
37 | 66 | </script> | ... | ... |
... | ... | @@ -3,29 +3,41 @@ |
3 | 3 | <!-- 公共组件-每个页面必须引入 --> |
4 | 4 | <public-module></public-module> |
5 | 5 | <view class="org-sty"> |
6 | - <view class="org-item"> | |
6 | + <view @click="openOrg" class="org-item"> | |
7 | 7 | <view class="u-flex" style="flex-direction: row;margin-top: 26rpx;margin-left: 15rpx;"> |
8 | 8 | <text style="color:#333333;font-size: 15px;margin-left: 14rpx;">组织关系</text> |
9 | 9 | </view> |
10 | 10 | <view style="margin-top: 5rpx;margin-left: 15rpx;flex-direction: row;" class="u-flex"> |
11 | 11 | <image style="margin-left: 14rpx;width: 30rpx;height: 30rpx;" src="../../../static/org.png" mode=""></image> |
12 | - <text style="margin-left: 10rpx;color:#666666;font-size: 12px;">设备数:1234</text> | |
12 | + <text style="margin-left: 10rpx;color:#666666;font-size: 12px;">设备数:{{ deviceTotal }}</text> | |
13 | 13 | </view> |
14 | 14 | </view> |
15 | 15 | <view class="org-item" style=""> |
16 | - <image @click="openOrg" style="width: 6px;height: 10px;float: right; margin-right: 34rpx; margin-top: 58rpx;" src="../../../static/right-arrow.png" mode=""></image> | |
16 | + <image style="width: 6px;height: 10px;float: right; margin-right: 34rpx; margin-top: 58rpx;" src="../../../static/right-arrow.png" mode=""></image> | |
17 | 17 | </view> |
18 | 18 | </view> |
19 | + <!-- <view class="camera-container"> | |
20 | + <view class="container-item"> | |
21 | + <view @click="openCameraDetail(item.url)" v-for="(item, index) in list" :key="index" class="item"> | |
22 | + <video style="border-radius: 20px;width:300rpx ;height: 200rpx;" :src="item.url" controls></video> | |
23 | + <view style="position: relative;top: 8rpx;text-align: center;"> | |
24 | + <text style="color: #333333;font-size: 13px;">{{ item.name }}</text> | |
25 | + </view> | |
26 | + </view> | |
27 | + </view> | |
28 | + </view> --> | |
29 | + | |
19 | 30 | <view class="camera-container"> |
20 | 31 | <view class="container-item"> |
21 | 32 | <view @click="openCameraDetail(item.url)" v-for="(item, index) in list" :key="index" class="item"> |
22 | - <video style="border-radius: 20px;width:300rpx ;height: 200rpx;" object-fit="conver" :src="item.url" controls></video> | |
33 | + <video style="border-radius: 20px;width:300rpx ;height: 200rpx;" :src="item.url" controls></video> | |
23 | 34 | <view style="position: relative;top: 8rpx;text-align: center;"> |
24 | 35 | <text style="color: #333333;font-size: 13px;">{{ item.name }}</text> |
25 | 36 | </view> |
26 | 37 | </view> |
27 | 38 | </view> |
28 | 39 | </view> |
40 | + <view style="height: 30rpx;"></view> | |
29 | 41 | <f-tabbar></f-tabbar> |
30 | 42 | </view> |
31 | 43 | </template> |
... | ... | @@ -39,6 +51,7 @@ export default { |
39 | 51 | }, |
40 | 52 | data() { |
41 | 53 | return { |
54 | + deviceTotal: 0, | |
42 | 55 | list: [ |
43 | 56 | { |
44 | 57 | url: 'http://113.204.115.250:83/openUrl/e5NZg76/live.m3u8', |
... | ... | @@ -63,6 +76,18 @@ export default { |
63 | 76 | { |
64 | 77 | url: 'https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209104902N3v5Vpxuvb.mp4', |
65 | 78 | name: '摄像头6' |
79 | + }, | |
80 | + { | |
81 | + url: 'https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209104902N3v5Vpxuvb.mp4', | |
82 | + name: '摄像头6' | |
83 | + }, | |
84 | + { | |
85 | + url: 'https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209104902N3v5Vpxuvb.mp4', | |
86 | + name: '摄像头6' | |
87 | + }, | |
88 | + { | |
89 | + url: 'https://stream7.iqilu.com/10339/upload_transcode/202002/09/20200209104902N3v5Vpxuvb.mp4', | |
90 | + name: '摄像头6' | |
66 | 91 | } |
67 | 92 | ] |
68 | 93 | }; |
... | ... | @@ -70,10 +95,32 @@ export default { |
70 | 95 | onLoad() { |
71 | 96 | // 隐藏原生的tabbar |
72 | 97 | uni.hideTabBar(); |
98 | + this.getDeviceTotalData(); | |
73 | 99 | }, |
74 | 100 | methods: { |
101 | + getDeviceTotalData() { | |
102 | + let httpData = { | |
103 | + page: 1, | |
104 | + pageSize: 10 | |
105 | + }; | |
106 | + uni.$u.http | |
107 | + .get('/yt/device', { params: httpData, custom: { load: false } }) | |
108 | + .then(res => { | |
109 | + if (res) { | |
110 | + this.deviceTotal = res.total; | |
111 | + } | |
112 | + }) | |
113 | + .catch(e => { | |
114 | + uni.$u.toast(e.data?.message); | |
115 | + }); | |
116 | + }, | |
75 | 117 | openCameraDetail(e) { |
76 | 118 | console.log(e); |
119 | + }, | |
120 | + openOrg() { | |
121 | + uni.navigateTo({ | |
122 | + url: './org/org' | |
123 | + }); | |
77 | 124 | } |
78 | 125 | } |
79 | 126 | }; | ... | ... |
pages/index/camera/org/org.vue
0 → 100644
1 | +<template> | |
2 | + <view class="org-content"> | |
3 | + <!-- 公共组件-每个页面必须引入 --> | |
4 | + <public-module></public-module> | |
5 | + <view> | |
6 | + <luyj-tree @sendValue="confirm" :is-check="isCheck" search-placeholder="请输入搜索内容" :search-if="true" v-slot:default="{ item }" :max="max" :trees="tree"> | |
7 | + <view> | |
8 | + <view class="content-item"> | |
9 | + <view class="word">{{ item.name }}</view> | |
10 | + </view> | |
11 | + </view> | |
12 | + </luyj-tree> | |
13 | + </view> | |
14 | + <f-tabbar></f-tabbar> | |
15 | + </view> | |
16 | +</template> | |
17 | + | |
18 | +<script> | |
19 | +import fTabbar from '@/components/module/f-tabbar/f-tabbar'; | |
20 | +import dataList from '@/config/mockOrg.js'; | |
21 | +import { transOrgFunc } from '@/config/common.js'; | |
22 | + | |
23 | +export default { | |
24 | + components: { | |
25 | + fTabbar | |
26 | + }, | |
27 | + data() { | |
28 | + return { | |
29 | + isCheck: true, // 是否可选 | |
30 | + tree: [], | |
31 | + max: 5, | |
32 | + id: '' | |
33 | + }; | |
34 | + }, | |
35 | + onLoad(e) { | |
36 | + // 隐藏原生的tabbar | |
37 | + uni.hideTabBar(); | |
38 | + this.loadData(); | |
39 | + }, | |
40 | + methods: { | |
41 | + loadData() { | |
42 | + uni.$u.http | |
43 | + .get('/yt/organization/me/list') | |
44 | + .then(res => { | |
45 | + if (res) { | |
46 | + const list = transOrgFunc(res); | |
47 | + this.tree = list; | |
48 | + } | |
49 | + }) | |
50 | + .catch(e => { | |
51 | + uni.$u.toast(e.data.message); | |
52 | + }); | |
53 | + }, | |
54 | + confirm(val) { | |
55 | + this.id = val[0].id; | |
56 | + let pages = getCurrentPages(); //获取所有页面栈实例列表 | |
57 | + let nowPage = pages[pages.length - 1]; //当前页页面实例 | |
58 | + let prevPage = pages[pages.length - 2]; //上一页页面实例 | |
59 | + prevPage.$vm.ordId = this.id; | |
60 | + uni.navigateBack({ | |
61 | + delta: 1 | |
62 | + }); | |
63 | + } | |
64 | + } | |
65 | +}; | |
66 | +</script> | |
67 | + | |
68 | +<style lang="scss" scoped> | |
69 | +.org-content { | |
70 | + padding: 0 10rpx; | |
71 | +} | |
72 | +</style> | ... | ... |
... | ... | @@ -14,15 +14,21 @@ |
14 | 14 | </view> |
15 | 15 | <view class="item-child u-flex" style="justify-content: space-between;align-items: center;"> |
16 | 16 | <view style="width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
17 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>2</text></view> | |
17 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
18 | + <text>{{ deviceData.onLine }}</text> | |
19 | + </view> | |
18 | 20 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>在线</text></view> |
19 | 21 | </view> |
20 | 22 | <view style="margin-left: 45rpx;width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
21 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>52</text></view> | |
23 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
24 | + <text>{{ deviceData.unLine }}</text> | |
25 | + </view> | |
22 | 26 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>离线</text></view> |
23 | 27 | </view> |
24 | 28 | <view style="margin-left: 45rpx;width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
25 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>299</text></view> | |
29 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
30 | + <text>{{ deviceData.noActive }}</text> | |
31 | + </view> | |
26 | 32 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>未激活</text></view> |
27 | 33 | </view> |
28 | 34 | </view> |
... | ... | @@ -34,15 +40,21 @@ |
34 | 40 | </view> |
35 | 41 | <view class="item-child u-flex" style="justify-content: space-between;align-items: center;"> |
36 | 42 | <view style="width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
37 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>12</text></view> | |
43 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
44 | + <text>{{ alertData.noHandle }}</text> | |
45 | + </view> | |
38 | 46 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>未处理</text></view> |
39 | 47 | </view> |
40 | 48 | <view style="margin-left: 45rpx;width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
41 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>522</text></view> | |
49 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
50 | + <text>{{ alertData.doneHandle }}</text> | |
51 | + </view> | |
42 | 52 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>已处理</text></view> |
43 | 53 | </view> |
44 | 54 | <view style="margin-left: 45rpx;width: 200rpx;height: 150rpx;justify-content: space-between;flex-direction: column;" class="u-flex"> |
45 | - <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"><text>99</text></view> | |
55 | + <view style="height: 70rpx;font-size:14px;color:#333333;font-weight:500"> | |
56 | + <text>{{ alertData.errorReport }}</text> | |
57 | + </view> | |
46 | 58 | <view style="position:relative;top:-40rpx;height: 60rpx;font-size:12px;color:#999999"><text>误报</text></view> |
47 | 59 | </view> |
48 | 60 | </view> |
... | ... | @@ -97,21 +109,55 @@ export default { |
97 | 109 | }, |
98 | 110 | data() { |
99 | 111 | return { |
100 | - openCamera() { | |
101 | - uni.navigateTo({ | |
102 | - url: 'camera/camera' | |
103 | - }); | |
112 | + deviceData: { | |
113 | + onLine: 0, | |
114 | + unLine: 0, | |
115 | + noActive: 0 | |
104 | 116 | }, |
105 | - openOrgStatus() { | |
106 | - uni.navigateTo({ | |
107 | - url: 'orgStatus/orgStatus' | |
108 | - }); | |
117 | + alertData: { | |
118 | + noHandle: 0, | |
119 | + doneHandle: 0, | |
120 | + errorReport: 0 | |
109 | 121 | } |
110 | 122 | }; |
111 | 123 | }, |
112 | 124 | onLoad() { |
113 | 125 | // 隐藏原生的tabbar |
114 | 126 | uni.hideTabBar(); |
127 | + this.getDeviceTotalData(); | |
128 | + }, | |
129 | + methods: { | |
130 | + getDeviceTotalData() { | |
131 | + let httpData = { | |
132 | + page: 1, | |
133 | + pageSize: 10 | |
134 | + }; | |
135 | + uni.$u.http | |
136 | + .get('/yt/homepage/left/top', { params: httpData, custom: { load: false } }) | |
137 | + .then(res => { | |
138 | + if (res) { | |
139 | + this.deviceData.onLine = res.deviceInfo.onLine; | |
140 | + this.deviceData.unLine = res.deviceInfo.offLine; | |
141 | + this.deviceData.noActive = res.deviceInfo.inActive; | |
142 | + this.alertData.noHandle = res.alarmInfo.todayAdd; | |
143 | + this.alertData.doneHandle = res.alarmInfo.sumCount; | |
144 | + this.alertData.errorReport = res.alarmInfo.todayAdd; | |
145 | + } | |
146 | + }) | |
147 | + .catch(e => { | |
148 | + uni.$u.toast(e.data?.message); | |
149 | + }); | |
150 | + }, | |
151 | + openCamera() { | |
152 | + uni.navigateTo({ | |
153 | + url: 'camera/camera' | |
154 | + }); | |
155 | + }, | |
156 | + openOrgStatus() { | |
157 | + uni.navigateTo({ | |
158 | + url: 'orgStatus/orgStatus' | |
159 | + }); | |
160 | + } | |
115 | 161 | } |
116 | 162 | }; |
117 | 163 | </script> | ... | ... |
pages/personal/1.vue
deleted
100644 → 0
1 | -<template> | |
2 | - <view class="u-page"> | |
3 | - <u-navbar | |
4 | - title="表单" | |
5 | - @leftClick="navigateBack" | |
6 | - safeAreaInsetTop | |
7 | - fixed | |
8 | - placeholder | |
9 | - ></u-navbar> | |
10 | - <view class="u-demo-block"> | |
11 | - <text class="u-demo-block__title">基础使用</text> | |
12 | - <view class="u-demo-block__content"> | |
13 | - <!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --> | |
14 | - <u--form | |
15 | - labelPosition="left" | |
16 | - :model="model1" | |
17 | - ref="form1" | |
18 | - > | |
19 | - <u-form-item | |
20 | - label="姓名" | |
21 | - prop="userInfo.name" | |
22 | - borderBottom | |
23 | - ref="item1" | |
24 | - > | |
25 | - <u--input | |
26 | - v-model="model1.userInfo.name" | |
27 | - border="none" | |
28 | - placeholder="姓名,只能为中文" | |
29 | - ></u--input> | |
30 | - </u-form-item> | |
31 | - <u-form-item | |
32 | - label="性别" | |
33 | - prop="userInfo.sex" | |
34 | - borderBottom | |
35 | - @click="showSex = true; hideKeyboard()" | |
36 | - ref="item1" | |
37 | - > | |
38 | - <u--input | |
39 | - v-model="model1.userInfo.sex" | |
40 | - disabled | |
41 | - disabledColor="#ffffff" | |
42 | - placeholder="请选择性别" | |
43 | - border="none" | |
44 | - ></u--input> | |
45 | - <u-icon | |
46 | - slot="right" | |
47 | - name="arrow-right" | |
48 | - ></u-icon> | |
49 | - </u-form-item> | |
50 | - <u-form-item | |
51 | - label="水果" | |
52 | - prop="radiovalue1" | |
53 | - borderBottom | |
54 | - ref="item2" | |
55 | - > | |
56 | - <u-radio-group v-model="model1.radiovalue1"> | |
57 | - <u-radio | |
58 | - :customStyle="{marginRight: '16px'}" | |
59 | - v-for="(item, index) in radiolist1" | |
60 | - :key="index" | |
61 | - :label="item.name" | |
62 | - :name="item.name" | |
63 | - > | |
64 | - </u-radio> | |
65 | - </u-radio-group> | |
66 | - </u-form-item> | |
67 | - <u-form-item | |
68 | - label="兴趣爱好" | |
69 | - prop="checkboxValue1" | |
70 | - borderBottom | |
71 | - labelWidth="80" | |
72 | - ref="item3" | |
73 | - > | |
74 | - <u-checkbox-group | |
75 | - v-model="model1.checkboxValue1" | |
76 | - shape="square" | |
77 | - @change="change" | |
78 | - > | |
79 | - <u-checkbox | |
80 | - :customStyle="{marginRight: '16px'}" | |
81 | - v-for="(item, index) in checkboxList1" | |
82 | - :key="index" | |
83 | - :label="item.name" | |
84 | - :name="item.name" | |
85 | - > | |
86 | - </u-checkbox> | |
87 | - </u-checkbox-group> | |
88 | - </u-form-item> | |
89 | - <u-form-item | |
90 | - label="简介" | |
91 | - prop="intro" | |
92 | - borderBottom | |
93 | - ref="item3" | |
94 | - > | |
95 | - <u--textarea | |
96 | - placeholder="不低于3个字" | |
97 | - v-model="model1.intro" | |
98 | - count | |
99 | - ></u--textarea> | |
100 | - </u-form-item> | |
101 | - <u-form-item | |
102 | - label="住店时间" | |
103 | - prop="hotel" | |
104 | - labelWidth="80" | |
105 | - borderBottom | |
106 | - @click="showCalendar = true; hideKeyboard()" | |
107 | - > | |
108 | - <u--input | |
109 | - v-model="model1.hotel" | |
110 | - disabled | |
111 | - disabledColor="#ffffff" | |
112 | - placeholder="请选择住店和离店时间" | |
113 | - border="none" | |
114 | - ></u--input> | |
115 | - <u-icon | |
116 | - slot="right" | |
117 | - name="arrow-right" | |
118 | - ></u-icon> | |
119 | - </u-form-item> | |
120 | - <u-form-item | |
121 | - label="验证码" | |
122 | - prop="code" | |
123 | - labelWidth="80" | |
124 | - borderBottom | |
125 | - > | |
126 | - <u--input | |
127 | - v-model="model1.code" | |
128 | - border="none" | |
129 | - placeholder="请填写验证码" | |
130 | - ></u--input> | |
131 | - <u-button | |
132 | - slot="right" | |
133 | - @tap="getCode" | |
134 | - :text="tips" | |
135 | - type="success" | |
136 | - size="mini" | |
137 | - :disabled="disabled1" | |
138 | - ></u-button> | |
139 | - </u-form-item> | |
140 | - <u-form-item | |
141 | - label="生日" | |
142 | - prop="userInfo.birthday" | |
143 | - borderBottom | |
144 | - @click="showBirthday = true; hideKeyboard()" | |
145 | - ref="item1" | |
146 | - > | |
147 | - <u--input | |
148 | - v-model="model1.userInfo.birthday" | |
149 | - disabled | |
150 | - disabledColor="#ffffff" | |
151 | - placeholder="请选择生日" | |
152 | - border="none" | |
153 | - ></u--input> | |
154 | - <u-icon | |
155 | - slot="right" | |
156 | - name="arrow-right" | |
157 | - ></u-icon> | |
158 | - </u-form-item> | |
159 | - </u--form> | |
160 | - <u-button | |
161 | - type="primary" | |
162 | - text="提交" | |
163 | - customStyle="margin-top: 50px" | |
164 | - @click="submit" | |
165 | - ></u-button> | |
166 | - <u-button | |
167 | - type="error" | |
168 | - text="重置" | |
169 | - customStyle="margin-top: 10px" | |
170 | - @click="reset" | |
171 | - ></u-button> | |
172 | - <u-action-sheet | |
173 | - :show="showSex" | |
174 | - :actions="actions" | |
175 | - title="请选择性别" | |
176 | - description="如果选择保密会报错" | |
177 | - @close="showSex = false" | |
178 | - @select="sexSelect" | |
179 | - > | |
180 | - </u-action-sheet> | |
181 | - <u-calendar | |
182 | - :show="showCalendar" | |
183 | - mode="range" | |
184 | - @confirm="calendarConfirm" | |
185 | - @close="calendarClose" | |
186 | - startText="住店" | |
187 | - endText="离店" | |
188 | - confirmDisabledText="请选择离店日期" | |
189 | - :formatter="formatter" | |
190 | - ></u-calendar> | |
191 | - <u-code | |
192 | - ref="uCode" | |
193 | - @change="codeChange" | |
194 | - seconds="20" | |
195 | - @start="disabled1 = true" | |
196 | - @end="disabled1 = false" | |
197 | - ></u-code> | |
198 | - <u-datetime-picker | |
199 | - :show="showBirthday" | |
200 | - :value="birthday" | |
201 | - mode="date" | |
202 | - closeOnClickOverlay | |
203 | - @confirm="birthdayConfirm" | |
204 | - @cancel="birthdayClose" | |
205 | - @close="birthdayClose" | |
206 | - ></u-datetime-picker> | |
207 | - </view> | |
208 | - </view> | |
209 | - </view> | |
210 | -</template> | |
211 | - | |
212 | -<script> | |
213 | - export default { | |
214 | - data() { | |
215 | - return { | |
216 | - fileList1: [], | |
217 | - disabled1: false, | |
218 | - tips: '', | |
219 | - value: '', | |
220 | - showCalendar: false, | |
221 | - showBirthday: false, | |
222 | - model1: { | |
223 | - userInfo: { | |
224 | - name: '楼兰', | |
225 | - sex: '', | |
226 | - birthday: '' | |
227 | - }, | |
228 | - radiovalue1: '苹果', | |
229 | - checkboxValue1: [], | |
230 | - intro: '', | |
231 | - code: '' | |
232 | - }, | |
233 | - showSex: false, | |
234 | - birthday: Number(new Date()), | |
235 | - actions: [{ | |
236 | - name: '男', | |
237 | - }, | |
238 | - { | |
239 | - name: '女', | |
240 | - }, | |
241 | - { | |
242 | - name: '保密', | |
243 | - }, | |
244 | - ], | |
245 | - rules: { | |
246 | - 'userInfo.name': [{ | |
247 | - type: 'string', | |
248 | - required: true, | |
249 | - message: '请填写姓名', | |
250 | - trigger: ['blur', 'change'] | |
251 | - }, { | |
252 | - // 此为同步验证,可以直接返回true或者false,如果是异步验证,稍微不同,见下方说明 | |
253 | - validator: (rule, value, callback) => { | |
254 | - // 调用uView自带的js验证规则,详见:https://www.uviewui.com/js/test.html | |
255 | - return uni.$u.test.chinese(value); | |
256 | - }, | |
257 | - message: "姓名必须为中文", | |
258 | - // 触发器可以同时用blur和change,二者之间用英文逗号隔开 | |
259 | - trigger: ["change", "blur"], | |
260 | - }], | |
261 | - code: { | |
262 | - type: 'string', | |
263 | - required: true, | |
264 | - len: 4, | |
265 | - message: '请填写4位验证码', | |
266 | - trigger: ['blur'] | |
267 | - }, | |
268 | - 'userInfo.sex': { | |
269 | - type: 'string', | |
270 | - max: 1, | |
271 | - required: true, | |
272 | - message: '请选择男或女', | |
273 | - trigger: ['blur', 'change'] | |
274 | - }, | |
275 | - radiovalue1: { | |
276 | - type: 'string', | |
277 | - min: 1, | |
278 | - max: 2, | |
279 | - message: '橙子有毒', | |
280 | - trigger: ['change'] | |
281 | - }, | |
282 | - checkboxValue1: { | |
283 | - type: 'array', | |
284 | - min: 2, | |
285 | - required: true, | |
286 | - message: '不能太宅,至少选两项', | |
287 | - trigger: ['change'] | |
288 | - }, | |
289 | - intro: { | |
290 | - type: 'string', | |
291 | - min: 3, | |
292 | - required: true, | |
293 | - message: '不低于3个字', | |
294 | - trigger: ['change'] | |
295 | - }, | |
296 | - hotel: { | |
297 | - type: 'string', | |
298 | - min: 2, | |
299 | - required: true, | |
300 | - message: '请选择住店时间', | |
301 | - trigger: ['change'] | |
302 | - }, | |
303 | - 'userInfo.birthday': { | |
304 | - type: 'string', | |
305 | - required: true, | |
306 | - message: '请选择生日', | |
307 | - trigger: ['change'] | |
308 | - }, | |
309 | - }, | |
310 | - radiolist1: [{ | |
311 | - name: '苹果', | |
312 | - disabled: false | |
313 | - }, | |
314 | - { | |
315 | - name: '香蕉', | |
316 | - disabled: false | |
317 | - }, | |
318 | - { | |
319 | - name: '毒橙子', | |
320 | - disabled: false | |
321 | - } | |
322 | - ], | |
323 | - checkboxList1: [{ | |
324 | - name: '羽毛球', | |
325 | - disabled: false | |
326 | - }, | |
327 | - { | |
328 | - name: '跑步', | |
329 | - disabled: false | |
330 | - }, | |
331 | - { | |
332 | - name: '爬山', | |
333 | - disabled: false | |
334 | - } | |
335 | - ] | |
336 | - } | |
337 | - }, | |
338 | - onReady() { | |
339 | - // 如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则 | |
340 | - this.$refs.form1.setRules(this.rules) | |
341 | - }, | |
342 | - methods: { | |
343 | - afterRead(event) { | |
344 | - this.fileList1.push({ | |
345 | - url: event.file, | |
346 | - status: 'uploading', | |
347 | - message: '上传中' | |
348 | - }) | |
349 | - }, | |
350 | - groupChange(n) { | |
351 | - // console.log('groupChange', n); | |
352 | - }, | |
353 | - radioChange(n) { | |
354 | - // console.log('radioChange', n); | |
355 | - }, | |
356 | - navigateBack() { | |
357 | - uni.navigateBack() | |
358 | - }, | |
359 | - sexSelect(e) { | |
360 | - this.model1.userInfo.sex = e.name | |
361 | - this.$refs.form1.validateField('userInfo.sex') | |
362 | - }, | |
363 | - change(e) { | |
364 | - // console.log(e); | |
365 | - }, | |
366 | - formatter(day) { | |
367 | - const d = new Date() | |
368 | - let month = d.getMonth() + 1 | |
369 | - const date = d.getDate() | |
370 | - if (day.month == month && day.day == date + 3) { | |
371 | - day.bottomInfo = '有优惠' | |
372 | - day.dot = true | |
373 | - } | |
374 | - return day | |
375 | - }, | |
376 | - calendarConfirm(e) { | |
377 | - this.showCalendar = false | |
378 | - this.model1.hotel = `${e[0]} / ${e[e.length - 1]}` | |
379 | - this.$refs.form1.validateField('hotel') | |
380 | - }, | |
381 | - codeChange(text) { | |
382 | - this.tips = text; | |
383 | - }, | |
384 | - getCode() { | |
385 | - if (this.$refs.uCode.canGetCode) { | |
386 | - // 模拟向后端请求验证码 | |
387 | - uni.showLoading({ | |
388 | - title: '正在获取验证码' | |
389 | - }) | |
390 | - setTimeout(() => { | |
391 | - uni.hideLoading(); | |
392 | - // 这里此提示会被this.start()方法中的提示覆盖 | |
393 | - uni.$u.toast('验证码已发送'); | |
394 | - // 通知验证码组件内部开始倒计时 | |
395 | - this.$refs.uCode.start(); | |
396 | - }, 2000); | |
397 | - } else { | |
398 | - uni.$u.toast('倒计时结束后再发送'); | |
399 | - } | |
400 | - }, | |
401 | - calendarClose() { | |
402 | - this.showCalendar = false | |
403 | - this.$refs.form1.validateField('hotel') | |
404 | - }, | |
405 | - birthdayClose() { | |
406 | - this.showBirthday = false | |
407 | - this.$refs.form1.validateField('userInfo.birthday') | |
408 | - }, | |
409 | - birthdayConfirm(e) { | |
410 | - this.showBirthday = false | |
411 | - this.model1.userInfo.birthday = uni.$u.timeFormat(e.value, 'yyyy-mm-dd') | |
412 | - this.$refs.form1.validateField('userInfo.birthday') | |
413 | - }, | |
414 | - submit() { | |
415 | - // 如果有错误,会在catch中返回报错信息数组,校验通过则在then中返回true | |
416 | - this.$refs.form1.validate().then(res => { | |
417 | - uni.$u.toast('校验通过') | |
418 | - }).catch(errors => { | |
419 | - uni.$u.toast('校验失败') | |
420 | - }) | |
421 | - }, | |
422 | - reset() { | |
423 | - const validateList = ['userInfo.name', 'userInfo.sex', 'radiovalue1', 'checkboxValue1', 'intro', | |
424 | - 'hotel', 'code', 'userInfo.birthday'] | |
425 | - this.$refs.form1.resetFields() | |
426 | - this.$refs.form1.clearValidate() | |
427 | - setTimeout(()=>{ | |
428 | - this.$refs.form1.clearValidate(validateList) | |
429 | - // 或者使用 this.$refs.form1.clearValidate() | |
430 | - },10) | |
431 | - }, | |
432 | - hideKeyboard() { | |
433 | - uni.hideKeyboard() | |
434 | - } | |
435 | - }, | |
436 | - } | |
437 | -</script> | |
438 | - | |
439 | -<style lang="scss"> | |
440 | - | |
441 | -</style> |
... | ... | @@ -20,13 +20,12 @@ |
20 | 20 | class="input" |
21 | 21 | prefixIcon="lock-fill" |
22 | 22 | suffixIconStyle="color: #909399" |
23 | - :type="showPasswordOrText" | |
23 | + :type="passwordText" | |
24 | 24 | placeholder="请输入密码" |
25 | 25 | v-model="loginForm.password" |
26 | - @change="passwordChange" | |
27 | 26 | > |
28 | 27 | <template slot="suffix"> |
29 | - <u-icon @click="showPasswordMode" :name="showPasswordIcon"></u-icon> | |
28 | + <u-icon @click="showPasswordMode" :name="showPassword ? showTextIcon : showPasswordIcon"></u-icon> | |
30 | 29 | </template> |
31 | 30 | </u-input> |
32 | 31 | </view> |
... | ... | @@ -35,7 +34,8 @@ |
35 | 34 | <view style="color: #999999;font-size: 13px;" @click="openCodeFunc">手机验证码登录</view> |
36 | 35 | <view style="color: #999999;font-size: 13px;position: relative;" @click="findPassrordFunc">忘记密码</view> |
37 | 36 | </view> |
38 | - <view class="u-flex" style="justify-content: center;flex-direction: column;margin-top: 220rpx;"> | |
37 | + <!-- <button class="button marginT" @click="onAuthorization" :style="{background:PrimaryColor}">微信授权登录</button> --> | |
38 | + <view @click="onAuthorization" class="u-flex" style="justify-content: center;flex-direction: column;margin-top: 220rpx;"> | |
39 | 39 | <view style="color:#999999;font-size: 13px;">第三方账号登录</view> |
40 | 40 | <view style="height:20rpx"></view> |
41 | 41 | <view><image style="width: 75rpx;height: 75rpx;" src="../../static/weixin.png" mode="aspectFill"></image></view> |
... | ... | @@ -47,22 +47,54 @@ |
47 | 47 | </template> |
48 | 48 | |
49 | 49 | <script> |
50 | -import { mapState, mapMutations } from 'vuex'; | |
50 | +import { mapMutations } from 'vuex'; | |
51 | +import { getUserInfo } from '@/components/module/f-login/f-login.js'; | |
51 | 52 | |
52 | 53 | export default { |
53 | 54 | data() { |
54 | 55 | return { |
55 | 56 | showPasswordIcon: 'eye-off', |
56 | - showPasswordOrText: 'password', | |
57 | + showTextIcon: 'eye-fill', | |
57 | 58 | loginForm: { |
58 | 59 | username: '', |
59 | 60 | password: '' |
60 | - } | |
61 | + }, | |
62 | + showPassword: false, | |
63 | + passwordText: 'password' | |
61 | 64 | }; |
62 | 65 | }, |
63 | 66 | methods: { |
64 | 67 | ...mapMutations(['setUserInfo']), |
65 | - passwordChange() {}, | |
68 | + onAuthorization(e) { | |
69 | + getUserInfo( | |
70 | + info => { | |
71 | + console.log(info, '授权信息'); | |
72 | + let httpData = { | |
73 | + code: this.code, | |
74 | + nickName: info.nickName || '', //昵称 | |
75 | + avatarUrl: info.avatarUrl || '', //头像 | |
76 | + gender: info.gender || '' //性别 0:未知 1:男 2:女 | |
77 | + }; | |
78 | + // uni.$u.http.post('您的接口', httpData).then(res => { | |
79 | + let userInfo = { | |
80 | + // ...res, | |
81 | + token: true //token用于判断是否登录 | |
82 | + }; | |
83 | + // this.setUserInfo(userInfo) | |
84 | + // setTimeout(()=>{ | |
85 | + // uni.showToast({ | |
86 | + // title: '登录成功', | |
87 | + // icon: 'none' | |
88 | + // }); | |
89 | + // this.closeLogin(); | |
90 | + // },100) | |
91 | + // }) | |
92 | + }, | |
93 | + err => { | |
94 | + // this.closeLogin(); | |
95 | + } | |
96 | + ); | |
97 | + }, | |
66 | 98 | onSubmitFunc() { |
67 | 99 | if (this.loginForm.username == '' || this.loginForm.password == '') { |
68 | 100 | return uni.$u.toast('请输入用户名或密码'); |
... | ... | @@ -92,7 +124,14 @@ export default { |
92 | 124 | uni.navigateBack({ |
93 | 125 | delta: 1 |
94 | 126 | }); |
95 | - }, 1000); | |
127 | + }, 500); | |
128 | + //#ifndef MP | |
129 | + setTimeout(() => { | |
130 | + uni.navigateTo({ | |
131 | + url: 'personal' | |
132 | + }); | |
133 | + }, 500); | |
134 | + //#endif | |
96 | 135 | } |
97 | 136 | }) |
98 | 137 | .catch(e => { |
... | ... | @@ -118,12 +157,11 @@ export default { |
118 | 157 | }); |
119 | 158 | }, |
120 | 159 | showPasswordMode() { |
121 | - if (this.loginForm.password.length !== 0) { | |
122 | - this.showPasswordOrText = 'text'; | |
123 | - this.showPasswordIcon = 'eye-fill'; | |
160 | + this.showPassword = !this.showPassword; | |
161 | + if (!this.showPassword) { | |
162 | + this.passwordText = 'password'; | |
124 | 163 | } else { |
125 | - this.showPasswordOrText = 'password'; | |
126 | - this.showPasswordIcon = 'eye-off'; | |
164 | + this.passwordText = 'text'; | |
127 | 165 | } |
128 | 166 | } |
129 | 167 | } | ... | ... |
... | ... | @@ -6,9 +6,9 @@ |
6 | 6 | <!-- #ifdef MP --> |
7 | 7 | <!-- 登录 --> |
8 | 8 | <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30"> |
9 | - <block v-if="userInfo.token"> | |
10 | - <view class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar || '/static/logo.png'"></image></view> | |
11 | - <view class="u-flex-1" @click="onJump('/pages/personal/set')"> | |
9 | + <block v-if="userInfo.isToken"> | |
10 | + <view @click="openPersonalInfo" class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar || '/static/logo.png'"></image></view> | |
11 | + <view @click="openPersonalInfo" class="u-flex-1"> | |
12 | 12 | <view class="nickName u-flex"> |
13 | 13 | <view class="name u-m-r-10" v-if="userInfo.realName">{{ userInfo.realName }}</view> |
14 | 14 | </view> |
... | ... | @@ -31,15 +31,15 @@ |
31 | 31 | </view> |
32 | 32 | </view> |
33 | 33 | </block> |
34 | - <view><u-icon @click="openPersonalInfo" name="arrow-right" color="black" size="13"></u-icon></view> | |
34 | + <view><u-icon name="arrow-right" color="black" size="13"></u-icon></view> | |
35 | 35 | </view> |
36 | 36 | <!-- #endif --> |
37 | 37 | <!-- #ifndef MP --> |
38 | 38 | <!-- 登录 --> |
39 | 39 | <view class="u-flex u-p-l-30 u-p-r-20 u-p-t-75 u-p-b-30"> |
40 | 40 | <block v-if="userInfo.isToken"> |
41 | - <view class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar"></image></view> | |
42 | - <view class="u-flex-1" @click="onJump('/pages/user/set')"> | |
41 | + <view @click="openPersonalInfo" class="u-m-r-20"><image class="avatar" mode="aspectFill" :src="userInfo.avatar"></image></view> | |
42 | + <view @click="openPersonalInfo" class="u-flex-1"> | |
43 | 43 | <view class="nickName">{{ userInfo.realName }}</view> |
44 | 44 | <view class="detail" v-if="userInfo.phoneNum">手机号:{{ userInfo.phoneNum | phone }}</view> |
45 | 45 | <view class="detail" v-else>手机号:未绑定</view> |
... | ... | @@ -54,7 +54,7 @@ |
54 | 54 | <view @click="clickAccountFunc" style="color:black;" class="detail">绑定账号</view> |
55 | 55 | </view> |
56 | 56 | </block> |
57 | - <view><u-icon @click="openPersonalInfo" name="arrow-right" color="black" size="13"></u-icon></view> | |
57 | + <view><u-icon name="arrow-right" color="black" size="13"></u-icon></view> | |
58 | 58 | </view> |
59 | 59 | <!-- #endif --> |
60 | 60 | </view> |
... | ... | @@ -63,14 +63,18 @@ |
63 | 63 | style="overflow-x: hidden;position: relative;top:-25rpx;z-index:54;background: #FFFFFF;;border-radius: 17px 17px 0px 0px;;height: 835rpx;width: 750rpx;flex-direction: column;justify-content: space-between;" |
64 | 64 | > |
65 | 65 | <view style="margin-top: 100rpx;"> |
66 | - <view @click="openSysNotify" class="u-flex" style="flex-direction: row;justify-content: space-between;align-content: space-between;"> | |
66 | + <view @click="onTokenJump('../systemNotify/systemNotify')" class="u-flex" style="flex-direction: row;justify-content: space-between;align-content: space-between;"> | |
67 | 67 | <view style="width: 125rpx;"><image style="width:35rpx;height: 35rpx;" src="../../static/sys-not.png" mode=""></image></view> |
68 | 68 | <view style="position: relative;left: -58rpx;width: 420rpx;"><text style="color: #333333;font-size: 15px;">系统通知</text></view> |
69 | 69 | <view style="position: relative;right: -112rpx;width: 100rpx;"> |
70 | 70 | <image style="width: 13rpx;height: 17rpx;" src="../../static/arrow-right.png" mode=""></image> |
71 | 71 | </view> |
72 | 72 | </view> |
73 | - <view @click="openFeedBack" class="u-flex" style="margin-top: 60rpx;flex-direction: row;justify-content: space-between;align-content: space-between;"> | |
73 | + <view | |
74 | + @click="onTokenJump('../feedback/feedback')" | |
75 | + class="u-flex" | |
76 | + style="margin-top: 60rpx;flex-direction: row;justify-content: space-between;align-content: space-between;" | |
77 | + > | |
74 | 78 | <view style="width: 125rpx;"><image style="width:35rpx;height: 35rpx;" src="../../static/find-sugg.png" mode=""></image></view> |
75 | 79 | <view style="position: relative;left: -58rpx;width: 420rpx;"><text style="color: #333333;font-size: 15px;">意见反馈</text></view> |
76 | 80 | <view style="position: relative;right: -112rpx;width: 100rpx;"> |
... | ... | @@ -86,7 +90,7 @@ |
86 | 90 | <u-modal :showConfirmButton="false" :show="show" :title="title"> |
87 | 91 | <view v-if="!bindPhone" class="loginPhone"> |
88 | 92 | <view class="form-row" style="background:#F7F9FF;border-radius: 48px;width: 532rpx;height: 80rpx;"> |
89 | - <u--input shape="circle" class="input" prefixIcon="account-fill" type="text" placeholder="登录账号" v-model="account"></u--input> | |
93 | + <u--input shape="circle" class="input" prefixIcon="account-fill" type="text" placeholder="登录账号" v-model="account"></u--input> | |
90 | 94 | </view> |
91 | 95 | <view class="form-row" style="margin-top: 20rpx;background: #F7F9FF;border-radius: 48px;width: 532rpx;height: 80rpx;"> |
92 | 96 | <u--input |
... | ... | @@ -207,16 +211,24 @@ export default { |
207 | 211 | }, |
208 | 212 | methods: { |
209 | 213 | ...mapMutations(['emptyUserInfo']), |
210 | - openSysNotify() { | |
211 | - uni.navigateTo({ | |
212 | - url: '../systemNotify/systemNotify' | |
213 | - }); | |
214 | - }, | |
215 | - openFeedBack() { | |
216 | - uni.navigateTo({ | |
217 | - url: '../feedback/feedback' | |
214 | + // 跳转前判断登录 | |
215 | + onTokenJump(url) { | |
216 | + this.judgeLogin(() => { | |
217 | + uni.navigateTo({ | |
218 | + url: url | |
219 | + }); | |
218 | 220 | }); |
219 | 221 | }, |
222 | + // openSysNotify() { | |
223 | + // uni.navigateTo({ | |
224 | + // url: '../systemNotify/systemNotify' | |
225 | + // }); | |
226 | + // }, | |
227 | + // openFeedBack() { | |
228 | + // uni.navigateTo({ | |
229 | + // url: '../feedback/feedback' | |
230 | + // }); | |
231 | + // }, | |
220 | 232 | onJump(url) { |
221 | 233 | uni.navigateTo({ |
222 | 234 | url: url | ... | ... |
pages/personal/test.vue
deleted
100644 → 0
1 | -<template> | |
2 | - <view class="u-page"> | |
3 | - <view class="u-demo-block"> | |
4 | - <text class="u-demo-block__title">基础使用</text> | |
5 | - <view class="u-demo-block__content"> | |
6 | - <u--input | |
7 | - placeholder="请输入内容" | |
8 | - border="surround" | |
9 | - v-model="value" | |
10 | - @change="change" | |
11 | - ></u--input> | |
12 | - </view> | |
13 | - </view> | |
14 | - <view class="u-demo-block"> | |
15 | - <text class="u-demo-block__title">可清空内容</text> | |
16 | - <view class="u-demo-block__content"> | |
17 | - <u--input | |
18 | - placeholder="请输入内容" | |
19 | - border="surround" | |
20 | - clearable | |
21 | - ></u--input> | |
22 | - </view> | |
23 | - </view> | |
24 | - <view class="u-demo-block"> | |
25 | - <text class="u-demo-block__title">数字键盘</text> | |
26 | - <view class="u-demo-block__content"> | |
27 | - <u--input | |
28 | - placeholder="请输入内容" | |
29 | - border="surround" | |
30 | - type="number" | |
31 | - clearable | |
32 | - ></u--input> | |
33 | - </view> | |
34 | - </view> | |
35 | - <view class="u-demo-block"> | |
36 | - <text class="u-demo-block__title">密码类型</text> | |
37 | - <view class="u-demo-block__content"> | |
38 | - <u--input | |
39 | - placeholder="请输入内容" | |
40 | - border="surround" | |
41 | - password | |
42 | - clearable | |
43 | - ></u--input> | |
44 | - </view> | |
45 | - </view> | |
46 | - <view class="u-demo-block"> | |
47 | - <text class="u-demo-block__title">显示下划线</text> | |
48 | - <view class="u-demo-block__content"> | |
49 | - <u--input | |
50 | - placeholder="请输入内容" | |
51 | - border="bottom" | |
52 | - clearable | |
53 | - ></u--input> | |
54 | - </view> | |
55 | - </view> | |
56 | - <view class="u-demo-block"> | |
57 | - <text class="u-demo-block__title">禁用状态</text> | |
58 | - <view class="u-demo-block__content"> | |
59 | - <u--input | |
60 | - placeholder="禁用状态" | |
61 | - border="surround" | |
62 | - disabled | |
63 | - ></u--input> | |
64 | - </view> | |
65 | - </view> | |
66 | - <view class="u-demo-block"> | |
67 | - <text class="u-demo-block__title">圆形</text> | |
68 | - <view class="u-demo-block__content"> | |
69 | - <u--input | |
70 | - placeholder="请输入内容" | |
71 | - border="surround" | |
72 | - shape="circle" | |
73 | - ></u--input> | |
74 | - </view> | |
75 | - </view> | |
76 | - <view class="u-demo-block"> | |
77 | - <text class="u-demo-block__title">前后图标</text> | |
78 | - <view class="u-demo-block__content"> | |
79 | - <u--input | |
80 | - placeholder="前置图标" | |
81 | - prefixIcon="search" | |
82 | - prefixIconStyle="font-size: 22px;color: #909399" | |
83 | - ></u--input> | |
84 | - </view> | |
85 | - <view | |
86 | - class="u-demo-block__content" | |
87 | - style="margin-top: 15px;" | |
88 | - > | |
89 | - <u--input | |
90 | - placeholder="后置图标" | |
91 | - suffixIcon="map-fill" | |
92 | - suffixIconStyle="color: #909399" | |
93 | - ></u--input> | |
94 | - </view> | |
95 | - </view> | |
96 | - <view class="u-demo-block"> | |
97 | - <text class="u-demo-block__title">前后插槽</text> | |
98 | - <view class="u-demo-block__content"> | |
99 | - <!-- 注意:由于兼容性差异,如果需要使用前后插槽,nvue下需使用u--input,非nvue下需使用u-input --> | |
100 | - <!-- #ifndef APP-NVUE --> | |
101 | - <u-input placeholder="前置插槽"> | |
102 | - <!-- #endif --> | |
103 | - <!-- #ifdef APP-NVUE --> | |
104 | - <u--input placeholder="前置插槽"> | |
105 | - <!-- #endif --> | |
106 | - <u--text | |
107 | - text="http://" | |
108 | - slot="prefix" | |
109 | - margin="0 3px 0 0" | |
110 | - type="tips" | |
111 | - ></u--text> | |
112 | - <!-- #ifndef APP-NVUE --> | |
113 | - </u-input> | |
114 | - <!-- #endif --> | |
115 | - <!-- #ifdef APP-NVUE --> | |
116 | - </u--input> | |
117 | - <!-- #endif --> | |
118 | - </view> | |
119 | - <view | |
120 | - class="u-demo-block__content" | |
121 | - style="margin-top: 15px;" | |
122 | - > | |
123 | - <!-- 注意:由于兼容性差异,如果需要使用前后插槽,nvue下需使用u--input,非nvue下需使用u-input --> | |
124 | - <!-- #ifndef APP-NVUE --> | |
125 | - <u-input placeholder="后置插槽"> | |
126 | - <!-- #endif --> | |
127 | - <!-- #ifdef APP-NVUE --> | |
128 | - <u--input placeholder="后置插槽"> | |
129 | - <!-- #endif --> | |
130 | - <template slot="suffix"> | |
131 | - <u-code | |
132 | - ref="uCode" | |
133 | - @change="codeChange" | |
134 | - seconds="20" | |
135 | - changeText="X秒重新获取哈哈哈" | |
136 | - ></u-code> | |
137 | - <u-button | |
138 | - @tap="getCode" | |
139 | - :text="tips" | |
140 | - type="success" | |
141 | - size="mini" | |
142 | - ></u-button> | |
143 | - </template> | |
144 | - <!-- #ifndef APP-NVUE --> | |
145 | - </u-input> | |
146 | - <!-- #endif --> | |
147 | - <!-- #ifdef APP-NVUE --> | |
148 | - </u--input> | |
149 | - <!-- #endif --> | |
150 | - </view> | |
151 | - </view> | |
152 | - <u-gap | |
153 | - bgColor="#fff" | |
154 | - height="50" | |
155 | - ></u-gap> | |
156 | - </view> | |
157 | -</template> | |
158 | - | |
159 | -<script> | |
160 | - export default { | |
161 | - data() { | |
162 | - return { | |
163 | - tips: '', | |
164 | - value: '' | |
165 | - } | |
166 | - }, | |
167 | - watch: { | |
168 | - value(newValue, oldValue) { | |
169 | - // console.log('v-model', newValue); | |
170 | - } | |
171 | - }, | |
172 | - methods: { | |
173 | - codeChange(text) { | |
174 | - this.tips = text; | |
175 | - }, | |
176 | - getCode() { | |
177 | - if (this.$refs.uCode.canGetCode) { | |
178 | - // 模拟向后端请求验证码 | |
179 | - uni.showLoading({ | |
180 | - title: '正在获取验证码' | |
181 | - }) | |
182 | - setTimeout(() => { | |
183 | - uni.hideLoading(); | |
184 | - // 这里此提示会被this.start()方法中的提示覆盖 | |
185 | - uni.$u.toast('验证码已发送'); | |
186 | - // 通知验证码组件内部开始倒计时 | |
187 | - this.$refs.uCode.start(); | |
188 | - }, 2000); | |
189 | - } else { | |
190 | - uni.$u.toast('倒计时结束后再发送'); | |
191 | - } | |
192 | - }, | |
193 | - change(e) { | |
194 | - console.log('change', e); | |
195 | - } | |
196 | - } | |
197 | - } | |
198 | -</script> | |
199 | - | |
200 | -<style lang="scss"> | |
201 | - | |
202 | -</style> |
... | ... | @@ -92,12 +92,14 @@ export default { |
92 | 92 | onLoad(e) { |
93 | 93 | // 隐藏原生的tabbar |
94 | 94 | uni.hideTabBar(); |
95 | - loadData(1); | |
96 | 95 | }, |
97 | 96 | methods: { |
98 | 97 | typeSelect(e) { |
99 | 98 | this.model1.userInfo.type = e.name; |
100 | 99 | this.loadData(1, e.value); |
100 | + setTimeout(() => { | |
101 | + uni.hideKeyboard(); | |
102 | + }, 10); | |
101 | 103 | }, |
102 | 104 | hideKeyboard() { |
103 | 105 | uni.hideKeyboard(); | ... | ... |
uni_modules/alert-detail.png
deleted
100644 → 0
107 Bytes
... | ... | @@ -27,7 +27,7 @@ const GlobalOption = { |
27 | 27 | zh: { |
28 | 28 | up: { |
29 | 29 | textLoading: '加载中 ...', // 加载中的提示文本 |
30 | - textNoMore: '-- END --', // 没有更多数据的提示文本 | |
30 | + textNoMore: '-- 我是有底线的 --', // 没有更多数据的提示文本 | |
31 | 31 | empty: { |
32 | 32 | tip: '~ 暂无相关数据 ~' // 空提示 |
33 | 33 | } |
... | ... | @@ -37,7 +37,7 @@ const GlobalOption = { |
37 | 37 | en: { |
38 | 38 | up: { |
39 | 39 | textLoading: 'loading ...', |
40 | - textNoMore: '-- END --', | |
40 | + textNoMore: '-- 我是有底线的 --', | |
41 | 41 | empty: { |
42 | 42 | tip: '~ absolutely empty ~' |
43 | 43 | } | ... | ... |
... | ... | @@ -95,7 +95,7 @@ MeScroll.prototype.extendUpScroll = function(optUp) { |
95 | 95 | noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 |
96 | 96 | offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) |
97 | 97 | textLoading: '加载中 ...', // 加载中的提示文本 |
98 | - textNoMore: '-- END --', // 没有更多数据的提示文本 | |
98 | + textNoMore: '-- 我是有底线的 --', // 没有更多数据的提示文本 | |
99 | 99 | bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorBottom) |
100 | 100 | textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) |
101 | 101 | inited: null, // 初始化完毕的回调 | ... | ... |