浏览代码

領収証発行依頼一覧全般

develop
sosuke.iwabuchi 2 年前
父节点
当前提交
0751593dee
共有 14 个文件被更改,包括 275 次插入73 次删除
  1. +15
    -0
      src/api/app.ts
  2. +37
    -0
      src/api/custom/hello-techno/receipt-issuing-order.ts
  3. +4
    -0
      src/api/index.ts
  4. +12
    -0
      src/api/url.ts
  5. +2
    -0
      src/codes/page.ts
  6. +18
    -0
      src/codes/receipt-issuing-order.ts
  7. +48
    -0
      src/contexts/AppContext.tsx
  8. +3
    -3
      src/contexts/SearchConditionContext.tsx
  9. +8
    -0
      src/hooks/useApp.ts
  10. +48
    -0
      src/pages/app/ReceiptIssuingOrder.tsx
  11. +52
    -67
      src/pages/dashboard/receipt-issuing-order/list.tsx
  12. +23
    -2
      src/routes/index.tsx
  13. +4
    -0
      src/routes/path.ts
  14. +1
    -1
      src/theme/index.tsx

+ 15
- 0
src/api/app.ts 查看文件

@@ -0,0 +1,15 @@
import { ApiId, HttpMethod, request } from ".";
import { getUrl } from "./url";

export type CheckTokenRequest = {
access_token: string;
};

export const checkToken = async (data: CheckTokenRequest) => {
const res = await request({
url: getUrl(ApiId.APP_TOKEN_CHECK),
method: HttpMethod.GET,
data: new URLSearchParams(data),
});
return res;
};

+ 37
- 0
src/api/custom/hello-techno/receipt-issuing-order.ts 查看文件

@@ -6,6 +6,7 @@ import {
request, request,
} from "api"; } from "api";
import { getUrl } from "api/url"; import { getUrl } from "api/url";
import { ReceiptIssuingOrderStatus } from "codes/receipt-issuing-order";


export type HTCustomer = { export type HTCustomer = {
customer_code: string; customer_code: string;
@@ -50,3 +51,39 @@ export const createReceiptIssuingOrder = async (
}); });
return res; return res;
}; };

export type ReceiptIssuingOrder = {
id: string;
order_datetime: string;
customer_code: string;
parking_management_code: string;
customer_name: string;
parking_name: string;
status: ReceiptIssuingOrderStatus;
handler_id: string;
handler_name: string;
};

export type ReceiptIssuingOrdersRequest = {
customer_code?: string;
customer_name?: string;
parking_management_code?: string;
parking_name?: string;
};

export type ReceiptIssuingOrdersResponse = {
data: {
records: ReceiptIssuingOrder[];
};
} & APICommonResponse;

export const getReceiptIssuingOrders = async (
data: ReceiptIssuingOrdersRequest
) => {
const res = await request<ReceiptIssuingOrdersResponse>({
url: getUrl(ApiId.HT_CUSTOM_RECEIPT_ISSUING_ORDERS),
method: HttpMethod.GET,
data: new URLSearchParams(data),
});
return res;
};

+ 4
- 0
src/api/index.ts 查看文件

@@ -13,6 +13,9 @@ export const ApiId = {
LOGIN: id++, LOGIN: id++,
LOGOUT: id++, LOGOUT: id++,


APP_TOKEN_CHECK: id++,
DOWNLOAD_RECEIPT: id++,

RECEIPT_ISSUING_ORDERS: id++, RECEIPT_ISSUING_ORDERS: id++,
RECEIPT_ISSUING_ORDER: id++, RECEIPT_ISSUING_ORDER: id++,
RECEIPT_ISSUING_ORDER_CREATE: id++, RECEIPT_ISSUING_ORDER_CREATE: id++,
@@ -21,6 +24,7 @@ export const ApiId = {
HT_CUSTOM_CUSTOMERS: id++, HT_CUSTOM_CUSTOMERS: id++,
HT_CUSTOM_PARKINGS: id++, HT_CUSTOM_PARKINGS: id++,
HT_CUSTOM_ADJUST_DATA: id++, HT_CUSTOM_ADJUST_DATA: id++,
HT_CUSTOM_RECEIPT_ISSUING_ORDERS: id++,
HT_CUSTOM_RECEIPT_ISSUING_ORDER_CREATE: id++, HT_CUSTOM_RECEIPT_ISSUING_ORDER_CREATE: id++,
} as const; } as const;
export type ApiId = (typeof ApiId)[keyof typeof ApiId]; export type ApiId = (typeof ApiId)[keyof typeof ApiId];


