@liujitcn/kratos-uni-app-system 0.0.79 → 0.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -234,7 +234,9 @@ var systemPages = {
234
234
  navigationBarTitleText: ""
235
235
  }
236
236
  },
237
- "pagesMember/settings/settings": { style: { navigationBarTitleText: "" } },
237
+ "pagesMember/settings/settings": {
238
+ style: { navigationStyle: "custom", navigationBarTitleText: "" }
239
+ },
238
240
  "pagesMember/ai/index": {
239
241
  style: {
240
242
  navigationStyle: "custom",
@@ -254,7 +256,9 @@ var systemPages = {
254
256
  navigationBarTitleText: ""
255
257
  }
256
258
  },
257
- "pagesMember/message/detail": { style: { navigationBarTitleText: "" } }
259
+ "pagesMember/message/detail": {
260
+ style: { navigationStyle: "custom", navigationBarTitleText: "" }
261
+ }
258
262
  };
259
263
 
260
264
  // src/locales/zh-CN.json
package/dist/module.mjs CHANGED
@@ -10,7 +10,9 @@ var systemPages = {
10
10
  navigationBarTitleText: ""
11
11
  }
12
12
  },
13
- "pagesMember/settings/settings": { style: { navigationBarTitleText: "" } },
13
+ "pagesMember/settings/settings": {
14
+ style: { navigationStyle: "custom", navigationBarTitleText: "" }
15
+ },
14
16
  "pagesMember/ai/index": {
15
17
  style: {
16
18
  navigationStyle: "custom",
@@ -30,7 +32,9 @@ var systemPages = {
30
32
  navigationBarTitleText: ""
31
33
  }
32
34
  },
33
- "pagesMember/message/detail": { style: { navigationBarTitleText: "" } }
35
+ "pagesMember/message/detail": {
36
+ style: { navigationStyle: "custom", navigationBarTitleText: "" }
37
+ }
34
38
  };
35
39
 
36
40
  // src/locales/zh-CN.json
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "type": "git",
8
8
  "url": "git@github.com:liujitcn/kratos-admin.git"
9
9
  },
10
- "version": "0.0.79",
10
+ "version": "0.0.81",
11
11
  "type": "module",
12
12
  "files": [
13
13
  "dist",
@@ -35,7 +35,7 @@
35
35
  "@dcloudio/uni-app": "3.0.0-5010520260709002",
36
36
  "@dcloudio/uni-ui": "^1.4.28",
37
37
  "vue": "^3.4.21",
38
- "@liujitcn/kratos-uni-app-core": "^0.0.79"
38
+ "@liujitcn/kratos-uni-app-core": "^0.0.81"
39
39
  },
40
40
  "devDependencies": {
41
41
  "esbuild": "^0.20.2",
package/src/pages.ts CHANGED
@@ -9,7 +9,9 @@ export const systemPages: Record<string, KratosAppPageConfig> = {
9
9
  navigationBarTitleText: '',
10
10
  },
11
11
  },
12
- 'pagesMember/settings/settings': { style: { navigationBarTitleText: '' } },
12
+ 'pagesMember/settings/settings': {
13
+ style: { navigationStyle: 'custom', navigationBarTitleText: '' },
14
+ },
13
15
  'pagesMember/ai/index': {
14
16
  style: {
15
17
  navigationStyle: 'custom',
@@ -29,5 +31,7 @@ export const systemPages: Record<string, KratosAppPageConfig> = {
29
31
  navigationBarTitleText: '',
30
32
  },
31
33
  },
32
- 'pagesMember/message/detail': { style: { navigationBarTitleText: '' } },
34
+ 'pagesMember/message/detail': {
35
+ style: { navigationStyle: 'custom', navigationBarTitleText: '' },
36
+ },
33
37
  }
@@ -1,20 +1,41 @@
1
1
  <script setup lang="ts">
