diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/config/config.ts b/config/config.ts
index aff5e12..4d3bfe7 100644
--- a/config/config.ts
+++ b/config/config.ts
@@ -76,7 +76,7 @@ export default defineConfig({
* @name layout 插件
* @doc https://umijs.org/docs/max/layout-menu
*/
- title: '喀什智慧就业服务系统',
+ title: '石河子智慧就业服务系统',
layout: {
locale: false,
...defaultSettings,
diff --git a/config/defaultSettings.ts b/config/defaultSettings.ts
index eec5d5b..581ed28 100644
--- a/config/defaultSettings.ts
+++ b/config/defaultSettings.ts
@@ -15,7 +15,7 @@ const Settings: ProLayoutProps & {
fixedHeader: false,
fixSiderbar: true,
colorWeak: false,
- title: '喀什智慧就业服务系统',
+ title: '石河子智慧就业服务系统',
pwa: true,
logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
iconfontUrl: '',
diff --git a/config/proxy.ts b/config/proxy.ts
index 69c3e9f..515a8b5 100644
--- a/config/proxy.ts
+++ b/config/proxy.ts
@@ -21,7 +21,7 @@ export default {
changeOrigin: true,
pathRewrite: { '^/api': '' },
},
- '/profile/avatar/': {
+ '/profile/avatar/': {
target: 'http://ks.zhaopinzao8dian.com/api/ks',
changeOrigin: true,
},
diff --git a/package-lock.json b/package-lock.json
index b54aba5..da72891 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,6 @@
"@ant-design/use-emotion-css": "1.0.4",
"@testing-library/dom": "^10.4.0",
"@umijs/route-utils": "^4.0.1",
- "ant-design-pro": "file:",
"antd": "^5.21.1",
"antd-style": "^3.6.2",
"classnames": "^2.5.1",
@@ -15649,10 +15648,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/ant-design-pro": {
- "resolved": "",
- "link": true
- },
"node_modules/antd": {
"version": "5.27.4",
"resolved": "https://registry.npmmirror.com/antd/-/antd-5.27.4.tgz",
diff --git a/src/.umi-production/appData.json b/src/.umi-production/appData.json
index 4f11090..eedeb6d 100644
--- a/src/.umi-production/appData.json
+++ b/src/.umi-production/appData.json
@@ -2688,7 +2688,7 @@
"fastRefresh": true,
"model": {},
"initialState": {},
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"layout": {
"locale": false,
"navTheme": "light",
@@ -2698,7 +2698,7 @@
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
@@ -3878,7 +3878,7 @@
"fastRefresh": true,
"model": {},
"initialState": {},
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"layout": {
"locale": false,
"navTheme": "light",
@@ -3888,7 +3888,7 @@
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
@@ -3970,7 +3970,7 @@
"parentId": "3",
"id": "4",
"absPath": "/user/login",
- "__content": "import Footer from '@/components/Footer';\r\nimport { getCaptchaImg, login } from '@/services/system/auth';\r\nimport { getFakeCaptcha } from '@/services/ant-design-pro/login';\r\nimport {\r\n AlipayCircleOutlined,\r\n LockOutlined,\r\n MobileOutlined,\r\n TaobaoCircleOutlined,\r\n UserOutlined,\r\n WeiboCircleOutlined,\r\n} from '@ant-design/icons';\r\nimport {\r\n LoginForm,\r\n ProFormCaptcha,\r\n ProFormCheckbox,\r\n ProFormText,\r\n} from '@ant-design/pro-components';\r\nimport { useEmotionCss } from '@ant-design/use-emotion-css';\r\nimport { FormattedMessage, Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max';\r\nimport { Alert, Col, Image, message, Row, Tabs } from 'antd';\r\nimport Settings from '../../../../config/defaultSettings';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { flushSync } from 'react-dom';\r\n// flushSync 允许你强制 React 同步刷新提供的回调中的任何更新。这确保了 DOM 立即更新\r\nimport { clearSessionToken, setSessionToken } from '@/access';\r\nimport logoImg from '@/assets/logo.svg';\r\n\r\nconst ActionIcons = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n marginLeft: '8px',\r\n color: 'rgba(0, 0, 0, 0.2)',\r\n fontSize: '24px',\r\n verticalAlign: 'middle',\r\n cursor: 'pointer',\r\n transition: 'color 0.3s',\r\n '&:hover': {\r\n color: token.colorPrimaryActive,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nconst Lang = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n width: 42,\r\n height: 42,\r\n lineHeight: '42px',\r\n position: 'fixed',\r\n right: 16,\r\n borderRadius: token.borderRadius,\r\n ':hover': {\r\n backgroundColor: token.colorBgTextHover,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n
\r\n {SelectLang && }\r\n
\r\n );\r\n};\r\n\r\nconst LoginMessage: React.FC<{\r\n content: string;\r\n}> = ({ content }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst Login: React.FC = () => {\r\n const [userLoginState, setUserLoginState] = useState({ code: 200 });\r\n const [type, setType] = useState('account');\r\n const { initialState, setInitialState } = useModel('@@initialState');\r\n const [captchaCode, setCaptchaCode] = useState('');\r\n const [uuid, setUuid] = useState('');\r\n\r\n const containerClassName = useEmotionCss(() => {\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100vh',\r\n overflow: 'auto',\r\n backgroundImage:\r\n \"url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')\",\r\n backgroundSize: '100% 100%',\r\n };\r\n });\r\n\r\n const intl = useIntl();\r\n\r\n const getCaptchaCode = async () => {\r\n const response = await getCaptchaImg();\r\n const imgdata = `data:image/png;base64,${response.img}`;\r\n setCaptchaCode(imgdata);\r\n setUuid(response.uuid);\r\n };\r\n\r\n const fetchUserInfo = async () => {\r\n const userInfo = await initialState?.fetchUserInfo?.();\r\n if (userInfo) {\r\n if (userInfo?.userType === 2) {\r\n history.push('/job-portal');\r\n } else {\r\n const urlParams = new URL(window.location.href).searchParams;\r\n history.push(urlParams.get('redirect') || '/');\r\n setTimeout(() => history.go(0), 0);\r\n history.push('/account/center');\r\n }\r\n console.log('userInfo', userInfo);\r\n flushSync(() => {\r\n setInitialState((s) => ({\r\n ...s,\r\n currentUser: userInfo,\r\n }));\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = async (values: API.LoginParams) => {\r\n try {\r\n // 登录\r\n const response = await login({ ...values, uuid });\r\n if (response.code === 200) {\r\n const defaultLoginSuccessMessage = intl.formatMessage({\r\n id: 'pages.login.success',\r\n defaultMessage: '登录成功!',\r\n });\r\n const current = new Date();\r\n const expireTime = current.setTime(current.getTime() + 1000 * 12 * 60 * 60);\r\n setSessionToken(response?.token, response?.token, expireTime);\r\n message.success(defaultLoginSuccessMessage);\r\n await fetchUserInfo();\r\n console.log('login ok');\r\n return;\r\n } else {\r\n message.error(response.msg);\r\n clearSessionToken();\r\n // 如果失败去设置用户错误信息\r\n setUserLoginState({ ...response, type });\r\n getCaptchaCode();\r\n }\r\n } catch (error) {\r\n // message.error(response.msg);\r\n const defaultLoginFailureMessage = intl.formatMessage({\r\n id: 'pages.login.failure',\r\n defaultMessage: '登录失败,请重试!',\r\n });\r\n // console.log(error);\r\n message.error(defaultLoginFailureMessage);\r\n }\r\n };\r\n const { code } = userLoginState;\r\n const loginType = type;\r\n\r\n useEffect(() => {\r\n getCaptchaCode();\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n \r\n {intl.formatMessage({\r\n id: 'menu.login',\r\n defaultMessage: '登录页',\r\n })}\r\n - {Settings.title}\r\n \r\n \r\n
\r\n
\r\n
}\r\n title=\"喀什智慧就业服务系统\"\r\n // subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}\r\n initialValues={{\r\n autoLogin: true,\r\n }}\r\n // actions={[\r\n //
,\r\n //
,\r\n // ]}\r\n onFinish={async (values) => {\r\n await handleSubmit(values as API.LoginParams);\r\n }}\r\n >\r\n
\r\n\r\n {/*{code !== 200 && loginType === 'account' && (*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {type === 'account' && (\r\n <>\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.username.placeholder',\r\n defaultMessage: '用户名: admin',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.password.placeholder',\r\n defaultMessage: '密码: admin123',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
\r\n \r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n \r\n \r\n getCaptchaCode()}\r\n />\r\n \r\n
\r\n >\r\n )}\r\n\r\n {code !== 200 && loginType === 'mobile' &&
}\r\n {type === 'mobile' && (\r\n <>\r\n
,\r\n }}\r\n name=\"mobile\"\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.phoneNumber.placeholder',\r\n defaultMessage: '手机号',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n {\r\n pattern: /^1\\d{10}$/,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n captchaProps={{\r\n size: 'large',\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.captcha.placeholder',\r\n defaultMessage: '请输入验证码',\r\n })}\r\n captchaTextRender={(timing, count) => {\r\n if (timing) {\r\n return `${count} ${intl.formatMessage({\r\n id: 'pages.getCaptchaSecondText',\r\n defaultMessage: '获取验证码',\r\n })}`;\r\n }\r\n return intl.formatMessage({\r\n id: 'pages.login.phoneLogin.getVerificationCode',\r\n defaultMessage: '获取验证码',\r\n });\r\n }}\r\n name=\"captcha\"\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n onGetCaptcha={async (phone) => {\r\n const result = await getFakeCaptcha({\r\n phone,\r\n });\r\n if (!result) {\r\n return;\r\n }\r\n message.success('获取验证码成功!验证码为:1234');\r\n }}\r\n />\r\n >\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n",
+ "__content": "import Footer from '@/components/Footer';\r\nimport { getCaptchaImg, login } from '@/services/system/auth';\r\nimport { getFakeCaptcha } from '@/services/ant-design-pro/login';\r\nimport {\r\n AlipayCircleOutlined,\r\n LockOutlined,\r\n MobileOutlined,\r\n TaobaoCircleOutlined,\r\n UserOutlined,\r\n WeiboCircleOutlined,\r\n} from '@ant-design/icons';\r\nimport {\r\n LoginForm,\r\n ProFormCaptcha,\r\n ProFormCheckbox,\r\n ProFormText,\r\n} from '@ant-design/pro-components';\r\nimport { useEmotionCss } from '@ant-design/use-emotion-css';\r\nimport { FormattedMessage, Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max';\r\nimport { Alert, Col, Image, message, Row, Tabs } from 'antd';\r\nimport Settings from '../../../../config/defaultSettings';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { flushSync } from 'react-dom';\r\n// flushSync 允许你强制 React 同步刷新提供的回调中的任何更新。这确保了 DOM 立即更新\r\nimport { clearSessionToken, setSessionToken } from '@/access';\r\nimport logoImg from '@/assets/logo.svg';\r\n\r\nconst ActionIcons = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n marginLeft: '8px',\r\n color: 'rgba(0, 0, 0, 0.2)',\r\n fontSize: '24px',\r\n verticalAlign: 'middle',\r\n cursor: 'pointer',\r\n transition: 'color 0.3s',\r\n '&:hover': {\r\n color: token.colorPrimaryActive,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nconst Lang = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n width: 42,\r\n height: 42,\r\n lineHeight: '42px',\r\n position: 'fixed',\r\n right: 16,\r\n borderRadius: token.borderRadius,\r\n ':hover': {\r\n backgroundColor: token.colorBgTextHover,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n \r\n {SelectLang && }\r\n
\r\n );\r\n};\r\n\r\nconst LoginMessage: React.FC<{\r\n content: string;\r\n}> = ({ content }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst Login: React.FC = () => {\r\n const [userLoginState, setUserLoginState] = useState({ code: 200 });\r\n const [type, setType] = useState('account');\r\n const { initialState, setInitialState } = useModel('@@initialState');\r\n const [captchaCode, setCaptchaCode] = useState('');\r\n const [uuid, setUuid] = useState('');\r\n\r\n const containerClassName = useEmotionCss(() => {\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100vh',\r\n overflow: 'auto',\r\n backgroundImage:\r\n \"url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')\",\r\n backgroundSize: '100% 100%',\r\n };\r\n });\r\n\r\n const intl = useIntl();\r\n\r\n const getCaptchaCode = async () => {\r\n const response = await getCaptchaImg();\r\n const imgdata = `data:image/png;base64,${response.img}`;\r\n setCaptchaCode(imgdata);\r\n setUuid(response.uuid);\r\n };\r\n\r\n const fetchUserInfo = async () => {\r\n const userInfo = await initialState?.fetchUserInfo?.();\r\n if (userInfo) {\r\n if (userInfo?.userType === 2) {\r\n history.push('/job-portal');\r\n } else {\r\n const urlParams = new URL(window.location.href).searchParams;\r\n history.push(urlParams.get('redirect') || '/');\r\n setTimeout(() => history.go(0), 0);\r\n history.push('/account/center');\r\n }\r\n console.log('userInfo', userInfo);\r\n flushSync(() => {\r\n setInitialState((s) => ({\r\n ...s,\r\n currentUser: userInfo,\r\n }));\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = async (values: API.LoginParams) => {\r\n try {\r\n // 登录\r\n const response = await login({ ...values, uuid });\r\n if (response.code === 200) {\r\n const defaultLoginSuccessMessage = intl.formatMessage({\r\n id: 'pages.login.success',\r\n defaultMessage: '登录成功!',\r\n });\r\n const current = new Date();\r\n const expireTime = current.setTime(current.getTime() + 1000 * 12 * 60 * 60);\r\n setSessionToken(response?.token, response?.token, expireTime);\r\n message.success(defaultLoginSuccessMessage);\r\n await fetchUserInfo();\r\n console.log('login ok');\r\n return;\r\n } else {\r\n message.error(response.msg);\r\n clearSessionToken();\r\n // 如果失败去设置用户错误信息\r\n setUserLoginState({ ...response, type });\r\n getCaptchaCode();\r\n }\r\n } catch (error) {\r\n // message.error(response.msg);\r\n const defaultLoginFailureMessage = intl.formatMessage({\r\n id: 'pages.login.failure',\r\n defaultMessage: '登录失败,请重试!',\r\n });\r\n // console.log(error);\r\n message.error(defaultLoginFailureMessage);\r\n }\r\n };\r\n const { code } = userLoginState;\r\n const loginType = type;\r\n\r\n useEffect(() => {\r\n getCaptchaCode();\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n \r\n {intl.formatMessage({\r\n id: 'menu.login',\r\n defaultMessage: '登录页',\r\n })}\r\n - {Settings.title}\r\n \r\n \r\n
\r\n
\r\n
}\r\n title=\"石河子智慧就业服务系统\"\r\n // subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}\r\n initialValues={{\r\n autoLogin: true,\r\n }}\r\n // actions={[\r\n //
,\r\n //
,\r\n // ]}\r\n onFinish={async (values) => {\r\n await handleSubmit(values as API.LoginParams);\r\n }}\r\n >\r\n
\r\n\r\n {/*{code !== 200 && loginType === 'account' && (*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {type === 'account' && (\r\n <>\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.username.placeholder',\r\n defaultMessage: '用户名: admin',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.password.placeholder',\r\n defaultMessage: '密码: admin123',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
\r\n \r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n \r\n \r\n getCaptchaCode()}\r\n />\r\n \r\n
\r\n >\r\n )}\r\n\r\n {code !== 200 && loginType === 'mobile' &&
}\r\n {type === 'mobile' && (\r\n <>\r\n
,\r\n }}\r\n name=\"mobile\"\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.phoneNumber.placeholder',\r\n defaultMessage: '手机号',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n {\r\n pattern: /^1\\d{10}$/,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n captchaProps={{\r\n size: 'large',\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.captcha.placeholder',\r\n defaultMessage: '请输入验证码',\r\n })}\r\n captchaTextRender={(timing, count) => {\r\n if (timing) {\r\n return `${count} ${intl.formatMessage({\r\n id: 'pages.getCaptchaSecondText',\r\n defaultMessage: '获取验证码',\r\n })}`;\r\n }\r\n return intl.formatMessage({\r\n id: 'pages.login.phoneLogin.getVerificationCode',\r\n defaultMessage: '获取验证码',\r\n });\r\n }}\r\n name=\"captcha\"\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n onGetCaptcha={async (phone) => {\r\n const result = await getFakeCaptcha({\r\n phone,\r\n });\r\n if (!result) {\r\n return;\r\n }\r\n message.success('获取验证码成功!验证码为:1234');\r\n }}\r\n />\r\n >\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n",
"__isJSFile": true,
"__absFile": "E:/project/ks-admin/src/pages/User/Login/index.tsx"
},
diff --git a/src/.umi-production/plugin-layout/Layout.tsx b/src/.umi-production/plugin-layout/Layout.tsx
index 4529c49..b89afb8 100644
--- a/src/.umi-production/plugin-layout/Layout.tsx
+++ b/src/.umi-production/plugin-layout/Layout.tsx
@@ -88,7 +88,7 @@ export default (props: any) => {
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
diff --git a/src/.umi/appData.json b/src/.umi/appData.json
index e917376..473aab7 100644
--- a/src/.umi/appData.json
+++ b/src/.umi/appData.json
@@ -1,5 +1,5 @@
{
- "cwd": "E:\\project\\ks-admin",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"pkg": {
"name": "ant-design-pro",
"version": "6.0.0",
@@ -146,18 +146,18 @@
]
}
},
- "pkgPath": "E:\\project\\ks-admin\\package.json",
+ "pkgPath": "D:\\work\\SHIHEZI\\shz-admin\\package.json",
"plugins": {
"./node_modules/@umijs/core/dist/service/servicePlugin": {
"config": {},
"time": {
"hooks": {},
- "register": 38
+ "register": 0
},
"enableBy": "register",
"type": "preset",
- "path": "E:/project/ks-admin/node_modules/@umijs/core/dist/service/servicePlugin.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/core/dist/service/servicePlugin.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/core/dist/service/servicePlugin",
"key": "servicePlugin"
},
@@ -165,12 +165,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 2467
+ "register": 35
},
"enableBy": "register",
"type": "preset",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/index.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/index.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "@umijs/preset-umi",
"key": "umi"
},
@@ -178,12 +178,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 758
+ "register": 11
},
"enableBy": "register",
"type": "preset",
- "path": "E:/project/ks-admin/node_modules/@umijs/max/dist/preset.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/max/dist/preset.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/max/dist/preset",
"key": "preset"
},
@@ -195,12 +195,12 @@
1
]
},
- "register": 641
+ "register": 6
},
"enableBy": "register",
"type": "preset",
- "path": "E:/project/ks-admin/node_modules/umi-presets-pro/dist/index.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/umi-presets-pro/dist/index.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "umi-presets-pro",
"key": "umiPresetsPro"
},
@@ -212,12 +212,12 @@
0
]
},
- "register": 165
+ "register": 5
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/registerMethods.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/registerMethods.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/registerMethods",
"key": "registerMethods"
},
@@ -226,15 +226,15 @@
"time": {
"hooks": {
"onStart": [
- 3
+ 2
]
},
- "register": 247
+ "register": 4
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/did-you-know/dist/plugin.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/did-you-know/dist/plugin.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "@umijs/did-you-know",
"key": "umijsDidYouKnow"
},
@@ -246,12 +246,12 @@
0
]
},
- "register": 69
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/404/404.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/404/404.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/404/404",
"key": "404"
},
@@ -259,12 +259,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 59
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/aiDev/aiDev",
"key": "aiDev"
},
@@ -273,15 +273,15 @@
"time": {
"hooks": {
"modifyAppData": [
- 1148
+ 75
]
},
- "register": 925
+ "register": 31
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/appData/appData.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/appData/appData.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/appData/appData",
"key": "appData"
},
@@ -289,12 +289,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 53
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/appData/umiInfo.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/appData/umiInfo.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/appData/umiInfo",
"key": "umiInfo"
},
@@ -309,12 +309,12 @@
0
]
},
- "register": 22
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/check/check.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/check/check.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/check/check",
"key": "check"
},
@@ -326,12 +326,12 @@
0
]
},
- "register": 18
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/check/babel722.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/check/babel722.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/check/babel722",
"key": "babel722"
},
@@ -339,12 +339,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 25
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/codeSplitting/codeSplitting",
"key": "codeSplitting"
},
@@ -356,12 +356,12 @@
0
]
},
- "register": 604
+ "register": 15
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/configPlugins/configPlugins",
"key": "configPlugins"
},
@@ -373,7 +373,7 @@
"enableBy": "register",
"time": {
"hooks": {},
- "register": 1
+ "register": 0
}
},
"virtual: config-styles": {
@@ -1191,10 +1191,10 @@
"config": {
"default": {
"umi": "@@/exports",
- "react": "E:\\project\\ks-admin\\node_modules\\react",
- "react-dom": "E:\\project\\ks-admin\\node_modules\\react-dom",
- "react-router": "E:\\project\\ks-admin\\node_modules\\react-router",
- "react-router-dom": "E:\\project\\ks-admin\\node_modules\\react-router-dom"
+ "react": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react",
+ "react-dom": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-dom",
+ "react-router": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-router",
+ "react-router-dom": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-router-dom"
}
},
"type": "plugin",
@@ -1208,12 +1208,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 62
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/crossorigin/crossorigin",
"key": "crossorigin"
},
@@ -1225,12 +1225,12 @@
0
]
},
- "register": 42
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/depsOnDemand/depsOnDemand",
"key": "depsOnDemand"
},
@@ -1238,12 +1238,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 24
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/devTool/devTool.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/devTool/devTool.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/devTool/devTool",
"key": "devTool"
},
@@ -1251,12 +1251,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 620
+ "register": 96
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/esbuildHelperChecker/esbuildHelperChecker",
"key": "esbuildHelperChecker"
},
@@ -1264,12 +1264,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 3718
+ "register": 90
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/esmi/esmi.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/esmi/esmi.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/esmi/esmi",
"key": "esmi"
},
@@ -1277,12 +1277,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 482
+ "register": 26
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/exportStatic/exportStatic",
"key": "exportStatic"
},
@@ -1294,12 +1294,12 @@
0
]
},
- "register": 21
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/favicons/favicons.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/favicons/favicons.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/favicons/favicons",
"key": "favicons"
},
@@ -1307,12 +1307,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 24
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/helmet/helmet.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/helmet/helmet.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/helmet/helmet",
"key": "helmet"
},
@@ -1320,12 +1320,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 113
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/icons/icons.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/icons/icons.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/icons/icons",
"key": "icons"
},
@@ -1333,11 +1333,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 711
+ "register": 40
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/mock/mock.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/mock/mock.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/mock/mock",
"key": "mock"
},
@@ -1345,12 +1345,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 42
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/mpa/mpa.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/mpa/mpa.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/mpa/mpa",
"key": "mpa"
},
@@ -1358,11 +1358,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 31
+ "register": 2
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/okam/okam.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/okam/okam.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/okam/okam",
"key": "okam"
},
@@ -1370,12 +1370,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 1
+ "register": 0
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/overrides/overrides.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/overrides/overrides.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/overrides/overrides",
"key": "overrides"
},
@@ -1383,12 +1383,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 27
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/phantomDependency/phantomDependency",
"key": "phantomDependency"
},
@@ -1397,14 +1397,14 @@
"time": {
"hooks": {
"modifyConfig": [
- 1
+ 2
]
},
- "register": 110
+ "register": 4
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/polyfill/polyfill",
"key": "polyfill"
},
@@ -1412,12 +1412,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 25
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/polyfill/publicPathPolyfill",
"key": "publicPathPolyfill"
},
@@ -1425,12 +1425,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 85
+ "register": 5
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/prepare/prepare.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/prepare/prepare.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/prepare/prepare",
"key": "prepare"
},
@@ -1438,12 +1438,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 29
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/routePrefetch/routePrefetch",
"key": "routePrefetch"
},
@@ -1451,12 +1451,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 21
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/stagewise/stagewise",
"key": "stagewise"
},
@@ -1464,12 +1464,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 33
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/terminal/terminal.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/terminal/terminal.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/terminal/terminal",
"key": "terminal"
},
@@ -1477,12 +1477,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 204
+ "register": 10
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/tmpFiles",
"key": "tmpFiles"
},
@@ -1490,12 +1490,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 105
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/clientLoader/clientLoader",
"key": "clientLoader"
},
@@ -1503,11 +1503,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 25
+ "register": 2
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/routeProps/routeProps",
"key": "routeProps"
},
@@ -1515,12 +1515,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 171
+ "register": 5
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/ssr/ssr.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/ssr/ssr.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/ssr/ssr",
"key": "ssr"
},
@@ -1528,12 +1528,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 168
+ "register": 7
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/tmpFiles/configTypes",
"key": "configTypes"
},
@@ -1541,12 +1541,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 150
+ "register": 10
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/transform/transform.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/transform/transform.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/transform/transform",
"key": "transform"
},
@@ -1554,12 +1554,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 84
+ "register": 7
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/lowImport/lowImport",
"key": "lowImport"
},
@@ -1567,12 +1567,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 21
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/vite/vite.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/vite/vite.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/vite/vite",
"key": "vite"
},
@@ -1580,11 +1580,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 245
+ "register": 14
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/apiRoute/apiRoute",
"key": "apiRoute"
},
@@ -1592,12 +1592,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 315
+ "register": 36
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/monorepo/redirect.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/monorepo/redirect.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/monorepo/redirect",
"key": "monorepoRedirect"
},
@@ -1605,11 +1605,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 11
+ "register": 4
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/test/test.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/test/test.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/test/test",
"key": "test"
},
@@ -1617,12 +1617,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 17
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/clickToComponent/clickToComponent",
"key": "clickToComponent"
},
@@ -1630,12 +1630,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 31
+ "register": 4
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/legacy/legacy.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/legacy/legacy.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/legacy/legacy",
"key": "legacy"
},
@@ -1643,12 +1643,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 23
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/classPropertiesLoose/classPropertiesLoose",
"key": "classPropertiesLoose"
},
@@ -1656,11 +1656,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 58
+ "register": 2
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/webpack/webpack.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/webpack/webpack.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/webpack/webpack",
"key": "preset-umi:webpack"
},
@@ -1672,12 +1672,12 @@
0
]
},
- "register": 13
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/swc/swc.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/swc/swc.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/swc/swc",
"key": "swc"
},
@@ -1685,11 +1685,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 175
+ "register": 7
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/ui/ui.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/ui/ui.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/ui/ui",
"key": "ui"
},
@@ -1697,12 +1697,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 24
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/mako/mako.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/mako/mako.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/mako/mako",
"key": "mako"
},
@@ -1710,11 +1710,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 23
+ "register": 2
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/utoopack/utoopack",
"key": "utoopack"
},
@@ -1722,11 +1722,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 69
+ "register": 6
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/hmrGuardian/hmrGuardian",
"key": "hmrGuardian"
},
@@ -1734,11 +1734,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 431
+ "register": 44
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/routePreloadOnLoad/routePreloadOnLoad",
"key": "routePreloadOnLoad"
},
@@ -1746,12 +1746,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 58
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/forget/forget.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/forget/forget.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/forget/forget",
"key": "forget"
},
@@ -1759,12 +1759,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 89
+ "register": 3
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/features/bundler/bundler.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/features/bundler/bundler.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/features/bundler/bundler",
"key": "preset-umi:bundler"
},
@@ -1772,12 +1772,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 225
+ "register": 34
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/build.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/build.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/build",
"key": "build"
},
@@ -1785,12 +1785,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 1561
+ "register": 57
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/config/config.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/config/config.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/config/config",
"key": "config"
},
@@ -1799,17 +1799,17 @@
"time": {
"hooks": {
"modifyAppData": [
- 32
+ 33
],
"onStart": [
0
]
},
- "register": 3598
+ "register": 78
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/dev/dev.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/dev/dev.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/dev/dev",
"key": "dev"
},
@@ -1817,12 +1817,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 13
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/help.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/help.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/help",
"key": "help"
},
@@ -1830,12 +1830,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 23
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/lint.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/lint.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/lint",
"key": "lint"
},
@@ -1843,12 +1843,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 29
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/setup.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/setup.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/setup",
"key": "setup"
},
@@ -1856,12 +1856,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 37
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/deadcode.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/deadcode.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/deadcode",
"key": "deadcode"
},
@@ -1869,12 +1869,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 22
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/version.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/version.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/version",
"key": "version"
},
@@ -1882,12 +1882,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 103
+ "register": 5
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/page.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/page.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/page",
"key": "generator:page"
},
@@ -1895,12 +1895,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 29
+ "register": 2
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/prettier.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/prettier.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/prettier",
"key": "generator:prettier"
},
@@ -1908,12 +1908,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 27
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/tsconfig",
"key": "generator:tsconfig"
},
@@ -1921,12 +1921,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 36
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/jest.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/jest.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/jest",
"key": "generator:jest"
},
@@ -1934,12 +1934,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 29
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/tailwindcss",
"key": "generator:tailwindcss"
},
@@ -1947,12 +1947,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 15
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/dva.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/dva.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/dva",
"key": "generator:dva"
},
@@ -1960,12 +1960,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 9
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/component.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/component.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/component",
"key": "generator:component"
},
@@ -1973,12 +1973,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 48
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/mock.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/mock.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/mock",
"key": "generator:mock"
},
@@ -1986,12 +1986,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 27
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/cypress.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/cypress.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/cypress",
"key": "generator:cypress"
},
@@ -1999,12 +1999,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 26
+ "register": 0
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/api.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/api.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/api",
"key": "generator:api"
},
@@ -2012,12 +2012,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 32
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/generators/precommit.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/generators/precommit.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/generators/precommit",
"key": "generator:precommit"
},
@@ -2025,12 +2025,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 3
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/plugin.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/plugin.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/plugin",
"key": "command:plugin"
},
@@ -2038,12 +2038,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 62
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/verify-commit.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/verify-commit.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/verify-commit",
"key": "verifyCommit"
},
@@ -2051,12 +2051,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 251
+ "register": 30
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/preview.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/preview.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/preview",
"key": "preview"
},
@@ -2064,12 +2064,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 127
+ "register": 3
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/preset-umi/dist/commands/mfsu/mfsu",
"key": "mfsu-cli"
},
@@ -2077,12 +2077,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 190
+ "register": 7
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugin-run/dist/index.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugin-run/dist/index.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "@umijs/plugin-run",
"key": "run"
},
@@ -2090,12 +2090,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 79
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/access.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/access.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/access",
"key": "access"
},
@@ -2105,11 +2105,11 @@
},
"time": {
"hooks": {},
- "register": 23
+ "register": 1
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/analytics.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/analytics.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/analytics",
"key": "analytics"
},
@@ -2118,17 +2118,17 @@
"time": {
"hooks": {
"modifyConfig": [
- 79
+ 8
],
"modifyAppData": [
0
]
},
- "register": 175
+ "register": 9
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/antd.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/antd.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/antd",
"key": "antd"
},
@@ -2136,12 +2136,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 138
+ "register": 13
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/dva.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/dva.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/dva",
"key": "dva"
},
@@ -2149,12 +2149,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 25
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/initial-state.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/initial-state.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/initial-state",
"key": "initialState"
},
@@ -2171,15 +2171,15 @@
0
],
"modifyAppData": [
- 0
+ 1
]
},
- "register": 208
+ "register": 6
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/layout.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/layout.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/layout",
"key": "layout"
},
@@ -2187,12 +2187,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 238
+ "register": 5
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/locale.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/locale.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/locale",
"key": "locale"
},
@@ -2200,12 +2200,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 65
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/mf.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/mf.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/mf",
"key": "mf"
},
@@ -2213,12 +2213,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 25
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/model.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/model.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/model",
"key": "model"
},
@@ -2227,15 +2227,15 @@
"time": {
"hooks": {
"modifyConfig": [
- 0
+ 1
]
},
- "register": 16
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/moment2dayjs.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/moment2dayjs.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/moment2dayjs",
"key": "moment2dayjs"
},
@@ -2243,12 +2243,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 81
+ "register": 3
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/qiankun.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/qiankun.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/qiankun",
"key": "qiankun"
},
@@ -2256,11 +2256,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 125
+ "register": 3
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/qiankun/master.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/qiankun/master.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/qiankun/master",
"key": "qiankun-master"
},
@@ -2268,11 +2268,11 @@
"config": {},
"time": {
"hooks": {},
- "register": 94
+ "register": 4
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/qiankun/slave.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/qiankun/slave.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/qiankun/slave",
"key": "qiankun-slave"
},
@@ -2280,12 +2280,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 20
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/react-query.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/react-query.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/react-query",
"key": "reactQuery"
},
@@ -2293,12 +2293,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 41
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/request.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/request.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/request",
"key": "request"
},
@@ -2306,12 +2306,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 55
+ "register": 2
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/styled-components.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/styled-components.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/styled-components",
"key": "styledComponents"
},
@@ -2319,12 +2319,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 14
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/tailwindcss.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/tailwindcss.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/tailwindcss",
"key": "tailwindcss"
},
@@ -2332,12 +2332,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 52
+ "register": 3
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/plugins/dist/valtio.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/dist/valtio.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/plugins/dist/valtio",
"key": "valtio"
},
@@ -2349,12 +2349,12 @@
0
]
},
- "register": 25
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/max/dist/plugins/maxAlias.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/max/dist/plugins/maxAlias.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/max/dist/plugins/maxAlias",
"key": "maxAlias"
},
@@ -2366,12 +2366,12 @@
0
]
},
- "register": 29
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/max/dist/plugins/maxAppData.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/max/dist/plugins/maxAppData.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/max/dist/plugins/maxAppData",
"key": "maxAppData"
},
@@ -2380,15 +2380,15 @@
"time": {
"hooks": {
"onCheckPkgJSON": [
- 1
+ 0
]
},
- "register": 26
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/max/dist/plugins/maxChecker.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/max/dist/plugins/maxChecker.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/max/dist/plugins/maxChecker",
"key": "maxChecker"
},
@@ -2397,15 +2397,15 @@
"time": {
"hooks": {
"modifyConfig": [
- 0
+ 1
]
},
- "register": 0
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/umi-presets-pro/dist/features/proconfig.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/umi-presets-pro/dist/features/proconfig.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/umi-presets-pro/dist/features/proconfig",
"key": "proconfig"
},
@@ -2413,12 +2413,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 27
+ "register": 0
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/umi-presets-pro/dist/features/maxtabs.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/umi-presets-pro/dist/features/maxtabs.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/umi-presets-pro/dist/features/maxtabs",
"key": "maxtabs"
},
@@ -2433,12 +2433,12 @@
0
]
},
- "register": 12611
+ "register": 318
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/max-plugin-openapi/dist/index.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/max-plugin-openapi/dist/index.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "@umijs/max-plugin-openapi",
"key": "openAPI"
},
@@ -2446,12 +2446,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 6871
+ "register": 267
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@alita/plugins/dist/keepalive.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@alita/plugins/dist/keepalive.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@alita/plugins/dist/keepalive",
"key": "keepalive"
},
@@ -2461,12 +2461,12 @@
},
"time": {
"hooks": {},
- "register": 16
+ "register": 1
},
"enableBy": "config",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@alita/plugins/dist/tabs-layout.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@alita/plugins/dist/tabs-layout.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@alita/plugins/dist/tabs-layout",
"key": "tabsLayout"
},
@@ -2487,14 +2487,14 @@
0
],
"modifyAppData": [
- 0
+ 1
]
},
- "register": 605
+ "register": 88
},
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/request-record/dist/cjs/index.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/request-record/dist/cjs/index.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "@umijs/request-record",
"key": "requestRecord"
},
@@ -2502,12 +2502,12 @@
"config": {},
"time": {
"hooks": {},
- "register": 84
+ "register": 1
},
"enableBy": "register",
"type": "plugin",
- "path": "E:/project/ks-admin/node_modules/@umijs/core/dist/service/generatePlugin.js",
- "cwd": "E:\\project\\ks-admin",
+ "path": "D:/work/SHIHEZI/shz-admin/node_modules/@umijs/core/dist/service/generatePlugin.js",
+ "cwd": "D:\\work\\SHIHEZI\\shz-admin",
"id": "./node_modules/@umijs/core/dist/service/generatePlugin",
"key": "generatePlugin"
}
@@ -2579,6 +2579,10 @@
{
"path": "/job-portal/personal-center/footprints",
"component": "./JobPortal/PersonalCenter/Footprints"
+ },
+ {
+ "path": "/job-portal/message",
+ "component": "./JobPortal/Message"
}
]
},
@@ -2655,6 +2659,17 @@
"component": "./Tool/Gen/edit.tsx"
}
]
+ },
+ {
+ "name": "management",
+ "path": "/management",
+ "routes": [
+ {
+ "name": "查看申请人",
+ "path": "/management/see-matching/index/:id",
+ "component": "./Management/List/SeeMatching"
+ }
+ ]
}
],
"theme": {
@@ -2663,7 +2678,7 @@
"ignoreMomentLocale": true,
"proxy": {
"/api/": {
- "target": "http://localhost:9091",
+ "target": "http://ks.zhaopinzao8dian.com/api/ks",
"changeOrigin": true,
"pathRewrite": {
"^/api": ""
@@ -2684,7 +2699,7 @@
"fastRefresh": true,
"model": {},
"initialState": {},
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"layout": {
"locale": false,
"navTheme": "light",
@@ -2694,7 +2709,7 @@
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
@@ -2726,7 +2741,7 @@
"openAPI": [
{
"requestLibPath": "import { request } from '@umijs/max'",
- "schemaPath": "E:\\project\\ks-admin\\config\\oneapi.json",
+ "schemaPath": "D:\\work\\SHIHEZI\\shz-admin\\config\\oneapi.json",
"mock": false
},
{
@@ -2744,7 +2759,7 @@
"esbuildMinifyIIFE": true,
"requestRecord": {}
},
- "mainConfigFile": "E:\\project\\ks-admin\\config\\config.ts",
+ "mainConfigFile": "D:\\work\\SHIHEZI\\shz-admin\\config\\config.ts",
"config": {
"routeLoader": {
"moduleType": "esm"
@@ -2764,15 +2779,15 @@
"autoCSSModules": true,
"alias": {
"umi": "@@/exports",
- "react": "E:\\project\\ks-admin\\node_modules\\react",
- "react-dom": "E:\\project\\ks-admin\\node_modules\\react-dom",
- "react-router": "E:\\project\\ks-admin\\node_modules\\react-router",
- "react-router-dom": "E:\\project\\ks-admin\\node_modules\\react-router-dom",
- "@": "E:/project/ks-admin/src",
- "@@": "E:/project/ks-admin/src/.umi",
- "regenerator-runtime": "E:\\project\\ks-admin\\node_modules\\@umijs\\preset-umi\\node_modules\\regenerator-runtime",
- "antd": "E:\\project\\ks-admin\\node_modules\\antd",
- "moment": "E:\\project\\ks-admin\\node_modules\\dayjs",
+ "react": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react",
+ "react-dom": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-dom",
+ "react-router": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-router",
+ "react-router-dom": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-router-dom",
+ "@": "D:/work/SHIHEZI/shz-admin/src",
+ "@@": "D:/work/SHIHEZI/shz-admin/src/.umi",
+ "regenerator-runtime": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\@umijs\\preset-umi\\node_modules\\regenerator-runtime",
+ "antd": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\antd",
+ "moment": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\dayjs",
"@umijs/max": "@@/exports"
},
"requestRecord": {
@@ -2844,6 +2859,10 @@
{
"path": "/job-portal/personal-center/footprints",
"component": "./JobPortal/PersonalCenter/Footprints"
+ },
+ {
+ "path": "/job-portal/message",
+ "component": "./JobPortal/Message"
}
]
},
@@ -2920,6 +2939,17 @@
"component": "./Tool/Gen/edit.tsx"
}
]
+ },
+ {
+ "name": "management",
+ "path": "/management",
+ "routes": [
+ {
+ "name": "查看申请人",
+ "path": "/management/see-matching/index/:id",
+ "component": "./Management/List/SeeMatching"
+ }
+ ]
}
],
"theme": {
@@ -3838,7 +3868,7 @@
},
"proxy": {
"/api/": {
- "target": "http://localhost:9091",
+ "target": "http://ks.zhaopinzao8dian.com/api/ks",
"changeOrigin": true,
"pathRewrite": {
"^/api": ""
@@ -3859,7 +3889,7 @@
"fastRefresh": true,
"model": {},
"initialState": {},
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"layout": {
"locale": false,
"navTheme": "light",
@@ -3869,7 +3899,7 @@
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
@@ -3901,7 +3931,7 @@
"openAPI": [
{
"requestLibPath": "import { request } from '@umijs/max'",
- "schemaPath": "E:\\project\\ks-admin\\config\\oneapi.json",
+ "schemaPath": "D:\\work\\SHIHEZI\\shz-admin\\config\\oneapi.json",
"mock": false
},
{
@@ -3936,7 +3966,7 @@
"absPath": "/*",
"__content": "import { history } from '@umijs/max';\r\nimport { Button, Result } from 'antd';\r\nimport React from 'react';\r\n\r\nconst NoFoundPage: React.FC = () => (\r\n history.push('/')}>\r\n Back Home\r\n \r\n }\r\n />\r\n);\r\n\r\nexport default NoFoundPage;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/404.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/404.tsx"
},
"3": {
"path": "/user",
@@ -3951,9 +3981,9 @@
"parentId": "3",
"id": "4",
"absPath": "/user/login",
- "__content": "import Footer from '@/components/Footer';\r\nimport { getCaptchaImg, login } from '@/services/system/auth';\r\nimport { getFakeCaptcha } from '@/services/ant-design-pro/login';\r\nimport {\r\n AlipayCircleOutlined,\r\n LockOutlined,\r\n MobileOutlined,\r\n TaobaoCircleOutlined,\r\n UserOutlined,\r\n WeiboCircleOutlined,\r\n} from '@ant-design/icons';\r\nimport {\r\n LoginForm,\r\n ProFormCaptcha,\r\n ProFormCheckbox,\r\n ProFormText,\r\n} from '@ant-design/pro-components';\r\nimport { useEmotionCss } from '@ant-design/use-emotion-css';\r\nimport { FormattedMessage, Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max';\r\nimport { Alert, Col, Image, message, Row, Tabs } from 'antd';\r\nimport Settings from '../../../../config/defaultSettings';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { flushSync } from 'react-dom';\r\n// flushSync 允许你强制 React 同步刷新提供的回调中的任何更新。这确保了 DOM 立即更新\r\nimport { clearSessionToken, setSessionToken } from '@/access';\r\nimport logoImg from '@/assets/logo.svg';\r\n\r\nconst ActionIcons = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n marginLeft: '8px',\r\n color: 'rgba(0, 0, 0, 0.2)',\r\n fontSize: '24px',\r\n verticalAlign: 'middle',\r\n cursor: 'pointer',\r\n transition: 'color 0.3s',\r\n '&:hover': {\r\n color: token.colorPrimaryActive,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nconst Lang = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n width: 42,\r\n height: 42,\r\n lineHeight: '42px',\r\n position: 'fixed',\r\n right: 16,\r\n borderRadius: token.borderRadius,\r\n ':hover': {\r\n backgroundColor: token.colorBgTextHover,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n \r\n {SelectLang && }\r\n
\r\n );\r\n};\r\n\r\nconst LoginMessage: React.FC<{\r\n content: string;\r\n}> = ({ content }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst Login: React.FC = () => {\r\n const [userLoginState, setUserLoginState] = useState({ code: 200 });\r\n const [type, setType] = useState('account');\r\n const { initialState, setInitialState } = useModel('@@initialState');\r\n const [captchaCode, setCaptchaCode] = useState('');\r\n const [uuid, setUuid] = useState('');\r\n\r\n const containerClassName = useEmotionCss(() => {\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100vh',\r\n overflow: 'auto',\r\n backgroundImage:\r\n \"url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')\",\r\n backgroundSize: '100% 100%',\r\n };\r\n });\r\n\r\n const intl = useIntl();\r\n\r\n const getCaptchaCode = async () => {\r\n const response = await getCaptchaImg();\r\n const imgdata = `data:image/png;base64,${response.img}`;\r\n setCaptchaCode(imgdata);\r\n setUuid(response.uuid);\r\n };\r\n\r\n const fetchUserInfo = async () => {\r\n const userInfo = await initialState?.fetchUserInfo?.();\r\n if (userInfo) {\r\n if (userInfo?.userType === 2) {\r\n history.push('/job-portal');\r\n } else {\r\n const urlParams = new URL(window.location.href).searchParams;\r\n history.push(urlParams.get('redirect') || '/');\r\n setTimeout(() => history.go(0), 0);\r\n history.push('/account/center');\r\n }\r\n console.log('userInfo', userInfo);\r\n flushSync(() => {\r\n setInitialState((s) => ({\r\n ...s,\r\n currentUser: userInfo,\r\n }));\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = async (values: API.LoginParams) => {\r\n try {\r\n // 登录\r\n const response = await login({ ...values, uuid });\r\n if (response.code === 200) {\r\n const defaultLoginSuccessMessage = intl.formatMessage({\r\n id: 'pages.login.success',\r\n defaultMessage: '登录成功!',\r\n });\r\n const current = new Date();\r\n const expireTime = current.setTime(current.getTime() + 1000 * 12 * 60 * 60);\r\n setSessionToken(response?.token, response?.token, expireTime);\r\n message.success(defaultLoginSuccessMessage);\r\n await fetchUserInfo();\r\n console.log('login ok');\r\n return;\r\n } else {\r\n message.error(response.msg);\r\n clearSessionToken();\r\n // 如果失败去设置用户错误信息\r\n setUserLoginState({ ...response, type });\r\n getCaptchaCode();\r\n }\r\n } catch (error) {\r\n // message.error(response.msg);\r\n const defaultLoginFailureMessage = intl.formatMessage({\r\n id: 'pages.login.failure',\r\n defaultMessage: '登录失败,请重试!',\r\n });\r\n // console.log(error);\r\n message.error(defaultLoginFailureMessage);\r\n }\r\n };\r\n const { code } = userLoginState;\r\n const loginType = type;\r\n\r\n useEffect(() => {\r\n getCaptchaCode();\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n \r\n {intl.formatMessage({\r\n id: 'menu.login',\r\n defaultMessage: '登录页',\r\n })}\r\n - {Settings.title}\r\n \r\n \r\n
\r\n
\r\n
}\r\n title=\"喀什智慧就业服务系统\"\r\n // subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}\r\n initialValues={{\r\n autoLogin: true,\r\n }}\r\n // actions={[\r\n //
,\r\n //
,\r\n // ]}\r\n onFinish={async (values) => {\r\n await handleSubmit(values as API.LoginParams);\r\n }}\r\n >\r\n
\r\n\r\n {/*{code !== 200 && loginType === 'account' && (*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {type === 'account' && (\r\n <>\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.username.placeholder',\r\n defaultMessage: '用户名: admin',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.password.placeholder',\r\n defaultMessage: '密码: admin123',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
\r\n \r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n \r\n \r\n getCaptchaCode()}\r\n />\r\n \r\n
\r\n >\r\n )}\r\n\r\n {code !== 200 && loginType === 'mobile' &&
}\r\n {type === 'mobile' && (\r\n <>\r\n
,\r\n }}\r\n name=\"mobile\"\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.phoneNumber.placeholder',\r\n defaultMessage: '手机号',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n {\r\n pattern: /^1\\d{10}$/,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n captchaProps={{\r\n size: 'large',\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.captcha.placeholder',\r\n defaultMessage: '请输入验证码',\r\n })}\r\n captchaTextRender={(timing, count) => {\r\n if (timing) {\r\n return `${count} ${intl.formatMessage({\r\n id: 'pages.getCaptchaSecondText',\r\n defaultMessage: '获取验证码',\r\n })}`;\r\n }\r\n return intl.formatMessage({\r\n id: 'pages.login.phoneLogin.getVerificationCode',\r\n defaultMessage: '获取验证码',\r\n });\r\n }}\r\n name=\"captcha\"\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n onGetCaptcha={async (phone) => {\r\n const result = await getFakeCaptcha({\r\n phone,\r\n });\r\n if (!result) {\r\n return;\r\n }\r\n message.success('获取验证码成功!验证码为:1234');\r\n }}\r\n />\r\n >\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n",
+ "__content": "import Footer from '@/components/Footer';\r\nimport { getCaptchaImg, login } from '@/services/system/auth';\r\nimport { getFakeCaptcha } from '@/services/ant-design-pro/login';\r\nimport {\r\n AlipayCircleOutlined,\r\n LockOutlined,\r\n MobileOutlined,\r\n TaobaoCircleOutlined,\r\n UserOutlined,\r\n WeiboCircleOutlined,\r\n} from '@ant-design/icons';\r\nimport {\r\n LoginForm,\r\n ProFormCaptcha,\r\n ProFormCheckbox,\r\n ProFormText,\r\n} from '@ant-design/pro-components';\r\nimport { useEmotionCss } from '@ant-design/use-emotion-css';\r\nimport { FormattedMessage, Helmet, history, SelectLang, useIntl, useModel } from '@umijs/max';\r\nimport { Alert, Col, Image, message, Row, Tabs } from 'antd';\r\nimport Settings from '../../../../config/defaultSettings';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { flushSync } from 'react-dom';\r\n// flushSync 允许你强制 React 同步刷新提供的回调中的任何更新。这确保了 DOM 立即更新\r\nimport { clearSessionToken, setSessionToken } from '@/access';\r\nimport logoImg from '@/assets/logo.svg';\r\n\r\nconst ActionIcons = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n marginLeft: '8px',\r\n color: 'rgba(0, 0, 0, 0.2)',\r\n fontSize: '24px',\r\n verticalAlign: 'middle',\r\n cursor: 'pointer',\r\n transition: 'color 0.3s',\r\n '&:hover': {\r\n color: token.colorPrimaryActive,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n >\r\n );\r\n};\r\n\r\nconst Lang = () => {\r\n const langClassName = useEmotionCss(({ token }) => {\r\n return {\r\n width: 42,\r\n height: 42,\r\n lineHeight: '42px',\r\n position: 'fixed',\r\n right: 16,\r\n borderRadius: token.borderRadius,\r\n ':hover': {\r\n backgroundColor: token.colorBgTextHover,\r\n },\r\n };\r\n });\r\n\r\n return (\r\n \r\n {SelectLang && }\r\n
\r\n );\r\n};\r\n\r\nconst LoginMessage: React.FC<{\r\n content: string;\r\n}> = ({ content }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst Login: React.FC = () => {\r\n const [userLoginState, setUserLoginState] = useState({ code: 200 });\r\n const [type, setType] = useState('account');\r\n const { initialState, setInitialState } = useModel('@@initialState');\r\n const [captchaCode, setCaptchaCode] = useState('');\r\n const [uuid, setUuid] = useState('');\r\n\r\n const containerClassName = useEmotionCss(() => {\r\n return {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100vh',\r\n overflow: 'auto',\r\n backgroundImage:\r\n \"url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')\",\r\n backgroundSize: '100% 100%',\r\n };\r\n });\r\n\r\n const intl = useIntl();\r\n\r\n const getCaptchaCode = async () => {\r\n const response = await getCaptchaImg();\r\n const imgdata = `data:image/png;base64,${response.img}`;\r\n setCaptchaCode(imgdata);\r\n setUuid(response.uuid);\r\n };\r\n\r\n const fetchUserInfo = async () => {\r\n const userInfo = await initialState?.fetchUserInfo?.();\r\n if (userInfo) {\r\n if (userInfo?.userType === 2) {\r\n history.push('/job-portal');\r\n } else {\r\n const urlParams = new URL(window.location.href).searchParams;\r\n history.push(urlParams.get('redirect') || '/');\r\n setTimeout(() => history.go(0), 0);\r\n history.push('/account/center');\r\n }\r\n console.log('userInfo', userInfo);\r\n flushSync(() => {\r\n setInitialState((s) => ({\r\n ...s,\r\n currentUser: userInfo,\r\n }));\r\n });\r\n }\r\n };\r\n\r\n const handleSubmit = async (values: API.LoginParams) => {\r\n try {\r\n // 登录\r\n const response = await login({ ...values, uuid });\r\n if (response.code === 200) {\r\n const defaultLoginSuccessMessage = intl.formatMessage({\r\n id: 'pages.login.success',\r\n defaultMessage: '登录成功!',\r\n });\r\n const current = new Date();\r\n const expireTime = current.setTime(current.getTime() + 1000 * 12 * 60 * 60);\r\n setSessionToken(response?.token, response?.token, expireTime);\r\n message.success(defaultLoginSuccessMessage);\r\n await fetchUserInfo();\r\n console.log('login ok');\r\n return;\r\n } else {\r\n message.error(response.msg);\r\n clearSessionToken();\r\n // 如果失败去设置用户错误信息\r\n setUserLoginState({ ...response, type });\r\n getCaptchaCode();\r\n }\r\n } catch (error) {\r\n // message.error(response.msg);\r\n const defaultLoginFailureMessage = intl.formatMessage({\r\n id: 'pages.login.failure',\r\n defaultMessage: '登录失败,请重试!',\r\n });\r\n // console.log(error);\r\n message.error(defaultLoginFailureMessage);\r\n }\r\n };\r\n const { code } = userLoginState;\r\n const loginType = type;\r\n\r\n useEffect(() => {\r\n getCaptchaCode();\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n \r\n {intl.formatMessage({\r\n id: 'menu.login',\r\n defaultMessage: '登录页',\r\n })}\r\n - {Settings.title}\r\n \r\n \r\n
\r\n
\r\n
}\r\n title=\"石河子智慧就业服务系统\"\r\n // subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}\r\n initialValues={{\r\n autoLogin: true,\r\n }}\r\n // actions={[\r\n //
,\r\n //
,\r\n // ]}\r\n onFinish={async (values) => {\r\n await handleSubmit(values as API.LoginParams);\r\n }}\r\n >\r\n
\r\n\r\n {/*{code !== 200 && loginType === 'account' && (*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {type === 'account' && (\r\n <>\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.username.placeholder',\r\n defaultMessage: '用户名: admin',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.password.placeholder',\r\n defaultMessage: '密码: admin123',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
\r\n \r\n \r\n ),\r\n },\r\n ]}\r\n />\r\n \r\n \r\n getCaptchaCode()}\r\n />\r\n \r\n
\r\n >\r\n )}\r\n\r\n {code !== 200 && loginType === 'mobile' &&
}\r\n {type === 'mobile' && (\r\n <>\r\n
,\r\n }}\r\n name=\"mobile\"\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.phoneNumber.placeholder',\r\n defaultMessage: '手机号',\r\n })}\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n {\r\n pattern: /^1\\d{10}$/,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n />\r\n
,\r\n }}\r\n captchaProps={{\r\n size: 'large',\r\n }}\r\n placeholder={intl.formatMessage({\r\n id: 'pages.login.captcha.placeholder',\r\n defaultMessage: '请输入验证码',\r\n })}\r\n captchaTextRender={(timing, count) => {\r\n if (timing) {\r\n return `${count} ${intl.formatMessage({\r\n id: 'pages.getCaptchaSecondText',\r\n defaultMessage: '获取验证码',\r\n })}`;\r\n }\r\n return intl.formatMessage({\r\n id: 'pages.login.phoneLogin.getVerificationCode',\r\n defaultMessage: '获取验证码',\r\n });\r\n }}\r\n name=\"captcha\"\r\n rules={[\r\n {\r\n required: true,\r\n message: (\r\n
\r\n ),\r\n },\r\n ]}\r\n onGetCaptcha={async (phone) => {\r\n const result = await getFakeCaptcha({\r\n phone,\r\n });\r\n if (!result) {\r\n return;\r\n }\r\n message.success('获取验证码成功!验证码为:1234');\r\n }}\r\n />\r\n >\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/User/Login/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/User/Login/index.tsx"
},
"5": {
"path": "/job-portal",
@@ -3969,7 +3999,7 @@
"absPath": "/job-portal",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Typography,\r\n Button,\r\n message\r\n} from 'antd';\r\nimport {\r\n RightOutlined,\r\n LeftOutlined,\r\n CloseOutlined,\r\n EnvironmentOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport { getJobTitleTreeSelect, getJobRecommend } from '@/services/common/jobTitle';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\n// 行业分类数据现在从API获取\r\n\r\n// 热门职位\r\nconst hotJobs = ['Java', '产品经理', '前端开发工程师', '测试工程师', '运维工程师', '数据分析师', '平面设计'];\r\n\r\n// 学历字典映射\r\nconst educationMap: { [key: string]: string } = {\r\n '1': '大专',\r\n '2': '本科',\r\n '3': '硕士',\r\n '4': '博士',\r\n '0': '不限'\r\n};\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限'\r\n};\r\n\r\n// 广告数据\r\nconst advertisements = [\r\n {\r\n id: 1,\r\n title: '成都高新区天府人才行动暨天府软件园 2025年秋季招聘校园行',\r\n subtitle: '主办单位:国家数字服务出口基地(成都) 成都天府软件园有限公司',\r\n type: 'banner',\r\n logo: '新兴向蒙'\r\n },\r\n {\r\n id: 2,\r\n title: '直聘简历',\r\n subtitle: '写好简历 找好工作',\r\n description: '免费设计 | 海量模板 智能润色',\r\n type: 'card',\r\n theme: 'purple'\r\n },\r\n {\r\n id: 3,\r\n title: '最前端有\"钱\"途',\r\n subtitle: 'Web前端工程师岗位热推',\r\n type: 'card',\r\n theme: 'blue',\r\n isAd: true\r\n },\r\n {\r\n id: 4,\r\n title: '算法解决一切',\r\n subtitle: '算法工程师职位精选',\r\n type: 'card',\r\n theme: 'purple',\r\n isAd: true\r\n },\r\n {\r\n id: 5,\r\n title: '挑战最高年薪',\r\n subtitle: 'Java工程师职位精选',\r\n type: 'card',\r\n theme: 'blue',\r\n isAd: true\r\n },\r\n {\r\n id: 6,\r\n title: '创造新次元',\r\n subtitle: '高薪设计职位精选',\r\n type: 'card',\r\n theme: 'orange',\r\n isAd: true\r\n }\r\n];\r\n\r\n// 默认职位数据\r\nconst defaultJobs = [\r\n {\r\n id: 1,\r\n title: 'Java高级开发工程师',\r\n company: '青岛科技发展有限公司',\r\n salary: '15k-25k',\r\n location: '青岛·李沧区',\r\n experience: '3-5年',\r\n education: '本科',\r\n tags: ['五险一金', '带薪年假', '年终奖']\r\n },\r\n {\r\n id: 2,\r\n title: '前端开发工程师',\r\n company: '青岛智能科技有限公司',\r\n salary: '12k-20k',\r\n location: '青岛·市南区',\r\n experience: '2-4年',\r\n education: '本科',\r\n tags: ['双休', '弹性工作', '股票期权']\r\n },\r\n {\r\n id: 3,\r\n title: 'Python开发工程师',\r\n company: '青岛数据科技公司',\r\n salary: '14k-22k',\r\n location: '青岛·崂山区',\r\n experience: '3-5年',\r\n education: '本科',\r\n tags: ['五险一金', '技术培训', '团建活动']\r\n },\r\n {\r\n id: 4,\r\n title: '产品经理',\r\n company: '青岛互联网科技有限公司',\r\n salary: '16k-30k',\r\n location: '青岛·市北区',\r\n experience: '3-6年',\r\n education: '本科',\r\n tags: ['五险一金', '双休', '带薪年假']\r\n },\r\n {\r\n id: 5,\r\n title: '测试工程师',\r\n company: '青岛软件科技有限公司',\r\n salary: '10k-18k',\r\n location: '青岛·黄岛区',\r\n experience: '2-5年',\r\n education: '本科',\r\n tags: ['五险一金', '带薪年假', '节日福利']\r\n },\r\n {\r\n id: 6,\r\n title: 'UI设计师',\r\n company: '青岛设计有限公司',\r\n salary: '11k-20k',\r\n location: '青岛·市南区',\r\n experience: '2-4年',\r\n education: '大专',\r\n tags: ['五险一金', '年终奖', '员工旅游']\r\n },\r\n {\r\n id: 7,\r\n title: '数据分析师',\r\n company: '青岛大数据科技公司',\r\n salary: '13k-25k',\r\n location: '青岛·崂山区',\r\n experience: '2-5年',\r\n education: '本科',\r\n tags: ['五险一金', '双休', '技能培训']\r\n },\r\n {\r\n id: 8,\r\n title: '算法工程师',\r\n company: '青岛人工智能科技公司',\r\n salary: '20k-35k',\r\n location: '青岛·崂山区',\r\n experience: '3-7年',\r\n education: '硕士',\r\n tags: ['五险一金', '股票期权', '技术交流']\r\n },\r\n {\r\n id: 9,\r\n title: '运维工程师',\r\n company: '青岛云计算科技公司',\r\n salary: '12k-20k',\r\n location: '青岛·李沧区',\r\n experience: '2-4年',\r\n education: '本科',\r\n tags: ['五险一金', '带薪年假', '晋升空间']\r\n },\r\n {\r\n id: 10,\r\n title: 'Android开发工程师',\r\n company: '青岛移动科技公司',\r\n salary: '13k-22k',\r\n location: '青岛·市南区',\r\n experience: '3-5年',\r\n education: '本科',\r\n tags: ['五险一金', '年终奖', '弹性工作']\r\n },\r\n {\r\n id: 11,\r\n title: 'iOS开发工程师',\r\n company: '青岛移动科技公司',\r\n salary: '13k-22k',\r\n location: '青岛·市南区',\r\n experience: '3-5年',\r\n education: '本科',\r\n tags: ['五险一金', '年终奖', '弹性工作']\r\n },\r\n {\r\n id: 12,\r\n title: '全栈开发工程师',\r\n company: '青岛创新科技公司',\r\n salary: '15k-28k',\r\n location: '青岛·崂山区',\r\n experience: '3-6年',\r\n education: '本科',\r\n tags: ['五险一金', '双休', '技术成长']\r\n }\r\n];\r\n\r\nconst JobPortalPage: React.FC = () => {\r\n const [selectedIndustry, setSelectedIndustry] = useState('');\r\n const [hoveredIndustry, setHoveredIndustry] = useState('');\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [showProfession, setShowProfession] = useState(false);\r\n const [jobTitleData, setJobTitleData] = useState(null);\r\n const [jobRecommendData, setJobRecommendData] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [itemsPerPage] = useState(10); // 每页显示的行业数量\r\n const [totalPages, setTotalPages] = useState(1);\r\n\r\n // 调用职位接口获取数据\r\n useEffect(() => {\r\n const fetchJobTitleData = async () => {\r\n try {\r\n setLoading(true);\r\n const response = await getJobTitleTreeSelect();\r\n setJobTitleData(response);\r\n // 计算总页数\r\n if (response?.data && response.data.length > 0) {\r\n const totalPages = Math.ceil(response.data.length / itemsPerPage);\r\n setTotalPages(totalPages);\r\n // 设置默认选中的第一个行业\r\n setSelectedIndustry(response.data[0].id.toString());\r\n setHoveredIndustry(response.data[0].id.toString());\r\n }\r\n // message.success('职位数据获取成功');\r\n } catch (error) {\r\n message.error('获取职位数据失败');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const fetchJobRecommendData = async () => {\r\n try {\r\n const response = await getJobRecommend();\r\n setJobRecommendData(response);\r\n } catch (error) {\r\n // 静默处理错误,不影响用户体验\r\n }\r\n };\r\n\r\n fetchJobTitleData();\r\n fetchJobRecommendData();\r\n }, [itemsPerPage]);\r\n\r\n const handleIndustryHover = (industryId: string) => {\r\n setHoveredIndustry(industryId);\r\n setShowProfession(true);\r\n };\r\n\r\n const handleIndustryClick = (industryId: string) => {\r\n setSelectedIndustry(industryId);\r\n };\r\n\r\n const handleIndustryMouseLeave = () => {\r\n // 用户离开左侧区域时,如果没有鼠标在右侧,则隐藏\r\n // 这里交给onMouseLeave处理\r\n };\r\n\r\n const handleRightContentMouseLeave = () => {\r\n setShowProfession(false);\r\n };\r\n\r\n const handleProfessionPanelEnter = () => {\r\n // 鼠标进入浮动层时保持显示 - 阻止关闭\r\n };\r\n\r\n const handleProfessionPanelLeave = () => {\r\n setShowProfession(false);\r\n };\r\n\r\n const getCurrentProfessions = () => {\r\n if (!jobTitleData?.data) return [];\r\n\r\n const industry = jobTitleData.data.find((item: any) => item.id.toString() === hoveredIndustry);\r\n return industry?.children || [];\r\n };\r\n\r\n // 获取当前页的行业数据\r\n const getCurrentPageIndustries = () => {\r\n if (!jobTitleData?.data) return [];\r\n\r\n const startIndex = (currentPage - 1) * itemsPerPage;\r\n const endIndex = startIndex + itemsPerPage;\r\n return jobTitleData.data.slice(startIndex, endIndex);\r\n };\r\n\r\n // 格式化薪资显示\r\n const formatSalary = (minSalary: number, maxSalary: number) => {\r\n if (minSalary && maxSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k-${(maxSalary / 1000).toFixed(0)}k`;\r\n } else if (minSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k+`;\r\n } else if (maxSalary) {\r\n return `面议-${(maxSalary / 1000).toFixed(0)}k`;\r\n }\r\n return '面议';\r\n };\r\n\r\n const handlePageChange = (direction: 'prev' | 'next') => {\r\n if (direction === 'prev' && currentPage > 1) {\r\n setCurrentPage(currentPage - 1);\r\n // 切换页面时隐藏职业面板\r\n setShowProfession(false);\r\n } else if (direction === 'next' && currentPage < totalPages) {\r\n setCurrentPage(currentPage + 1);\r\n // 切换页面时隐藏职业面板\r\n setShowProfession(false);\r\n }\r\n };\r\n\r\n const handleJobClick = (job: any) => {\r\n // 点击岗位卡片时跳转到岗位详情,传递完整的职位数据\r\n history.push(`/job-portal/detail`, { jobData: job });\r\n };\r\n\r\n const handleProfessionTagClick = (jobId: number, name: any) => {\r\n // alert(name);\r\n // 点击职位标签时跳转到职位列表\r\n history.push(`/job-portal/list`, { queryParams: { name: name } });\r\n };\r\n\r\n\r\n return (\r\n \r\n
\r\n\r\n {/* 主要内容区域 */}\r\n
\r\n
\r\n {/* 左侧行业分类 */}\r\n \r\n setShowProfession(true)}\r\n onMouseLeave={handleIndustryMouseLeave}\r\n loading={loading}\r\n >\r\n \r\n {getCurrentPageIndustries().map((industry: any) => (\r\n
handleIndustryHover(industry.id.toString())}\r\n onClick={() => handleIndustryClick(industry.id.toString())}\r\n >\r\n {industry.label}\r\n \r\n
\r\n ))}\r\n
\r\n \r\n }\r\n disabled={currentPage === 1}\r\n onClick={() => handlePageChange('prev')}\r\n />\r\n {currentPage}/{totalPages}\r\n }\r\n disabled={currentPage === totalPages}\r\n onClick={() => handlePageChange('next')}\r\n />\r\n
\r\n {jobTitleData?.data && (\r\n \r\n 共 {jobTitleData.data.length} 个行业\r\n
\r\n )}\r\n \r\n \r\n\r\n {/* 右侧内容区域 */}\r\n \r\n \r\n {/* 广告区域 */}\r\n \r\n \r\n {advertisements.map(ad => (\r\n
\r\n {ad.type === 'banner' ? (\r\n \r\n
\r\n
{ad.title}\r\n {ad.subtitle}\r\n \r\n
{ad.logo}
\r\n
\r\n ) : (\r\n \r\n
{ad.title}\r\n
{ad.subtitle}\r\n {ad.description && (\r\n
{ad.description}\r\n )}\r\n {ad.isAd &&
广告
}\r\n
\r\n )}\r\n \r\n ))}\r\n
\r\n \r\n
\r\n\r\n {/* 职业展示区域 - 浮动层 */}\r\n {showProfession && (\r\n \r\n
}\r\n className=\"close-btn\"\r\n onClick={() => setShowProfession(false)}\r\n />\r\n
\r\n \r\n {jobTitleData?.data?.find((item: any) => item.id.toString() === hoveredIndustry)?.label}\r\n \r\n \r\n {getCurrentProfessions().map((profession: any) => (\r\n
\r\n
{profession.label}\r\n
\r\n {profession.children?.map((subProfession: any) => (\r\n handleProfessionTagClick(subProfession.id, subProfession.label)}\r\n >\r\n {subProfession.label}\r\n \r\n ))}\r\n
\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n
\r\n\r\n\r\n {/* 职位列表区域 */}\r\n
\r\n
\r\n
热门职位推荐\r\n
\r\n {jobRecommendData?.data?.map((job: any) => (\r\n \r\n handleJobClick(job)}\r\n >\r\n \r\n
{job.jobTitle}\r\n {formatSalary(job.minSalary, job.maxSalary)}\r\n \r\n {job.companyName}\r\n \r\n {job.jobLocation}\r\n {experienceMap[job.experience] || '不限'}\r\n {educationMap[job.education] || '不限'}\r\n
\r\n \r\n {job.jobCategory && {job.jobCategory}}\r\n {/* {job.dataSource && {job.dataSource}} */}\r\n {job.vacancies && 招聘{job.vacancies}人}\r\n
\r\n \r\n \r\n )) || defaultJobs.map(job => (\r\n \r\n handleJobClick(job)}\r\n >\r\n \r\n
{job.title}\r\n {job.salary}\r\n \r\n {job.company}\r\n \r\n {job.location}\r\n {job.experience}\r\n {job.education}\r\n
\r\n \r\n {job.tags.map((tag, index) => (\r\n {tag}\r\n ))}\r\n
\r\n \r\n \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default JobPortalPage;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/index.tsx"
},
"7": {
"path": "/job-portal/list",
@@ -3979,7 +4009,7 @@
"absPath": "/job-portal/list",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Typography,\r\n Divider,\r\n Avatar,\r\n Button,\r\n Select,\r\n Input,\r\n message\r\n} from 'antd';\r\nimport {\r\n EnvironmentOutlined,\r\n HeartOutlined,\r\n HeartFilled,\r\n QrcodeOutlined,\r\n FlagOutlined,\r\n ArrowLeftOutlined,\r\n SearchOutlined,\r\n TrophyOutlined\r\n} from '@ant-design/icons';\r\nimport { history, useLocation } from '@umijs/max';\r\nimport { getJobList } from '@/services/common/jobTitle';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport DictTag from '@/components/DictTag';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport { favoriteJob, unfavoriteJob, applyJob } from '@/services/jobportal/user';\r\nimport { getAccessToken } from '@/access';\r\nimport { PageEnum } from '@/enums/pagesEnums';\r\nimport { getJobCompetitiveness } from '@/services/jobportal/competitiveness';\r\nimport { Radar } from '@ant-design/charts';\r\nimport './index.less';\r\n\r\nconst { Title, Text, Paragraph } = Typography;\r\nconst { Option } = Select;\r\n\r\n// 学历字典映射\r\nconst educationMap: { [key: string]: string } = {\r\n '1': '大专',\r\n '2': '本科',\r\n '3': '硕士',\r\n '4': '博士',\r\n '0': '不限'\r\n};\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限'\r\n};\r\n\r\n// 从缓存获取用户信息\r\nconst getUserIdFromCache = (): number | null => {\r\n try {\r\n const cached = localStorage.getItem('userInfo');\r\n if (cached) {\r\n const userInfo = JSON.parse(cached);\r\n return userInfo?.userId || null;\r\n }\r\n } catch (error) {\r\n console.error('读取缓存用户信息失败:', error);\r\n }\r\n return null;\r\n};\r\n\r\n// 模拟职位数据\r\nconst mockJobs = [\r\n {\r\n id: 1,\r\n title: 'Java',\r\n salary: '10-15K',\r\n experience: '5-10年',\r\n education: '本科',\r\n company: '博凡科技',\r\n companyInfo: {\r\n name: '博凡科技',\r\n description: '博凡科技是一家专注于企业级应用软件开发的高新技术企业,成立于2015年。公司致力于为客户提供专业的IT解决方案,业务涵盖云计算、大数据、人工智能、物联网等领域。公司拥有一支经验丰富、技术精湛的研发团队,始终坚持技术创新和服务至上,为客户创造价值。'\r\n },\r\n location: '北京·东城区·东四',\r\n tags: ['Java', 'SpringCloud', 'MySQL'],\r\n description: '岗位职责:\\n1. 负责公司项目的研发工作\\n2. 负责后端系统的设计与开发\\n3. 参与技术方案的讨论和制定\\n\\n任职要求:\\n1. 5年以上工作经验;本科学历及以上\\n2. 熟练掌握Java基础,SpringCloud、SpringBoot\\n3. 熟悉Redis、SQL/NoSQL数据库\\n4. 熟悉消息队列:Kafka、RabbitMQ、RocketMQ\\n5. 熟悉Elasticsearch、Linux运维\\n6. 具备良好的问题解决能力和责任心\\n7. 具备良好的团队合作精神',\r\n benefits: [\r\n '完善的社会保险制度;购买五险一金',\r\n '节假日礼品',\r\n '带薪年假,法定节假日休息',\r\n '团建活动:KTV、别墅轰趴',\r\n '舒适的工作环境'\r\n ]\r\n },\r\n {\r\n id: 2,\r\n title: '中级java开发工程师',\r\n salary: '14-15K·13薪',\r\n experience: '3-5年',\r\n education: '本科',\r\n company: '新华三技术有限公司',\r\n companyInfo: {\r\n name: '新华三技术有限公司',\r\n description: '新华三技术有限公司是业界领先的IT解决方案提供商,专注于云计算、大数据、信息安全等领域。公司秉承\"客户至上、持续创新\"的理念,为全球客户提供优质的IT产品和服务。新华三拥有一流的研发团队和完善的人才培养体系,致力于成为最受信赖的IT服务提供商。'\r\n },\r\n location: '北京·石景山区·古城',\r\n tags: ['Java', 'Spring Boot', 'MySQL'],\r\n description: '岗位职责:\\n1. 参与公司核心业务系统的设计开发\\n2. 优化系统性能,提升用户体验\\n3. 编写技术文档\\n\\n任职要求:\\n1. 3年以上Java开发经验\\n2. 熟悉Spring Boot等主流框架\\n3. 熟悉MySQL数据库设计和优化',\r\n benefits: [\r\n '五险一金',\r\n '带薪年假',\r\n '年终奖',\r\n '定期体检'\r\n ]\r\n },\r\n {\r\n id: 3,\r\n title: '高级java开发工程师',\r\n salary: '20-30K',\r\n experience: '5-10年',\r\n education: '本科',\r\n company: '合肥森蕴',\r\n companyInfo: {\r\n name: '合肥森蕴科技有限公司',\r\n description: '合肥森蕴科技有限公司是一家专业从事软件开发和系统集成的高科技企业,成立于2010年。公司主要业务包括企业信息化建设、互联网应用开发、移动互联网解决方案等。森蕴科技拥有一支年轻富有活力的技术团队,注重技术研发和创新,为客户提供全面、专业的IT服务。公司以\"技术驱动创新,服务创造价值\"为使命,致力于成为行业领先的IT服务提供商。'\r\n },\r\n location: '北京·海淀区·苏州桥',\r\n tags: ['Java', 'Spring', 'Redis'],\r\n description: '岗位职责:\\n1. 负责架构设计与技术选型\\n2. 指导团队成员进行开发\\n3. 解决复杂技术问题\\n\\n任职要求:\\n1. 5年以上Java开发经验\\n2. 精通Spring框架\\n3. 熟悉分布式系统设计',\r\n benefits: [\r\n '五险一金',\r\n '股票期权',\r\n '带薪年假',\r\n '技术培训'\r\n ]\r\n },\r\n {\r\n id: 4,\r\n title: 'Python开发工程师',\r\n salary: '12-18K',\r\n experience: '3-5年',\r\n education: '本科',\r\n company: '创新科技',\r\n companyInfo: {\r\n name: '创新科技有限公司',\r\n description: '创新科技有限公司专注于互联网金融和数据分析领域,致力于为金融机构提供专业的技术解决方案。公司成立于2018年,拥有一支在金融科技、云计算、人工智能等领域经验丰富的技术团队。公司秉承\"创新驱动发展\"的理念,通过技术创新为客户创造价值,推动金融行业的数字化转型。'\r\n },\r\n location: '北京·朝阳区·望京',\r\n tags: ['Python', 'Django', 'MySQL'],\r\n description: '岗位职责:\\n1. 负责Python后端开发\\n2. 参与系统架构设计\\n3. 优化系统性能\\n\\n任职要求:\\n1. 3年以上Python开发经验\\n2. 熟悉Django、Flask框架\\n3. 熟悉MySQL、Redis',\r\n benefits: [\r\n '五险一金',\r\n '带薪年假',\r\n '年终奖'\r\n ]\r\n },\r\n {\r\n id: 5,\r\n title: '前端开发工程师',\r\n salary: '15-25K',\r\n experience: '2-5年',\r\n education: '本科',\r\n company: '互联网科技',\r\n companyInfo: {\r\n name: '互联网科技有限公司',\r\n description: '互联网科技有限公司是一家专注于电商平台和移动应用开发的企业,成立于2012年。公司致力于为用户提供优质的产品和服务,在电商、O2O、社交等领域积累了丰富的经验。公司拥有一支年轻、富有创造力的团队,注重用户体验和技术创新,致力于打造行业领先的互联网产品。'\r\n },\r\n location: '北京·海淀区·中关村',\r\n tags: ['Vue', 'React', 'TypeScript'],\r\n description: '岗位职责:\\n1. 负责前端页面开发\\n2. 优化用户体验\\n3. 与后端协作\\n\\n任职要求:\\n1. 2年以上前端开发经验\\n2. 熟悉Vue、React等框架\\n3. 熟悉TypeScript',\r\n benefits: [\r\n '五险一金',\r\n '股票期权',\r\n '技术培训'\r\n ]\r\n },\r\n {\r\n id: 6,\r\n title: '测试工程师',\r\n salary: '10-15K',\r\n experience: '1-3年',\r\n education: '本科',\r\n company: '质量科技',\r\n companyInfo: {\r\n name: '质量科技有限公司',\r\n description: '质量科技有限公司是一家专业的软件质量保证服务提供商,成立于2016年。公司专注于为各行业客户提供专业的测试服务和质量保障方案,在自动化测试、性能测试、安全测试等领域具有丰富的经验。公司拥有一支专业的测试团队和完善的测试体系,致力于帮助客户提升产品质量,降低运营风险。'\r\n },\r\n location: '北京·大兴区·亦庄',\r\n tags: ['测试', '自动化', 'Selenium'],\r\n description: '岗位职责:\\n1. 编写测试用例\\n2. 执行功能测试\\n3. 参与自动化测试\\n\\n任职要求:\\n1. 1年以上测试经验\\n2. 熟悉测试工具\\n3. 有责任心',\r\n benefits: [\r\n '五险一金',\r\n '带薪年假',\r\n '节日福利'\r\n ]\r\n },\r\n];\r\n\r\nconst JobListPage: React.FC = () => {\r\n const location = useLocation();\r\n const [selectedJob, setSelectedJob] = useState(null);\r\n const [favorited, setFavorited] = useState(false);\r\n const [jobList, setJobList] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const [jobCategory, setJobCategory] = useState('');\r\n const [scaleEnum, setScaleEnum] = useState>({});\r\n const [searchValue, setSearchValue] = useState(''); // 搜索框的值\r\n const [filteredJobList, setFilteredJobList] = useState([]); // 过滤后的职位列表\r\n const [overallScore, setOverallScore] = useState(0);\r\n const [radarData, setRadarData] = useState<{ item: string; score: number }[]>([\r\n { item: '技能', score: 0 },\r\n { item: '工作经验', score: 0 },\r\n { item: '学历', score: 0 },\r\n { item: '薪资', score: 0 },\r\n { item: '年龄', score: 0 },\r\n { item: '工作地', score: 0 }\r\n ]);\r\n // 格式化薪资显示\r\n const formatSalary = (minSalary: number, maxSalary: number) => {\r\n if (minSalary && maxSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k-${(maxSalary / 1000).toFixed(0)}k`;\r\n } else if (minSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k+`;\r\n } else if (maxSalary) {\r\n return `面议-${(maxSalary / 1000).toFixed(0)}k`;\r\n }\r\n return '面议';\r\n };\r\n\r\n // 获取字典数据\r\n useEffect(() => {\r\n getDictValueEnum('scale', true, true).then((data) => {\r\n setScaleEnum(data);\r\n });\r\n }, []);\r\n\r\n // 从路由queryParams获取jobCategory参数并获取数据\r\n useEffect(() => {\r\n // 尝试从 state.queryParams 获取参数\r\n const queryParams = (location.state as any)?.queryParams || {};\r\n let category = queryParams.name || '';\r\n\r\n // 如果从 state 没有获取到,尝试从 URL 查询参数获取\r\n if (!category && location.search) {\r\n const urlParams = new URLSearchParams(location.search);\r\n category = urlParams.get('name') || urlParams.get('jobCategory') || '';\r\n }\r\n\r\n setJobCategory(category);\r\n setSearchValue(category); // 设置搜索框的值\r\n\r\n if (category) {\r\n fetchJobList(category);\r\n } else {\r\n // 如果没有category参数,使用模拟数据\r\n setJobList(mockJobs);\r\n setFilteredJobList(mockJobs);\r\n setSelectedJob(mockJobs[0]);\r\n }\r\n }, [location]);\r\n\r\n // 当jobList更新时,如果没有选中的职位,自动选择第一个\r\n useEffect(() => {\r\n if (jobList.length > 0 && !selectedJob) {\r\n setSelectedJob(jobList[0]);\r\n }\r\n }, [jobList, selectedJob]);\r\n\r\n // 当 selectedJob 变化时,更新收藏状态\r\n useEffect(() => {\r\n if (selectedJob) {\r\n // 根据 isCollection 字段设置收藏状态\r\n // isCollection 为 null 或 0 表示未收藏,其他值表示已收藏\r\n setFavorited(selectedJob?.isCollection !== null && selectedJob?.isCollection !== 0 && selectedJob?.isCollection !== undefined);\r\n }\r\n }, [selectedJob]);\r\n\r\n // 当 selectedJob 变化时,获取竞争力分析数据\r\n useEffect(() => {\r\n if (selectedJob) {\r\n const jobIdNum = Number(selectedJob?.jobId || selectedJob?.id);\r\n if (!Number.isNaN(jobIdNum) && jobIdNum) {\r\n fetchCompetitiveness(jobIdNum);\r\n }\r\n }\r\n }, [selectedJob]);\r\n\r\n const fetchCompetitiveness = async (jobIdNum: number) => {\r\n try {\r\n const res = await getJobCompetitiveness(jobIdNum);\r\n const data = res as any;\r\n if (!data) return;\r\n if (typeof data.matchScore === 'number') {\r\n const clamped = Math.max(0, Math.min(100, data.matchScore));\r\n setOverallScore(clamped);\r\n } else {\r\n setOverallScore(0);\r\n }\r\n if (data.radarChart) {\r\n const r = data.radarChart as any;\r\n const mapped = [\r\n { item: '技能', score: r.skill ?? 0 },\r\n { item: '工作经验', score: r.experience ?? 0 },\r\n { item: '学历', score: r.education ?? 0 },\r\n { item: '薪资', score: r.salary ?? 0 },\r\n { item: '年龄', score: r.age ?? 0 },\r\n { item: '工作地', score: r.location ?? 0 }\r\n ].map(d => ({ ...d, score: Math.max(0, Math.min(100, d.score)) }));\r\n setRadarData(mapped);\r\n } else {\r\n setRadarData([\r\n { item: '技能', score: 0 },\r\n { item: '工作经验', score: 0 },\r\n { item: '学历', score: 0 },\r\n { item: '薪资', score: 0 },\r\n { item: '年龄', score: 0 },\r\n { item: '工作地', score: 0 }\r\n ]);\r\n }\r\n } catch (e) {\r\n // 保持默认数据\r\n }\r\n };\r\n\r\n const fetchJobList = async (category: string) => {\r\n try {\r\n setLoading(true);\r\n const response = await getJobList(category);\r\n\r\n if (response?.code === 200 && response?.data) {\r\n setJobList(response.data);\r\n setFilteredJobList(response.data);\r\n if (response.data.length > 0) {\r\n setSelectedJob(response.data[0]);\r\n }\r\n message.success(`获取到 ${response.data.length} 个职位`);\r\n } else {\r\n message.warning('暂无相关职位数据');\r\n setJobList([]);\r\n setFilteredJobList([]);\r\n setSelectedJob(null);\r\n }\r\n } catch (error) {\r\n console.error('获取职位数据失败:', error);\r\n message.error('获取职位数据失败');\r\n // 失败时使用模拟数据\r\n setJobList(mockJobs);\r\n setFilteredJobList(mockJobs);\r\n setSelectedJob(mockJobs[0]);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleJobClick = (job: any) => {\r\n setSelectedJob(job);\r\n // 根据 isCollection 字段设置收藏状态\r\n // isCollection 为 null 或 0 表示未收藏,其他值表示已收藏\r\n setFavorited(job?.isCollection !== null && job?.isCollection !== 0 && job?.isCollection !== undefined);\r\n };\r\n\r\n const handleCollect = async () => {\r\n // 检查用户是否登录\r\n const token = getAccessToken();\r\n if (!token) {\r\n message.warning('请先登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 如果是取消收藏,调用取消收藏接口\r\n if (favorited) {\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID\r\n const jobId = selectedJob?.jobId || selectedJob?.id;\r\n if (!jobId) {\r\n message.error('职位信息不完整,无法取消收藏');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await unfavoriteJob({ jobId, userId });\r\n if (response?.code === 200) {\r\n setFavorited(false);\r\n // 更新选中职位的 isCollection 字段\r\n if (selectedJob) {\r\n setSelectedJob({ ...selectedJob, isCollection: 0 });\r\n // 同时更新列表中的数据\r\n setJobList(jobList.map(job =>\r\n (job.jobId === jobId || job.id === jobId) ? { ...job, isCollection: 0 } : job\r\n ));\r\n setFilteredJobList(filteredJobList.map(job =>\r\n (job.jobId === jobId || job.id === jobId) ? { ...job, isCollection: 0 } : job\r\n ));\r\n }\r\n message.success('取消收藏成功');\r\n } else {\r\n message.error(response?.msg || '取消收藏失败');\r\n }\r\n } catch (error) {\r\n console.error('取消收藏失败:', error);\r\n message.error('取消收藏失败,请重试');\r\n }\r\n return;\r\n }\r\n\r\n // 如果是收藏,调用收藏接口\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID\r\n const jobId = selectedJob?.jobId || selectedJob?.id;\r\n if (!jobId) {\r\n message.error('职位信息不完整');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await favoriteJob({ jobId, userId });\r\n if (response?.code === 200) {\r\n setFavorited(true);\r\n // 更新选中职位的 isCollection 字段\r\n if (selectedJob) {\r\n setSelectedJob({ ...selectedJob, isCollection: 1 });\r\n // 同时更新列表中的数据\r\n setJobList(jobList.map(job =>\r\n (job.jobId === jobId || job.id === jobId) ? { ...job, isCollection: 1 } : job\r\n ));\r\n setFilteredJobList(filteredJobList.map(job =>\r\n (job.jobId === jobId || job.id === jobId) ? { ...job, isCollection: 1 } : job\r\n ));\r\n }\r\n message.success('收藏成功');\r\n } else {\r\n message.error(response?.msg || '收藏失败');\r\n }\r\n } catch (error) {\r\n console.error('收藏操作失败:', error);\r\n message.error('收藏操作失败,请重试');\r\n }\r\n };\r\n\r\n // 处理立即申请\r\n const handleApply = async () => {\r\n // 检查用户是否登录\r\n const token = getAccessToken();\r\n if (!token) {\r\n message.warning('请先登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID\r\n const jobId = selectedJob?.jobId || selectedJob?.id;\r\n if (!jobId) {\r\n message.error('职位信息不完整,无法申请');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await applyJob({\r\n jobId: String(jobId),\r\n userId: String(userId)\r\n });\r\n if (response?.code === 200) {\r\n message.success('申请成功');\r\n } else {\r\n message.error(response?.msg || '申请失败');\r\n }\r\n } catch (error) {\r\n console.error('申请失败:', error);\r\n message.error('申请失败,请重试');\r\n }\r\n };\r\n\r\n // 处理搜索功能\r\n const handleSearch = () => {\r\n if (searchValue.trim()) {\r\n // 过滤职位列表\r\n const filtered = jobList.filter((job) => {\r\n const jobTitle = job.jobTitle || job.title || '';\r\n const companyName = job.companyName || job.company || '';\r\n const searchTerm = searchValue.toLowerCase();\r\n\r\n return (\r\n jobTitle.toLowerCase().includes(searchTerm) ||\r\n companyName.toLowerCase().includes(searchTerm)\r\n );\r\n });\r\n\r\n setFilteredJobList(filtered);\r\n setSelectedJob(filtered.length > 0 ? filtered[0] : null);\r\n\r\n if (filtered.length === 0) {\r\n message.warning('未找到相关职位');\r\n } else {\r\n message.success(`找到 ${filtered.length} 个相关职位`);\r\n }\r\n } else {\r\n // 如果搜索框为空,显示所有职位\r\n setFilteredJobList(jobList);\r\n setSelectedJob(jobList.length > 0 ? jobList[0] : null);\r\n }\r\n };\r\n\r\n // 处理搜索框输入\r\n const handleSearchInputChange = (e: React.ChangeEvent) => {\r\n setSearchValue(e.target.value);\r\n };\r\n\r\n // 处理回车搜索\r\n const handleSearchKeyPress = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter') {\r\n handleSearch();\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n {/* 顶部搜索栏 */}\r\n {/*
\r\n
\r\n \r\n 推荐 | {jobCategory || '全部职位'}(北京)\r\n \r\n \r\n \r\n \r\n 搜索功能已移至顶部导航栏\r\n
\r\n \r\n \r\n \r\n }>地图\r\n } onClick={handleSearch}>搜索\r\n \r\n \r\n
\r\n
*/}\r\n\r\n {/* 筛选栏 */}\r\n {/*
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
*/}\r\n\r\n {/* 主要内容区 */}\r\n
\r\n {/* 返回按钮 */}\r\n {/*
\r\n }\r\n onClick={() => history.back()}\r\n >\r\n 返回\r\n \r\n
*/}\r\n\r\n
\r\n {/* 左侧职位列表 */}\r\n \r\n \r\n {filteredJobList.length === 0 ? (\r\n
\r\n
\r\n 暂无相关职位信息\r\n
\r\n \r\n 请尝试其他筛选条件或岗位类别\r\n \r\n
\r\n
\r\n ) : (\r\n filteredJobList.map((job, index) => (\r\n
handleJobClick(job)}\r\n bodyStyle={{ padding: '16px' }}\r\n loading={loading}\r\n >\r\n \r\n
{job.jobTitle || job.title}\r\n \r\n {job.minSalary && job.maxSalary ? formatSalary(job.minSalary, job.maxSalary) : (job.salary || '面议')}\r\n \r\n \r\n \r\n {job.companyName || job.company}\r\n
\r\n \r\n \r\n {job.jobLocation || job.location}\r\n \r\n \r\n {job.experience ? experienceMap[job.experience] || job.experience : '不限'}\r\n \r\n \r\n {job.education ? educationMap[job.education] || job.education : '不限'}\r\n \r\n
\r\n {/* 添加标签区域,与热门岗位保持一致 */}\r\n \r\n {job.jobCategory && {job.jobCategory}}\r\n {/* {job.dataSource && {job.dataSource}} */}\r\n {job.vacancies && 招聘{job.vacancies}人}\r\n {/* {job.industry && {job.industry}} */}\r\n
\r\n \r\n ))\r\n )}\r\n
\r\n \r\n\r\n {/* 右侧职位详情 */}\r\n \r\n \r\n {!selectedJob ? (\r\n
\r\n
\r\n 暂无职位详情信息\r\n
\r\n \r\n 请从左侧列表中选择一个职位查看详情\r\n \r\n
\r\n
\r\n ) : (\r\n <>\r\n {/* 公司信息卡片 */}\r\n {(selectedJob?.companyInfo || selectedJob?.companyName || selectedJob?.company) && (\r\n
\r\n 公司信息\r\n \r\n
\r\n 公司\r\n \r\n
\r\n
\r\n {selectedJob?.companyInfo?.name || selectedJob?.companyName || selectedJob?.company}\r\n \r\n
\r\n
{selectedJob?.industry || '暂无行业数据'}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {selectedJob?.jobLocation || '暂无地址信息'}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {selectedJob?.companyVo?.companyDescription || '暂无公司描述'}\r\n \r\n
\r\n \r\n )}\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n {selectedJob?.jobTitle || selectedJob?.title || '请选择职位'}\r\n \r\n {selectedJob?.minSalary && selectedJob?.maxSalary\r\n ? formatSalary(selectedJob.minSalary, selectedJob.maxSalary)\r\n : (selectedJob?.salary || '面议')\r\n }\r\n \r\n \r\n : }\r\n danger={favorited}\r\n onClick={handleCollect}\r\n size=\"middle\"\r\n style={{\r\n borderRadius: '6px',\r\n fontWeight: 500,\r\n height: '32px',\r\n padding: '0 12px',\r\n fontSize: '14px',\r\n ...(favorited ? {} : {\r\n borderColor: '#1890ff',\r\n color: '#1890ff'\r\n })\r\n }}\r\n >\r\n {favorited ? '已收藏' : '收藏'}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n {selectedJob?.jobLocation || selectedJob?.location || '未知'}\r\n {selectedJob?.experience ? experienceMap[selectedJob.experience] || selectedJob.experience : '不限'}\r\n {selectedJob?.education ? educationMap[selectedJob.education] || selectedJob.education : '不限'}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n \r\n {/* 左侧内容区 */}\r\n \r\n {/* 职位描述 */}\r\n \r\n
职位描述\r\n
\r\n {selectedJob?.jobCategory && {selectedJob.jobCategory}}\r\n {/* {selectedJob?.dataSource && {selectedJob.dataSource}} */}\r\n {selectedJob?.industry && {selectedJob.industry}}\r\n {selectedJob?.vacancies && 招聘{selectedJob.vacancies}人}\r\n {selectedJob?.tags?.map((tag: string, index: number) => (\r\n {tag}\r\n ))}\r\n
\r\n
\r\n {selectedJob?.description || '暂无职位描述'}\r\n \r\n
\r\n \r\n\r\n {/* 右侧侧边栏 */}\r\n \r\n {/* 竞争力分析 */}\r\n \r\n \r\n 竞争力分析\r\n \r\n }\r\n className=\"competitiveness-card\"\r\n >\r\n \r\n
\r\n
\r\n
\r\n
{overallScore}
\r\n
综合评分
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n >\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default JobListPage;\r\n\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/List/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/List/index.tsx"
},
"8": {
"path": "/job-portal/detail",
@@ -3989,7 +4019,7 @@
"absPath": "/job-portal/detail",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport { useParams, history, useLocation } from '@umijs/max';\r\nimport {\r\n Card,\r\n Typography,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Button,\r\n Progress,\r\n Divider,\r\n Avatar,\r\n message\r\n} from 'antd';\r\nimport {\r\n ArrowLeftOutlined,\r\n HeartOutlined,\r\n HeartFilled,\r\n EnvironmentOutlined,\r\n ClockCircleOutlined,\r\n UserOutlined,\r\n TrophyOutlined,\r\n FireOutlined,\r\n StarOutlined\r\n} from '@ant-design/icons';\r\nimport { Radar } from '@ant-design/charts';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport './index.less';\r\nimport { getJobCompetitiveness } from '@/services/jobportal/competitiveness';\r\nimport { favoriteJob, unfavoriteJob, applyJob } from '@/services/jobportal/user';\r\nimport { getAccessToken } from '@/access';\r\nimport { PageEnum } from '@/enums/pagesEnums';\r\n\r\nconst { Title, Text, Paragraph } = Typography;\r\n\r\n// 学历字典映射\r\nconst educationMap: { [key: string]: string } = {\r\n '1': '大专',\r\n '2': '本科',\r\n '3': '硕士',\r\n '4': '博士',\r\n '0': '不限'\r\n};\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限'\r\n};\r\n\r\n// 从缓存获取用户信息\r\nconst getUserIdFromCache = (): number | null => {\r\n try {\r\n const cached = localStorage.getItem('userInfo');\r\n if (cached) {\r\n const userInfo = JSON.parse(cached);\r\n return userInfo?.userId || null;\r\n }\r\n } catch (error) {\r\n console.error('读取缓存用户信息失败:', error);\r\n }\r\n return null;\r\n};\r\n\r\n// 格式化薪资显示\r\nconst formatSalary = (minSalary: number, maxSalary: number) => {\r\n if (minSalary && maxSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k-${(maxSalary / 1000).toFixed(0)}k`;\r\n } else if (minSalary) {\r\n return `${(minSalary / 1000).toFixed(0)}k+`;\r\n } else if (maxSalary) {\r\n return `面议-${(maxSalary / 1000).toFixed(0)}k`;\r\n }\r\n return '面议';\r\n};\r\n\r\n// 数据转换函数\r\nconst transformJobData = (jobData: any) => {\r\n return {\r\n id: jobData.jobId || jobData.id,\r\n title: jobData.jobTitle || jobData.title,\r\n company: jobData.companyName || jobData.company,\r\n companyLogo: jobData.companyLogo || 'https://via.placeholder.com/80',\r\n salary: jobData.minSalary && jobData.maxSalary\r\n ? formatSalary(jobData.minSalary, jobData.maxSalary)\r\n : (jobData.salary || '面议'),\r\n location: jobData.jobLocation || jobData.location,\r\n experience: jobData.experience ? experienceMap[jobData.experience] || jobData.experience : '不限',\r\n education: jobData.education ? educationMap[jobData.education] || jobData.education : '不限',\r\n tags: jobData.tags || ['五险一金', '带薪年假', '年终奖'],\r\n publishTime: jobData.publishTime || new Date().toISOString().split('T')[0],\r\n description: jobData.description || `\r\n 职位职责:
\r\n 1. 负责相关业务系统的设计与开发;
\r\n 2. 参与系统架构设计和技术选型;
\r\n 3. 与团队协作完成项目开发;
\r\n\r\n 任职要求:
\r\n 1. 具备相关工作经验;
\r\n 2. 熟悉相关技术栈;
\r\n 3. 具备良好的团队协作能力;
\r\n `,\r\n companyInfo: {\r\n name: jobData.companyName || jobData.company,\r\n type: jobData.industry || '互联网/电子商务',\r\n scale: jobData.scale || '100-499人',\r\n industry: jobData.industry || '计算机/互联网',\r\n description: jobData.companyVo?.companyDescription || jobData.companyDescription || '暂无公司描述信息'\r\n },\r\n competitiveness: {\r\n overall: 75,\r\n requirements: 70,\r\n salary: 80,\r\n company: 75,\r\n benefits: 80\r\n },\r\n marketTrend: [\r\n { name: 'Java', demand: 85, salary: 90 },\r\n { name: 'Spring Boot', demand: 75, salary: 85 },\r\n { name: 'MySQL', demand: 70, salary: 75 },\r\n { name: 'Redis', demand: 75, salary: 80 }\r\n ]\r\n };\r\n};\r\n\r\n// 职位详情数据(模拟数据)\r\nconst mockJobDetail = {\r\n id: 1,\r\n title: 'Java高级开发工程师',\r\n company: '青岛科技发展有限公司',\r\n companyLogo: 'https://via.placeholder.com/80',\r\n salary: '15k-25k',\r\n location: '青岛·李沧区',\r\n experience: '3-5年',\r\n education: '本科',\r\n tags: ['五险一金', '带薪年假', '年终奖', '定期体检'],\r\n publishTime: '2024-03-15',\r\n description: `\r\n 职位职责:
\r\n 1. 负责后端系统架构设计与优化,提升系统性能和稳定性;
\r\n 2. 参与核心业务模块的设计与开发,使用Java、Spring Boot等框架;
\r\n 3. 协作完成微服务架构,解决分布式系统相关问题;
\r\n 4. 进行代码审查,确保代码质量和规范性;
\r\n 5. 与前端、产品、测试等团队协作,推动项目快速迭代;
\r\n\r\n 任职要求:
\r\n 1. 本科及以上学历,计算机相关专业,3年以上Java开发经验;
\r\n 2. 扎实的Java基础,熟悉Spring、Spring Boot、MyBatis等框架;
\r\n 3. 熟悉MySQL、Redis等数据库,具备SQL优化能力;
\r\n 4. 了解分布式系统设计,有微服务开发经验;
\r\n 5. 具备良好的团队协作能力和学习能力;
\r\n `,\r\n companyInfo: {\r\n name: '青岛科技发展有限公司',\r\n type: '互联网/电子商务',\r\n scale: '500-999人',\r\n industry: '计算机/互联网',\r\n description: '青岛科技发展有限公司是一家专注于软件开发、技术服务的科技企业。公司致力于为客户提供优质的IT解决方案,业务涵盖企业信息化、移动应用开发等领域。我们拥有一支年轻、专业的团队,注重技术创新和人才培养,为员工提供良好的发展平台。'\r\n },\r\n competitiveness: {\r\n overall: 75,\r\n requirements: 70,\r\n salary: 80,\r\n company: 75,\r\n benefits: 80\r\n },\r\n marketTrend: [\r\n { name: 'Java', demand: 85, salary: 90 },\r\n { name: 'Spring Boot', demand: 75, salary: 85 },\r\n { name: 'MySQL', demand: 70, salary: 75 },\r\n { name: 'Redis', demand: 75, salary: 80 }\r\n ]\r\n};\r\n\r\nconst JobDetailPage: React.FC = () => {\r\n const { id } = useParams<{ id: string }>();\r\n const location = useLocation();\r\n const [jobDetail, setJobDetail] = useState(mockJobDetail);\r\n const [loading, setLoading] = useState(false);\r\n const [isFavorited, setIsFavorited] = useState(false);\r\n const [originalJobData, setOriginalJobData] = useState(null); // 保存原始数据引用\r\n const [overallScore, setOverallScore] = useState(0);\r\n const [radarData, setRadarData] = useState<{ item: string; score: number }[]>([\r\n { item: '技能', score: 0 },\r\n { item: '工作经验', score: 0 },\r\n { item: '学历', score: 0 },\r\n { item: '薪资', score: 0 },\r\n { item: '年龄', score: 0 },\r\n { item: '工作地', score: 0 }\r\n ]);\r\n\r\n useEffect(() => {\r\n // 首先尝试从传递的数据中获取职位信息\r\n const passedJobData = (location.state as any)?.jobData;\r\n\r\n if (passedJobData) {\r\n // 保存原始数据引用\r\n setOriginalJobData(passedJobData);\r\n // 将传递过来的数据转换为详情页面需要的格式\r\n const transformedJobData = transformJobData(passedJobData);\r\n setJobDetail(transformedJobData);\r\n // 根据 isCollection 字段设置收藏状态\r\n // isCollection 为 null 或 0 表示未收藏,其他值表示已收藏\r\n setIsFavorited(passedJobData?.isCollection !== null && passedJobData?.isCollection !== 0 && passedJobData?.isCollection !== undefined);\r\n } else {\r\n // 如果没有传递数据,则根据id从API获取数据\r\n // fetchJobDetail(id);\r\n // 默认未收藏\r\n setOriginalJobData(null);\r\n setIsFavorited(false);\r\n }\r\n\r\n }, [id, location.state]);\r\n\r\n // 基于详情中的 id 再拉一次(避免从路由未传 id 的情况)\r\n useEffect(() => {\r\n const jobIdNum = Number((jobDetail as any)?.id);\r\n if (!Number.isNaN(jobIdNum) && jobIdNum) {\r\n fetchCompetitiveness(jobIdNum);\r\n }\r\n }, [jobDetail?.id]);\r\n\r\n const fetchCompetitiveness = async (jobIdNum: number) => {\r\n try {\r\n const res = await getJobCompetitiveness(jobIdNum);\r\n const data = res as any;\r\n if (!data) return;\r\n if (typeof data.matchScore === 'number') {\r\n const clamped = Math.max(0, Math.min(100, data.matchScore));\r\n setOverallScore(clamped);\r\n } else {\r\n setOverallScore(0);\r\n }\r\n if (data.radarChart) {\r\n const r = data.radarChart as any;\r\n const mapped = [\r\n { item: '技能', score: r.skill ?? 0 },\r\n { item: '工作经验', score: r.experience ?? 0 },\r\n { item: '学历', score: r.education ?? 0 },\r\n { item: '薪资', score: r.salary ?? 0 },\r\n { item: '年龄', score: r.age ?? 0 },\r\n { item: '工作地', score: r.location ?? 0 }\r\n ].map(d => ({ ...d, score: Math.max(0, Math.min(100, d.score)) }));\r\n setRadarData(mapped);\r\n } else {\r\n setRadarData([\r\n { item: '技能', score: 0 },\r\n { item: '工作经验', score: 0 },\r\n { item: '学历', score: 0 },\r\n { item: '薪资', score: 0 },\r\n { item: '年龄', score: 0 },\r\n { item: '工作地', score: 0 }\r\n ]);\r\n }\r\n } catch (e) {\r\n // 保持默认mock数据\r\n }\r\n };\r\n\r\n const handleCollect = async () => {\r\n // 检查用户是否登录\r\n const token = getAccessToken();\r\n if (!token) {\r\n message.warning('请先登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 如果是取消收藏,调用取消收藏接口\r\n if (isFavorited) {\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID(从原始数据或转换后的数据中获取)\r\n const jobId = originalJobData?.jobId || originalJobData?.id || (jobDetail as any)?.id || id;\r\n if (!jobId) {\r\n message.error('职位信息不完整,无法取消收藏');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await unfavoriteJob({ jobId: Number(jobId), userId });\r\n if (response?.code === 200) {\r\n setIsFavorited(false);\r\n // 更新原始数据的 isCollection 字段\r\n if (originalJobData) {\r\n setOriginalJobData({ ...originalJobData, isCollection: 0 });\r\n }\r\n message.success('取消收藏成功');\r\n } else {\r\n message.error(response?.msg || '取消收藏失败');\r\n }\r\n } catch (error) {\r\n console.error('取消收藏失败:', error);\r\n message.error('取消收藏失败,请重试');\r\n }\r\n return;\r\n }\r\n\r\n // 如果是收藏,调用收藏接口\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID\r\n const jobId = originalJobData?.jobId || originalJobData?.id || (jobDetail as any)?.id || id;\r\n if (!jobId) {\r\n message.error('职位信息不完整');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await favoriteJob({ jobId: Number(jobId), userId });\r\n if (response?.code === 200) {\r\n setIsFavorited(true);\r\n // 更新原始数据的 isCollection 字段\r\n if (originalJobData) {\r\n setOriginalJobData({ ...originalJobData, isCollection: 1 });\r\n }\r\n message.success('收藏成功');\r\n } else {\r\n message.error(response?.msg || '收藏失败');\r\n }\r\n } catch (error) {\r\n console.error('收藏操作失败:', error);\r\n message.error('收藏操作失败,请重试');\r\n }\r\n };\r\n\r\n const handleApply = async () => {\r\n // 检查用户是否登录\r\n const token = getAccessToken();\r\n if (!token) {\r\n message.warning('请先登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n history.push(PageEnum.LOGIN);\r\n return;\r\n }\r\n\r\n // 获取职位ID(从原始数据或转换后的数据中获取)\r\n const jobId = originalJobData?.jobId || originalJobData?.id || (jobDetail as any)?.id || id;\r\n if (!jobId) {\r\n message.error('职位信息不完整,无法申请');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await applyJob({\r\n jobId: String(jobId),\r\n userId: String(userId)\r\n });\r\n if (response?.code === 200) {\r\n message.success('申请成功');\r\n } else {\r\n message.error(response?.msg || '申请失败');\r\n }\r\n } catch (error) {\r\n console.error('申请失败:', error);\r\n message.error('申请失败,请重试');\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n\r\n {/* 职位头部信息 */}\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {jobDetail.title}\r\n {jobDetail.salary}\r\n \r\n : }\r\n danger={isFavorited}\r\n onClick={handleCollect}\r\n size=\"middle\"\r\n style={{\r\n borderRadius: '6px',\r\n fontWeight: 500,\r\n height: '32px',\r\n padding: '0 12px',\r\n fontSize: '14px',\r\n ...(isFavorited ? {} : {\r\n borderColor: '#1890ff',\r\n color: '#1890ff'\r\n })\r\n }}\r\n >\r\n {isFavorited ? '已收藏' : '收藏'}\r\n \r\n
\r\n \r\n \r\n {jobDetail.location}\r\n \r\n \r\n {jobDetail.experience}\r\n \r\n \r\n {jobDetail.education}\r\n \r\n \r\n \r\n {jobDetail.tags.map((tag, index) => (\r\n {tag}\r\n ))}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n {/* 左侧内容区 */}\r\n \r\n {/* 职位描述 */}\r\n \r\n \r\n \r\n\r\n {/* 公司信息 */}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n {jobDetail.companyInfo.name}\r\n \r\n
\r\n {jobDetail.companyInfo.type}\r\n \r\n {jobDetail.companyInfo.scale}\r\n \r\n {jobDetail.companyInfo.industry}\r\n \r\n
\r\n \r\n
\r\n
{jobDetail.companyInfo.description}\r\n
\r\n \r\n \r\n\r\n {/* 右侧侧边栏 */}\r\n \r\n {/* 竞争力分析 */}\r\n \r\n \r\n 竞争力分析\r\n \r\n }\r\n className=\"competitiveness-card\"\r\n >\r\n \r\n
\r\n
\r\n
\r\n
{overallScore}
\r\n
综合评分
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default JobDetailPage;\r\n\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/Detail/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/Detail/index.tsx"
},
"9": {
"path": "/job-portal/resume",
@@ -3999,7 +4029,7 @@
"absPath": "/job-portal/resume",
"__content": "import React from 'react';\r\nimport { Card, Row, Col, Avatar, Typography, Button, Space, Divider, Tag, List, message, Tooltip, Modal, Form, Select, Input, DatePicker, AutoComplete, Spin } from 'antd';\r\nimport { UserOutlined, EditOutlined, PlusOutlined, EnvironmentOutlined, PhoneOutlined, ManOutlined, WomanOutlined, DeleteOutlined, CheckOutlined } from '@ant-design/icons';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport defaultAvatar from '@/assets/avatar.jpg';\r\nimport './index.less';\r\nimport JobTitleSelector from '@/components/JobTitleSelector';\r\nimport moment from 'moment';\r\nimport 'moment/locale/zh-cn';\r\nimport zhCN from 'antd/es/date-picker/locale/zh_CN';\r\nimport { addUserWorkExperience } from '@/services/common/jobTitle';\r\nimport { request } from '@umijs/max';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport { debounce } from '@/utils/tools';\r\nmoment.locale('zh-cn');\r\n\r\nconst { Title, Text } = Typography;\r\n\r\nconst ResumePage: React.FC = () => {\r\n // 字典数据\r\n const [dictData, setDictData] = React.useState<{\r\n sex?: any;\r\n education?: any;\r\n area?: any;\r\n age?: any;\r\n }>({});\r\n\r\n // profile 数据可编辑\r\n const [profile, setProfile] = React.useState({\r\n userId: null as number | string | null,\r\n name: '',\r\n gender: '',\r\n age: '',\r\n education: '',\r\n phone: '',\r\n avatar: '',\r\n desiredSalary: '',\r\n desiredCity: '',\r\n desiredTitle: '',\r\n birthDate: null as string | null,\r\n politicalAffiliation: '',\r\n nation: '',\r\n idCard: '',\r\n salaryMin: '',\r\n salaryMax: '',\r\n workExperience: '',\r\n });\r\n const [editMode, setEditMode] = React.useState(false);\r\n const [draft, setDraft] = React.useState({desiredSalary: '', desiredCity: '', desiredTitle: ''});\r\n\r\n // 工作经历\r\n const [experiences, setExperiences] = React.useState>([]);\r\n\r\n // 新增经历弹窗控制\r\n const [addExpVisible, setAddExpVisible] = React.useState(false);\r\n const [addExpForm, setAddExpForm] = React.useState<{\r\n company: string;\r\n jobId: number | undefined;\r\n jobTitle: string;\r\n period: any; // [start, end] - DatePicker使用Dayjs但这里用moment兼容\r\n duties: string;\r\n }>({\r\n company: '',\r\n jobId: undefined,\r\n jobTitle: '',\r\n period: null, // [start, end]\r\n duties: '',\r\n });\r\n const [addExpTitleModal, setAddExpTitleModal] = React.useState(false);\r\n const [addExpLoading, setAddExpLoading] = React.useState(false);\r\n\r\n // 编辑弹窗控制\r\n const [editVisible, setEditVisible] = React.useState(false);\r\n const [form] = Form.useForm();\r\n const [jobTitleModalOpen, setJobTitleModalOpen] = React.useState(false);\r\n const [jobSelected, setJobSelected] = React.useState<{id?:number,label?:string}>({});\r\n // jobTitle树形数据\r\n const [jobTitleTree, setJobTitleTree] = React.useState;\r\n }>>([]);\r\n // jobTitleId映射表(用于快速查找)\r\n const [jobTitleMap, setJobTitleMap] = React.useState>({});\r\n // 保存初始的jobTitleId,用于后续映射\r\n const [currentJobTitleId, setCurrentJobTitleId] = React.useState(null);\r\n\r\n const [editExpId, setEditExpId] = React.useState(null);\r\n const [editExpForm, setEditExpForm] = React.useState<{\r\n company: string;\r\n jobId: number | undefined;\r\n jobTitle: string;\r\n period: any; // DatePicker使用Dayjs但这里用moment兼容\r\n duties: string;\r\n }>({company:'',jobId:undefined,jobTitle:'',period:null,duties:''});\r\n const [editExpTitleModal, setEditExpTitleModal] = React.useState(false);\r\n\r\n const skillLevels = ['初级', '中级', '高级'];\r\n const [skills, setSkills] = React.useState>([]);\r\n const [editSkillIdx, setEditSkillIdx] = React.useState(null);\r\n const [addSkillMode, setAddSkillMode] = React.useState(false);\r\n const [skillDraft, setSkillDraft] = React.useState({ name: '', level: '初级' });\r\n // 技能名称模糊查询相关\r\n const [skillOptions, setSkillOptions] = React.useState>([]);\r\n const [skillSearchLoading, setSkillSearchLoading] = React.useState(false);\r\n\r\n // 获取字典值的显示文本\r\n const getDictText = (dictType: string, value: string | null | undefined): string => {\r\n if (!value || !dictData[dictType as keyof typeof dictData]) return value || '';\r\n const dict = dictData[dictType as keyof typeof dictData];\r\n return dict[value]?.text || value;\r\n };\r\n\r\n // 在树形数据中递归查找id对应的label\r\n const findJobTitleLabel = (tree: Array, id: number | string): string | null => {\r\n for (const node of tree) {\r\n if (node.id === Number(id)) {\r\n return node.label;\r\n }\r\n if (node.children && node.children.length > 0) {\r\n const found = findJobTitleLabel(node.children, id);\r\n if (found) return found;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n // 构建jobTitle映射表(用于快速查找)\r\n const buildJobTitleMap = (tree: Array, map: Record = {}) => {\r\n tree.forEach((node) => {\r\n map[node.id] = node.label;\r\n if (node.children && node.children.length > 0) {\r\n buildJobTitleMap(node.children, map);\r\n }\r\n });\r\n return map;\r\n };\r\n\r\n // 技能名称模糊查询(实际查询函数)\r\n const searchSkillNameInternal = async (keyword: string) => {\r\n if (!keyword || keyword.trim() === '') {\r\n setSkillOptions([]);\r\n return;\r\n }\r\n setSkillSearchLoading(true);\r\n try {\r\n const res: any = await request('/api/cms/dict/jobCategory', {\r\n method: 'GET',\r\n params: {\r\n name: keyword,\r\n },\r\n });\r\n // eslint-disable-next-line no-console\r\n console.log('技能查询接口返回数据:', res);\r\n if (res && res.code === 200 && res.data) {\r\n // 根据实际返回的数据格式处理\r\n const options = Array.isArray(res.data)\r\n ? res.data.map((item: any) => ({\r\n value: item.name || item.label || item.value || '',\r\n label: item.name || item.label || item.value || '',\r\n }))\r\n : [];\r\n setSkillOptions(options);\r\n } else {\r\n setSkillOptions([]);\r\n }\r\n } catch (e) {\r\n // eslint-disable-next-line no-console\r\n console.error('技能查询失败:', e);\r\n setSkillOptions([]);\r\n } finally {\r\n setSkillSearchLoading(false);\r\n }\r\n };\r\n\r\n // 使用防抖包装查询函数(延迟300ms)\r\n const searchSkillName = React.useMemo(\r\n () => debounce(searchSkillNameInternal, 300),\r\n []\r\n );\r\n\r\n React.useEffect(() => {\r\n // 获取字典数据\r\n Promise.all([\r\n getDictValueEnum('sex', false, true),\r\n getDictValueEnum('education', false, true),\r\n getDictValueEnum('area', false, true),\r\n getDictValueEnum('age', false, true),\r\n ]).then(([sexData, educationData, areaData, ageData]) => {\r\n setDictData({\r\n sex: sexData,\r\n education: educationData,\r\n area: areaData,\r\n age: ageData,\r\n });\r\n });\r\n\r\n // 获取jobTitle树形数据\r\n request('/api/app/common/jobTitle/treeselect', { method: 'GET' })\r\n .then((res: any) => {\r\n if (res && res.code === 200 && res.data) {\r\n setJobTitleTree(res.data);\r\n // 构建映射表\r\n const map = buildJobTitleMap(res.data);\r\n setJobTitleMap(map);\r\n }\r\n })\r\n .catch((err) => {\r\n // eslint-disable-next-line no-console\r\n console.error('获取jobTitle树形数据失败:', err);\r\n });\r\n\r\n // 获取简历信息\r\n request('/api/cms/appUser/getUserInfo', { method: 'GET' })\r\n .then((res: any) => {\r\n if (res && res.code === 200 && res.data) {\r\n const data = res.data;\r\n\r\n // 保存userId到缓存\r\n if (data.userId) {\r\n localStorage.setItem('resume_userId', String(data.userId));\r\n }\r\n\r\n // 设置个人信息\r\n setProfile({\r\n userId: data.userId || null,\r\n name: data.name || '',\r\n gender: data.sex === '0' ? '男' : data.sex === '1' ? '女' : '',\r\n age: data.age || '',\r\n education: data.education || '',\r\n phone: data.phone || '',\r\n avatar: data.avatar || '',\r\n desiredSalary: data.salaryMin && data.salaryMax ? `${data.salaryMin}-${data.salaryMax}` : '',\r\n desiredCity: data.area || '',\r\n desiredTitle: data.jobTitle || data.field_19 || '',\r\n birthDate: data.birthDate,\r\n politicalAffiliation: data.politicalAffiliation || '',\r\n nation: data.nation || '',\r\n idCard: data.idCard || '',\r\n salaryMin: data.salaryMin || '',\r\n salaryMax: data.salaryMax || '',\r\n workExperience: data.workExperience || '',\r\n });\r\n\r\n // 设置求职期望的draft\r\n setDraft({\r\n desiredSalary: data.salaryMin && data.salaryMax ? `${data.salaryMin}-${data.salaryMax}` : '',\r\n desiredCity: data.area || '',\r\n desiredTitle: data.jobTitle || data.field_19 || '',\r\n });\r\n\r\n // 设置已选择的岗位(如果有jobTitleId)\r\n if (data.jobTitleId) {\r\n const jobTitleIdNum = Number(data.jobTitleId);\r\n setCurrentJobTitleId(jobTitleIdNum);\r\n // 先从jobTitleMap中查找label,如果没有则使用接口返回的jobTitle或field_19\r\n const jobTitleLabel = jobTitleMap[jobTitleIdNum] || data.jobTitle || data.field_19 || '';\r\n setJobSelected({\r\n id: jobTitleIdNum,\r\n label: jobTitleLabel,\r\n });\r\n // 更新profile中的desiredTitle\r\n if (jobTitleLabel) {\r\n setProfile(prev => ({\r\n ...prev,\r\n desiredTitle: jobTitleLabel,\r\n }));\r\n }\r\n }\r\n\r\n // 处理工作经历\r\n if (data.experiencesList && Array.isArray(data.experiencesList)) {\r\n const formattedExperiences = data.experiencesList.map((exp: any) => ({\r\n id: exp.id,\r\n company: exp.companyName || '',\r\n title: exp.position || '',\r\n period: exp.startDate && exp.endDate\r\n ? `${exp.startDate} - ${exp.endDate}`\r\n : '',\r\n duties: exp.description ? exp.description.split('\\n').filter((d: string) => d.trim()) : [],\r\n startDate: exp.startDate,\r\n endDate: exp.endDate,\r\n }));\r\n setExperiences(formattedExperiences);\r\n }\r\n\r\n // 处理技能列表\r\n if (data.appSkillsList && Array.isArray(data.appSkillsList)) {\r\n const formattedSkills = data.appSkillsList\r\n .filter((skill: any) => skill.name) // 过滤掉没有名称的技能\r\n .map((skill: any) => ({\r\n id: skill.id,\r\n name: skill.name || '',\r\n level: skill.levels || '初级',\r\n }));\r\n setSkills(formattedSkills);\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n // eslint-disable-next-line no-console\r\n console.error('getUserInfo 调用失败:', err);\r\n message.error('获取简历信息失败');\r\n });\r\n }, []);\r\n\r\n // 当jobTitleMap构建完成后,如果已有jobTitleId,更新label\r\n React.useEffect(() => {\r\n if (currentJobTitleId && Object.keys(jobTitleMap).length > 0) {\r\n const jobTitleLabel = jobTitleMap[currentJobTitleId];\r\n if (jobTitleLabel) {\r\n setJobSelected(prev => ({\r\n ...prev,\r\n id: currentJobTitleId,\r\n label: jobTitleLabel,\r\n }));\r\n setProfile(prev => ({\r\n ...prev,\r\n desiredTitle: jobTitleLabel,\r\n }));\r\n }\r\n }\r\n }, [jobTitleMap, currentJobTitleId]);\r\n\r\n const onEditSection = (section: string) => {\r\n if(section==='求职期望'){\r\n form.setFieldsValue({\r\n desiredSalary: profile.desiredSalary,\r\n desiredCity: profile.desiredCity,\r\n desiredTitle: profile.desiredTitle,\r\n });\r\n setEditVisible(true);\r\n } else {\r\n message.info(`编辑 ${section}`);\r\n }\r\n };\r\n const handleEditOk = async () => {\r\n try {\r\n const values = await form.validateFields();\r\n setProfile(prev => ({ ...prev, ...values }));\r\n setEditVisible(false);\r\n } catch (e) {}\r\n };\r\n const handleEditCancel = () => setEditVisible(false);\r\n\r\n const onAddExperience = () => {\r\n setAddExpVisible(true);\r\n setAddExpForm({ company: '', jobId: undefined, jobTitle: '', period: [], duties: '' });\r\n };\r\n\r\n const onEditExperience = (id: number) => {\r\n const exp = experiences.find(e => e.id === id);\r\n if (!exp) return;\r\n // yyyy年mm月 - yyyy年mm月 => moment数组\r\n setEditExpForm({\r\n company: exp.company,\r\n jobId: undefined,\r\n jobTitle: exp.title,\r\n period: exp.period?.split(' - ').length===2 ? [moment(exp.period.split(' - ')[0],'YYYY年MM月'),moment(exp.period.split(' - ')[1],'YYYY年MM月')] : null,\r\n duties: Array.isArray(exp.duties) ? exp.duties.join('\\n') : exp.duties,\r\n });\r\n setEditExpId(id);\r\n };\r\n\r\n const onDeleteExperience = async (id: number) => {\r\n try {\r\n const res: any = await request('/api/cms/userworkexperiences/'+id, {\r\n method: 'DELETE'\r\n });\r\n if (res && res.code === 200) {\r\n message.success('删除成功');\r\n setExperiences(exps => exps.filter(e => e.id !== id));\r\n } else {\r\n message.error((res && res.msg) || '删除失败');\r\n }\r\n } catch (e) {\r\n message.error('删除失败,请重试');\r\n }\r\n };\r\n\r\n const handleEditClick = () => {\r\n setDraft({\r\n desiredSalary: profile.desiredSalary,\r\n desiredCity: profile.desiredCity,\r\n desiredTitle: profile.desiredTitle\r\n });\r\n // 如果已有选择的岗位,保持选择状态;否则重置\r\n if (!jobSelected || !jobSelected.id) {\r\n setJobSelected({});\r\n }\r\n setEditMode(true);\r\n };\r\n const handleCancel = () => {\r\n setEditMode(false);\r\n };\r\n const handleSave = async () => {\r\n // 验证必填项\r\n if (!profile.salaryMin || !profile.salaryMax) {\r\n message.warning('请填写期望薪资');\r\n return;\r\n }\r\n if (!draft.desiredCity) {\r\n message.warning('请选择期望工作地');\r\n return;\r\n }\r\n if (!jobSelected || !jobSelected.id) {\r\n message.warning('请选择求职岗位');\r\n return;\r\n }\r\n\r\n // 从缓存获取userId\r\n const userId = localStorage.getItem('resume_userId') || profile.userId;\r\n if (!userId) {\r\n message.warning('无法获取用户ID,请刷新页面重试');\r\n return;\r\n }\r\n\r\n try {\r\n const res: any = await request('/api/cms/appUser', {\r\n method: 'PUT',\r\n data: {\r\n userId: userId,\r\n experience: `${profile.salaryMin}-${profile.salaryMax}`,\r\n area: draft.desiredCity,\r\n jobTitleId: jobSelected.id,\r\n },\r\n });\r\n if (res && res.code === 200) {\r\n message.success('保存成功');\r\n // 更新currentJobTitleId,以便后续映射\r\n if (jobSelected && jobSelected.id) {\r\n setCurrentJobTitleId(jobSelected.id);\r\n }\r\n setProfile(prev=>({\r\n ...prev,\r\n desiredSalary: `${profile.salaryMin}-${profile.salaryMax}`,\r\n desiredCity: draft.desiredCity,\r\n desiredTitle: jobSelected?.label || draft.desiredTitle,\r\n }));\r\n setDraft({\r\n desiredSalary: `${profile.salaryMin}-${profile.salaryMax}`,\r\n desiredCity: draft.desiredCity,\r\n desiredTitle: jobSelected?.label || draft.desiredTitle,\r\n });\r\n setEditMode(false);\r\n } else {\r\n message.error((res && res.msg) || '保存失败');\r\n }\r\n } catch (e) {\r\n message.error('保存失败,请重试');\r\n }\r\n };\r\n\r\n const handleSaveExperience = async () => {\r\n if (!addExpForm.company || !addExpForm.jobTitle || !addExpForm.period?.length || !addExpForm.duties) {\r\n message.warning('请填写完整经历信息');\r\n return;\r\n }\r\n setAddExpLoading(true);\r\n const params = {\r\n companyName: addExpForm.company,\r\n position: addExpForm.jobTitle,\r\n startDate: addExpForm.period[0]?.format('YYYY-MM'),\r\n endDate: addExpForm.period[1]?.format('YYYY-MM'),\r\n description: addExpForm.duties\r\n };\r\n try {\r\n await addUserWorkExperience(params);\r\n const periodStr = addExpForm.period[0]?.format('YYYY年MM月') + ' - ' + addExpForm.period[1]?.format('YYYY年MM月');\r\n setExperiences(exps=>([\r\n {\r\n id: Math.max(0, ...exps.map(e => e.id)) + 1,\r\n company: addExpForm.company,\r\n title: addExpForm.jobTitle,\r\n period: periodStr,\r\n duties: addExpForm.duties.split('\\n')\r\n },\r\n ...exps\r\n ]));\r\n setAddExpVisible(false);\r\n message.success('添加成功');\r\n } catch (err) {\r\n message.error('添加失败');\r\n }\r\n setAddExpLoading(false);\r\n };\r\n const handleCancelExperience = () => {\r\n setAddExpVisible(false);\r\n };\r\n\r\n const handleSaveEditExperience = async () => {\r\n if (!editExpForm.company || !editExpForm.jobTitle || !editExpForm.period?.length || !editExpForm.duties) {\r\n message.warning('请填写完整经历信息');\r\n return;\r\n }\r\n if (!editExpId) {\r\n message.warning('无法获取工作经历ID');\r\n return;\r\n }\r\n if (!profile.userId) {\r\n message.warning('无法获取用户ID');\r\n return;\r\n }\r\n\r\n try {\r\n const res: any = await request('/api/cms/userworkexperiences', {\r\n method: 'PUT',\r\n data: {\r\n id: editExpId,\r\n companyName: editExpForm.company,\r\n position: editExpForm.jobTitle || undefined,\r\n userId: profile.userId,\r\n startDate: editExpForm.period[0]?.format('YYYY-MM') || undefined,\r\n endDate: editExpForm.period[1]?.format('YYYY-MM') || undefined,\r\n description: editExpForm.duties || undefined,\r\n },\r\n });\r\n if (res && res.code === 200) {\r\n message.success('修改成功');\r\n const periodStr = editExpForm.period[0]?.format('YYYY年MM月') + ' - ' + editExpForm.period[1]?.format('YYYY年MM月');\r\n setExperiences(exps=>(\r\n exps.map(e=>(e.id!==editExpId ? e : {...e,\r\n company:editExpForm.company,\r\n title:editExpForm.jobTitle,\r\n period:periodStr,\r\n duties: editExpForm.duties.split('\\n')\r\n }))\r\n ));\r\n setEditExpId(null);\r\n } else {\r\n message.error((res && res.msg) || '修改失败');\r\n }\r\n } catch (e) {\r\n message.error('修改失败,请重试');\r\n }\r\n };\r\n const handleCancelEditExperience = () => setEditExpId(null);\r\n\r\n const handleEditSkill = (idx:number) => {\r\n setEditSkillIdx(idx);\r\n setSkillDraft(skills[idx]);\r\n };\r\n const handleSaveSkill = async () => {\r\n if(!skillDraft.name){message.warning('请输入技能名称');return;}\r\n if (editSkillIdx === null) return;\r\n\r\n const skill = skills[editSkillIdx];\r\n if (!skill || !skill.id) {\r\n message.warning('无法获取技能ID');\r\n return;\r\n }\r\n if (!profile.userId) {\r\n message.warning('无法获取用户ID');\r\n return;\r\n }\r\n\r\n try {\r\n const res: any = await request('/api/cms/appskill/edit', {\r\n method: 'PUT',\r\n data: {\r\n id: skill.id,\r\n userId: profile.userId,\r\n name: skillDraft.name,\r\n levels: skillDraft.level,\r\n },\r\n });\r\n if (res && res.code === 200) {\r\n message.success('修改成功');\r\n setSkills(arr=>arr.map((v,i)=>i===editSkillIdx?{...v,name:skillDraft.name,level:skillDraft.level}:v));\r\n setEditSkillIdx(null);\r\n } else {\r\n message.error((res && res.msg) || '修改失败');\r\n }\r\n } catch (e) {\r\n message.error('修改失败,请重试');\r\n }\r\n };\r\n const handleDeleteSkill = async (idx:number) => {\r\n if(skills.length<=1){message.warning('至少保留一条技能');return;}\r\n const skill = skills[idx];\r\n if (!skill || !skill.id) {\r\n message.warning('无法获取技能ID');\r\n return;\r\n }\r\n try {\r\n const res: any = await request(`/api/app/appskill/${skill.id}`, {\r\n method: 'DELETE',\r\n });\r\n if (res && res.code === 200) {\r\n message.success('删除成功');\r\n setSkills(arr => arr.filter((v,i)=>i!==idx));\r\n } else {\r\n message.error((res && res.msg) || '删除失败');\r\n }\r\n } catch (e) {\r\n message.error('删除失败,请重试');\r\n }\r\n };\r\n const handleCancelSkill = () => setEditSkillIdx(null);\r\n const handleAddSkill = () => {\r\n setAddSkillMode(true); setSkillDraft({ name: '', level: '初级' });\r\n };\r\n const handleSaveAddSkill = async () => {\r\n if(!skillDraft.name){message.warning('请输入技能名称');return;}\r\n try {\r\n const res: any = await request('/api/cms/appskill/add', {\r\n method: 'POST',\r\n data: { name: skillDraft.name, levels: skillDraft.level },\r\n });\r\n if (res && res.code === 200) {\r\n // 保存返回的技能ID\r\n const newSkill = {\r\n id: res.data?.id,\r\n name: skillDraft.name,\r\n level: skillDraft.level,\r\n };\r\n setSkills(arr=>[...arr, newSkill]);\r\n setAddSkillMode(false);\r\n message.success('新增技能成功');\r\n } else {\r\n message.error((res && res.msg) || '新增技能失败');\r\n }\r\n } catch (e) {\r\n message.error('新增技能失败');\r\n }\r\n };\r\n const handleCancelAddSkill = () => setAddSkillMode(false);\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n {/* 头部-个人信息 */}\r\n
\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n \r\n {profile.name || '未填写'}\r\n } onClick={() => onEditSection('个人信息')} />\r\n \r\n \r\n \r\n {profile.gender || ''}\r\n {profile.age ? (getDictText('age', profile.age) || profile.age) + '岁' : ''}\r\n {getDictText('education', profile.education) || profile.education}\r\n \r\n {profile.phone && {profile.phone}}\r\n \r\n \r\n \r\n
\r\n \r\n\r\n {/* 求职期望 */}\r\n
求职期望}\r\n extra={\r\n editMode ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n } onClick={handleEditClick} />\r\n )\r\n }>\r\n {editMode ? (\r\n \r\n \r\n setProfile(p=>({...p,salaryMin:e.target.value}))}\r\n />\r\n -\r\n setProfile(p=>({...p,salaryMax:e.target.value}))}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n setJobTitleModalOpen(true)}\r\n />\r\n \r\n setJobTitleModalOpen(false)}\r\n onOk={(val)=>{\r\n setDraft(d=>({...d,desiredTitle:val.label}));\r\n setJobSelected(val);\r\n setJobTitleModalOpen(false);\r\n }}\r\n value={\r\n jobSelected && jobSelected.id\r\n ? { id: jobSelected.id, label: jobSelected.label || '' }\r\n : (draft.desiredTitle ? {id:0,label:draft.desiredTitle} : undefined)\r\n }\r\n />\r\n \r\n ) : (\r\n \r\n \r\n 期望薪资:\r\n \r\n {profile.salaryMin && profile.salaryMax\r\n ? `${profile.salaryMin}-${profile.salaryMax}`\r\n : profile.desiredSalary || '未填写'}\r\n \r\n \r\n \r\n 期望工作地:\r\n \r\n \r\n {getDictText('area', profile.desiredCity) || profile.desiredCity || '未填写'}\r\n \r\n \r\n \r\n 求职岗位:\r\n \r\n {jobSelected && jobSelected.id && jobTitleMap[jobSelected.id]\r\n ? jobTitleMap[jobSelected.id]\r\n : (profile.desiredTitle || '未填写')}\r\n \r\n \r\n
\r\n )}\r\n \r\n\r\n {/* 求职期望面板下方 */}\r\n
我的技能}\r\n extra={\r\n \r\n }\r\n >\r\n {skills.length === 0 && !addSkillMode ? (\r\n 暂无技能信息,请添加技能
\r\n ) : (\r\n skills.map((item, idx) => (\r\n editSkillIdx === idx ? (\r\n \r\n \r\n \r\n setSkillDraft(d => ({ ...d, name: value }))}\r\n onSelect={(value) => setSkillDraft(d => ({ ...d, name: value }))}\r\n allowClear\r\n style={{ width: '100%' }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n } size=\"small\" onClick={handleSaveSkill} />\r\n \r\n
\r\n ) : (\r\n \r\n \r\n {item.name}\r\n \r\n \r\n {item.level}\r\n \r\n \r\n {(!addSkillMode && editSkillIdx === null) && (\r\n \r\n } onClick={() => handleEditSkill(idx)} />\r\n } disabled={skills.length <= 1} onClick={() => handleDeleteSkill(idx)} />\r\n \r\n )}\r\n \r\n
\r\n )\r\n ))\r\n )}\r\n {addSkillMode && (\r\n \r\n \r\n \r\n setSkillDraft(d => ({ ...d, name: value }))}\r\n onSelect={(value) => setSkillDraft(d => ({ ...d, name: value }))}\r\n allowClear\r\n style={{ width: '100%' }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n } size=\"small\" onClick={handleSaveAddSkill} />\r\n \r\n
\r\n )}\r\n \r\n\r\n {/* 工作经历 */}\r\n
工作经历}\r\n extra={} onClick={onAddExperience}>添加经历}\r\n >\r\n {addExpVisible && (\r\n \r\n \r\n setAddExpTitleModal(false)}\r\n onOk={val=>{\r\n setAddExpForm(f=>({...f,jobTitle:val.label,jobId:val.id}));\r\n setAddExpTitleModal(false);\r\n }}\r\n />\r\n \r\n )}\r\n {experiences.length === 0 && !addExpVisible ? (\r\n 暂无工作经历,请添加工作经历
\r\n ) : (\r\n (\r\n editExpId===exp.id ? (\r\n \r\n \r\n setEditExpTitleModal(false)}\r\n onOk={val=>{\r\n setEditExpForm(f=>({...f,jobTitle:val.label,jobId:val.id}));\r\n setEditExpTitleModal(false);\r\n }}\r\n />\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n {exp.company}\r\n {exp.title}\r\n \r\n \r\n \r\n {exp.period}\r\n \r\n \r\n }\r\n description={\r\n \r\n {exp.duties.map((duty, idx) => (\r\n
{idx + 1}、{duty}
\r\n ))}\r\n
\r\n }\r\n />\r\n \r\n } onClick={()=>onEditExperience(exp.id)} />\r\n \r\n \r\n } onClick={() => onDeleteExperience(exp.id)} />\r\n \r\n \r\n )\r\n )}\r\n />\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ResumePage;\r\n\r\n\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/Resume/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/Resume/index.tsx"
},
"10": {
"path": "/job-portal/profile",
@@ -4009,7 +4039,7 @@
"absPath": "/job-portal/profile",
"__content": "import React from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Avatar,\r\n Typography,\r\n Button,\r\n Space,\r\n Divider,\r\n Tag,\r\n List,\r\n Badge,\r\n Progress\r\n} from 'antd';\r\nimport {\r\n UserOutlined,\r\n EditOutlined,\r\n SettingOutlined,\r\n FileTextOutlined,\r\n HeartOutlined,\r\n EyeOutlined,\r\n MessageOutlined,\r\n CalendarOutlined,\r\n EnvironmentOutlined,\r\n PhoneOutlined,\r\n MailOutlined\r\n} from '@ant-design/icons';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport './index.less';\r\n\r\nconst { Title, Text, Paragraph } = Typography;\r\n\r\nconst JobPortalProfile: React.FC = () => {\r\n // 模拟用户数据\r\n const userInfo = {\r\n name: '冯辉',\r\n avatar: '',\r\n title: '前端开发工程师',\r\n location: '青岛·市南区',\r\n experience: '3年工作经验',\r\n education: '本科',\r\n phone: '138****8888',\r\n email: 'fenghui@example.com',\r\n lastLogin: '2024-01-15 14:30',\r\n profileCompleteness: 85,\r\n resumeViews: 128,\r\n jobApplications: 12,\r\n interviews: 3,\r\n offers: 1\r\n };\r\n\r\n // 模拟简历数据\r\n const resumeData = {\r\n title: '前端开发工程师简历',\r\n updateTime: '2024-01-10',\r\n status: 'active', // active, inactive\r\n completeness: 85\r\n };\r\n\r\n // 模拟求职记录\r\n const jobRecords = [\r\n {\r\n id: 1,\r\n company: '青岛智能科技有限公司',\r\n position: '前端开发工程师',\r\n status: '已投递',\r\n date: '2024-01-15',\r\n type: 'applied'\r\n },\r\n {\r\n id: 2,\r\n company: '青岛数据科技公司',\r\n position: '高级前端开发工程师',\r\n status: '面试邀请',\r\n date: '2024-01-12',\r\n type: 'interview'\r\n },\r\n {\r\n id: 3,\r\n company: '青岛互联网科技有限公司',\r\n position: '前端技术专家',\r\n status: '已录用',\r\n date: '2024-01-08',\r\n type: 'offered'\r\n }\r\n ];\r\n\r\n // 模拟收藏职位\r\n const favoriteJobs = [\r\n {\r\n id: 1,\r\n title: 'Java高级开发工程师',\r\n company: '青岛科技发展有限公司',\r\n salary: '15k-25k',\r\n location: '青岛·李沧区',\r\n tags: ['五险一金', '带薪年假', '年终奖']\r\n },\r\n {\r\n id: 2,\r\n title: 'Python开发工程师',\r\n company: '青岛数据科技公司',\r\n salary: '14k-22k',\r\n location: '青岛·崂山区',\r\n tags: ['五险一金', '技术培训', '团建活动']\r\n }\r\n ];\r\n\r\n const getStatusColor = (type: string) => {\r\n switch (type) {\r\n case 'applied':\r\n return 'blue';\r\n case 'interview':\r\n return 'orange';\r\n case 'offered':\r\n return 'green';\r\n default:\r\n return 'default';\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n
\r\n {/* 个人信息卡片 */}\r\n
\r\n \r\n \r\n \r\n
} />\r\n
}\r\n className=\"edit-avatar-btn\"\r\n >\r\n 更换头像\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
{userInfo.name}\r\n }>\r\n 编辑资料\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {userInfo.title}\r\n
\r\n \r\n \r\n {userInfo.location}\r\n
\r\n \r\n \r\n {userInfo.experience}\r\n
\r\n \r\n \r\n {userInfo.education}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
{userInfo.phone}\r\n
\r\n \r\n \r\n {userInfo.email}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n {/* 左侧内容 */}\r\n \r\n {/* 简历管理 */}\r\n \r\n \r\n
\r\n
\r\n
{resumeData.title}\r\n 最后更新:{resumeData.updateTime}\r\n \r\n
\r\n }>预览\r\n }>编辑\r\n \r\n
\r\n
\r\n \r\n {resumeData.status === 'active' ? '已发布' : '未发布'}\r\n \r\n 完整度:{resumeData.completeness}%\r\n
\r\n
\r\n \r\n\r\n {/* 求职记录 */}\r\n \r\n (\r\n 查看详情\r\n ]}\r\n >\r\n \r\n {item.position}\r\n {item.status}\r\n \r\n }\r\n description={\r\n \r\n {item.company}\r\n \r\n {item.date}\r\n \r\n }\r\n />\r\n \r\n )}\r\n />\r\n
\r\n\r\n {/* 收藏职位 */}\r\n \r\n (\r\n 查看,\r\n \r\n ]}\r\n >\r\n \r\n {job.title}\r\n {job.salary}\r\n \r\n }\r\n description={\r\n \r\n
{job.company} · {job.location}
\r\n
\r\n {job.tags.map((tag, index) => (\r\n {tag}\r\n ))}\r\n
\r\n
\r\n }\r\n />\r\n \r\n )}\r\n />\r\n
\r\n \r\n\r\n {/* 右侧统计 */}\r\n \r\n {/* 数据统计 */}\r\n \r\n \r\n
\r\n
{userInfo.resumeViews}
\r\n
简历被查看
\r\n
\r\n
\r\n
{userInfo.jobApplications}
\r\n
投递职位
\r\n
\r\n
\r\n
{userInfo.interviews}
\r\n
面试邀请
\r\n
\r\n
\r\n
{userInfo.offers}
\r\n
收到offer
\r\n
\r\n
\r\n \r\n\r\n {/* 快捷操作 */}\r\n \r\n \r\n }\r\n size=\"large\"\r\n >\r\n 完善简历\r\n \r\n }\r\n size=\"large\"\r\n >\r\n 我的收藏\r\n \r\n }\r\n size=\"large\"\r\n >\r\n 消息中心\r\n \r\n }\r\n size=\"large\"\r\n >\r\n 账户设置\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default JobPortalProfile;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/Profile/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/Profile/index.tsx"
},
"11": {
"path": "/job-portal/personal-center",
@@ -4019,7 +4049,7 @@
"absPath": "/job-portal/personal-center",
"__content": "import React, { useState, useEffect, useMemo } from 'react';\r\nimport {\r\n Card,\r\n Avatar,\r\n Typography,\r\n Button,\r\n Space,\r\n Row,\r\n Col,\r\n List,\r\n Progress,\r\n message,\r\n Spin\r\n} from 'antd';\r\nimport {\r\n UserOutlined,\r\n EditOutlined,\r\n EyeOutlined,\r\n RightOutlined,\r\n HeartOutlined,\r\n SafetyCertificateOutlined,\r\n ClockCircleOutlined,\r\n RobotOutlined,\r\n BellOutlined,\r\n HomeOutlined,\r\n CalendarOutlined as JobFairOutlined,\r\n MessageOutlined,\r\n UserOutlined as MyOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport useAppUserModel from '@/models/jobportal/user';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport { getMyTj } from '@/services/jobportal/user';\r\nimport defaultAvatar from '@/assets/avatar.jpg';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\n// 计算简历完成度\r\nconst calculateResumeCompleteness = (userInfo: API.AppUserInfo | null): number => {\r\n if (!userInfo) return 0;\r\n\r\n let completedFields = 0;\r\n const totalFields = 10;\r\n\r\n // 基本信息\r\n if (userInfo.name) completedFields++;\r\n if (userInfo.sex) completedFields++;\r\n if (userInfo.education) completedFields++;\r\n if (userInfo.phone) completedFields++;\r\n if (userInfo.avatar) completedFields++;\r\n // 工作期望\r\n if (userInfo.salaryMin && userInfo.salaryMax) completedFields++;\r\n if (userInfo.area) completedFields++;\r\n if (userInfo.jobTitleId) completedFields++;\r\n // 工作经历\r\n if (userInfo.experiencesList && userInfo.experiencesList.length > 0) completedFields++;\r\n // 技能\r\n if (userInfo.appSkillsList && userInfo.appSkillsList.length > 0) completedFields++;\r\n\r\n return Math.round((completedFields / totalFields) * 100);\r\n};\r\n\r\nconst PersonalCenter: React.FC = () => {\r\n const { userInfo, loading, fetchUserInfo } = useAppUserModel();\r\n const [dictData, setDictData] = useState<{\r\n sex?: Record;\r\n education?: Record;\r\n area?: Record;\r\n age?: Record;\r\n }>({});\r\n\r\n // 获取字典数据\r\n useEffect(() => {\r\n Promise.all([\r\n getDictValueEnum('sex', false, true),\r\n getDictValueEnum('education', false, true),\r\n getDictValueEnum('area', false, true),\r\n getDictValueEnum('age', false, true),\r\n ]).then(([sexData, educationData, areaData, ageData]) => {\r\n setDictData({\r\n sex: sexData,\r\n education: educationData,\r\n area: areaData,\r\n age: ageData,\r\n });\r\n });\r\n }, []);\r\n\r\n // 获取用户信息\r\n useEffect(() => {\r\n fetchUserInfo();\r\n }, [fetchUserInfo]);\r\n\r\n // 获取字典文本\r\n const getDictText = (type: 'sex' | 'education' | 'area' | 'age', value: string | undefined): string => {\r\n if (!value) return '';\r\n const dict = dictData[type];\r\n if (dict && dict[value]) {\r\n return dict[value].text || dict[value].label || value;\r\n }\r\n return value;\r\n };\r\n\r\n // 获取简历完成度\r\n const resumeCompleteness = calculateResumeCompleteness(userInfo);\r\n const resumeStatus = resumeCompleteness >= 80 ? '已完成' : resumeCompleteness >= 60 ? '建议优化' : '待完善';\r\n\r\n // 获取最新的工作经历作为职位\r\n const getLatestPosition = (): string => {\r\n if (userInfo?.experiencesList && userInfo.experiencesList.length > 0) {\r\n const sorted = [...userInfo.experiencesList].sort((a, b) => {\r\n const aDate = a.startDate ? new Date(a.startDate).getTime() : 0;\r\n const bDate = b.startDate ? new Date(b.startDate).getTime() : 0;\r\n return bDate - aDate;\r\n });\r\n return sorted[0]?.position || '暂无职位信息';\r\n }\r\n return '暂无职位信息';\r\n };\r\n\r\n const [statistics, setStatistics] = useState({\r\n applications: 0,\r\n favorites: 0,\r\n footprints: 0,\r\n appointments: 0\r\n });\r\n\r\n // 获取统计数据\r\n useEffect(() => {\r\n const fetchStatistics = async () => {\r\n try {\r\n const response = await getMyTj();\r\n if (response?.code === 200 && response?.data) {\r\n setStatistics({\r\n applications: Number(response.data.ytd) || 0,\r\n favorites: Number(response.data.ysc) || 0,\r\n footprints: Number(response.data.yzj) || 0,\r\n appointments: Number(response.data.yyy) || 0,\r\n });\r\n }\r\n } catch (error) {\r\n console.error('获取统计数据失败:', error);\r\n }\r\n };\r\n fetchStatistics();\r\n }, []);\r\n\r\n // 判断是否实名认证:根据 userInfo 的 idCard 字段\r\n const isRealNameVerified = useMemo(() => {\r\n return !!(userInfo?.idCard && userInfo.idCard.trim());\r\n }, [userInfo?.idCard]);\r\n\r\n // 服务列表,根据用户信息动态生成\r\n const services = useMemo(() => [\r\n {\r\n id: 1,\r\n title: '实名认证',\r\n icon: ,\r\n status: isRealNameVerified ? '已认证' : '',\r\n hasArrow: !isRealNameVerified,\r\n color: isRealNameVerified ? '#52c41a' : '#8c8c8c'\r\n },\r\n {\r\n id: 2,\r\n title: '素质测评',\r\n icon: ,\r\n status: '',\r\n hasArrow: true,\r\n color: '#1890ff'\r\n },\r\n {\r\n id: 3,\r\n title: 'AI面试',\r\n icon: ,\r\n status: '',\r\n hasArrow: true,\r\n color: '#722ed1'\r\n },\r\n {\r\n id: 4,\r\n title: '通知与提醒',\r\n icon: ,\r\n status: '已开启',\r\n hasArrow: false,\r\n color: '#fa8c16'\r\n }\r\n ], [isRealNameVerified]);\r\n\r\n const handleEditResume = () => {\r\n message.info('跳转到简历编辑页面');\r\n // history.push('/job-portal/resume/edit');\r\n };\r\n\r\n const handleServiceClick = (service: any) => {\r\n if (service.hasArrow) {\r\n message.info(`跳转到${service.title}页面`);\r\n // 根据服务类型跳转到不同页面\r\n switch (service.id) {\r\n case 2:\r\n // history.push('/job-portal/assessment');\r\n break;\r\n case 3:\r\n // history.push('/job-portal/ai-interview');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n };\r\n\r\n\r\n const handleNavClick = (path: string) => {\r\n history.push(path);\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n {/* 用户信息头部 */}\r\n \r\n
\r\n
}\r\n className=\"user-avatar\"\r\n />\r\n
\r\n
{userInfo?.name || '未登录'}\r\n \r\n 简历完成度{resumeCompleteness}%, {resumeStatus}\r\n \r\n \r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n\r\n {/* 统计数据 */}\r\n \r\n
\r\n \r\n history.push('/job-portal/personal-center/applications')}>\r\n
{statistics.applications}
\r\n
投递
\r\n
\r\n \r\n \r\n history.push('/job-portal/personal-center/favorites')}>\r\n
{statistics.favorites}
\r\n
收藏
\r\n
\r\n \r\n \r\n history.push('/job-portal/personal-center/footprints')}>\r\n
{statistics.footprints}
\r\n
足迹
\r\n
\r\n \r\n \r\n \r\n
{statistics.appointments}
\r\n
预约
\r\n
\r\n \r\n
\r\n
\r\n\r\n {/* 简历信息卡片 */}\r\n \r\n \r\n
\r\n
\r\n \r\n {userInfo?.name || '未登录'} | {getDictText('education', userInfo?.education) || '未填写'}\r\n \r\n
\r\n
\r\n {getLatestPosition()}\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n {/* 服务专区 */}\r\n \r\n
服务专区\r\n
(\r\n handleServiceClick(service)}\r\n >\r\n \r\n
\r\n {service.icon}\r\n
\r\n
\r\n {service.title}\r\n {service.status && (\r\n {service.status}\r\n )}\r\n
\r\n
\r\n {service.hasArrow && }\r\n \r\n )}\r\n />\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PersonalCenter;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/PersonalCenter/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/PersonalCenter/index.tsx"
},
"12": {
"path": "/job-portal/personal-center/applications",
@@ -4029,7 +4059,7 @@
"absPath": "/job-portal/personal-center/applications",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Typography,\r\n Button,\r\n Empty,\r\n message,\r\n Spin\r\n} from 'antd';\r\nimport {\r\n EnvironmentOutlined,\r\n ArrowLeftOutlined,\r\n ClockCircleOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport { getAppUserYhsq } from '@/services/jobportal/user';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限',\r\n '-1': '不限',\r\n};\r\n\r\n// 格式化工作经验显示\r\nconst formatExperience = (experience?: string): string => {\r\n if (!experience) return '不限';\r\n return experienceMap[experience] || experience;\r\n};\r\n\r\n// 从缓存获取用户信息\r\nconst getUserIdFromCache = (): number | null => {\r\n try {\r\n const cached = localStorage.getItem('userInfo');\r\n if (cached) {\r\n const userInfo = JSON.parse(cached);\r\n return userInfo?.userId || null;\r\n }\r\n } catch (error) {\r\n console.error('读取缓存用户信息失败:', error);\r\n }\r\n return null;\r\n};\r\n\r\n// 格式化时间\r\nconst formatTime = (time?: string): string => {\r\n if (!time) return '';\r\n try {\r\n const date = new Date(time);\r\n return date.toLocaleString('zh-CN', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n } catch (error) {\r\n return time;\r\n }\r\n};\r\n\r\n// 格式化薪资显示\r\nconst formatSalary = (minSalary?: number, maxSalary?: number): string => {\r\n if (minSalary && maxSalary) {\r\n // 将薪资转换为K单位显示\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `${minK}-${maxK}`;\r\n } else if (minSalary) {\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n return `${minK}起`;\r\n } else if (maxSalary) {\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `最高${maxK}`;\r\n }\r\n return '面议';\r\n};\r\n\r\n// 获取状态标签颜色\r\nconst getStatusColor = (status?: string): string => {\r\n if (!status) return 'blue';\r\n const statusMap: Record = {\r\n '已投递': 'blue',\r\n '已查看': 'green',\r\n '已通过': 'success',\r\n '已拒绝': 'red',\r\n '已面试': 'orange',\r\n };\r\n return statusMap[status] || 'blue';\r\n};\r\n\r\nconst ApplicationsPage: React.FC = () => {\r\n const [applications, setApplications] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // 获取已投递岗位列表\r\n useEffect(() => {\r\n const fetchApplications = async () => {\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('请先登录');\r\n history.push('/job-portal/personal-center');\r\n return;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n const response = await getAppUserYhsq({ userId });\r\n if (response?.code === 200 && response?.data) {\r\n setApplications(response.data);\r\n } else {\r\n message.error(response?.msg || '获取已投递岗位列表失败');\r\n }\r\n } catch (error) {\r\n console.error('获取已投递岗位列表失败:', error);\r\n message.error('获取已投递岗位列表失败');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchApplications();\r\n }, []);\r\n\r\n const handleBack = () => {\r\n history.push('/job-portal/personal-center');\r\n };\r\n\r\n const handleJobClick = (job: API.ApplicationJob) => {\r\n // 跳转到岗位详情页,通过 state 传递完整的岗位数据\r\n history.push('/job-portal/detail', { jobData: job });\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n \r\n {/* 返回按钮 */}\r\n
\r\n }\r\n onClick={handleBack}\r\n >\r\n 返回个人中心\r\n \r\n
\r\n\r\n {/* 页面标题 */}\r\n
\r\n
已投递岗位\r\n 共 {applications.length} 条记录\r\n \r\n\r\n {/* 岗位列表 */}\r\n {applications.length === 0 && !loading ? (\r\n
\r\n ) : (\r\n
\r\n {applications.map((job, index) => (\r\n
handleJobClick(job)}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n {job.title || job.jobTitle || '未知岗位'}\r\n \r\n \r\n {job.salary || formatSalary(job.minSalary, job.maxSalary)}\r\n \r\n \r\n
\r\n {job.company || job.companyName || '未知公司'}\r\n \r\n {job.jobLocation || job.location || job.area || '未知地区'}\r\n \r\n
\r\n {(job.experience || (job.vacancies !== undefined && job.vacancies !== null)) && (\r\n
\r\n {job.experience && (\r\n \r\n 经验:{formatExperience(job.experience)}\r\n \r\n )}\r\n {job.vacancies !== undefined && job.vacancies !== null && (\r\n \r\n 招聘{job.vacancies}人\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n \r\n \r\n 投递时间:{formatTime(job.shareTime)}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {job.status || job.statusText || '已投递'}\r\n \r\n
\r\n \r\n
\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ApplicationsPage;\r\n\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/PersonalCenter/Applications/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/PersonalCenter/Applications/index.tsx"
},
"13": {
"path": "/job-portal/personal-center/favorites",
@@ -4039,7 +4069,7 @@
"absPath": "/job-portal/personal-center/favorites",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Typography,\r\n Button,\r\n Empty,\r\n message,\r\n Popconfirm,\r\n Spin\r\n} from 'antd';\r\nimport {\r\n EnvironmentOutlined,\r\n ArrowLeftOutlined,\r\n HeartFilled,\r\n DeleteOutlined,\r\n ClockCircleOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport { getAppUserYhsc, unfavoriteJob } from '@/services/jobportal/user';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限',\r\n '-1': '不限',\r\n};\r\n\r\n// 格式化工作经验显示\r\nconst formatExperience = (experience?: string): string => {\r\n if (!experience) return '不限';\r\n return experienceMap[experience] || experience;\r\n};\r\n\r\n// 从缓存获取用户信息\r\nconst getUserIdFromCache = (): number | null => {\r\n try {\r\n const cached = localStorage.getItem('userInfo');\r\n if (cached) {\r\n const userInfo = JSON.parse(cached);\r\n return userInfo?.userId || null;\r\n }\r\n } catch (error) {\r\n console.error('读取缓存用户信息失败:', error);\r\n }\r\n return null;\r\n};\r\n\r\n// 格式化时间\r\nconst formatTime = (time?: string): string => {\r\n if (!time) return '';\r\n try {\r\n const date = new Date(time);\r\n return date.toLocaleString('zh-CN', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n } catch (error) {\r\n return time;\r\n }\r\n};\r\n\r\n// 格式化薪资显示\r\nconst formatSalary = (minSalary?: number, maxSalary?: number): string => {\r\n if (minSalary && maxSalary) {\r\n // 将薪资转换为K单位显示\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `${minK}-${maxK}`;\r\n } else if (minSalary) {\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n return `${minK}起`;\r\n } else if (maxSalary) {\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `最高${maxK}`;\r\n }\r\n return '面议';\r\n};\r\n\r\nconst FavoritesPage: React.FC = () => {\r\n const [favorites, setFavorites] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // 获取收藏岗位列表\r\n useEffect(() => {\r\n const fetchFavorites = async () => {\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('请先登录');\r\n history.push('/job-portal/personal-center');\r\n return;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n const response = await getAppUserYhsc({ userId });\r\n if (response?.code === 200 && response?.data) {\r\n setFavorites(response.data);\r\n } else {\r\n message.error(response?.msg || '获取收藏岗位列表失败');\r\n }\r\n } catch (error) {\r\n console.error('获取收藏岗位列表失败:', error);\r\n message.error('获取收藏岗位列表失败');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchFavorites();\r\n }, []);\r\n\r\n const handleBack = () => {\r\n history.push('/job-portal/personal-center');\r\n };\r\n\r\n const handleJobClick = (job: API.ApplicationJob) => {\r\n // 跳转到岗位详情页,通过 state 传递完整的岗位数据\r\n history.push('/job-portal/detail', { jobData: job });\r\n };\r\n\r\n const handleRemoveFavorite = async (job: API.ApplicationJob, e?: React.MouseEvent) => {\r\n // 阻止事件冒泡,防止跳转到详情页\r\n if (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n // 获取用户ID\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('无法获取用户信息,请重新登录');\r\n return;\r\n }\r\n\r\n // 获取职位ID\r\n const jobId = job.jobId || job.id;\r\n if (!jobId) {\r\n message.error('职位信息不完整,无法取消收藏');\r\n return;\r\n }\r\n\r\n try {\r\n const response = await unfavoriteJob({ jobId, userId });\r\n if (response?.code === 200) {\r\n // 从列表中移除\r\n setFavorites(favorites.filter(item => (item.jobId || item.id) !== (job.jobId || job.id)));\r\n message.success('已取消收藏');\r\n } else {\r\n message.error(response?.msg || '取消收藏失败');\r\n }\r\n } catch (error) {\r\n console.error('取消收藏失败:', error);\r\n message.error('取消收藏失败,请重试');\r\n }\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n \r\n {/* 返回按钮 */}\r\n
\r\n }\r\n onClick={handleBack}\r\n >\r\n 返回个人中心\r\n \r\n
\r\n\r\n {/* 页面标题 */}\r\n
\r\n
\r\n \r\n 收藏岗位\r\n \r\n 共 {favorites.length} 条记录\r\n \r\n\r\n {/* 岗位列表 */}\r\n {favorites.length === 0 && !loading ? (\r\n
\r\n ) : (\r\n
\r\n {favorites.map((job, index) => (\r\n
handleJobClick(job)}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n {job.title || job.jobTitle || '未知岗位'}\r\n \r\n \r\n {job.salary || formatSalary(job.minSalary, job.maxSalary)}\r\n \r\n \r\n
\r\n {job.company || job.companyName || '未知公司'}\r\n \r\n {job.jobLocation || job.location || job.area || '未知地区'}\r\n \r\n
\r\n {(job.experience || (job.vacancies !== undefined && job.vacancies !== null)) && (\r\n
\r\n {job.experience && (\r\n \r\n 经验:{formatExperience(job.experience)}\r\n \r\n )}\r\n {job.vacancies !== undefined && job.vacancies !== null && (\r\n \r\n 招聘{job.vacancies}人\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n \r\n \r\n 收藏时间:{formatTime(job.shareTime)}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n e.stopPropagation()}>\r\n
{\r\n // 阻止事件冒泡\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n handleRemoveFavorite(job, e);\r\n }}\r\n >\r\n }\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n 取消收藏\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FavoritesPage;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/PersonalCenter/Favorites/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/PersonalCenter/Favorites/index.tsx"
},
"14": {
"path": "/job-portal/personal-center/footprints",
@@ -4049,154 +4079,182 @@
"absPath": "/job-portal/personal-center/footprints",
"__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n Row,\r\n Col,\r\n Tag,\r\n Space,\r\n Typography,\r\n Button,\r\n Empty,\r\n message,\r\n Spin\r\n} from 'antd';\r\nimport {\r\n EnvironmentOutlined,\r\n ArrowLeftOutlined,\r\n EyeOutlined,\r\n ClockCircleOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport { getAppUserYhfwzj } from '@/services/jobportal/user';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\n// 工作经验字典映射\r\nconst experienceMap: { [key: string]: string } = {\r\n '1': '1年以下',\r\n '2': '1-3年',\r\n '3': '3-5年',\r\n '4': '5-10年',\r\n '5': '10年以上',\r\n '0': '不限',\r\n '-1': '不限',\r\n};\r\n\r\n// 格式化工作经验显示\r\nconst formatExperience = (experience?: string): string => {\r\n if (!experience) return '不限';\r\n return experienceMap[experience] || experience;\r\n};\r\n\r\n// 从缓存获取用户信息\r\nconst getUserIdFromCache = (): number | null => {\r\n try {\r\n const cached = localStorage.getItem('userInfo');\r\n if (cached) {\r\n const userInfo = JSON.parse(cached);\r\n return userInfo?.userId || null;\r\n }\r\n } catch (error) {\r\n console.error('读取缓存用户信息失败:', error);\r\n }\r\n return null;\r\n};\r\n\r\n// 格式化时间\r\nconst formatTime = (time?: string): string => {\r\n if (!time) return '';\r\n try {\r\n const date = new Date(time);\r\n return date.toLocaleString('zh-CN', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n } catch (error) {\r\n return time;\r\n }\r\n};\r\n\r\n// 格式化薪资显示\r\nconst formatSalary = (minSalary?: number, maxSalary?: number): string => {\r\n if (minSalary && maxSalary) {\r\n // 将薪资转换为K单位显示\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `${minK}-${maxK}`;\r\n } else if (minSalary) {\r\n const minK = minSalary >= 1000 ? `${minSalary / 1000}K` : minSalary.toString();\r\n return `${minK}起`;\r\n } else if (maxSalary) {\r\n const maxK = maxSalary >= 1000 ? `${maxSalary / 1000}K` : maxSalary.toString();\r\n return `最高${maxK}`;\r\n }\r\n return '面议';\r\n};\r\n\r\nconst FootprintsPage: React.FC = () => {\r\n const [footprints, setFootprints] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // 获取访问足迹岗位列表\r\n useEffect(() => {\r\n const fetchFootprints = async () => {\r\n const userId = getUserIdFromCache();\r\n if (!userId) {\r\n message.warning('请先登录');\r\n history.push('/job-portal/personal-center');\r\n return;\r\n }\r\n\r\n try {\r\n setLoading(true);\r\n const response = await getAppUserYhfwzj({ userId });\r\n if (response?.code === 200 && response?.data) {\r\n setFootprints(response.data);\r\n } else {\r\n message.error(response?.msg || '获取访问足迹列表失败');\r\n }\r\n } catch (error) {\r\n console.error('获取访问足迹列表失败:', error);\r\n message.error('获取访问足迹列表失败');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n fetchFootprints();\r\n }, []);\r\n\r\n const handleBack = () => {\r\n history.push('/job-portal/personal-center');\r\n };\r\n\r\n const handleJobClick = (job: API.ApplicationJob) => {\r\n // 跳转到岗位详情页,通过 state 传递完整的岗位数据\r\n history.push('/job-portal/detail', { jobData: job });\r\n };\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n \r\n {/* 返回按钮 */}\r\n
\r\n }\r\n onClick={handleBack}\r\n >\r\n 返回个人中心\r\n \r\n
\r\n\r\n {/* 页面标题 */}\r\n
\r\n
\r\n \r\n 访问足迹\r\n \r\n 共 {footprints.length} 条记录\r\n \r\n\r\n {/* 岗位列表 */}\r\n {footprints.length === 0 && !loading ? (\r\n
\r\n ) : (\r\n
\r\n {footprints.map((job, index) => (\r\n
handleJobClick(job)}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n {job.title || job.jobTitle || '未知岗位'}\r\n \r\n \r\n {job.salary || formatSalary(job.minSalary, job.maxSalary)}\r\n \r\n \r\n
\r\n {job.company || job.companyName || '未知公司'}\r\n \r\n {job.jobLocation || job.location || job.area || '未知地区'}\r\n \r\n
\r\n {(job.experience || (job.vacancies !== undefined && job.vacancies !== null)) && (\r\n
\r\n {job.experience && (\r\n \r\n 经验:{formatExperience(job.experience)}\r\n \r\n )}\r\n {job.vacancies !== undefined && job.vacancies !== null && (\r\n \r\n 招聘{job.vacancies}人\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n \r\n \r\n 访问时间:{formatTime(job.shareTime)}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n 已访问\r\n \r\n
\r\n \r\n
\r\n \r\n ))}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FootprintsPage;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/JobPortal/PersonalCenter/Footprints/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/PersonalCenter/Footprints/index.tsx"
},
"15": {
- "path": "/account",
- "parentId": "ant-design-pro-layout",
+ "path": "/job-portal/message",
+ "file": "@/pages/JobPortal/Message/index.tsx",
+ "parentId": "5",
"id": "15",
- "absPath": "/account"
+ "absPath": "/job-portal/message",
+ "__content": "import React, { useState, useEffect } from 'react';\r\nimport {\r\n Card,\r\n List,\r\n Badge,\r\n Button,\r\n Space,\r\n Typography,\r\n Tag,\r\n Empty,\r\n Spin,\r\n message as antdMessage,\r\n Popconfirm,\r\n Tabs,\r\n Row,\r\n Col\r\n} from 'antd';\r\nimport {\r\n BellOutlined,\r\n DeleteOutlined,\r\n CheckOutlined,\r\n MessageOutlined,\r\n FileTextOutlined,\r\n UserOutlined,\r\n CheckCircleOutlined,\r\n CalendarOutlined\r\n} from '@ant-design/icons';\r\nimport { history } from '@umijs/max';\r\nimport JobPortalHeader from '@/components/JobPortalHeader';\r\nimport {\r\n getMessages,\r\n getReadMessages,\r\n getUnreadCount,\r\n getMessageTotal,\r\n markMessageRead,\r\n markAllMessagesRead,\r\n deleteMessage\r\n} from '@/services/jobportal/user';\r\nimport './index.less';\r\n\r\nconst { Title, Text } = Typography;\r\n\r\ntype MessageType = 'all' | 'unread' | 'read';\r\ntype MessageCategory = 'job' | 'appointment' | 'system' | 'all';\r\n\r\nconst MessagePage: React.FC = () => {\r\n const [messages, setMessages] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const [unreadCount, setUnreadCount] = useState(0);\r\n const [activeTab, setActiveTab] = useState('all');\r\n const [selectedCategory, setSelectedCategory] = useState('all');\r\n const [pageNum, setPageNum] = useState(1);\r\n const [pageSize] = useState(20);\r\n const [total, setTotal] = useState(0);\r\n const [allMessagesTotal, setAllMessagesTotal] = useState(0); // 全部消息总数(不受分类影响)\r\n const [categoryCounts, setCategoryCounts] = useState<{\r\n job: number;\r\n appointment: number;\r\n system: number;\r\n }>({\r\n job: 0,\r\n appointment: 0,\r\n system: 0\r\n });\r\n\r\n // 获取消息总数和未读条数\r\n const fetchMessageTotal = async () => {\r\n try {\r\n const response = await getMessageTotal();\r\n if (response?.code === 200 && response?.data) {\r\n setAllMessagesTotal(response.data.qbxx || 0);\r\n setUnreadCount(response.data.wdxx || 0);\r\n }\r\n } catch (error) {\r\n console.error('获取消息总数和未读条数失败:', error);\r\n }\r\n };\r\n\r\n // 获取消息列表\r\n const fetchMessages = async (type: MessageType = 'all', page: number = 1, category?: MessageCategory) => {\r\n try {\r\n setLoading(true);\r\n const params: any = {\r\n pageNum: page,\r\n pageSize: pageSize\r\n };\r\n\r\n let response;\r\n if (type === 'read') {\r\n // 已读消息使用专门的接口\r\n response = await getReadMessages(params);\r\n } else {\r\n // 全部消息和未读消息使用通用接口\r\n if (type === 'unread') {\r\n params.isRead = 0;\r\n } else if (type === 'all') {\r\n // 全部消息不传 isRead 参数\r\n }\r\n\r\n // 根据分类设置 noticeType 参数\r\n if (category && category !== 'all') {\r\n if (category === 'job') {\r\n // 职位上新\r\n params.noticeType = 2;\r\n } else if (category === 'system') {\r\n // 系统通知(包括录用)\r\n params.noticeType = 1;\r\n }\r\n // appointment 类型暂时保留前端过滤,因为接口参数中没有对应的 noticeType\r\n }\r\n\r\n response = await getMessages(params);\r\n }\r\n if (response?.code === 200 && response?.rows) {\r\n let messageList = response.rows || [];\r\n\r\n // 如果选择了 appointment 分类,需要前端过滤(因为接口参数中没有对应的 noticeType)\r\n if (category === 'appointment') {\r\n messageList = messageList.filter((msg: API.Message) => {\r\n return msg.noticeType === 'appointment' || msg.noticeType === 'interview';\r\n });\r\n }\r\n\r\n setMessages(messageList);\r\n setTotal(response.total || 0);\r\n\r\n // 计算各分类数量(需要调用接口获取)\r\n if (type === 'all' && !category) {\r\n // 获取各分类的数量\r\n Promise.all([\r\n getMessages({ pageNum: 1, pageSize: 1, noticeType: 2 }),\r\n getMessages({ pageNum: 1, pageSize: 1, noticeType: 1 }),\r\n ]).then(([jobResponse, systemResponse]) => {\r\n setCategoryCounts({\r\n job: jobResponse?.total || 0,\r\n appointment: 0, // appointment 类型暂时设为0,因为接口参数中没有对应的 noticeType\r\n system: systemResponse?.total || 0\r\n });\r\n }).catch(() => {\r\n // 如果获取分类数量失败,使用当前消息列表计算\r\n const allMessages = response.rows || [];\r\n setCategoryCounts({\r\n job: allMessages.filter((m: API.Message) => m.noticeType === '2').length,\r\n appointment: allMessages.filter((m: API.Message) => m.noticeType === 'appointment' || m.noticeType === 'interview').length,\r\n system: allMessages.filter((m: API.Message) => m.noticeType === '1').length\r\n });\r\n });\r\n }\r\n } else {\r\n antdMessage.error(response?.msg || '获取消息列表失败');\r\n }\r\n } catch (error) {\r\n antdMessage.error('获取消息列表失败');\r\n console.error('获取消息列表失败:', error);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n // 初始化加载\r\n useEffect(() => {\r\n fetchMessages(activeTab, pageNum);\r\n fetchMessageTotal();\r\n }, []);\r\n\r\n // 切换标签页\r\n const handleTabChange = (key: string) => {\r\n setActiveTab(key as MessageType);\r\n setPageNum(1);\r\n setSelectedCategory('all');\r\n fetchMessages(key as MessageType, 1);\r\n };\r\n\r\n // 点击分类卡片\r\n const handleCategoryClick = (category: MessageCategory) => {\r\n setSelectedCategory(category);\r\n setPageNum(1);\r\n fetchMessages(activeTab, 1, category);\r\n };\r\n\r\n // 标记消息为已读\r\n const handleMarkAsRead = async (messageId: number) => {\r\n try {\r\n const response = await markMessageRead(messageId);\r\n if (response?.code === 200) {\r\n antdMessage.success('标记成功');\r\n // 立即更新消息总数和未读条数\r\n await fetchMessageTotal();\r\n // 触发自定义事件,通知头部导航栏更新未读消息数\r\n window.dispatchEvent(new CustomEvent('messageCountUpdated'));\r\n // 然后刷新消息列表\r\n fetchMessages(activeTab, pageNum);\r\n } else {\r\n antdMessage.error(response?.msg || '标记失败');\r\n }\r\n } catch (error) {\r\n antdMessage.error('标记失败');\r\n console.error('标记消息失败:', error);\r\n }\r\n };\r\n\r\n // 标记所有消息为已读\r\n const handleMarkAllAsRead = async () => {\r\n try {\r\n const response = await markAllMessagesRead();\r\n if (response?.code === 200) {\r\n antdMessage.success('全部标记为已读');\r\n // 立即更新消息总数和未读条数\r\n await fetchMessageTotal();\r\n // 触发自定义事件,通知头部导航栏更新未读消息数\r\n window.dispatchEvent(new CustomEvent('messageCountUpdated'));\r\n // 然后刷新消息列表\r\n fetchMessages(activeTab, pageNum);\r\n } else {\r\n antdMessage.error(response?.msg || '操作失败');\r\n }\r\n } catch (error) {\r\n antdMessage.error('操作失败');\r\n console.error('标记所有消息失败:', error);\r\n }\r\n };\r\n\r\n // 删除消息\r\n const handleDelete = async (messageId: number) => {\r\n try {\r\n const response = await deleteMessage(messageId);\r\n if (response?.code === 200) {\r\n antdMessage.success('删除成功');\r\n // 立即更新消息总数和未读条数\r\n await fetchMessageTotal();\r\n // 触发自定义事件,通知头部导航栏更新未读消息数\r\n window.dispatchEvent(new CustomEvent('messageCountUpdated'));\r\n // 然后刷新消息列表\r\n fetchMessages(activeTab, pageNum);\r\n } else {\r\n antdMessage.error(response?.msg || '删除失败');\r\n }\r\n } catch (error) {\r\n antdMessage.error('删除失败');\r\n console.error('删除消息失败:', error);\r\n }\r\n };\r\n\r\n // 获取消息类型图标\r\n const getMessageIcon = (type?: string) => {\r\n switch (type) {\r\n case 'system':\r\n case '2':\r\n return ;\r\n case 'job':\r\n case '3':\r\n return ;\r\n case 'interview':\r\n case '4':\r\n return ;\r\n case 'offer':\r\n case '1':\r\n return ;\r\n default:\r\n return ;\r\n }\r\n };\r\n\r\n // 获取消息类型标签\r\n const getMessageTypeLabel = (type?: string) => {\r\n switch (type) {\r\n case 'system':\r\n case '2':\r\n return '系统通知';\r\n case 'job':\r\n case '3':\r\n return '职位相关';\r\n case 'interview':\r\n case '4':\r\n return '面试邀请';\r\n case 'offer':\r\n case '1':\r\n return '录用通知';\r\n default:\r\n return '通知';\r\n }\r\n };\r\n\r\n // 格式化时间\r\n const formatTime = (time?: string) => {\r\n if (!time) return '';\r\n const date = new Date(time);\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const minutes = Math.floor(diff / 60000);\r\n const hours = Math.floor(diff / 3600000);\r\n const days = Math.floor(diff / 86400000);\r\n\r\n if (minutes < 1) return '刚刚';\r\n if (minutes < 60) return `${minutes}分钟前`;\r\n if (hours < 24) return `${hours}小时前`;\r\n if (days < 7) return `${days}天前`;\r\n\r\n return date.toLocaleDateString('zh-CN', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n };\r\n\r\n // 检查消息是否未读\r\n const isUnread = (isRead?: number | string) => {\r\n return Number(isRead) === 0;\r\n };\r\n\r\n // 处理消息点击\r\n const handleMessageClick = (msg: API.Message) => {\r\n // 如果未读,标记为已读\r\n if (isUnread(msg.isRead) && msg.noticeId) {\r\n handleMarkAsRead(msg.noticeId);\r\n }\r\n };\r\n\r\n const tabItems = [\r\n {\r\n key: 'all',\r\n label: (\r\n \r\n 全部消息\r\n {unreadCount > 0 && (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n key: 'unread',\r\n label: (\r\n \r\n 未读消息\r\n {unreadCount > 0 && (\r\n \r\n )}\r\n \r\n ),\r\n },\r\n {\r\n key: 'read',\r\n label: '已读消息',\r\n },\r\n ];\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n 消息通知\r\n \r\n \r\n {unreadCount > 0 && (\r\n }\r\n onClick={handleMarkAllAsRead}\r\n >\r\n 全部标记已读\r\n \r\n )}\r\n \r\n \r\n\r\n \r\n\r\n {/* 分类卡片 - 仅在全部消息标签页显示 */}\r\n {activeTab === 'all' && (\r\n \r\n
\r\n \r\n handleCategoryClick('job')}\r\n >\r\n \r\n
\r\n \r\n
\r\n
\r\n
职位上新\r\n \r\n {categoryCounts.job > 0\r\n ? `这里有${categoryCounts.job}个岗位很适合你,快来看看吧`\r\n : '暂无新职位'}\r\n \r\n \r\n {new Date().toLocaleDateString('zh-CN', { month: '2-digit', day: '2-digit' })}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n handleCategoryClick('appointment')}\r\n >\r\n \r\n
\r\n \r\n
\r\n
\r\n
招聘会预约提醒\r\n \r\n {categoryCounts.appointment > 0\r\n ? `你预约的招聘会预计今天13:30开始`\r\n : '暂无预约提醒'}\r\n \r\n \r\n {new Date().toLocaleDateString('zh-CN', { month: '2-digit', day: '2-digit' })}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n handleCategoryClick('system')}\r\n >\r\n \r\n
\r\n \r\n
\r\n
\r\n
系统通知\r\n \r\n {categoryCounts.system > 0\r\n ? `您的简历上传成功`\r\n : '暂无系统通知'}\r\n \r\n \r\n {new Date().toLocaleDateString('zh-CN', { month: '2-digit', day: '2-digit' })}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n\r\n {/* 显示分类筛选提示 */}\r\n {activeTab === 'all' && selectedCategory !== 'all' && (\r\n \r\n \r\n \r\n 当前显示:{selectedCategory === 'job' ? '职位上新' : selectedCategory === 'appointment' ? '招聘会预约提醒' : '系统通知'}\r\n \r\n
\r\n )}\r\n\r\n \r\n {messages.length === 0 ? (\r\n \r\n ) : (\r\n (\r\n handleMessageClick(item)}\r\n >\r\n \r\n
\r\n {getMessageIcon(item.noticeType)}\r\n
\r\n
\r\n
\r\n \r\n \r\n {item.title || '系统通知'}\r\n \r\n {isUnread(item.isRead) && (\r\n \r\n )}\r\n \r\n {getMessageTypeLabel(item.noticeType)}\r\n \r\n \r\n
\r\n
\r\n {item.noticeContent || '暂无内容'}\r\n \r\n
\r\n \r\n {item.date || formatTime(item.createTime)}\r\n \r\n
\r\n
\r\n
\r\n \r\n {isUnread(item.isRead) && (\r\n
}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (item.noticeId) {\r\n handleMarkAsRead(item.noticeId);\r\n }\r\n }}\r\n >\r\n 标记已读\r\n \r\n )}\r\n
{\r\n e?.stopPropagation();\r\n if (item.noticeId) {\r\n handleDelete(item.noticeId);\r\n }\r\n }}\r\n onCancel={(e) => e?.stopPropagation()}\r\n >\r\n }\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n 删除\r\n \r\n \r\n
\r\n \r\n )}\r\n />\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default MessagePage;\r\n\r\n",
+ "__isJSFile": true,
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/JobPortal/Message/index.tsx"
},
"16": {
+ "path": "/account",
+ "parentId": "ant-design-pro-layout",
+ "id": "16",
+ "absPath": "/account"
+ },
+ "17": {
"name": "acenter",
"path": "/account/center",
"file": "@/pages/User/Center/index.tsx",
- "parentId": "15",
- "id": "16",
+ "parentId": "16",
+ "id": "17",
"absPath": "/account/center",
"__content": "import {\r\n ClusterOutlined,\r\n MailOutlined,\r\n TeamOutlined,\r\n UserOutlined,\r\n MobileOutlined,\r\n ManOutlined,\r\n} from '@ant-design/icons';\r\nimport { Card, Col, Divider, List, Row } from 'antd';\r\nimport React, { useState } from 'react';\r\nimport styles from './Center.less';\r\nimport BaseInfo from './components/BaseInfo';\r\nimport ResetPassword from './components/ResetPassword';\r\nimport AvatarCropper from './components/AvatarCropper';\r\nimport { useRequest } from '@umijs/max';\r\nimport { getUserInfo } from '@/services/session';\r\nimport { PageLoading } from '@ant-design/pro-components';\r\n\r\nconst operationTabList = [\r\n {\r\n key: 'base',\r\n tab: (\r\n \r\n 基本资料\r\n \r\n ),\r\n },\r\n {\r\n key: 'password',\r\n tab: (\r\n \r\n 重置密码\r\n \r\n ),\r\n },\r\n];\r\n\r\nexport type tabKeyType = 'base' | 'password';\r\n\r\nconst Center: React.FC = () => {\r\n \r\n const [tabKey, setTabKey] = useState('base');\r\n \r\n const [cropperModalOpen, setCropperModalOpen] = useState(false);\r\n \r\n // 获取用户信息\r\n const { data: userInfo, loading } = useRequest(async () => {\r\n return { data: await getUserInfo()};\r\n });\r\n if (loading) {\r\n return loading...
;\r\n }\r\n\r\n const currentUser = userInfo?.user;\r\n\r\n // 渲染用户信息\r\n const renderUserInfo = ({\r\n userName,\r\n phonenumber,\r\n email,\r\n sex,\r\n dept,\r\n }: Partial) => {\r\n return (\r\n \r\n \r\n \r\n \r\n 用户名\r\n
\r\n {userName}
\r\n \r\n \r\n \r\n \r\n 性别\r\n
\r\n {sex === '1' ? '女' : '男'}
\r\n \r\n \r\n \r\n \r\n 电话\r\n
\r\n {phonenumber}
\r\n \r\n \r\n \r\n \r\n 邮箱\r\n
\r\n {email}
\r\n \r\n \r\n \r\n \r\n 部门\r\n
\r\n {dept?.deptName}
\r\n \r\n
\r\n );\r\n };\r\n\r\n // 渲染tab切换\r\n const renderChildrenByTabKey = (tabValue: tabKeyType) => {\r\n if (tabValue === 'base') {\r\n return ;\r\n }\r\n if (tabValue === 'password') {\r\n return ;\r\n }\r\n return null;\r\n };\r\n\r\n if (!currentUser) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n {!loading && (\r\n \r\n
{setCropperModalOpen(true)}}>\r\n

\r\n
\r\n {renderUserInfo(currentUser)}\r\n
\r\n
\r\n
角色
\r\n
\r\n {currentUser.roles &&\r\n currentUser.roles.map((item: any) => (\r\n \r\n \r\n {item.roleName}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n {\r\n setTabKey(_tabKey as tabKeyType);\r\n }}\r\n >\r\n {renderChildrenByTabKey(tabKey)}\r\n \r\n \r\n
\r\n
{\r\n setCropperModalOpen(false); \r\n }}\r\n open={cropperModalOpen}\r\n data={currentUser.avatar}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default Center;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/User/Center/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/User/Center/index.tsx"
},
- "17": {
+ "18": {
"name": "asettings",
"path": "/account/settings",
"file": "@/pages/User/Settings/index.tsx",
- "parentId": "15",
- "id": "17",
+ "parentId": "16",
+ "id": "18",
"absPath": "/account/settings",
"__content": "import { PageContainer } from '@ant-design/pro-components';\r\nimport { Card } from 'antd';\r\nimport React from 'react';\r\n\r\n/**\r\n *\r\n * @author whiteshader@163.com\r\n *\r\n * */\r\n\r\n\r\nconst Settings: React.FC = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Settings;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/User/Settings/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/User/Settings/index.tsx"
},
- "18": {
+ "19": {
"name": "area",
"path": "/area",
"parentId": "ant-design-pro-layout",
- "id": "18",
+ "id": "19",
"absPath": "/area"
},
- "19": {
+ "20": {
"name": "字典数据",
"path": "/area/updata-router/index/:id",
"file": "@/pages/Area/Subway/UpLine/index.tsx",
- "parentId": "18",
- "id": "19",
+ "parentId": "19",
+ "id": "20",
"absPath": "/area/updata-router/index/:id",
"__content": "import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react';\r\nimport { useAccess, useParams } from '@umijs/max';\r\nimport { Button, FormInstance, message, Modal } from 'antd';\r\nimport { ActionType, ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { DeleteOutlined, FormOutlined, PlusOutlined } from '@ant-design/icons';\r\nimport {\r\n addCmsLinePlatForm,\r\n deleteCmsLinePlatForm,\r\n getCmsLineListPlatForm,\r\n} from '@/services/area/upline';\r\nimport UpStationEdit from '@/pages/Area/Subway/UpLine/edit';\r\n\r\nconst handleRemoveOne = async (selectedRow: API.AreaSubWay.LinePoint) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRow) return true;\r\n try {\r\n const resp = await deleteCmsLinePlatForm(selectedRow.stationId);\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nfunction ManagementList() {\r\n const access = useAccess();\r\n\r\n const formTableRef = useRef();\r\n const actionRef = useRef();\r\n const [lineId, setLineId] = useState();\r\n const [currentRow, setCurrentRow] = useState();\r\n const [modalVisible, setModalVisible] = useState(false);\r\n const [page, setPage] = useState({});\r\n const params = useParams();\r\n const id = params.id || '0';\r\n useEffect(() => {\r\n if (lineId !== id) {\r\n setLineId(id);\r\n }\r\n }, [lineId, params]);\r\n const getStationInfo = useCallback(async () => {\r\n // const resData = await getCmsLineSubWay()\r\n }, []);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: '站点名称',\r\n dataIndex: 'stationName',\r\n align: 'center',\r\n valueType: 'text',\r\n },\r\n {\r\n title: '排序',\r\n dataIndex: 'stationOrder',\r\n align: 'center',\r\n valueType: 'text',\r\n },\r\n {\r\n title: '操作',\r\n hideInSearch: true,\r\n align: 'center',\r\n width: 300,\r\n render: (_, record) => [\r\n }\r\n hidden={!access.hasPerms('area:business:List.update')}\r\n onClick={() => {\r\n setModalVisible(true);\r\n setCurrentRow(record);\r\n }}\r\n >\r\n 编辑\r\n ,\r\n }\r\n hidden={!access.hasPerms('area:subway:List')}\r\n onClick={async () => {\r\n Modal.confirm({\r\n title: '删除',\r\n content: '确定删除该项吗?',\r\n okText: '确认',\r\n cancelText: '取消',\r\n onOk: async () => {\r\n const success = await handleRemoveOne(record);\r\n if (success) {\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n },\r\n });\r\n }}\r\n >\r\n 删除\r\n ,\r\n ],\r\n },\r\n ];\r\n return (\r\n \r\n \r\n
\r\n // params 是需要自带的参数\r\n // 这个参数优先级更高,会覆盖查询表单的参数\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n columns={columns}\r\n headerTitle=\"信息\"\r\n rowKey=\"stationId\"\r\n key=\"stationId\"\r\n request={(params) => {\r\n return getCmsLineListPlatForm({\r\n lineId,\r\n ...params,\r\n } as API.AreaPlatForm.LineParams).then((res) => {\r\n setPage(params as API.AreaPlatForm.LineParams);\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n });\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ]}\r\n />\r\n \r\n {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n }}\r\n onSubmit={async (values) => {\r\n // values.lineId =\r\n // values.lineName =\r\n const resData = await addCmsLinePlatForm(values);\r\n if (resData.code === 200) {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n message.success('添加成功');\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n }}\r\n values={currentRow}\r\n >\r\n \r\n );\r\n}\r\n\r\nexport default ManagementList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/Area/Subway/UpLine/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/Area/Subway/UpLine/index.tsx"
},
- "20": {
+ "21": {
"name": "system",
"path": "/system",
"parentId": "ant-design-pro-layout",
- "id": "20",
- "absPath": "/system"
- },
- "21": {
- "name": "字典数据",
- "path": "/system/dict-data/index/:id",
- "file": "@/pages/System/DictData/index.tsx",
- "parentId": "20",
"id": "21",
- "absPath": "/system/dict-data/index/:id",
- "__content": "import React, { useEffect, useRef, useState } from 'react';\r\nimport { FormattedMessage, history, useAccess, useIntl, useParams } from '@umijs/max';\r\nimport type { FormInstance } from 'antd';\r\nimport { Button, message, Modal } from 'antd';\r\nimport {\r\n ActionType,\r\n FooterToolbar,\r\n PageContainer,\r\n ProColumns,\r\n ProTable,\r\n} from '@ant-design/pro-components';\r\nimport { DeleteOutlined, ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';\r\nimport {\r\n addDictData,\r\n exportDictData,\r\n getDictDataList,\r\n removeDictData,\r\n updateDictData,\r\n} from '@/services/system/dictdata';\r\nimport UpdateForm from './edit';\r\nimport { getDictType, getDictTypeOptionSelect, getDictValueEnum } from '@/services/system/dict';\r\nimport DictTag from '@/components/DictTag';\r\n\r\n/**\r\n * 添加节点\r\n *\r\n * @param fields\r\n */\r\nconst handleAdd = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在添加');\r\n try {\r\n const resp = await addDictData({ ...fields });\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('添加成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('添加失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 更新节点\r\n *\r\n * @param fields\r\n */\r\nconst handleUpdate = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在更新');\r\n try {\r\n const resp = await updateDictData(fields);\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('更新成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('配置失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 删除节点\r\n *\r\n * @param selectedRows\r\n */\r\nconst handleRemove = async (selectedRows: API.System.DictData[]) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRows) return true;\r\n try {\r\n const resp = await removeDictData(selectedRows.map((row) => row.dictCode).join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nconst handleRemoveOne = async (selectedRow: API.System.DictData) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRow) return true;\r\n try {\r\n const params = [selectedRow.dictCode];\r\n const resp = await removeDictData(params.join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 导出数据\r\n *\r\n *\r\n */\r\nconst handleExport = async () => {\r\n const hide = message.loading('正在导出');\r\n try {\r\n await exportDictData();\r\n hide();\r\n message.success('导出成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('导出失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nexport type DictTypeArgs = {\r\n id: string;\r\n};\r\n\r\nconst DictDataTableList: React.FC = () => {\r\n const formTableRef = useRef();\r\n\r\n const [dictId, setDictId] = useState('');\r\n const [dictType, setDictType] = useState('');\r\n\r\n const [modalVisible, setModalVisible] = useState(false);\r\n\r\n const actionRef = useRef();\r\n const [currentRow, setCurrentRow] = useState();\r\n const [selectedRows, setSelectedRows] = useState([]);\r\n\r\n const [dictTypeOptions, setDictTypeOptions] = useState([]);\r\n const [statusOptions, setStatusOptions] = useState([]);\r\n\r\n const access = useAccess();\r\n\r\n /** 国际化配置 */\r\n const intl = useIntl();\r\n\r\n const params = useParams();\r\n if (params.id === undefined) {\r\n history.push('/system/dict');\r\n }\r\n const id = params.id || '0';\r\n\r\n useEffect(() => {\r\n if (dictId !== id) {\r\n setDictId(id);\r\n getDictTypeOptionSelect().then((res) => {\r\n if (res.code === 200) {\r\n const opts: any = {};\r\n res.data.forEach((item: any) => {\r\n opts[item.dictType] = item.dictName;\r\n });\r\n setDictTypeOptions(opts);\r\n }\r\n });\r\n getDictValueEnum('sys_normal_disable').then((data) => {\r\n setStatusOptions(data);\r\n });\r\n getDictType(id).then((res) => {\r\n if (res.code === 200) {\r\n setDictType(res.data.dictType);\r\n formTableRef.current?.setFieldsValue({\r\n dictType: res.data.dictType,\r\n });\r\n actionRef.current?.reloadAndRest?.();\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n }\r\n }, [dictId, dictType, params]);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: ,\r\n dataIndex: 'dictCode',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictLabel',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictType',\r\n valueType: 'select',\r\n hideInTable: true,\r\n valueEnum: dictTypeOptions,\r\n search: {\r\n transform: (value) => {\r\n setDictType(value);\r\n return value;\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictValue',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictSort',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'status',\r\n valueType: 'select',\r\n valueEnum: statusOptions,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'remark',\r\n valueType: 'textarea',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'createTime',\r\n valueType: 'dateRange',\r\n render: (_, record) => {\r\n return {record.createTime.toString()} ;\r\n },\r\n search: {\r\n transform: (value) => {\r\n return {\r\n 'params[beginTime]': value[0],\r\n 'params[endTime]': value[1],\r\n };\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'option',\r\n width: '120px',\r\n valueType: 'option',\r\n render: (_, record) => [\r\n ,\r\n ,\r\n ],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n
\r\n headerTitle={intl.formatMessage({\r\n id: 'pages.searchTable.title',\r\n defaultMessage: '信息',\r\n })}\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n rowKey=\"dictCode\"\r\n key=\"dataList\"\r\n search={{\r\n labelWidth: 120,\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ,\r\n ,\r\n ]}\r\n request={(params) =>\r\n getDictDataList({ ...params, dictType } as API.System.DictDataListParams).then(\r\n (res) => {\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n },\r\n )\r\n }\r\n columns={columns}\r\n rowSelection={{\r\n onChange: (_, selectedRows) => {\r\n setSelectedRows(selectedRows);\r\n },\r\n }}\r\n />\r\n \r\n {selectedRows?.length > 0 && (\r\n \r\n \r\n {selectedRows.length}\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n )}\r\n {\r\n let success = false;\r\n if (values.dictCode) {\r\n success = await handleUpdate({ ...values } as API.System.DictData);\r\n } else {\r\n success = await handleAdd({ ...values } as API.System.DictData);\r\n }\r\n if (success) {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n }}\r\n onCancel={() => {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n }}\r\n open={modalVisible}\r\n values={currentRow || {}}\r\n statusOptions={statusOptions}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DictDataTableList;\r\n",
- "__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/System/DictData/index.tsx"
+ "absPath": "/system"
},
"22": {
+ "name": "字典数据",
+ "path": "/system/dict-data/index/:id",
+ "file": "@/pages/System/DictData/index.tsx",
+ "parentId": "21",
+ "id": "22",
+ "absPath": "/system/dict-data/index/:id",
+ "__content": "import React, { useEffect, useRef, useState } from 'react';\r\nimport { FormattedMessage, history, useAccess, useIntl, useParams } from '@umijs/max';\r\nimport type { FormInstance } from 'antd';\r\nimport { Button, message, Modal } from 'antd';\r\nimport {\r\n ActionType,\r\n FooterToolbar,\r\n PageContainer,\r\n ProColumns,\r\n ProTable,\r\n} from '@ant-design/pro-components';\r\nimport { DeleteOutlined, ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';\r\nimport {\r\n addDictData,\r\n exportDictData,\r\n getDictDataList,\r\n removeDictData,\r\n updateDictData,\r\n} from '@/services/system/dictdata';\r\nimport UpdateForm from './edit';\r\nimport { getDictType, getDictTypeOptionSelect, getDictValueEnum } from '@/services/system/dict';\r\nimport DictTag from '@/components/DictTag';\r\n\r\n/**\r\n * 添加节点\r\n *\r\n * @param fields\r\n */\r\nconst handleAdd = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在添加');\r\n try {\r\n const resp = await addDictData({ ...fields });\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('添加成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('添加失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 更新节点\r\n *\r\n * @param fields\r\n */\r\nconst handleUpdate = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在更新');\r\n try {\r\n const resp = await updateDictData(fields);\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('更新成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('配置失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 删除节点\r\n *\r\n * @param selectedRows\r\n */\r\nconst handleRemove = async (selectedRows: API.System.DictData[]) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRows) return true;\r\n try {\r\n const resp = await removeDictData(selectedRows.map((row) => row.dictCode).join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nconst handleRemoveOne = async (selectedRow: API.System.DictData) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRow) return true;\r\n try {\r\n const params = [selectedRow.dictCode];\r\n const resp = await removeDictData(params.join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 导出数据\r\n *\r\n *\r\n */\r\nconst handleExport = async () => {\r\n const hide = message.loading('正在导出');\r\n try {\r\n await exportDictData();\r\n hide();\r\n message.success('导出成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('导出失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nexport type DictTypeArgs = {\r\n id: string;\r\n};\r\n\r\nconst DictDataTableList: React.FC = () => {\r\n const formTableRef = useRef();\r\n\r\n const [dictId, setDictId] = useState('');\r\n const [dictType, setDictType] = useState('');\r\n\r\n const [modalVisible, setModalVisible] = useState(false);\r\n\r\n const actionRef = useRef();\r\n const [currentRow, setCurrentRow] = useState();\r\n const [selectedRows, setSelectedRows] = useState([]);\r\n\r\n const [dictTypeOptions, setDictTypeOptions] = useState([]);\r\n const [statusOptions, setStatusOptions] = useState([]);\r\n\r\n const access = useAccess();\r\n\r\n /** 国际化配置 */\r\n const intl = useIntl();\r\n\r\n const params = useParams();\r\n if (params.id === undefined) {\r\n history.push('/system/dict');\r\n }\r\n const id = params.id || '0';\r\n\r\n useEffect(() => {\r\n if (dictId !== id) {\r\n setDictId(id);\r\n getDictTypeOptionSelect().then((res) => {\r\n if (res.code === 200) {\r\n const opts: any = {};\r\n res.data.forEach((item: any) => {\r\n opts[item.dictType] = item.dictName;\r\n });\r\n setDictTypeOptions(opts);\r\n }\r\n });\r\n getDictValueEnum('sys_normal_disable').then((data) => {\r\n setStatusOptions(data);\r\n });\r\n getDictType(id).then((res) => {\r\n if (res.code === 200) {\r\n setDictType(res.data.dictType);\r\n formTableRef.current?.setFieldsValue({\r\n dictType: res.data.dictType,\r\n });\r\n actionRef.current?.reloadAndRest?.();\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n }\r\n }, [dictId, dictType, params]);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: ,\r\n dataIndex: 'dictCode',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictLabel',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictType',\r\n valueType: 'select',\r\n hideInTable: true,\r\n valueEnum: dictTypeOptions,\r\n search: {\r\n transform: (value) => {\r\n setDictType(value);\r\n return value;\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictValue',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictSort',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'status',\r\n valueType: 'select',\r\n valueEnum: statusOptions,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'remark',\r\n valueType: 'textarea',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'createTime',\r\n valueType: 'dateRange',\r\n render: (_, record) => {\r\n return {record.createTime.toString()} ;\r\n },\r\n search: {\r\n transform: (value) => {\r\n return {\r\n 'params[beginTime]': value[0],\r\n 'params[endTime]': value[1],\r\n };\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'option',\r\n width: '120px',\r\n valueType: 'option',\r\n render: (_, record) => [\r\n ,\r\n ,\r\n ],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n
\r\n headerTitle={intl.formatMessage({\r\n id: 'pages.searchTable.title',\r\n defaultMessage: '信息',\r\n })}\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n rowKey=\"dictCode\"\r\n key=\"dataList\"\r\n search={{\r\n labelWidth: 120,\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ,\r\n ,\r\n ]}\r\n request={(params) =>\r\n getDictDataList({ ...params, dictType } as API.System.DictDataListParams).then(\r\n (res) => {\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n },\r\n )\r\n }\r\n columns={columns}\r\n rowSelection={{\r\n onChange: (_, selectedRows) => {\r\n setSelectedRows(selectedRows);\r\n },\r\n }}\r\n />\r\n \r\n {selectedRows?.length > 0 && (\r\n \r\n \r\n {selectedRows.length}\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n )}\r\n {\r\n let success = false;\r\n if (values.dictCode) {\r\n success = await handleUpdate({ ...values } as API.System.DictData);\r\n } else {\r\n success = await handleAdd({ ...values } as API.System.DictData);\r\n }\r\n if (success) {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n }}\r\n onCancel={() => {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n }}\r\n open={modalVisible}\r\n values={currentRow || {}}\r\n statusOptions={statusOptions}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DictDataTableList;\r\n",
+ "__isJSFile": true,
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/System/DictData/index.tsx"
+ },
+ "23": {
"name": "字典数据",
"path": "/system/admin-dict-data/index/:id",
"file": "@/pages/System/AdminDictData/index.tsx",
- "parentId": "20",
- "id": "22",
+ "parentId": "21",
+ "id": "23",
"absPath": "/system/admin-dict-data/index/:id",
"__content": "\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { useIntl, FormattedMessage, useAccess, history, useParams } from '@umijs/max';\r\nimport type { FormInstance } from 'antd';\r\nimport { Button, message, Modal } from 'antd';\r\nimport { ActionType, FooterToolbar, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { PlusOutlined, DeleteOutlined, ExclamationCircleOutlined } from '@ant-design/icons';\r\nimport { getDictDataList, removeDictData, addDictData, updateDictData, exportDictData } from '@/services/system/admindicdata';\r\nimport UpdateForm from './edit';\r\nimport { getDictValueEnum, getDictType, getDictTypeOptionSelect } from '@/services/system/admindict';\r\nimport DictTag from '@/components/DictTag';\r\n\r\n/**\r\n * 添加节点\r\n *\r\n * @param fields\r\n */\r\nconst handleAdd = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在添加');\r\n try {\r\n const resp = await addDictData({ ...fields });\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('添加成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('添加失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 更新节点\r\n *\r\n * @param fields\r\n */\r\nconst handleUpdate = async (fields: API.System.DictData) => {\r\n const hide = message.loading('正在更新');\r\n try {\r\n const resp = await updateDictData(fields);\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('更新成功');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('配置失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 删除节点\r\n *\r\n * @param selectedRows\r\n */\r\nconst handleRemove = async (selectedRows: API.System.DictData[]) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRows) return true;\r\n try {\r\n const resp = await removeDictData(selectedRows.map((row) => row.dictCode).join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nconst handleRemoveOne = async (selectedRow: API.System.DictData) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRow) return true;\r\n try {\r\n const params = [selectedRow.dictCode];\r\n const resp = await removeDictData(params.join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 导出数据\r\n *\r\n *\r\n */\r\nconst handleExport = async () => {\r\n const hide = message.loading('正在导出');\r\n try {\r\n await exportDictData();\r\n hide();\r\n message.success('导出成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('导出失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nexport type DictTypeArgs = {\r\n id: string;\r\n};\r\n\r\n\r\nconst DictDataTableList: React.FC = () => {\r\n\r\n const formTableRef = useRef();\r\n\r\n const [dictId, setDictId] = useState('');\r\n const [dictType, setDictType] = useState('');\r\n\r\n const [modalVisible, setModalVisible] = useState(false);\r\n\r\n const actionRef = useRef();\r\n const [currentRow, setCurrentRow] = useState();\r\n const [selectedRows, setSelectedRows] = useState([]);\r\n\r\n const [dictTypeOptions, setDictTypeOptions] = useState([]);\r\n const [statusOptions, setStatusOptions] = useState([]);\r\n\r\n const access = useAccess();\r\n\r\n /** 国际化配置 */\r\n const intl = useIntl();\r\n\r\n const params = useParams();\r\n if (params.id === undefined) {\r\n history.push('/system/dict');\r\n }\r\n const id = params.id || '0';\r\n\r\n useEffect(() => {\r\n if (dictId !== id) {\r\n setDictId(id);\r\n getDictTypeOptionSelect().then((res) => {\r\n if (res.code === 200) {\r\n const opts: any = {};\r\n res.data.forEach((item: any) => {\r\n opts[item.dictType] = item.dictName;\r\n });\r\n setDictTypeOptions(opts);\r\n }\r\n });\r\n getDictValueEnum('sys_normal_disable').then((data) => {\r\n setStatusOptions(data);\r\n });\r\n getDictType(id).then((res) => {\r\n if (res.code === 200) {\r\n setDictType(res.data.dictType);\r\n formTableRef.current?.setFieldsValue({\r\n dictType: res.data.dictType,\r\n });\r\n actionRef.current?.reloadAndRest?.();\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n }\r\n }, [dictId, dictType, params]);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: ,\r\n dataIndex: 'dictCode',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictLabel',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictType',\r\n valueType: 'select',\r\n hideInTable: true,\r\n valueEnum: dictTypeOptions,\r\n search: {\r\n transform: (value) => {\r\n setDictType(value);\r\n return value;\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictValue',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'dictSort',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'status',\r\n valueType: 'select',\r\n valueEnum: statusOptions,\r\n render: (_, record) => {\r\n return ();\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'remark',\r\n valueType: 'textarea',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'createTime',\r\n valueType: 'dateRange',\r\n render: (_, record) => {\r\n return ({record.createTime.toString()} );\r\n },\r\n search: {\r\n transform: (value) => {\r\n return {\r\n 'params[beginTime]': value[0],\r\n 'params[endTime]': value[1],\r\n };\r\n },\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'option',\r\n width: '120px',\r\n valueType: 'option',\r\n render: (_, record) => [\r\n ,\r\n ,\r\n ],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n
\r\n headerTitle={intl.formatMessage({\r\n id: 'pages.searchTable.title',\r\n defaultMessage: '信息',\r\n })}\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n rowKey=\"dictCode\"\r\n key=\"dataList\"\r\n search={{\r\n labelWidth: 120,\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ,\r\n ,\r\n ]}\r\n request={(params) =>\r\n getDictDataList({ ...params, dictType } as API.System.DictDataListParams).then((res) => {\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n })\r\n }\r\n columns={columns}\r\n rowSelection={{\r\n onChange: (_, selectedRows) => {\r\n setSelectedRows(selectedRows);\r\n },\r\n }}\r\n />\r\n \r\n {selectedRows?.length > 0 && (\r\n \r\n \r\n {selectedRows.length}\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n )}\r\n {\r\n let success = false;\r\n if (values.dictCode) {\r\n success = await handleUpdate({ ...values } as API.System.DictData);\r\n } else {\r\n success = await handleAdd({ ...values } as API.System.DictData);\r\n }\r\n if (success) {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n }}\r\n onCancel={() => {\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n }}\r\n open={modalVisible}\r\n values={currentRow || {}}\r\n statusOptions={statusOptions}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DictDataTableList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/System/AdminDictData/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/System/AdminDictData/index.tsx"
},
- "23": {
+ "24": {
"name": "分配用户",
"path": "/system/role-auth/user/:id",
"file": "@/pages/System/Role/authUser.tsx",
- "parentId": "20",
- "id": "23",
+ "parentId": "21",
+ "id": "24",
"absPath": "/system/role-auth/user/:id",
"__content": "\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { useIntl, FormattedMessage, useAccess, history, useParams } from '@umijs/max';\r\nimport { Button, Modal, message } from 'antd';\r\nimport { ActionType, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { PlusOutlined, DeleteOutlined, ExclamationCircleOutlined, RollbackOutlined } from '@ant-design/icons';\r\nimport { authUserSelectAll, authUserCancel, authUserCancelAll, allocatedUserList, unallocatedUserList } from '@/services/system/role';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport DictTag from '@/components/DictTag';\r\nimport UserSelectorModal from './components/UserSelectorModal';\r\nimport { HttpResult } from '@/enums/httpEnum';\r\n\r\n/**\r\n * 删除节点\r\n *\r\n * @param selectedRows\r\n */\r\nconst cancelAuthUserAll = async (roleId: string, selectedRows: API.System.User[]) => {\r\n\tconst hide = message.loading('正在取消授权');\r\n\tif (!selectedRows) return true;\r\n\ttry {\r\n\t\tconst userIds = selectedRows.map((row) => row.userId).join(',');\r\n\t\tconst resp = await authUserCancelAll({roleId, userIds});\r\n\t\thide();\r\n\t\tif (resp.code === 200) {\r\n\t\t\tmessage.success('取消授权成功,即将刷新');\r\n\t\t} else {\r\n\t\t\tmessage.error(resp.msg);\r\n\t\t}\r\n\t\treturn true;\r\n\t} catch (error) {\r\n\t\thide();\r\n\t\tmessage.error('取消授权失败,请重试');\r\n\t\treturn false;\r\n\t}\r\n};\r\n\r\nconst cancelAuthUser = async (roleId: string, userId: number) => {\r\n\tconst hide = message.loading('正在取消授权');\r\n\ttry {\r\n\t\tconst resp = await authUserCancel({ userId, roleId });\r\n\t\thide();\r\n\t\tif (resp.code === 200) {\r\n\t\t\tmessage.success('取消授权成功,即将刷新');\r\n\t\t} else {\r\n\t\t\tmessage.error(resp.msg);\r\n\t\t}\r\n\t\treturn true;\r\n\t} catch (error) {\r\n\t\thide();\r\n\t\tmessage.error('取消授权失败,请重试');\r\n\t\treturn false;\r\n\t}\r\n};\r\n\r\n\r\nconst AuthUserTableList: React.FC = () => {\r\n\r\n\tconst [modalVisible, setModalVisible] = useState(false);\r\n\r\n\tconst actionRef = useRef();\r\n\tconst [selectedRows, setSelectedRows] = useState([]);\r\n\tconst [statusOptions, setStatusOptions] = useState([]);\r\n\r\n\tconst access = useAccess();\r\n\r\n\t/** 国际化配置 */\r\n\tconst intl = useIntl();\r\n\r\n\tconst params = useParams();\r\n\tif (params.id === undefined) {\r\n\t\thistory.back();\r\n\t}\r\n\tconst roleId = params.id || '0';\r\n\r\n\tuseEffect(() => {\r\n\t\tgetDictValueEnum('sys_normal_disable').then((data) => {\r\n\t\t\tsetStatusOptions(data);\r\n\t\t});\r\n\t}, []);\r\n\r\n\tconst columns: ProColumns[] = [\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'deptId',\r\n\t\t\tvalueType: 'text',\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'userName',\r\n\t\t\tvalueType: 'text',\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'nickName',\r\n\t\t\tvalueType: 'text',\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'phonenumber',\r\n\t\t\tvalueType: 'text',\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'createTime',\r\n\t\t\tvalueType: 'dateRange',\r\n\t\t\trender: (_, record) => {\r\n\t\t\t\treturn ({record.createTime.toString()} );\r\n\t\t\t},\r\n\t\t\thideInSearch: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'status',\r\n\t\t\tvalueType: 'select',\r\n\t\t\tvalueEnum: statusOptions,\r\n\t\t\trender: (_, record) => {\r\n\t\t\t\treturn ();\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: ,\r\n\t\t\tdataIndex: 'option',\r\n\t\t\twidth: '60px',\r\n\t\t\tvalueType: 'option',\r\n\t\t\trender: (_, record) => [\r\n\t\t\t\t}\r\n\t\t\t\t\tkey=\"remove\"\r\n\t\t\t\t\thidden={!access.hasPerms('system:role:remove')}\r\n\t\t\t\t\tonClick={async () => {\r\n\t\t\t\t\t\tModal.confirm({\r\n\t\t\t\t\t\t\ttitle: '删除',\r\n\t\t\t\t\t\t\tcontent: '确认要取消该用户' + record.userName + '\"角色授权吗?',\r\n\t\t\t\t\t\t\tokText: '确认',\r\n\t\t\t\t\t\t\tcancelText: '取消',\r\n\t\t\t\t\t\t\tonOk: async () => {\r\n\t\t\t\t\t\t\t\tconst success = await cancelAuthUser(roleId, record.userId);\r\n\t\t\t\t\t\t\t\tif (success) {\r\n\t\t\t\t\t\t\t\t\tif (actionRef.current) {\r\n\t\t\t\t\t\t\t\t\t\tactionRef.current.reload();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t取消授权\r\n\t\t\t\t,\r\n\t\t\t],\r\n\t\t},\r\n\t];\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\theaderTitle={intl.formatMessage({\r\n\t\t\t\t\t\tid: 'pages.searchTable.title',\r\n\t\t\t\t\t\tdefaultMessage: '信息',\r\n\t\t\t\t\t})}\r\n\t\t\t\t\tactionRef={actionRef}\r\n\t\t\t\t\trowKey=\"userId\"\r\n\t\t\t\t\tkey=\"userList\"\r\n\t\t\t\t\tsearch={{\r\n\t\t\t\t\t\tlabelWidth: 120,\r\n\t\t\t\t\t}}\r\n\t\t\t\t\ttoolBarRender={() => [\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t\t,\r\n\t\t\t\t\t]}\r\n\t\t\t\t\trequest={(params) =>\r\n\t\t\t\t\t\tallocatedUserList({ ...params, roleId } as API.System.RoleListParams).then((res) => {\r\n\t\t\t\t\t\t\tconst result = {\r\n\t\t\t\t\t\t\t\tdata: res.rows,\r\n\t\t\t\t\t\t\t\ttotal: res.total,\r\n\t\t\t\t\t\t\t\tsuccess: true,\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcolumns={columns}\r\n\t\t\t\t\trowSelection={{\r\n\t\t\t\t\t\tonChange: (_, selectedRows) => {\r\n\t\t\t\t\t\t\tsetSelectedRows(selectedRows);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t \r\n\t\t\t {\r\n\t\t\t\t\tconst userIds = values.join(\",\");\r\n\t\t\t\t\tif (userIds === \"\") {\r\n\t\t\t\t\t\tmessage.warning(\"请选择要分配的用户\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tauthUserSelectAll({ roleId: roleId, userIds: userIds }).then(resp => {\r\n\t\t\t\t\t\tif (resp.code === HttpResult.SUCCESS) {\r\n\t\t\t\t\t\t\tmessage.success('更新成功!');\r\n\t\t\t\t\t\t\tif (actionRef.current) {\r\n\t\t\t\t\t\t\t\tactionRef.current.reload();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tmessage.warning(resp.msg);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\tsetModalVisible(false);\r\n\t\t\t\t}}\r\n\t\t\t\tonCancel={() => {\r\n\t\t\t\t\tsetModalVisible(false);\r\n\t\t\t\t}}\r\n\t\t\t\tparams={{roleId}}\r\n\t\t\t\trequest={(params) =>\r\n\t\t\t\t\tunallocatedUserList({ ...params } as API.System.RoleListParams).then((res) => {\r\n\t\t\t\t\t\tconst result = {\r\n\t\t\t\t\t\t\tdata: res.rows,\r\n\t\t\t\t\t\t\ttotal: res.rows.length,\r\n\t\t\t\t\t\t\tsuccess: true,\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t\treturn result;\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default AuthUserTableList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/System/Role/authUser.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/System/Role/authUser.tsx"
},
- "24": {
+ "25": {
"name": "monitor",
"path": "/monitor",
"parentId": "ant-design-pro-layout",
- "id": "24",
+ "id": "25",
"absPath": "/monitor"
},
- "25": {
+ "26": {
"name": "任务日志",
"path": "/monitor/job-log/index/:id",
"file": "@/pages/Monitor/JobLog/index.tsx",
- "parentId": "24",
- "id": "25",
+ "parentId": "25",
+ "id": "26",
"absPath": "/monitor/job-log/index/:id",
"__content": "\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { useIntl, FormattedMessage, useAccess, useParams, history } from '@umijs/max';\r\nimport type { FormInstance } from 'antd';\r\nimport { Button, message, Modal } from 'antd';\r\nimport { ActionType, FooterToolbar, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { PlusOutlined, DeleteOutlined, ExclamationCircleOutlined } from '@ant-design/icons';\r\nimport { getJobLogList, removeJobLog, exportJobLog } from '@/services/monitor/jobLog';\r\nimport DetailForm from './detail';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport { getJob } from '@/services/monitor/job';\r\nimport DictTag from '@/components/DictTag';\r\n\r\n/**\r\n * 定时任务调度日志 List Page\r\n *\r\n * @author whiteshader\r\n * @date 2023-02-07\r\n */\r\n\r\n/**\r\n * 删除节点\r\n *\r\n * @param selectedRows\r\n */\r\nconst handleRemove = async (selectedRows: API.Monitor.JobLog[]) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRows) return true;\r\n try {\r\n const resp = await removeJobLog(selectedRows.map((row) => row.jobLogId).join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nconst handleRemoveOne = async (selectedRow: API.Monitor.JobLog) => {\r\n const hide = message.loading('正在删除');\r\n if (!selectedRow) return true;\r\n try {\r\n const params = [selectedRow.jobLogId];\r\n const resp = await removeJobLog(params.join(','));\r\n hide();\r\n if (resp.code === 200) {\r\n message.success('删除成功,即将刷新');\r\n } else {\r\n message.error(resp.msg);\r\n }\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('删除失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * 清空日志数据\r\n *\r\n */\r\nconst handleExport = async () => {\r\n const hide = message.loading('正在导出');\r\n try {\r\n await exportJobLog();\r\n hide();\r\n message.success('导出成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('导出失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\n\r\nconst JobLogTableList: React.FC = () => {\r\n const formTableRef = useRef();\r\n\r\n const [modalOpen, setModalOpen] = useState(false);\r\n\r\n const actionRef = useRef();\r\n const [currentRow, setCurrentRow] = useState();\r\n const [selectedRows, setSelectedRows] = useState([]);\r\n\r\n const [jobGroupOptions, setJobGroupOptions] = useState([]);\r\n const [statusOptions, setStatusOptions] = useState([]);\r\n\r\n const [queryParams, setQueryParams] = useState([]);\r\n\r\n const access = useAccess();\r\n\r\n /** 国际化配置 */\r\n const intl = useIntl();\r\n\r\n const params = useParams();\r\n if (params.id === undefined) {\r\n history.push('/monitor/job');\r\n }\r\n const jobId = params.id || 0;\r\n useEffect(() => {\r\n if (jobId !== undefined && jobId !== 0) {\r\n getJob(Number(jobId)).then(response => {\r\n setQueryParams({\r\n jobName: response.data.jobName,\r\n jobGroup: response.data.jobGroup\r\n });\r\n });\r\n }\r\n getDictValueEnum('sys_job_status').then((data) => {\r\n setStatusOptions(data);\r\n });\r\n getDictValueEnum('sys_job_group').then((data) => {\r\n setJobGroupOptions(data);\r\n });\r\n }, []);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: ,\r\n dataIndex: 'jobLogId',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'jobName',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'jobGroup',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'invokeTarget',\r\n valueType: 'textarea',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'jobMessage',\r\n valueType: 'textarea',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'status',\r\n valueType: 'select',\r\n valueEnum: statusOptions,\r\n render: (_, record) => {\r\n return ();\r\n },\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'createTime',\r\n valueType: 'text',\r\n },\r\n {\r\n title: ,\r\n dataIndex: 'option',\r\n width: '120px',\r\n valueType: 'option',\r\n render: (_, record) => [\r\n ,\r\n ,\r\n ],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n
\r\n headerTitle={intl.formatMessage({\r\n id: 'pages.searchTable.title',\r\n defaultMessage: '信息',\r\n })}\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n rowKey=\"jobLogId\"\r\n key=\"job-logList\"\r\n search={{\r\n labelWidth: 120,\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ,\r\n ,\r\n ]}\r\n params={queryParams}\r\n request={(params) =>\r\n getJobLogList({ ...params } as API.Monitor.JobLogListParams).then((res) => {\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n })\r\n }\r\n columns={columns}\r\n rowSelection={{\r\n onChange: (_, selectedRows) => {\r\n setSelectedRows(selectedRows);\r\n },\r\n }}\r\n />\r\n \r\n {selectedRows?.length > 0 && (\r\n \r\n \r\n {selectedRows.length}\r\n \r\n \r\n }\r\n >\r\n \r\n \r\n )}\r\n {\r\n setModalOpen(false);\r\n setCurrentRow(undefined);\r\n }}\r\n open={modalOpen}\r\n values={currentRow || {}}\r\n statusOptions={statusOptions}\r\n jobGroupOptions={jobGroupOptions}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default JobLogTableList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/Monitor/JobLog/index.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/Monitor/JobLog/index.tsx"
},
- "26": {
+ "27": {
"name": "tool",
"path": "/tool",
"parentId": "ant-design-pro-layout",
- "id": "26",
+ "id": "27",
"absPath": "/tool"
},
- "27": {
+ "28": {
"name": "导入表",
"path": "/tool/gen/import",
"file": "@/pages/Tool/Gen/import.tsx",
- "parentId": "26",
- "id": "27",
+ "parentId": "27",
+ "id": "28",
"absPath": "/tool/gen/import",
"__content": "import { Button, Card, message, Layout } from 'antd';\r\nimport React, { useState } from 'react';\r\nimport { history, FormattedMessage } from '@umijs/max';\r\nimport { importTables, queryTableList } from './service';\r\nimport type { GenCodeType } from './data.d';\r\nimport { ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { PlusOutlined, RollbackOutlined } from '@ant-design/icons';\r\n\r\nconst { Content } = Layout;\r\n\r\nconst handleImport = async (tables: string) => {\r\n const hide = message.loading('正在配置');\r\n try {\r\n await importTables(tables);\r\n hide();\r\n message.success('配置成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('配置失败请重试!');\r\n return false;\r\n }\r\n};\r\n\r\nconst ImportTableList: React.FC = () => {\r\n const [selectTables, setSelectTables] = useState([]);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: '表名称',\r\n dataIndex: 'tableName',\r\n },\r\n {\r\n title: '表描述',\r\n dataIndex: 'tableComment',\r\n },\r\n {\r\n title: '创建时间',\r\n dataIndex: 'createTime',\r\n valueType: 'textarea',\r\n hideInSearch: true,\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n \r\n headerTitle=\"代码生成信息\"\r\n rowKey=\"tableName\"\r\n search={{\r\n labelWidth: 120,\r\n }}\r\n toolBarRender={() => [\r\n ,\r\n ,\r\n ]}\r\n request={(params) =>\r\n queryTableList({ ...params }).then((res) => {\r\n return {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n })\r\n }\r\n columns={columns}\r\n rowSelection={{\r\n onChange: (_, selectedRows) => {\r\n if (selectedRows && selectedRows.length > 0) {\r\n const tables = selectedRows.map((row) => {\r\n return row.tableName;\r\n });\r\n setSelectTables(tables);\r\n }\r\n },\r\n }}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ImportTableList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/Tool/Gen/import.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/Tool/Gen/import.tsx"
},
- "28": {
+ "29": {
"name": "编辑表",
"path": "/tool/gen/edit.tsx",
"file": "@/pages/Tool/Gen/edit.tsx",
- "parentId": "26",
- "id": "28",
+ "parentId": "27",
+ "id": "29",
"absPath": "/tool/gen/edit.tsx",
"__content": "import React, { useEffect, useState } from 'react';\r\nimport BaseInfo from './components/BaseInfo';\r\nimport { Card, Layout, message, Steps } from 'antd';\r\nimport ColumnInfo from './components/ColumnInfo';\r\nimport GenInfo from './components/GenInfo';\r\nimport { getGenCode, updateData } from './service';\r\nimport { formatTreeData } from '@/utils/tree';\r\nimport styles from './style.less';\r\nimport type { GenCodeType } from './data';\r\nimport { getMenuTree } from '@/services/system/menu';\r\nimport { getDictTypeList } from '@/services/system/dict';\r\nimport queryString from 'query-string';\r\nimport { useLocation } from '@umijs/max';\r\n\r\nconst { Content } = Layout;\r\n\r\nexport type GenCodeArgs = {\r\n id: string;\r\n};\r\n\r\nconst TableList: React.FC = () => {\r\n const location = useLocation();\r\n const query = queryString.parse(location.search);\r\n const { id } = query as GenCodeArgs;\r\n const tableId = id;\r\n\r\n const [currentStep, setCurrentStep] = useState(0);\r\n const [columnData, setColumnData] = useState([]);\r\n const [baseInfoData, setBaseInfoData] = useState([]);\r\n const [genInfoData, setGenInfoData] = useState([]);\r\n const [menuTree, setMenuTree] = useState([]);\r\n const [dictData, setDictData] = useState([]);\r\n const [tableInfo, setTableInfo] = useState([]);\r\n const [formData, setFormData] = useState([]);\r\n const [stepComponent, setStepComponent] = useState([]);\r\n const [stepKey, setStepKey] = useState('');\r\n\r\n const getCurrentStepAndComponent = (key?: string) => {\r\n if (key === 'base') {\r\n return (\r\n \r\n );\r\n }\r\n if (key === 'column') {\r\n return (\r\n \r\n );\r\n }\r\n if (key === 'gen') {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const onNextStep = (step: string, values: any, direction: string) => {\r\n let stepKey = 'base';\r\n if (step === 'base') {\r\n setStepKey('column');\r\n setCurrentStep(1);\r\n setFormData(values);\r\n setStepComponent(getCurrentStepAndComponent(stepKey));\r\n } else if (step === 'column') {\r\n if (direction === 'prev') {\r\n setStepKey('base');\r\n setCurrentStep(0);\r\n } else {\r\n setStepKey('gen');\r\n const tableData: GenCodeType = formData || ({} as GenCodeType);\r\n tableData.columns = values;\r\n setCurrentStep(2);\r\n setFormData(tableData);\r\n }\r\n setStepComponent(getCurrentStepAndComponent(stepKey));\r\n } else if (step === 'gen') {\r\n if (direction === 'prev') {\r\n setStepKey('column');\r\n setCurrentStep(1);\r\n setStepComponent(getCurrentStepAndComponent(stepKey));\r\n } else {\r\n const postData: GenCodeType = {\r\n ...formData,\r\n ...values,\r\n params: values,\r\n tableId: tableId,\r\n };\r\n setFormData(postData);\r\n updateData({ ...postData } as GenCodeType).then((res) => {\r\n if (res.code === 200) {\r\n message.success('提交成功');\r\n history.back();\r\n } else {\r\n message.success('提交失败');\r\n }\r\n });\r\n }\r\n }\r\n };\r\n useEffect(() => {\r\n setStepComponent(getCurrentStepAndComponent(stepKey));\r\n }, [stepKey]);\r\n\r\n useEffect(() => {\r\n getGenCode(tableId).then((res) => {\r\n if (res.code === 200) {\r\n setBaseInfoData(res.data.info);\r\n setColumnData(res.data.rows);\r\n setGenInfoData(res.data.info);\r\n setTableInfo(res.data.tables);\r\n setStepKey('base');\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n getMenuTree().then((res) => {\r\n if (res.code === 200) {\r\n const treeData = formatTreeData(res.data);\r\n setMenuTree(treeData);\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n\r\n getDictTypeList().then((res: any) => {\r\n if (res.code === 200) {\r\n const dicts = res.rows.map((item: any) => {\r\n return {\r\n label: item.dictName,\r\n value: item.dictType,\r\n };\r\n });\r\n setDictData(dicts);\r\n } else {\r\n message.error(res.msg);\r\n }\r\n });\r\n }, []);\r\n\r\n // const onFinish = (values: any) => {\r\n // console.log('Success:', values);\r\n // };\r\n\r\n // const onFinishFailed = (errorInfo: any) => {\r\n // console.log('Failed:', errorInfo);\r\n // };\r\n\r\n return (\r\n \r\n \r\n \r\n {stepComponent}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TableList;\r\n",
"__isJSFile": true,
- "__absFile": "E:/project/ks-admin/src/pages/Tool/Gen/edit.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/Tool/Gen/edit.tsx"
+ },
+ "30": {
+ "name": "management",
+ "path": "/management",
+ "parentId": "ant-design-pro-layout",
+ "id": "30",
+ "absPath": "/management"
+ },
+ "31": {
+ "name": "查看申请人",
+ "path": "/management/see-matching/index/:id",
+ "file": "@/pages/Management/List/SeeMatching/index.tsx",
+ "parentId": "30",
+ "id": "31",
+ "absPath": "/management/see-matching/index/:id",
+ "__content": "import React, { Fragment, useEffect, useRef, useState } from 'react';\r\nimport { FormattedMessage, useAccess, useParams } from '@umijs/max';\r\nimport { Button, FormInstance, message } from 'antd';\r\nimport { ActionType, ProColumns, ProTable } from '@ant-design/pro-components';\r\nimport { FormOutlined, PlusOutlined,AlignLeftOutlined } from '@ant-design/icons';\r\nimport { getDictValueEnum } from '@/services/system/dict';\r\nimport DictTag from '@/components/DictTag';\r\nimport { exportCmsAppUserExport } from '@/services/mobileusers/list';\r\nimport {\r\n addCmsEmployeeConfirmList,\r\n exportCmsJobCandidates,\r\n getCmsJobIds,\r\n} from '@/services/Management/list';\r\nimport similarityJobs from '@/utils/similarity_Job';\r\nimport Detail from './detail';\r\nimport Hire from './hire';\r\nimport ResumeView from './resumeView';\r\n\r\n\r\nconst handleExport = async (values: API.MobileUser.ListParams) => {\r\n const hide = message.loading('正在导出');\r\n try {\r\n await exportCmsAppUserExport(values);\r\n hide();\r\n message.success('导出成功');\r\n return true;\r\n } catch (error) {\r\n hide();\r\n message.error('导出失败,请重试');\r\n return false;\r\n }\r\n};\r\n\r\nfunction ManagementList() {\r\n const access = useAccess();\r\n\r\n const formTableRef = useRef();\r\n const actionRef = useRef();\r\n\r\n const [jobId, setJobId] = useState();\r\n const [educationEnum, setEducationEnum] = useState([]);\r\n const [experienceEnum, setExperienceEnum] = useState([]);\r\n const [areaEnum, setAreaEnum] = useState([]);\r\n const [sexEnum, setSexEnum] = useState([]);\r\n const [hotEnum, setHotEnum] = useState([]);\r\n const [politicalEnum, setPoliticalEnum] = useState([]);\r\n const [contractTermEnum, setContractTermEnum] = useState([]);\r\n const [currentRow, setCurrentRow] = useState();\r\n const [modalVisible, setModalVisible] = useState(false);\r\n const [hireVisible, setHireVisible] = useState(false);\r\n const [jobInfo, setJobInfo] = useState({});\r\n const [matchingDegree, setMatchingDegree] = useState(null);\r\n const [resumeVisible, setResumeVisible] = useState(false);\r\n const [hireAdd, setHireAdd] = useState(null);\r\n const [mode, setMode] = useState<'view' | 'edit' | 'create'>('create');\r\n const params = useParams();\r\n const id = params.id || '0';\r\n useEffect(() => {\r\n if (jobId !== id) {\r\n setJobId(id);\r\n getJobInfo(id);\r\n }\r\n }, [jobId, params]);\r\n\r\n const getJobInfo = async (jobId: string) => {\r\n let resData = await getCmsJobIds(jobId);\r\n if (resData.code === 200) {\r\n similarityJobs.setJobInfo(resData.data);\r\n setJobInfo(resData.data);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getDictValueEnum('education', true, true).then((data) => {\r\n setEducationEnum(data);\r\n });\r\n getDictValueEnum('experience', true, true).then((data) => {\r\n setExperienceEnum(data);\r\n });\r\n getDictValueEnum('area', true, true).then((data) => {\r\n setAreaEnum(data);\r\n });\r\n getDictValueEnum('sys_user_sex', true).then((data) => {\r\n setSexEnum(data);\r\n });\r\n getDictValueEnum('political_affiliation', true, true).then((data) => {\r\n setPoliticalEnum(data);\r\n });\r\n getDictValueEnum('contract_term', true, true).then((data) => {\r\n setContractTermEnum(data);\r\n });\r\n }, []);\r\n\r\n const columns: ProColumns[] = [\r\n {\r\n title: '用户名',\r\n dataIndex: 'name',\r\n valueType: 'text',\r\n align: 'center',\r\n },\r\n {\r\n title: '期望薪资',\r\n dataIndex: 'minSalary',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n align: 'center',\r\n render: (_, record) => (\r\n <>\r\n {record.salaryMin}-{record.salaryMax}\r\n >\r\n ),\r\n },\r\n {\r\n title: '出生日期',\r\n dataIndex: 'birthDate',\r\n valueType: 'text',\r\n align: 'center',\r\n hideInSearch: true,\r\n },\r\n {\r\n title: '学历要求',\r\n dataIndex: 'education',\r\n valueType: 'select',\r\n align: 'center',\r\n valueEnum: educationEnum,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: '区域',\r\n dataIndex: 'area',\r\n valueType: 'select',\r\n align: 'center',\r\n valueEnum: areaEnum,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: '性别',\r\n dataIndex: 'sex',\r\n valueType: 'select',\r\n align: 'center',\r\n valueEnum: sexEnum,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: '政治面貌',\r\n dataIndex: 'politicalAffiliation',\r\n valueType: 'select',\r\n align: 'center',\r\n valueEnum: politicalEnum,\r\n render: (_, record) => {\r\n return ;\r\n },\r\n },\r\n {\r\n title: '匹配度',\r\n dataIndex: 'minSalary',\r\n valueType: 'text',\r\n hideInSearch: true,\r\n align: 'center',\r\n render: (_, record) => (\r\n <>{similarityJobs.calculationMatchingDegreeJob(record).overallMatch}>\r\n ),\r\n },\r\n {\r\n title: '操作',\r\n hideInSearch: true,\r\n align: 'center',\r\n dataIndex: 'jobId',\r\n width: 200,\r\n render: (jobId, record) => [\r\n \r\n \r\n \r\n \r\n
\r\n ],\r\n },\r\n ];\r\n\r\n return (\r\n \r\n \r\n
\r\n // params 是需要自带的参数\r\n // 这个参数优先级更高,会覆盖查询表单的参数\r\n actionRef={actionRef}\r\n formRef={formTableRef}\r\n rowKey=\"jobId\"\r\n key=\"index\"\r\n columns={columns}\r\n request={(params) =>\r\n exportCmsJobCandidates(jobId).then((res) => {\r\n // const v = similarityJobs.calculationMatchingDegreeJob(res.rows[0]);\r\n // console.log(v);\r\n const result = {\r\n data: res.rows,\r\n total: res.total,\r\n success: true,\r\n };\r\n return result;\r\n })\r\n }\r\n toolBarRender={() => [\r\n ,\r\n ]}\r\n />\r\n {\r\n console.log('close');\r\n setModalVisible(false);\r\n setCurrentRow(undefined);\r\n setMatchingDegree(null);\r\n }}\r\n >\r\n {\r\n console.log('close');\r\n setHireVisible(false);\r\n setCurrentRow(undefined);\r\n setHireAdd(null);\r\n }}\r\n onSubmit={async (values) => {\r\n let resData;\r\n resData = await addCmsEmployeeConfirmList(values);\r\n if (resData.code === 200) {\r\n setHireVisible(false);\r\n setCurrentRow(undefined);\r\n message.success('新增成功');\r\n if (actionRef.current) {\r\n actionRef.current.reload();\r\n }\r\n }\r\n }}\r\n >\r\n {\r\n setResumeVisible(false);\r\n setCurrentRow(undefined);\r\n }}\r\n />\r\n \r\n \r\n );\r\n }\r\n\r\n export default ManagementList;\r\n",
+ "__isJSFile": true,
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/pages/Management/List/SeeMatching/index.tsx"
},
"ant-design-pro-layout": {
"id": "ant-design-pro-layout",
"path": "/",
- "file": "E:/project/ks-admin/src/.umi/plugin-layout/Layout.tsx",
+ "file": "D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/Layout.tsx",
"absPath": "/",
"isLayout": true,
- "__absFile": "E:/project/ks-admin/src/.umi/plugin-layout/Layout.tsx"
+ "__absFile": "D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/Layout.tsx"
},
"umi/plugin/openapi": {
"path": "/umi/plugin/openapi",
"absPath": "/umi/plugin/openapi",
"id": "umi/plugin/openapi",
- "file": "E:/project/ks-admin/src/.umi/plugin-openapi/openapi.tsx"
+ "file": "D:/work/SHIHEZI/shz-admin/src/.umi/plugin-openapi/openapi.tsx"
}
},
"apiRoutes": {},
@@ -4216,14 +4274,14 @@
},
"react": {
"version": "18.3.1",
- "path": "E:\\project\\ks-admin\\node_modules\\react"
+ "path": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react"
},
"react-dom": {
"version": "18.3.1",
- "path": "E:\\project\\ks-admin\\node_modules\\react-dom"
+ "path": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\react-dom"
},
"appJS": {
- "path": "E:\\project\\ks-admin\\src\\app.tsx",
+ "path": "D:\\work\\SHIHEZI\\shz-admin\\src\\app.tsx",
"exports": [
"getInitialState",
"layout",
@@ -4235,15 +4293,15 @@
},
"locale": "zh-CN",
"globalCSS": [
- "E:\\project\\ks-admin\\src\\global.less"
+ "D:\\work\\SHIHEZI\\shz-admin\\src\\global.less"
],
"globalJS": [
- "E:\\project\\ks-admin\\src\\global.tsx"
+ "D:\\work\\SHIHEZI\\shz-admin\\src\\global.tsx"
],
"overridesCSS": [],
"bundler": "webpack",
"git": {
- "originUrl": "http://124.243.245.42:3000/sdz/ks-admin.git"
+ "originUrl": "http://124.243.245.42:3000/sh/shz-admin.git"
},
"framework": "react",
"typescript": {
@@ -4253,13 +4311,13 @@
"faviconFiles": [],
"port": 8000,
"host": "0.0.0.0",
- "ip": "192.168.2.97",
+ "ip": "192.168.3.8",
"antd": {
- "pkgPath": "E:\\project\\ks-admin\\node_modules\\antd",
+ "pkgPath": "D:\\work\\SHIHEZI\\shz-admin\\node_modules\\antd",
"version": "5.27.4"
},
"pluginLayout": {
- "pkgPath": "E:/project/ks-admin/node_modules/@ant-design/pro-components",
+ "pkgPath": "D:/work/SHIHEZI/shz-admin/node_modules/@ant-design/pro-components",
"version": "2.8.10"
}
}
diff --git a/src/.umi/core/defineApp.ts b/src/.umi/core/defineApp.ts
index 24f18b1..4c9de85 100644
--- a/src/.umi/core/defineApp.ts
+++ b/src/.umi/core/defineApp.ts
@@ -1,11 +1,11 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import type { IRuntimeConfig as Plugin0 } from 'E:/project/ks-admin/src/.umi/plugin-antd/runtimeConfig.d'
-import type { IRuntimeConfig as Plugin1 } from 'E:/project/ks-admin/src/.umi/plugin-initialState/runtimeConfig.d'
-import type { IRuntimeConfig as Plugin2 } from 'E:/project/ks-admin/src/.umi/plugin-layout/runtimeConfig.d'
-import type { IRuntimeConfig as Plugin3 } from 'E:/project/ks-admin/src/.umi/plugin-locale/runtimeConfig.d'
-import type { IRuntimeConfig as Plugin4 } from 'E:/project/ks-admin/src/.umi/plugin-request/runtimeConfig.d'
+import type { IRuntimeConfig as Plugin0 } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-antd/runtimeConfig.d'
+import type { IRuntimeConfig as Plugin1 } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-initialState/runtimeConfig.d'
+import type { IRuntimeConfig as Plugin2 } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/runtimeConfig.d'
+import type { IRuntimeConfig as Plugin3 } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-locale/runtimeConfig.d'
+import type { IRuntimeConfig as Plugin4 } from 'D:/work/SHIHEZI/shz-admin/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;
diff --git a/src/.umi/core/helmet.ts b/src/.umi/core/helmet.ts
index 89d40f6..59e6d76 100644
--- a/src/.umi/core/helmet.ts
+++ b/src/.umi/core/helmet.ts
@@ -2,7 +2,7 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
-import { HelmetProvider } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react';
+import { HelmetProvider } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react';
import { context } from './helmetContext';
export const innerProvider = (container) => {
diff --git a/src/.umi/core/history.ts b/src/.umi/core/history.ts
index a0cae94..1a56f71 100644
--- a/src/.umi/core/history.ts
+++ b/src/.umi/core/history.ts
@@ -1,7 +1,7 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import { createHashHistory, createMemoryHistory, createBrowserHistory } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react';
+import { createHashHistory, createMemoryHistory, createBrowserHistory } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react';
import type { UmiHistory } from './historyIntelli';
let history: UmiHistory;
diff --git a/src/.umi/core/historyIntelli.ts b/src/.umi/core/historyIntelli.ts
index aab3425..7ef9a94 100644
--- a/src/.umi/core/historyIntelli.ts
+++ b/src/.umi/core/historyIntelli.ts
@@ -2,7 +2,7 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import { getRoutes } from './route'
-import type { History } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react'
+import type { History } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react'
type Routes = Awaited>['routes']
type AllRoute = Routes[keyof Routes]
diff --git a/src/.umi/core/plugin.ts b/src/.umi/core/plugin.ts
index 0424646..9ee6db5 100644
--- a/src/.umi/core/plugin.ts
+++ b/src/.umi/core/plugin.ts
@@ -1,13 +1,13 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import * as Plugin_0 from 'E:/project/ks-admin/src/app.tsx';
+import * as Plugin_0 from 'D:/work/SHIHEZI/shz-admin/src/app.tsx';
import * as Plugin_1 from '@@/core/helmet.ts';
-import * as Plugin_2 from 'E:/project/ks-admin/src/.umi/plugin-access/runtime.tsx';
-import * as Plugin_3 from 'E:/project/ks-admin/src/.umi/plugin-initialState/runtime.tsx';
-import * as Plugin_4 from 'E:/project/ks-admin/src/.umi/plugin-layout/runtime.tsx';
-import * as Plugin_5 from 'E:/project/ks-admin/src/.umi/plugin-locale/runtime.tsx';
-import * as Plugin_6 from 'E:/project/ks-admin/src/.umi/plugin-model/runtime.tsx';
+import * as Plugin_2 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-access/runtime.tsx';
+import * as Plugin_3 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-initialState/runtime.tsx';
+import * as Plugin_4 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/runtime.tsx';
+import * as Plugin_5 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-locale/runtime.tsx';
+import * as Plugin_6 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-model/runtime.tsx';
import { PluginManager } from 'umi';
function __defaultExport (obj) {
@@ -20,7 +20,7 @@ export function getPlugins() {
return [
{
apply: __defaultExport(Plugin_0),
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/app.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/app.tsx',
},
{
apply: Plugin_1,
@@ -28,23 +28,23 @@ export function getPlugins() {
},
{
apply: Plugin_2,
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/.umi/plugin-access/runtime.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-access/runtime.tsx',
},
{
apply: Plugin_3,
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/.umi/plugin-initialState/runtime.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-initialState/runtime.tsx',
},
{
apply: Plugin_4,
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/.umi/plugin-layout/runtime.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/runtime.tsx',
},
{
apply: Plugin_5,
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/.umi/plugin-locale/runtime.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-locale/runtime.tsx',
},
{
apply: Plugin_6,
- path: process.env.NODE_ENV === 'production' ? void 0 : 'E:/project/ks-admin/src/.umi/plugin-model/runtime.tsx',
+ path: process.env.NODE_ENV === 'production' ? void 0 : 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-model/runtime.tsx',
},
];
}
diff --git a/src/.umi/core/polyfill.ts b/src/.umi/core/polyfill.ts
index 17b3041..fb1afba 100644
--- a/src/.umi/core/polyfill.ts
+++ b/src/.umi/core/polyfill.ts
@@ -1,220 +1,220 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import "E:/project/ks-admin/node_modules/core-js/modules/es.error.cause.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.aggregate-error.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.aggregate-error.cause.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.at.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.find-last.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.find-last-index.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.push.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.reduce.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.reduce-right.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.to-reversed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.to-sorted.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.to-spliced.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.array.with.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.map.group-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.object.group-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.object.has-own.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.promise.any.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.promise.with-resolvers.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.reflect.to-string-tag.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.regexp.flags.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.string.at-alternative.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.string.is-well-formed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.string.replace-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.string.to-well-formed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.at.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.find-last.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.find-last-index.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.set.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.to-reversed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.to-sorted.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/es.typed-array.with.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.suppressed-error.constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.from-async.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.filter-out.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.filter-reject.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.group.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.group-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.group-by-to-map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.group-to-map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.is-template-object.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.last-index.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.last-item.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array.unique-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array-buffer.detached.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array-buffer.transfer.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.drop.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.every.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.filter.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.find.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.flat-map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.for-each.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.indexed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.reduce.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.some.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.take.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.async-iterator.to-array.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.bigint.range.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.composite-key.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.composite-symbol.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.data-view.get-float16.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.data-view.set-float16.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.disposable-stack.constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.function.demethodize.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.function.is-callable.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.function.is-constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.function.metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.function.un-this.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.constructor.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.dispose.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.drop.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.every.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.filter.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.find.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.flat-map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.for-each.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.indexed.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.range.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.reduce.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.some.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.take.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.to-array.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.iterator.to-async.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.json.is-raw-json.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.json.parse.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.json.raw-json.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.delete-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.emplace.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.every.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.filter.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.find.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.find-key.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.includes.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.key-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.key-of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.map-keys.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.map-values.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.merge.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.reduce.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.some.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.update.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.update-or-insert.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.map.upsert.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.clamp.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.deg-per-rad.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.degrees.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.fscale.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.f16round.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.iaddh.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.imulh.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.isubh.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.rad-per-deg.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.radians.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.scale.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.seeded-prng.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.signbit.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.math.umulh.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.number.from-string.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.number.range.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.object.iterate-entries.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.object.iterate-keys.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.object.iterate-values.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.observable.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.promise.try.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.define-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.delete-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.get-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.has-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.reflect.metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.regexp.escape.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.add-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.delete-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.difference.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.difference.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.every.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.filter.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.find.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.intersection.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.intersection.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-disjoint-from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-subset-of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.is-superset-of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.join.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.map.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.reduce.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.some.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.symmetric-difference.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.union.v2.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.set.union.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.string.at.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.string.cooked.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.string.code-points.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.string.dedent.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.async-dispose.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.dispose.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.is-registered.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.is-well-known.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.matcher.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.metadata.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.metadata-key.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.observable.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.pattern-match.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.symbol.replace-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.from-async.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.filter-out.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.filter-reject.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.group-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.to-spliced.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.typed-array.unique-by.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.uint8-array.from-base64.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.uint8-array.from-hex.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.uint8-array.to-base64.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.uint8-array.to-hex.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-map.delete-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-map.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-map.of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-map.emplace.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-map.upsert.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-set.add-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-set.delete-all.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-set.from.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/esnext.weak-set.of.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.dom-exception.stack.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.immediate.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.self.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.structured-clone.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.url.can-parse.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.url-search-params.delete.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.url-search-params.has.js";
-import "E:/project/ks-admin/node_modules/core-js/modules/web.url-search-params.size.js";
-import 'E:/project/ks-admin/node_modules/@umijs/preset-umi/node_modules/regenerator-runtime/runtime.js';
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.error.cause.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.aggregate-error.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.aggregate-error.cause.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.at.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.find-last.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.find-last-index.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.push.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.reduce.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.reduce-right.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.to-reversed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.to-sorted.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.to-spliced.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.array.with.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.map.group-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.object.group-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.object.has-own.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.promise.any.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.promise.with-resolvers.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.reflect.to-string-tag.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.regexp.flags.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.string.at-alternative.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.string.is-well-formed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.string.replace-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.string.to-well-formed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.at.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.find-last.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.find-last-index.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.set.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.to-reversed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.to-sorted.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/es.typed-array.with.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.suppressed-error.constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.from-async.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.filter-out.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.filter-reject.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.group.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.group-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.group-by-to-map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.group-to-map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.is-template-object.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.last-index.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.last-item.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array.unique-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array-buffer.detached.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array-buffer.transfer.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.array-buffer.transfer-to-fixed-length.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-disposable-stack.constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.as-indexed-pairs.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.async-dispose.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.drop.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.every.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.filter.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.find.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.flat-map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.for-each.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.indexed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.reduce.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.some.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.take.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.async-iterator.to-array.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.bigint.range.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.composite-key.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.composite-symbol.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.data-view.get-float16.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.data-view.get-uint8-clamped.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.data-view.set-float16.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.data-view.set-uint8-clamped.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.disposable-stack.constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.function.demethodize.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.function.is-callable.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.function.is-constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.function.metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.function.un-this.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.constructor.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.as-indexed-pairs.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.dispose.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.drop.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.every.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.filter.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.find.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.flat-map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.for-each.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.indexed.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.range.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.reduce.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.some.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.take.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.to-array.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.iterator.to-async.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.json.is-raw-json.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.json.parse.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.json.raw-json.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.delete-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.emplace.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.every.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.filter.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.find.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.find-key.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.includes.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.key-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.key-of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.map-keys.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.map-values.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.merge.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.reduce.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.some.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.update.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.update-or-insert.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.map.upsert.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.clamp.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.deg-per-rad.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.degrees.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.fscale.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.f16round.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.iaddh.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.imulh.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.isubh.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.rad-per-deg.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.radians.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.scale.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.seeded-prng.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.signbit.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.math.umulh.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.number.from-string.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.number.range.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.object.iterate-entries.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.object.iterate-keys.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.object.iterate-values.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.observable.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.promise.try.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.define-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.delete-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.get-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.get-own-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.has-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.has-own-metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.reflect.metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.regexp.escape.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.add-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.delete-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.difference.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.difference.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.every.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.filter.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.find.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.intersection.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.intersection.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-disjoint-from.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-disjoint-from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-subset-of.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-subset-of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-superset-of.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.is-superset-of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.join.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.map.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.reduce.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.some.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.symmetric-difference.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.symmetric-difference.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.union.v2.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.set.union.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.string.at.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.string.cooked.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.string.code-points.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.string.dedent.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.async-dispose.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.dispose.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.is-registered-symbol.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.is-registered.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.is-well-known-symbol.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.is-well-known.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.matcher.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.metadata.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.metadata-key.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.observable.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.pattern-match.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.symbol.replace-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.from-async.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.filter-out.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.filter-reject.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.group-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.to-spliced.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.typed-array.unique-by.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.uint8-array.from-base64.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.uint8-array.from-hex.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.uint8-array.to-base64.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.uint8-array.to-hex.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-map.delete-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-map.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-map.of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-map.emplace.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-map.upsert.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-set.add-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-set.delete-all.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-set.from.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/esnext.weak-set.of.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.dom-exception.stack.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.immediate.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.self.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.structured-clone.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.url.can-parse.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.url-search-params.delete.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.url-search-params.has.js";
+import "D:/work/SHIHEZI/shz-admin/node_modules/core-js/modules/web.url-search-params.size.js";
+import 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/preset-umi/node_modules/regenerator-runtime/runtime.js';
export {};
diff --git a/src/.umi/core/route.tsx b/src/.umi/core/route.tsx
index 185c53b..1ccffca 100644
--- a/src/.umi/core/route.tsx
+++ b/src/.umi/core/route.tsx
@@ -4,7 +4,7 @@
import React from 'react';
export async function getRoutes() {
- const routes = {"1":{"path":"/","redirect":"/account/center","parentId":"ant-design-pro-layout","id":"1"},"2":{"path":"*","layout":false,"id":"2"},"3":{"path":"/user","layout":false,"id":"3"},"4":{"name":"login","path":"/user/login","parentId":"3","id":"4"},"5":{"path":"/job-portal","layout":false,"id":"5"},"6":{"path":"/job-portal","parentId":"5","id":"6"},"7":{"path":"/job-portal/list","parentId":"5","id":"7"},"8":{"path":"/job-portal/detail","parentId":"5","id":"8"},"9":{"path":"/job-portal/resume","parentId":"5","id":"9"},"10":{"path":"/job-portal/profile","parentId":"5","id":"10"},"11":{"path":"/job-portal/personal-center","parentId":"5","id":"11"},"12":{"path":"/job-portal/personal-center/applications","parentId":"5","id":"12"},"13":{"path":"/job-portal/personal-center/favorites","parentId":"5","id":"13"},"14":{"path":"/job-portal/personal-center/footprints","parentId":"5","id":"14"},"15":{"path":"/account","parentId":"ant-design-pro-layout","id":"15"},"16":{"name":"acenter","path":"/account/center","parentId":"15","id":"16"},"17":{"name":"asettings","path":"/account/settings","parentId":"15","id":"17"},"18":{"name":"area","path":"/area","parentId":"ant-design-pro-layout","id":"18"},"19":{"name":"字典数据","path":"/area/updata-router/index/:id","parentId":"18","id":"19"},"20":{"name":"system","path":"/system","parentId":"ant-design-pro-layout","id":"20"},"21":{"name":"字典数据","path":"/system/dict-data/index/:id","parentId":"20","id":"21"},"22":{"name":"字典数据","path":"/system/admin-dict-data/index/:id","parentId":"20","id":"22"},"23":{"name":"分配用户","path":"/system/role-auth/user/:id","parentId":"20","id":"23"},"24":{"name":"monitor","path":"/monitor","parentId":"ant-design-pro-layout","id":"24"},"25":{"name":"任务日志","path":"/monitor/job-log/index/:id","parentId":"24","id":"25"},"26":{"name":"tool","path":"/tool","parentId":"ant-design-pro-layout","id":"26"},"27":{"name":"导入表","path":"/tool/gen/import","parentId":"26","id":"27"},"28":{"name":"编辑表","path":"/tool/gen/edit.tsx","parentId":"26","id":"28"},"ant-design-pro-layout":{"id":"ant-design-pro-layout","path":"/","isLayout":true},"umi/plugin/openapi":{"path":"/umi/plugin/openapi","id":"umi/plugin/openapi"}} as const;
+ const routes = {"1":{"path":"/","redirect":"/account/center","parentId":"ant-design-pro-layout","id":"1"},"2":{"path":"*","layout":false,"id":"2"},"3":{"path":"/user","layout":false,"id":"3"},"4":{"name":"login","path":"/user/login","parentId":"3","id":"4"},"5":{"path":"/job-portal","layout":false,"id":"5"},"6":{"path":"/job-portal","parentId":"5","id":"6"},"7":{"path":"/job-portal/list","parentId":"5","id":"7"},"8":{"path":"/job-portal/detail","parentId":"5","id":"8"},"9":{"path":"/job-portal/resume","parentId":"5","id":"9"},"10":{"path":"/job-portal/profile","parentId":"5","id":"10"},"11":{"path":"/job-portal/personal-center","parentId":"5","id":"11"},"12":{"path":"/job-portal/personal-center/applications","parentId":"5","id":"12"},"13":{"path":"/job-portal/personal-center/favorites","parentId":"5","id":"13"},"14":{"path":"/job-portal/personal-center/footprints","parentId":"5","id":"14"},"15":{"path":"/job-portal/message","parentId":"5","id":"15"},"16":{"path":"/account","parentId":"ant-design-pro-layout","id":"16"},"17":{"name":"acenter","path":"/account/center","parentId":"16","id":"17"},"18":{"name":"asettings","path":"/account/settings","parentId":"16","id":"18"},"19":{"name":"area","path":"/area","parentId":"ant-design-pro-layout","id":"19"},"20":{"name":"字典数据","path":"/area/updata-router/index/:id","parentId":"19","id":"20"},"21":{"name":"system","path":"/system","parentId":"ant-design-pro-layout","id":"21"},"22":{"name":"字典数据","path":"/system/dict-data/index/:id","parentId":"21","id":"22"},"23":{"name":"字典数据","path":"/system/admin-dict-data/index/:id","parentId":"21","id":"23"},"24":{"name":"分配用户","path":"/system/role-auth/user/:id","parentId":"21","id":"24"},"25":{"name":"monitor","path":"/monitor","parentId":"ant-design-pro-layout","id":"25"},"26":{"name":"任务日志","path":"/monitor/job-log/index/:id","parentId":"25","id":"26"},"27":{"name":"tool","path":"/tool","parentId":"ant-design-pro-layout","id":"27"},"28":{"name":"导入表","path":"/tool/gen/import","parentId":"27","id":"28"},"29":{"name":"编辑表","path":"/tool/gen/edit.tsx","parentId":"27","id":"29"},"30":{"name":"management","path":"/management","parentId":"ant-design-pro-layout","id":"30"},"31":{"name":"查看申请人","path":"/management/see-matching/index/:id","parentId":"30","id":"31"},"ant-design-pro-layout":{"id":"ant-design-pro-layout","path":"/","isLayout":true},"umi/plugin/openapi":{"path":"/umi/plugin/openapi","id":"umi/plugin/openapi"}} as const;
return {
routes,
routeComponents: {
@@ -22,22 +22,25 @@ export async function getRoutes() {
'12': React.lazy(() => import(/* webpackChunkName: "p__JobPortal__PersonalCenter__Applications__index" */'@/pages/JobPortal/PersonalCenter/Applications/index.tsx')),
'13': React.lazy(() => import(/* webpackChunkName: "p__JobPortal__PersonalCenter__Favorites__index" */'@/pages/JobPortal/PersonalCenter/Favorites/index.tsx')),
'14': React.lazy(() => import(/* webpackChunkName: "p__JobPortal__PersonalCenter__Footprints__index" */'@/pages/JobPortal/PersonalCenter/Footprints/index.tsx')),
-'15': React.lazy(() => import('./EmptyRoute')),
-'16': React.lazy(() => import(/* webpackChunkName: "p__User__Center__index" */'@/pages/User/Center/index.tsx')),
-'17': React.lazy(() => import(/* webpackChunkName: "p__User__Settings__index" */'@/pages/User/Settings/index.tsx')),
-'18': React.lazy(() => import('./EmptyRoute')),
-'19': React.lazy(() => import(/* webpackChunkName: "p__Area__Subway__UpLine__index" */'@/pages/Area/Subway/UpLine/index.tsx')),
-'20': React.lazy(() => import('./EmptyRoute')),
-'21': React.lazy(() => import(/* webpackChunkName: "p__System__DictData__index" */'@/pages/System/DictData/index.tsx')),
-'22': React.lazy(() => import(/* webpackChunkName: "p__System__AdminDictData__index" */'@/pages/System/AdminDictData/index.tsx')),
-'23': React.lazy(() => import(/* webpackChunkName: "p__System__Role__authUser" */'@/pages/System/Role/authUser.tsx')),
-'24': React.lazy(() => import('./EmptyRoute')),
-'25': React.lazy(() => import(/* webpackChunkName: "p__Monitor__JobLog__index" */'@/pages/Monitor/JobLog/index.tsx')),
-'26': React.lazy(() => import('./EmptyRoute')),
-'27': React.lazy(() => import(/* webpackChunkName: "p__Tool__Gen__import" */'@/pages/Tool/Gen/import.tsx')),
-'28': React.lazy(() => import(/* webpackChunkName: "p__Tool__Gen__edit" */'@/pages/Tool/Gen/edit.tsx')),
-'ant-design-pro-layout': React.lazy(() => import(/* webpackChunkName: "umi__plugin-layout__Layout" */'E:/project/ks-admin/src/.umi/plugin-layout/Layout.tsx')),
-'umi/plugin/openapi': React.lazy(() => import(/* webpackChunkName: "umi__plugin-openapi__openapi" */'E:/project/ks-admin/src/.umi/plugin-openapi/openapi.tsx')),
+'15': React.lazy(() => import(/* webpackChunkName: "p__JobPortal__Message__index" */'@/pages/JobPortal/Message/index.tsx')),
+'16': React.lazy(() => import('./EmptyRoute')),
+'17': React.lazy(() => import(/* webpackChunkName: "p__User__Center__index" */'@/pages/User/Center/index.tsx')),
+'18': React.lazy(() => import(/* webpackChunkName: "p__User__Settings__index" */'@/pages/User/Settings/index.tsx')),
+'19': React.lazy(() => import('./EmptyRoute')),
+'20': React.lazy(() => import(/* webpackChunkName: "p__Area__Subway__UpLine__index" */'@/pages/Area/Subway/UpLine/index.tsx')),
+'21': React.lazy(() => import('./EmptyRoute')),
+'22': React.lazy(() => import(/* webpackChunkName: "p__System__DictData__index" */'@/pages/System/DictData/index.tsx')),
+'23': React.lazy(() => import(/* webpackChunkName: "p__System__AdminDictData__index" */'@/pages/System/AdminDictData/index.tsx')),
+'24': React.lazy(() => import(/* webpackChunkName: "p__System__Role__authUser" */'@/pages/System/Role/authUser.tsx')),
+'25': React.lazy(() => import('./EmptyRoute')),
+'26': React.lazy(() => import(/* webpackChunkName: "p__Monitor__JobLog__index" */'@/pages/Monitor/JobLog/index.tsx')),
+'27': React.lazy(() => import('./EmptyRoute')),
+'28': React.lazy(() => import(/* webpackChunkName: "p__Tool__Gen__import" */'@/pages/Tool/Gen/import.tsx')),
+'29': React.lazy(() => import(/* webpackChunkName: "p__Tool__Gen__edit" */'@/pages/Tool/Gen/edit.tsx')),
+'30': React.lazy(() => import('./EmptyRoute')),
+'31': React.lazy(() => import(/* webpackChunkName: "p__Management__List__SeeMatching__index" */'@/pages/Management/List/SeeMatching/index.tsx')),
+'ant-design-pro-layout': React.lazy(() => import(/* webpackChunkName: "umi__plugin-layout__Layout" */'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/Layout.tsx')),
+'umi/plugin/openapi': React.lazy(() => import(/* webpackChunkName: "umi__plugin-openapi__openapi" */'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-openapi/openapi.tsx')),
},
};
}
diff --git a/src/.umi/exports.ts b/src/.umi/exports.ts
index 59872f6..98ef3a8 100644
--- a/src/.umi/exports.ts
+++ b/src/.umi/exports.ts
@@ -5,20 +5,20 @@
export { defineApp } from './core/defineApp'
export type { RuntimeConfig } from './core/defineApp'
// plugins
-export { Access, useAccess, useAccessMarkedRoutes } from 'E:/project/ks-admin/src/.umi/plugin-access';
-export { addLocale, setLocale, getLocale, getIntl, useIntl, injectIntl, formatMessage, FormattedMessage, getAllLocales, FormattedDate, FormattedDateParts, FormattedDisplayName, FormattedHTMLMessage, FormattedList, FormattedNumber, FormattedNumberParts, FormattedPlural, FormattedRelativeTime, FormattedTime, FormattedTimeParts, IntlProvider, RawIntlProvider, SelectLang } from 'E:/project/ks-admin/src/.umi/plugin-locale';
-export { Provider, useModel } from 'E:/project/ks-admin/src/.umi/plugin-model';
-export { useRequest, UseRequestProvider, request, getRequestInstance } from 'E:/project/ks-admin/src/.umi/plugin-request';
+export { Access, useAccess, useAccessMarkedRoutes } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-access';
+export { addLocale, setLocale, getLocale, getIntl, useIntl, injectIntl, formatMessage, FormattedMessage, getAllLocales, FormattedDate, FormattedDateParts, FormattedDisplayName, FormattedHTMLMessage, FormattedList, FormattedNumber, FormattedNumberParts, FormattedPlural, FormattedRelativeTime, FormattedTime, FormattedTimeParts, IntlProvider, RawIntlProvider, SelectLang } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-locale';
+export { Provider, useModel } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-model';
+export { useRequest, UseRequestProvider, request, getRequestInstance } from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-request';
// plugins types.d.ts
-export * from 'E:/project/ks-admin/src/.umi/plugin-access/types.d';
-export * from 'E:/project/ks-admin/src/.umi/plugin-antd/types.d';
-export * from 'E:/project/ks-admin/src/.umi/plugin-layout/types.d';
-export * from 'E:/project/ks-admin/src/.umi/plugin-request/types.d';
+export * from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-access/types.d';
+export * from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-antd/types.d';
+export * from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-layout/types.d';
+export * from 'D:/work/SHIHEZI/shz-admin/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, useLoaderData, useRouteProps, useSelectedRoutes, useServerLoaderData, renderClient, __getRoot, Link, useRouteData, __useFetcher, withRouter } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react';
-export type { History, ClientLoader } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react'
+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, useLoaderData, useRouteProps, useSelectedRoutes, useServerLoaderData, renderClient, __getRoot, Link, useRouteData, __useFetcher, withRouter } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react';
+export type { History, ClientLoader } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react'
// umi/client/client/plugin
-export { ApplyPluginsType, PluginManager } from 'E:/project/ks-admin/node_modules/umi/client/client/plugin.js';
+export { ApplyPluginsType, PluginManager } from 'D:/work/SHIHEZI/shz-admin/node_modules/umi/client/client/plugin.js';
export { history, createHistory } from './core/history';
export { terminal } from './core/terminal';
// react ssr
diff --git a/src/.umi/plugin-layout/Layout.tsx b/src/.umi/plugin-layout/Layout.tsx
index 4529c49..93051aa 100644
--- a/src/.umi/plugin-layout/Layout.tsx
+++ b/src/.umi/plugin-layout/Layout.tsx
@@ -1,7 +1,7 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-///
+///
import {
@@ -11,7 +11,7 @@ import {
import React, { useMemo } from 'react';
import {
ProLayout,
-} from "E:/project/ks-admin/node_modules/@ant-design/pro-components";
+} from "D:/work/SHIHEZI/shz-admin/node_modules/@ant-design/pro-components";
import './Layout.css';
import Logo from './Logo';
import Exception from './Exception';
@@ -88,7 +88,7 @@ export default (props: any) => {
"fixedHeader": false,
"fixSiderbar": true,
"colorWeak": false,
- "title": "喀什智慧就业服务系统",
+ "title": "石河子智慧就业服务系统",
"pwa": true,
"logo": "https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg",
"iconfontUrl": "",
diff --git a/src/.umi/plugin-layout/rightRender.tsx b/src/.umi/plugin-layout/rightRender.tsx
index ca732d6..facbf0a 100644
--- a/src/.umi/plugin-layout/rightRender.tsx
+++ b/src/.umi/plugin-layout/rightRender.tsx
@@ -3,7 +3,7 @@
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
import { Avatar, version, Dropdown, Menu, Spin } from 'antd';
-import { LogoutOutlined } from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/@ant-design/icons';
+import { LogoutOutlined } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/@ant-design/icons';
import { SelectLang } from '@@/plugin-locale';
export function getRightRenderContent (opts: {
diff --git a/src/.umi/plugin-layout/types.d.ts b/src/.umi/plugin-layout/types.d.ts
index 95ffecf..cbbcbb5 100644
--- a/src/.umi/plugin-layout/types.d.ts
+++ b/src/.umi/plugin-layout/types.d.ts
@@ -1,9 +1,9 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-///
+///
- import type { ProLayoutProps, HeaderProps } from "E:/project/ks-admin/node_modules/@ant-design/pro-components";
+ import type { ProLayoutProps, HeaderProps } from "D:/work/SHIHEZI/shz-admin/node_modules/@ant-design/pro-components";
import type InitialStateType from '@@/plugin-initialState/@@initialState';
type InitDataType = ReturnType;
diff --git a/src/.umi/plugin-locale/locale.tsx b/src/.umi/plugin-locale/locale.tsx
index 85924c8..9c4cdf0 100644
--- a/src/.umi/plugin-locale/locale.tsx
+++ b/src/.umi/plugin-locale/locale.tsx
@@ -3,10 +3,10 @@
// DO NOT CHANGE IT MANUALLY!
import React from 'react';
-import moment from 'E:/project/ks-admin/node_modules/dayjs';
-import 'E:/project/ks-admin/node_modules/dayjs/locale/en';
-import 'E:/project/ks-admin/node_modules/dayjs/locale/zh-cn';
-import 'E:/project/ks-admin/node_modules/dayjs/locale/zh-tw';
+import moment from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs';
+import 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/locale/en';
+import 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/locale/zh-cn';
+import 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/locale/zh-tw';
import { RawIntlProvider, getLocale, getDirection , setIntl, getIntl, localeInfo, event, LANG_CHANGE_EVENT } from './localeExports';
diff --git a/src/.umi/plugin-locale/localeExports.ts b/src/.umi/plugin-locale/localeExports.ts
index 41e72a5..d5615c9 100644
--- a/src/.umi/plugin-locale/localeExports.ts
+++ b/src/.umi/plugin-locale/localeExports.ts
@@ -5,11 +5,11 @@ import {
createIntl,
IntlShape,
MessageDescriptor,
-} from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/react-intl';
+} from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/react-intl';
import { getPluginManager } from '../core/plugin';
-import EventEmitter from 'E:/project/ks-admin/node_modules/event-emitter';
+import EventEmitter from 'D:/work/SHIHEZI/shz-admin/node_modules/event-emitter';
// @ts-ignore
-import warning from 'E:/project/ks-admin/node_modules/warning';
+import warning from 'D:/work/SHIHEZI/shz-admin/node_modules/warning';
export {
createIntl,
@@ -34,7 +34,7 @@ export {
defineMessages,
injectIntl,
useIntl,
-} from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/react-intl';
+} from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/react-intl';
let g_intl: IntlShape;
@@ -46,12 +46,12 @@ export const event = new EventEmitter();
export const LANG_CHANGE_EVENT = Symbol('LANG_CHANGE');
import enUS0 from 'antd/es/locale/en_US';
-import lang_enUS0 from "E:/project/ks-admin/src/locales/en-US.ts";
+import lang_enUS0 from "D:/work/SHIHEZI/shz-admin/src/locales/en-US.ts";
import zhCN0 from 'antd/es/locale/zh_CN';
-import lang_zhCN0 from "E:/project/ks-admin/src/locales/zh-CN.ts";
-import lang_zhCN1 from "E:/project/ks-admin/src/pages/Tool/Gen/locales/zh-CN.ts";
+import lang_zhCN0 from "D:/work/SHIHEZI/shz-admin/src/locales/zh-CN.ts";
+import lang_zhCN1 from "D:/work/SHIHEZI/shz-admin/src/pages/Tool/Gen/locales/zh-CN.ts";
import zhTW0 from 'antd/es/locale/zh_TW';
-import lang_zhTW0 from "E:/project/ks-admin/src/locales/zh-TW.ts";
+import lang_zhTW0 from "D:/work/SHIHEZI/shz-admin/src/locales/zh-TW.ts";
const flattenMessages=(
nestedMessages: Record,
diff --git a/src/.umi/plugin-locale/runtimeConfig.d.ts b/src/.umi/plugin-locale/runtimeConfig.d.ts
index 2511b36..5b4220b 100644
--- a/src/.umi/plugin-locale/runtimeConfig.d.ts
+++ b/src/.umi/plugin-locale/runtimeConfig.d.ts
@@ -3,7 +3,7 @@
import {
IntlCache,
createIntl,
-} from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/react-intl';
+} from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/react-intl';
type OptionalIntlConfig = Omit[0], 'locale' | 'defaultLocale'>;
export interface IRuntimeConfig {
locale?: {
diff --git a/src/.umi/plugin-model/index.tsx b/src/.umi/plugin-model/index.tsx
index 786bb82..75d5c48 100644
--- a/src/.umi/plugin-model/index.tsx
+++ b/src/.umi/plugin-model/index.tsx
@@ -3,7 +3,7 @@
// DO NOT CHANGE IT MANUALLY!
// @ts-ignore
import type { models as rawModels } from '@@/plugin-model/model';
-import isEqual from 'E:/project/ks-admin/node_modules/fast-deep-equal/index.js';
+import isEqual from 'D:/work/SHIHEZI/shz-admin/node_modules/fast-deep-equal/index.js';
import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
type Models = typeof rawModels;
diff --git a/src/.umi/plugin-model/model.ts b/src/.umi/plugin-model/model.ts
index 254cd1b..cc68951 100644
--- a/src/.umi/plugin-model/model.ts
+++ b/src/.umi/plugin-model/model.ts
@@ -1,9 +1,9 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import model_1 from 'E:/project/ks-admin/src/models/jobportal/user';
-import model_2 from 'E:/project/ks-admin/src/models/testModel';
-import model_3 from 'E:/project/ks-admin/src/.umi/plugin-initialState/@@initialState';
+import model_1 from 'D:/work/SHIHEZI/shz-admin/src/models/jobportal/user';
+import model_2 from 'D:/work/SHIHEZI/shz-admin/src/models/testModel';
+import model_3 from 'D:/work/SHIHEZI/shz-admin/src/.umi/plugin-initialState/@@initialState';
export const models = {
model_1: { namespace: 'jobportal.user', model: model_1 },
diff --git a/src/.umi/plugin-moment2dayjs/runtime.tsx b/src/.umi/plugin-moment2dayjs/runtime.tsx
index dc0c9d2..bfad638 100644
--- a/src/.umi/plugin-moment2dayjs/runtime.tsx
+++ b/src/.umi/plugin-moment2dayjs/runtime.tsx
@@ -1,20 +1,20 @@
// @ts-nocheck
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
-import dayjs from 'E:/project/ks-admin/node_modules/dayjs';
-import antdPlugin from 'E:/project/ks-admin/node_modules/antd-dayjs-webpack-plugin/src/antd-plugin.js';
+import dayjs from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs';
+import antdPlugin from 'D:/work/SHIHEZI/shz-admin/node_modules/antd-dayjs-webpack-plugin/src/antd-plugin.js';
-import isSameOrBefore from 'E:/project/ks-admin/node_modules/dayjs/plugin/isSameOrBefore';
-import isSameOrAfter from 'E:/project/ks-admin/node_modules/dayjs/plugin/isSameOrAfter';
-import advancedFormat from 'E:/project/ks-admin/node_modules/dayjs/plugin/advancedFormat';
-import customParseFormat from 'E:/project/ks-admin/node_modules/dayjs/plugin/customParseFormat';
-import weekday from 'E:/project/ks-admin/node_modules/dayjs/plugin/weekday';
-import weekYear from 'E:/project/ks-admin/node_modules/dayjs/plugin/weekYear';
-import weekOfYear from 'E:/project/ks-admin/node_modules/dayjs/plugin/weekOfYear';
-import isMoment from 'E:/project/ks-admin/node_modules/dayjs/plugin/isMoment';
-import localeData from 'E:/project/ks-admin/node_modules/dayjs/plugin/localeData';
-import localizedFormat from 'E:/project/ks-admin/node_modules/dayjs/plugin/localizedFormat';
-import duration from 'E:/project/ks-admin/node_modules/dayjs/plugin/duration';
+import isSameOrBefore from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/isSameOrBefore';
+import isSameOrAfter from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/isSameOrAfter';
+import advancedFormat from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/advancedFormat';
+import customParseFormat from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/customParseFormat';
+import weekday from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/weekday';
+import weekYear from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/weekYear';
+import weekOfYear from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/weekOfYear';
+import isMoment from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/isMoment';
+import localeData from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/localeData';
+import localizedFormat from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/localizedFormat';
+import duration from 'D:/work/SHIHEZI/shz-admin/node_modules/dayjs/plugin/duration';
dayjs.extend(isSameOrBefore);
dayjs.extend(isSameOrAfter);
diff --git a/src/.umi/plugin-request/request.ts b/src/.umi/plugin-request/request.ts
index 3aa7634..0cfc2c9 100644
--- a/src/.umi/plugin-request/request.ts
+++ b/src/.umi/plugin-request/request.ts
@@ -6,8 +6,8 @@ import axios, {
type AxiosRequestConfig,
type AxiosResponse,
type AxiosError,
-} from 'E:/project/ks-admin/node_modules/axios';
-import useUmiRequest, { UseRequestProvider } from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request';
+} from 'D:/work/SHIHEZI/shz-admin/node_modules/axios';
+import useUmiRequest, { UseRequestProvider } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request';
import { ApplyPluginsType } from 'umi';
import { getPluginManager } from '../core/plugin';
@@ -26,7 +26,7 @@ import {
PaginatedOptionsWithFormat,
PaginatedParams,
PaginatedResult,
-} from 'E:/project/ks-admin/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request/es/types';
+} from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/plugins/node_modules/@ahooksjs/use-request/es/types';
type ResultWithData< T = any > = { data?: T; [key: string]: any };
diff --git a/src/.umi/testBrowser.tsx b/src/.umi/testBrowser.tsx
index 7c8131f..05970a2 100644
--- a/src/.umi/testBrowser.tsx
+++ b/src/.umi/testBrowser.tsx
@@ -3,15 +3,15 @@
// DO NOT CHANGE IT MANUALLY!
import React, { useEffect, useState } from 'react';
import { ApplyPluginsType } from 'umi';
-import { renderClient, RenderClientOpts } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react';
+import { renderClient, RenderClientOpts } from 'D:/work/SHIHEZI/shz-admin/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 'E:/project/ks-admin/src/global.less';
-import 'E:/project/ks-admin/src/global.tsx';
+import 'D:/work/SHIHEZI/shz-admin/src/global.less';
+import 'D:/work/SHIHEZI/shz-admin/src/global.tsx';
import 'antd/dist/reset.css';
const publicPath = '/';
const runtimePublicPath = false;
diff --git a/src/.umi/umi.ts b/src/.umi/umi.ts
index e410fa8..eae45fb 100644
--- a/src/.umi/umi.ts
+++ b/src/.umi/umi.ts
@@ -2,10 +2,10 @@
// This file is generated by Umi automatically
// DO NOT CHANGE IT MANUALLY!
import './core/polyfill';
-import 'E:/project/ks-admin/src/global.less';
-import 'E:/project/ks-admin/src/global.tsx';
+import 'D:/work/SHIHEZI/shz-admin/src/global.less';
+import 'D:/work/SHIHEZI/shz-admin/src/global.tsx';
import 'antd/dist/reset.css';
-import { renderClient } from 'E:/project/ks-admin/node_modules/@umijs/renderer-react';
+import { renderClient } from 'D:/work/SHIHEZI/shz-admin/node_modules/@umijs/renderer-react';
import { getRoutes } from './core/route';
import { createPluginManager } from './core/plugin';
import { createHistory } from './core/history';
diff --git a/src/components/JobPortalHeader/index.tsx b/src/components/JobPortalHeader/index.tsx
index 02bed93..c1c00f4 100644
--- a/src/components/JobPortalHeader/index.tsx
+++ b/src/components/JobPortalHeader/index.tsx
@@ -237,7 +237,7 @@ const JobPortalHeader: React.FC = ({
handleNavClick('/job-portal')}>
- 喀什智慧就业服务平台
+ 石河子智慧就业服务平台
diff --git a/src/pages/User/Login/index.tsx b/src/pages/User/Login/index.tsx
index 0501f73..47cdf3d 100644
--- a/src/pages/User/Login/index.tsx
+++ b/src/pages/User/Login/index.tsx
@@ -199,7 +199,7 @@ const Login: React.FC = () => {
maxWidth: '75vw',
}}
logo={

}
- title="喀什智慧就业服务系统"
+ title="石河子智慧就业服务系统"
// subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}
initialValues={{
autoLogin: true,