index.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <template>
  2. <div class="grid full init-name-view">
  3. <div class="init-name-modal">
  4. <div class="p-l-large modal-header">首次登录,请填写姓名</div>
  5. <div class="login-modal-content">
  6. <base-form ref="formRef" :model="model" :items="items" size="large"></base-form>
  7. <div class="m-t-super-large">
  8. <confirm-button ok-text="确定" cancel-text="退出" :loading="loading" @confirm="onSubmit" @cancel="logout">
  9. </confirm-button>
  10. </div>
  11. </div>
  12. </div>
  13. </div>
  14. </template>
  15. <script setup lang="ts" name="InitUserName">
  16. import { reactive } from 'vue'
  17. import { useRouter } from 'vue-router'
  18. import BaseForm from '@/components/element/BaseForm.vue'
  19. import ConfirmButton from '@/components/common/ConfirmButton.vue'
  20. import useFetch from '@/hooks/useFetch'
  21. import useForm from '@/hooks/useForm'
  22. import useMainStore from '@/store/main'
  23. import { logout } from '@/utils/shared'
  24. import type { EpFormItem } from 'global-type'
  25. const { replace } = useRouter()
  26. const mainStore = useMainStore()
  27. const model = reactive<{ name: string }>({ name: '' })
  28. const { formRef, elFormRef } = useForm()
  29. const items: EpFormItem[] = [
  30. {
  31. prop: 'name',
  32. slotType: 'input',
  33. slot: {
  34. placeholder: '请输入你的姓名',
  35. },
  36. },
  37. ]
  38. const { loading, fetch } = useFetch('updateUserName')
  39. async function onSubmit() {
  40. if (!elFormRef) {
  41. return
  42. }
  43. try {
  44. await elFormRef.value?.validate()
  45. await fetch({ name: model.name })
  46. mainStore.getMyUserInfo()
  47. replace({ name: mainStore.loginInfo?.role === 'MARKER' ? 'MarkingMark' : 'AnalysisMonitoring' })
  48. } catch (error) {
  49. console.error(error)
  50. }
  51. }
  52. </script>
  53. <style scoped lang="scss">
  54. .init-name-view {
  55. place-items: center;
  56. .init-name-modal {
  57. width: 640px;
  58. background: $LoginModalBg;
  59. border-radius: $LoginModalRadius;
  60. overflow: hidden;
  61. .modal-header {
  62. height: $LoginModalHeaderHeight;
  63. line-height: $LoginModalHeaderHeight;
  64. background: $LoginModalHeaderBg;
  65. font-size: $LoginModalHeaderFontSize;
  66. font-weight: normal;
  67. color: $LoginModalHeaderFontColor;
  68. }
  69. .login-modal-content {
  70. padding: 52px 80px;
  71. }
  72. :deep(button.el-button) {
  73. width: 120px;
  74. height: 48px;
  75. }
  76. }
  77. }
  78. </style>