From e39b9caced833bde34c3527ca5eb7c9c39619c75 Mon Sep 17 00:00:00 2001
From: qq1244 <1244154570@qq.com>
Date: Mon, 23 Jun 2025 01:38:12 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E6=96=B0=E5=A2=9E=E4=BA=86=E8=81=8A?=
=?UTF-8?q?=E5=A4=A9=E6=B6=88=E6=81=AF=E5=8A=A0=E8=BD=BD=E5=92=8C=E5=8F=91?=
=?UTF-8?q?=E9=80=81=E6=97=B6=E7=9A=84=E5=8A=A0=E8=BD=BD=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E4=B8=8E=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E3=80=82=20-=20=E4=BC=98=E5=8C=96=E4=BA=86=E6=B6=88=E6=81=AF?=
=?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=92=8C=E7=94=A8=E6=88=B7=E7=95=8C=E9=9D=A2?=
=?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
index.html | 13 +-
package-lock.json | 137 +++++++++-
package.json | 6 +-
src/components/ChatPanel.vue | 268 ++++++++++++++++++-
src/components/Header.vue | 6 +
src/router/auth.ts | 14 +-
src/router/guards.ts | 2 +-
src/router/index.ts | 9 +
src/views/chat.vue | 487 +++++++++++++++++++++++++++++++++++
src/views/user/Header.vue | 136 ++++++++--
10 files changed, 1036 insertions(+), 42 deletions(-)
create mode 100644 src/views/chat.vue
diff --git a/index.html b/index.html
index 9e5fc8f..efbdecb 100644
--- a/index.html
+++ b/index.html
@@ -1,10 +1,15 @@
-
+
-
-
-
+
+
+
Vite App
+
diff --git a/package-lock.json b/package-lock.json
index d170909..bc60b2c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,12 +9,14 @@
"version": "0.0.0",
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
+ "@stomp/stompjs": "^7.0.0",
"@vuemap/vue-amap": "^2.1.15",
"amap": "^1.0.7",
"axios": "^1.10.0",
"echarts": "^5.6.0",
"element-plus": "^2.10.2",
"pinia": "^3.0.1",
+ "sockjs-client": "^1.6.1",
"vue": "^3.5.13",
"vue-amap": "^0.5.10",
"vue-router": "^4.5.0"
@@ -22,6 +24,7 @@
"devDependencies": {
"@tsconfig/node22": "^22.0.1",
"@types/node": "^22.14.0",
+ "@types/sockjs-client": "^1.5.4",
"@vitejs/plugin-vue": "^5.2.3",
"@vue/tsconfig": "^0.7.0",
"npm-run-all2": "^7.0.2",
@@ -1402,6 +1405,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@stomp/stompjs": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@stomp/stompjs/-/stompjs-7.1.1.tgz",
+ "integrity": "sha512-chcDs6YkAnKp1FqzwhGvh3i7v0+/ytzqWdKYw6XzINEKAzke/iD00dNgFPWSZEqktHOK+C1gSzXhLkLbARIaZw==",
+ "license": "Apache-2.0"
+ },
"node_modules/@tsconfig/node22": {
"version": "22.0.2",
"resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.2.tgz",
@@ -1476,6 +1485,13 @@
"undici-types": "~6.21.0"
}
},
+ "node_modules/@types/sockjs-client": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/sockjs-client/-/sockjs-client-1.5.4.tgz",
+ "integrity": "sha512-zk+uFZeWyvJ5ZFkLIwoGA/DfJ+pYzcZ8eH4H/EILCm2OBZyHH6Hkdna1/UWL/CFruh5wj6ES7g75SvUB0VsH5w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@@ -2598,6 +2614,15 @@
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
},
+ "node_modules/eventsource": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
+ "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/execa": {
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz",
@@ -2639,6 +2664,18 @@
"exorcist": "bin/exorcist.js"
}
},
+ "node_modules/faye-websocket": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
+ "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "websocket-driver": ">=0.5.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/fdir": {
"version": "6.4.6",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
@@ -3023,6 +3060,12 @@
"integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
"license": "MIT"
},
+ "node_modules/http-parser-js": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz",
+ "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
+ "license": "MIT"
+ },
"node_modules/human-signals": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
@@ -3411,7 +3454,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/muggle-string": {
@@ -3736,6 +3778,12 @@
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "license": "MIT"
+ },
"node_modules/read-package-json-fast": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz",
@@ -3756,6 +3804,12 @@
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"license": "MIT"
},
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "license": "MIT"
+ },
"node_modules/rfdc": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
@@ -3844,6 +3898,26 @@
"tslib": "^2.1.0"
}
},
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/sass-embedded": {
"version": "1.89.2",
"resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.2.tgz",
@@ -4231,6 +4305,34 @@
"node": ">=18"
}
},
+ "node_modules/sockjs-client": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz",
+ "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "eventsource": "^2.0.2",
+ "faye-websocket": "^0.11.4",
+ "inherits": "^2.0.4",
+ "url-parse": "^1.5.10"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://tidelift.com/funding/github/npm/sockjs-client"
+ }
+ },
+ "node_modules/sockjs-client/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -4456,6 +4558,16 @@
"camelcase": "^1.2.1"
}
},
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
"node_modules/varint": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
@@ -4706,6 +4818,29 @@
"typescript": ">=5.0.0"
}
},
+ "node_modules/websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/which": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
diff --git a/package.json b/package.json
index db8e805..e954fa2 100644
--- a/package.json
+++ b/package.json
@@ -21,11 +21,15 @@
"pinia": "^3.0.1",
"vue": "^3.5.13",
"vue-amap": "^0.5.10",
- "vue-router": "^4.5.0"
+ "vue-router": "^4.5.0",
+
+ "sockjs-client": "^1.6.1",
+ "@stomp/stompjs": "^7.0.0"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.1",
"@types/node": "^22.14.0",
+ "@types/sockjs-client": "^1.5.4",
"@vitejs/plugin-vue": "^5.2.3",
"@vue/tsconfig": "^0.7.0",
"npm-run-all2": "^7.0.2",
diff --git a/src/components/ChatPanel.vue b/src/components/ChatPanel.vue
index e1df6bc..b2f8ffd 100644
--- a/src/components/ChatPanel.vue
+++ b/src/components/ChatPanel.vue
@@ -1,7 +1,269 @@
- 聊天框组件
+
+
+
+
+
+
+
+
+
+ {{ row.lastMessageContent }}
+ 暂无消息
+
+
+
+
+
+
+ -
+
+
+
+
+
+ {{ formatTime(row.lastMessageTime) }}
+
+
+
+
+
+
+ 进入聊天
+
+
+ 复制链接
+
+
+
+
+
+
-
+
+
+
diff --git a/src/components/Header.vue b/src/components/Header.vue
index 66f16e2..4b61b0a 100644
--- a/src/components/Header.vue
+++ b/src/components/Header.vue
@@ -5,6 +5,7 @@ import { useAuthStore } from '@/stores/auth'
import axios from 'axios'
import { ArrowDown, Bell } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
+import { ChatDotRound } from '@element-plus/icons-vue'
// 配置axios基础URL
axios.defaults.baseURL = 'http://localhost:8080'
@@ -165,6 +166,7 @@ onMounted(() => {
+
{{ user.name }}
@@ -175,9 +177,13 @@ onMounted(() => {
|
+
+
+
+
diff --git a/src/views/user/Header.vue b/src/views/user/Header.vue
index f801cd9..9e512cf 100644
--- a/src/views/user/Header.vue
+++ b/src/views/user/Header.vue
@@ -24,7 +24,22 @@
- {{ selectedStoreName || '未选择门店' }}
+
+
+
+
地址:{{ branchDetails.branchAddress }}
+
电话:{{ branchDetails.branchPhone }}
+
营业时间:{{ branchDetails.branchStart }} - {{ branchDetails.branchEnd }}
+
状态:{{ branchDetails.branchStatus === 'open' ? '营业中' : '已关闭' }}
+
+
+ {{ selectedStoreName || '未选择门店' }}
+
+ {{ selectedStoreName || '未选择门店' }}
+
@@ -63,15 +78,9 @@
-
-
-
-
-
+
+
+
@@ -87,42 +96,118 @@