123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- <template>
- <view class="page_container">
- <custom-nav-bar title="个人资料" />
- <view class="info_wrap">
- <info-item
- :loading="loadingState.faceURL"
- @click="updateAvatar"
- title="头像"
- >
- <my-avatar
- :src="selfInfo.faceURL"
- :desc="selfInfo.nickname"
- size="30"
- slot="value"
- />
- </info-item>
- <info-item
- @click="updateNickname"
- title="姓名"
- :content="selfInfo.nickname"
- />
- <info-item
- :loading="loadingState.gender"
- @click="updateGender"
- title="性别"
- :content="getGender"
- />
- <info-item
- :loading="loadingState.birth"
- @click="() => (showDatePicker = true)"
- title="生日"
- :content="getBirth"
- />
- </view>
- <view class="info_wrap">
- <info-item
- :showArrow="false"
- title="手机号码"
- :content="selfInfo.phoneNumber || '-'"
- />
- <info-item
- :showArrow="false"
- title="邮箱"
- :content="selfInfo.email || '-'"
- />
- </view>
- <u-datetime-picker
- :minDate="0"
- :maxDate="nowDate"
- :show="showDatePicker"
- @confirm="confirmDate"
- @cancel="() => (showDatePicker = false)"
- v-model="selfInfo.birth"
- mode="date"
- />
- </view>
- </template>
- <script>
- import { businessInfoUpdate } from "../../..//api/login";
- import IMSDK from "openim-uniapp-polyfill";
- import CustomNavBar from "../../../components/CustomNavBar/index.vue";
- import MyAvatar from "../../../components/MyAvatar/index.vue";
- import dayjs from "dayjs";
- import InfoItem from "./InfoItem.vue";
- import { getPurePath } from "../../../util/common";
- export default {
- components: {
- CustomNavBar,
- MyAvatar,
- InfoItem,
- },
- data() {
- return {
- showDatePicker: false,
- loadingState: {
- faceURL: false,
- gender: false,
- birth: false,
- },
- nowDate: Date.now(),
- };
- },
- computed: {
- selfInfo() {
- return this.$store.getters.storeSelfInfo;
- },
- getGender() {
- if (this.selfInfo.gender === 0) {
- return "保密";
- }
- if (this.selfInfo.gender === 1) {
- return "男";
- }
- return "女";
- },
- getBirth() {
- const birth = this.selfInfo.birth ?? 0;
- return dayjs(birth).format("YYYY-MM-DD");
- },
- },
- methods: {
- updateNickname() {
- uni.navigateTo({
- url: `/pages/common/markOrIDPage/index?isSelfNickname=true&sourceInfo=${JSON.stringify(
- this.selfInfo,
- )}`,
- });
- },
- updateGender() {
- uni.showActionSheet({
- itemList: ["男", "女"],
- success: async ({ tapIndex }) => {
- this.loadingState.gender = true;
- await this.updateSelfInfo(
- {
- gender: tapIndex + 1,
- },
- "gender",
- );
- },
- });
- },
- updateAvatar() {
- uni.chooseImage({
- count: 1,
- sizeType: ["compressed"],
- success: async ({ tempFilePaths }) => {
- const path = tempFilePaths[0];
- const nameIdx = path.lastIndexOf("/") + 1;
- const typeIdx = path.lastIndexOf(".") + 1;
- const fileName = path.slice(nameIdx);
- const fileType = path.slice(typeIdx);
- this.loadingState.faceURL = true;
- const {
- data: { url },
- } = await IMSDK.asyncApi(IMSDK.IMMethods.UploadFile, IMSDK.uuid(), {
- filepath: getPurePath(tempFilePaths[0]),
- name: fileName,
- contentType: fileType,
- uuid: IMSDK.uuid(),
- });
- console.log(url);
- this.updateSelfInfo(
- {
- faceURL: url,
- },
- "faceURL",
- );
- this.loadingState.faceURL = false;
- },
- });
- },
- toQrCode() {
- uni.navigateTo({
- url: `/pages/common/userOrGroupQrCode/index`,
- });
- },
- copyID() {
- uni.setClipboardData({
- data: this.selfInfo.userID,
- success: () => {
- uni.hideToast();
- this.$nextTick(() => {
- uni.$u.toast("复制成功");
- });
- },
- });
- },
- async updateSelfInfo(data, key) {
- try {
- await businessInfoUpdate({
- userID: this.selfInfo.userID,
- ...data,
- });
- await this.$store.dispatch("user/updateBusinessInfo");
- uni.$u.toast("修改成功");
- } catch (e) {
- console.log(e);
- uni.$u.toast("修改失败");
- }
- this.loadingState[key] = false;
- },
- confirmDate({ value }) {
- this.loadingState.birth = true;
- this.updateSelfInfo(
- {
- birth: value,
- },
- "birth",
- );
- this.showDatePicker = false;
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .page_container {
- background-color: #f8f8f8;
- .info_wrap {
- margin: 24rpx 24rpx 0 24rpx;
- background: #fff;
- border-radius: 6px;
- .qr_icon {
- width: 22px;
- height: 23px;
- }
- }
- }
- </style>
|