diff --git a/frontend/components.d.ts b/frontend/components.d.ts
index cc621de..9424b7b 100644
--- a/frontend/components.d.ts
+++ b/frontend/components.d.ts
@@ -25,6 +25,7 @@ declare module 'vue' {
AssistantAdd: typeof import('./src/components/ai/AssistantAdd.vue')['default']
Battery: typeof import('./src/components/taskbar/Battery.vue')['default']
BatteryPop: typeof import('./src/components/taskbar/BatteryPop.vue')['default']
+ BottomBar: typeof import('./src/components/desktop/mobile/BottomBar.vue')['default']
Browser: typeof import('./src/components/builtin/Browser.vue')['default']
Calendar: typeof import('./src/components/builtin/Calendar.vue')['default']
Chat: typeof import('./src/components/chat/Chat.vue')['default']
@@ -73,13 +74,9 @@ declare module 'vue' {
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
- ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRow: typeof import('element-plus/es')['ElRow']
- ElSelect: typeof import('element-plus/es')['ElSelect']
- ElSwitch: typeof import('element-plus/es')['ElSwitch']
- ElTag: typeof import('element-plus/es')['ElTag']
Error: typeof import('./src/components/taskbar/Error.vue')['default']
FileIcon: typeof import('./src/components/builtin/FileIcon.vue')['default']
FileIconImg: typeof import('./src/components/builtin/FileIconImg.vue')['default']
@@ -103,6 +100,8 @@ declare module 'vue' {
MenuList: typeof import('./src/components/taskbar/MenuList.vue')['default']
MessageCenterPop: typeof import('./src/components/taskbar/MessageCenterPop.vue')['default']
MessageIcon: typeof import('./src/components/taskbar/MessageIcon.vue')['default']
+ Mobile: typeof import('./src/components/desktop/mobile/Mobile.vue')['default']
+ MobileApp: typeof import('./src/components/desktop/mobile/MobileApp.vue')['default']
MusicStore: typeof import('./src/components/builtin/MusicStore.vue')['default']
MusicViewer: typeof import('./src/components/builtin/MusicViewer.vue')['default']
NetWork: typeof import('./src/components/taskbar/NetWork.vue')['default']
diff --git a/frontend/index.html b/frontend/index.html
index ad82f44..3a5daae 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -3,7 +3,7 @@
-
+
GodoOS
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index cfa25c5..89e5c40 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -21,6 +21,7 @@
"moment": "^2.30.1",
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
+ "swiper": "^11.1.15",
"vue": "^3.4.31",
"vue-i18n": "^9.13.1",
"vue-router": "^4.4.0",
@@ -3436,6 +3437,25 @@
"integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==",
"optional": true
},
+ "node_modules/swiper": {
+ "version": "11.1.15",
+ "resolved": "https://registry.npmmirror.com/swiper/-/swiper-11.1.15.tgz",
+ "integrity": "sha512-IzWeU34WwC7gbhjKsjkImTuCRf+lRbO6cnxMGs88iVNKDwV+xQpBCJxZ4bNH6gSrIbbyVJ1kuGzo3JTtz//CBw==",
+ "funding": [
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/swiperjs"
+ },
+ {
+ "type": "open_collective",
+ "url": "http://opencollective.com/swiper"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.7.0"
+ }
+ },
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 3d7edc6..2f94b61 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,6 +22,7 @@
"moment": "^2.30.1",
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
+ "swiper": "^11.1.15",
"vue": "^3.4.31",
"vue-i18n": "^9.13.1",
"vue-router": "^4.4.0",
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index bf7b858..0ba0032 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -1,12 +1,18 @@
-
+
+
diff --git a/frontend/src/components/desktop/mobile/BottomBar.vue b/frontend/src/components/desktop/mobile/BottomBar.vue
new file mode 100644
index 0000000..e56ae84
--- /dev/null
+++ b/frontend/src/components/desktop/mobile/BottomBar.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/desktop/mobile/Mobile.vue b/frontend/src/components/desktop/mobile/Mobile.vue
new file mode 100644
index 0000000..e037ff1
--- /dev/null
+++ b/frontend/src/components/desktop/mobile/Mobile.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/desktop/mobile/MobileApp.vue b/frontend/src/components/desktop/mobile/MobileApp.vue
new file mode 100644
index 0000000..186a941
--- /dev/null
+++ b/frontend/src/components/desktop/mobile/MobileApp.vue
@@ -0,0 +1,43 @@
+
+
+
+ {{ getName(item) }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/desktop/mobile/util.scss b/frontend/src/components/desktop/mobile/util.scss
new file mode 100644
index 0000000..3b1c62f
--- /dev/null
+++ b/frontend/src/components/desktop/mobile/util.scss
@@ -0,0 +1,16 @@
+@use "sass:math";
+
+// 默认设计稿的宽度
+$designWidth: 375;
+// 默认设计稿的高度
+$designHeight: 667;
+
+// px 转为 vw 的函数
+@function vw($px) {
+ @return math.div($px, $designWidth) * 100vw;
+}
+
+// px 转为 vh 的函数
+@function vh($px) {
+ @return math.div($px, $designHeight) * 100vh;
+}
\ No newline at end of file
diff --git a/frontend/src/util/device.ts b/frontend/src/util/device.ts
new file mode 100644
index 0000000..8606a3e
--- /dev/null
+++ b/frontend/src/util/device.ts
@@ -0,0 +1,10 @@
+export const isMobileDevice=() =>{
+ const userAgent = navigator.userAgent.toLowerCase();
+ const mobileKeywords = ['iphone', 'android', 'mobile', 'blackberry', 'iemobile', 'opera mini'];
+ for (const keyword of mobileKeywords) {
+ if (userAgent.includes(keyword)) {
+ return true;
+ }
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
index 53ba47a..5116be2 100644
--- a/frontend/vite.config.ts
+++ b/frontend/vite.config.ts
@@ -21,7 +21,13 @@ export default defineConfig(async () => ({
resolvers: [ElementPlusResolver()],
}),
],
-
+ css: {
+ preprocessorOptions: {
+ scss: {
+ additionalData: `@import "./src/components/desktop/mobile/util.scss";`
+ }
+ }
+ },
clearScreen: false,
server: {
host: '0.0.0.0',