|
|
@@ -53,10 +53,17 @@ export const ProfilePage = () => {
|
|
|
const [showBotNameModal, setShowBotNameModal] = useState<boolean>(false);
|
|
|
const [tempUsername, setTempUsername] = useState<string>('');
|
|
|
const [tempBotName, setTempBotName] = useState<string>('');
|
|
|
+ const [isUsernameFocused, setIsUsernameFocused] = useState<boolean>(false);
|
|
|
+ const [isBotNameFocused, setIsBotNameFocused] = useState<boolean>(false);
|
|
|
const usernameInputRef = useRef<HTMLInputElement>(null);
|
|
|
const botNameInputRef = useRef<HTMLInputElement>(null);
|
|
|
const [showEnergyStoneModal, setShowEnergyStoneModal] = useState<boolean>(false);
|
|
|
const [energyStoneModalType, setEnergyStoneModalType] = useState<'mission' | 'conversation'>('mission');
|
|
|
+
|
|
|
+ const cancelBtnImage = 'https://lyrria-pro.oss-cn-beijing.aliyuncs.com/cancel.png';
|
|
|
+ const changeBtnImage = 'https://lyrria-pro.oss-cn-beijing.aliyuncs.com/change.png';
|
|
|
+ const changeBtnActiveImage = 'https://lyrria-pro.oss-cn-beijing.aliyuncs.com/change-a.png';
|
|
|
+ const focusGradient = 'linear-gradient(90deg, #FFC900 11%, #13A6FF 32%, #806EFF 50%, #FF8EEC 66%, #FE4F51 89%)';
|
|
|
|
|
|
// 获取能量石数量
|
|
|
const fetchEnergyStoneCounts = useCallback(async (userId: string) => {
|
|
|
@@ -229,6 +236,9 @@ export const ProfilePage = () => {
|
|
|
}, 0);
|
|
|
}, [username]);
|
|
|
|
|
|
+ // 检查用户名是否改变
|
|
|
+ const isUsernameChanged = tempUsername.trim() !== username.trim();
|
|
|
+
|
|
|
// 保存用户名
|
|
|
const handleSaveUsername = useCallback(async () => {
|
|
|
const userId = getUserId();
|
|
|
@@ -264,6 +274,9 @@ export const ProfilePage = () => {
|
|
|
}, 0);
|
|
|
}, [botName]);
|
|
|
|
|
|
+ // 检查 Lumi 名字是否改变
|
|
|
+ const isBotNameChanged = tempBotName.trim() !== botName.trim();
|
|
|
+
|
|
|
// 保存 Lumi 名字
|
|
|
const handleSaveBotName = useCallback(async () => {
|
|
|
const userId = getUserId();
|
|
|
@@ -360,6 +373,20 @@ export const ProfilePage = () => {
|
|
|
}
|
|
|
|
|
|
return (
|
|
|
+ <>
|
|
|
+ <style>{`
|
|
|
+ @keyframes fadeIn {
|
|
|
+ from {
|
|
|
+ opacity: 0;
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .profile-modal-input::placeholder {
|
|
|
+ color: rgba(245, 243, 240, 0.45);
|
|
|
+ }
|
|
|
+ `}</style>
|
|
|
<div
|
|
|
style={{
|
|
|
width: '100vw',
|
|
|
@@ -882,6 +909,7 @@ export const ProfilePage = () => {
|
|
|
|
|
|
{/* 使用协议 */}
|
|
|
<div
|
|
|
+ onClick={() => window.open('/user-agreement.html', '_blank')}
|
|
|
style={{
|
|
|
display: 'flex',
|
|
|
alignItems: 'center',
|
|
|
@@ -890,6 +918,7 @@ export const ProfilePage = () => {
|
|
|
borderTop: '1px solid #34313D',
|
|
|
marginLeft: px2vmin(10),
|
|
|
marginRight: px2vmin(10),
|
|
|
+ cursor: 'pointer',
|
|
|
}}
|
|
|
>
|
|
|
<span
|
|
|
@@ -914,6 +943,7 @@ export const ProfilePage = () => {
|
|
|
|
|
|
{/* 隐私政策 */}
|
|
|
<div
|
|
|
+ onClick={() => window.open('/privacy-policy.html', '_blank')}
|
|
|
style={{
|
|
|
display: 'flex',
|
|
|
alignItems: 'center',
|
|
|
@@ -922,6 +952,7 @@ export const ProfilePage = () => {
|
|
|
borderTop: '1px solid #34313D',
|
|
|
marginLeft: px2vmin(10),
|
|
|
marginRight: px2vmin(10),
|
|
|
+ cursor: 'pointer',
|
|
|
}}
|
|
|
>
|
|
|
<span
|
|
|
@@ -959,6 +990,7 @@ export const ProfilePage = () => {
|
|
|
bottom: 0,
|
|
|
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
|
zIndex: 9998,
|
|
|
+ animation: 'fadeIn 0.3s ease-out',
|
|
|
}}
|
|
|
/>
|
|
|
|
|
|
@@ -966,37 +998,77 @@ export const ProfilePage = () => {
|
|
|
<div
|
|
|
style={{
|
|
|
position: 'fixed',
|
|
|
- top: '50%',
|
|
|
+ bottom: 0,
|
|
|
left: '50%',
|
|
|
- transform: 'translate(-50%, -50%)',
|
|
|
- width: px2vw(343),
|
|
|
+ transform: 'translateX(-50%)',
|
|
|
+ width: px2vw(375),
|
|
|
backgroundColor: '#34313D',
|
|
|
- borderRadius: px2vmin(28),
|
|
|
+ borderTopLeftRadius: px2vmin(32),
|
|
|
+ borderTopRightRadius: px2vmin(32),
|
|
|
zIndex: 9999,
|
|
|
- padding: px2vmin(32),
|
|
|
display: 'flex',
|
|
|
flexDirection: 'column',
|
|
|
- gap: px2vmin(24),
|
|
|
+ alignItems: 'center',
|
|
|
+ paddingTop: px2vmin(12),
|
|
|
+ paddingBottom: px2vmin(32),
|
|
|
+ paddingLeft: px2vmin(32),
|
|
|
+ paddingRight: px2vmin(32),
|
|
|
}}
|
|
|
>
|
|
|
- {/* 标题 */}
|
|
|
+ {/* 顶部拖拽指示条 */}
|
|
|
<div
|
|
|
style={{
|
|
|
- fontSize: px2vmin(20),
|
|
|
+ width: px2vmin(32),
|
|
|
+ height: px2vmin(4),
|
|
|
+ backgroundColor: '#79747E',
|
|
|
+ borderRadius: px2vmin(4),
|
|
|
+ }}
|
|
|
+ />
|
|
|
+
|
|
|
+ {/* 文字标签 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ fontSize: px2vmin(14),
|
|
|
color: '#fff',
|
|
|
- fontWeight: 600,
|
|
|
- textAlign: 'center',
|
|
|
+ fontWeight: 'bold',
|
|
|
+ marginTop: px2vmin(24),
|
|
|
+ marginBottom: px2vmin(16),
|
|
|
+ textAlign: 'left',
|
|
|
}}
|
|
|
>
|
|
|
- 编辑用户名
|
|
|
+ Change my name
|
|
|
</div>
|
|
|
|
|
|
- {/* 输入框 */}
|
|
|
+ {/* 输入框容器 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ position: 'relative',
|
|
|
+ marginBottom: px2vmin(32),
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ height: px2vmin(56),
|
|
|
+ background: 'linear-gradient(180deg, #26232F 0%, #18151F 100%)',
|
|
|
+ borderTopLeftRadius: '12PX',
|
|
|
+ borderTopRightRadius: '12PX',
|
|
|
+ borderBottomRightRadius: '2PX',
|
|
|
+ borderBottomLeftRadius: '2PX',
|
|
|
+ boxShadow:
|
|
|
+ '0PX 1PX 0PX 0PX rgba(255, 255, 255, 0.18), inset 0PX 0PX 0PX 1PX rgba(0, 0, 0, 0.65), inset 0PX 4PX 8PX rgba(0, 0, 0, 0.55)',
|
|
|
+ position: 'relative',
|
|
|
+ }}
|
|
|
+ >
|
|
|
<input
|
|
|
ref={usernameInputRef}
|
|
|
type="text"
|
|
|
value={tempUsername}
|
|
|
onChange={(e) => setTempUsername(e.target.value)}
|
|
|
+ onFocus={() => setIsUsernameFocused(true)}
|
|
|
+ onBlur={() => setIsUsernameFocused(false)}
|
|
|
onKeyDown={(e) => {
|
|
|
if (e.key === 'Enter') {
|
|
|
handleSaveUsername();
|
|
|
@@ -1005,58 +1077,102 @@ export const ProfilePage = () => {
|
|
|
}
|
|
|
}}
|
|
|
placeholder="请输入用户名"
|
|
|
+ className="profile-modal-input"
|
|
|
style={{
|
|
|
width: '100%',
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgba(255, 255, 255, 0.1)',
|
|
|
- border: '1px solid rgba(255, 255, 255, 0.3)',
|
|
|
- borderRadius: px2vmin(12),
|
|
|
- padding: px2vmin(16),
|
|
|
+ height: '100%',
|
|
|
+ fontSize: px2vmin(18),
|
|
|
+ color: 'rgba(245,243,240,0.7)',
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ border: 'none',
|
|
|
outline: 'none',
|
|
|
+ paddingLeft: px2vw(24),
|
|
|
+ paddingRight: px2vw(48),
|
|
|
+ fontFamily: 'inherit',
|
|
|
+ fontWeight: 'normal',
|
|
|
+ letterSpacing: '0.5px',
|
|
|
}}
|
|
|
/>
|
|
|
+ {isUsernameFocused && tempUsername && (
|
|
|
+ <button
|
|
|
+ onClick={() => setTempUsername('')}
|
|
|
+ style={{
|
|
|
+ position: 'absolute',
|
|
|
+ top: '50%',
|
|
|
+ right: px2vw(12),
|
|
|
+ transform: 'translateY(-50%)',
|
|
|
+ width: px2vw(20),
|
|
|
+ height: px2vw(20),
|
|
|
+ background: 'transparent',
|
|
|
+ border: 'none',
|
|
|
+ cursor: 'pointer',
|
|
|
+ display: 'flex',
|
|
|
+ alignItems: 'center',
|
|
|
+ justifyContent: 'center',
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
|
+ <circle cx="12" cy="12" r="11" stroke="rgba(191, 157, 248, 1)" strokeWidth="2.5" fill="none" />
|
|
|
+ <path
|
|
|
+ d="M8 8L16 16M16 8L8 16"
|
|
|
+ stroke="rgba(191, 157, 248, 1)"
|
|
|
+ strokeWidth="2.5"
|
|
|
+ strokeLinecap="round"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ </button>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ {/* 底部渐变条 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ height: '2PX',
|
|
|
+ background: isUsernameFocused ? focusGradient : 'rgba(103, 80, 164, 1)',
|
|
|
+ transition: 'background 0.3s',
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
|
|
|
{/* 按钮组 */}
|
|
|
<div
|
|
|
style={{
|
|
|
display: 'flex',
|
|
|
- gap: px2vmin(16),
|
|
|
- justifyContent: 'flex-end',
|
|
|
+ gap: px2vmin(43),
|
|
|
+ justifyContent: 'center',
|
|
|
+ width: '100%',
|
|
|
}}
|
|
|
>
|
|
|
<button
|
|
|
onClick={handleCloseUsernameModal}
|
|
|
style={{
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgba(255, 255, 255, 0.1)',
|
|
|
+ width: px2vmin(90),
|
|
|
+ height: px2vmin(48),
|
|
|
+ backgroundImage: `url(${cancelBtnImage})`,
|
|
|
+ backgroundSize: 'cover',
|
|
|
+ backgroundRepeat: 'no-repeat',
|
|
|
+ backgroundPosition: 'center',
|
|
|
border: 'none',
|
|
|
- padding: px2vmin(12),
|
|
|
- paddingLeft: px2vmin(24),
|
|
|
- paddingRight: px2vmin(24),
|
|
|
cursor: 'pointer',
|
|
|
- borderRadius: px2vmin(8),
|
|
|
+ padding: 0,
|
|
|
}}
|
|
|
- >
|
|
|
- 取消
|
|
|
- </button>
|
|
|
+ />
|
|
|
<button
|
|
|
onClick={handleSaveUsername}
|
|
|
style={{
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgb(153, 97, 248)',
|
|
|
+ width: px2vmin(94),
|
|
|
+ height: px2vmin(48),
|
|
|
+ backgroundImage: `url(${isUsernameChanged ? changeBtnActiveImage : changeBtnImage})`,
|
|
|
+ backgroundSize: 'cover',
|
|
|
+ backgroundRepeat: 'no-repeat',
|
|
|
+ backgroundPosition: 'center',
|
|
|
border: 'none',
|
|
|
- padding: px2vmin(12),
|
|
|
- paddingLeft: px2vmin(24),
|
|
|
- paddingRight: px2vmin(24),
|
|
|
- cursor: 'pointer',
|
|
|
- borderRadius: px2vmin(8),
|
|
|
+ cursor: isUsernameChanged ? 'pointer' : 'default',
|
|
|
+ padding: 0,
|
|
|
+ opacity: isUsernameChanged ? 1 : 0.6,
|
|
|
}}
|
|
|
- >
|
|
|
- 保存
|
|
|
- </button>
|
|
|
+ disabled={!isUsernameChanged}
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
</>
|
|
|
@@ -1076,6 +1192,7 @@ export const ProfilePage = () => {
|
|
|
bottom: 0,
|
|
|
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
|
zIndex: 9998,
|
|
|
+ animation: 'fadeIn 0.3s ease-out',
|
|
|
}}
|
|
|
/>
|
|
|
|
|
|
@@ -1083,37 +1200,76 @@ export const ProfilePage = () => {
|
|
|
<div
|
|
|
style={{
|
|
|
position: 'fixed',
|
|
|
- top: '50%',
|
|
|
+ bottom: 0,
|
|
|
left: '50%',
|
|
|
- transform: 'translate(-50%, -50%)',
|
|
|
- width: px2vw(343),
|
|
|
+ transform: 'translateX(-50%)',
|
|
|
+ width: px2vw(375),
|
|
|
backgroundColor: '#34313D',
|
|
|
- borderRadius: px2vmin(28),
|
|
|
+ borderTopLeftRadius: px2vmin(32),
|
|
|
+ borderTopRightRadius: px2vmin(32),
|
|
|
zIndex: 9999,
|
|
|
- padding: px2vmin(32),
|
|
|
display: 'flex',
|
|
|
flexDirection: 'column',
|
|
|
- gap: px2vmin(24),
|
|
|
+ alignItems: 'center',
|
|
|
+ paddingTop: px2vmin(12),
|
|
|
+ paddingBottom: px2vmin(32),
|
|
|
+ paddingLeft: px2vmin(32),
|
|
|
+ paddingRight: px2vmin(32),
|
|
|
}}
|
|
|
>
|
|
|
- {/* 标题 */}
|
|
|
+ {/* 顶部拖拽指示条 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: px2vmin(32),
|
|
|
+ height: px2vmin(4),
|
|
|
+ backgroundColor: '#79747E',
|
|
|
+ borderRadius: px2vmin(4),
|
|
|
+ }}
|
|
|
+ />
|
|
|
+
|
|
|
+ {/* 文字标签 */}
|
|
|
<div
|
|
|
style={{
|
|
|
- fontSize: px2vmin(20),
|
|
|
+ width: '100%',
|
|
|
+ fontSize: px2vmin(14),
|
|
|
color: '#fff',
|
|
|
- fontWeight: 600,
|
|
|
- textAlign: 'center',
|
|
|
+ marginTop: px2vmin(24),
|
|
|
+ marginBottom: px2vmin(16),
|
|
|
+ textAlign: 'left',
|
|
|
}}
|
|
|
>
|
|
|
- 编辑 Lumi 名字
|
|
|
+ Change Lumi's name
|
|
|
</div>
|
|
|
|
|
|
- {/* 输入框 */}
|
|
|
+ {/* 输入框容器 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ position: 'relative',
|
|
|
+ marginBottom: px2vmin(32),
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ height: px2vmin(56),
|
|
|
+ background: 'linear-gradient(180deg, #26232F 0%, #18151F 100%)',
|
|
|
+ borderTopLeftRadius: '12PX',
|
|
|
+ borderTopRightRadius: '12PX',
|
|
|
+ borderBottomRightRadius: '2PX',
|
|
|
+ borderBottomLeftRadius: '2PX',
|
|
|
+ boxShadow:
|
|
|
+ '0PX 1PX 0PX 0PX rgba(255, 255, 255, 0.18), inset 0PX 0PX 0PX 1PX rgba(0, 0, 0, 0.65), inset 0PX 4PX 8PX rgba(0, 0, 0, 0.55)',
|
|
|
+ position: 'relative',
|
|
|
+ }}
|
|
|
+ >
|
|
|
<input
|
|
|
ref={botNameInputRef}
|
|
|
type="text"
|
|
|
value={tempBotName}
|
|
|
onChange={(e) => setTempBotName(e.target.value)}
|
|
|
+ onFocus={() => setIsBotNameFocused(true)}
|
|
|
+ onBlur={() => setIsBotNameFocused(false)}
|
|
|
onKeyDown={(e) => {
|
|
|
if (e.key === 'Enter') {
|
|
|
handleSaveBotName();
|
|
|
@@ -1122,58 +1278,102 @@ export const ProfilePage = () => {
|
|
|
}
|
|
|
}}
|
|
|
placeholder="请输入 Lumi 名字"
|
|
|
+ className="profile-modal-input"
|
|
|
style={{
|
|
|
width: '100%',
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgba(255, 255, 255, 0.1)',
|
|
|
- border: '1px solid rgba(255, 255, 255, 0.3)',
|
|
|
- borderRadius: px2vmin(12),
|
|
|
- padding: px2vmin(16),
|
|
|
+ height: '100%',
|
|
|
+ fontSize: px2vmin(18),
|
|
|
+ color: 'rgba(245,243,240,0.7)',
|
|
|
+ backgroundColor: 'transparent',
|
|
|
+ border: 'none',
|
|
|
outline: 'none',
|
|
|
+ paddingLeft: px2vw(24),
|
|
|
+ paddingRight: px2vw(48),
|
|
|
+ fontFamily: 'inherit',
|
|
|
+ fontWeight: 'normal',
|
|
|
+ letterSpacing: '0.5px',
|
|
|
}}
|
|
|
/>
|
|
|
+ {isBotNameFocused && tempBotName && (
|
|
|
+ <button
|
|
|
+ onClick={() => setTempBotName('')}
|
|
|
+ style={{
|
|
|
+ position: 'absolute',
|
|
|
+ top: '50%',
|
|
|
+ right: px2vw(12),
|
|
|
+ transform: 'translateY(-50%)',
|
|
|
+ width: px2vw(20),
|
|
|
+ height: px2vw(20),
|
|
|
+ background: 'transparent',
|
|
|
+ border: 'none',
|
|
|
+ cursor: 'pointer',
|
|
|
+ display: 'flex',
|
|
|
+ alignItems: 'center',
|
|
|
+ justifyContent: 'center',
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none">
|
|
|
+ <circle cx="12" cy="12" r="11" stroke="rgba(191, 157, 248, 1)" strokeWidth="2.5" fill="none" />
|
|
|
+ <path
|
|
|
+ d="M8 8L16 16M16 8L8 16"
|
|
|
+ stroke="rgba(191, 157, 248, 1)"
|
|
|
+ strokeWidth="2.5"
|
|
|
+ strokeLinecap="round"
|
|
|
+ />
|
|
|
+ </svg>
|
|
|
+ </button>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ {/* 底部渐变条 */}
|
|
|
+ <div
|
|
|
+ style={{
|
|
|
+ width: '100%',
|
|
|
+ height: '2PX',
|
|
|
+ background: isBotNameFocused ? focusGradient : 'rgba(103, 80, 164, 1)',
|
|
|
+ transition: 'background 0.3s',
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
|
|
|
{/* 按钮组 */}
|
|
|
<div
|
|
|
style={{
|
|
|
display: 'flex',
|
|
|
- gap: px2vmin(16),
|
|
|
- justifyContent: 'flex-end',
|
|
|
+ gap: px2vmin(43),
|
|
|
+ justifyContent: 'center',
|
|
|
+ width: '100%',
|
|
|
}}
|
|
|
>
|
|
|
<button
|
|
|
onClick={handleCloseBotNameModal}
|
|
|
style={{
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgba(255, 255, 255, 0.1)',
|
|
|
+ width: px2vmin(90),
|
|
|
+ height: px2vmin(48),
|
|
|
+ backgroundImage: `url(${cancelBtnImage})`,
|
|
|
+ backgroundSize: 'cover',
|
|
|
+ backgroundRepeat: 'no-repeat',
|
|
|
+ backgroundPosition: 'center',
|
|
|
border: 'none',
|
|
|
- padding: px2vmin(12),
|
|
|
- paddingLeft: px2vmin(24),
|
|
|
- paddingRight: px2vmin(24),
|
|
|
cursor: 'pointer',
|
|
|
- borderRadius: px2vmin(8),
|
|
|
+ padding: 0,
|
|
|
}}
|
|
|
- >
|
|
|
- 取消
|
|
|
- </button>
|
|
|
+ />
|
|
|
<button
|
|
|
onClick={handleSaveBotName}
|
|
|
style={{
|
|
|
- fontSize: px2vmin(16),
|
|
|
- color: '#fff',
|
|
|
- backgroundColor: 'rgb(153, 97, 248)',
|
|
|
+ width: px2vmin(94),
|
|
|
+ height: px2vmin(48),
|
|
|
+ backgroundImage: `url(${isBotNameChanged ? changeBtnActiveImage : changeBtnImage})`,
|
|
|
+ backgroundSize: 'cover',
|
|
|
+ backgroundRepeat: 'no-repeat',
|
|
|
+ backgroundPosition: 'center',
|
|
|
border: 'none',
|
|
|
- padding: px2vmin(12),
|
|
|
- paddingLeft: px2vmin(24),
|
|
|
- paddingRight: px2vmin(24),
|
|
|
- cursor: 'pointer',
|
|
|
- borderRadius: px2vmin(8),
|
|
|
+ cursor: isBotNameChanged ? 'pointer' : 'default',
|
|
|
+ padding: 0,
|
|
|
+ opacity: isBotNameChanged ? 1 : 0.6,
|
|
|
}}
|
|
|
- >
|
|
|
- 保存
|
|
|
- </button>
|
|
|
+ disabled={!isBotNameChanged}
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
</>
|
|
|
@@ -1186,6 +1386,7 @@ export const ProfilePage = () => {
|
|
|
stoneType={energyStoneModalType}
|
|
|
/>
|
|
|
</div>
|
|
|
+ </>
|
|
|
);
|
|
|
};
|
|
|
|