Commit c2c337c0 by fukai

第一次提交

parents
//相关配置文件,勿动
//文件上传最大大小设置200MB
window.MAXFILESIZE=200;
//为了兼容IE文件上传
window.HISTORY_STEP = 0;
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<svg width="324px" height="62px" viewBox="0 0 324 62" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
<title>DmMsyewtkhAzjNkeGnYe</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="DmMsyewtkhAzjNkeGnYe" fill="#0D1A26" fill-rule="nonzero">
<path d="M7.111391,49.0857471 L0,49.0857471 L16.999589,2.9322217 L23.341355,2.9322217 L40.340944,49.0857471 L33.229553,49.0857471 L28.710732,36.2026881 L11.630212,36.2026881 L7.111391,49.0857471 Z M13.681944,30.2892259 L26.659,30.2892259 L20.170472,11.7822541 L13.681944,30.2892259 Z M62.429244,13.7252929 C70.291888,13.7252929 74.748041,18.4470228 74.748041,26.7420398 L74.748041,49.0857471 L68.248061,49.0857471 L68.248061,28.0521814 C68.248061,22.3055128 65.93526,19.7011428 60.902194,19.7011428 C55.820177,19.7011428 52.652562,23.0729439 52.652562,28.6136707 L52.652562,49.0857471 L46.152582,49.0857471 L46.152582,14.317976 L52.403248,14.317976 L52.403248,18.8184057 C54.371737,15.4887389 57.747562,13.7252929 62.429244,13.7252929 Z M85.637733,14.317976 L85.637733,5.6148925 L92.137712,5.6148925 L92.137712,14.317976 L99.617141,14.317976 L99.617141,19.9506936 L92.137712,19.9506936 L92.137712,38.4085388 C92.137712,42.0659835 93.391816,43.4842234 96.554137,43.4842234 C97.464084,43.4842234 97.968038,43.4582217 98.994089,43.3619382 L99.617141,43.3034717 L99.617141,48.9315139 L99.146313,49.01468 C97.936908,49.2283068 96.913821,49.3352979 95.899687,49.3352979 C88.67051,49.3352979 85.637733,46.5273179 85.637733,39.7810681 L85.637733,19.9506936 L80.215147,19.9506936 L80.215147,14.317976 L85.637733,14.317976 Z M141.274887,2.9322217 C154.944554,2.9322217 163.067627,11.5330879 163.067627,25.9933875 C163.067627,40.4924625 154.968601,49.0857471 141.274887,49.0857471 L125.278705,49.0857471 L125.278705,2.9322217 L141.274887,2.9322217 Z M132.027998,42.8915403 L140.900916,42.8915403 C150.598262,42.8915403 156.193676,36.7436217 156.193676,26.0557752 C156.193676,15.351214 150.548965,9.1264285 140.900916,9.1264285 L132.027998,9.1264285 L132.027998,42.8915403 Z M184.904888,19.6075613 C180.054552,19.6075613 176.611481,23.016805 176.022504,28.3552074 L193.317809,28.3552074 C192.99056,23.0161599 189.725625,19.6075613 184.904888,19.6075613 Z M185.091873,43.7961619 C189.182292,43.7961619 191.928561,42.3404413 193.24054,39.5680807 L193.394919,39.2418601 L199.867924,39.2418601 L199.664404,39.9666097 C197.954551,46.0555106 192.494498,49.6784302 184.967216,49.6784302 C175.331935,49.6784302 169.251512,42.6879025 169.251512,31.7330554 C169.251512,20.8434944 175.422685,13.7252929 184.967216,13.7252929 C194.351644,13.7252929 200.121963,20.4323766 200.121963,31.20276 L200.121963,33.8319557 L175.986978,33.8319557 C176.36593,40.0071108 179.831498,43.7961619 185.091873,43.7961619 Z M206.617491,24.0905628 C206.617491,18.158047 212.288801,13.7252929 219.715395,13.7252929 C227.019586,13.7252929 232.175566,17.4011528 232.933205,23.2372145 L233.016797,23.8811184 L226.632682,23.8811184 L226.519653,23.4580866 C225.852824,20.9623618 223.380318,19.4203982 219.684231,19.4203982 C215.886237,19.4203982 213.148635,21.3084619 213.148635,23.8722059 C213.148635,25.8199159 214.756537,27.1035482 218.53999,28.0279469 L223.713479,29.2757533 C230.387328,30.8882104 233.530078,33.8841448 233.530078,38.9388342 C233.530078,45.2291952 227.535597,49.6784302 219.497245,49.6784302 C211.761511,49.6784302 206.344259,45.9131364 205.71691,39.9972445 L205.650037,39.3666355 L212.216161,39.3666355 L212.342623,39.7638429 C213.198459,42.4519445 215.755033,44.0145188 219.684231,44.0145188 C223.944291,44.0145188 226.874277,42.0454955 226.874277,39.3443542 C226.874277,37.3468952 225.333214,35.9742524 221.980358,35.1571303 L216.215314,33.7534922 C209.617792,32.151585 206.617491,29.2028995 206.617491,24.0905628 Z M240.92937,49.0857471 L240.92937,14.317976 L247.429349,14.317976 L247.429349,49.0857471 L240.92937,49.0857471 Z M244.17936,8.627327 C241.807791,8.627327 239.869784,6.6874816 239.869784,4.3136635 C239.869784,1.9398453 241.807791,0 244.17936,0 C246.550928,0 248.488935,1.9398453 248.488935,4.3136635 C248.488935,6.6874816 246.550928,8.627327 244.17936,8.627327 Z M270.669003,42.7043772 C276.495126,42.7043772 280.071713,38.3189021 280.071713,31.20276 C280.071713,24.1006946 276.475491,19.7011428 270.669003,19.7011428 C264.902859,19.7011428 261.515607,24.0111922 261.515607,31.20276 C261.515607,38.3943278 264.902859,42.7043772 270.669003,42.7043772 Z M280.19637,14.317976 L286.447035,14.317976 L286.447035,49.1080285 C286.447035,56.9782785 280.360884,62 270.918317,62 C262.705685,62 257.140308,58.2862296 256.268182,52.3098555 L256.172913,51.6570114 L262.963914,51.6570114 L263.060985,52.1070322 C263.601309,54.6119594 266.439936,56.1801193 270.918317,56.1801193 C276.637667,56.1801193 279.947056,53.4470883 279.947056,48.8272838 L279.947056,43.3974088 C277.648043,46.7263421 273.914904,48.5866456 269.48476,48.5866456 C260.539386,48.5866456 254.828641,41.6815227 254.828641,31.20276 C254.828641,20.7309425 260.595237,13.7252929 269.48476,13.7252929 C273.955624,13.7252929 277.978268,15.733549 280.19637,19.0037446 L280.19637,14.317976 Z M311.681203,13.7252929 C319.543847,13.7252929 324,18.4470228 324,26.7420398 L324,49.0857471 L317.50002,49.0857471 L317.50002,28.0521814 C317.50002,22.3055128 315.187219,19.7011428 310.154153,19.7011428 C305.072136,19.7011428 301.904521,23.0729439 301.904521,28.6136707 L301.904521,49.0857471 L295.404542,49.0857471 L295.404542,14.317976 L301.655207,14.317976 L301.655207,18.8184057 C303.623696,15.4887389 306.999521,13.7252929 311.681203,13.7252929 Z" id="Ant-Design-Copy"></path>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="200px" height="200px" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
<title>Group 28 Copy 5</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="62.1023273%" y1="0%" x2="108.19718%" y2="37.8635764%" id="linearGradient-1">
<stop stop-color="#4285EB" offset="0%"></stop>
<stop stop-color="#2EC7FF" offset="100%"></stop>
</linearGradient>
<linearGradient x1="69.644116%" y1="0%" x2="54.0428975%" y2="108.456714%" id="linearGradient-2">
<stop stop-color="#29CDFF" offset="0%"></stop>
<stop stop-color="#148EFF" offset="37.8600687%"></stop>
<stop stop-color="#0A60FF" offset="100%"></stop>
</linearGradient>
<linearGradient x1="69.6908165%" y1="-12.9743587%" x2="16.7228981%" y2="117.391248%" id="linearGradient-3">
<stop stop-color="#FA816E" offset="0%"></stop>
<stop stop-color="#F74A5C" offset="41.472606%"></stop>
<stop stop-color="#F51D2C" offset="100%"></stop>
</linearGradient>
<linearGradient x1="68.1279872%" y1="-35.6905737%" x2="30.4400914%" y2="114.942679%" id="linearGradient-4">
<stop stop-color="#FA8E7D" offset="0%"></stop>
<stop stop-color="#F74A5C" offset="51.2635191%"></stop>
<stop stop-color="#F51D2C" offset="100%"></stop>
</linearGradient>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="logo" transform="translate(-20.000000, -20.000000)">
<g id="Group-28-Copy-5" transform="translate(20.000000, 20.000000)">
<g id="Group-27-Copy-3">
<g id="Group-25" fill-rule="nonzero">
<g id="2">
<path d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z" id="Shape" fill="url(#linearGradient-1)"></path>
<path d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z" id="Shape" fill="url(#linearGradient-2)"></path>
</g>
<path d="M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z" id="Shape" fill="url(#linearGradient-3)"></path>
</g>
<ellipse id="Combined-Shape" fill="url(#linearGradient-4)" cx="100.519339" cy="100.436681" rx="23.6001926" ry="23.580786"></ellipse>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>Group 21</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
<g id="Group-21" transform="translate(77.000000, 73.000000)">
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
</g>
</g>
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
</g>
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
</g>
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
</g>
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
</g>
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
</g>
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1526372227495" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1061" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M963.9 569.6c-88.4-112.1-329.7-139.4-329.7-139.4l97.2-59.9-217-121.6L309.2 365 480 461c277.5-3 359.9 147.1 359.9 147.1 68.8 223.6-337.4 237.8-337.4 237.8C271.2 871.4 162.1 665 162.1 665L21 669.8c164.8 334.4 765.5 188 765.5 188 310.8-97.3 177.4-288.2 177.4-288.2zM513.8 421.3l-97.2-49.2 93.1-60.5 97.2 52.8-93.1 56.9z" fill="#1D1F86" p-id="1062"></path><path d="M526.8 136.7C375 126 63.1 145 25.2 333.6-5.6 483.6 223.9 571.4 384 588c-32.6 19.6-65.8 38.5-98.4 58.1 71.2 40.3 142.9 81.2 214.1 121.6l195.7-113.8-195.9-104.5c-35-8.3-71.8 4.7-94.9 4.7-110.9 1.2-265.1-119.8-223.6-225.9 80.1-231.3 618.5-198.1 671.3 34.4H1003c-73.5-178.5-324.4-215.2-476.2-225.9z m-18.4 463.1l99 54-102 54-94.3-54 97.3-54z" fill="#5AA371" p-id="1063"></path></svg>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<title><%= htmlWebpackPlugin.options.title %></title>
<!--[if lte IE 8]>
<script>
window.location.href = 'tipUpgrade.html';
</script>
<![endif]-->
<!--[if IE]>
<style>
*{font-family: Microsoft YaHei !important;}
.ant-message-loading .anticon-loading{
background: url('./img/loading-css3.gif');
}
.ant-message-loading .anticon{
color:transparent !important;
}
</style>
<script type="text/javascript">
// IE9 fix
if(!window.console) {
var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function(){};
window.console = c;
}
</script>
<![endif]-->
</head>
<body>
<div id="root">
<span class="rootSpan">正在加载中...</span>
</div>
<script type='text/javascript' src='config.js'></script>
</body>
</html>
\ No newline at end of file
{
"name": "react-dzt",
"version": "3.0.0",
"description": "## 知识点需求 antd的前端UI框架,react-router4,mobx,Axios,mockJS。 * dist目录下为打包后文件,目前预览使用 ## 生产版本打包 生产版本打(需注释掉src/index.js中引入的mockJs) ## 1.使用离线字体",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "cross-env NODE_ENV=development webpack-dev-server --config webpack/webpack.dev.js",
"build": "cross-env NODE_ENV=production webpack --config webpack/webpack.product.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"antd": "^3.3.0",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"jquery": "^3.3.1",
"mobx": "^5.0.3",
"mobx-react": "^5.2.3",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-intl": "^2.7.2",
"react-router-dom": "^4.2.2"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-eslint": "^8.2.1",
"babel-loader": "^7.1.2",
"babel-plugin-import": "^1.6.3",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-plugin-transform-remove-strict-mode": "0.0.2",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"bundle-loader": "^0.5.6",
"clean-webpack-plugin": "^0.1.18",
"copy-webpack-plugin": "^4.5.2",
"cross-env": "^5.1.4",
"css-loader": "^0.28.9",
"css-split-webpack-plugin": "^0.2.5",
"es6-promise": "^4.2.4",
"eslint": "^4.17.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.9.0",
"eslint-plugin-flowtype": "^2.44.0",
"eslint-plugin-import": "^2.8.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.6.1",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.6",
"html-webpack-plugin": "^2.30.1",
"less": "^3.0.1",
"less-loader": "^4.0.5",
"mockjs": "^1.0.1-beta3",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"qs": "^6.5.2",
"react-hot-loader": "^3.1.3",
"style-loader": "^0.20.1",
"uglifyjs-webpack-plugin": "^1.1.8",
"webpack": "^3.11.0",
"webpack-dev-server": "^2.11.1",
"webpack-merge": "^4.1.1"
}
}
export default {
hello:'Hello'
}
\ No newline at end of file
import enUS from './enUS'
import zhCN from './zhCN'
export {enUS,zhCN}
\ No newline at end of file
export default {
hello:'你好'
}
\ No newline at end of file
export const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 4, offset: 1 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 15 },
},
}
export const formSubBtnLayout = {
wrapperCol: {
xs: { span: 24 },
sm: { span: 10, offset: 10 },
}
}
\ No newline at end of file
import 'core-js/es6/map';
import 'core-js/es6/set';
import 'raf/polyfill';
import React from 'react';
import ReactDOM from 'react-dom';
import {AppContainer} from 'react-hot-loader';
import { Provider } from 'mobx-react';
// mobx store
import stores from './stores/index'
import {LocaleProvider} from 'antd';
import AppRouter from './routers';
import 'babel-polyfill';
import promise from 'es6-promise';
import "../mock/index.js"
window.SUCCESS = '00000'
if (process.env.NODE_ENV === 'development') {
ReactDOM.render(
<AppContainer>
<Provider {...stores}>
<AppRouter/>
</Provider>
</AppContainer>
,
document.getElementById('root')
);
if (module.hot) {
module.hot.accept(
'./routers', () => ReactDOM.render(AppRouter)
)
}
console.log('----------------');
console.log("process.env.NODE_ENV 的值是(index.js):" + process.env.NODE_ENV);
}else {
ReactDOM.render(
<Provider {...stores}>
<AppRouter/>
</Provider>
,
document.getElementById('root')
);
}
import React,{Component} from 'react'
import Login from '../views/Login'
import Layout from '../views/Layout'
import { inject, observer } from 'mobx-react'
import {LocaleProvider} from 'antd';
import {IntlProvider, addLocaleData} from 'react-intl'; //国际化依赖
import en from 'react-intl/locale-data/en';
import zh from 'react-intl/locale-data/zh';
import S from '../utils/Storage'
import { HashRouter as Router,Switch, Route, Redirect } from 'react-router-dom';
import {zhCN,enUS} from '../config/i18n'
import antd_zh_CN from 'antd/lib/locale-provider/zh_CN';
import antd_en_US from 'antd/lib/locale-provider/en_US';
addLocaleData([...en,...zh])
@inject('i18n')
@inject('UserContext')
@observer
export default class AppRouter extends Component
{
constructor(props)
{
super(props)
this.reloadFromeStorage()
}
reloadFromeStorage()
{
//负责程序登录验证
//信息重加载
let userId = S.getUser()
let token = S.getToken()
if(userId && token )
{
this.props.UserContext.userId = userId
this.props.UserContext.token = token
this.props.UserContext.menu = S.getMenu()||[]
}
this.props.i18n.lang = window.localStorage.i18n=='en'?'en':'zh'
}
renderCoreRouter()
{
return <Switch>
<Route
exact
path='/login'
render={props => <Login {...props} />}
/>
<Route path='/' render={props => <Layout {...props} />} />
</Switch>
}
render()
{
return (
<IntlProvider locale={this.props.i18n.lang} messages={this.props.i18n.lang=='en'?enUS:zhCN}>
<LocaleProvider locale={this.props.i18n.lang=='en'?antd_en_US:antd_zh_CN}>
<Router>
{this.renderCoreRouter()}
</Router>
</LocaleProvider>
</IntlProvider>
)
}
}
\ No newline at end of file
import $ from 'jquery'
import {withRouter} from 'react-router-dom';
const BASE_URI = "/business/service/"
export default class Api
{
static get(url,data)
{
}
static post(url,data)
{
let token = window.sessionStorage.token
let userId = window.sessionStorage.userId
return new Promise(function (resolve, reject) {
$.ajax(BASE_URI+url,{
data:JSON.stringify(data),
dataType:"json",
contentType:"application/json;charset=utf-8",
error:function(xhttp,textStatus,erroThrown){
switch (textStatus){
case "timeout":
case "error":
case "parsererror":
resolve({retcod:'500',retmsg:textStatus});
break;
default:
resolve({retcod:"500"});
break;
}
},
success:data=>{
if(data && data.status=='9999'){
Modal.error({
title:'会话超时',
content:'即将退出,请重新登录',
onOk:withRouter(({history})=>{
history.replace("/login")
})
})
return ;
}
resolve(data);
},
beforeSend: function (XMLHttpRequest) {
if(url != '/login')
XMLHttpRequest.setRequestHeader("token", token);
XMLHttpRequest.setRequestHeader("userId", userId);
XMLHttpRequest.setRequestHeader("terminalType", 'WEB');
},
type:"POST"
})
})
}
}
\ No newline at end of file
import { action, observable,autorun} from 'mobx'
class I18n {
constructor()
{
autorun(()=>{
if(this.lang)
window.localStorage.i18n = this.lang
})
}
@observable
lang=''
}
export default new I18n()
\ No newline at end of file
import { action, observable } from 'mobx'
import Api from '../service/api'
import Storage from '../utils/Storage'
class UserContext{
@observable
userId = null
@observable
menu = null
@observable
token = null
async login(args)
{
Storage.setUser(args.username)
let rtnmsg = await Api.post('/login',{data:args})
if(rtnmsg.retcod == SUCCESS)
{
const {data} = rtnmsg
this.menu = data.menu
this.token = data.token
this.userId = args.username
Storage.setUser(this.userId)
Storage.setToken(this.token)
Storage.setMenu(this.menu)
}
return rtnmsg
}
logout()
{
this.menu = null
this.token = null
this.userId = null
Storage.clearItems()
}
}
export default new UserContext()
\ No newline at end of file
import UserContext from './UserContext'
import i18n from './I18NStore'
export default {
UserContext,
i18n
}
\ No newline at end of file
export default {
storage:window.sessionStorage,
setToken(token)
{
this.storage.token = token
},
getToken()
{
return this.storage.token
},
setUser(userId)
{
return this.storage.userId = userId
},
getUser()
{
return this.storage.userId
},
setMenu(menu)
{
let menuJsn = JSON.stringify(menu)
this.storage.menu = menuJsn
},
getMenu()
{
let menuJsn = this.storage.menu
if(menuJsn)
return JSON.parse(menuJsn)
},
setItem(key,value)
{
this.storage.setItem(key,value)
},
getItem(key)
{
return this.storage.getItem(key)
},
setItems(objs)
{
for(let key in objs)
this.setItem(key,objs[key])
},
getItems(objs)
{
let nobj = {}
for(let key in objs)
{
nobj[key] = this.getItem(key)
}
return objs
},
clearItems()
{
this.storage.clear()
},
remoteItem(key)
{
this.storage.remove(key)
}
}
\ No newline at end of file
import React,{Component,Fragment} from 'react'
import {Form, Input, Select, Row, Col, Button,notification} from 'antd'
import {formItemLayout,formSubBtnLayout} from '../../../config'
import fieldSet from './descriptor/pxiadd'
import Api from '../../../service/api'
import {FormattedMessage} from 'react-intl'; //国际化依赖
const FormItem = Form.Item
const FromCreate = Form.create;
const { Option } = Select;
@FromCreate()
export default class Pxiadd extends Component
{
constructor(props)
{
super(props)
this.state = {loading:false}
}
handleSubmit=(e)=>{
e.preventDefault();
this.props.form.validateFieldsAndScroll(async (err, values) => {
console.log(err)
if (!err) {
console.log('Received values of form: ', values);
this.setState({loading:true})
const rtnmsg = await Api.post('pxiadd/_save',{data:values})
this.setState({loading:false})
if(rtnmsg.retcod != SUCCESS)
{
notification.error({message:'数据保存失败'})
return
}
if(rtnmsg.error)
{
for(let key in rtnmsg.error)
this.props.form.setFields({[`${key}`]:{value:values[key],errors:[new Error(rtnmsg.error[key])]}})
return
}
notification.success({message:'数据保存成功'})
}
});
}
async componentWillMount()
{
// //发起交易切换
// const data = await Api.post('pxiadd/init',{data:{}})
// console.log(data)
}
render()
{
const { getFieldDecorator } = this.props.form;
return (
<Fragment>
<FormattedMessage
  id="hello"
  defaultMessage={'hello'}
/>
<Form onSubmit={this.handleSubmit}>
<FormItem
{...formItemLayout}
label="姓名"
>
{getFieldDecorator('nam', {rules:fieldSet.nam})(
<Input maxLength={20} placeholder="请填写姓名"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="性别"
>
{getFieldDecorator('sex', {rules:fieldSet.sex})(
<Select placeholder="选择性别">
<Option value="F"></Option>
<Option value="M"></Option>
</Select>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="毕业院校"
>
{getFieldDecorator('univer', {rules:fieldSet.univer})(
<Input maxLength={20} placeholder="请输入毕业院校"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="专业"
>
{getFieldDecorator('major', {rules:fieldSet.major})(
<Input maxLength={20} placeholder="请输入你的专业"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="联系电话"
>
{getFieldDecorator('tel', {rules:fieldSet.tel})(
<Input maxLength={11} placeholder="请输入联系电话"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="age"
>
{getFieldDecorator('age', {rules:fieldSet.age})(
<Input maxLength={3} placeholder="请输入年龄"/>
)}
<FormItem {...formSubBtnLayout}>
<Button type="primary" htmlType="submit" loading={this.state.loading}>提交</Button>
</FormItem>
</FormItem>
</Form>
</Fragment>
)
}
}
\ No newline at end of file
import React,{Component,Fragment} from 'react'
import {Form, Input, Select, Row, Col, Button,notification} from 'antd'
import {formItemLayout,formSubBtnLayout} from '../../../config'
import fieldSet from './descriptor/pxiame'
import Api from '../../../service/api'
const FormItem = Form.Item
const FromCreate = Form.create;
const { Option } = Select;
@FromCreate()
export default class Pxiame extends Component
{
constructor(props)
{
super(props)
this.state = {loading:false}
}
async componentDidMount()
{
const rtnmsg =await Api.post('/pxiame/init',{params:{pxiinr:this.props.match.params.id}})
if(rtnmsg.retcod != SUCCESS)
{
notification.error({message:'加载数据失败'})
}
console.log(rtnmsg.data)
this.props.form.setFieldsValue(rtnmsg.data)
}
handleSubmit=(e)=>{
e.preventDefault();
this.props.form.validateFieldsAndScroll(async (err, values) => {
if (!err) {
console.log('Received values of form: ', values);
this.setState({loading:true})
const rtnmsg =await Api.post('/pxiame/_save',{params:{pxiinr:this.props.match.params.id},data:values})
if(rtnmsg.retcod != SUCCESS)
{
notification.error({message:'数据保存失败'})
return
}
notification.success({message:'数据保存成功'})
this.setState({loading:false})
}
});
}
render()
{
const { getFieldDecorator } = this.props.form;
return (
<Fragment>
<Form onSubmit={this.handleSubmit}>
<FormItem
{...formItemLayout}
label="姓名"
>
{getFieldDecorator('nam', fieldSet.nam)(
<Input maxLength={20} placeholder="请填写姓名"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="性别"
>
{getFieldDecorator('sex', fieldSet.sex)(
<Select >
<Option value="F"></Option>
<Option value="M"></Option>
</Select>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="毕业院校"
>
{getFieldDecorator('univer', fieldSet.univer)(
<Input maxLength={20} placeholder="请输入毕业院校"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="专业"
>
{getFieldDecorator('major', fieldSet.major)(
<Input maxLength={20} placeholder="请输入你的专业"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="联系电话"
>
{getFieldDecorator('tel', fieldSet.tel)(
<Input maxLength={11} placeholder="请输入联系电话"/>
)}
</FormItem>
<FormItem
{...formItemLayout}
label="age"
>
{getFieldDecorator('age', fieldSet.age)(
<Input maxLength={3} placeholder="请输入年龄"/>
)}
<FormItem {...formSubBtnLayout}>
<Button type="primary" htmlType="submit">提交</Button>
&nbsp;&nbsp;&nbsp;&nbsp;
<Button onClick={()=>this.props.history.go(-1)} >返回</Button>
</FormItem>
</FormItem>
</Form>
</Fragment>
)
}
}
\ No newline at end of file
import React,{Component,Fragment} from 'react'
import {Form, Input, Select, Row, Col, Button,Table,Divider,notification,Popconfirm} from 'antd'
import {Link} from 'react-router-dom';
import {formItemLayout,formSubBtnLayout} from '../../../config'
import fieldSet from './descriptor/pxisel'
import Api from '../../../service/api'
import { action, observable } from 'mobx'
import { inject, observer } from 'mobx-react'
const FormItem = Form.Item
const FromCreate = Form.create;
const { Option } = Select;
@observer
@FromCreate()
export default class Pxisel extends Component
{
constructor(props)
{
super(props)
this.state={loading:false}
}
@observable
pxilst=[]
pxilst_column=[{
title: '姓名',
dataIndex: 'nam',
key: 'nam',
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
},
{
title: '性别',
dataIndex: 'sex',
key: 'sex',
render(text,record){
return <span>{text=='F'?'女':'男'}</span>
}
},
{
title: '电话',
dataIndex: 'tel',
key: 'tel',
},
{
title: '毕业院校',
dataIndex: 'univer',
key: 'univer',
},
{
title: '专业',
dataIndex: 'major',
key: 'major',
},
{
title:'编辑',
key: 'action',
render: (text, record) => (
<span>
<Link to={`/business/pxi/ame/${record.inr}`}>编辑</Link>
<Divider type="vertical" />
<Popconfirm title="确定删除?" okText="确定" cancelText="取消">
<a href="#">删除</a>
</Popconfirm>
</span>
),
}
];
handleSubmit=(e)=>{
e && e.preventDefault();
this.props.form.validateFieldsAndScroll(async (err, values) => {
if (!err) {
console.log('Received values of form: ', values);
this.setState({loading:true})
const rtnmsg = await Api.post('pxisel/_sel',{data:values})
if(rtnmsg.retcod == SUCCESS)
{
// this.setState({pxilst:rtnmsg.data.pxilst})
this.pxilst = rtnmsg.data.pxilst
}
else
notification.error({message:'查询失败!'})
this.setState({loading:false})
}
});
}
componentWillMount()
{
this.handleSubmit()
}
render()
{
const { getFieldDecorator } = this.props.form;
return (
<Fragment >
<Form onSubmit={this.handleSubmit}>
<Row>
<Col span={8}>
<FormItem
{...formItemLayout}
label="姓名"
>
{getFieldDecorator('nam', fieldSet.nam)(
<Input maxLength={20} placeholder="请填写姓名"/>
)}
</FormItem>
</Col>
<Col span={8}>
<FormItem
{...formItemLayout}
label="性别"
>
{getFieldDecorator('sex', fieldSet.sex)(
<Select placeholder="请选择性别">
<Option value="F"></Option>
<Option value="M"></Option>
</Select>
)}
</FormItem>
</Col>
<Col span={8}>
<FormItem
{...formItemLayout}
label="毕业院校"
>
{getFieldDecorator('univer', fieldSet.univer)(
<Input maxLength={20} placeholder="请输入毕业院校"/>
)}
</FormItem>
</Col>
</Row>
<Row>
<Col span={8}>
<FormItem
{...formItemLayout}
label="专业"
>
{getFieldDecorator('major', fieldSet.major)(
<Input maxLength={20} placeholder="请输入你的专业"/>
)}
</FormItem>
</Col>
<Col span={16}>
<FormItem {...formSubBtnLayout}>
<Button type="primary" loading={this.state.loading} icon="search" htmlType="submit" >查询</Button>
<Button type="primary" icon="download" style={{marginLeft:'5px'}}>导出</Button>
<Button icon="close" style={{marginLeft:'5px'}} onClick={()=>this.props.form.resetFields()}>清除</Button >
</FormItem>
</Col>
</Row>
<Table loading={this.state.loading} dataSource={this.pxilst} columns={this.pxilst_column} />
</Form>
</Fragment>
)
}
}
export default fieldSet = {
nam:[
{required:true,message:'数据项必填'},
{type:'string',max:20,message:'长度不能超过20个字符'},
],
sex:[
{type:'string',max:1}
],
univer:[
{type:'string',max:20,message:'长度不能超过20个字符'}
],
major:[
{type:'string',max:20,message:'长度不能超过20个字符'}
],
tel:[
{type:'string',max:11,message:'手机号不要超过11位'}
],
age:[
{pattern:/^\d{1,3}$/,message:'请填入正确的年龄'}
]
}
\ No newline at end of file
export default fieldSet = {
nam:[
{type:'string',max:20,message:'长度不能超过20个字符'},
],
sex:[
{type:'string',max:1}
],
univer:[
{type:'string',max:20,message:'长度不能超过20个字符'}
],
major:[
{type:'string',max:20,message:'长度不能超过20个字符'}
],
tel:[
{type:'string',max:11,message:'手机号不要超过11位'}
],
age:[
{type:'number',max:150,min:0,message:'请填入正确的年龄'}
]
}
\ No newline at end of file
import React,{Component} from 'react'
import { Switch, Route, Redirect } from 'react-router-dom';
import Pxiame from './Pxiame'
import Pxisel from './Pxisel'
import Pxiadd from './Pxiadd'
import "./index.less"
const moduleBasePath = "/business/pxi/"
export default function moduleRouter(props){
return <React.Fragment>
<Switch>
<Route exact path={`${moduleBasePath}ame/:id`} component={Pxiame} />
<Route exact path={`${moduleBasePath}sel`} component={Pxisel} />
<Route exact path={`${moduleBasePath}add`} component={Pxiadd} />
</Switch>
</React.Fragment>
}
\ No newline at end of file
import React,{Component} from 'react'
export default class Home extends Component
{
render()
{
return <div>Home</div>
}
}
\ No newline at end of file
import React,{Component} from 'react'
export default class Container extends Component{
render()
{
return (
<div {...this.props}>
{this.props.children}
</div>
)
}
}
\ No newline at end of file
import React,{Component} from 'react'
import {Select,Icon,Popconfirm} from 'antd'
import { inject, observer } from 'mobx-react'
import {Link,withRouter} from 'react-router-dom'
const Option = Select.Option
@withRouter
@inject('UserContext')
@inject('i18n')
@observer
export default class Header extends Component{
constructor(props)
{
super(props)
}
logout=()=>{
this.props.UserContext.logout()
this.props.history.push('/login')
}
render()
{
return <div >
<h2 style={{color:'white'}}>单证通技术方案演示</h2>
<div style={{position:'absolute',right:'2em',top:'1em'}}>
<Popconfirm title="确定退出?" onConfirm={this.logout} ><span style={{color:'white',cursor:'pointer'}}><Icon type="logout" />退出</span></Popconfirm>
<Select size="small" value={this.props.i18n.lang} onChange={val=>this.props.i18n.lang=val}>
<Option value="zh">中文</Option>
<Option value="en">English</Option>
</Select>
</div>
</div>
}
}
\ No newline at end of file
import React,{Component} from 'react'
import { inject, observer } from 'mobx-react'
import {Menu,Icon} from 'antd'
import {withRouter} from 'react-router-dom';
import S from '../../utils/Storage'
const {SubMenu} = Menu
const menuSelectKeys = "menuSelectKeys"
@withRouter
@inject('UserContext')
@observer
export default class SideMenu extends Component
{
constructor(props)
{
super(props)
this.iids=0
this.state = {}
}
componentWillMount()
{
let keyJson = S.getItem(menuSelectKeys)
if(keyJson)
{
let openKeys = JSON.parse(keyJson)
this.setState({openKeys})
}
}
walkMenu(menuList)
{
if(!menuList || !menuList.length)
return ;
return menuList.map(item=>{
return !item.subMenu || !item.subMenu.length?
<Menu.Item key={item.value||this.iids++}>
<span>{item.label}</span>
</Menu.Item>
:
<SubMenu key={this.iids++} title={<span><Icon type="mail" /><span>{item.label}</span></span>}>
{this.walkMenu(item.subMenu)}
</SubMenu>
})
}
showMenu(menuList)
{
this.iids = 0
let rootMenu = []
let menuNode = this.walkMenu(menuList)
if(menuNode)
for(let item of menuNode)
rootMenu.push(item.key)
this.rootMenu = rootMenu
return menuNode
}
onSelect= ({item, key, selectedKeys })=>
{
// this.setState({selectedKeys:selectedKeys})
// S.setItem(menuSelectKeys,JSON.stringify(selectedKeys));
}
toLink=({item,key,keyPath})=>{
if(/^\w+$/.test(key))
this.props.history.push("/business/"+key.substring(0,3)+"/"+key.substring(3))
}
onOpenChange = openKeys => {
this.setState({openKeys})
S.setItem(menuSelectKeys,JSON.stringify(openKeys));
}
onOpenChange2 = openKeys => {
console.log(openKeys)
const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1);
if (this.rootMenu.indexOf(latestOpenKey) === -1) {
this.setState({ openKeys });
} else {
this.setState({
openKeys: latestOpenKey ? [latestOpenKey] : [],
});
}
sessionStorage.setItem(menuSelectKeys, JSON.stringify(openKeys));
}
render()
{
const {menu} = this.props.UserContext
return (<Menu mode={this.state.collapse ? 'vertical' : 'inline'} theme={'dark'}
openKeys = {this.state.openKeys}
collapse={this.state.collapse}
onClick={this.toLink}
onOpenChange={this.onOpenChange}
>
{
this.showMenu(menu)
}
</Menu>)
}
}
\ No newline at end of file
import React,{Component} from 'react'
import { Switch, Route, Redirect } from 'react-router-dom';
import {Layout} from 'antd'
import HeaderCom from './Header'
import SideMenuCom from './SideMenu'
import ContainerCom from './Container'
import './index.less'
import Home from '../Home'
import PXIRouter from '../Business/PXI'
const {
Header, Footer, Sider, Content,
} = Layout;
export default class LayoutCom extends Component {
constructor(props)
{
super(props)
}
render()
{
return (
<Layout className="x_layout">
<Header >
<HeaderCom/>
</Header>
<Layout className="xx_layout">
<Sider className="sideMenu">
<SideMenuCom />
</Sider>
<Content className="xxx_content">
<ContainerCom>
{/*模块路由配置*/}
<Switch>
<Route path="/home" component={Home} />
{/*模块路由插入开始*/}
<Route path="/business/pxi" component={PXIRouter} />
{/*模块路由插入结束*/}
<Redirect path="/" to="/home" />
</Switch>
</ContainerCom>
</Content>
</Layout>
</Layout>
)
}
}
\ No newline at end of file
.sideMenu{
overflow: auto;
}
.x_layout{
height: 100%;
}
.xx_layout{
height:calc(100% - 45px);
}
.xxx_content{
overflow: auto;
}
\ No newline at end of file
/**
* Created by MHC on 2018/2/14.
*/
import React from 'react';
import { Input, Button, Icon, Form, message } from 'antd';
import { inject, observer } from 'mobx-react'
import './index.less';
const FormItem = Form.Item;
const FromCreate = Form.create;
@inject('UserContext')
@observer
export default class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {loading:false}
}
componentWillMount(){
BrowserMatch.init();
if(BrowserMatch.browser == 'IE'){
if (BrowserMatch.version < 9) {
alert("当前浏览器为"+BrowserMatch.browser+BrowserMatch.version+",建议使用IE9及以上版本、chrome、firefox登录");
}
}
}
toLogin = (values) => {
this.setState({loading:true})
this.props.UserContext.login(values).then((data)=>{
this.setState({loading:false})
if(data.retcod == SUCCESS)
this.props.history.push('/')
}).catch(e=>{
this.setState({loading:false})
})
}
render() {
return (
<React.Fragment>
<div className="login_bg">
<Login {...this.props} loading={this.state.loading} toLogin={this.toLogin} />
</div>
</React.Fragment>
);
}
}
@FromCreate()
class Login extends React.Component {
onSubmit = (e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.props.toLogin(values);
}
});
}
render() {
const { getFieldDecorator } = this.props.form;
return (
<React.Fragment>
<div className="login_container">
<div className='login_title'>兴业银行单证通</div>
<div className="login_form">
<Form onSubmit={this.onSubmit}>
<FormItem>
{
getFieldDecorator('username', {
rules: [{
required: true,
message: '请输入你的用户名!'
}]
}
)(<Input type={'text'}
prefix={<Icon type="user" style={{ color: 'rgba(0,0,0,.25)' }} />}
placeholder={'请输入用户名'} />)
}
</FormItem>
<FormItem>
{
getFieldDecorator('password', {
rules: [{
required: true,
message: '请输入你的密码!'
}]
}
)(<Input type={'password'}
prefix={<Icon type="lock" style={{ color: 'rgba(0,0,0,.25)' }} />}
placeholder={'请输入密码'} />)
}
</FormItem>
<FormItem>
<Button
loading={this.props.loading}
type={'primary'}
htmlType={'submit'}
style={{ width: '100%' }}>登陆</Button>
</FormItem>
</Form>
<span className="login_tip">建议使用IE9及以上版本、chromefirefox登录</span>
</div>
</div>
</React.Fragment>
);
}
}
export let BrowserMatch = {
init: function() {
this.browser = this.getBrowser().browser || "An Unknown Browser";
this.version = this.getBrowser().version || "An Unknown Version";
},
getBrowser: function() {
var rMsie = /(msie\s|trident\/7)([\w\.]+)/;
var rTrident = /(trident)\/([\w.]+)/;
var rFirefox = /(firefox)\/([\w.]+)/;
var rOpera = /(opera).+version\/([\w.]+)/;
var rNewOpera = /(opr)\/(.+)/;
var rChrome = /(chrome)\/([\w.]+)/;
var rSafari = /version\/([\w.]+).*(safari)/;
var ua = navigator.userAgent.toLowerCase();
var matchBS, matchBS2;
matchBS = rMsie.exec(ua);
if (matchBS != null) {
matchBS2 = rTrident.exec(ua);
if (matchBS2 != null) {
switch (matchBS2[2]) {
case "4.0":
return {
browser:
"IE",
version: "8"
};
case "5.0":
return {
browser:
"IE",
version: "9"
};
case "6.0":
return {
browser:
"IE",
version: "10"
};
case "7.0":
return {
browser:
"IE",
version: "11"
};
default:
return {
browser:
"IE",
version: "Undefined"
};
}
} else {
return {
browser: "IE",
version: matchBS[2] || "0"
};
}
}
matchBS = rFirefox.exec(ua);
if ((matchBS != null) && (!(window.attachEvent)) && (!(window.chrome)) && (!(window.opera))) {
return {
browser: matchBS[1] || "",
version: matchBS[2] || "0"
};
}
matchBS = rOpera.exec(ua);
if ((matchBS != null) && (!(window.attachEvent))) {
return {
browser: matchBS[1] || "",
version: matchBS[2] || "0"
};
}
matchBS = rChrome.exec(ua);
if ((matchBS != null) && ( !! (window.chrome)) && (!(window.attachEvent))) {
matchBS2 = rNewOpera.exec(ua);
if (matchBS2 == null) {
return {
browser: matchBS[1] || "",
version: matchBS[2] || "0"
};
} else {
return {
browser: "Opera",
version: matchBS2[2] || "0"
};
}
}
matchBS = rSafari.exec(ua);
if ((matchBS != null) && (!(window.attachEvent)) && (!(window.chrome)) && (!(window.opera))) {
return {
browser: matchBS[2] || "",
version: matchBS[1] || "0"
};
}
}
};
\ No newline at end of file
#root{
height: 100%;
}
.rootSpan {position: absolute;left: 48%;top: 49%;font-size: 26px;}
.login_bg{
background-image: url('img/login-bg.jpg');
background-size: cover;
width: 100%;
height: 100%;
}
.login_container{
width: 340px;
border: 1px solid #d9d9d9;
box-shadow: 5px 5px 5px 0px #d9d9d9;
border-radius: 3px;
position: absolute;
left: 50%;
top: 30%;
margin-left: -170px;
margin-top: -100px;
background-color: white;
i.anticon{
line-height: 0;
}
.login_title{
font-size: 20px;
color:#fff;
font-weight: 500;
background-color:#3671E0;
height: 60px;
line-height: 60px;
text-align: center;
}
.login_form{
margin:40px;
text-align: center;
}
.login_tip{
color:#DF3A01;
font-size: 12px;
}
}
//.login-form{
// width: 300px;
// border: 1px solid #d9d9d9;
// box-shadow: 5px 5px 5px 0px #d9d9d9;
// padding: 25px;
// border-radius: 3px;
// position: absolute;
// left: 50%;
// top: 30%;
// margin-left: -150px;
// margin-top: -100px;
//
// i.anticon{
// line-height: 0.2;
// }
// .loginIcon{
// width: 100%;
// height: 100%;
// padding: 15px;
//
// .login-icon-img{
// float:left;
// width: 80px !important;
// height: 80px !important;
// }
//
// .login-icon-title {
// float:left;
// font-size:1.2rem;
// padding-top:25px;
// padding-left:10px;
// width: 130px;
// }
// }
//}
{
"@icon-url":"'../fonts/iconfont/iconfont'"
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
#MAIN{
margin-top:200px;
text-align: center;
}
</style>
<body>
<div id="MAIN">
<h2 >您的浏览器版本过低,请升级您的浏览器(最低支持IE9)!</h2>
</div>
</body>
</html>
\ No newline at end of file
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
// const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const CSSSplitWebpackPlugin = require('css-split-webpack-plugin').default;
const theme = require('../theme');
const CopyWebpackPlugin=require('copy-webpack-plugin');
let entryIndex = '';
if (process.env.NODE_ENV === "production") {
entryIndex = ["babel-polyfill",path.join(__dirname, '../src/index.js')];
// entryIndex = path.join(__dirname, '../src/index.js');
}
if (process.env.NODE_ENV === "development") {
entryIndex = ["babel-polyfill",'react-hot-loader/patch', path.join(__dirname, '../src/index.js')];
// entryIndex = ['react-hot-loader/patch', path.join(__dirname, '../src/index.js')];
}
module.exports = {
entry: {
app:entryIndex
},
output: {
filename: 'js/[name].[hash:8].js',
chunkFilename: 'js/[name]-[id].[hash:8].bundle.js',
path: path.resolve(__dirname, '../dist')
},
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [['env'], ['react'], ['stage-0']],
plugins: [
'transform-decorators-legacy',
"transform-remove-strict-mode",
"react-hot-loader/babel",
["import", { libraryName: "antd", style: true }],
//"transform-runtime"与'babel-polyfill'一样
[
"transform-runtime",
{
"helpers": false,
"polyfill": false,
"regenerator": true,
"moduleName": "babel-runtime"
}
]
]
}
}
],
exclude: /node_modules/
},
{
test: /\.(css)$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
},
// {
// test: /\.(less)$/,
// loader: ['style-loader', 'css-loader', 'less-loader']
// },
{
test: /\.(less)$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
{
loader: 'css-loader'
,
options: {
url: false
}
},
{
loader: 'less-loader',
options: {
modifyVars: theme,
javascriptEnabled: true,
}
},
]
})
},
{
test: /\.(png|gif|jpg|jpeg|svg)$/,
include: [
path.resolve(__dirname, '../img')
],
loader: 'file-loader',
options: {
name: 'img/[name].[ext]'
}
},
{
test:/\.(eot|svg|ttf|woff|woff2)$/,
include:[
path.resolve(__dirname, '../fonts/iconfont')
],
loader:'file-loader',
options:{
name: 'css/fonts/iconfont/[name].[ext]'
}
}
]
},
resolve: {
alias: {
src: path.resolve(__dirname, '../src'),
css: path.resolve(__dirname, '../css'),
img: path.resolve(__dirname, '../img'),
common: path.resolve(__dirname, '../src/common'),
publicConfig:path.resolve(__dirname,'../publicConfig')
},
extensions: ['*', '.js', '.css', '.less', '.scss']
},
plugins: [
new HtmlWebpackPlugin({
title: '兴业单证通',
template: path.resolve(__dirname, '../index.html')
}),
new CopyWebpackPlugin([
{from: path.resolve(__dirname, '../config.js'), to:path.resolve(__dirname, '../dist/config.js')},
{from: path.resolve(__dirname, '../fonts'), to:path.resolve(__dirname, '../dist/fonts')},
{from: path.resolve(__dirname, '../img'), to:path.resolve(__dirname, '../dist/img')},
{from: path.resolve(__dirname, '../tipUpgrade.html'), to:path.resolve(__dirname, '../dist/tipUpgrade.html')}
]),
new ExtractTextPlugin({
filename: "[name]-[id].[hash:8].bundle.css",
allChunks: true
}),
//new webpack.optimize.ModuleConcatenationPlugin(),
new CSSSplitWebpackPlugin({
size: 4000,
filename: '[name]-[part].[ext]'
}),
// new CleanWebpackPlugin(['dist'], {
// root: path.resolve(__dirname,'../'),//根目录
// verbose: true,
// dry: false
// })
]
};
console.log(path.resolve(__dirname,'../publicConfig'))
\ No newline at end of file
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const webpack = require('webpack');
const path = require('path');
module.exports = merge(common, {
devtool: 'source-map',
devServer: {
hot: true,
historyApiFallback: true,
overlay: true,
open: false,
host: "0.0.0.0",
port: 9000,
proxy: {
'/business/service/*': {
//target: 'http://197.1.4.163:8888',
// target: 'http://197.1.4.195:8888',
// target: 'http://197.1.4.163:18080/ft-backend',
// target: 'http://197.1.4.195:18080/ft-backend',
// target: 'http://22.5.65.161:30001',
// target: 'http://22.6.107.179:8090',
target:'http://127.0.0.1:8080/',
changeOrigin: true,
// pathRewrite: {
// '^/forfeit': '/'
// }
}
},
},
plugins: [
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('development')
}),
]
});
console.log("process.env.NODE_ENV 的值是(webpack.dev.js):" + process.env.NODE_ENV)
const merge = require('webpack-merge');
const common = require('./webpack.common');
const UglifyJSWebpackPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const path = require('path');
module.exports = merge(common,{
plugins : [
new CleanWebpackPlugin(['dist'], {
root: path.resolve(__dirname,'../'),//根目录
verbose: true,
dry: false
}),
new UglifyJSWebpackPlugin(),
new OptimizeCssAssetsPlugin({
cssProcessor: require('cssnano')({reduceIdents:false}),
cssProcessorOptions: {
discardComments: {
removeAll: true
}
},
canPrint: true
}),
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
}),
]
});
console.log("process.env.NODE_ENV 的值是(webpack.product.js):"+ process.env.NODE_ENV)
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment