| | |
| | | <div className="flex items-center gap-3 mb-3"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" /> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2M7 7h10" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">工位信息</h4> |
| | |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">产线现场库存量</h4> |
| | | <h4 className="text-lg font-semibold text-blue-900">生产计划数据 (production_plan)</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:MES、WMS(线边仓)</p> |
| | | <p className="text-blue-800">核心来源系统:SAP(企业管理系统)</p> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | <p className="text-blue-800">核心来源系统:ERP、WMS</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | ); |
| | | } else if (sceneType === 'panorama') { |
| | | return ( |
| | | <div className="space-y-6"> |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-3"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">订单需求数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:OMS(订单管理系统)</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-3"> |
| | |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 7v10c0 2 1 3 3 3h10c2 0 3-1 3-3V7c0-2-1-3-3-3H7C5 4 4 5 4 7z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">生产工单数据</h4> |
| | | <h4 className="text-lg font-semibold text-blue-900">物料主数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:ERP(企业资源计划)</p> |
| | | <p className="text-blue-800">核心来源系统:SAP(企业管理系统)</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-3"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" /> |
| | | </svg> |
| | | </div> |
| | | ); |
| | | } else if (sceneType === 'panorama') { |
| | | return ( |
| | | <div className="flex flex-col h-full"> |
| | | {/* 卡片说明区块,顶部固定 */} |
| | | <div className="space-y-4 flex-shrink-0"> |
| | | {/* 订单需求数据 */} |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-2"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">订单需求数据</h4> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">库存数据</h4> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:OMS(订单管理系统)</p> |
| | | </div> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:WMS(仓储管理系统)</p> |
| | | {/* 库存数据 */} |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-2"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 7v10c0 2 1 3 3 3h10c2 0 3-1 3-3V7c0-2-1-3-3-3H7C5 4 4 5 4 7z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">库存数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:WMS(仓储管理系统)</p> |
| | | </div> |
| | | </div> |
| | | {/* 生产计划数据 */} |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-2"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">生产计划数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:SAP(企业管理系统)</p> |
| | | </div> |
| | | </div> |
| | | {/* 物料主数据 */} |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-2"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 7v10c0 2 1 3 3 3h10c2 0 3-1 3-3V7c0-2-1-3-3-3H7C5 4 4 5 4 7z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">物料主数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:SAP(企业管理系统)</p> |
| | | </div> |
| | | </div> |
| | | {/* 供应商绩效数据 */} |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-2"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">供应商绩效数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:SRM(供应商关系管理)、质量管理系统</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-3"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">供应商绩效数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:SRM(供应商关系管理)、质量管理系统</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className="bg-white/50 rounded-lg p-4 backdrop-blur-sm border border-blue-100/50"> |
| | | <div className="flex items-center gap-3 mb-3"> |
| | | <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 flex items-center justify-center"> |
| | | <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
| | | <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" /> |
| | | </svg> |
| | | </div> |
| | | <h4 className="text-lg font-semibold text-blue-900">产能数据</h4> |
| | | </div> |
| | | <div className="ml-11"> |
| | | <p className="text-blue-800">核心来源系统:MES(制造执行系统)、设备监控系统</p> |
| | | {/* 数据区块,独立滚动,显示在下方 */} |
| | | <div className="flex-1 min-h-0 mt-4 overflow-y-auto px-1"> |
| | | <div className="bg-white/90 rounded-lg p-6 shadow border border-gray-100"> |
| | | <ReactMarkdown |
| | | remarkPlugins={[remarkGfm]} |
| | | components={{ |
| | | h3: ({node, ...props}) => <h3 className="text-lg font-bold text-gray-800 mt-6 mb-3" {...props} />, |
| | | table: ({node, ...props}) => <div className="overflow-x-auto my-4"><table className="min-w-full text-gray-800 text-base" {...props} /></div>, |
| | | thead: ({node, ...props}) => <thead className="bg-gray-50" {...props} />, |
| | | th: ({node, ...props}) => <th className="px-4 py-3 text-base font-semibold text-gray-800 border-b border-gray-200 text-center whitespace-nowrap" {...props} />, |
| | | td: ({node, ...props}) => <td className="px-4 py-3 text-base text-gray-800 border-t border-gray-100 text-center" {...props} />, |
| | | tr: ({node, ...props}) => <tr className="hover:bg-gray-50" {...props} /> |
| | | }} |
| | | > |
| | | {markdownContent} |
| | | </ReactMarkdown> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </p> |
| | | </div> |
| | | </div> |
| | | <ReactMarkdown |
| | | remarkPlugins={[remarkGfm]} |
| | | components={{ |
| | | h3: ({ node, ...props }) => ( |
| | | <h3 className="text-lg font-semibold text-gray-800 mt-8 mb-4 pb-2 border-b border-gray-200" {...props} /> |
| | | ), |
| | | table: ({ node, ...props }) => ( |
| | | <div className="overflow-x-auto my-6 rounded-lg border border-gray-200 shadow-sm"> |
| | | <table className="min-w-full divide-y divide-gray-200" {...props} /> |
| | | </div> |
| | | ), |
| | | thead: ({ node, ...props }) => ( |
| | | <thead className="bg-gray-50" {...props} /> |
| | | ), |
| | | th: ({ node, children, ...props }) => { |
| | | // 根据表头内容动态调整宽度 |
| | | let className = "px-4 py-3 text-center text-sm font-semibold text-gray-700"; |
| | | |
| | | if (typeof children === 'string') { |
| | | // 根据表头内容设置合适的宽度类 |
| | | if (children === '工位' || children === '数量' || children === '库位') { |
| | | className += " w-[15%]"; |
| | | } else if (children === '原材料' || children === '原材料需求' || children === '产线名') { |
| | | className += " w-[20%]"; |
| | | } else if (children === '原材料消耗速率' || children === '生产的产品') { |
| | | className += " w-[25%]"; |
| | | } |
| | | } |
| | | |
| | | return <th className={className} {...props}>{children}</th>; |
| | | }, |
| | | td: ({ node, ...props }) => ( |
| | | <td className="px-4 py-3 text-sm text-gray-600 border-t border-gray-200 text-center whitespace-nowrap" {...props} /> |
| | | ), |
| | | tr: ({ node, ...props }) => ( |
| | | <tr className="hover:bg-gray-50 transition-colors duration-150" {...props} /> |
| | | ) |
| | | }} |
| | | > |
| | | {markdownContent} |
| | | </ReactMarkdown> |
| | | </div> |
| | | </div> |
| | | </Dialog.Panel> |