userInfo.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <div class="user-info-page">
  3. <div class="top-bar">
  4. <el-button class="back-btn" @click="handleBack"> 返回 </el-button>
  5. <div class="title">个人信息111</div>
  6. </div>
  7. <div class="form-wrap">
  8. <el-form :model="form" :rules="rules" ref="formRef" label-width="72px">
  9. <el-form-item label="头像">
  10. <el-upload
  11. class="avatar-uploader"
  12. action="#"
  13. list-type="picture-card"
  14. :limit="1"
  15. :on-exceed="onExceed"
  16. v-model:file-list="form.avatarList"
  17. >
  18. <el-icon><Plus /></el-icon>
  19. </el-upload>
  20. </el-form-item>
  21. <el-form-item label="昵称" prop="nickname">
  22. <el-input v-model="form.nickname" placeholder="请输入昵称" />
  23. </el-form-item>
  24. <el-form-item label="简介" prop="intro">
  25. <el-input v-model="form.intro" type="textarea" :rows="6" placeholder="请输入简介" />
  26. </el-form-item>
  27. </el-form>
  28. </div>
  29. </div>
  30. </template>
  31. <script setup lang="ts">
  32. import { ref, reactive } from "vue";
  33. import { ElMessage, type FormInstance, type FormRules } from "element-plus";
  34. import { Plus } from "@element-plus/icons-vue";
  35. import { localGet } from "@/utils/index";
  36. console.log(localGet);
  37. const info = localGet("geeker-user");
  38. console.log(1111111, info);
  39. const formRef = ref<FormInstance>();
  40. const form = reactive({
  41. avatarList: [] as any[],
  42. nickname: "重庆老火锅",
  43. intro: "这——家优秀的火锅店"
  44. });
  45. const rules: FormRules = {
  46. nickname: [{ required: true, message: "请输入昵称", trigger: "blur" }],
  47. intro: [{ required: true, message: "请输入简介", trigger: "blur" }]
  48. };
  49. const onExceed = () => {
  50. ElMessage.warning("仅允许上传一张头像");
  51. };
  52. const handleBack = () => {
  53. history.back();
  54. };
  55. const handleSave = async () => {
  56. if (!formRef.value) return;
  57. await formRef.value.validate(valid => {
  58. if (!valid) return;
  59. // TODO: 接口保存
  60. ElMessage.success("保存成功");
  61. });
  62. };
  63. </script>
  64. <style scoped lang="scss">
  65. .user-info-page {
  66. padding: 16px;
  67. background: #ffffff;
  68. .top-bar {
  69. display: flex;
  70. gap: 12px;
  71. align-items: center;
  72. .title {
  73. flex: 1;
  74. margin-right: 48px; // 平衡左侧返回按钮的宽度
  75. font-size: 18px;
  76. font-weight: 600;
  77. color: #303133;
  78. text-align: center;
  79. }
  80. }
  81. .form-wrap {
  82. max-width: 640px;
  83. margin-top: 16px;
  84. .avatar-uploader {
  85. :deep(.el-upload--picture-card) {
  86. width: 96px;
  87. height: 96px;
  88. }
  89. }
  90. :deep(.el-form-item__label) {
  91. color: #303133;
  92. }
  93. .actions {
  94. margin-top: 24px;
  95. text-align: center;
  96. .save-btn {
  97. width: 140px;
  98. }
  99. }
  100. }
  101. }
  102. </style>