useLogin.ts 997 Bytes
import { PageEnum } from "@/enums/pageEnum"
import { useUserStore } from "@/store/external/module/user"
import { cryptoEncode, routerTurnByName, setLocalStorage } from "@/utils"
import { to } from "@/utils/external/to"
import { StorageEnum } from '@/enums/storageEnum'
import { ref } from "vue"

export const useLogin = () => {
  const userStore = useUserStore()
  const t = window['$t']
  const loading = ref(false)

  const login = async (params: Record<'password' | 'username', string>) => {
    loading.value = true
    const [err, data] = await to<AwaitToResult<typeof userStore['login']>>(userStore.login({
      ...params,
      mode: 'message'
    }))
    loading.value = false
    if (err) {
      return
    }

    setLocalStorage(
      StorageEnum.GO_LOGIN_INFO_STORE,
      cryptoEncode(
        JSON.stringify(params)
      )
    )

    window['$message'].success(`${t('login.login_success')}!`)
    routerTurnByName(PageEnum.BASE_HOME_NAME, true)
  }

  return { login, loading }
}