diff --git a/src/agentkit/server/frontend/package-lock.json b/src/agentkit/server/frontend/package-lock.json
index e740af0..3f609c9 100644
--- a/src/agentkit/server/frontend/package-lock.json
+++ b/src/agentkit/server/frontend/package-lock.json
@@ -9,6 +9,10 @@
"version": "0.1.0",
"dependencies": {
"@ant-design/icons-vue": "^7.0.0",
+ "@fullcalendar/daygrid": "^6.1.0",
+ "@fullcalendar/interaction": "^6.1.0",
+ "@fullcalendar/timegrid": "^6.1.0",
+ "@fullcalendar/vue3": "^6.1.0",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-shell": "^2",
"@vue-flow/background": "^1.3.0",
@@ -533,6 +537,56 @@
"node": ">=12"
}
},
+ "node_modules/@fullcalendar/core": {
+ "version": "6.1.21",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/core/-/core-6.1.21.tgz",
+ "integrity": "sha512-t3u/+sqh3Iq7TWtUnVLcGDUE6OWZh0UD3c04bI/l7lSLAgAKr3kngBmhHiQD1QXpwC8ZN5iNqG7a7gOVixhSKQ==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "preact": "~10.12.1"
+ }
+ },
+ "node_modules/@fullcalendar/daygrid": {
+ "version": "6.1.21",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/daygrid/-/daygrid-6.1.21.tgz",
+ "integrity": "sha512-QYb1y40RGYLlOxKpYWg8O+7njEnKnFG8Tt7qjnubJGR35s1phQg67E+81y2TyAbbm59p2JFOCXGDk9t6KDujIA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.21"
+ }
+ },
+ "node_modules/@fullcalendar/interaction": {
+ "version": "6.1.21",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/interaction/-/interaction-6.1.21.tgz",
+ "integrity": "sha512-WPYpqtljDWmU0Xm2cOtFrLlocgxv7cgkOppj34Q6OUUat8a6Cnd6kYo2JR+irP223PE5lBYHFNp1qh7SIpJc0w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.21"
+ }
+ },
+ "node_modules/@fullcalendar/timegrid": {
+ "version": "6.1.21",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/timegrid/-/timegrid-6.1.21.tgz",
+ "integrity": "sha512-2DnShx/jallGmb8QCkr6pAOu/zuPhJrP7+uTrAtSnbqsX7GF3lTxqSeNGkTQwsgF5g/ia8udhQ+JNYaE+TN1cQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@fullcalendar/daygrid": "~6.1.21"
+ },
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.21"
+ }
+ },
+ "node_modules/@fullcalendar/vue3": {
+ "version": "6.1.21",
+ "resolved": "https://registry.npmmirror.com/@fullcalendar/vue3/-/vue3-6.1.21.tgz",
+ "integrity": "sha512-OGt6WSC+/zz/ej6a0KfIBNl7BYuGchpZU49SsedYyv3WZWbghAE+D8YD6nhH1ia/I4p5Gcsv/nEXgEkT/I8aYQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@fullcalendar/core": "~6.1.21",
+ "vue": "^3.0.11"
+ }
+ },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -2585,6 +2639,17 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/preact": {
+ "version": "10.12.1",
+ "resolved": "https://registry.npmmirror.com/preact/-/preact-10.12.1.tgz",
+ "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==",
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
"node_modules/punycode.js": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz",
diff --git a/src/agentkit/server/frontend/package.json b/src/agentkit/server/frontend/package.json
index 0003f31..49e0492 100644
--- a/src/agentkit/server/frontend/package.json
+++ b/src/agentkit/server/frontend/package.json
@@ -18,6 +18,10 @@
},
"dependencies": {
"@ant-design/icons-vue": "^7.0.0",
+ "@fullcalendar/daygrid": "^6.1.0",
+ "@fullcalendar/interaction": "^6.1.0",
+ "@fullcalendar/timegrid": "^6.1.0",
+ "@fullcalendar/vue3": "^6.1.0",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-shell": "^2",
"@vue-flow/background": "^1.3.0",
diff --git a/src/agentkit/server/frontend/src/components/calendar/CalendarDrawer.vue b/src/agentkit/server/frontend/src/components/calendar/CalendarDrawer.vue
new file mode 100644
index 0000000..10f0033
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/CalendarDrawer.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/calendar/CalendarGrid.vue b/src/agentkit/server/frontend/src/components/calendar/CalendarGrid.vue
new file mode 100644
index 0000000..1555f52
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/CalendarGrid.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/calendar/CalendarPanel.vue b/src/agentkit/server/frontend/src/components/calendar/CalendarPanel.vue
new file mode 100644
index 0000000..e2cf048
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/CalendarPanel.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+ {{ store.error }}
+
+
+
+
+ 暂无日程
+
+
+
+
+
今日
+
+
{{ formatTime(ev.start_time) }}
+
{{ ev.title }}
+
+
受邀
+
+
+
+
+
即将到来
+
+
{{ formatUpcomingTime(ev.start_time) }}
+
{{ ev.title }}
+
+
受邀
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/calendar/CardView.vue b/src/agentkit/server/frontend/src/components/calendar/CardView.vue
new file mode 100644
index 0000000..e7addc3
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/CardView.vue
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ ev.title }}
+
+
+ {{ ev.location }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/calendar/EventBadge.vue b/src/agentkit/server/frontend/src/components/calendar/EventBadge.vue
new file mode 100644
index 0000000..4bc2d01
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/EventBadge.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/calendar/ListView.vue b/src/agentkit/server/frontend/src/components/calendar/ListView.vue
new file mode 100644
index 0000000..f4e4ce8
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/calendar/ListView.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+ {{ formatDateTime(record.start_time) }}
+ →
+ {{ formatTime(record.end_time) }}
+
+
+
+
+ {{ record.title }}
+ 受邀
+
+
+
+
+
+
+
+ {{ getTypeName(record.event_type_id) }}
+
+ —
+
+
+ {{ record.location }}
+ —
+
+
+
+
+
+
+
+
+
diff --git a/src/agentkit/server/frontend/src/components/layout/AgentLayout.vue b/src/agentkit/server/frontend/src/components/layout/AgentLayout.vue
index 1b83ed0..3fb6842 100644
--- a/src/agentkit/server/frontend/src/components/layout/AgentLayout.vue
+++ b/src/agentkit/server/frontend/src/components/layout/AgentLayout.vue
@@ -74,6 +74,9 @@
+
+
+
@@ -104,6 +107,7 @@ import {
AppstoreOutlined,
SettingOutlined,
DesktopOutlined,
+ CalendarOutlined,
} from '@ant-design/icons-vue'
import { useChatStore } from '@/stores/chat'
import TopNav from './TopNav.vue'
@@ -121,6 +125,7 @@ const KnowledgeBaseView = defineAsyncComponent(() => import('@/views/KnowledgeBa
const EvolutionView = defineAsyncComponent(() => import('@/views/EvolutionView.vue'))
const SkillsView = defineAsyncComponent(() => import('@/views/SkillsView.vue'))
const SettingsView = defineAsyncComponent(() => import('@/views/SettingsView.vue'))
+const CalendarTab = defineAsyncComponent(() => import('./tabs/CalendarTab.vue'))
const route = useRoute()
const chatStore = useChatStore()
@@ -152,6 +157,7 @@ const topRightTabs: QuadrantTab[] = [
const bottomRightTabs: QuadrantTab[] = [
{ key: 'monitor', label: '监控', icon: DashboardOutlined as Component },
{ key: 'skills', label: '技能', icon: AppstoreOutlined as Component },
+ { key: 'calendar', label: '日历', icon: CalendarOutlined as Component },
{ key: 'settings', label: '设置', icon: SettingOutlined as Component },
]
diff --git a/src/agentkit/server/frontend/src/components/layout/tabs/CalendarTab.vue b/src/agentkit/server/frontend/src/components/layout/tabs/CalendarTab.vue
new file mode 100644
index 0000000..3c8fa1c
--- /dev/null
+++ b/src/agentkit/server/frontend/src/components/layout/tabs/CalendarTab.vue
@@ -0,0 +1,7 @@
+
+
+
+
+