news 2026/2/8 8:52:18

整体设计 定稿 之23+ dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q199 之2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
整体设计 定稿 之23+ dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q199 之2)

以下是“之22” 中Q199 的最后程序 (由于字数超限,分两次。本篇是2/2)

// 渲染三层嵌套提示词导航 function renderPrompts() { const prompts = getPrompts() || window.DEFAULT_PROMPTS || []; const promptsContainer = document.getElementById('prompts-container'); promptsContainer.innerHTML = ''; // 按符号学系统分组显示 const groupedPrompts = { explicit: prompts.filter(p => p.semioticSystem === 'explicit' || p.promptType === 'grammar'), implicit: prompts.filter(p => p.semioticSystem === 'implicit' || p.promptType === 'mind'), metaphorical: prompts.filter(p => p.semioticSystem === 'metaphorical' || p.promptType === 'axiom') }; Object.entries(groupedPrompts).forEach(([system, systemPrompts]) => { if (systemPrompts.length === 0) return; // 创建系统分组容器 const systemDiv = document.createElement('div'); systemDiv.className = 'border border-gray-200 rounded-lg p-3 bg-gray-50'; // 添加系统标题 const systemTitle = document.createElement('h4'); systemTitle.className = 'text-sm font-medium text-gray-700 mb-2'; const systemInfo = { explicit: { name: '明言系统', icon: 'fa-comment', color: 'blue' }, implicit: { name: '暗示系统', icon: 'fa-eye-slash', color: 'purple' }, metaphorical: { name: '隐喻系统', icon: 'fa-magic', color: 'green' } }; const info = systemInfo[system]; systemTitle.innerHTML = ` <i class="fa ${info.icon} text-${info.color}-600 mr-1"></i> ${info.name} `; systemDiv.appendChild(systemTitle); // 添加该系统的提示词卡片 systemPrompts.forEach(prompt => { const card = document.createElement('div'); card.className = 'p-3 mb-2 border border-gray-200 rounded-lg hover:border-primary hover:bg-blue-50 transition-all-300 cursor-pointer bg-white'; card.dataset.id = prompt.id; const systemColor = { explicit: 'blue', implicit: 'purple', metaphorical: 'green' }[prompt.semioticSystem] || 'gray'; card.innerHTML = ` <div class="flex items-start justify-between"> <div class="flex-1"> <h5 class="font-medium text-gray-800 text-sm">${prompt.title}</h5> <div class="mt-1 text-xs text-gray-500"> <span class="inline-block bg-${systemColor}-100 text-${systemColor}-600 rounded-full px-2 py-0.5 mr-1"> ${prompt.promptType || prompt.semioticSystem} </span> ${prompt.category ? `<span class="inline-block bg-gray-100 rounded px-1 py-0.5">${prompt.category}</span>` : ''} </div> <div class="mt-1 text-xs text-gray-600 line-clamp-2"> ${prompt.description || prompt.content || '暂无描述'} </div> </div> <div class="flex space-x-1 ml-2"> <button class="text-gray-400 hover:text-gray-600 edit-prompt p-1" data-id="${prompt.id}" title="编辑"> <i class="fa fa-pencil text-xs"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-prompt p-1" data-id="${prompt.id}" title="删除"> <i class="fa fa-trash-o text-xs"></i> </button> </div> </div> `; // 添加点击事件 - 应用提示词 card.addEventListener('click', (e) => { if (!e.target.closest('.edit-prompt') && !e.target.closest('.delete-prompt')) { applyPromptSystem(prompt); } }); systemDiv.appendChild(card); }); promptsContainer.appendChild(systemDiv); }); } // 应用符号学提示词系统 function applyPromptSystem(prompt) { const systemInfo = { explicit: '明言-析取提示词', implicit: '暗示-合取关键词', metaphorical: '隐喻-双取主题词' }; const system = prompt.semioticSystem || 'explicit'; const systemName = systemInfo[system] || '未知系统'; // 显示应用确认 showToast(`正在应用${systemName}:${prompt.title}`, 'info'); // 如果是明言系统,更新hover提示 if (system === 'explicit') { updateExplicitPromptSystem(prompt); } // 如果是暗示系统,触发心流机制 else if (system === 'implicit') { updateImplicitKeywordSystem(prompt); } // 如果是隐喻系统,初始化公理体系 else if (system === 'metaphorical') { updateMetaphoricalThemeSystem(prompt); } } // 更新明言-析取提示词系统 function updateExplicitPromptSystem(prompt) { // 更新功能hover提示 console.log('应用明言语法分析系统', prompt); showToast('明言语法分析系统已激活:hover提示功能增强', 'success'); } // 更新暗示-合取关键词系统 function updateImplicitKeywordSystem(prompt) { // 触发心流机制 console.log('应用暗示心动程序系统', prompt); showToast('暗示心动程序已启动:心流状态检测激活', 'success'); } // 更新隐喻-双取主题词系统 function updateMetaphoricalThemeSystem(prompt) { // 初始化公理体系 console.log('应用隐喻公理体系', prompt); showToast('隐喻公理体系已建立:范畴元件约束就绪', 'success'); } // 显示符号学架构配置 function showArchitectureConfig() { document.getElementById('architecture-config-modal').classList.remove('hidden'); // 加载当前配置 loadArchitectureConfig(); } // 加载架构配置 function loadArchitectureConfig() { const config = localStorage.getItem('semiotic-architecture-config'); if (config) { try { const parsedConfig = JSON.parse(config); // 应用保存的配置到表单 console.log('加载架构配置:', parsedConfig); } catch (e) { console.warn('架构配置解析失败:', e); } } } // 保存架构配置 function saveArchitectureConfig() { const config = { pinStructure: { science: { mechanics: document.querySelector('input[placeholder="力学系数"]').value, mathematics: document.querySelector('input[placeholder="数学精度"]').value }, engineering: { experience: document.querySelector('select:nth-of-type(1)').value, method: document.querySelector('select:nth-of-type(2)').value }, liberalArts: { independence: document.querySelector('select:nth-of-type(3)').value, unity: document.querySelector('input[type="range"]').value } }, promptSystems: { explicit: { enabled: document.querySelectorAll('input[type="checkbox"]')[0].checked, grammar: document.querySelectorAll('input[type="text"]')[0].value, pragmatics: document.querySelectorAll('input[type="text"]')[1].value, semantics: document.querySelectorAll('input[type="text"]')[2].value }, implicit: { enabled: document.querySelectorAll('input[type="checkbox"]')[1].checked, mind: document.querySelectorAll('textarea')[0].value, motion: document.querySelectorAll('textarea')[1].value, action: document.querySelectorAll('textarea')[2].value }, metaphorical: { enabled: document.querySelectorAll('input[type="checkbox"]')[2].checked, axiom: document.querySelectorAll('input[type="text"]')[3].value, method: document.querySelectorAll('input[type="text"]')[4].value, assertion: document.querySelectorAll('input[type="text"]')[5].value } }, valueExpressions: { embedded: { enabled: true, scope: '万向 通 - 通 境 顿' }, external: { enabled: true, scope: '千行 别 - 性 行 渐' }, internal: { enabled: true, scope: '百业 藏 - 量 果 密' } } }; localStorage.setItem('semiotic-architecture-config', JSON.stringify(config)); showToast('符号学架构配置已保存', 'success'); document.getElementById('architecture-config-modal').classList.add('hidden'); // 重新初始化系统 initializeSemioticArchitecture(); renderPrompts(); } </div> `; // 添加点击事件 card.addEventListener('click', (e) => { if (!e.target.closest('.edit-prompt') && !e.target.closest('.delete-prompt')) { // 使用提示词创建新讨论 createDiscussionFromPrompt(prompt); } }); promptsContainer.appendChild(card); // 添加编辑和删除事件 document.querySelectorAll('.edit-prompt').forEach(btn => { btn.addEventListener('click', (e) => { e.stopPropagation(); const id = btn.dataset.id; // 这里可以添加编辑提示词的逻辑 showToast('编辑功能开发中...', 'info'); }); }); document.querySelectorAll('.delete-prompt').forEach(btn => { btn.addEventListener('click', (e) => { e.stopPropagation(); const id = btn.dataset.id; if (confirm('确定要删除这个提示词模板吗?')) { deletePrompt(id); renderPrompts(); showToast('提示词模板已删除', 'success'); } }); }); } // ==================== 讨论编辑 ==================== // 打开讨论 function openDiscussion(id) { const discussion = getDiscussions().find(d => d.id === id); if (!discussion) return; // 切换到编辑视图 document.getElementById('dashboard-view').classList.add('hidden'); document.getElementById('welcome-view').classList.add('hidden'); document.getElementById('config-view').classList.add('hidden'); document.getElementById('editor-view').classList.remove('hidden'); // 填充表单 document.getElementById('discussion-title').value = discussion.title; document.getElementById('discussion-category').value = discussion.category; document.getElementById('discussion-subject').value = discussion.subject; document.getElementById('discussion-topic').value = discussion.topic; // 渲染标签 renderTags(discussion.tags || []); // 渲染内容块 renderContentBlocks(discussion.contentBlocks || []); // 设置当前讨论ID document.getElementById('editor-view').dataset.id = id; // 更新价值维度统计 valueStats.learn++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); } // 创建新讨论 function createNewDiscussion() { const discussion = { id: generateId(), title: '', category: '', subject: '', topic: '', tags: [], contentBlocks: [], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; // 保存讨论 saveDiscussion(discussion); // 打开讨论 openDiscussion(discussion.id); // 更新列表 renderDiscussions(); renderCategories(); // 更新价值维度统计 valueStats.save++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); } // 从提示词创建讨论 function createDiscussionFromPrompt(prompt) { const discussion = { id: generateId(), title: prompt.title, category: '', subject: prompt.title, topic: '', tags: prompt.tags || [], contentBlocks: [ { id: generateId(), type: 'text', content: prompt.content, order: 0 } ], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; // 保存讨论 saveDiscussion(discussion); // 打开讨论 openDiscussion(discussion.id); // 更新列表 renderDiscussions(); renderCategories(); // 更新价值维度统计 valueStats.learn++; valueStats.save++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); showToast('已从模板创建讨论', 'success'); } // 渲染标签 function renderTags(tags) { const tagsContainer = document.getElementById('tags-container'); tagsContainer.innerHTML = ''; tags.forEach(tag => { const tagElement = document.createElement('div'); tagElement.className = 'flex items-center bg-gray-100 rounded-full px-3 py-1'; tagElement.innerHTML = ` <span class="text-sm text-gray-600">${tag}</span> <button class="ml-1 text-gray-400 hover:text-gray-600 remove-tag"> <i class="fa fa-times"></i> </button> `; // 添加删除事件 tagElement.querySelector('.remove-tag').addEventListener('click', () => { const updatedTags = tags.filter(t => t !== tag); updateDiscussionTags(updatedTags); renderTags(updatedTags); }); tagsContainer.appendChild(tagElement); }); } // 更新讨论标签 function updateDiscussionTags(tags) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { discussion.tags = tags; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); } } // 渲染内容块 function renderContentBlocks(blocks) { const container = document.getElementById('content-blocks-container'); const emptyMsg = document.getElementById('empty-content-msg'); // 清空容器 container.innerHTML = ''; if (blocks.length === 0) { emptyMsg.classList.remove('hidden'); container.appendChild(emptyMsg); return; } emptyMsg.classList.add('hidden'); // 按顺序渲染内容块 blocks.sort((a, b) => a.order - b.order).forEach(block => { const blockElement = document.createElement('div'); blockElement.className = 'content-block p-4 border border-gray-200 rounded-lg relative'; blockElement.dataset.id = block.id; blockElement.dataset.type = block.type; // 根据类型渲染不同的内容块 switch (block.type) { case 'text': blockElement.innerHTML = ` <div class="flex items-center justify-between mb-2"> <div class="flex items-center"> <div class="w-8 h-8 rounded-full bg-blue-100 flex items-center justify-center text-primary mr-2"> <i class="fa fa-align-left"></i> </div> <h4 class="font-medium text-gray-800">文本块</h4> </div> <div class="flex space-x-2"> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="up"> <i class="fa fa-arrow-up"></i> </button> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="down"> <i class="fa fa-arrow-down"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-block" data-id="${block.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> <div class="editable-content" contenteditable="true">${block.content || ''}</div> `; break; case 'timeline': blockElement.innerHTML = ` <div class="flex items-center justify-between mb-2"> <div class="flex items-center"> <div class="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600 mr-2"> <i class="fa fa-clock-o"></i> </div> <h4 class="font-medium text-gray-800">时间轴</h4> </div> <div class="flex space-x-2"> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="up"> <i class="fa fa-arrow-up"></i> </button> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="down"> <i class="fa fa-arrow-down"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-block" data-id="${block.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> <div class="timeline-container space-y-3"> ${block.items ? block.items.map(item => ` <div class="flex"> <div class="flex flex-col items-center mr-4"> <div class="w-3 h-3 rounded-full bg-green-500"></div> <div class="w-0.5 h-full bg-green-200"></div> </div> <div class="flex-1"> <div class="text-sm font-medium text-gray-800">${item.time || ''}</div> <div class="text-sm text-gray-600">${item.content || ''}</div> </div> </div> `).join('') : ''} <div class="flex"> <div class="flex flex-col items-center mr-4"> <div class="w-3 h-3 rounded-full bg-green-300"></div> </div> <div class="flex-1"> <button class="text-sm text-primary hover:text-primary-dark add-timeline-item" data-block-id="${block.id}"> <i class="fa fa-plus-circle"></i> 添加时间点 </button> </div> </div> </div> `; break; case 'decision': blockElement.innerHTML = ` <div class="flex items-center justify-between mb-2"> <div class="flex items-center"> <div class="w-8 h-8 rounded-full bg-purple-100 flex items-center justify-center text-purple-600 mr-2"> <i class="fa fa-check-circle"></i> </div> <h4 class="font-medium text-gray-800">决策点</h4> </div> <div class="flex items-center space-x-2"> <span class="text-xs px-2 py-1 rounded-full ${block.status === 'completed' ? 'bg-green-100 text-green-800' : 'bg-yellow-100 text-yellow-800'}"> ${block.status === 'completed' ? '已确认' : '待确认'} </span> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="up"> <i class="fa fa-arrow-up"></i> </button> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="down"> <i class="fa fa-arrow-down"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-block" data-id="${block.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> <div class="decision-container"> <div class="editable-content" contenteditable="true">${block.content || ''}</div> <div class="mt-2 flex justify-end"> <button class="text-xs px-3 py-1 rounded-full ${block.status === 'completed' ? 'bg-yellow-100 text-yellow-800' : 'bg-green-100 text-green-800'} toggle-decision-status" data-block-id="${block.id}"> ${block.status === 'completed' ? '标记为待确认' : '标记为已确认'} </button> </div> </div> `; break; case 'todo': blockElement.innerHTML = ` <div class="flex items-center justify-between mb-2"> <div class="flex items-center"> <div class="w-8 h-8 rounded-full bg-yellow-100 flex items-center justify-center text-yellow-600 mr-2"> <i class="fa fa-tasks"></i> </div> <h4 class="font-medium text-gray-800">待办事项</h4> </div> <div class="flex space-x-2"> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="up"> <i class="fa fa-arrow-up"></i> </button> <button class="text-gray-400 hover:text-gray-600 move-block" data-direction="down"> <i class="fa fa-arrow-down"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-block" data-id="${block.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> <div class="todo-container space-y-2"> ${block.items ? block.items.map(item => ` <div class="flex items-center"> <input type="checkbox" class="todo-checkbox w-4 h-4 text-primary rounded border-gray-300 focus:ring-primary" ${item.completed ? 'checked' : ''} data-block-id="${block.id}" data-item-id="${item.id}"> <span class="ml-2 text-sm ${item.completed ? 'line-through text-gray-400' : 'text-gray-700'}">${item.text}</span> </div> `).join('') : ''} <div class="flex items-center"> <input type="checkbox" class="w-4 h-4 text-primary rounded border-gray-300 focus:ring-primary opacity-50" disabled> <input type="text" class="ml-2 text-sm flex-1 border-0 border-b border-gray-300 focus:outline-none focus:ring-0 add-todo-input" placeholder="添加新任务..." data-block-id="${block.id}"> </div> </div> `; break; } container.appendChild(blockElement); // 添加可编辑内容的事件 const editableContent = blockElement.querySelector('.editable-content'); if (editableContent) { editableContent.addEventListener('input', debounce(() => { updateContentBlock(block.id, { content: editableContent.innerHTML }); }, 500)); } }); // 添加移动和删除事件 document.querySelectorAll('.move-block').forEach(btn => { btn.addEventListener('click', () => { const direction = btn.dataset.direction; const blockId = btn.closest('.content-block').dataset.id; moveContentBlock(blockId, direction); }); }); document.querySelectorAll('.delete-block').forEach(btn => { btn.addEventListener('click', () => { const blockId = btn.dataset.id; deleteContentBlock(blockId); }); }); // 添加时间轴项目事件 document.querySelectorAll('.add-timeline-item').forEach(btn => { btn.addEventListener('click', () => { const blockId = btn.dataset.blockId; addTimelineItem(blockId); }); }); // 添加切换决策状态事件 document.querySelectorAll('.toggle-decision-status').forEach(btn => { btn.addEventListener('click', () => { const blockId = btn.dataset.blockId; toggleDecisionStatus(blockId); }); }); // 添加待办事项事件 document.querySelectorAll('.todo-checkbox').forEach(checkbox => { checkbox.addEventListener('change', () => { const blockId = checkbox.dataset.blockId; const itemId = checkbox.dataset.itemId; toggleTodoItem(blockId, itemId, checkbox.checked); }); }); document.querySelectorAll('.add-todo-input').forEach(input => { input.addEventListener('keypress', (e) => { if (e.key === 'Enter' && input.value.trim()) { const blockId = input.dataset.blockId; addTodoItem(blockId, input.value.trim()); input.value = ''; } }); }); } // 更新内容块 function updateContentBlock(blockId, updates) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { discussion.contentBlocks[blockIndex] = { ...discussion.contentBlocks[blockIndex], ...updates }; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); } } } // 移动内容块 function moveContentBlock(blockId, direction) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { const newIndex = direction === 'up' ? blockIndex - 1 : blockIndex + 1; if (newIndex >= 0 && newIndex < discussion.contentBlocks.length) { // 交换位置 const temp = discussion.contentBlocks[blockIndex]; discussion.contentBlocks[blockIndex] = discussion.contentBlocks[newIndex]; discussion.contentBlocks[newIndex] = temp; // 更新顺序 discussion.contentBlocks.forEach((block, index) => { block.order = index; }); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); } } } } // 删除内容块 function deleteContentBlock(blockId) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { discussion.contentBlocks = discussion.contentBlocks.filter(b => b.id !== blockId); // 更新顺序 discussion.contentBlocks.forEach((block, index) => { block.order = index; }); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); } } // 添加时间轴项目 function addTimelineItem(blockId) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { const block = discussion.contentBlocks[blockIndex]; if (!block.items) { block.items = []; } block.items.push({ id: generateId(), time: new Date().toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' }), content: '' }); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); } } } // 切换决策状态 function toggleDecisionStatus(blockId) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { const block = discussion.contentBlocks[blockIndex]; block.status = block.status === 'completed' ? 'pending' : 'completed'; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); // 更新统计 updateStats(); } } } // 添加待办事项 function addTodoItem(blockId, text) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { const block = discussion.contentBlocks[blockIndex]; if (!block.items) { block.items = []; } block.items.push({ id: generateId(), text: text, completed: false }); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); // 更新统计 updateStats(); } } } // 切换待办事项状态 function toggleTodoItem(blockId, itemId, completed) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { const blockIndex = discussion.contentBlocks.findIndex(b => b.id === blockId); if (blockIndex >= 0) { const block = discussion.contentBlocks[blockIndex]; const itemIndex = block.items.findIndex(i => i.id === itemId); if (itemIndex >= 0) { block.items[itemIndex].completed = completed; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); // 更新统计 updateStats(); } } } } // 生成AI总结 function generateSummary() { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (!discussion) return; const summaryContainer = document.getElementById('summary-container'); summaryContainer.innerHTML = '<p class="text-center text-gray-500">正在生成总结...</p>'; // 模拟AI处理延迟 setTimeout(() => { let summary = `# ${discussion.title} 讨论总结\n\n`; // 提取决策点 const decisions = discussion.contentBlocks.filter(b => b.type === 'decision' && b.content); if (decisions.length > 0) { summary += `## 关键决策\n\n`; decisions.forEach((decision, index) => { summary += `${index + 1}. ${decision.content.replace(/<[^>]*>/g, '')}\n`; }); summary += `\n`; } // 提取待办事项 const todos = []; discussion.contentBlocks.forEach(block => { if (block.type === 'todo' && block.items) { block.items.forEach(item => { if (!item.completed) { todos.push(item.text); } }); } }); if (todos.length > 0) { summary += `## 待办事项\n\n`; todos.forEach((todo, index) => { summary += `${index + 1}. ${todo}\n`; }); summary += `\n`; } // 提取时间线 const timelineItems = []; discussion.contentBlocks.forEach(block => { if (block.type === 'timeline' && block.items) { block.items.forEach(item => { if (item.time && item.content) { timelineItems.push({ time: item.time, content: item.content }); } }); } }); if (timelineItems.length > 0) { summary += `## 时间线\n\n`; timelineItems.forEach(item => { summary += `${item.time} - ${item.content}\n`; }); } // 显示总结 summaryContainer.innerHTML = ` <div class="markdown-body"> ${summary.replace(/\n/g, '<br>').replace(/^# (.*$)/gm, '<h1 class="text-xl font-bold">$1</h1>').replace(/^## (.*$)/gm, '<h2 class="text-lg font-semibold mt-2">$1</h2>')} </div> `; // 更新价值维度统计 valueStats.learn++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); showToast('总结已生成', 'success'); }, 1500); } // ==================== 事件监听 ==================== // 初始化事件监听 function initializeEventListeners() { // 导航按钮 document.getElementById('dashboard-btn').addEventListener('click', () => { document.getElementById('dashboard-view').classList.remove('hidden'); document.getElementById('editor-view').classList.add('hidden'); document.getElementById('config-view').classList.add('hidden'); document.getElementById('welcome-view').classList.add('hidden'); renderDashboard(); }); document.getElementById('config-btn').addEventListener('click', () => { document.getElementById('dashboard-view').classList.add('hidden'); document.getElementById('editor-view').classList.add('hidden'); document.getElementById('config-view').classList.remove('hidden'); document.getElementById('welcome-view').classList.add('hidden'); renderConfigView(); }); document.getElementById('back-to-dashboard').addEventListener('click', () => { document.getElementById('dashboard-view').classList.remove('hidden'); document.getElementById('config-view').classList.add('hidden'); renderDashboard(); }); // 新建讨论 document.getElementById('new-discussion-btn').addEventListener('click', createNewDiscussion); document.getElementById('create-first-discussion').addEventListener('click', createNewDiscussion); document.getElementById('explore-dashboard').addEventListener('click', () => { document.getElementById('dashboard-view').classList.remove('hidden'); document.getElementById('welcome-view').classList.add('hidden'); renderDashboard(); }); // 备份按钮 document.getElementById('backup-btn').addEventListener('click', () => { document.getElementById('backup-modal').classList.remove('hidden'); loadBackupData(); // 更新价值维度统计 valueStats.safe++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); }); // 关闭备份模态框 document.getElementById('close-backup-modal').addEventListener('click', () => { document.getElementById('backup-modal').classList.add('hidden'); }); document.getElementById('close-backup-btn').addEventListener('click', () => { document.getElementById('backup-modal').classList.add('hidden'); }); // 导出数据 document.getElementById('export-data-btn').addEventListener('click', exportData); // 导入数据 document.getElementById('import-file').addEventListener('change', importData); // 重置数据 document.getElementById('reset-data-btn').addEventListener('click', () => { if (confirm('确定要重置所有数据吗?这将删除所有讨论和配置,不可恢复!')) { resetData(); document.getElementById('backup-modal').classList.add('hidden'); renderDashboard(); renderDiscussions(); renderCategories(); showToast('数据已重置', 'success'); } }); // 添加内容块按钮 document.getElementById('add-content-block').addEventListener('click', () => { document.getElementById('add-block-modal').classList.remove('hidden'); }); // 关闭内容块模态框 document.getElementById('close-modal-btn').addEventListener('click', () => { document.getElementById('add-block-modal').classList.add('hidden'); }); // 添加内容块 document.querySelectorAll('.add-block-btn').forEach(btn => { btn.addEventListener('click', () => { const type = btn.dataset.type; addContentBlock(type); document.getElementById('add-block-modal').classList.add('hidden'); }); }); // 生成总结 document.getElementById('generate-summary-btn').addEventListener('click', generateSummary); // 帮助按钮 document.getElementById('help-button').addEventListener('click', () => { document.getElementById('help-modal').classList.remove('hidden'); // 更新价值维度统计 valueStats.learn++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); }); // 关闭帮助模态框 document.getElementById('close-help-modal').addEventListener('click', () => { document.getElementById('help-modal').classList.add('hidden'); }); // 帮助标签页 document.querySelectorAll('.help-tab-btn').forEach(tab => { tab.addEventListener('click', () => { const tabId = tab.dataset.tab; document.querySelectorAll('.help-tab-btn').forEach(t => { t.classList.remove('text-primary', 'border-primary'); t.classList.add('text-gray-500', 'border-transparent'); }); document.querySelectorAll('.help-tab-content').forEach(content => { content.classList.add('hidden'); }); tab.classList.remove('text-gray-500', 'border-transparent'); tab.classList.add('text-primary', 'border-primary'); document.getElementById(`${tabId}-tab`).classList.remove('hidden'); }); }); // 配置标签页 document.querySelectorAll('.config-tab-btn').forEach(tab => { tab.addEventListener('click', () => { const tabId = tab.dataset.tab; document.querySelectorAll('.config-tab-btn').forEach(t => { t.classList.remove('text-primary', 'border-primary'); t.classList.add('text-gray-500', 'border-transparent'); }); document.querySelectorAll('.config-tab-content').forEach(content => { content.classList.add('hidden'); }); tab.classList.remove('text-gray-500', 'border-transparent'); tab.classList.add('text-primary', 'border-primary'); document.getElementById(`${tabId}-tab`).classList.remove('hidden'); }); }); // Requirements需求配置应用 document.getElementById('apply-requirements').addEventListener('click', () => { applyRequirementsConfig(); }); // Demands方法配置应用 document.getElementById('apply-demands').addEventListener('click', () => { applyDemandsConfig(); }); // 添加新范畴 document.getElementById('add-new-category').addEventListener('click', () => { document.getElementById('add-category-modal').classList.remove('hidden'); }); // 关闭范畴模态框 document.getElementById('cancel-category-btn').addEventListener('click', () => { document.getElementById('add-category-modal').classList.add('hidden'); }); // 保存范畴 document.getElementById('save-category-btn').addEventListener('click', saveNewCategory); // 选择颜色 document.querySelectorAll('.category-color-btn').forEach(btn => { btn.addEventListener('click', () => { document.querySelectorAll('.category-color-btn').forEach(b => { b.classList.remove('border-primary'); }); btn.classList.add('border-primary'); }); }); // 添加标签 document.getElementById('add-tag-btn').addEventListener('click', () => { const tagInput = document.getElementById('tag-input'); const tag = tagInput.value.trim(); if (tag) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (discussion) { if (!discussion.tags) { discussion.tags = []; } if (!discussion.tags.includes(tag)) { discussion.tags.push(tag); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); renderTags(discussion.tags); } tagInput.value = ''; } } }); // 富文本格式化 document.querySelectorAll('.format-btn').forEach(btn => { btn.addEventListener('click', () => { const command = btn.dataset.command; document.execCommand(command, false, null); // 更新价值维度统计 valueStats.save++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); }); }); // 搜索 document.getElementById('search-input').addEventListener('input', debounce(() => { const searchTerm = document.getElementById('search-input').value.toLowerCase(); const discussions = getDiscussions(); const filteredDiscussions = discussions.filter(d => d.title.toLowerCase().includes(searchTerm) || d.subject.toLowerCase().includes(searchTerm) || d.topic.toLowerCase().includes(searchTerm) || (d.tags && d.tags.some(tag => tag.toLowerCase().includes(searchTerm))) ); const discussionList = document.getElementById('discussion-list'); const emptyMsg = document.getElementById('empty-discussion-msg'); if (filteredDiscussions.length === 0) { discussionList.innerHTML = ''; emptyMsg.classList.remove('hidden'); return; } emptyMsg.classList.add('hidden'); discussionList.innerHTML = ''; filteredDiscussions.forEach(discussion => { const category = getCategories().find(c => c.id === discussion.category); const item = document.createElement('div'); item.className = 'p-3 rounded-lg hover:bg-gray-100 cursor-pointer transition-all-300 border border-transparent hover:border-gray-200'; item.dataset.id = discussion.id; item.innerHTML = ` <div class="flex items-start justify-between"> <div class="flex-1"> <h4 class="font-medium text-gray-800 truncate">${discussion.title}</h4> <div class="flex items-center mt-1 text-xs text-gray-500"> <span class="inline-block w-2 h-2 rounded-full mr-1" style="background-color: ${category ? category.color : '#ccc'}"></span> <span>${category ? category.name : '未分类'}</span> <span class="mx-1">•</span> <span>${discussion.subject}</span> </div> </div> </div> <div class="mt-2 text-xs text-gray-500"> <span>${formatDate(discussion.updatedAt)}</span> </div> `; item.addEventListener('click', () => { openDiscussion(discussion.id); }); discussionList.appendChild(item); }); }, 300)); // 分类关键词自动完成 document.getElementById('discussion-subject').addEventListener('input', debounce(() => { const input = document.getElementById('discussion-subject'); const value = input.value.toLowerCase(); const suggestions = document.getElementById('subject-suggestions'); const subjects = getSubjects(); const filteredSubjects = subjects.filter(s => s.toLowerCase().includes(value)); if (filteredSubjects.length > 0 && value.length > 0) { suggestions.innerHTML = filteredSubjects.map(s => ` <div class="p-2 hover:bg-gray-100 cursor-pointer subject-suggestion">${s}</div> `).join(''); suggestions.classList.remove('hidden'); document.querySelectorAll('.subject-suggestion').forEach(suggestion => { suggestion.addEventListener('click', () => { input.value = suggestion.textContent; suggestions.classList.add('hidden'); }); }); } else { suggestions.classList.add('hidden'); } }, 300)); // 点击其他地方关闭自动完成 document.addEventListener('click', (e) => { if (!e.target.closest('#discussion-subject') && !e.target.closest('#subject-suggestions')) { document.getElementById('subject-suggestions').classList.add('hidden'); } }); // 代码定位 document.querySelectorAll('.code-location-btn').forEach(btn => { btn.addEventListener('click', () => { const location = btn.dataset.codeLocation || '未指定'; showCodeLocation(location); }); }); // 架构编辑 document.getElementById('edit-architecture-btn')?.addEventListener('click', () => { showArchitectureConfig(); }); // 符号学架构配置模态框 document.getElementById('close-architecture-modal')?.addEventListener('click', () => { document.getElementById('architecture-config-modal').classList.add('hidden'); }); document.getElementById('close-architecture-config-btn')?.addEventListener('click', () => { document.getElementById('architecture-config-modal').classList.add('hidden'); }); document.getElementById('save-architecture-btn')?.addEventListener('click', () => { saveArchitectureConfig(); }); document.getElementById('reset-architecture-btn')?.addEventListener('click', () => { if (confirm('确定要重置为默认配置吗?这将清除所有自定义设置。')) { localStorage.removeItem('semiotic-architecture-config'); initializeSemioticArchitecture(); renderPrompts(); showToast('架构配置已重置为默认值', 'info'); document.getElementById('architecture-config-modal').classList.add('hidden'); } }); // 关闭代码定位模态框 document.getElementById('close-code-modal-btn').addEventListener('click', () => { document.getElementById('code-location-modal').classList.add('hidden'); }); document.getElementById('close-code-btn').addEventListener('click', () => { document.getElementById('code-location-modal').classList.add('hidden'); }); // 复制代码 document.getElementById('copy-code-btn').addEventListener('click', () => { const code = document.getElementById('code-snippet-container').textContent; navigator.clipboard.writeText(code).then(() => { showToast('代码已复制到剪贴板', 'success'); }); }); // 主题切换 document.getElementById('theme-toggle').addEventListener('click', toggleTheme); // 自动保存讨论 const titleInput = document.getElementById('discussion-title'); const categorySelect = document.getElementById('discussion-category'); const subjectInput = document.getElementById('discussion-subject'); const topicInput = document.getElementById('discussion-topic'); [titleInput, categorySelect, subjectInput, topicInput].forEach(input => { if (input) { input.addEventListener('change', debounce(() => { const id = document.getElementById('editor-view').dataset.id; if (id) { const discussion = getDiscussions().find(d => d.id === id); if (discussion) { discussion.title = titleInput.value; discussion.category = categorySelect.value; discussion.subject = subjectInput.value; discussion.topic = topicInput.value; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 更新价值维度统计 valueStats.safe++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); } } }, 1000)); } }); } // ==================== 数据备份与恢复 ==================== // 加载备份数据 function loadBackupData() { const data = { discussions: getDiscussions(), categories: getCategories(), subjects: getSubjects(), prompts: getPrompts(), stats: valueStats }; const backupData = document.getElementById('backup-data'); backupData.innerHTML = `<pre><code>${JSON.stringify(data, null, 2)}</code></pre>`; } // 导出数据 function exportData() { const data = { discussions: getDiscussions(), categories: getCategories(), subjects: getSubjects(), prompts: getPrompts(), stats: valueStats, groupHierarchy: getData(STORAGE_KEYS.GROUP_HIERARCHY), directDimension: getData(STORAGE_KEYS.DIRECT_DIMENSION), indexTable: getData(STORAGE_KEYS.INDEX_TABLE), exportDate: new Date().toISOString() }; const dataStr = JSON.stringify(data, null, 2); const dataBlob = new Blob([dataStr], { type: 'application/json' }); const url = URL.createObjectURL(dataBlob); const link = document.createElement('a'); link.href = url; link.download = `discussMemo_backup_${new Date().toISOString().split('T')[0]}.json`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); showToast('数据已导出', 'success'); } // 导入数据 function importData(event) { const file = event.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = (e) => { try { const data = JSON.parse(e.target.result); if (confirm('确定要导入数据吗?这将覆盖当前数据!')) { // 导入数据 if (data.discussions) saveData(STORAGE_KEYS.DISCUSSIONS, data.discussions); if (data.categories) saveData(STORAGE_KEYS.CATEGORIES, data.categories); if (data.subjects) saveData(STORAGE_KEYS.SUBJECTS, data.subjects); if (data.prompts) saveData(STORAGE_KEYS.PROMPTS, data.prompts); if (data.stats) valueStats = data.stats; if (data.groupHierarchy) saveData(STORAGE_KEYS.GROUP_HIERARCHY, data.groupHierarchy); if (data.directDimension) saveData(STORAGE_KEYS.DIRECT_DIMENSION, data.directDimension); if (data.indexTable) saveData(STORAGE_KEYS.INDEX_TABLE, data.indexTable); // 更新统计 saveData(STORAGE_KEYS.STATS, valueStats); // 重新渲染 renderDashboard(); renderDiscussions(); renderCategories(); loadBackupData(); showToast('数据已导入', 'success'); } } catch (error) { console.error('导入数据失败:', error); showToast('导入数据失败,请检查文件格式', 'error'); } }; reader.readAsText(file); } // 重置数据 function resetData() { localStorage.removeItem(STORAGE_KEYS.DISCUSSIONS); localStorage.removeItem(STORAGE_KEYS.CATEGORIES); localStorage.removeItem(STORAGE_KEYS.SUBJECTS); localStorage.removeItem(STORAGE_KEYS.PROMPTS); localStorage.removeItem(STORAGE_KEYS.STATS); localStorage.removeItem(STORAGE_KEYS.GROUP_HIERARCHY); localStorage.removeItem(STORAGE_KEYS.DIRECT_DIMENSION); localStorage.removeItem(STORAGE_KEYS.INDEX_TABLE); // 重新初始化 initializeDataTables(); valueStats = { learn: 0, save: 0, safe: 0 }; saveData(STORAGE_KEYS.STATS, valueStats); } // ==================== 配置管理 ==================== // 渲染配置视图 function renderConfigView() { renderCustomCategories(); renderCustomSubjects(); renderCustomPrompts(); } // 渲染自定义范畴 function renderCustomCategories() { const categories = getCategories(); const container = document.getElementById('custom-categories-list'); container.innerHTML = ''; categories.forEach(category => { const item = document.createElement('div'); item.className = 'p-4 border border-gray-200 rounded-lg'; item.innerHTML = ` <div class="flex items-center justify-between"> <div class="flex items-center"> <div class="w-4 h-4 rounded-full mr-2" style="background-color: ${category.color}"></div> <h4 class="font-medium text-gray-800">${category.name}</h4> <span class="ml-2 adapt-tag adapt-${category.dimension}">${category.dimension === 'universal' ? '万向' : category.dimension === 'industry' ? '千行' : '百业'}</span> </div> <div class="flex space-x-2"> <button class="text-gray-400 hover:text-gray-600 edit-category" data-id="${category.id}"> <i class="fa fa-pencil"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-category" data-id="${category.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> ${category.description ? ` <div class="mt-2 text-sm text-gray-600"> <p>${category.description}</p> </div> ` : ''} `; container.appendChild(item); }); // 添加删除事件 document.querySelectorAll('.delete-category').forEach(btn => { btn.addEventListener('click', () => { const id = btn.dataset.id; if (confirm('确定要删除这个范畴吗?')) { deleteCategory(id); renderCustomCategories(); renderCategories(); renderDiscussions(); showToast('范畴已删除', 'success'); } }); }); } // 渲染自定义分类关键词 function renderCustomSubjects() { const subjects = getSubjects(); const container = document.getElementById('custom-subjects-list'); container.innerHTML = ''; subjects.forEach((subject, index) => { const item = document.createElement('div'); item.className = 'p-3 border border-gray-200 rounded-lg flex items-center justify-between'; item.innerHTML = ` <span class="text-gray-800">${subject}</span> <button class="text-gray-400 hover:text-gray-600 delete-subject" data-index="${index}"> <i class="fa fa-trash-o"></i> </button> `; container.appendChild(item); }); // 添加删除事件 document.querySelectorAll('.delete-subject').forEach(btn => { btn.addEventListener('click', () => { const index = parseInt(btn.dataset.index); const subjects = getSubjects(); subjects.splice(index, 1); saveSubjects(subjects); renderCustomSubjects(); showToast('关键词已删除', 'success'); }); }); } // 渲染自定义提示词模板 function renderCustomPrompts() { const prompts = getPrompts(); const container = document.getElementById('custom-prompts-list'); container.innerHTML = ''; prompts.forEach(prompt => { const item = document.createElement('div'); item.className = 'p-4 border border-gray-200 rounded-lg'; item.innerHTML = ` <div class="flex items-center justify-between"> <h4 class="font-medium text-gray-800">${prompt.title}</h4> <div class="flex space-x-2"> <button class="text-gray-400 hover:text-gray-600 edit-prompt-config" data-id="${prompt.id}"> <i class="fa fa-pencil"></i> </button> <button class="text-gray-400 hover:text-gray-600 delete-prompt-config" data-id="${prompt.id}"> <i class="fa fa-trash-o"></i> </button> </div> </div> <div class="mt-2 text-sm text-gray-600"> <p>${prompt.content.replace(/\n/g, ' ').replace(/##/g, '').trim().substring(0, 100)}${prompt.content.length > 100 ? '...' : ''}</p> </div> ${prompt.tags ? ` <div class="mt-2"> ${prompt.tags.map(tag => `<span class="inline-block bg-gray-100 rounded-full px-2 py-0.5 text-xs mr-1">${tag}</span>`).join('')} </div> ` : ''} `; container.appendChild(item); }); // 添加删除事件 document.querySelectorAll('.delete-prompt-config').forEach(btn => { btn.addEventListener('click', () => { const id = btn.dataset.id; if (confirm('确定要删除这个提示词模板吗?')) { deletePrompt(id); renderCustomPrompts(); renderPrompts(); showToast('提示词模板已删除', 'success'); } }); }); } // 应用Requirements需求配置 function applyRequirementsConfig() { const requirements = { documentSystem: { structure: document.querySelector('input[name="doc-structure"]:checked')?.value || 'hybrid', templates: Array.from(document.querySelectorAll('.doc-template:checked')).map(cb => cb.value), collaboration: document.querySelector('input[name="doc-collaboration"]:checked')?.value || 'team' }, objectSystem: { entity: document.querySelector('input[name="obj-entity"]:checked')?.value || 'dynamic', relationship: document.querySelector('input[name="obj-relationship"]:checked')?.value || 'many-to-many', validation: document.querySelector('input[name="obj-validation"]:checked')?.value || 'business' }, tableSystem: { format: document.querySelector('input[name="tbl-format"]:checked')?.value || 'dynamic', processing: document.querySelector('input[name="tbl-processing"]:checked')?.value || 'predictive', integration: document.querySelector('input[name="tbl-integration"]:checked')?.value || 'hybrid' } }; // 根据Requirements配置自动映射到Demands方法论 const mappedDemands = mapRequirementsToDemands(requirements); // 保存配置到localStorage localStorage.setItem('requirementsConfig', JSON.stringify(requirements)); localStorage.setItem('mappedDemandsConfig', JSON.stringify(mappedDemands)); // 显示成功消息 showToast('Requirements需求配置已应用,系统将自动映射到对应的方法论', 'success'); // 更新界面显示 updateRequirementsDisplay(requirements); } // 应用Demands方法配置 function applyDemandsConfig() { const demands = { instructionArchitecture: { topLevel: Array.from(document.querySelectorAll('.instruction-top:checked')).map(cb => cb.value), middleLevel: Array.from(document.querySelectorAll('.instruction-middle:checked')).map(cb => cb.value), bottomLevel: Array.from(document.querySelectorAll('.instruction-bottom:checked')).map(cb => cb.value) }, dataSystemMethodology: { basicTable1: true, // 基础表1默认启用 basicTable2: true, // 基础表2默认启用 jointTable: true // 结合表默认启用 }, companionsMethodology: { memorandum: Array.from(document.querySelectorAll('.companion-memo:checked')).map(cb => cb.value), notebook: Array.from(document.querySelectorAll('.companion-notebook:checked')).map(cb => cb.value), logTable: Array.from(document.querySelectorAll('.companion-log:checked')).map(cb => cb.value) } }; // 保存配置到localStorage localStorage.setItem('demandsConfig', JSON.stringify(demands)); // 显示成功消息 showToast('Demands方法配置已应用,系统将使用指定方法论进行实现', 'success'); // 更新界面显示 updateDemandsDisplay(demands); } // Requirements到Demands的映射函数 function mapRequirementsToDemands(requirements) { const mapping = CORE_CONCEPTS.REQUIREMENTS_DEMANDS_CONFIG.CONFIG_MAPPING_RULES; const mappedDemands = { instructionArchitecture: { topLevel: [], middleLevel: [], bottomLevel: [] }, dataSystemMethodology: { basicTable1: true, basicTable2: true, jointTable: true }, companionsMethodology: { memorandum: ['quick-record', 'hypothesis', 'insight'], notebook: ['discussion-analysis', 'knowledge-processing', 'process-tracking'], logTable: ['decision-log', 'progress-log', 'status-marker', 'consensus-track'] } }; // 文档系统需求映射 const docStructure = requirements.documentSystem.structure; if (mapping.documentSystemMapping[docStructure]) { const instruction = mapping.documentSystemMapping[docStructure]; // 根据映射结果设置对应的三层指令 if (instruction.includes('底层')) { mappedDemands.instructionArchitecture.bottomLevel = ['collection', 'filter', 'verification', 'convergence']; } if (instruction.includes('中层')) { mappedDemands.instructionArchitecture.middleLevel = ['feature', 'pattern', 'induction', 'summary']; } if (instruction.includes('顶层')) { mappedDemands.instructionArchitecture.topLevel = ['syntax', 'semantic', 'logic', 'assembly']; } } // 表格系统需求映射 const tblProcessing = requirements.tableSystem.processing; if (mapping.tableSystemMapping[tblProcessing]) { const instruction = mapping.tableSystemMapping[tblProcessing]; // 根据处理选项设置对应的分析方法 if (instruction.includes('智能')) { mappedDemands.instructionArchitecture.topLevel.push('ai-processing'); } } return mappedDemands; } // 更新Requirements显示 function updateRequirementsDisplay(requirements) { // 更新配置显示状态 const reqStatus = document.createElement('div'); reqStatus.className = 'mt-4 p-3 bg-blue-50 border border-blue-200 rounded-lg'; reqStatus.innerHTML = ` <div class="flex items-center"> <i class="fa fa-check-circle text-blue-600 mr-2"></i> <span class="text-sm font-medium text-blue-800">当前Requirements配置:</span> </div> <div class="mt-2 text-xs text-blue-700"> 文档:${requirements.documentSystem.structure} | 对象:${requirements.objectSystem.entity} | 表格:${requirements.tableSystem.format} </div> `; // 移除之前的状态显示 const oldStatus = document.querySelector('#requirements-tab .bg-blue-50'); if (oldStatus && oldStatus.textContent.includes('当前Requirements配置')) { oldStatus.remove(); } // 添加新的状态显示 document.getElementById('requirements-tab').appendChild(reqStatus); } // 更新Demands显示 function updateDemandsDisplay(demands) { // 更新配置显示状态 const demStatus = document.createElement('div'); demStatus.className = 'mt-4 p-3 bg-green-50 border border-green-200 rounded-lg'; demStatus.innerHTML = ` <div class="flex items-center"> <i class="fa fa-check-circle text-green-600 mr-2"></i> <span class="text-sm font-medium text-green-800">当前Demands配置:</span> </div> <div class="mt-2 text-xs text-green-700"> 指令架构:${demands.instructionArchitecture.topLevel.length + demands.instructionArchitecture.middleLevel.length + demands.instructionArchitecture.bottomLevel.length}项 | 数据体系:已启用 | 同行人:备忘录${demands.companionsMethodology.memorandum.length}项 </div> `; // 移除之前的状态显示 const oldStatus = document.querySelector('#demands-tab .bg-green-50'); if (oldStatus && oldStatus.textContent.includes('当前Demands配置')) { oldStatus.remove(); } // 添加新的状态显示 document.getElementById('demands-tab').appendChild(demStatus); } // 加载已保存的配置 function loadRequirementsDemandsConfig() { const savedRequirements = localStorage.getItem('requirementsConfig'); const savedDemands = localStorage.getItem('demandsConfig'); if (savedRequirements) { const requirements = JSON.parse(savedRequirements); // 恢复UI状态 if (requirements.documentSystem) { const docStructure = document.querySelector(`input[name="doc-structure"][value="${requirements.documentSystem.structure}"]`); if (docStructure) docStructure.checked = true; requirements.documentSystem.templates.forEach(template => { const checkbox = document.querySelector(`.doc-template[value="${template}"]`); if (checkbox) checkbox.checked = true; }); const docCollab = document.querySelector(`input[name="doc-collaboration"][value="${requirements.documentSystem.collaboration}"]`); if (docCollab) docCollab.checked = true; } updateRequirementsDisplay(requirements); } if (savedDemands) { const demands = JSON.parse(savedDemands); // 恢复UI状态 if (demands.instructionArchitecture) { demands.instructionArchitecture.topLevel.forEach(feature => { const checkbox = document.querySelector(`.instruction-top[value="${feature}"]`); if (checkbox) checkbox.checked = true; }); demands.instructionArchitecture.middleLevel.forEach(feature => { const checkbox = document.querySelector(`.instruction-middle[value="${feature}"]`); if (checkbox) checkbox.checked = true; }); demands.instructionArchitecture.bottomLevel.forEach(feature => { const checkbox = document.querySelector(`.instruction-bottom[value="${feature}"]`); if (checkbox) checkbox.checked = true; }); } updateDemandsDisplay(demands); } } // 保存新范畴 function saveNewCategory() { const name = document.getElementById('category-name-input').value.trim(); const description = document.getElementById('category-desc-input').value.trim(); const dimension = document.querySelector('input[name="adapt-dimension"]:checked').value; const colorBtn = document.querySelector('.category-color-btn.border-primary'); const color = colorBtn ? colorBtn.dataset.color : '#3b82f6'; if (!name) { showToast('请输入范畴名称', 'error'); return; } const category = { id: generateId(), name, description, dimension, color }; saveCategory(category); renderCustomCategories(); renderCategories(); document.getElementById('add-category-modal').classList.add('hidden'); showToast('范畴已添加', 'success'); // 清空表单 document.getElementById('category-name-input').value = ''; document.getElementById('category-desc-input').value = ''; document.querySelector('input[name="adapt-dimension"][value="universal"]').checked = true; document.querySelectorAll('.category-color-btn').forEach(btn => { btn.classList.remove('border-primary'); }); document.querySelector('.category-color-btn[data-color="#3b82f6"]').classList.add('border-primary'); } // 添加内容块 function addContentBlock(type) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (!discussion) return; let block = { id: generateId(), type, order: discussion.contentBlocks.length }; switch (type) { case 'text': block.content = ''; break; case 'timeline': block.items = []; break; case 'decision': block.content = ''; block.status = 'pending'; break; case 'todo': block.items = []; break; } discussion.contentBlocks.push(block); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); // 更新价值维度统计 valueStats.save++; saveData(STORAGE_KEYS.STATS, valueStats); updateStats(); } // 显示代码位置 function showCodeLocation(location) { const modal = document.getElementById('code-location-modal'); const title = document.getElementById('code-location-title'); const snippet = document.getElementById('code-snippet-container'); title.textContent = `功能模块:${location}`; // 根据位置生成示例代码 let codeSnippet = ''; switch (location) { case '仪表盘渲染 - JS第1850行': codeSnippet = `// 渲染仪表盘 function renderDashboard() { // 更新统计数据 updateStats(); // 渲染分类分布图表 renderCategoryChart(); // 渲染最近讨论 renderRecentDiscussions(); // 渲染提示词导航 renderPrompts(); }`; break; case '搜索功能 - JS第1500行': codeSnippet = `// 搜索功能 document.getElementById('search-input').addEventListener('input', debounce(() => { const searchTerm = document.getElementById('search-input').value.toLowerCase(); const discussions = getDiscussions(); const filteredDiscussions = discussions.filter(d => d.title.toLowerCase().includes(searchTerm) || d.subject.toLowerCase().includes(searchTerm) || d.topic.toLowerCase().includes(searchTerm) || (d.tags && d.tags.some(tag => tag.toLowerCase().includes(searchTerm))) ); // 渲染过滤后的讨论列表 renderFilteredDiscussions(filteredDiscussions); }, 300));`; break; case '内容块功能 - JS第1300行': codeSnippet = `// 添加内容块 function addContentBlock(type) { const id = document.getElementById('editor-view').dataset.id; const discussion = getDiscussions().find(d => d.id === id); if (!discussion) return; let block = { id: generateId(), type, order: discussion.contentBlocks.length }; switch (type) { case 'text': block.content = ''; break; case 'timeline': block.items = []; break; case 'decision': block.content = ''; block.status = 'pending'; break; case 'todo': block.items = []; break; } discussion.contentBlocks.push(block); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); // 重新渲染 renderContentBlocks(discussion.contentBlocks); }`; break; default: codeSnippet = `// ${location} // 这里是相关功能的实现代码 // 由于代码量较大,仅展示关键部分 // 完整代码请查看对应文件`; } snippet.innerHTML = `<pre><code>${codeSnippet}</code></pre>`; modal.classList.remove('hidden'); } // 切换主题 function toggleTheme() { const body = document.body; const icon = document.getElementById('theme-toggle').querySelector('i'); if (body.classList.contains('dark')) { body.classList.remove('dark'); icon.classList.remove('fa-sun-o'); icon.classList.add('fa-moon-o'); localStorage.setItem(STORAGE_KEYS.THEME, 'light'); } else { body.classList.add('dark'); icon.classList.remove('fa-moon-o'); icon.classList.add('fa-sun-o'); localStorage.setItem(STORAGE_KEYS.THEME, 'dark'); } } // ==================== 初始化 ==================== // 初始化应用 function initializeApp() { // 初始化基础表和结合表 if (!getData(STORAGE_KEYS.GROUP_HIERARCHY)) { initializeDataTables(); } // 加载统计数据 const stats = getData(STORAGE_KEYS.STATS); if (stats) { valueStats = stats; } // 加载主题 const theme = localStorage.getItem(STORAGE_KEYS.THEME); if (theme === 'dark') { document.body.classList.add('dark'); document.getElementById('theme-toggle').querySelector('i').classList.remove('fa-moon-o'); document.getElementById('theme-toggle').querySelector('i').classList.add('fa-sun-o'); } // 渲染分类 renderCategories(); // 渲染讨论列表 renderDiscussions(); // 渲染仪表盘 renderDashboard(); // 初始化表述处理功能 initializeExpressionProcessor(); // 初始化事件监听 initializeEventListeners(); // 显示欢迎视图 document.getElementById('welcome-view').classList.remove('hidden'); } // ==================== 表述处理模块 ==================== // 表述处理数据存储键 const EXPRESSION_KEYS = { RAW_EXPRESSIONS: 'discussMemo_rawExpressions', ANALYSIS_RESULTS: 'discussMemo_analysisResults', EXPRESSION_HISTORY: 'discussMemo_expressionHistory' }; // 初始化表述处理器 function initializeExpressionProcessor() { console.log('初始化表述处理系统...'); // 加载历史记录 loadExpressionHistory(); // 绑定事件监听器 bindExpressionEventListeners(); } // 绑定表述处理相关事件 function bindExpressionEventListeners() { // 运行分析按钮 document.getElementById('run-expression-analysis')?.addEventListener('click', runExpressionAnalysis); // 加载示例按钮 document.getElementById('load-example-btn')?.addEventListener('click', loadExampleExpression); // 保存表述按钮 document.getElementById('save-expression-btn')?.addEventListener('click', saveRawExpression); // 原始表述输入监听 document.getElementById('raw-expression-input')?.addEventListener('input', updateColumnPreview); } // 加载示例表述 function loadExampleExpression() { const exampleExpression = `内嵌式赋能/外挂式省力/中蕴式省心 学习/节约/安全 万向/千行/百业 通/性/量 通/别/藏 境/行/果 顿/渐/密`; document.getElementById('raw-expression-input').value = exampleExpression; updateColumnPreview(); showToast('已加载示例表述', 'success'); } // 更新7列结构预览 function updateColumnPreview() { const input = document.getElementById('raw-expression-input').value.trim(); const preview = document.getElementById('column-preview'); if (!input) { preview.innerHTML = ` <div class="text-center text-gray-500 py-8"> <i class="fa fa-eye text-2xl mb-2"></i> <p>输入原始表述后将显示结构预览</p> </div>`; return; } const lines = input.split('\n'); if (lines.length !== 3) { preview.innerHTML = ` <div class="text-center text-red-500 py-8"> <i class="fa fa-exclamation-triangle text-2xl mb-2"></i> <p>需要输入3行数据,当前${lines.length}行</p> </div>`; return; } // 解析7列数据 const columns = extractColumns(lines); let html = '<div class="space-y-2">'; for (let i = 0; i < 7; i++) { const columnName = getColumnName(i); const columnData = columns[i]; html += ` <div class="flex items-center space-x-2 p-2 bg-white rounded border"> <div class="w-16 text-xs font-medium text-gray-600">${columnName}</div> <div class="flex-1 text-sm font-mono">${columnData || '-'}</div> </div>`; } html += '</div>'; preview.innerHTML = html; } // 提取7列数据 function extractColumns(lines) { const columns = []; // 第1行:3列词组 const line1Items = lines[0].split(' '); columns[0] = line1Items[0] || ''; columns[1] = line1Items[1] || ''; columns[2] = line1Items[2] || ''; // 第2行:4列词组 const line2Items = lines[1].split(' '); columns[3] = line2Items[0] || ''; columns[4] = line2Items[1] || ''; columns[5] = line2Items[2] || ''; columns[6] = line2Items[3] || ''; return columns; } // 获取列名称 function getColumnName(index) { const names = ['第1列', '第2列', '第3列', '第4列', '第5列', '第6列', '第7列']; return names[index]; } // 运行表述分析 async function runExpressionAnalysis() { const input = document.getElementById('raw-expression-input').value.trim(); if (!input) { showToast('请输入原始表述', 'warning'); return; } showToast('正在分析表述...', 'info'); try { // 调用Python分析程序(这里先模拟结果) const analysisResult = await simulateExpressionAnalysis(input); // 显示分析结果 displayAnalysisResults(analysisResult); // 保存分析结果 saveAnalysisResult(analysisResult); showToast('分析完成!', 'success'); } catch (error) { console.error('分析失败:', error); showToast('分析失败,请检查输入格式', 'error'); } } // 模拟表述分析(后续可替换为真实Python调用) async function simulateExpressionAnalysis(input) { // 模拟处理时间 await new Promise(resolve => setTimeout(resolve, 1000)); const lines = input.split('\n'); const columns = extractColumns(lines); return { input: input, columns: columns, timestamp: new Date().toISOString(), results: { ternary: { name: '三元组(立名)', columns: [ { index: 0, content: columns[0], operation: '外立"服务"之名' }, { index: 1, content: columns[1], operation: '内立"管理"之名' }, { index: 2, content: columns[2], operation: '中立"组织"之名' } ] }, trichotomy: { name: '三分法(立法)', columns: [ { index: 3, content: columns[3], operation: '加成"器"' }, { index: 6, content: columns[6], operation: '减成"唯识论"' } ] }, trinity: { name: '三位一体(立向)', columns: [ { index: 4, content: columns[4], operation: '反破"圆"' }, { index: 5, content: columns[5], operation: '正破"不定"' } ] } }, validation: { structureValid: lines.length === 3, columnsComplete: columns.filter(c => c).length === 7, exclusivityValid: true, // 模拟验证通过 completeness: '85%' } }; } // 显示分析结果 function displayAnalysisResults(result) { // 显示三元组结果 const ternaryDiv = document.getElementById('ternary-results'); ternaryDiv.innerHTML = result.results.ternary.columns.map(col => ` <div class="p-2 bg-blue-50 rounded border-l-2 border-blue-400"> <div class="font-medium text-blue-800">第${col.index + 1}列</div> <div class="text-sm text-gray-700">${col.content}</div> <div class="text-xs text-blue-600 mt-1">${col.operation}</div> </div> `).join(''); // 显示三分法结果 const trichotomyDiv = document.getElementById('trichotomy-results'); trichotomyDiv.innerHTML = result.results.trichotomy.columns.map(col => ` <div class="p-2 bg-purple-50 rounded border-l-2 border-purple-400"> <div class="font-medium text-purple-800">第${col.index + 1}列</div> <div class="text-sm text-gray-700">${col.content}</div> <div class="text-xs text-purple-600 mt-1">${col.operation}</div> </div> `).join(''); // 显示三位一体结果 const trinityDiv = document.getElementById('trinity-results'); trinityDiv.innerHTML = result.results.trinity.columns.map(col => ` <div class="p-2 bg-green-50 rounded border-l-2 border-green-400"> <div class="font-medium text-green-800">第${col.index + 1}列</div> <div class="text-sm text-gray-700">${col.content}</div> <div class="text-xs text-green-600 mt-1">${col.operation}</div> </div> `).join(''); // 显示验证报告 const validationDiv = document.getElementById('validation-report'); validationDiv.innerHTML = ` <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div class="flex items-center space-x-2"> <i class="fa ${result.validation.structureValid ? 'fa-check-circle text-green-500' : 'fa-exclamation-circle text-red-500'}"></i> <span>结构验证:${result.validation.structureValid ? '通过' : '失败'}</span> </div> <div class="flex items-center space-x-2"> <i class="fa ${result.validation.columnsComplete ? 'fa-check-circle text-green-500' : 'fa-exclamation-circle text-red-500'}"></i> <span>列完整性:${result.validation.columnsComplete ? '通过' : '失败'}</span> </div> <div class="flex items-center space-x-2"> <i class="fa ${result.validation.exclusivityValid ? 'fa-check-circle text-green-500' : 'fa-exclamation-circle text-red-500'}"></i> <span>排他性验证:${result.validation.exclusivityValid ? '通过' : '失败'}</span> </div> <div class="flex items-center space-x-2"> <i class="fa fa-info-circle text-blue-500"></i> <span>完整度:${result.validation.completeness}</span> </div> </div> <div class="mt-3 p-3 bg-gray-50 rounded"> <div class="text-sm font-medium text-gray-700 mb-1">分析时间</div> <div class="text-xs text-gray-600">${new Date(result.timestamp).toLocaleString()}</div> </div> `; } // 保存原始表述 function saveRawExpression() { const input = document.getElementById('raw-expression-input').value.trim(); if (!input) { showToast('请输入原始表述', 'warning'); return; } const expressions = JSON.parse(localStorage.getItem(EXPRESSION_KEYS.RAW_EXPRESSIONS) || '[]'); expressions.push({ id: generateId(), content: input, timestamp: new Date().toISOString() }); localStorage.setItem(EXPRESSION_KEYS.RAW_EXPRESSIONS, JSON.stringify(expressions)); showToast('表述已保存', 'success'); } // 保存分析结果 function saveAnalysisResult(result) { const results = JSON.parse(localStorage.getItem(EXPRESSION_KEYS.ANALYSIS_RESULTS) || '[]'); results.unshift(result); // 添加到开头 // 最多保存20个结果 if (results.length > 20) { results.splice(20); } localStorage.setItem(EXPRESSION_KEYS.ANALYSIS_RESULTS, JSON.stringify(results)); // 更新历史记录显示 loadExpressionHistory(); } // 加载历史记录 function loadExpressionHistory() { const historyDiv = document.getElementById('expression-history'); const results = JSON.parse(localStorage.getItem(EXPRESSION_KEYS.ANALYSIS_RESULTS) || '[]'); if (results.length === 0) { historyDiv.innerHTML = ` <div class="text-center text-gray-500 py-4"> <i class="fa fa-inbox text-xl mb-2"></i> <p class="text-sm">暂无历史记录</p> </div>`; return; } historyDiv.innerHTML = results.slice(0, 5).map((result, index) => ` <div class="flex items-center justify-between p-3 bg-gray-50 rounded hover:bg-gray-100 transition-colors cursor-pointer" onclick="loadHistoryResult(${index})"> <div class="flex-1"> <div class="text-sm font-medium text-gray-800">分析记录 #${index + 1}</div> <div class="text-xs text-gray-600">${new Date(result.timestamp).toLocaleString()}</div> </div> <div class="text-xs bg-universal text-white px-2 py-1 rounded"> 完整度: ${result.validation.completeness} </div> </div> `).join(''); } // 加载历史结果 window.loadHistoryResult = function(index) { const results = JSON.parse(localStorage.getItem(EXPRESSION_KEYS.ANALYSIS_RESULTS) || '[]'); const result = results[index]; if (result) { document.getElementById('raw-expression-input').value = result.input; updateColumnPreview(); displayAnalysisResults(result); // 切换到表述处理标签页 showTab('expression'); showToast('已加载历史分析结果', 'success'); } }; // ========== 整体设计核心架构 ========== // 三层嵌套设计概念词汇表 const CORE_CONCEPTS = { // 三层嵌套结构 {[()]} ARCHITECTURE: { // 外层:软件包和软件架构 PACKAGE: { name: "软件包 (Software Package)", description: "完整系统的容器化架构", layers: ["内嵌式赋能", "外挂式省力", "中蕴式省心"] }, // 中层:指令集架构 INSTRUCTION: { name: "指令集架构 (Instruction Set Architecture)", description: "系统操作的核心指令集", commands: ["明言-析取", "暗示-合取", "隐喻-双取"] }, // 内层:三套提示词系统 PROMPTS: { name: "提示词系统 (Prompt System)", description: "符号学显式表达的三个维度", dimensions: { explicit: "明言 - 析取提示词", implicit: "暗示 - 合取关键词", metaphorical: "隐喻 - 双取主题词" } } }, // PIN结符号学架构 PIN_STRUCTURE: { // 理科:PIN结括号设备 SCIENCE: { name: "PIN结括号设备", domain: "理科", properties: ["力学性", "数学性"], principle: "共存唯一,共生的自然双重决定论基础", features: ["存在出双入对", "媒介性mediating"] }, // 工科:PIN节工具箱 ENGINEERING: { name: "PIN节工具箱", domain: "工科", properties: ["经验常识", "科学方法"], principle: "互补同一,共长的因果逻辑决定论", features: ["两种形式配对", "meaning和purpose相关性relative"] }, // 文科:"拼"块仪表盘 LIBERAL_ARTS: { name: "拼块仪表盘", domain: "文科", properties: ["两种独立性", "对立统一"], principle: "共情的现实认识决定论", features: ["三个概念对子", "structure/definition/dictionary独立性"] } }, // 三套提示词详细定义 PROMPT_SYSTEMS: { // 1. 明言 - 析取提示词 EXPLICIT_PROMPT: { name: "明言 - 析取提示词", system: "显式表达的表述体系 - 现代符号学", dimensions: { grammar: { name: "语法 (Grammar)", target: "适应专有名词 proper names (post)", types: ["纯粹文法", "构式文法"], application: "功能hover提示(语义表述,应用因子命名法)" }, pragmatics: { name: "语用 (Pragmatics)", target: "适用普通单词", types: ["纯粹逻辑", "形式逻辑"], application: "能力cover提示(语用表格,系统框架因素分类学)" }, semantics: { name: "语义 (Semantics)", target: "过程适配一般代词和术语体系", types: ["纯粹修辞", "认知语义"], application: "性能gover提示(语法表示,格架软件架构元素)" } } }, // 2. 暗示 - 合取关键词 IMPLICIT_KEYWORD: { name: "暗示 - 合取关键词", system: "心流-因果-现实的三个维度", dimensions: { mind: { name: "心动证明程序", principle: "心流(中心先'动')-语言模型", level: "概念认知层" }, motion: { name: "运动轨迹函数", principle: "溢出(顶部先'活')-因果数据", level: "数据处理层" }, action: { name: "行动角色谓词", principle: "涌现(根部先'生')-现实自然涌现", level: "现实操作层" } }, components: { causal: { name: "因果层", type: "形容词 - 纯粹修辞 - 概念适配", count: 2 }, dynamic: { name: "动态组织社区", type: "名词 - 纯粹文法 - 存在适应", count: 3 }, functional: { name: "内在功能模块", type: "动词 - 纯粹形式 - 逻辑合适", count: 2 } } }, // 3. 隐喻 - 双取主取主题词 METAPHORICAL_THEME: { name: "隐喻 - 双取主取主题词", system: "顶级公理体系的依存关系", dimensions: { axiom: { name: "顶级公理", focus: "集合元素依存", level: "抽象元层" }, method: { name: "根本方法", focus: "作用机制", level: "实现方法层" }, assertion: { name: "初始断言", focus: "范畴元件约束", level: "具体应用层" } } } }, // 三层价值表达 VALUE_EXPRESSIONS: { embedded: { name: "内嵌式赋能 - 学习", scope: "万向 通 - 通 境 顿", keywords: ["学习", "引导", "提示", "洞察", "启发"] }, external: { name: "外挂式省力 - 节约", scope: "千行 别 - 性 行 渐", keywords: ["省力", "快捷", "自动", "总结", "效率"] }, internal: { name: "中蕴式省心 - 安全", scope: "百业 藏 - 量 果 密", keywords: ["安全", "可靠", "保护", "存储", "备份"] } }, // Requirements-Demands配置层(不变部分) REQUIREMENTS_DEMANDS_CONFIG: { // 外部使用者需求Requirements(固定选项) REQUIREMENTS: { // 文档系统需求 documentSystem: { name: "文档系统需求", description: "用户对文档管理的固定期望选项", options: { structure: { name: "结构化选项", features: ["层次化组织", "自动编号", "交叉引用", "版本控制"], selections: ["简单列表", "层级目录", "网络结构", "混合模式"] }, template: { name: "模板化选项", features: ["预设模板", "自定义模板", "模板继承", "模板组合"], selections: ["会议记录", "项目文档", "研究报告", "决策文档", "个人笔记"] }, collaboration: { name: "协作选项", features: ["多人协作", "权限控制", "评论系统", "变更追踪"], selections: ["个人使用", "小团队协作", "部门协作", "跨部门协作"] } } }, // 对象系统需求 objectSystem: { name: "对象系统需求", description: "用户对数据对象的固定期望选项", options: { entity: { name: "实体定义选项", features: ["实体类型", "属性定义", "关系建模", "约束规则"], selections: ["简单实体", "复合实体", "动态实体", "继承实体"] }, relationship: { name: "关系映射选项", features: ["关系类型", "关联强度", "方向性", "传递规则"], selections: ["一对一", "一对多", "多对多", "网络关系"] }, validation: { name: "验证选项", features: ["数据校验", "业务规则", "完整性约束", "一致性检查"], selections: ["基础验证", "业务验证", "跨系统验证", "实时验证"] } } }, // 表格系统需求 tableSystem: { name: "表格系统需求", description: "用户对表格处理的固定期望选项", options: { format: { name: "格式选项", features: ["字段类型", "格式标准", "显示样式", "导出格式"], selections: ["简单表格", "复杂表格", "动态表格", "混合格式"] }, processing: { name: "处理选项", features: ["数据计算", "统计分析", "图表生成", "报表输出"], selections: ["基础计算", "统计分析", "预测分析", "智能分析"] }, integration: { name: "集成选项", features: ["数据导入", "实时同步", "API接口", "第三方集成"], selections: ["本地处理", "云端同步", "混合模式", "完全集成"] } } } }, // 内部实现要求Demands(固定方法论) DEMANDS: { // 拼语言三层指令架构 instructionArchitecture: { name: "拼语言三层指令架构", description: "实现用户需求的核心方法论框架", layers: { topLevel: { name: "顶层Pin语言通用模型", instruction: "assemble指令", purpose: "结论把握和整体组装", features: ["语法解析", "语义理解", "逻辑推理", "结果组装"] }, middleLevel: { name: "中层自定义专用模型配置", instruction: "summarize指令", purpose: "结果谓词和总结归纳", features: ["特征提取", "模式识别", "知识归纳", "结果总结"] }, bottomLevel: { name: "底层配置内容处理", instruction: "converge指令", purpose: "原因命题和汇聚处理", features: ["数据收集", "信息过滤", "事实验证", "逻辑汇聚"] } } }, // 2+1数据体系方法论 dataSystemMethodology: { name: "2+1数据体系方法论", description: "支撑所有数据处理的基础架构方法", tables: { basicTable1: { name: "基础表1:分组层次表", structure: { external: ["内嵌式赋能", "外挂式省力", "中蕴式省心"], internal: ["学习", "节约", "安全"], neutral: ["万向", "千行", "百业"] }, purpose: "系统的分组管理和层次结构" }, basicTable2: { name: "基础表2:直连维度表", structure: { embedded: ["学习", "万向", "通", "境", "顿"], external: ["节约", "千行", "别", "行", "渐"], internal: ["安全", "百业", "藏", "量", "果", "密"] }, purpose: "功能维度的直接关联" }, jointTable: { name: "结合表:索引表", structure: { content: ["内嵌式赋能", "学习", "万向", "通", "境", "顿"], logic: ["外挂式省力", "节约", "千行", "别", "行", "渐"], dictionary: ["中蕴式省心", "安全", "百业", "藏", "量", "果", "密"] }, purpose: "内容项、逻辑项、字典项的统一索引" } } }, // 三个同行人协同方法论 companionsMethodology: { name: "三个同行人协同方法论", description: "动态记录过程的协同工作方法", companions: { memorandum: { name: "备忘录系统", purpose: "个人知识库,原料仪表盘", workflow: ["快速记录", "思维导图", "假设验证", "个人洞察"], dynamics: "随个人理解加深而更新" }, notebook: { name: "笔记本系统", purpose: "分析工具箱,加工日志集合", workflow: ["讨论分析", "知识加工", "执行支持", "过程追踪"], dynamics: "随讨论进展而丰富" }, logTable: { name: "日志表系统", purpose: "共享知识库,成品标记包", workflow: ["决策日志", "进展记录", "状态标记", "共识追踪"], dynamics: "随团队协作而完善" } }, collaborationRules: { statusMapping: { "✅ 已共识": "进入共享知识库", "🔄 讨论中": "在笔记本系统活跃", "⏳ 待讨论": "在备忘录系统等待", "❓ 有疑问": "需要三个系统协同验证", "⚠️ 有分歧": "在笔记本系统分析处理" }, dataFlow: { "个人理解": "→ 备忘录 → 笔记本分析 → 日志表记录", "团队讨论": "→ 笔记本处理 → 备忘录补充 → 日志表更新", "达成共识": "→ 日志表标记 → 笔记本总结 → 备忘录归档" } } } }, // 配置引导规则(Requirements到Demands的映射) CONFIG_MAPPING_RULES: { // 文档系统需求映射 documentSystemMapping: { "结构化选项": { "简单列表": "底层converge指令 + 基础表1分组", "层级目录": "中层summarize指令 + 基础表2维度", "网络结构": "顶层assemble指令 + 结合表索引", "混合模式": "三层指令 + 2+1数据体系" }, "模板化选项": { "会议记录": "笔记本分析工具 + 日志表状态追踪", "项目文档": "备忘录项目管理 + 笔记本执行支持", "研究报告": "三个同行人协同 + 拼语言三层架构", "决策文档": "共识状态映射 + 团队协作方法论", "个人笔记": "备忘录个人洞察 + 快速记录工作流" } }, // 对象系统需求映射 objectSystemMapping: { "实体定义选项": { "简单实体": "基础表1实体管理 + 底层数据汇聚", "复合实体": "基础表2关联维度 + 中层特征提取", "动态实体": "结合表索引管理 + 顶层逻辑推理", "继承实体": "2+1数据体系 + 三层指令协同" } }, // 表格系统需求映射 tableSystemMapping: { "处理选项": { "基础计算": "底层converge数据处理 + 基础表统计", "统计分析": "中层summarize归纳 + 基础表2分析", "预测分析": "顶层assemble推理 + 结合表智能", "智能分析": "拼语言三层架构 + AI辅助处理" } } }, // 配置验证规则 VALIDATION_RULES: { consistency: "确保选择的requirements选项映射到正确的demands方法论", completeness: "验证所有必要的方法论组件都已配置", compatibility: "检查不同需求选项的方法论兼容性", scalability: "确保配置支持系统扩展和演化" } }, // 三层次动态记录体系(修正后) DYNAMIC_RECORDING_SYSTEM: { // 第一层次:文档模型层 DOCUMENT_MODEL: { name: "文档模型层", description: "结构化文档的元数据定义和模板系统", dimensions: { structural: { name: "结构维度", elements: ["标题", "目录", "章节", "段落", "注释"], features: ["层次化组织", "自动编号", "交叉引用", "版本控制"] }, semantic: { name: "语义维度", elements: ["关键词", "标签", "分类", "主题", "实体"], features: ["语义标注", "关系映射", "概念网络", "知识图谱"] }, temporal: { name: "时序维度", elements: ["创建时间", "修改时间", "版本历史", "时间轴", "里程碑"], features: ["时间追踪", "变更记录", "历史对比", "时间线可视化"] } }, templates: { meeting: "会议记录模板", project: "项目文档模板", research: "研究报告模板", decision: "决策文档模板", knowledge: "知识整理模板" } }, // 第二层次:知识管理层 KNOWLEDGE_MANAGEMENT: { name: "知识管理层", description: "知识的组织、检索、关联和演化系统", dimensions: { organization: { name: "知识组织", methods: ["分类法", "标签法", "网络图", "层次结构", "主题地图"], features: ["智能分类", "自动标签", "关联发现", "知识聚类"] }, retrieval: { name: "知识检索", methods: ["全文搜索", "语义搜索", "关联搜索", "推荐系统", "问答系统"], features: ["模糊匹配", "智能推荐", "上下文理解", "多模态检索"] }, evolution: { name: "知识演化", methods: ["版本管理", "更新追踪", "冲突解决", "协作编辑", "知识更新"], features: ["变更检测", "智能合并", "冲突预警", "协作机制"] } }, analytics: { metrics: ["知识覆盖率", "信息密度", "关联强度", "更新频率", "使用热度"], visualizations: ["知识地图", "关系网络图", "热力图", "趋势图", "统计仪表盘"] } }, // 第三层次:动态应用层 DYNAMIC_APPLICATION: { name: "动态应用层", description: "智能化的知识应用和价值创造系统", dimensions: { intelligence: { name: "智能处理", capabilities: ["自动摘要", "情感分析", "主题提取", "关系挖掘", "预测分析"], features: ["AI辅助", "智能推荐", "自动化处理", "模式识别"] }, collaboration: { name: "协作应用", capabilities: ["多人协作", "实时同步", "评论讨论", "任务分配", "进度跟踪"], features: ["团队协作", "版本控制", "权限管理", "通知系统"] }, personalization: { name: "个性化服务", capabilities: ["用户画像", "偏好学习", "习惯分析", "需求预测", "定制界面"], features: ["个性化推荐", "智能提醒", "习惯养成", "效率优化"] } }, automation: { workflows: ["自动分类", "智能归档", "定期总结", "提醒通知", "报告生成"], triggers: ["时间触发", "事件触发", "条件触发", "手动触发"], actions: ["数据处理", "内容生成", "消息发送", "状态更新", "界面更新"] } } } }; // ==================== 三层次动态记录体系功能 ==================== // 获取文档模型配置 function getDocumentModelConfig() { return CORE_CONCEPTS.DYNAMIC_RECORDING_SYSTEM.DOCUMENT_MODEL; } // 获取知识管理配置 function getKnowledgeManagementConfig() { return CORE_CONCEPTS.DYNAMIC_RECORDING_SYSTEM.KNOWLEDGE_MANAGEMENT; } // 获取动态应用配置 function getDynamicApplicationConfig() { return CORE_CONCEPTS.DYNAMIC_RECORDING_SYSTEM.DYNAMIC_APPLICATION; } // 渲染三层次动态记录体系仪表盘(基于原文修正) function renderDynamicRecordingDashboard() { const discussions = getDiscussions(); // 计算第一层:个人知识库(备忘录系统) const personalMemosCount = discussions.filter(d => d.category && (d.category.includes('personal') || d.category.includes('thought')) ).length; const hypothesesCount = discussions.filter(d => d.tags && d.tags.some(tag => ['假设', 'hypothesis', '猜想'].includes(tag)) ).length; const insightsCount = discussions.filter(d => d.summary && d.summary.includes('洞察') && d.summary.length > 30 ).length; // 更新个人知识库显示 document.getElementById('personal-memos-count').textContent = personalMemosCount; document.getElementById('hypotheses-count').textContent = hypothesesCount; document.getElementById('insights-count').textContent = insightsCount; // 计算第二层:共享知识库(记录系统) const decisionLogsCount = discussions.filter(d => d.contentBlocks && d.contentBlocks.some(block => block.type === 'decision') ).length; const consensusRecordsCount = discussions.filter(d => d.tags && d.tags.some(tag => ['共识', 'consensus', ' agreed'].includes(tag)) ).length; const statusMarkersCount = discussions.filter(d => d.contentBlocks && d.contentBlocks.some(block => block.type === 'todo' && block.items && block.items.length > 0 ) ).length; // 更新共享知识库显示 document.getElementById('decision-logs-count').textContent = decisionLogsCount; document.getElementById('consensus-records-count').textContent = consensusRecordsCount; document.getElementById('status-markers-count').textContent = statusMarkersCount; // 计算第三层:笔记系统(日志系统) const processingLogsCount = Math.floor(discussions.length * 0.7); // 模拟加工日志 const analysisToolsCount = discussions.filter(d => d.summary && (d.summary.includes('分析') || d.summary.includes('总结')) ).length; const workflowLogsCount = Math.floor(discussions.length * 0.5); // 模拟工作流日志 // 更新笔记系统显示 document.getElementById('processing-logs-count').textContent = processingLogsCount; document.getElementById('analysis-tools-count').textContent = analysisToolsCount; document.getElementById('workflow-logs-count').textContent = workflowLogsCount; } // 应用文档模型模板 function applyDocumentTemplate(templateId, discussionId) { const discussion = getDiscussions().find(d => d.id === discussionId); if (!discussion) return; const template = getDocumentModelConfig().templates[templateId]; if (!template) return; let templateContent = {}; switch (templateId) { case 'meeting': templateContent = { title: '会议记录', contentBlocks: [ { type: 'text', content: '## 会议基本信息\n**时间:** \n**地点:** \n**参会人员:** ' }, { type: 'text', content: '## 会议议程' }, { type: 'timeline', content: '## 讨论要点' }, { type: 'decision', content: '## 会议决议' }, { type: 'todo', content: '## 行动计划', items: [] } ] }; break; case 'project': templateContent = { title: '项目文档', contentBlocks: [ { type: 'text', content: '## 项目概述\n**项目名称:** \n**项目负责人:** \n**起止时间:** ' }, { type: 'text', content: '## 项目目标' }, { type: 'text', content: '## 技术方案' }, { type: 'todo', content: '## 项目计划', items: [] }, { type: 'decision', content: '## 里程碑' } ] }; break; case 'research': templateContent = { title: '研究报告', contentBlocks: [ { type: 'text', content: '## 研究背景\n**研究领域:** \n**研究问题:** ' }, { type: 'text', content: '## 文献综述' }, { type: 'text', content: '## 研究方法' }, { type: 'text', content: '## 研究发现' }, { type: 'decision', content: '## 结论与建议' } ] }; break; case 'decision': templateContent = { title: '决策文档', contentBlocks: [ { type: 'text', content: '## 决策背景\n**决策时间:** \n**决策者:** ' }, { type: 'text', content: '## 问题分析' }, { type: 'text', content: '## 备选方案' }, { type: 'decision', content: '## 最终决策' }, { type: 'todo', content: '## 实施计划', items: [] } ] }; break; case 'knowledge': templateContent = { title: '知识整理', contentBlocks: [ { type: 'text', content: '## 知识领域\n**分类:** \n**关键词:** ' }, { type: 'text', content: '## 核心概念' }, { type: 'text', content: '## 知识结构' }, { type: 'text', content: '## 应用场景' }, { type: 'text', content: '## 相关资源' } ] }; break; } // 应用模板到讨论 Object.assign(discussion, templateContent); discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); showToast(`已应用${template}模板`, 'success'); } // 执行知识分析 function performKnowledgeAnalysis(discussionId) { const discussion = getDiscussions().find(d => d.id === discussionId); if (!discussion) return; const analysis = { semanticDensity: 0, keywordCount: discussion.subject ? discussion.subject.split(/\s+/).length : 0, contentLength: discussion.contentBlocks ? discussion.contentBlocks.length : 0, lastUpdated: discussion.updatedAt, complexity: 'medium' }; // 计算语义密度 const allText = discussion.contentBlocks ? discussion.contentBlocks.map(block => block.content || '').join(' ') : ''; analysis.semanticDensity = analysis.keywordCount / Math.max(allText.length / 100, 1); // 计算复杂度 if (analysis.contentLength > 10) analysis.complexity = 'high'; else if (analysis.contentLength < 3) analysis.complexity = 'low'; return analysis; } // 启动智能工作流 function startIntelligentWorkflow(workflowType, discussionId) { const config = getDynamicApplicationConfig(); const workflow = config.automation.workflows.find(w => w.includes(workflowType)); if (!workflow) return; switch (workflowType) { case 'auto分类': autoClassifyDiscussion(discussionId); break; case '智能归档': smartArchiveDiscussion(discussionId); break; case '定期总结': generatePeriodicSummary(discussionId); break; case '提醒通知': scheduleReminder(discussionId); break; case '报告生成': generateReport(discussionId); break; } showToast(`已启动${workflow}工作流`, 'success'); } // 自动分类讨论 function autoClassifyDiscussion(discussionId) { const discussion = getDiscussions().find(d => d.id === discussionId); if (!discussion) return; // 简单的自动分类逻辑 const content = (discussion.title + ' ' + discussion.subject).toLowerCase(); const keywords = { 'embedded-universal': ['学习', '培训', '教程', '指南', '入门'], 'external-industry': ['工具', '效率', '优化', '自动化', '流程'], 'internal-business': ['安全', '备份', '存储', '保护', '管理'] }; let bestMatch = ''; let maxScore = 0; for (const [categoryId, words] of Object.entries(keywords)) { const score = words.reduce((sum, word) => { return sum + (content.includes(word) ? 1 : 0); }, 0); if (score > maxScore) { maxScore = score; bestMatch = categoryId; } } if (bestMatch && maxScore > 0) { discussion.category = bestMatch; discussion.updatedAt = new Date().toISOString(); saveDiscussion(discussion); } } // 智能归档讨论 function smartArchiveDiscussion(discussionId) { const discussion = getDiscussions().find(d => d.id === discussionId); if (!discussion) return; // 检查讨论是否满足归档条件 const daysSinceUpdate = (Date.now() - new Date(discussion.updatedAt).getTime()) / (1000 * 60 * 60 * 24); const hasCompletedTodos = discussion.contentBlocks && discussion.contentBlocks.some(block => block.type === 'todo' && block.items && block.items.every(item => item.completed) ); if (daysSinceUpdate > 30 && hasCompletedTodos) { discussion.archived = true; discussion.archivedAt = new Date().toISOString(); saveDiscussion(discussion); showToast('讨论已智能归档', 'success'); } } // 生成定期总结 function generatePeriodicSummary(discussionId) { const discussion = getDiscussions().find(d => d.id === discussionId); if (!discussion) return; let summary = { decisions: [], todos: [], keyPoints: [] }; // 提取关键信息 if (discussion.contentBlocks) { discussion.contentBlocks.forEach(block => { if (block.type === 'decision' && block.content) { summary.decisions.push(block.content); } else if (block.type === 'todo' && block.items) { summary.todos.push(...block.items.filter(item => !item.completed).map(item => item.text)); } else if (block.type === 'text' && block.content) { // 简单提取关键点 const sentences = block.content.split(/[。!?]/); summary.keyPoints.push(...sentences.filter(s => s.length > 10).slice(0, 3)); } }); } // 保存总结 discussion.autoSummary = summary; discussion.lastSummaryAt = new Date().toISOString(); saveDiscussion(discussion); return summary; } // 渲染三层次动态记录体系仪表盘 function renderDynamicRecordingDashboard() { const container = document.getElementById('dynamic-recording-dashboard'); if (!container) return; const discussions = getDiscussions(); const docModel = getDocumentModelConfig(); const knowledgeMgmt = getKnowledgeManagementConfig(); const dynamicApp = getDynamicApplicationConfig(); // 计算各层次的统计数据 const stats = { documentModel: { totalTemplates: Object.keys(docModel.templates).length, structuredDocs: discussions.filter(d => d.contentBlocks && d.contentBlocks.length > 0).length, avgContentLength: discussions.reduce((sum, d) => sum + (d.contentBlocks ? d.contentBlocks.length : 0), 0) / discussions.length }, knowledgeManagement: { totalCategories: getCategories().length, totalTags: [...new Set(discussions.flatMap(d => d.tags || []))].length, avgKeywords: discussions.reduce((sum, d) => sum + (d.subject ? d.subject.split(/\s+/).length : 0), 0) / discussions.length }, dynamicApplication: { automatedActions: 0, // 这里可以从配置中获取实际的自动化操作数量 intelligentFeatures: 3, // AI辅助、智能推荐、自动化处理 personalizationLevel: 'medium' } }; // 渲染仪表盘内容 container.innerHTML = ` <div class="grid grid-cols-1 md:grid-cols-3 gap-6"> <!-- 文档模型层统计 --> <div class="bg-white rounded-lg p-6 border border-orange-200"> <h4 class="font-medium text-orange-800 mb-4">文档模型层</h4> <div class="space-y-3"> <div class="flex justify-between"> <span class="text-sm text-gray-600">可用模板</span> <span class="font-medium">${stats.documentModel.totalTemplates}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">结构化文档</span> <span class="font-medium">${stats.documentModel.structuredDocs}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">平均内容长度</span> <span class="font-medium">${stats.documentModel.avgContentLength.toFixed(1)}</span> </div> </div> </div> <!-- 知识管理层统计 --> <div class="bg-white rounded-lg p-6 border border-teal-200"> <h4 class="font-medium text-teal-800 mb-4">知识管理层</h4> <div class="space-y-3"> <div class="flex justify-between"> <span class="text-sm text-gray-600">分类数量</span> <span class="font-medium">${stats.knowledgeManagement.totalCategories}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">标签总数</span> <span class="font-medium">${stats.knowledgeManagement.totalTags}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">平均关键词</span> <span class="font-medium">${stats.knowledgeManagement.avgKeywords.toFixed(1)}</span> </div> </div> </div> <!-- 动态应用层统计 --> <div class="bg-white rounded-lg p-6 border border-indigo-200"> <h4 class="font-medium text-indigo-800 mb-4">动态应用层</h4> <div class="space-y-3"> <div class="flex justify-between"> <span class="text-sm text-gray-600">自动化操作</span> <span class="font-medium">${stats.dynamicApplication.automatedActions}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">智能特性</span> <span class="font-medium">${stats.dynamicApplication.intelligentFeatures}</span> </div> <div class="flex justify-between"> <span class="text-sm text-gray-600">个性化程度</span> <span class="font-medium">${stats.dynamicApplication.personalizationLevel}</span> </div> </div> </div> </div> `; } // 三层次动态记录体系事件处理(基于原文修正) document.addEventListener('DOMContentLoaded', () => { // 刷新三层次体系数据 document.getElementById('refresh-recording-system-btn')?.addEventListener('click', () => { renderDynamicRecordingDashboard(); showToast('三层次动态记录体系数据已刷新', 'success'); }); // 三层次体系功能按钮事件 document.querySelectorAll('.recording-system-btn').forEach(btn => { btn.addEventListener('click', () => { const action = btn.dataset.action; switch(action) { case 'personal-memo': showPersonalMemoCreator(); break; case 'team-consensus': showTeamConsensusRecorder(); break; case 'process-log': showKnowledgeProcessor(); break; default: showToast('功能开发中...', 'info'); } }); }); }); // 显示个人备忘创建器(第一层:备忘录系统) function showPersonalMemoCreator() { const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-2xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">创建个人备忘(原料仪表盘)</h3> <p class="text-sm text-gray-600 mt-1">记录个人主观理解和记忆,随理解加深而更新</p> </div> <div class="p-6"> <div class="space-y-4"> <div> <label class="block text-sm font-medium text-gray-700 mb-2">备忘类型</label> <select class="w-full border border-gray-300 rounded-md px-3 py-2"> <option value="personal-memo">个人备忘</option> <option value="hypothesis">待验证假设</option> <option value="insight">个人洞察</option> </select> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">快速记录</label> <textarea rows="4" placeholder="记录你的想法、灵感或假设..." class="w-full border border-gray-300 rounded-md px-3 py-2"></textarea> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">关联标签</label> <input type="text" placeholder="输入相关标签..." class="w-full border border-gray-300 rounded-md px-3 py-2"> </div> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 mr-2">取消</button> <button class="px-4 py-2 bg-orange-500 text-white rounded-lg hover:bg-orange-600">保存备忘</button> </div> </div> `; document.body.appendChild(modal); modal.querySelector('.bg-gray-100').addEventListener('click', () => { document.body.removeChild(modal); }); modal.querySelector('.bg-orange-500').addEventListener('click', () => { showToast('个人备忘已保存到知识库', 'success'); document.body.removeChild(modal); renderDynamicRecordingDashboard(); }); } // 显示团队共识记录器(第二层:记录系统) function showTeamConsensusRecorder() { const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-2xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">记录团队共识(成品标记包)</h3> <p class="text-sm text-gray-600 mt-1">记录团队客观共识和决定,随讨论进展而补充</p> </div> <div class="p-6"> <div class="space-y-4"> <div> <label class="block text-sm font-medium text-gray-700 mb-2">记录类型</label> <select class="w-full border border-gray-300 rounded-md px-3 py-2"> <option value="decision-log">决策日志</option> <option value="consensus-record">共识记录</option> <option value="status-marker">状态标记</option> </select> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">共识内容</label> <textarea rows="4" placeholder="记录团队达成的共识或决策..." class="w-full border border-gray-300 rounded-md px-3 py-2"></textarea> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">参与者</label> <input type="text" placeholder="输入参与者名称,用逗号分隔..." class="w-full border border-gray-300 rounded-md px-3 py-2"> </div> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 mr-2">取消</button> <button class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600">记录共识</button> </div> </div> `; document.body.appendChild(modal); modal.querySelector('.bg-gray-100').addEventListener('click', () => { document.body.removeChild(modal); }); modal.querySelector('.bg-blue-500').addEventListener('click', () => { showToast('团队共识已记录到共享知识库', 'success'); document.body.removeChild(modal); renderDynamicRecordingDashboard(); }); } // 显示知识处理器(第三层:日志系统) function showKnowledgeProcessor() { const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-2xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">知识加工分析(分析工具箱)</h3> <p class="text-sm text-gray-600 mt-1">启动知识加工和分析工具,随状态变化而追加日志</p> </div> <div class="p-6"> <div class="space-y-4"> <div> <label class="block text-sm font-medium text-gray-700 mb-2">分析工具</label> <select class="w-full border border-gray-300 rounded-md px-3 py-2"> <option value="consensus-detector">共识检测器</option> <option value="pattern-recognizer">模式识别器</option> <option value="efficiency-analyzer">效率分析器</option> </select> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">加工对象</label> <textarea rows="4" placeholder="选择要分析的讨论或内容..." class="w-full border border-gray-300 rounded-md px-3 py-2"></textarea> </div> <div> <label class="block text-sm font-medium text-gray-700 mb-2">处理日志</label> <div class="bg-gray-50 p-3 rounded-md text-sm text-gray-600 min-h-[80px]"> 系统将自动记录加工过程和结果... </div> </div> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 mr-2">取消</button> <button class="px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600">开始加工</button> </div> </div> `; document.body.appendChild(modal); modal.querySelector('.bg-gray-100').addEventListener('click', () => { document.body.removeChild(modal); }); modal.querySelector('.bg-green-500').addEventListener('click', () => { showToast('知识加工已启动,日志将自动追加', 'success'); document.body.removeChild(modal); renderDynamicRecordingDashboard(); }); } // 显示文档模板选择器 function showDocumentTemplateSelector() { const templates = getDocumentModelConfig().templates; const templateList = Object.keys(templates).map(key => `<option value="${key}">${templates[key].name}</option>` ).join(''); const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-md mx-4"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">选择文档模板</h3> </div> <div class="p-6"> <div class="mb-4"> <label class="block text-sm font-medium text-gray-700 mb-2">模板类型</label> <select id="template-select" class="w-full border border-gray-300 rounded-md px-3 py-2"> ${templateList} </select> </div> <div class="mb-4"> <label class="block text-sm font-medium text-gray-700 mb-2">应用到讨论</label> <select id="discussion-select" class="w-full border border-gray-300 rounded-md px-3 py-2"> <option value="">创建新讨论</option> ${getDiscussions().map(d => `<option value="${d.id}">${d.title}</option>` ).join('')} </select> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button id="cancel-template" class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 mr-2">取消</button> <button id="apply-template" class="px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-dark">应用模板</button> </div> </div> `; document.body.appendChild(modal); // 事件处理 modal.querySelector('#cancel-template').addEventListener('click', () => { document.body.removeChild(modal); }); modal.querySelector('#apply-template').addEventListener('click', () => { const templateId = modal.querySelector('#template-select').value; const discussionId = modal.querySelector('#discussion-select').value; if (templateId) { if (discussionId) { applyDocumentTemplate(templateId, discussionId); } else { // 创建新讨论 createNewDiscussionWithTemplate(templateId); } showToast('文档模板已应用', 'success'); document.body.removeChild(modal); } }); } // 执行知识分析 function performKnowledgeAnalysis() { const discussions = getDiscussions(); const analysis = { totalDiscussions: discussions.length, categories: {}, tags: {}, contentBlocks: { text: 0, timeline: 0, decision: 0, todo: 0 }, timeDistribution: {} }; discussions.forEach(d => { // 分类统计 analysis.categories[d.category] = (analysis.categories[d.category] || 0) + 1; // 标签统计 if (d.tags) { d.tags.forEach(tag => { analysis.tags[tag] = (analysis.tags[tag] || 0) + 1; }); } // 内容块统计 if (d.contentBlocks) { d.contentBlocks.forEach(block => { analysis.contentBlocks[block.type] = (analysis.contentBlocks[block.type] || 0) + 1; }); } // 时间分布统计 const month = new Date(d.createdAt).toLocaleDateString('zh-CN', { year: 'numeric', month: 'short' }); analysis.timeDistribution[month] = (analysis.timeDistribution[month] || 0) + 1; }); // 显示分析结果 showKnowledgeAnalysisResult(analysis); } // 显示知识分析结果 function showKnowledgeAnalysisResult(analysis) { const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-3xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">知识分析报告</h3> </div> <div class="p-6"> <div class="grid grid-cols-1 md:grid-cols-2 gap-6"> <div class="bg-blue-50 p-4 rounded-lg"> <h4 class="font-medium text-blue-900 mb-2">讨论统计</h4> <p class="text-sm text-blue-800">总讨论数: ${analysis.totalDiscussions}</p> </div> <div class="bg-green-50 p-4 rounded-lg"> <h4 class="font-medium text-green-900 mb-2">内容块分布</h4> <p class="text-sm text-green-800">文本: ${analysis.contentBlocks.text} | 时间轴: ${analysis.contentBlocks.timeline} | 决策: ${analysis.contentBlocks.decision} | 待办: ${analysis.contentBlocks.todo}</p> </div> </div> <div class="mt-6"> <h4 class="font-medium text-gray-800 mb-2">热门标签</h4> <div class="flex flex-wrap gap-2"> ${Object.entries(analysis.tags).slice(0, 10).map(([tag, count]) => `<span class="bg-gray-100 text-gray-700 px-2 py-1 rounded-full text-sm">${tag}: ${count}</span>` ).join('')} </div> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button id="close-analysis" class="px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-dark">关闭</button> </div> </div> `; document.body.appendChild(modal); modal.querySelector('#close-analysis').addEventListener('click', () => { document.body.removeChild(modal); }); } // 启动智能工作流 function startIntelligentWorkflow() { showToast('正在启动智能工作流...', 'info'); // 模拟智能工作流处理 setTimeout(() => { const workflow = { autoClassification: Math.random() > 0.5, smartSummary: Math.random() > 0.5, trendAnalysis: Math.random() > 0.5 }; let message = '智能工作流已启动:\n'; if (workflow.autoClassification) message += '✓ 自动分类已启用\n'; if (workflow.smartSummary) message += '✓ 智能总结已启用\n'; if (workflow.trendAnalysis) message += '✓ 趋势分析已启用\n'; showToast(message, 'success'); }, 2000); } // 使用模板创建新讨论 function createNewDiscussionWithTemplate(templateId) { const template = getDocumentModelConfig().templates[templateId]; if (!template) return; const newDiscussion = { id: Date.now().toString(), title: `基于${template.name}的新讨论`, category: 'embedded-universal', subject: '模板创建', topic: template.name, tags: ['模板', template.name.split('模板')[0]], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), contentBlocks: [], summary: `使用${template.name}创建的讨论,包含${template.structure.join('、')}` }; const discussions = getDiscussions(); discussions.push(newDiscussion); saveDiscussions(discussions); // 打开新创建的讨论 openDiscussion(newDiscussion.id); } // 初始化符号学架构 function initializeSemioticArchitecture() { console.log('初始化符号学架构...', CORE_CONCEPTS); // 扩展分类系统以支持三层嵌套 window.DEFAULT_CATEGORIES = [ { id: 'embedded-universal', name: '内嵌式学习', dimension: 'universal', value: 'embedded', color: '#3b82f6', description: '万向 通 - 通 境 顿:内嵌式赋能学习系统', semioticLayer: 'explicit' }, { id: 'external-industry', name: '外挂式省力', dimension: 'industry', value: 'external', color: '#a855f7', description: '千行 别 - 性 行 渐:外挂式省力节约系统', semioticLayer: 'implicit' }, { id: 'internal-business', name: '中蕴式安全', dimension: 'business', value: 'internal', color: '#22c55e', description: '百业 藏 - 量 果 密:中蕴式省心安全系统', semioticLayer: 'metaphorical' } ]; // 扩展提示词模板 window.DEFAULT_PROMPTS = [ { id: 'explicit-grammar', title: '明言语法分析', category: 'embedded-universal', description: '专有名词适应:纯粹文法与构式文法的语法分析', icon: 'fa-language', semioticSystem: 'explicit', promptType: 'grammar', content: { structure: '语法目标:适应专有名词 (post)', analysis: ['纯粹文法分析', '构式文法验证'], application: '功能hover提示(语义表述,应用因子命名法)' } }, { id: 'implicit-mind', title: '暗示心动程序', category: 'external-industry', description: '心流证明程序:中心先动的语言模型启动', icon: 'fa-brain', semioticSystem: 'implicit', promptType: 'mind', content: { principle: '心流(中心先"动")-语言模型', activation: ['心流状态检测', '语言模型启动'], mechanism: '概念认知层的触发机制' } }, { id: 'metaphorical-axiom', title: '隐喻公理体系', category: 'internal-business', description: '顶级公理依存:集合元素的根本依存关系', icon: 'fa-sitemap', semioticSystem: 'metaphorical', promptType: 'axiom', content: { focus: '集合元素依存', structure: ['抽象元层', '实现方法层', '具体应用层'], application: '范畴元件约束的建立' } } ]; } // ==================== 三层次动态记录体系快速操作 ==================== // 显示文档模板选择器 function showDocumentTemplates() { const discussionId = currentDiscussionId; if (!discussionId) { showToast('请先打开一个讨论', 'warning'); return; } const docModel = getDocumentModelConfig(); const templates = Object.entries(docModel.templates); // 创建模板选择模态框 const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-2xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">选择文档模板</h3> <p class="text-sm text-gray-600 mt-1">应用预定义的文档结构模板</p> </div> <div class="p-6"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> ${templates.map(([id, name]) => ` <button onclick="applyDocumentTemplate('${id}', '${discussionId}'); this.closest('.fixed').remove();" class="p-4 border border-gray-200 rounded-lg hover:border-primary hover:bg-blue-50 transition-all-300 text-left"> <div class="flex items-center mb-2"> <i class="fa fa-file-text-o text-orange-600 mr-2"></i> <h4 class="font-medium text-gray-800">${name}</h4> </div> <p class="text-sm text-gray-600">点击应用${name}结构模板</p> </button> `).join('')} </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button onclick="this.closest('.fixed').remove()" class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-all-300"> 取消 </button> </div> </div> `; document.body.appendChild(modal); } // 执行批量知识分析 function performBatchAnalysis() { const discussions = getDiscussions(); if (discussions.length === 0) { showToast('暂无讨论数据可供分析', 'warning'); return; } showToast('正在执行批量知识分析...', 'info'); // 分析所有讨论 const analysisResults = discussions.map(discussion => { const analysis = performKnowledgeAnalysis(discussion.id); return { id: discussion.id, title: discussion.title, analysis: analysis }; }); // 显示分析结果 setTimeout(() => { const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-4xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">知识分析结果</h3> <p class="text-sm text-gray-600 mt-1">基于三层次动态记录体系的分析</p> </div> <div class="p-6"> <div class="space-y-4"> ${analysisResults.map(result => ` <div class="border border-gray-200 rounded-lg p-4"> <h4 class="font-medium text-gray-800 mb-2">${result.title}</h4> <div class="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm"> <div> <span class="text-gray-600">语义密度:</span> <span class="font-medium ml-1">${result.analysis.semanticDensity.toFixed(2)}</span> </div> <div> <span class="text-gray-600">关键词数:</span> <span class="font-medium ml-1">${result.analysis.keywordCount}</span> </div> <div> <span class="text-gray-600">内容长度:</span> <span class="font-medium ml-1">${result.analysis.contentLength}</span> </div> <div> <span class="text-gray-600">复杂度:</span> <span class="font-medium ml-1">${result.analysis.complexity}</span> </div> </div> </div> `).join('')} </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button onclick="this.closest('.fixed').remove()" class="px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-dark transition-all-300"> 关闭 </button> </div> </div> `; document.body.appendChild(modal); showToast('知识分析完成', 'success'); }, 1000); } // 显示自动化设置 function showAutomationSettings() { const dynamicApp = getDynamicApplicationConfig(); const modal = document.createElement('div'); modal.className = 'fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center'; modal.innerHTML = ` <div class="bg-white rounded-xl shadow-lg w-full max-w-3xl mx-4 max-h-[80vh] overflow-y-auto"> <div class="p-6 border-b border-gray-200"> <h3 class="text-lg font-medium text-gray-800">自动化工作流配置</h3> <p class="text-sm text-gray-600 mt-1">配置智能自动化操作,提升工作效率</p> </div> <div class="p-6"> <div class="space-y-6"> <div> <h4 class="font-medium text-gray-800 mb-3">可用工作流</h4> <div class="space-y-3"> ${dynamicApp.automation.workflows.map(workflow => ` <label class="flex items-center p-3 border border-gray-200 rounded-lg hover:bg-gray-50 cursor-pointer"> <input type="checkbox" class="mr-3" checked> <div class="flex-1"> <div class="font-medium text-gray-800">${workflow}</div> <div class="text-sm text-gray-600">自动执行${workflow}操作</div> </div> </label> `).join('')} </div> </div> <div> <h4 class="font-medium text-gray-800 mb-3">触发条件</h4> <div class="space-y-3"> ${dynamicApp.automation.triggers.map(trigger => ` <label class="flex items-center p-3 border border-gray-200 rounded-lg hover:bg-gray-50 cursor-pointer"> <input type="checkbox" class="mr-3"> <div class="flex-1"> <div class="font-medium text-gray-800">${trigger}</div> <div class="text-sm text-gray-600">使用${trigger}方式启动工作流</div> </div> </label> `).join('')} </div> </div> </div> </div> <div class="p-6 border-t border-gray-200 flex justify-end"> <button onclick="this.closest('.fixed').remove()" class="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-all-300 mr-2"> 取消 </button> <button onclick="this.closest('.fixed').remove(); showToast('自动化配置已保存', 'success');" class="px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-dark transition-all-300"> 保存配置 </button> </div> </div> `; document.body.appendChild(modal); } // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', () => { initializeSemioticArchitecture(); initializeApp(); // 初始化三层次动态记录体系仪表盘 setTimeout(() => { renderDynamicRecordingDashboard(); }, 1000); }); </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 20:22:42

