浏览代码

添加对通话自动录音和文件访问权限的检测

chenyidong 4 月之前
父节点
当前提交
19a0625eea
共有 2 个文件被更改,包括 409 次插入314 次删除
  1. 408 311
      pages/circumstances/index.vue
  2. 1 3
      pages/login/index - 副本 (2).vue

+ 408 - 311
pages/circumstances/index.vue

@@ -1,337 +1,434 @@
1 1
 <template>
2
-	<view class="cirumstances_wrap">
3
-		<u-navbar placeholder :autoBack="true" title="环境监测" v-hideNav>
4
-			<view class="u-nav-slot right_btn" slot="right">
5
-				<view class="reset" @click="handleReset">
6
-					<u-icon name="reload" color="#108CFF"></u-icon>刷新
7
-				</view>
8
-			</view>
9
-		</u-navbar>
10
-		<view class="option_list">
11
-			<view class="option_item">
12
-				<view class="item_left">
13
-					<text class="label">登录用户</text>
14
-				</view>
15
-				<view class="item-right">
16
-					<text>{{nickName}}</text>
17
-				</view>
18
-			</view>
19
-			<template v-if="isCallOff === '1'">
20
-				<view class="option_item">
21
-					<view class="item_left">
22
-						<text class="label">外呼分机号</text>
23
-					</view>
24
-					<view class="item-right">
25
-						<text>{{callAccount ? callAccount.extenNum : "未配置分机号"}}</text>
26
-					</view>
27
-				</view>
28
-				<view class="option_item">
29
-					<view class="item_left">
30
-						<text class="label">外呼注册状态</text>
31
-					</view>
32
-					<view class="item-right" @longpress="handleRegisterFun">
33
-						<text v-if="callAccount != null && callSystem != null">
34
-							{{ ipAddress }}
35
-						</text>
36
-						<text class="btn" v-else @click="handleRegisterFun">点击注册</text>
37
-						<icon-img :value="callAccount != null && callSystem != null"></icon-img>
38
-					</view>
39
-				</view>
40
-				<view class="option_item">
41
-					<view class="item_left">
42
-						<text class="label">外呼签入状态</text>
43
-					</view>
44
-					<view class="item-right">
45
-						<text v-if="signInState">正常</text>
46
-						<text class="btn" v-else @click="handleRegisterFun">点击签入</text>
47
-						<icon-img :value="signInState"></icon-img>
48
-						<icon-img :value="redisStatus"></icon-img>
49
-					</view>
50
-				</view>
51
-			</template>
52
-			<template v-else>
53
-				<view class="option_item">
54
-					<view class="item_left">
55
-						<text class="label">呼叫中心</text>
56
-					</view>
57
-					<view class="item-right" @longpress="handleRegisterFun">
58
-						<text>不启用</text>
59
-						<icon-img :value="isCallOff === '1'"></icon-img>
60
-					</view>
61
-				</view>
62
-			</template>
63
-			<view class="option_item">
64
-				<view class="item_left">
65
-					<text class="label">麦克风权限</text>
66
-				</view>
67
-				<view class="item-right">
68
-					<text v-if="isRecord">已授权</text>
69
-					<text class="btn" v-else @click="handleOpenSet">点击授权</text>
70
-					<icon-img :value="isRecord"></icon-img>
71
-				</view>
72
-			</view>
73
-			<view class="option_item">
74
-				<view class="item_left">
75
-					<text class="label">定位服务</text>
76
-				</view>
77
-				<view class="item-right">
78
-					<text v-if="systemLocation">已开启</text>
79
-					<text v-else>未开启</text>
80
-					<icon-img :value="systemLocation"></icon-img>
81
-				</view>
82
-			</view>
83
-			<view class="option_item">
84
-				<view class="item_left">
85
-					<text class="label">定位权限</text>
86
-				</view>
87
-				<view class="item-right">
88
-					<text v-if="isLocation">已授权</text>
89
-					<text class="btn" v-else @click="handleOpenSet">点击授权</text>
90
-					<icon-img :value="isLocation"></icon-img>
91
-				</view>
92
-			</view>
93
-			<view class="option_item">
94
-				<view class="item_left">
95
-					<text class="label">X5引擎</text>
96
-				</view>
97
-				<view class="item-right">
98
-					<text v-if="isX5">启用</text>
99
-					<text v-else>不启用</text>
100
-					<icon-img :value="isX5"></icon-img>
101
-				</view>
102
-			</view>
103
-			<view class="option_item">
104
-				<view class="item_left">
105
-					<text class="label">品牌型号</text>
106
-				</view>
107
-				<view class="item-right">
108
-					<text>{{deviceBrand}}</text>
109
-				</view>
110
-			</view>
111
-			<view class="option_item">
112
-				<view class="item_left">
113
-					<text class="label">所用系统</text>
114
-				</view>
115
-				<view class="item-right">
116
-					<text>{{system}}</text>
117
-				</view>
118
-			</view>
119
-		</view>
120
-		<view class="tips_wrap" @longpress="handleOpenSet">
121
-			<view class="left">
122
-				<image src="../../static/circumstances/success.png" mode="" class="icon_img">
123
-				</image>
124
-				<text>正常</text>
125
-			</view>
126
-			<view class="right">
127
-				<image src="../../static/circumstances/error.png" mode="" class="icon_img"></image>
128
-				<text>不正常</text>
129
-			</view>
130
-		</view>
131
-	</view>
2
+  <view class="cirumstances_wrap">
3
+    <u-navbar placeholder :autoBack="true" title="环境监测" v-hideNav>
4
+      <view class="u-nav-slot right_btn" slot="right">
5
+        <view class="reset" @click="handleReset">
6
+          <u-icon name="reload" color="#108CFF"></u-icon>刷新
7
+        </view>
8
+      </view>
9
+    </u-navbar>
10
+    <view class="option_list">
11
+      <view class="option_item">
12
+        <view class="item_left">
13
+          <text class="label">登录用户</text>
14
+        </view>
15
+        <view class="item-right">
16
+          <text>{{ nickName }}</text>
17
+        </view>
18
+      </view>
19
+      <template v-if="isCallOff === '1'">
20
+        <view class="option_item">
21
+          <view class="item_left">
22
+            <text class="label">外呼分机号</text>
23
+          </view>
24
+          <view class="item-right">
25
+            <text>{{
26
+              callAccount ? callAccount.extenNum : "未配置分机号"
27
+            }}</text>
28
+          </view>
29
+        </view>
30
+        <view class="option_item">
31
+          <view class="item_left">
32
+            <text class="label">外呼注册状态</text>
33
+          </view>
34
+          <view class="item-right" @longpress="handleRegisterFun">
35
+            <text v-if="callAccount != null && callSystem != null">
36
+              {{ ipAddress }}
37
+            </text>
38
+            <text class="btn" v-else @click="handleRegisterFun">点击注册</text>
39
+            <icon-img
40
+              :value="callAccount != null && callSystem != null"
41
+            ></icon-img>
42
+          </view>
43
+        </view>
44
+        <view class="option_item">
45
+          <view class="item_left">
46
+            <text class="label">外呼签入状态</text>
47
+          </view>
48
+          <view class="item-right">
49
+            <text v-if="signInState">正常</text>
50
+            <text class="btn" v-else @click="handleRegisterFun">点击签入</text>
51
+            <icon-img :value="signInState"></icon-img>
52
+            <icon-img :value="redisStatus"></icon-img>
53
+          </view>
54
+        </view>
55
+      </template>
56
+      <template v-else>
57
+        <view class="option_item">
58
+          <view class="item_left">
59
+            <text class="label">呼叫中心</text>
60
+          </view>
61
+          <view class="item-right" @longpress="handleRegisterFun">
62
+            <text>不启用</text>
63
+            <icon-img :value="isCallOff === '1'"></icon-img>
64
+          </view>
65
+        </view>
66
+      </template>
67
+      <view class="option_item">
68
+        <view class="item_left">
69
+          <text class="label">麦克风权限</text>
70
+        </view>
71
+        <view class="item-right">
72
+          <text v-if="isRecord">已授权</text>
73
+          <text class="btn" v-else @click="handleOpenSet">点击授权</text>
74
+          <icon-img :value="isRecord"></icon-img>
75
+        </view>
76
+      </view>
77
+      <!-- 通话自动录音状态 -->
78
+      <view class="option_item">
79
+        <view class="item_left">
80
+          <text class="label">通话自动录音</text>
81
+        </view>
82
+        <view class="item-right">
83
+          <text v-if="isAutoRecord">已开启</text>
84
+          <text class="btn" v-else @click="toCallRecorderSettings"
85
+            >点击开启</text
86
+          >
87
+          <icon-img :value="isAutoRecord"></icon-img>
88
+        </view>
89
+      </view>
90
+      <!-- 文件访问权限状态 -->
91
+      <view class="option_item">
92
+        <view class="item_left">
93
+          <text class="label">文件访问权限</text>
94
+        </view>
95
+        <view class="item-right">
96
+          <text v-if="hasStoragePermission">已授权</text>
97
+          <text class="btn" v-else @click="requestStoragePermission"
98
+            >点击授权</text
99
+          >
100
+          <icon-img :value="hasStoragePermission"></icon-img>
101
+        </view>
102
+      </view>
103
+      <view class="option_item">
104
+        <view class="item_left">
105
+          <text class="label">定位服务</text>
106
+        </view>
107
+        <view class="item-right">
108
+          <text v-if="systemLocation">已开启</text>
109
+          <text v-else>未开启</text>
110
+          <icon-img :value="systemLocation"></icon-img>
111
+        </view>
112
+      </view>
113
+      <view class="option_item">
114
+        <view class="item_left">
115
+          <text class="label">定位权限</text>
116
+        </view>
117
+        <view class="item-right">
118
+          <text v-if="isLocation">已授权</text>
119
+          <text class="btn" v-else @click="handleOpenSet">点击授权</text>
120
+          <icon-img :value="isLocation"></icon-img>
121
+        </view>
122
+      </view>
123
+      <view class="option_item">
124
+        <view class="item_left">
125
+          <text class="label">X5引擎</text>
126
+        </view>
127
+        <view class="item-right">
128
+          <text v-if="isX5">启用</text>
129
+          <text v-else>不启用</text>
130
+          <icon-img :value="isX5"></icon-img>
131
+        </view>
132
+      </view>
133
+      <view class="option_item">
134
+        <view class="item_left">
135
+          <text class="label">品牌型号</text>
136
+        </view>
137
+        <view class="item-right">
138
+          <text>{{ deviceBrand }}</text>
139
+        </view>
140
+      </view>
141
+      <view class="option_item">
142
+        <view class="item_left">
143
+          <text class="label">所用系统</text>
144
+        </view>
145
+        <view class="item-right">
146
+          <text>{{ system }}</text>
147
+        </view>
148
+      </view>
149
+    </view>
150
+    <view class="tips_wrap" @longpress="handleOpenSet">
151
+      <view class="left">
152
+        <image
153
+          src="../../static/circumstances/success.png"
154
+          mode=""
155
+          class="icon_img"
156
+        >
157
+        </image>
158
+        <text>正常</text>
159
+      </view>
160
+      <view class="right">
161
+        <image
162
+          src="../../static/circumstances/error.png"
163
+          mode=""
164
+          class="icon_img"
165
+        ></image>
166
+        <text>不正常</text>
167
+      </view>
168
+    </view>
169
+  </view>
132 170
 </template>