+ 12
- 0
src/api/url.ts 查看文件

@@ -1,4 +1,6 @@
import { env } from "process";
import { ApiId as A } from "."; import { ApiId as A } from ".";
import { HOST_API } from "config";


const urls = { const urls = {
[A.CSRF_TOKEN]: "sanctum/csrf-cookie", [A.CSRF_TOKEN]: "sanctum/csrf-cookie",
@@ -6,18 +8,24 @@ const urls = {
[A.LOGIN]: "login", [A.LOGIN]: "login",
[A.LOGOUT]: "logout", [A.LOGOUT]: "logout",


[A.APP_TOKEN_CHECK]: "app-token-check",
[A.DOWNLOAD_RECEIPT]: "receipt/download",

[A.RECEIPT_ISSUING_ORDERS]: "receipt-issuing-orders", [A.RECEIPT_ISSUING_ORDERS]: "receipt-issuing-orders",


// FOR CUSTOM // FOR CUSTOM
[A.HT_CUSTOM_CUSTOMERS]: "custom/hello-techno/customers", [A.HT_CUSTOM_CUSTOMERS]: "custom/hello-techno/customers",
[A.HT_CUSTOM_PARKINGS]: "custom/hello-techno/parkings", [A.HT_CUSTOM_PARKINGS]: "custom/hello-techno/parkings",
[A.HT_CUSTOM_ADJUST_DATA]: "custom/hello-techno/adjust-data", [A.HT_CUSTOM_ADJUST_DATA]: "custom/hello-techno/adjust-data",
[A.HT_CUSTOM_RECEIPT_ISSUING_ORDERS]:
"custom/hello-techno/receipt-issuing-orders",
[A.HT_CUSTOM_RECEIPT_ISSUING_ORDER_CREATE]: [A.HT_CUSTOM_RECEIPT_ISSUING_ORDER_CREATE]:
"custom/hello-techno/receipt-issuing-order/create", "custom/hello-techno/receipt-issuing-order/create",
}; };


const prefixs = { const prefixs = {
[A.CSRF_TOKEN]: "", [A.CSRF_TOKEN]: "",
[A.DOWNLOAD_RECEIPT]: "",
}; };
const DEFAULT_API_URL_PREFIX = "api"; const DEFAULT_API_URL_PREFIX = "api";


@@ -32,3 +40,7 @@ export const getUrl = (apiId: A) => {
} }
return url + (urls[apiId] ?? ""); return url + (urls[apiId] ?? "");
}; };

export const getFullUrl = (apiId: A) => {
return HOST_API + "/" + getUrl(apiId);
};

+ 2
- 0
src/codes/page.ts 查看文件

