197 lines
7.6 KiB
JavaScript
197 lines
7.6 KiB
JavaScript
"use strict";
|
|
const common_vendor = require("../../common/vendor.js");
|
|
const common_http = require("../../common/http.js");
|
|
const common_config = require("../../common/config.js");
|
|
const _sfc_main = {
|
|
data() {
|
|
return {
|
|
form: { name: "", avatarUrl: "" },
|
|
pwd: { oldPassword: "", newPassword: "" },
|
|
phone: { phone: "" },
|
|
savingProfile: false,
|
|
savingPwd: false,
|
|
savingPhone: false,
|
|
sendingCode: false,
|
|
originalAvatarUrl: ""
|
|
};
|
|
},
|
|
onShow() {
|
|
this.loadProfile();
|
|
},
|
|
computed: {
|
|
avatarPreview() {
|
|
return this.normalizeAvatar(this.form.avatarUrl);
|
|
},
|
|
canSendPhone() {
|
|
const p = String(this.phone.phone || "").trim();
|
|
return /^1\d{10}$/.test(p);
|
|
}
|
|
},
|
|
methods: {
|
|
async loadProfile() {
|
|
try {
|
|
const data = await common_http.get("/api/user/me");
|
|
const rawAvatar = (data == null ? void 0 : data.avatarUrl) || (common_vendor.index.getStorageSync("USER_AVATAR_RAW") || "");
|
|
this.originalAvatarUrl = rawAvatar;
|
|
this.form.name = (data == null ? void 0 : data.name) || (common_vendor.index.getStorageSync("USER_NAME") || "");
|
|
this.form.avatarUrl = rawAvatar;
|
|
} catch (e) {
|
|
}
|
|
},
|
|
normalizeAvatar(url) {
|
|
if (!url)
|
|
return "/static/icons/icons8-mitt-24.png";
|
|
const s = String(url);
|
|
if (/^https?:\/\//i.test(s))
|
|
return s;
|
|
const base = common_config.API_BASE_URL || "";
|
|
if (!base)
|
|
return s;
|
|
if (s.startsWith("/"))
|
|
return `${base}${s}`;
|
|
return `${base}/${s}`;
|
|
},
|
|
openAvatarDialog() {
|
|
common_vendor.index.showActionSheet({
|
|
itemList: ["粘贴图片URL", "从相册选择并上传"],
|
|
success: (res) => {
|
|
if (res.tapIndex === 0) {
|
|
common_vendor.index.showModal({
|
|
title: "头像URL",
|
|
editable: true,
|
|
placeholderText: "https://...",
|
|
success: async (m) => {
|
|
if (m.confirm && m.content) {
|
|
this.form.avatarUrl = m.content.trim();
|
|
await this.saveProfile({ auto: true });
|
|
}
|
|
}
|
|
});
|
|
} else if (res.tapIndex === 1) {
|
|
common_vendor.index.chooseImage({ count: 1, sizeType: ["compressed"], success: (ci) => {
|
|
const filePath = ci.tempFilePaths && ci.tempFilePaths[0] || "";
|
|
if (!filePath)
|
|
return;
|
|
common_vendor.index.showLoading({ title: "上传中..." });
|
|
common_http.upload("/api/attachments", filePath, { ownerType: "user_avatar", ownerId: 0 }).then(async (data) => {
|
|
const url = data && (data.url || data.path);
|
|
if (url) {
|
|
this.form.avatarUrl = url;
|
|
await this.saveProfile({ auto: true });
|
|
}
|
|
common_vendor.index.showToast({ title: "已上传", icon: "success" });
|
|
}).catch((e) => {
|
|
common_vendor.index.showToast({ title: e && e.message || "上传失败", icon: "none" });
|
|
}).finally(() => {
|
|
common_vendor.index.hideLoading();
|
|
});
|
|
} });
|
|
}
|
|
}
|
|
});
|
|
},
|
|
async saveProfile(opts = {}) {
|
|
const auto = opts && opts.auto;
|
|
const payload = {};
|
|
if (this.form.name && this.form.name !== common_vendor.index.getStorageSync("USER_NAME"))
|
|
payload.name = this.form.name;
|
|
if (this.form.avatarUrl && this.form.avatarUrl !== this.originalAvatarUrl)
|
|
payload.avatarUrl = this.form.avatarUrl;
|
|
if (Object.keys(payload).length === 0) {
|
|
if (!auto)
|
|
common_vendor.index.showToast({ title: "无需修改", icon: "none" });
|
|
return;
|
|
}
|
|
if (this.savingProfile)
|
|
return;
|
|
this.savingProfile = true;
|
|
try {
|
|
await common_http.put("/api/user/me", payload);
|
|
try {
|
|
if (payload.name)
|
|
common_vendor.index.setStorageSync("USER_NAME", payload.name);
|
|
if (payload.avatarUrl) {
|
|
const rawUrl = payload.avatarUrl;
|
|
const displayUrl = `${rawUrl}${rawUrl.includes("?") ? "&" : "?"}t=${Date.now()}`;
|
|
common_vendor.index.setStorageSync("USER_AVATAR_RAW", rawUrl);
|
|
common_vendor.index.setStorageSync("USER_AVATAR", rawUrl);
|
|
this.originalAvatarUrl = rawUrl;
|
|
this.form.avatarUrl = rawUrl;
|
|
}
|
|
} catch (_) {
|
|
}
|
|
if (!payload.avatarUrl && this.form.avatarUrl) {
|
|
common_vendor.index.setStorageSync("USER_AVATAR_RAW", this.form.avatarUrl);
|
|
common_vendor.index.setStorageSync("USER_AVATAR", this.form.avatarUrl);
|
|
}
|
|
common_vendor.index.showToast({ title: auto ? "头像已更新" : "已保存", icon: "success" });
|
|
} catch (e) {
|
|
const msg = e && e.message || "保存失败";
|
|
common_vendor.index.showToast({ title: msg, icon: "none" });
|
|
} finally {
|
|
this.savingProfile = false;
|
|
}
|
|
},
|
|
async changePassword() {
|
|
if (!this.pwd.newPassword || this.pwd.newPassword.length < 6)
|
|
return common_vendor.index.showToast({ title: "新密码至少6位", icon: "none" });
|
|
this.savingPwd = true;
|
|
try {
|
|
await common_http.put("/api/user/me/password", { oldPassword: this.pwd.oldPassword || void 0, newPassword: this.pwd.newPassword });
|
|
this.pwd.oldPassword = "";
|
|
this.pwd.newPassword = "";
|
|
common_vendor.index.showToast({ title: "密码已修改", icon: "success" });
|
|
} catch (e) {
|
|
common_vendor.index.showToast({ title: e && e.message || "修改失败", icon: "none" });
|
|
} finally {
|
|
this.savingPwd = false;
|
|
}
|
|
},
|
|
async changePhoneDirect() {
|
|
if (!this.canSendPhone)
|
|
return common_vendor.index.showToast({ title: "请输入正确手机号", icon: "none" });
|
|
this.savingPhone = true;
|
|
try {
|
|
await common_http.put("/api/user/me/phone", { phone: this.phone.phone });
|
|
common_vendor.index.setStorageSync("USER_MOBILE", this.phone.phone);
|
|
common_vendor.index.showToast({ title: "手机号已保存", icon: "success" });
|
|
} catch (e) {
|
|
common_vendor.index.showToast({ title: e && e.message || "保存失败", icon: "none" });
|
|
} finally {
|
|
this.savingPhone = false;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return {
|
|
a: $options.avatarPreview,
|
|
b: common_vendor.o((...args) => $options.openAvatarDialog && $options.openAvatarDialog(...args)),
|
|
c: $data.form.name,
|
|
d: common_vendor.o(common_vendor.m(($event) => $data.form.name = $event.detail.value, {
|
|
trim: true
|
|
})),
|
|
e: $data.savingProfile,
|
|
f: common_vendor.o((...args) => $options.saveProfile && $options.saveProfile(...args)),
|
|
g: $data.pwd.oldPassword,
|
|
h: common_vendor.o(common_vendor.m(($event) => $data.pwd.oldPassword = $event.detail.value, {
|
|
trim: true
|
|
})),
|
|
i: $data.pwd.newPassword,
|
|
j: common_vendor.o(common_vendor.m(($event) => $data.pwd.newPassword = $event.detail.value, {
|
|
trim: true
|
|
})),
|
|
k: $data.savingPwd,
|
|
l: common_vendor.o((...args) => $options.changePassword && $options.changePassword(...args)),
|
|
m: $data.phone.phone,
|
|
n: common_vendor.o(common_vendor.m(($event) => $data.phone.phone = $event.detail.value, {
|
|
trim: true
|
|
})),
|
|
o: $data.savingPhone,
|
|
p: common_vendor.o((...args) => $options.changePhoneDirect && $options.changePhoneDirect(...args))
|
|
};
|
|
}
|
|
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
|
|
wx.createPage(MiniProgramPage);
|
|
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/my/security.js.map
|