BaseSetting.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <CollapseContainer title="基本设置" :canExpan="false">
  3. <a-row :gutter="24">
  4. <a-col :span="14">
  5. <BasicForm @register="register" />
  6. </a-col>
  7. <a-col :span="10">
  8. <div class="change-avatar">
  9. <div class="mb-2">头像</div>
  10. <CropperAvatar
  11. :uploadApi="uploadApi"
  12. :value="avatar"
  13. btnText="更换头像"
  14. :btnProps="{ preIcon: 'ant-design:cloud-upload-outlined' }"
  15. @change="updateAvatar"
  16. width="150"
  17. />
  18. </div>
  19. </a-col>
  20. </a-row>
  21. <Button type="primary" @click="handleSubmit"> 更新基本信息 </Button>
  22. </CollapseContainer>
  23. </template>
  24. <script lang="ts">
  25. import { Button, Row, Col } from 'ant-design-vue';
  26. import { computed, defineComponent, onMounted } from 'vue';
  27. import { BasicForm, useForm } from '/@/components/Form/index';
  28. import { CollapseContainer } from '/@/components/Container';
  29. import { CropperAvatar } from '/@/components/Cropper';
  30. import { useMessage } from '/@/hooks/web/useMessage';
  31. import headerImg from '/@/assets/images/header.jpg';
  32. import { accountInfoApi } from '/@/api/demo/account';
  33. import { baseSetschemas } from './data';
  34. import { useUserStore } from '/@/store/modules/user';
  35. import { uploadApi } from '/@/api/sys/upload';
  36. export default defineComponent({
  37. components: {
  38. BasicForm,
  39. CollapseContainer,
  40. Button,
  41. ARow: Row,
  42. ACol: Col,
  43. CropperAvatar,
  44. },
  45. setup() {
  46. const { createMessage } = useMessage();
  47. const userStore = useUserStore();
  48. const [register, { setFieldsValue }] = useForm({
  49. labelWidth: 120,
  50. schemas: baseSetschemas,
  51. showActionButtonGroup: false,
  52. });
  53. onMounted(async () => {
  54. const data = await accountInfoApi();
  55. setFieldsValue(data);
  56. });
  57. const avatar = computed(() => {
  58. const { avatar } = userStore.getUserInfo;
  59. return avatar || headerImg;
  60. });
  61. function updateAvatar({ src, data }) {
  62. const userinfo = userStore.getUserInfo;
  63. userinfo.avatar = src;
  64. userStore.setUserInfo(userinfo);
  65. console.log('data', data);
  66. }
  67. return {
  68. avatar,
  69. register,
  70. uploadApi: uploadApi as any,
  71. updateAvatar,
  72. handleSubmit: () => {
  73. createMessage.success('更新成功!');
  74. },
  75. };
  76. },
  77. });
  78. </script>
  79. <style lang="less" scoped>
  80. .change-avatar {
  81. img {
  82. display: block;
  83. margin-bottom: 15px;
  84. border-radius: 50%;
  85. }
  86. }
  87. </style>