Forráskód Böngészése

上传录音提供必要的默认值

chenyidong 4 hónap óta
szülő
commit
c24753f5f6

+ 8 - 1
pages/clueDetail/page/clueDetail.vue

@@ -289,7 +289,14 @@
289 289
 			// 添加联系人
290 290
 			handleCallPhone() {
291 291
 				uni.makePhoneCall({
292
-					phoneNumber: this.clueDetail.telephone
292
+					phoneNumber: this.clueDetail.telephone,
293
+					success: () => {
294
+						this.$store.commit("call/SET_FORM", {
295
+							clueId: this.clueId,
296
+							type: '3',
297
+							callee: this.clueDetail.telephone
298
+						})
299
+					}
293 300
 				});
294 301
 			},
295 302
 			// 添加催记

+ 1 - 1
pages/clueDetail/tabs/callRecord/index.vue

@@ -9,7 +9,7 @@
9 9
 					<view class="timestamp">{{ titleText(data) }}</view>
10 10
 					<view class="info_top">
11 11
 						<view class="info_left">
12
-							<text class="name_text">{{ data.createNickName }} 打给 {{ clueDetail.name }}</text>
12
+							<text class="name_text">{{ data.caller }} 打给 {{ data.callee }}</text>
13 13
 						</view>
14 14
 						<view class="info_right">
15 15
 							{{ data.type === 1 ? data.followState : '' }}

+ 32 - 1
pages/uploadRecord/index.vue

@@ -64,6 +64,9 @@
64 64
 			filelist(){
65 65
 				return this.$store.state.call.filelist;
66 66
 			},
67
+			storeForm() {
68
+				return this.$store.state.call.form;
69
+			},
67 70
 		},
68 71
 		data() {
69 72
 			return {
@@ -106,6 +109,33 @@
106 109
 			}
107 110
 		},
108 111
 		methods: {
112
+			initFormFromStore() {
113
+				const storeFormData = this.storeForm;
114
+				this.form = {
115
+					...this.form,
116
+					clueId: this.form.clueId, 
117
+					caller: storeFormData.caller || '',
118
+					callee: storeFormData.callee || '',
119
+					fileUrl: this.form.fileUrl,
120
+					fileName: this.form.fileName,
121
+					remark: this.form.remark,
122
+					type: this.form.type,
123
+					list: this.form.list
124
+				};
125
+				if(!this.form.callee){
126
+					// 没有准备被叫号码 直接去查线索的telephone
127
+					uni.$u.api.getClueMainInfoById({id : this.form.clueId}).then(({data})=>{
128
+						this.form.callee = data.telephone;
129
+					})
130
+				};
131
+				if(!this.form.caller){
132
+					// 没有准备主叫号码 直接去尝试获取
133
+					this.$store.dispatch("call/getUserPhoneNumber").then(phone=>{
134
+						this.form.caller = phone;
135
+					})
136
+				}
137
+			},
138
+			
109 139
 			handleFileChange(file){
110 140
 				// {
111 141
 				    // "filePath": "/storage/emulated/0/Recordings/Record/Call/15099989786 2025-11-11 09-41-57.m4a",
@@ -166,7 +196,8 @@
166 196
 		onLoad(option) {
167 197
 			this.$store.dispatch("call/getFileList");
168 198
 			this.form.clueId = option.clueId;
169
-		}
199
+			this.initFormFromStore();
200
+		},
170 201
 	}
171 202
 </script>
172 203
 

+ 69 - 1
store/modules/call.js

@@ -5,10 +5,10 @@ import {
5 5
 	toCallAutoRecorderPage,
6 6
 	navigateToCallRecordingSettings,
7 7
 	jumpToPermissionPage,
8
-	makePhoneCall,
9 8
 	allRecorderFilesAction
10 9
 } from '@/uni_modules/yao-lister';
11 10
 import permision from "@/js_sdk/wa-permission/permission.js";
11
+import { formatPhoneNumber } from '../../utils/util';
12 12
 
