// 干部管理系统 — 共享数据层
// 花名册 mock 数据、部门列表、SVG 图标集、共享原子组件
// 通过 window.* 暴露给各平台 app.jsx 使用
(function () {
  "use strict";

  // ============ 设计 Token（与 HTML <style> 中的 CSS 变量对齐） ============
  const TOKENS = {
    red: "#005d30",
    redDark: "#003d1f",
    redLight: "#E6F0EA",
    blue: "#0A3B24",
    blueLight: "#E5EDE7",
    gold: "#dbb000",
    bg: "#F5F6F8",
    surface: "#FFFFFF",
    border: "#E5E7EB",
    text1: "#1F2937",
    text2: "#6B7280",
    text3: "#9CA3AF",
    success: "#16A34A",
    warning: "#D97706",
    danger: "#DC2626",
  };
  window.TOKENS = TOKENS;

  // ============ 部门列表 ============
  const DEPARTMENTS = [
    "党委办公室",
    "组织部",
    "纪检监察室",
    "综合管理部",
    "财务资产部",
    "人力资源部",
    "安全生产部",
    "市场营销部",
    "技术研发中心",
    "工会",
  ];

  // 职级映射
  const LEVELS = ["正处级", "副处级", "正科级", "副科级", "科员"];

  // ============ 干部花名册（24 人） ============
  const CADRES = [
    {
      id: "C20260001",
      name: "陈志远",
      gender: "男",
      birth: "1972-03",
      age: 53,
      nation: "汉族",
      native: "浙江绍兴",
      party: "中共党员",
      partyDate: "1995-06",
      phone: "138****6201",
      email: "chen.zy@gov.cn",
      dept: "党委办公室",
      position: "党委书记",
      level: "正处级",
      workAge: 31,
      edu: { level: "博士研究生", school: "复旦大学", major: "公共管理", degree: "管理学博士" },
      resume: "1990.09—1994.07  复旦大学本科\n1994.09—1997.07  复旦大学硕士\n1997.07—2005.03  市委办公厅秘书处干事\n2005.03—2012.08  组织部干部一处副处长\n2012.08—2018.05  综合管理部主任\n2018.05—至今      党委书记",
      family: "配偶：王秀兰（市人民医院）；子女：陈思齐（在读研究生）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "优秀", rank: "前15%" },
        { year: 2023, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2025-07", title: "优秀党务工作者", org: "市委", type: "荣誉表彰" },
        { date: "2023-12", title: "年度工作先进个人", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "陈",
      status: "在任",
      potential: 4,
      performance: 5,
    },
    {
      id: "C20260002",
      name: "林海峰",
      gender: "男",
      birth: "1975-08",
      age: 50,
      nation: "汉族",
      native: "江苏南京",
      party: "中共党员",
      partyDate: "1998-05",
      phone: "139****3320",
      email: "lin.hf@gov.cn",
      dept: "组织部",
      position: "组织部部长",
      level: "正处级",
      workAge: 27,
      edu: { level: "硕士研究生", school: "南京大学", major: "行政管理", degree: "管理学硕士" },
      resume: "1993.09—1997.07  南京大学本科\n1997.09—2000.07  南京大学硕士\n2000.07—2008.10  组织部干部二处干事\n2008.10—2016.04  组织部副部长\n2016.04—至今      组织部部长",
      family: "配偶：赵敏（市第一中学教师）；子女：林一帆（已工作）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2024-06", title: "优秀组工干部", org: "省委组织部", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "林",
      status: "在任",
      potential: 5,
      performance: 5,
    },
    {
      id: "C20260003",
      name: "王建华",
      gender: "男",
      birth: "1978-11",
      age: 47,
      nation: "汉族",
      native: "山东济南",
      party: "中共党员",
      partyDate: "2001-07",
      phone: "137****8855",
      email: "wang.jh@gov.cn",
      dept: "组织部",
      position: "副部长",
      level: "副处级",
      workAge: 23,
      edu: { level: "硕士研究生", school: "山东大学", major: "人力资源管理", degree: "管理学硕士" },
      resume: "1996.09—2000.07  山东大学本科\n2000.09—2003.07  山东大学硕士\n2003.07—2010.05  组织部干事\n2010.05—2018.09  组织部干部一处副处长\n2018.09—至今      组织部副部长",
      family: "配偶：孙莉（市妇幼保健院）；子女：王子涵（在读高中）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2022-07", title: "优秀共产党员", org: "市直机关", type: "表彰" },
      ],
      punish: [],
      avatar: "王",
      status: "在任",
      potential: 4,
      performance: 4,
    },
    {
      id: "C20260004",
      name: "赵雅琴",
      gender: "女",
      birth: "1980-05",
      age: 45,
      nation: "汉族",
      native: "四川成都",
      party: "中共党员",
      partyDate: "2003-12",
      phone: "135****1192",
      email: "zhao.yq@gov.cn",
      dept: "人力资源部",
      position: "部长",
      level: "正处级",
      workAge: 22,
      edu: { level: "硕士研究生", school: "四川大学", major: "劳动经济学", degree: "经济学硕士" },
      resume: "1998.09—2002.07  四川大学本科\n2002.09—2005.07  四川大学硕士\n2005.07—2014.03  人力资源部副科长\n2014.03—2020.08  人力资源部副部长\n2020.08—至今      人力资源部部长",
      family: "配偶：刘洋（律师事务所）；子女：赵晨曦（在读初中）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2025-03", title: "三八红旗手", org: "市妇联", type: "荣誉表彰" },
        { date: "2023-12", title: "先进个人", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "赵",
      status: "在任",
      potential: 5,
      performance: 4,
    },
    {
      id: "C20260005",
      name: "孙立鹏",
      gender: "男",
      birth: "1982-09",
      age: 43,
      nation: "汉族",
      native: "河北石家庄",
      party: "中共党员",
      partyDate: "2005-06",
      phone: "138****4471",
      email: "sun.lp@gov.cn",
      dept: "财务资产部",
      position: "部长",
      level: "正处级",
      workAge: 20,
      edu: { level: "硕士研究生", school: "上海财经大学", major: "会计学", degree: "管理学硕士" },
      resume: "2000.09—2004.07  上海财经大学本科\n2004.09—2007.07  上海财经大学硕士\n2007.07—2015.06  财务部会计主管\n2015.06—2021.10  财务部副部长\n2021.10—至今      财务资产部部长",
      family: "配偶：周婷（会计师事务所）；子女：孙嘉树（在读小学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "孙",
      status: "在任",
      potential: 3,
      performance: 4,
    },
    {
      id: "C20260006",
      name: "周敏",
      gender: "女",
      birth: "1983-12",
      age: 42,
      nation: "汉族",
      native: "湖南长沙",
      party: "中共党员",
      partyDate: "2006-07",
      phone: "136****7733",
      email: "zhou.min@gov.cn",
      dept: "人力资源部",
      position: "副部长",
      level: "副处级",
      workAge: 19,
      edu: { level: "硕士研究生", school: "中南大学", major: "企业管理", degree: "管理学硕士" },
      resume: "2001.09—2005.07  中南大学本科\n2005.09—2008.07  中南大学硕士\n2008.07—2016.08  人力资源部薪酬主管\n2016.08—至今      人力资源部副部长",
      family: "配偶：吴强（银行）；子女：周乐遥（在读小学）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2024-03", title: "三八红旗手", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "周",
      status: "在任",
      potential: 4,
      performance: 4,
    },
    {
      id: "C20260007",
      name: "吴永康",
      gender: "男",
      birth: "1979-04",
      age: 46,
      nation: "汉族",
      native: "河南郑州",
      party: "中共党员",
      partyDate: "2002-05",
      phone: "139****2218",
      email: "wu.yk@gov.cn",
      dept: "安全生产部",
      position: "部长",
      level: "正处级",
      workAge: 24,
      edu: { level: "大学本科", school: "中国矿业大学", major: "安全工程", degree: "工学学士" },
      resume: "1997.09—2001.07  中国矿业大学本科\n2001.07—2010.04  安全生产部技术员、主管\n2010.04—2018.11  安全生产部副部长\n2018.11—至今      安全生产部部长",
      family: "配偶：郑洁（医院护士）；子女：吴雨桐（在读大学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2023-06", title: "安全生产先进个人", org: "省安委会", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "吴",
      status: "在任",
      potential: 3,
      performance: 4,
    },
    {
      id: "C20260008",
      name: "郑文涛",
      gender: "男",
      birth: "1985-07",
      age: 40,
      nation: "汉族",
      native: "广东广州",
      party: "中共党员",
      partyDate: "2008-06",
      phone: "135****9043",
      email: "zheng.wt@gov.cn",
      dept: "技术研发中心",
      position: "主任",
      level: "正处级",
      workAge: 17,
      edu: { level: "博士研究生", school: "浙江大学", major: "计算机科学与技术", degree: "工学博士" },
      resume: "2003.09—2007.07  浙江大学本科\n2007.09—2013.07  浙江大学博士（直博）\n2013.07—2018.06  技术研发中心主管\n2018.06—2022.09  技术研发中心副主任\n2022.09—至今      技术研发中心主任",
      family: "配偶：黄丽（高校教师）；子女：郑知行（在读幼儿园）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "优秀", rank: "前15%" },
        { year: 2023, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2025-05", title: "青年科技人才", org: "省科技厅", type: "荣誉表彰" },
        { date: "2024-12", title: "重大技术创新奖", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "郑",
      status: "在任",
      potential: 5,
      performance: 5,
    },
    {
      id: "C20260009",
      name: "黄丽娟",
      gender: "女",
      birth: "1986-10",
      age: 39,
      nation: "汉族",
      native: "湖北武汉",
      party: "中共预备党员",
      partyDate: "2023-07",
      phone: "138****5566",
      email: "huang.lj@gov.cn",
      dept: "市场营销部",
      position: "副部长",
      level: "副处级",
      workAge: 16,
      edu: { level: "硕士研究生", school: "武汉大学", major: "市场营销", degree: "管理学硕士" },
      resume: "2004.09—2008.07  武汉大学本科\n2008.09—2011.07  武汉大学硕士\n2011.07—2017.05  市场营销部业务主管\n2017.05—2021.12  市场营销部科长\n2021.12—至今      市场营销部副部长",
      family: "配偶：徐明（互联网公司）；子女：黄子言（在读小学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2024-03", title: "三八红旗手", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "黄",
      status: "在任",
      potential: 4,
      performance: 4,
    },
    {
      id: "C20260010",
      name: "徐振华",
      gender: "男",
      birth: "1976-02",
      age: 49,
      nation: "汉族",
      native: "安徽合肥",
      party: "中共党员",
      partyDate: "1999-09",
      phone: "137****1180",
      email: "xu.zh@gov.cn",
      dept: "综合管理部",
      position: "主任",
      level: "正处级",
      workAge: 26,
      edu: { level: "硕士研究生", school: "中国科学技术大学", major: "管理科学", degree: "管理学硕士" },
      resume: "1994.09—1998.07  中国科学技术大学本科\n1998.09—2001.07  中国科学技术大学硕士\n2001.07—2009.08  综合管理部秘书\n2009.08—2017.06  综合管理部副主任\n2017.06—至今      综合管理部主任",
      family: "配偶：何芳（街道办）；子女：徐明远（已工作）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [
        { date: "2021-04", title: "工作失误通报批评", org: "本单位", type: "通报" },
      ],
      avatar: "徐",
      status: "在任",
      potential: 3,
      performance: 3,
    },
    {
      id: "C20260011",
      name: "何静",
      gender: "女",
      birth: "1988-03",
      age: 37,
      nation: "汉族",
      native: "江西南昌",
      party: "中共党员",
      partyDate: "2011-06",
      phone: "139****6677",
      email: "he.jing@gov.cn",
      dept: "党委办公室",
      position: "副主任",
      level: "副处级",
      workAge: 14,
      edu: { level: "硕士研究生", school: "厦门大学", major: "新闻传播学", degree: "文学硕士" },
      resume: "2006.09—2010.07  厦门大学本科\n2010.09—2013.07  厦门大学硕士\n2013.07—2019.10  党委办公室秘书\n2019.10—至今      党委办公室副主任",
      family: "配偶：曹伟（媒体记者）；子女：何安然（在读幼儿园）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2025-03", title: "优秀宣传工作者", org: "市委宣传部", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "何",
      status: "在任",
      potential: 5,
      performance: 4,
    },
    {
      id: "C20260012",
      name: "曹建国",
      gender: "男",
      birth: "1974-06",
      age: 51,
      nation: "汉族",
      native: "福建福州",
      party: "中共党员",
      partyDate: "1997-03",
      phone: "135****2244",
      email: "cao.jg@gov.cn",
      dept: "纪检监察室",
      position: "主任",
      level: "正处级",
      workAge: 29,
      edu: { level: "硕士研究生", school: "华东政法大学", major: "法学", degree: "法学硕士" },
      resume: "1992.09—1996.07  华东政法大学本科\n1996.09—1999.07  华东政法大学硕士\n1999.07—2010.05  纪检监察室干事\n2010.05—2018.07  纪检监察室副主任\n2018.07—至今      纪检监察室主任",
      family: "配偶：蒋红（法院）；子女：曹思源（已工作）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2024-07", title: "优秀纪检干部", org: "市纪委", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "曹",
      status: "在任",
      potential: 4,
      performance: 5,
    },
    {
      id: "C20260013",
      name: "蒋小平",
      gender: "男",
      birth: "1981-11",
      age: 44,
      nation: "汉族",
      native: "辽宁沈阳",
      party: "中共党员",
      partyDate: "2004-08",
      phone: "138****9900",
      email: "jiang.xp@gov.cn",
      dept: "技术研发中心",
      position: "副主任",
      level: "副处级",
      workAge: 21,
      edu: { level: "硕士研究生", school: "哈尔滨工业大学", major: "电子信息", degree: "工学硕士" },
      resume: "1999.09—2003.07  哈尔滨工业大学本科\n2003.09—2006.07  哈尔滨工业大学硕士\n2006.07—2014.09  技术研发中心主管\n2014.09—2020.08  技术研发中心科长\n2020.08—至今      技术研发中心副主任",
      family: "配偶：沈梅（电信公司）；子女：蒋宇辰（在读初中）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "蒋",
      status: "在任",
      potential: 4,
      performance: 3,
    },
    {
      id: "C20260014",
      name: "沈玉兰",
      gender: "女",
      birth: "1984-08",
      age: 41,
      nation: "汉族",
      native: "黑龙江哈尔滨",
      party: "中共党员",
      partyDate: "2007-07",
      phone: "136****3344",
      email: "shen.yl@gov.cn",
      dept: "工会",
      position: "主席",
      level: "正处级",
      workAge: 18,
      edu: { level: "硕士研究生", school: "东北师范大学", major: "社会学", degree: "法学硕士" },
      resume: "2002.09—2006.07  东北师范大学本科\n2006.09—2009.07  东北师范大学硕士\n2009.07—2017.03  工会干事\n2017.03—2022.06  工会副主席\n2022.06—至今      工会主席",
      family: "配偶：韩雷（电力公司）；子女：沈乐颜（在读小学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2023-03", title: "优秀工会工作者", org: "市总工会", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "沈",
      status: "在任",
      potential: 3,
      performance: 4,
    },
    {
      id: "C20260015",
      name: "韩雪",
      gender: "女",
      birth: "1989-04",
      age: 36,
      nation: "汉族",
      native: "吉林长春",
      party: "中共预备党员",
      partyDate: "2024-07",
      phone: "135****7788",
      email: "han.xue@gov.cn",
      dept: "组织部",
      position: "干部一处副处长",
      level: "副科级",
      workAge: 12,
      edu: { level: "硕士研究生", school: "吉林大学", major: "政治学", degree: "法学硕士" },
      resume: "2007.09—2011.07  吉林大学本科\n2011.09—2014.07  吉林大学硕士\n2014.07—2019.08  组织部干事\n2019.08—2023.05  组织部干部一处科长\n2023.05—至今      组织部干部一处副处长",
      family: "配偶：杨帆（公务员）；子女：韩一诺（在读幼儿园）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2025-05", title: "青年岗位能手", org: "市直机关", type: "表彰" },
      ],
      punish: [],
      avatar: "韩",
      status: "在任",
      potential: 5,
      performance: 4,
    },
    {
      id: "C20260016",
      name: "杨明",
      gender: "男",
      birth: "1977-10",
      age: 48,
      nation: "汉族",
      native: "山西太原",
      party: "中共党员",
      partyDate: "2000-12",
      phone: "137****4455",
      email: "yang.ming@gov.cn",
      dept: "财务资产部",
      position: "副部长",
      level: "副处级",
      workAge: 25,
      edu: { level: "硕士研究生", school: "天津大学", major: "财务管理", degree: "管理学硕士" },
      resume: "1995.09—1999.07  天津大学本科\n1999.09—2002.07  天津大学硕士\n2002.07—2011.06  财务部预算主管\n2011.06—2019.09  财务部科长\n2019.09—至今      财务资产部副部长",
      family: "配偶：朱琳（审计局）；子女：杨子轩（已工作）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "杨",
      status: "在任",
      potential: 3,
      performance: 3,
    },
    {
      id: "C20260017",
      name: "朱国强",
      gender: "男",
      birth: "1973-01",
      age: 52,
      nation: "汉族",
      native: "陕西西安",
      party: "中共党员",
      partyDate: "1996-05",
      phone: "138****1122",
      email: "zhu.gq@gov.cn",
      dept: "安全生产部",
      position: "副部长",
      level: "副处级",
      workAge: 32,
      edu: { level: "大学本科", school: "西安建筑科技大学", major: "工程管理", degree: "工学学士" },
      resume: "1991.09—1995.07  西安建筑科技大学本科\n1995.07—2008.04  安全生产部技术主管\n2008.04—2016.10  安全生产部科长\n2016.10—至今      安全生产部副部长",
      family: "配偶：秦岚（退休）；子女：朱梓豪（在读大学）",
      assessment: [
        { year: 2025, result: "基本称职", rank: "前60%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "朱",
      status: "在任",
      potential: 2,
      performance: 3,
    },
    {
      id: "C20260018",
      name: "秦海洋",
      gender: "男",
      birth: "1987-06",
      age: 38,
      nation: "汉族",
      native: "贵州贵阳",
      party: "中共党员",
      partyDate: "2010-07",
      phone: "139****8899",
      email: "qin.hy@gov.cn",
      dept: "市场营销部",
      position: "部长",
      level: "正处级",
      workAge: 15,
      edu: { level: "硕士研究生", school: "中山大学", major: "工商管理", degree: "管理学硕士" },
      resume: "2005.09—2009.07  中山大学本科\n2009.09—2012.07  中山大学硕士\n2012.07—2018.08  市场营销部业务主管\n2018.08—2022.07  市场营销部副部长\n2022.07—至今      市场营销部部长",
      family: "配偶：尤静（外贸公司）；子女：秦朗（在读小学）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2024-12", title: "市场开拓标兵", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "秦",
      status: "在任",
      potential: 5,
      performance: 5,
    },
    {
      id: "C20260019",
      name: "尤彩霞",
      gender: "女",
      birth: "1982-12",
      age: 43,
      nation: "汉族",
      native: "云南昆明",
      party: "中共党员",
      partyDate: "2005-11",
      phone: "136****5560",
      email: "you.cx@gov.cn",
      dept: "综合管理部",
      position: "副主任",
      level: "副处级",
      workAge: 20,
      edu: { level: "硕士研究生", school: "云南大学", major: "行政管理", degree: "管理学硕士" },
      resume: "2000.09—2004.07  云南大学本科\n2004.09—2007.07  云南大学硕士\n2007.07—2015.05  综合管理部干事\n2015.05—2020.10  综合管理部科长\n2020.10—至今      综合管理部副主任",
      family: "配偶：许峰（事业单位）；子女：尤梓萱（在读初中）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "尤",
      status: "在任",
      potential: 3,
      performance: 4,
    },
    {
      id: "C20260020",
      name: "许文昌",
      gender: "男",
      birth: "1983-09",
      age: 42,
      nation: "汉族",
      native: "甘肃兰州",
      party: "中共党员",
      partyDate: "2006-09",
      phone: "135****3300",
      email: "xu.wc@gov.cn",
      dept: "党委办公室",
      position: "秘书科科长",
      level: "正科级",
      workAge: 18,
      edu: { level: "硕士研究生", school: "兰州大学", major: "汉语言文学", degree: "文学硕士" },
      resume: "2001.09—2005.07  兰州大学本科\n2005.09—2008.07  兰州大学硕士\n2008.07—2016.06  党委办公室秘书\n2016.06—至今      党委办公室秘书科科长",
      family: "配偶：何静（本单位）；子女：许知书（在读小学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "许",
      status: "在任",
      potential: 4,
      performance: 3,
    },
    {
      id: "C20260021",
      name: "马晓军",
      gender: "男",
      birth: "1990-03",
      age: 35,
      nation: "回族",
      native: "宁夏银川",
      party: "中共预备党员",
      partyDate: "2024-12",
      phone: "138****7070",
      email: "ma.xj@gov.cn",
      dept: "技术研发中心",
      position: "研发科副科长",
      level: "副科级",
      workAge: 9,
      edu: { level: "硕士研究生", school: "北京航空航天大学", major: "软件工程", degree: "工学硕士" },
      resume: "2008.09—2012.07  北京航空航天大学本科\n2012.09—2015.07  北京航空航天大学硕士\n2015.07—2020.06  技术研发中心工程师\n2020.06—至今      技术研发中心研发科副科长",
      family: "配偶：李娜（互联网公司）；子女：马一鸣（在读幼儿园）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
      ],
      rewards: [
        { date: "2025-04", title: "技术攻关先进个人", org: "本单位", type: "表彰" },
      ],
      punish: [],
      avatar: "马",
      status: "在任",
      potential: 5,
      performance: 5,
    },
    {
      id: "C20260022",
      name: "李慧敏",
      gender: "女",
      birth: "1985-02",
      age: 40,
      nation: "汉族",
      native: "内蒙古呼和浩特",
      party: "中共党员",
      partyDate: "2008-03",
      phone: "139****1212",
      email: "li.hm@gov.cn",
      dept: "纪检监察室",
      position: "副主任",
      level: "副处级",
      workAge: 17,
      edu: { level: "硕士研究生", school: "中国政法大学", major: "诉讼法学", degree: "法学硕士" },
      resume: "2003.09—2007.07  中国政法大学本科\n2007.09—2010.07  中国政法大学硕士\n2010.07—2018.05  纪检监察室干事\n2018.05—至今      纪检监察室副主任",
      family: "配偶：张磊（检察院）；子女：李思齐（在读小学）",
      assessment: [
        { year: 2025, result: "优秀", rank: "前15%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [
        { date: "2024-06", title: "办案能手", org: "市纪委", type: "荣誉表彰" },
      ],
      punish: [],
      avatar: "李",
      status: "在任",
      potential: 4,
      performance: 5,
    },
    {
      id: "C20260023",
      name: "张涛",
      gender: "男",
      birth: "1980-07",
      age: 45,
      nation: "汉族",
      native: "广西南宁",
      party: "中共党员",
      partyDate: "2003-04",
      phone: "137****8080",
      email: "zhang.tao@gov.cn",
      dept: "财务资产部",
      position: "预算科科长",
      level: "正科级",
      workAge: 22,
      edu: { level: "大学本科", school: "中南财经政法大学", major: "财政学", degree: "经济学学士" },
      resume: "1998.09—2002.07  中南财经政法大学本科\n2002.07—2012.08  财务部会计\n2012.08—2018.04  财务部副科长\n2018.04—至今      财务资产部预算科科长",
      family: "配偶：罗静（税务师事务所）；子女：张博文（在读高中）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [
        { date: "2023-09", title: "财务报表延误通报", org: "本单位", type: "通报" },
      ],
      avatar: "张",
      status: "在任",
      potential: 3,
      performance: 3,
    },
    {
      id: "C20260024",
      name: "罗红梅",
      gender: "女",
      birth: "1979-09",
      age: 46,
      nation: "汉族",
      native: "海南海口",
      party: "群众",
      partyDate: "—",
      phone: "136****9090",
      email: "luo.hm@gov.cn",
      dept: "工会",
      position: "副主席",
      level: "副处级",
      workAge: 24,
      edu: { level: "硕士研究生", school: "华南师范大学", major: "教育学", degree: "教育学硕士" },
      resume: "1997.09—2001.07  华南师范大学本科\n2001.09—2004.07  华南师范大学硕士\n2004.07—2013.06  工会干事\n2013.06—2020.05  工会科长\n2020.05—至今      工会副主席",
      family: "配偶：高翔（国企职工）；子女：罗可欣（在读大学）",
      assessment: [
        { year: 2025, result: "称职", rank: "前30%" },
        { year: 2024, result: "称职", rank: "前30%" },
      ],
      rewards: [],
      punish: [],
      avatar: "罗",
      status: "在任",
      potential: 3,
      performance: 3,
    },
  ];

  // ============ 派生统计 ============
  function getStats(list) {
    const total = list.length;
    const male = list.filter((c) => c.gender === "男").length;
    const female = total - male;
    const party = list.filter((c) => c.party === "中共党员").length;
    const probParty = list.filter((c) => c.party === "中共预备党员").length;
    const avgAge = Math.round(list.reduce((s, c) => s + c.age, 0) / total);
    const master = list.filter((c) => c.edu.level === "硕士研究生" || c.edu.level === "博士研究生").length;
    const doctor = list.filter((c) => c.edu.level === "博士研究生").length;
    return { total, male, female, party, probParty, avgAge, master, doctor };
  }

  // ============ SVG 图标集 ============
  // 统一 24x24 viewBox，stroke 继承 currentColor
  const ICON_PATHS = {
    dashboard: "M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z",
    roster: "M4 4h16v4H4V4zm0 6h16v4H4v-4zm0 6h10v4H4v-4z",
    assessment: "M5 21V9l7-5 7 5v12h-5v-7H10v7H5z",
    chart: "M4 20h16M7 20v-8m5 8V6m5 14v-5",
    user: "M12 12a4 4 0 100-8 4 4 0 000 8zm-7 9a7 7 0 0114 0",
    users: "M9 11a3.5 3.5 0 100-7 3.5 3.5 0 000 7zm0 2c-3 0-6 1.5-6 4v3h12v-3c0-2.5-3-4-6-4zm9.5-2a3 3 0 100-6 3 3 0 000 6zm.5 2c-.7 0-1.4.1-2 .3 1.2.9 2 2.2 2 3.7v3h4v-3c0-2.5-3-4-4-4z",
    building: "M3 21h18M5 21V5a1 1 0 011-1h8a1 1 0 011 1v16M19 21V9a1 1 0 00-1-1h-3M8 8h2M8 12h2M8 16h2",
    award: "M12 15a6 6 0 100-12 6 6 0 000 12zm-2 0l-2 7 4-2 4 2-2-7",
    bell: "M12 22a2.5 2.5 0 002.5-2.5h-5A2.5 2.5 0 0012 22zM18 16v-5a6 6 0 10-12 0v5l-2 2h16l-2-2z",
    settings: "M12 8a4 4 0 100 8 4 4 0 000-8zM19.4 15a1.7 1.7 0 00.3 1.9l.1.1a2 2 0 11-2.8 2.8l-.1-.1a1.7 1.7 0 00-1.9-.3 1.7 1.7 0 00-1 1.5V21a2 2 0 11-4 0v-.1a1.7 1.7 0 00-1.1-1.5 1.7 1.7 0 00-1.9.3l-.1.1a2 2 0 11-2.8-2.8l.1-.1a1.7 1.7 0 00.3-1.9 1.7 1.7 0 00-1.5-1H3a2 2 0 110-4h.1a1.7 1.7 0 001.5-1.1 1.7 1.7 0 00-.3-1.9l-.1-.1a2 2 0 112.8-2.8l.1.1a1.7 1.7 0 001.9.3H9a1.7 1.7 0 001-1.5V3a2 2 0 114 0v.1a1.7 1.7 0 001 1.5 1.7 1.7 0 001.9-.3l.1-.1a2 2 0 112.8 2.8l-.1.1a1.7 1.7 0 00-.3 1.9V9a1.7 1.7 0 001.5 1H21a2 2 0 110 4h-.1a1.7 1.7 0 00-1.5 1z",
    search: "M11 19a8 8 0 100-16 8 8 0 000 16zm10 2l-4.35-4.35",
    filter: "M3 5h18l-7 8v6l-4-2v-4L3 5z",
    plus: "M12 5v14M5 12h14",
    edit: "M14 5l5 5M3 21h4L20 8l-4-4L3 17v4z",
    upload: "M12 16V4m0 0L7 9m5-5l5 5M5 20h14",
    download: "M12 4v12m0 0l-5-5m5 5l5-5M5 20h14",
    refresh: "M4 12a8 8 0 0114-5.3L21 9M20 12a8 8 0 01-14 5.3L3 15M21 4v5h-5M3 20v-5h5",
    chevronRight: "M9 6l6 6-6 6",
    chevronLeft: "M15 6l-6 6 6 6",
    chevronDown: "M6 9l6 6 6-6",
    back: "M19 12H5m0 0l6 6m-6-6l6-6",
    calendar: "M3 6a1 1 0 011-1h16a1 1 0 011 1v14a1 1 0 01-1 1H4a1 1 0 01-1-1V6zm1 5h16M8 3v4M16 3v4",
    phone: "M6.6 10.8a15 15 0 006.6 6.6l2.2-2.2a1 1 0 011-.24 11.4 11.4 0 003.6.58 1 1 0 011 1V20a1 1 0 01-1 1A17 17 0 013 4a1 1 0 011-1h3.5a1 1 0 011 1c0 1.25.2 2.46.58 3.6a1 1 0 01-.25 1l-2.23 2.2z",
    mail: "M3 6a1 1 0 011-1h16a1 1 0 011 1v12a1 1 0 01-1 1H4a1 1 0 01-1-1V6zm1 1l8 5 8-5",
    location: "M12 22s7-7.5 7-13a7 7 0 10-14 0c0 5.5 7 13 7 13zm0-9.5a3.5 3.5 0 100-7 3.5 3.5 0 000 7z",
    check: "M5 13l4 4L19 7",
    close: "M6 6l12 12M18 6L6 18",
    star: "M12 3l2.6 5.6 6.1.6-4.6 4 1.4 6L12 16.7 6.5 19.2l1.4-6-4.6-4 6.1-.6L12 3z",
    grid: "M4 4h7v7H4V4zm9 0h7v7h-7V4zM4 13h7v7H4v-7zm9 0h7v7h-7v-7z",
    history: "M3 12a9 9 0 109-9 9 9 0 00-7 3.3L3 8m0-3v3h3m6-1v5l3 2",
    doc: "M7 3h7l5 5v13a1 1 0 01-1 1H7a1 1 0 01-1-1V4a1 1 0 011-1zm7 0v5h5M9 13h6M9 17h6",
    database: "M12 3c4.97 0 9 1.34 9 3s-4.03 3-9 3-9-1.34-9-3 4.03-3 9-3zM3 6v6c0 1.66 4.03 3 9 3s9-1.34 9-3V6M3 12v6c0 1.66 4.03 3 9 3s9-1.34 9-3v-6",
    scan: "M4 7V5a1 1 0 011-1h2M17 4h2a1 1 0 011 1v2M20 17v2a1 1 0 01-1 1h-2M7 20H5a1 1 0 01-1-1v-2M4 12h16",
    menu: "M4 6h16M4 12h16M4 18h16",
    home: "M3 11l9-8 9 8M5 10v10h5v-6h4v6h5V10",
    more: "M12 13a1 1 0 100-2 1 1 0 000 2zm7 0a1 1 0 100-2 1 1 0 000 2zM5 13a1 1 0 100-2 1 1 0 000 2z",
    eye: "M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7zm10 3a3 3 0 100-6 3 3 0 000 6z",
    logout: "M16 17l5-5-5-5M21 12H9M9 21H5a1 1 0 01-1-1V4a1 1 0 011-1h4",
    flag: "M5 21V4m0 1h11l-2 4 2 4H5",
    trendUp: "M3 17l6-6 4 4 8-8M21 7v5h-5",
    shield: "M12 3l8 3v6c0 4.5-3.2 8.5-8 9-4.8-.5-8-4.5-8-9V6l8-3z",
    book: "M4 5a2 2 0 012-2h13v16H6a2 2 0 00-2 2V5zm15 14H6",
    briefcase: "M3 8h18v11a1 1 0 01-1 1H4a1 1 0 01-1-1V8zm5-3h8v3H8V5z",
    save: "M5 3h11l5 5v13a1 1 0 01-1 1H5a1 1 0 01-1-1V4a1 1 0 011-1zm2 0v6h9V3M8 14h8v7H8z",
    sync: "M4 12a8 8 0 0114-5.3L21 9M20 12a8 8 0 01-14 5.3L3 15",
    file: "M7 3h7l5 5v13a1 1 0 01-1 1H7a1 1 0 01-1-1V4a1 1 0 011-1z",
    clock: "M12 22a10 10 0 100-20 10 10 0 000 20zm0-15v5l3 2",
    pin: "M12 22s7-7.5 7-13a7 7 0 10-14 0c0 5.5 7 13 7 13z",
  };

  // 单 path 图标：整条 d 字符串渲染为一个 <path>，无需拆分
  // （SVG 单个 d 属性内可以包含多段命令 M/L/C/Z …；拆分反而会让每段单独以非 M 命令开头而失效）
  function IconFixed({ name, size, className, style, strokeWidth }) {
    const d = ICON_PATHS[name];
    if (!d) return null;
    const s = size || 20;
    return React.createElement(
      "svg",
      {
        width: s,
        height: s,
        viewBox: "0 0 24 24",
        fill: "none",
        stroke: "currentColor",
        strokeWidth: strokeWidth || 1.8,
        strokeLinecap: "round",
        strokeLinejoin: "round",
        className: className,
        style: style,
        "aria-hidden": true,
      },
      React.createElement("path", { d: d })
    );
  }

  // ============ 共享原子组件 ============
  function Avatar({ cadre, size }) {
    const s = size || 44;
    const bg =
      cadre.gender === "女"
        ? "linear-gradient(135deg,#005d30,#003d1f)"
        : "linear-gradient(135deg,#0A3B24,#176543)";
    return React.createElement(
      "div",
      {
        className: "avatar",
        style: {
          width: s,
          height: s,
          borderRadius: "50%",
          background: bg,
          color: "#fff",
          display: "flex",
          alignItems: "center",
          justifyContent: "center",
          fontSize: s * 0.4,
          fontWeight: 600,
          flexShrink: 0,
          fontFamily: '"PingFang SC","Source Han Sans SC",sans-serif',
        },
      },
      cadre.avatar || cadre.name.slice(0, 1)
    );
  }

  function Badge({ children, color, solid }) {
    const palette = {
      red: solid ? { bg: "#005d30", color: "#fff" } : { bg: "#E6F0EA", color: "#005d30" },
      blue: solid ? { bg: "#0A3B24", color: "#fff" } : { bg: "#E5EDE7", color: "#0A3B24" },
      gold: solid ? { bg: "#dbb000", color: "#fff" } : { bg: "#FBF3CE", color: "#8a7600" },
      green: solid ? { bg: "#16A34A", color: "#fff" } : { bg: "#DCFCE7", color: "#15803D" },
      gray: solid ? { bg: "#6B7280", color: "#fff" } : { bg: "#F3F4F6", color: "#6B7280" },
      orange: solid ? { bg: "#D97706", color: "#fff" } : { bg: "#FEF3C7", color: "#B45309" },
    };
    const p = palette[color] || palette.gray;
    return React.createElement(
      "span",
      {
        style: {
          display: "inline-flex",
          alignItems: "center",
          gap: 4,
          padding: "2px 9px",
          borderRadius: 4,
          fontSize: 12,
          fontWeight: 500,
          lineHeight: "20px",
          whiteSpace: "nowrap",
          ...p,
        },
      },
      children
    );
  }

  // 将履历文本拆为时间段数组
  function parseResume(text) {
    if (!text) return [];
    return text
      .split("\n")
      .filter(Boolean)
      .map((line) => {
        const m = line.match(/^(\d{4}\.\d{2})\s*[—-]\s*(至今|\d{4}\.\d{2})\s+(.+)$/);
        if (m) return { from: m[1], to: m[2], desc: m[3].trim() };
        return { from: "", to: "", desc: line.trim() };
      });
  }

  // ============ 暴露到 window ============
  Object.assign(window, {
    CADRES,
    DEPARTMENTS,
    LEVELS,
    getStats,
    Icon: IconFixed,
    Avatar,
    Badge,
    parseResume,
  });
})();
