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