@@ -5,6 +5,8 @@ export const PageID = {
LOGIN: id++, LOGIN: id++,
LOGOUT: id++, LOGOUT: id++,


APP_RECEIPT_ISSUING_ORDER_INDEX: id++,

DASHBOARD_OVERVIEW: id++, DASHBOARD_OVERVIEW: id++,


DASHBOARD_CONTRACT_LIST: id++, DASHBOARD_CONTRACT_LIST: id++,


+ 18
- 0
src/codes/receipt-issuing-order.ts 查看文件

@@ -20,3 +20,21 @@ export const ReceiptIssuingOrderStatus = {


export type ReceiptIssuingOrderStatus = export type ReceiptIssuingOrderStatus =
(typeof ReceiptIssuingOrderStatus)[keyof typeof ReceiptIssuingOrderStatus]; (typeof ReceiptIssuingOrderStatus)[keyof typeof ReceiptIssuingOrderStatus];

const ReceiptIssuingOrderStatusName = {
[ReceiptIssuingOrderStatus.NONE]: "",
[ReceiptIssuingOrderStatus.CREATED]: "受付済み",
[ReceiptIssuingOrderStatus.SMS_SENDING]: "SMS送信中",
[ReceiptIssuingOrderStatus.SMS_RECEIVED]: "SMS送信完了",
[ReceiptIssuingOrderStatus.SMS_OPENED]: "SMS開封済み",
[ReceiptIssuingOrderStatus.MAIL_REQUEST]: "郵送依頼中",
[ReceiptIssuingOrderStatus.PREPARING_FOR_MAIL]: "郵送準備中",
[ReceiptIssuingOrderStatus.MAIL_DONE]: "郵送投函済み",
[ReceiptIssuingOrderStatus.EMAIL_SENDING]: "メール送信中",
[ReceiptIssuingOrderStatus.EMAIL_DONE]: "メール送信済み",
[ReceiptIssuingOrderStatus.DOWNLOAD_DONE]: "ダウンロード済み",
} as const;

export function getStatusName(status: ReceiptIssuingOrderStatus): string {
return ReceiptIssuingOrderStatusName[status];
}

+ 48
- 0
src/contexts/AppContext.tsx 查看文件

@@ -0,0 +1,48 @@
import { HasChildren } from "@types";
import { checkToken } from "api/app";
import useAPICall from "hooks/useAPICall";
import { createContext, useState } from "react";

type App = {
token: string;
tokenResult: "cheking" | "ok" | "ng";
setToken: (token: string) => void;
};

export const AppContext = createContext<App>({
token: "",
tokenResult: "cheking",
setToken: (token: string) => {},
});

type Props = HasChildren;
export function AppContextProvider({ children }: Props) {
const [token, _setToken] = useState("");

const [tokenResult, setTokenResult] = useState<"cheking" | "ok" | "ng">(
"cheking"
);

const checkTokenAPI = useAPICall({
apiMethod: checkToken,
onSuccess: (res, sendData) => {
setTokenResult("ok");
_setToken(sendData.access_token);
},
onFailed: () => {
setTokenResult("ng");
},
});

const setToken = (token: string) => {
checkTokenAPI.callAPI({
access_token: token,
});
};

return (
<AppContext.Provider value={{ token, tokenResult, setToken }}>
{children}
</AppContext.Provider>
);
}

+ 3
- 3
src/contexts/SearchConditionContext.tsx 查看文件

@@ -14,7 +14,9 @@ const initialState = {
condition: _condition, condition: _condition,
get: (key: string): string => "", get: (key: string): string => "",
initializeCondition: () => {}, initializeCondition: () => {},
addCondition: (condition: Dictionary) => {},
addCondition: (condition: Dictionary) => {
console.log("not init SearchConditionContext");
},
clearCondition: () => {}, clearCondition: () => {},
}; };


@@ -45,7 +47,6 @@ export function SearchConditionContextProvider({ children }: Props) {
} }


if (!isEqual(after, condition)) { if (!isEqual(after, condition)) {
console.log("initialCondition", { before: condition, after });
setCondition(after, "initializeCondition"); setCondition(after, "initializeCondition");
} }
setInitialized(true); setInitialized(true);
@@ -72,7 +73,6 @@ export function SearchConditionContextProvider({ children }: Props) {
}); });


if (!isEqual(before, after)) { if (!isEqual(before, after)) {
console.log("addCondition", { additional, before, after });
setCondition(after, "addCondition"); setCondition(after, "addCondition");
} }
}; };


+ 8
- 0
src/hooks/useApp.ts 查看文件

@@ -0,0 +1,8 @@
import { AppContext } from "contexts/AppContext";
import { useContext } from "react";

export default function useApp() {
const context = useContext(AppContext);

return context;
}

+ 48
- 0
src/pages/app/ReceiptIssuingOrder.tsx 查看文件

@@ -0,0 +1,48 @@
import { Box, Button, Paper, Stack, Typography } from "@mui/material";
import { ApiId } from "api";
import { getFullUrl } from "api/url";
import useApp from "hooks/useApp";
import { useEffect, useMemo } from "react";
import { useParams } from "react-router-dom";

