|
|
|
@ -29,14 +29,17 @@ |
|
|
|
<text class="daily-live-text">{{ dailyQuestion.content }}</text> |
|
|
|
<text class="daily-live-go">{{ dailyQuestion.answered ? '看答案' : '去回答' }} ›</text> |
|
|
|
</view> |
|
|
|
<view class="hero-profile" @tap="goUniverse"> |
|
|
|
<image class="profile-avatar-img" v-if="profile.avatarUrl" :src="profile.avatarUrl" mode="aspectFill"></image> |
|
|
|
<view class="profile-avatar" v-else>{{ profile.avatarText || '我' }}</view> |
|
|
|
<view class="profile-meta"> |
|
|
|
<view class="profile-name">{{ profile.anonymousName || '半匿名漂流者' }}</view> |
|
|
|
<view class="profile-tags">{{ profileTagsText }}</view> |
|
|
|
<view class="hero-profile-line"> |
|
|
|
<view class="hero-profile" @tap="goUniverse"> |
|
|
|
<image class="profile-avatar-img" v-if="profile.avatarUrl" :src="profile.avatarUrl" mode="aspectFill"></image> |
|
|
|
<view class="profile-avatar" v-else>{{ profile.avatarText || '我' }}</view> |
|
|
|
<view class="profile-meta"> |
|
|
|
<view class="profile-name">{{ profile.anonymousName || '半匿名漂流者' }}</view> |
|
|
|
<view class="profile-tags">{{ profileTagsText }}</view> |
|
|
|
</view> |
|
|
|
<view class="profile-arrow">›</view> |
|
|
|
</view> |
|
|
|
<view class="profile-arrow">›</view> |
|
|
|
<view class="say-intent-btn" @tap.stop="openCompanionEditor">我也说一句</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
@ -92,7 +95,7 @@ |
|
|
|
<view class="planet-core"> |
|
|
|
<view class="planet-text">有人在等你</view> |
|
|
|
<view class="planet-sub">{{ currentMode === 'i' ? '安静靠近' : '轻轻热闹' }}</view> |
|
|
|
<view class="planet-cta">戳我 开始漂流 →</view> |
|
|
|
<view class="planet-cta" @tap.stop="goMatch" @click.stop="goMatch" @touchstart.stop @touchend.stop="goMatch">戳我 开始漂流 →</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
@ -151,6 +154,7 @@ |
|
|
|
{{ item.icon }} {{ item.label }} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<input class="target-input search-input" v-model="fuzzyKeyword" maxlength="24" placeholder="模糊搜索昵称/签名/找搭子内容" /> |
|
|
|
<view class="target-title gender-title">今天想遇见谁</view> |
|
|
|
<view class="target-row"> |
|
|
|
<view class="target-chip" v-for="item in targetModes" :key="item.key" |
|
|
|
@ -178,6 +182,23 @@ |
|
|
|
|
|
|
|
<ie-bottom-tab active="index" :unread-count="unreadCount"></ie-bottom-tab> |
|
|
|
|
|
|
|
<view class="companion-mask" v-if="showCompanionEditor" :style="companionMaskStyle" @tap="closeCompanionEditor"> |
|
|
|
<view class="companion-editor" :style="companionEditorStyle" @tap.stop> |
|
|
|
<view class="companion-editor-head"> |
|
|
|
<view> |
|
|
|
<view class="companion-editor-title">我也说一句</view> |
|
|
|
<view class="companion-editor-sub">写下你此刻想找什么搭子,会展示在星系漂流里。</view> |
|
|
|
</view> |
|
|
|
<view class="target-close" @tap="closeCompanionEditor">×</view> |
|
|
|
</view> |
|
|
|
<input class="target-input companion-input" v-model="editCompanionIntent" maxlength="24" :adjust-position="false" |
|
|
|
placeholder="例如:想找散步搭子" @focus="onCompanionInputFocus" @blur="onCompanionInputBlur" /> |
|
|
|
<view class="companion-save" :class="{ disabled: savingCompanionIntent }" @tap="saveCompanionIntent"> |
|
|
|
{{ savingCompanionIntent ? '保存中...' : '发布一句' }} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="match-mask" v-if="showMatch" @tap="closeMatch"> |
|
|
|
<view class="match-panel" @tap.stop> |
|
|
|
<scroll-view scroll-y class="match-scroll"> |
|
|
|
@ -254,7 +275,7 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import { ieHome, getIeUnreadCount, updateIeStatus, startIeMatch, getIeDailyQuestion } from '@/common/ieApi.js' |
|
|
|
import { ieHome, getIeUnreadCount, updateIeStatus, startIeMatch, matchIeProfile, getIeDailyQuestion, saveIeProfile } from '@/common/ieApi.js' |
|
|
|
import IeBottomTab from '@/components/ie-bottom-tab/ie-bottom-tab.vue' |
|
|
|
|
|
|
|
export default { |
|
|
|
@ -280,7 +301,10 @@ |
|
|
|
countTimer: null, |
|
|
|
showProfile: false, |
|
|
|
showTargetPanel: false, |
|
|
|
showCompanionEditor: false, |
|
|
|
matching: false, |
|
|
|
savingCompanionIntent: false, |
|
|
|
keyboardHeight: 0, |
|
|
|
profileReady: false, |
|
|
|
profile: {}, |
|
|
|
lowPowerMode: false, |
|
|
|
@ -288,6 +312,9 @@ |
|
|
|
targetGender: 'any', |
|
|
|
matchScope: 'school', |
|
|
|
matchIntent: '', |
|
|
|
customCompanionIntent: '', |
|
|
|
editCompanionIntent: '', |
|
|
|
fuzzyKeyword: '', |
|
|
|
intents: [ |
|
|
|
{ key: 'milktea', icon: '🧋', label: '奶茶搭子' }, |
|
|
|
{ key: 'meal', icon: '🍚', label: '吃饭搭子' }, |
|
|
|
@ -324,14 +351,15 @@ |
|
|
|
companions: {"i":[{"name":"树荫下的风","avatar":"风","state":"在校园里发呆","quote":"可以安静待 15 分钟,不用急着找话题。"},{"name":"耳机里的云","avatar":"云","state":"刚从教室出来","quote":"今天只想慢慢说两句。"}],"e":[{"name":"便利店灯光","avatar":"光","state":"想聊点不重要的","quote":"要不要交换一句今天最荒唐的小事?"},{"name":"操场散步员","avatar":"跑","state":"刚从操场回来","quote":"我可以负责开场,你负责随便接。"}]}, |
|
|
|
matchedPerson: {}, |
|
|
|
currentMatch: null, |
|
|
|
driftMessages: [ |
|
|
|
presetDriftMessages: [ |
|
|
|
{ type: 'i', mood: 'quiet', text: '操场现在风很舒服' }, |
|
|
|
{ type: 'i', mood: 'listen', text: '有人在图书馆假装努力' }, |
|
|
|
{ type: 'e', mood: 'talk', text: '谁愿意陪我散步 10 分钟' }, |
|
|
|
{ type: 'i', mood: 'quiet', text: '刚刚有人有点低落' }, |
|
|
|
{ type: 'e', mood: 'talk', text: '想听一个不重要的故事' }, |
|
|
|
{ type: 'i', mood: 'drift', text: '走在路上突然有点空' } |
|
|
|
] |
|
|
|
], |
|
|
|
driftMessages: [] |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
@ -367,7 +395,8 @@ |
|
|
|
}, |
|
|
|
danmuLanes() { |
|
|
|
const lanes = [[], [], []] |
|
|
|
this.driftMessages.forEach((item, index) => { |
|
|
|
const source = this.driftMessages.length ? this.driftMessages : this.presetDriftMessages |
|
|
|
source.forEach((item, index) => { |
|
|
|
lanes[index % 3].push(item) |
|
|
|
}) |
|
|
|
// Duplicate each lane so the marquee loops seamlessly. |
|
|
|
@ -396,6 +425,13 @@ |
|
|
|
`transform: translate(-50%, -50%) translate(${x}rpx, ${y}rpx) scale(${scale})` |
|
|
|
].join(';') |
|
|
|
}) |
|
|
|
}, |
|
|
|
companionMaskStyle() { |
|
|
|
const lift = this.keyboardHeight ? Math.max(this.keyboardHeight - 24, 0) : 0 |
|
|
|
return lift ? `padding-bottom: ${lift}px` : '' |
|
|
|
}, |
|
|
|
companionEditorStyle() { |
|
|
|
return this.keyboardHeight ? 'margin-bottom: 24rpx' : '' |
|
|
|
} |
|
|
|
}, |
|
|
|
onLoad() { |
|
|
|
@ -577,6 +613,8 @@ |
|
|
|
return |
|
|
|
} |
|
|
|
this.profile = home.profile || {} |
|
|
|
this.customCompanionIntent = this.profile.companionIntent || this.customCompanionIntent |
|
|
|
this.editCompanionIntent = this.customCompanionIntent |
|
|
|
this.profileReady = true |
|
|
|
this.onlineCountBase = Number(home.onlineCount) || 0 |
|
|
|
this.awakeCount = this.randomAwakeCount(this.onlineCountBase) |
|
|
|
@ -587,16 +625,31 @@ |
|
|
|
this.currentMood = home.currentMood || this.currentMood |
|
|
|
this.targetMode = home.targetModePreference || this.targetMode |
|
|
|
this.targetGender = home.targetGenderPreference || this.targetGender |
|
|
|
if (home.hotStatuses && home.hotStatuses.length) { |
|
|
|
this.driftMessages = home.hotStatuses.slice(0, 6).map((text, index) => ({ |
|
|
|
type: index % 2 === 0 ? 'i' : 'e', |
|
|
|
mood: this.moods[index % this.moods.length].key, |
|
|
|
text |
|
|
|
})) |
|
|
|
} |
|
|
|
this.driftMessages = this.buildDriftMessages(home) |
|
|
|
this.animateAwakeCount(this.awakeCount) |
|
|
|
this.syncStatus() |
|
|
|
}, |
|
|
|
buildDriftMessages(home = {}) { |
|
|
|
const realItems = (home.companionIntents || []).filter(item => item && item.text).slice(0, 50).map((item, index) => ({ |
|
|
|
type: item.type || (index % 2 === 0 ? 'i' : 'e'), |
|
|
|
mood: item.mood || this.moods[index % this.moods.length].key, |
|
|
|
text: item.text, |
|
|
|
userId: item.userId, |
|
|
|
anonymousName: item.anonymousName || '', |
|
|
|
avatarText: item.avatarText || '', |
|
|
|
avatarUrl: item.avatarUrl || '', |
|
|
|
isSelf: !!item.isSelf, |
|
|
|
isUserIntent: true |
|
|
|
})) |
|
|
|
const fillTexts = (home.hotStatuses && home.hotStatuses.length ? home.hotStatuses : this.presetDriftMessages.map(item => item.text)) |
|
|
|
const fillItems = fillTexts.map((text, index) => ({ |
|
|
|
type: index % 2 === 0 ? 'i' : 'e', |
|
|
|
mood: this.moods[index % this.moods.length].key, |
|
|
|
text, |
|
|
|
isUserIntent: false |
|
|
|
})) |
|
|
|
return realItems.concat(fillItems).slice(0, 50) |
|
|
|
}, |
|
|
|
redirectBannedIe(message) { |
|
|
|
if (this.ieBannedRedirecting) return |
|
|
|
this.ieBannedRedirecting = true |
|
|
|
@ -662,6 +715,7 @@ |
|
|
|
targetGender: this.targetGender, |
|
|
|
matchScope: this.matchScope, |
|
|
|
intent: this.matchIntent || '', |
|
|
|
fuzzyKeyword: this.fuzzyKeyword.trim(), |
|
|
|
mood: this.currentMood, |
|
|
|
...areaInfo, |
|
|
|
interestTags: [this.activeMood.label] |
|
|
|
@ -671,23 +725,7 @@ |
|
|
|
uni.showToast({ title: (match && match.failReason) || '暂时没有同频的人', icon: 'none' }) |
|
|
|
return |
|
|
|
} |
|
|
|
this.currentMatch = match |
|
|
|
this.matchedPerson = { |
|
|
|
avatar: match.avatarText || '◌', |
|
|
|
avatarUrl: match.avatarUrl || '', |
|
|
|
name: match.anonymousName || '半匿名 漂流者', |
|
|
|
mode: match.mode || this.currentMode, |
|
|
|
mood: match.mood || 'quiet', |
|
|
|
moodIcon: this.moodIcon(match.mood || 'quiet'), |
|
|
|
moodText: this.moodText(match.mood || 'quiet'), |
|
|
|
gender: match.gender || '', |
|
|
|
regionName: match.regionName || '', |
|
|
|
tags: match.interestTags || [], |
|
|
|
personaImages: match.personaImages || [], |
|
|
|
state: match.stateText || '也在等一句轻轻的回应', |
|
|
|
quote: match.quoteText || '可以先安静待一会,不用急着找话题。', |
|
|
|
lastActiveText: match.lastActiveText || '' |
|
|
|
} |
|
|
|
this.applyMatchResult(match) |
|
|
|
// 匹配成功即消耗一次机会,与服务端 usedQuota 保持一致 |
|
|
|
this.chancesLeft = Math.max(this.chancesLeft - 1, 0) |
|
|
|
this.showMatch = true |
|
|
|
@ -695,6 +733,25 @@ |
|
|
|
this.matching = false |
|
|
|
} |
|
|
|
}, |
|
|
|
applyMatchResult(match) { |
|
|
|
this.currentMatch = match |
|
|
|
this.matchedPerson = { |
|
|
|
avatar: match.avatarText || '◌', |
|
|
|
avatarUrl: match.avatarUrl || '', |
|
|
|
name: match.anonymousName || '半匿名漂流者', |
|
|
|
mode: match.mode || this.currentMode, |
|
|
|
mood: match.mood || 'quiet', |
|
|
|
moodIcon: this.moodIcon(match.mood || 'quiet'), |
|
|
|
moodText: this.moodText(match.mood || 'quiet'), |
|
|
|
gender: match.gender || '', |
|
|
|
regionName: match.regionName || '', |
|
|
|
tags: match.interestTags || [], |
|
|
|
personaImages: match.personaImages || [], |
|
|
|
state: match.stateText || '也在等一句轻轻的回应', |
|
|
|
quote: match.companionIntent || match.quoteText || '可以先安静待一会,不用急着找话题。', |
|
|
|
lastActiveText: match.lastActiveText || '' |
|
|
|
} |
|
|
|
}, |
|
|
|
modeText(mode) { |
|
|
|
return mode === 'e' ? 'e 人' : 'i 人' |
|
|
|
}, |
|
|
|
@ -733,12 +790,29 @@ |
|
|
|
this.playMoodCopy(this.activeMood.copy) |
|
|
|
this.syncStatus() |
|
|
|
}, |
|
|
|
selectDrift(item) { |
|
|
|
this.currentMood = item.mood |
|
|
|
this.currentMode = item.type |
|
|
|
this.playMoodCopy(this.activeMood.copy) |
|
|
|
this.syncStatus() |
|
|
|
this.activeDriftText = this.activeDriftText === item.text ? '' : item.text |
|
|
|
async selectDrift(item) { |
|
|
|
if (item && item.isUserIntent && item.userId) { |
|
|
|
if (item.isSelf) { |
|
|
|
uni.showToast({ title: '这是你发布的内容,不能匹配自己', icon: 'none' }) |
|
|
|
return |
|
|
|
} |
|
|
|
await this.matchDriftUser(item) |
|
|
|
} |
|
|
|
}, |
|
|
|
async matchDriftUser(item) { |
|
|
|
if (this.matching) return |
|
|
|
this.matching = true |
|
|
|
try { |
|
|
|
const match = await matchIeProfile(item.userId) |
|
|
|
if (!match || !match.roomId) { |
|
|
|
uni.showToast({ title: (match && match.failReason) || '暂时不能发起聊天', icon: 'none' }) |
|
|
|
return |
|
|
|
} |
|
|
|
this.applyMatchResult(match) |
|
|
|
this.showMatch = true |
|
|
|
} finally { |
|
|
|
this.matching = false |
|
|
|
} |
|
|
|
}, |
|
|
|
playMoodCopy(text) { |
|
|
|
if (this.moodTypeTimer) { |
|
|
|
@ -772,6 +846,48 @@ |
|
|
|
closeTargetPanel() { |
|
|
|
this.showTargetPanel = false |
|
|
|
}, |
|
|
|
openCompanionEditor() { |
|
|
|
this.editCompanionIntent = this.customCompanionIntent || '' |
|
|
|
this.showCompanionEditor = true |
|
|
|
}, |
|
|
|
closeCompanionEditor() { |
|
|
|
if (this.savingCompanionIntent) return |
|
|
|
this.keyboardHeight = 0 |
|
|
|
this.showCompanionEditor = false |
|
|
|
}, |
|
|
|
onCompanionInputFocus(event) { |
|
|
|
const height = event && event.detail ? Number(event.detail.height) || 0 : 0 |
|
|
|
this.keyboardHeight = height |
|
|
|
}, |
|
|
|
onCompanionInputBlur() { |
|
|
|
this.keyboardHeight = 0 |
|
|
|
}, |
|
|
|
async saveCompanionIntent() { |
|
|
|
if (this.savingCompanionIntent) return |
|
|
|
const text = this.editCompanionIntent.trim() |
|
|
|
if (!text) { |
|
|
|
uni.showToast({ title: '先写一句想找什么搭子', icon: 'none' }) |
|
|
|
return |
|
|
|
} |
|
|
|
this.savingCompanionIntent = true |
|
|
|
uni.showLoading({ title: '保存中...', mask: true }) |
|
|
|
try { |
|
|
|
const saved = await saveIeProfile({ |
|
|
|
...this.profile, |
|
|
|
companionIntent: text |
|
|
|
}) |
|
|
|
if (!saved) return |
|
|
|
this.profile = saved |
|
|
|
this.customCompanionIntent = saved.companionIntent || text |
|
|
|
this.editCompanionIntent = this.customCompanionIntent |
|
|
|
this.showCompanionEditor = false |
|
|
|
uni.showToast({ title: '已发布', icon: 'none' }) |
|
|
|
this.loadHome() |
|
|
|
} finally { |
|
|
|
this.savingCompanionIntent = false |
|
|
|
uni.hideLoading() |
|
|
|
} |
|
|
|
}, |
|
|
|
closeProfile() { |
|
|
|
this.showProfile = false |
|
|
|
}, |
|
|
|
@ -811,9 +927,6 @@ |
|
|
|
endGalaxyDrag() { |
|
|
|
if (!this.galaxyDragging) return |
|
|
|
this.galaxyDragging = false |
|
|
|
if (!this.galaxyMoved) { |
|
|
|
this.goMatch() |
|
|
|
} |
|
|
|
}, |
|
|
|
skipMatch() { |
|
|
|
this.showMatch = false |
|
|
|
@ -1082,12 +1195,20 @@ |
|
|
|
font-size: 21rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.hero-profile-line { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: space-between; |
|
|
|
gap: 14rpx; |
|
|
|
margin-top: 14rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.hero-profile { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
width: fit-content; |
|
|
|
max-width: 600rpx; |
|
|
|
margin-top: 14rpx; |
|
|
|
min-width: 0; |
|
|
|
padding: 10rpx 22rpx 10rpx 10rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
background: rgba(255, 255, 255, .56); |
|
|
|
@ -1096,6 +1217,25 @@ |
|
|
|
transition: transform .16s ease; |
|
|
|
} |
|
|
|
|
|
|
|
.say-intent-btn { |
|
|
|
flex-shrink: 0; |
|
|
|
height: 58rpx; |
|
|
|
line-height: 58rpx; |
|
|
|
padding: 0 22rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
color: #5b4fd6; |
|
|
|
background: rgba(255, 255, 255, .62); |
|
|
|
border: 1rpx solid rgba(255, 255, 255, .9); |
|
|
|
box-shadow: 0 12rpx 30rpx rgba(96, 112, 160, .1); |
|
|
|
font-size: 22rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
|
|
|
|
.say-intent-btn:active { |
|
|
|
transform: scale(.96); |
|
|
|
background: rgba(169, 255, 231, .76); |
|
|
|
} |
|
|
|
|
|
|
|
.hero-profile:active { |
|
|
|
transform: scale(.97); |
|
|
|
} |
|
|
|
@ -1761,13 +1901,13 @@ |
|
|
|
.target-mask { |
|
|
|
position: fixed; |
|
|
|
inset: 0; |
|
|
|
z-index: 30; |
|
|
|
z-index: 99; |
|
|
|
display: flex; |
|
|
|
align-items: flex-end; |
|
|
|
padding: 32rpx 30rpx 136rpx; |
|
|
|
padding: 32rpx 30rpx 158rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
background: rgba(22, 27, 46, .18); |
|
|
|
backdrop-filter: blur(16rpx); |
|
|
|
background: rgba(22, 27, 46, .42); |
|
|
|
backdrop-filter: blur(24rpx); |
|
|
|
} |
|
|
|
|
|
|
|
.target-popup { |
|
|
|
@ -1776,7 +1916,7 @@ |
|
|
|
border-radius: 42rpx; |
|
|
|
border: 1rpx solid rgba(255, 255, 255, .9); |
|
|
|
background: |
|
|
|
linear-gradient(135deg, rgba(255, 255, 255, .96), rgba(255, 255, 255, .8)), |
|
|
|
linear-gradient(135deg, #ffffff, #f9fbff), |
|
|
|
radial-gradient(circle at 82% 0%, rgba(169, 255, 231, .28), transparent 220rpx); |
|
|
|
box-shadow: 0 34rpx 100rpx rgba(96, 112, 160, .22); |
|
|
|
box-sizing: border-box; |
|
|
|
@ -1830,6 +1970,90 @@ |
|
|
|
gap: 12rpx 0; |
|
|
|
} |
|
|
|
|
|
|
|
.target-input { |
|
|
|
height: 68rpx; |
|
|
|
margin-top: 16rpx; |
|
|
|
padding: 0 24rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
color: #161b2e; |
|
|
|
background: rgba(255, 255, 255, .72); |
|
|
|
border: 1rpx solid rgba(255, 255, 255, .9); |
|
|
|
box-shadow: inset 0 1rpx 0 rgba(255, 255, 255, .96); |
|
|
|
font-size: 23rpx; |
|
|
|
font-weight: 700; |
|
|
|
} |
|
|
|
|
|
|
|
.search-input { |
|
|
|
margin-top: 12rpx; |
|
|
|
background: rgba(239, 244, 255, .74); |
|
|
|
} |
|
|
|
|
|
|
|
.companion-mask { |
|
|
|
position: fixed; |
|
|
|
inset: 0; |
|
|
|
z-index: 99; |
|
|
|
display: flex; |
|
|
|
align-items: flex-end; |
|
|
|
padding: 0 32rpx 190rpx; |
|
|
|
box-sizing: border-box; |
|
|
|
background: rgba(22, 27, 46, .2); |
|
|
|
backdrop-filter: blur(10rpx); |
|
|
|
transition: padding-bottom .18s ease; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-editor { |
|
|
|
width: 100%; |
|
|
|
padding: 34rpx 30rpx 30rpx; |
|
|
|
border-radius: 42rpx; |
|
|
|
border: 1rpx solid rgba(255, 255, 255, .9); |
|
|
|
background: linear-gradient(135deg, rgba(255, 255, 255, .96), rgba(255, 255, 255, .84)); |
|
|
|
box-shadow: 0 34rpx 100rpx rgba(96, 112, 160, .22); |
|
|
|
box-sizing: border-box; |
|
|
|
animation: targetUp .18s ease-out both; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-editor-head { |
|
|
|
display: flex; |
|
|
|
align-items: flex-start; |
|
|
|
justify-content: space-between; |
|
|
|
gap: 24rpx; |
|
|
|
margin-bottom: 12rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-editor-title { |
|
|
|
color: #161b2e; |
|
|
|
font-size: 34rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-editor-sub { |
|
|
|
margin-top: 8rpx; |
|
|
|
color: rgba(22, 27, 46, .46); |
|
|
|
font-size: 23rpx; |
|
|
|
line-height: 34rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-input { |
|
|
|
margin-top: 22rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-save { |
|
|
|
height: 86rpx; |
|
|
|
line-height: 86rpx; |
|
|
|
margin-top: 22rpx; |
|
|
|
border-radius: 999rpx; |
|
|
|
text-align: center; |
|
|
|
color: #11162a; |
|
|
|
background: linear-gradient(135deg, #effffb, #a9ffe7 62%, #ffd6a5); |
|
|
|
box-shadow: 0 18rpx 46rpx rgba(169, 255, 231, .3); |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
|
|
|
|
.companion-save.disabled { |
|
|
|
opacity: .62; |
|
|
|
} |
|
|
|
|
|
|
|
.intent-chip.active { |
|
|
|
color: #fff; |
|
|
|
background: linear-gradient(135deg, #ff8a54, #ff5f8f); |
|
|
|
|