Browse Source

deploy

master
Soleilw 3 months ago
parent
commit
cffb9fa395
81 changed files with 1490 additions and 365 deletions
  1. 9
    1
      config/routes.ts
  2. 0
    184
      dist/109.494fe1d5.async.js
  3. 0
    1
      dist/132.229607a2.async.js
  4. 42
    0
      dist/18.a7d57f8a.async.js
  5. 2
    2
      dist/186.85ff8a92.async.js
  6. 1
    0
      dist/198.7445bbc0.async.js
  7. 1
    1
      dist/211.0e350842.async.js
  8. 2
    0
      dist/228.3dfd775b.async.js
  9. 22
    22
      dist/297.2ec468b6.async.js
  10. 0
    0
      dist/297.a4421021.chunk.css
  11. 0
    1
      dist/339.486c3be2.async.js
  12. 21
    0
      dist/365.69273df2.async.js
  13. 0
    21
      dist/443.f3fc400f.async.js
  14. 0
    1
      dist/487.a300482d.async.js
  15. 1
    0
      dist/487.f62e0607.async.js
  16. 0
    1
      dist/496.3bebec96.async.js
  17. 1
    0
      dist/50.b8d3f0bd.async.js
  18. 43
    0
      dist/510.813c8fa4.async.js
  19. 142
    0
      dist/581.9dc3f9bf.async.js
  20. 2
    0
      dist/668.922f5baf.async.js
  21. 1
    1
      dist/673.ac212c69.async.js
  22. 1
    1
      dist/687.765ae2f2.async.js
  23. 0
    2
      dist/687.f2c72893.async.js
  24. 2
    0
      dist/833.a35fa8fe.async.js
  25. 1
    0
      dist/881.47fbd868.async.js
  26. 1
    1
      dist/99.64d025b6.async.js
  27. 1
    1
      dist/index.html
  28. 1
    1
      dist/p__Activity__List__index.8a3ad2bb.async.js
  29. 1
    0
      dist/p__Advertisement__List__index.1d0bb612.async.js
  30. 0
    1
      dist/p__Advertisement__List__index.c8baafb5.async.js
  31. 1
    1
      dist/p__Advertisement__Putin__index.322efb77.async.js
  32. 1
    1
      dist/p__Company__Department__index.5c29a99a.async.js
  33. 2
    0
      dist/p__Company__List__index.2ef83605.async.js
  34. 0
    1
      dist/p__Company__List__index.796ad4ff.async.js
  35. 0
    1
      dist/p__Company__Post__index.59285a05.async.js
  36. 1
    0
      dist/p__Company__Post__index.bf18b8b4.async.js
  37. 0
    1
      dist/p__Company__Vip__index.4ca757e5.async.js
  38. 1
    0
      dist/p__Company__Vip__index.5b365e65.async.js
  39. 0
    1
      dist/p__Fair__List__index.8defc839.async.js
  40. 1
    0
      dist/p__Fair__List__index.f5374228.async.js
  41. 1
    1
      dist/p__Feedback__index.910cf59a.async.js
  42. 1
    0
      dist/p__Home__index.13945c82.async.js
  43. 0
    1
      dist/p__Home__index.6c1ee7cd.async.js
  44. 1
    0
      dist/p__Information__Article__index.3727a096.async.js
  45. 0
    1
      dist/p__Information__Article__index.b643ac78.async.js
  46. 1
    0
      dist/p__Information__Section__index.6eb89de2.async.js
  47. 0
    1
      dist/p__Information__Section__index.a75bbd79.async.js
  48. 1
    1
      dist/p__Jobseeker__Account__index.2317941d.async.js
  49. 0
    1
      dist/p__Jobseeker__List__index.51c53cf5.async.js
  50. 1
    0
      dist/p__Jobseeker__List__index.5d15f551.async.js
  51. 0
    1
      dist/p__Login__index.5d5b39fd.async.js
  52. 1
    0
      dist/p__Login__index.ae8f7263.async.js
  53. 1
    0
      dist/p__Permission__Account__index.13228745.async.js
  54. 0
    1
      dist/p__Permission__Account__index.2c73d620.async.js
  55. 1
    0
      dist/p__Publichouse__index.47868082.async.js
  56. 1
    1
      dist/p__Setting__Dictionary__index.22072e08.async.js
  57. 1
    1
      dist/p__Setting__Other__index.ba18318c.async.js
  58. 1
    0
      dist/p__Setting__System__index.5609f0cd.async.js
  59. 0
    1
      dist/p__Setting__System__index.79feac7d.async.js
  60. 52
    52
      dist/umi.8cdc18ca.js
  61. 28
    0
      package-lock.json
  62. 1
    0
      package.json
  63. 2
    1
      src/.umi/core/route.tsx
  64. 1
    0
      src/app.tsx
  65. 3
    1
      src/components/Render/Main/Advertisement/List/create/index.tsx
  66. 1
    1
      src/components/Render/Main/Advertisement/Putin/create/index.tsx
  67. 33
    17
      src/components/Render/Main/Company/List/create/index.tsx
  68. 12
    3
      src/components/Render/Main/Company/List/table/index.tsx
  69. 17
    8
      src/components/Render/Main/Company/Post/table/index.tsx
  70. 11
    1
      src/components/Render/Main/Company/Vip/table/index.tsx
  71. 33
    4
      src/components/Render/Main/Fair/List/create/index.tsx
  72. 2
    2
      src/components/Render/Main/Information/Article/create/index.tsx
  73. 12
    4
      src/components/Render/Main/Information/Section/create/index.tsx
  74. 10
    1
      src/components/Render/Main/Jobseeker/List/table/index.tsx
  75. 322
    0
      src/components/Render/Main/Publichouse/create/index.tsx
  76. 200
    0
      src/components/Render/Main/Publichouse/table/index.tsx
  77. 325
    6
      src/pages/Home/index.tsx
  78. 1
    2
      src/pages/Login/index.tsx
  79. 39
    0
      src/pages/Publichouse/index.tsx
  80. 2
    2
      src/utils/VerifyHelper.ts
  81. 66
    0
      src/utils/dataHelper.ts

+ 9
- 1
config/routes.ts View File

@@ -1,3 +1,4 @@
import access from "@/access";