2
- import { useSettingStore, useUserStore } from '@liujitcn/kratos-uni-app-core/stores'
2
+ import { useSettingStore, useThemeStore, useUserStore } from '@liujitcn/kratos-uni-app-core/stores'
3
3
  import { computed } from 'vue'
4
- import { formatSrc } from '@liujitcn/kratos-uni-app-core/utils/index'
4
+ import { formatSrc, getMpCapsuleRightGap } from '@liujitcn/kratos-uni-app-core/utils/index'
5
5
  import { navigateToLogin } from '@liujitcn/kratos-uni-app-core/utils/navigation'
6
6
  import { navigateAppRoute } from '@liujitcn/kratos-uni-app-core'
7
7
  import defaultAvatar from '@liujitcn/kratos-uni-app-core/static/images/avatar.png'
8
- import centerBackground from '@liujitcn/kratos-uni-app-core/static/images/center_bg.png'
9
8
  import { useI18n } from '@liujitcn/kratos-uni-app-core'
10
9
 
11
10
  // 获取会员信息
12
11
  const userStore = useUserStore()
13
12
  const settingStore = useSettingStore()
13
+ const themeStore = useThemeStore()
14
14
  const { t } = useI18n()
15
15
  const isLoggedIn = computed(() => userStore.isAuthenticated())
16
16
  const profile = computed(() => userStore.userInfo)
17
17
 
