user-info.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div class="user-box" :class="{ 'mobile-user': isMobile }">
  3. <div class="title">Basic information</div>
  4. <div class="formBox">
  5. <div class="item">
  6. <div class="label">Nickname:</div>
  7. <div class="val">{{ user.name }}</div>
  8. </div>
  9. <div class="item">
  10. <div class="label">Mobile phone number:</div>
  11. <div class="val">{{ user.contact }}</div>
  12. <span class="iconfont icon-sousuo" @click="handleEdit('info')"></span>
  13. </div>
  14. <div class="item">
  15. <div class="label">Change password:</div>
  16. <!-- <div class="val"></div> -->
  17. <span class="iconfont icon-sousuo" @click="handleEdit('password')"></span>
  18. </div>
  19. <div class="item">
  20. <div class="label">Company name:</div>
  21. <div class="val"> {{ user.companyName || "--" }}</div>
  22. <span class="iconfont icon-sousuo" @click="handleEdit('info')"></span>
  23. </div>
  24. <div class="item">
  25. <div class="label">Company position:</div>
  26. <div class="val">{{ user.addr || "--" }}</div>
  27. <span class="iconfont icon-sousuo" @click="handleEdit('info')"></span>
  28. </div>
  29. <div class="item">
  30. <div class="label">Email address:</div>
  31. <div class="val">{{ user.email }}</div>
  32. <span class="iconfont icon-sousuo" @click="handleEdit('info')"></span>
  33. </div>
  34. <!-- <div class="item">
  35. <div class="label">Contact number:</div>
  36. <div class="val">13512458745</div>
  37. <span class="iconfont icon-sousuo" @click="handleEdit('info')"></span>
  38. </div> -->
  39. </div>
  40. </div>
  41. <n-modal :show="editVisible" :title="editTitle" :showIcon="false" :close-on-esc="false" :mask-closable="false" @esc="editVisible = false" @mask-click="editVisible = false" @close="editVisible = false" class="modalCls" :class="{ 'login-dialog': isMobile }">
  42. <updatePwd v-if="editType == 'password'" @closeSginDialog="closeSginDialog"></updatePwd>
  43. <updateInfo :info="user" v-if="editType == 'info'" @closeSginDialog="closeSginDialog"></updateInfo>
  44. </n-modal>
  45. </template>
  46. <script lang="ts" setup>
  47. import { ref, reactive, onMounted } from "vue";
  48. import { createDiscreteApi } from "naive-ui";
  49. import { set } from "~/node_modules/nuxt/dist/app/compat/capi";
  50. import updateInfo from "./update-info.vue";
  51. import updatePwd from "./updatePwd.vue";
  52. import { useI18n } from "#imports";
  53. const message = createDiscreteApi(["message"]);
  54. const { t } = useI18n();
  55. const props = defineProps({
  56. isMobile: {
  57. type: Boolean,
  58. default: false,
  59. },
  60. });
  61. const user = ref({});
  62. const editVisible = ref(false);
  63. const editTitle = ref(t("myInfo.modify"));
  64. const editType = ref("password");
  65. const getUser = async () => {
  66. let { code, data } = await getUser_Api();
  67. if (code === 200) {
  68. user.value = data;
  69. }
  70. };
  71. const handleEdit = (type: string) => {
  72. editType.value = type;
  73. editVisible.value = true;
  74. if (type == "password") {
  75. editTitle.value = t("myInfo.password");
  76. } else {
  77. editTitle.value = t("reportPop.title");
  78. }
  79. };
  80. const closeSginDialog = () => {
  81. editVisible.value = false;
  82. editType.value = "";
  83. getUser();
  84. };
  85. getUser();
  86. </script>
  87. <style lang="scss" scoped>
  88. @import "~/assets/css/tool.scss";
  89. .user-box {
  90. height: 100%;
  91. .title {
  92. font-size: var(--size-24);
  93. font-family: Arial, Arial-Bold;
  94. font-weight: 700;
  95. color: #1a1a1a;
  96. line-height: var(--size-44);
  97. padding-bottom: var(--size-7);
  98. border-bottom: var(--size-1) solid #e6e6e6;
  99. }
  100. .formBox {
  101. padding-bottom: var(--size-150);
  102. .item {
  103. display: flex;
  104. align-items: center;
  105. border-bottom: var(--size-1) solid #f5f5f5;
  106. margin-bottom: var(--size-10);
  107. .label {
  108. font-size: var(--size-18);
  109. font-family: Arial, Arial-Regular;
  110. color: #666666;
  111. line-height: var(--size-63);
  112. }
  113. .val {
  114. font-size: var(--size-18);
  115. font-family: Arial, Arial-Regular;
  116. color: #1a1a1a;
  117. line-height: var(--size-63);
  118. }
  119. .iconfont {
  120. color: #00b0fd;
  121. display: inline-block;
  122. margin-left: var(--size-20);
  123. font-size: var(--size-18);
  124. cursor: pointer;
  125. }
  126. }
  127. }
  128. }
  129. .modalCls {
  130. width: var(--size-720) !important;
  131. }
  132. @include responseTo("phone") {
  133. .user-box {
  134. .formBox {
  135. padding-bottom: var(--size-30);
  136. margin-top: var(--size-15);
  137. .item {
  138. align-items: baseline;
  139. border-bottom: var(--size-1) solid #f5f5f5;
  140. margin-bottom: var(--size-10);
  141. .label {
  142. font-size: var(--size-14);
  143. font-family: Arial, Arial-Regular;
  144. color: #666666;
  145. line-height: var(--size-30);
  146. flex-shrink: 0;
  147. padding-bottom: var(--size-10);
  148. }
  149. .val {
  150. font-size: var(--size-14);
  151. font-family: Arial, Arial-Regular;
  152. color: #1a1a1a;
  153. line-height: var(--size-30);
  154. padding-bottom: var(--size-10);
  155. }
  156. .iconfont {
  157. color: #00b0fd;
  158. display: inline-block;
  159. margin-left: var(--size-20);
  160. font-size: var(--size-14);
  161. cursor: pointer;
  162. }
  163. }
  164. }
  165. }
  166. }
  167. </style>