export default [
{ path: '/login', component: './Login', layout: false, access: 'login' },
@@ -11,7 +12,7 @@ export default [
layout: false
},
{
name: '首页',
name: '数据总览',
path: '/home',
component: './Home',
access: 'home',
@@ -171,6 +172,7 @@ export default [
{
name: '系统管理',
path: '/setting',
access: 'setting',
routes: [
{
name: '系统设置',
@@ -201,6 +203,12 @@ export default [
component: './Feedback',
access: 'feedback',
},
{
name: '公共户口管理',
path: '/publichouse/list',
component: './Publichouse',
access: 'publichouse',
},
// {
// name: '统计管理',
// path: '/setting',

+ 0
- 184
dist/109.494fe1d5.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/132.229607a2.async.js
File diff suppressed because it is too large
View File


+ 42
- 0
dist/18.a7d57f8a.async.js
File diff suppressed because it is too large
View File


dist/186.85ff8a92.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/198.7445bbc0.async.js
File diff suppressed because it is too large
View File


dist/211.0e350842.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/228.3dfd775b.async.js
File diff suppressed because it is too large
View File


dist/297.2ec468b6.async.js
File diff suppressed because it is too large
View File


dist/192.a4421021.chunk.css → dist/297.a4421021.chunk.css View File


+ 0
- 1
dist/339.486c3be2.async.js
File diff suppressed because it is too large
View File


+ 21
- 0
dist/365.69273df2.async.js
File diff suppressed because it is too large
View File


+ 0
- 21
dist/443.f3fc400f.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/487.a300482d.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/487.f62e0607.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/496.3bebec96.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/50.b8d3f0bd.async.js
File diff suppressed because it is too large
View File


+ 43
- 0
dist/510.813c8fa4.async.js
File diff suppressed because it is too large
View File


+ 142
- 0
dist/581.9dc3f9bf.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/668.922f5baf.async.js
File diff suppressed because it is too large
View File


dist/673.ac212c69.async.js
File diff suppressed because it is too large
View File


dist/628.cc318bf0.async.js → dist/687.765ae2f2.async.js View File

@@ -1,4 +1,4 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[628],{21687:function(je,D,C){C.d(D,{Z:function(){return Se}});var r=C(62435),G=C(93967),m=C.n(G),v=C(53124),P=C(98423),j=e=>{const{prefixCls:t,className:s,style:n,size:a,shape:i}=e,c=m()({[`${t}-lg`]:a==="large",[`${t}-sm`]:a==="small"}),l=m()({[`${t}-circle`]:i==="circle",[`${t}-square`]:i==="square",[`${t}-round`]:i==="round"}),o=r.useMemo(()=>typeof a=="number"?{width:a,height:a,lineHeight:`${a}px`}:{},[a]);return r.createElement("span",{className:m()(t,c,l,s),style:Object.assign(Object.assign({},o),n)})},T=C(54548),Z=C(92030),W=C(45503);const X=new T.E4("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),x=e=>({height:e,lineHeight:(0,T.bf)(e)}),f=e=>Object.assign({width:e},x(e)),J=e=>({background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:X,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"}),I=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},x(e)),K=e=>{const{skeletonAvatarCls:t,gradientFromColor:s,controlHeight:n,controlHeightLG:a,controlHeightSM:i}=e;return{[`${t}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:s},f(n)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},f(a)),[`${t}${t}-sm`]:Object.assign({},f(i))}},Q=e=>{const{controlHeight:t,borderRadiusSM:s,skeletonInputCls:n,controlHeightLG:a,controlHeightSM:i,gradientFromColor:c,calc:l}=e;return{[`${n}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:s},I(t,l)),[`${n}-lg`]:Object.assign({},I(a,l)),[`${n}-sm`]:Object.assign({},I(i,l))}},L=e=>Object.assign({width:e},x(e)),U=e=>{const{skeletonImageCls:t,imageSizeBase:s,gradientFromColor:n,borderRadiusSM:a,calc:i}=e;return{[`${t}`]:Object.assign(Object.assign({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:n,borderRadius:a},L(i(s).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},L(s)),{maxWidth:i(s).mul(4).equal(),maxHeight:i(s).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},z=(e,t,s)=>{const{skeletonButtonCls:n}=e;return{[`${s}${n}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${s}${n}-round`]:{borderRadius:t}}},B=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},x(e)),Y=e=>{const{borderRadiusSM:t,skeletonButtonCls:s,controlHeight:n,controlHeightLG:a,controlHeightSM:i,gradientFromColor:c,calc:l}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[`${s}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:t,width:l(n).mul(2).equal(),minWidth:l(n).mul(2).equal()},B(n,l))},z(e,n,s)),{[`${s}-lg`]:Object.assign({},B(a,l))}),z(e,a,`${s}-lg`)),{[`${s}-sm`]:Object.assign({},B(i,l))}),z(e,i,`${s}-sm`))},_=e=>{const{componentCls:t,skeletonAvatarCls:s,skeletonTitleCls:n,skeletonParagraphCls:a,skeletonButtonCls:i,skeletonInputCls:c,skeletonImageCls:l,controlHeight:o,controlHeightLG:d,controlHeightSM:u,gradientFromColor:g,padding:$,marginSM:p,borderRadius:b,titleHeight:h,blockRadius:E,paragraphLiHeight:A,controlHeightXS:R,paragraphMarginTop:O}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:$,verticalAlign:"top",[`${s}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:g},f(o)),[`${s}-circle`]:{borderRadius:"50%"},[`${s}-lg`]:Object.assign({},f(d)),[`${s}-sm`]:Object.assign({},f(u))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${n}`]:{width:"100%",height:h,background:g,borderRadius:E,[`+ ${a}`]:{marginBlockStart:u}},[`${a}`]:{padding:0,"> li":{width:"100%",height:A,listStyle:"none",background:g,borderRadius:E,"+ li":{marginBlockStart:R}}},[`${a}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${n}, ${a} > li`]:{borderRadius:b}}},[`${t}-with-avatar ${t}-content`]:{[`${n}`]:{marginBlockStart:p,[`+ ${a}`]:{marginBlockStart:O}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},Y(e)),K(e)),Q(e)),U(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${c}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[687],{21687:function(je,D,C){C.d(D,{Z:function(){return Se}});var r=C(62435),G=C(93967),m=C.n(G),v=C(53124),P=C(98423),j=e=>{const{prefixCls:t,className:s,style:n,size:a,shape:i}=e,c=m()({[`${t}-lg`]:a==="large",[`${t}-sm`]:a==="small"}),l=m()({[`${t}-circle`]:i==="circle",[`${t}-square`]:i==="square",[`${t}-round`]:i==="round"}),o=r.useMemo(()=>typeof a=="number"?{width:a,height:a,lineHeight:`${a}px`}:{},[a]);return r.createElement("span",{className:m()(t,c,l,s),style:Object.assign(Object.assign({},o),n)})},T=C(54548),Z=C(92030),W=C(45503);const X=new T.E4("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),x=e=>({height:e,lineHeight:(0,T.bf)(e)}),f=e=>Object.assign({width:e},x(e)),J=e=>({background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:X,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"}),I=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},x(e)),K=e=>{const{skeletonAvatarCls:t,gradientFromColor:s,controlHeight:n,controlHeightLG:a,controlHeightSM:i}=e;return{[`${t}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:s},f(n)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},f(a)),[`${t}${t}-sm`]:Object.assign({},f(i))}},Q=e=>{const{controlHeight:t,borderRadiusSM:s,skeletonInputCls:n,controlHeightLG:a,controlHeightSM:i,gradientFromColor:c,calc:l}=e;return{[`${n}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:s},I(t,l)),[`${n}-lg`]:Object.assign({},I(a,l)),[`${n}-sm`]:Object.assign({},I(i,l))}},L=e=>Object.assign({width:e},x(e)),U=e=>{const{skeletonImageCls:t,imageSizeBase:s,gradientFromColor:n,borderRadiusSM:a,calc:i}=e;return{[`${t}`]:Object.assign(Object.assign({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:n,borderRadius:a},L(i(s).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},L(s)),{maxWidth:i(s).mul(4).equal(),maxHeight:i(s).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},z=(e,t,s)=>{const{skeletonButtonCls:n}=e;return{[`${s}${n}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${s}${n}-round`]:{borderRadius:t}}},B=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},x(e)),Y=e=>{const{borderRadiusSM:t,skeletonButtonCls:s,controlHeight:n,controlHeightLG:a,controlHeightSM:i,gradientFromColor:c,calc:l}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[`${s}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:c,borderRadius:t,width:l(n).mul(2).equal(),minWidth:l(n).mul(2).equal()},B(n,l))},z(e,n,s)),{[`${s}-lg`]:Object.assign({},B(a,l))}),z(e,a,`${s}-lg`)),{[`${s}-sm`]:Object.assign({},B(i,l))}),z(e,i,`${s}-sm`))},_=e=>{const{componentCls:t,skeletonAvatarCls:s,skeletonTitleCls:n,skeletonParagraphCls:a,skeletonButtonCls:i,skeletonInputCls:c,skeletonImageCls:l,controlHeight:o,controlHeightLG:d,controlHeightSM:u,gradientFromColor:g,padding:$,marginSM:p,borderRadius:b,titleHeight:h,blockRadius:E,paragraphLiHeight:A,controlHeightXS:R,paragraphMarginTop:O}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:$,verticalAlign:"top",[`${s}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:g},f(o)),[`${s}-circle`]:{borderRadius:"50%"},[`${s}-lg`]:Object.assign({},f(d)),[`${s}-sm`]:Object.assign({},f(u))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${n}`]:{width:"100%",height:h,background:g,borderRadius:E,[`+ ${a}`]:{marginBlockStart:u}},[`${a}`]:{padding:0,"> li":{width:"100%",height:A,listStyle:"none",background:g,borderRadius:E,"+ li":{marginBlockStart:R}}},[`${a}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${n}, ${a} > li`]:{borderRadius:b}}},[`${t}-with-avatar ${t}-content`]:{[`${n}`]:{marginBlockStart:p,[`+ ${a}`]:{marginBlockStart:O}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},Y(e)),K(e)),Q(e)),U(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${c}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
${n},
${a} > li,
${s},

+ 0
- 2
dist/687.f2c72893.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/833.a35fa8fe.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/881.47fbd868.async.js
File diff suppressed because it is too large
View File


dist/99.64d025b6.async.js
File diff suppressed because it is too large
View File


+ 1
- 1
dist/index.html View File

@@ -8,6 +8,6 @@
</head>
<body>
<div id="root"></div>
<script src="/umi.f9f85c2a.js"></script>
<script src="/umi.8cdc18ca.js"></script>
</body>
</html>

dist/p__Activity__List__index.8a3ad2bb.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Advertisement__List__index.1d0bb612.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Advertisement__List__index.c8baafb5.async.js
File diff suppressed because it is too large
View File


dist/p__Advertisement__Putin__index.322efb77.async.js
File diff suppressed because it is too large
View File


dist/p__Company__Department__index.5c29a99a.async.js
File diff suppressed because it is too large
View File


+ 2
- 0
dist/p__Company__List__index.2ef83605.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__List__index.796ad4ff.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__Post__index.59285a05.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__Post__index.bf18b8b4.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Company__Vip__index.4ca757e5.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Company__Vip__index.5b365e65.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Fair__List__index.8defc839.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Fair__List__index.f5374228.async.js
File diff suppressed because it is too large
View File


dist/p__Feedback__index.910cf59a.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Home__index.13945c82.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Home__index.6c1ee7cd.async.js View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[371],{86587:function(t,u,e){e.r(u);var n=e(86074),a=function(){return(0,n.jsx)(n.Fragment,{children:"\u9875\u9762\u5F00\u53D1\u4E2D\u3002\u3002\u3002"})};u.default=a}}]);

