index.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import { defineComponent, onBeforeUnmount, reactive, ref, onMounted } from 'vue';
  2. import loginStyles from './images/login_styles.png';
  3. import loginLeft from './images/login-left.png';
  4. import loginRight from './images/loginright.png';
  5. import colLogo from './images/colLogo.png';
  6. import CodeLogin from './components/codeLogin';
  7. import PwdLogin from './components/pwdLogin';
  8. import { NTabs, NTabPane, useDialog, NModal, NButton, NSpace } from 'naive-ui';
  9. import styles from './index.module.less';
  10. import ForgotPassword from './components/forgotPassword';
  11. import moveTop from './images/moveTopBg.png'
  12. import dingPng from './images/ding.png'
  13. import closeAble from './images/closeAble.png'
  14. export default defineComponent({
  15. name: 'login-page',
  16. setup() {
  17. const isForgot = ref(false);
  18. const NavsValue = ref('pwdLogin');
  19. const pwdLoginRef = ref();
  20. const forgotPasswordRef = ref();
  21. const popEvent = ref()
  22. const dialog = useDialog();
  23. const showModalMask = ref(false)
  24. const checkInstall = async (event: any) => {
  25. event.preventDefault();
  26. console.log('checkInstall', event)
  27. popEvent.value = event
  28. console.log('beforeoutcome')
  29. // const { outcome } = await event.userChoice;
  30. // console.log(outcome, 'outcome')
  31. // setTimeout(async function () {
  32. // try {
  33. // const { outcome } = await event.userChoice;
  34. // console.log(outcome, 'outcome')
  35. // } catch (e) {
  36. // console.log(e)
  37. // }
  38. // }, 2000)
  39. if (window.matchMedia('(display-mode: standalone)').matches) {
  40. console.log('应用内打开')
  41. }else{
  42. console.log(popEvent.value,'popEvent.value')
  43. if(popEvent.value){
  44. showModalMask.value = true;
  45. setTimeout(()=>{
  46. const btn = document.querySelector('#submitBtn')
  47. console.log(btn)
  48. if(btn){
  49. btn.addEventListener('click', () => {
  50. console.log(popEvent.value )
  51. if( !popEvent.value ) {
  52. return;
  53. }
  54. popEvent.value.prompt();
  55. popEvent.value.userChoice.then( (choiceResult:any) => {
  56. if (choiceResult.outcome === 'accepted') {
  57. console.log('用户已同意添加到桌面')
  58. showModalMask.value = false;
  59. } else {
  60. console.log('用户已取消添加到桌面')
  61. showModalMask.value = false;
  62. }
  63. })
  64. })
  65. }
  66. },500)
  67. }
  68. }
  69. }
  70. window.addEventListener('beforeinstallprompt', checkInstall, { once: true })
  71. onBeforeUnmount(() => {
  72. window.removeEventListener('beforeinstallprompt', checkInstall)
  73. })
  74. onMounted(async () => {
  75. // const relatedApps = await navigator?.getInstalledRelatedApps();
  76. //
  77. })
  78. return () => (
  79. <div class={styles['view-account']}>
  80. <div class={styles['view-account-container']}>
  81. <img src={loginLeft} class={styles.loginLeft} alt="" />
  82. <img src={loginRight} class={styles.loginRight} alt="" />
  83. <div class={styles['stylesWrap']}>
  84. <img src={loginStyles} alt="" />
  85. </div>
  86. </div>
  87. <div class={styles['view-account-form']}>
  88. <img class={styles.colLogo} src={colLogo}></img>
  89. {isForgot.value ? (
  90. <NTabs
  91. key="forgotPassword"
  92. default-value={NavsValue.value}
  93. class={[styles.loginTabs, styles.loginForgot]}
  94. ref={forgotPasswordRef}
  95. justify-content="center">
  96. <NTabPane name="forgotPassword" tab="重置密码">
  97. <ForgotPassword
  98. onChangType={() => {
  99. isForgot.value = false;
  100. NavsValue.value = 'pwdLogin';
  101. // pwdLoginRef.value.syncBarPosition();
  102. }}></ForgotPassword>
  103. </NTabPane>
  104. </NTabs>
  105. ) : (
  106. <NTabs
  107. key="pwdLogin"
  108. ref={pwdLoginRef}
  109. default-value={NavsValue.value}
  110. class={[styles.loginTabs]}
  111. justify-content="center">
  112. <NTabPane name="pwdLogin" tab="密码登录">
  113. <PwdLogin
  114. onChangType={() => {
  115. isForgot.value = true;
  116. NavsValue.value = 'forgotPassword';
  117. // forgotPasswordRef.value.syncBarPosition();
  118. }}></PwdLogin>
  119. </NTabPane>
  120. <NTabPane name="codeLogin" tab="短信验证">
  121. <CodeLogin></CodeLogin>
  122. </NTabPane>
  123. </NTabs>
  124. )}
  125. </div>
  126. <NModal
  127. v-model:show={showModalMask.value}
  128. >
  129. {/* <div
  130. onClick={() => {
  131. showModalTone.value = false;
  132. }}>
  133. <NImage
  134. src={toneImage}
  135. previewDisabled
  136. class={styles.beatImage}></NImage>
  137. </div> */}
  138. <div class={styles.downMove}>
  139. <img src={dingPng} class={styles.dingPng} alt="" />
  140. <img src={moveTop} class={styles.downMoveBg} alt="" />
  141. <img src={closeAble} class={styles.closeAble} onClick={()=>{
  142. showModalMask.value = false
  143. }} alt="" />
  144. <h2>温馨提示</h2>
  145. <p>检测到您尚未安装“音乐数字课堂”应用程序,为了更好的使用体验,是否立即下载?</p>
  146. {/* <NButton>确定</NButton> */}
  147. <NSpace style={{ padding: '25px 0 0 0' }} justify="center">
  148. <NButton
  149. {...{id
  150. :'submitBtn'}}
  151. class={styles.submitAppBtn}
  152. round
  153. type="primary"
  154. >
  155. 立即下载
  156. </NButton>
  157. </NSpace>
  158. </div>
  159. </NModal>
  160. </div>
  161. );
  162. }
  163. });