diff --git a/package-lock.json b/package-lock.json index 7b7b463..dddcc45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "0.0.0", "hasInstallScript": true, "dependencies": { - "@microsoft/fetch-event-source": "^2.0.1", "axios": "^1.3.6", "gsap": "^3.13.0", + "markdown-it": "^14.1.0", "normalize.css": "^8.0.1", "pinia": "^2.0.32", "pinia-persistedstate-plugin": "^0.1.0", @@ -582,12 +582,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==", - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1481,8 +1475,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", @@ -4491,6 +4484,15 @@ "node": ">=10" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lint-staged": { "version": "13.2.1", "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.2.1.tgz", @@ -4857,6 +4859,35 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4872,6 +4903,12 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz", @@ -6024,6 +6061,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/quansync": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", @@ -7707,6 +7753,12 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, "node_modules/ufo": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", @@ -8834,11 +8886,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9518,8 +9565,7 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { "version": "4.0.0", @@ -11762,6 +11808,14 @@ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "requires": { + "uc.micro": "^2.0.0" + } + }, "lint-staged": { "version": "13.2.1", "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.2.1.tgz", @@ -12047,6 +12101,26 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + } + } + }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -12059,6 +12133,11 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmmirror.com/memorystream/-/memorystream-0.3.1.tgz", @@ -12918,6 +12997,11 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" + }, "quansync": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", @@ -14218,6 +14302,11 @@ "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "devOptional": true }, + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "ufo": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", diff --git a/package.json b/package.json index c043098..727e0cf 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,9 @@ "postinstall": "husky install" }, "dependencies": { - "@microsoft/fetch-event-source": "^2.0.1", "axios": "^1.3.6", "gsap": "^3.13.0", + "markdown-it": "^14.1.0", "normalize.css": "^8.0.1", "pinia": "^2.0.32", "pinia-persistedstate-plugin": "^0.1.0", diff --git a/src/api/workshop.ts b/src/api/workshop.ts index da13a5d..291f48c 100644 --- a/src/api/workshop.ts +++ b/src/api/workshop.ts @@ -130,6 +130,7 @@ export function getTryOnEffectStyleList(styleId: string | number) { } +// 选择顾客 interface CustomerInfo { name: string email: string @@ -140,4 +141,12 @@ export const customerCheckin = (data: CustomerInfo) => { method: 'get', params: data, }) -} \ No newline at end of file +} + +// AI对话 +interface AIConversation { + message: string + sessionId: string | number //用户ID + gender: 'male' | 'female' //性别 +} +export const streamChatAddress = '/api/llm/streamChat' \ No newline at end of file diff --git a/src/assets/icons/mute.svg b/src/assets/icons/mute.svg new file mode 100644 index 0000000..99542b8 --- /dev/null +++ b/src/assets/icons/mute.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/vol.svg b/src/assets/icons/vol.svg new file mode 100644 index 0000000..c55c65e --- /dev/null +++ b/src/assets/icons/vol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/asistant.png b/src/assets/images/asistant.png new file mode 100644 index 0000000..2184200 Binary files /dev/null and b/src/assets/images/asistant.png differ diff --git a/src/assets/media/example.mp4 b/src/assets/media/example.mp4 index 4eb745e..5709389 100644 Binary files a/src/assets/media/example.mp4 and b/src/assets/media/example.mp4 differ diff --git a/src/stores/modules/userInfo.ts b/src/stores/modules/userInfo.ts index d642325..42379f4 100644 --- a/src/stores/modules/userInfo.ts +++ b/src/stores/modules/userInfo.ts @@ -6,10 +6,9 @@ import { removeLocal, setLocal } from '@/utils/local' export const useUserInfoStore = defineStore('userInfo', () => { const state = ref({ userInfo: {}, - customerId: '', token: '', generateParams: { - stylistId: '', + stylist: '', sex: '' } }) @@ -22,10 +21,6 @@ export const useUserInfoStore = defineStore('userInfo', () => { state.value.userInfo = data } - const setCustomerId = (data: string) => { - state.value.customerId = data - } - const setToken = (data: string) => { state.value.token = data setLocal(data, 'token') @@ -40,9 +35,8 @@ export const useUserInfoStore = defineStore('userInfo', () => { } const resetGenerateParams = () => { - state.value.customerId = '' state.value.generateParams = { - stylistId: '', + stylist: '', sex: '' } } @@ -52,7 +46,6 @@ export const useUserInfoStore = defineStore('userInfo', () => { return new Promise((resolve) => { state.value.token = '' state.value.userInfo = {} - state.value.customerId = '' removeLocal('token') resetGenerateParams() resolve('') @@ -64,7 +57,6 @@ export const useUserInfoStore = defineStore('userInfo', () => { getUserInfo, setToken, setUserInfo, - setCustomerId, setGenerateParams, getGenerateParams, resetGenerateParams, diff --git a/src/utils/request.ts b/src/utils/request.ts index 3f00765..8b25c6f 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -67,6 +67,11 @@ service.interceptors.response.use( * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中 */ (response: any) => { + // 如果是llm/streamChat这样的流式接口,不走这样的处理 + if (response.config.url.includes('llm/streamChat')) { + return response + } + // 已完成请求的删除请求中数组 removePending(response.config) // 关闭loading @@ -81,8 +86,8 @@ service.interceptors.response.use( message: res.errMsg || res.message, // type: 'fail', duration: 5000, - position:'top', - icon:'none' + position: 'top', + icon: 'none' }) return Promise.reject(new Error('error')) diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 3251273..0f81fc0 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -42,6 +42,24 @@ const getMousePosition = (e: any, bor: any) => { } return event } +/** + * 生成UUID v4 + * @returns 返回一个标准的UUID v4字符串,格式:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx + */ +export function generateUUID(): string { + // 优先使用现代浏览器的crypto.randomUUID()方法 + if (typeof crypto !== 'undefined' && crypto.randomUUID) { + return crypto.randomUUID() + } + + // 备用方案:手动生成UUID v4 + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = Math.random() * 16 | 0 + const v = c === 'x' ? r : (r & 0x3 | 0x8) + return v.toString(16) + }) +} + export { getUniversalZoomLevel, getMousePosition, diff --git a/src/views/asistant/components/NoticeItem.vue b/src/views/asistant/components/NoticeItem.vue index 31fb18a..9a033cc 100644 --- a/src/views/asistant/components/NoticeItem.vue +++ b/src/views/asistant/components/NoticeItem.vue @@ -1,17 +1,15 @@ - + - + - - {{ value.content }} + + + | - + @@ -142,13 +142,15 @@ defineExpose({