mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-26 08:00:48 +08:00
Compare commits
5 Commits
codex/adap
...
codex/migr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5d8f37f96 | ||
|
|
4a4c256568 | ||
|
|
3bb14ca6a3 | ||
|
|
4ed679c4f4 | ||
|
|
51819913a0 |
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="base-input">
|
<div class="base-input">
|
||||||
<i v-if="icon" :class="['base-input-icon', icon]" />
|
<component v-if="icon" :is="icon" class="base-input-icon" size="14" />
|
||||||
|
|
||||||
<!-- 普通输入框 -->
|
<!-- 普通输入框 -->
|
||||||
<input
|
<input
|
||||||
@@ -29,7 +29,7 @@ export default {
|
|||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
props: {
|
props: {
|
||||||
modelValue: { type: [String, Number], default: '' },
|
modelValue: { type: [String, Number], default: '' },
|
||||||
icon: { type: String, default: '' },
|
icon: { type: [String, Object], default: '' },
|
||||||
type: { type: String, default: 'text' },
|
type: { type: String, default: 'text' },
|
||||||
textarea: { type: Boolean, default: false },
|
textarea: { type: Boolean, default: false },
|
||||||
},
|
},
|
||||||
@@ -66,7 +66,6 @@ export default {
|
|||||||
|
|
||||||
.base-input-icon {
|
.base-input-icon {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.base-input-text {
|
.base-input-text {
|
||||||
|
|||||||
@@ -8,7 +8,12 @@
|
|||||||
:class="['base-tabs-item', { selected: modelValue === tab.key }]"
|
:class="['base-tabs-item', { selected: modelValue === tab.key }]"
|
||||||
@click="$emit('update:modelValue', tab.key)"
|
@click="$emit('update:modelValue', tab.key)"
|
||||||
>
|
>
|
||||||
<i v-if="tab.icon" :class="tab.icon"></i>
|
<component
|
||||||
|
v-if="tab.icon && (typeof tab.icon !== 'string' || !tab.icon.includes(' '))"
|
||||||
|
:is="tab.icon"
|
||||||
|
class="base-tabs-item-icon"
|
||||||
|
/>
|
||||||
|
<i v-else-if="tab.icon" :class="tab.icon"></i>
|
||||||
<div class="base-tabs-item-label">{{ tab.label }}</div>
|
<div class="base-tabs-item-label">{{ tab.label }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -72,6 +77,7 @@ function onTouchEnd(e) {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.base-tabs-item-icon,
|
||||||
.base-tabs-item i {
|
.base-tabs-item i {
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,20 @@
|
|||||||
<div class="forgot-page">
|
<div class="forgot-page">
|
||||||
<div class="forgot-content">
|
<div class="forgot-content">
|
||||||
<div class="forgot-title">找回密码</div>
|
<div class="forgot-title">找回密码</div>
|
||||||
|
|
||||||
<div v-if="step === 0" class="step-content">
|
<div v-if="step === 0" class="step-content">
|
||||||
<BaseInput icon="fas fa-envelope" v-model="email" placeholder="邮箱" />
|
<BaseInput icon="Mail" v-model="email" placeholder="邮箱" />
|
||||||
<div v-if="emailError" class="error-message">{{ emailError }}</div>
|
<div v-if="emailError" class="error-message">{{ emailError }}</div>
|
||||||
<div class="primary-button" @click="sendCode" v-if="!isSending">发送验证码</div>
|
<div class="primary-button" @click="sendCode" v-if="!isSending">发送验证码</div>
|
||||||
<div class="primary-button disabled" v-else>发送中...</div>
|
<div class="primary-button disabled" v-else>发送中...</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="step === 1" class="step-content">
|
<div v-else-if="step === 1" class="step-content">
|
||||||
<BaseInput icon="fas fa-envelope" v-model="code" placeholder="邮箱验证码" />
|
<BaseInput icon="Mail" v-model="code" placeholder="邮箱验证码" />
|
||||||
<div class="primary-button" @click="verifyCode" v-if="!isVerifying">验证</div>
|
<div class="primary-button" @click="verifyCode" v-if="!isVerifying">验证</div>
|
||||||
<div class="primary-button disabled" v-else>验证中...</div>
|
<div class="primary-button disabled" v-else>验证中...</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="step-content">
|
<div v-else class="step-content">
|
||||||
<BaseInput icon="fas fa-lock" v-model="password" type="password" placeholder="新密码" />
|
<BaseInput icon="Lock" v-model="password" type="password" placeholder="新密码" />
|
||||||
<div v-if="passwordError" class="error-message">{{ passwordError }}</div>
|
<div v-if="passwordError" class="error-message">{{ passwordError }}</div>
|
||||||
<div class="primary-button" @click="resetPassword" v-if="!isResetting">重置密码</div>
|
<div class="primary-button" @click="resetPassword" v-if="!isResetting">重置密码</div>
|
||||||
<div class="primary-button disabled" v-else>提交中...</div>
|
<div class="primary-button disabled" v-else>提交中...</div>
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="email-login-page-content">
|
<div class="email-login-page-content">
|
||||||
<BaseInput icon="fas fa-envelope" v-model="username" placeholder="邮箱/用户名" />
|
<BaseInput icon="Mail" v-model="username" placeholder="邮箱/用户名" />
|
||||||
|
|
||||||
<BaseInput icon="fas fa-lock" v-model="password" type="password" placeholder="密码" />
|
<BaseInput icon="Lock" v-model="password" type="password" placeholder="密码" />
|
||||||
|
|
||||||
<div v-if="!isWaitingForLogin" class="login-page-button-primary" @click="submitLogin">
|
<div v-if="!isWaitingForLogin" class="login-page-button-primary" @click="submitLogin">
|
||||||
<div class="login-page-button-text">登录</div>
|
<div class="login-page-button-text">登录</div>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-row username-row">
|
<div class="form-row username-row">
|
||||||
<BaseInput
|
<BaseInput
|
||||||
icon="fas fa-user"
|
icon="User"
|
||||||
v-model="username"
|
v-model="username"
|
||||||
@input="usernameError = ''"
|
@input="usernameError = ''"
|
||||||
placeholder="用户名"
|
placeholder="用户名"
|
||||||
|
|||||||
@@ -6,16 +6,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="emailStep === 0" class="email-signup-page-content">
|
<div v-if="emailStep === 0" class="email-signup-page-content">
|
||||||
<BaseInput
|
<BaseInput icon="Mail" v-model="email" @input="emailError = ''" placeholder="邮箱" />
|
||||||
icon="fas fa-envelope"
|
|
||||||
v-model="email"
|
|
||||||
@input="emailError = ''"
|
|
||||||
placeholder="邮箱"
|
|
||||||
/>
|
|
||||||
<div v-if="emailError" class="error-message">{{ emailError }}</div>
|
<div v-if="emailError" class="error-message">{{ emailError }}</div>
|
||||||
|
|
||||||
<BaseInput
|
<BaseInput
|
||||||
icon="fas fa-user"
|
icon="User"
|
||||||
v-model="username"
|
v-model="username"
|
||||||
@input="usernameError = ''"
|
@input="usernameError = ''"
|
||||||
placeholder="用户名"
|
placeholder="用户名"
|
||||||
@@ -23,7 +18,7 @@
|
|||||||
<div v-if="usernameError" class="error-message">{{ usernameError }}</div>
|
<div v-if="usernameError" class="error-message">{{ usernameError }}</div>
|
||||||
|
|
||||||
<BaseInput
|
<BaseInput
|
||||||
icon="fas fa-lock"
|
icon="Lock"
|
||||||
v-model="password"
|
v-model="password"
|
||||||
@input="passwordError = ''"
|
@input="passwordError = ''"
|
||||||
type="password"
|
type="password"
|
||||||
@@ -51,7 +46,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="emailStep === 1" class="email-signup-page-content">
|
<div v-if="emailStep === 1" class="email-signup-page-content">
|
||||||
<BaseInput icon="fas fa-envelope" v-model="code" placeholder="邮箱验证码" />
|
<BaseInput icon="Mail" v-model="code" placeholder="邮箱验证码" />
|
||||||
<div
|
<div
|
||||||
v-if="!isWaitingForEmailVerified"
|
v-if="!isWaitingForEmailVerified"
|
||||||
class="signup-page-button-primary"
|
class="signup-page-button-primary"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
class="profile-page-header-subscribe-button"
|
class="profile-page-header-subscribe-button"
|
||||||
@click="subscribeUser"
|
@click="subscribeUser"
|
||||||
>
|
>
|
||||||
<i class="fas fa-user-plus"></i>
|
<add-user />
|
||||||
关注
|
关注
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -26,11 +26,11 @@
|
|||||||
class="profile-page-header-unsubscribe-button"
|
class="profile-page-header-unsubscribe-button"
|
||||||
@click="unsubscribeUser"
|
@click="unsubscribeUser"
|
||||||
>
|
>
|
||||||
<i class="fas fa-user-minus"></i>
|
<reduce-user />
|
||||||
取消关注
|
取消关注
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isMine" class="profile-page-header-subscribe-button" @click="sendMessage">
|
<div v-if="!isMine" class="profile-page-header-subscribe-button" @click="sendMessage">
|
||||||
<i class="fas fa-paper-plane"></i>
|
<message-one />
|
||||||
发私信
|
发私信
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
content="经验值可通过发帖、评论等操作获得,达到目标后即可提升等级,解锁更多功能。"
|
content="经验值可通过发帖、评论等操作获得,达到目标后即可提升等级,解锁更多功能。"
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
>
|
>
|
||||||
<i class="fas fa-info-circle profile-exp-info"></i>
|
<info class="profile-exp-info" />
|
||||||
</ToolTip>
|
</ToolTip>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -368,11 +368,11 @@ const selectedTab = ref(
|
|||||||
: 'summary',
|
: 'summary',
|
||||||
)
|
)
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{ key: 'summary', label: '总结', icon: 'fas fa-chart-line' },
|
{ key: 'summary', label: '总结', icon: 'ChartLine' },
|
||||||
{ key: 'timeline', label: '时间线', icon: 'fas fa-clock' },
|
{ key: 'timeline', label: '时间线', icon: 'AlarmClock' },
|
||||||
{ key: 'following', label: '关注', icon: 'fas fa-user-plus' },
|
{ key: 'following', label: '关注', icon: 'AddUser' },
|
||||||
{ key: 'favorites', label: '收藏', icon: 'fas fa-bookmark' },
|
{ key: 'favorites', label: '收藏', icon: 'Bookmark' },
|
||||||
{ key: 'achievements', label: '勋章', icon: 'fas fa-medal' },
|
{ key: 'achievements', label: '勋章', icon: 'MedalOne' },
|
||||||
]
|
]
|
||||||
const followTab = ref('followers')
|
const followTab = ref('followers')
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,14 @@ import {
|
|||||||
Loading,
|
Loading,
|
||||||
Rss,
|
Rss,
|
||||||
MessageEmoji,
|
MessageEmoji,
|
||||||
|
AddUser,
|
||||||
|
ReduceUser,
|
||||||
|
MessageOne,
|
||||||
|
AlarmClock,
|
||||||
|
Bookmark,
|
||||||
|
Mail,
|
||||||
|
Lock,
|
||||||
|
User,
|
||||||
} from '@icon-park/vue-next'
|
} from '@icon-park/vue-next'
|
||||||
|
|
||||||
export default defineNuxtPlugin((nuxtApp) => {
|
export default defineNuxtPlugin((nuxtApp) => {
|
||||||
@@ -65,4 +73,12 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|||||||
nuxtApp.vueApp.component('Loading', Loading)
|
nuxtApp.vueApp.component('Loading', Loading)
|
||||||
nuxtApp.vueApp.component('Rss', Rss)
|
nuxtApp.vueApp.component('Rss', Rss)
|
||||||
nuxtApp.vueApp.component('MessageEmoji', MessageEmoji)
|
nuxtApp.vueApp.component('MessageEmoji', MessageEmoji)
|
||||||
|
nuxtApp.vueApp.component('AddUser', AddUser)
|
||||||
|
nuxtApp.vueApp.component('ReduceUser', ReduceUser)
|
||||||
|
nuxtApp.vueApp.component('MessageOne', MessageOne)
|
||||||
|
nuxtApp.vueApp.component('AlarmClock', AlarmClock)
|
||||||
|
nuxtApp.vueApp.component('Bookmark', Bookmark)
|
||||||
|
nuxtApp.vueApp.component('Mail', Mail)
|
||||||
|
nuxtApp.vueApp.component('Lock', Lock)
|
||||||
|
nuxtApp.vueApp.component('User', User)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user