Browse Source

feat(profile): discover visibility and location controls

Made-with: Cursor
main
npmrun 6 hours ago
parent
commit
0b7f29d86f
  1. 38
      app/pages/me/profile/index.vue

38
app/pages/me/profile/index.vue

@ -16,6 +16,9 @@ type ProfileGet = {
bioVisibility: string
socialLinks: { label: string; url: string; visibility: string; icon?: string }[]
publicSlug: string | null
discoverVisible: boolean
discoverLocation: string | null
discoverShowLocation: boolean
}
}
@ -30,6 +33,9 @@ const state = reactive({
bioMarkdown: '',
bioVisibility: 'private',
publicSlug: '',
discoverVisible: false,
discoverLocation: '',
discoverShowLocation: false,
linksJson: '[]',
publicHomeHeaderTitle: '',
publicHomeHeaderIconUrl: '',
@ -152,6 +158,9 @@ async function load() {
state.bioMarkdown = p.bioMarkdown ?? ''
state.bioVisibility = p.bioVisibility
state.publicSlug = p.publicSlug ?? ''
state.discoverVisible = Boolean(p.discoverVisible)
state.discoverLocation = p.discoverLocation ?? ''
state.discoverShowLocation = Boolean(p.discoverShowLocation)
state.linksJson = JSON.stringify(p.socialLinks ?? [], null, 2)
state.publicHomeHeaderTitle = typeof cfg.publicHomeHeaderTitle === 'string' ? cfg.publicHomeHeaderTitle : ''
state.publicHomeHeaderIconUrl =
@ -183,6 +192,9 @@ async function save() {
bioMarkdown: state.bioMarkdown || null,
bioVisibility: state.bioVisibility,
publicSlug: state.publicSlug || null,
discoverVisible: state.discoverVisible,
discoverLocation: state.discoverLocation.trim() || null,
discoverShowLocation: state.discoverShowLocation,
socialLinks: links,
},
})
@ -237,6 +249,32 @@ async function save() {
<UFormField label="公开主页 slug(/@slug)" name="publicSlug">
<UInput v-model="state.publicSlug" placeholder="例如 my-id" />
</UFormField>
<UAlert
v-if="state.discoverVisible && !state.publicSlug.trim()"
color="warning"
variant="subtle"
title="尚未设置公开主页 slug"
description="保存「出现在发现页」后,仍需填写上方的 slug 才会真正出现在发现列表中。"
class="rounded-lg"
/>
<div class="space-y-4 rounded-lg border border-default bg-elevated/20 p-4">
<h2 class="text-sm font-semibold text-highlighted">
发现与展示
</h2>
<UCheckbox v-model="state.discoverVisible" label="出现在发现页" />
<UFormField
label="地址或地区(展示文案)"
name="discoverLocation"
description="将显示在你的发现卡片上(若下方选项开启)。无需门牌号等精确信息。"
>
<UInput v-model="state.discoverLocation" maxlength="200" placeholder="例如:上海" />
</UFormField>
<UCheckbox
v-model="state.discoverShowLocation"
:disabled="!state.discoverVisible"
label="在发现卡片上显示上述地址"
/>
</div>
<UFormField label="昵称" name="nickname">
<UInput v-model="state.nickname" />
</UFormField>

Loading…
Cancel
Save