13 13
 export default {
14 14
 	namespaced: true,
@@ -52,6 +52,12 @@ export default {
52 52
 		SET_READ_PHONE_NUMBERS_PERMISSION: (state, value) => {
53 53
 			state.hasReadPhoneNumbersPermission = value;
54 54
 		},
55
+		SET_CALLER_PHONE: (state, phoneNumber) => {
56
+			state.form.caller = phoneNumber;
57
+		},
58
+		SET_FORM: (state, data) => {
59
+			state.form = data;
60
+		},
55 61
 	},
56 62
 	actions: {
57 63
 		getFileList({dispatch,state, commit}) {
@@ -123,6 +129,68 @@ export default {
123 129
 			
124 130
 		},
125 131
 
132
+		// 获取用户手机号码
133
+		getUserPhoneNumber({ commit }) {
134
+			return new Promise((resolve, reject) => {
135
+				// 首先检查权限
136
+				permision.requestAndroidPermission('android.permission.READ_PHONE_NUMBERS')
137
+					.then(result => {
138
+						if (result === 1) {
139
+							// 权限被授予,获取手机号码
140
+							try {
141
+								const main = plus.android.runtimeMainActivity();
142
+								const Context = plus.android.importClass('android.content.Context');
143
+								const TelephonyManager = plus.android.importClass('android.telephony.TelephonyManager');
144
+								
145
+								const telephonyManager = main.getSystemService(Context.TELEPHONY_SERVICE);
146
+								const phoneNumber = telephonyManager.getLine1Number();
147
+								
148
+								if (phoneNumber && phoneNumber.trim() !== '') {
149
+									// 移除国际区号,保留手机号码
150
+									const cleanPhoneNumber = formatPhoneNumber(phoneNumber);
151
+									commit('SET_CALLER_PHONE', cleanPhoneNumber);
152
+									resolve(cleanPhoneNumber);
153
+								} else {
154
+									// 如果获取不到手机号码,尝试使用备选方法
155
+									try {
156
+										const SubscriptionManager = plus.android.importClass('android.telephony.SubscriptionManager');
157
+										const subscriptionManager = main.getSystemService(Context.TELEPHONY_SERVICE);
158
+										const activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
159
+										
160
+										if (activeSubscriptionInfoList && activeSubscriptionInfoList.size() > 0) {
161
+											const subscriptionInfo = activeSubscriptionInfoList.get(0);
162
+											const number = subscriptionInfo.getNumber();
163
+											if (number && number.trim() !== '') {
164
+												// 移除国际区号,保留手机号码
165
+												const cleanPhoneNumber = formatPhoneNumber(number);
166
+												commit('SET_CALLER_PHONE', cleanPhoneNumber);
167
+												resolve(cleanPhoneNumber);
168
+											} else {
169
+												reject(new Error('无法获取手机号码:SIM卡可能未激活或号码无效'));
170
+											}
171
+										} else {
172
+											reject(new Error('无法获取手机号码:未检测到有效的SIM卡'));
173
+										}
174
+									} catch (fallbackError) {
175
+										console.error('备选方法获取手机号码失败:', fallbackError);
176
+										reject(new Error('无法获取手机号码:设备可能不支持或运营商限制'));
177
+									}
178
+								}
179
+							} catch (error) {
180
+								console.error('获取手机号码失败:', error);
181
+								reject(new Error('获取手机号码失败: ' + error.message));
182
+							}
183
+						} else {
184
+							reject(new Error('没有获取手机号码的权限,请前往设置开启权限'));
185
+						}
186
+					})
187
+					.catch(error => {
188
+						console.error('请求权限失败:', error);
189
+						reject(error);
190
+					});
191
+			});
192
+		},
193
+
126 194
 		// 检查所有权限状态
127 195
 		checkAllPermissions({ commit }) {
128 196
 			return new Promise((resolve, reject) => {

+ 23 - 1
utils/util.js

@@ -21,13 +21,35 @@ export function is_weixin() {
21 21
 	// #ifdef H5
22 22
 	flag = String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger";
23 23
 	// #endif
24
-	
24
+
25 25
 	// #ifdef  APP-PLUS
26 26
 	flag = false;
27 27
 	// #endif
28 28
 	return flag;
29 29
 }
30 30
 
31
+// 格式化手机号码,移除国际区号
32
+export function formatPhoneNumber(phoneNumber) {
33
+	if (!phoneNumber) return '';
34
+
35
+	// 移除非数字字符
36
+	let cleaned = phoneNumber.replace(/\D/g, '');
37
+
38
+	// 如果是中国手机号(+86 或 86 开头)
39
+	if (cleaned.startsWith('86') && cleaned.length === 13) {
40
+		// 移除中国区号 86
41
+		cleaned = cleaned.substring(2);
42
+	} else if (cleaned.startsWith('1') && cleaned.length === 11) {
43
+		// 如果是11位数字,可能是中国手机号
44
+		cleaned = cleaned;
45
+	} else if (cleaned.startsWith('1') && cleaned.length === 12 && phoneNumber.includes('+86')) {
46
+		// 如果是+86开头的完整号码
47
+		cleaned = cleaned.substring(2);
48
+	}
49
+
50
+	return cleaned;
51
+};
52
+
31 53
 
32 54
 /**
33 55
  * 获取Androoid设备mac地址