update user detail

This commit is contained in:
Timi
2026-08-07 16:02:29 +08:00
parent 1b1121f052
commit 28b789eb86
13 changed files with 421 additions and 147 deletions
+9 -17
View File
@@ -21,9 +21,8 @@
/>
</template>
</t-cell>
</t-cell-group>
<t-cell-group v-if="canSelectStore" class="store-card" theme="card">
<t-cell
v-if="canSelectStore"
class="cell"
title="当前门店"
:note="currentStoreStore.currentStoreName"
@@ -72,7 +71,8 @@
import { UserAPI, useUserStore } from "timi-web";
import { Toast } from "tdesign-mobile-vue";
import { useCurrentStoreStore } from "@/store/currentStoreStore";
import { corePermissionCodes, coreRoleCodes, permissionCodes } from "@/utils/permission";
import { buildFallbackAvatar } from "@/utils/avatar";
import { corePermissionCodes, coreRoleCodes, gaoRoleCodes, permissionCodes } from "@/utils/permission";
type UserAvatarSource = Parameters<typeof UserAPI.getAvatarURL>[0];
type PickerValue = string | number;
@@ -105,12 +105,14 @@ const currentUserDesc = computed(() => currentUser.value?.phoneNo || currentUser
const currentUserAvatar = computed(() => buildUserAvatar(currentUser.value));
const canSelectStore = computed(() => userStore.hasPermissions(permissionCodes.store.read));
const canLoadLoginStore = computed(() => userStore.hasRoles([gaoRoleCodes.storeManager, gaoRoleCodes.employee], "or"));
const canManagePermission = computed(() => (
userStore.hasRoles(coreRoleCodes.admin) || userStore.hasRoles(coreRoleCodes.userRoleAdmin)
) && userStore.hasPermissions([
corePermissionCodes.role.read,
corePermissionCodes.permission.read
], "and"));
const canManageUser = computed(() => userStore.hasRoles([gaoRoleCodes.globalManager, gaoRoleCodes.storeManager], "or"));
const visibleMenuGroupList = computed<MenuGroup[]>(() => menuGroupList.value
.map(group => ({
...group,
@@ -211,7 +213,7 @@ const menuGroupList = computed<MenuGroup[]>(() => [
icon: "root-list",
path: "/management/users",
title: "用户管理",
visible: userStore.hasPermissions(permissionCodes.user.read)
visible: canManageUser.value && userStore.hasPermissions(permissionCodes.user.read)
},
{
icon: "qrcode",
@@ -223,20 +225,8 @@ const menuGroupList = computed<MenuGroup[]>(() => [
}
]);
function buildFallbackAvatar(name: string): string {
const text = encodeURIComponent((name.trim() || "用户").slice(0, 2));
return [
"data:image/svg+xml;charset=UTF-8,",
"%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E",
"%3Crect width='120' height='120' rx='24' fill='%230f766e'/%3E",
"%3Ctext x='50%25' y='54%25' fill='white' font-size='36' font-family='Arial,sans-serif' text-anchor='middle' dominant-baseline='middle'%3E",
text,
"%3C/text%3E%3C/svg%3E"
].join("");
}
function buildUserAvatar(user?: UserAvatarSource): string {
return UserAPI.getAvatarURL(user) || buildFallbackAvatar(currentUserName.value);
return UserAPI.getAvatarURL(user) || buildFallbackAvatar(currentUserName.value, "#0f766e");
}
async function go(path: string): Promise<void> {
@@ -246,6 +236,8 @@ async function go(path: string): Promise<void> {
onMounted(async () => {
if (canSelectStore.value) {
await currentStoreStore.loadStoreList();
} else if (canLoadLoginStore.value) {
await currentStoreStore.loadLoginStore();
}
});
</script>