Files
ONE-OS/ONE-OS小程序/还车应结款-审批.jsx

97 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 【重要】必须使用 const Component 作为组件变量名
// ONE-OS 小程序 - 还车应结款审批办理(参照 web 端还车应结款-查看,适配移动端)
// 独立预览页:完整审批能力已内嵌于「审批中心.jsx」本页供 Axhub 单独打开预览。
const { useState, useMemo, useRef, useEffect } = React;
const moment = window.moment || window.dayjs;
const COLOR_PRIMARY = '#16D1A1';
const COLOR_PRIMARY_DEEP = '#00BFA5';
const COLOR_PRIMARY_SOFT = 'rgba(22, 209, 161, 0.12)';
const COLOR_TEXT = '#1D2129';
const COLOR_TEXT_SEC = '#4E5969';
const COLOR_MUTED = '#86909C';
const COLOR_LINE = '#E5E6EB';
const COLOR_BG = '#FFFFFF';
const COLOR_PAGE = '#F2F3F5';
const COLOR_SUCCESS = '#00B42A';
const COLOR_DANGER = '#F53F3F';
const COLOR_WARN = '#FF7D00';
const FONT_FAMILY = '-apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", STHeiti, sans-serif';
const antd = (() => {
const raw = window.antd;
if (!raw) return {};
return raw.default && typeof raw.default === 'object' ? { ...raw, ...raw.default } : raw;
})();
const message = antd.message || { info: () => {}, success: () => {}, warning: () => {} };
const Drawer = antd.Drawer;
const formatMoney = (val) => {
const n = parseFloat(val);
if (Number.isNaN(n)) return val || '—';
return `¥${n.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
};
const formatYuan = (val) => {
const n = parseFloat(val);
if (Number.isNaN(n)) return '—';
return `${n.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} 元`;
};
const DEFAULT_TASK = {
bizNo: 'HC-2026-0418',
plateNo: '粤B58888F',
customerName: '嘉兴某某物流有限公司',
projectName: '嘉兴腾4.5T租赁',
pendingSettle: '927.50',
depositAmount: '5000.00',
refundTotal: '4072.50',
payTotal: '0.00',
actualRent: '0.00',
};
const Component = function ReturnSettlementApproveStandalone() {
const task = window.__returnSettlementTask || DEFAULT_TASK;
const handleBack = () => {
if (window.__returnSettlementBack) window.__returnSettlementBack();
else message.info('返回审批中心(原型)');
};
return (
<div className="hc-mini-root">
<style>{`
.hc-mini-root { min-height:100dvh; background:linear-gradient(165deg,#e8ebef 0%,${COLOR_PAGE} 40%); display:flex; justify-content:center; padding:16px 12px 32px; font-family:${FONT_FAMILY}; }
.hc-phone { width:100%; max-width:390px; min-height:844px; background:${COLOR_PAGE}; border-radius:28px; overflow:hidden; box-shadow:0 24px 48px rgba(15,23,42,.14); display:flex; flex-direction:column; position:relative; }
.hc-chrome { background:${COLOR_BG}; border-bottom:1px solid rgba(0,0,0,.05); padding:44px 8px 0; }
.hc-nav { height:48px; display:flex; align-items:center; position:relative; }
.hc-nav-title { flex:1; text-align:center; font-size:17px; font-weight:700; }
.hc-back { width:40px; height:40px; border:none; background:transparent; cursor:pointer; }
.hc-tip { padding:24px; text-align:center; color:${COLOR_MUTED}; font-size:14px; line-height:1.6; }
`}</style>
<div className="hc-phone">
<div className="hc-chrome">
<div className="hc-nav">
<button type="button" className="hc-back" onClick={handleBack} aria-label="返回"></button>
<div className="hc-nav-title">还车应结款审批</div>
<span style={{ width: 40 }} />
</div>
</div>
<div className="hc-tip">
完整还车应结款审批页含结算明细费用分组审批操作已内嵌于
<strong> 审批中心.jsx </strong>
请从我的待办 还车应结款 HC-2026-0418 去审批进入体验
<br /><br />
待结算总额<strong style={{ color: '#8B5CF6' }}>{formatMoney(task.pendingSettle)}</strong>
<br />
{task.plateNo} · {task.customerName}
</div>
</div>
</div>
);
};
if (typeof window !== 'undefined') window.Component = Component;
export default Component;