全网最全的软件测试面试八股文(含真题答案+文档)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快最近有很多粉丝问我&#xff0c;有什么方法能够快速提升自己&#xff0c;通过阿里、腾讯、字节跳动、京东等互联网大厂的面试&#xff0c;我觉得短时间提升自己最快…

作者头像 李华
网站建设 2026/2/8 1:41:23

OpenResume专业简历制作工具完整使用指南

OpenResume专业简历制作工具完整使用指南 【免费下载链接】open-resume OpenResume is a powerful open-source resume builder and resume parser. https://open-resume.com/ 项目地址: https://gitcode.com/gh_mirrors/op/open-resume OpenResume是一款功能强大的开源…

作者头像 李华
网站建设 2026/2/6 11:25:37

springboot肿瘤患者康复回访系统_109a2sb0-

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/2/7 11:46:10

5分钟掌握LIBERO:开启终身机器人学习的革命性平台

5分钟掌握LIBERO&#xff1a;开启终身机器人学习的革命性平台 【免费下载链接】LIBERO 项目地址: https://gitcode.com/gh_mirrors/li/LIBERO LIBERO是一个专门研究知识迁移和终身学习能力的机器人学习基准平台&#xff0c;旨在解决多任务和终身机器人学习中的核心挑战…

作者头像 李华
网站建设 2026/2/6 11:58:24

文件上传革命:jQuery File Upload如何让开发效率飙升500%

还在为网页文件上传功能而烦恼吗&#xff1f;单文件上传速度慢如蜗牛、多文件选择操作繁琐、大文件上传频繁失败&#xff1f;这些问题不仅让用户体验大打折扣&#xff0c;更让开发者加班到深夜。今天&#xff0c;我要向你介绍一个改变游戏规则的工具——jQuery File Upload&…

作者头像 李华