export default function ReceiptIssuingOrder() {
const { token: paramToken } = useParams();

const { token, setToken, tokenResult } = useApp();

const downloadUrl = useMemo(() => {
return getFullUrl(ApiId.DOWNLOAD_RECEIPT) + "?access_token=" + token;
}, [token]);

useEffect(() => {
if (paramToken) {
setToken(paramToken);
console.log("render");
}
}, []);

if (tokenResult === "cheking") {
return null;
}

if (tokenResult === "ng") {
return <Box>不正なアクセス</Box>;
}

return (
<Box sx={{ p: 3, pt: 5, mx: "auto", maxWidth: 500 }} textAlign="center">
<Stack spacing={3}>
<Typography variant="h5">領収証発行依頼</Typography>

<Paper>
<Typography variant="h5">状況</Typography>
</Paper>
<Paper>
<Button href={downloadUrl} variant="contained">
PDFダウンロード
</Button>
</Paper>
</Stack>
</Box>
);
}

+ 52
- 67
src/pages/dashboard/receipt-issuing-order/list.tsx 查看文件

@@ -7,26 +7,24 @@ import {
TableContainer, TableContainer,
TablePagination, TablePagination,
TableRow, TableRow,
TextField,
} from "@mui/material"; } from "@mui/material";
import { Dictionary } from "@types"; import { Dictionary } from "@types";
import { import {
ReceiptIssuingOrder, ReceiptIssuingOrder,
getReceiptIssuingOrders, getReceiptIssuingOrders,
} from "api/receipt-issuing-order";
} from "api/custom/hello-techno/receipt-issuing-order";
import { PageID, TabID } from "codes/page"; import { PageID, TabID } from "codes/page";
import { ReceiptIssuingOrderStatus } from "codes/receipt-issuing-order";
import { getStatusName } from "codes/receipt-issuing-order";
import { FormProvider, RHFTextField } from "components/hook-form"; import { FormProvider, RHFTextField } from "components/hook-form";
import { TableHeadCustom } from "components/table"; import { TableHeadCustom } from "components/table";
import { SearchConditionContextProvider } from "contexts/SearchConditionContext"; import { SearchConditionContextProvider } from "contexts/SearchConditionContext";
import useAPICall from "hooks/useAPICall"; import useAPICall from "hooks/useAPICall";
import useBackDrop from "hooks/useBackDrop";
import useDashboard from "hooks/useDashBoard"; import useDashboard from "hooks/useDashBoard";
import useSearchConditionContext from "hooks/useSearchConditionContext"; import useSearchConditionContext from "hooks/useSearchConditionContext";
import useTable, { UseTableReturn } from "hooks/useTable"; import useTable, { UseTableReturn } from "hooks/useTable";
import ContractTabs from "layouts/dashbord/tab/ContractTabs";
import { useEffect } from "react"; import { useEffect } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { Contract } from "types/contract";