18
+ /** MP-WEIXIN 原生胶囊按钮右侧避让宽度,写入 --mp-capsule-gap 供 .k-top 预留空间。 */
19
+ const capsuleGap = getMpCapsuleRightGap()
20
+
21
+ /** 昵称或占位账号首字符,用于渐变头像兜底。 */
22
+ const avatarText = computed(() => (profile.value?.nick_name || 'U').slice(0, 1))
23
+
24
+ /** 设计稿齿轮线稿,随主题取色的 data URI,替代 CSS 手绘图标。 */
25
+ const gearIcon = computed(() => {
26
+ const color = themeStore.theme === 'light' ? '#102232' : '#e9f4f6'
27
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="${color}" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.6 1.6 0 0 0 .3 1.8 2 2 0 1 1-2.8 2.8 1.6 1.6 0 0 0-2.7 1.1 2 2 0 1 1-4 0 1.6 1.6 0 0 0-2.6-1.1 2 2 0 1 1-2.8-2.8A1.6 1.6 0 0 0 3 13.9a2 2 0 1 1 0-4 1.6 1.6 0 0 0 1.5-2.7 2 2 0 1 1 2.8-2.8A1.6 1.6 0 0 0 10 4.6a2 2 0 1 1 4 0 1.6 1.6 0 0 0 2.7.6 2 2 0 1 1 2.8 2.8 1.6 1.6 0 0 0-.1 2.6"/></svg>`
28
+ return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`
29
+ })
30
+
31
+ /** 个人卡账号行:登录展示账号,未登录提示去登录。 */
32
+ const accountText = computed(() => {
33
+ if (isLoggedIn.value && profile.value) {
34
+ return profile.value.user_name || profile.value.nick_name || ''
35
+ }
36
+ return t('system.profile.login_prompt')
37
+ })
38
+
18
39
  /** 打开移动端 AI 助手静态页,未登录时先进入登录流程。 */
19
40
  const navigateToAi = () => {
20
41
  if (!userStore.ensureAuthenticated()) {
@@ -38,207 +59,100 @@ const navigateToProfile = () => navigateAppRoute('app/profile')
38
59
  </script>
39
60
 
40
61
  <template>
41
- <scroll-view
42
- enable-back-to-top
43
- class="viewport"
44
- scroll-y
45
- :style="{ backgroundImage: `url(${centerBackground})` }"
46
- >
47
- <!-- 个人资料 -->
48
- <view class="profile">
49
- <!-- 情况1:已登录 -->
50
- <view class="overview" v-if="isLoggedIn && profile">
51
- <view @tap="navigateToProfile">
52
- <image
53
- v-if="profile.avatar"
54
- class="avatar"
55
- :src="formatSrc(profile.avatar)"
56
- mode="aspectFill"
57
- ></image>
58
- <image v-else class="avatar" :src="defaultAvatar" mode="aspectFill"></image>
59
- </view>
60
- <view class="meta">
61
- <view class="nickname">
62
- {{ profile.nick_name }}
63
- </view>
64
- <view class="extra" @tap="navigateToProfile">
65
- <text class="update">{{ t('system.profile.avatar_update') }}</text>
66
- </view>
62
+ <scroll-view enable-back-to-top class="my-viewport" scroll-y :class="themeStore.themeClass">
63
+ <view class="my-content">
64
+ <!-- 顶栏:标题 + 设置入口(Tab 根页,无返回) -->
65
+ <view class="k-top" :style="{ '--mp-capsule-gap': `${capsuleGap}px` }">
66
+ <view class="k-top__title">{{ t('core.navigation.my') }}</view>
67
+ <view class="k-ic" @tap="navigateToSettings">
68
+ <image class="my-gear" :src="gearIcon" mode="aspectFit" />
67
69
  </view>
68
70
  </view>
69
- <!-- 情况2:未登录 -->
70
- <view class="overview" v-else>
71
- <view @tap="navigateToLogin">
72
- <image class="avatar gray" mode="aspectFill" :src="defaultAvatar"></image>
71
+
72
+ <view class="my-stack">
73
+ <!-- 个人资料 -->
74
+ <view class="k-glass k-glass--lit k-pfx my-profile" @tap="navigateToProfile">
75
+ <view class="k-cnr k-cnr--tr" aria-hidden="true"></view>
76
+ <view class="k-cnr k-cnr--bl" aria-hidden="true"></view>
77
+ <view class="my-pfx-main">
78
+ <image
79
+ v-if="isLoggedIn && profile"
80
+ class="k-pfx__av"
81
+ :src="profile.avatar ? formatSrc(profile.avatar) : defaultAvatar"
82
+ mode="aspectFill"
83
+ ></image>
84
+ <view v-else class="k-pfx__av">{{ avatarText }}</view>
85
+ <view class="my-pfx-meta">
86
+ <view class="k-pfx__nm">
87
+ {{ isLoggedIn && profile ? profile.nick_name : t('system.profile.not_logged_in') }}
88
+ </view>
89
+ <view class="k-pfx__ac">{{ accountText }}</view>
90
+ </view>
91
+ </view>
92
+ <view class="k-pfx__ent">{{ t('system.profile.title') }} ›</view>
73
93
  </view>
74
- <view class="meta">
75
- <view @tap="navigateToLogin" class="nickname">{{
76
- t('system.profile.not_logged_in')
77
- }}</view>
78
- <view class="extra">
79
- <text class="tips">{{ t('system.profile.login_prompt') }}</text>
94
+
95
+ <!-- AI 助手入口 -->
96
+ <view v-if="settingStore.aiEnabled" class="k-aix" @tap="navigateToAi">
97
+ <view class="k-aix__ic">AI</view>
98
+ <view class="my-aix-copy">
99
+ <view class="k-aix__t">{{ t('system.settings.ai_title') }}</view>
100
+ <view class="k-aix__d">{{ t('system.settings.ai_description') }}</view>
80
101
  </view>
102
+ <view class="k-aix__b">{{ t('system.settings.go_ask') }}</view>
81
103
  </view>
82
104
  </view>
83
- <view class="settings" @tap="navigateToSettings">{{ t('core.settings.title') }}</view>
84
- </view>
85
- <!-- AI 助手入口 -->
86
- <view v-if="settingStore.aiEnabled" class="ai-entry" @tap="navigateToAi">
87
- <view class="ai-entry__icon">AI</view>
88
- <view class="ai-entry__content">
89
- <view class="ai-entry__title">{{ t('system.settings.ai_title') }}</view>
90
- <view class="ai-entry__desc">{{ t('system.settings.ai_description') }}</view>
91
- </view>
92
- <view class="ai-entry__action">{{ t('system.settings.go_ask') }}</view>
93
105
  </view>
94
106
  </scroll-view>
95
107
  </template>
96
108
 
97
109
  <style lang="scss">
98
- page {
110
+ .my-viewport {
99
111
  height: 100%;
100
- overflow: hidden;
101
- background-color: #f7f7f8;
112
+ min-height: 100vh;
113
+ box-sizing: border-box;
114
+ background: var(--kratos-bg-gradient);
102
115
  }
103
116
 
104
- /* AI 助手入口 */
105
- .ai-entry {
106
- position: relative;
107
- z-index: 99;
108
- display: flex;
109
- align-items: center;
110
- margin: 20rpx 20rpx 0;
111
- padding: 26rpx 24rpx;
112
- border-radius: 10rpx;
113
- background-color: #fff;
114
- box-shadow: 0 4rpx 6rpx rgba(240, 240, 240, 0.6);
115
- }
117
+ .my-content {
118
+ padding: calc(env(safe-area-inset-top) + 24rpx) 32rpx calc(40rpx + env(safe-area-inset-bottom));
116
119
 
117
- .ai-entry__icon {
118
- flex-shrink: 0;
119
- width: 92rpx;
120
- height: 92rpx;
121
- border-radius: 24rpx;
122
- color: #fff;
123
- font-size: 28rpx;
124
- font-weight: 700;
125
- line-height: 92rpx;
126
- text-align: center;
127
- background-color: #27ba9b;
120
+ /* #ifdef MP-WEIXIN */
121
+ padding-top: calc(44px + 24rpx);
122
+ /* #endif */
128
123
  }
129
124
 
130
- .ai-entry__content {
131
- flex: 1;
132
- min-width: 0;
133
- margin-left: 18rpx;
125
+ .my-stack {
126
+ display: flex;
127
+ flex-direction: column;
128
+ gap: 24rpx;
129
+ margin-top: 16rpx;
134
130
  }
135
131
 
136
- .ai-entry__title {
137
- color: #1e1e1e;
138
- font-size: 30rpx;
139
- font-weight: 600;
140
- line-height: 40rpx;
132
+ .my-gear {
133
+ width: 34rpx;
134
+ height: 34rpx;
141
135
  }
142
136
 
143
- .ai-entry__desc {
144
- overflow: hidden;
145
- text-overflow: ellipsis;
146
- white-space: nowrap;
147
- margin-top: 8rpx;
148
- color: #747f7c;
149
- font-size: 24rpx;
150
- line-height: 32rpx;
137
+ /* k-pfx 仅定义 flex 排布,卡片内边距交由页面控制 */
138
+ .my-profile {
139
+ padding: 36rpx 30rpx;
151
140
  }
152
141
 
153
- .ai-entry__action {
154
- flex-shrink: 0;
155
- margin-left: 16rpx;
156
- padding: 10rpx 18rpx;
157
- border-radius: 999rpx;
158
- color: #16806d;
159
- font-size: 24rpx;
160
- background-color: #e8f8f4;
142
+ .my-pfx-main {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 24rpx;
146
+ min-width: 0;
161
147
  }
162
148
 
163
- .viewport {
164
- height: 100%;
165
- min-height: 100vh;
166
- box-sizing: border-box;
167
- background-color: #f7f7f8;
168
- background-repeat: no-repeat;
169
- background-size: 100% auto;
149
+ .my-pfx-meta {
150
+ min-width: 0;
170
151
  }
171
152
 
172
- /* 用户信息 */
173
- .profile {
174
- margin-top: 30rpx;
175
- position: relative;
176
-
177
- /* #ifdef MP-WEIXIN */
178
- padding-top: 44px;
179
- /* #endif */
180
-
181
- .overview {
182
- display: flex;
183
- height: 120rpx;
184
- padding: 0 36rpx;
185
- color: #fff;
186
- }
187
-
188
- .avatar {
189
- width: 120rpx;
190
- height: 120rpx;
191
- border-radius: 50%;
192
- background-color: #eee;
193
- }
194
-
195
- .gray {
196
- filter: grayscale(100%);
197
- }
198
-
199
- .meta {
200
- display: flex;
201
- flex-direction: column;
202
- justify-content: center;
203
- align-items: flex-start;
204
- line-height: 30rpx;
205
- padding: 16rpx 0;
206
- margin-left: 20rpx;
207
- }
208
-
209
- .nickname {
210
- max-width: 180rpx;
211
- margin-bottom: 16rpx;
212
- font-size: 30rpx;
213
-
214
- overflow: hidden;
215
- text-overflow: ellipsis;
216
- white-space: nowrap;
217
- }
218
-
219
- .extra {
220
- display: flex;
221
- font-size: 20rpx;
222
- }
223
-
224
- .tips {
225
- font-size: 22rpx;
226
- }
227
-
228
- .update {
229
- padding: 3rpx 10rpx 1rpx;
230
- color: rgba(255, 255, 255, 0.8);
231
- border: 1rpx solid rgba(255, 255, 255, 0.8);
232
- margin-right: 10rpx;
233
- border-radius: 30rpx;
234
- }
235
-
236
- .settings {
237
- position: absolute;
238
- bottom: 0;
239
- right: 40rpx;
240
- font-size: 30rpx;
241
- color: #fff;
242
- }
153
+ /* k-aix 中部文案占位伸展 */
154
+ .my-aix-copy {
155
+ flex: 1;
156
+ min-width: 0;
243
157
  }
244
158
  </style>
@@ -1,6 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, ref } from 'vue'
3
3
  import { useI18n } from '@liujitcn/kratos-uni-app-core'
4
+ import { useThemeStore } from '@liujitcn/kratos-uni-app-core/stores'
4
5
  import type { AiAttachment } from '../../../../rpc/base/v1/ai_session'
5
6
  import type { AiProviderModelOption } from '../../../../rpc/base/v1/ai_provider'
6
7
  import type { AiKnowledgeOption } from '../../../../rpc/base/v1/ai_knowledge'
@@ -48,6 +49,9 @@ const emit = defineEmits<{
48
49
 
49
50
  const showModelPicker = ref(false)
50
51
  const showKnowledgePicker = ref(false)
52
+ const themeStore = useThemeStore()
53
+ const iconColor = computed(() => (themeStore.theme === 'light' ? '#5a7083' : '#8aa0b4'))
54
+ const primaryIconColor = computed(() => (themeStore.theme === 'light' ? '#039e8c' : '#28f0d4'))
51
55
 
52
56
  const selectedModelDisplayName = computed(() => {
53
57
  const provider = props.modelProviders.find((item) => item.provider_id === props.providerId)
@@ -100,7 +104,7 @@ function handleKnowledgeToggle(knowledgeId: number) {
100
104
  <text class="composer-model-chip__label">{{
101
105
  selectedModelDisplayName || modelPlaceholder
102
106
  }}</text>
103
- <uni-icons type="down" size="12" color="#8a8f99" />
107
+ <uni-icons type="down" size="12" :color="iconColor" />
104
108
  </view>
105
109
  <view
106
110
  class="composer-model-chip"
@@ -116,11 +120,11 @@ function handleKnowledgeToggle(knowledgeId: number) {
116
120
  ? t('system.ai.knowledge.selected_count', { count: knowledgeIds.length })
117
121
  : t('system.ai.knowledge.title')
118
122
  }}</text>
119
- <uni-icons type="down" size="12" color="#8a8f99" />
123
+ <uni-icons type="down" size="12" :color="iconColor" />
120
124
  </view>
121
125
  <view class="composer-main">
122
126
  <button class="attach-button" hover-class="none" @tap="emit('attach')">
123
- <uni-icons type="plusempty" size="30" color="#111" />
127
+ <uni-icons type="plusempty" size="30" :color="iconColor" />
124
128
  </button>
125
129
  <view class="composer-card">
126
130
  <view v-if="attachments.length" class="composer-attachments">
@@ -148,7 +152,7 @@ function handleKnowledgeToggle(knowledgeId: number) {
148
152
  hover-class="none"
149
153
  @tap="emit('record')"
150
154
  >
151
- <uni-icons type="mic" size="28" :color="recording ? '#00a96b' : '#111'" />
155
+ <uni-icons type="mic" size="28" :color="recording ? primaryIconColor : iconColor" />
152
156
  </button>
153
157
  </view>
154
158
  <button
@@ -158,7 +162,7 @@ function handleKnowledgeToggle(knowledgeId: number) {
158
162
  hover-class="none"
159
163
  @tap="emit('send')"
160
164
  >
161
- <uni-icons type="paperplane" size="28" :color="disabled ? '#111' : '#00a96b'" />
165
+ <uni-icons type="paperplane" size="28" :color="disabled ? iconColor : primaryIconColor" />
162
166
  </button>
163
167
  </view>
164
168
 
@@ -199,9 +203,10 @@ function handleKnowledgeToggle(knowledgeId: number) {
199
203
  .composer {
200
204
  flex-shrink: 0;
201
205
  width: 100%;
202
- padding: 14rpx 24rpx 18rpx;
206
+ padding: 14rpx 24rpx calc(18rpx + env(safe-area-inset-bottom));
203
207
  overflow: hidden;
204
- background-color: transparent;
208
+ background: var(--kratos-color-surface, #fff);
209
+ border-top: 1rpx solid var(--kratos-color-border-accent, rgba(120, 230, 215, 0.16));
205
210
  box-sizing: border-box;
206
211
  }
207
212
 
@@ -211,9 +216,9 @@ function handleKnowledgeToggle(knowledgeId: number) {
211
216
  gap: 16rpx;
212
217
  min-height: 124rpx;
213
218
  padding: 22rpx 18rpx;
219
+ border: 1rpx solid var(--kratos-color-border, #e3eaf2);
214
220
  border-radius: 24rpx;
215
- background-color: #fff;
216
- box-shadow: 0 12rpx 34rpx rgba(15, 23, 42, 0.08);
221
+ background: var(--kratos-color-surface, #fff);
217
222
  box-sizing: border-box;
218
223
  }
219
224
 
@@ -225,11 +230,10 @@ function handleKnowledgeToggle(knowledgeId: number) {
225
230
  height: 56rpx;
226
231
  padding: 0 24rpx;
227
232
  margin: 0 8rpx 12rpx;
228
- color: #1f2937;
229
- background: #fff;
230
- border: 2rpx solid #d6dae2;
233
+ color: var(--kratos-color-text, #102232);
234
+ background: var(--kratos-color-surface, #fff);
235
+ border: 1rpx solid var(--kratos-color-border-accent, rgba(0, 150, 134, 0.28));
231
236
  border-radius: 28rpx;
232
- box-shadow: 0 4rpx 16rpx rgba(15, 23, 42, 0.04);
233
237
  box-sizing: border-box;
234
238
  }
235
239
 
@@ -239,7 +243,7 @@ function handleKnowledgeToggle(knowledgeId: number) {
239
243
 
240
244
  .composer-model-chip__spark {
241
245
  flex-shrink: 0;
242
- color: #00a96b;
246
+ color: var(--kratos-color-primary, #039e8c);
243
247
  font-size: 26rpx;
244
248
  line-height: 26rpx;
245
249
  }
@@ -262,9 +266,10 @@ function handleKnowledgeToggle(knowledgeId: number) {
262
266
  justify-content: center;
263
267
  width: 72rpx;
264
268
  height: 72rpx;
265
- border: 2rpx solid #d6dae2;
269
+ border: 1rpx solid var(--kratos-color-border, #e3eaf2);
266
270
  border-radius: 50%;
267
- background-color: #fff;
271
+ background: var(--kratos-color-surface, #fff);
272
+ color: var(--kratos-color-text-muted, #5a7083);
268
273
  box-shadow: none;
269
274
  box-sizing: border-box;
270
275
  }
@@ -278,9 +283,9 @@ function handleKnowledgeToggle(knowledgeId: number) {
278
283
  gap: 10rpx;
279
284
  min-height: 72rpx;
280
285
  padding: 0 12rpx 0 28rpx;
281
- border: 2rpx solid #d6dae2;
286
+ border: 1rpx solid var(--kratos-color-border, #e3eaf2);
282
287
  border-radius: 38rpx;
283
- background-color: #fff;
288
+ background: var(--kratos-color-surface-2, #eef4fa);
284
289
  box-shadow: none;
285
290
  box-sizing: border-box;
286
291
  }
@@ -299,11 +304,12 @@ function handleKnowledgeToggle(knowledgeId: number) {
299
304
  text-overflow: ellipsis;
300
305
  white-space: nowrap;
301
306
  padding: 6rpx 12rpx;
307
+ border: 1rpx solid var(--kratos-color-primary-edge, rgba(0, 150, 134, 0.3));
302
308
  border-radius: 8rpx;
303
- color: #16806d;
309
+ color: var(--kratos-color-primary, #039e8c);
304
310
  font-size: 20rpx;
305
311
  line-height: 28rpx;
306
- background-color: #e8f8f4;
312
+ background: var(--kratos-color-primary-soft, rgba(3, 158, 140, 0.08));
307
313
  }
308
314
 
309
315
  .composer-input {
@@ -313,15 +319,15 @@ function handleKnowledgeToggle(knowledgeId: number) {
313
319
  max-height: 126rpx;
314
320
  padding: 14rpx 0;
315
321
  box-sizing: border-box;
316
- color: #333;
322
+ color: var(--kratos-color-text, #102232);
317
323
  font-size: 29rpx;
318
324
  line-height: 42rpx;
319
325
  overflow-y: auto;
320
- background-color: transparent;
326
+ background: transparent;
321
327
  }
322
328
 
323
329
  .composer-placeholder {
324
- color: #8d929c;
330
+ color: var(--kratos-color-text-dim, #9aabbb);
325
331
  font-size: 29rpx;
326
332
  }
327
333
 
@@ -337,24 +343,25 @@ function handleKnowledgeToggle(knowledgeId: number) {
337
343
  .voice-button {
338
344
  width: 60rpx;
339
345
  height: 60rpx;
340
- background-color: transparent;
346
+ background: transparent;
341
347
  }
342
348
 
343
349
  .voice-button.active {
344
- background-color: #e8f8f4;
350
+ background: var(--kratos-color-primary-soft, rgba(3, 158, 140, 0.08));
345
351
  }
346
352
 
347
353
  .send-button {
348
354
  width: 74rpx;
349
355
  height: 74rpx;
350
- background-color: #f2f2f2;
356
+ background: var(--kratos-color-track, #e8eef5);
351
357
  }
352
358
 
353
359
  .send-button.is-disabled {
354
- background-color: #f2f2f2;
360
+ background: var(--kratos-color-track, #e8eef5);
355
361
  }
356
362
 
357
363
  .send-button:not(.is-disabled) {
358
- background-color: #e7f7f2;
364
+ background: var(--kratos-color-primary-soft-2, rgba(3, 158, 140, 0.1));
365
+ border: 1rpx solid var(--kratos-color-primary-edge, rgba(0, 150, 134, 0.3));
359
366
  }
360
367
  </style>