fix kashkool
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
import { computed, inject, onMounted, provide, ref, type InjectionKey } from 'vue'
|
||||
import { loading } from '@/utils'
|
||||
import {
|
||||
guideTypePassword,
|
||||
isValidPersian,
|
||||
passwordRules,
|
||||
requireNationalCode,
|
||||
} from '@/utils/inputRules'
|
||||
import type { Password, User } from '@/models/login'
|
||||
import router from '@/router'
|
||||
import type { FormInstance } from 'ant-design-vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { updateMe, updatePass } from '@/api/me'
|
||||
import { useUserStore } from '@/store/userStore'
|
||||
|
||||
export interface UserMenuAction {
|
||||
id: string
|
||||
label: string
|
||||
icon: string
|
||||
onClick: () => void
|
||||
}
|
||||
|
||||
export interface UserPageContext {
|
||||
userStore: ReturnType<typeof useUserStore>
|
||||
userFormState: ReturnType<typeof ref<User>>
|
||||
userPassForm: ReturnType<typeof ref<Password>>
|
||||
formRef: ReturnType<typeof ref<FormInstance | undefined>>
|
||||
formPassRef: ReturnType<typeof ref<FormInstance | undefined>>
|
||||
editPassVisible: ReturnType<typeof ref<boolean>>
|
||||
editPasswordVisible: ReturnType<typeof ref<boolean>>
|
||||
isLegal: ReturnType<typeof computed<{ title: string; color: string; icon: string }>>
|
||||
shareButtonLabel: ReturnType<typeof computed<string>>
|
||||
menuActions: ReturnType<typeof computed<UserMenuAction[]>>
|
||||
loading: typeof loading
|
||||
guideTypePassword: typeof guideTypePassword
|
||||
isValidPersian: typeof isValidPersian
|
||||
requireNationalCode: typeof requireNationalCode
|
||||
passwordRules: typeof passwordRules
|
||||
copyCode: () => void
|
||||
shareCode: () => void
|
||||
ok: () => void
|
||||
submitPassForm: () => void
|
||||
}
|
||||
|
||||
export const USER_PAGE_CONTEXT_KEY: InjectionKey<UserPageContext> = Symbol('userPageContext')
|
||||
|
||||
export function useUserPage() {
|
||||
const userFormState = ref<User>({
|
||||
fname: '',
|
||||
lname: '',
|
||||
mobile: undefined,
|
||||
birth_date: '',
|
||||
city: '',
|
||||
n_code: undefined,
|
||||
})
|
||||
const userPassForm = ref<Password>({ password: '' })
|
||||
const formRef = ref<FormInstance>()
|
||||
const formPassRef = ref<FormInstance>()
|
||||
const userStore = useUserStore()
|
||||
const editPassVisible = ref(false)
|
||||
const editPasswordVisible = ref(false)
|
||||
|
||||
const isLegal = computed(() => {
|
||||
const result = { title: '', color: '', icon: '' }
|
||||
switch (userFormState.value.is_legal) {
|
||||
case 0:
|
||||
result.title = 'احراز هویت نشده'
|
||||
result.color = 'reject'
|
||||
result.icon = 'vuesax-linear:close-circle'
|
||||
break
|
||||
case 1:
|
||||
case 2:
|
||||
result.title = 'احراز هویت شده'
|
||||
result.color = 'success'
|
||||
result.icon = 'vuesax-linear:verify'
|
||||
break
|
||||
}
|
||||
return result
|
||||
})
|
||||
|
||||
const shareButtonLabel = computed(() => 'اشتراک گذاری')
|
||||
|
||||
const menuActions = computed<UserMenuAction[]>(() => [
|
||||
{
|
||||
id: 'password',
|
||||
label: 'تغییر رمز عبور',
|
||||
icon: 'vuesax-linear:lock',
|
||||
onClick: () => { editPasswordVisible.value = true },
|
||||
},
|
||||
{
|
||||
id: 'about',
|
||||
label: 'درباره ما',
|
||||
icon: 'vuesax-linear:info-circle',
|
||||
onClick: () => router.push({ name: 'about' }),
|
||||
},
|
||||
{
|
||||
id: 'rules',
|
||||
label: 'قوانین و مقررات',
|
||||
icon: 'vuesax-linear:task',
|
||||
onClick: () => router.push({ name: 'rules' }),
|
||||
},
|
||||
])
|
||||
|
||||
function setForm() {
|
||||
if (userStore.userInfo) {
|
||||
userFormState.value = { ...userStore.userInfo }
|
||||
}
|
||||
}
|
||||
|
||||
function copyCode() {
|
||||
const val = userStore.userInfo?.referral_id
|
||||
if (val) {
|
||||
navigator.clipboard.writeText(val)
|
||||
message.info('کد رونوشت شد')
|
||||
}
|
||||
}
|
||||
|
||||
function shareCode() {
|
||||
const val = `⭐️الان طلا بخر؛ آخر ماه سودشو ببر!
|
||||
با خرید طلای آبشده در مقدارهای کم ولی مستمر، سود بیشتری ببر!
|
||||
|
||||
این دعوت نامه از طرف "${userStore.userInfo?.name}" عزیز برای شما ارسال شده تا شما هم از بازار طلای کشکول گلد جا نمونید.
|
||||
روی لینک زیر کلیک کنید و ثبت نام خود را تکمیل کنید.
|
||||
|
||||
kh.kashkolgold.ir/login?id=${userStore.userInfo?.referral_id}`
|
||||
navigator.share({ title: 'کشکول گلد', text: val })
|
||||
}
|
||||
|
||||
function ok() {
|
||||
formRef.value?.validateFields().then(async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
await updateMe(userFormState.value)
|
||||
await userStore.getMyInfo()
|
||||
editPassVisible.value = false
|
||||
message.success('اطلاعات شما با موفقیت به روز رسانی شد')
|
||||
location.reload()
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function submitPassForm() {
|
||||
formPassRef.value?.validateFields().then(async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
await updatePass(userPassForm.value)
|
||||
await userStore.getMyInfo()
|
||||
message.success('پسورد شما با موفقیت به روز رسانی شد')
|
||||
editPasswordVisible.value = false
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
setForm()
|
||||
if (userStore.userInfo?.is_legal === 0) {
|
||||
editPassVisible.value = true
|
||||
}
|
||||
})
|
||||
|
||||
const context: UserPageContext = {
|
||||
userStore,
|
||||
userFormState,
|
||||
userPassForm,
|
||||
formRef,
|
||||
formPassRef,
|
||||
editPassVisible,
|
||||
editPasswordVisible,
|
||||
isLegal,
|
||||
shareButtonLabel,
|
||||
menuActions,
|
||||
loading,
|
||||
guideTypePassword,
|
||||
isValidPersian,
|
||||
requireNationalCode,
|
||||
passwordRules,
|
||||
copyCode,
|
||||
shareCode,
|
||||
ok,
|
||||
submitPassForm,
|
||||
}
|
||||
|
||||
provide(USER_PAGE_CONTEXT_KEY, context)
|
||||
return context
|
||||
}
|
||||
|
||||
export function useUserPageContext() {
|
||||
const context = inject(USER_PAGE_CONTEXT_KEY)
|
||||
if (!context) {
|
||||
throw new Error('useUserPageContext must be used within useUserPage')
|
||||
}
|
||||
return context
|
||||
}
|
||||
Reference in New Issue
Block a user