Compare commits
10 Commits
362b13ac43
...
debed766d5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
debed766d5 | ||
|
|
abc0a6051d | ||
|
|
513e113ea9 | ||
|
|
07c74c956e | ||
|
|
29f6a6e696 | ||
|
|
e2158286be | ||
|
|
db6a8bc97f | ||
|
|
41ce02512a | ||
|
|
d09bfc4ec6 | ||
|
|
f75e19cf85 |
15
package-lock.json
generated
15
package-lock.json
generated
@@ -76,6 +76,7 @@
|
||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.5",
|
||||
@@ -1835,6 +1836,7 @@
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
@@ -1845,6 +1847,7 @@
|
||||
"integrity": "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"csstype": "^3.2.2"
|
||||
}
|
||||
@@ -1905,6 +1908,7 @@
|
||||
"integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "8.47.0",
|
||||
"@typescript-eslint/types": "8.47.0",
|
||||
@@ -2153,6 +2157,7 @@
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@@ -2367,6 +2372,7 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.8.25",
|
||||
"caniuse-lite": "^1.0.30001754",
|
||||
@@ -2775,6 +2781,7 @@
|
||||
"integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.8.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
@@ -3888,6 +3895,7 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
@@ -4089,6 +4097,7 @@
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
|
||||
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -4098,6 +4107,7 @@
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
|
||||
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"scheduler": "^0.27.0"
|
||||
},
|
||||
@@ -4493,6 +4503,7 @@
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@@ -4552,6 +4563,7 @@
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@@ -4645,6 +4657,7 @@
|
||||
"integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.5.0",
|
||||
@@ -4738,6 +4751,7 @@
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@@ -4810,6 +4824,7 @@
|
||||
"integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/colinhacks"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "export NODE_ENV=development && vite --host 0.0.0.0",
|
||||
"dev": "export NODE_ENV=development && vite --host 0.0.0.0 --port 5777",
|
||||
"build": "tsc -b && vite build",
|
||||
"lint": "eslint .",
|
||||
"preview": "vite preview"
|
||||
@@ -33,4 +33,4 @@
|
||||
"typescript-eslint": "^8.46.4",
|
||||
"vite": "^7.2.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,11 @@ import { RouterProvider } from 'react-router-dom';
|
||||
import { router } from './router';
|
||||
|
||||
function App() {
|
||||
return <RouterProvider router={router} />;
|
||||
return (
|
||||
<div className='h-screen max-h-screen overflow-hidden'>
|
||||
<RouterProvider router={router} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
|
||||
@@ -11,7 +11,7 @@ const API_CONFIG = {
|
||||
// 开发环境使用内网,生产环境使用外网
|
||||
BASE_URL: import.meta.env.NODE_ENV === 'development'
|
||||
? 'http://10.1.5.118:8077/platform-api'
|
||||
: 'http://apihis.circleharmonyhospital.cn:8982/platform-api',
|
||||
: '/platform-api',
|
||||
// 请求超时时间(120秒)
|
||||
TIMEOUT: 120000,
|
||||
};
|
||||
|
||||
@@ -548,6 +548,8 @@ export interface InputPhysicalExamAddItem {
|
||||
scrm_account_name?: string | null;
|
||||
/** 项目名称(默认空值,传入项目名称过滤数据) */
|
||||
item_name?: string;
|
||||
/** 折扣率 */
|
||||
discount_rate?: number | null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -720,11 +722,11 @@ export type PhysicalExamQrcodeCreateResponse = CommonActionResult<string>;
|
||||
*/
|
||||
export interface InputAddItemCombinationInfo {
|
||||
/** 体检组合项目代码 */
|
||||
combination_item_code: string;
|
||||
combination_item_code?: string | null;
|
||||
/** 体检组合项目价格 */
|
||||
combination_item_price: number;
|
||||
combination_item_price?: number | null;
|
||||
/** 折扣比例 */
|
||||
discount_rate: number;
|
||||
discount_rate?: number | null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -741,6 +743,8 @@ export interface InputOrderPaymentInfo {
|
||||
pay_type: number;
|
||||
/** 挂账公司ID(挂账公司传对应的ID,其他传0) */
|
||||
company_id: number;
|
||||
/** 订单总金额 */
|
||||
orderAmount: number;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1396,6 +1400,15 @@ export interface InputCustomSettlementApplyApprove {
|
||||
add_item_id?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 体检加项自定义结算申请-加项组合项
|
||||
*/
|
||||
export interface OutputCustomSettlementApplyApproveItem {
|
||||
combination_item_code?: string | null;
|
||||
combination_item_price?: number | null;
|
||||
discount_rate?: number | null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 体检加项自定义结算申请状态编辑出参
|
||||
*/
|
||||
@@ -1408,6 +1421,12 @@ export interface OutputCustomSettlementApplyApprove {
|
||||
apply_status_name?: string | null;
|
||||
/** 最终结算金额 */
|
||||
final_settlement_price?: number | null;
|
||||
/** 申请理由 */
|
||||
apply_reason?: string;
|
||||
/** 折扣 */
|
||||
discount_ratio?: number | null;
|
||||
/** 加项组合列表 */
|
||||
listAddItemCombination?: OutputCustomSettlementApplyApproveItem[] | null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1427,6 +1446,8 @@ export interface InputAddItemCustomSettlementDetail {
|
||||
original_price: number;
|
||||
/** 结算金额 */
|
||||
settlement_price: number;
|
||||
/** 折扣率 */
|
||||
discount_ratio?: number | null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1447,6 +1468,8 @@ export interface InputCustomSettlementApply {
|
||||
final_settlement_price?: number;
|
||||
/** 申请理由 */
|
||||
apply_reason?: string;
|
||||
/** 申请人 */
|
||||
apply_user: string;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1470,6 +1493,8 @@ export interface InputCustomSettlementApplyCancel {
|
||||
physical_exam_id: number;
|
||||
/** 体检加项组合ID(多个逗号分隔,例如:123,456) */
|
||||
add_item_id: string;
|
||||
/** 申请人 */
|
||||
cancel_user: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -113,7 +113,7 @@ export const ExamDeliveryPanel = ({ client }: { client: ExamClient }) => {
|
||||
</div>
|
||||
|
||||
{viewMode === 'form' ? (
|
||||
<>
|
||||
<div className='overflow-y-auto overflow-x-hidden max-h-[clamp(260px,calc(100vh-520px),560px)] pr-1'>
|
||||
{infoLoading && (
|
||||
<div className='mb-3 text-xs text-gray-500'>正在加载地址信息...</div>
|
||||
)}
|
||||
@@ -261,7 +261,7 @@ export const ExamDeliveryPanel = ({ client }: { client: ExamClient }) => {
|
||||
{saveLoading ? '保存中...' : '保存寄送信息'}
|
||||
</Button>
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
) : (
|
||||
<div className='flex flex-col items-center justify-center py-8'>
|
||||
{qrcodeLoading ? (
|
||||
@@ -271,7 +271,7 @@ export const ExamDeliveryPanel = ({ client }: { client: ExamClient }) => {
|
||||
<img
|
||||
src={qrcodeUrl.startsWith('data:') ? qrcodeUrl : `data:image/png;base64,${qrcodeUrl}`}
|
||||
alt='报告寄送登记二维码'
|
||||
className='max-w-full max-h-[400px] object-contain'
|
||||
className='max-w-full max-h-[clamp(240px,calc(100vh-520px),400px)] object-contain'
|
||||
/>
|
||||
<div className='text-xs text-gray-500'>请扫描二维码进行报告寄送登记</div>
|
||||
</div>
|
||||
|
||||
@@ -16,6 +16,7 @@ interface ExamDetailPanelProps {
|
||||
addItemInfoList: CustomerExamAddItem[] | null;
|
||||
progressList: PhysicalExamProgressItem[] | null;
|
||||
loading: boolean;
|
||||
onCustomerUpdated?: () => void;
|
||||
}
|
||||
|
||||
const getMaritalCodeFromText = (text: string): number => {
|
||||
@@ -33,6 +34,7 @@ export const ExamDetailPanel = ({
|
||||
addItemInfoList,
|
||||
progressList,
|
||||
loading,
|
||||
onCustomerUpdated,
|
||||
}: ExamDetailPanelProps) => {
|
||||
const basePhone = customerInfo?.phone || (client['mobile' as keyof ExamClient] as string | undefined) || '';
|
||||
const baseMaritalText =
|
||||
@@ -108,6 +110,7 @@ export const ExamDetailPanel = ({
|
||||
if (res.Status === 200) {
|
||||
setEditMessage('保存成功');
|
||||
setPhoneEditing(false);
|
||||
onCustomerUpdated?.();
|
||||
setTimeout(() => setEditMessage(null), 2000);
|
||||
} else {
|
||||
setEditMessage(res.Message || '保存失败');
|
||||
@@ -140,6 +143,7 @@ export const ExamDetailPanel = ({
|
||||
if (res.Status === 200) {
|
||||
setEditMessage('保存成功');
|
||||
setMaritalEditing(false);
|
||||
onCustomerUpdated?.();
|
||||
setTimeout(() => setEditMessage(null), 2000);
|
||||
} else {
|
||||
setEditMessage(res.Message || '保存失败');
|
||||
|
||||
@@ -76,6 +76,16 @@ export const ExamModal = ({ client, tab, onTabChange, onClose }: ExamModalProps)
|
||||
.finally(() => setDetailLoading(false));
|
||||
}, [client.id]);
|
||||
|
||||
const refetchDetail = () => {
|
||||
const physical_exam_id = Number(client.id);
|
||||
if (!physical_exam_id) return;
|
||||
getCustomerDetail({ physical_exam_id }).then((detailRes) => {
|
||||
setCustomerInfo(detailRes.Data?.customerInfo ?? null);
|
||||
setAppointmentInfo(detailRes.Data?.appointmentInfo ?? null);
|
||||
setAddItemInfoList(detailRes.Data?.addItemInfoList ?? null);
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
className='fixed inset-0 z-40 flex items-center justify-center bg-black/50'
|
||||
@@ -153,6 +163,7 @@ export const ExamModal = ({ client, tab, onTabChange, onClose }: ExamModalProps)
|
||||
addItemInfoList={addItemInfoList}
|
||||
progressList={progressList}
|
||||
loading={detailLoading}
|
||||
onCustomerUpdated={refetchDetail}
|
||||
/>
|
||||
)}
|
||||
{tab === 'sign' && <ExamSignPanel examId={Number(client.id)} onBusyChange={setSignBusy} />}
|
||||
|
||||
@@ -22,10 +22,18 @@ const NAV_ITEMS = [
|
||||
{ key: 'support', icon: IconSupport, label: '客服咨询' },
|
||||
] as const;
|
||||
|
||||
const toggleFullscreen = () => {
|
||||
if (!document.fullscreenElement) {
|
||||
document.documentElement.requestFullscreen?.();
|
||||
} else {
|
||||
document.exitFullscreen?.();
|
||||
}
|
||||
};
|
||||
|
||||
export const Sidebar = ({ active, onNavigate, onQuickAction }: SidebarProps) => (
|
||||
<aside className='bg-white border-r p-4 flex flex-col gap-4'>
|
||||
<aside className='h-screen max-h-screen bg-white border-r p-4 flex flex-col gap-4 overflow-hidden'>
|
||||
<div>
|
||||
<div className='text-base font-semibold'>圆和医疗 · 体检中心</div>
|
||||
<button type='button' onClick={toggleFullscreen} className='text-base font-semibold cursor-pointer hover:opacity-80 text-left'>圆和医疗 · 体检中心</button>
|
||||
<div className='text-xs text-gray-500 mt-1'></div>
|
||||
</div>
|
||||
|
||||
@@ -73,13 +81,13 @@ export const Sidebar = ({ active, onNavigate, onQuickAction }: SidebarProps) =>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className='mt-auto p-3 rounded-2xl border bg-gray-50/70 text-xs flex flex-col gap-2'>
|
||||
{/* <section className='mt-auto p-3 rounded-2xl border bg-gray-50/70 text-xs flex flex-col gap-2'>
|
||||
<div className='text-sm font-medium flex items-center gap-2'>
|
||||
<span>💻</span>
|
||||
<span>客服 / IT 支持</span>
|
||||
</div>
|
||||
<div className='text-gray-600'>遇到系统问题可一键联系 IT / 运营支持。</div>
|
||||
</section>
|
||||
</section> */}
|
||||
</aside>
|
||||
);
|
||||
|
||||
|
||||
@@ -28,18 +28,18 @@ export const TopBar = ({ enableSearch = true, operatorName, onLoginClick, onLogo
|
||||
return (
|
||||
<header className='flex items-center gap-3 p-2 border-b bg-white'>
|
||||
<div className='flex-1 flex items-center gap-3'>
|
||||
{enableSearch ? (
|
||||
{/* {enableSearch ? (
|
||||
<div className='w-[420px] max-w-[60vw] h-[36px] flex items-center'>
|
||||
{/* <Input
|
||||
<Input
|
||||
placeholder='搜索 姓名 / 证件号 / 手机号'
|
||||
value={search}
|
||||
onChange={(e) => onSearch(e.target.value)}
|
||||
className='text-sm'
|
||||
/> */}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div className='text-sm text-gray-500 flex items-center p-[9px] pl-[14px]'>圆和医疗 · 体检驾驶舱</div>
|
||||
)}
|
||||
)} */}
|
||||
</div>
|
||||
<div className='flex items-center gap-3 text-xs relative'>
|
||||
<button
|
||||
|
||||
@@ -95,9 +95,9 @@ export const NoteModal = ({ noteText, onNoteChange, onClose }: NoteModalProps) =
|
||||
{saving ? '保存中...' : '保存'}
|
||||
</button>
|
||||
</div>
|
||||
<div className='text-right text-[11px] text-gray-500'>
|
||||
{/* <div className='text-right text-[11px] text-gray-500'>
|
||||
备注内容会同步至客户详情页,供前台和导检护士查看。
|
||||
</div>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,10 +2,10 @@ import { Card, CardContent, CardHeader } from '../ui';
|
||||
|
||||
export const SupportSection = () => (
|
||||
<Card>
|
||||
<CardHeader>客服咨询 · 圆圆客服台卡</CardHeader>
|
||||
{/* <CardHeader>客服咨询 · 圆圆客服台卡</CardHeader> */}
|
||||
<CardContent>
|
||||
<div className='grid grid-cols-[1.2fr_1fr] gap-6 items-center'>
|
||||
<div className='space-y-3 text-sm text-gray-700'>
|
||||
<div className='items-center'>
|
||||
{/* <div className='space-y-3 text-sm text-gray-700'>
|
||||
<p>通过「圆圆客服」二维码,客户可获得一站式健康服务:包含体检预约、报告查询、报告解读等。</p>
|
||||
<ul className='list-disc ml-5 space-y-1 text-xs text-gray-600'>
|
||||
<li>支持体检当天现场扫码添加,绑定客户信息</li>
|
||||
@@ -13,19 +13,19 @@ export const SupportSection = () => (
|
||||
<li>提供一对一健康咨询与报告解读服务</li>
|
||||
</ul>
|
||||
<div className='text-xs text-gray-500'>注:实际系统中可上传设计好的「圆圆客服二维码台卡」图片,用于前台展示与打印。</div>
|
||||
</div>
|
||||
</div> */}
|
||||
|
||||
<div className='h-64 rounded-3xl overflow-hidden shadow-inner flex items-center justify-center bg-gradient-to-b from-[#152749] to-[#c73545]'>
|
||||
<div className='flex flex-col items-center gap-3 text-white'>
|
||||
<div className='text-[11px] tracking-[0.2em] opacity-80'>CIRCLE HARMONY · 圆和医疗</div>
|
||||
<div className='text-sm font-medium'>圆圆客服 · 一站式健康服务</div>
|
||||
<div className='w-28 h-28 bg-none flex items-center justify-center'>
|
||||
<div className='w-30 h-30 rounded-md overflow-hidden'>
|
||||
<div className='h-[70vh] rounded-3xl overflow-hidden shadow-inner flex items-center justify-center bg-gradient-to-b from-[#152749] to-[#c73545]'>
|
||||
<div className='flex flex-col items-center gap-5 text-white'>
|
||||
<div className='text-base tracking-[0.2em] opacity-80'>CIRCLE HARMONY · 圆和医疗</div>
|
||||
<div className='text-lg font-medium'>圆圆客服 · 一站式健康服务</div>
|
||||
<div className='w-72 h-72 bg-none flex items-center justify-center'>
|
||||
<div className='w-72 h-72 rounded-md overflow-hidden'>
|
||||
<img src="https://datacenter-open.oss-cn-hangzhou.aliyuncs.com/his/kefu-zixun.png" alt='圆圆客服二维码' className='w-full h-full object-cover' />
|
||||
</div>
|
||||
</div>
|
||||
<div className='text-sm font-semibold'>一对一专属服务</div>
|
||||
<div className='px-4 py-1.5 rounded-full border border-white/70 text-[11px] flex gap-2'>
|
||||
<div className='text-lg font-semibold'>一对一专属服务</div>
|
||||
<div className='px-6 py-2 rounded-full border border-white/70 text-sm flex gap-2'>
|
||||
<span>服务预约</span>
|
||||
<span>/</span>
|
||||
<span>报告查询</span>
|
||||
|
||||
@@ -7,17 +7,21 @@
|
||||
scrollbar-width: none;
|
||||
scrollbar-color: #cbd5e1 #f8fafc;
|
||||
}
|
||||
|
||||
.custom-scroll::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
.custom-scroll::-webkit-scrollbar-track {
|
||||
background: #f8fafc;
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
.custom-scroll::-webkit-scrollbar-thumb {
|
||||
background: #cbd5e1;
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
.custom-scroll::-webkit-scrollbar-thumb:hover {
|
||||
background: #94a3b8;
|
||||
}
|
||||
@@ -30,9 +34,13 @@
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
body {
|
||||
html,
|
||||
body,
|
||||
#root {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
overflow: hidden;
|
||||
background-color: #f8fafc;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@ export const ExamPage = () => {
|
||||
useEffect(() => {
|
||||
const token = localStorage.getItem('accessToken');
|
||||
if (!token) {
|
||||
// 跳转登录
|
||||
window.location.href = '/home';
|
||||
return;
|
||||
}
|
||||
getUserOwnedMenus({ app_id: APP_ID })
|
||||
|
||||
@@ -4,4 +4,7 @@ import react from '@vitejs/plugin-react-swc'
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
server: {
|
||||
allowedHosts: ['ipad.shenynet.com'],
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user