133 171
 
134 172
 <script>
135
-	import {
136
-		mapState
137
-	} from 'vuex';
138
-	import iconImg from "./components/iconImg.vue"
139
-	import permision from "@/js_sdk/wa-permission/permission.js";
140
-	
141
-	import {
142
-		startPhoneListener,
143
-		stopPhoneListener,
144
-		checkIsAutoRecord,
145
-		toCallAutoRecorderPage,
146
-		navigateToCallRecordingSettings,
147
-		jumpToPermissionPage,
148
-		makePhoneCall,
149
-		allRecorderFilesAction,
150
-	} from '@/uni_modules/yao-lister';
151
-	
152
-	export default {
153
-		components: {
154
-			iconImg
155
-		},
156
-		computed: {
157
-			...mapState({
158
-				nickName: (state) => state.user.userInfo.nickName,
159
-				callAccount: (state) => state.app.callAccount,
160
-				signInState: (state) => state.app.signInState,
161
-				ipAddress: (state) => (state.app.registerInfo && state.app.registerInfo.register) ? state.app
162
-					.registerInfo.register['IPv4'].slice(-3) : '异常',
163
-				redisStatus: (state) => state.app.redisStatus,
164
-				callSystem: (state) => state.app.callSystem,
165
-				uuid: (state) => state.user.uuid,
166
-				isCallOff : (state)=> state.user.netConfig.isCallOff
167
-			}),
168
-		},
169
-		data() {
170
-			return {
171
-				isX5: false,
172
-				isRecord: false,
173
-				isLocation: false,
174
-				system: "",
175
-				deviceBrand: "",
176
-				systemLocation: false
177
-			}
178
-		},
179
-		methods: {
180
-			// 刷新
181
-			handleReset() {
182
-				this.getAllStatus();
183
-				uni.$u.toast("刷新成功");
184
-			},
185
-			// 打开设置
186
-			handleOpenSet() {
187
-				permision.gotoAppPermissionSetting("android.permission.RECORD_AUDIO");
188
-			},
189
-			// 注册
190
-			handleRegisterFun() {
191
-				this.$store.dispatch("app/getExtensionByUserId", {
192
-					userId: this.$store.state.user.userInfo.userId
193
-				}).then((res) => {
194
-					Promise.all([permision.requestAndroidPermission("android.permission.RECORD_AUDIO"), permision
195
-						.requestAndroidPermission('android.permission.MODIFY_AUDIO_SETTINGS')
196
-					]).then(result => {
197
-						const flag = result.every(v => v == 1);
198
-						if (flag) {
199
-							this.$store.dispatch("app/createWv");
200
-						}
201
-					})
202
-				});
203
-			},
204
-			// 检测定位服务是否开启
205
-			checkSystemEnableLocation() {
206
-				let context = plus.android.importClass("android.content.Context");
207
-				let locationManager = plus.android.importClass("android.location.LocationManager");
208
-				let main = plus.android.runtimeMainActivity();
209
-				let mainSvr = main.getSystemService(context.LOCATION_SERVICE);
210
-				let result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
211
-				return result;
212
-			},
213
-			getAllStatus() {
214
-				uni.getSystemInfo({
215
-					success: (res) => {
216
-						this.deviceBrand = res.deviceBrand + " " + res.model;
217
-						this.system = res.system ? res.system : "获取失败";
218
-						this.isX5 = res.browserName.includes("x5");
219
-					}
220
-				});
173
+import { mapState } from "vuex";
174
+import iconImg from "./components/iconImg.vue";
175
+import permision from "@/js_sdk/wa-permission/permission.js";
221 176
 
222
-				permision.requestAndroidPermission("android.permission.RECORD_AUDIO").then(result => {
223
-					this.isRecord = result == "1";
224
-				});
177
+import {
178
+  checkIsAutoRecord,
179
+  toCallAutoRecorderPage,
180
+  navigateToCallRecordingSettings,
181
+  jumpToPermissionPage,
182
+} from "@/uni_modules/yao-lister";
225 183
 
226
-				this.systemLocation = this.checkSystemEnableLocation();
184
+export default {
185
+  components: {
186
+    iconImg,
187
+  },
188
+  computed: {
189
+    ...mapState({
190
+      nickName: (state) => state.user.userInfo.nickName,
191
+      callAccount: (state) => state.app.callAccount,
192
+      signInState: (state) => state.app.signInState,
193
+      ipAddress: (state) =>
194
+        state.app.registerInfo && state.app.registerInfo.register
195
+          ? state.app.registerInfo.register["IPv4"].slice(-3)
196
+          : "异常",
197
+      redisStatus: (state) => state.app.redisStatus,
198
+      callSystem: (state) => state.app.callSystem,
199
+      uuid: (state) => state.user.uuid,
200
+      isCallOff: (state) => state.user.netConfig.isCallOff,
201
+    }),
202
+  },
203
+  data() {
204
+    return {
205
+      isX5: false,
206
+      isRecord: false,
207
+      isLocation: false,
208
+      system: "",
209
+      deviceBrand: "",
210
+      systemLocation: false,
211
+      isAutoRecord: false, // 通话自动录音状态
212
+      hasStoragePermission: false, // 文件访问权限状态
213
+    };
214
+  },
215
+  methods: {
216
+    // 刷新
217
+    handleReset() {
218
+      this.getAllStatus();
219
+      uni.$u.toast("刷新成功");
220
+    },
221
+    // 打开设置
222
+    handleOpenSet() {
223
+      permision.gotoAppPermissionSetting("android.permission.RECORD_AUDIO");
224
+    },
225
+    // 请求文件访问权限
226
+    requestStoragePermission() {
227
+      jumpToPermissionPage();
228
+    },
229
+    // 跳转到通话录音设置页面
230
+    toCallRecorderSettings() {
231
+      toCallAutoRecorderPage();
232
+    },
233
+    // 跳转到系统通话录音界面
234
+    toSystemRecorderSettings() {
235
+      navigateToCallRecordingSettings();
236
+    },
237
+    // 注册
238
+    handleRegisterFun() {
239
+      this.$store
240
+        .dispatch("app/getExtensionByUserId", {
241
+          userId: this.$store.state.user.userInfo.userId,
242
+        })
243
+        .then((res) => {
244
+          Promise.all([
245
+            permision.requestAndroidPermission(
246
+              "android.permission.RECORD_AUDIO"
247
+            ),
248
+            permision.requestAndroidPermission(
249
+              "android.permission.MODIFY_AUDIO_SETTINGS"
250
+            ),
251
+          ]).then((result) => {
252
+            const flag = result.every((v) => v == 1);
253
+            if (flag) {
254
+              this.$store.dispatch("app/createWv");
255
+            }
256
+          });
257
+        });
258
+    },
259
+    // 检测定位服务是否开启
260
+    checkSystemEnableLocation() {
261
+      let context = plus.android.importClass("android.content.Context");
262
+      let locationManager = plus.android.importClass(
263
+        "android.location.LocationManager"
264
+      );
265
+      let main = plus.android.runtimeMainActivity();
266
+      let mainSvr = main.getSystemService(context.LOCATION_SERVICE);
267
+      let result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
268
+      return result;
269
+    },
270
+    getAllStatus() {
271
+      uni.getSystemInfo({
272
+        success: (res) => {
273
+          this.deviceBrand = res.deviceBrand + " " + res.model;
274
+          this.system = res.system ? res.system : "获取失败";
275
+          this.isX5 = res.browserName.includes("x5");
276
+          // 获取Android版本号
277
+          let androidVersion = 0;
278
+          if (this.system && this.system.includes("Android")) {
279
+            const versionMatch = this.system.match(/Android (\d+\.?\d*)/);
280
+            if (versionMatch && versionMatch[1]) {
281
+              androidVersion = parseFloat(versionMatch[1]);
282
+            }
283
+          }
227 284
 
228
-				permision.requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION").then(result => {
229
-					this.isLocation = result == "1";
230
-				});
231
-			}
232
-		},
233
-		mounted() {
234
-			this.getAllStatus();
235
-		}
236
-	}
285
+          // 检查文件访问权限
286
+          if (androidVersion >= 11) {
287
+            // Android 11及以上版本,使用MANAGE_EXTERNAL_STORAGE权限(特殊权限)
288
+            try {
289
+              // 使用Android原生API检查特殊权限
290
+              const Environment = plus.android.importClass("android.os.Environment");
291
+              const Context = plus.android.importClass("android.content.Context");
292
+              const mainActivity = plus.android.runtimeMainActivity();
293
+              // 检查是否有管理外部存储的权限
294
+              this.hasStoragePermission = Environment.isExternalStorageManager();
295
+              console.log('MANAGE_EXTERNAL_STORAGE权限状态:', this.hasStoragePermission);
296
+            } catch (e) {
297
+              console.error('检查存储权限失败:', e);
298
+              this.hasStoragePermission = false;
299
+            }
300
+          } else {
301
+            // Android 11以下版本,使用READ_EXTERNAL_STORAGE权限
302
+            permision
303
+              .requestAndroidPermission(
304
+                "android.permission.READ_EXTERNAL_STORAGE"
305
+              )
306
+              .then((result) => {
307
+                this.hasStoragePermission = result === 1;
308
+              });
309
+          }
310
+        },
311
+      });
312
+
313
+      permision
314
+        .requestAndroidPermission("android.permission.RECORD_AUDIO")
315
+        .then((result) => {
316
+          this.isRecord = result == "1";
317
+        });
318
+
319
+      this.systemLocation = this.checkSystemEnableLocation();
320
+
321
+      permision
322
+        .requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION")
323
+        .then((result) => {
324
+          this.isLocation = result == "1";
325
+        });
326
+
327
+      // 检查通话自动录音状态
328
+      this.isAutoRecord = checkIsAutoRecord();
329
+    },
330
+  },
331
+  mounted() {
332
+    this.getAllStatus();
333
+  },
334
+};
237 335
 </script>
