| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803 | <!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>AI室内设计智能出图系统</title>    <link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index.css" rel="stylesheet">    <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">    <style>        * {            margin: 0;            padding: 0;            box-sizing: border-box;        }        body {            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);            min-height: 100vh;        }        .container {            display: flex;            height: 100vh;            max-width: 1400px;            margin: 0 auto;            padding: 20px;            gap: 20px;        }        .panel {            background: rgba(255, 255, 255, 0.95);            border-radius: 16px;            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);            backdrop-filter: blur(10px);            border: 1px solid rgba(255, 255, 255, 0.2);            overflow: hidden;            transition: all 0.3s ease;        }        .panel:hover {            transform: translateY(-2px);            box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);        }        .left-panel {            flex: 0 0 320px;            display: flex;            flex-direction: column;        }        .middle-panel {            flex: 0 0 350px;            display: flex;            flex-direction: column;        }        .right-panel {            flex: 1;            display: flex;            flex-direction: column;        }        .panel-header {            background: linear-gradient(45deg, #4CAF50, #45a049);            color: white;            padding: 20px;            text-align: center;            position: relative;            overflow: hidden;        }        .panel-header::before {            content: '';            position: absolute;            top: -50%;            left: -50%;            width: 200%;            height: 200%;            background: linear-gradient(45deg, transparent, rgba(255,255,255,0.1), transparent);            transform: rotate(45deg);            animation: shine 3s infinite;        }        @keyframes shine {            0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }            100% { transform: translateX(100%) translateY(100%) rotate(45deg); }        }        .panel-header h3 {            font-size: 18px;            font-weight: 600;            margin: 0;            position: relative;            z-index: 1;        }        .panel-header .subtitle {            font-size: 12px;            opacity: 0.9;            margin-top: 5px;            position: relative;            z-index: 1;        }        .panel-content {            flex: 1;            padding: 20px;            overflow-y: auto;        }        .requirement-section {            margin-bottom: 25px;        }        .section-title {            font-size: 16px;            font-weight: 600;            color: #333;            margin-bottom: 15px;            padding-bottom: 8px;            border-bottom: 2px solid #4CAF50;            position: relative;        }        .section-title::after {            content: '';            position: absolute;            bottom: -2px;            left: 0;            width: 30px;            height: 2px;            background: #2196F3;        }        .tag-group {            display: flex;            flex-wrap: wrap;            gap: 8px;            margin-bottom: 15px;        }        .requirement-tag {            padding: 8px 16px;            border-radius: 20px;            border: 2px solid #e0e0e0;            background: white;            cursor: pointer;            transition: all 0.3s ease;            font-size: 13px;            color: #666;            position: relative;            overflow: hidden;        }        .requirement-tag::before {            content: '';            position: absolute;            top: 0;            left: -100%;            width: 100%;            height: 100%;            background: linear-gradient(90deg, transparent, rgba(76,175,80,0.1), transparent);            transition: left 0.5s ease;        }        .requirement-tag:hover::before {            left: 100%;        }        .requirement-tag:hover {            transform: translateY(-2px);            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);        }        .requirement-tag.selected {            background: linear-gradient(45deg, #4CAF50, #45a049);            color: white;            border-color: #4CAF50;            transform: scale(1.05);        }        .indicator-item {            background: #f8f9fa;            border-radius: 12px;            padding: 15px;            margin-bottom: 15px;            border-left: 4px solid #4CAF50;            transition: all 0.3s ease;        }        .indicator-item:hover {            background: #e8f5e8;            transform: translateX(5px);        }        .indicator-title {            font-weight: 600;            color: #333;            margin-bottom: 8px;            font-size: 14px;        }        .indicator-value {            color: #666;            font-size: 13px;            line-height: 1.4;        }        .progress-bar {            width: 100%;            height: 6px;            background: #e0e0e0;            border-radius: 3px;            overflow: hidden;            margin-top: 8px;        }        .progress-fill {            height: 100%;            background: linear-gradient(45deg, #4CAF50, #2196F3);            border-radius: 3px;            transition: width 0.5s ease;        }        .solution-preview {            background: #f8f9fa;            border-radius: 12px;            padding: 20px;            margin-bottom: 20px;            text-align: center;            min-height: 200px;            display: flex;            flex-direction: column;            justify-content: center;            align-items: center;            border: 2px dashed #ddd;            transition: allall 0.3s ease;        }        .solution-preview.active {            border-color: #4CAF50;            background: linear-gradient(135deg, #e8f5e8, #f0f8f0);        }        .preview-icon {            font-size: 48px;            color: #ccc;            margin-bottom: 15px;            transition: all 0.3s ease;        }        .solution-preview.active .preview-icon {            color: #4CAF50;            animation: pulse 2s infinite;        }        @keyframes pulse {            0% { transform: scale(1); }            50% { transform: scale(1.1); }            100% { transform: scale(1); }        }        .preview-text {            color: #666;            font-size: 14px;        }        .solution-preview.active .preview-text {            color: #333;            font-weight: 500;        }        .solution-details {            background: white;            border-radius: 12px;            padding: 20px;            border: 1px solid #e0e0e0;            margin-bottom: 15px;        }        .detail-title {            font-weight: 600;            color: #333;            margin-bottom: 10px;            font-size: 15px;        }        .detail-content {            color: #666;            font-size: 13px;            line-height: 1.5;        }        .color-palette {            display: flex;            gap: 8px;            margin-top: 10px;        }        .color-item {            width: 30px;            height: 30px;            border-radius: 50%;            border: 2px solid white;            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);            transition: transform 0.3s ease;        }        .color-item:hover {            transform: scale(1.2);        }        .material-list {            display: flex;            flex-wrap: wrap;            gap: 8px;            margin-top: 10px;        }        .material-tag {            background: #e3f2fd;            color: #1976d2;            padding: 4px 8px;            border-radius: 12px;            font-size: 12px;            border: 1px solid #bbdefb;        }        .stats-grid {            display: grid;            grid-template-columns: 1fr 1fr;            gap: 15px;            margin-top: 20px;        }        .stat-item {            background: white;            padding: 15px;            border-radius: 8px;            text-align: center;            border: 1px solid #e0e0e0;        }        .stat-number {            font-size: 24px;            font-weight: bold;            color: #4CAF50;        }        .stat-label {            font-size: 12px;            color: #666;            margin-top: 5px;        }        .floating-button {            position: fixed;            bottom: 30px;            right: 30px;            width: 60px;            height: 60px;            background: linear-gradient(45deg, #4CAF50, #45a049);            border-radius: 50%;            display: flex;            align-items: center;            justify-content: center;            color: white;            font-size: 24px;            cursor: pointer;            box-shadow: 0 4px 20px rgba(76, 175, 80, 0.4);            transition: all 0.3s ease;            z-index: 1000;        }        .floating-button:hover {            transform: scale(1.1);            box-shadow: 0 6px 25px rgba(76, 175, 80, 0.6);        }        /* 滚动条样式 */        .panel-content::-webkit-scrollbar {            width: 6px;        }        .panel-content::-webkit-scrollbar-track {            background: #f1f1f1;            border-radius: 3px;        }        .panel-content::-webkit-scrollbar-thumb {            background: #4CAF50;            border-radius: 3px;        }        .panel-content::-webkit-scrollbar-thumb:hover {            background: #45a049;        }        /* 响应式设计 */        @media (max-width: 1200px) {            .container {                flex-direction: column;                height: auto;                min-height: 100vh;            }                        .left-panel, .middle-panel, .right-panel {                flex: none;                min-height: 400px;            }        }    </style></head><body>    <div class="container">        <!-- 左栏:抽象需求 -->        <div class="panel left-panel">            <div class="panel-header">                <h3><i class="fas fa-lightbulb"></i> 抽象需求输入</h3>                <div class="subtitle">业主需求 → 标准化提取</div>            </div>            <div class="panel-content">                <div class="requirement-section">                    <div class="section-title">氛围需求</div>                    <div class="tag-group">                        <div class="requirement-tag" data-category="atmosphere" data-value="温馨">温馨</div>                        <div class="requirement-tag" data-category="atmosphere" data-value="科技感">科技感</div>                        <div class="requirement-tag" data-category="atmosphere" data-value="活力">活力</div>                        <div class="requirement-tag" data-category="atmosphere" data-value="浪漫">浪漫</div>                        <div class="requirement-tag" data-category="atmosphere" data-value="极简">极简</div>                        <div class="requirement-tag" data-category="atmosphere" data-value="奢华">奢华</div>                    </div>                </div>                <div class="requirement-section">                    <div class="section-title">居住者类型</div>                    <div class="tag-group">                        <div class="requirement-tag" data-category="resident" data-value="单身女性">单身女性</div>                        <div class="requirement-tag" data-category="resident" data-value="单身男性">单身男性</div>                        <div class="requirement-tag" data-category="resident" data-value="年轻情侣">年轻情侣</div>                        <div class="requirement-tag" data-category="resident" data-value="亲子家庭">亲子家庭</div>                        <div class="requirement-tag" data-category="resident" data-value="三代同堂">三代同堂</div>                    </div>                </div>                <div class="requirement-section">                    <div class="section-title">场景偏好</div>                    <div class="tag-group">                        <div class="requirement-tag" data-category="scene" data-value="居家办公">居家办公</div>                        <div class="requirement-tag" data-category="scene" data-value="运动健身">运动健身</div>                        <div class="requirement-tag" data-category="scene" data-value="观影娱乐">观影娱乐</div>                        <div class="requirement-tag"data-category="scene" data-value="烹饪美食">烹饪美食</div>                        <div class="requirement-tag" data-category="scene" data-value="阅读学习">阅读学习</div>                        <div class="requirement-tag" data-category="scene" data-value="聚会社交">聚会社交</div>                        <div class="requirement-tag" data-category="scene" data-value="艺术创作">艺术创作</div>                    </div>                </div>                <div class="requirement-section">                    <div class="section-title">空间类型</div>                    <div class="tag-group">                        <div class="requirement-tag" data-category="space" data-value="客厅">客厅</div>                        <div class="requirement-tag" data-category="space" data-value="卧室">卧室</div>                        <div class="requirement-tag" data-category="space" data-value="厨房">厨房</div>                        <div class="requirement-tag" data-category="space" data-value="书房">书房</div>                        <div class="requirement-tag" data-category="space" data-value="儿童房">儿童房</div>                    </div>                </div>            </div>        </div>        <!-- 中栏:具体指标 -->        <div class="panel middle-panel">            <div class="panel-header">                <h3><i class="fas fa-cogs"></i> 指标量化分析</h3>                <div class="subtitle">需求 → 可执行指标</div>            </div>            <div class="panel-content">                <div id="indicators-container">                    <div class="indicator-item" style="opacity: 0.5;">                        <div class="indicator-title">请先选择左侧需求</div>                        <div class="indicator-value">系统将自动生成对应的量化指标</div>                    </div>                </div>            </div>        </div>        <!-- 右栏:具体方案 -->        <div class="panel right-panel">            <div class="panel-header">                <h3><i class="fas fa-magic"></i> 方案生成预览</h3>                <div class="subtitle">指标 → 可视化效果</div>            </div>            <div class="panel-content">                <div class="solution-preview" id="solution-preview">                    <div class="preview-icon">                        <i class="fas fa-image"></i>                    </div>                    <div class="preview-text">选择需求和指标后,这里将展示设计方案预览</div>                </div>                <div id="solution-details" style="display: none;">                    <div class="solution-details">                        <div class="detail-title">色彩方案</div>                        <div class="detail-content" id="color-scheme">                            <div class="color-palette" id="color-palette"></div>                        </div>                    </div>                    <div class="solution-details">                        <div class="detail-title">材质搭配</div>                        <div class="detail-content">                            <div class="material-list" id="material-list"></div>                        </div>                    </div>                    <div class="solution-details">                        <div class="detail-title">空间布局</div>                        <div class="detail-content" id="layout-description"></div>                    </div>                    <div class="solution-details">                        <div class="detail-title">灯光设计</div>                        <div class="detail-content" id="lighting-description"></div>                    </div>                </div>                <div class="stats-grid" id="stats-grid" style="display: none;">                    <div class="stat-item">                        <div class="stat-number" id="completion-rate">0%</div>                        <div class="stat-label">完成度</div>                    </div>                    <div class="stat-item">                        <div class="stat-number" id="match-score">0</div>                        <div class="stat-label">匹配度</div>                    </div>                    <div class="stat-item">                        <div class="stat-number" id="render-time">0分钟</div>                        <div class="stat-label">预计渲染时间</div>                    </div>                    <div class="stat-item">                        <div class="stat-number" id="cost-estimate">¥0</div>                        <div class="stat-label">预估成本</div>                    </div>                </div>            </div>        </div>    </div>    <div class="floating-button" onclick="generateFinalSolution()">        <i class="fas fa-play"></i>    </div>    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script>    <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/index.js"></script>    <script>        // 需求数据配置        const requirementData = {            atmosphere: {                '温馨': {                    color: { main: '暖色调(2700-3000K)', rgb: 'RGB(255,220,150)', accent: '暖木色点缀' },                    material: ['布艺60%', '木材30%', '金属10%'],                    lighting: '吊灯+氛围灯带(200-300lux)',                    layout: '圆润弧形家具,留白25-30%'                },                '科技感': {                    color: { main: '冷色调(5000-6000K)', rgb: 'RGB(150,200,250)', accent: '金属质感' },                    material: ['金属50%', '岩板30%', '玻璃20%'],                    lighting: '嵌入式无主灯(300-400lux)',                    layout: '直线条家具,留白35-40%'                },                '活力': {                    color: { main: '浅灰基调', rgb: 'RGB(240,240,240)', accent: '橙色点缀12-15%' },                    material: ['布艺40%', '金属30%', '木材30%'],                    lighting: '混合光源(250-350lux)',                    layout: '直线+局部弧形,动感布局'                },                '浪漫': {                    color: { main: '粉调暖色', rgb: 'RGB(255,240,245)', accent: '玫瑰金点缀' },                    material: ['布艺70%', '大理石20%', '金属10%'],                    lighting: '柔和漫射光(180-250lux)',                    layout: '弧形元素为主,层次丰富'                },                '极简': {                    color: { main: '纯白基调', rgb: 'RGB(255,255,255)', accent: '黑色线条' },                    material: ['岩板40%', '木材30%', '金属30%'],                    lighting: '隐藏式线性光(200-300lux)',                    layout: '几何线条,大面积留白40%+'                },                '奢华': {                    color: { main: '深色基调', rgb: 'RGB(30,30,40)', accent: '金色装饰' },                    material: ['大理石50%', '真皮30%', '金属20%'],                    lighting: '水晶吊灯+重点照明(400-500lux)',                    layout: '对称布局,精致细节'                }            }        };        // 选中的需求        let selectedRequirements = {            atmosphere: null,            resident: null,            scene: null,            space: null        };        // 初始化事件监听        document.addEventListener('DOMContentLoaded', function() {            const tags = document.querySelectorAll('.requirement-tag');            tags.forEach(tag => {                tag.addEventListener('click', function() {                    const category = this.dataset.category;                    const value = this.dataset.value;                                        // 取消同类别其他选中                    document.querySelectorAll(`[data-category="${category}"]`).forEach(t => {                        t.classList.remove('selected');                    });                                        // 选中当前标签                    this.classList.add('selected');                    selectedRequirements[category] = value;                                        // 更新指标和方案                    updateIndicators();                    updateSolution();                });            });        });        // 更新指标显示        function updateIndicators() {            const container = document.getElementById('indicators-container');            container.innerHTML = '';            if (!selectedRequirements.atmosphere) {                container.innerHTML = '<div class="indicator-item" style="opacity: 0.5;"><div class="indicator-title">请先选择氛围需求</div><div class="indicator-value">系统将自动生成对应的量化指标</div></div>';                return;            }            const data = requirementData.atmosphere[selectedRequirements.atmosphere];            if (!data) return;            // 色彩指标            const colorIndicator = document.createElement('div');            colorIndicator.className = 'indicator-item';            colorIndicator.innerHTML = `                <div class="indicator-title">色彩体系</div>                <div class="indicator-value">                    主色调: ${data.color.main}<br>                    RGB值: ${data.color.rgb}<br>                    点缀色: ${data.color.accent}                </div>                <div class="progress-bar">                    <div class="progress-fill" style="width: 85%"></div>                </div>            `;            container.appendChild(colorIndicator);            // 材质指标            const materialIndicator = document.createElement('div');            materialIndicator.className = 'indicator-item';            materialIndicator.innerHTML = `                <div class="indicator-title">材质配比</div>                <div class="indicator-value">                    ${data.material.join('<br>')}                </div>                <div class="progress-bar">                    <div class="progress-fill" style="width: 92%"></div>                </div>            `;            container.appendChild(materialIndicator);            // 灯光指标            const lightingIndicator = document.createElement('div');            lightingIndicator.className = 'indicator-item';            lightingIndicator.innerHTML = `                <div class="indicator-title">灯光设计</div>                <div class="indicator-value">${data.lighting}</div>                <div class="progress-bar">                    <div class="progress-fill" style="width: 78%"></div>                </div>            `;            container.appendChild(lightingIndicator);            // 空间结构指标            const layoutIndicator = document.createElement('div');            layoutIndicator.className = 'indicator-item';            layoutIndicator.innerHTML = `                <div class="indicator-title">空间结构</div>                <div class="indicator-value">${data.layout}</div>                <div class="progress-bar">                    <div class="progress-fill" style="width: 88%"></div>                </div>            `;            container.appendChild(layoutIndicator);        }        // 更新方案显示        function updateSolution() {            const preview = document.getElementById('solution-preview');            const details = document.getElementById('solution-details');            const stats = document.getElementById('stats-grid');            if (!selectedRequirements.atmosphere) {                preview.classList.remove('active');                details.style.display = 'none';                stats.style.display = 'none';                return;            }            preview.classList.add('active');            details.style.display = 'block';            stats.style.display = 'grid';            const data = requirementData.atmosphere[selectedRequirements.atmosphere];            if (!data) return;            // 更新色彩方案            const colorPalette = document.getElementById('color-palette');            const colors = getColorsFromAtmosphere(selectedRequirements.atmosphere);            colorPalette.innerHTML = colors.map(color =>                 `<div class="color-item" style="background: ${color}"></div>`            ).join('');            // 更新材质列表            const materialList = document.getElementById('material-list');            materialList.innerHTML = data.material.map(material =>                 `<span class="material-tag">${material}</span>`            ).join('');            // 更新布局描述            document.getElementById('layout-description').textContent = data.layout;            // 更新灯光描述            document.getElementById('lighting-description').textContent = data.lighting;            // 更新统计数据            updateStats();        }        // 获取氛围对应的色彩        function getColorsFromAtmosphere(atmosphere) {            const colorMaps = {                '温馨': ['#FFD700', '#DEB887', '#8B4513', '#CD853F'],                '科技感': ['#4169E1', '#87CEEB', '#708090', '#C0C0C0'],                '活力': ['#FF6347', '#FFA500', '#32CD32', '#FF1493'],                '浪漫': ['#FFB6C1', '#FFC0CB', '#DDA0DD', '#F0E68C'],                '极简': ['#FFFFFF', '#F5F5F5', '#DCDCDC', '#000000'],                '奢华': ['#800080', '#DAA520', '#8B0000', '#2F4F4F']            };            return colorMaps[atmosphere] || ['#CCCCCC', '#DDDDDD', '#EEEEEE', '#FFFFFF'];        }        // 更新统计数据        function updateStats() {            const selectedCount = Object.values(selectedRequirements).filter(v => v !== null).length;            const completionRate = Math.round((selectedCount / 4) * 100);                        document.getElementById('completion-rate').textContent = completionRate + '%';            document.getElementById('match-score').textContent = Math.round(85 + Math.random() * 10);            document.getElementById('render-time').textContent = Math.round(5 + Math.random() * 10) + '分钟';            document.getElementById('cost-estimate').textContent = '¥' + Math.round(800 + Math.random() * 400);        }        // 生成最终方案        function generateFinalSolution() {            const selectedCount = Object.values(selectedRequirements).filter(v => v !== null).length;                        if (selectedCount === 0) {                alert('请先选择需求标签');                return;            }            const button = document.querySelector('.floating-button');            button.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';                        setTimeout(() => {                button.innerHTML = '<i class="fas fa-check"></i>';                                // 模拟生成效果图                const preview = document.getElementById('solution-preview');                preview.innerHTML = `                    <div class="preview-icon" style="color: #4CAF50;">                        <i class="fas fa-home"></i>                    </div>                    <div class="preview-text" style="color: #333; font-weight: 500;">                        ${selectedRequirements.atmosphere || '现代'}风格方案生成完成!<br>                        <small>点击查看4K高清效果图</small>                    </div>                `;                                setTimeout(() => {                    button.innerHTML = '<i class="fas fa-play"></i>';                }, 2000);                                alert(`方案生成成功!\n已选择: ${Object.entries(selectedRequirements).filter(([k,v]) => v).map(([k,v]) => v).join(', ')}`);            }, 2000);        }    </script></body></html>
 |