mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-18 10:00:40 +08:00
fix: resolve 7 type errors in dev branch
- tool_loop_agent_runner.py: add wrapper coroutine for create_task - tool_image_cache.py: add cast for Self return type - astr_agent_tool_exec.py: add type ignore for add_tool - astr_main_agent.py: add type ignores for tool operations - astr_main_agent_resources.py: add type ignore for msg_dict - astrbot_config_mgr.py: add type annotations
This commit is contained in:
@@ -42,19 +42,19 @@ class AstrBotConfigManager:
|
||||
self.confs: dict[str, AstrBotConfig] = {}
|
||||
"""uuid / "default" -> AstrBotConfig"""
|
||||
self.confs["default"] = default_config
|
||||
self.abconf_data = None
|
||||
self.abconf_data: dict | None = None
|
||||
self._load_all_configs()
|
||||
|
||||
def _get_abconf_data(self) -> dict:
|
||||
"""获取所有的 abconf 数据"""
|
||||
if self.abconf_data is None:
|
||||
self.abconf_data = self.sp.get(
|
||||
self.abconf_data: dict = self.sp.get(
|
||||
"abconf_mapping",
|
||||
{},
|
||||
scope="global",
|
||||
scope_id="global",
|
||||
)
|
||||
return self.abconf_data
|
||||
return self.abconf_data # type: ignore[return-value]
|
||||
|
||||
def _load_all_configs(self) -> None:
|
||||
"""Load all configurations from the shared preferences."""
|
||||
@@ -107,7 +107,7 @@ class AstrBotConfigManager:
|
||||
abconf_name: str | None = None,
|
||||
) -> None:
|
||||
"""保存配置文件的映射关系"""
|
||||
abconf_data = self.sp.get(
|
||||
abconf_data: dict = self.sp.get(
|
||||
"abconf_mapping",
|
||||
{},
|
||||
scope="global",
|
||||
|
||||
@@ -65,37 +65,43 @@
|
||||
</div>
|
||||
|
||||
<!-- Text (Markdown) -->
|
||||
<MarkdownRender
|
||||
<div
|
||||
v-else-if="
|
||||
renderPart.type === 'part' &&
|
||||
renderPart.part?.type === 'plain' &&
|
||||
renderPart.part?.text?.trim()
|
||||
"
|
||||
:key="`${renderPart.key}-${isDark ? 'dark' : 'light'}`"
|
||||
custom-id="message-list"
|
||||
:custom-html-tags="['ref']"
|
||||
:content="normalizeMarkdownContent(renderPart.part?.text)"
|
||||
:typewriter="false"
|
||||
class="markdown-content"
|
||||
:is-dark="isDark"
|
||||
:monaco-options="{ theme: isDark ? 'vs-dark' : 'vs-light' }"
|
||||
/>
|
||||
>
|
||||
<MarkdownRender
|
||||
custom-id="message-list"
|
||||
:custom-html-tags="['ref']"
|
||||
:content="normalizeMarkdownContent(renderPart.part?.text)"
|
||||
:typewriter="false"
|
||||
:is-dark="isDark"
|
||||
:monaco-options="{ theme: isDark ? 'vs-dark' : 'vs-light' }"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Text (Markdown) -->
|
||||
<MarkdownRender
|
||||
<div
|
||||
v-else-if="
|
||||
renderPart.type === 'part' &&
|
||||
renderPart.part?.type === 'plain' &&
|
||||
renderPart.part?.text?.trim()
|
||||
"
|
||||
:key="`${renderPart.key}-${isDark ? 'dark' : 'light'}`"
|
||||
custom-id="message-list"
|
||||
:custom-html-tags="['ref']"
|
||||
:content="renderPart.part?.text"
|
||||
:typewriter="false"
|
||||
class="markdown-content"
|
||||
:is-dark="isDark"
|
||||
/>
|
||||
>
|
||||
<MarkdownRender
|
||||
custom-id="message-list"
|
||||
:custom-html-tags="['ref']"
|
||||
:content="renderPart.part?.text"
|
||||
:typewriter="false"
|
||||
:is-dark="isDark"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Image -->
|
||||
<div
|
||||
|
||||
@@ -13,14 +13,15 @@
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isExpanded" class="reasoning-content animate-fade-in">
|
||||
<MarkdownRender
|
||||
:key="`reasoning-${isDark ? 'dark' : 'light'}`"
|
||||
:content="reasoning"
|
||||
class="reasoning-text markdown-content"
|
||||
:typewriter="false"
|
||||
:is-dark="isDark"
|
||||
:style="isDark ? { opacity: '0.85' } : {}"
|
||||
/>
|
||||
<div class="reasoning-text markdown-content">
|
||||
<MarkdownRender
|
||||
:key="`reasoning-${isDark ? 'dark' : 'light'}`"
|
||||
:content="reasoning"
|
||||
:typewriter="false"
|
||||
:is-dark="isDark"
|
||||
:style="isDark ? { opacity: '0.85' } : {}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
>
|
||||
<v-card-text
|
||||
ref="dialogScrollContainer"
|
||||
class="pa-4 ml-2"
|
||||
class="pa-4 ml-2 add-platform-body"
|
||||
style="overflow-y: auto"
|
||||
>
|
||||
<div class="d-flex align-start" style="width: 100%">
|
||||
@@ -40,8 +40,7 @@
|
||||
rounded="md"
|
||||
density="compact"
|
||||
hide-details
|
||||
class="mt-6"
|
||||
style="max-width: 30%; min-width: 300px"
|
||||
class="mt-6 platform-type-field"
|
||||
>
|
||||
<template #item="{ props: itemProps, item }">
|
||||
<v-list-item v-bind="itemProps">
|
||||
@@ -98,8 +97,7 @@
|
||||
rounded="md"
|
||||
density="compact"
|
||||
hide-details
|
||||
class="mt-6"
|
||||
style="max-width: 30%; min-width: 300px"
|
||||
class="mt-6 platform-type-field"
|
||||
disabled
|
||||
/>
|
||||
<div class="mt-3">
|
||||
@@ -173,7 +171,7 @@
|
||||
</v-radio>
|
||||
<div
|
||||
v-if="aBConfigRadioVal === '0'"
|
||||
class="d-flex align-center ml-10 my-2"
|
||||
class="d-flex align-center ml-10 my-2 config-mode-field-row"
|
||||
>
|
||||
<v-select
|
||||
v-model="selectedAbConfId"
|
||||
@@ -185,7 +183,7 @@
|
||||
rounded="md"
|
||||
density="compact"
|
||||
hide-details
|
||||
style="max-width: 30%; min-width: 200px"
|
||||
class="config-file-field"
|
||||
/>
|
||||
<v-btn
|
||||
icon
|
||||
@@ -204,7 +202,7 @@
|
||||
/>
|
||||
<div
|
||||
v-if="aBConfigRadioVal === '1'"
|
||||
class="d-flex align-center"
|
||||
class="d-flex align-center config-mode-field-row"
|
||||
>
|
||||
<v-text-field
|
||||
v-model="selectedAbConfId"
|
||||
@@ -213,8 +211,7 @@
|
||||
rounded="md"
|
||||
density="compact"
|
||||
hide-details
|
||||
style="max-width: 30%; min-width: 200px"
|
||||
class="ml-10 my-2"
|
||||
class="ml-10 my-2 config-file-field"
|
||||
/>
|
||||
</div>
|
||||
</v-radio-group>
|
||||
@@ -265,7 +262,9 @@
|
||||
</div>
|
||||
|
||||
<div v-else>
|
||||
<div class="mb-3 d-flex align-center justify-space-between">
|
||||
<div
|
||||
class="mb-3 d-flex align-center justify-space-between route-toolbar"
|
||||
>
|
||||
<div>
|
||||
<v-btn
|
||||
v-if="isEditingRoutes"
|
||||
@@ -302,11 +301,11 @@
|
||||
:no-data-text="tm('createDialog.noRouteRules')"
|
||||
hide-default-footer
|
||||
:items-per-page="-1"
|
||||
class="mt-2"
|
||||
class="mt-2 platform-route-table"
|
||||
variant="outlined"
|
||||
>
|
||||
<template #item.source="{ item }">
|
||||
<div class="d-flex align-center" style="min-width: 250px">
|
||||
<div class="d-flex align-center route-source-field">
|
||||
<v-select
|
||||
v-if="isEditingRoutes"
|
||||
v-model="item.messageType"
|
||||
@@ -316,7 +315,7 @@
|
||||
variant="outlined"
|
||||
density="compact"
|
||||
hide-details
|
||||
style="max-width: 140px"
|
||||
class="route-message-type-field"
|
||||
/>
|
||||
<small v-else>{{
|
||||
getMessageTypeLabel(item.messageType)
|
||||
@@ -339,7 +338,7 @@
|
||||
</template>
|
||||
|
||||
<template #item.configId="{ item }">
|
||||
<div class="d-flex align-center">
|
||||
<div class="d-flex align-center route-config-cell">
|
||||
<v-select
|
||||
v-if="isEditingRoutes"
|
||||
v-model="item.configId"
|
||||
@@ -348,7 +347,7 @@
|
||||
item-value="id"
|
||||
variant="outlined"
|
||||
density="compact"
|
||||
style="min-width: 200px"
|
||||
class="route-config-field"
|
||||
hide-details
|
||||
/>
|
||||
<div v-else>
|
||||
@@ -1373,6 +1372,10 @@ export default {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.add-platform-body {
|
||||
overscroll-behavior: contain;
|
||||
}
|
||||
|
||||
.platform-option-logo {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
@@ -1386,6 +1389,39 @@ export default {
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.platform-type-field {
|
||||
width: min(100%, 320px);
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.config-file-field {
|
||||
width: min(100%, 320px);
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.route-source-field {
|
||||
min-width: 250px;
|
||||
gap: 8px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.route-message-type-field {
|
||||
width: 140px;
|
||||
max-width: 140px;
|
||||
flex: 0 0 140px;
|
||||
}
|
||||
|
||||
.route-config-cell {
|
||||
gap: 8px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.route-config-field {
|
||||
width: 100%;
|
||||
min-width: 200px;
|
||||
max-width: 260px;
|
||||
}
|
||||
|
||||
.config-drawer-overlay {
|
||||
align-items: stretch;
|
||||
justify-content: flex-end;
|
||||
@@ -1411,4 +1447,77 @@ export default {
|
||||
overflow-y: auto;
|
||||
padding: 16px 16px 24px 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.add-platform-body {
|
||||
padding: 16px !important;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.platform-option-logo {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
.platform-selection-logo {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.platform-type-field,
|
||||
.config-file-field {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.config-mode-field-row {
|
||||
margin-left: 0 !important;
|
||||
width: 100%;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.route-toolbar {
|
||||
align-items: flex-start !important;
|
||||
gap: 8px;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.route-source-field {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.route-message-type-field {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
flex-basis: 100%;
|
||||
}
|
||||
|
||||
.route-config-field {
|
||||
min-width: 0;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.platform-route-table .v-table__wrapper {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.platform-route-table .v-table__wrapper > table {
|
||||
min-width: 640px;
|
||||
}
|
||||
|
||||
.config-drawer-card {
|
||||
width: calc(100vw - 16px);
|
||||
height: calc(100vh - 16px);
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
.config-drawer-header {
|
||||
padding: 12px 14px 10px 14px;
|
||||
}
|
||||
|
||||
.config-drawer-content {
|
||||
padding: 12px 12px 20px 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -395,13 +395,24 @@ function getSpecialSubtype(value) {
|
||||
<style scoped>
|
||||
/* === Reactor glassmorphism card === */
|
||||
.config-reactor-card {
|
||||
--config-accent-rgb: var(--v-theme-primary);
|
||||
--config-surface-rgb: var(--v-theme-surface);
|
||||
--config-on-surface-rgb: var(--v-theme-on-surface);
|
||||
margin-bottom: 16px;
|
||||
padding-bottom: 8px;
|
||||
background: rgba(15, 15, 22, 0.45) !important;
|
||||
backdrop-filter: blur(20px) saturate(1.2);
|
||||
border: 1px solid rgba(0, 242, 255, 0.08) !important;
|
||||
background: rgba(var(--config-surface-rgb), 0.94) !important;
|
||||
backdrop-filter: blur(18px) saturate(1.08);
|
||||
border: 1px solid rgba(var(--config-on-surface-rgb), 0.08) !important;
|
||||
border-radius: 24px !important;
|
||||
box-shadow: inset 0 0 20px rgba(0, 0, 0, 0.6) !important;
|
||||
box-shadow: 0 18px 40px rgba(15, 23, 42, 0.08) !important;
|
||||
}
|
||||
|
||||
:global(.v-theme--dark) .config-reactor-card {
|
||||
background: rgba(var(--config-surface-rgb), 0.72) !important;
|
||||
border-color: rgba(var(--config-accent-rgb), 0.12) !important;
|
||||
box-shadow:
|
||||
inset 0 0 20px rgba(0, 0, 0, 0.35),
|
||||
0 18px 48px rgba(0, 0, 0, 0.28) !important;
|
||||
}
|
||||
|
||||
.config-section {
|
||||
@@ -412,7 +423,7 @@ function getSpecialSubtype(value) {
|
||||
.config-title {
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
color: rgba(0, 242, 255, 0.9) !important;
|
||||
color: rgba(var(--config-on-surface-rgb), 0.92) !important;
|
||||
font-family: "JetBrains Mono", "Fira Code", monospace;
|
||||
letter-spacing: 0.5px;
|
||||
display: flex;
|
||||
@@ -424,29 +435,33 @@ function getSpecialSubtype(value) {
|
||||
display: inline-block;
|
||||
width: 3px;
|
||||
height: 1.1em;
|
||||
background: linear-gradient(180deg, #00F2FF 0%, rgba(0, 242, 255, 0.2) 100%);
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
rgba(var(--config-accent-rgb), 0.95) 0%,
|
||||
rgba(var(--config-accent-rgb), 0.16) 100%
|
||||
);
|
||||
border-radius: 2px;
|
||||
flex-shrink: 0;
|
||||
box-shadow: 0 0 8px rgba(0, 242, 255, 0.6);
|
||||
box-shadow: 0 0 10px rgba(var(--config-accent-rgb), 0.24);
|
||||
}
|
||||
|
||||
.config-hint {
|
||||
font-size: 0.75rem;
|
||||
color: rgba(228, 225, 230, 0.5);
|
||||
color: rgba(var(--config-on-surface-rgb), 0.62);
|
||||
margin-top: 4px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.config-hint ::v-deep(a),
|
||||
.property-hint ::v-deep(a) {
|
||||
color: rgba(0, 242, 255, 0.7);
|
||||
color: rgba(var(--config-accent-rgb), 0.85);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid rgba(0, 242, 255, 0.3);
|
||||
border-bottom: 1px solid rgba(var(--config-accent-rgb), 0.28);
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
.config-hint ::v-deep(a:hover),
|
||||
.property-hint ::v-deep(a:hover) {
|
||||
border-bottom-color: #00F2FF;
|
||||
border-bottom-color: rgba(var(--config-accent-rgb), 0.8);
|
||||
}
|
||||
|
||||
.metadata-key,
|
||||
@@ -472,11 +487,11 @@ function getSpecialSubtype(value) {
|
||||
}
|
||||
|
||||
.nested-container {
|
||||
border: 1px solid rgba(0, 242, 255, 0.06);
|
||||
border: 1px solid rgba(var(--config-on-surface-rgb), 0.08);
|
||||
border-radius: 12px;
|
||||
padding: 12px;
|
||||
margin: 12px 0;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
background: rgba(var(--config-accent-rgb), 0.04);
|
||||
}
|
||||
|
||||
.config-row {
|
||||
@@ -488,7 +503,7 @@ function getSpecialSubtype(value) {
|
||||
}
|
||||
|
||||
.config-row:hover {
|
||||
background: rgba(0, 242, 255, 0.03);
|
||||
background: rgba(var(--config-accent-rgb), 0.05);
|
||||
}
|
||||
|
||||
.property-info {
|
||||
@@ -498,12 +513,12 @@ function getSpecialSubtype(value) {
|
||||
.property-name {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: rgba(228, 225, 230, 0.85);
|
||||
color: rgba(var(--config-on-surface-rgb), 0.88);
|
||||
}
|
||||
|
||||
.property-hint {
|
||||
font-size: 0.72rem;
|
||||
color: rgba(228, 225, 230, 0.4);
|
||||
color: rgba(var(--config-on-surface-rgb), 0.62);
|
||||
margin-top: 2px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
@@ -522,7 +537,7 @@ function getSpecialSubtype(value) {
|
||||
}
|
||||
|
||||
.config-divider {
|
||||
border-color: rgba(255, 255, 255, 0.04) !important;
|
||||
border-color: rgba(var(--config-on-surface-rgb), 0.08) !important;
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
@@ -537,12 +552,20 @@ function getSpecialSubtype(value) {
|
||||
top: 4px;
|
||||
right: 4px;
|
||||
z-index: 10;
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
background-color: rgba(var(--config-on-surface-rgb), 0.08);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
:global(.v-theme--dark) .editor-fullscreen-btn {
|
||||
background-color: rgba(0, 0, 0, 0.28);
|
||||
}
|
||||
|
||||
.editor-fullscreen-btn:hover {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
background-color: rgba(var(--config-on-surface-rgb), 0.14);
|
||||
}
|
||||
|
||||
:global(.v-theme--dark) .editor-fullscreen-btn:hover {
|
||||
background-color: rgba(0, 0, 0, 0.42);
|
||||
}
|
||||
|
||||
.plugin-set-display-row {
|
||||
@@ -564,8 +587,8 @@ function getSpecialSubtype(value) {
|
||||
}
|
||||
|
||||
.selected-plugins-full-width {
|
||||
background: rgba(0, 242, 255, 0.04);
|
||||
border: 1px solid rgba(0, 242, 255, 0.08);
|
||||
background: rgba(var(--config-accent-rgb), 0.04);
|
||||
border: 1px solid rgba(var(--config-accent-rgb), 0.1);
|
||||
border-radius: 10px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
@@ -205,11 +205,12 @@ getCurrentVersion();
|
||||
{{ changelogError }}
|
||||
</v-alert>
|
||||
<div v-else-if="changelogContent" class="changelog-content">
|
||||
<MarkdownRender
|
||||
:content="changelogContent"
|
||||
:typewriter="false"
|
||||
class="markdown-content"
|
||||
/>
|
||||
<div class="markdown-content">
|
||||
<MarkdownRender
|
||||
:content="changelogContent"
|
||||
:typewriter="false"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</v-card-text>
|
||||
|
||||
@@ -243,20 +243,20 @@
|
||||
@update:model-value="emitUpdate"
|
||||
/>
|
||||
|
||||
<ListConfigItem
|
||||
v-else-if="itemMeta?.type === 'list'"
|
||||
:model-value="modelValue"
|
||||
class="config-field"
|
||||
@update:model-value="emitUpdate"
|
||||
/>
|
||||
<div v-else-if="itemMeta?.type === 'list'" class="config-field">
|
||||
<ListConfigItem
|
||||
:model-value="modelValue"
|
||||
@update:model-value="emitUpdate"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<ObjectEditor
|
||||
v-else-if="itemMeta?.type === 'dict'"
|
||||
:model-value="modelValue"
|
||||
:item-meta="itemMeta"
|
||||
class="config-field"
|
||||
@update:model-value="emitUpdate"
|
||||
/>
|
||||
<div v-else-if="itemMeta?.type === 'dict'" class="config-field">
|
||||
<ObjectEditor
|
||||
:model-value="modelValue"
|
||||
:item-meta="itemMeta"
|
||||
@update:model-value="emitUpdate"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<v-text-field
|
||||
v-else
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<script setup>
|
||||
import { shallowRef, onMounted, onBeforeUnmount } from "vue";
|
||||
import axios from "axios";
|
||||
import { EventSourcePolyfill } from "event-source-polyfill";
|
||||
import { resolveApiUrl } from "@/utils/request";
|
||||
import axios, { resolveApiUrl } from "@/utils/request";
|
||||
|
||||
let isMounted = false;
|
||||
const events = shallowRef([]);
|
||||
|
||||
@@ -854,11 +854,12 @@ const isChristmas = computed(() => {
|
||||
overflow-y: auto;
|
||||
"
|
||||
>
|
||||
<MarkdownRender
|
||||
:content="releaseMessage"
|
||||
:typewriter="false"
|
||||
class="markdown-content"
|
||||
/>
|
||||
<div class="markdown-content">
|
||||
<MarkdownRender
|
||||
:content="releaseMessage"
|
||||
:typewriter="false"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4 mt-4">
|
||||
@@ -1022,11 +1023,12 @@ const isChristmas = computed(() => {
|
||||
{{ selectedReleaseTag }}
|
||||
</v-card-title>
|
||||
<v-card-text style="font-size: 14px; max-height: 400px; overflow-y: auto">
|
||||
<MarkdownRender
|
||||
:content="selectedReleaseNotes"
|
||||
:typewriter="false"
|
||||
class="markdown-content"
|
||||
/>
|
||||
<div class="markdown-content">
|
||||
<MarkdownRender
|
||||
:content="selectedReleaseNotes"
|
||||
:typewriter="false"
|
||||
/>
|
||||
</div>
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer />
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
<script setup lang="ts">
|
||||
import { useI18n } from "@/i18n/composables";
|
||||
import { useCustomizerStore } from "@/stores/customizer";
|
||||
import { computed } from "vue";
|
||||
import { computed, useAttrs } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
defineOptions({
|
||||
inheritAttrs: false,
|
||||
});
|
||||
|
||||
const props = defineProps({ item: Object, level: Number });
|
||||
const { t } = useI18n();
|
||||
const customizer = useCustomizerStore();
|
||||
const route = useRoute();
|
||||
const attrs = useAttrs();
|
||||
|
||||
const itemStyle = computed(() => {
|
||||
const lvl = props.level ?? 0;
|
||||
@@ -32,6 +37,7 @@ const isItemActive = computed(() => {
|
||||
v-if="item.children"
|
||||
:value="item.title"
|
||||
:class="{ 'group-bordered': customizer.mini_sidebar }"
|
||||
v-bind="attrs"
|
||||
>
|
||||
<template #activator="{ props }">
|
||||
<v-list-item
|
||||
@@ -75,6 +81,7 @@ const isItemActive = computed(() => {
|
||||
:disabled="item.disabled"
|
||||
:target="item.type === 'external' ? '_blank' : ''"
|
||||
:style="itemStyle"
|
||||
v-bind="attrs"
|
||||
>
|
||||
<template #prepend>
|
||||
<v-icon
|
||||
|
||||
@@ -1005,14 +1005,8 @@ export default {
|
||||
|
||||
.unsaved-changes-banner {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.v-theme--light .unsaved-changes-banner {
|
||||
background-color: #f1f4f9 !important;
|
||||
}
|
||||
|
||||
.v-theme--dark .unsaved-changes-banner {
|
||||
background-color: #2d2d2d !important;
|
||||
background-color: rgba(var(--v-theme-warning), 0.1) !important;
|
||||
border: 1px solid rgba(var(--v-theme-warning), 0.16) !important;
|
||||
}
|
||||
|
||||
.unsaved-changes-banner-wrap {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<script setup>
|
||||
import TraceDisplayer from "@/components/shared/TraceDisplayer.vue";
|
||||
import { useModuleI18n } from "@/i18n/composables";
|
||||
import axios from "@/utils/request";
|
||||
import { ref, onMounted } from "vue";
|
||||
import axios from "axios";
|
||||
|
||||
const { tm } = useModuleI18n("features/trace");
|
||||
|
||||
|
||||
@@ -253,11 +253,12 @@
|
||||
<div class="mb-4 text-h3 font-weight-bold">
|
||||
{{ tm("announcement.title") }}
|
||||
</div>
|
||||
<MarkdownRender
|
||||
:content="welcomeAnnouncement"
|
||||
:typewriter="false"
|
||||
class="welcome-announcement-markdown markdown-content"
|
||||
/>
|
||||
<div class="welcome-announcement-markdown markdown-content">
|
||||
<MarkdownRender
|
||||
:content="welcomeAnnouncement"
|
||||
:typewriter="false"
|
||||
/>
|
||||
</div>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
|
||||
@@ -180,7 +180,7 @@ const marketCategorySelectItems = computed(() =>
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<v-window-item v-show="activeTab === 'market'">
|
||||
<div v-show="activeTab === 'market'">
|
||||
<div class="mb-6 pt-4 pb-4">
|
||||
<div class="d-flex align-center" style="gap: 12px">
|
||||
<div class="d-flex align-center" style="gap: 12px; min-width: 0">
|
||||
@@ -393,7 +393,7 @@ const marketCategorySelectItems = computed(() =>
|
||||
</div>
|
||||
</v-expand-transition>
|
||||
</div>
|
||||
</v-window-item>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -44,6 +44,10 @@ function mdiFontDownload() {
|
||||
export default defineConfig(({ command, mode }) => {
|
||||
const env = loadEnv(mode, process.cwd(), "");
|
||||
const basePath = env.VITE_BASE_PATH || process.env.BASE_PATH || "/";
|
||||
const devApiProxyTarget =
|
||||
env.VITE_DEV_API_PROXY_TARGET ||
|
||||
process.env.VITE_DEV_API_PROXY_TARGET ||
|
||||
"";
|
||||
|
||||
return {
|
||||
base: command === "build" ? basePath : "/",
|
||||
@@ -85,6 +89,14 @@ export default defineConfig(({ command, mode }) => {
|
||||
server: {
|
||||
host: "::",
|
||||
port: 3000,
|
||||
proxy: devApiProxyTarget
|
||||
? {
|
||||
"/api": {
|
||||
target: devApiProxyTarget,
|
||||
changeOrigin: true,
|
||||
},
|
||||
}
|
||||
: undefined,
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user