1 line
6.7 KiB
Plaintext
1 line
6.7 KiB
Plaintext
{"version":3,"sources":["pages/user/bind-phone.uvue","uni_modules/ak-req/ak-req.uts","pages/user/change-password.uvue","pages/user/terms.uvue"],"sourcesContent":["<template>\r\n <view class=\"page-container\">\r\n <view class=\"form-group\">\r\n <view class=\"input-item\">\r\n <text class=\"label\">手机号</text>\r\n <input class=\"input\" type=\"number\" placeholder=\"请输入新手机号\" v-model=\"phone\" maxlength=\"11\" />\r\n </view>\r\n <view class=\"input-item\">\r\n <text class=\"label\">验证码</text>\r\n <input class=\"input\" type=\"number\" placeholder=\"请输入验证码\" v-model=\"code\" maxlength=\"6\" />\r\n <text class=\"code-btn\" @click=\"sendCode\">{{ counting ? `${count}s` : '获取验证码' }}</text>\r\n </view>\r\n </view>\r\n \r\n <button class=\"submit-btn\" @click=\"handleSubmit\">确认绑定</button>\r\n </view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref } from 'vue'\r\nimport supa from '@/components/supadb/aksupainstance.uts'\r\n\r\nconst phone = ref('')\r\nconst code = ref('')\r\nconst counting = ref(false)\r\nconst count = ref(60)\r\n\r\nconst sendCode = async () => {\r\n if (counting.value) return\r\n if (!phone.value || phone.value.length !== 11) {\r\n uni.showToast({\r\n title: '请输入正确的手机号',\r\n icon: 'none'\r\n })\r\n return\r\n }\r\n \r\n uni.showLoading({ title: '发送中...' })\r\n \r\n try {\r\n // Supabase updateUser with phone sends an OTP to the new phone number\r\n const { error } = await supa.auth.updateUser({\r\n phone: phone.value\r\n })\r\n \r\n uni.hideLoading()\r\n \r\n if (error != null) {\r\n uni.showToast({\r\n title: '发送失败: ' + error.message,\r\n icon: 'none'\r\n })\r\n return\r\n }\r\n\r\n counting.value = true\r\n count.value = 60\r\n \r\n const timer = setInterval(() => {\r\n count.value--\r\n if (count.value <= 0) {\r\n clearInterval(timer)\r\n counting.value = false\r\n }\r\n }, 1000)\r\n \r\n uni.showToast({\r\n title: '验证码已发送',\r\n icon: 'none'\r\n })\r\n } catch(e) {\r\n uni.hideLoading()\r\n console.error(e)\r\n uni.showToast({ title: '发送异常', icon: 'none' })\r\n }\r\n}\r\n\r\nconst handleSubmit = async () => {\r\n if (!phone.value || !code.value) {\r\n uni.showToast({\r\n title: '请填写完整信息',\r\n icon: 'none'\r\n })\r\n return\r\n }\r\n \r\n uni.showLoading({ title: '绑定中...' })\r\n \r\n try {\r\n // 验证 OTP\r\n const { error } = await supa.auth.verifyOtp({\r\n phone: phone.value,\r\n token: code.value,\r\n type: 'phone_change'\r\n })\r\n \r\n uni.hideLoading()\r\n \r\n if (error != null) {\r\n uni.showToast({\r\n title: '绑定失败: ' + error.message,\r\n icon: 'none'\r\n })\r\n return\r\n }\r\n \r\n uni.showToast({\r\n title: '绑定成功',\r\n icon: 'success'\r\n })\r\n \r\n // 更新本地存储的用户信息\r\n const userInfo = uni.getStorageSync('userInfo')\r\n if (userInfo) {\r\n // @ts-ignore\r\n let u = userInfo as any\r\n u['phone'] = phone.value\r\n uni.setStorageSync('userInfo', u)\r\n }\r\n \r\n setTimeout(() => {\r\n uni.navigateBack()\r\n }, 1500)\r\n } catch(e) {\r\n uni.hideLoading()\r\n console.error(e)\r\n uni.showToast({ title: '系统错误', icon: 'none' })\r\n }\r\n}\r\n</script>\r\n\r\n<style>\r\n.page-container {\r\n padding: 20px;\r\n background-color: #f5f5f5;\r\n flex: 1;\r\n background-color: #fff;\r\n border-radius: 8px;\r\n padding: 0 15px;\r\n margin-bottom: 30px;\r\n}\r\n\r\n.input-item {\r\n display: flex;\r\n align-items: center;\r\n height: 50px;\r\n border-bottom: 1px solid #eee;\r\n}\r\n\r\n.input-item:last-child {\r\n border-bottom: none;\r\n}\r\n\r\n.label {\r\n width: 70px;\r\n font-size: 14px;\r\n color: #333;\r\n}\r\n\r\n.input {\r\n flex: 1;\r\n font-size: 14px;\r\n}\r\n\r\n.code-btn {\r\n color: #007aff;\r\n font-size: 14px;\r\n padding: 5px 10px;\r\n}\r\n\r\n.submit-btn {\r\n background-color: #007aff;\r\n color: #fff;\r\n border-radius: 25px;\r\n font-size: 16px;\r\n}\r\n</style>",null,null,null],"names":[],"mappings":"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"} |