+ 1
- 0
dist/p__Information__Article__index.3727a096.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Information__Article__index.b643ac78.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Information__Section__index.6eb89de2.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Information__Section__index.a75bbd79.async.js
File diff suppressed because it is too large
View File


dist/p__Jobseeker__Account__index.2317941d.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Jobseeker__List__index.51c53cf5.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Jobseeker__List__index.5d15f551.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Login__index.5d5b39fd.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Login__index.ae8f7263.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Permission__Account__index.13228745.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Permission__Account__index.2c73d620.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Publichouse__index.47868082.async.js
File diff suppressed because it is too large
View File


dist/p__Setting__Dictionary__index.22072e08.async.js
File diff suppressed because it is too large
View File


dist/p__Setting__Other__index.ba18318c.async.js
File diff suppressed because it is too large
View File


+ 1
- 0
dist/p__Setting__System__index.5609f0cd.async.js
File diff suppressed because it is too large
View File


+ 0
- 1
dist/p__Setting__System__index.79feac7d.async.js
File diff suppressed because it is too large
View File


dist/umi.8cdc18ca.js
File diff suppressed because it is too large
View File


+ 28
- 0
package-lock.json View File

@@ -12,6 +12,7 @@
"antd": "^5.4.0",
"dayjs": "^1.11.12",
"docx": "^8.5.0",
"echarts": "^5.6.0",
"file-saver": "^2.0.5",
"he": "^1.2.0",
"html-docx-js": "^0.3.1",
@@ -8356,6 +8357,20 @@
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/echarts": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz",
"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.6.1"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -18968,6 +18983,19 @@
"peerDependencies": {
"zod": "^3.18.0"
}
},
"node_modules/zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"dependencies": {
"tslib": "2.3.0"
}
},
"node_modules/zrender/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
}
}

+ 1
- 0
package.json View File

@@ -18,6 +18,7 @@
"antd": "^5.4.0",
"dayjs": "^1.11.12",
"docx": "^8.5.0",
"echarts": "^5.6.0",
"file-saver": "^2.0.5",
"he": "^1.2.0",
"html-docx-js": "^0.3.1",

+ 2
- 1
src/.umi/core/route.tsx View File

@@ -4,7 +4,7 @@
import React from 'react';

