Compare commits

..

1 Commits

Author SHA1 Message Date
caishi ea58ae62bb 易修:批量删除和批量修改issue状态要更新数量 2021-06-22 10:21:31 +08:00
160 changed files with 3432 additions and 10035 deletions

View File

@ -1,20 +1,294 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="色值修改">
<change beforePath="$PROJECT_DIR$/src/forge/Branch/branch.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Branch/branch.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Component/Component.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Component/Component.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Main/Index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Main/Index.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Main/list.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Main/list.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Main/sub/sub.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Main/sub/sub.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Wiki/Index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Wiki/Index.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Wiki/components/Login/index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Wiki/components/Login/index.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Wiki/components/ModalFun/index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Wiki/components/ModalFun/index.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/css/index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/css/index.css" afterDir="false" />
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/build/LICENSE" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/README.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/asset-manifest.json" beforeDir="false" afterPath="$PROJECT_DIR$/build/asset-manifest.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/build/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build/service-worker.js" beforeDir="false" afterPath="$PROJECT_DIR$/build/service-worker.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/0.b4e2ef10.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/1.68949f00.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/10.1be71b42.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/100.41f2a409.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/101.8c9ebcb9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/102.ae5e7930.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/103.71e1260c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/104.6010b0d8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/105.d97473e3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/106.a18d9295.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/107.e4fa8da8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/108.cb5fa18c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/109.728021f4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/11.1e6e3f2f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/110.4d60f060.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/111.00847641.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/112.dff32e36.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/113.9321d650.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/114.ab44c57c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/115.16bc2b0d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/116.acb34db4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/117.c12032ae.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/118.06ac0c97.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/119.09fe7ab0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/12.c388554b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/120.712692c0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/121.5542a234.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/122.5434414a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/123.56b5aa50.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/124.4fa3c025.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/125.e90a0e54.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/126.6ac902e8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/127.382109ca.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/128.f5cab6ce.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/129.a97defb5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/13.5f9dd754.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/130.dc6cfef3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/131.e36c51f6.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/132.e86e6598.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/133.cd5b0e41.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/134.a45157f4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/135.219cca2d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/136.792455ab.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/137.d98f1f26.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/138.537d528f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/139.f968f8da.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/14.ae36f994.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/140.d2937c5d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/141.41414563.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/142.085bcaac.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/143.7c7bdefd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/144.2734eeac.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/145.0567a7a7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/146.6f118df0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/147.8ad6802f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/148.1509b466.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/149.5a32ad42.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/15.63726bf5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/150.67b85412.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/151.80c1ff31.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/152.a8ce322f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/153.eb7d58a7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/154.4378c4dc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/155.fd685811.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/156.2b59a7a3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/157.2d1b2b40.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/158.809809fb.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/159.6b94727b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/16.cd292edc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/160.5c01b4fe.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/161.2e3c0cf9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/162.87f4e888.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/163.0a540ffa.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/164.b22433aa.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/165.2670f91b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/166.ba688344.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/167.c636b766.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/168.96ee0643.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/169.59c6e595.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/17.9b37107f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/170.a0e40916.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/171.c5e14617.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/172.aa2c6247.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/173.f234f2ec.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/174.23eb263b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/175.978237cd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/176.6a70c7ca.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/177.babfb8a0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/178.ca78bfb7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/179.d209043e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/18.59166b96.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/180.34e55d7e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/181.dd0e9427.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/182.c133a270.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/183.f43e4007.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/184.3abba332.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/185.c61d56af.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/186.5ca9f085.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/187.99889df3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/188.9a0c959d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/189.98f6f431.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/19.e9122038.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/190.a972b289.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/191.91c8d4dd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/192.09b656bb.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/193.2db797e4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/194.570ec7dc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/195.8bafb8cc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/196.ebf790e4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/197.e98bbe5e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/198.59eec2cd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/199.f7a6cf5d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/2.2225a575.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/20.ea1b83ca.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/200.64c98b62.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/201.4dcc10b4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/202.4e8c6091.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/203.d93d18f4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/204.0919cf31.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/205.1d636166.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/206.5c119f09.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/207.147ba6db.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/208.25081b68.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/209.784c19f9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/21.66ea1441.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/210.ebc5386b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/211.ca304f55.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/212.b5fc6346.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/213.9e5a8f54.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/214.471a7c4b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/215.cf8d392b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/216.8ce08d4e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/217.03e5cde4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/218.c3b4a63d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/219.df96a008.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/22.69d33500.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/220.83a4b3b7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/221.0e7c7b15.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/222.ae23590f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/223.6e1a4ddc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/224.66c696e0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/225.86f6de74.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/226.334eacdf.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/227.fded1c54.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/228.081121a3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/229.fbecdb8f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/23.f3d3a190.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/230.54214923.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/231.78c978ac.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/232.65715f0f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/233.892f3048.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/234.9aa182e7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/235.d81ddb83.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/236.69cf4cf6.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/237.71ab4f1f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/238.8572225b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/239.fcae5847.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/24.2f9ea72c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/240.e2238e45.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/241.83f72690.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/242.d3cb57dd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/243.99af0ef6.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/244.38603408.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/245.2d35733a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/246.e8bec9f4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/247.c9b742e0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/248.9f3a7f5e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/249.a235bfb8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/25.3253bb14.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/250.89a0ec2e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/251.f94f4795.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/252.614475d7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/253.16b76954.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/254.64d033a9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/255.d2823d40.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/256.1eca44ce.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/257.7dd534ae.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/258.03522780.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/259.073dfc4a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/26.9902b511.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/260.35044602.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/261.617c2c29.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/262.031490eb.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/263.0713aea5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/264.72a7fa9b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/265.8136f3c3.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/266.5c84b920.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/267.56ebb248.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/268.21a4574f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/269.28226efe.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/27.4304d4c5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/270.c5d4fa4b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/271.78c89e20.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/272.c46f7455.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/273.aa76ad67.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/274.42a38d5c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/275.eab35d6d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/276.ba152567.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/277.8ad1fd18.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/278.82ce41b4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/279.92f86639.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/28.3836fc1f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/280.d787fd18.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/281.8bdfd9de.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/282.2f9ff948.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/283.40367bdd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/29.b7147766.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/3.31787e19.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/30.a574d03f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/31.df24e028.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/32.c4d7bbea.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/33.a4469f83.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/34.a525a713.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/35.991c6b3a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/36.ca30f366.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/37.b67239f9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/38.d6220035.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/39.8bbe7e4b.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/4.3c8412d9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/42.b16613be.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/46.41f6ac73.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/47.b0fb496a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/48.0f00b572.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/49.8b9d29ee.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/5.2b2c8a26.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/50.b42a5752.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/51.37761187.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/52.550fc073.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/53.86605c6d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/54.e91a419f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/55.c6646d9f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/56.b701b846.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/57.7796d2c0.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/58.865fc1eb.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/59.b58d70cd.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/6.625bd454.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/60.f785cede.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/61.f63d91e7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/62.b83b97dc.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/63.5d9d4d43.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/64.d1514b70.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/65.67458d6c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/66.ab5a4b68.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/67.24cbd43e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/68.26be36d2.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/69.d34e03a8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/7.45c119ae.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/70.71f3f5e9.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/71.3e0e22a5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/72.58d589d7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/73.38beeb0e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/74.f0ac65fe.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/75.9f0bfe3e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/76.7bf08411.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/77.cc859ed7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/78.1e7b969f.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/79.d68cadb4.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/8.ce3f8347.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/80.3633279d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/81.13af2c38.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/82.dfb68271.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/83.a2cc3c51.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/84.284aff4a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/85.41f3159a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/86.4e688009.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/87.90d54fab.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/88.03076a1d.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/89.0d2f2ee8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/9.562a7877.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/90.3b84e0a5.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/91.ad92675e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/92.6abb40b8.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/93.e5666aea.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/94.149f3765.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/95.36a069b7.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/96.c09dc12e.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/97.8ff3af84.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/98.cd3f899c.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/99.07307f5a.chunk.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/build/static/js/main.dda56577.js" beforeDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@ -251,7 +525,6 @@
<option name="width" value="1440" />
<option name="height" value="900" />
</component>
<component name="ProjectId" id="1xHteQnKsYu4IEUm8tEsYIEEC5E" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
@ -277,30 +550,18 @@
<pane id="Scope" />
</panes>
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/src/forge/Main" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.path.for.package.tslint" value="project" />
<property name="node.js.selected.package.eslint" value="E:\file\forgeplus-react\node_modules\eslint" />
<property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="ts.external.directory.path" value="$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="E:\file\forgeplus-react\src\forge\Main" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$" />
<recent name="$PROJECT_DIR$/src/modules/user/usersInfo" />
@ -315,7 +576,18 @@
</list>
</option>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" />
<component name="SvnConfiguration">
<configuration />
@ -364,8 +636,6 @@
<workItem from="1587870344748" duration="138000" />
<workItem from="1587882941476" duration="4365000" />
<workItem from="1587891008299" duration="390000" />
<workItem from="1630023942152" duration="459000" />
<workItem from="1630024424307" duration="17223000" />
</task>
<servers />
</component>
@ -398,7 +668,7 @@
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
<option name="version" value="1" />
</component>
<component name="Vcs.Log.History.Properties">
<option name="COLUMN_ORDER">
@ -415,7 +685,22 @@
<map>
<entry key="MAIN">
<value>
<State />
<State>
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
<option name="COLUMN_ORDER">
<list>
<option value="0" />
<option value="1" />
<option value="2" />
<option value="3" />
</list>
</option>
</State>
</value>
</entry>
</map>
@ -434,19 +719,6 @@
</entry>
</map>
</option>
<option name="oldMeFiltersMigrated" value="true" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="javascript">
<url>file://$PROJECT_DIR$/src/forge/Main/CoderDepot.jsx</url>
<line>409</line>
<properties lambdaOrdinal="-1" />
<option name="timeStamp" value="1" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/usersInfo.css">

254
package-lock.json generated
View File

@ -1273,7 +1273,7 @@
},
"babel-cli": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-cli/download/babel-cli-6.26.0.tgz",
"integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
"dev": true,
"requires": {
@ -1296,7 +1296,7 @@
"dependencies": {
"chokidar": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
"resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-1.7.0.tgz?cache=0&sync_timestamp=1602585438968&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-1.7.0.tgz",
"integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
"dev": true,
"optional": true,
@ -1314,7 +1314,7 @@
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
@ -1413,7 +1413,7 @@
},
"babel-helper-bindify-decorators": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-helper-bindify-decorators/download/babel-helper-bindify-decorators-6.24.1.tgz",
"integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
"dev": true,
"requires": {
@ -1476,7 +1476,7 @@
},
"babel-helper-explode-class": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-helper-explode-class/download/babel-helper-explode-class-6.24.1.tgz",
"integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
"dev": true,
"requires": {
@ -1676,7 +1676,7 @@
},
"babel-plugin-syntax-async-generators": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-async-generators/download/babel-plugin-syntax-async-generators-6.13.0.tgz",
"integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
"dev": true
},
@ -1687,7 +1687,7 @@
},
"babel-plugin-syntax-decorators": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-decorators/download/babel-plugin-syntax-decorators-6.13.0.tgz",
"integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
"dev": true
},
@ -1723,7 +1723,7 @@
},
"babel-plugin-transform-async-generator-functions": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-plugin-transform-async-generator-functions/download/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
"integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
"dev": true,
"requires": {
@ -1755,7 +1755,7 @@
},
"babel-plugin-transform-decorators": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-plugin-transform-decorators/download/babel-plugin-transform-decorators-6.24.1.tgz",
"integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
"dev": true,
"requires": {
@ -2060,7 +2060,7 @@
},
"babel-plugin-transform-runtime": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz",
"integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
"requires": {
"babel-runtime": "^6.22.0"
@ -2077,7 +2077,7 @@
},
"babel-polyfill": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-polyfill/download/babel-polyfill-6.26.0.tgz",
"integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"requires": {
"babel-runtime": "^6.26.0",
@ -2087,7 +2087,7 @@
"dependencies": {
"regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.10.5.tgz?cache=0&sync_timestamp=1595456367497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
}
}
@ -2131,7 +2131,7 @@
},
"babel-preset-es2015": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-preset-es2015/download/babel-preset-es2015-6.24.1.tgz",
"integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
"dev": true,
"requires": {
@ -2179,7 +2179,7 @@
},
"babel-preset-react": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-preset-react/download/babel-preset-react-6.24.1.tgz",
"integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
"requires": {
"babel-plugin-syntax-jsx": "^6.3.13",
@ -2212,7 +2212,7 @@
},
"babel-preset-stage-2": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-preset-stage-2/download/babel-preset-stage-2-6.24.1.tgz",
"integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
"dev": true,
"requires": {
@ -2224,7 +2224,7 @@
},
"babel-preset-stage-3": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
"resolved": "https://registry.npm.taobao.org/babel-preset-stage-3/download/babel-preset-stage-3-6.24.1.tgz",
"integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
"dev": true,
"requires": {
@ -2377,12 +2377,6 @@
}
}
},
"base16": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/base16/download/base16-1.0.0.tgz",
"integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=",
"dev": true
},
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
@ -3507,7 +3501,7 @@
},
"code-prettify": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/code-prettify/-/code-prettify-0.1.0.tgz",
"resolved": "https://registry.npm.taobao.org/code-prettify/download/code-prettify-0.1.0.tgz",
"integrity": "sha1-RocMyMGlDQm61TmzOpg9vUqjSx4="
},
"codemirror": {
@ -3875,23 +3869,6 @@
"warning": "^4.0.3"
}
},
"cross-fetch": {
"version": "3.1.4",
"resolved": "https://registry.nlark.com/cross-fetch/download/cross-fetch-3.1.4.tgz",
"integrity": "sha1-lyPzo6JHv4uJA586OAqSROj6Lzk=",
"dev": true,
"requires": {
"node-fetch": "2.6.1"
},
"dependencies": {
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.nlark.com/node-fetch/download/node-fetch-2.6.1.tgz?cache=0&sync_timestamp=1626684741221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.1.tgz",
"integrity": "sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI=",
"dev": true
}
}
},
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
@ -4885,7 +4862,7 @@
},
"dom-closest": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz",
"resolved": "https://registry.npm.taobao.org/dom-closest/download/dom-closest-0.2.0.tgz",
"integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=",
"requires": {
"dom-matches": ">=1.0.1"
@ -4929,7 +4906,7 @@
},
"dom-matches": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz",
"resolved": "https://registry.npm.taobao.org/dom-matches/download/dom-matches-2.0.0.tgz",
"integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw="
},
"dom-scroll-into-view": {
@ -5187,7 +5164,7 @@
},
"enquire.js": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz",
"resolved": "https://registry.npm.taobao.org/enquire.js/download/enquire.js-2.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquire.js%2Fdownload%2Fenquire.js-2.1.6.tgz",
"integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ="
},
"entities": {
@ -5706,7 +5683,7 @@
},
"eventlistener": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/eventlistener/-/eventlistener-0.0.1.tgz",
"resolved": "https://registry.npm.taobao.org/eventlistener/download/eventlistener-0.0.1.tgz",
"integrity": "sha1-7Suqu4UiJ68rz4iRUscsY8pTLrg="
},
"events": {
@ -6237,41 +6214,6 @@
"bser": "2.1.1"
}
},
"fbemitter": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/fbemitter/download/fbemitter-3.0.0.tgz",
"integrity": "sha1-ALKhr1QRJUqrQWzXX55iib7kv/M=",
"dev": true,
"requires": {
"fbjs": "^3.0.0"
},
"dependencies": {
"fbjs": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/fbjs/download/fbjs-3.0.0.tgz?cache=0&sync_timestamp=1602048313843&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffbjs%2Fdownload%2Ffbjs-3.0.0.tgz",
"integrity": "sha1-CQcGf7P1enj0XZXx6s/8rNYjwWU=",
"dev": true,
"requires": {
"cross-fetch": "^3.0.4",
"fbjs-css-vars": "^1.0.0",
"loose-envify": "^1.0.0",
"object-assign": "^4.1.0",
"promise": "^7.1.1",
"setimmediate": "^1.0.5",
"ua-parser-js": "^0.7.18"
}
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
"dev": true,
"requires": {
"asap": "~2.0.3"
}
}
}
},
"fbjs": {
"version": "0.8.17",
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
@ -6301,12 +6243,6 @@
}
}
},
"fbjs-css-vars": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz",
"integrity": "sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg=",
"dev": true
},
"fecha": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
@ -6751,42 +6687,6 @@
"readable-stream": "^2.3.6"
}
},
"flux": {
"version": "4.0.1",
"resolved": "https://registry.npm.taobao.org/flux/download/flux-4.0.1.tgz",
"integrity": "sha1-eENQKwKEHUqqU0rws3MDSh917lw=",
"dev": true,
"requires": {
"fbemitter": "^3.0.0",
"fbjs": "^3.0.0"
},
"dependencies": {
"fbjs": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/fbjs/download/fbjs-3.0.0.tgz?cache=0&sync_timestamp=1602048313843&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffbjs%2Fdownload%2Ffbjs-3.0.0.tgz",
"integrity": "sha1-CQcGf7P1enj0XZXx6s/8rNYjwWU=",
"dev": true,
"requires": {
"cross-fetch": "^3.0.4",
"fbjs-css-vars": "^1.0.0",
"loose-envify": "^1.0.0",
"object-assign": "^4.1.0",
"promise": "^7.1.1",
"setimmediate": "^1.0.5",
"ua-parser-js": "^0.7.18"
}
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
"dev": true,
"requires": {
"asap": "~2.0.3"
}
}
}
},
"flv.js": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/flv.js/-/flv.js-1.5.0.tgz",
@ -8040,7 +7940,7 @@
},
"hammerjs": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
"resolved": "https://registry.npm.taobao.org/hammerjs/download/hammerjs-2.0.8.tgz",
"integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
},
"handle-thing": {
@ -8881,7 +8781,7 @@
},
"immutable": {
"version": "3.7.6",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz",
"resolved": "https://registry.npm.taobao.org/immutable/download/immutable-3.7.6.tgz",
"integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks="
},
"import-fresh": {
@ -10430,12 +10330,6 @@
"resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
"integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU="
},
"lodash.curry": {
"version": "4.1.1",
"resolved": "https://registry.npm.taobao.org/lodash.curry/download/lodash.curry-4.1.1.tgz",
"integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=",
"dev": true
},
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@ -10446,12 +10340,6 @@
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw="
},
"lodash.flow": {
"version": "3.5.0",
"resolved": "https://registry.npm.taobao.org/lodash.flow/download/lodash.flow-3.5.0.tgz",
"integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=",
"dev": true
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
@ -10486,7 +10374,7 @@
},
"lodash.throttle": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
"resolved": "https://registry.npm.taobao.org/lodash.throttle/download/lodash.throttle-4.1.1.tgz",
"integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
},
"lodash.uniq": {
@ -11673,7 +11561,7 @@
},
"output-file-sync": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
"resolved": "https://registry.npm.taobao.org/output-file-sync/download/output-file-sync-1.1.2.tgz",
"integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
"dev": true,
"requires": {
@ -14082,12 +13970,6 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"pure-color": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/pure-color/download/pure-color-1.3.0.tgz",
"integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=",
"dev": true
},
"purgecss": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.1.2.tgz",
@ -14859,18 +14741,6 @@
"prop-types": "^15.6.2"
}
},
"react-base16-styling": {
"version": "0.6.0",
"resolved": "https://registry.npm.taobao.org/react-base16-styling/download/react-base16-styling-0.6.0.tgz",
"integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=",
"dev": true,
"requires": {
"base16": "^1.0.0",
"lodash.curry": "^4.0.1",
"lodash.flow": "^3.3.0",
"pure-color": "^1.2.0"
}
},
"react-beautiful-dnd": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-10.1.1.tgz",
@ -15236,18 +15106,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-json-view": {
"version": "1.21.3",
"resolved": "https://registry.npm.taobao.org/react-json-view/download/react-json-view-1.21.3.tgz",
"integrity": "sha1-8YQgnujxvzdPsMQbCBPP9UVJxHU=",
"dev": true,
"requires": {
"flux": "^4.0.1",
"react-base16-styling": "^0.6.0",
"react-lifecycles-compat": "^3.0.4",
"react-textarea-autosize": "^8.3.2"
}
},
"react-jss": {
"version": "8.6.1",
"resolved": "https://registry.npmjs.org/react-jss/-/react-jss-8.6.1.tgz",
@ -15436,34 +15294,6 @@
"prop-types": "^15.5.4"
}
},
"react-textarea-autosize": {
"version": "8.3.3",
"resolved": "https://registry.nlark.com/react-textarea-autosize/download/react-textarea-autosize-8.3.3.tgz?cache=0&sync_timestamp=1622628433420&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-textarea-autosize%2Fdownload%2Freact-textarea-autosize-8.3.3.tgz",
"integrity": "sha1-9wkTlFNp2kU/1VTBaPa6rNH6BNg=",
"dev": true,
"requires": {
"@babel/runtime": "^7.10.2",
"use-composed-ref": "^1.0.0",
"use-latest": "^1.0.0"
},
"dependencies": {
"@babel/runtime": {
"version": "7.14.8",
"resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.8.tgz",
"integrity": "sha1-cRmlb0IQGIUmlCkLn5FICXORtEY=",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I=",
"dev": true
}
}
},
"react-transition-group": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
@ -18559,12 +18389,6 @@
"integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
"dev": true
},
"ts-essentials": {
"version": "2.0.12",
"resolved": "https://registry.nlark.com/ts-essentials/download/ts-essentials-2.0.12.tgz",
"integrity": "sha1-yTA/PXT3X6dSjD1JuA4ImrCdh0U=",
"dev": true
},
"tslib": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
@ -19074,33 +18898,9 @@
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
},
"use-composed-ref": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/use-composed-ref/download/use-composed-ref-1.1.0.tgz",
"integrity": "sha1-kiDk6UqXt7AtfSfq6rCzcDRDi7w=",
"dev": true,
"requires": {
"ts-essentials": "^2.0.3"
}
},
"use-isomorphic-layout-effect": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/use-isomorphic-layout-effect/download/use-isomorphic-layout-effect-1.1.1.tgz",
"integrity": "sha1-e7ZYkXDNKYehUgQvkIT57/t1wiU=",
"dev": true
},
"use-latest": {
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/use-latest/download/use-latest-1.2.0.tgz",
"integrity": "sha1-pE9lcrgojgly7EEb3QhAraNm8jI=",
"dev": true,
"requires": {
"use-isomorphic-layout-effect": "^1.0.0"
}
},
"user-home": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
"resolved": "https://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz",
"integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
"dev": true
},
@ -19157,7 +18957,7 @@
},
"v8flags": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
"resolved": "https://registry.npm.taobao.org/v8flags/download/v8flags-2.1.1.tgz?cache=0&sync_timestamp=1590964281452&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8flags%2Fdownload%2Fv8flags-2.1.1.tgz",
"integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
"dev": true,
"requires": {

View File

@ -193,7 +193,6 @@
"babel-core": "^6.26.0",
"babel-plugin-import": "^1.13.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
@ -204,7 +203,6 @@
"node-sass": "^4.12.0",
"optimize-css-assets-webpack-plugin": "^5.0.3",
"purgecss": "^2.1.2",
"react-json-view": "^1.21.3",
"reqwest": "^2.0.5",
"resize-observer-polyfill": "^1.5.1",
"terser-webpack-plugin": "^2.3.5",

View File

@ -114,6 +114,14 @@ a:visited {
color: #898989;
}
a:hover {
color: #FF7500;
}
a:hover.fa {
color: #FF7500;
}
input,
textarea,
select {

View File

@ -97,6 +97,10 @@ a:visited {
color: #05101a;
}
a:hover {
color: #459be5;
}
ol,
ul,
li {

View File

@ -1363,9 +1363,9 @@ a:visited {
color: #05101a;
}
/*a:hover {*/
/* color: #2A61FF!important;*/
/*}*/
a:hover {
color: #459be5;
}
ol,
ul,
@ -1473,7 +1473,7 @@ a.edu-txt-w80,
/*隐藏*/
.none {
display: none!important;
display: none
}
.block {
@ -1609,7 +1609,7 @@ a.decoration {
}
.mt6 {
margin-top: 3px;
margin-top: 6px;
}
.mt7 {
@ -1753,7 +1753,7 @@ a.decoration {
}
.mb15 {
margin-bottom: 15px!important;
margin-bottom: 15px;
}
.mb16 {
@ -2424,19 +2424,13 @@ input::-ms-clear {
.color-grey-c {
color: #ccc !important;
}
a.hoverLine:hover{
text-decoration: underline;
}
.color-grey-cd {
color: #cdcdcd !important;
}
.color-grey-d {
color: #ddd;
}
.color-grey-9 {
color: #333333 !important;
color: #999999 !important;
}
.color-grey-98 {
@ -2471,24 +2465,33 @@ a.hoverLine:hover{
a.color-grey-name:hover,
a.color-dark:hover,
a.color-grey-6:hover,
a.color-grey-3:hover,a.color-ooo span:hover{
color: #466AFF !important;
a.color-grey-3:hover {
color: #4cacff !important;
}
a.color-grey-9:hover,
a.color-grey-8:hover,
a.color-grey-c:hover {
color: #111C24 !important;
}
/*蓝色*/
.color-blue, .color-blue-file{
.color-blue {
color: #4CACFF !important;
}
.color-blue {
color: #2A61FF !important;
}
/* 绿色 */
.color-green-file{
color: #28BD6C;
}
/*主*/
.color-blue_4C {
color: #4CACFF !important;
}
a.color-blue:hover,
a.color-blue_4C:hover {
color: #459BE6 !important;
}
/*橙色*/
.color-orange {
@ -3406,7 +3409,7 @@ a.user_bluebg_btn {
}
.cdefault {
cursor: default!important;
cursor: default
}
@ -3905,17 +3908,6 @@ html>body #ajax-indicator {
max-height: 340px;
}/*头部导航条样式---2018-03-19--by-cs*/
.privateTag{
display: block;
padding:0px 6px;
border-radius: 12px;
border:1px solid #2FC25B;
height: 18px;
line-height: 18px;
font-size: 12px;
margin-left: 10px;
color: #2FC25B;
}
.head-nav {
text-align: center;
height: 70px;
@ -6682,10 +6674,4 @@ p{
right: 0px;
top:4px;
color: #999;
}
.ant-input, .ant-input .ant-input-suffix{
background-color: #fff!important;
}
.has-error .ant-input{
background-color: #FEF1F0!important;
}

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 2340181 */
src: url('iconfont.woff2?t=1629875571487') format('woff2'),
url('iconfont.woff?t=1629875571487') format('woff'),
url('iconfont.ttf?t=1629875571487') format('truetype');
src: url('iconfont.woff2?t=1622517296245') format('woff2'),
url('iconfont.woff?t=1622517296245') format('woff'),
url('iconfont.ttf?t=1622517296245') format('truetype');
}
.iconfont {
@ -13,334 +13,6 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-xiangmugonggao:before {
content: "\e8c2";
}
.icon-chengguo:before {
content: "\e8c3";
}
.icon-chengjiaogonggao:before {
content: "\e8c0";
}
.icon-jishuzichan:before {
content: "\e8c1";
}
.icon-feibiaogonggao:before {
content: "\e8bc";
}
.icon-zhongbiaogonggao:before {
content: "\e8bd";
}
.icon-gengzhenggonggao:before {
content: "\e8be";
}
.icon-zhaobiaogonggao:before {
content: "\e8bf";
}
.icon-wenjian6:before {
content: "\e8ba";
}
.icon-wenjianjia4:before {
content: "\e8bb";
}
.icon-quxiaoguanzhu:before {
content: "\e89a";
}
.icon-dianzan_icon:before {
content: "\e8a2";
}
.icon-wenjian5:before {
content: "\e896";
}
.icon-wenjianjia3:before {
content: "\e8a9";
}
.icon-fuzhiicon:before {
content: "\e886";
}
.icon-zhuye-fill:before {
content: "\e876";
}
.icon-daimakuicon:before {
content: "\e884";
}
.icon-xinjian2:before {
content: "\e8b0";
}
.icon-xieyiicon:before {
content: "\e870";
}
.icon-neicunicon:before {
content: "\e891";
}
.icon-zishuwenjian_icon:before {
content: "\e8a6";
}
.icon-biaoqianicon:before {
content: "\e882";
}
.icon-a-bianji:before {
content: "\e883";
}
.icon-cangkushezhiicon:before {
content: "\e885";
}
.icon-lianjieicon:before {
content: "\e887";
}
.icon-hebingqingqiuicon:before {
content: "\e888";
}
.icon-lichengbeiicon:before {
content: "\e889";
}
.icon-gongzuoliuicon:before {
content: "\e88a";
}
.icon-dongtaiicon:before {
content: "\e88b";
}
.icon-morendianzan_icon:before {
content: "\e88e";
}
.icon-muluicon:before {
content: "\e894";
}
.icon-a-shezhi:before {
content: "\e899";
}
.icon-tijiaoicon:before {
content: "\e89e";
}
.icon-morenguanzhu_ICON:before {
content: "\e89f";
}
.icon-xialaanniu1:before {
content: "\e8a4";
}
.icon-zuohuaicon:before {
content: "\e8b5";
}
.icon-master_icon:before {
content: "\e8b6";
}
.icon-morenfuke_icon:before {
content: "\e8b7";
}
.icon-a-wikiicon:before {
content: "\e8b8";
}
.icon-yixiuicon:before {
content: "\e8b9";
}
.icon-suofang:before {
content: "\e87f";
}
.icon-fangdaicon:before {
content: "\e881";
}
.icon-sousuo_icon1:before {
content: "\e873";
}
.icon-huanying_icon:before {
content: "\e878";
}
.icon-wenjianjia2:before {
content: "\e879";
}
.icon-shanchuicon1:before {
content: "\e87a";
}
.icon-qingqiuicon:before {
content: "\e871";
}
.icon-xiangyingicon:before {
content: "\e87c";
}
.icon-duoxuanxuanzhong:before {
content: "\e88f";
}
.icon-cuowuicon:before {
content: "\e890";
}
.icon-chenggongicon:before {
content: "\e892";
}
.icon-weixuanzhongxiangyingicon:before {
content: "\e893";
}
.icon-bitianicon:before {
content: "\e895";
}
.icon-weixuanzhongxiangmubiaoqianicon:before {
content: "\e897";
}
.icon-liebiaoicon:before {
content: "\e898";
}
.icon-weixuanzhongqingqiuicon:before {
content: "\e89b";
}
.icon-xiezuozheguanliicon:before {
content: "\e8a1";
}
.icon-xuanzhongfenzhiicon:before {
content: "\e8a3";
}
.icon-xuanzhongjibenshezhiicon:before {
content: "\e8a5";
}
.icon-xuanzhongxiangmubiaoqianicon:before {
content: "\e8aa";
}
.icon-a-xuanzhongwebhookicon:before {
content: "\e8af";
}
.icon-shanchu_tc_icon:before {
content: "\e88c";
}
.icon-wiki_icon:before {
content: "\e88d";
}
.icon-daorumoban_icon:before {
content: "\e86f";
}
.icon-cuowu:before {
content: "\e872";
}
.icon-gengduo_icon:before {
content: "\e874";
}
.icon-fucengguanbi_icon:before {
content: "\e875";
}
.icon-shanchuicon:before {
content: "\e877";
}
.icon-sousuo_shanchuicon:before {
content: "\e87b";
}
.icon-sousuo_icon:before {
content: "\e87d";
}
.icon-wendangyulan_icon:before {
content: "\e87e";
}
.icon-xialaanniu:before {
content: "\e880";
}
.icon-erciqueren_icon:before {
content: "\e867";
}
.icon-xuanzhongssh_icon:before {
content: "\e868";
}
.icon-weixuanzhonganquanshezhi_icon:before {
content: "\e869";
}
.icon-weixuanzhongssh_icon:before {
content: "\e86a";
}
.icon-xuanzhonganquanshezhi_icon:before {
content: "\e86b";
}
.icon-shanchu_icon:before {
content: "\e86c";
}
.icon-liebiaossh_icon:before {
content: "\e86e";
}
.icon-file-submodule:before {
content: "\e866";
}
.icon-nv1:before {
content: "\e864";
}
.icon-nan1:before {
content: "\e865";
}
.icon-youxiang:before {
content: "\e8b2";
}

BIN
public/css/iconfont.eot Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -5,580 +5,6 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "23791639",
"name": "项目公告",
"font_class": "xiangmugonggao",
"unicode": "e8c2",
"unicode_decimal": 59586
},
{
"icon_id": "23791640",
"name": "成果",
"font_class": "chengguo",
"unicode": "e8c3",
"unicode_decimal": 59587
},
{
"icon_id": "23791410",
"name": "成交公告",
"font_class": "chengjiaogonggao",
"unicode": "e8c0",
"unicode_decimal": 59584
},
{
"icon_id": "23791411",
"name": "技术资产",
"font_class": "jishuzichan",
"unicode": "e8c1",
"unicode_decimal": 59585
},
{
"icon_id": "23790928",
"name": "废标公告",
"font_class": "feibiaogonggao",
"unicode": "e8bc",
"unicode_decimal": 59580
},
{
"icon_id": "23790929",
"name": "中标公告",
"font_class": "zhongbiaogonggao",
"unicode": "e8bd",
"unicode_decimal": 59581
},
{
"icon_id": "23790930",
"name": "更正公告",
"font_class": "gengzhenggonggao",
"unicode": "e8be",
"unicode_decimal": 59582
},
{
"icon_id": "23790931",
"name": "招标公告",
"font_class": "zhaobiaogonggao",
"unicode": "e8bf",
"unicode_decimal": 59583
},
{
"icon_id": "23732532",
"name": "文件",
"font_class": "wenjian6",
"unicode": "e8ba",
"unicode_decimal": 59578
},
{
"icon_id": "23732533",
"name": "文件夹",
"font_class": "wenjianjia4",
"unicode": "e8bb",
"unicode_decimal": 59579
},
{
"icon_id": "23642443",
"name": "取消关注",
"font_class": "quxiaoguanzhu",
"unicode": "e89a",
"unicode_decimal": 59546
},
{
"icon_id": "23642444",
"name": "点赞_icon",
"font_class": "dianzan_icon",
"unicode": "e8a2",
"unicode_decimal": 59554
},
{
"icon_id": "23639530",
"name": "文件",
"font_class": "wenjian5",
"unicode": "e896",
"unicode_decimal": 59542
},
{
"icon_id": "23639533",
"name": "文件夹",
"font_class": "wenjianjia3",
"unicode": "e8a9",
"unicode_decimal": 59561
},
{
"icon_id": "23639440",
"name": "复制icon",
"font_class": "fuzhiicon",
"unicode": "e886",
"unicode_decimal": 59526
},
{
"icon_id": "23639422",
"name": "主页-fill",
"font_class": "zhuye-fill",
"unicode": "e876",
"unicode_decimal": 59510
},
{
"icon_id": "23639423",
"name": "代码库icon",
"font_class": "daimakuicon",
"unicode": "e884",
"unicode_decimal": 59524
},
{
"icon_id": "23572260",
"name": "新建",
"font_class": "xinjian2",
"unicode": "e8b0",
"unicode_decimal": 59568
},
{
"icon_id": "23567674",
"name": "协议icon",
"font_class": "xieyiicon",
"unicode": "e870",
"unicode_decimal": 59504
},
{
"icon_id": "23567675",
"name": "内存icon",
"font_class": "neicunicon",
"unicode": "e891",
"unicode_decimal": 59537
},
{
"icon_id": "23567676",
"name": "自述文件_icon",
"font_class": "zishuwenjian_icon",
"unicode": "e8a6",
"unicode_decimal": 59558
},
{
"icon_id": "23472253",
"name": "标签icon",
"font_class": "biaoqianicon",
"unicode": "e882",
"unicode_decimal": 59522
},
{
"icon_id": "23472254",
"name": "编 辑",
"font_class": "a-bianji",
"unicode": "e883",
"unicode_decimal": 59523
},
{
"icon_id": "23472256",
"name": "仓库设置icon",
"font_class": "cangkushezhiicon",
"unicode": "e885",
"unicode_decimal": 59525
},
{
"icon_id": "23472258",
"name": "链接icon",
"font_class": "lianjieicon",
"unicode": "e887",
"unicode_decimal": 59527
},
{
"icon_id": "23472259",
"name": "合并请求icon",
"font_class": "hebingqingqiuicon",
"unicode": "e888",
"unicode_decimal": 59528
},
{
"icon_id": "23472260",
"name": "里程碑icon",
"font_class": "lichengbeiicon",
"unicode": "e889",
"unicode_decimal": 59529
},
{
"icon_id": "23472261",
"name": "工作流icon",
"font_class": "gongzuoliuicon",
"unicode": "e88a",
"unicode_decimal": 59530
},
{
"icon_id": "23472262",
"name": "动态icon",
"font_class": "dongtaiicon",
"unicode": "e88b",
"unicode_decimal": 59531
},
{
"icon_id": "23472263",
"name": "默认点赞_icon",
"font_class": "morendianzan_icon",
"unicode": "e88e",
"unicode_decimal": 59534
},
{
"icon_id": "23472265",
"name": "目录icon",
"font_class": "muluicon",
"unicode": "e894",
"unicode_decimal": 59540
},
{
"icon_id": "23472267",
"name": "设 置",
"font_class": "a-shezhi",
"unicode": "e899",
"unicode_decimal": 59545
},
{
"icon_id": "23472269",
"name": "提交icon",
"font_class": "tijiaoicon",
"unicode": "e89e",
"unicode_decimal": 59550
},
{
"icon_id": "23472270",
"name": "默认关注_ICON",
"font_class": "morenguanzhu_ICON",
"unicode": "e89f",
"unicode_decimal": 59551
},
{
"icon_id": "23472272",
"name": "下拉按钮",
"font_class": "xialaanniu1",
"unicode": "e8a4",
"unicode_decimal": 59556
},
{
"icon_id": "23472276",
"name": "左滑icon",
"font_class": "zuohuaicon",
"unicode": "e8b5",
"unicode_decimal": 59573
},
{
"icon_id": "23472277",
"name": "master_icon",
"font_class": "master_icon",
"unicode": "e8b6",
"unicode_decimal": 59574
},
{
"icon_id": "23472278",
"name": "默认复刻_icon",
"font_class": "morenfuke_icon",
"unicode": "e8b7",
"unicode_decimal": 59575
},
{
"icon_id": "23472279",
"name": "wiki icon",
"font_class": "a-wikiicon",
"unicode": "e8b8",
"unicode_decimal": 59576
},
{
"icon_id": "23472280",
"name": "易修icon",
"font_class": "yixiuicon",
"unicode": "e8b9",
"unicode_decimal": 59577
},
{
"icon_id": "23436350",
"name": "缩放",
"font_class": "suofang",
"unicode": "e87f",
"unicode_decimal": 59519
},
{
"icon_id": "23436351",
"name": "放大icon",
"font_class": "fangdaicon",
"unicode": "e881",
"unicode_decimal": 59521
},
{
"icon_id": "23384231",
"name": "搜索_icon",
"font_class": "sousuo_icon1",
"unicode": "e873",
"unicode_decimal": 59507
},
{
"icon_id": "23384232",
"name": "欢迎_icon",
"font_class": "huanying_icon",
"unicode": "e878",
"unicode_decimal": 59512
},
{
"icon_id": "23384233",
"name": "文件夹",
"font_class": "wenjianjia2",
"unicode": "e879",
"unicode_decimal": 59513
},
{
"icon_id": "23384234",
"name": "删除icon",
"font_class": "shanchuicon1",
"unicode": "e87a",
"unicode_decimal": 59514
},
{
"icon_id": "23261798",
"name": "请求icon",
"font_class": "qingqiuicon",
"unicode": "e871",
"unicode_decimal": 59505
},
{
"icon_id": "23261799",
"name": "响应icon",
"font_class": "xiangyingicon",
"unicode": "e87c",
"unicode_decimal": 59516
},
{
"icon_id": "23144143",
"name": "多选选中",
"font_class": "duoxuanxuanzhong",
"unicode": "e88f",
"unicode_decimal": 59535
},
{
"icon_id": "23144144",
"name": "错误icon",
"font_class": "cuowuicon",
"unicode": "e890",
"unicode_decimal": 59536
},
{
"icon_id": "23144146",
"name": "成功icon",
"font_class": "chenggongicon",
"unicode": "e892",
"unicode_decimal": 59538
},
{
"icon_id": "23144147",
"name": "未选中响应icon",
"font_class": "weixuanzhongxiangyingicon",
"unicode": "e893",
"unicode_decimal": 59539
},
{
"icon_id": "23144149",
"name": "必填icon",
"font_class": "bitianicon",
"unicode": "e895",
"unicode_decimal": 59541
},
{
"icon_id": "23144151",
"name": "未选中项目标签icon",
"font_class": "weixuanzhongxiangmubiaoqianicon",
"unicode": "e897",
"unicode_decimal": 59543
},
{
"icon_id": "23144152",
"name": "列表icon",
"font_class": "liebiaoicon",
"unicode": "e898",
"unicode_decimal": 59544
},
{
"icon_id": "23144155",
"name": "未选中请求icon",
"font_class": "weixuanzhongqingqiuicon",
"unicode": "e89b",
"unicode_decimal": 59547
},
{
"icon_id": "23144158",
"name": "协作者管理icon",
"font_class": "xiezuozheguanliicon",
"unicode": "e8a1",
"unicode_decimal": 59553
},
{
"icon_id": "23144160",
"name": "选中分支icon",
"font_class": "xuanzhongfenzhiicon",
"unicode": "e8a3",
"unicode_decimal": 59555
},
{
"icon_id": "23144162",
"name": "选中基本设置icon",
"font_class": "xuanzhongjibenshezhiicon",
"unicode": "e8a5",
"unicode_decimal": 59557
},
{
"icon_id": "23144165",
"name": "选中项目标签icon",
"font_class": "xuanzhongxiangmubiaoqianicon",
"unicode": "e8aa",
"unicode_decimal": 59562
},
{
"icon_id": "23144167",
"name": "选中webhook icon",
"font_class": "a-xuanzhongwebhookicon",
"unicode": "e8af",
"unicode_decimal": 59567
},
{
"icon_id": "23046290",
"name": "shanchu_tc_icon",
"font_class": "shanchu_tc_icon",
"unicode": "e88c",
"unicode_decimal": 59532
},
{
"icon_id": "23046293",
"name": "wiki_icon",
"font_class": "wiki_icon",
"unicode": "e88d",
"unicode_decimal": 59533
},
{
"icon_id": "23046244",
"name": "导入模版_icon",
"font_class": "daorumoban_icon",
"unicode": "e86f",
"unicode_decimal": 59503
},
{
"icon_id": "23046252",
"name": "错误",
"font_class": "cuowu",
"unicode": "e872",
"unicode_decimal": 59506
},
{
"icon_id": "23046255",
"name": "更多_icon",
"font_class": "gengduo_icon",
"unicode": "e874",
"unicode_decimal": 59508
},
{
"icon_id": "23046258",
"name": "复层关闭_icon",
"font_class": "fucengguanbi_icon",
"unicode": "e875",
"unicode_decimal": 59509
},
{
"icon_id": "23046268",
"name": "删除icon",
"font_class": "shanchuicon",
"unicode": "e877",
"unicode_decimal": 59511
},
{
"icon_id": "23046273",
"name": "搜索_删除icon",
"font_class": "sousuo_shanchuicon",
"unicode": "e87b",
"unicode_decimal": 59515
},
{
"icon_id": "23046275",
"name": "搜索_icon",
"font_class": "sousuo_icon",
"unicode": "e87d",
"unicode_decimal": 59517
},
{
"icon_id": "23046276",
"name": "文档预览_icon",
"font_class": "wendangyulan_icon",
"unicode": "e87e",
"unicode_decimal": 59518
},
{
"icon_id": "23046278",
"name": "下拉按钮",
"font_class": "xialaanniu",
"unicode": "e880",
"unicode_decimal": 59520
},
{
"icon_id": "22906287",
"name": "二次确认_icon",
"font_class": "erciqueren_icon",
"unicode": "e867",
"unicode_decimal": 59495
},
{
"icon_id": "22906288",
"name": "选中ssh_icon",
"font_class": "xuanzhongssh_icon",
"unicode": "e868",
"unicode_decimal": 59496
},
{
"icon_id": "22906289",
"name": "未选中安全设置_icon",
"font_class": "weixuanzhonganquanshezhi_icon",
"unicode": "e869",
"unicode_decimal": 59497
},
{
"icon_id": "22906290",
"name": "未选中ssh_icon",
"font_class": "weixuanzhongssh_icon",
"unicode": "e86a",
"unicode_decimal": 59498
},
{
"icon_id": "22906291",
"name": "选中安全设置_icon",
"font_class": "xuanzhonganquanshezhi_icon",
"unicode": "e86b",
"unicode_decimal": 59499
},
{
"icon_id": "22906292",
"name": "删除_icon",
"font_class": "shanchu_icon",
"unicode": "e86c",
"unicode_decimal": 59500
},
{
"icon_id": "22906293",
"name": "列表ssh_icon",
"font_class": "liebiaossh_icon",
"unicode": "e86e",
"unicode_decimal": 59502
},
{
"icon_id": "17575494",
"name": "file-submodule",
"font_class": "file-submodule",
"unicode": "e866",
"unicode_decimal": 59494
},
{
"icon_id": "7539612",
"name": "nv",
"font_class": "nv1",
"unicode": "e864",
"unicode_decimal": 59492
},
{
"icon_id": "7539613",
"name": "nan",
"font_class": "nan1",
"unicode": "e865",
"unicode_decimal": 59493
},
{
"icon_id": "21936935",
"name": "邮箱",

1874
public/css/iconfont.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="zh-CN" class="notranslate translated-ltr" translate="no">
<html lang="en">
<head>
<meta charset="utf-8">
<meta name=”Keywords” Content=”trustie,trustieforge,forge,确实让创建更美好,协同开发平台″>

View File

@ -60,13 +60,12 @@ body {
.ant-progress-textno {
color: #f5222d;
}
.CodeMirror pre.CodeMirror-line{
font-size: 16px!important;
}
/* md多空格 */
.markdown-body p {
margin:10px 0px!important;
font-size: 16px !important;
line-height: 2 !important;
white-space: pre-wrap;
}
@ -88,10 +87,6 @@ body {
border-left: 1px solid rgb(221, 221, 221);
/* 某些情况下被cm盖住了 */
z-index: 99;
padding:8px 8px 50px;
}
.editormd-preview .markdown-body{
padding:0px !important;
}
/* 图片点击放大的场景,隐藏图片链接 */

View File

@ -39,11 +39,6 @@ const Projects = Loadable({
loader: () => import('./forge/Index'),
loading: Loading,
})
//forge安全设置
const Security = Loadable({
loader: () => import('./forge/SecuritySetting/Index'),
loading: Loading,
})
//forge项目-devOps详情
const OpsDetail = Loadable({
loader: () => import('./forge/DevOps/opsDetail'),
@ -82,15 +77,7 @@ const Search = Loadable({
loader: () => import('./modules/search/'),
loading: Loading,
})
const WikiPreview = Loadable({
loader: () => import('./forge/Wiki/Preview'),
loading: Loading,
})
const ProjectIndex = Loadable({
loader: () => import("./forge/Index"),
loading: Loading,
});
class App extends Component {
constructor(props) {
super(props);
@ -116,9 +103,30 @@ class App extends Component {
Addcoursestypes: false
})
};
ModalCancelsy = () => {
this.setState({
mydisplay: false,
})
window.location.href = "/";
};
ModalshowCancelsy = () => {
this.setState({
mydisplay: true,
})
};
disableVideoContextMenu = () => {
window.$("body").on("mousedown", "video", function (event) {
if (event.which === 3) {
window.$('video').bind('contextmenu', function () { return false; });
} else {
window.$('video').unbind('contextmenu');
}
});
}
componentDidMount() {
document.title = "loading...";
this.disableVideoContextMenu();
initAxiosInterceptors(this.props);
this.getAppdata();
@ -196,23 +204,14 @@ class App extends Component {
};
render() {
const { mygetHelmetapi } = this.state;
let personal = mygetHelmetapi && mygetHelmetapi.personal;
return (
<Provider store={store}>
<ConfigProvider locale={zhCN}>
<MuiThemeProvider theme={theme}>
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
<SiderBar />
<SiderBar/>
<Router>
<Switch>
{/* wiki预览 */}
<Route path="/projects/:owner/:projectsId/wiki/preview/:projectName/:projectId" render={
(props) => {
return (<WikiPreview {...this.props} {...props} {...this.state} />)
}
} />
{/*项目*/}
<Route
path={"/projects/:owner/:projectId/devops/:opsId/detail"}
@ -222,14 +221,6 @@ class App extends Component {
}
}>
</Route>
<Route
path={"/settings"}
render={
(props) => {
return (<Security {...this.props} {...props} {...this.state} />)
}
}>
</Route>
{/*项目*/}
<Route
path={"/projects"}
@ -264,21 +255,17 @@ class App extends Component {
{/* 查询 */}
<Route path="/search" component={Search} />
{/* 个人主页 */}
<Route path="/users/:username"
render={
(props) => {
return (<InfosIndex {...this.props} {...this.state} />)
}
}></Route>
}></Route>
<Route exact path="/"
render={
(props) => (
personal && personal.length > 0 ?
<InfosIndex {...this.props} {...props} />
:
<ProjectIndex {...this.props} {...props} />
<Projects {...this.props} {...props} {...this.state}></Projects>
)
}
/>

View File

@ -9,7 +9,20 @@ class Loading extends Component {
}
render() {
return ""
return (
<div className="App" style={{ minHeight: '800px', width: "100%" }}>
<style>
{
`
.margintop{
margin-top:20%;
}
`
}
</style>
<Spin size="large" className={"margintop"} />
</div>
);
}
}

View File

@ -218,7 +218,7 @@ a:hover {
}
.color-blue {
color: #2A61FF;
color: #4CACFF;
}
.color-huang {

View File

@ -1,5 +1,4 @@
import moment from "moment";
import { number } from "prop-types";
// 处理整点 半点
// 取传入时间往后的第一个半点
@ -98,40 +97,3 @@ export function formatDuring(mss){
}
return days + "天" + hours + "小时" + minutes + "分";
}
/*
返回多久以前
backDate以前的某个日期
*/
export function timeAgo(backDate) {
try {
moment(backDate);
} catch (e) {
return;
}
if(typeof backDate ==='number'){
backDate=backDate*1000
}else{
backDate= moment(backDate);
}
let time = new Date() - backDate;
var days = Math.floor(time / (1000 * 60 * 60 * 24));
var hours = Math.floor((time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((time % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((time % (1000 * 60 * 60)) / 1000);
if (time <= 0) {
return "刚刚";
}
if (days) {
return days + "天前";
}
if (hours) {
return hours + "小时前";
}
if (minutes) {
return minutes + "分前";
}
if (seconds) {
return seconds + "秒前";
}
}

View File

@ -18,23 +18,6 @@ export function getImageUrl(path) {
return `${path}`;
}
export function numFormat(num, digits){
let d = digits || 1;
var si = [
{ value: 1, symbol: "" },
{ value: 1E3, symbol: "k" },
{ value: 1E4, symbol: "W" }
];
var rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
var i;
for (i = si.length - 1; i > 0; i--) {
if (num >= si[i].value) {
break;
}
}
return (num / si[i].value).toFixed(d).replace(rx, "$1") + si[i].symbol;
}
export function getImage(path) {
// https://www.educoder.net
// https://testbdweb.trustie.net

View File

@ -3,7 +3,7 @@
// export { default as OrderStateUtil } from '../routes/Order/components/OrderStateUtil';
export {
getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat,
getUploadLogoActionUrl as getUploadLogoActionUrl,
getImageUrl as getImageUrl,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
, getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth
, getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl
@ -27,7 +27,7 @@ export {
markdownToHTML, uploadNameSizeSeperator, appendFileSizeToUploadFile, appendFileSizeToUploadFileAll, isImageExtension,
downloadFile, sortDirections, validateLength, mdJSONParse, exportMdtoHtml
} from './TextUtil'
export { handleDateString, getNextHalfHourOfMoment, formatDuring, formatSeconds ,timeAgo} from './DateUtil'
export { handleDateString, getNextHalfHourOfMoment, formatDuring, formatSeconds } from './DateUtil'
export { configShareForIndex, configShareForPaths, configShareForShixuns, configShareForCourses, configShareForCustom } from './util/ShareUtil'

View File

@ -1,7 +1,7 @@
import React , { Component } from 'react';
import { Dropdown , Menu , Icon , Pagination , Spin } from 'antd';
import '../css/index.scss';
import '../Branch/branch.scss';
import '../Branch/branch.css';
import './activity.css';
import NoneData from '../Nodata';

View File

@ -1,35 +1,39 @@
import React, { useState } from 'react';
import { Dropdown, Menu, Tooltip } from 'antd';
import "./branch.scss";
import React, { Component } from 'react';
import { Dropdown, Icon, Tooltip } from 'antd';
import "./branch.css";
function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
const [ key , setKey ] = useState("HTTP");
class CloneAddress extends Component {
// 点击按钮复制功能
function jsCopy(){
jsCopy = () => {
var e = document.getElementById("copy_rep_content");
e.select();
document.execCommand("Copy");
}
return (
<div className="downMenu">
<div style={{borderBottom:"1px solid #eee"}}>
<Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}>
<Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item>
<Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item>
</Menu>
<div className="gitAddressClone">
<input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} />
<Tooltip title="复制链接">
<span className="color-blue" onClick={jsCopy}><i className="iconfont icon-fuzhi"></i></span>
</Tooltip>
</div>
render() {
const { http_url, downloadUrl } = this.props;
return (
<div className="gitAddressClone">
{/* <p className="addressTips"><span>版本库地址已变更,请基于新地址提交代码</span></p> */}
{
http_url && <span>HTTP</span>
}
<input type="text" id="copy_rep_content" value={http_url} />
<Tooltip title="复制链接">
<span className="color-blue" onClick={() => this.jsCopy()}><i className="iconfont icon-fuzhi"></i></span>
</Tooltip>
{
downloadUrl &&
<span>
<Dropdown overlay={downloadUrl} trigger={['click']} placement="bottomRight">
<a className="ant-dropdown-link">
<Icon type="cloud-download" className="font-18 fl color-blue" />
</a>
</Dropdown>
</span>
}
</div>
<Menu className="edu-txt-center">
<Menu.Item><a href={zip_url}>下载 ZIP</a></Menu.Item>
<Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>
</Menu>
</div>
)
)
}
}
export default CloneAddress;

View File

@ -1,36 +1,116 @@
import React , { useState , useEffect } from 'react';
import { Popover , Dropdown , Input , Spin } from 'antd';
import './branch.scss';
import { Popover , Input , Spin } from 'antd';
import './branch.css';
import { getBranch , getTag } from '../GetData/getData';
import SelectOverlay from './SelectOverlay';
export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{
const [ showValue , setShowValue ] = useState(branch);
const [ inputValue , setInputValue] = useState(undefined);
const [ nav , setNav ] = useState(0);
const [ isSpin , setIsSpin ] = useState(true);
const [ flag , setFlag ] = useState(false);
const [ data , setData ] = useState(undefined);
const [ datas , setDatas ] = useState(undefined);
useEffect(()=>{
setShowValue(branch);
},[branch])
useEffect(()=>{
document.body.addEventListener('click', e => {
let name = e.target.className;
let turn = name === "ant-input OptionsInput" || name === "navli active"|| name === "navli" || name === "padding10 bor-bottom-greyE";
if(turn){
return;
}else{
setFlag(false);
}
})
})
useEffect(()=>{
if(branchList){
setData(branchList);
setDatas(branchList);
setIsSpin(false);
}
},[branchList])
async function getBranchs(id,owner){
let result = await getBranch(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
async function getTags(id,owner){
let result = await getTag(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
function changeInputValue(e){
setInputValue(e.target.value);
let filter = e.target.value ? data && data.length>0 && data.filter(item=>item.name.indexOf(e.target.value)>-1) : data;
setDatas(filter);
}
function changeNav(nav){
setNav(nav);
setIsSpin(true);
if(nav === 0){
getBranchs(projectsId,owner);
}else{
getTags(projectsId,owner);
}
}
function chooseitem(value){
// setShowValue(value);
changeBranch(value);
}
const menu = (
<SelectOverlay
changeBranch={changeBranch}
tagflag={tagflag}
projectsId={projectsId}
owner={owner}
branchList={branchList}
/>
<div>
<div className="padding10 bor-bottom-greyE">
<Input
placeholder="请输入分支或标签名称搜索"
autocomplete="off" className="OptionsInput" value={inputValue}
onChange={changeInputValue} style={{width:"220px"}}
/>
<ul className="navUl">
<li className={nav === 0?"navli active":"navli"} onClick={()=>changeNav(0)}><i className="iconfont icon-fenzhi1 font-14 mr3"></i>分支列表</li>
{ tagflag && <li className={nav === 1?"navli active":"navli"} onClick={()=>changeNav(1)}><i className="iconfont icon-biaoqian3 font-14 mr3"></i>标签列表</li> }
</ul>
</div>
<Spin spinning={isSpin}>
<ul className="OptionsUl" id="ul-btn">
{
datas && datas.length>0 ?
datas.map((item,key)=>{
return(
<li key={key} onClick={()=>chooseitem(item.name)}><a className="task-hide ulALink">{item.name}</a></li>
)
}):
<p className="listTips">暂无{inputValue}{nav === 0 ?"分支":"标签"}~</p>
}
</ul>
</Spin>
</div>
);
return(
<Dropdown placement='bottomLeft' overlay={menu} overlayClassName="branch-tagBox-list" trigger={['click']} >
<Popover placement='bottomLeft' visible={flag} content={menu} onClick={()=>setFlag(!flag)} overlayClassName="branch-tagBox-list">
<div className="branch-tagBox">
{/* {nav === 0 ?"分支":"标签"} */}
<span className="color-grey-9 mr3 ml8"><i className="iconfont icon-fenzhi2 font-18"></i></span>
<a className="ant-dropdown-link task-hide">
<a className="ant-dropdown-link">
{showValue}
</a>
<i className="showtag iconfont icon-sanjiaoxing-down font-15 color-grey-9 mr5 ml5 mt1" />
<i className="showtag iconfont icon-xiajiantou font-14 color-grey-9 mr8" />
</div>
</Dropdown>
</Popover>
)
})

View File

@ -1,84 +0,0 @@
import React , { useState , useEffect } from 'react';
import { Input , Spin , Menu } from 'antd';
import { getBranch , getTag } from '../GetData/getData';
function SelectOverlay({ changeBranch , tagflag , branchList , projectsId , owner }) {
const [ inputValue , setInputValue] = useState(undefined);
const [ nav , setNav ] = useState(0);
const [ isSpin , setIsSpin ] = useState(true);
const [ data , setData ] = useState(undefined);
const [ datas , setDatas ] = useState(undefined);
const [ keys ,setKeys] = useState("branch");
useEffect(()=>{
if(branchList){
setData(branchList);
setDatas(branchList);
setIsSpin(false);
}
},[branchList])
async function getBranchs(id,owner){
let result = await getBranch(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
async function getTags(id,owner){
let result = await getTag(id,owner);
setData(result);
setDatas(result);
setIsSpin(false);
}
function chooseitem(value){
changeBranch(value);
}
function changeInputValue(e){
setInputValue(e.target.value);
let filter = e.target.value ? data && data.length>0 && data.filter(item=>item.name.indexOf(e.target.value)>-1) : data;
setDatas(filter);
}
function changeNav(e){
setKeys(e.key);
setIsSpin(true);
if(e.key === "branch"){
getBranchs(projectsId,owner);
}else{
getTags(projectsId,owner);
}
}
return(
<div className="overlayBranch">
<div className="padding15" style={{paddingBottom:"0px"}}>
<Input
prefix={<i className="iconfont icon-sousuo_icon1 font-14"></i>}
placeholder="请输入分支或标签名称搜索"
autocomplete="off" className="OptionsInput"
value={inputValue}
onChange={changeInputValue}
/>
</div>
<Menu mode="horizontal" className="navUl" selectedKeys={[keys]} onClick={changeNav}>
<Menu.Item key={"branch"}>分支</Menu.Item>
{ tagflag && <Menu.Item key={"tag"}>标签</Menu.Item> }
</Menu>
<Spin spinning={isSpin}>
<ul className="OptionsUl" id="ul-btn">
{
datas && datas.length>0 ?
datas.map((item,key)=>{
return(
<li key={key} onClick={()=>chooseitem(item.name)}><a className="task-hide ulALink">{item.name}</a></li>
)
}):
<p className="listTips">暂无{inputValue}{nav === 0 ?"分支":"标签"}~</p>
}
</ul>
</Spin>
</div>
)
}
export default SelectOverlay;

View File

@ -1,5 +1,5 @@
.branchDropdown {
border: 1px solid #eee;
.branchDropdown{
border:1px solid #eee;
border-radius: 4px;
display: flex;
justify-content: center;
@ -7,126 +7,78 @@
line-height: 40px;
min-width: 220px;
}
.branchDropdown .ant-dropdown-trigger {
.branchDropdown .ant-dropdown-trigger{
width: 100%;
padding: 0px 15px;
padding:0px 15px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
.branchOptions {
.branchOptions{
width: 220px;
box-shadow: 0px 0px 3px 1px rgba(134, 134, 134, 0.4);
border-radius: 3px;
background: #fff;
max-height: 300px;
}
.OptionsUl {
.OptionsUl{
max-height: 220px;
overflow-y: auto;
}
.OptionsUl li {
height: 30px;
line-height: 30px;
.OptionsUl li{
height: 35px;
line-height: 35px;
cursor: pointer;
padding: 0px 20px;
margin: 5px 0px;
padding:0px 10px;
}
.OptionsUl li:hover {
background-color: #F0F0F0;
.OptionsUl li:hover{
background-color: #F0F0F0;
}
.OptionsUl li a {
.OptionsUl li a{
display: block;
}
.OptionsInput {
.OptionsInput{
height: 32px;
padding-left: 4px;
line-height: 32px;
width: 100%;
}
.branch-tagBox {
border: 1px solid #D0D0D0;
.branch-tagBox{
border:1px solid #eee;
border-radius: 3px;
height: 36px;
height: 40px;
display: flex;
align-items: center;
cursor: pointer;
min-width: 104px;
min-width: 140px;
}
.branch-tagBox:hover {
background-color: #F3F4F6;
}
.branch-tagBox-list {
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
}
.branch-tagBox-list .ant-popover-arrow {
.branch-tagBox-list .ant-popover-arrow{
display: none;
}
.branch-tagBox-list.ant-popover.ant-popover-placement-bottom {
padding-top: 0px;
.branch-tagBox-list.ant-popover.ant-popover-placement-bottom{
padding-top:0px;
}
.branch-tagBox-list .branch-tagBox .ant-dropdown-link {
.branch-tagBox .ant-dropdown-link{
display: block;
flex: 1;
max-width: 105px;
flex:1;
}
.branch-tagBox-list .ant-popover-inner-content {
padding: 0px;
.branch-tagBox-list .ant-popover-inner-content{
padding:0px;
}
.overlayBranch {
width: 325px;
.navUl{
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 5px;
}
.overlayBranch .navUl {
margin-top: 8px;
height: 30px;
line-height: 30px;
.navUl li{
cursor: pointer;
}
.overlayBranch .navUl li {
height: 30px;
line-height: 30px;
padding: 0px 5px;
margin-left: 20px !important;
.navUl li.active{
color:#5091FF;
}
.listTips {
padding: 20px 0px;
.listTips{
padding:20px 0px;
text-align: center;
}
.urlMenu {
line-height: 30px;
margin-bottom: 10px;
padding: 15px 20px 0px 20px;
border-bottom: none;
}
.urlMenu li.ant-menu-item {
height: 30px;
line-height: 30px;
padding: 0px 5px;
margin-right: 20px !important;
}
.urlMenu li.ant-menu-item.ant-menu-item-selected, .urlMenu li.ant-menu-item.ant-menu-item-active {
color: #333;
}
.urlMenu li.ant-menu-item.ant-menu-item-selected {
border-color: #1890ff !important;
}
.urlMenu li.ant-menu-item.ant-menu-item-active {
border-color: transparent;
}
/*# sourceMappingURL=branch.css.map */
}

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["branch.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACG;;;AAEH;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;;AAGJ;EACE;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAIN;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE","file":"branch.css"}

View File

@ -1,118 +0,0 @@
.branchDropdown{
border:1px solid #eee;
border-radius: 4px;
display: flex;
justify-content: center;
height: 40px;
line-height: 40px;
min-width: 220px;
}
.branchDropdown .ant-dropdown-trigger{
width: 100%;
padding:0px 15px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
}
.branchOptions{
width: 220px;
box-shadow: 0px 0px 3px 1px rgba(134, 134, 134, 0.4);
border-radius: 3px;
background: #fff;
max-height: 300px;
}
.OptionsUl{
max-height: 220px;
overflow-y: auto;
}
.OptionsUl li{
height: 30px;
line-height: 30px;
cursor: pointer;
padding:0px 20px;
margin:5px 0px;
}
.OptionsUl li:hover{
background-color: #F0F0F0;
}
.OptionsUl li a{
display: block;
}
.OptionsInput{
height: 32px;
padding-left: 4px;
line-height: 32px;
width: 100%;
}
.branch-tagBox{
border:1px solid #D0D0D0;
border-radius: 3px;
height: 36px;
display: flex;
align-items: center;
cursor: pointer;
min-width: 104px;
}
.branch-tagBox:hover{
background-color: #F3F4F6;
}
.branch-tagBox-list{
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
.ant-popover-arrow{
display: none;
}
&.ant-popover.ant-popover-placement-bottom{
padding-top:0px;
}
.branch-tagBox .ant-dropdown-link{
display: block;
flex:1;
max-width: 105px;
}
.ant-popover-inner-content{
padding:0px;
}
}
.overlayBranch{
width: 325px;
.navUl{
margin-top: 8px;
height: 30px;
line-height: 30px;
li{
height: 30px;
line-height: 30px;
padding:0px 5px;
margin-left: 20px!important;
}
}
}
.listTips{
padding:20px 0px;
text-align: center;
}
.urlMenu{
line-height: 30px;
margin-bottom: 10px;
padding:15px 20px 0px 20px;
border-bottom: none;
li.ant-menu-item{
height: 30px;
line-height: 30px;
padding:0px 5px;
margin-right: 20px!important;
&.ant-menu-item-selected,&.ant-menu-item-active{
color: #333;
}
&.ant-menu-item-selected{
border-color:#1890ff!important;
}
&.ant-menu-item-active{
border-color:transparent ;
}
}
}

View File

@ -1,432 +0,0 @@
@charset "UTF-8";
ul.ant-menu {
border-right: none;
}
ul.ant-menu li:last-child {
border-bottom: none;
}
li.ant-menu-item {
margin: 0px !important;
border-bottom: 1px solid #eee;
}
.flags {
border: 1px solid red;
border-radius: 5px;
}
.cards {
display: flex;
align-items: center;
padding: 20px 34px;
background-color: #fff;
margin-bottom: 18px;
min-height: 130px;
border: 1px solid #eee;
}
.cards .img {
margin-right: 20px;
width: 190px;
height: 90px;
border: 1px solid #eeeeee;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
.cards .img img {
max-width: 100%;
max-height: 100%;
}
.cards .content {
flex: 1;
width: 0;
}
.cards .content .titles {
display: flex;
justify-content: space-between;
margin-bottom: 10px !important;
align-items: center;
height: 22px;
line-height: 22px;
}
.cards .content .titles > a {
font-size: 18px;
color: #333;
}
.cards .content .desc {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-height: 20px;
}
.tabsStyle {
border: 1px solid #eee;
}
.tabsStyle .ant-tabs-bar.ant-tabs-top-bar {
padding-left: 35px;
margin-bottom: 0px;
}
.tabsStyle .ant-tabs-nav .ant-tabs-tab {
padding: 19px 0px;
margin-right: 40px;
}
.tabsStyle .ant-tabs-ink-bar {
width: 25px !important;
bottom: 10px;
}
.statusColor {
display: inline-block;
padding: 0px 10px;
height: 20px;
line-height: 20px;
border-radius: 11px;
color: #fff;
margin-left: 5px;
font-size: 12px;
}
.statusColor.running {
background: #5091FF;
color: #F1F8FF;
}
.statusColor.Preparing {
background: #ff6e21;
color: #fff8f4;
}
.statusColor.pass {
background: #28BD6C;
color: #EEFDF5;
}
.statusColor.failed {
background: #F73030;
color: #FCEEEE;
}
.statusColor.killed {
background: #eee;
color: #999;
}
.handleBox {
position: fixed;
top: 45%;
right: 240px;
z-index: 10000;
}
.laterest {
background-color: #EF3131;
color: #fff;
font-size: 12px;
margin-left: 10px;
padding: 0px 5px;
border-radius: 2px;
height: 18px;
line-height: 18px;
}
@media screen and (max-width: 1800px) {
.handleBox {
right: 190px;
}
}
@media screen and (max-width: 1700px) {
.handleBox {
right: 140px;
}
}
@media screen and (max-width: 1600px) {
.handleBox {
right: 90px;
}
}
@media screen and (max-width: 1450px) {
.handleBox {
right: 10px;
}
}
@media screen and (max-width: 1380px) {
.handleBox {
right: 0px;
}
}
.ant-drawer {
z-index: 10000 !important;
}
.ant-drawer-body {
padding: 0px !important;
}
.ant-drawer-body .drawerHead {
background-color: #333;
color: #fff;
padding: 15px 20px;
}
.ant-drawer-body .ant-tree {
margin: 0px 20px !important;
}
.menuPanels {
width: 295px;
}
.menuPanels .leftline {
position: relative;
color: #666;
height: 16px;
}
.menuPanels .leftline::before {
position: absolute;
left: -10px;
top: 3px;
height: 12px;
width: 1px;
background-color: #666666;
content: "";
}
.menuPanels .ant-btn {
height: 36px;
line-height: 34px;
width: 83px;
text-align: center;
padding: 0px;
font-weight: 500;
font-size: 14px;
}
.menuPanels .ant-btn.currentBtn {
cursor: default;
color: #333;
}
.menuPanels .ant-btn.currentBtn:hover {
color: #333;
border-color: #d0d0d0;
}
.menuPanels .ant-btn-default {
color: #333;
border-color: #d0d0d0;
}
.menuPanels .ant-btn-default:hover {
background: #F3F4F6;
}
.menuPanels .ant-btn-primary {
color: #fff;
background-color: #2A61FF;
}
.menuPanels .focusPanelHeadInfo {
padding: 14px 16px;
border-bottom: 1px solid #eee;
}
.menuPanels .ant-popover-content, .menuPanels .ant-popover-inner {
height: 100%;
width: 100%;
}
.menuPanels .ant-popover-inner-content {
padding: 0px;
}
.halfs {
margin-top: 24px;
padding: 24px 0px 0px 0px;
border-top: 1px solid #e8e8e8;
}
.aboutSubTitle {
display: flex;
align-items: center;
}
.menuinfos {
padding: 10px 20px;
}
.menuinfos > a {
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
}
.menuinfos > a > span:first-child {
font-size: 16px;
font-weight: 500;
color: #333;
line-height: 22px;
}
.menuinfos > a > span:last-child {
color: #666;
font-weight: 400;
line-height: 20px;
margin-top: 6px;
}
/*-------------------个人主页:右侧提示区域--------------------------*/
.-task-sidebar {
position: fixed;
width: 40px;
right: 0;
bottom: 80px;
z-index: 10;
}
@media screen and (max-width: 1920px) {
.-task-sidebar {
right: 220px;
}
}
@media screen and (max-width: 1750px) {
.-task-sidebar {
right: 160px;
}
}
@media screen and (max-width: 1650px) {
.-task-sidebar {
right: 115px;
}
}
@media screen and (max-width: 1550px) {
.-task-sidebar {
right: 90px;
}
}
@media screen and (max-width: 1450px) {
.-task-sidebar {
right: 45px;
}
}
@media screen and (max-width: 1200px) {
.-task-sidebar {
right: 0px;
display: none;
}
}
.-task-sidebar > div {
height: 40px;
line-height: 40px;
box-sizing: border-box;
width: 40px;
color: #999;
font-size: 20px;
text-align: center;
margin-bottom: 20px;
border-radius: 50%;
background: #FFFFFF;
box-shadow: 0px 0px 10px 1px #F1F1F1;
}
.-task-sidebar > div i {
color: #999;
}
.-task-sidebar > div:hover i {
color: #fff !important;
}
.-task-sidebar > div:hover {
background: #1890FF;
box-shadow: 0px 0px 10px 2px #B6D0FC;
}
.helpBox {
width: 260px;
z-index: 103;
}
.helpBox.shareContent {
width: 200px;
}
.helpBox .ant-popover-inner-content {
padding: 0px;
}
.helpBox p.titlecontent {
font-size: 18px;
color: #333;
line-height: 20px;
padding: 15px 20px;
}
.helpBox .faqUl {
padding: 0px 20px 10px;
max-height: 230px;
overflow-y: auto;
}
.helpBox .faqUl li {
background: #F5F5F5;
border-radius: 20px;
padding: 0px 20px;
color: #333;
height: 34px;
line-height: 34px;
margin-bottom: 10px;
}
.helpBox .faqUl li a {
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.helpBox .faqUl li:hover {
background-color: #D1E9FF;
}
.helpBox .faqUl li:hover a {
color: #333 !important;
}
.helpBox .shareUl {
padding: 10px 0px;
display: flex;
align-items: center;
}
.helpBox .shareUl .titlecontent {
margin-right: 20px;
}
.helpBox .shareUl li > i {
font-size: 32px !important;
}
.-task-desc {
background: #494949;
width: 90px;
line-height: 36px;
text-align: center;
position: absolute;
color: #fff;
font-size: 13px;
z-index: 999999;
opacity: 0;
}
.-task-desc div {
position: absolute;
top: 10px;
right: -7px;
height: 13px;
}
.-task-desc div img {
float: left;
}
.-task-sidebar .scan_ewm {
position: absolute !important;
right: 45px !important;
bottom: 0px !important;
background-color: #494949 !important;
-webkit-box-sizing: border-box !important;
box-sizing: border-box !important;
font-size: 14px !important;
line-height: 16px !important;
display: none;
height: 213px !important;
}
.trangle_right {
position: absolute;
right: -5px;
bottom: 15px;
width: 0;
height: 0px;
border-top: 6px solid transparent;
border-left: 5px solid #494949;
border-bottom: 6px solid transparent;
}
/*# sourceMappingURL=Component.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["Component.scss"],"names":[],"mappings":";AAAA;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKN;EACE;;AACA;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;;AAGJ;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;;;AAEF;EACE;;AACA;EACE;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;EACA;;AAIN;EACE;EACA;;AACA;EACE;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;;AAEF;EACE;;;AAGJ;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;;AAKN;AACA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;;;AAGJ;EACE;IACE;IACA;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;;AACA;EACE;;AAKR;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"Component.css"}

View File

@ -113,14 +113,7 @@ li.ant-menu-item{
z-index: 10000;
}
.laterest{
background-color: #EF3131;
color: #fff;
font-size: 12px;
margin-left: 10px;
padding:0px 5px;
border-radius: 2px;
height: 18px;
line-height: 18px;
color: #05690d;
}
@media screen and (max-width: 1800px){
@ -164,88 +157,39 @@ li.ant-menu-item{
}
.menuPanels{
width: 295px;
.leftline{
position: relative;
color: #666;
height: 16px;
&::before{
position: absolute;
left: -10px;
top:3px;
height: 12px;
width: 1px;
background-color: #666666;
content: "";
}
}
.ant-btn{
height: 36px;
line-height: 34px;
width: 83px;
text-align: center;
padding:0px ;
font-weight: 500;
font-size: 14px;
&.currentBtn{
cursor: default;
color: #333;
&:hover{
color: #333;
border-color: #d0d0d0;
}
}
}
.ant-btn-default{
color: #333;
border-color: #d0d0d0;
&:hover{
background: #F3F4F6;
}
}
.ant-btn-primary{
color: #fff;
background-color: #2A61FF;
}
.focusPanelHeadInfo{
padding:14px 16px;
border-bottom: 1px solid #eee;
}
width: 240px;
height: 180px;
.ant-popover-content,.ant-popover-inner{
height: 100%;
width: 100%;
}
.ant-popover-inner-content{
padding:0px;
}
}
.halfs{
margin-top: 24px;
padding:24px 0px 0px 0px;
border-top: 1px solid #e8e8e8;
}
.aboutSubTitle{
display: flex;
align-items: center;
.attrPerson{
padding-bottom: 24px;
}
}
.menuinfos{
padding:10px 20px;
padding:15px 0px;
&>a{
display: flex;
flex-direction: column;
align-items: center;
border-right: 1px solid #eee;
flex: 1;
& >span:first-child{
font-size: 16px;
font-weight: 500;
font-size: 18px;
font-weight: 400;
color: #333;
line-height: 22px;
}
& >span:last-child{
color: #666;
font-weight: 400;
line-height: 20px;
margin-top: 6px;
}
&:last-child{
border-right: none;
}
}
}
@ -332,7 +276,7 @@ li.ant-menu-item{
}
.faqUl{
padding:0px 20px 10px;
max-height: 230px;
max-height: 220px;
overflow-y: auto;
li{
background: #F5F5F5;

View File

@ -1,13 +1,13 @@
import React, { useEffect, useState } from 'react';
import { AlignCenter , FlexAJ } from '../Component/layout';
import { Link } from 'react-router-dom';
import { Popover , Spin , Button } from 'antd';
import { Popover , Spin } from 'antd';
import { getImageUrl } from 'educoder';
import './Component.scss';
import { getUser } from '../GetData/getData';
import axios from 'axios';
function Contributors({contributors,owner,projectsId,currentLogin}){
function Contributors({contributors,owner,projectsId}){
const [ menuList ,setMenuList ]= useState([]);
const [ list , setList ]= useState(undefined);
const [ total , setTotal ]= useState(0);
@ -50,28 +50,15 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
if(data){
let ele = (
<Spin spinning={isSpin}>
<AlignCenter className="focusPanelHeadInfo">
<Link to={`/users/${data.login}`}><img src={getImageUrl(`/${data.image_url}`)} alt="" className="radius" width="38px" height="38px"/></Link>
<div className="flex1 ml10" style={{width:"0"}}>
<AlignCenter>
<Link to={`/users/${data.login}`} className="font-16">{data.name}</Link>
{
data.location &&
<span className="ml20 font-12 leftline">{data.location}</span>
}
</AlignCenter>
{
data.organizations && data.organizations.length > 0 ?
<AlignCenter className="font-12 mt5">
<span>所属组织</span>
<div className="task-hide flex1">
{renderArray(data.organizations)}
</div>
</AlignCenter>
:""
}
</div>
</AlignCenter>
<FlexAJ>
<AlignCenter>
<Link to={`/users/${data.login}`}><img src={getImageUrl(`/${data.image_url}`)} alt="" className="radius" width="38px" height="38px"/></Link>
<Link to={`/users/${data.login}`} className="ml10">{data.name}</Link>
</AlignCenter>
{
data.is_watch ? <a className="color-grey-9" onClick={()=>FocusFunc(false,data.login)}>取消关注</a>:<a className="color-blue" onClick={()=>FocusFunc(true,data.login)}>关注</a>
}
</FlexAJ>
<AlignCenter className="menuinfos">
<a href={data.projects_url}>
<span>{data.projects_count}</span>
@ -86,18 +73,19 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
<span>关注数</span>
</a>
</AlignCenter>
<div className={"pb20"} style={{display:"flex",justifyContent:'center'}}>
{
currentLogin && (currentLogin === data.login)
?
<Button className="currentBtn">当前用户</Button>
:
data.is_watch ?
<Button type={"default"} onClick={()=>FocusFunc(false,data.login)}>已关注</Button>
:
<Button type={"primary"} onClick={()=>FocusFunc(true,data.login)}>关注TA</Button>
}
</div>
{
data.organizations && data.organizations.length > 0 ?
<AlignCenter className="font-12 pt4 pb4">
<span>所属组织</span>
<div className="task-hide flex1">
{renderArray(data.organizations)}
</div>
</AlignCenter>
:""
}
{
data.location && <AlignCenter className="font-12 pt4 pb4"><span>所在地址:</span><span className="ml5">{data.location}</span></AlignCenter>
}
</Spin>
)
setMenu(ele);
@ -147,10 +135,10 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
return(
<div className="halfs">
<Link to={`/projects/${owner}/${projectsId}/contribute`} className="font-16 color-ooo aboutSubTitle">
<span>贡献者</span>
{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>}
</Link>
<FlexAJ>
<AlignCenter><span className="font-16 color-grey-6">贡献者</span>{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>}</AlignCenter>
<Link className="font-12 color-grey-9" to={`/projects/${owner}/${projectsId}/contribute`}>全部</Link>
</FlexAJ>
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
{
total > 0 ?

View File

@ -1,35 +0,0 @@
import React from 'react';
import { AlignCenter } from '../layout';
import { Modal , Button } from 'antd';
import './Index.scss';
function DeleteBox({
visible ,
onCancel ,
onSuccess ,
title ,
subTitle,
content
}) {
return(
<Modal
visible={visible}
onCancel={onCancel}
title={title}
width="600px"
className="deleteBox"
footer={
<div>
<Button size={'large'} onClick={onCancel}>取消</Button>
<Button type={"danger"} size={"large"} onClick={onSuccess}>确认删除</Button>
</div>
}
>
<div className="desc">
<AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter>
<p>{subTitle}</p>
</div>
</Modal>
)
}
export default DeleteBox;

View File

@ -1,45 +0,0 @@
.deleteBox{
.ant-modal-header{
background-color: #f8f8f8;
border-bottom: none;
.ant-modal-title{
text-align: left;
font-size: 20px;
}
}
.ant-modal-body{
padding:30px 50px;
p{
font-size: 16px;
line-height: 26px;
color:#666;
word-break: break-all;
}
.desc{
.descMain{
align-items: center;
justify-content: center;
font-size: 20px;
margin-bottom: 10px;
i{
font-size: 38px!important;
color:#DF0002
}
}
}
}
.ant-modal-footer{
border-top: none;
text-align: center;
padding-bottom: 40px;
button{
width: 120px;
margin:0px 20px;
&.ant-btn-danger{
background-color: #fff;
color: #DF0002;
border-color: #D0D0D0;
}
}
}
}

View File

@ -4,12 +4,6 @@ import './Component.scss';
import axios from 'axios';
const { TreeNode , DirectoryTree } = Tree;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , list}){
const [ treeData , setTreeData ] = useState(undefined);
const [ isSpin , setIsSpin ] = useState(true);
@ -77,8 +71,7 @@ function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , li
let dataref = event.node.props.dataRef;
if(dataref.type==="file"){
onClose();
let value = turnbar(branch);
history.push(`/projects/${owner}/${projectsId}/tree/${value}/${dataref.path}`);
history.push(`/projects/${owner}/${projectsId}/tree/${branch}/${dataref.path}`);
}
}

View File

@ -1,9 +0,0 @@
.ant-modal-mask {
z-index: 1001;
}
.ant-modal-wrap {
z-index: 1002;
}
/*# sourceMappingURL=EAccount.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["EAccount.scss"],"names":[],"mappings":"AAAA;EACE;;;AAEF;EACE","file":"EAccount.css"}

View File

@ -3,4 +3,7 @@
}
.ant-modal-wrap{
z-index: 1002;
.ant-form-explain{
position: absolute;
}
}

View File

@ -25,7 +25,7 @@ function LanguagePower({languages}){
}
return(
<div>
<p className="font-16 color-ooo aboutSubTitle">开发语言</p>
<p className="font-16 color-grey-6">开发语言</p>
<div className="progress">
{
array && array.map((item,key)=>{

View File

@ -1,62 +0,0 @@
import React, {useEffect, useRef, useState} from 'react';
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
import './Component.scss';
function Monaco(props) {
const {
style = { // dom
height: '400px',
},
value = '', //
onChange = () => { //
},
fontSize = 14, //
monacoOptions = {
scrollBeyondLastLine: false,
lineNumbers: "off",
wordWrap: true,
overviewRulerBorder: true,
lineHeight: 24,
readOnly:true
}, // monaco
language = 'html', // js ts sql css json html
} = props;
const editOrRef = useRef();
const ThisEditor = useRef();
useEffect(() => {
ThisEditor.current = monaco.editor.create(editOrRef.current, {
value: value || '',
language,
theme: "vs-grey",
fontSize: fontSize + 'px',
minimap: { //
enabled: false,
},
...monacoOptions,
});
ThisEditor.current.onDidChangeModelContent((e) => {
let newValue = ThisEditor.current.getValue();
onChange(newValue);
});
return () => {
ThisEditor.current.dispose();
ThisEditor.current = undefined; //
}
}, []);
useEffect(() => {
if (ThisEditor.current) {
ThisEditor.current.updateOptions({
fontSize: fontSize + 'px',
})
}
}, [fontSize]);
return (
<div style={style} ref={editOrRef}>
</div>
);
}
export default Monaco;

View File

@ -2,33 +2,37 @@ import React from 'react';
import { AlignCenter , AlignTop , FlexAJ } from '../Component/layout';
import { Link } from 'react-router-dom';
function Releases({owner,projectsId,releaseVersions , baseOperate , projectType}){
function Releases({owner,projectsId,releaseVersions}){
return(
<div>
<Link to={`/projects/${owner}/${projectsId}/releases`} className="font-16 color-ooo aboutSubTitle">
<span>发行版</span>
{ releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>}
</Link>
<FlexAJ>
<AlignCenter><span className="font-16 color-grey-6">发行版</span>
{ releaseVersions && releaseVersions.total_count > 0 && <span className="infoCount">{releaseVersions.total_count}</span>}
</AlignCenter>
{ releaseVersions && releaseVersions.total_count > 0 ?
<Link className="font-12 color-grey-9" to={`/projects/${owner}/${projectsId}/releases`}>全部</Link>
:
<Link className="font-12 color-blue" to={`/projects/${owner}/${projectsId}/releases/new`}>新建</Link>
}
</FlexAJ>
{
releaseVersions && releaseVersions.total_count>0 ?
releaseVersions.list.map((item,key)=>{
return(
key === 0 &&<AlignTop className="mt10">
<i className="iconfont icon-biaoqian3 color-grey-6 font-18 mr10"></i>
<div>
<p className="font-16">
<Link to={`/projects/${owner}/${projectsId}/releases`} className="color-grey-3">发布{item.name}版本</Link>
<span className="laterest">最新</span>
<p className="font-16 color-grey-6">
<Link to={`/projects/${owner}/${projectsId}/releases`}>{item.name}</Link>
<span className="font-12 laterest ml5">最新</span>
</p>
<p className="color-grey-3 font-12">{item.created_at}</p>
<p className="color-grey-9 font-13">{item.created_at}</p>
</div>
</AlignTop>
)
})
:
<div className="mt8">
您暂未发布任何版本{baseOperate && projectType !==2 && <Link className="color-blue ml20" to={`/projects/${owner}/${projectsId}/releases/new`}>创建新版本</Link>}
</div>
:""
}
</div>

View File

@ -10,12 +10,6 @@ import { Link } from 'react-router-dom';
// killed:"",
// pending:""
// }
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function renderTableStatus(status) {
switch (status) {
case "running":
@ -71,9 +65,8 @@ function List({ list, operate , projectsId , owner , showModal , deleteFunc }){
width:"15%",
ellipsis:true,
render:(value,item)=>{
let v = turnbar(item.branch);
return(
<Link to={`/projects/${owner}/${projectsId}/tree/${v}/${value}`} className="color-blue">{value}</Link>
<Link to={`/projects/${owner}/${projectsId}/tree/${item.branch}/${value}`} className="color-blue">{value}</Link>
)
}
},

View File

@ -42,7 +42,7 @@ function PipelineName({visible,onCancel,onOk,value ,branchList}){
</div>
<div className="choosenList mt20">
<span>触发条件:</span>
<Select value={branchValue} style={{width:"150px"}} dropdownClassName="chooseCon" onChange={(e)=>setBranchValue(e)}>
<Select value={branchValue} style={{width:"150px"}} onChange={(e)=>setBranchValue(e)}>
{
branchList && branchList.length>0 && branchList.map((item,key)=>{
return(
@ -51,7 +51,7 @@ function PipelineName({visible,onCancel,onOk,value ,branchList}){
})
}
</Select>
<Select mode="multiple" allowClear value={eventValue} dropdownClassName="chooseCon" style={{width:"180px",marginLeft:"10px"}} onChange={(e)=>{console.log(e);setEventValue(e)}}>
<Select mode="multiple" allowClear value={eventValue} style={{width:"180px",marginLeft:"10px"}} onChange={(e)=>{console.log(e);setEventValue(e)}}>
{
EVENT.map((item,key)=>{
return(

View File

@ -2,7 +2,7 @@ import React, { useState, useEffect , useImperativeHandle ,forwardRef } from "re
import { FlexAJ, AlignCenter , Banner } from "../Component/layout";
import { Table, Pagination, Popconfirm } from "antd";
import { truncateCommitId } from "../common/util";
import { getImageUrl } from 'educoder';
import {getUrl} from 'educoder';
import axios from "axios";
import { Link } from 'react-router-dom';
@ -245,7 +245,7 @@ function Structure(props,ref){
{meg.sha && <span className="color-orange">{meg.sha}</span>}
</div>
<AlignCenter>
<img style={{borderRadius:"50%",marginRight:"10px",width:"25px",height:"25px"}} alt="" src={`${item.image_url && getImageUrl(`/${item.image_url}`)}`} />
<img style={{borderRadius:"50%",marginRight:"10px",width:"25px",height:"25px"}} alt="" src={`${item.image_url && getUrl(`/images/${item.image_url}`)}`} />
<div className="task-hide ml5" style={{ maxWidth: "300px" }}>
{meg.message}
</div>

View File

@ -391,9 +391,6 @@
}
}
}
.chooseCon.ant-select-dropdown{
z-index: 100001;
}
.choosenList{
display: flex;

View File

@ -152,21 +152,20 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
</Form.Item>
}
<Form.Item label="仓库标识:" style={{marginBottom:"0px"}}>
<Form.Item label="仓库名称:">
{getFieldDecorator("identifier",
{
rules:[
{required:true,message:"请输入仓库标识!"},
{required:true,message:"请输入仓库名称"},
{
validator:checkIdentifier
}
]
}
)(
<Input placeholder="请输入仓库标识" autoComplete={"off"}/>
<Input placeholder="请输入仓库名称" autoComplete={"off"}/>
)}
</Form.Item>
<span className="color-grey-9" style={{marginLeft:"120px"}}>请输入当前项目的标识<span className="ml5 mr5 color-grey-3">{repo}</span>进行确认</span>
</Form>
</div>
</Modal>

View File

@ -19,7 +19,7 @@ function Footer(){
return(
<div>
<div style={{height:"497px"}}></div>
<div style={{height:"483px"}}></div>
<div className="newFooter edu-txt-center">
{value && showhtml(value)}
{/* <div className="footerInfos">

View File

@ -3,9 +3,9 @@ import AccountProfile from "../../modules/user/AccountProfile";
import { getImageUrl } from 'educoder'
import axios from 'axios';
import { Input , notification , Dropdown , Menu } from 'antd';
import { Link } from 'react-router-dom';
import LoginDialog from '../../modules/login/LoginDialog';
import GotoQQgroup from '../../modal/GotoQQgroup';
import HeadSearch from '../Component/HeadSearch';
import AddProjectModal from './AddProjectModal';
@ -79,6 +79,36 @@ class NewHeader extends Component {
} catch (e) {}
}
// SearchInput = (open,item)=>{
// if(open){
// return(
// <div
// onBlur={() => {
// setTimeout(() => {
// this.setState({
// openSearch:false
// })
// }, 300)
// }}
// >
// <Search placeholder="实践课程/教学课堂/实践项目/交流问答"
// className={`search-input mr20`}
// onSearch={(value)=>this.onGlobalSearch(value,item)}
// autoFocus={true}
// />
// </div>
// )
// }else{
// return <i className="iconfont icon-sousuo font-18 color-grey-6 ml30" onClick={() => {
// this.setState({openSearch:true})
// }} />
// }
// }
// onGlobalSearch=(value,item)=>{
// window.location.href=`${item}?value=` + value;
// }
openNotification = (messge) => {
notification.open({
message: "提示",
@ -87,6 +117,8 @@ class NewHeader extends Component {
});
};
componentWillReceiveProps(newProps, oldProps) {
this.setState({
user: newProps.user
@ -96,6 +128,7 @@ class NewHeader extends Component {
}
}
educoderlogin = () => {
//登录账号
this.setState({
@ -133,11 +166,13 @@ class NewHeader extends Component {
})
};
// 关闭
cancelModulationModels = () => {
this.setState({ isRenders: false })
}
setevaluatinghides = () => {
this.setState({
setevaluatinghides: true
@ -254,7 +289,6 @@ class NewHeader extends Component {
)
})
}
<li><Link to={`/settings/SSH`}>设置</Link></li>
<Menu.Item><a onClick={() => this.educoderloginysl()}>退出</a></Menu.Item>
</Menu>
)
@ -263,13 +297,17 @@ class NewHeader extends Component {
render() {
const { match} = this.props;
let current_user = this.props.user;
let {
let { Addcoursestypes,
tojoinitemtype,
tojoinclasstitle,
code_notice,
AccountProfiletype,
user,
isRender,
headtypesonClickbool,
headtypess,
settings,
openSearch,
} = this.state;
/*用户名称 用户头像url*/
let activeIndex = false;

View File

@ -33,7 +33,7 @@
li{
height: 40px;
line-height: 40px;
padding:0px!important;
padding:0px;
cursor: default;
&:hover{
background-color: #fff;

View File

@ -26,6 +26,10 @@ const ProjectDetail = Loadable({
loading: Loading,
});
const Infos = Loadable({
loader: () => import("./users/Infos"),
loading: Loading,
});
class Index extends Component {
componentDidUpdate=()=>{
@ -70,8 +74,12 @@ class Index extends Component {
)}
></Route>
<Route
exact
path="/"
render={(props) => (
this.props.current_user && this.props.current_user.login ?
<Infos {...this.props} {...props} />
:
<ProjectIndex {...this.props} {...props} />
)}
></Route>

View File

@ -1,6 +1,6 @@
import React , { useEffect , useState } from 'react';
import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ } from '../Component/layout';
import { Dropdown , Menu , Divider , Spin, Button , Typography } from 'antd';
import { Dropdown , Menu , Divider , Spin, Button } from 'antd';
import { getImageUrl } from "educoder";
import { Link } from 'react-router-dom';
import CloneAddress from '../Branch/CloneAddress';
@ -19,27 +19,12 @@ import LanguagePower from '../Component/LanguagePower';
import DrawerPanel from '../Component/DrawerPanel';
import UpdateDescModal from './sub/UpdateDescModal';
import Nodata from '../Nodata';
import Invite from './sub/Invite';
/**
* projectDetail.type:0是托管项目1是镜像项目2是同步镜像项目(为2时不支持在线创建在线上传在线修改在线删除创建合并请求等功能)
*/
const { Paragraph } = Typography;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function returnbar(str){
if(str && str.length>0 && str.indexOf("%2F")>-1){
return str.replaceAll('%2F','/');
}
return str;
}
function CoderDepot(props){
const [ projectDetail , setProjectDetail ]= useState(undefined);
const [ inviteCode , setInviteCode ] = useState(undefined);
const [ treeValue , setTreeValue ] = useState(undefined);
const [ treeValuePath , setTreeValuePath ] = useState(undefined);
const [ lastCommit,setLastCommit ] = useState(undefined);
@ -61,33 +46,13 @@ function CoderDepot(props){
const [ website , setWebsite ] = useState(undefined);
const [ lesson_url , setLessonUrl ] = useState(undefined);
const [ readme , setReadme ] = useState(undefined);
const [ defaultBranch , setDefaultBranch ] = useState(undefined);
const [ editReadme , setEditReadme ] = useState(false);
const [ pullsFlag , setPullsFlag ] = useState(true);
const [ issuesFlag , setIssuesFlag ] = useState(true);
const [ defaultBranch , setDefaultBranch ] = useState(undefined)
const owner = props.match.params.owner;
const projectsId = props.match.params.projectsId;
let branchName = props.match.params.branchName;
branchName = returnbar(branchName);
const branchName = props.match.params.branchName;
const details = props.projectDetail;
let pathname = props.history.location.pathname;
const { bannerList } = props;
useEffect(()=>{
if(bannerList && bannerList.length>0){
let a = bannerList.filter(i=>i.menu_name === "pulls");
let i = bannerList.filter(i=>i.menu_name === "issues");
if(a && a.length === 0){
setPullsFlag(false);
}
if(i && i.length === 0){
setIssuesFlag(false);
}
}
},[bannerList])
useEffect(()=>{
if(details){
@ -96,7 +61,6 @@ function CoderDepot(props){
setWebsite(details.website);
setLessonUrl(details.lesson_url);
setDefaultBranch(details.default_branch);
setInviteCode(details.invite_code);
}
},[details])
@ -111,16 +75,13 @@ function CoderDepot(props){
useEffect(()=>{
if (projectsId && owner && defaultBranch){
let b = turnbar(branchName) ;
if(pathname.indexOf(`/projects/${owner}/${projectsId}`) > -1 && pathname.indexOf(`/tree/${b}/`) > -1) {
let url = pathname.split(`/tree/${b}/`)[1];
if(pathname.indexOf(`/projects/${owner}/${projectsId}`) > -1 && pathname.indexOf(`/tree/${branchName}/`) > -1) {
let url = pathname.split(`/tree/${branchName}/`)[1];
setTreeValue(url);
getFileInfo(url,branchName);
setType("file");
}else{
setTreeValue(undefined);
getDirInfo(branchName || defaultBranch);
setType("dir");
}
}
},[projectsId,owner,pathname,defaultBranch])
@ -129,7 +90,6 @@ function CoderDepot(props){
function getDirInfo(branch){
setIsSpin(true);
const url = `/${owner}/${projectsId}/entries.json`;
axios.get(url, {
params: { ref: branch }
}).then((result) => {
@ -145,8 +105,6 @@ function CoderDepot(props){
setMainFlag(true);
setReadOnly(true);
setReadme(result.data.readme);
setEditReadme(false);
setHide(true);
}
setTimeout(function(){setIsSpin(false);},500);
}).catch(error=>{setIsSpin(false);})
@ -158,7 +116,7 @@ function CoderDepot(props){
let ele = document.getElementById("ptxt");
if(ele){
let h = ele.offsetHeight;
if( h > 18 ) setHideBtn(true);
if( h > 18 ) setHideBtn(true)
}
}
},[projectDetail,lastCommit])
@ -188,8 +146,7 @@ function CoderDepot(props){
setLastCommit(c && c.commit);
setLastCommitAuthor(c && c.committer);
setMainFlag(false);
setReadOnly(!editReadme);
setHide(true);
setReadOnly(true);
}
setTimeout(function(){setIsSpin(false);},500)
}).catch(error=>{setIsSpin(false);})
@ -197,22 +154,17 @@ function CoderDepot(props){
//
function changeBranch(value){
let checkvalue = turnbar(value);
let url = `/projects/${owner}/${projectsId}${value && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`;
let url = `/projects/${owner}/${projectsId}${value && `/tree/${value}`}${treeValue ? `/${treeValue}`:""}`;
props.history.push(url);
}
//
function fileMenu(){
let b = branchName || defaultBranch;
let checkvalue = turnbar(b);
return (
const fileMenu =(
<Menu>
<Menu.Item><a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/${checkvalue}/uploadfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>上传文件</a></Menu.Item>
<Menu.Item><a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/${checkvalue}/newfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>新建文件</a></Menu.Item>
<Menu.Item><a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/${branchName || defaultBranch}/uploadfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>上传文件</a></Menu.Item>
<Menu.Item><a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/${branchName || defaultBranch}/newfile${treeValue === undefined ? "" : `/${treeValue}`}`)}>新建文件</a></Menu.Item>
</Menu>
)
}
)
function getPathUrl(array,index){
if(array && array.length>0 && index){
@ -227,35 +179,26 @@ function CoderDepot(props){
function returnMain(){
setTreeValue(undefined);
let branch = branchName || defaultBranch;
let checkvalue = turnbar(branch);
props.history.push(`/projects/${owner}/${projectsId}/tree/${checkvalue}`);
props.history.push(`/projects/${owner}/${projectsId}/tree/${branch}`);
};
//
function returnUlr(url){
let enBranch = turnbar(branchName);
props.history.push(`/projects/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`);
props.history.push(`/projects/${owner}/${projectsId}/tree${branchName?`/${branchName}`:""}/${url}`);
}
//
function goToSubRoot(path,type,filename){
if(type!=="submodule"){
let enBranch = branchName || defaultBranch;
let checkvalue = turnbar(enBranch);
setType(type);
props.history.push(`/projects/${owner}/${projectsId}${`/tree/${checkvalue}`}${path?`/${path}`:""}`);
}
setType(type);
props.history.push(`/projects/${owner}/${projectsId}${`/tree/${branchName || defaultBranch}`}${path?`/${path}`:""}`);
}
function onEdit(readOnly){
setReadOnly(readOnly);
setEditReadme(false);
}
function ChangeFile(path, readOnly){
//
let enBranch = branchName || defaultBranch;
let checkvalue = turnbar(enBranch);
props.history.push(`/projects/${owner}/${projectsId}/tree/${checkvalue}/${path}`);
props.history.push(`/projects/${owner}/${projectsId}/tree/${branchName || defaultBranch}/${path}`);
setType("file");
setEditReadme(true);
setReadOnly(readOnly);
};
function changeHide(hide){
@ -271,12 +214,17 @@ function CoderDepot(props){
}
const downloadMenu = (
<CloneAddress
http_url={projectDetail && projectDetail.clone_url}
ssh_url = {projectDetail && projectDetail.ssh_url}
zip_url={zip_url}
tar_url={tar_url}
showNotification={props.showNotification}/>
<div className="downMenu">
<div style={{padding:"20px",borderBottom:"1px solid #eee"}}>
<CloneAddress
http_url={projectDetail && projectDetail.clone_url}
showNotification={props.showNotification}/>
</div>
<Menu className="edu-txt-center">
<Menu.Item><a href={zip_url}>下载 ZIP</a></Menu.Item>
<Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>
</Menu>
</div>
)
// website
function okUpdate(d,w,l){
@ -295,8 +243,8 @@ function CoderDepot(props){
const mdFlag = n && n.substring(n.length-3,n.length) === ".md";
const { current_user } = props;
const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter";
const fileOperate = type === "dir" && projectDetail && projectDetail.type !== 2 && ((projectDetail.permission && projectDetail.permission !=="Reporter") || (current_user && current_user.admin));
const fileOperate = type === "dir" && projectDetail && projectDetail.type !== 2 && (projectDetail.permission !=="Reporter" || (current_user && current_user.admin));
return(
<WhiteBack>
<UpdateDescModal desc={desc} website={website} lesson_url={lesson_url} visible={openModal} onCancel={()=>setOpenModal(false)} onOk={okUpdate}/>
@ -315,7 +263,7 @@ function CoderDepot(props){
list = {mainFlag ? dirInfo : undefined}
/>
<div className="drawerBtn" onClick={()=>setVisible(true)}>
<i className="iconfont icon-zuohuaicon font-14"></i>
<i className="iconfont icon-youjiantou font-16"></i>
<span>目录</span>
</div>
</React.Fragment>
@ -328,7 +276,7 @@ function CoderDepot(props){
<div className="panelmenu">
<FlexAJ>
<AlignCenter>
<div className="mr30">
<div className="mr20">
{
props && props.platform ?
<SelectBranch
@ -345,37 +293,34 @@ function CoderDepot(props){
}
</div>
<AlignCenter className="mr20">
<Link to={`/projects/${owner}/${projectsId}/branchs`} className="depotNum">
<i className="iconfont icon-master_icon font-14 mr3"></i>
<span className="mr3">分支</span>
<span>{projectDetail && projectDetail.branches && projectDetail.branches.total_count}</span>
<Link to={`/projects/${owner}/${projectsId}/branchs`} className="color-grey-9">
<i className="iconfont icon-fenzhi2 font-18 color-grey-9 mr3"></i>
<span className="color-grey-6 mr3">{projectDetail && projectDetail.branches && projectDetail.branches.total_count}</span>分支
</Link>
</AlignCenter>
<AlignCenter className="mr20">
<Link to={`/projects/${owner}/${projectsId}/tag`} className="depotNum">
<i className="iconfont icon-biaoqianicon font-14 mr3"></i>
<span className="mr3">标签</span>
<span>{projectDetail && projectDetail.tags && projectDetail.tags.total_count}</span>
<Link to={`/projects/${owner}/${projectsId}/tag`} className="color-grey-9">
<i className="iconfont icon-biaoqian3 font-16 color-grey-9 mr3"></i>
<span className="color-grey-6 mr3">{projectDetail && projectDetail.tags && projectDetail.tags.total_count}</span>标签
</Link>
</AlignCenter>
</AlignCenter>
<AlignCenter className="depotBtn">
{
baseOperate && projectDetail.type !== 2 && pullsFlag &&
<Button type="default" onClick={()=>urlLink(`/projects/${owner}/${projectsId}/pulls/new`)} className="mr10"><i className="iconfont icon-xinjian2 font-12 mr3"></i> 合并请求</Button>
}
{
baseOperate && issuesFlag &&
<Button type="default" onClick={()=>urlLink(`/projects/${owner}/${projectsId}/issues/new`)} className="mr10"><i className="iconfont icon-xinjian2 font-12 mr3"></i> 任务</Button>
}
<AlignCenter>
<div className="mr20 addOptionBtn">
{
projectDetail.type !== 2 &&
<a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/pulls/new`)} >+ 合并请求</a>
}
<a onClick={()=>urlLink(`/projects/${owner}/${projectsId}/issues/new`)} >+ 任务</a>
</div>
{ fileOperate &&
<Dropdown overlay={fileMenu()} className="mr10" trigger={['click']}>
<Button type="default">文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-6 mr-5"></i></Button>
<Dropdown overlay={fileMenu} className="mr20" trigger={['click']}>
<Button type="default">文件 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-grey-9"></i></Button>
</Dropdown>
}
<Dropdown overlay={downloadMenu} placement="bottomRight" trigger={['click']}>
<Button type={'primary'}>下载 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-white mr-3"></i></Button>
<Button type={'primary'}>下载 <i className="iconfont icon-sanjiaoxing-down ml3 font-14 color-white"></i></Button>
</Dropdown>
</AlignCenter>
</FlexAJ>
@ -386,18 +331,11 @@ function CoderDepot(props){
lastCommit &&
<div className="listtablehead">
<User url={getImageUrl(`/${lastCommitAuthor && lastCommitAuthor.image_url}`)} name={lastCommitAuthor && lastCommitAuthor.name} id={lastCommitAuthor && lastCommitAuthor.id} login={lastCommitAuthor && lastCommitAuthor.login}/>
<div className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}>
<pre id="ptxt">{lastCommit && lastCommit.message}</pre>
</div>
<div className={hideBtn && hide ? "ellipsistxt hide" :"ellipsistxt"}><pre id="ptxt">{lastCommit && lastCommit.message}</pre></div>
{ hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> }
<span className="ml20 color-grey-9 mt1">{lastCommit && lastCommit.time_from_now}</span>
{
commitCount ?
<Link to={`/projects/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-9" style={{height:"30px",lineHeight:"30px"}}>
<i className="iconfont icon-tijiaoicon mr3 font-16"></i>{commitCount}次提交
</Link>:""
}
<span className="ml12 color-grey-9 mt3">{lastCommit && lastCommit.time_from_now}</span>
{ commitCount ? <Link to={`/projects/${owner}/${projectsId}/commits`} className="ml12 color-grey-9"><i className="iconfont icon-tijiao mr3 font-17 color-grey-9"></i>{commitCount}次提交</Link>:"" }
</div>
}
<ul className="listtablebody">
@ -434,7 +372,7 @@ function CoderDepot(props){
onEdit={onEdit}
currentBranch={branchName || defaultBranch}
type={projectDetail.type}
></CoderRootFileDetail>[[]]
></CoderRootFileDetail>
}
</ul>
</div>
@ -452,48 +390,39 @@ function CoderDepot(props){
<ShortWidth>
<Gap style={{paddingLeft:"30px"}}>
<div className="panelmenu">
<FlexAJ className="font-16 color-ooo mb10" style={{lineHeight:"22px"}}>关于
{projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner") &&
<a className="color-grey-6" href="javascript:void(0)"><i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi font-15"></i></a>
}
<FlexAJ className="font-18 color-grey-6 mb20" style={{lineHeight:"28px"}}>简介
{projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner") && <i onClick={()=>setOpenModal(true)} className="iconfont icon-anquanshezhi color-grey-9 font-15"></i>}
</FlexAJ>
{desc && <p className="font-14 color-grey-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}}>{desc}</p>}
{desc && <p className="font-14 color-grey-9 mb15 task-hide-2" style={{lineHeight:"22px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}}>{desc}</p>}
{
website &&
<div className="color-grey-6 df pinfos mb5">
<i className="iconfont icon-lianjie2 font-15 mr10"></i>
<a href={website} target="_blank" style={{wordBreak:"break-all",lineHeight:"20px",marginTop:"5px",textDecoration:"underline"}}>{website}</a>
</div>
<p className="color-grey-6 df">
<i className="iconfont icon-lianjie2 font-15 mr10 color-grey-9"></i>
<a href={website} className="color-grey-6" target="_blank" style={{wordBreak:"break-all",lineHeight:"20px",marginTop:"5px",textDecoration:"underline"}}>{website}</a>
</p>
}
<div className="pinfos mb5">
<i className="iconfont icon-zishuwenjian_icon font-15 mr10"></i>
<a href="#readme">README.md</a>
</div>
<div className="color-grey-6 mb5">
<i className="iconfont icon-neicunicon font-15 mr10"></i>
<p>
<i className="iconfont icon-wenjian4 font-15 mr10 color-grey-9"></i>
<a href="#readme" className="color-grey-6">README.md</a>
</p>
<p className="color-grey-6">
<i className="iconfont icon-dataBase font-15 mr10 color-grey-6"></i>
<span>{projectDetail && projectDetail.size}</span>
</div>
</p>
{
projectDetail && projectDetail.license_name &&
<div>
<i className="iconfont icon-xieyiicon font-16 mr10 color-grey-6"></i>
<span className="color-grey-6">{projectDetail.license_name}</span>
</div>
<p className="color-grey-6">
<i className="iconfont icon-tianping font-16 mr10 color-grey-3"></i>
<span>{projectDetail.license_name}</span>
</p>
}
</div>
{
inviteCode &&
<div>
<Divider />
<Invite code={inviteCode}/>
</div>
}
{
lesson_url &&
<div>
<Divider />
<p className="font-16 color-ooo">实践课程</p>
<a href={lesson_url} target="_blank" className="color-grey-6" style={{textDecoration:"underline",wordBreak:"break-all"}}>{lesson_url}</a>
<p className="font-16 color-grey-6">实践课程</p>
<a href={lesson_url} target="_blank" className="color-grey-6" style={{textDecoration:"underline"}}>{lesson_url}</a>
</div>
}
{/* 发布 */}
@ -501,25 +430,13 @@ function CoderDepot(props){
projectDetail && projectDetail.release_versions &&
<React.Fragment>
<Divider />
<Releases
owner={owner}
projectsId={projectsId}
releaseVersions={projectDetail.release_versions}
history={props.history}
baseOperate={baseOperate}
projectType={projectDetail.type}
/>
<Releases owner={owner} projectsId={projectsId} releaseVersions={projectDetail.release_versions} history={props.history}/>
</React.Fragment>
}
{/* 贡献者 */}
{
projectDetail && projectDetail.contributors &&
<Contributors
contributors={projectDetail && projectDetail.contributors}
owner={owner}
projectsId={projectsId}
currentLogin={current_user && current_user.login}
/>
<Contributors contributors={projectDetail && projectDetail.contributors} owner={owner} projectsId={projectsId} />
}
{/* 语言 */}
{ projectDetail && projectDetail.languages &&

View File

@ -2,18 +2,12 @@ import React from 'react';
import { Link } from 'react-router-dom';
import { truncateCommitId } from '../common/util';
const typeIco = {
"submodule":"icon-file-submodule font-17",
"file":'icon-wenjian6 font-15',
"dir":"icon-wenjianjia4 font-15"
}
function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){
return(
<li>
<span>
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}>
<i className={`iconfont ${typeIco[`${item.type}`]} color-blue-file mr8`}></i>{item.name}
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)}>
<i className={item.type === 'dir' ? "iconfont icon-wenjianjia1 color-green-file font-15 mr5":"iconfont icon-wenjia color-green-file font-15 mr5"}></i>{item.name}
</a>
</span>
<span title="init project">

View File

@ -1,9 +1,7 @@
import React, { useEffect, useState } from 'react';
import RenderHtml from '../../components/render-html';
import { AlignCenter } from '../Component/layout';
import { Dropdown , Anchor , Spin } from 'antd';
import ReadmeCatelogue from './sub/ReadmeCatelogue';
import { Dropdown , Menu , Spin } from 'antd';
import { Link } from 'react-router-dom';
const $ = window.$;
function CoderDepotReadme({ operate , history , readme , ChangeFile }){
@ -24,43 +22,44 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
const anchor = el.id;
const level = el.tagName.replace("H", "");
const href = `#${anchor}`;
return { href:`${href}`,text:el.textContent , level:level }
return { href:`${path}${href}`,text:el.textContent , level:level }
});
setMenuList(items);
},[content])
function menu(){
if(menuList && menuList.length > 0){
let hash = history.location.hash;
return(
<ReadmeCatelogue menuList={menuList} hash={history.location.hash}/>
<Menu className="menuslist">
{
menuList.map((item,key)=>{
return(
<Menu.Item key={item.id} className={decodeURI(hash).indexOf(item.text)>-1 ?"active":""}><Link to={`${item.href}`} style={{paddingLeft:`${item.level *10}px`}} title={item.text}>{item.text}</Link></Menu.Item>
)
})
}
</Menu>
)
}else{
return <Spin />
}
}
return(
<div className="commonBox readBox" id="readme">
<Anchor offsetTop={70} targetOffset={160}>
<div className="commonBox-title boxTitle">
<AlignCenter>
<Dropdown overlay={menu()} trigger={['hover']} overlayClassName="menuslist">
<span className="catelogue">
<i className="iconfont icon-muluicon font-12 mr5"></i>
<span>目录</span>
</span>
</Dropdown>
<span className="commonBox-title-read">README.md</span>
</AlignCenter>
{
operate ?
<a className="ml20 pull-right" onClick={() =>ChangeFile(readme && readme.path, false)}>
<i className="iconfont icon-a-bianji font-17 color-grey-6"></i>
</a>
:""
}
</div>
</Anchor>
<div className="commonBox" id="readme">
<div className="commonBox-title">
<Dropdown overlay={menu()}>
<i className="iconfont icon-zhangjie1 font-16 color-grey-3 mr10"></i>
</Dropdown>
<span className="commonBox-title-read">README.md</span>
{
operate ?
<a className="ml20 pull-right" onClick={() =>ChangeFile(readme && readme.path, false)}>
<i className="iconfont icon-bianji6 font-16 color-blue"></i>
</a>
:""
}
</div>
{
content &&
<div className="commonBox-info">

View File

@ -4,20 +4,14 @@ import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd';
import { truncateCommitId } from '../common/util';
import { getBranch } from '../GetData/getData';
import Nodata from '../Nodata';
import './list.scss';
import './list.css';
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
export default ((props)=>{
const [ data , setData ] =useState(undefined);
const [ isSpin , setIsSpin ] =useState(true);
const { projectsId , owner } = props.match.params;
const { isManager , isDeveloper , projectDetail } = props;
useEffect(()=>{
getBranchs(projectsId, owner);
},[projectsId])
@ -38,7 +32,7 @@ export default ((props)=>{
return(
<li key={key}>
<div>
<Link to={`/projects/${owner}/${projectsId}/tree/${turnbar(item.name)}`} className="color-blue font-15" style={{"maxWidth":"100px"}}>{item.name}</Link>
<Link to={`/projects/${owner}/${projectsId}/tree/${item.name}`} className="color-blue font-15" style={{"maxWidth":"100px"}}>{item.name}</Link>
<p className="f-wrap-alignCenter mt15">
<Link to={`/projects/${owner}/${projectsId}/commits/${truncateCommitId(`${item.last_commit.sha}`)}`} className="mr5 commitKey" style={{marginLeft:0}}>{item.last_commit && truncateCommitId(item.last_commit.sha)}</Link>
<span className="color-grey-3 hide-1 messages leftPoint">{item.last_commit && item.last_commit.message}</span>
@ -46,10 +40,7 @@ export default ((props)=>{
</p>
</div>
<span>
{
(isManager || isDeveloper) && (projectDetail && projectDetail.type!==2) &&
<Link to={`/projects/${owner}/${projectsId}/pulls/new/${item.name}`} className="mr20 color-blue mr30">创建合并请求</Link>
}
<Link to={`/projects/${owner}/${projectsId}/pulls/new/${item.name}`} className="mr20 color-blue mr30">创建合并请求</Link>
<Dropdown overlay={menu(item.zip_url,item.tar_url)} trigger={['click']} placement="bottomRight" className="color-green-file">
<a className="ant-dropdown-link">
<Tooltip title={`下载分支${item.name}`}><Icon type="cloud-download" className="font-18"/></Tooltip>
@ -73,7 +64,6 @@ export default ((props)=>{
<Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
</Menu>
)
return(
<React.Fragment>
<div className="main">

View File

@ -2,19 +2,12 @@ import React , { Component } from 'react';
import { Spin , Pagination } from 'antd';
import { getImageUrl } from 'educoder';
import { truncateCommitId } from '../common/util';
import { AlignTop } from '../Component/layout';
import SelectBranch from '../Branch/Select';
import Nodata from '../Nodata';
import axios from 'axios';
import {Link} from "react-router-dom";
function returnbar(str){
if(str && str.length>0 && str.indexOf("%2F")>-1){
return str.replaceAll('%2F','/');
}
return str;
}
class CoderRootCommit extends Component{
constructor(props){
super(props)
@ -63,12 +56,11 @@ class CoderRootCommit extends Component{
this.setState({
isSpining:true
})
console.log(returnbar(branch));
const { projectsId , owner } = this.props.match.params;
const url = `/${owner}/${projectsId}/commits.json`;
axios.get(url,{
params:{
sha:returnbar(branch),
sha:branch,
page,
limit
}
@ -113,7 +105,7 @@ class CoderRootCommit extends Component{
const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state;
const { projectDetail, commit_class , defaultBranch } = this.props;
const { projectsId , owner , branchName } = this.props.match.params;
let branch = returnbar(branchName || defaultBranch);
let branch = branchName || defaultBranch;
return(
<React.Fragment>
<div className={"main"}style={{padding:"0px",border:"none"}}>
@ -140,10 +132,10 @@ class CoderRootCommit extends Component{
commitDatas && commitDatas.length > 0 && commitDatas.map((item,k)=>{
return(
<div key={k}>
<AlignTop>
<Link to={`/projects/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="commitKey" style={{marginLeft:0,marginTop:"3px"}}>{truncateCommitId(`${item.sha}`)}</Link>
<Link to={`/projects/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="commitDesc">{item.message}</Link>
</AlignTop>
<p className="f-wrap-alignCenter">
<Link to={`/projects/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="commitKey" style={{marginLeft:0}}>{truncateCommitId(`${item.sha}`)}</Link>
<Link to={`/projects/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="flex1 ml20 font-16 color-grey-3">{item.message}</Link>
</p>
<p className="f-wrap-alignCenter mt15">
{
item.id ?

View File

@ -1,6 +1,6 @@
import React, { Component } from "react";
import { Popconfirm , Select } from "antd";
import "./list.scss";
import "./list.css";
import axios from "axios";
import Meditor from "../Newfile/m_editor";
import RenderHtml from "../../components/render-html";
@ -285,7 +285,6 @@ class CoderRootFileDetail extends Component {
readOnly={readOnly}
editorType="update"
currentBranch={currentBranch}
descName={detail && `Update ${detail.name}`}
></Meditor>
)}
</div>

View File

@ -102,11 +102,6 @@ class CoderRootIndex extends Component{
(props) => (<FileNew {...this.props} {...props} {...this.state} getTopCount={this.getTopCount} />)
}
></Route>
<Route path="/projects/:owner/:projectsId/commits/branch/:branchName"
render={
() => (<CoderRootCommit {...this.props} {...this.state} commit_class="main" getTopCount={this.getTopCount} />)
}
></Route>
<Route path="/projects/:owner/:projectsId/commits/:sha"
render={
(props) => (<Diff {...this.props} {...props} {...this.state}/>)

View File

@ -1,11 +1,11 @@
import React, { Component } from 'react';
import { Spin, Tooltip, Button } from 'antd';
import { Spin, Tooltip , message } from 'antd';
import { Link, Route, Switch } from 'react-router-dom';
import { Content , AlignTop, AlignCenter } from '../Component/layout';
import { Content , FlexAJ } from '../Component/layout';
import DetailBanner from './sub/DetailBanner';
import { numFormat } from 'educoder';
import Invite from './sub/Invite';
import '../css/index.scss'
import './list.scss';
import './list.css';
import Loadable from 'react-loadable';
import Loading from '../../Loading';
@ -128,15 +128,7 @@ const Source = Loadable({
const DevIndex = Loadable({
loader: () => import('../DevOps/Index'),
loading: Loading,
});
const Wiki = Loadable({
loader: () => import('../Wiki/Index'),
loading: Loading,
});
const WikiEdit = Loadable({
loader: () => import('../Wiki/EditWiki'),
loading: Loading,
});
})
/**
* permissionManager:管理员Reporter报告人员(只有读取权限)Developer开发人员除不能设置仓库信息外
*/
@ -160,8 +152,6 @@ function checkPathname(projectsId,owner,pathname){
name="devops"
}else if(url.indexOf(`/source`)>-1){
name="source"
}else if(url.indexOf(`/wiki`)>-1){
name="wiki"
}
}
return name;
@ -187,7 +177,6 @@ class Detail extends Component {
firstSync:false,
secondSync:false,
open_devops:false,
forkSpin:false,
// 默认分支
defaultBranch:undefined,
@ -226,7 +215,7 @@ class Detail extends Component {
if(num){
this.setState({
secondSync:true,
firstSync:false
firsrtSync:false
})
}else{
this.setState({
@ -237,7 +226,7 @@ class Detail extends Component {
}else{
this.getDetail();
this.setState({
firstSync:false,
firsrtSync:false,
secondSync:false
})
}
@ -258,7 +247,7 @@ class Detail extends Component {
var cable = actioncable.createConsumer(`wss://${name}/cable`);
this.canvasChannel1 = cable.subscriptions.create({
channel: `MirrorProjectChannel`,
id: project && project.id
id: project && project.identifier
}, {
connected: () => {
console.log("###### channel connected! ######");
@ -268,10 +257,6 @@ class Detail extends Component {
console.log(`###### ---received data--- ######`);
if (data) {
this.getDetail();
this.setState({
firstSync:false,
secondSync:false
});
cable.subscriptions.consumer.disconnect();
}
}
@ -374,9 +359,6 @@ class Detail extends Component {
forkFunc = () => {
const { platform } = this.state;
if(!platform)return;
this.setState({
forkSpin:true
})
const { current_user } = this.props
const { projectsId , owner } = this.props.match.params;
const url = `/${owner}/${projectsId}/forks.json`;
@ -385,13 +367,8 @@ class Detail extends Component {
this.props.history.push(`/projects/${current_user && current_user.login}/${result.data.identifier}`);
this.props.showNotification(result.data.message);
}
this.setState({
forkSpin:false
})
}).catch(error => {
this.setState({
forkSpin:false
})
console.log(error);
})
}
@ -414,22 +391,21 @@ class Detail extends Component {
}
textFunc = (forked_from_project_id,fork_info)=>{
let type = fork_info && fork_info.fork_project_user_type;
return forked_from_project_id && fork_info ?
<div className="color-grey-9 df">
<span>复刻自</span>
<Link to={`${type ==="Organization" ? "/organize":'/users'}/${fork_info.fork_project_user_login}`} className="show-user-link color-grey-6 ml5">{fork_info.fork_project_user_name}</Link>
<div className="color-grey-9">
<span>forked from </span>
<Link to={`/users/${fork_info.fork_project_user_login}`} className="show-user-link color-grey-6">{fork_info.fork_project_user_name}</Link>
<span> / </span>
<Link to={`/projects/${fork_info.fork_project_user_login}/${fork_info.fork_project_identifier}`} className="color-grey-6 task-hide flex1" style={{maxWidth:"400px"}} title={fork_info.fork_form_name}>{fork_info.fork_form_name}</Link>
<Link to={`/projects/${fork_info.fork_project_user_login}/${fork_info.fork_project_identifier}`} className="color-grey-6">{fork_info.fork_form_name}</Link>
</div> : ""
}
render() {
const { projectDetail, watchers_count, praises_count,
forked_count, firstSync , secondSync ,
isManager, watched, praised,
project , open_devops , platform , defaultBranch , bannerList , forkSpin } = this.state;
project , open_devops , platform , defaultBranch , bannerList } = this.state;
const url = this.props.history.location.pathname;
const urlArr = url.split("/");
const urlFlag = (urlArr.length === 3);
@ -449,92 +425,102 @@ class Detail extends Component {
<div>
<div className="detailHeader-wrapper">
<div className="normal">
<AlignCenter style={{paddingTop:"20px",justifyContent:"space-between"}}>
<AlignTop>
<div className="projectallName">
{project && project.author &&
<Link to={`${project.author.type ==="Organization" ? "/organize":'/users'}/${project.author.login}`} title={project.author.name}>{project.author.name}</Link>
}
<span className="ml5 mr5">/</span>
<Link to={`/projects/${owner}/${projectsId}`} className="projectN" title={projectDetail && projectDetail.name}>{projectDetail && projectDetail.name}</Link>
</div>
{ projectDetail && projectDetail.private && <span className="privateTag">私有</span>}
</AlignTop>
<div>
{
firstSync ? "":
<span className="df">
{
((current_user && current_user.admin) || isManager) && (projectDetail && projectDetail.type && projectDetail.type === 2) ?
<a size="middle" className="synchronism ml30" onClick={this.synchronismMirror}>同步镜像</a> : ""
}
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.focusFunc(watched)}>
<i className={watched ? "iconfont icon-quxiaoguanzhu color-blue font-14 mr3":"iconfont icon-morenguanzhu_ICON color-grey-9 font-14 mr3"}></i>
<span>{watched ? '取消关注' : '关注'}</span>
</a>
{
watchers_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" to={platform?{ pathname: `/projects/${owner}/${projectsId}/watchers`, state }:""}>
{numFormat(watchers_count)}
</Link>
:
<span className="detail_tag_btn_count">{watchers_count}</span>
:""
}
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.pariseFunc(praised)}>
<i className={praised ? "iconfont icon-dianzan_icon color-blue font-14 mr3":"iconfont icon-guanzhu color-grey-9 font-14 mr3"}></i>
<span>{praised ? '取消点赞' : '点赞'}</span>
</a>
{
praises_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" to={{ pathname: `/projects/${owner}/${projectsId}/stargazers`, state }}>
{numFormat(praises_count)}
</Link>:
<span className="detail_tag_btn_count">{praises_count}</span>
:""
}
</span>
<span className="detail_tag_btn" loading={forkSpin}>
<Tooltip title="复刻是fork的中文名即复制代码仓库" placement="bottom">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={this.forkFunc}>
<i className="iconfont icon-fork color-grey-9 mr3 font-16"></i>
<span>复刻</span>
</a>
</Tooltip>
{
forked_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" to={{ pathname: `/projects/${owner}/${projectsId}/fork_users`, state }}>
{numFormat(forked_count)}
</Link>
:
<span className="detail_tag_btn_count">{forked_count}</span>
:""
}
</span>
</span>
<div className="f-wrap-between" style={{ position: "relative" }}>
<p className="font-22 df flex-1 lineH2 mt15" style={{ alignItems: "center" }}>
{project && project.author &&
<Link to={`${project.author.type ==="Organization" ? "/organize":'/users'}/${project.author.login}`} className="show-user-link">
{project.author.name}
</Link>
}
</div>
</AlignCenter>
<div className="mt6" style={{minHeight:"20px"}}>
<span className="ml5 mr5">/</span>
<span className="hide-1 flex-1 df">
<Link to={`/projects/${owner}/${projectsId}`} className="font-22">{project && project.name}</Link>
{
projectDetail && projectDetail.type && projectDetail.type !== 0 ?
projectDetail.type === 2 ?
<Tooltip title={"镜像自: " + projectDetail.mirror_url} className="ml5" placement={'right'}>
<i className="iconfont icon-banbenku font-18 mt6" style={{ color: "#8D90E3" }}/>
</Tooltip>
:
<Tooltip title={"镜像自: " + projectDetail.mirror_url} className="ml5" placement={'right'}>
<i className="iconfont icon-jingxiang font-18 color-green mt6" />
</Tooltip>
:""
}
</span>
</p>
{
projectDetail && projectDetail.forked_from_project_id && projectDetail.fork_info ?
this.textFunc(projectDetail.forked_from_project_id,projectDetail.fork_info)
:""
}
{
projectDetail && projectDetail.type && projectDetail.type !== 0 ?
<span className="color-grey-9">镜像自 <a className="color-blue hoverLine" target="_blank" href={projectDetail.mirror_url}>{projectDetail.mirror_url}</a></span>
:""
firstSync ? "":
<span className="df mt25">
{
((current_user && current_user.admin) || isManager) && (projectDetail && projectDetail.type && projectDetail.type === 2) ?
<a className="synchronism ml30" onClick={this.synchronismMirror}>同步镜像</a> : ""
}
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.focusFunc(watched)}>
<i className={watched ? "iconfont icon-shixing color-orange font-16 mr3":"iconfont icon-kongxing color-grey-9 font-16 mr3"}></i>
<span>{watched ? '取消关注' : '关注'}</span>
</a>
{
watchers_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" style={{color:`${watched?"#2878FF":"#666"}`}} to={platform?{ pathname: `/projects/${owner}/${projectsId}/watchers`, state }:""}>
{watchers_count}
</Link>
:
<span className="detail_tag_btn_count">{watchers_count}</span>
:""
}
</span>
<span className="detail_tag_btn">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.pariseFunc(praised)}>
<i className={praised ? "iconfont icon-weibiaoti105 color-orange font-14 mr3":"iconfont icon-guanzhu color-grey-9 font-14 mr3"}></i>
<span>{praised ? '取消点赞' : '点赞'}</span>
</a>
{
praises_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" style={{color:`${praised?"#2878FF":"#666"}`}} to={{ pathname: `/projects/${owner}/${projectsId}/stargazers`, state }}>
{praises_count}
</Link>:
<span className="detail_tag_btn_count">{praises_count}</span>
:""
}
</span>
<span className="detail_tag_btn">
<Tooltip title="复刻是fork的中文名即复制代码仓库" placement="bottom">
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={this.forkFunc}>
<i className="iconfont icon-fork color-grey-9 mr3"></i>
</a>
</Tooltip>
{
forked_count > 0 ?
platform ?
<Link className="detail_tag_btn_count" to={{ pathname: `/projects/${owner}/${projectsId}/fork_users`, state }}>
{forked_count}
</Link>
:
<span className="detail_tag_btn_count">{forked_count}</span>
:""
}
</span>
</span>
}
</div>
<FlexAJ>
<div>
{
projectDetail && projectDetail.forked_from_project_id && projectDetail.fork_info ?
this.textFunc(projectDetail.forked_from_project_id,projectDetail.fork_info)
:""
}
</div>
{
projectDetail && projectDetail.invite_code &&
<Invite code={projectDetail.invite_code} />
}
</FlexAJ>
{
firstSync ? "" :
<DetailBanner
@ -573,24 +559,6 @@ class Detail extends Component {
() => (<DevAbout {...this.props} {...this.state} {...common} />)
}
></Route>
{/* wiki新增文件 */}
<Route path="/projects/:owner/:projectsId/wiki/add"
render={
() => (<WikiEdit {...this.props} {...this.state} {...common} />)
}
></Route>
{/* wiki编辑文件 */}
<Route path="/projects/:owner/:projectsId/wiki/edit/:wikiName"
render={
() => (<WikiEdit {...this.props} {...this.state} {...common} />)
}
></Route>
{/* wiki */}
<Route path="/projects/:owner/:projectsId/wiki"
render={
() => (<Wiki {...this.props} {...this.state} {...common} />)
}
></Route>
{/* 工作流 */}
<Route path="/projects/:owner/:projectsId/devops"
render={

View File

@ -1,420 +0,0 @@
.recommandOri.slick-slider {
width: 1300px;
margin: 20px auto 40px;
}
.recommandOri.slick-slider .slick-track {
margin-left: 0px;
}
.recommandOri.slick-slider .slick-slide li > a {
display: flex;
align-items: center;
justify-content: center;
}
/* recommandProjects */
.recommandProjects.slick-slider {
width: 1230px;
margin: 20px auto 40px;
}
.recommandProjects.slick-slider .slick-track {
margin-left: 0px;
}
.recommandProjects.slick-slider .slick-arrow.slick-prev:before, .recommandProjects.slick-slider .slick-arrow.slick-next:before {
color: #999;
}
.recommandProjects.slick-slider .slick-arrow.slick-prev li.slick-active button:before, .recommandProjects.slick-slider .slick-arrow.slick-next li.slick-active button:before {
color: #999;
}
.recommandProjects.slick-slider .slick-dots {
bottom: -29px;
}
.recommandProjects.slick-slider .slick-dots li button:before {
color: #909090;
}
.recommandProjects.slick-slider .slick-slide {
padding: 0px 15px;
box-sizing: border-box;
}
.recommandProjects.slick-slider .slick-slide > div {
background-color: #fff;
border-radius: 10px;
width: 100%;
cursor: pointer;
border: 1px solid #eee;
}
.recommandProjects.slick-slider .slick-slide > div:hover {
box-shadow: 0px 2px 20px 0px rgba(0, 0, 0, 0.1);
}
.recommandProjects.slick-slider .baseInfo {
padding: 18px 15px;
display: flex;
font-size: 12px;
color: #888;
}
.recommandProjects.slick-slider .baseInfo .look {
margin-right: 10px;
}
.recommandProjects.slick-slider .baseInfo .look i {
margin-right: 5px;
}
.recommandProjects.slick-slider .baseInfo .type {
flex: 1;
width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: right;
}
.recommandProjects.slick-slider .mainInfo {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 160px;
border-bottom: 1px solid #eee;
padding: 20px;
box-sizing: border-box;
}
.recommandProjects.slick-slider .mainInfo img {
height: 50px;
width: 50px;
border-radius: 50%;
}
.recommandProjects.slick-slider .mainInfo .name {
font-size: 13px;
color: #666;
height: 18px;
line-height: 18px;
margin-top: 12px;
}
.recommandProjects.slick-slider .mainInfo .school {
margin-top: 12px;
color: #333;
font-size: 16px;
height: 22px;
line-height: 22px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 100%;
}
.Panels {
max-width: 1200px;
margin: 0 auto;
}
.Panels .panelmenu {
padding-top: 30px;
}
.Panels .panelmenu .depotBtn .mr-5 {
margin-right: -5px;
}
.Panels .panelmenu .depotBtn .ant-btn {
height: 36px;
line-height: 34px;
width: 83px;
text-align: center;
padding: 0px;
font-weight: 500;
font-size: 14px;
}
.Panels .panelmenu .depotBtn .ant-btn-default {
color: #333;
border-color: #d0d0d0;
}
.Panels .panelmenu .depotBtn .ant-btn-default:hover {
background: #F3F4F6;
}
.Panels .panelmenu .depotBtn .ant-btn-primary {
color: #fff;
background-color: #466AFF;
opacity: 0.8;
}
.Panels .addOptionBtn {
height: 32px;
line-height: 30px;
display: flex;
border: 1px solid #d9d9d9;
border-radius: 2px;
}
.Panels .addOptionBtn a {
padding: 0px 13px;
color: rgba(0, 0, 0, 0.65);
cursor: pointer;
}
.Panels .addOptionBtn > a:first-child {
border-right: 1px solid #d9d9d9;
}
.Panels .addOptionBtn > a:last-child {
border-right: none;
}
.Panels .infoCount {
display: inline-block;
width: 24px;
text-align: center;
height: 24px;
line-height: 24px;
background-color: rgba(153, 153, 153, 0.13);
color: #666;
border-radius: 12px;
margin-left: 6px;
font-size: 12px;
}
.Panels .attrPerson {
padding-top: 12px;
display: flex;
flex-wrap: wrap;
padding-bottom: 2px;
}
.Panels .attrPerson a {
margin: 0px 17px 0px 0px;
}
.Panels .attrPerson a img {
border-radius: 50%;
width: 40px;
height: 40px;
}
.Panels .attrPerson a:nth-child(6) {
margin-right: 0px;
}
.Panels .progress {
display: flex;
border-radius: 10px;
height: 7px;
margin-top: 12px;
}
.Panels .progress span:first-child {
border-radius: 10px 0px 0px 10px;
}
.Panels .progress span:last-child {
border-radius: 0px 10px 10px 0px;
}
.Panels .progresstip {
margin-top: 15px;
flex-wrap: wrap;
}
.Panels .progresstip i.zero {
position: absolute;
display: block;
border-radius: 50%;
height: 8px;
width: 8px;
left: 0px;
top: 10px;
}
.Panels .progresstip > span {
padding-left: 15px;
position: relative;
min-width: 33.5%;
font-size: 12px;
font-weight: 400;
color: #666;
}
.Panels .progresstip > span span:last-child {
margin-left: 5px;
}
.Panels .listtable {
margin-top: 20px;
}
.Panels .listtable .listtablehead {
height: 55px;
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid #d9d9d9;
padding: 13px 20px;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
background-color: #FAFCFF;
}
.Panels .listtable .listtablehead .ellipsistxt {
margin-top: 6px;
margin-left: 13px;
line-height: 18px;
flex: 1;
width: 0;
color: #666;
}
.Panels .listtable .listtablehead .ellipsistxt #ptxt {
margin-bottom: 0px;
word-break: break-all;
overflow: unset;
white-space: pre-wrap;
/* css3.0 */
white-space: -moz-pre-wrap;
/* Firefox */
white-space: -pre-wrap;
/* Opera 4-6 */
white-space: -o-pre-wrap;
/* Opera 7 */
word-wrap: break-word;
}
.Panels .listtable .listtablehead .ellipsistxt.hidetxt {
height: 18px;
overflow: hidden;
position: relative;
padding-right: 8px;
}
.Panels .listtable .listtablehead .ellipsis {
margin-left: 8px;
cursor: pointer;
border-radius: 2px;
height: 16px;
background: rgba(153, 153, 153, 0.2);
border-radius: 2px;
padding: 0px 4px;
height: 14px;
line-height: 14px;
margin-top: 9px;
}
.Panels .listtable .listtablehead .ellipsis i {
font-size: 15px !important;
color: #333;
height: 14px;
line-height: 14px;
}
.Panels .listtable .listtablebody {
border-radius: 0px 0px 4px 4px;
border: 1px solid #D0D0D0;
border-top: none;
}
.Panels .listtable .listtablebody li.listtablepath a {
color: #40a9ff;
}
.Panels .listtable .listtablebody li.listtablepath p {
margin-bottom: 0px !important;
}
.Panels .listtable .listtablebody > li {
height: 38px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #d9d9d9;
padding: 0px 20px 0px 24px;
}
.Panels .listtable .listtablebody > li:hover {
background-color: #F3F4F6;
}
.Panels .listtable .listtablebody > li > span:first-child {
width: 30%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.Panels .listtable .listtablebody > li > span:nth-child(2) {
width: 60%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.Panels .listtable .listtablebody > li > span:nth-child(3) {
width: 10%;
text-align: right;
}
.Panels .listtable .listtablebody > li:last-child {
border-bottom: none;
}
.drawerBtn {
position: fixed;
left: -13px;
width: 33px;
background: #FFFFFF;
box-shadow: 0px 0px 8px 3px rgba(0, 0, 0, 0.09);
border: 1px solid #666666;
border-radius: 0px 12px 12px 0px;
height: 70px;
top: 50%;
margin-top: -35px;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding-left: 7px;
}
.drawerBtn:hover {
box-shadow: 0px 0px 8px 3px rgba(0, 0, 0, 0.09);
}
.drawerBtn span {
writing-mode: vertical-lr;
color: #333;
width: 25px;
font-size: 14px;
}
.drawerBtn i {
color: #333;
height: 14px;
line-height: 14px;
width: 14px;
margin-left: 2px;
margin-bottom: 3px;
}
.downMenu {
width: 329px;
background-color: #fff;
box-shadow: 0px 1px 8px 1px rgba(212, 212, 212, 0.5);
padding-bottom: 14px;
}
.downMenu .ant-menu-item {
height: 50px;
line-height: 50px;
}
.catelogue {
cursor: pointer;
background: #FAFBFC;
border-radius: 4px;
border: 1px solid #D0D0D0;
font-size: 15px;
font-weight: normal;
margin-right: 12px;
padding: 0px 10px;
height: 30px;
line-height: 30px;
color: #666 !important;
display: flex;
align-items: center;
}
.catelogue:hover {
background-color: #F3F4F6;
}
.catelogue span {
margin-top: 1px;
}
.submoduleStyle {
cursor: default;
}
.submoduleStyle i {
cursor: default;
}
.submoduleStyle:hover {
color: #05101a;
}
.pinfos i, .pinfos a {
color: #666;
}
.pinfos:hover i, .pinfos:hover a {
color: #466AFF;
}
.graph {
flex: 1;
margin: 0px 12px;
}
.graph .ant-typography {
white-space: pre-wrap;
margin-bottom: 0px;
}
.ant-anchor-wrapper {
padding-left: 2px;
}
.ant-anchor-wrapper .ant-anchor-ink::before {
background-color: #fff;
}
/*# sourceMappingURL=Index.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["Index.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;AACA;EACE;;AAGA;EAEE;EACA;EACA;;;AAIN;AACA;EACE;EACA;;AACA;EACE;;AAGA;EACE;;AAEF;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;AAIN;EACE;EACA;EACA;EACA;;AACA;EAIE;;AAHA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKN;EACE;EACA;;AACA;EACE;;AAEE;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AACA;EACE;;AAGJ;EACE;EACA;EACA;;AAIN;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AAIN;EACE;EACA;EACA;EACA;;AAEE;EACE;;AAEF;EACE;;AAIN;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEE;EACE;;AAKR;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EAWA;EACA;EACA;EACA;EACA;;AAdA;EACE;EACA;EACA;EACA;AAAsB;EACtB;AAA2B;EAC3B;AAAuB;EACvB;AAAyB;EACzB;;AAOF;EACE;EACA;EACA;EACA;;AASJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAIN;EACE;EACA;EACA;;AAEE;EAAE;;AACF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAGJ;EACE;;;AAKR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;;AAGJ;EACE;;AACA;EACE;;AAEF;EACE;;;AAIF;EAAI;;AACJ;EACE;;;AAGJ;EACE;EACA;;AACA;EACE;EACA;;;AAGJ;EACE;;AACA;EACE","file":"Index.css"}

View File

@ -6,7 +6,7 @@ import { getImageUrl } from 'educoder';
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import '../css/index.scss'
import './list.scss';
import './list.css';
import './Index.scss';
import ListItem from './IndexItem'
import axios from 'axios';

View File

@ -102,38 +102,13 @@
}
}
}
// coderDepot
.Panels{
max-width: 1200px;
margin: 0 auto;
.panelmenu{
padding-top:30px;
.depotBtn{
.mr-5{
margin-right: -5px;
}
.ant-btn{
height: 36px;
line-height: 34px;
width: 83px;
text-align: center;
padding:0px ;
font-weight: 500;
font-size: 14px;
}
.ant-btn-default{
color: #333;
border-color: #d0d0d0;
&:hover{
background: #F3F4F6;
}
}
.ant-btn-primary{
color: #fff;
background-color: #466AFF;
opacity: 0.8;
}
}
}
.addOptionBtn{
height: 32px;
@ -155,27 +130,25 @@
}
.infoCount{
display: inline-block;
width: 24px;
text-align: center;
height: 24px;
line-height: 24px;
background-color:rgba(153, 153, 153, 0.13);;
color:#666;
padding:0px 5px;
height: 16px;
line-height: 16px;
background-color: #eee;
color:#999;
border-radius: 12px;
margin-left: 6px;
margin-left: 10px;
font-size: 12px;
}
.attrPerson{
padding-top: 12px;
padding-top: 15px;
display: flex;
flex-wrap: wrap;
padding-bottom: 2px;
a{
margin: 0px 17px 0px 0px;
margin: 10px 10px 0px 0px;
img{
border-radius: 50%;
width: 40px;
height: 40px;
width: 35px;
height: 35px;
}
&:nth-child(6){
margin-right: 0px;
@ -212,11 +185,10 @@
padding-left: 15px;
position: relative;
min-width: 33.5%;
font-size: 12px;
font-weight: 400;
color: #666;
span{
color: #666;
&:last-child{
color: #999;
margin-left: 5px;
}
}
@ -224,69 +196,60 @@
}
.listtable{
margin-top: 20px;
border:1px solid #d9d9d9;
border-radius: 4px;
.listtablehead{
height: 55px;
display: flex;
justify-content: space-between;
align-items: flex-start;
align-items: center;
border-bottom: 1px solid #d9d9d9;
padding:13px 20px;
padding:7px 20px;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
background-color: #FAFCFF;
background-color: #FAFBFC;
.ellipsistxt{
margin-top: 6px;
#ptxt{
margin-bottom: 0px;
word-break: break-all;
overflow: unset;
white-space:pre-wrap; /* css3.0 */
white-space:-moz-pre-wrap; /* Firefox */
white-space:-pre-wrap; /* Opera 4-6 */
white-space:-o-pre-wrap; /* Opera 7 */
word-wrap:break-word;
}
margin-left: 13px;
line-height:18px;
flex:1;
width: 0;
color: #666;
&.hidetxt{
&>p{
word-break:break-all;
}
&.hide{
height: 18px;
overflow: hidden;
position: relative;
padding-right:8px;
// &::after{
// position: absolute;
// right: 0px;
// bottom: 0px;
// content:"...";
// }
}
&.hide::after{
position: absolute;
right: 0px;
bottom: 0px;
content:"...";
}
}
.ellipsis{
margin-left: 8px;
cursor: pointer;
border-radius: 2px;
height: 16px;
background: rgba(153, 153, 153, 0.2);
border-radius: 2px;
background-color: #c1c1c1;
padding:0px 4px;
height: 14px;
line-height: 14px;
margin-top: 9px;
i{
font-size: 15px!important;
color: #333;
color: #fff;
height: 14px;
line-height: 14px;
}
}
}
.listtablebody{
border-radius:0px 0px 4px 4px ;
border: 1px solid #D0D0D0;
border-top: none;
li.listtablepath{
a{color: #40a9ff;}
p{
@ -294,15 +257,12 @@
}
}
& > li{
height: 38px;
height: 42px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #d9d9d9;
padding:0px 20px 0px 24px;
&:hover{
background-color: #F3F4F6;
}
& > span:first-child{
width: 30%;
overflow: hidden;
@ -329,10 +289,8 @@
.drawerBtn{
position: fixed;
left: -13px;
width: 33px;
background: #FFFFFF;
box-shadow: 0px 0px 8px 3px rgba(0, 0, 0, 0.09);
border: 1px solid #666666;
border:1px solid rgb(207,205,223);
width: 34px;
border-radius: 0px 12px 12px 0px;
height: 70px;
top:50%;
@ -340,85 +298,47 @@
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
align-items: flex-end;
justify-content: center;
padding-left: 7px;
&:hover{
box-shadow: 0px 0px 8px 3px rgba(0, 0, 0, 0.09);
box-shadow: 1px 0px 7px rgba(0,0,0,0.1);
}
span{
writing-mode: vertical-lr;
color: #333;
color: #202429;
width: 25px;
font-size: 14px;
}
i{
color: #333;
height: 14px;
line-height: 14px;
width: 14px;
margin-left: 2px;
margin-bottom: 3px;
color: #24292e;
height: 18px;
line-height: 18px;
width: 18px;
}
}
.downMenu{
width: 329px;
box-shadow: 0px 0px 9px rgba(134, 134, 134,0.4);
background-color: #fff;
box-shadow: 0px 1px 8px 1px rgba(212, 212, 212, 0.5);
padding-bottom: 14px;
.ant-menu-item{
height: 50px;
line-height: 50px;
.ant-menu-vertical .ant-menu-item:hover{
background-color: #e6f7ff;
}
}
.catelogue{
cursor: pointer;
background: #FAFBFC;
.menuslist{
max-height: 200px;
overflow-y: auto;
padding:10px 15px;
border-radius: 4px;
border: 1px solid #D0D0D0;
font-size: 15px;
font-weight: normal;
margin-right: 12px;
padding:0px 10px;
height: 30px;
line-height: 30px;
color: #666!important;
display: flex;
align-items: center;
&:hover{
background-color: #F3F4F6;
.ant-dropdown-menu-item{
border-radius: 8px;
text-align: left!important;
a{
width: 350px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
span{
margin-top: 1px;
}
}
.submoduleStyle{
cursor: default;
i{
cursor: default;
}
&:hover{
color: #05101a;
}
}
.pinfos{
i,a{color: #666;}
&:hover i,&:hover a{
color: #466AFF;
}
}
.graph{
flex:1;
margin:0px 12px;
.ant-typography{
white-space: pre-wrap;
margin-bottom: 0px;
}
}
.ant-anchor-wrapper{
padding-left: 2px;
.ant-anchor-ink::before{
background-color: #fff;
.ant-dropdown-menu-item.active{
background-color: #e6f7ff;
}
}

View File

@ -5,7 +5,7 @@ import { AlignCenter } from '../Component/layout';
import { Link } from 'react-router-dom';
import '../css/index.scss';
import Nodata from '../Nodata';
import './list.scss';
import './list.css';
import img_parise from '../Images/parise.png';
class IndexItem extends Component {
@ -35,10 +35,9 @@ class IndexItem extends Component {
<div className="p-r-Infos">
<div className="p-r-name">
<AlignCenter>
<Link to={`/projects/${item.author.login}/${item.identifier}`} title={`${item.author.name}/${item.name}`} className="color-grey-3 font-18 task-hide " style={{maxWidth: 470 }}>
<Link to={`/projects/${item.author.login}/${item.identifier}`} className="color-grey-3 font-18 task-hide " style={{maxWidth: 490 }}>
{item.author.name}/{item.name}
</Link>
{ !item.is_public && <span className="privateTag">私有</span> }
{
item.forked_from_project_id ?
<span className="ml5">
@ -60,18 +59,8 @@ class IndexItem extends Component {
}
</AlignCenter>
<span className="p-r-tags">
{
item.praises_count && item.praises_count>0 ?
<span className="pariseTag">
<img src={img_parise} alt="" className="pariseImg" /> {item.praises_count}
</span>:""
}
{
item.forked_count && item.forked_count>0 ?
<span>
<i className="iconfont icon-fork mr3 font-16" style={{ color: "#1B8FFF" }} />fork {item.forked_count}
</span>:""
}
<span className="pariseTag"><img src={img_parise} alt="" className="pariseImg" /> {item.praises_count}</span>
<span><i className="iconfont icon-fork mr3 font-16" style={{ color: "#1B8FFF" }} />fork {item.forked_count}</span>
</span>
</div>
<p className="break_word task-hide-2 mt10" style={{ maxHeight: "44px",lineHeight:"22px" }}>{item.description}</p>

View File

@ -1,5 +1,5 @@
import React, { Component } from 'react';
import "../Branch/branch.scss"
import "../Branch/branch.css"

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["list.scss"],"names":[],"mappings":";AACA;EAAQ;;;AACR;AACE;AAAA;EAEA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAIF;AACA;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAsC;;;AACtC;EAAwC;;;AACxC;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;AACA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;AACA;EACE;EACA;;;AAEF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACE;;;AAEF;EACE;;;AAEF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EAAkB;EAAmB;;;AACrC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AACA;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;AACE;EACA;;;AAEF;EACE;;;AAKF;EACE;IACE;;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;;EAEF;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;;;AAGJ;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;AAAoB;EACpB;EACA;EACA;EACA;EACA;;;AAEF;EACE;;AACA;EACE;EACA;EACA;EACA;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGA;EACE;;;AAGJ;EACE;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;EAEF;IACE;;;EAEF;IACE;;;EAEF;IACE;;;AAGJ;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACA;;;AAEA;EAAc;;;AAEd;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAa;;;AACb;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EAAY;;;AAEZ;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAIF;AACA;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;AACA;EACE;;AAEF;EACE","file":"list.css"}

View File

@ -1,783 +0,0 @@
.lineH2{line-height:2}
.t_project_banner {
/* height: 260px;
background: url(../Images/banner_list.jpg) no-repeat center; */
background-color: #050d34;
}
.ProjectListIndex{
width: 1200px;
margin:20px auto;
display: flex;
align-items: flex-start;
flex-wrap:wrap;
}
.list-left{
width: 26%;
padding-right: 20px;
box-sizing: border-box;
margin-bottom: 20px;
}
.list-left > div{
border:1px solid #eee;
}
.list-left > div.bgcF{
border:none;
}
.list-right{
width:74%;
background: #fff;
padding:10px;
border:1px solid #eee;
}
/* 首页列表的新建和排序的下拉列表 */
.ant-menu-inline, .ant-menu-vertical, .ant-menu-vertical-left{
border-right: none!important;
}
.ant-menu-vertical > .ant-menu-item{
margin:0px!important;
height: 35px;
line-height: 35px;
border-bottom: 1px solid #eee;
font-size: 14px!important;
}
.ant-menu-vertical > .ant-menu-item:last-child{
border-bottom: none;
}
.list-r-operation{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
align-items: center;
padding:25px 30px;
border-bottom: 1px solid #E0E0E0;
}
.list-r-Search{
width: 400px;
}
.padding0-25{
padding:0px 25px;
}
.list-r-Search .ant-btn-lg{
height: 38px;
}
.list-r-Search .ant-input-group-addon{border: none !important;}
.list-r-Search .ant-input-search-button{height: 40px !important;}
.createBtn{
border-radius: 4px;
margin-left: 20px;
display: inline-block;
padding:3px 15px;
background-color: #4CACFF;
color: #fff!important;
}
/* 列表 */
.project-list{
padding:0px 30px;
}
.border-top-grey{
border-top: 1px solid rgba(238,238,238,1);
}
.p-r-Item:last-child{
border-bottom: none !important;
}
.p-r-Item{
display: flex;
border-bottom:1px solid rgba(238,238,238,1);
padding:22px 0px;
justify-content: flex-start;
}
.boxShandow{
box-shadow:0px 2px 20px 10px rgba(0,0,0,0.03);
}
.p-r-photo{
width: 60px;
height: 60px;
border-radius: 50%;
margin-right: 22px;
margin-top: 8px;
}
.p-r-Infos{
flex: 1;
width: 0;
}
.p-r-name{
display: flex;
justify-content: space-between;
align-items: center;
}
.p-r-name > p{
flex: 1;
width: 0;
}
.p-r-btn{
display: flex;
align-items: center;
}
.p-r-btn > span{
height: 35px;
line-height: 35px;
border:1px solid #f4f4f4;
border-radius: 5px;
display: block;
margin-left: 20px;
background-color: #fff;
display: flex;
}
.p-r-btn > span > a{
display: flex;
align-items: center;
padding:0px 12px;
background:#ececec;
}
.p-r-btn > span > a:active{
background: #f4f4f4;
}
.p-r-btn > span > span{
padding:0px 8px;
}
.p-r-tags{
display: flex;
opacity: 1;
}
.p-r-tags.large > span{
height: 30px;
line-height: 30px;
font-size: 14px;
}
.p-r-tags > span{
margin-left: 15px;
padding:0px 10px;
border-radius:15px;
background: #EBF4FE;
color: #333;
height: 24px;
line-height: 24px;
display: block;
font-size: 12px;
display: flex;
}
.p-r-tags > span.pariseTag{
background: #FFF3DC;
}
.p-r-tags.large > span >label{
padding:0px 12px;
}
.p-r-tags > span >label{
padding:0px 8px;
}
.p-r-tags.large > span >span{
padding:0px 6px;
}
.pariseImg{
width: 14px;
height: 12px;
margin-top: 6px;
margin-right: 3px;
}
.p-r-tags > span >span{
display: block;
background: #fff;
border-left: #efefef;
padding:0px 4px;
border-radius: 0px 4px 4px 0px;
color: #999;
}
.p-r-content{
margin-top:10px;
color: #666;
display: flex;
}
.p-r-detail > span{
margin-right: 22px;
color: #888;
}
.p-r-detail > span > label{
color: #999;
}
.p-r-about{
display: flex;
justify-content: space-between;
flex-wrap: nowrap;
margin-top: 8px;
color: #666;
}
.spincontent{
height:400px;
}
.spinstyle .ant-spin-text{
margin-top:30px;
color: #888;
}
/* -----------详情------------ */
.detailHeader-wrapper{
background-color:#FBFCFF;
border-bottom:1px solid #e2e2e2;
}
.headerMenu-wrapper{
display: flex;
flex-direction: row;
cursor: pointer;
li{
position: relative;
text-align: center;
padding:0px;
& > a{
font-size: 14px;
height: 40px;
line-height: 28px;
padding:0px 20px;
display: block;
color: #666;
&> img{
margin-right: 8px;
}
&> span.num{
line-height: 24px;
margin-left: 5px;
margin-top: 2px;
font-size: 12px;
float: right;
color: #666!important;
background-color: rgba(153, 153, 153, 0.13);;
border-radius: 50%;
width: 24px;
height: 24px;
}
}
&.active a,&.active a i{
color: #466AFF!important;
}
&.active::after,&:hover::after{
position: absolute;
bottom:0px;
height:2px;
background-color:rgba(153, 153, 153, 0.2);
content:'';
left: 0px;
width:100%;
}
&.active::after{
background-color: #466AFF;
}
}
}
.detail_tag_btn{
height:34px;
line-height: 32px;
border-radius:5px;
border:1px solid #D0D0D0;
display: flex;
align-items: center;
margin-left: 10px;
padding:0px;
background-color:#FAFBFC;
box-shadow: none;
&:hover{
background-color: #F3F4F6;
}
.detail_tag_btn_name{
padding:0px 18px;
min-width: 82px;
text-align: center;
&:hover>span{
color: #333!important;
}
img{
margin-right: 10px;
}
}
.detail_tag_btn_count{
width: 42px;
text-align: center;
background: #fff;
border-radius: 0px 4px 4px 0px;
height:100%;
border-left: 1px solid #D0D0D0;
}
}
.ant-tooltip {
max-width: fit-content!important;
}
.files-md{
padding:20px;
}
/* 详情-代码 */
.branch-wrapper{
border:1px solid #eee;
border-radius: 4px;
display: flex;
align-items: center;
height: 60px;
padding:0px 30px;
width: 1200px;
margin:0px auto;
background-color: #fff;
margin-top: 20px;
justify-content: space-between;
}
.branch-wrapper > a >i{
color: #5091FF;
margin-right: 5px;
cursor: default;
}
.branch-wrapper a{
display: flex;
align-items: center;
justify-content: center;
text-align: center;
height: 30px;
line-height: 30px;
cursor: pointer;
font-size: 16px;
color: #333333;
}
.branch-wrapper a > span{
position: relative;
min-height: 20px;
display: block;
}
.branch-wrapper a.active > span::after{
position: absolute;
content: '';
bottom: -5px;
width: 30px;
height: 3px;
left: 0px;
background-color:#5091FF;
}
.gitAddressClone{
margin:0px 20px 14px 20px!important;
display: flex;
height: 40px;
align-items: center;
border-radius: 4px;
border:1px solid #eee;
background: #fff;
margin-left: 20px;
position: relative;
}
.gitAddressClone > span{
display: flex;
line-height: 40px;
height: 40px;
padding:0px 12px;
cursor: pointer;
align-items: center;
}
.addressTips{
position: absolute;
font-size: 12px;
color: #FF6E21;
top:-34px;
left: 30px;
background-color: #fff;
border:1px solid #FE881D;
padding:0px 5px;
height: 28px;
line-height: 28px;
}
.addressTips>span{position: relative;display: block;}
.addressTips>span::before{
box-sizing: content-box;
width: 0px;
height: 0px;
position: absolute;
top: 25px;
left:50%;
margin-left: -4px;
padding:0;
border-top:8px solid #FFFFFF;
border-bottom:8px solid transparent;
border-left:8px solid transparent;
border-right:8px solid transparent;
display: block;
content:'';
z-index: 12;
}
.addressTips>span::after{
box-sizing: content-box;
width: 0px;
height: 0px;
position: absolute;
top: 26px;
left:50%;
margin-left: -4px;
padding:0;
border-top:8px solid #FE881D;
border-bottom:8px solid transparent;
border-left:8px solid transparent;
border-right:8px solid transparent;
display: block;
content:'';
z-index: 11;
}
.gitAddressClone > span.addressType{
color: #4CACFF;
}
.gitAddressClone > span:last-child{
border-right: none;
}
.gitAddressClone > input{
border:none;
outline: none;
padding:0px 8px;
height: 40px;
line-height: 40px;
border-radius: 0px;
border: 1px solid #eee;
flex:1;
}
.wrap-commit-table .ant-table-small > .ant-table-content > .ant-table-body{
margin:0px;
}
.wrap-commit-table .ant-table-title{
background-color: rgba(241,248,255,1);
padding: 13px 16px!important;
}
.commitKey{
cursor: pointer;
border:1px solid #FD7700;
background-color:#FFF3DC;
color: #FD7700!important;
padding:0px 12px;
height: 20px;
line-height: 20px;
margin-left:15px;
border-radius: 18px;
max-width: 100%;
}
/* 分支 */
.branchTitle{
padding:8px 10px;
color: #333;
font-size: 16px;
border-bottom: 1px solid #d9d9d9;
}
.branchUl li{
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
padding:20px 0px;
border-bottom: 1px solid #eee;
}
.branchUl li:last-child{
border-bottom: none;
}
.operationBtn{
border:1px solid #f4f4f4;
border-radius: 3px;
padding:0px 6px;
background-color:#fff;
color:#666!important;
display: inline-block;
}
.messages{
max-width: 700px;
}
.leftPoint{
margin-left: 20px;
position: relative;
}
.leftPoint::before{
position: absolute;
left: -10px;
top:8px;
border-radius: 50%;
width: 4px;
height: 4px;
background-color: #dadada;
content: '';
}
/* 文件目录、文件内容 */
.subFileName{
position: relative;
margin-left: 15px;
height: 22px;
}
.subFileName::before{
position: absolute;
content: '/';
left: -10px;
top: 0px;
color: #999;
height: 22px;
line-height: 22px;
}
.addFile{
display: flex;
}
.addFile a{
display: block;
background-color: rgba(76, 172, 255,0.8);
color: #fff;
cursor: pointer;
height: 32px;
line-height: 32px;
padding: 0px 10px;
}
.addFile a:first-child{
border-radius: 4px;
}
.addFile a:last-child{
/* border-radius: 0px 4px 4px 0px; */
border-left: 1px solid rgba(247, 247, 247, 0.3);
}
.addFile a:active{
background-color: rgba(76, 172, 255,1);
}
@media screen and (max-width: 750px){
.list-r-Search{
flex: 1;
}
.list-left,.list-right{
width: 100%;
padding: 0px;
}
}
@media screen and (max-width: 400px){
.list-r-Search{
width: 100%;
}
.headerMenu-wrapper{
flex-direction: column;
width: 100%;
}
.headerMenu-wrapper li{
width: 100%;
}
.gitAddressClone{
width:100%;
margin-left: 0px;
}
.gitAddressClone > span{
padding:0px;
}
.messages{
max-width: 100%;
}
}
.commonBox{
border:1px solid #ddd;
margin-top: 30px;
border-radius: 4px;
}
.commonBox .commonBox-title{
padding:0px 20px;
box-sizing: border-box;
font-size: 16px;
background: #FAFBFC;/* F1F8FF */
font-weight: bold;
height: 45px;
line-height: 45px;
border-bottom: 1px solid #d9d9d9;
border-radius: 4px 4px 0px 0px;
}
.readBox{
border:none;
&.commonBox .commonBox-info{
border:1px solid #D0D0D0;
border-top: none;
border-radius: 0px 0px 4px 4px;
padding:20px 38px;
}
}
.commonBox .commonBox-title.boxTitle{
display: flex;
justify-content: space-between;
height: 55px;
line-height: 55px;
background: #FAFCFF;
border-radius: 4px 4px 0px 0px;
border: 1px solid rgba(42, 97, 255, 0.23);
}
.synchronism{
display: block;
height: 34px;
line-height: 34px;
padding:0px 15px;
color: #fff!important;
background-color: #28BD6C;
border-radius: 4px;
}
.files_info{
cursor: pointer;
}
.commonBox {
.commonBox-info{
padding:20px 15px;
}
}
.commonBox-title-read{
vertical-align: middle;
color: #000;
font-size: 14px;
}
@media screen and (max-width: 370px){
.p-r-tags,.p-r-btn{
opacity: 0;
display: none;
}
.p-r-about{
flex-wrap: wrap;
}
.commitKey{
margin-right: 0px;
}
.list-r-Search{
width: 100%;
}
}
.null_data_box{
width: 100%;
border: 1px solid #d4d4d5;
border-radius:3px ;
}
.title{
font-weight: bold;
background: #f4f4f4;
padding: 10px 15px;
box-sizing: border-box;
border-bottom: 1px solid #d4d4d5;
}
.item_title{
font-size:18px;
font-weight: bold;
margin-bottom: 15px;
}
.item{
padding: 15px;
border-bottom: 1px solid #dededf;
}
.item:last-child{
border-bottom:none;
}
.item_title small{
font-weight: 400;
margin-left: 10px;
}
.item_title small a{
color: #4183c6;
}
.Markdown{
background: #f7f7f7;
padding: 10px 20px;
}
.item .gitAddressClone input:focus{
border: 1px solid #2185d0;
}
.content-file{margin-top: 8px;}
.content-file .CodeMirror{
background-color: #f7f7f7;
border: 1px solid #e4e4e4;
border-radius: 4px;
height: auto;
}
.content-file.edit .CodeMirror{
background-color: #fff;
}
.content-file .CodeMirror .CodeMirror-scroll{
min-height: 450px;
}
.text-center{text-align: center;}
.fork-css{
position: absolute;
left: 0;
top: 50px;
width: 100%;
}
.color-grey-ccc{
color: #ccc !important;
}
a.color-grey-ccc:hover{
color: #4cacff !important;
}
.pull-right{float: right;}
.commitList{
padding:0px 30px;
min-height: 400px;
}
.commitList > div{
border-bottom: 1px solid #EEEEEE;
padding:16px 0px;
}
.commitList > div:last-child{
border-bottom: none;
}
/* 标签列表 */
.div_table{
border:1px solid #eee;
border-radius: 2px;
}
.ul_thead{
padding:0px 30px;
box-sizing: border-box;
background: #FAFAFA;
border-bottom: 1px solid #eee;
height: 50px;
line-height: 50px;
}
.ul_tbody{
padding:0px 30px;
}
.ul_thead li, .ul_tbody li{
display: flex;
align-items: center;
text-align: left
}
.ul_tbody li{
padding:18px 0px;
border-bottom: 1px solid #eee;
}
.ul_tbody li:last-child{
border-bottom: none;
}
.ul_thead li > span , .ul_tbody li > span{
width: 20%;
padding-right: 20px;
}
.ul_thead li > span:nth-child(2), .ul_tbody li > span:nth-child(2){
flex:1;
}
.ul_tbody_third{
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: left;
}
.ul_tbody_forth{
text-align: center;
display: flex;
justify-content: center;
}
.depotNum{
color: #666!important;
span:last-child{
color: #333;
}
&:hover span:last-child{
color: #2A61FF;
}
}

View File

@ -1,7 +1,6 @@
import React, { useEffect, useState } from 'react';
import { Skeleton , Tooltip} from 'antd';
import { Link } from 'react-router-dom';
import { numFormat } from 'educoder';
function DetailBanner({ history,list , owner , projectsId , isManager , url , pathname , state , urlFlag , projectDetail , platform ,open_devops }){
const [ menuName , setMenuName ] = useState(undefined);
@ -18,19 +17,19 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
}
},[list]);
return(
<div className="f-wrap-between mt25">
<div className="f-wrap-between mt15">
{
menuName && projectDetail ?
<ul className="headerMenu-wrapper">
{
Array.isArray(menuName)&& menuName.map((item,key)=>{
menuName.map((item,key)=>{
return(
<React.Fragment key={item.menu_name}>
<React.Fragment>
{
item.menu_name === "home" &&
<li className={pathname==="about" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/about`, state }}>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-zhuyeicon color-grey-3 mr5 font-14":"iconfont icon-zhuyeicon color-grey-6 font-14 mr5"}></i>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-zhuye1 color-grey-3 mr5 font-14":"iconfont icon-zhuye1 color-grey-6 font-14 mr5"}></i>
<span>主页</span>
</Link>
</li>
@ -39,7 +38,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "code" &&
<li className={(pathname==="" || urlFlag) ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}`, state }}>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-daimakuicon color-grey-3 mr5 font-14":"iconfont icon-daimakuicon color-grey-6 font-14 mr5"}></i>
<i className={(pathname==="" || urlFlag) ? "iconfont icon-daimaku color-grey-3 mr5 font-14":"iconfont icon-daimaku color-grey-6 font-14 mr5"}></i>
<span>代码库</span>
</Link>
</li>
@ -49,9 +48,9 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
<li className={pathname==="issues" ? "active" : ""}>
<Tooltip title="易修是Issue的中文名即问题列表" placement="bottom">
<Link to={{ pathname: `/projects/${owner}/${projectsId}/issues`, state }}>
<i className={pathname==="issues" ? "iconfont icon-yixiuicon color-grey-3 mr5 font-14":"iconfont icon-yixiuicon color-grey-6 font-14 mr5"}></i>
<i className={pathname==="issues" ? "iconfont icon-renwu color-grey-3 mr5 font-14":"iconfont icon-renwu color-grey-6 font-14 mr5"}></i>
<span>易修</span>
{projectDetail && projectDetail.issues_count ? <span className="num">{numFormat(projectDetail.issues_count)}</span> : ""}
{projectDetail && projectDetail.issues_count ? <span className="num">{projectDetail.issues_count}</span> : ""}
</Link>
</Tooltip>
</li>
@ -60,48 +59,39 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "pulls" && projectDetail && parseInt(projectDetail.type) !== 2 && platform ?
<li className={pathname==="pulls" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/pulls`, state }}>
<i className={pathname==="pulls" ? "iconfont icon-hebingqingqiuicon color-grey-3 mr5 font-14":"iconfont icon-hebingqingqiuicon color-grey-6 font-14 mr5"}></i>
<i className={pathname==="pulls" ? "iconfont icon-hebingqingqiu1 color-grey-3 mr5 font-14":"iconfont icon-hebingqingqiu1 color-grey-6 font-14 mr5"}></i>
<span>合并请求</span>
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{numFormat(projectDetail.pull_requests_count)}</span> : ""}
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{projectDetail.pull_requests_count}</span> : ""}
</Link>
</li>:""
}
{
item.menu_name === "wiki" &&
<li className={pathname === "wiki" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/wiki`, state }}>
<i className={pathname==="wiki" ? "iconfont icon-wiki_icon color-grey-3 mr5 font-14":"iconfont icon-wiki_icon color-grey-6 font-14 mr5"}></i>
<span>Wiki</span>
</Link>
</li>
}
{
item.menu_name === "devops" && platform ?
<li className={pathname==="devops" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/devops${open_devops ? `/dispose`:""}`, state }}>
<i className="iconfont icon-gongzuoliuicon font-13 mr8"></i>工作流(beta版)
{projectDetail && projectDetail.ops_count ? <span>{numFormat(projectDetail.ops_count)}</span> : ""}
<i className="iconfont icon-gongzuoliu font-13 mr8"></i>工作流(beta版)
{projectDetail && projectDetail.ops_count ? <span>{projectDetail.ops_count}</span> : ""}
</Link>
</li>
:""
}
{/* {
{
item.menu_name === "resources" &&
<li className={pathname==="source" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/source`, state }}>
<i className={pathname==="source" ? "iconfont icon-ziyuanpaihanghetuijian color-grey-3 mr5 font-14":"iconfont icon-ziyuanpaihanghetuijian color-grey-6 font-14 mr5"}></i>
<span>资源库</span>
{projectDetail && projectDetail.source_count ? <span className="num">{numFormat(projectDetail.source_count)}</span> :""}
{projectDetail && projectDetail.source_count ? <span className="num">{projectDetail.source_count}</span> :""}
</Link>
</li>
} */}
}
{
item.menu_name === "versions" &&
<li className={pathname==="milestones" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/milestones`, state }}>
<i className={pathname==="milestones" ? "iconfont icon-lichengbeiicon color-grey-3 mr5 font-14":"iconfont icon-lichengbeiicon color-grey-6 font-14 mr5"}></i>
<i className={pathname==="milestones" ? "iconfont icon-lichengbei color-grey-3 mr5 font-14":"iconfont icon-lichengbei color-grey-6 font-14 mr5"}></i>
<span>里程碑</span>
{projectDetail && projectDetail.versions_count ? <span className="num">{numFormat(projectDetail.versions_count)}</span> :""}
{projectDetail && projectDetail.versions_count ? <span className="num">{projectDetail.versions_count}</span> :""}
</Link>
</li>
}
@ -109,7 +99,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "activity" &&
<li className={pathname==="activity" ? "active" : ""}>
<Link to={{ pathname: `/projects/${owner}/${projectsId}/activity`, state }}>
<i className={pathname==="activity" ? "iconfont icon-dongtaiicon color-grey-3 mr5 font-14":"iconfont icon-dongtaiicon color-grey-6 font-14 mr5"}></i>
<i className={pathname==="activity" ? "iconfont icon-tongzhi color-grey-3 mr5 font-14":"iconfont icon-tongzhi color-grey-6 font-14 mr5"}></i>
<span>动态</span>
</Link>
</li>
@ -118,7 +108,7 @@ function DetailBanner({ history,list , owner , projectsId , isManager , url , pa
item.menu_name === "setting" &&
<li className={pathname === "setting" ? "active" : ""}>
<Link to={`/projects/${owner}/${projectsId}/setting`}>
<i className={url && url.indexOf("/setting") > 0 ? "iconfont icon-cangkushezhiicon color-grey-3 mr5 font-14":"iconfont icon-cangkushezhiicon color-grey-6 font-14 mr5"}></i>
<i className={url && url.indexOf("/setting") > 0 ? "iconfont icon-cangku color-grey-3 mr5 font-14":"iconfont icon-cangku color-grey-6 font-14 mr5"}></i>
<span>仓库设置</span>
</Link>
</li>

View File

@ -1,8 +1,7 @@
import React from 'react';
import { Tooltip , message } from 'antd';
import './sub.scss';
function Invite({code,className}) {
function Invite({code}) {
function jsCopy(id) {
const copyEle = document.querySelector(id); //
@ -14,14 +13,11 @@ function Invite({code,className}) {
message.success('复制成功');
}
return(
<div className={className}>
<span className="font-16 color-ooo">邀请码</span>
<div>
<span id="devitecode">{code}</span>
<Tooltip title={<p className="edu-txt-center">可以通过邀请码邀请成员加入项目<br/>点击复制邀请码</p>} placement={"bottom"}>
<i className="iconfont icon-fuzhi2 font-16 color-blue ml8" onClick={()=>jsCopy("#devitecode")}></i>
</Tooltip>
</div>
<div>
<span>邀请码: <span id="devitecode">{code}</span></span>
<Tooltip title={<p className="edu-txt-center">可以通过邀请码邀请成员加入项目<br/>点击复制邀请码</p>} placement={"bottom"}>
<i className="iconfont icon-fuzhi2 font-16 color-blue ml8" onClick={()=>jsCopy("#devitecode")}></i>
</Tooltip>
</div>
)
}

View File

@ -1,57 +0,0 @@
import React , { useState , useEffect } from 'react';
import { Anchor , Input } from 'antd';
import './sub.scss';
import { Base64 } from 'js-base64';
const { Link } = Anchor;
function ReadmeCatelogue({ menuList , hash }) {
const [ goHref , setGoHref ] = useState("");
const [ value , setValue ] = useState("");
const [ menu , setMenu] = useState(menuList);
function onChange(link){
setGoHref(link);
};
function changeValue(e) {
setValue(e.target.value);
if(e.target.value){
let m = menuList.filter(i=>i.text.indexOf(e.target.value)>-1);
setMenu(m);
}else{
setMenu(menuList);
}
}
return(
<div>
<div className="searchBox">
<Input
placeholder={"请输入关键字"}
value={value}
onChange={changeValue}
prefix={<i className="iconfont icon-sousuo_icon1 font-14"></i>}/>
</div>
{
menu && menu.length>0?
<div className="anchorBox">
<Anchor affix={false} onChange={onChange}>
{
menu.map((item,key)=>{
return(
<div style={{paddingLeft:`${item.level *10}px`}} className={goHref===item.href?"items active":"items"}>
<Link href={`#${item.text}`} title={item.text} />
</div>
)
})
}
</Anchor>
</div>
:""
}
</div>
)
}
export default ReadmeCatelogue;

View File

@ -53,7 +53,7 @@ function UpdateDescModal({form , visible , onCancel , onOk,desc,website,lesson_u
{getFieldDecorator("lesson_url",{
rules:[]
})(
<Input placeholder="实践课程链接" />
<Input placeholder="实践课程链接"/>
)}
</Form.Item>
</Form>

View File

@ -1,68 +0,0 @@
.boxPanel {
width: 1200px;
margin: 20px auto;
border-radius: 4px;
border: 1px solid #eee;
min-height: 500px;
}
.boxPanel .contrbuteList {
display: flex;
flex-wrap: wrap;
padding: 20px;
align-items: flex-start;
}
.boxPanel .contrbuteList > div {
width: 20%;
}
.descmodal .ant-row.ant-form-item {
margin-bottom: 10px;
}
.descmodal .ant-col.ant-form-item-label {
height: 20px;
line-height: 20px;
}
.menuslist {
z-index: 100;
width: 297px;
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
}
.menuslist .searchBox {
padding: 15px;
border-bottom: 1px solid #eee;
}
.menuslist .ant-anchor-wrapper {
margin-left: 0px;
padding: 5px 15px;
max-height: 255px !important;
}
.menuslist .ant-anchor-wrapper .items {
border-radius: 4px;
margin-bottom: 5px;
cursor: pointer;
}
.menuslist .ant-anchor-wrapper .items .ant-anchor-link-title {
color: #333333 !important;
}
.menuslist .ant-anchor-wrapper .items:hover {
background-color: #F3F4F6;
}
.menuslist .ant-anchor-wrapper .items.active {
background-color: #2A61FF;
}
.menuslist .ant-anchor-wrapper .items.active .ant-anchor-link-title {
color: #fff !important;
}
.menuslist .ant-anchor-wrapper .ant-anchor-link {
padding: 0px;
height: 30px;
line-height: 30px;
}
.menuslist .ant-anchor-wrapper .ant-anchor-ink::before {
background-color: #fff;
}
/*# sourceMappingURL=sub.css.map */

View File

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["sub.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EAIA;;AAHA;EACE;;;AAMJ;EACE;;AAEF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;AACA;EACE;;AAIN;EACE;EACA;EACA;;AAEF;EACE","file":"sub.css"}

View File

@ -22,46 +22,4 @@
height: 20px;
line-height: 20px;
}
}
.menuslist{
z-index: 100;
width: 297px;
background: #FFFFFF;
box-shadow: 0px 4px 8px 2px rgba(212, 212, 212, 0.5);
border-radius: 4px;
.searchBox{
padding:15px;
border-bottom: 1px solid #eee;
}
.ant-anchor-wrapper{
margin-left: 0px;
padding:5px 15px;
max-height: 255px!important;
.items{
border-radius: 4px;
margin-bottom: 5px;
cursor: pointer;
.ant-anchor-link-title{
color: #333333!important;
}
&:hover{
background-color: #F3F4F6;
}
&.active{
background-color: #2A61FF;
.ant-anchor-link-title{
color: #fff!important;
}
}
}
.ant-anchor-link{
padding:0px;
height: 30px;
line-height: 30px;
}
.ant-anchor-ink::before{
background-color: #fff;
}
}
}

View File

@ -5,12 +5,6 @@ import { AlignCenter } from '../Component/layout';
import { getImageUrl } from "educoder";
import "./merge.css";
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
class MergeItem extends Component {
constructor(props) {
super(props);
@ -49,7 +43,7 @@ class MergeItem extends Component {
};
render() {
const { issues, project_name, project_author_name , user_admin_or_member} = this.props;
const { issues, project_name, project_author_name } = this.props;
const { projectsId , owner } = this.props.match.params;
const { current_user } = this.props;
const renderList = () => {
@ -105,43 +99,33 @@ class MergeItem extends Component {
</span>
<span className="color-grey-8">{item.pr_time}</span>
<span className="ml15">
{
item.pull_request_head &&
<Tag className="pr-branch-tag">
<Link
to={`/projects/${item.is_original ? item.fork_project_user : owner}/${ item.is_original ? item.fork_project_identifier : projectsId }/tree/${turnbar(item.pull_request_head)}`}
className="maxW200px hide-1 ver-middle"
>
{item.is_original
? item.fork_project_user
: project_author_name}
:{item.pull_request_head}
</Link>
</Tag>
}
{
item.pull_request_base &&
<span className="mr8 ver-middle">
<i
className={
"iconfont icon-youjiang color-grey-c font-16"
}
></i>
</span>
}
{
item.pull_request_base &&
<Tag className="pr-branch-tag">
<Link
to={`/projects/${owner}/${projectsId}/tree/${turnbar(item.pull_request_base)}`}
className="maxW200px hide-1 ver-middle"
>
{/* {item.is_fork ? item.pull_request_base : `${item.author_name}:${item.pull_request_base}`} */}
{project_author_name}:{item.pull_request_base}
</Link>
</Tag>
}
<Tag className="pr-branch-tag">
<Link
to={`/projects/${item.is_original ? item.fork_project_user : owner}/${ item.is_original ? item.fork_project_identifier : projectsId }/tree/${item.pull_request_head}`}
className="maxW200px hide-1 ver-middle"
>
{item.is_original
? item.fork_project_user
: project_author_name}
:{item.pull_request_head}
</Link>
</Tag>
<span className="mr8 ver-middle">
<i
className={
"iconfont icon-youjiang color-grey-c font-16"
}
></i>
</span>
<Tag className="pr-branch-tag">
<Link
to={`/projects/${owner}/${projectsId}/tree/${item.pull_request_base}`}
className="maxW200px hide-1 ver-middle"
>
{/* {item.is_fork ? item.pull_request_base : `${item.author_name}:${item.pull_request_base}`} */}
{project_author_name}:{item.pull_request_base}
</Link>
</Tag>
</span>
</AlignCenter>
</p>
@ -183,7 +167,7 @@ class MergeItem extends Component {
) : (
""
)}
{user_admin_or_member && item.pull_request_status === 0 ? (
{current_user && current_user.login ? (
<div
className="milepostleft"
style={{

View File

@ -24,12 +24,6 @@ import MergeFooter from "./merge_footer";
const Option = Select.Option;
const TextArea = Input.TextArea;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
class MessageCount extends Component {
constructor(props) {
super(props);
@ -47,7 +41,6 @@ class MessageCount extends Component {
edit_spin: false,
pr_status: undefined,
pull_request:undefined,
conflict_files:[],
copyVisible:false,
};
@ -82,8 +75,7 @@ class MessageCount extends Component {
data: result.data,
SpinFlag: false,
pr_status: result.data.pull_request && result.data.pull_request.status,
pull_request:result.data.pull_request,
conflict_files:result.data.conflict_files
pull_request:result.data.pull_request
});
} else {
this.setState({ SpinFlag: false });
@ -110,8 +102,6 @@ class MessageCount extends Component {
isSpin: false,
pr_status: 2,
});
const { getDetail } = this.props;
getDetail && getDetail();
} else {
this.setState({
isSpin: false,
@ -148,8 +138,6 @@ class MessageCount extends Component {
SpinMerge: false,
pr_status: 1,
});
const { getDetail } = this.props;
getDetail && getDetail();
} else {
this.setState({ SpinMerge: false });
}
@ -271,28 +259,13 @@ class MessageCount extends Component {
</div>
)
}
mergeabledDesc=(base,head,conflict_files)=>{
mergeabledDesc=(base,head)=>{
return(
<div>
<ul id="descContent">
<li>git fetch origin</li>
<li>git checkout -b {`${base}`} origin/{`${base}`}</li>
<li>git merge {`${head}`}</li>
</ul>
{
conflict_files && conflict_files.length>0 &&
<div>
<p className="mt10 font-16 pt10" style={{borderTop:"1px solid #f9d7d5"}}>如下文件有代码冲突</p>
<p>
{
conflict_files.map((i,k)=>{
return <p>{i}</p>
})
}
</p>
</div>
}
</div>
<ul id="descContent">
<li>git fetch origin</li>
<li>git checkout -b {`${base}`} origin/{`${base}`}</li>
<li>git merge {`${head}`}</li>
</ul>
)
}
@ -307,8 +280,7 @@ class MessageCount extends Component {
ismesrge,
SpinFlag,
copyVisible,
pull_request,
conflict_files
pull_request
} = this.state;
const { current_user, projectDetail } = this.props;
const menu = (
@ -361,10 +333,10 @@ class MessageCount extends Component {
<div className="mt15">
<Tag className="pr-branch-tag">
<Link
to={`/projects/${data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}/${data.pull_request.is_original?data.project_identifier:projectsId}/tree/${turnbar(data.pull_request && data.pull_request.head)}`}
to={`/projects/${owner}/${data.pull_request.is_original?data.project_identifier:projectsId}/tree/${data.pull_request.head}`}
className="ver-middle"
>
{data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}: {turnbar(data.pull_request && data.pull_request.head)}
{data.pull_request.is_original ? data.pull_request.fork_project_user : data.issue.project_author_name}:{data.pull_request.head}
</Link>
</Tag>
<span className="mr8 ver-middle">
@ -499,16 +471,17 @@ class MessageCount extends Component {
: !ismesrge ? "block" : "none",
}}
>
<Dropdown.Button
overlay={menu}
type="primary"
onClick={this.submitmerge}
className="mb15"
icon={<Icon type="caret-down" />}
disabled={!pull_request || (pull_request && !pull_request.mergeable) }
>
{this.state.mergename}
</Dropdown.Button>
<p className="mb15">
<Dropdown.Button
overlay={menu}
type="primary"
onClick={this.submitmerge}
icon={<Icon type="caret-down" />}
disabled={!pull_request || (pull_request && !pull_request.mergeable) }
>
{this.state.mergename}
</Dropdown.Button>
</p>
{pull_request && pull_request.mergeable
?
<Alert
@ -519,7 +492,7 @@ class MessageCount extends Component {
<Alert
message={this.mergeabledMes()}
type="error"
description={this.mergeabledDesc(pull_request.base,pull_request.head,conflict_files)}
description={this.mergeabledDesc(pull_request.base,pull_request.head)}
showIcon
/>
}

View File

@ -42,10 +42,9 @@ class NewMerge extends Component {
componentDidUpdate=(preProps)=>{
const { project } = this.props;
const { pull } = this.state;
let oldProject = preProps.project;
if(project && oldProject && (oldProject.id !== project.id)){
this.compareProject(this.state.id,pull,"master");
this.compareProject(this.state.id,"master","master");
}
}
// 页面销毁取消监听
@ -79,8 +78,7 @@ class NewMerge extends Component {
this.set_default_pull(result.data.branches);
this.set_default_merge(result.data.merge_projects);
}
const { pull } = this.state;
this.compareProject(result.data.id,pull||"master","master");
this.compareProject(result.data.id,"master","master");
this.setState({isSpin: false})
})
.catch((error) => {
@ -107,18 +105,6 @@ class NewMerge extends Component {
}
axios.get(url).then(result=>{
if(result){
if (result.data.status === 0) {
this.setState({
isSpin: false,
show_message: false,
});
} else {
this.setState({
isSpin: false,
show_message: true,
default_message: result.data.message,
});
}
this.setState({
comparesData:result.data
})
@ -157,7 +143,7 @@ class NewMerge extends Component {
merge:"master"
})
}
// this.ischeckmerge();
this.ischeckmerge();
}
}
@ -183,7 +169,7 @@ class NewMerge extends Component {
selectBrach = (type, value) => {
const { projectsId , owner } = this.props.match.params;
this.state[type] = value;
// this.ischeckmerge();
this.ischeckmerge();
let { id ,merge , pull } = this.state;
if(type==="pull"){
this.props.history.push(`/projects/${owner}/${projectsId}/pulls/new/${pull}`)
@ -213,6 +199,7 @@ class NewMerge extends Component {
};
//判断2分支是否可以合并
ischeckmerge = () => {
this.setState({ isSpin: true });
const { projectsId , owner } = this.props.match.params;

View File

@ -38,7 +38,7 @@ class merge extends Component {
// page: 1,
search_count: undefined,
issue_type: undefined,
status_type: "1",
status_type: undefined,
//设置选择高亮
openselect: 1,
closeselect: undefined,
@ -48,7 +48,7 @@ class merge extends Component {
paix: "排序",
priority_ids: "优先级",
select_params: {
status_type: "1", //开启中和关闭中,默认为开启中的
status_type: undefined, //开启中和关闭中,默认为开启中的
assigned_to_id: undefined, // 指派人
fixed_version_id: undefined,
priority_id: undefined,
@ -155,14 +155,18 @@ class merge extends Component {
renderMenu = (array, name, id) => {
return (
<Menu className="orderCondition">
<Menu>
<Menu.Item key={"all"} onClick={(e) => this.getOption(e, id, name)}>
{name}
</Menu.Item>
{array && array.length > 0 && array.map((item, key) => {
{array &&
array.length > 0 &&
array.map((item, key) => {
return (
((!item.permission) || (item.permission && item.permission !== "Reporter")) &&
<Menu.Item key={item.id} onClick={(e) => this.getOption(e, id, item.name)}>
<Menu.Item
key={item.id}
onClick={(e) => this.getOption(e, id, item.name)}
>
{item.name}
</Menu.Item>
);
@ -203,16 +207,23 @@ class merge extends Component {
paix: "排序",
priority_ids: "优先级",
});
this.state.select_params.status_type = type;
this.state.select_params.page=1;
this.state.select_params.limit=15;
this.state.select_params = {
status_type: type,
search: undefined,
page: 1,
limit: 15,
};
this.getIssueList();
};
checkOperation() {
islogin() {
const { projectsId,owner } = this.props.match.params;
this.props.history.push(`/projects/${owner}/${projectsId}/pulls/new`);
if (this.props.checkIfLogin() === false) {
this.props.showLoginDialog();
return;
} else {
this.props.history.push(`/projects/${owner}/${projectsId}/pulls/new`);
}
}
render() {
const { projectsId , owner } = this.props.match.params;
@ -254,12 +265,9 @@ class merge extends Component {
style={{ width: 300 }}
/>
</div>
{
data && data.user_admin_or_member &&
<a className="topWrapper_btn ml10" onClick={() => this.checkOperation()}>
+&nbsp;新建合并请求
</a>
}
<a className="topWrapper_btn ml10" onClick={() => this.islogin()}>
+&nbsp;新建合并请求
</a>
</div>
<div className="f-wrap-between screenWrap">
<div className="df">
@ -396,7 +404,6 @@ class merge extends Component {
project_author_name={data.project_author_name}
{...this.props}
{...this.state}
user_admin_or_member={data && data.user_admin_or_member}
></OrderItem>
</div>
):""}

View File

@ -264,7 +264,7 @@ class MergeForm extends Component {
},
],
initialValue: title,
})(<Input placeholder="标题" maxLength={50} />)}
})(<Input placeholder="标题" />)}
</Form.Item>
<MDEditor
placeholder={"请输入合并请求的描述..."}
@ -346,21 +346,19 @@ class MergeForm extends Component {
</Select>
)}
</Form.Item>
{/* <Form.Item label="">
{getFieldDecorator("checkbox-group")(
<Checkbox.Group>
<div>
<Checkbox value="A">必须审查代码</Checkbox>
</div>
<div>
<Checkbox value="B">合并后删除提交分支</Checkbox>
</div>
<div>
<Checkbox value="C">合并后关闭提到的任务</Checkbox>
</div>
</Checkbox.Group>
)}
</Form.Item> */}
<Form.Item name="checkbox-group" label="其他">
<Checkbox.Group>
<div>
<Checkbox value="A">必须审查代码</Checkbox>
</div>
<div>
<Checkbox value="B">合并后删除提交分支</Checkbox>
</div>
<div>
<Checkbox value="C">合并后关闭提到的任务</Checkbox>
</div>
</Checkbox.Group>
</Form.Item>
</div>
</div>
</div>

View File

@ -68,30 +68,24 @@ class Index extends Component {
getOwner=()=>{
const { OIdentifier } = this.props.match.params;
const { user_id } = this.props && this.props.current_user;
const url = `/owners.json`;
axios.get(url).then(result=>{
if(result && result.data){
let owner = result.data.owners;
this.setState({
OwnerList: owner,
})
if(OIdentifier){
owner = owner.filter(item=>item.name === OIdentifier);
this.props.form.setFieldsValue({
user_id:OIdentifier
})
}else if(user_id){
owner = owner.filter(item=>item.id === user_id);
this.props.form.setFieldsValue({
user_id:owner && owner[0].name
owner && this.setState({
owners_id:owner[0].id,
owners_name:owner[0].name
})
}
owner && this.setState({
owners_id:owner[0].id,
owners_name:owner[0].name
})
this.setOptionsList(owner, 'owners');
this.setState({
OwnerList: owner,
})
}
}).catch(error=>{})
}
@ -181,12 +175,14 @@ class Index extends Component {
ignore_id,
user_id:owners_id
}).then((result) => {
if (result && result.data.id) {
this.setState({
isSpin: false
})
this.props.showNotification(`${projectsType && projectsType === "mirror" ? "镜像" : "托管"}项目创建成功!`);
this.props.history.push(`/projects/${result.data.login}/${result.data.identifier}`);
if (result) {
if (result.data.id) {
this.setState({
isSpin: false
})
this.props.showNotification(`${projectsType && projectsType === "mirror" ? "镜像" : "托管"}项目创建成功!`);
this.props.history.push(`/projects/${owners_name}/${result.data.identifier}`);
}
}
}).catch((error) => {
this.setState({

View File

@ -73,7 +73,6 @@ class Index extends Component {
content={undefined}
readOnly={false}
editorType="new"
descName={filename && `Add ${filename}`}
></Meditor>
</div>
</div>

View File

@ -6,20 +6,6 @@ import "./index.css";
import axios from "axios";
const TextArea = Input.TextArea;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function returnbar(str){
if(str && str.length>0 && str.indexOf("%2F")>-1){
return str.replaceAll('%2F','/');
}
return str;
}
class UserSubmitComponent extends Component {
constructor(props) {
super(props);
@ -30,24 +16,6 @@ class UserSubmitComponent extends Component {
};
}
componentDidMount=()=>{
const { descName } = this.props;
if(descName){
this.props.form.setFieldsValue({
desc:descName
})
}
}
componentDidUpdate=(preProps)=>{
const { descName } = this.props;
if(preProps && descName && preProps.descName !== descName ){
this.props.form.setFieldsValue({
desc:descName
})
}
}
changeSubmittype = (e) => {
this.setState({
submitType: e.target.value,
@ -73,7 +41,7 @@ class UserSubmitComponent extends Component {
const url = `/${owner}/${projectsId}/create_file.json`;
axios.post(url, {
filepath: filename ? filename : path,
branch: returnbar(branch),
branch: branch,
new_branch: submitType === "1" ? values.branchname : undefined,
content,
message: values.desc,
@ -86,7 +54,7 @@ class UserSubmitComponent extends Component {
const { getTopCount } = this.props;
getTopCount && getTopCount(values.branchname);
}
let url = `/projects/${owner}/${projectsId}${values.branchname ? `/tree/${turnbar(values.branchname)}`: (branch ? `/tree/${turnbar(branch)}` : "")}`;
let url = `/projects/${owner}/${projectsId}${values.branchname ? `/tree/${values.branchname}`: (branch ? `/tree/${branch}` : "")}`;
this.props.history.push(url);
}
})
@ -107,13 +75,12 @@ class UserSubmitComponent extends Component {
const { projectsId , owner } = this.props.match.params;
const { submitType } = this.state;
const url = `/${owner}/${projectsId}/update_file.json`;
let b = currentBranch || branch;
this.props.form.validateFieldsAndScroll((err, values) => {
if (!err) {
axios
.put(url, {
filepath: detail.path,
branch: submitType === "1" ? undefined : returnbar(b),
branch: submitType === "1" ? undefined : (currentBranch || branch),
new_branch: submitType === "1" ? values.branchname : undefined,
content: content,
sha: detail.sha,
@ -122,8 +89,7 @@ class UserSubmitComponent extends Component {
.then((result) => {
this.setState({ isSpin: false });
if (result.data && result.data.status === 1) {
let b = currentBranch || branch;
let url = `/projects/${owner}/${projectsId}${(values.branchname ? `/tree/${turnbar(values.branchname)}` : (b ? `/tree/${turnbar(b)}`:""))}`;
let url = `/projects/${owner}/${projectsId}${(values.branchname ? `/tree/${values.branchname}` : ((currentBranch || branch) ? `/tree/${currentBranch || branch}`:""))}`;
this.props.history.push(url);
this.props.showNotification("文件修改成功!");
}
@ -146,7 +112,6 @@ class UserSubmitComponent extends Component {
const { current_user, filepath, projectDetail , currentBranch } = this.props;
const { editor_type } = this.props;
let b = currentBranch || branch;
return (
<div>
<span className="df" style={{ alignItems: "center" }}>
@ -205,7 +170,7 @@ class UserSubmitComponent extends Component {
>
<Radio value="0" className="mb10">
<i className="iconfont icon-banbenku font-16 mr5"></i>
直接提交至<span className="color-orange">{returnbar(b)}</span>
直接提交至<span className="color-orange">{currentBranch || branch}</span>
</Radio>
<Radio value="1">
<Icon type="pull-request" className="mr5" />

View File

@ -27,7 +27,7 @@ class m_editor extends Component {
render() {
const { editorValue } = this.state;
const { readOnly, editorType, language , currentBranch , descName } = this.props;
const { readOnly, editorType, language , currentBranch } = this.props;
const editor_options = {
lineNumbers: "on",
wordWrap: true, //强制换行
@ -72,7 +72,6 @@ class m_editor extends Component {
content={editorValue}
editor_type={editorType}
currentBranch={currentBranch}
descName={descName}
></UserSubmitComponent>
</div>
)}

View File

@ -60,7 +60,6 @@ class UploadFile extends Component {
filepath={file_path}
content={editorValue}
editor_type={"upload"}
descName={`ADD file via upload`}
></UserSubmitComponent>
</div>
</div>

View File

@ -72,7 +72,7 @@ function Index(props){
if(type==="apply"){
setApplyCount(applyCount-count);
}else if(type==="undo"){
setTransferCount(transferCount-count);
setTransferCount(applyCount-count);
}else{
setMessagesCount(0);
c = messagesCount;

View File

@ -249,7 +249,7 @@ class Detail extends Component {
添加于 {data && data.created_at}
</span>
{data && data.user_permission ? (
<span className="pull-right 123123">
<span className="pull-right">
<a className="color-blue fr" onClick={this.copydetail}>
复制
</a>

View File

@ -89,9 +89,8 @@ class Milepost extends Component {
closeselect: status === "closed" ? current_user.user_id : undefined,
openselect: status === "closed" ? undefined : current_user.user_id
})
this.getList(1, status, 'desc');
const { getDetail } = this.props;
getDetail && getDetail();
this.getList(1, status, 'desc')
}
}).catch(error => {
console.log(error);
@ -108,9 +107,7 @@ class Milepost extends Component {
}
}).then((result) => {
if (result) {
this.getList(1, this.state.status, 'desc');
const { getDetail } = this.props;
getDetail && getDetail();
this.getList(1, this.state.status, 'desc')
}
}).catch((error) => {
console.log(error);
@ -118,12 +115,11 @@ class Milepost extends Component {
}
ChangePage = (page) => {
document.body.scrollIntoView();
this.setState({
page
})
const { status } = this.state;
this.getList( page , status );
this.getList(page);
}
// 排序
@ -154,11 +150,11 @@ class Milepost extends Component {
const { data, limit, page, openselect, closeselect, spinings } = this.state;
const { projectsId , owner } = this.props.match.params;
const menu = (
<Menu className="orderCondition" onClick={this.arrayList}>
<Menu.Item key={'effective_date'} value="desc">到期日从后到先</Menu.Item>
<Menu.Item key={'effective_date'} value="asc">到期日从先到后</Menu.Item>
<Menu.Item key={'percent'} value="asc">完成度从低到高</Menu.Item>
<Menu.Item key={'percent'} value="desc">完成度从高到低</Menu.Item>
<Menu onClick={this.arrayList}>
<Menu.Item key={'created_on'} value="desc">到期日从近到远</Menu.Item>
<Menu.Item key={'created_on'} value="asc">到期日从远到近</Menu.Item>
<Menu.Item key={'percent'} value="desc">完成度从低到高</Menu.Item>
<Menu.Item key={'percent'} value="asc">完成度从高到低</Menu.Item>
<Menu.Item key={'issues_count'} value="desc">任务从多到少</Menu.Item>
<Menu.Item key={'issues_count'} value="asc">任务从少到多</Menu.Item>
</Menu>
@ -232,8 +228,8 @@ class Milepost extends Component {
<Link to={`/projects/${owner}/${projectsId}/milestones/${item.id}/edit`} className="color-grey-9">编辑</Link>
</div>
<div className="grid-item ml15 color-grey-9">
<i className={item.status === "closed" ? "iconfont icon-gouxuan font-14 mr5":"iconfont icon-yiguanbi1 font-14 mr5"}></i>
<a onClick={() => this.updatestatusemile(item.status === "closed" ? "open" : "closed", item)} className="color-grey-9">{this.state.status === "closed" ? "开启" : "关闭"}</a>
<i className="iconfont icon-yiguanbi1 font-14 mr5"></i>
<a onClick={() => this.updatestatusemile(this.state.status === "closed" ? "open" : "closed", item)} className="color-grey-9">{this.state.status === "closed" ? "开启" : "关闭"}</a>
</div>
<div className="grid-item ml15 color-grey-9">
<i className="iconfont icon-lajitong font-14 mr5" ></i>
@ -260,7 +256,7 @@ class Milepost extends Component {
{
data && data.versions_count > limit ?
<div className="mt30 mb50 edu-txt-center">
<Pagination simple current={page} total={data && data.versions_count} pageSize={limit} onChange={this.ChangePage}></Pagination>
<Pagination simple defaultCurrent={page} total={data && data.versions_count} pageSize={limit} onChange={this.ChangePage}></Pagination>
</div> : ""
}
</div>

View File

@ -69,27 +69,6 @@ class MilepostDetail extends Component {
})
}
deletedetail = (id) => {
const { projectsId , owner } = this.props.match.params;
const url = `/${owner}/${projectsId}/issues/${id}.json`;
axios.delete(url, {
data: {
project_id: projectsId,
id: id,
},
})
.then((result) => {
if (result) {
const { page } = this.state;
this.getIssueList(page);
const { getDetail } = this.props;
getDetail && getDetail();
}
})
.catch((error) => {
console.log(error);
});
};
// 获取列表数据
getIssueList = ( page , item , value , update , updateValue , type ) => {
const { projectsId, meilid , owner } = this.props.match.params;
@ -162,7 +141,7 @@ class MilepostDetail extends Component {
renderMenu = (array, name, id) => {
return (
<Menu className="orderCondition">
<Menu>
<Menu.Item key={"all"} onClick={(e) => this.getOption(e, id, name)}>{name}</Menu.Item>
{
array && array.length > 0 && array.map((item, key) => {
@ -296,15 +275,7 @@ class MilepostDetail extends Component {
:
issues && issues.length>0 && issues.map((item,key)=>{
return(
<OrderItem
key={key} mile
item={item}
search_count={search_count}
page={page}
limit={limit}
{...this.props} {...this.state}
deletedetail={this.deletedetail}
></OrderItem>
<OrderItem key={key} mile item={item} search_count={search_count} page={page} limit={limit} {...this.props} {...this.state}></OrderItem>
)
})
}

View File

@ -42,9 +42,10 @@ class OrderItem extends Component {
})
}
render() {
const { item , checkbox , mile , user_admin_or_member } = this.props;
const { item , checkbox , mile } = this.props;
const { projectsId , owner } = this.props.match.params;
const { current_user } = this.props;
const { current_user } = this.props
return (
item &&
<div className="issueItem">
@ -90,13 +91,13 @@ class OrderItem extends Component {
<div className="milepostleft">
<Link to={`/projects/${owner}/${projectsId}/issues/${item.id}/detail`}><i className="iconfont icon-pinglun1 mr3 font-16"></i>{item.journals_count}</Link>
{
user_admin_or_member ?
<div id="hoverBox" style={{ display: this.state.orderid === item.id && this.state.isdisplay ? 'flex' : 'none' }}>
current_user && current_user.login ?
<div style={{ display: this.state.orderid === item.id && this.state.isdisplay ? 'flex' : 'none' }}>
<div className="mr8 ml8 color-grey-9">
<Link to={`/projects/${owner}/${projectsId}/issues/${item.id}/updatedetail`} className="color-grey-9"><i className="iconfont icon-bianji3 font-14 mr5"></i></Link>
</div>
<div className="color-grey-9">
<Popconfirm placement="bottom" overlayClassName="overlayBox" getPopupContainer={()=>document.getElementById("hoverBox")} title={'您确定要删除当前易修'} okText="是" cancelText="否" onConfirm={() => this.deletedetail(item.id)}>
<Popconfirm placement="bottom" title={'您确定要删除吗'} okText="是" cancelText="否" onConfirm={() => this.deletedetail(item.id)}>
<i className="iconfont icon-yiguanbi1 font-14"></i>
</Popconfirm>
</div>

View File

@ -180,8 +180,8 @@ class UpdateMilepost extends Component {
<Row type="flex" justify="space-between">
<Col>
<Group size="small" onChange={e => onTypeChange(e.target.value)} value={type}>
<Button value="month">日期</Button>
<Button value="year"></Button>
<Button value="month">月份</Button>
<Button value="year"></Button>
</Group>
</Col>
<Col>

View File

@ -64,8 +64,6 @@ class NewMilepost extends Component {
if (result) {
this.setState({ isSpin: false })
this.props.history.push(`/projects/${owner}/${projectsId}/milestones`);
const { getDetail } = this.props;
getDetail && getDetail();
}
}).catch(error => {
this.setState({ isSpin: false })
@ -102,7 +100,7 @@ class NewMilepost extends Component {
required: true, message: '请输入标题'
}],
})(
<Input placeholder="标题" autoComplete="off" maxLength="30" />
<Input placeholder="标题" autoComplete="off"/>
)}
</Form.Item>
</div>
@ -113,7 +111,7 @@ class NewMilepost extends Component {
required: true, message: '请输入描述内容'
}],
})(
<TextArea placeholder="请输入描述内容..." style={{ height: "150px" }} maxLength={500} />
<TextArea placeholder="请输入描述内容..." style={{ height: "150px" }} />
)}
</Form.Item>

View File

@ -17,9 +17,7 @@
line-height: 18px;
color: red;
}
.overlayBox{
width: 230px;
}
.topmilepost {
box-sizing: border-box;
display: flex;
@ -592,7 +590,7 @@ a.issue-type-button.active:hover {
}
/* 发布人、指派人数量过多时要出现滚动条 */
.ant-dropdown-menu.orderCondition {
.ant-dropdown-menu {
max-height: 350px;
overflow-y: auto;
}

View File

@ -201,7 +201,7 @@ class order extends Component {
renderMenu = (array, name, id, toGet) => {
return (
<Menu className="orderCondition">
<Menu>
<Menu.Item key={"all"} onClick={(e) => this.getOption(e, id, name, toGet)}>
{name}
</Menu.Item>
@ -268,8 +268,11 @@ class order extends Component {
checkedValue:[],
all:undefined
});
this.state.select_params.page = 1;
this.state.select_params.limit = 15;
this.state.select_params = {
search: undefined,
page: 1,
limit: 15,
};
this.getIssueList(type);
};
@ -334,8 +337,6 @@ class order extends Component {
const { status_type } = this.state;
this.getIssueList(status_type);
const { getDetail } = this.props;
getDetail && getDetail();
}
})
.catch((error) => {
@ -347,14 +348,17 @@ class order extends Component {
this.props.showLoginDialog();
}
renderNew =()=>{
const { data } = this.state;
if(data && data.user_admin_or_member){
const { projectsId , owner } = this.props.match.params;
const { projectsId , owner } = this.props.match.params;
if (this.props.checkIfLogin()) {
return(
<Link className="topWrapper_btn ml10" target="_blank" to={`/projects/${owner}/${projectsId}/issues/new`}>
+&nbsp;创建易修
</Link>
)
}else{
return(
<a className="topWrapper_btn ml10" onClick={this.islogin}>+&nbsp;创建易修</a>
)
}
}
@ -573,7 +577,7 @@ class order extends Component {
<div className="f-wrap-between screenWrap">
<div className="df">
{
((current_user && current_user.login) && (data && data.user_admin_or_member)) ?
current_user && current_user.login ?
<Checkbox value="0" style={{ lineHeight: "50px", marginRight: "15px" }} checked={all} onChange={this.changeAll}></Checkbox>
: ""
}
@ -818,14 +822,13 @@ class order extends Component {
<OrderItem
key={key}
item={item}
checkbox={current_user &&(data && data.user_admin_or_member) ? <Checkbox value={item.id} key={item.id} style={{ margin: '4px 15px 0px 0px' }}></Checkbox> : ""}
checkbox={current_user ? <Checkbox value={item.id} key={item.id} style={{ margin: '4px 15px 0px 0px' }}></Checkbox> : ""}
search_count={search_count}
page={select_params.page}
limit={select_params.limit}
{...this.props}
{...this.state}
deletedetail={this.deletedetail}
user_admin_or_member={data && data.user_admin_or_member}
></OrderItem>
)
})}

View File

@ -92,10 +92,10 @@ class order_form extends Component {
const url = `/${owner}/${projectsId}/issues/new.json`;
axios.get(url).then((result) => {
if (result && result.data) {
if (result) {
this.setState({
issue_chosen: result.data.issue_chosen,
branches: result.data.issue_chosen.branches,
branches: result.data.branches,
isSpin:false
});
@ -193,14 +193,13 @@ class order_form extends Component {
if (result) {
this.props.history.push(`/projects/${owner}/${projectsId}/issues/${orderId}/detail`);
this.props.showNotification("任务更新成功!");
const { getDetail } = this.props;
getDetail && getDetail();
}
})
.catch((error) => {
this.setState({
isSpin: false,
});
console.log(error);
});
}
}

View File

@ -1,68 +0,0 @@
import React from "react";
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
import { SnackbarHOC } from "educoder";
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
import Loadable from "react-loadable";
import Loading from "../../Loading";
import { Box , Gap , LongWidth } from '../Component/layout';
import { getImageUrl } from 'educoder';
import { Link } from 'react-router-dom';
import './Index.scss';
const SSHNew = Loadable({
loader: () => import("./sub/New"),
loading: Loading,
});
const SSHIndex = Loadable({
loader: () => import("./sub/SSH"),
loading: Loading,
});
function Index(props){
const { current_user } = props;
const { pathname } = props.location;
return(
<div className="newMain clearfix whiteBack">
<div className="boies">
<Box>
<div className="shortW">
<div className="userDetail">
<img src={getImageUrl(`/${current_user && current_user.image_url}`)} alt=""/>
<span>{current_user && current_user.username}</span>
</div>
<ul className="securityUl">
<li>安全设置</li>
<li className={pathname.indexOf("/settings/SSH")>-1 ?"active":""}><Link to={`/settings/SSH`}><i className="iconfont icon-xuanzhongssh_icon mr5 font-14"></i>SSH密钥</Link></li>
</ul>
</div>
<LongWidth>
<Gap>
<Switch>
<Route
path="/settings/SSH/new"
render={(p) => (
<SSHNew {...props} {...p}/>
)}
></Route>
<Route
path="/settings/SSH"
render={(p) => (
<SSHIndex {...props} {...p}/>
)}
></Route>
</Switch>
</Gap>
</LongWidth>
</Box>
</div>
</div>
)
}
export default withRouter((CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
);

View File

@ -1,192 +0,0 @@
.whiteBack{
background-color: #fff;
.boies{
width: 1200px;
margin:0px auto;
padding:30px 0px 10px;
.shortW{
width: 198px;
border: 1px solid rgba(153, 153, 153, 0.22);
border-radius: 4px;
min-height: 400px;
margin-bottom: 30px;
.userDetail{
background: rgba(153, 153, 153, 0.05);
border-radius: 4px 4px 0px 0px;
padding:20px 25px;
display: flex;
align-items: center;
justify-content: flex-start;
img{
height: 48px;
width: 48px;
border-radius: 50%;
margin-right: 12px;
}
span{
font-size: 16px;
color: #333;
max-width: 90px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.securityUl{
padding:20px 16px;
color: #333;
li{
margin-bottom: 10px;
height: 27px;
line-height: 27px;
position: relative;
cursor: pointer;
a{
color: #666;
&:hover{
color: #333;
}
}
&.active a{
color: #333;
}
&:first-child{
font-size: 16px;
}
&.active::before{
position: absolute;
left: -16px;
top:0px;
height: 100%;
width: 2px;
content: "";
background-color: #2A61FF;
}
}
}
}
.sshHead{
display: flex;
align-items: center;
padding:15px 20px;
justify-content: space-between;
border-bottom: 1px solid #EEEEEE;
&>span{
font-size: 18px;
}
}
.ant-list-item{
padding:20px;
border-bottom: 1px solid #eee!important;
&>img{
margin-right: 24px;
}
&>div{
flex:1;
width: 0;
margin-right: 20px;
p{
margin-bottom: 8px!important;
}
span{
font-size: 12px;
}
}
.ant-btn.ant-btn-danger{
background-color: #fff;
border-color: #D0D0D0;
color: #DF0002;
&:hover{
background-color: #DF0002;
color: #fff;
border-color: #DF0002;
}
}
}
.questionLink{
padding:15px 20px;
a{
color: #4B7AFF;
&:hover{
text-decoration: underline;
}
}
}
.sshForm{
padding:15px 20px;
.ant-col.ant-form-item-label{
font-size: 16px;
color:#333;
}
}
}
}
.deleteBox{
.ant-modal-header{
background-color: rgba(223, 0, 2, 0.06);
border-bottom: none;
.ant-modal-title{
text-align: left;
font-size: 20px;
}
}
.ant-modal-body{
padding:30px 50px;
p{
font-size: 16px;
line-height: 26px;
color:#666
}
.desc{
.descMain{
align-items: center;
justify-content: center;
font-size: 20px;
margin-bottom: 10px;
i{
font-size: 38px!important;
color:#DF0002
}
}
}
}
.ant-modal-footer{
border-top: none;
text-align: center;
padding-bottom: 40px;
button{
width: 120px;
margin:0px 20px;
&.ant-btn-danger{
background-color: #fff;
color: #DF0002;
border-color: #D0D0D0;
}
}
}
}
.descModal{
.ant-modal-title{
text-align: left;
font-size: 20px;
}
.keyContent{
border:1px solid #eee;
border-radius: 4px;
padding:10px 15px;
margin-top: 10px;
max-height: 200px;
overflow-y: auto;
}
.keysTitle{
display: flex;
align-items: flex-start;
justify-content: flex-start;
flex-wrap: wrap;
span:last-child{
word-break: break-all;
flex:1;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 B

View File

@ -1,28 +0,0 @@
import React from 'react';
import { AlignCenter } from '../../Component/layout';
import { Modal , Button } from 'antd';
function DeleteBox({ visible , onCancel ,onSuccess }) {
return(
<Modal
visible={visible}
onCancel={onCancel}
title="删除SSH密钥"
width="600px"
className="deleteBox"
footer={
<div>
<Button size={'large'} onClick={onCancel}>取消</Button>
<Button type={"danger"} size={"large"} onClick={onSuccess}>确认删除</Button>
</div>
}
>
<div className="desc">
<AlignCenter className="descMain"><i className="iconfont icon-jinggao1 mr10"></i>您确定要删除此 SSH 密钥吗</AlignCenter>
<p>此操作将永久删除该SSH密钥且不可恢复如果您想再次使用该密钥则需要您重新上传</p>
</div>
</Modal>
)
}
export default DeleteBox;

View File

@ -1,59 +0,0 @@
import React , { forwardRef, useState } from 'react';
import { Link } from 'react-router-dom';
import { Button, Form , Input } from 'antd';
import Axios from 'axios';
const { TextArea } = Input;
function New({ form , showNotification , history }) {
const { getFieldDecorator, validateFields , setFieldsValue } = form;
const [ msg , setMsg ] = useState(undefined);
function submit() {
validateFields((error,values)=>{
if(!error){
const url = `/public_keys.json`;
Axios.post(url,{
...values
}).then(result=>{
if(result){
if(result.data.status === 0){
history.push(`/settings/SSH`);
showNotification("密钥创建成功!");
}
let s = {
status:result.data.status,
message:result.data.message
}
setMsg(s);
}
}).catch(error=>{})
}
})
}
return(
<div>
<div className="sshHead">
<span><Link to={`/settings/SSH`} className="color-blue">SSH密钥</Link><i className="iconfont icon-youjiantou ml5 mr5 font-12"></i>添加SSH密钥</span>
</div>
<Form className="sshForm">
<Form.Item label="标题" validateStatus={msg && msg.status === 10001 ? "error":undefined} help={msg && msg.status === 10001 ? msg.message:undefined}>
{getFieldDecorator("title",{
rules:[{required:true,message:"请输入密钥标题"}]
})(
<Input placeholder="请输入密钥标题" size="large" maxLength="200"/>
)}
</Form.Item>
<Form.Item label="密钥" validateStatus={msg && msg.status === 10002 ? "error":undefined} help={msg && msg.status === 10002 ? msg.message:undefined}>
{getFieldDecorator("key",{
rules:[{required:true,message:"请输入密钥"}]
})(
<TextArea placeholder="支持以'ssh-rsa','ssh-dss','ssh-ed25519','ecdsa-sha2-nistp256','ecdsa-sha2-nistp384','ecdsa-sha2-nistp521'开头" autoSize={{ minRows: 6, maxRows: 6 }}/>
)}
</Form.Item>
<Button type="primary" style={{width:"100px"}} onClick={submit}>确定</Button>
</Form>
</div>
)
}
export default Form.create()(forwardRef(New));

Some files were not shown because too many files have changed in this diff Show More