export default function ReceiptIssuingOrderList() { export default function ReceiptIssuingOrderList() {
const { setHeaderTitle, setTabs } = useDashboard( const { setHeaderTitle, setTabs } = useDashboard(
@@ -34,8 +32,6 @@ export default function ReceiptIssuingOrderList() {
TabID.NONE TabID.NONE
); );


const table = useTable<ReceiptIssuingOrder>();

useEffect(() => { useEffect(() => {
setHeaderTitle("領収証発行依頼一覧"); setHeaderTitle("領収証発行依頼一覧");
setTabs(null); setTabs(null);
@@ -43,33 +39,14 @@ export default function ReceiptIssuingOrderList() {


return ( return (
<SearchConditionContextProvider> <SearchConditionContextProvider>
<Page table={table} />
<Page />
</SearchConditionContextProvider> </SearchConditionContextProvider>
); );
} }


type CommonProps = {
table: UseTableReturn<ReceiptIssuingOrder>;
};
function Page({ table }: CommonProps) {
const {
order,
page,
sort,
rowsPerPage,
fetched,
fillteredRow,
isNotFound,
dataLength,
//
onSort,
onChangePage,
onChangeRowsPerPage,
//
setRowData,
//
ROWS_PER_PAGES,
} = table;
function Page() {
const table = useTable<ReceiptIssuingOrder>();

return ( return (
<Box> <Box>
<SearchBox table={table} /> <SearchBox table={table} />
@@ -79,7 +56,11 @@ function Page({ table }: CommonProps) {
} }


type FormProps = { type FormProps = {
address: string;
customer_name: string;
parking_name: string;
};
type CommonProps = {
table: UseTableReturn<ReceiptIssuingOrder>;
}; };
function SearchBox({ table }: CommonProps) { function SearchBox({ table }: CommonProps) {
const { const {
@@ -89,13 +70,20 @@ function SearchBox({ table }: CommonProps) {
addCondition: add, addCondition: add,
} = useSearchConditionContext(); } = useSearchConditionContext();


const { setShowBackDrop } = useBackDrop();

const form = useForm<FormProps>({ const form = useForm<FormProps>({
defaultValues: { defaultValues: {
address: "",
customer_name: "",
parking_name: "",
}, },
}); });


const { callAPI: calGetReceiptIssuingOrders, makeSendData } = useAPICall({
const {
callAPI: calGetReceiptIssuingOrders,
makeSendData,
sending,
} = useAPICall({
apiMethod: getReceiptIssuingOrders, apiMethod: getReceiptIssuingOrders,
form, form,
onSuccess: (res) => { onSuccess: (res) => {
@@ -111,6 +99,10 @@ function SearchBox({ table }: CommonProps) {
add({ ...data }); add({ ...data });
}; };


const handleBlur = () => {
addCondition(form.getValues());
};

const fetch = async (data: Dictionary) => { const fetch = async (data: Dictionary) => {
const sendData = makeSendData({ const sendData = makeSendData({
...data, ...data,
@@ -121,7 +113,8 @@ function SearchBox({ table }: CommonProps) {
// 初期値設定 // 初期値設定
useEffect(() => { useEffect(() => {
if (initialized) { if (initialized) {
form.setValue("address", get("address"));
form.setValue("customer_name", get("customer_name"));
form.setValue("parking_name", get("parking_name"));
} }
}, [initialized, condition]); }, [initialized, condition]);


@@ -132,38 +125,32 @@ function SearchBox({ table }: CommonProps) {
} }
}, [condition, initialized]); }, [condition, initialized]);


// バックドロップ
useEffect(() => {
setShowBackDrop(sending);
}, [sending]);

return ( return (
<FormProvider methods={form} onSubmit={form.handleSubmit(handleSubmit)}> <FormProvider methods={form} onSubmit={form.handleSubmit(handleSubmit)}>
<Box sx={{ p: 1, m: 1 }}> <Box sx={{ p: 1, m: 1 }}>
<Grid container spacing={1}> <Grid container spacing={1}>
<Grid item xs={3}> <Grid item xs={3}>
<RHFTextField <RHFTextField
label="ステータス"
name="status"
label="運営会社名"
name="customer_name"
fullWidth fullWidth
size="small" size="small"
onBlur={handleBlur}
/> />
</Grid> </Grid>
<Grid item xs={3}> <Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
</Grid>
<Grid item xs={3}>
<TextField label="a" fullWidth size="small" />
<RHFTextField
label="駐車場名"
name="parking_name"
fullWidth
size="small"
onBlur={handleBlur}
/>
</Grid> </Grid>
</Grid> </Grid>
</Box> </Box>
@@ -173,9 +160,11 @@ function SearchBox({ table }: CommonProps) {


function TableBox({ table }: CommonProps) { function TableBox({ table }: CommonProps) {
const TABLE_HEAD = [ const TABLE_HEAD = [
{ id: "id", label: "ID", align: "left" },
{ id: "name", label: "名前", align: "left" },
{ id: "emply", label: "---", align: "left" },
{ id: "order_datetime", label: "受付時刻", align: "left" },
{ id: "customer_name", label: "運営会社名", align: "left" },
{ id: "parking_name", label: "駐車場名", align: "left" },
{ id: "status", label: "ステータス", align: "left" },
{ id: "handler_name", label: "担当者", align: "left" },
]; ];
const { const {
order, order,
@@ -196,13 +185,6 @@ function TableBox({ table }: CommonProps) {
ROWS_PER_PAGES, ROWS_PER_PAGES,
} = table; } = table;


useEffect(() => {
setRowData([
{ id: "iwabuchi", status: ReceiptIssuingOrderStatus.NONE },
{ id: "iwabuchi", status: ReceiptIssuingOrderStatus.MAIL_DONE },
]);
}, []);

return ( return (
<> <>
<TableContainer <TableContainer
@@ -250,8 +232,11 @@ type RowProps = {
function Row({ data }: RowProps) { function Row({ data }: RowProps) {
return ( return (
<TableRow hover sx={{ cursor: "pointer" }}> <TableRow hover sx={{ cursor: "pointer" }}>
<TableCell>{data.id}</TableCell>
<TableCell>{data.status}</TableCell>
<TableCell>{data.order_datetime}</TableCell>
<TableCell>{data.customer_name}</TableCell>
<TableCell>{data.parking_name}</TableCell>
<TableCell>{getStatusName(data.status)}</TableCell>
<TableCell>{data.handler_name}</TableCell>
</TableRow> </TableRow>
); );
} }

+ 23
- 2
src/routes/index.tsx 查看文件

@@ -1,12 +1,13 @@
import { PageID } from "codes/page"; import { PageID } from "codes/page";
import { UserRole } from "codes/user";
import LoadingScreen from "components/LoadingScreen"; import LoadingScreen from "components/LoadingScreen";
import { AppContextProvider } from "contexts/AppContext";
import useAuth from "hooks/useAuth";
import DashboardLayout from "layouts/dashbord"; import DashboardLayout from "layouts/dashbord";
import SimpleLayout from "layouts/simple"; import SimpleLayout from "layouts/simple";
import { ElementType, Suspense, lazy, useMemo } from "react"; import { ElementType, Suspense, lazy, useMemo } from "react";
import { RouteObject, useRoutes } from "react-router-dom"; import { RouteObject, useRoutes } from "react-router-dom";
import { getRoute } from "./path"; import { getRoute } from "./path";
import useAuth from "hooks/useAuth";
import { UserRole } from "codes/user";


const Loadable = (Component: ElementType) => (props: any) => { const Loadable = (Component: ElementType) => (props: any) => {
return ( return (
@@ -30,6 +31,20 @@ const AuthRoutes = (): RouteObject => ({
], ],
}); });


const AppRoutes = (): RouteObject => ({
element: (
<AppContextProvider>
<SimpleLayout />
</AppContextProvider>
),
children: [
{
path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_INDEX),
element: <ReceiptIssuingOrder />,
},
],
});

const DashboardRoutes = (): RouteObject => { const DashboardRoutes = (): RouteObject => {
const { canAccess } = useAuth(); const { canAccess } = useAuth();


@@ -80,6 +95,7 @@ export function Routes() {
const { initialized } = useAuth(); const { initialized } = useAuth();
return useRoutes([ return useRoutes([
AuthRoutes(), AuthRoutes(),
AppRoutes(),
DashboardRoutes(), DashboardRoutes(),
{ {
path: "403", path: "403",
@@ -96,6 +112,11 @@ export function Routes() {
const Login = Loadable(lazy(() => import("pages/auth/login"))); const Login = Loadable(lazy(() => import("pages/auth/login")));
const Logout = Loadable(lazy(() => import("pages/auth/logout"))); const Logout = Loadable(lazy(() => import("pages/auth/logout")));


// App ---------------------------
const ReceiptIssuingOrder = Loadable(
lazy(() => import("pages/app/ReceiptIssuingOrder"))
);

//ダッシュボード ---------------------------- //ダッシュボード ----------------------------
const Dashboard = Loadable(lazy(() => import("pages/dashboard"))); const Dashboard = Loadable(lazy(() => import("pages/dashboard")));
// 契約関連 // 契約関連


+ 4
- 0
src/routes/path.ts 查看文件

@@ -37,6 +37,10 @@ const PATHS = {


[makePathKey(PageID.DASHBOARD_OVERVIEW)]: "/dashboard", [makePathKey(PageID.DASHBOARD_OVERVIEW)]: "/dashboard",


// APP
[makePathKey(PageID.APP_RECEIPT_ISSUING_ORDER_INDEX)]:
"/app/receipt-issuing-oreder/:token",

// 契約関連 // 契約関連
[makePathKey(PageID.DASHBOARD_CONTRACT_LIST)]: [makePathKey(PageID.DASHBOARD_CONTRACT_LIST)]:
"/dashboard/contract/list/:page", "/dashboard/contract/list/:page",


+ 1
- 1
src/theme/index.tsx 查看文件

@@ -153,7 +153,7 @@ theme = {
styleOverrides: { styleOverrides: {
root: { root: {
"&.Mui-disabled:before": { "&.Mui-disabled:before": {
"border-bottom-style": "none",
borderBottomStyle: "none",
}, },
}, },
}, },


正在加载...
取消
保存