chore: initialize deployable website and CMS

This commit is contained in:
Codex User
2026-09-08 11:57:17 +08:00
commit 3a99ae30c5
57 changed files with 11205 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
import { useState } from 'react'
import { Link } from 'react-router-dom'
import GlobalCTA from '@/components/Layout/GlobalCTA'
type CheckItem = { id: string; question: string; dimension: string }
const CHECK_ITEMS: CheckItem[] = [
{ id: 'q1', question: '战略方向在团队中是否清晰一致?', dimension: '战略价值' },
{ id: 'q2', question: '组织协同是否顺畅、职责是否清晰?', dimension: '组织价值' },
{ id: 'q3', question: '经营机制(目标/复盘/数据)是否闭环?', dimension: '经营价值' },
{ id: 'q4', question: '团队是否具备经营意识与成长机制?', dimension: '人的价值' },
]
export default function SelfCheck() {
const [answers, setAnswers] = useState<Record<string, string>>({})
const [showResult, setShowResult] = useState(false)
const set = (id: string, val: string) => setAnswers(prev => ({ ...prev, [id]: val }))
return (
<div>
<div className="page-header">
<div className="container">
<div className="breadcrumb">
<Link to="/" style={{ color: 'rgba(255,255,255,0.8)' }}>
</Link>{' '}
/
</div>
<h1></h1>
<p>
× A/M/B
<br />
<strong style={{ color: '#fde68a' }}></strong>线
</p>
</div>
</div>
<section className="section">
<div className="container" style={{ maxWidth: 720 }}>
<div className="card">
<h3>4 </h3>
<p style={{ fontSize: 13, color: '#64748b' }}></p>
<div style={{ marginTop: 16, display: 'grid', gap: 16 }}>
{CHECK_ITEMS.map(item => (
<div key={item.id} style={{ border: '1px solid #e2e8f0', borderRadius: 10, padding: 16 }}>
<div style={{ fontSize: 12, color: '#0f6b5b', fontWeight: 800 }}>{item.dimension}</div>
<div style={{ fontWeight: 700, marginTop: 4 }}>{item.question}</div>
<div style={{ display: 'flex', gap: 8, marginTop: 10, flexWrap: 'wrap' }}>
{['A 较清晰/顺畅', 'M 部分卡点', 'B 待构建'].map(opt => (
<label
key={opt}
style={{
border: answers[item.id] === opt ? '1px solid #163E70' : '1px solid #e2e8f0',
background: answers[item.id] === opt ? '#eff6ff' : '#fff',
padding: '8px 12px',
borderRadius: 999,
fontSize: 13,
cursor: 'pointer',
}}
>
<input type="radio" name={item.id} value={opt} checked={answers[item.id] === opt} onChange={() => set(item.id, opt)} style={{ marginRight: 6 }} />
{opt}
</label>
))}
</div>
</div>
))}
</div>
<button className="btn btn-primary" style={{ width: '100%', marginTop: 20 }} onClick={() => setShowResult(true)}>
</button>
<p style={{ fontSize: 11, color: '#94a3b8', marginTop: 8, textAlign: 'center' }}></p>
</div>
{showResult && (
<div className="card" style={{ marginTop: 16, background: '#f8fafc' }}>
<h3></h3>
<p style={{ fontSize: 13, color: '#475569' }}>
<br />
{Object.entries(answers)
.map(([k, v]) => `${CHECK_ITEMS.find(i => i.id === k)?.dimension}${v}`)
.join('') || '(请选择后再查看)'}
</p>
<div className="placeholder" style={{ marginTop: 10 }}>
</div>
<div style={{ display: 'flex', gap: 10, marginTop: 12, flexWrap: 'wrap' }}>
<Link to="/contact" className="btn btn-primary">
</Link>
<Link to="/evolution" className="btn btn-ghost">
</Link>
</div>
</div>
)}
<div className="placeholder" style={{ marginTop: 16 }}>
/ A/M/B
</div>
</div>
</section>
<GlobalCTA />
</div>
)
}