里立即把 class 换成 js** —— 它在 CSS 生效前、任何渲染之前就跑了,所以浏览器**根本没机会**画出原生框; · CSS 里 `.js .dt-input .dt-native { visibility:hidden }` 先把原生藏住 (用 visibility 而不是 display:none:保留占位高度,避免升级瞬间布局跳动); · app.js 的 Semi 就绪后加 `.is-semi` 把 Semi 显示出来(原生继续藏着)。 这样"闪烁"从**结构上**消失,而不是靠调加载顺序去掩盖。 */ ?> <?= e($pageTitle) ?> · 家书 asset('/assets/vendor/antd/antd-with-locales.min.js'), 'dayjs' => asset('/assets/vendor/antd/dayjs.min.js'), /* dayjs 的核心包**只有 en**;中文 locale 是单独一个文件, 加载后调 `dayjs.locale('zh-cn')` 才生效(否则面板里星期还是 Su/Mo…)。 */ 'dayjsZh' => asset('/assets/vendor/antd/dayjs-zh-cn.js'), /* ⚠️ antd 的 UMD **要求全局有 React / ReactDOM**(缺一个就直接挂不出来 —— 实测报错是 `Cannot read properties of undefined (reading 'createContext')`)。 项目里已经有一套 React 18.3.1(原本给 Semi 用的),**直接复用同一份**: 同一个 UMD 文件、同版本,先后加载只会重复赋值、不会冲突。 ⇒ 主版本要动的话,这两处(fb-semi / fb-antd)必须一起动。 */ 'react' => asset('/assets/vendor/semi/react.min.js'), 'dom' => asset('/assets/vendor/semi/react-dom.min.js'), ], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | JSON_HEX_QUOT)) ?>"> 上换成本模块的色, 下面所有用到品牌色的地方(按钮、链接、页头高亮…)自动跟着变。 ⚠️ 只覆盖这三个变量,**不碰** --paper / --ink 这些纸墨底色 —— 模块色是用来"分区"的,把整页背景也换了就不是家书了。 */ ?>
家书
实现:不需要 JS 就能展开/收起,app.js 只额外补 "点外面"和"Esc"两件事。 */ ?>
` 前(本文件本来就是), 所以这里能直接查;不需要 DOMContentLoaded 包一层。 ⚠️ 无 JS 兜底不受影响:组件的 `