238 336
 
239 337
 <style lang="scss" scoped>
240
-	.right_btn {
241
-		display: flex;
242
-		align-items: center;
243
-		font-size: 14px;
244
-
245
-		.copy_btn {
246
-			display: flex;
247
-			align-items: center;
248
-			margin-right: 20rpx;
249
-		}
338
+.right_btn {
339
+  display: flex;
340
+  align-items: center;
341
+  font-size: 14px;
250 342
 
251
-		.reset {
252
-			display: flex;
253
-			align-items: center;
254
-		}
255
-	}
343
+  .copy_btn {
344
+    display: flex;
345
+    align-items: center;
346
+    margin-right: 20rpx;
347
+  }
256 348
 
257
-	.tips_wrap {
258
-		display: flex;
259
-		align-items: center;
260
-		justify-content: space-evenly;
261
-		height: 40px;
262
-		background: #ececec;
263
-		border-radius: 4px;
264
-		margin-top: 15px;
265
-		margin-left: 15px;
266
-		margin-right: 15px;
267
-		margin-bottom: 50px;
349
+  .reset {
350
+    display: flex;
351
+    align-items: center;
352
+  }
353
+}
268 354
 
269
-		.right {
270
-			display: flex;
271
-			align-items: center;
272
-		}
355
+.tips_wrap {
356
+  display: flex;
357
+  align-items: center;
358
+  justify-content: space-evenly;
359
+  height: 40px;
360
+  background: #ececec;
361
+  border-radius: 4px;
362
+  margin-top: 15px;
363
+  margin-left: 15px;
364
+  margin-right: 15px;
365
+  margin-bottom: 50px;
273 366
 
274
-		.left {
275
-			display: flex;
276
-			align-items: center;
277
-		}
367
+  .right {
368
+    display: flex;
369
+    align-items: center;
370
+  }
278 371
 
279
-		.icon_img {
280
-			width: 40rpx;
281
-			height: 40rpx;
282
-			margin-right: 20rpx;
283
-		}
284
-	}
372
+  .left {
373
+    display: flex;
374
+    align-items: center;
375
+  }
285 376
 
286
-	.option_list {
287
-		margin-top: 30rpx;
288
-		padding: 0 30rpx;
377
+  .icon_img {
378
+    width: 40rpx;
379
+    height: 40rpx;
380
+    margin-right: 20rpx;
381
+  }
382
+}
289 383
 
290
-		.option_item {
291
-			display: flex;
292
-			justify-content: space-between;
293
-			align-items: center;
294
-			padding-bottom: 36rpx;
295
-			padding-top: 36rpx;
296
-			border-bottom: 2rpx solid #dfdfdf;
384
+.option_list {
385
+  margin-top: 30rpx;
386
+  padding: 0 30rpx;
297 387
 
298
-			.item_left {
299
-				display: flex;
300
-				align-items: center;
388
+  .option_item {
389
+    display: flex;
390
+    justify-content: space-between;
391
+    align-items: center;
392
+    padding-bottom: 36rpx;
393
+    padding-top: 36rpx;
394
+    border-bottom: 2rpx solid #dfdfdf;
301 395
 
302
-				image {
303
-					width: 32rpx;
304
-					height: 32rpx;
305
-					margin-right: 20rpx;
306
-				}
396
+    .item_left {
397
+      display: flex;
398
+      align-items: center;
307 399
 
308
-				.label {
309
-					font-size: 28rpx;
310
-					color: #202020;
311
-				}
312
-			}
400
+      image {
401
+        width: 32rpx;
402
+        height: 32rpx;
403
+        margin-right: 20rpx;
404
+      }
313 405
 
314
-			.item-right {
315
-				display: flex;
316
-				justify-content: space-between;
317
-				align-items: center;
406
+      .label {
407
+        font-size: 28rpx;
408
+        color: #202020;
409
+      }
410
+    }
318 411
 
319
-				text {
320
-					font-size: 24rpx;
321
-					color: #999999;
322
-					margin-right: 10rpx;
323
-				}
412
+    .item-right {
413
+      display: flex;
414
+      justify-content: space-between;
415
+      align-items: center;
324 416
 
325
-				.btn {
326
-					color: #108CFF;
327
-				}
417
+      text {
418
+        font-size: 24rpx;
419
+        color: #999999;
420
+        margin-right: 10rpx;
421
+      }
328 422
 
329
-				.icon_img {
330
-					width: 40rpx;
331
-					height: 40rpx;
332
-				}
423
+      .btn {
424
+        color: #108cff;
425
+      }
333 426
 
334
-			}
335
-		}
336
-	}
427
+      .icon_img {
428
+        width: 40rpx;
429
+        height: 40rpx;
430
+      }
431
+    }
432
+  }
433
+}
337 434
 </style>

+ 1 - 3
pages/login/index - 副本 (2).vue

@@ -141,9 +141,7 @@
141 141
 					"android.permission.READ_EXTERNAL_STORAGE",
142 142
 					"android.permission.READ_CALL_LOG",
143 143
 					"android.permission.READ_PHONE_NUMBERS",
144
-					"android.permission.FOREGROUND_SERVICE",
145
-					"android.permission.RECEIVE_SMS",
146
-					"android.permission.READ_SMS"
144
+					"android.permission.FOREGROUND_SERVICE"
147 145
 				]
148 146
 				const result = await plus.android.requestPermissions(permissions, 1001)
149 147