|
@@ -0,0 +1,110 @@
|
|
|
+import showAsyncCaptchaDialog from '../components/dialog/async-captcha'
|
|
|
+import { ajaxCheckCaptchaCode, ajaxGetSMSCode } from '@/api'
|
|
|
+import { useToast } from '@/utils/use'
|
|
|
+
|
|
|
+export async function getSMSVerifyCaptcha(phone, mold) {
|
|
|
+ const result = await ajaxGetSMSCode({ phone, mold })
|
|
|
+ // Object.assign(result.data.data, {
|
|
|
+ // captcha_key: '2dbeb6c6db961938419408483bca30dc',
|
|
|
+ // image_base64: 'data:image/jpeg;base64,/9j/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEI==',
|
|
|
+ // tile_base64: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD8AAAA/CAYAAABXXxDfAAAWSElEQVR4nMx7W49kZ9Xe8x72qar6PNMznhnP2GPjzx4Ptj+fwP4iAsEJWMEBCyJAuUguo/wCbnKfm1zkKj8CRYqEiBAoyICxgwW+IDEk8Ql77PF4jl2HfXqPn9bau5pJggg==',
|
|
|
+ // tile_width: 63,
|
|
|
+ // tile_height: 63,
|
|
|
+ // tile_x: 24,
|
|
|
+ // tile_y: 24
|
|
|
+ // })
|
|
|
+ return result.data
|
|
|
+}
|
|
|
+
|
|
|
+function getCaptchaData(x = {}) {
|
|
|
+ return {
|
|
|
+ image: x.image_base64 || '',
|
|
|
+ thumb: x.tile_base64 || '',
|
|
|
+ captKey: x.captcha_key || '',
|
|
|
+ thumbX: x.tile_x || 0,
|
|
|
+ thumbY: x.tile_y || 0,
|
|
|
+ thumbWidth: x.tile_width || 0,
|
|
|
+ thumbHeight: x.tile_height || 0
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function refreshCaptcha(phone, mold) {
|
|
|
+ const { error_code: code, data } = await getSMSVerifyCaptcha(phone, mold)
|
|
|
+ if (code === 0 && data) {
|
|
|
+ if (data.code === 1) {
|
|
|
+ return getCaptchaData(data)
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function checkVerify(params = {}) {
|
|
|
+ const { data: axiosData } = await ajaxCheckCaptchaCode(params)
|
|
|
+ const { error_code: code, error_msg: msg, data } = axiosData
|
|
|
+ if (code === 0 && data && data.code === 0) {
|
|
|
+ return true
|
|
|
+ } else {
|
|
|
+ if (msg) {
|
|
|
+ useToast(msg)
|
|
|
+ }
|
|
|
+ return false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export async function useSMSVerify(options = {}) {
|
|
|
+ // /publicapply/captcha/get:mold:1:登录;2:注册;3:找回密码
|
|
|
+ const { phone, mold } = options
|
|
|
+ const captchaInfo = {}
|
|
|
+
|
|
|
+ const {
|
|
|
+ error_code: code,
|
|
|
+ error_msg: msg,
|
|
|
+ data
|
|
|
+ } = await getSMSVerifyCaptcha(phone, mold)
|
|
|
+ if (code === 0 && data) {
|
|
|
+ if (data.code === 0) {
|
|
|
+ return {
|
|
|
+ pass: true
|
|
|
+ }
|
|
|
+ } else if (data.code === 1) {
|
|
|
+ // 初始化值
|
|
|
+ const captchaData = getCaptchaData(data)
|
|
|
+ Object.assign(captchaInfo, captchaData)
|
|
|
+ await showAsyncCaptchaDialog({
|
|
|
+ captchaData,
|
|
|
+ async refresh() {
|
|
|
+ const refresh = await refreshCaptcha(phone, mold)
|
|
|
+ if (refresh) {
|
|
|
+ Object.assign(captchaInfo, refresh)
|
|
|
+ }
|
|
|
+ return refresh
|
|
|
+ },
|
|
|
+ async confirm({ point }) {
|
|
|
+ const pass = await checkVerify({
|
|
|
+ phone,
|
|
|
+ key: captchaInfo.captKey,
|
|
|
+ point: `${point.x},${point.y}`
|
|
|
+ })
|
|
|
+ return pass
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ return {
|
|
|
+ pass: true,
|
|
|
+ captKey: captchaInfo.captKey,
|
|
|
+ phone
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (msg) {
|
|
|
+ useToast(msg)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ pass: false
|
|
|
+ }
|
|
|
+}
|