| module.exports = { | |||||
| extends: require.resolve('@umijs/max/eslint'), | |||||
| }; |
| # Logs | |||||
| logs | |||||
| *.log | |||||
| npm-debug.log* | |||||
| yarn-debug.log* | |||||
| yarn-error.log* | |||||
| pnpm-debug.log* | |||||
| lerna-debug.log* | |||||
| node_modules | |||||
| dist-ssr | |||||
| *.local | |||||
| # Editor directories and files | |||||
| .vscode/* | |||||
| !.vscode/extensions.json | |||||
| .idea | |||||
| .DS_Store | |||||
| *.suo | |||||
| *.ntvs* | |||||
| *.njsproj | |||||
| *.sln | |||||
| *.sw? |
| npx --no-install max verify-commit $1 |
| npx --no-install lint-staged --quiet |
| { | |||||
| "*.{md,json}": [ | |||||
| "prettier --cache --write" | |||||
| ], | |||||
| "*.{js,jsx}": [ | |||||
| "max lint --fix --eslint-only", | |||||
| "prettier --cache --write" | |||||
| ], | |||||
| "*.{css,less}": [ | |||||
| "max lint --fix --stylelint-only", | |||||
| "prettier --cache --write" | |||||
| ], | |||||
| "*.ts?(x)": [ | |||||
| "max lint --fix --eslint-only", | |||||
| "prettier --cache --parser=typescript --write" | |||||
| ] | |||||
| } |
| registry=https://registry.npmjs.com/ | |||||
| node_modules | |||||
| .umi | |||||
| .umi-production |
| { | |||||
| "printWidth": 80, | |||||
| "singleQuote": true, | |||||
| "trailingComma": "all", | |||||
| "proseWrap": "never", | |||||
| "overrides": [{ "files": ".prettierrc", "options": { "parser": "json" } }], | |||||
| "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-packagejson"] | |||||
| } |
| module.exports = { | |||||
| extends: require.resolve('@umijs/max/stylelint'), | |||||
| }; |
| import { defineConfig } from '@umijs/max'; | |||||
| import type { RequestConfig } from 'umi'; | |||||
| export default defineConfig({ | |||||
| antd: {}, | |||||
| access: {}, | |||||
| model: {}, | |||||
| initialState: {}, | |||||
| request: {}, | |||||
| layout: { | |||||
| name: '菊城人才市场', | |||||
| logo: 'https://preview.pro.ant.design/static/logo.f0355d39.svg', | |||||
| // copy from pro site | |||||
| navTheme: 'dark', | |||||
| primaryColor: '#1890ff', | |||||
| layout: 'mix', | |||||
| contentWidth: 'Fluid', | |||||
| fixedHeader: true, | |||||
| fixSiderbar: false, | |||||
| splitMenus: true, | |||||
| siderWidth: 240, | |||||
| title: '菊城人才市场', | |||||
| pwa: false, | |||||
| iconfontUrl: '', | |||||
| avatarProps: { | |||||
| src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg', | |||||
| size: 'small', | |||||
| title: '七妮妮' | |||||
| }, | |||||
| }, | |||||
| routes: [ | |||||
| { | |||||
| path: '/', | |||||
| redirect: '/main/company/list', | |||||
| }, | |||||
| { | |||||
| path: '/login', | |||||
| component: './Login', | |||||
| layout: false | |||||
| }, | |||||
| // 总控路由 | |||||
| { | |||||
| name: '基础管理', | |||||
| path: '/main', | |||||
| routes: [ | |||||
| { | |||||
| name: '企业管理', | |||||
| routes: [ | |||||
| { | |||||
| name: '企业列表', | |||||
| path: '/main/company/list', | |||||
| component: './Main/Company/List', | |||||
| }, | |||||
| { | |||||
| name: 'VIP列表', | |||||
| path: '/main/company/vip', | |||||
| component: './Main/Company/Vip', | |||||
| }, | |||||
| { | |||||
| name: '部门管理', | |||||
| path: '/main/company/department', | |||||
| component: './Main/Company/Department', | |||||
| }, | |||||
| { | |||||
| name: '职位管理', | |||||
| path: '/main/company/post', | |||||
| component: './Main/Company/Post', | |||||
| } | |||||
| ] | |||||
| }, | |||||
| { | |||||
| name: '求职者管理', | |||||
| routes: [ | |||||
| { | |||||
| name: '简历列表', | |||||
| path: '/main/jobseeker/list', | |||||
| component: './Main/Jobseeker/List', | |||||
| }, | |||||
| { | |||||
| name: '求职者账号列表', | |||||
| path: '/main/jobseeker/account', | |||||
| component: './Main/Jobseeker/Account', | |||||
| } | |||||
| ] | |||||
| } | |||||
| ] | |||||
| }, | |||||
| // 出租屋路由 | |||||
| { | |||||
| name: '系统管理', | |||||
| path: '/rent', | |||||
| routes: [ | |||||
| { | |||||
| name: '房屋管理', | |||||
| path: '/rent/house', | |||||
| component: './Rent/House', | |||||
| }, | |||||
| { | |||||
| name: '租客管理', | |||||
| path: '/rent/renter', | |||||
| component: './Rent/Renter', | |||||
| }, | |||||
| ] | |||||
| }, | |||||
| // 学校路由 | |||||
| { | |||||
| name: '账号权限', | |||||
| path: '/school', | |||||
| routes: [ | |||||
| { | |||||
| name: '学校管理', | |||||
| path: '/school/address', | |||||
| component: './Main/Address', | |||||
| }, | |||||
| { | |||||
| name: '学生管理', | |||||
| path: '/school/area', | |||||
| component: './Main/Area', | |||||
| }, | |||||
| ] | |||||
| }, | |||||
| ], | |||||
| npmClient: 'npm', | |||||
| }); | |||||
| export const request: RequestConfig = { | |||||
| // 统一的请求设定 | |||||
| baseURL: '', | |||||
| timeout: 1000, | |||||
| headers: { | |||||
| 'Content-Type': 'application/json' | |||||
| }, | |||||
| // 请求拦截器 | |||||
| requestInterceptors: [ | |||||
| (config) => { | |||||
| sessionStorage.getItem('token') ? config.headers.Authorization = sessionStorage.getItem('token') : ''; | |||||
| // 在发送请求之前做些什么 | |||||
| return config; | |||||
| } | |||||
| ], | |||||
| // 响应拦截器 | |||||
| responseInterceptors: [ | |||||
| (response) => { | |||||
| // 拦截响应数据,进行个性化处理 | |||||
| const { data } = response; | |||||
| if (!data.success) { | |||||
| } | |||||
| return response; | |||||
| } | |||||
| ] | |||||
| }; |
| const users = [ | |||||
| { id: 0, name: 'Umi', nickName: 'U', gender: 'MALE' }, | |||||
| { id: 1, name: 'Fish', nickName: 'B', gender: 'FEMALE' }, | |||||
| ]; | |||||
| export default { | |||||
| 'GET /api/v1/queryUserList': (req: any, res: any) => { | |||||
| res.json({ | |||||
| success: true, | |||||
| data: { list: users }, | |||||
| errorCode: 0, | |||||
| }); | |||||
| }, | |||||
| 'PUT /api/v1/user/': (req: any, res: any) => { | |||||
| res.json({ | |||||
| success: true, | |||||
| errorCode: 0, | |||||
| }); | |||||
| }, | |||||
| }; |
| { | |||||
| "private": true, | |||||
| "author": "Soleilw <a617759082@126.com>", | |||||
| "scripts": { | |||||
| "build": "max build", | |||||
| "dev": "max dev", | |||||
| "format": "prettier --cache --write .", | |||||
| "postinstall": "max setup", | |||||
| "prepare": "husky", | |||||
| "setup": "max setup", | |||||
| "start": "npm run dev" | |||||
| }, | |||||
| "dependencies": { | |||||
| "@ant-design/icons": "^5.0.1", | |||||
| "@ant-design/pro-components": "^2.4.4", | |||||
| "@umijs/max": "^4.2.8", | |||||
| "antd": "^5.4.0" | |||||
| }, | |||||
| "devDependencies": { | |||||
| "@types/react": "^18.0.33", | |||||
| "@types/react-dom": "^18.0.11", | |||||
| "husky": "^9", | |||||
| "lint-staged": "^13.2.0", | |||||
| "prettier": "^2.8.7", | |||||
| "prettier-plugin-organize-imports": "^3.2.2", | |||||
| "prettier-plugin-packagejson": "^2.4.3", | |||||
| "typescript": "^5.0.3" | |||||
| } | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { Outlet, useOutletContext } from 'umi'; | |||||
| export default function EmptyRoute() { | |||||
| const context = useOutletContext(); | |||||
| return <Outlet context={context} />; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import type { IRuntimeConfig as Plugin0 } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-antd/runtimeConfig.d' | |||||
| import type { IRuntimeConfig as Plugin1 } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-initialState/runtimeConfig.d' | |||||
| import type { IRuntimeConfig as Plugin2 } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-layout/runtimeConfig.d' | |||||
| import type { IRuntimeConfig as Plugin3 } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-request/runtimeConfig.d' | |||||
| interface IDefaultRuntimeConfig { | |||||
| onRouteChange?: (props: { routes: any, clientRoutes: any, location: any, action: any, isFirst: boolean }) => void; | |||||
| patchRoutes?: (props: { routes: any }) => void; | |||||
| patchClientRoutes?: (props: { routes: any }) => void; | |||||
| render?: (oldRender: () => void) => void; | |||||
| rootContainer?: (lastRootContainer: JSX.Element, args?: any) => void; | |||||
| [key: string]: any; | |||||
| } | |||||
| export type RuntimeConfig = IDefaultRuntimeConfig & Plugin0 & Plugin1 & Plugin2 & Plugin3 | |||||
| export function defineApp(config: RuntimeConfig): RuntimeConfig { | |||||
| return config; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { HelmetProvider } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react'; | |||||
| import { context } from './helmetContext'; | |||||
| export const innerProvider = (container) => { | |||||
| return React.createElement(HelmetProvider, { context }, container); | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export const context = {}; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import { createHashHistory, createMemoryHistory, createBrowserHistory } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react'; | |||||
| import type { UmiHistory } from './historyIntelli'; | |||||
| let history: UmiHistory; | |||||
| let basename: string = '/'; | |||||
| export function createHistory(opts: any) { | |||||
| let h; | |||||
| if (opts.type === 'hash') { | |||||
| h = createHashHistory(); | |||||
| } else if (opts.type === 'memory') { | |||||
| h = createMemoryHistory(opts); | |||||
| } else { | |||||
| h = createBrowserHistory(); | |||||
| } | |||||
| if (opts.basename) { | |||||
| basename = opts.basename; | |||||
| } | |||||
| history = { | |||||
| ...h, | |||||
| push(to, state) { | |||||
| h.push(patchTo(to, h), state); | |||||
| }, | |||||
| replace(to, state) { | |||||
| h.replace(patchTo(to, h), state); | |||||
| }, | |||||
| get location() { | |||||
| return h.location; | |||||
| }, | |||||
| get action() { | |||||
| return h.action; | |||||
| } | |||||
| } | |||||
| return h; | |||||
| } | |||||
| export function setHistory(h: UmiHistory) { | |||||
| if (h) { | |||||
| history = h; | |||||
| } | |||||
| } | |||||
| // Patch `to` to support basename | |||||
| // Refs: | |||||
| // https://github.com/remix-run/history/blob/3e9dab4/packages/history/index.ts#L484 | |||||
| // https://github.com/remix-run/history/blob/dev/docs/api-reference.md#to | |||||
| function patchTo(to: any, h: History) { | |||||
| if (typeof to === 'string') { | |||||
| return `${stripLastSlash(basename)}${to}`; | |||||
| } else if (typeof to === 'object') { | |||||
| const currentPathname = h.location.pathname; | |||||
| return { | |||||
| ...to, | |||||
| pathname: to.pathname? `${stripLastSlash(basename)}${to.pathname}` : currentPathname, | |||||
| }; | |||||
| } else { | |||||
| throw new Error(`Unexpected to: ${to}`); | |||||
| } | |||||
| } | |||||
| function stripLastSlash(path) { | |||||
| return path.slice(-1) === '/' ? path.slice(0, -1) : path; | |||||
| } | |||||
| export { history }; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import { getRoutes } from './route' | |||||
| import type { History } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react' | |||||
| type Routes = Awaited<ReturnType<typeof getRoutes>>['routes'] | |||||
| type AllRoute = Routes[keyof Routes] | |||||
| type IsRoot<T extends any> = 'parentId' extends keyof T ? false : true | |||||
| // show `/` in not `layout / wrapper` only | |||||
| type GetAllRouteWithoutLayout<Item extends AllRoute> = Item extends any | |||||
| ? 'isWrapper' extends keyof Item | |||||
| ? never | |||||
| : 'isLayout' extends keyof Item | |||||
| ? never | |||||
| : Item | |||||
| : never | |||||
| type AllRouteWithoutLayout = GetAllRouteWithoutLayout<AllRoute> | |||||
| type IndexRoutePathname = '/' extends AllRouteWithoutLayout['path'] | |||||
| ? '/' | |||||
| : never | |||||
| type GetChildrens<T extends any> = T extends any | |||||
| ? IsRoot<T> extends true | |||||
| ? never | |||||
| : T | |||||
| : never | |||||
| type Childrens = GetChildrens<AllRoute> | |||||
| type Root = Exclude<AllRoute, Childrens> | |||||
| type AllIds = AllRoute['id'] | |||||
| type GetChildrensByParentId< | |||||
| Id extends AllIds, | |||||
| Item = AllRoute | |||||
| > = Item extends any | |||||
| ? 'parentId' extends keyof Item | |||||
| ? Item['parentId'] extends Id | |||||
| ? Item | |||||
| : never | |||||
| : never | |||||
| : never | |||||
| type RouteObject< | |||||
| Id extends AllIds, | |||||
| Item = GetChildrensByParentId<Id> | |||||
| > = IsNever<Item> extends true | |||||
| ? '' | |||||
| : Item extends AllRoute | |||||
| ? { | |||||
| [Key in Item['path'] as TrimSlash<Key>]: UnionMerge< | |||||
| RouteObject<Item['id']> | |||||
| > | |||||
| } | |||||
| : never | |||||
| type GetRootRouteObject<Item extends Root> = Item extends Root | |||||
| ? { | |||||
| [K in Item['path'] as TrimSlash<K>]: UnionMerge<RouteObject<Item['id']>> | |||||
| } | |||||
| : never | |||||
| type MergedResult = UnionMerge<GetRootRouteObject<Root>> | |||||
| // --- patch history types --- | |||||
| type HistoryTo = Parameters<History['push']>['0'] | |||||
| type HistoryPath = Exclude<HistoryTo, string> | |||||
| type UmiPathname = Path<MergedResult> | (string & {}) | |||||
| interface UmiPath extends HistoryPath { | |||||
| pathname: UmiPathname | |||||
| } | |||||
| type UmiTo = UmiPathname | UmiPath | |||||
| type UmiPush = (to: UmiTo, state?: any) => void | |||||
| type UmiReplace = (to: UmiTo, state?: any) => void | |||||
| export interface UmiHistory extends History { | |||||
| push: UmiPush | |||||
| replace: UmiReplace | |||||
| } | |||||
| // --- type utils --- | |||||
| type TrimLeftSlash<T extends string> = T extends `/${infer R}` | |||||
| ? TrimLeftSlash<R> | |||||
| : T | |||||
| type TrimRightSlash<T extends string> = T extends `${infer R}/` | |||||
| ? TrimRightSlash<R> | |||||
| : T | |||||
| type TrimSlash<T extends string> = TrimLeftSlash<TrimRightSlash<T>> | |||||
| type IsNever<T> = [T] extends [never] ? true : false | |||||
| type IsEqual<A, B> = (<G>() => G extends A ? 1 : 2) extends <G>() => G extends B | |||||
| ? 1 | |||||
| : 2 | |||||
| ? true | |||||
| : false | |||||
| type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ( | |||||
| k: infer I | |||||
| ) => void | |||||
| ? I | |||||
| : never | |||||
| type UnionMerge<U> = UnionToIntersection<U> extends infer O | |||||
| ? { [K in keyof O]: O[K] } | |||||
| : never | |||||
| type ExcludeEmptyKey<T> = IsEqual<T, ''> extends true ? never : T | |||||
| type PathConcat< | |||||
| TKey extends string, | |||||
| TValue, | |||||
| N = TrimSlash<TKey> | |||||
| > = TValue extends string | |||||
| ? ExcludeEmptyKey<N> | |||||
| : | |||||
| | ExcludeEmptyKey<N> | |||||
| | `${N & string}${IsNever<ExcludeEmptyKey<N>> extends true | |||||
| ? '' | |||||
| : '/'}${UnionPath<TValue>}` | |||||
| type UnionPath<T> = { | |||||
| [K in keyof T]-?: PathConcat<K & string, T[K]> | |||||
| }[keyof T] | |||||
| type MakeSureLeftSlash<T> = T extends any | |||||
| ? `/${TrimRightSlash<T & string>}` | |||||
| : never | |||||
| // exclude `/*`, because it always at the top of the IDE tip list | |||||
| type Path<T, K = UnionPath<T>> = Exclude<MakeSureLeftSlash<K>, '/*'> | IndexRoutePathname |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import * as Plugin_0 from 'E:/project/myproject/rencaishichanghoutai/src/app.ts'; | |||||
| import * as Plugin_1 from '@@/core/helmet.ts'; | |||||
| import * as Plugin_2 from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-access/runtime.tsx'; | |||||
| import * as Plugin_3 from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-initialState/runtime.tsx'; | |||||
| import * as Plugin_4 from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-layout/runtime.tsx'; | |||||
| import * as Plugin_5 from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-model/runtime.tsx'; | |||||
| import { PluginManager } from 'umi'; | |||||
| function __defaultExport (obj) { | |||||
| if (obj.default) { | |||||
| return typeof obj.default === 'function' ? obj.default() : obj.default | |||||
| } | |||||
| return obj; | |||||
| } | |||||
| export function getPlugins() { | |||||
| return [ | |||||
| { | |||||
| apply: __defaultExport(Plugin_0), | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/myproject/rencaishichanghoutai/src/app.ts', | |||||
| }, | |||||
| { | |||||
| apply: Plugin_1, | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : '@@/core/helmet.ts', | |||||
| }, | |||||
| { | |||||
| apply: Plugin_2, | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-access/runtime.tsx', | |||||
| }, | |||||
| { | |||||
| apply: Plugin_3, | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-initialState/runtime.tsx', | |||||
| }, | |||||
| { | |||||
| apply: Plugin_4, | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-layout/runtime.tsx', | |||||
| }, | |||||
| { | |||||
| apply: Plugin_5, | |||||
| path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-model/runtime.tsx', | |||||
| }, | |||||
| ]; | |||||
| } | |||||
| export function getValidKeys() { | |||||
| return ['patchRoutes','patchClientRoutes','modifyContextOpts','modifyClientRenderOpts','rootContainer','innerProvider','i18nProvider','accessProvider','dataflowProvider','outerProvider','render','onRouteChange','antd','getInitialState','layout','qiankun','request',]; | |||||
| } | |||||
| let pluginManager = null; | |||||
| export function createPluginManager() { | |||||
| pluginManager = PluginManager.create({ | |||||
| plugins: getPlugins(), | |||||
| validKeys: getValidKeys(), | |||||
| }); | |||||
| return pluginManager; | |||||
| } | |||||
| export function getPluginManager() { | |||||
| return pluginManager; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import { IConfigFromPluginsJoi } from "./pluginConfigJoi.d"; | |||||
| interface IConfigTypes { | |||||
| codeSplitting: { | |||||
| jsStrategy: "bigVendors" | "depPerChunk" | "granularChunks"; | |||||
| jsStrategyOptions?: ({ | |||||
| } | undefined); | |||||
| cssStrategy?: ("mergeAll" | undefined); | |||||
| cssStrategyOptions?: ({ | |||||
| } | undefined); | |||||
| }; | |||||
| title: string; | |||||
| styles: Array<string | { | |||||
| src?: (string | undefined); | |||||
| } | { | |||||
| content?: (string | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| scripts: Array<string | { | |||||
| src?: (string | undefined); | |||||
| } | { | |||||
| content?: (string | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| routes: Array<{ | |||||
| component?: (string | undefined); | |||||
| layout?: (false | undefined); | |||||
| path?: (string | undefined); | |||||
| redirect?: (string | undefined); | |||||
| routes?: IConfigTypes['routes']; | |||||
| wrappers?: (Array<string> | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| routeLoader: { | |||||
| moduleType: "esm" | "cjs"; | |||||
| }; | |||||
| reactRouter5Compat: boolean | { | |||||
| }; | |||||
| presets: Array<string>; | |||||
| plugins: Array<string>; | |||||
| npmClient: "pnpm" | "tnpm" | "cnpm" | "yarn" | "npm"; | |||||
| mountElementId: string; | |||||
| metas: Array<{ | |||||
| charset?: (string | undefined); | |||||
| content?: (string | undefined); | |||||
| "http-equiv"?: (string | undefined); | |||||
| name?: (string | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| links: Array<{ | |||||
| crossorigin?: (string | undefined); | |||||
| href?: (string | undefined); | |||||
| hreflang?: (string | undefined); | |||||
| media?: (string | undefined); | |||||
| referrerpolicy?: (string | undefined); | |||||
| rel?: (string | undefined); | |||||
| sizes?: (any | undefined); | |||||
| title?: (any | undefined); | |||||
| type?: (any | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| historyWithQuery: { | |||||
| }; | |||||
| history: { | |||||
| type: "browser" | "hash" | "memory"; | |||||
| }; | |||||
| headScripts: Array<string | { | |||||
| src?: (string | undefined); | |||||
| } | { | |||||
| content?: (string | undefined); | |||||
| } | { [x: string]: any }>; | |||||
| esbuildMinifyIIFE: boolean; | |||||
| conventionRoutes: { | |||||
| base?: (string | undefined); | |||||
| exclude?: (Array<any> | undefined); | |||||
| }; | |||||
| conventionLayout: boolean; | |||||
| base: string; | |||||
| analyze: { | |||||
| }; | |||||
| writeToDisk: boolean; | |||||
| theme: { [x: string]: any }; | |||||
| targets: { [x: string]: any }; | |||||
| svgr: { [x: string]: any }; | |||||
| svgo: { [x: string]: any } | boolean; | |||||
| stylusLoader: { [x: string]: any }; | |||||
| styleLoader: { [x: string]: any }; | |||||
| srcTranspilerOptions: { | |||||
| esbuild?: ({ [x: string]: any } | undefined); | |||||
| swc?: ({ [x: string]: any } | undefined); | |||||
| }; | |||||
| srcTranspiler: "babel" | "esbuild" | "swc"; | |||||
| sassLoader: { [x: string]: any }; | |||||
| runtimePublicPath: { | |||||
| }; | |||||
| purgeCSS: { [x: string]: any }; | |||||
| publicPath: string; | |||||
| proxy: { [x: string]: any } | Array<any>; | |||||
| postcssLoader: { [x: string]: any }; | |||||
| outputPath: string; | |||||
| normalCSSLoaderModules: { [x: string]: any }; | |||||
| mfsu: { | |||||
| cacheDirectory?: (string | undefined); | |||||
| chainWebpack?: (((...args: any[]) => unknown) | undefined); | |||||
| esbuild?: (boolean | undefined); | |||||
| exclude?: (Array<string | any> | undefined); | |||||
| include?: (Array<string> | undefined); | |||||
| mfName?: (string | undefined); | |||||
| remoteAliases?: (Array<string> | undefined); | |||||
| remoteName?: (string | undefined); | |||||
| runtimePublicPath?: (boolean | undefined); | |||||
| shared?: ({ [x: string]: any } | undefined); | |||||
| strategy?: ("eager" | "normal" | undefined); | |||||
| } | boolean; | |||||
| mdx: { | |||||
| loader?: (string | undefined); | |||||
| loaderOptions?: ({ [x: string]: any } | undefined); | |||||
| }; | |||||
| manifest: { | |||||
| basePath?: (string | undefined); | |||||
| fileName?: (string | undefined); | |||||
| }; | |||||
| lessLoader: { [x: string]: any }; | |||||
| jsMinifierOptions: { [x: string]: any }; | |||||
| jsMinifier: "esbuild" | "swc" | "terser" | "uglifyJs" | "none"; | |||||
| inlineLimit: number; | |||||
| ignoreMomentLocale: boolean; | |||||
| https: { | |||||
| cert?: (string | undefined); | |||||
| hosts?: (Array<string> | undefined); | |||||
| http2?: (boolean | undefined); | |||||
| key?: (string | undefined); | |||||
| }; | |||||
| hash: boolean; | |||||
| forkTSChecker: { [x: string]: any }; | |||||
| fastRefresh: boolean; | |||||
| extraPostCSSPlugins: Array<any>; | |||||
| extraBabelPresets: Array<string | Array<any>>; | |||||
| extraBabelPlugins: Array<string | Array<any>>; | |||||
| extraBabelIncludes: Array<string | any>; | |||||
| externals: { [x: string]: any } | string | ((...args: any[]) => unknown); | |||||
| esm: { | |||||
| }; | |||||
| devtool: "cheap-source-map" | "cheap-module-source-map" | "eval" | "eval-source-map" | "eval-cheap-source-map" | "eval-cheap-module-source-map" | "eval-nosources-cheap-source-map" | "eval-nosources-cheap-module-source-map" | "eval-nosources-source-map" | "source-map" | "hidden-source-map" | "hidden-nosources-cheap-source-map" | "hidden-nosources-cheap-module-source-map" | "hidden-nosources-source-map" | "hidden-cheap-source-map" | "hidden-cheap-module-source-map" | "inline-source-map" | "inline-cheap-source-map" | "inline-cheap-module-source-map" | "inline-nosources-cheap-source-map" | "inline-nosources-cheap-module-source-map" | "inline-nosources-source-map" | "nosources-source-map" | "nosources-cheap-source-map" | "nosources-cheap-module-source-map" | boolean; | |||||
| depTranspiler: "babel" | "esbuild" | "swc" | "none"; | |||||
| define: { [x: string]: any }; | |||||
| deadCode: { | |||||
| context?: (string | undefined); | |||||
| detectUnusedExport?: (boolean | undefined); | |||||
| detectUnusedFiles?: (boolean | undefined); | |||||
| exclude?: (Array<string> | undefined); | |||||
| failOnHint?: (boolean | undefined); | |||||
| patterns?: (Array<string> | undefined); | |||||
| }; | |||||
| cssPublicPath: string; | |||||
| cssMinifierOptions: { [x: string]: any }; | |||||
| cssMinifier: "cssnano" | "esbuild" | "parcelCSS" | "none"; | |||||
| cssLoaderModules: { [x: string]: any }; | |||||
| cssLoader: { [x: string]: any }; | |||||
| copy: Array<{ | |||||
| from: string; | |||||
| to: string; | |||||
| } | string>; | |||||
| checkDepCssModules?: boolean; | |||||
| cacheDirectoryPath: string; | |||||
| babelLoaderCustomize: string; | |||||
| autoprefixer: { [x: string]: any }; | |||||
| autoCSSModules: boolean; | |||||
| alias: { [x: string]: any }; | |||||
| crossorigin: boolean | { | |||||
| includes?: (Array<any> | undefined); | |||||
| }; | |||||
| esmi: { | |||||
| cdnOrigin: string; | |||||
| shimUrl?: (string | undefined); | |||||
| }; | |||||
| exportStatic: { | |||||
| extraRoutePaths?: (((...args: any[]) => unknown) | Array<string> | undefined); | |||||
| ignorePreRenderError?: (boolean | undefined); | |||||
| }; | |||||
| favicons: Array<string>; | |||||
| helmet: boolean; | |||||
| icons: { | |||||
| autoInstall?: ({ | |||||
| } | undefined); | |||||
| defaultComponentConfig?: ({ | |||||
| } | undefined); | |||||
| alias?: ({ | |||||
| } | undefined); | |||||
| include?: (Array<string> | undefined); | |||||
| }; | |||||
| mock: { | |||||
| exclude?: (Array<string> | undefined); | |||||
| include?: (Array<string> | undefined); | |||||
| }; | |||||
| mpa: { | |||||
| template?: (string | undefined); | |||||
| layout?: (string | undefined); | |||||
| getConfigFromEntryFile?: (boolean | undefined); | |||||
| entry?: ({ | |||||
| } | undefined); | |||||
| }; | |||||
| phantomDependency: { | |||||
| exclude?: (Array<string> | undefined); | |||||
| }; | |||||
| polyfill: { | |||||
| imports?: (Array<string> | undefined); | |||||
| }; | |||||
| routePrefetch: { | |||||
| }; | |||||
| terminal: { | |||||
| }; | |||||
| tmpFiles: boolean; | |||||
| clientLoader: { | |||||
| }; | |||||
| routeProps: { | |||||
| }; | |||||
| ssr: { | |||||
| serverBuildPath?: (string | undefined); | |||||
| platform?: (string | undefined); | |||||
| builder?: ("esbuild" | "webpack" | undefined); | |||||
| }; | |||||
| lowImport: { | |||||
| libs?: (Array<any> | undefined); | |||||
| css?: (string | undefined); | |||||
| }; | |||||
| vite: { | |||||
| }; | |||||
| apiRoute: { | |||||
| platform?: (string | undefined); | |||||
| }; | |||||
| monorepoRedirect: boolean | { | |||||
| srcDir?: (Array<string> | undefined); | |||||
| exclude?: (Array<any> | undefined); | |||||
| peerDeps?: (boolean | undefined); | |||||
| }; | |||||
| test: { | |||||
| }; | |||||
| clickToComponent: { | |||||
| /** 默认情况下,点击将默认编辑器为vscode, 你可以设置编辑器 vscode 或者 vscode-insiders */ | |||||
| editor?: (string | undefined); | |||||
| }; | |||||
| legacy: { | |||||
| buildOnly?: (boolean | undefined); | |||||
| nodeModulesTransform?: (boolean | undefined); | |||||
| checkOutput?: (boolean | undefined); | |||||
| }; | |||||
| /** 设置 babel class-properties 启用 loose | |||||
| @doc https://umijs.org/docs/api/config#classpropertiesloose */ | |||||
| classPropertiesLoose: boolean | { | |||||
| }; | |||||
| ui: { | |||||
| }; | |||||
| mako: { | |||||
| }; | |||||
| hmrGuardian: boolean; | |||||
| forget: { | |||||
| ReactCompilerConfig?: ({ | |||||
| } | undefined); | |||||
| }; | |||||
| verifyCommit: { | |||||
| scope?: (Array<string> | undefined); | |||||
| allowEmoji?: (boolean | undefined); | |||||
| }; | |||||
| run: { | |||||
| globals?: (Array<string> | undefined); | |||||
| }; | |||||
| access: { [x: string]: any }; | |||||
| analytics: { | |||||
| baidu?: (string | undefined); | |||||
| ga?: (string | undefined); | |||||
| ga_v2?: (string | undefined); | |||||
| }; | |||||
| antd: { | |||||
| dark?: (boolean | undefined); | |||||
| compact?: (boolean | undefined); | |||||
| import?: (boolean | undefined); | |||||
| style?: ("less" | "css" | undefined); | |||||
| theme?: ({ | |||||
| components: { [x: string]: { [x: string]: any } }; | |||||
| } | { [x: string]: any } | undefined); | |||||
| appConfig?: ({ [x: string]: any } | undefined); | |||||
| momentPicker?: (boolean | undefined); | |||||
| styleProvider?: ({ [x: string]: any } | undefined); | |||||
| configProvider?: ({ | |||||
| theme: { | |||||
| components: { [x: string]: { [x: string]: any } }; | |||||
| } | { [x: string]: any }; | |||||
| } | { [x: string]: any } | undefined); | |||||
| }; | |||||
| dva: { | |||||
| extraModels?: (Array<string> | undefined); | |||||
| immer?: ({ [x: string]: any } | undefined); | |||||
| skipModelValidate?: (boolean | undefined); | |||||
| }; | |||||
| initialState: { | |||||
| loading?: (string | undefined); | |||||
| }; | |||||
| layout: { [x: string]: any }; | |||||
| locale: { | |||||
| default?: (string | undefined); | |||||
| useLocalStorage?: (boolean | undefined); | |||||
| baseNavigator?: (boolean | undefined); | |||||
| title?: (boolean | undefined); | |||||
| antd?: (boolean | undefined); | |||||
| baseSeparator?: (string | undefined); | |||||
| }; | |||||
| mf: { | |||||
| name?: (string | undefined); | |||||
| remotes?: (Array<{ | |||||
| aliasName?: (string | undefined); | |||||
| name: string; | |||||
| entry?: (string | undefined); | |||||
| entries?: ({ | |||||
| } | undefined); | |||||
| keyResolver?: (string | undefined); | |||||
| }> | undefined); | |||||
| shared?: ({ [x: string]: any } | undefined); | |||||
| library?: ({ [x: string]: any } | undefined); | |||||
| remoteHash?: (boolean | undefined); | |||||
| }; | |||||
| model: { | |||||
| extraModels?: (Array<string> | undefined); | |||||
| }; | |||||
| moment2dayjs: { | |||||
| preset?: ("antd" | "antdv3" | "none" | undefined); | |||||
| plugins?: (Array<string> | undefined); | |||||
| }; | |||||
| qiankun: { | |||||
| slave?: ({ [x: string]: any } | undefined); | |||||
| master?: ({ [x: string]: any } | undefined); | |||||
| externalQiankun?: (boolean | undefined); | |||||
| }; | |||||
| reactQuery: { | |||||
| devtool?: ({ [x: string]: any } | boolean | undefined); | |||||
| queryClient?: ({ [x: string]: any } | boolean | undefined); | |||||
| }; | |||||
| request: { | |||||
| dataField?: (string | undefined); | |||||
| }; | |||||
| styledComponents: { | |||||
| babelPlugin?: ({ [x: string]: any } | undefined); | |||||
| }; | |||||
| tailwindcss: { [x: string]: any }; | |||||
| valtio: { | |||||
| }; | |||||
| }; | |||||
| type PrettifyWithCloseable<T> = { | |||||
| [K in keyof T]: T[K] | false; | |||||
| } & {}; | |||||
| export type IConfigFromPlugins = PrettifyWithCloseable< | |||||
| IConfigFromPluginsJoi & Partial<IConfigTypes> | |||||
| >; |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| // Created by Umi Plugin | |||||
| export interface IConfigFromPluginsJoi { | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.error.cause.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.aggregate-error.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.aggregate-error.cause.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.at.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.find-last.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.find-last-index.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.push.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.reduce.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.reduce-right.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.to-reversed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.to-sorted.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.to-spliced.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.array.with.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.map.group-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.object.group-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.object.has-own.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.promise.any.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.promise.with-resolvers.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.reflect.to-string-tag.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.regexp.flags.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.string.at-alternative.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.string.is-well-formed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.string.replace-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.string.to-well-formed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.at.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.find-last.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.find-last-index.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.set.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.to-reversed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.to-sorted.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/es.typed-array.with.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.suppressed-error.constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.from-async.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.filter-out.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.filter-reject.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.group.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.group-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.group-by-to-map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.group-to-map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.is-template-object.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.last-index.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.last-item.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array.unique-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array-buffer.detached.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array-buffer.transfer.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.drop.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.every.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.filter.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.find.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.flat-map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.for-each.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.indexed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.reduce.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.some.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.take.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.async-iterator.to-array.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.bigint.range.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.composite-key.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.composite-symbol.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.data-view.get-float16.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.data-view.set-float16.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.disposable-stack.constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.function.demethodize.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.function.is-callable.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.function.is-constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.function.metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.function.un-this.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.constructor.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.dispose.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.drop.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.every.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.filter.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.find.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.flat-map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.for-each.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.indexed.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.range.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.reduce.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.some.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.take.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.to-array.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.iterator.to-async.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.json.is-raw-json.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.json.parse.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.json.raw-json.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.delete-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.emplace.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.every.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.filter.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.find.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.find-key.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.includes.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.key-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.key-of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.map-keys.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.map-values.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.merge.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.reduce.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.some.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.update.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.update-or-insert.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.map.upsert.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.clamp.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.deg-per-rad.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.degrees.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.fscale.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.f16round.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.iaddh.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.imulh.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.isubh.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.rad-per-deg.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.radians.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.scale.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.seeded-prng.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.signbit.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.math.umulh.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.number.from-string.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.number.range.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.object.iterate-entries.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.object.iterate-keys.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.object.iterate-values.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.observable.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.promise.try.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.define-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.delete-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.get-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.has-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.reflect.metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.regexp.escape.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.add-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.delete-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.difference.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.difference.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.every.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.filter.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.find.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.intersection.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.intersection.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-disjoint-from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-subset-of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.is-superset-of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.join.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.map.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.reduce.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.some.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.symmetric-difference.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.union.v2.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.set.union.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.string.at.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.string.cooked.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.string.code-points.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.string.dedent.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.async-dispose.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.dispose.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.is-registered.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.is-well-known.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.matcher.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.metadata.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.metadata-key.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.observable.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.pattern-match.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.symbol.replace-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.from-async.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.filter-out.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.filter-reject.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.group-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.to-spliced.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.typed-array.unique-by.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.uint8-array.from-base64.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.uint8-array.from-hex.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.uint8-array.to-base64.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.uint8-array.to-hex.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-map.delete-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-map.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-map.of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-map.emplace.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-map.upsert.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-set.add-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-set.delete-all.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-set.from.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/esnext.weak-set.of.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.dom-exception.stack.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.immediate.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.self.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.structured-clone.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.url.can-parse.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.url-search-params.delete.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.url-search-params.has.js"; | |||||
| import "E:/project/myproject/rencaishichanghoutai/node_modules/core-js/modules/web.url-search-params.size.js"; | |||||
| import 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/preset-umi/node_modules/regenerator-runtime/runtime.js'; | |||||
| export {}; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| export async function getRoutes() { | |||||
| const routes = {"1":{"path":"/","redirect":"/main/company/list","parentId":"ant-design-pro-layout","id":"1"},"2":{"path":"/login","layout":false,"id":"2"},"3":{"name":"基础管理","path":"/main","parentId":"ant-design-pro-layout","id":"3"},"4":{"name":"企业管理","parentId":"3","id":"4"},"5":{"name":"企业列表","path":"/main/company/list","parentId":"4","id":"5"},"6":{"name":"VIP列表","path":"/main/company/vip","parentId":"4","id":"6"},"7":{"name":"部门管理","path":"/main/company/department","parentId":"4","id":"7"},"8":{"name":"职位管理","path":"/main/company/post","parentId":"4","id":"8"},"9":{"name":"求职者管理","parentId":"3","id":"9"},"10":{"name":"简历列表","path":"/main/jobseeker/list","parentId":"9","id":"10"},"11":{"name":"求职者账号列表","path":"/main/jobseeker/account","parentId":"9","id":"11"},"12":{"name":"系统管理","path":"/rent","parentId":"ant-design-pro-layout","id":"12"},"13":{"name":"房屋管理","path":"/rent/house","parentId":"12","id":"13"},"14":{"name":"租客管理","path":"/rent/renter","parentId":"12","id":"14"},"15":{"name":"账号权限","path":"/school","parentId":"ant-design-pro-layout","id":"15"},"16":{"name":"学校管理","path":"/school/address","parentId":"15","id":"16"},"17":{"name":"学生管理","path":"/school/area","parentId":"15","id":"17"},"ant-design-pro-layout":{"id":"ant-design-pro-layout","path":"/","isLayout":true}} as const; | |||||
| return { | |||||
| routes, | |||||
| routeComponents: { | |||||
| '1': React.lazy(() => import('./EmptyRoute')), | |||||
| '2': React.lazy(() => import(/* webpackChunkName: "p__Login__index" */'@/pages/Login/index.tsx')), | |||||
| '3': React.lazy(() => import('./EmptyRoute')), | |||||
| '4': React.lazy(() => import('./EmptyRoute')), | |||||
| '5': React.lazy(() => import(/* webpackChunkName: "p__Main__Company__List__index" */'@/pages/Main/Company/List/index.tsx')), | |||||
| '6': React.lazy(() => import(/* webpackChunkName: "p__Main__Company__Vip__index" */'@/pages/Main/Company/Vip/index.tsx')), | |||||
| '7': React.lazy(() => import(/* webpackChunkName: "p__Main__Company__Department__index" */'@/pages/Main/Company/Department/index.tsx')), | |||||
| '8': React.lazy(() => import(/* webpackChunkName: "p__Main__Company__Post__index" */'@/pages/Main/Company/Post/index.tsx')), | |||||
| '9': React.lazy(() => import('./EmptyRoute')), | |||||
| '10': React.lazy(() => import(/* webpackChunkName: "p__Main__Jobseeker__List__index" */'@/pages/Main/Jobseeker/List/index.tsx')), | |||||
| '11': React.lazy(() => import(/* webpackChunkName: "p__Main__Jobseeker__Account__index" */'@/pages/Main/Jobseeker/Account/index.tsx')), | |||||
| '12': React.lazy(() => import('./EmptyRoute')), | |||||
| '13': React.lazy(() => import(/* webpackChunkName: "p__Rent__House__index" */'@/pages/Rent/House/index.tsx')), | |||||
| '14': React.lazy(() => import(/* webpackChunkName: "p__Rent__Renter__index" */'@/pages/Rent/Renter/index.tsx')), | |||||
| '15': React.lazy(() => import('./EmptyRoute')), | |||||
| '16': React.lazy(() => import(/* webpackChunkName: "p__Main__Address__index" */'@/pages/Main/Address/index.tsx')), | |||||
| '17': React.lazy(() => import(/* webpackChunkName: "p__Main__Area__index" */'@/pages/Main/Area/index.tsx')), | |||||
| 'ant-design-pro-layout': React.lazy(() => import(/* webpackChunkName: "umi__plugin-layout__Layout" */'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-layout/Layout.tsx')), | |||||
| }, | |||||
| }; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| let count = 0; | |||||
| let groupLevel = 0; | |||||
| function send(type: string, message?: string) { | |||||
| if(process.env.NODE_ENV==='production'){ | |||||
| return; | |||||
| }else{ | |||||
| const encodedMessage = message ? `&m=${encodeURI(message)}` : ''; | |||||
| fetch(`/__umi/api/terminal?type=${type}&t=${Date.now()}&c=${count++}&g=${groupLevel}${encodedMessage}`, { mode: 'no-cors' }) | |||||
| } | |||||
| } | |||||
| function prettyPrint(obj: any) { | |||||
| return JSON.stringify(obj, null, 2); | |||||
| } | |||||
| function stringifyObjs(objs: any[]) { | |||||
| const obj = objs.length > 1 ? objs.map(stringify).join(' ') : objs[0]; | |||||
| return typeof obj === 'object' ? `${prettyPrint(obj)}` : obj.toString(); | |||||
| } | |||||
| function stringify(obj: any) { | |||||
| return typeof obj === 'object' ? `${JSON.stringify(obj)}` : obj.toString(); | |||||
| } | |||||
| const terminal = { | |||||
| log(...objs: any[]) { send('log', stringifyObjs(objs)) }, | |||||
| info(...objs: any[]) { send('info', stringifyObjs(objs)) }, | |||||
| warn(...objs: any[]) { send('warn', stringifyObjs(objs)) }, | |||||
| error(...objs: any[]) { send('error', stringifyObjs(objs)) }, | |||||
| group() { groupLevel++ }, | |||||
| groupCollapsed() { groupLevel++ }, | |||||
| groupEnd() { groupLevel && --groupLevel }, | |||||
| clear() { send('clear') }, | |||||
| trace(...args: any[]) { console.trace(...args) }, | |||||
| profile(...args: any[]) { console.profile(...args) }, | |||||
| profileEnd(...args: any[]) { console.profileEnd(...args) }, | |||||
| }; | |||||
| export { terminal }; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| // defineApp | |||||
| export { defineApp } from './core/defineApp' | |||||
| export type { RuntimeConfig } from './core/defineApp' | |||||
| // plugins | |||||
| export { Access, useAccess, useAccessMarkedRoutes } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-access'; | |||||
| export { Provider, useModel } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-model'; | |||||
| export { useRequest, UseRequestProvider, request, getRequestInstance } from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-request'; | |||||
| // plugins types.d.ts | |||||
| export * from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-access/types.d'; | |||||
| export * from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-antd/types.d'; | |||||
| export * from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-layout/types.d'; | |||||
| export * from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-request/types.d'; | |||||
| // @umijs/renderer-* | |||||
| export { createBrowserHistory, createHashHistory, createMemoryHistory, Helmet, HelmetProvider, createSearchParams, generatePath, matchPath, matchRoutes, Navigate, NavLink, Outlet, resolvePath, useLocation, useMatch, useNavigate, useOutlet, useOutletContext, useParams, useResolvedPath, useRoutes, useSearchParams, useAppData, useClientLoaderData, useRouteProps, useSelectedRoutes, useServerLoaderData, renderClient, __getRoot, Link, useRouteData, __useFetcher, withRouter } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react'; | |||||
| export type { History } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react' | |||||
| // umi/client/client/plugin | |||||
| export { ApplyPluginsType, PluginManager } from 'E:/project/myproject/rencaishichanghoutai/node_modules/umi/client/client/plugin.js'; | |||||
| export { history, createHistory } from './core/history'; | |||||
| export { terminal } from './core/terminal'; | |||||
| // react ssr | |||||
| export const useServerInsertedHTML: Function = () => {}; | |||||
| // test | |||||
| export { TestBrowser } from './testBrowser'; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { AccessInstance } from './types.d'; | |||||
| export const AccessContext = React.createContext<AccessInstance>(null); |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React, { PropsWithChildren } from 'react'; | |||||
| import { AccessContext } from './context'; | |||||
| import type { IRoute } from '@umijs/max'; | |||||
| export const useAccess = () => { | |||||
| return React.useContext(AccessContext); | |||||
| }; | |||||
| export interface AccessProps { | |||||
| accessible: boolean; | |||||
| fallback?: React.ReactNode; | |||||
| } | |||||
| export const Access: React.FC<PropsWithChildren<AccessProps>> = (props) => { | |||||
| if (process.env.NODE_ENV === 'development' && typeof props.accessible !== 'boolean') { | |||||
| throw new Error('[access] the `accessible` property on <Access /> should be a boolean'); | |||||
| } | |||||
| return <>{ props.accessible ? props.children : props.fallback }</>; | |||||
| }; | |||||
| export const useAccessMarkedRoutes = (routes: IRoute[]) => { | |||||
| const access = useAccess(); | |||||
| const markdedRoutes: IRoute[] = React.useMemo(() => { | |||||
| const process = (route, parentAccessCode, parentRoute) => { | |||||
| let accessCode = route.access; | |||||
| // 用父级的路由检测父级的 accessCode | |||||
| let detectorRoute = route; | |||||
| if (!accessCode && parentAccessCode) { | |||||
| accessCode = parentAccessCode; | |||||
| detectorRoute = parentRoute; | |||||
| } | |||||
| // set default status | |||||
| route.unaccessible = false; | |||||
| // check access code | |||||
| if (typeof accessCode === 'string') { | |||||
| const detector = access[accessCode]; | |||||
| if (typeof detector === 'function') { | |||||
| route.unaccessible = !detector(detectorRoute); | |||||
| } else if (typeof detector === 'boolean') { | |||||
| route.unaccessible = !detector; | |||||
| } else if (typeof detector === 'undefined') { | |||||
| route.unaccessible = true; | |||||
| } | |||||
| } | |||||
| // check children access code | |||||
| if (route.children?.length) { | |||||
| const isNoAccessibleChild = !route.children.reduce((hasAccessibleChild, child) => { | |||||
| process(child, accessCode, route); | |||||
| return hasAccessibleChild || !child.unaccessible; | |||||
| }, false); | |||||
| // make sure parent route is unaccessible if all children are unaccessible | |||||
| if (isNoAccessibleChild) { | |||||
| route.unaccessible = true; | |||||
| } | |||||
| } | |||||
| // check children access code | |||||
| if (route.routes?.length) { | |||||
| const isNoAccessibleChild = !route.routes.reduce((hasAccessibleChild, child) => { | |||||
| process(child, accessCode, route); | |||||
| return hasAccessibleChild || !child.unaccessible; | |||||
| }, false); | |||||
| // make sure parent route is unaccessible if all children are unaccessible | |||||
| if (isNoAccessibleChild) { | |||||
| route.unaccessible = true; | |||||
| } | |||||
| } | |||||
| return route; | |||||
| } | |||||
| return routes.map(route => process(route)); | |||||
| }, [routes.length, access]); | |||||
| return markdedRoutes; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import accessFactory from '@/access'; | |||||
| import { useModel } from '@@/plugin-model'; | |||||
| import { AccessContext } from './context'; | |||||
| function Provider(props) { | |||||
| const { initialState } = useModel('@@initialState'); | |||||
| const access = React.useMemo(() => accessFactory(initialState), [initialState]); | |||||
| return ( | |||||
| <AccessContext.Provider value={access}> | |||||
| { props.children } | |||||
| </AccessContext.Provider> | |||||
| ); | |||||
| } | |||||
| export function accessProvider(container) { | |||||
| return <Provider>{ container }</Provider>; | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import accessFactory from '@/access'; | |||||
| export type AccessInstance = ReturnType<typeof accessFactory>; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { | |||||
| ConfigProvider, | |||||
| } from 'antd'; | |||||
| import { ApplyPluginsType } from 'umi'; | |||||
| import { getPluginManager } from '../core/plugin'; | |||||
| let cacheAntdConfig = null; | |||||
| const getAntdConfig = () => { | |||||
| if(!cacheAntdConfig){ | |||||
| cacheAntdConfig = getPluginManager().applyPlugins({ | |||||
| key: 'antd', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: { | |||||
| }, | |||||
| }); | |||||
| } | |||||
| return cacheAntdConfig; | |||||
| } | |||||
| function AntdProvider({ children }) { | |||||
| let container = children; | |||||
| const [antdConfig, _setAntdConfig] = React.useState(() => { | |||||
| const { | |||||
| appConfig: _, | |||||
| ...finalConfigProvider | |||||
| } = getAntdConfig(); | |||||
| return finalConfigProvider | |||||
| }); | |||||
| const setAntdConfig: typeof _setAntdConfig = (newConfig) => { | |||||
| _setAntdConfig(prev => { | |||||
| return merge({}, prev, typeof newConfig === 'function' ? newConfig(prev) : newConfig) | |||||
| }) | |||||
| } | |||||
| return container; | |||||
| } | |||||
| export function rootContainer(children) { | |||||
| return ( | |||||
| <AntdProvider> | |||||
| {children} | |||||
| </AntdProvider> | |||||
| ); | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import type { RuntimeAntdConfig } from './types.d'; | |||||
| export type IRuntimeConfig = { | |||||
| antd?: RuntimeAntdConfig | |||||
| }; |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| type Prettify<T> = { | |||||
| [K in keyof T]: T[K]; | |||||
| } & {}; | |||||
| type AntdConfig = Prettify<{} | |||||
| >; | |||||
| export type RuntimeAntdConfig = (memo: AntdConfig) => AntdConfig; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import { useState, useEffect, useCallback } from 'react'; | |||||
| import { getInitialState } from '@/app'; | |||||
| export type InitialStateType = Awaited<ReturnType<typeof getInitialState>> | undefined; | |||||
| const initState = { | |||||
| initialState: undefined as InitialStateType, | |||||
| loading: true, | |||||
| error: undefined, | |||||
| }; | |||||
| export default () => { | |||||
| const [state, setState] = useState(initState); | |||||
| const refresh = useCallback(async () => { | |||||
| setState((s) => ({ ...s, loading: true, error: undefined })); | |||||
| try { | |||||
| const ret = await getInitialState(); | |||||
| setState((s) => ({ ...s, initialState: ret, loading: false })); | |||||
| } catch (e) { | |||||
| setState((s) => ({ ...s, error: e, loading: false })); | |||||
| } | |||||
| }, []); | |||||
| const setInitialState = useCallback( | |||||
| async ( | |||||
| initialState: InitialStateType | ((initialState: InitialStateType) => InitialStateType), | |||||
| ) => { | |||||
| setState((s) => { | |||||
| if (typeof initialState === 'function') { | |||||
| return { ...s, initialState: initialState(s.initialState), loading: false }; | |||||
| } | |||||
| return { ...s, initialState, loading: false }; | |||||
| }); | |||||
| }, | |||||
| [], | |||||
| ); | |||||
| useEffect(() => { | |||||
| refresh(); | |||||
| }, []); | |||||
| return { | |||||
| ...state, | |||||
| refresh, | |||||
| setInitialState, | |||||
| }; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { useModel } from '@@/plugin-model'; | |||||
| function Loading() { return <div />; } | |||||
| export default function InitialStateProvider(props: any) { | |||||
| const appLoaded = React.useRef(false); | |||||
| const { loading = false } = useModel("@@initialState") || {}; | |||||
| React.useEffect(() => { | |||||
| if (!loading) { | |||||
| appLoaded.current = true; | |||||
| } | |||||
| }, [loading]); | |||||
| if (loading && !appLoaded.current) { | |||||
| return <Loading />; | |||||
| } | |||||
| return props.children; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import Provider from './Provider'; | |||||
| export function dataflowProvider(container) { | |||||
| return <Provider>{ container }</Provider>; | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export interface IRuntimeConfig { | |||||
| getInitialState?: () => Promise<Record<string, any>> | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { history, type IRoute } from '@umijs/max'; | |||||
| import { Result, Button } from 'antd'; | |||||
| const Exception: React.FC<{ | |||||
| children: React.ReactNode; | |||||
| route?: IRoute; | |||||
| notFound?: React.ReactNode; | |||||
| noAccessible?: React.ReactNode; | |||||
| unAccessible?: React.ReactNode; | |||||
| noFound?: React.ReactNode; | |||||
| }> = (props) => ( | |||||
| // render custom 404 | |||||
| (!props.route && (props.noFound || props.notFound)) || | |||||
| // render custom 403 | |||||
| (props.route?.unaccessible && (props.unAccessible || props.noAccessible)) || | |||||
| // render default exception | |||||
| ((!props.route || props.route?.unaccessible) && ( | |||||
| <Result | |||||
| status={props.route ? '403' : '404'} | |||||
| title={props.route ? '403' : '404'} | |||||
| subTitle={props.route ? '抱歉,你无权访问该页面' : '抱歉,你访问的页面不存在'} | |||||
| extra={ | |||||
| <Button type="primary" onClick={() => history.push('/')}> | |||||
| 返回首页 | |||||
| </Button> | |||||
| } | |||||
| /> | |||||
| )) || | |||||
| // normal render | |||||
| props.children | |||||
| ); | |||||
| export default Exception; |
| @media screen and (max-width: 480px) { | |||||
| /* 在小屏幕的时候可以有更好的体验 */ | |||||
| .umi-plugin-layout-container { | |||||
| width: 100% !important; | |||||
| } | |||||
| .umi-plugin-layout-container > * { | |||||
| border-radius: 0 !important; | |||||
| } | |||||
| } | |||||
| .umi-plugin-layout-menu .anticon { | |||||
| margin-right: 8px; | |||||
| } | |||||
| .umi-plugin-layout-menu .ant-dropdown-menu-item { | |||||
| min-width: 160px; | |||||
| } | |||||
| .umi-plugin-layout-right { | |||||
| display: flex !important; | |||||
| float: right; | |||||
| height: 100%; | |||||
| margin-left: auto; | |||||
| overflow: hidden; | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-action { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| height: 100%; | |||||
| padding: 0 12px; | |||||
| cursor: pointer; | |||||
| transition: all 0.3s; | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-action > i { | |||||
| color: rgba(255, 255, 255, 0.85); | |||||
| vertical-align: middle; | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-action:hover { | |||||
| background: rgba(0, 0, 0, 0.025); | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-action.opened { | |||||
| background: rgba(0, 0, 0, 0.025); | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-search { | |||||
| padding: 0 12px; | |||||
| } | |||||
| .umi-plugin-layout-right .umi-plugin-layout-search:hover { | |||||
| background: transparent; | |||||
| } | |||||
| .umi-plugin-layout-name { | |||||
| margin-left: 8px; | |||||
| } | |||||
| .umi-plugin-layout-name.umi-plugin-layout-hide-avatar-img { | |||||
| margin-left: 0; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| /// <reference types="@ant-design/pro-components" /> | |||||
| /// <reference types="antd" /> | |||||
| import { | |||||
| Link, useLocation, useNavigate, Outlet, useAppData, matchRoutes, | |||||
| type IRoute | |||||
| } from '@umijs/max'; | |||||
| import React, { useMemo } from 'react'; | |||||
| import { | |||||
| ProLayout, | |||||
| } from "E:/project/myproject/rencaishichanghoutai/node_modules/@ant-design/pro-components"; | |||||
| import './Layout.css'; | |||||
| import Logo from './Logo'; | |||||
| import Exception from './Exception'; | |||||
| import { getRightRenderContent } from './rightRender'; | |||||
| import { useModel } from '@@/plugin-model'; | |||||
| import { useAccessMarkedRoutes } from '@@/plugin-access'; | |||||
| // 过滤出需要显示的路由, 这里的filterFn 指 不希望显示的层级 | |||||
| const filterRoutes = (routes: IRoute[], filterFn: (route: IRoute) => boolean) => { | |||||
| if (routes.length === 0) { | |||||
| return [] | |||||
| } | |||||
| let newRoutes = [] | |||||
| for (const route of routes) { | |||||
| const newRoute = {...route }; | |||||
| if (filterFn(route)) { | |||||
| if (Array.isArray(newRoute.routes)) { | |||||
| newRoutes.push(...filterRoutes(newRoute.routes, filterFn)) | |||||
| } | |||||
| } else { | |||||
| if (Array.isArray(newRoute.children)) { | |||||
| newRoute.children = filterRoutes(newRoute.children, filterFn); | |||||
| newRoute.routes = newRoute.children; | |||||
| } | |||||
| newRoutes.push(newRoute); | |||||
| } | |||||
| } | |||||
| return newRoutes; | |||||
| } | |||||
| // 格式化路由 处理因 wrapper 导致的 菜单 path 不一致 | |||||
| const mapRoutes = (routes: IRoute[]) => { | |||||
| if (routes.length === 0) { | |||||
| return [] | |||||
| } | |||||
| return routes.map(route => { | |||||
| // 需要 copy 一份, 否则会污染原始数据 | |||||
| const newRoute = {...route} | |||||
| if (route.originPath) { | |||||
| newRoute.path = route.originPath | |||||
| } | |||||
| if (Array.isArray(route.routes)) { | |||||
| newRoute.routes = mapRoutes(route.routes); | |||||
| } | |||||
| if (Array.isArray(route.children)) { | |||||
| newRoute.children = mapRoutes(route.children); | |||||
| } | |||||
| return newRoute | |||||
| }) | |||||
| } | |||||
| export default (props: any) => { | |||||
| const location = useLocation(); | |||||
| const navigate = useNavigate(); | |||||
| const { clientRoutes, pluginManager } = useAppData(); | |||||
| const initialInfo = (useModel && useModel('@@initialState')) || { | |||||
| initialState: undefined, | |||||
| loading: false, | |||||
| setInitialState: null, | |||||
| }; | |||||
| const { initialState, loading, setInitialState } = initialInfo; | |||||
| const userConfig = { | |||||
| "name": "菊城人才市场", | |||||
| "logo": "https://preview.pro.ant.design/static/logo.f0355d39.svg", | |||||
| "navTheme": "dark", | |||||
| "primaryColor": "#1890ff", | |||||
| "layout": "mix", | |||||
| "contentWidth": "Fluid", | |||||
| "fixedHeader": true, | |||||
| "fixSiderbar": false, | |||||
| "splitMenus": true, | |||||
| "siderWidth": 240, | |||||
| "title": "菊城人才市场", | |||||
| "pwa": false, | |||||
| "iconfontUrl": "", | |||||
| "avatarProps": { | |||||
| "src": "https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg", | |||||
| "size": "small", | |||||
| "title": "七妮妮" | |||||
| } | |||||
| }; | |||||
| const formatMessage = undefined; | |||||
| const runtimeConfig = pluginManager.applyPlugins({ | |||||
| key: 'layout', | |||||
| type: 'modify', | |||||
| initialValue: { | |||||
| ...initialInfo | |||||
| }, | |||||
| }); | |||||
| // 现在的 layout 及 wrapper 实现是通过父路由的形式实现的, 会导致路由数据多了冗余层级, proLayout 消费时, 无法正确展示菜单, 这里对冗余数据进行过滤操作 | |||||
| const newRoutes = filterRoutes(clientRoutes.filter(route => route.id === 'ant-design-pro-layout'), (route) => { | |||||
| return (!!route.isLayout && route.id !== 'ant-design-pro-layout') || !!route.isWrapper; | |||||
| }) | |||||
| const [route] = useAccessMarkedRoutes(mapRoutes(newRoutes)); | |||||
| const matchedRoute = useMemo(() => matchRoutes(route.children, location.pathname)?.pop?.()?.route, [location.pathname]); | |||||
| return ( | |||||
| <ProLayout | |||||
| route={route} | |||||
| location={location} | |||||
| title={userConfig.title || 'plugin-layout'} | |||||
| navTheme="dark" | |||||
| siderWidth={256} | |||||
| onMenuHeaderClick={(e) => { | |||||
| e.stopPropagation(); | |||||
| e.preventDefault(); | |||||
| navigate('/'); | |||||
| }} | |||||
| formatMessage={userConfig.formatMessage || formatMessage} | |||||
| menu={{ locale: userConfig.locale }} | |||||
| logo={Logo} | |||||
| menuItemRender={(menuItemProps, defaultDom) => { | |||||
| if (menuItemProps.isUrl || menuItemProps.children) { | |||||
| return defaultDom; | |||||
| } | |||||
| if (menuItemProps.path && location.pathname !== menuItemProps.path) { | |||||
| return ( | |||||
| // handle wildcard route path, for example /slave/* from qiankun | |||||
| <Link to={menuItemProps.path.replace('/*', '')} target={menuItemProps.target}> | |||||
| {defaultDom} | |||||
| </Link> | |||||
| ); | |||||
| } | |||||
| return defaultDom; | |||||
| }} | |||||
| itemRender={(route, _, routes) => { | |||||
| const { breadcrumbName, title, path } = route; | |||||
| const label = title || breadcrumbName | |||||
| const last = routes[routes.length - 1] | |||||
| if (last) { | |||||
| if (last.path === path || last.linkPath === path) { | |||||
| return <span>{label}</span>; | |||||
| } | |||||
| } | |||||
| return <Link to={path}>{label}</Link>; | |||||
| }} | |||||
| disableContentMargin | |||||
| fixSiderbar | |||||
| fixedHeader | |||||
| {...runtimeConfig} | |||||
| rightContentRender={ | |||||
| runtimeConfig.rightContentRender !== false && | |||||
| ((layoutProps) => { | |||||
| const dom = getRightRenderContent({ | |||||
| runtimeConfig, | |||||
| loading, | |||||
| initialState, | |||||
| setInitialState, | |||||
| }); | |||||
| if (runtimeConfig.rightContentRender) { | |||||
| return runtimeConfig.rightContentRender(layoutProps, dom, { | |||||
| // BREAK CHANGE userConfig > runtimeConfig | |||||
| userConfig, | |||||
| runtimeConfig, | |||||
| loading, | |||||
| initialState, | |||||
| setInitialState, | |||||
| }); | |||||
| } | |||||
| return dom; | |||||
| }) | |||||
| } | |||||
| > | |||||
| <Exception | |||||
| route={matchedRoute} | |||||
| noFound={runtimeConfig?.noFound} | |||||
| notFound={runtimeConfig?.notFound} | |||||
| unAccessible={runtimeConfig?.unAccessible} | |||||
| noAccessible={runtimeConfig?.noAccessible} | |||||
| > | |||||
| {runtimeConfig.childrenRender | |||||
| ? runtimeConfig.childrenRender(<Outlet />, props) | |||||
| : <Outlet /> | |||||
| } | |||||
| </Exception> | |||||
| </ProLayout> | |||||
| ); | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| const LogoIcon: React.FC = () => { | |||||
| return ( | |||||
| <svg | |||||
| xmlns="http://www.w3.org/2000/svg" | |||||
| width="32" | |||||
| height="32" | |||||
| viewBox="0 0 200 200" | |||||
| > | |||||
| <defs> | |||||
| <linearGradient | |||||
| id="linearGradient-1" | |||||
| x1="62.102%" | |||||
| x2="108.197%" | |||||
| y1="0%" | |||||
| y2="37.864%" | |||||
| > | |||||
| <stop offset="0%" stopColor="#4285EB"></stop> | |||||
| <stop offset="100%" stopColor="#2EC7FF"></stop> | |||||
| </linearGradient> | |||||
| <linearGradient | |||||
| id="linearGradient-2" | |||||
| x1="69.644%" | |||||
| x2="54.043%" | |||||
| y1="0%" | |||||
| y2="108.457%" | |||||
| > | |||||
| <stop offset="0%" stopColor="#29CDFF"></stop> | |||||
| <stop offset="37.86%" stopColor="#148EFF"></stop> | |||||
| <stop offset="100%" stopColor="#0A60FF"></stop> | |||||
| </linearGradient> | |||||
| <linearGradient | |||||
| id="linearGradient-3" | |||||
| x1="69.691%" | |||||
| x2="16.723%" | |||||
| y1="-12.974%" | |||||
| y2="117.391%" | |||||
| > | |||||
| <stop offset="0%" stopColor="#FA816E"></stop> | |||||
| <stop offset="41.473%" stopColor="#F74A5C"></stop> | |||||
| <stop offset="100%" stopColor="#F51D2C"></stop> | |||||
| </linearGradient> | |||||
| <linearGradient | |||||
| id="linearGradient-4" | |||||
| x1="68.128%" | |||||
| x2="30.44%" | |||||
| y1="-35.691%" | |||||
| y2="114.943%" | |||||
| > | |||||
| <stop offset="0%" stopColor="#FA8E7D"></stop> | |||||
| <stop offset="51.264%" stopColor="#F74A5C"></stop> | |||||
| <stop offset="100%" stopColor="#F51D2C"></stop> | |||||
| </linearGradient> | |||||
| </defs> | |||||
| <g fill="none" fillRule="evenodd" stroke="none" strokeWidth="1"> | |||||
| <g transform="translate(-20 -20)"> | |||||
| <g transform="translate(20 20)"> | |||||
| <g> | |||||
| <g fillRule="nonzero"> | |||||
| <g> | |||||
| <path | |||||
| fill="url(#linearGradient-1)" | |||||
| d="M91.588 4.177L4.18 91.513a11.981 11.981 0 000 16.974l87.408 87.336a12.005 12.005 0 0016.989 0l36.648-36.618c4.209-4.205 4.209-11.023 0-15.228-4.208-4.205-11.031-4.205-15.24 0l-27.783 27.76c-1.17 1.169-2.945 1.169-4.114 0l-69.802-69.744c-1.17-1.169-1.17-2.942 0-4.11l69.802-69.745c1.17-1.169 2.944-1.169 4.114 0l27.783 27.76c4.209 4.205 11.032 4.205 15.24 0 4.209-4.205 4.209-11.022 0-15.227L108.581 4.056c-4.719-4.594-12.312-4.557-16.993.12z" | |||||
| ></path> | |||||
| <path | |||||
| fill="url(#linearGradient-2)" | |||||
| d="M91.588 4.177L4.18 91.513a11.981 11.981 0 000 16.974l87.408 87.336a12.005 12.005 0 0016.989 0l36.648-36.618c4.209-4.205 4.209-11.023 0-15.228-4.208-4.205-11.031-4.205-15.24 0l-27.783 27.76c-1.17 1.169-2.945 1.169-4.114 0l-69.802-69.744c-1.17-1.169-1.17-2.942 0-4.11l69.802-69.745c2.912-2.51 7.664-7.596 14.642-8.786 5.186-.883 10.855 1.062 17.009 5.837L108.58 4.056c-4.719-4.594-12.312-4.557-16.993.12z" | |||||
| ></path> | |||||
| </g> | |||||
| <path | |||||
| fill="url(#linearGradient-3)" | |||||
| d="M153.686 135.855c4.208 4.205 11.031 4.205 15.24 0l27.034-27.012c4.7-4.696 4.7-12.28 0-16.974l-27.27-27.15c-4.218-4.2-11.043-4.195-15.254.013-4.209 4.205-4.209 11.022 0 15.227l18.418 18.403c1.17 1.169 1.17 2.943 0 4.111l-18.168 18.154c-4.209 4.205-4.209 11.023 0 15.228z" | |||||
| ></path> | |||||
| </g> | |||||
| <ellipse | |||||
| cx="100.519" | |||||
| cy="100.437" | |||||
| fill="url(#linearGradient-4)" | |||||
| rx="23.6" | |||||
| ry="23.581" | |||||
| ></ellipse> | |||||
| </g> | |||||
| </g> | |||||
| </g> | |||||
| </g> | |||||
| </svg> | |||||
| ); | |||||
| }; | |||||
| export default LogoIcon; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export default { }; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export type TempType = string |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { Avatar, version, Dropdown, Menu, Spin } from 'antd'; | |||||
| import { LogoutOutlined } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/plugins/node_modules/@ant-design/icons'; | |||||
| export function getRightRenderContent (opts: { | |||||
| runtimeConfig: any, | |||||
| loading: boolean, | |||||
| initialState: any, | |||||
| setInitialState: any, | |||||
| }) { | |||||
| if (opts.runtimeConfig.rightRender) { | |||||
| return opts.runtimeConfig.rightRender( | |||||
| opts.initialState, | |||||
| opts.setInitialState, | |||||
| opts.runtimeConfig, | |||||
| ); | |||||
| } | |||||
| const showAvatar = opts.initialState?.avatar || opts.initialState?.name || opts.runtimeConfig.logout; | |||||
| const disableAvatarImg = opts.initialState?.avatar === false; | |||||
| const nameClassName = disableAvatarImg ? 'umi-plugin-layout-name umi-plugin-layout-hide-avatar-img' : 'umi-plugin-layout-name'; | |||||
| const avatar = | |||||
| showAvatar ? ( | |||||
| <span className="umi-plugin-layout-action"> | |||||
| {!disableAvatarImg ? | |||||
| ( | |||||
| <Avatar | |||||
| size="small" | |||||
| className="umi-plugin-layout-avatar" | |||||
| src={ | |||||
| opts.initialState?.avatar || | |||||
| "https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png" | |||||
| } | |||||
| alt="avatar" | |||||
| /> | |||||
| ) : null} | |||||
| <span className={nameClassName}>{opts.initialState?.name}</span> | |||||
| </span> | |||||
| ) : null; | |||||
| if (opts.loading) { | |||||
| return ( | |||||
| <div className="umi-plugin-layout-right"> | |||||
| <Spin size="small" style={ { marginLeft: 8, marginRight: 8 } } /> | |||||
| </div> | |||||
| ); | |||||
| } | |||||
| // 如果没有打开Locale,并且头像为空就取消掉这个返回的内容 | |||||
| if(!avatar) return null; | |||||
| const langMenu = { | |||||
| className: "umi-plugin-layout-menu", | |||||
| selectedKeys: [], | |||||
| items: [ | |||||
| { | |||||
| key: "logout", | |||||
| label: ( | |||||
| <> | |||||
| <LogoutOutlined /> | |||||
| 退出登录 | |||||
| </> | |||||
| ), | |||||
| onClick: () => { | |||||
| opts?.runtimeConfig?.logout?.(opts.initialState); | |||||
| }, | |||||
| }, | |||||
| ], | |||||
| }; | |||||
| // antd@5 和 4.24 之后推荐使用 menu,性能更好 | |||||
| let dropdownProps; | |||||
| if (version.startsWith("5.") || version.startsWith("4.24.")) { | |||||
| dropdownProps = { menu: langMenu }; | |||||
| } else if (version.startsWith("3.")) { | |||||
| dropdownProps = { | |||||
| overlay: ( | |||||
| <Menu> | |||||
| {langMenu.items.map((item) => ( | |||||
| <Menu.Item key={item.key} onClick={item.onClick}> | |||||
| {item.label} | |||||
| </Menu.Item> | |||||
| ))} | |||||
| </Menu> | |||||
| ), | |||||
| }; | |||||
| } else { // 需要 antd 4.20.0 以上版本 | |||||
| dropdownProps = { overlay: <Menu {...langMenu} /> }; | |||||
| } | |||||
| return ( | |||||
| <div className="umi-plugin-layout-right anticon"> | |||||
| {opts.runtimeConfig.logout ? ( | |||||
| <Dropdown {...dropdownProps} overlayClassName="umi-plugin-layout-container"> | |||||
| {avatar} | |||||
| </Dropdown> | |||||
| ) : ( | |||||
| avatar | |||||
| )} | |||||
| </div> | |||||
| ); | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import icons from './icons'; | |||||
| function formatIcon(name: string) { | |||||
| return name | |||||
| .replace(name[0], name[0].toUpperCase()) | |||||
| .replace(/-(w)/g, function(all, letter) { | |||||
| return letter.toUpperCase(); | |||||
| }); | |||||
| } | |||||
| export function patchRoutes({ routes }) { | |||||
| Object.keys(routes).forEach(key => { | |||||
| const { icon } = routes[key]; | |||||
| if (icon && typeof icon === 'string') { | |||||
| const upperIcon = formatIcon(icon); | |||||
| if (icons[upperIcon] || icons[upperIcon + 'Outlined']) { | |||||
| routes[key].icon = React.createElement(icons[upperIcon] || icons[upperIcon + 'Outlined']); | |||||
| } | |||||
| } | |||||
| }); | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import type { RunTimeLayoutConfig } from './types.d'; | |||||
| export interface IRuntimeConfig { | |||||
| layout?: RunTimeLayoutConfig | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| /// <reference types="@ant-design/pro-components" /> | |||||
| /// <reference types="antd" /> | |||||
| import type { ProLayoutProps, HeaderProps } from "E:/project/myproject/rencaishichanghoutai/node_modules/@ant-design/pro-components"; | |||||
| import type InitialStateType from '@@/plugin-initialState/@@initialState'; | |||||
| type InitDataType = ReturnType<typeof InitialStateType>; | |||||
| import type { IConfigFromPlugins } from '@@/core/pluginConfig'; | |||||
| export type RunTimeLayoutConfig = (initData: InitDataType) => Omit< | |||||
| ProLayoutProps, | |||||
| 'rightContentRender' | |||||
| > & { | |||||
| childrenRender?: (dom: JSX.Element, props: ProLayoutProps) => React.ReactNode; | |||||
| unAccessible?: JSX.Element; | |||||
| noFound?: JSX.Element; | |||||
| logout?: (initialState: InitDataType['initialState']) => Promise<void> | void; | |||||
| rightContentRender?: (( | |||||
| headerProps: HeaderProps, | |||||
| dom: JSX.Element, | |||||
| props: { | |||||
| userConfig: IConfigFromPlugins['layout']; | |||||
| runtimeConfig: RunTimeLayoutConfig; | |||||
| loading: InitDataType['loading']; | |||||
| initialState: InitDataType['initialState']; | |||||
| setInitialState: InitDataType['setInitialState']; | |||||
| }, | |||||
| ) => JSX.Element) | false; | |||||
| rightRender?: ( | |||||
| initialState: InitDataType['initialState'], | |||||
| setInitialState: InitDataType['setInitialState'], | |||||
| runtimeConfig: RunTimeLayoutConfig, | |||||
| ) => JSX.Element; | |||||
| }; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| // @ts-ignore | |||||
| import type { models as rawModels } from '@@/plugin-model/model'; | |||||
| import isEqual from 'E:/project/myproject/rencaishichanghoutai/node_modules/fast-deep-equal/index.js'; | |||||
| import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; | |||||
| type Models = typeof rawModels; | |||||
| type GetNamespaces<M> = { | |||||
| [K in keyof M]: M[K] extends { namespace: string } | |||||
| ? M[K]['namespace'] | |||||
| : never; | |||||
| }[keyof M]; | |||||
| type Namespaces = GetNamespaces<Models>; | |||||
| // @ts-ignore | |||||
| const Context = React.createContext<{ dispatcher: Dispatcher }>(null); | |||||
| class Dispatcher { | |||||
| callbacks: Record<Namespaces, Set<Function>> = {}; | |||||
| data: Record<Namespaces, unknown> = {}; | |||||
| update = (namespace: Namespaces) => { | |||||
| if (this.callbacks[namespace]) { | |||||
| this.callbacks[namespace].forEach((cb) => { | |||||
| try { | |||||
| const data = this.data[namespace]; | |||||
| cb(data); | |||||
| } catch (e) { | |||||
| cb(undefined); | |||||
| } | |||||
| }); | |||||
| } | |||||
| }; | |||||
| } | |||||
| interface ExecutorProps { | |||||
| hook: () => any; | |||||
| onUpdate: (val: any) => void; | |||||
| namespace: string; | |||||
| } | |||||
| function Executor(props: ExecutorProps) { | |||||
| const { hook, onUpdate, namespace } = props; | |||||
| const updateRef = useRef(onUpdate); | |||||
| const initialLoad = useRef(false); | |||||
| let data: any; | |||||
| try { | |||||
| data = hook(); | |||||
| } catch (e) { | |||||
| console.error( | |||||
| `plugin-model: Invoking '${namespace || 'unknown'}' model failed:`, | |||||
| e, | |||||
| ); | |||||
| } | |||||
| // 首次执行时立刻返回初始值 | |||||
| useMemo(() => { | |||||
| updateRef.current(data); | |||||
| }, []); | |||||
| // React 16.13 后 update 函数用 useEffect 包裹 | |||||
| useEffect(() => { | |||||
| if (initialLoad.current) { | |||||
| updateRef.current(data); | |||||
| } else { | |||||
| initialLoad.current = true; | |||||
| } | |||||
| }); | |||||
| return null; | |||||
| } | |||||
| const dispatcher = new Dispatcher(); | |||||
| export function Provider(props: { | |||||
| models: Record<string, any>; | |||||
| children: React.ReactNode; | |||||
| }) { | |||||
| return ( | |||||
| <Context.Provider value={{ dispatcher }}> | |||||
| {Object.keys(props.models).map((namespace) => { | |||||
| return ( | |||||
| <Executor | |||||
| key={namespace} | |||||
| hook={props.models[namespace]} | |||||
| namespace={namespace} | |||||
| onUpdate={(val) => { | |||||
| dispatcher.data[namespace] = val; | |||||
| dispatcher.update(namespace); | |||||
| }} | |||||
| /> | |||||
| ); | |||||
| })} | |||||
| {props.children} | |||||
| </Context.Provider> | |||||
| ); | |||||
| } | |||||
| type GetModelByNamespace<M, N> = { | |||||
| [K in keyof M]: M[K] extends { namespace: string; model: unknown } | |||||
| ? M[K]['namespace'] extends N | |||||
| ? M[K]['model'] extends (...args: any) => any | |||||
| ? ReturnType<M[K]['model']> | |||||
| : never | |||||
| : never | |||||
| : never; | |||||
| }[keyof M]; | |||||
| type Model<N> = GetModelByNamespace<Models, N>; | |||||
| type Selector<N, S> = (model: Model<N>) => S; | |||||
| type SelectedModel<N, T> = T extends (...args: any) => any | |||||
| ? ReturnType<NonNullable<T>> | |||||
| : Model<N>; | |||||
| export function useModel<N extends Namespaces>(namespace: N): Model<N>; | |||||
| export function useModel<N extends Namespaces, S>( | |||||
| namespace: N, | |||||
| selector: Selector<N, S>, | |||||
| ): SelectedModel<N, typeof selector>; | |||||
| export function useModel<N extends Namespaces, S>( | |||||
| namespace: N, | |||||
| selector?: Selector<N, S>, | |||||
| ): SelectedModel<N, typeof selector> { | |||||
| const { dispatcher } = useContext<{ dispatcher: Dispatcher }>(Context); | |||||
| const selectorRef = useRef(selector); | |||||
| selectorRef.current = selector; | |||||
| const [state, setState] = useState(() => | |||||
| selectorRef.current | |||||
| ? selectorRef.current(dispatcher.data[namespace]) | |||||
| : dispatcher.data[namespace], | |||||
| ); | |||||
| const stateRef = useRef<any>(state); | |||||
| stateRef.current = state; | |||||
| const isMount = useRef(false); | |||||
| useEffect(() => { | |||||
| isMount.current = true; | |||||
| return () => { | |||||
| isMount.current = false; | |||||
| }; | |||||
| }, []); | |||||
| useEffect(() => { | |||||
| const handler = (data: any) => { | |||||
| if (!isMount.current) { | |||||
| // 如果 handler 执行过程中,组件被卸载了,则强制更新全局 data | |||||
| // TODO: 需要加个 example 测试 | |||||
| setTimeout(() => { | |||||
| dispatcher.data[namespace] = data; | |||||
| dispatcher.update(namespace); | |||||
| }); | |||||
| } else { | |||||
| const currentState = selectorRef.current | |||||
| ? selectorRef.current(data) | |||||
| : data; | |||||
| const previousState = stateRef.current; | |||||
| if (!isEqual(currentState, previousState)) { | |||||
| // 避免 currentState 拿到的数据是老的,从而导致 isEqual 比对逻辑有问题 | |||||
| stateRef.current = currentState; | |||||
| setState(currentState); | |||||
| } | |||||
| } | |||||
| }; | |||||
| dispatcher.callbacks[namespace] ||= new Set() as any; // rawModels 是 umi 动态生成的文件,导致前面 callback[namespace] 的类型无法推导出来,所以用 as any 来忽略掉 | |||||
| dispatcher.callbacks[namespace].add(handler); | |||||
| dispatcher.update(namespace); | |||||
| return () => { | |||||
| dispatcher.callbacks[namespace].delete(handler); | |||||
| }; | |||||
| }, [namespace]); | |||||
| return state; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import model_1 from 'E:/project/myproject/rencaishichanghoutai/src/models/global'; | |||||
| import model_2 from 'E:/project/myproject/rencaishichanghoutai/src/.umi/plugin-initialState/@@initialState'; | |||||
| export const models = { | |||||
| model_1: { namespace: 'global', model: model_1 }, | |||||
| model_2: { namespace: '@@initialState', model: model_2 }, | |||||
| } as const |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React from 'react'; | |||||
| import { Provider } from './'; | |||||
| import { models as rawModels } from './model'; | |||||
| function ProviderWrapper(props: any) { | |||||
| const models = React.useMemo(() => { | |||||
| return Object.keys(rawModels).reduce((memo, key) => { | |||||
| memo[rawModels[key].namespace] = rawModels[key].model; | |||||
| return memo; | |||||
| }, {}); | |||||
| }, []); | |||||
| return <Provider models={models} {...props}>{ props.children }</Provider> | |||||
| } | |||||
| export function dataflowProvider(container, opts) { | |||||
| return <ProviderWrapper {...opts}>{ container }</ProviderWrapper>; | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export { | |||||
| useRequest, | |||||
| UseRequestProvider, | |||||
| request, | |||||
| getRequestInstance, | |||||
| } from './request'; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import axios, { | |||||
| type AxiosInstance, | |||||
| type AxiosRequestConfig, | |||||
| type AxiosResponse, | |||||
| type AxiosError, | |||||
| } from 'E:/project/myproject/rencaishichanghoutai/node_modules/axios'; | |||||
| import useUmiRequest, { UseRequestProvider } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request'; | |||||
| import { ApplyPluginsType } from 'umi'; | |||||
| import { getPluginManager } from '../core/plugin'; | |||||
| import { | |||||
| BaseOptions, | |||||
| BasePaginatedOptions, | |||||
| BaseResult, | |||||
| CombineService, | |||||
| LoadMoreFormatReturn, | |||||
| LoadMoreOptions, | |||||
| LoadMoreOptionsWithFormat, | |||||
| LoadMoreParams, | |||||
| LoadMoreResult, | |||||
| OptionsWithFormat, | |||||
| PaginatedFormatReturn, | |||||
| PaginatedOptionsWithFormat, | |||||
| PaginatedParams, | |||||
| PaginatedResult, | |||||
| } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request/es/types'; | |||||
| type ResultWithData< T = any > = { data?: T; [key: string]: any }; | |||||
| function useRequest< | |||||
| R = any, | |||||
| P extends any[] = any, | |||||
| U = any, | |||||
| UU extends U = any, | |||||
| >( | |||||
| service: CombineService<R, P>, | |||||
| options: OptionsWithFormat<R, P, U, UU>, | |||||
| ): BaseResult<U, P>; | |||||
| function useRequest<R extends ResultWithData = any, P extends any[] = any>( | |||||
| service: CombineService<R, P>, | |||||
| options?: BaseOptions<R['data'], P>, | |||||
| ): BaseResult<R['data'], P>; | |||||
| function useRequest<R extends LoadMoreFormatReturn = any, RR = any>( | |||||
| service: CombineService<RR, LoadMoreParams<R>>, | |||||
| options: LoadMoreOptionsWithFormat<R, RR>, | |||||
| ): LoadMoreResult<R>; | |||||
| function useRequest< | |||||
| R extends ResultWithData<LoadMoreFormatReturn | any> = any, | |||||
| RR extends R = any, | |||||
| >( | |||||
| service: CombineService<R, LoadMoreParams<R['data']>>, | |||||
| options: LoadMoreOptions<RR['data']>, | |||||
| ): LoadMoreResult<R['data']>; | |||||
| function useRequest<R = any, Item = any, U extends Item = any>( | |||||
| service: CombineService<R, PaginatedParams>, | |||||
| options: PaginatedOptionsWithFormat<R, Item, U>, | |||||
| ): PaginatedResult<Item>; | |||||
| function useRequest<Item = any, U extends Item = any>( | |||||
| service: CombineService< | |||||
| ResultWithData<PaginatedFormatReturn<Item>>, | |||||
| PaginatedParams | |||||
| >, | |||||
| options: BasePaginatedOptions<U>, | |||||
| ): PaginatedResult<Item>; | |||||
| function useRequest(service: any, options: any = {}) { | |||||
| return useUmiRequest(service, { | |||||
| formatResult: result => result?.data, | |||||
| requestMethod: (requestOptions: any) => { | |||||
| if (typeof requestOptions === 'string') { | |||||
| return request(requestOptions); | |||||
| } | |||||
| if (typeof requestOptions === 'object') { | |||||
| const { url, ...rest } = requestOptions; | |||||
| return request(url, rest); | |||||
| } | |||||
| throw new Error('request options error'); | |||||
| }, | |||||
| ...options, | |||||
| }); | |||||
| } | |||||
| // request 方法 opts 参数的接口 | |||||
| interface IRequestOptions extends AxiosRequestConfig { | |||||
| skipErrorHandler?: boolean; | |||||
| requestInterceptors?: IRequestInterceptorTuple[]; | |||||
| responseInterceptors?: IResponseInterceptorTuple[]; | |||||
| [key: string]: any; | |||||
| } | |||||
| interface IRequestOptionsWithResponse extends IRequestOptions { | |||||
| getResponse: true; | |||||
| } | |||||
| interface IRequestOptionsWithoutResponse extends IRequestOptions{ | |||||
| getResponse: false; | |||||
| } | |||||
| interface IRequest{ | |||||
| <T = any>(url: string, opts: IRequestOptionsWithResponse): Promise<AxiosResponse<T>>; | |||||
| <T = any>(url: string, opts: IRequestOptionsWithoutResponse): Promise<T>; | |||||
| <T = any>(url: string, opts: IRequestOptions): Promise<T>; // getResponse 默认是 false, 因此不提供该参数时,只返回 data | |||||
| <T = any>(url: string): Promise<T>; // 不提供 opts 时,默认使用 'GET' method,并且默认返回 data | |||||
| } | |||||
| type RequestError = AxiosError | Error | |||||
| interface IErrorHandler { | |||||
| (error: RequestError, opts: IRequestOptions): void; | |||||
| } | |||||
| type WithPromise<T> = T | Promise<T>; | |||||
| type IRequestInterceptorAxios = (config: IRequestOptions) => WithPromise<IRequestOptions>; | |||||
| type IRequestInterceptorUmiRequest = (url: string, config : IRequestOptions) => WithPromise<{ url: string, options: IRequestOptions }>; | |||||
| type IRequestInterceptor = IRequestInterceptorAxios | IRequestInterceptorUmiRequest; | |||||
| type IErrorInterceptor = (error: Error) => Promise<Error>; | |||||
| type IResponseInterceptor = <T = any>(response : AxiosResponse<T>) => WithPromise<AxiosResponse<T>> ; | |||||
| type IRequestInterceptorTuple = [IRequestInterceptor , IErrorInterceptor] | [IRequestInterceptor] | IRequestInterceptor | |||||
| type IResponseInterceptorTuple = [IResponseInterceptor, IErrorInterceptor] | [IResponseInterceptor] | IResponseInterceptor | |||||
| export interface RequestConfig<T = any> extends AxiosRequestConfig { | |||||
| errorConfig?: { | |||||
| errorHandler?: IErrorHandler; | |||||
| errorThrower?: ( res: T ) => void | |||||
| }; | |||||
| requestInterceptors?: IRequestInterceptorTuple[]; | |||||
| responseInterceptors?: IResponseInterceptorTuple[]; | |||||
| } | |||||
| let requestInstance: AxiosInstance; | |||||
| let config: RequestConfig; | |||||
| const getConfig = (): RequestConfig => { | |||||
| if (config) return config; | |||||
| config = getPluginManager().applyPlugins({ | |||||
| key: 'request', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: {}, | |||||
| }); | |||||
| return config; | |||||
| }; | |||||
| const getRequestInstance = (): AxiosInstance => { | |||||
| if (requestInstance) return requestInstance; | |||||
| const config = getConfig(); | |||||
| requestInstance = axios.create(config); | |||||
| config?.requestInterceptors?.forEach((interceptor) => { | |||||
| if(interceptor instanceof Array){ | |||||
| requestInstance.interceptors.request.use(async (config) => { | |||||
| const { url } = config; | |||||
| if(interceptor[0].length === 2){ | |||||
| const { url: newUrl, options } = await interceptor[0](url, config); | |||||
| return { ...options, url: newUrl }; | |||||
| } | |||||
| return interceptor[0](config); | |||||
| }, interceptor[1]); | |||||
| } else { | |||||
| requestInstance.interceptors.request.use(async (config) => { | |||||
| const { url } = config; | |||||
| if(interceptor.length === 2){ | |||||
| const { url: newUrl, options } = await interceptor(url, config); | |||||
| return { ...options, url: newUrl }; | |||||
| } | |||||
| return interceptor(config); | |||||
| }) | |||||
| } | |||||
| }); | |||||
| config?.responseInterceptors?.forEach((interceptor) => { | |||||
| interceptor instanceof Array ? | |||||
| requestInstance.interceptors.response.use(interceptor[0], interceptor[1]): | |||||
| requestInstance.interceptors.response.use(interceptor); | |||||
| }); | |||||
| // 当响应的数据 success 是 false 的时候,抛出 error 以供 errorHandler 处理。 | |||||
| requestInstance.interceptors.response.use((response) => { | |||||
| const { data } = response; | |||||
| if(data?.success === false && config?.errorConfig?.errorThrower){ | |||||
| config.errorConfig.errorThrower(data); | |||||
| } | |||||
| return response; | |||||
| }) | |||||
| return requestInstance; | |||||
| }; | |||||
| const request: IRequest = (url: string, opts: any = { method: 'GET' }) => { | |||||
| const requestInstance = getRequestInstance(); | |||||
| const config = getConfig(); | |||||
| const { getResponse = false, requestInterceptors, responseInterceptors } = opts; | |||||
| const requestInterceptorsToEject = requestInterceptors?.map((interceptor) => { | |||||
| if(interceptor instanceof Array){ | |||||
| return requestInstance.interceptors.request.use(async (config) => { | |||||
| const { url } = config; | |||||
| if(interceptor[0].length === 2){ | |||||
| const { url: newUrl, options } = await interceptor[0](url, config); | |||||
| return { ...options, url: newUrl }; | |||||
| } | |||||
| return interceptor[0](config); | |||||
| }, interceptor[1]); | |||||
| } else { | |||||
| return requestInstance.interceptors.request.use(async (config) => { | |||||
| const { url } = config; | |||||
| if(interceptor.length === 2){ | |||||
| const { url: newUrl, options } = await interceptor(url, config); | |||||
| return { ...options, url: newUrl }; | |||||
| } | |||||
| return interceptor(config); | |||||
| }) | |||||
| } | |||||
| }); | |||||
| const responseInterceptorsToEject = responseInterceptors?.map((interceptor) => { | |||||
| return interceptor instanceof Array ? | |||||
| requestInstance.interceptors.response.use(interceptor[0], interceptor[1]): | |||||
| requestInstance.interceptors.response.use(interceptor); | |||||
| }); | |||||
| return new Promise((resolve, reject)=>{ | |||||
| requestInstance | |||||
| .request({...opts, url}) | |||||
| .then((res)=>{ | |||||
| requestInterceptorsToEject?.forEach((interceptor) => { | |||||
| requestInstance.interceptors.request.eject(interceptor); | |||||
| }); | |||||
| responseInterceptorsToEject?.forEach((interceptor) => { | |||||
| requestInstance.interceptors.response.eject(interceptor); | |||||
| }); | |||||
| resolve(getResponse ? res : res.data); | |||||
| }) | |||||
| .catch((error)=>{ | |||||
| requestInterceptorsToEject?.forEach((interceptor) => { | |||||
| requestInstance.interceptors.request.eject(interceptor); | |||||
| }); | |||||
| responseInterceptorsToEject?.forEach((interceptor) => { | |||||
| requestInstance.interceptors.response.eject(interceptor); | |||||
| }); | |||||
| try { | |||||
| const handler = | |||||
| config?.errorConfig?.errorHandler; | |||||
| if(handler) | |||||
| handler(error, opts, config); | |||||
| } catch (e) { | |||||
| reject(e); | |||||
| } | |||||
| reject(error); | |||||
| }) | |||||
| }) | |||||
| } | |||||
| export { | |||||
| useRequest, | |||||
| UseRequestProvider, | |||||
| request, | |||||
| getRequestInstance, | |||||
| }; | |||||
| export type { | |||||
| AxiosInstance, | |||||
| AxiosRequestConfig, | |||||
| AxiosResponse, | |||||
| AxiosError, | |||||
| RequestError, | |||||
| IRequestInterceptorAxios as RequestInterceptorAxios, | |||||
| IRequestInterceptorUmiRequest as RequestInterceptorUmiRequest, | |||||
| IRequestInterceptor as RequestInterceptor, | |||||
| IErrorInterceptor as ErrorInterceptor, | |||||
| IResponseInterceptor as ResponseInterceptor, | |||||
| IRequestOptions as RequestOptions, | |||||
| IRequest as Request, | |||||
| }; |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import type { RequestConfig } from './types.d' | |||||
| export type IRuntimeConfig = { | |||||
| request?: RequestConfig | |||||
| }; |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| export type { | |||||
| RequestConfig, | |||||
| AxiosInstance, | |||||
| AxiosRequestConfig, | |||||
| AxiosResponse, | |||||
| AxiosError, | |||||
| RequestError, | |||||
| RequestInterceptorAxios, | |||||
| RequestInterceptorUmiRequest, | |||||
| RequestInterceptor, | |||||
| ErrorInterceptor, | |||||
| ResponseInterceptor, | |||||
| RequestOptions, | |||||
| Request } from './request'; |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import React, { useEffect, useState } from 'react'; | |||||
| import { ApplyPluginsType } from 'umi'; | |||||
| import { renderClient, RenderClientOpts } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react'; | |||||
| import { createHistory } from './core/history'; | |||||
| import { createPluginManager } from './core/plugin'; | |||||
| import { getRoutes } from './core/route'; | |||||
| import type { Location } from 'history'; | |||||
| import 'antd/dist/reset.css'; | |||||
| const publicPath = '/'; | |||||
| const runtimePublicPath = false; | |||||
| type TestBrowserProps = { | |||||
| location?: Partial<Location>; | |||||
| historyRef?: React.MutableRefObject<Location>; | |||||
| }; | |||||
| export function TestBrowser(props: TestBrowserProps) { | |||||
| const pluginManager = createPluginManager(); | |||||
| const [context, setContext] = useState<RenderClientOpts | undefined>( | |||||
| undefined | |||||
| ); | |||||
| useEffect(() => { | |||||
| const genContext = async () => { | |||||
| const { routes, routeComponents } = await getRoutes(pluginManager); | |||||
| // allow user to extend routes | |||||
| await pluginManager.applyPlugins({ | |||||
| key: 'patchRoutes', | |||||
| type: ApplyPluginsType.event, | |||||
| args: { | |||||
| routes, | |||||
| routeComponents, | |||||
| }, | |||||
| }); | |||||
| const contextOpts = pluginManager.applyPlugins({ | |||||
| key: 'modifyContextOpts', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: {}, | |||||
| }); | |||||
| const basename = contextOpts.basename || '/'; | |||||
| const history = createHistory({ | |||||
| type: 'memory', | |||||
| basename, | |||||
| }); | |||||
| const context = { | |||||
| routes, | |||||
| routeComponents, | |||||
| pluginManager, | |||||
| rootElement: contextOpts.rootElement || document.getElementById('root'), | |||||
| publicPath, | |||||
| runtimePublicPath, | |||||
| history, | |||||
| basename, | |||||
| components: true, | |||||
| }; | |||||
| const modifiedContext = pluginManager.applyPlugins({ | |||||
| key: 'modifyClientRenderOpts', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: context, | |||||
| }); | |||||
| return modifiedContext; | |||||
| }; | |||||
| genContext().then((context) => { | |||||
| setContext(context); | |||||
| if (props.location) { | |||||
| context?.history?.push(props.location); | |||||
| } | |||||
| if (props.historyRef) { | |||||
| props.historyRef.current = context?.history; | |||||
| } | |||||
| }); | |||||
| }, []); | |||||
| if (context === undefined) { | |||||
| return <div id="loading" />; | |||||
| } | |||||
| const Children = renderClient(context); | |||||
| return ( | |||||
| <React.Fragment> | |||||
| <Children /> | |||||
| </React.Fragment> | |||||
| ); | |||||
| } |
| { | |||||
| "compilerOptions": { | |||||
| "target": "esnext", | |||||
| "module": "esnext", | |||||
| "lib": [ | |||||
| "dom", | |||||
| "dom.iterable", | |||||
| "esnext" | |||||
| ], | |||||
| "allowJs": true, | |||||
| "skipLibCheck": true, | |||||
| "moduleResolution": "bundler", | |||||
| "importHelpers": true, | |||||
| "noEmit": true, | |||||
| "jsx": "react-jsx", | |||||
| "esModuleInterop": true, | |||||
| "sourceMap": true, | |||||
| "baseUrl": "../../", | |||||
| "strict": true, | |||||
| "resolveJsonModule": true, | |||||
| "allowSyntheticDefaultImports": true, | |||||
| "paths": { | |||||
| "@/*": [ | |||||
| "src/*" | |||||
| ], | |||||
| "@@/*": [ | |||||
| "src/.umi/*" | |||||
| ], | |||||
| "@umijs/max": [ | |||||
| "E:\\project\\myproject\\rencaishichanghoutai\\node_modules\\umi" | |||||
| ], | |||||
| "@umijs/max/typings": [ | |||||
| "src/.umi/typings" | |||||
| ] | |||||
| } | |||||
| }, | |||||
| "include": [ | |||||
| "../../.umirc.ts", | |||||
| "../../.umirc.*.ts", | |||||
| "../../**/*.d.ts", | |||||
| "../../**/*.ts", | |||||
| "../../**/*.tsx" | |||||
| ] | |||||
| } |
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| type CSSModuleClasses = { readonly [key: string]: string } | |||||
| declare module '*.css' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| declare module '*.scss' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| declare module '*.sass' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| declare module '*.less' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| declare module '*.styl' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| declare module '*.stylus' { | |||||
| const classes: CSSModuleClasses | |||||
| export default classes | |||||
| } | |||||
| // images | |||||
| declare module '*.jpg' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.jpeg' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.png' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.gif' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.svg' { | |||||
| import * as React from 'react'; | |||||
| export const ReactComponent: React.FunctionComponent<React.SVGProps< | |||||
| SVGSVGElement | |||||
| > & { title?: string }>; | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.ico' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.webp' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.avif' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| // media | |||||
| declare module '*.mp4' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.webm' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.ogg' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.mp3' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.wav' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.flac' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.aac' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| // fonts | |||||
| declare module '*.woff' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.woff2' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.eot' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.ttf' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.otf' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| // other | |||||
| declare module '*.wasm' { | |||||
| const initWasm: (options: WebAssembly.Imports) => Promise<WebAssembly.Exports> | |||||
| export default initWasm | |||||
| } | |||||
| declare module '*.webmanifest' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.pdf' { | |||||
| const src: string | |||||
| export default src | |||||
| } | |||||
| declare module '*.txt' { | |||||
| const src: string | |||||
| export default src | |||||
| } |
| // @ts-nocheck | |||||
| // This file is generated by Umi automatically | |||||
| // DO NOT CHANGE IT MANUALLY! | |||||
| import './core/polyfill'; | |||||
| import 'antd/dist/reset.css'; | |||||
| import { renderClient } from 'E:/project/myproject/rencaishichanghoutai/node_modules/@umijs/renderer-react'; | |||||
| import { getRoutes } from './core/route'; | |||||
| import { createPluginManager } from './core/plugin'; | |||||
| import { createHistory } from './core/history'; | |||||
| import { ApplyPluginsType } from 'umi'; | |||||
| const publicPath = "/"; | |||||
| const runtimePublicPath = false; | |||||
| async function render() { | |||||
| const pluginManager = createPluginManager(); | |||||
| const { routes, routeComponents } = await getRoutes(pluginManager); | |||||
| // allow user to extend routes | |||||
| await pluginManager.applyPlugins({ | |||||
| key: 'patchRoutes', | |||||
| type: ApplyPluginsType.event, | |||||
| args: { | |||||
| routes, | |||||
| routeComponents, | |||||
| }, | |||||
| }); | |||||
| const contextOpts = pluginManager.applyPlugins({ | |||||
| key: 'modifyContextOpts', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: {}, | |||||
| }); | |||||
| const basename = contextOpts.basename || '/'; | |||||
| const historyType = contextOpts.historyType || 'browser'; | |||||
| const history = createHistory({ | |||||
| type: historyType, | |||||
| basename, | |||||
| ...contextOpts.historyOpts, | |||||
| }); | |||||
| return (pluginManager.applyPlugins({ | |||||
| key: 'render', | |||||
| type: ApplyPluginsType.compose, | |||||
| initialValue() { | |||||
| const context = { | |||||
| routes, | |||||
| routeComponents, | |||||
| pluginManager, | |||||
| rootElement: contextOpts.rootElement || document.getElementById('root'), | |||||
| publicPath, | |||||
| runtimePublicPath, | |||||
| history, | |||||
| historyType, | |||||
| basename, | |||||
| callback: contextOpts.callback, | |||||
| }; | |||||
| const modifiedContext = pluginManager.applyPlugins({ | |||||
| key: 'modifyClientRenderOpts', | |||||
| type: ApplyPluginsType.modify, | |||||
| initialValue: context, | |||||
| }); | |||||
| return renderClient(modifiedContext); | |||||
| }, | |||||
| }))(); | |||||
| } | |||||
| render(); | |||||
| window.g_umi = { | |||||
| version: '4.2.8', | |||||
| }; |
| export default (initialState: API.UserInfo) => { | |||||
| // 在这里按照初始化数据定义项目中的权限,统一管理 | |||||
| // 参考文档 https://umijs.org/docs/max/access | |||||
| const canSeeAdmin = !!( | |||||
| initialState && initialState.name !== 'dontHaveAccess' | |||||
| ); | |||||
| return { | |||||
| canSeeAdmin, | |||||
| }; | |||||
| }; |
| import {admin} from '@/constants' | |||||
| const url: LoginType.user = { | |||||
| UserLogin: admin + '/user/login', | |||||
| } | |||||
| export |
| declare namespace AreaType { | |||||
| type form = { | |||||
| title ?: string, | |||||
| level_name ?: string, | |||||
| is_community ?: string | |||||
| } | |||||
| } |
| declare namespace BaiduType { | |||||
| type form = { | |||||
| name ?: string, | |||||
| app_id ?: string, | |||||
| api_key ?: string, | |||||
| secret_key ?: string, | |||||
| } | |||||
| } |
| declare namespace LoginType { | |||||
| type user = { | |||||
| UserLogin ?: string, | |||||
| } | |||||
| } |
| declare namespace ProjectType { | |||||
| type form = { | |||||
| aip_id ?: string, | |||||
| name ?: string | |||||
| } | |||||
| } |
| // 运行时配置 | |||||
| // 全局初始化数据配置,用于 Layout 用户信息和权限初始化 | |||||
| // 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstate | |||||
| export async function getInitialState(): Promise<{ name: string }> { | |||||
| return { name: '@umijs/max' }; | |||||
| } | |||||
| export const layout = () => { | |||||
| return { | |||||
| logo: 'https://img.alicdn.com/tfs/TB1YHEpwUT1gK0jSZFhXXaAtVXa-28-27.svg', | |||||
| layout: 'mix', | |||||
| splitMenus: true, | |||||
| siderWidth: 240, | |||||
| menu: { | |||||
| locale: false, | |||||
| }, | |||||
| avatarProps: { | |||||
| src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg', | |||||
| size: 'small', | |||||
| title: '七妮妮' | |||||
| } | |||||
| }; | |||||
| }; |
| .title { | |||||
| margin: 0 auto; | |||||
| font-weight: 200; | |||||
| } |
| import { Layout, Row, Typography } from 'antd'; | |||||
| import React from 'react'; | |||||
| import styles from './Guide.less'; | |||||
| interface Props { | |||||
| name: string; | |||||
| } | |||||
| // 脚手架示例组件 | |||||
| const Guide: React.FC<Props> = (props) => { | |||||
| const { name } = props; | |||||
| return ( | |||||
| <Layout> | |||||
| <Row> | |||||
| <Typography.Title level={3} className={styles.title}> | |||||
| 欢迎使用 <strong>{name}</strong> ! | |||||
| </Typography.Title> | |||||
| </Row> | |||||
| </Layout> | |||||
| ); | |||||
| }; | |||||
| export default Guide; |
| import Guide from './Guide'; | |||||
| export default Guide; |
| export const DEFAULT_NAME = 'Umi Max'; | |||||
| export const admin = 'admin'; | |||||
| export const common = 'common'; |
| // 全局共享数据示例 | |||||
| import { DEFAULT_NAME } from '@/constants'; | |||||
| import { useState } from 'react'; | |||||
| const useUser = () => { | |||||
| const [name, setName] = useState<string>(DEFAULT_NAME); | |||||
| return { | |||||
| name, | |||||
| setName, | |||||
| }; | |||||
| }; | |||||
| export default useUser; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { ProTable, TableDropdown } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag } from 'antd'; | |||||
| import { useRef } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| type GithubIssueItem = { | |||||
| url: string; | |||||
| id: number; | |||||
| number: number; | |||||
| title: string; | |||||
| labels: { | |||||
| name: string; | |||||
| color: string; | |||||
| }[]; | |||||
| state: string; | |||||
| comments: number; | |||||
| created_at: string; | |||||
| updated_at: string; | |||||
| closed_at?: string; | |||||
| }; | |||||
| const columns: ProColumns<GithubIssueItem>[] = [ | |||||
| { | |||||
| dataIndex: 'index', | |||||
| valueType: 'indexBorder', | |||||
| width: 48, | |||||
| }, | |||||
| { | |||||
| title: '标题', | |||||
| dataIndex: 'title', | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '标签', | |||||
| dataIndex: 'labels', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| key: 'showTime', | |||||
| dataIndex: 'created_at', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| dataIndex: 'created_at', | |||||
| valueType: 'dateRange', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| <a href={record.url} target="_blank" rel="noopener noreferrer" key="view"> | |||||
| 查看 | |||||
| </a>, | |||||
| <TableDropdown | |||||
| key="actionGroup" | |||||
| onSelect={() => action?.reload()} | |||||
| menus={[ | |||||
| { key: 'copy', name: '复制' }, | |||||
| { key: 'delete', name: '删除' }, | |||||
| ]} | |||||
| />, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const actionRef = useRef<ActionType>(); | |||||
| return ( | |||||
| <> | |||||
| <ProTable | |||||
| headerTitle="高级表格" | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <Button | |||||
| key="button" | |||||
| type="primary" | |||||
| > | |||||
| 新建 | |||||
| </Button>, | |||||
| ]} | |||||
| /> | |||||
| </> | |||||
| ); | |||||
| }; |
| .container { | |||||
| padding-top: 80px; | |||||
| } |
| import Guide from '@/components/Guide'; | |||||
| import { trim } from '@/utils/format'; | |||||
| import { PageContainer } from '@ant-design/pro-components'; | |||||
| import { useModel } from '@umijs/max'; | |||||
| import styles from './index.less'; | |||||
| const HomePage: React.FC = () => { | |||||
| const { name } = useModel('global'); | |||||
| return ( | |||||
| <PageContainer ghost> | |||||
| <div className={styles.container}> | |||||
| <Guide name={trim(name)} /> | |||||
| </div> | |||||
| </PageContainer> | |||||
| ); | |||||
| }; | |||||
| export default HomePage; |
| import { | |||||
| AlipayCircleOutlined, | |||||
| LockOutlined, | |||||
| MobileOutlined, | |||||
| TaobaoCircleOutlined, | |||||
| UserOutlined, | |||||
| WeiboCircleOutlined, | |||||
| } from '@ant-design/icons'; | |||||
| import { | |||||
| LoginForm, | |||||
| ProConfigProvider, | |||||
| ProFormCaptcha, | |||||
| ProFormCheckbox, | |||||
| ProFormText, | |||||
| setAlpha, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Space, Tabs, message, theme, Row, Col, Image } from 'antd'; | |||||
| import type { CSSProperties } from 'react'; | |||||
| import { useState } from 'react'; | |||||
| export default () => { | |||||
| const { token } = theme.useToken(); | |||||
| const iconStyles: CSSProperties = { | |||||
| marginInlineStart: '16px', | |||||
| color: setAlpha(token.colorTextBase, 0.2), | |||||
| fontSize: '24px', | |||||
| verticalAlign: 'middle', | |||||
| cursor: 'pointer', | |||||
| }; | |||||
| return ( | |||||
| <ProConfigProvider hashed={false}> | |||||
| <div style={{ backgroundColor: token.colorBgContainer }}> | |||||
| <LoginForm | |||||
| title="菊城人才后台管理系统" | |||||
| subTitle="欢迎系统" | |||||
| > | |||||
| <> | |||||
| <ProFormText | |||||
| name="username" | |||||
| fieldProps={{ | |||||
| size: 'large', | |||||
| prefix: <UserOutlined className={'prefixIcon'} />, | |||||
| }} | |||||
| placeholder={'用户名: admin or user'} | |||||
| rules={[ | |||||
| { | |||||
| required: true, | |||||
| message: '请输入用户名!', | |||||
| }, | |||||
| ]} | |||||
| /> | |||||
| <ProFormText.Password | |||||
| name="password" | |||||
| fieldProps={{ | |||||
| size: 'large', | |||||
| prefix: <LockOutlined className={'prefixIcon'} />, | |||||
| strengthText: | |||||
| 'Password should contain numbers, letters and special characters, at least 8 characters long.', | |||||
| statusRender: (value) => { | |||||
| const getStatus = () => { | |||||
| if (value && value.length > 12) { | |||||
| return 'ok'; | |||||
| } | |||||
| if (value && value.length > 6) { | |||||
| return 'pass'; | |||||
| } | |||||
| return 'poor'; | |||||
| }; | |||||
| const status = getStatus(); | |||||
| if (status === 'pass') { | |||||
| return ( | |||||
| <div style={{ color: token.colorWarning }}> | |||||
| 强度:中 | |||||
| </div> | |||||
| ); | |||||
| } | |||||
| if (status === 'ok') { | |||||
| return ( | |||||
| <div style={{ color: token.colorSuccess }}> | |||||
| 强度:强 | |||||
| </div> | |||||
| ); | |||||
| } | |||||
| return ( | |||||
| <div style={{ color: token.colorError }}>强度:弱</div> | |||||
| ); | |||||
| }, | |||||
| }} | |||||
| placeholder={'密码: ant.design'} | |||||
| rules={[ | |||||
| { | |||||
| required: true, | |||||
| message: '请输入密码!', | |||||
| }, | |||||
| ]} | |||||
| /> | |||||
| <Row gutter={[16, 16]}> | |||||
| <Col span={16}> | |||||
| <ProFormText | |||||
| name="username" | |||||
| fieldProps={{ | |||||
| size: 'large', | |||||
| }} | |||||
| placeholder={'请输入图形验证码'} | |||||
| rules={[ | |||||
| { | |||||
| required: true, | |||||
| message: '请输入图形验证码!', | |||||
| }, | |||||
| ]} | |||||
| /> | |||||
| </Col> | |||||
| <Col span={8}> | |||||
| <Image src='/images/logo.png'></Image> | |||||
| </Col> | |||||
| </Row> | |||||
| <ProFormCaptcha | |||||
| fieldProps={{ | |||||
| size: 'large', | |||||
| prefix: <LockOutlined className={'prefixIcon'} />, | |||||
| }} | |||||
| captchaProps={{ | |||||
| size: 'large', | |||||
| }} | |||||
| placeholder={'请输入验证码'} | |||||
| captchaTextRender={(timing, count) => { | |||||
| if (timing) { | |||||
| return `${count} ${'获取验证码'}`; | |||||
| } | |||||
| return '获取验证码'; | |||||
| }} | |||||
| name="captcha" | |||||
| rules={[ | |||||
| { | |||||
| required: true, | |||||
| message: '请输入验证码!', | |||||
| }, | |||||
| ]} | |||||
| onGetCaptcha={async () => { | |||||
| message.success('获取验证码成功!验证码为:1234'); | |||||
| }} | |||||
| /> | |||||
| </> | |||||
| <div | |||||
| style={{ | |||||
| marginBlockEnd: 24, | |||||
| }} | |||||
| > | |||||
| <ProFormCheckbox noStyle name="autoLogin"> | |||||
| 自动登录 | |||||
| </ProFormCheckbox> | |||||
| <a | |||||
| style={{ | |||||
| float: 'right', | |||||
| }} | |||||
| > | |||||
| 忘记密码 | |||||
| </a> | |||||
| </div> | |||||
| </LoginForm> | |||||
| </div> | |||||
| </ProConfigProvider> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { ProTable, TableDropdown, PageContainer } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag } from 'antd'; | |||||
| import { useRef } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| type GithubIssueItem = { | |||||
| url: string; | |||||
| id: number; | |||||
| number: number; | |||||
| title: string; | |||||
| labels: { | |||||
| name: string; | |||||
| color: string; | |||||
| }[]; | |||||
| state: string; | |||||
| comments: number; | |||||
| created_at: string; | |||||
| updated_at: string; | |||||
| closed_at?: string; | |||||
| }; | |||||
| const columns: ProColumns<GithubIssueItem>[] = [ | |||||
| { | |||||
| dataIndex: 'index', | |||||
| valueType: 'indexBorder', | |||||
| width: 48, | |||||
| }, | |||||
| { | |||||
| title: '标题', | |||||
| dataIndex: 'title', | |||||
| hideInSearch: true | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '标签', | |||||
| dataIndex: 'labels', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| key: 'showTime', | |||||
| dataIndex: 'created_at', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| dataIndex: 'created_at', | |||||
| valueType: 'dateRange', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| <a href={record.url} target="_blank" rel="noopener noreferrer" key="view"> | |||||
| 查看 | |||||
| </a>, | |||||
| <TableDropdown | |||||
| key="actionGroup" | |||||
| onSelect={() => action?.reload()} | |||||
| menus={[ | |||||
| { key: 'copy', name: '复制' }, | |||||
| { key: 'delete', name: '删除' }, | |||||
| ]} | |||||
| />, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const actionRef = useRef<ActionType>(); | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| columns={columns} | |||||
| search={{title: false}} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <Button | |||||
| key="button" | |||||
| type="primary" | |||||
| > | |||||
| 新建 | |||||
| </Button>, | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| type GithubIssueItem = { | |||||
| url: string; | |||||
| id: number; | |||||
| number: number; | |||||
| title: string; | |||||
| labels: { | |||||
| name: string; | |||||
| color: string; | |||||
| }[]; | |||||
| state: string; | |||||
| comments: number; | |||||
| created_at: string; | |||||
| updated_at: string; | |||||
| closed_at?: string; | |||||
| }; | |||||
| const columns: ProColumns<GithubIssueItem>[] = [ | |||||
| { | |||||
| dataIndex: 'index', | |||||
| valueType: 'indexBorder', | |||||
| width: 48, | |||||
| }, | |||||
| { | |||||
| title: '标题', | |||||
| dataIndex: 'title', | |||||
| hideInSearch: true | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| disable: true, | |||||
| title: '标签', | |||||
| dataIndex: 'labels', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| key: 'showTime', | |||||
| dataIndex: 'created_at', | |||||
| }, | |||||
| { | |||||
| title: '创建时间', | |||||
| dataIndex: 'created_at', | |||||
| valueType: 'dateRange', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| <a href={record.url} target="_blank" rel="noopener noreferrer" key="view"> | |||||
| 查看 | |||||
| </a>, | |||||
| <TableDropdown | |||||
| key="actionGroup" | |||||
| onSelect={() => action?.reload()} | |||||
| menus={[ | |||||
| { key: 'copy', name: '复制' }, | |||||
| { key: 'delete', name: '删除' }, | |||||
| ]} | |||||
| />, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<{ name: string; company: string }>(); | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<{ | |||||
| name: string; | |||||
| company: string; | |||||
| }> | |||||
| title="新增百度接口" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProForm.Group> | |||||
| <ProFormText | |||||
| width="md" | |||||
| name="name" | |||||
| label="签约客户名称" | |||||
| tooltip="最长为 24 位" | |||||
| placeholder="请输入名称" | |||||
| /> | |||||
| <ProFormText | |||||
| width="md" | |||||
| name="company" | |||||
| label="我方公司名称" | |||||
| placeholder="请输入名称" | |||||
| /> | |||||
| </ProForm.Group> | |||||
| <ProForm.Group> | |||||
| <ProFormText | |||||
| width="md" | |||||
| name="contract" | |||||
| label="合同名称" | |||||
| placeholder="请输入名称" | |||||
| /> | |||||
| <ProFormDateRangePicker name="contractTime" label="合同生效时间" /> | |||||
| </ProForm.Group> | |||||
| <ProForm.Group> | |||||
| <ProFormSelect | |||||
| request={async () => [ | |||||
| { | |||||
| value: 'chapter', | |||||
| label: '盖章后生效', | |||||
| }, | |||||
| ]} | |||||
| width="xs" | |||||
| name="useMode" | |||||
| label="合同约定生效方式" | |||||
| /> | |||||
| <ProFormSelect | |||||
| width="xs" | |||||
| options={[ | |||||
| { | |||||
| value: 'time', | |||||
| label: '履行完终止', | |||||
| }, | |||||
| ]} | |||||
| name="unusedMode" | |||||
| label="合同约定失效效方式" | |||||
| /> | |||||
| </ProForm.Group> | |||||
| <ProFormText width="sm" name="id" label="主合同编号" /> | |||||
| <ProFormText | |||||
| name="project" | |||||
| disabled | |||||
| label="项目名称" | |||||
| initialValue="xxxx项目" | |||||
| /> | |||||
| <ProFormText | |||||
| width="xs" | |||||
| name="mangerName" | |||||
| disabled | |||||
| label="商务经理" | |||||
| initialValue="启途" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '应用名', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '备注', | |||||
| dataIndex: 'remark', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<BaiduType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<BaiduType.form> | |||||
| title="新增百度接口" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="应用名" | |||||
| placeholder="请输入应用名" | |||||
| /> | |||||
| <ProFormText | |||||
| name="app_id" | |||||
| label="AppID" | |||||
| placeholder="请输入AppID" | |||||
| /> | |||||
| <ProFormText | |||||
| name="api_key" | |||||
| label="APIKEY" | |||||
| placeholder="请输入APIKEY" | |||||
| /> | |||||
| <ProFormText | |||||
| name="secret_key" | |||||
| label="SecretKey" | |||||
| placeholder="请输入SecretKey" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '部门名称', | |||||
| dataIndex: 'title', | |||||
| }, | |||||
| { | |||||
| title: '部门等级', | |||||
| dataIndex: 'level', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<BaiduType.form>(); | |||||
| const [data, setData] = useState([{ id: 1 }]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增部门" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="title" | |||||
| label="部门名称" | |||||
| placeholder="请输入部门名称" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="level_name" | |||||
| label="部门等级" | |||||
| placeholder="请选择部门等级" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '省份 (社区)', | |||||
| dataIndex: 'title', | |||||
| }, | |||||
| { | |||||
| title: '上级', | |||||
| dataIndex: 'parent_id', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<AreaType.form>(); | |||||
| const [data, setData] = useState([{ id: 1 }]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<AreaType.form> | |||||
| title="新增地区" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建地区 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.title); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="title" | |||||
| label="地区名称" | |||||
| placeholder="请输入地区名称" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="level_name" | |||||
| label="选择归属地" | |||||
| placeholder="请选择归属地" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="is_community" | |||||
| label="是否是社区" | |||||
| placeholder="请选择是否是社区" | |||||
| /> | |||||
| </ModalForm>, | |||||
| <ModalForm<AreaType.form> | |||||
| title="导入街道(镇)" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 导入街道(镇) | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.title); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="title" | |||||
| label="地区名称" | |||||
| placeholder="请输入地区名称" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="level_name" | |||||
| label="选择归属地" | |||||
| placeholder="请选择归属地" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="is_community" | |||||
| label="是否是社区" | |||||
| placeholder="请选择是否是社区" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; | |||||
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '部门名称', | |||||
| dataIndex: 'title', | |||||
| }, | |||||
| { | |||||
| title: '部门等级', | |||||
| dataIndex: 'level', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<BaiduType.form>(); | |||||
| const [data, setData] = useState([{ id: 1 }]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增部门" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="title" | |||||
| label="部门名称" | |||||
| placeholder="请输入部门名称" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="level_name" | |||||
| label="部门等级" | |||||
| placeholder="请选择部门等级" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '部门名称', | |||||
| dataIndex: 'title', | |||||
| }, | |||||
| { | |||||
| title: '部门等级', | |||||
| dataIndex: 'level', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<BaiduType.form>(); | |||||
| const [data, setData] = useState([{ id: 1 }]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增部门" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="title" | |||||
| label="部门名称" | |||||
| placeholder="请输入部门名称" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="level_name" | |||||
| label="部门等级" | |||||
| placeholder="请选择部门等级" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '姓名', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '手机号', | |||||
| dataIndex: 'phone', | |||||
| }, | |||||
| { | |||||
| title: '工号', | |||||
| dataIndex: 'number', | |||||
| }, | |||||
| { | |||||
| title: '所属辖区', | |||||
| dataIndex: 'station.name', | |||||
| }, | |||||
| { | |||||
| title: '所属部门', | |||||
| dataIndex: 'department.title', | |||||
| }, | |||||
| { | |||||
| title: '审核状态', | |||||
| dataIndex: 'state', | |||||
| valueEnum: { | |||||
| open: { | |||||
| text: '待审核', | |||||
| status: 'Error', | |||||
| }, | |||||
| closed: { | |||||
| text: '已审核', | |||||
| status: 'Success', | |||||
| disabled: true, | |||||
| }, | |||||
| processing: { | |||||
| text: '不通过', | |||||
| status: 'Processing', | |||||
| }, | |||||
| }, | |||||
| }, | |||||
| { | |||||
| title: '门禁图像', | |||||
| dataIndex: 'face_image', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<BaiduType.form>(); | |||||
| const [data, setData] = useState([{ id: 1 }]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增用户信息" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="用户姓名" | |||||
| placeholder="请输入用户姓名" | |||||
| /> | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="联系方式" | |||||
| placeholder="请输入联系方式" | |||||
| /> <ProFormText | |||||
| name="name" | |||||
| label="工号" | |||||
| placeholder="请输入工号" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="所属辖区" | |||||
| placeholder="请选择所属辖区" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="所属部门:" | |||||
| placeholder="请选择所属部门" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '企业名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '来源', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |
| import { EllipsisOutlined, PlusOutlined } from '@ant-design/icons'; | |||||
| import type { ActionType, ProColumns } from '@ant-design/pro-components'; | |||||
| import { | |||||
| ProTable, TableDropdown, PageContainer, ModalForm, ProForm, | |||||
| ProFormDateRangePicker, | |||||
| ProFormSelect, | |||||
| ProFormText, | |||||
| } from '@ant-design/pro-components'; | |||||
| import { Button, Dropdown, Space, Tag, Form } from 'antd'; | |||||
| import { useRef, useState } from 'react'; | |||||
| export const waitTimePromise = async (time: number = 100) => { | |||||
| return new Promise((resolve) => { | |||||
| setTimeout(() => { | |||||
| resolve(true); | |||||
| }, time); | |||||
| }); | |||||
| }; | |||||
| export const waitTime = async (time: number = 100) => { | |||||
| await waitTimePromise(time); | |||||
| }; | |||||
| const columns: ProColumns[] = [ | |||||
| { | |||||
| title: 'ID', | |||||
| dataIndex: 'id', | |||||
| }, | |||||
| { | |||||
| title: '项目名称', | |||||
| dataIndex: 'name', | |||||
| }, | |||||
| { | |||||
| title: '状态', | |||||
| dataIndex: 'state', | |||||
| }, | |||||
| { | |||||
| title: 'AppId', | |||||
| dataIndex: 'app_id', | |||||
| }, | |||||
| { | |||||
| title: 'ApiKey', | |||||
| dataIndex: 'api_key', | |||||
| }, | |||||
| { | |||||
| title: 'SecretKey', | |||||
| dataIndex: 'secret_key', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| valueType: 'option', | |||||
| key: 'option', | |||||
| render: (text, record, _, action) => [ | |||||
| <a | |||||
| key="editable" | |||||
| onClick={() => { | |||||
| action?.startEditable?.(record.id); | |||||
| }} | |||||
| > | |||||
| 编辑 | |||||
| </a>, | |||||
| ], | |||||
| }, | |||||
| ]; | |||||
| export default () => { | |||||
| const [form] = Form.useForm<ProjectType.form>(); | |||||
| const [data, setData] = useState([{id: 1}]) | |||||
| return ( | |||||
| <> | |||||
| <PageContainer> | |||||
| <ProTable | |||||
| dataSource={data} | |||||
| columns={columns} | |||||
| pagination={{ | |||||
| pageSize: 5, | |||||
| onChange: (page) => console.log(page), | |||||
| }} | |||||
| toolBarRender={() => [ | |||||
| <ModalForm<ProjectType.form> | |||||
| title="新增项目" | |||||
| trigger={ | |||||
| <Button type="primary"> | |||||
| <PlusOutlined /> | |||||
| 新建表单 | |||||
| </Button> | |||||
| } | |||||
| submitter={{ | |||||
| render: (props, defaultDoms) => { | |||||
| return [ | |||||
| <Button | |||||
| key="extra-reset" | |||||
| onClick={() => { | |||||
| props.reset(); | |||||
| }} | |||||
| > | |||||
| 重置 | |||||
| </Button>, | |||||
| ...defaultDoms, | |||||
| ]; | |||||
| }, | |||||
| }} | |||||
| form={form} | |||||
| autoFocusFirstInput | |||||
| modalProps={{ | |||||
| destroyOnClose: true, | |||||
| onCancel: () => console.log('run'), | |||||
| }} | |||||
| submitTimeout={2000} | |||||
| onFinish={async (values) => { | |||||
| await waitTime(2000); | |||||
| console.log(values.name); | |||||
| return true; | |||||
| }} | |||||
| > | |||||
| <ProFormText | |||||
| name="name" | |||||
| label="项目名" | |||||
| placeholder="请输入项目名" | |||||
| /> | |||||
| <ProFormSelect | |||||
| name="aip_id" | |||||
| label="选择百度接口" | |||||
| placeholder="请选择百度接口" | |||||
| /> | |||||
| </ModalForm> | |||||
| ]} | |||||
| /> | |||||
| </PageContainer> | |||||
| </> | |||||
| ); | |||||
| }; |