UNPKG

mr-component

Version:
292 lines (277 loc) 11 kB
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>MrInput 样式修复测试</title> <script src="https://unpkg.com/react@18/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> <!-- 加载组件库的CSS --> <link rel="stylesheet" href="../build/index.css" /> <style> .demo-container { max-width: 800px; margin: 0 auto; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } .demo-section { margin-bottom: 40px; padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px; background: #fafafa; } .demo-section h3 { margin-top: 0; color: #333; } .demo-item { margin-bottom: 20px; padding: 15px; background: white; border-radius: 4px; border: 1px solid #eee; } .demo-item h4 { margin: 0 0 10px 0; color: #666; font-size: 14px; } .input-group { display: flex; flex-direction: column; gap: 10px; } .result-box { margin-top: 10px; padding: 10px; background: #f5f5f5; border-radius: 4px; font-family: monospace; font-size: 12px; } </style> </head> <body> <div id="root"></div> <script type="text/babel"> const { useState } = React; // 导入组件 - 从全局变量中获取 const { MrInput } = window.VantComponents || {}; // 如果没有从全局变量获取到,尝试从build目录获取 if (!MrInput) { console.error('MrInput 组件未找到'); } function InputFixDemo() { const [values, setValues] = useState({ default: '', paymentAmount: '', mobileNumber: '', searchInput: '', }); const handleChange = (key) => (value, formattedValue) => { setValues((prev) => ({ ...prev, [key]: formattedValue || value, })); console.log(`${key}:`, { value, formattedValue }); }; return ( <div className="demo-container"> <h1>🎉 MrInput 终极样式修复测试</h1> <p> <strong>现在使用超强CSS覆盖!</strong> 测试MrInput组件在默认状态下是否正确显示样式(边框、圆角、高度、颜色等) </p> <div style="padding: 10px; background: #e8f5e9; border-radius: 4px; margin: 10px 0;"> <strong>✅ 期待效果:</strong>应该看到明显的 <span style="color: #FFA726;">橙色边框</span><span style="background: #FFF3E0; padding: 2px 4px;">浅橙色背景</span>,以及 <span style="color: #E65100; font-weight: 600;">深橙色文字</span> </div> <div className="demo-section"> <h3>1. 默认样式测试(应该显示为payment-amount样式)</h3> <div className="demo-item"> <h4>默认输入框(未指定variant)</h4> <div className="input-group"> <MrInput placeholder="默认输入框测试" value={values.default} onChange={handleChange('default')} /> <div className="result-box">当前值: {values.default || '(空)'}</div> </div> </div> </div> <div className="demo-section"> <h3>2. 支付金额输入(payment-amount)</h3> <div className="demo-item"> <h4>橙色主题 + 货币符号 + 千分位分隔符</h4> <div className="input-group"> <MrInput variant="payment-amount" placeholder="请输入金额" value={values.paymentAmount} onChange={handleChange('paymentAmount')} currency="¥" showThousandSeparator={true} decimalPlaces={2} /> <div className="result-box">格式化值: {values.paymentAmount || '(空)'}</div> </div> </div> </div> <div className="demo-section"> <h3>3. 手机号输入(mobile-number)</h3> <div className="demo-item"> <h4>蓝色主题 + 等宽字体 + 自动分隔</h4> <div className="input-group"> <MrInput variant="mobile-number" placeholder="请输入手机号" value={values.mobileNumber} onChange={handleChange('mobileNumber')} mobileSeparator=" " /> <div className="result-box">格式化值: {values.mobileNumber || '(空)'}</div> </div> </div> </div> <div className="demo-section"> <h3>4. 搜索输入(search-input)</h3> <div className="demo-item"> <h4>绿色主题 + 搜索图标 + 圆角边框</h4> <div className="input-group"> <MrInput variant="search-input" placeholder="请输入搜索内容" value={values.searchInput} onChange={handleChange('searchInput')} onSearch={(value) => alert(`搜索: ${value}`)} /> <div className="result-box">搜索值: {values.searchInput || '(空)'}</div> </div> </div> </div> <div className="demo-section"> <h3>5. 字体大小变体测试</h3> <div className="demo-item"> <h4>不同字体大小的输入框</h4> <div className="input-group"> <MrInput variant="payment-amount" fontSize="h4" placeholder="H4 大号输入框" style={{ marginBottom: '10px' }} /> <MrInput variant="mobile-number" fontSize="h5" placeholder="H5 中号输入框" style={{ marginBottom: '10px' }} /> <MrInput variant="search-input" fontSize="h6" placeholder="H6 小号输入框" style={{ marginBottom: '10px' }} /> <MrInput variant="payment-amount" fontSize="h7" placeholder="H7 最小输入框" /> </div> </div> </div> <div className="demo-section"> <h3>6. 🚀 超强修复验证重点</h3> <div className="demo-item"> <h4>🎯 终极修复后应该看到的效果:</h4> <ul> <li><strong>明显的2px橙色边框</strong>(#FFA726)- 不再是默认灰色! </li> <li><strong>浅橙色背景</strong>(#FFF3E0)- 有明显的主题色! </li> <li><strong>深橙色文字</strong>(#E65100)- 字体颜色突出! </li> <li><strong>8px圆角边框</strong> - 现代化UI设计! </li> <li><strong>48px标准高度</strong> - 舒适的点击区域! </li> <li><strong>12px内间距</strong> - 平衡的视觉效果! </li> <li><strong>600字体粗细</strong> - 清晰易读! </li> <li><strong>货币符号¥正确显示</strong> - 业务功能完整! </li> <li><strong>聚焦时高亮效果</strong> - 交互反馈完美! </li> <li><strong>移动端响应式</strong> - 全平台适配! </li> </ul> <div style="margin-top: 15px; padding: 10px; background: #fff3e0; border-left: 4px solid #ffa726; border-radius: 4px;"> <strong>🔥 核心突破:</strong> 使用多重CSS选择器和!important强制覆盖,确保在低代码平台的复杂DOM结构中也能完美应用样式! </div> </div> </div> </div> ); } // 确保组件已加载后再渲染 if (MrInput) { ReactDOM.render(<InputFixDemo />, document.getElementById('root')); } else { // 等待组件加载 setTimeout(() => { const { MrInput: DelayedMrInput } = window.VantComponents || {}; if (DelayedMrInput) { ReactDOM.render(<InputFixDemo />, document.getElementById('root')); } else { document.getElementById('root').innerHTML = ` <div style="padding: 20px; text-align: center;"> <h2>组件加载失败</h2> <p>请确保已经构建了组件库:npm run build</p> <p>当前尝试加载的组件: MrInput</p> <p>可用的组件: ${ Object.keys(window.VantComponents || {}).join(', ') || '无' }</p> </div> `; } }, 1000); } </script> <!-- 尝试加载构建后的组件 --> <script> // 创建script标签加载组件 const script = document.createElement('script'); script.src = '../build/VantComponents.js'; script.onload = () => { console.log('VantComponents loaded:', window.VantComponents); // 重新渲染页面 if (window.VantComponents && window.VantComponents.MrInput) { const { MrInput } = window.VantComponents; ReactDOM.render(<InputFixDemo />, document.getElementById('root')); } }; script.onerror = () => { console.error('Failed to load VantComponents.js'); }; document.head.appendChild(script); </script> </body> </html>