| | |
| | | "name": "weiwojunchen", |
| | | "version": "0.1.0", |
| | | "dependencies": { |
| | | "@headlessui/react": "^2.2.1", |
| | | "@types/styled-components": "^5.1.34", |
| | | "axios": "^1.8.4", |
| | | "framer-motion": "^12.6.0", |
| | |
| | | }, |
| | | "engines": { |
| | | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" |
| | | } |
| | | }, |
| | | "node_modules/@floating-ui/core": { |
| | | "version": "1.6.9", |
| | | "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", |
| | | "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@floating-ui/utils": "^0.2.9" |
| | | } |
| | | }, |
| | | "node_modules/@floating-ui/dom": { |
| | | "version": "1.6.13", |
| | | "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", |
| | | "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@floating-ui/core": "^1.6.0", |
| | | "@floating-ui/utils": "^0.2.9" |
| | | } |
| | | }, |
| | | "node_modules/@floating-ui/react": { |
| | | "version": "0.26.28", |
| | | "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", |
| | | "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@floating-ui/react-dom": "^2.1.2", |
| | | "@floating-ui/utils": "^0.2.8", |
| | | "tabbable": "^6.0.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": ">=16.8.0", |
| | | "react-dom": ">=16.8.0" |
| | | } |
| | | }, |
| | | "node_modules/@floating-ui/react-dom": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", |
| | | "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@floating-ui/dom": "^1.0.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": ">=16.8.0", |
| | | "react-dom": ">=16.8.0" |
| | | } |
| | | }, |
| | | "node_modules/@floating-ui/utils": { |
| | | "version": "0.2.9", |
| | | "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", |
| | | "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/@headlessui/react": { |
| | | "version": "2.2.1", |
| | | "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.1.tgz", |
| | | "integrity": "sha512-daiUqVLae8CKVjEVT19P/izW0aGK0GNhMSAeMlrDebKmoVZHcRRwbxzgtnEadUVDXyBsWo9/UH4KHeniO+0tMg==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@floating-ui/react": "^0.26.16", |
| | | "@react-aria/focus": "^3.17.1", |
| | | "@react-aria/interactions": "^3.21.3", |
| | | "@tanstack/react-virtual": "^3.11.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^18 || ^19 || ^19.0.0-rc", |
| | | "react-dom": "^18 || ^19 || ^19.0.0-rc" |
| | | } |
| | | }, |
| | | "node_modules/@humanfs/core": { |
| | |
| | | "node": ">=12.4.0" |
| | | } |
| | | }, |
| | | "node_modules/@react-aria/focus": { |
| | | "version": "3.20.1", |
| | | "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.1.tgz", |
| | | "integrity": "sha512-lgYs+sQ1TtBrAXnAdRBQrBo0/7o5H6IrfDxec1j+VRpcXL0xyk0xPq+m3lZp8typzIghqDgpnKkJ5Jf4OrzPIw==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@react-aria/interactions": "^3.24.1", |
| | | "@react-aria/utils": "^3.28.1", |
| | | "@react-types/shared": "^3.28.0", |
| | | "@swc/helpers": "^0.5.0", |
| | | "clsx": "^2.0.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", |
| | | "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@react-aria/interactions": { |
| | | "version": "3.24.1", |
| | | "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.24.1.tgz", |
| | | "integrity": "sha512-OWEcIC6UQfWq4Td5Ptuh4PZQ4LHLJr/JL2jGYvuNL6EgL3bWvzPrRYIF/R64YbfVxIC7FeZpPSkS07sZ93/NoA==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@react-aria/ssr": "^3.9.7", |
| | | "@react-aria/utils": "^3.28.1", |
| | | "@react-stately/flags": "^3.1.0", |
| | | "@react-types/shared": "^3.28.0", |
| | | "@swc/helpers": "^0.5.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", |
| | | "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@react-aria/ssr": { |
| | | "version": "3.9.7", |
| | | "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz", |
| | | "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@swc/helpers": "^0.5.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 12" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@react-aria/utils": { |
| | | "version": "3.28.1", |
| | | "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.28.1.tgz", |
| | | "integrity": "sha512-mnHFF4YOVu9BRFQ1SZSKfPhg3z+lBRYoW5mLcYTQihbKhz48+I1sqRkP7ahMITr8ANH3nb34YaMME4XWmK2Mgg==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@react-aria/ssr": "^3.9.7", |
| | | "@react-stately/flags": "^3.1.0", |
| | | "@react-stately/utils": "^3.10.5", |
| | | "@react-types/shared": "^3.28.0", |
| | | "@swc/helpers": "^0.5.0", |
| | | "clsx": "^2.0.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", |
| | | "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@react-stately/flags": { |
| | | "version": "3.1.0", |
| | | "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.0.tgz", |
| | | "integrity": "sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@swc/helpers": "^0.5.0" |
| | | } |
| | | }, |
| | | "node_modules/@react-stately/utils": { |
| | | "version": "3.10.5", |
| | | "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz", |
| | | "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==", |
| | | "license": "Apache-2.0", |
| | | "dependencies": { |
| | | "@swc/helpers": "^0.5.0" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@react-types/shared": { |
| | | "version": "3.28.0", |
| | | "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.28.0.tgz", |
| | | "integrity": "sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==", |
| | | "license": "Apache-2.0", |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" |
| | | } |
| | | }, |
| | | "node_modules/@rtsao/scc": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", |
| | |
| | | "lightningcss": "1.29.2", |
| | | "postcss": "^8.4.41", |
| | | "tailwindcss": "4.0.16" |
| | | } |
| | | }, |
| | | "node_modules/@tanstack/react-virtual": { |
| | | "version": "3.13.6", |
| | | "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.6.tgz", |
| | | "integrity": "sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==", |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "@tanstack/virtual-core": "3.13.6" |
| | | }, |
| | | "funding": { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/tannerlinsley" |
| | | }, |
| | | "peerDependencies": { |
| | | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", |
| | | "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@tanstack/virtual-core": { |
| | | "version": "3.13.6", |
| | | "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.6.tgz", |
| | | "integrity": "sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==", |
| | | "license": "MIT", |
| | | "funding": { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/tannerlinsley" |
| | | } |
| | | }, |
| | | "node_modules/@tybys/wasm-util": { |
| | |
| | | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", |
| | | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/clsx": { |
| | | "version": "2.1.1", |
| | | "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", |
| | | "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/color": { |
| | | "version": "4.2.3", |
| | |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/tabbable": { |
| | | "version": "6.2.0", |
| | | "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", |
| | | "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/tailwindcss": { |
| | | "version": "4.0.16", |
| | | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.16.tgz", |
| | |
| | | "lint": "next lint" |
| | | }, |
| | | "dependencies": { |
| | | "@headlessui/react": "^2.2.1", |
| | | "@types/styled-components": "^5.1.34", |
| | | "axios": "^1.8.4", |
| | | "framer-motion": "^12.6.0", |
| | |
| | | import { useState } from 'react'; |
| | | import Card from '@/components/Card'; |
| | | import ChatDialog from '@/components/ChatDialog'; |
| | | import SceneIntroDialog from '@/components/SceneIntroDialog'; |
| | | import Navbar from '@/components/layout/Navbar'; |
| | | |
| | | const services = [ |
| | |
| | | title: 'è¡¥æ', |
| | | description: 'æºè½å¨æåæäº§çº¿ï¼å·¥ä½ç缺ææ
åµï¼éä½å线é£é©', |
| | | imageUrl: '/images/kanban.jpg', |
| | | chatbotId: 'JELkWpPLHQfRNhEH' |
| | | chatbotId: 'JELkWpPLHQfRNhEH', |
| | | background: 'å¨ç产线è¿è¡è¿ç¨ä¸ï¼åæ¶åç°å¹¶è§£å³ç¼ºæé®é¢æ¯ä¿è¯ç产æççå
³é®ãAIç³»ç»éè¿å®æ¶çæ§ååæï¼å¸®å©æ¨æåé¢è¦å¯è½ç缺æé£é©ï¼ä¼åè¡¥æè®¡åã', |
| | | instructions: 'æ¨å¯ä»¥æè¿°å
·ä½çç产线æ
åµå缺æé®é¢ï¼AI婿å°åºäºå岿°æ®å宿¶ç¶æï¼ä¸ºæ¨æä¾æä¼çè¡¥ææ¹æ¡å建议ã' |
| | | }, |
| | | { |
| | | title: 'æå', |
| | | description: 'æºè½è¯ä¼°éæ±æå对产è½ï¼åææåäº¤ä»æå¡çå½±åï¼æåå®¢æ·æ»¡æåº¦', |
| | | imageUrl: '/images/xuqiu.jpg', |
| | | chatbotId: 'DfH4cIzujVGvn5iR' |
| | | chatbotId: 'DfH4cIzujVGvn5iR', |
| | | background: 'å¨çäº§è®¡åæ§è¡è¿ç¨ä¸ï¼å¸¸å¸¸ä¼éå°ç´§æ¥è®¢åéè¦æåçæ
åµãAIç³»ç»å¯ä»¥å¿«éè¯ä¼°æåå¯¹ç°æç产计åçå½±åï¼å¹¶æä¾æä¼çæåæ¹æ¡ã', |
| | | instructions: '请æä¾éè¦æåç订åä¿¡æ¯ï¼å
æ¬äº§åç±»åãæ°éåææäº¤ä»æ¶é´ï¼AI婿å°ä¸ºæ¨åæå¯è¡æ§å¹¶ç»åºå
·ä½çæå建议ã' |
| | | }, |
| | | { |
| | | title: 'ç§æ²æ¯é宿¨èå°å©æ', |
| | | description: 'æºè½åäº§åæ¨èæåå¯¼è´æç', |
| | | imageUrl: '/images/robot.jpg', |
| | | chatbotId: 'sUAviPXvcEIw3oQC' |
| | | chatbotId: 'sUAviPXvcEIw3oQC', |
| | | background: 'é¢å¯¹ä¸å客æ·ç个æ§åéæ±ï¼å¦ä½åç¡®æ¨èåéçäº§åæ¯æåé宿ççå
³é®ãAI婿åºäºæ·±åº¦å¦ä¹ ç®æ³ï¼è½å¤ç²¾ååæå®¢æ·éæ±ï¼æä¾ä¸ªæ§åçäº§åæ¨èã', |
| | | instructions: 'æ¨å¯ä»¥æè¿°å®¢æ·çå
·ä½éæ±åå好ï¼AI婿尿 ¹æ®è¿äºä¿¡æ¯ï¼ä¸ºæ¨æ¨èæéåçç§æ²æ¯äº§åï¼å¹¶æä¾ä¸ä¸ç产åä»ç»åéå®å»ºè®®ã' |
| | | }, |
| | | { |
| | | title: 'åºå管çç¥è¯åºé®ç', |
| | | description: 'åºåç¥è¯ï¼æä¾ä¸ä¸çä¾åºé¾åºåç¥è¯é®ç', |
| | | imageUrl: '/images/know.jpg', |
| | | chatbotId: 'pDDfkU9HyBl2gzXx' |
| | | chatbotId: 'pDDfkU9HyBl2gzXx', |
| | | background: '髿çåºå管çéè¦ä¸°å¯çä¸ä¸ç¥è¯åç»éªãAIç¥è¯åºæ´åäºå¤§éä¾åºé¾ååºå管ççä¸ä¸ç¥è¯ï¼å¯ä»¥å¿«éè§£çåç±»åºå管çé®é¢ã', |
| | | instructions: 'æ¨å¯ä»¥è¯¢é®ä»»ä½ä¸åºå管çç¸å
³çé®é¢ï¼å
æ¬åºåçç¥ãææ¬æ§å¶ãå¨è½¬çä¼åçï¼AI婿å°ä¸ºæ¨æä¾ä¸ä¸çè§£çå建议ã' |
| | | }, |
| | | ]; |
| | | |
| | | export default function AIScenePage() { |
| | | const [isChatOpen, setIsChatOpen] = useState(false); |
| | | const [isIntroOpen, setIsIntroOpen] = useState(false); |
| | | const [currentChatbot, setCurrentChatbot] = useState(''); |
| | | const [selectedScene, setSelectedScene] = useState(services[0]); |
| | | |
| | | const handleCardClick = (title: string, chatbotId?: string) => { |
| | | if (chatbotId) { |
| | | setCurrentChatbot(chatbotId); |
| | | setIsChatOpen(true); |
| | | } |
| | | const handleCardClick = (service: typeof services[0]) => { |
| | | setSelectedScene(service); |
| | | setIsIntroOpen(true); |
| | | }; |
| | | |
| | | const handleStartChat = () => { |
| | | setIsIntroOpen(false); |
| | | setCurrentChatbot(selectedScene.chatbotId); |
| | | setIsChatOpen(true); |
| | | }; |
| | | |
| | | return ( |
| | |
| | | <Card |
| | | key={index} |
| | | {...service} |
| | | onClick={() => handleCardClick(service.title, service.chatbotId)} |
| | | onClick={() => handleCardClick(service)} |
| | | /> |
| | | ))} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <SceneIntroDialog |
| | | isOpen={isIntroOpen} |
| | | onClose={() => setIsIntroOpen(false)} |
| | | onStartChat={handleStartChat} |
| | | scene={selectedScene} |
| | | /> |
| | | |
| | | <ChatDialog |
| | | isOpen={isChatOpen} |
| | | onClose={() => setIsChatOpen(false)} |
¶Ô±ÈÐÂÎļþ |
| | |
| | | "use client"; |
| | | |
| | | import { Dialog, Transition } from '@headlessui/react'; |
| | | import { Fragment } from 'react'; |
| | | |
| | | interface SceneIntroDialogProps { |
| | | isOpen: boolean; |
| | | onClose: () => void; |
| | | onStartChat: () => void; |
| | | scene: { |
| | | title: string; |
| | | description: string; |
| | | imageUrl: string; |
| | | background?: string; |
| | | instructions?: string; |
| | | }; |
| | | } |
| | | |
| | | export default function SceneIntroDialog({ |
| | | isOpen, |
| | | onClose, |
| | | onStartChat, |
| | | scene |
| | | }: SceneIntroDialogProps) { |
| | | return ( |
| | | <Transition appear show={isOpen} as={Fragment}> |
| | | <Dialog as="div" className="relative z-50" onClose={onClose}> |
| | | <Transition.Child |
| | | as={Fragment} |
| | | enter="ease-out duration-300" |
| | | enterFrom="opacity-0" |
| | | enterTo="opacity-100" |
| | | leave="ease-out duration-200" |
| | | leaveFrom="opacity-100" |
| | | leaveTo="opacity-0" |
| | | > |
| | | <div className="fixed inset-0 bg-black/70" /> |
| | | </Transition.Child> |
| | | |
| | | <div className="fixed inset-0 overflow-y-auto"> |
| | | <div className="flex min-h-full items-center justify-center p-4"> |
| | | <Transition.Child |
| | | as={Fragment} |
| | | enter="ease-out duration-300" |
| | | enterFrom="opacity-0 scale-95" |
| | | enterTo="opacity-100 scale-100" |
| | | leave="ease-out duration-200" |
| | | leaveFrom="opacity-100 scale-100" |
| | | leaveTo="opacity-0 scale-95" |
| | | > |
| | | <Dialog.Panel className="w-full max-w-2xl transform overflow-hidden rounded-2xl bg-gradient-to-br from-[#1E2B63] to-[#0A1033] p-6 shadow-xl transition-all"> |
| | | {/* ç§ææèæ¯ææ */} |
| | | <div className="absolute inset-0 overflow-hidden pointer-events-none"> |
| | | <div className="absolute inset-0 opacity-10" |
| | | style={{ |
| | | backgroundImage: 'radial-gradient(circle, rgba(106, 219, 255, 0.3) 1px, transparent 1px)', |
| | | backgroundSize: '20px 20px' |
| | | }}> |
| | | </div> |
| | | <div className="absolute top-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/40 to-transparent"></div> |
| | | <div className="absolute bottom-0 left-0 right-0 h-[1px] bg-gradient-to-r from-transparent via-[#6ADBFF]/40 to-transparent"></div> |
| | | </div> |
| | | |
| | | <div className="relative"> |
| | | {/* æ é¢ */} |
| | | <Dialog.Title className="text-2xl font-bold text-white mb-4"> |
| | | <span className="text-transparent bg-clip-text bg-gradient-to-r from-[#6ADBFF] to-[#5E72EB]"> |
| | | {scene.title} |
| | | </span> |
| | | </Dialog.Title> |
| | | |
| | | {/* åºæ¯å¾ç */} |
| | | <div className="relative h-48 mb-6 rounded-lg overflow-hidden"> |
| | | <img |
| | | src={scene.imageUrl} |
| | | alt={scene.title} |
| | | className="w-full h-full object-cover" |
| | | /> |
| | | <div className="absolute inset-0 bg-gradient-to-t from-[#0A1033]/80 to-transparent"></div> |
| | | </div> |
| | | |
| | | {/* åºæ¯èæ¯ */} |
| | | <div className="mb-6"> |
| | | <h3 className="text-lg font-semibold text-[#6ADBFF] mb-2">åºæ¯èæ¯</h3> |
| | | <p className="text-gray-300 leading-relaxed"> |
| | | {scene.background || scene.description} |
| | | </p> |
| | | </div> |
| | | |
| | | {/* 使ç¨è¯´æ */} |
| | | <div className="mb-8"> |
| | | <h3 className="text-lg font-semibold text-[#6ADBFF] mb-2">使ç¨è¯´æ</h3> |
| | | <p className="text-gray-300 leading-relaxed"> |
| | | {scene.instructions || 'éè¿èªç¶è¯è¨å¯¹è¯çæ¹å¼ï¼æè¿°æ¨çå
·ä½éæ±ï¼AI婿å°ä¸ºæ¨æä¾ä¸ä¸çè§£å³æ¹æ¡ã'} |
| | | </p> |
| | | </div> |
| | | |
| | | {/* æé®ç» */} |
| | | <div className="flex justify-end gap-4"> |
| | | <button |
| | | onClick={onClose} |
| | | className="px-4 py-2 text-sm font-medium text-gray-300 hover:text-white transition-colors" |
| | | > |
| | | å
³é |
| | | </button> |
| | | <button |
| | | onClick={onStartChat} |
| | | className="relative px-6 py-2 rounded-lg overflow-hidden group backdrop-blur-sm bg-white/5 border border-[#6ADBFF]/30 hover:border-[#6ADBFF]/50 transition-all duration-300" |
| | | > |
| | | <div className="absolute inset-0 bg-gradient-to-r from-[#6ADBFF]/5 to-[#5E72EB]/5 group-hover:from-[#6ADBFF]/10 group-hover:to-[#5E72EB]/10 transition-all duration-300"></div> |
| | | <span className="relative text-white group-hover:text-[#6ADBFF] transition-colors duration-300"> |
| | | å¼å§ä½¿ç¨ |
| | | </span> |
| | | </button> |
| | | </div> |
| | | </div> |
| | | </Dialog.Panel> |
| | | </Transition.Child> |
| | | </div> |
| | | </div> |
| | | </Dialog> |
| | | </Transition> |
| | | ); |
| | | } |