export async function getRoutes() {
const routes = {"1":{"path":"/login","layout":false,"access":"login","id":"1"},"2":{"path":"/","redirect":"/home","parentId":"ant-design-pro-layout","id":"2"},"3":{"path":"/login","layout":false,"id":"3"},"4":{"name":"首页","path":"/home","access":"home","parentId":"ant-design-pro-layout","id":"4"},"5":{"name":"企业管理","access":"company","path":"/company","parentId":"ant-design-pro-layout","id":"5"},"6":{"name":"所有企业","path":"/company/list","access":"member","parentId":"5","id":"6"},"7":{"name":"VIP列表","path":"/company/vip","access":"vip","parentId":"5","id":"7"},"8":{"name":"部门管理","path":"/company/department","access":"department","parentId":"5","id":"8"},"9":{"name":"职位管理","path":"/company/post","access":"job","parentId":"5","id":"9"},"10":{"name":"求职者管理","access":"jobSeeker","path":"/jobseeker","parentId":"ant-design-pro-layout","id":"10"},"11":{"name":"简历列表","path":"/jobseeker/list","access":"jobResume","parentId":"10","id":"11"},"12":{"name":"求职者账号列表","path":"/jobseeker/account","access":"customerList","parentId":"10","id":"12"},"13":{"name":"招聘会管理","access":"jobFair","path":"/fair","parentId":"ant-design-pro-layout","id":"13"},"14":{"name":"招聘会列表","path":"/fair/list","access":"jobFairList","parentId":"13","id":"14"},"15":{"name":"新闻资讯","access":"information","path":"/information","parentId":"ant-design-pro-layout","id":"15"},"16":{"name":"栏目/频道","path":"/information/section","access":"section","parentId":"15","id":"16"},"17":{"name":"文章列表","path":"/information/article","access":"article","parentId":"15","id":"17"},"18":{"name":"广告/活动管理","access":"advertisement","path":"/advertisement","parentId":"ant-design-pro-layout","id":"18"},"19":{"name":"广告/活动列表","path":"/advertisement/list","access":"advertisementList","parentId":"18","id":"19"},"20":{"name":"广告/活动投放","path":"/advertisement/putin","access":"putIn","parentId":"18","id":"20"},"21":{"name":"春节引流活动管理","access":"activity","path":"/activity","parentId":"ant-design-pro-layout","id":"21"},"22":{"name":"活动门店","path":"/activity/list","access":"activityAddress","parentId":"21","id":"22"},"23":{"name":"账号权限","path":"/permission","access":"permission","parentId":"ant-design-pro-layout","id":"23"},"24":{"name":"权限管理","path":"/permission/list","access":"list","parentId":"23","id":"24"},"25":{"name":"角色管理","path":"/permission/role","access":"role","parentId":"23","id":"25"},"26":{"name":"账号管理","path":"/permission/account","access":"account","parentId":"23","id":"26"},"27":{"name":"系统管理","path":"/setting","parentId":"ant-design-pro-layout","id":"27"},"28":{"name":"系统设置","path":"/setting/system","access":"other","parentId":"27","id":"28"},"29":{"name":"字典设置","path":"/setting/dictionary","access":"dictionaryList","parentId":"27","id":"29"},"30":{"name":"分词器","path":"/setting/other","access":"otherTokenizer","parentId":"27","id":"30"},"31":{"name":"反馈管理","path":"/feedback/list","access":"feedback","parentId":"ant-design-pro-layout","id":"31"},"ant-design-pro-layout":{"id":"ant-design-pro-layout","path":"/","isLayout":true}} as const;
const routes = {"1":{"path":"/login","layout":false,"access":"login","id":"1"},"2":{"path":"/","redirect":"/home","parentId":"ant-design-pro-layout","id":"2"},"3":{"path":"/login","layout":false,"id":"3"},"4":{"name":"数据总览","path":"/home","access":"home","parentId":"ant-design-pro-layout","id":"4"},"5":{"name":"企业管理","access":"company","path":"/company","parentId":"ant-design-pro-layout","id":"5"},"6":{"name":"所有企业","path":"/company/list","access":"member","parentId":"5","id":"6"},"7":{"name":"VIP列表","path":"/company/vip","access":"vip","parentId":"5","id":"7"},"8":{"name":"部门管理","path":"/company/department","access":"department","parentId":"5","id":"8"},"9":{"name":"职位管理","path":"/company/post","access":"job","parentId":"5","id":"9"},"10":{"name":"求职者管理","access":"jobSeeker","path":"/jobseeker","parentId":"ant-design-pro-layout","id":"10"},"11":{"name":"简历列表","path":"/jobseeker/list","access":"jobResume","parentId":"10","id":"11"},"12":{"name":"求职者账号列表","path":"/jobseeker/account","access":"customerList","parentId":"10","id":"12"},"13":{"name":"招聘会管理","access":"jobFair","path":"/fair","parentId":"ant-design-pro-layout","id":"13"},"14":{"name":"招聘会列表","path":"/fair/list","access":"jobFairList","parentId":"13","id":"14"},"15":{"name":"新闻资讯","access":"information","path":"/information","parentId":"ant-design-pro-layout","id":"15"},"16":{"name":"栏目/频道","path":"/information/section","access":"section","parentId":"15","id":"16"},"17":{"name":"文章列表","path":"/information/article","access":"article","parentId":"15","id":"17"},"18":{"name":"广告/活动管理","access":"advertisement","path":"/advertisement","parentId":"ant-design-pro-layout","id":"18"},"19":{"name":"广告/活动列表","path":"/advertisement/list","access":"advertisementList","parentId":"18","id":"19"},"20":{"name":"广告/活动投放","path":"/advertisement/putin","access":"putIn","parentId":"18","id":"20"},"21":{"name":"春节引流活动管理","access":"activity","path":"/activity","parentId":"ant-design-pro-layout","id":"21"},"22":{"name":"活动门店","path":"/activity/list","access":"activityAddress","parentId":"21","id":"22"},"23":{"name":"账号权限","path":"/permission","access":"permission","parentId":"ant-design-pro-layout","id":"23"},"24":{"name":"权限管理","path":"/permission/list","access":"list","parentId":"23","id":"24"},"25":{"name":"角色管理","path":"/permission/role","access":"role","parentId":"23","id":"25"},"26":{"name":"账号管理","path":"/permission/account","access":"account","parentId":"23","id":"26"},"27":{"name":"系统管理","path":"/setting","access":"setting","parentId":"ant-design-pro-layout","id":"27"},"28":{"name":"系统设置","path":"/setting/system","access":"other","parentId":"27","id":"28"},"29":{"name":"字典设置","path":"/setting/dictionary","access":"dictionaryList","parentId":"27","id":"29"},"30":{"name":"分词器","path":"/setting/other","access":"otherTokenizer","parentId":"27","id":"30"},"31":{"name":"反馈管理","path":"/feedback/list","access":"feedback","parentId":"ant-design-pro-layout","id":"31"},"32":{"name":"公共户口管理","path":"/publichouse/list","access":"publichouse","parentId":"ant-design-pro-layout","id":"32"},"ant-design-pro-layout":{"id":"ant-design-pro-layout","path":"/","isLayout":true}} as const;
return {
routes,
routeComponents: {
@@ -39,6 +39,7 @@ export async function getRoutes() {
'29': React.lazy(() => import(/* webpackChunkName: "p__Setting__Dictionary__index" */'@/pages/Setting/Dictionary/index.tsx')),
'30': React.lazy(() => import(/* webpackChunkName: "p__Setting__Other__index" */'@/pages/Setting/Other/index.tsx')),
'31': React.lazy(() => import(/* webpackChunkName: "p__Feedback__index" */'@/pages/Feedback/index.tsx')),
'32': React.lazy(() => import(/* webpackChunkName: "p__Publichouse__index" */'@/pages/Publichouse/index.tsx')),
'ant-design-pro-layout': React.lazy(() => import(/* webpackChunkName: "umi__plugin-layout__Layout" */'E:/项目/outpackage/rencaishichanghoutai/src/.umi/plugin-layout/Layout.tsx')),
},
};

+ 1
- 0
src/app.tsx View File

@@ -21,6 +21,7 @@ export async function getInitialState(): Promise<{ permissions: object[] }> {
try {
const res = await GetUserMenulist();
permissions = flattenPermissions(res.data.menulist);

} catch (error) {
console.error('Failed to fetch user permissions:', error);
}

+ 3
- 1
src/components/Render/Main/Advertisement/List/create/index.tsx View File

@@ -66,7 +66,9 @@ const PagesMainAdvertisementListCreate: React.FC = ({ dispatch, dictModel, openM
content: '',
stick_top: 0,
hot: 0,
author: ''
author: '',
random_show: 1,
disabled_status: 1
}
}
}}

+ 1
- 1
src/components/Render/Main/Advertisement/Putin/create/index.tsx View File

@@ -80,7 +80,7 @@ const PagesMainAdvertisementPutinCreate: React.FC = ({ dispatch, dictModel, open
target_url: '',
show_order: 0,
valid_date: null,
hide_ad: 0,
hide_ad: 2,
company_id: null,
}
}

+ 33
- 17
src/components/Render/Main/Company/List/create/index.tsx View File

@@ -14,7 +14,7 @@ import {
import { Row, Col, Image, ConfigProvider, Modal, Switch, Form, message, Button } from 'antd';
import { addCompany, PostCompanyEdit, GetCompanyInfo } from '@/apis/api';
import { Imageprefix } from '@/constants';
import { verifyPhone } from '@/utils/VerifyHelper';
import { findAncestors } from '@/utils/dataHelper'
import { disAfterData } from '@/utils/format'
import MapComponent from '@/components/Common/map';
import RichComponent from '@/components/Common/rich';
@@ -90,8 +90,9 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
if (open && id) {
GetCompanyInfo({ id: id }).then(res => {
formMapRef?.current?.forEach((formInstanceRef) => {
res.data.nature_arr = [res.data.nature_text]
res.data.scale_arr = [res.data.scale_text]
res.data.industry_arr = [res.data.industry];
res.data.nature_arr = findAncestors(dictModel.natureList, res.data.nature).concat([res.data.nature])
res.data.scale_arr = findAncestors(dictModel.scaleList, res.data.scale).concat([res.data.scale])
res.data.location_arr = [
res.data.province ? res.data.province : 0,
res.data.city ? res.data.city : 0,
@@ -113,12 +114,18 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
formMapRef={formMapRef}
formRef={formRef}
onFinish={async (values: CompanyType.Basic) => {
console.log(values)
values.industry = values.industry_arr && values.industry_arr.length > 0 && values.industry_arr[0] ? values.industry_arr[0] : 0;
values.province = values.location_arr && values.location_arr[0] ? values.location_arr[0] : 0;
values.city = values.location_arr && values.location_arr[1] ? values.location_arr[1] : 0;
values.district = values.location_arr && values.location_arr[2] ? values.location_arr[2] : 0;
values.street = values.location_arr && values.location_arr[3] ? values.location_arr[3] : 0;
values.nature = values.nature_arr && values.nature_arr.length > 0 ? values.nature_arr[values.nature_arr.length - 1] : 0;
values.scale = values.scale_arr && values.scale_arr.length > 0 ? values.scale_arr[values.scale_arr.length - 1] : 0;
delete values.nature_arr;
delete values.scale_arr;
delete values.location_arr;
delete values.industry_arr;

values.photo = uploadedFilephotoName ? uploadedFilephotoName : '';
values.license_path = uploadedFilelicenseName ? uploadedFilelicenseName : '';
values.company_photos = uploadedFilephotosName ? uploadedFilephotosName : [];
@@ -126,18 +133,15 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
console.log(values)
if (detail) {
values.id = detail.id;
values.nature = detail.nature ? detail.nature : 0;
values.scale = detail.scale ? detail.scale : 0;
values.nature = values.nature_arr && values.nature_arr.length > 0 ? values.nature_arr[values.nature_arr.length - 1] : 0;
values.scale = values.scale_arr && values.scale_arr.length > 0 ? values.scale_arr[values.scale_arr.length - 1] : 0;
delete values.nature_arr;
delete values.scale_arr;
let res = await PostCompanyEdit(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
} else {
values.nature = values.nature_arr && values.nature_arr.length > 0 ? values.nature_arr[values.nature_arr.length - 1] : 0;
values.scale = values.scale_arr && values.scale_arr.length > 0 ? values.scale_arr[values.scale_arr.length - 1] : 0;
delete values.nature_arr;
delete values.scale_arr;
let res = await addCompany(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
@@ -233,16 +237,19 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
/>
</Col>
<Col span={8}>
<ProFormSelect
<ProFormCascader
label="所属行业"
name="industry"
name="industry_arr"
fieldProps={{
fieldNames: selectfieldNames,
options: dictModel.industryPostList
fieldNames: cascaderfieldNames,
options: dictModel.industryPostList,
changeOnSelect: true
}}
rules={[{ required: true, message: '请选择所属行业' }]}

placeholder="请选择所属行业"
/>

</Col>
<Col span={8}>
<ProFormCascader
@@ -268,7 +275,7 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
changeOnSelect: true
}}
rules={[{ required: true, message: '请选择企业规模' }]}
placeholder="请选择企业规模"
/>
</Col>
@@ -548,7 +555,15 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
>
<Row gutter={[16, 16]}>
<Col span={24}>
<ProFormText.Password
{id ? <ProFormText.Password
name="login_pwd"
label="登录密码"
fieldProps={{
size: 'large',
}}
placeholder={'请输入登录密码'}

/> : <ProFormText.Password
name="login_pwd"
label="登录密码"
fieldProps={{
@@ -561,7 +576,8 @@ const PagesMainCompanyListCreate: React.FC = ({ dispatch, dictModel, openModel,
message: '请输入登录密码',
},
]}
/>
/>}

</Col>

</Row>

+ 12
- 3
src/components/Render/Main/Company/List/table/index.tsx View File

@@ -4,7 +4,7 @@ import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown, PageContainer
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Select, message } from 'antd';
import { Button, Image, ConfigProvider, Select, message, DatePicker } from 'antd';
import { getCompanyList, GetCompanyInfo, updateCompany, PostCompanyExport, getRoleGetpermissionids } from '@/apis/api';
import { Imageprefix } from '@/constants';
import { findId } from '@/utils/dataHelper';
@@ -23,7 +23,7 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any

const [addButton, setAddButton] = useState<boolean>(true)
const [editButton, setEditButton] = useState<boolean>(true)



@@ -50,6 +50,13 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
actionRef={actionRef}
dataSource={list}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
},
{
title: 'ID',
dataIndex: 'id',
@@ -151,7 +158,6 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
{
title: '开始时间',
dataIndex: 'start_date',
search: false,
width: 140
},
{
@@ -312,6 +318,7 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
dataIndex: 'login_name',
width: 200
},

{
title: '操作',
width: 300,
@@ -391,6 +398,8 @@ const PagesMainCompanyListTable: React.FC = ({ dispatch, openModel, getId }: any
member_type: params.member_type,
member_status: params.member_status,
status: params.status,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
}).then(res => {
setList(res.data.list)
setTotal(res.data.total)

+ 17
- 8
src/components/Render/Main/Company/Post/table/index.tsx View File

@@ -7,7 +7,6 @@ import {
import { Button, ConfigProvider,message } from 'antd';
import { GetCompanyJobList, getCompanyList, GetCompanyInfo, PostJobExport } from '@/apis/api';
import { Imageprefix } from '@/constants';

const selectfieldNames = { label: 'full_name', value: 'id' };
const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any) => {
const actionRef = useRef<ActionType>();
@@ -43,18 +42,20 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
actionRef={actionRef}
dataSource={list}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
},
{
title: 'ID',
dataIndex: 'id',
width: 100,
fixed: 'left',
},
{
title: '职位名称',
dataIndex: 'name',
width: 200,
fixed: 'left'
},
{
title: '所属企业',
dataIndex: 'full_name',
@@ -83,6 +84,12 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
)
}
},
{
title: '职位名称',
dataIndex: 'name',
width: 200,
fixed: 'left'
},
{
title: '点击次数',
dataIndex: 'click_count',
@@ -168,7 +175,9 @@ const PagesMainCompanyPostTable: React.FC = ({ dispatch, getId, openModel }: any
keyword: params.name,
expired: params.expired,
status: params.status,
company_id: sessionStorage.getItem('post_company_info') ? JSON.parse(sessionStorage.getItem('post_company_info')).id : companyId
company_id: sessionStorage.getItem('post_company_info') ? JSON.parse(sessionStorage.getItem('post_company_info')).id : companyId,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
}).then(res => {
setList(res.data.rows)
setTotal(res.data.total)

+ 11
- 1
src/components/Render/Main/Company/Vip/table/index.tsx View File

@@ -52,6 +52,13 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
actionRef={actionRef}
dataSource={list}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
},
{
title: 'ID',
dataIndex: 'id',
@@ -72,6 +79,7 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
)
}
},
{
title: '见习基地',
dataIndex: 'probation_text',
@@ -162,7 +170,9 @@ const CompanyListPage: React.FC = ({ dispatch, getId, openModel }: any) => {
pagesize: pageSize,
sort: 'id',
sortby: 'desc',
keyword: fullname
keyword: fullname,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
}).then(res => {
setList(res.data.list)
setTotal(res.data.total)

+ 33
- 4
src/components/Render/Main/Fair/List/create/index.tsx View File

@@ -10,10 +10,14 @@ import {
ProForm,
ProFormSegmented
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Form, Row, Col, Switch } from 'antd';
import { ConfigProvider, Flex, Space, Modal, message, Form, Row, Col, Image } from 'antd';
import { PostRecruitmentUpdate, PostRecruitmentAdd, GetCompanyInfo, GetRecruitmentDetail } from '@/apis/api';
import MapComponent from '@/components/Common/map';
import RichComponent from '@/components/Common/rich';
import UploadModel from '@/components/Common/upload';
import { Imageprefix } from '@/constants';


import dayjs from "dayjs";
const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id }: any) => {
const formRef = useRef<ProFormInstance>();
@@ -24,7 +28,10 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
const [richTxt, setRichTxt] = useState<string | number>(''); // 招聘会内容
const [mapSwitch, setMapSwitch] = useState<boolean>(false); // 选择地图


const [uploadedFilephotoName, setUploadedFilephotoName] = useState<string>('');
const handleFileUploadedphoto = (filename: string) => {
setUploadedFilephotoName(filename);
};

useEffect(() => {
setOpenPreview(openModel.openModal)
@@ -60,6 +67,7 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
res.data.dateRange = [res.data.open_date, res.data.close_date ? res.data.close_date : null];
return res.data;
} else {
setUploadedFilephotoName('')
return {
title: '',
content: '',
@@ -67,7 +75,7 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
close_date: '',
address: '',
status: 0,
photo: '',
dateRange: []
}
}
@@ -86,6 +94,7 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
onFinish={async (values) => {
values.open_date = values.dateRange[0];
values.close_date = values.dateRange[1] ? values.dateRange[1] : '';
values.photo = uploadedFilephotoName ? uploadedFilephotoName : '';
delete values.dateRange;
if (id) {
values.id = id.id;
@@ -131,6 +140,8 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
}}
</FormControlRender>
</Form.Item>


<ProFormDateTimeRangePicker
name="dateRange"
label="选择有效的日期时间范围"
@@ -140,6 +151,24 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
rules={[{ required: true, message: '请选择有效的时间范围' }]}
/>
<Row gutter={[16, 16]}>
{
detail ?
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传招聘会照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col> : <>
<Col span={6}>
<UploadModel multiple={false} form_name="photo" image_length={1} uploadTxt="上传招聘会照片" image_type={3} onUploadComplete={handleFileUploadedphoto}></UploadModel>
</Col>
</>
}
{
detail ?
<Col span={6}>
{uploadedFilephotoName ? <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> : <Image src={`${Imageprefix}${detail?.photo}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image>}
</Col> : <>
{uploadedFilephotoName ? <Col span={6}> <Image src={`${Imageprefix}${uploadedFilephotoName}`} style={{ marginTop: '32px', width: '100px', height: '100px' }}></Image> </Col> : ''}
</>
}
{/* <Col span={24}>
<Switch checked={mapSwitch} checkedChildren='地图已显示' unCheckedChildren="地图已关闭" onChange={(val) => {
setMapSwitch(val)
@@ -166,7 +195,7 @@ const PagesMainFairListCreate: React.FC = ({ dispatch, dictModel, openModel, id
<Col span={24}>
<ProFormSegmented
name="status"
label="职位状态"
label="招聘会状态"
request={async () => [
{ label: '开启', value: 1 },
{ label: '结束', value: 2 }

+ 2
- 2
src/components/Render/Main/Information/Article/create/index.tsx View File

@@ -86,8 +86,8 @@ const PagesMainInformationArticleCreate: React.FC = ({ dispatch, dictModel, open
doc_url: '',
section_id: null,
content: '',
stick_top: 0,
hot: 0,
stick_top: 2,
hot: 1,
author: ''
}
}

+ 12
- 4
src/components/Render/Main/Information/Section/create/index.tsx View File

@@ -37,7 +37,7 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
theme={{
token: {
colorPrimary: '#4FBE70',
} , components: {
}, components: {
Segmented: {
itemSelectedBg: '#19be6e',
itemSelectedColor: '#ffffff'
@@ -70,7 +70,8 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
cover_img: '',
parent_id: id.nextlevel,
description: '',
display: 1
display: 1,
park: 2
};
} else {
let res = await GetSectionDetail({ id: id.id })
@@ -130,7 +131,7 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
placeholder="请输入栏目名称"
rules={[{ required: true, message: '请输入栏目名称' }]}
/>
<ProFormText
<ProFormText
label="栏目编码,用英文字母表示,编码不能与其他栏目编码重复"
name="code"
placeholder="请输入栏目编码,用英文字母表示,编码不能与其他栏目编码重复"
@@ -165,7 +166,14 @@ const PagesMainInformationSectionCreate: React.FC = ({ dispatch, dictModel, open
{ label: '否', value: 2 }
]}
/>

<ProFormSegmented
name="park"
label="是否是科创园栏目"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</ProForm>
</Modal>
</ConfigProvider>

+ 10
- 1
src/components/Render/Main/Jobseeker/List/table/index.tsx View File

@@ -68,6 +68,13 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
actionRef={actionRef}
dataSource={list}
columns={[
{
title: '筛选日期',
dataIndex: 'date_range',
hidden: true,
width: 120,
valueType: 'dateRange',
},
{
title: '姓名',
dataIndex: 'seekername',
@@ -334,7 +341,9 @@ const PagesMainJobseekerListTable: React.FC = ({ dispatch, getId, dictModel, ope
title: params.title,
political_status: params.political_status,
salary_range_desire: params.salary_range_desire,
status: params.status ? Number(params.status) : 0
status: params.status ? Number(params.status) : 0,
start_date: params.date_range ? params.date_range[0] : '',
end_date: params.date_range ? params.date_range[1] : '',
}).then(res => {
setList(res.data.seekers)
setTotal(res.data.total)

+ 322
- 0
src/components/Render/Main/Publichouse/create/index.tsx View File

@@ -0,0 +1,322 @@

import { useRef, useState, useEffect } from 'react';
import { connect } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProFormText,
ProFormSegmented,
ProFormSelect,
ProForm,
FormControlRender,
ProFormDependency,
ProFormSwitch,
ProFormCascader,
ProFormDatePicker
} from '@ant-design/pro-components';
import { ConfigProvider, Flex, Space, Modal, message, Image, Row, Col, Switch, Form, Typography, Divider } from 'antd';
import { addArticle, updateArticle, listSection, GetArticleDetail } from '@/apis/api';
import { Imageprefix } from '@/constants';
import UploadModel from '@/components/Common/upload';
import DragUpload from '@/components/Common/dragupload';
import RichComponent from '@/components/Common/rich';
import he from 'he';

import { isArrayOfType } from '@/utils/dataHelper';


const selectfieldNames = { label: 'name', value: 'id' };
const cascaderfieldNames = { label: 'name', value: 'id', children: 'childs' };

const PagesMainInformationArticleCreate: React.FC = ({ dispatch, dictModel, openModel, id }: any) => {
const formRef = useRef<ProFormInstance>();
const [openPreview, setOpenPreview] = useState(false);
const [detail, setDetail] = useState<InformationType.article | null>(null)

useEffect(() => {
setOpenPreview(openModel.openModal)
}, [openModel.openModal])


useEffect(() => {
dispatch({ type: 'dictModel/getList', payload: { code: 2004, type: 'setPositionList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2009, type: 'setAreaList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2005, type: 'setPayList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2016, type: 'setAccommodationRequirementList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2017, type: 'setHolidayRestList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2018, type: 'setLicenseList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2021, type: 'setWorkExperienceList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2006, type: 'setEducationList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2014, type: 'setTitleList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2015, type: 'setSkillCertificationeList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2007, type: 'setOtherLanguageList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2008, type: 'setDegreeList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2027, type: 'setIndustryPostList' } })
dispatch({ type: 'dictModel/getList', payload: { code: 2010, type: 'setPoliticalList' } })
}, [])


return (
<>
<ConfigProvider
theme={{
token: {
colorPrimary: '#4FBE70',
}
}}
>
<Modal
open={openPreview}
title={id ? '编辑公共户口' : '添加公共户口'}
centered
maskClosable={false}
footer={null}
destroyOnClose
width={1000}
onCancel={() => {
dispatch({ type: 'openModel/getOpenModal', payload: false })
}}
>
<ProForm<InformationType.article>
formRef={formRef}
request={async () => {
if (id) {
let res = await GetArticleDetail({ id: id })
setUploadedFilephotoName(res.data.cover_img)
res.data.section_arr = [res.data.section_name]

setDetail(res.data)
return res.data;
} else {
setDetail(null)
setUploadedFilephotoName('')
return {
title: '',
cover_img: '',
doc_url: '',
section_id: null,
content: '',
stick_top: 0,
hot: 0,
author: ''
}
}
}}
submitter={{
searchConfig: {
resetText: '取消',
submitText: '保存',
},
render: (_, dom) => { return <Flex justify='flex-end'> <Space>{dom}</Space></Flex> },
onReset: () => {
setDetail(null)
dispatch({ type: 'openModel/getOpenModal', payload: false })
}
}}
onFinish={async (values) => {
values.cover_img = uploadedFilephotoName ? uploadedFilephotoName : '';

if (id) {
values.id = id;
// 判断是字符串数组还是数字数组
if (isArrayOfType(values.section_arr, 'string')) {
// 是字符串
values.section_id = detail?.section_id
} else {
values.section_id = values.section_arr.length > 0 ? values.section_arr[values.section_arr.length - 1] : 0;
delete values.section_arr;
}
let res = await updateArticle(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
} else {
values.section_id = values.section_arr.length > 0 ? values.section_arr[values.section_arr.length - 1] : 0;
delete values.section_arr;
let res = await addArticle(values)
message.success('提交成功')
dispatch({ type: 'openModel/getOpenModal', payload: false })
}
}}
>
<Row gutter={[16, 16]}>
<Col span={24}>
<Divider orientation="left" plain >户口本信息</Divider>
</Col>
<Col span={8}>
<ProFormText

name="author"
label="户口本存放位编号"
placeholder="436346"
rules={[{ required: true, message: '请输入户口本存放位编号' }]}
/>
</Col>
<Col span={8}>
<ProFormText

name="author"
label="单位名称"
placeholder="菊城人才市场"
rules={[{ required: true, message: '请输入单位名称' }]}
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="入户人数"
placeholder="10"
/>
</Col>
<Col span={24}>
<Divider orientation="left" plain >入户人员信息</Divider>
</Col>
<Col span={8}>
<ProFormSegmented
name="gender"
label="是否随家人迁入"
request={async () => [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
]}
/>
</Col>
<Col span={16}>
<ProFormSelect
width={'md'}
name="education"
label="选择随迁人员"
fieldProps={{
fieldNames: selectfieldNames
}}
options={dictModel.educationList}
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="姓名"
placeholder="10"
/>
</Col>
<Col span={8}>
<ProFormText
label="身份证"
name="id_number"
placeholder="请输入身份证"
validateTrigger='onBlur'
rules={[{
required: false,
}, () => ({
validator: (rule, value) => {
let info = verifyIdCard(value);


if (typeof (info) == 'boolean') {
return Promise.resolve();
}
return Promise.reject(new Error(info));
}
})]}
/>
</Col>
<Col span={8}>
<ProFormSegmented
name="gender"
label="性别"
request={async () => [
{ label: '男', value: '男' },
{ label: '女', value: '女' }
]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="education"
label="学历"
fieldProps={{
fieldNames: selectfieldNames
}}
options={dictModel.educationList}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="political_status"
label="政治面貌"
fieldProps={{
fieldNames: selectfieldNames
}}
options={dictModel.politicalList}
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="毕业院校"
placeholder="10"
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="专业"
placeholder="10"
/>
</Col>
<Col span={8}>
<ProFormCascader
label="籍贯"
name="native_arr"
fieldProps={{
fieldNames: cascaderfieldNames,
options: dictModel.areaList,
changeOnSelect: true
}}
placeholder="请选择籍贯"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="marital_status"
label="婚姻状况"
fieldProps={{
fieldNames: selectfieldNames
}}
options={dictModel.maritalList}
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="联系电话"
placeholder="10"
/>
</Col>
<Col span={8}>
<ProFormDatePicker
name="dob"
label="入户时间"
placeholder='请选择入户时间'
width={'lg'}
/>
</Col>
<Col span={8}>
<ProFormText
name="author"
label="备注"
placeholder="10"
/>
</Col>
</Row>

</ProForm>
</Modal>
</ConfigProvider>
</>
);
};



export default connect(({ dictModel, openModel }: any) => ({
dictModel, openModel
}))(PagesMainInformationArticleCreate);

+ 200
- 0
src/components/Render/Main/Publichouse/table/index.tsx View File

@@ -0,0 +1,200 @@
import { useRef, useState, useEffect } from 'react';
import { connect, history } from '@umijs/max';
import type { ActionType, ProFormInstance } from '@ant-design/pro-components';
import {
ProTable, TableDropdown,ProFormSelect
} from '@ant-design/pro-components';
import { Button, Image, ConfigProvider, Popconfirm, message , Tag} from 'antd';
import { listArticle, listSection, delArticle} from '@/apis/api';
import { Imageprefix } from '@/constants';
const selectfieldNames = { label: 'name', value: 'id', children: 'childs' };

const PagesMainInformationArticleTable: React.FC = ({ dispatch, openModel, getId }: any) => {
const actionRef = useRef<ActionType>();
const [list, setList] = useState<object[]>([])
const [total, setTotal] = useState<number>(0)
const [page, setPage] = useState<number>(1)
const [pageSize, setPageSize] = useState<number>(10)

const setId = (id: number) => {
getId(id)
}

useEffect(() => {
if (!openModel.openModal) {
actionRef.current.reload();
}
}, [openModel.openModal])

return (
<>
<ConfigProvider
theme={{
token: {
colorPrimary: '#4FBE70',
colorLink: '#4FBE70',
}
}}
>
<ProTable
size='small'
bordered={true}
scroll={{ x: 1300 }}
actionRef={actionRef}
dataSource={list}
columns={[ {
title: 'ID',
dataIndex: 'id',
width: 100,
search: false,
},
{
title: '文章名',
dataIndex: 'title',
width: 400,
},
{
title: '所属栏目',
dataIndex: 'section_name',
search: false
},
{
title: '所属栏目',
dataIndex: 'section_id',
hidden: true,
valueType: 'select',
renderFormItem: () => {
return (
<ProFormSelect
width='lg'
fieldProps={{
fieldNames: selectfieldNames,
}}
request={async (keyword) =>
listSection({ page: 1, pagesize: 100, keyword: keyword.keyWords }).then(res => {
return res.data.sections;
})
}
placeholder="请选择所属栏目"
/>
)
}
},
{
title: '封面图',
dataIndex: 'cover_img',
search: false,
render: (_, record) => (<>
<Image src={`${Imageprefix}${record.cover_img}`} width={40} height={40}/>
</>
)
},
{
title: '置顶',
dataIndex: 'stick_top',
search: false,
render: (_, record) => (<>
{
<>
{record.stick_top === 1 ? <Tag color="green">置顶</Tag> : <Tag>未置顶</Tag>}
</>
}

</>),
},
{
title: '热门',
dataIndex: 'hot',
search: false,
render: (_, record) => (<>
{
<>
{record.hot === 1 ? <Tag >普通</Tag> : <Tag color="red">热门推荐</Tag>}
</>
}

</>),
},
{
title: '作者',
dataIndex: 'author',
search: false
},
{
title: '操作',
width: 300,
key: 'option',
valueType: 'option',
fixed: 'right',
render: (_, record, action) => [
<Button key='1' type='link' onClick={() => {
setId(record.id)
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>编辑</Button>,
<Popconfirm
title="是否删除"
onConfirm={(e) => {
delArticle({ id: record.id }).then(res => {
message.success('删除成功')
actionRef.current.reload();
})
}}
okText="删除"
cancelText="取消"
>
<a
key="delete"
>
删除
</a>
</Popconfirm>
],
},
]}
rowKey="id"
pagination={{
current: page,
pageSize: pageSize,
showSizeChanger: true,
total: total,
pageSizeOptions: [9, 18, 27, 99],
onChange(page, pageSize) {
setPage(page)
setPageSize(pageSize)
},
onShowSizeChange(current, size) {
setPage(current)
setPageSize(size)
}
}}
request={async (params = {} as Record<string, any>) =>
listArticle({
page: page,
pagesize: pageSize,
sort: 'id',
sortby: 'desc',
keyword: params.name,
section_id: params.section_id
}).then(res => {
setList(res.data.articles)
setTotal(res.data.total)
})
}
headerTitle="文章列表"
toolBarRender={() => [
<Button type="primary" onClick={() => {
dispatch({ type: 'openModel/getOpenModal', payload: true })
}}>
添加文章
</Button>
]}
/>
</ConfigProvider>
</>
);
};


export default connect(({ openModel }: any) => ({
openModel
}))(PagesMainInformationArticleTable);

+ 325
- 6
src/pages/Home/index.tsx View File

@@ -1,12 +1,331 @@
import Guide from '@/components/Guide';
import { trim } from '@/utils/format';
import { PageContainer } from '@ant-design/pro-components';
import { useModel } from '@umijs/max';
import styles from './index.less';
import { useRef, useState, useEffect } from 'react';
import { ConfigProvider, Flex, Space, Modal, message, Image, Row, Col, Spin, Card, DatePicker, Radio } from 'antd';
import {
PieChartOutlined,
HomeOutlined,
UserOutlined,
MailOutlined,
PropertySafetyOutlined,
} from '@ant-design/icons';

import * as echarts from 'echarts';
import dayjs from 'dayjs';
import type { Dayjs } from 'dayjs';
import { PostJobseekerList, PostCompanyViplist, GetCompanyJobList, getCompanyList } from '@/apis/api';

const HomePage: React.FC = () => {
const chartRef = useRef(null);
const [companyAllTotal, setCompanyAllTotal] = useState<number>(0)
const [jobseekerAllTotal, setJobseekerAllTotal] = useState<number>(0)
const [postAllTotal, setPostAllTotal] = useState<number>(0)
const [vipAllTotal, setVipAllTotal] = useState<number>(0)
const [timeRadio, setTimeRadio] = useState<number>(0)
const [timeRange, setTimeRange] = useState<[Date, Date] | [String, String] | null>(null);


const [data, setData] = useState<number[]>([])

useEffect(() => {
getCompanyList().then(res => {
setCompanyAllTotal(res.data.total ? res.data.total : 0)
})
PostJobseekerList().then(res => {
setJobseekerAllTotal(res.data.total ? res.data.total : 0)
})
GetCompanyJobList().then(res => {
setPostAllTotal(res.data.total ? res.data.total : 0)
})
PostCompanyViplist().then(res => {
setVipAllTotal(res.data.total ? res.data.total : 0)
})
}, [])

const [loading, setLoading] = useState<boolean>(false);
const [companyTotal, setCompanyTotal] = useState<number>(0)
const [jobseekerTotal, setJobseekerTotal] = useState<number>(0)
const [postTotal, setPostTotal] = useState<number>(0)
const [vipTotal, setVipTotal] = useState<number>(0)
useEffect(() => {
fetchData();
}, [timeRange]);

const fetchData = () => {
setLoading(true);
let params = timeRange ? { start_date: timeRange[0], end_date: timeRange[1] } : {};
if (timeRadio == 5) {
params = timeRange ? { start_date: timeRange[0], end_date: timeRange[1] } : {};
} else {
params = timeRange ? { start_date: formatDate(timeRange[0]), end_date: formatDate(timeRange[1]) } : {};
}
Promise.all([
getCompanyList(params).then(res => setCompanyTotal(res.data.total ? res.data.total : 0)),
PostJobseekerList(params).then(res => setJobseekerTotal(res.data.total ? res.data.total : 0)),
GetCompanyJobList(params).then(res => setPostTotal(res.data.total ? res.data.total : 0)),
PostCompanyViplist(params).then(res => setVipTotal(res.data.total ? res.data.total : 0)),
]).finally(() => {
setLoading(false);
});

};

const handleTimeChange = (e) => {
setTimeRadio(e.target.value);
const today = new Date();
let start_date, end_date;

switch (e.target.value) {
case 0:
setTimeRange(null);
break;
case 1:
start_date = new Date(today);
start_date.setDate(today.getDate() - 3);
end_date = today;
setTimeRange([start_date, end_date]);
break;
case 2:
start_date = new Date(today);
start_date.setDate(today.getDate() - 7);
end_date = today;
setTimeRange([start_date, end_date]);
break;
case 3:
start_date = new Date(today);
start_date.setDate(today.getDate() - 15);
end_date = today;
setTimeRange([start_date, end_date]);
break;
case 4:
start_date = new Date(today);
start_date.setDate(today.getDate() - 30);
end_date = today;
setTimeRange([start_date, end_date]);
break;
case 5:
setTimeRange(null);
break;
default:
setTimeRange(null);
}

};



const formatDate = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
};

useEffect(() => {
const chartDom = chartRef.current;
const myChart = echarts.init(chartDom);
const option = {
tooltip: {
trigger: 'axis',
},
legend: {
show: true,
},
xAxis: {
type: 'category',
data: ['企业数', '求职者', '职位数', '企业VIP'],
},
yAxis: {
type: 'value',
},
series: [
{
type: 'bar',
barWidth: "60%",
data: [
{
name: '企业数',
label: {
show: true,
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
formatter: companyTotal,
fontSize: 16,
rich: {
name: {}
}
},
value: companyTotal,
itemStyle: {
color: '#BF7FF1'
}
},
{
name: '求职者',
label: {
show: true,
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
formatter: jobseekerTotal,
fontSize: 16,
rich: {
name: {}
}
},
value: jobseekerTotal,
itemStyle: {
color: '#3FAAF6'
}
},
{
name: '职位数',
value: postTotal,
label: {
show: true,
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
formatter: postTotal,
fontSize: 16,
rich: {
name: {}
}
},
itemStyle: {
color: '#EA667B'
}
},
{
name: '企业VIP',
value: vipTotal,
label: {
show: true,
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
formatter: vipTotal,
fontSize: 16,
rich: {
name: {}
}
},
itemStyle: {
color: '#19be6e'
}
},
]
}
]
};
myChart.setOption(option);
return () => {

myChart.dispose();
};
}, [companyTotal, jobseekerTotal, postTotal, vipTotal]);



return (
<>页面开发中。。。</>
<>
<Row gutter={[20, 20]}>
<Col span={18}>
<Space direction='vertical' size={30} style={{ width: '100%' }}>
<Flex vertical>
<h3>数据概览</h3>
<Row gutter={[20, 20]}>
<Col span={6}>
<Flex justify='space-around' align='center' style={{ background: 'linear-gradient(to right, #5470FF,#BF7FF1)', height: 100, borderRadius: 10 }}>
<Flex vertical justify='space-around' align='stretch' style={{ height: 80, color: '#ffffff' }}>
<div style={{ fontSize: 20 }}>企业数</div>
<div style={{ fontWeight: 'bold', fontSize: 32 }}>{companyAllTotal}</div>
</Flex>
<Flex vertical justify='space-between'>
<HomeOutlined style={{ fontSize: 48, color: 'rgb(225,202,252)' }} />
</Flex>
</Flex>
</Col>
<Col span={6}>
<Flex justify='space-around' align='center' style={{ background: 'linear-gradient(to right, #3FAAF6,#767BFA)', height: 100, borderRadius: 10 }}>
<Flex vertical justify='space-around' align='stretch' style={{ height: 80, color: '#ffffff' }}>
<div style={{ fontSize: 20 }}>求职者</div>
<div style={{ fontWeight: 'bold', fontSize: 32 }}>{jobseekerAllTotal}</div>
</Flex>
<Flex vertical justify='space-between'>
<UserOutlined style={{ fontSize: 48, color: 'rgb(225,202,252)' }} />
</Flex>
</Flex>
</Col>
<Col span={6}>
<Flex justify='space-around' align='center' style={{ background: 'linear-gradient(to right, #EA667B,#F4A060)', height: 100, borderRadius: 10 }}>
<Flex vertical justify='space-around' align='stretch' style={{ height: 80, color: '#ffffff' }}>
<div style={{ fontSize: 20 }}>职位数</div>
<div style={{ fontWeight: 'bold', fontSize: 32 }}>{postAllTotal}</div>
</Flex>
<Flex vertical justify='space-between'>
<MailOutlined style={{ fontSize: 48, color: 'rgb(225,202,252)' }} />
</Flex>
</Flex>
</Col>
<Col span={6}>
<Flex justify='space-around' align='center' style={{ background: 'linear-gradient(to right,#A4E164,#19be6e)', height: 100, borderRadius: 10 }}>
<Flex vertical justify='space-around' align='stretch' style={{ height: 80, color: '#ffffff' }}>
<div style={{ fontSize: 20 }}>企业VIP</div>
<div style={{ fontWeight: 'bold', fontSize: 32 }}>{vipAllTotal}</div>
</Flex>
<Flex vertical justify='space-between'>
<PropertySafetyOutlined style={{ fontSize: 48, color: 'rgb(225,202,252)' }} />
</Flex>
</Flex>
</Col>
</Row>
</Flex>

<Row>
<Col span={12}>
{/* 柱状图 */}
<Spin spinning={loading}>
<Space direction='vertical' style={{ width: '100%', background: '#ffffff', padding: '20px', borderRadius: 10 }}>
<Flex justify='space-between' align='center' >
<Space style={{ fontSize: 16, fontWeight: 'bold' }}><PieChartOutlined />使用情况</Space>
<Space direction='vertical'>
<Radio.Group value={timeRadio} defaultValue={0} size='small' onChange={async (e) => {
handleTimeChange(e)
}}>
<Radio.Button value={0}>全部</Radio.Button>
<Radio.Button value={1}>三天</Radio.Button>
<Radio.Button value={2}>七天</Radio.Button>
<Radio.Button value={3}>15天</Radio.Button>
<Radio.Button value={4}>30天</Radio.Button>
<Radio.Button value={5}>自定义</Radio.Button>
</Radio.Group>
{timeRadio == 5 ? <Space direction='vertical' align='end' style={{ width: '100%' }}>
<DatePicker.RangePicker size='small' onChange={(date, dateString) => {
setCompanyTotal(0)
setJobseekerTotal(0)
setPostTotal(0)
setVipTotal(0)
setTimeRange([dateString[0], dateString[1]]);
}} />
</Space> : ''}
</Space>
</Flex>
<div className="echarts-container" >
<div ref={chartRef} style={{ height: '400px', width: '100%' }} />
</div>
</Space>
</Spin>

</Col>
</Row>

</Space>

</Col>
</Row >

</>
);
};


+ 1
- 2
src/pages/Login/index.tsx View File

@@ -5,7 +5,7 @@ import { LockOutlined, UserOutlined, FileImageOutlined, } from '@ant-design/icon
import { LoginForm, ProFormCaptcha, ProForm, ProFormText, ProFormDependency, } from '@ant-design/pro-components';
import { message, Row, Col, Image, ConfigProvider } from 'antd';
import type { CSSProperties } from 'react';
import { Login, PostSmsSend, GetCaptcha, GetUserMenulist , getRoleGetpermissionids} from '@/apis/api';
import { Login, PostSmsSend, GetCaptcha, GetUserMenulist, getRoleGetpermissionids } from '@/apis/api';
const contentStyle: CSSProperties = {
display: 'flex',
alignItems: 'center',
@@ -61,7 +61,6 @@ export default () => {
title="菊城人才后台管理系统"
subTitle="欢迎登录"
onFinish={async (values) => {
// 重新获取权限信息
try {
values.sms_code = Number(values.sms_code)
let res = await Login(values)

+ 39
- 0
src/pages/Publichouse/index.tsx View File

@@ -0,0 +1,39 @@
import { useState, useEffect} from 'react';
import { connect } from '@umijs/max';
import { ConfigProvider } from 'antd';

import PagesMainPublicHouseTable from '@/components/Render/Main/Publichouse/table'
import PagesMainPublicHouseCreate from '@/components/Render/Main/Publichouse/create'

const PublicHousePage: React.FC = ({ dispatch, openModel }: any) => {
const [id, setId] = useState<number>(0);
const getId = (value: number) => {
setId(value)
}

useEffect(() => {
if(!openModel.openModal) {
setId(0)
}
}, [openModel.openModal])

return (
<>
<ConfigProvider
theme={{
token: {
colorPrimary: '#4FBE70',
}
}}
>
<PagesMainPublicHouseTable getId={getId}></PagesMainPublicHouseTable>
<PagesMainPublicHouseCreate id={id}></PagesMainPublicHouseCreate>
</ConfigProvider>
</>
);
};

export default connect(({ openModel }: any) => ({
openModel
}))(PublicHousePage);


+ 2
- 2
src/utils/VerifyHelper.ts View File

@@ -26,10 +26,10 @@ export const verifyIdCard = (idCard: string) => {
/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
if (regIdCard.test(idCard)) {
if (idCard.length == 18) {
let idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
let idCardWi:any = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
5, 8, 4, 2);
let idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2);
let idCardWiSum = 0;
let idCardWiSum : any = 0;
for (let i = 0; i < 17; i++) {
idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i];
}

+ 66
- 0
src/utils/dataHelper.ts View File

@@ -7,4 +7,70 @@ export const findId = (array: [], id: number) => {
// 判断是字符串数组还是number数组
export const isArrayOfType = (arr: [], type: 'string' | 'number'): boolean => {
return arr.every(item => typeof item === type);
}


export function findAncestors(data: any, targetId: number): number[] {
const ancestors: number[] = [];

function traverse(node: any): boolean {
if (node.id === targetId) {
return true;
}

if (node.children) {
for (const child of node.children) {
if (traverse(child)) {
ancestors.unshift(node.id);
return true;
}
}
}

return false;
}

for (const node of data) {
traverse(node);
}

return ancestors;
}

export function findAncestorsHanzi (data: any, nativePlaceTxt: string): any {
const result: any = [];

const findAncestors = (list: any, targetName: string, path: any = []): any => {
for (const item of list) {
if (item.name === targetName) {
return [...path, item];
}
if (item.children) {
const foundPath = findAncestors(item.children, targetName, [...path, item]);
if (foundPath.length > 0) {
return foundPath;
}
}
}
return [];
};

const ancestors = findAncestors(data, nativePlaceTxt);
return ancestors;
};


export function findItemById(arr: any[], id: number): any | false {
for (const item of arr) {
if (item.id === id) {
return true;
}
if (item.children && Array.isArray(item.children)) {
const result = findItemById(item.children, id);
if (result) {
return true;
}
}
}
return false;
}

Loading…
Cancel
Save