From 2a16d32be5e00c9b4b9c01e06430a02c47fcd8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=86=95?= Date: Tue, 2 Jun 2026 14:24:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(miniapp):=20=E6=96=B0=E5=A2=9E=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=B9=B4=E5=AE=A1=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提供待办提醒、现场办理、草稿保存与历史查询,保存不做必填校验,提交同步证照检验有效期。 Co-authored-by: Cursor --- ONE-OS小程序/年审管理.jsx | 4262 +++++++++++++++++++++++++++++++++++++ 1 file changed, 4262 insertions(+) create mode 100644 ONE-OS小程序/年审管理.jsx diff --git a/ONE-OS小程序/年审管理.jsx b/ONE-OS小程序/年审管理.jsx new file mode 100644 index 0000000..057dd26 --- /dev/null +++ b/ONE-OS小程序/年审管理.jsx @@ -0,0 +1,4262 @@ +// 【重要】必须使用 const Component 作为组件变量名 +// ONE-OS 小程序 - 年审管理(待处理 / 历史记录 + 筛选抽屉) + +const { useState, useMemo, useEffect, useRef, useCallback } = React; +const moment = window.moment || window.dayjs; + +const COLOR_PRIMARY = '#16D1A1'; +const COLOR_PRIMARY_DEEP = '#00BFA5'; +const COLOR_TEXT = '#1D2129'; +const COLOR_MUTED = '#86909C'; +const COLOR_LINE = '#E5E6EB'; +const COLOR_BG = '#FFFFFF'; +const COLOR_PAGE = '#F2F3F5'; +const COLOR_WARN = '#FF7D00'; +const COLOR_DANGER = '#F53F3F'; +const FONT_FAMILY = + '-apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", STHeiti, sans-serif'; + +/** 兼容 Axhub:antd 可能是 default 导出或子集包,避免解构出 undefined 导致 React #130 */ +const resolveAntdBundle = () => { + const raw = window.antd; + if (!raw) return {}; + if (raw.default && typeof raw.default === 'object') { + return { ...raw, ...raw.default }; + } + return raw; +}; + +const antd = resolveAntdBundle(); + +const FallbackTag = ({ children, className, style, color }) => ( + + {children} + +); + +const FallbackInputNumber = ({ value, onChange, placeholder, min, precision, bordered, controls }) => ( + { + const raw = e.target.value; + if (onChange) onChange(raw === '' ? null : Number(raw)); + }} + /> +); + +const FallbackUpload = ({ children, className, onChange, fileList, multiple, accept, beforeUpload, showUploadList }) => ( + +); + +const FallbackDrawer = ({ open, title, placement, width, height, onClose, children, footer, styles }) => + open ? ( +
+
e.stopPropagation()} + role="dialog" + > +
{title}
+
{children}
+ {footer ?
{footer}
: null} +
+
+ ) : null; + +const FallbackModal = ({ open, title, children, footer, onCancel, centered, width, bodyStyle }) => + open ? ( +
+
e.stopPropagation()} + role="dialog" + > +
{title}
+
{children}
+ {footer ? ( +
{footer}
+ ) : null} +
+
+ ) : null; + +const FallbackInput = ({ + value, + onChange, + readOnly, + placeholder, + bordered, + disabled, + className, + onFocus, + style +}) => ( + onChange && onChange(e)} + onFocus={onFocus} + style={{ width: '100%', border: bordered === false ? 'none' : undefined, ...style }} + /> +); + +const FallbackSelect = ({ value, onChange, options, placeholder, bordered, allowClear }) => ( + +); + +const FallbackButton = ({ children, onClick, type, block, size, disabled, style }) => ( + +); + +const Drawer = antd.Drawer || FallbackDrawer; +const Input = antd.Input || FallbackInput; +const Select = antd.Select || FallbackSelect; +const Button = antd.Button || FallbackButton; +const Tag = antd.Tag || FallbackTag; +const Modal = antd.Modal || FallbackModal; +const message = antd.message || { + success: (t) => window.alert(t), + error: (t) => window.alert(t), + warning: (t) => window.alert(t), + info: (t) => window.alert(t) +}; +const InputNumber = antd.InputNumber || (Input && Input.Number) || FallbackInputNumber; +const Upload = antd.Upload || FallbackUpload; +const Image = antd.Image; + +const FallbackTextArea = ({ value, onChange, placeholder, bordered, rows }) => ( +