Compare commits
645 Commits
master
...
dev_educod
Author | SHA1 | Date |
---|---|---|
|
4cb46f4d53 | |
|
666693f332 | |
|
f542446177 | |
|
4183c95af3 | |
|
91ea90546e | |
|
c7d92a2f59 | |
|
0bfd5c18a2 | |
|
2afcbe5424 | |
|
67bba9ebdc | |
|
a2e3617036 | |
|
a0a83f63f6 | |
|
3806a5dd8d | |
|
d318546687 | |
|
74337f6eb1 | |
|
ebe3d1df2c | |
|
b3639e4052 | |
|
ceab8a80d1 | |
|
f4ad819bea | |
|
cc093b6ddf | |
|
0552ac4b9a | |
|
75a0abe11a | |
|
ad60c52e5c | |
|
2f9db85ccc | |
![]() |
cf6be69846 | |
![]() |
d9e27cf0d8 | |
![]() |
4e666a8a6d | |
![]() |
e04d17fd50 | |
|
3d2e91dafd | |
|
5dfe4b2350 | |
|
44edd530fc | |
|
9086593bf8 | |
|
29592bc423 | |
|
bfc51c04aa | |
|
080e0f6d4e | |
|
ba4ad19402 | |
|
554ff5b175 | |
|
940a1b33e6 | |
|
470de8e973 | |
|
afdb688cd8 | |
|
3dbc2cfb42 | |
|
5dc6e827c2 | |
|
f4103c5516 | |
|
0ba4c28f21 | |
|
a39c1ee1e1 | |
|
429a8db84b | |
|
dfabc4a36b | |
|
4e5a851484 | |
|
f5e1342a03 | |
|
f47fdbb1e8 | |
![]() |
191a37b97d | |
![]() |
dbdd707613 | |
|
34dc16cac0 | |
|
13636d74be | |
![]() |
40bc385715 | |
![]() |
d81cab7f19 | |
![]() |
30711408a2 | |
![]() |
de0337dfb6 | |
![]() |
467e7b8582 | |
![]() |
8d4154af1f | |
![]() |
2ce686aae2 | |
![]() |
4efb81b587 | |
![]() |
943bb18edf | |
![]() |
2638b0b4c9 | |
![]() |
895cf78521 | |
![]() |
b93f387ca3 | |
|
bbe65c9442 | |
|
2c6eb30012 | |
|
0f6603bee7 | |
|
a8b5a9c18d | |
|
4a659beda1 | |
|
b396f08176 | |
![]() |
a604cfe1b7 | |
|
753cefe8b2 | |
![]() |
554cec7e98 | |
![]() |
7b52b4676d | |
![]() |
95c4bed0cb | |
![]() |
6b79378cc6 | |
![]() |
5aae3d9b61 | |
![]() |
e6bc87a74f | |
![]() |
b30bf617d9 | |
![]() |
5605d1638e | |
|
9a32e37a0c | |
|
0a6c000d4f | |
![]() |
421ece9506 | |
![]() |
6eed5a165d | |
![]() |
222c231f76 | |
![]() |
5a4ee03587 | |
|
9c0c9dfc03 | |
![]() |
f2836b5b7c | |
![]() |
0206ff6681 | |
![]() |
29b7d82929 | |
![]() |
519737bf2e | |
![]() |
576fd8b2c3 | |
![]() |
5689bf439c | |
![]() |
b3398bf0d3 | |
|
cdb7746e5e | |
![]() |
3fb1b9496e | |
|
281e1b27f8 | |
|
31ac62a72d | |
![]() |
17295a4f6d | |
![]() |
e9439cf965 | |
|
934157349d | |
|
cb811990f1 | |
|
3d2da98542 | |
|
87ca9a89ef | |
![]() |
08ca118dd2 | |
|
3c2df14e86 | |
![]() |
56f06f0a34 | |
![]() |
b825b982e2 | |
![]() |
33dec2dae5 | |
|
81c0f5481b | |
|
0b54a6f2cc | |
|
7535b4b29c | |
|
90acbe8f61 | |
|
71a69502e0 | |
|
fdad2eee72 | |
![]() |
513eb0fc52 | |
![]() |
b659df1960 | |
![]() |
d1f4bcc3c4 | |
![]() |
9a93d7920d | |
![]() |
538c388af0 | |
![]() |
d8646a237c | |
![]() |
2cb833be1e | |
![]() |
b85bd30217 | |
![]() |
a9d3bd68a9 | |
![]() |
46231868aa | |
![]() |
4f57935633 | |
![]() |
977e6afbc0 | |
![]() |
72ec7103d0 | |
![]() |
43be508702 | |
![]() |
d4740c84a9 | |
![]() |
e4f544fe75 | |
![]() |
7aa238f10d | |
![]() |
06afdae21b | |
![]() |
169c51d69d | |
![]() |
27c55e8a48 | |
![]() |
0355d9c80c | |
|
d3f3a673b9 | |
|
da58b17ca2 | |
|
794cf1f283 | |
|
422b916be1 | |
|
ee5bddaa75 | |
|
1fd7a21e9f | |
|
6218fe83ed | |
|
fe8494ec17 | |
|
1d3128b1eb | |
|
c414677441 | |
|
2f2344fe55 | |
|
3e98988f83 | |
|
3a717d818a | |
|
e8b1dcb037 | |
|
eae91a7f4f | |
|
600cef8826 | |
![]() |
f75b4b73da | |
|
5e64ce0d40 | |
![]() |
fbaf19855a | |
![]() |
8634c330c4 | |
|
5b8cf2e441 | |
|
5daada4b98 | |
|
4c0f3497a9 | |
|
d4a59e9a94 | |
|
87f26db26d | |
![]() |
4a4d767710 | |
|
4f71cd1c0a | |
|
1f7dda2526 | |
|
e8a74dc780 | |
|
fc3a1e4088 | |
|
335e484167 | |
|
4d613fd07f | |
|
cb87a9d075 | |
|
25a3e10c27 | |
|
60327188eb | |
|
4b3e62b907 | |
![]() |
714b90581b | |
|
ff1e063979 | |
![]() |
4264c127d9 | |
|
400bd28801 | |
![]() |
15b2ce6ea9 | |
![]() |
3ae9284494 | |
|
fb63377996 | |
|
9527f69486 | |
|
b82e7d9d69 | |
|
9db4f1b18c | |
|
c13c7025dd | |
|
d8384ab4bd | |
|
882f0760e8 | |
|
5e337cb94f | |
|
569bc39e1e | |
|
0e643287f9 | |
|
3d9b43a784 | |
|
ed2c16661a | |
|
8e4819217c | |
|
d03182cbd4 | |
|
7416d9bcb6 | |
|
3bfbba2303 | |
|
fa47ae9b5e | |
|
ac93cfbc8a | |
|
bb7732c666 | |
|
81d8a866f0 | |
|
0a334abede | |
|
1ada91917e | |
|
25f193a1d3 | |
|
e8bcebbf71 | |
|
afaef5f0d0 | |
|
e096e1aa50 | |
|
ec2d51e0d3 | |
|
4ab36af1a9 | |
|
b0088a24ae | |
|
2f25643fcc | |
|
91338c863c | |
|
9786aaa4fe | |
|
34f108118b | |
|
61abecde53 | |
|
326aede507 | |
|
c3cc105468 | |
|
80e20a9cca | |
|
bb8e671c20 | |
|
1954a4f8d3 | |
|
b3dec1ee8e | |
|
278cdba352 | |
|
e25de315f8 | |
|
6bbdb3d7a8 | |
|
eb254de9fd | |
|
c9279b274e | |
![]() |
ce477020de | |
|
21078af26f | |
![]() |
bc5ec6103e | |
![]() |
fcc53f5278 | |
|
da69213b8e | |
|
365ff99785 | |
|
e206de9f1f | |
![]() |
358880bfd2 | |
|
63971edc44 | |
|
020a976135 | |
|
29d74526d1 | |
|
2e1cf5ad82 | |
|
56c8f7fa82 | |
|
4db125545f | |
|
ecd1a8444e | |
|
0a0705d42c | |
|
be0e0134f3 | |
|
6904116a3a | |
|
421218ef77 | |
|
5f89356679 | |
|
cab540b812 | |
|
2ffa835b84 | |
|
e93778b004 | |
|
232e09c04f | |
|
459e05f465 | |
|
5ee3519c21 | |
|
4270d1d8eb | |
|
dd298380a7 | |
|
255ae11012 | |
|
ec4e70d7f0 | |
|
758600e4d0 | |
|
7d4def6056 | |
|
a1cc59e89b | |
|
9e4ca503df | |
|
472ea69e29 | |
|
3c5e10fa58 | |
|
915bf69e6f | |
|
a00452b960 | |
|
3eeed4620c | |
|
54858bcd39 | |
|
6820fed5b5 | |
|
82ac32d84f | |
|
fe6f8a9349 | |
|
d4f0d21608 | |
|
56c867a4a3 | |
|
bd219c0b41 | |
|
1292019aac | |
|
33e1b7e400 | |
|
9af269061d | |
|
2557b36cea | |
|
f6c84e4fad | |
|
161866aaaf | |
|
3151314529 | |
|
775434d856 | |
|
b802fd2fbd | |
|
cee82314da | |
|
7295a71bc5 | |
|
4971dc0a3d | |
|
e591de00fd | |
|
c331dbb445 | |
|
36a58c0fe3 | |
|
0e949110fd | |
|
4ffb2acc9c | |
|
0991ba4698 | |
|
f82a51fd83 | |
|
98ed1794cf | |
|
6e756826f7 | |
|
684f9dbfe1 | |
|
9577478e97 | |
|
ff9beb0949 | |
|
f4055e50e2 | |
|
af8a5058b8 | |
|
efb918e21d | |
|
a9a3f9c977 | |
|
d6b0eee067 | |
|
ca409857bb | |
|
219590a0cd | |
|
2f88227388 | |
![]() |
a3b943f744 | |
![]() |
8b4fc88b1d | |
|
131d8fa81c | |
|
3c2e899a20 | |
|
07511efbd6 | |
|
3eaf1dc214 | |
|
9608f204e8 | |
|
534a6bdeab | |
|
ca5c279ac0 | |
|
ce3b460717 | |
|
1c87cf6b98 | |
|
614f0ea436 | |
|
a3ae80aa22 | |
|
70f9cd0997 | |
|
fa247e39bf | |
|
97a81572a9 | |
|
e084b015cf | |
|
cbe427a114 | |
|
f842f75065 | |
|
c8eed99f5d | |
|
fbd4273603 | |
|
9299a1667e | |
|
10c9891b7b | |
|
e5f8eac497 | |
|
633dee9655 | |
|
e7b7d20f94 | |
|
801c544f65 | |
|
5a1fcb1443 | |
|
cf1d2dd5ba | |
|
121b1aaab1 | |
|
3e42a620d9 | |
|
33297226ea | |
|
982536b547 | |
|
fd4046af04 | |
|
36683ad69b | |
|
2262508777 | |
|
4f64b840b0 | |
|
a04b8de39e | |
|
4d99c97370 | |
|
58f7c984a2 | |
|
9db8455de8 | |
|
4b1bccd1cd | |
|
eff12234fa | |
|
77fdafd58b | |
|
5fea412ca8 | |
|
5f15b03462 | |
![]() |
a2f63732cf | |
![]() |
abf9b25651 | |
|
bf4ef7023d | |
|
f463b20de7 | |
|
7934f07cea | |
![]() |
f19a9f6ceb | |
![]() |
8b5e159cac | |
![]() |
16dff252c0 | |
|
fe0fab7b61 | |
|
4e18d13b6b | |
|
d81d456d76 | |
|
8c66d817b5 | |
|
7579dc8a59 | |
|
3087e5471a | |
|
4e8f304262 | |
|
48e9ca6706 | |
|
fc8a476aa3 | |
|
89773b5036 | |
|
387387108a | |
|
2617831a9f | |
|
f0747eab05 | |
![]() |
789e84211c | |
|
12ce0aa4f5 | |
|
4a322d1e2e | |
|
a38b4af8bc | |
|
d1743b350d | |
|
7fd790fe7d | |
|
c48e3584c3 | |
|
d0ca09e780 | |
|
ed3bf55f90 | |
|
7ff29fec70 | |
|
79331db271 | |
|
fbfd5f175d | |
|
07101f5770 | |
|
652de9b441 | |
![]() |
f2a660d595 | |
|
711c2e57da | |
![]() |
6fc441d7c5 | |
|
a94d02bb8a | |
|
cc2dd35ff4 | |
|
f003a99779 | |
![]() |
b4e2c6148a | |
|
b1ead191a6 | |
![]() |
0735968e73 | |
![]() |
37f5bce087 | |
![]() |
951792dc11 | |
![]() |
7d7f265ffb | |
|
7495c54f8d | |
![]() |
631f8ceeea | |
![]() |
d70ddfb2f7 | |
![]() |
54741a6d8a | |
|
116c3e531f | |
|
990cfe2781 | |
|
66e1235c3b | |
|
76fdff6737 | |
|
55a6f93fe3 | |
|
4bc79b5153 | |
|
ac4488a907 | |
![]() |
3085e40426 | |
|
ea979b78ee | |
|
b1775e5158 | |
|
3678b8eb72 | |
|
12d8f5bf5d | |
|
e04fb11194 | |
|
010edf3cb2 | |
|
ab26a528b6 | |
|
6d39e25667 | |
![]() |
a2ea832208 | |
![]() |
d1bc3680b9 | |
![]() |
08416390e5 | |
|
190200d1e6 | |
|
b124364203 | |
|
2078a044b6 | |
![]() |
35c2f63c55 | |
![]() |
30c61f0a7d | |
![]() |
743dabd553 | |
![]() |
015296e065 | |
|
48c21ac245 | |
![]() |
a93b8a08c9 | |
![]() |
1c48ffb130 | |
|
0ee9280bb1 | |
|
e785e9a358 | |
|
b3b95e9856 | |
![]() |
5be8ead356 | |
|
7d78919c4a | |
|
d5b4c5425f | |
![]() |
f259f05cdc | |
|
95cd289373 | |
|
e739f5b786 | |
![]() |
c79be9a597 | |
|
fb03565a25 | |
|
7ec53a246c | |
|
56946f94e8 | |
![]() |
61ee3fe36f | |
![]() |
d5f989bbe2 | |
![]() |
f5817e5150 | |
![]() |
1c24baf3b9 | |
![]() |
3d3ef19d4a | |
|
7b77c46915 | |
|
746f552a21 | |
|
7872d5ecab | |
|
60da6bd110 | |
![]() |
a3bbf6b1c1 | |
![]() |
d37709b1a5 | |
|
aeff357660 | |
|
0e6cb3954a | |
|
ae12618c0c | |
|
1c46617144 | |
|
ec133a6880 | |
|
bcdb631c20 | |
|
8021d96cd8 | |
![]() |
9ae3c0e786 | |
![]() |
914966bd39 | |
![]() |
f89f4b6628 | |
|
7407545d1f | |
![]() |
f0ffc9a29c | |
|
987eb39681 | |
![]() |
848109afe8 | |
![]() |
d7bdb35bb7 | |
![]() |
254b3173d1 | |
![]() |
44f06b7305 | |
|
b16e95923a | |
![]() |
98a7f73c04 | |
![]() |
b6a450a482 | |
|
66c495d6b5 | |
![]() |
42139ef998 | |
|
925d5ea356 | |
![]() |
ad1f0e29e7 | |
|
3498390974 | |
|
4f3e385f78 | |
|
18b289b84c | |
|
e3f49db5c0 | |
|
4add266047 | |
|
4a6012bfa9 | |
|
7fe88aa4d9 | |
|
bc6ef583fb | |
|
b268b540d8 | |
|
7e69c64c9c | |
|
85ef26f70e | |
|
8c7865d2c1 | |
|
999a15761d | |
|
5c2330512e | |
![]() |
3da9306ed6 | |
![]() |
568a632d65 | |
![]() |
5982c0df96 | |
|
21046bbcb7 | |
![]() |
0c816805fb | |
![]() |
28f8b6b54c | |
![]() |
7d087ec1f2 | |
|
beba8975ca | |
![]() |
d4690cc8b5 | |
![]() |
38021c2e4b | |
![]() |
4233811ae3 | |
![]() |
8273acd195 | |
![]() |
3158953571 | |
![]() |
5eb542cfbf | |
![]() |
146e51c182 | |
![]() |
58691ec2ea | |
![]() |
2f5d9d225c | |
![]() |
d88179a486 | |
![]() |
58613bf4c1 | |
![]() |
be379d39e3 | |
![]() |
3f918b53d9 | |
|
c4bc8fc9c5 | |
|
a1b82d833b | |
![]() |
350769d3d7 | |
|
af31c381f9 | |
![]() |
e7f997d3f6 | |
![]() |
a968287331 | |
|
7dd59f7711 | |
|
c3b43bb5c7 | |
|
159bc0c893 | |
|
ca84851f0b | |
|
4dc0f974df | |
|
5b60d92063 | |
|
f2be69f4e3 | |
|
aa93eade71 | |
|
02b48e8648 | |
|
f50c550816 | |
|
16397c8743 | |
|
5ef79007e2 | |
|
e3321fd676 | |
|
80c559895a | |
|
e804698d70 | |
|
dd20d02477 | |
|
28d3b5bedd | |
|
e1b73f582a | |
|
f94edf90a5 | |
|
c9a9da6de9 | |
|
7d0abfb764 | |
|
f25db9ccf1 | |
|
2d79d144a0 | |
|
a209b29100 | |
|
7666efe1df | |
|
a14eddda52 | |
|
c54433728b | |
|
ee994458a9 | |
|
ea57432cb4 | |
|
831ff66ebe | |
|
bc0d60fea9 | |
|
53c92383d2 | |
|
7697449f05 | |
|
2e66904f81 | |
|
21f7a2530a | |
|
d76416bf1a | |
|
a05d06bc1f | |
|
5f7eaa24c6 | |
|
e4e419beb2 | |
|
14a68f9241 | |
|
dd0a9e50e5 | |
|
3148397343 | |
|
7f7a1021df | |
|
882d8aef75 | |
|
987688bcc9 | |
|
3bebbdc44d | |
|
7b4723b111 | |
|
3a8d9698db | |
|
6b441fc919 | |
|
b1725a00ee | |
|
0294439f18 | |
|
e7acb2f142 | |
|
21ab03f3da | |
|
102b21f255 | |
|
76ed232f6a | |
|
f14443a6e8 | |
|
146d4c9baa | |
|
cacb8c84ae | |
|
fb8ae3fcdf | |
|
a257d832cb | |
|
ff7d191011 | |
|
9a2c3f1754 | |
|
bcdf506e6c | |
|
ccc6cb5d26 | |
|
0661c6b932 | |
|
99947c0c87 | |
|
03cff6ec2e | |
|
f86acfebdf | |
|
9a62d7806e | |
|
a7df6da5f0 | |
|
eab68ac270 | |
|
a9e3513706 | |
|
6b20391c72 | |
|
3135300fe6 | |
|
ecc6387113 | |
|
990c4e22b0 | |
|
7eea9316dd | |
|
6a546c79e4 | |
|
4c48b6c77a | |
|
4d5430c3ed | |
|
d49af735f1 | |
|
03370e8a07 | |
|
0b43fa8952 | |
|
465c4cc8c7 | |
|
37668ddcd4 | |
|
7102594444 | |
|
b2f2df65bb | |
|
8a577fb263 | |
|
5c491071b6 | |
|
c554237076 | |
|
d22a741bf7 | |
|
383b3f5d74 | |
|
63da7adcf9 | |
|
3243aeebc6 | |
|
1a86a75345 | |
|
3b6cc99d49 | |
|
d872ffc606 | |
|
3b69c01ead | |
|
1e0608aa14 | |
|
9b6816e346 | |
|
6ee257231d | |
|
70edb73f6c | |
|
5c7553d4aa | |
|
278701f24b | |
|
97ab819bf9 | |
|
d870f17b85 | |
|
91ac6c2357 | |
|
3702d1c1a5 | |
|
93d48c359e | |
|
80dace18e9 | |
|
375cbb37df | |
|
10d933e037 | |
|
4fdd3f6f80 | |
|
458b56e33b | |
|
c256887132 | |
|
6a588db7f6 | |
|
6c4e1c6665 | |
|
c554d2c00d | |
|
b69bf5974a | |
|
ecb1691b4d | |
|
6a9f2b31a6 | |
|
4947cd8456 | |
|
8429effe16 | |
|
49ebe450be | |
|
e3c926da77 | |
|
af48da2eb3 | |
|
6630309466 | |
|
a7c3dee7e3 |
|
@ -37,7 +37,7 @@ bower_components
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
build/
|
build/
|
||||||
|
src/.umi/
|
||||||
# Dependency directories
|
# Dependency directories
|
||||||
node_modules/
|
node_modules/
|
||||||
jspm_packages/
|
jspm_packages/
|
||||||
|
|
|
@ -0,0 +1,788 @@
|
||||||
|
<?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$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/forge/Quality/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Quality/index.js" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="DatabaseView">
|
||||||
|
<option name="SHOW_INTERMEDIATE" value="true" />
|
||||||
|
<option name="GROUP_DATA_SOURCES" value="true" />
|
||||||
|
<option name="GROUP_SCHEMA" value="true" />
|
||||||
|
<option name="GROUP_CONTENTS" value="false" />
|
||||||
|
<option name="SORT_POSITIONED" value="false" />
|
||||||
|
<option name="SHOW_EMPTY_GROUPS" value="false" />
|
||||||
|
<option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
|
||||||
|
<option name="HIDDEN_KINDS">
|
||||||
|
<set />
|
||||||
|
</option>
|
||||||
|
<expand />
|
||||||
|
<select />
|
||||||
|
</component>
|
||||||
|
<component name="FindInProjectRecents">
|
||||||
|
<findStrings>
|
||||||
|
<find>high</find>
|
||||||
|
<find>markdown</find>
|
||||||
|
<find>markdown-body</find>
|
||||||
|
<find>readme</find>
|
||||||
|
<find>SSH</find>
|
||||||
|
<find>clone</find>
|
||||||
|
<find>edu_pu</find>
|
||||||
|
<find>edu_</find>
|
||||||
|
<find>.str</find>
|
||||||
|
<find>ssh</find>
|
||||||
|
<find>/projects</find>
|
||||||
|
<find>全部项目数</find>
|
||||||
|
<find>未选择标签</find>
|
||||||
|
<find>未选择里程碑</find>
|
||||||
|
<find>.issueItem</find>
|
||||||
|
<find>未选择</find>
|
||||||
|
<find>issueItem</find>
|
||||||
|
<find>detailContent</find>
|
||||||
|
<find>df mt20</find>
|
||||||
|
<find>.detailHeader-wrapper</find>
|
||||||
|
<find>headerMenu-wrapper</find>
|
||||||
|
<find>对话</find>
|
||||||
|
<find>issueNo</find>
|
||||||
|
<find>f-wrap-between</find>
|
||||||
|
<find>user_img</find>
|
||||||
|
<find>getCommitList</find>
|
||||||
|
<find>login</find>
|
||||||
|
<find>点击开启</find>
|
||||||
|
<find>build</find>
|
||||||
|
<find>HEAD</find>
|
||||||
|
</findStrings>
|
||||||
|
<replaceStrings>
|
||||||
|
<replace>任务</replace>
|
||||||
|
</replaceStrings>
|
||||||
|
<dirStrings>
|
||||||
|
<dir>$PROJECT_DIR$/src/forge/Merge</dir>
|
||||||
|
<dir>$PROJECT_DIR$</dir>
|
||||||
|
<dir>$PROJECT_DIR$/public</dir>
|
||||||
|
<dir>$PROJECT_DIR$/src/modules/user/usersInfo</dir>
|
||||||
|
<dir>$PROJECT_DIR$/src/modules/user</dir>
|
||||||
|
<dir>$PROJECT_DIR$/src/forge</dir>
|
||||||
|
<dir>$PROJECT_DIR$/src</dir>
|
||||||
|
<dir>$PROJECT_DIR$/</dir>
|
||||||
|
</dirStrings>
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="GitSEFilterConfiguration">
|
||||||
|
<file-type-list>
|
||||||
|
<filtered-out-file-type name="LOCAL_BRANCH" />
|
||||||
|
<filtered-out-file-type name="REMOTE_BRANCH" />
|
||||||
|
<filtered-out-file-type name="TAG" />
|
||||||
|
<filtered-out-file-type name="COMMIT_BY_MESSAGE" />
|
||||||
|
</file-type-list>
|
||||||
|
</component>
|
||||||
|
<component name="IdeDocumentHistory">
|
||||||
|
<option name="CHANGED_PATHS">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/newMilepost.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Settings/Index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/Tags.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Settings/new_tags.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/MergeDetail.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/Index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/merge.css" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/New/Index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/tpm/NewFooter.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Version/version.css" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/Projects.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/App.js" />
|
||||||
|
<option value="$PROJECT_DIR$/.gitignore" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/Infos.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/usersInfo.css" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/tpm/NewHeader.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/login/LoginDialog.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/login/EducoderLogin.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/LoginRegisterComponent.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/login/EducoderInteresse.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/Projects.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/AppConfig.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/quillForEditor/index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/IndexItem.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootCommit.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Activity/ActivityItem.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Branch/CloneAddress.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Version/version.js" />
|
||||||
|
<option value="$PROJECT_DIR$/public/css/css_min_all.css" />
|
||||||
|
<option value="$PROJECT_DIR$/public/index.html" />
|
||||||
|
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/InfosBanner.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/CopyDetail.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/UpdateMerge.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/order.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/OrderItem.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Main/list.css" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/order.css" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/MergeItem.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/New.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/UpdateDetail.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/NewMerge.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="MarkdownSettingsMigration">
|
||||||
|
<option name="stateVersion" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectFrameBounds" fullScreen="true">
|
||||||
|
<option name="width" value="1440" />
|
||||||
|
<option name="height" value="900" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectId" id="27mV8lt7EW3FNNbkNliC8c3gmhR" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
|
<component name="ProjectView">
|
||||||
|
<navigator proportions="" version="1">
|
||||||
|
<foldersAlwaysOnTop value="true" />
|
||||||
|
</navigator>
|
||||||
|
<panes>
|
||||||
|
<pane id="ProjectPane">
|
||||||
|
<subPane>
|
||||||
|
<expand>
|
||||||
|
<path>
|
||||||
|
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="build" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
</expand>
|
||||||
|
<select />
|
||||||
|
</subPane>
|
||||||
|
</pane>
|
||||||
|
<pane id="Scope" />
|
||||||
|
</panes>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
|
<property name="node.js.detected.package.eslint" value="true" />
|
||||||
|
<property name="node.js.detected.package.tslint" value="true" />
|
||||||
|
<property name="node.js.path.for.package.eslint" value="project" />
|
||||||
|
<property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" />
|
||||||
|
<property name="node.js.selected.package.tslint" value="(autodetect)" />
|
||||||
|
<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="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="$PROJECT_DIR$" />
|
||||||
|
<recent name="$PROJECT_DIR$/src/modules/user/usersInfo" />
|
||||||
|
<recent name="$PROJECT_DIR$/build" />
|
||||||
|
<recent name="$PROJECT_DIR$/src/forge/Images" />
|
||||||
|
</key>
|
||||||
|
</component>
|
||||||
|
<component name="RubyModuleManagerSettings">
|
||||||
|
<option name="blackListedRootsPaths">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" />
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration />
|
||||||
|
</component>
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="" />
|
||||||
|
<created>1584692398144</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1584692398144</updated>
|
||||||
|
<workItem from="1584692401543" duration="6228000" />
|
||||||
|
<workItem from="1585015135223" duration="21118000" />
|
||||||
|
<workItem from="1585194891947" duration="1630000" />
|
||||||
|
<workItem from="1585210651078" duration="1600000" />
|
||||||
|
<workItem from="1585217705353" duration="104000" />
|
||||||
|
<workItem from="1585217834609" duration="4000" />
|
||||||
|
<workItem from="1585217980103" duration="3406000" />
|
||||||
|
<workItem from="1585288258489" duration="17495000" />
|
||||||
|
<workItem from="1585732642767" duration="11458000" />
|
||||||
|
<workItem from="1585817691582" duration="2125000" />
|
||||||
|
<workItem from="1585900267463" duration="136000" />
|
||||||
|
<workItem from="1585902299727" duration="2113000" />
|
||||||
|
<workItem from="1586153685130" duration="10062000" />
|
||||||
|
<workItem from="1586245827209" duration="1692000" />
|
||||||
|
<workItem from="1586330226261" duration="658000" />
|
||||||
|
<workItem from="1586400014081" duration="18358000" />
|
||||||
|
<workItem from="1586517058808" duration="1607000" />
|
||||||
|
<workItem from="1586741565210" duration="25216000" />
|
||||||
|
<workItem from="1586946208505" duration="2914000" />
|
||||||
|
<workItem from="1587004932342" duration="7698000" />
|
||||||
|
<workItem from="1587020811560" duration="543000" />
|
||||||
|
<workItem from="1587021467416" duration="8000" />
|
||||||
|
<workItem from="1587022017639" duration="2902000" />
|
||||||
|
<workItem from="1587047814589" duration="8239000" />
|
||||||
|
<workItem from="1587117033332" duration="611000" />
|
||||||
|
<workItem from="1587362728834" duration="185000" />
|
||||||
|
<workItem from="1587374749323" duration="458000" />
|
||||||
|
<workItem from="1587375511570" duration="1067000" />
|
||||||
|
<workItem from="1587376696494" duration="11000" />
|
||||||
|
<workItem from="1587376745950" duration="14824000" />
|
||||||
|
<workItem from="1587452961769" duration="4499000" />
|
||||||
|
<workItem from="1587534020999" duration="19518000" />
|
||||||
|
<workItem from="1587863258736" duration="1097000" />
|
||||||
|
<workItem from="1587864581358" duration="777000" />
|
||||||
|
<workItem from="1587870344748" duration="138000" />
|
||||||
|
<workItem from="1587882941476" duration="4365000" />
|
||||||
|
<workItem from="1587891008299" duration="390000" />
|
||||||
|
<workItem from="1649925095579" duration="944000" />
|
||||||
|
<workItem from="1651904006915" duration="1267000" />
|
||||||
|
<workItem from="1657591336142" duration="1972000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TimeTrackingManager">
|
||||||
|
<option name="totallyTimeSpent" value="206113000" />
|
||||||
|
</component>
|
||||||
|
<component name="ToolWindowManager">
|
||||||
|
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
|
||||||
|
<layout>
|
||||||
|
<window_info content_ui="combo" id="Project" order="0" weight="0.20243205" />
|
||||||
|
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||||
|
<window_info id="Favorites" order="2" side_tool="true" />
|
||||||
|
<window_info anchor="bottom" id="Message" order="0" />
|
||||||
|
<window_info anchor="bottom" id="Find" order="1" />
|
||||||
|
<window_info anchor="bottom" id="Run" order="2" />
|
||||||
|
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
||||||
|
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||||
|
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||||
|
<window_info anchor="bottom" id="TODO" order="6" />
|
||||||
|
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
|
||||||
|
<window_info anchor="bottom" id="Database Changes" order="8" />
|
||||||
|
<window_info anchor="bottom" id="Version Control" order="9" sideWeight="0.49928468" weight="0.5638554" />
|
||||||
|
<window_info active="true" anchor="bottom" id="Terminal" order="10" sideWeight="0.49928468" visible="true" weight="0.44457832" />
|
||||||
|
<window_info anchor="bottom" id="Event Log" order="11" sideWeight="0.5007153" side_tool="true" weight="0.713253" />
|
||||||
|
<window_info anchor="bottom" id="TypeScript" order="12" />
|
||||||
|
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
||||||
|
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||||
|
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||||
|
<window_info anchor="right" id="Database" order="3" />
|
||||||
|
</layout>
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="Vcs.Log.History.Properties">
|
||||||
|
<option name="COLUMN_ORDER">
|
||||||
|
<list>
|
||||||
|
<option value="0" />
|
||||||
|
<option value="2" />
|
||||||
|
<option value="3" />
|
||||||
|
<option value="1" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
|
<option name="TAB_STATES">
|
||||||
|
<map>
|
||||||
|
<entry key="MAIN">
|
||||||
|
<value>
|
||||||
|
<State />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
<option name="RECENT_FILTERS">
|
||||||
|
<map>
|
||||||
|
<entry key="Branch">
|
||||||
|
<value>
|
||||||
|
<list />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
<entry key="User">
|
||||||
|
<value>
|
||||||
|
<list />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="editorHistoryManager">
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/usersInfo.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="7973">
|
||||||
|
<caret line="469" column="1" selection-start-line="469" selection-start-column="1" selection-end-line="469" selection-end-column="12" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/publicCreatNew.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="714">
|
||||||
|
<caret line="42" column="22" selection-start-line="42" selection-start-column="22" selection-end-line="42" selection-end-column="22" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#41#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/NullData.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="443">
|
||||||
|
<caret line="63" column="23" selection-start-line="63" selection-start-column="15" selection-end-line="63" selection-end-column="23" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/Index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="194">
|
||||||
|
<caret line="216" column="38" selection-start-line="216" selection-start-column="33" selection-end-line="216" selection-end-column="38" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="311">
|
||||||
|
<caret line="58" column="38" selection-start-line="58" selection-start-column="38" selection-end-line="58" selection-end-column="38" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/login/Trialapplication.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="251">
|
||||||
|
<caret line="118" lean-forward="true" selection-start-line="118" selection-end-line="118" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#39#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderInteresse.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1190">
|
||||||
|
<caret line="78" column="28" selection-start-line="78" selection-start-column="28" selection-end-line="78" selection-end-column="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#39#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/login/LoginDialog.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="12104">
|
||||||
|
<caret line="727" column="131" selection-start-line="727" selection-start-column="30" selection-end-line="727" selection-end-column="131" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderLogin.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="2584">
|
||||||
|
<caret line="162" selection-start-line="162" selection-end-line="162" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#39#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderReg.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="289">
|
||||||
|
<caret line="17" column="12" selection-start-line="17" selection-start-column="12" selection-end-line="17" selection-end-column="12" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/user/LoginRegisterComponent.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="161">
|
||||||
|
<caret line="28" column="49" selection-start-line="28" selection-start-column="49" selection-end-line="28" selection-end-column="49" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#39#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/build/css/edu-all.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="221">
|
||||||
|
<caret line="12" column="10" selection-start-line="12" selection-start-column="10" selection-end-line="12" selection-end-column="10" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/courses/busyWork/ConnectProject.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="335">
|
||||||
|
<caret line="61" column="24" selection-start-line="61" selection-start-column="24" selection-end-line="61" selection-end-column="24" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/node_modules/@types/react/index.d.ts">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="204">
|
||||||
|
<caret line="446" column="8" selection-start-line="446" selection-start-column="8" selection-end-line="446" selection-end-column="8" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/tpm/NewHeader.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="204">
|
||||||
|
<caret line="1181" column="72" lean-forward="true" selection-start-line="1181" selection-start-column="40" selection-end-line="1181" selection-end-column="72" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#41#0" expanded="true" />
|
||||||
|
<element signature="e#433#515#0" expanded="true" />
|
||||||
|
<element signature="e#1358#2042#0" />
|
||||||
|
<element signature="n#!!block;n#componentDidMount#0;n#NewHeader#0" />
|
||||||
|
<element signature="e#2353#2665#0" />
|
||||||
|
<element signature="e#2760#2816#0" />
|
||||||
|
<element signature="e#2954#2960#0" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/Index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="133">
|
||||||
|
<caret line="43" column="50" selection-start-line="43" selection-start-column="50" selection-end-line="43" selection-end-column="50" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="86">
|
||||||
|
<caret line="65" column="17" selection-start-line="65" selection-start-column="17" selection-end-line="65" selection-end-column="17" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#38#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/quillForEditor/index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="287">
|
||||||
|
<caret line="45" column="10" lean-forward="true" selection-start-line="45" selection-start-column="10" selection-end-line="45" selection-end-column="10" />
|
||||||
|
<folding>
|
||||||
|
<element signature="n#!!doc" expanded="true" />
|
||||||
|
<element signature="e#166#188#0" expanded="true" />
|
||||||
|
<element signature="e#373#392#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/Projects.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="680">
|
||||||
|
<caret line="40" column="16" selection-start-line="40" selection-start-column="16" selection-end-line="40" selection-end-column="16" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#41#0" expanded="true" />
|
||||||
|
<element signature="e#4148#5191#0" />
|
||||||
|
<element signature="e#5202#6120#0" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/IndexItem.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="175">
|
||||||
|
<caret line="25" column="12" selection-start-line="25" selection-start-column="12" selection-end-line="28" selection-end-column="19" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Activity/ActivityItem.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="217">
|
||||||
|
<caret line="42" column="18" lean-forward="true" selection-start-line="42" selection-start-column="18" selection-end-line="42" selection-end-column="18" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/js/index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="188">
|
||||||
|
<caret line="2068" column="17" selection-start-line="2068" selection-start-column="17" selection-end-line="2068" selection-end-column="17" />
|
||||||
|
<folding>
|
||||||
|
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/UpdateMerge.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="282">
|
||||||
|
<caret line="204" column="12" selection-start-line="204" selection-start-column="12" selection-end-line="206" selection-end-column="19" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
<element signature="e#8046#8546#0" />
|
||||||
|
<element signature="e#8575#9036#0" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-984">
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/react.d.ts">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state>
|
||||||
|
<caret line="927" column="16" lean-forward="true" selection-start-line="927" selection-start-column="16" selection-end-line="927" selection-end-column="16" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/Detail.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="170">
|
||||||
|
<caret line="10" column="26" lean-forward="true" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/App.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-1050">
|
||||||
|
<caret line="12" column="16" lean-forward="true" selection-start-line="12" selection-start-column="16" selection-end-line="12" selection-end-column="16" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Branch/CloneAddress.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="130">
|
||||||
|
<caret line="16" column="39" selection-start-line="16" selection-start-column="39" selection-end-line="16" selection-end-column="39" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="505">
|
||||||
|
<caret line="110" column="75" selection-start-line="110" selection-start-column="75" selection-end-line="110" selection-end-column="75" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/common/TextUtil.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="204">
|
||||||
|
<caret line="12" column="39" selection-start-line="12" selection-start-column="39" selection-end-line="12" selection-end-column="39" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/public/css/edu-all.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="171">
|
||||||
|
<caret line="3481" column="26" selection-start-line="3481" selection-start-column="26" selection-end-line="3481" selection-end-column="26" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/public/index.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="72">
|
||||||
|
<caret line="38" column="38" selection-start-line="38" selection-start-column="38" selection-end-line="38" selection-end-column="38" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/public/css/css_min_all.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="43928">
|
||||||
|
<caret line="1673" column="27300" selection-start-line="1673" selection-start-column="27300" selection-end-line="1673" selection-end-column="27300" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/InfosBanner.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="192">
|
||||||
|
<caret line="85" column="23" lean-forward="true" selection-start-line="85" selection-start-column="23" selection-end-line="85" selection-end-column="23" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#41#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-1670">
|
||||||
|
<caret line="60" selection-start-line="60" selection-end-line="60" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/list.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="326">
|
||||||
|
<caret line="375" column="28" selection-start-line="375" selection-start-column="28" selection-end-line="375" selection-end-column="28" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="187">
|
||||||
|
<caret line="59" column="93" selection-start-line="59" selection-start-column="26" selection-end-line="59" selection-end-column="93" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.css">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="3400">
|
||||||
|
<caret line="200" column="35" selection-start-line="200" selection-start-column="35" selection-end-line="200" selection-end-column="35" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeItem.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="216">
|
||||||
|
<caret line="51" column="38" selection-start-line="51" selection-start-column="38" selection-end-line="51" selection-end-column="38" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/UpdateDetail.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="301">
|
||||||
|
<caret line="337" column="28" lean-forward="true" selection-start-line="337" selection-start-column="28" selection-end-line="337" selection-end-column="28" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
<element signature="e#6358#8304#0" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootCommit.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="229">
|
||||||
|
<caret line="86" column="18" lean-forward="true" selection-start-line="86" selection-start-column="18" selection-end-line="86" selection-end-column="18" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/App.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="12376">
|
||||||
|
<caret line="760" column="37" selection-start-line="760" selection-start-column="37" selection-end-line="760" selection-end-column="37" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/AppConfig.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1989">
|
||||||
|
<caret line="125" column="13" selection-start-line="125" selection-start-column="13" selection-end-line="125" selection-end-column="13" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#26#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1564">
|
||||||
|
<caret line="98" column="20" selection-start-line="98" selection-start-column="20" selection-end-line="98" selection-end-column="20" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/NewMerge.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="4097">
|
||||||
|
<caret line="248" column="18" selection-start-line="248" selection-start-column="18" selection-end-line="248" selection-end-column="18" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/New.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="2431">
|
||||||
|
<caret line="155" column="14" selection-start-line="155" selection-start-column="14" selection-end-line="157" selection-end-column="21" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/.gitignore">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="765">
|
||||||
|
<caret line="45" column="8" selection-start-line="45" selection-start-column="8" selection-end-line="45" selection-end-column="8" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="4726">
|
||||||
|
<caret line="286" column="34" selection-start-line="286" selection-start-column="34" selection-end-line="286" selection-end-column="34" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="14127">
|
||||||
|
<caret line="820" lean-forward="true" selection-start-line="820" selection-end-line="820" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="306">
|
||||||
|
<caret line="18" lean-forward="true" selection-start-line="18" selection-end-line="18" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#40#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
// 使用 IntelliSense 了解相关属性。
|
||||||
|
// 悬停以查看现有属性的描述。
|
||||||
|
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "pwa-chrome",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Launch Chrome against localhost",
|
||||||
|
"url": "http://localhost:8080",
|
||||||
|
"webRoot": "${workspaceFolder}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
15
package.json
|
@ -9,7 +9,7 @@
|
||||||
"antd": "^3.26.15",
|
"antd": "^3.26.15",
|
||||||
"array-flatten": "^2.1.2",
|
"array-flatten": "^2.1.2",
|
||||||
"autoprefixer": "7.1.6",
|
"autoprefixer": "7.1.6",
|
||||||
"axios": "^0.18.1",
|
"axios": "^0.24.0",
|
||||||
"babel-eslint": "7.2.3",
|
"babel-eslint": "7.2.3",
|
||||||
"babel-jest": "20.0.3",
|
"babel-jest": "20.0.3",
|
||||||
"babel-loader": "7.1.2",
|
"babel-loader": "7.1.2",
|
||||||
|
@ -24,11 +24,11 @@
|
||||||
"classnames": "^2.2.5",
|
"classnames": "^2.2.5",
|
||||||
"clipboard": "^2.0.8",
|
"clipboard": "^2.0.8",
|
||||||
"code-prettify": "^0.1.0",
|
"code-prettify": "^0.1.0",
|
||||||
"codemirror": "^5.53.0",
|
"codemirror": "^5.64.0",
|
||||||
"connected-react-router": "4.4.1",
|
"connected-react-router": "4.4.1",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"css-loader": "^3.5.2",
|
"css-loader": "^3.5.2",
|
||||||
"dompurify": "^2.0.15",
|
"dompurify": "^2.3.3",
|
||||||
"dotenv": "4.0.0",
|
"dotenv": "4.0.0",
|
||||||
"dotenv-expand": "4.2.0",
|
"dotenv-expand": "4.2.0",
|
||||||
"echarts": "^4.9.0",
|
"echarts": "^4.9.0",
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
"js-base64": "^2.5.2",
|
"js-base64": "^2.5.2",
|
||||||
"js2wordcloud": "^1.1.12",
|
"js2wordcloud": "^1.1.12",
|
||||||
"katex": "^0.11.1",
|
"katex": "^0.11.1",
|
||||||
"lodash": "^4.17.15",
|
"lodash": "^4.17.21",
|
||||||
"loglevel": "^1.6.8",
|
"loglevel": "^1.6.8",
|
||||||
"marked": "^1.0.0",
|
"marked": "^1.0.0",
|
||||||
"material-ui": "^1.0.0-beta.40",
|
"material-ui": "^1.0.0-beta.40",
|
||||||
|
@ -84,6 +84,8 @@
|
||||||
"react-color": "^2.18.0",
|
"react-color": "^2.18.0",
|
||||||
"react-content-loader": "^3.1.1",
|
"react-content-loader": "^3.1.1",
|
||||||
"react-cookies": "^0.1.1",
|
"react-cookies": "^0.1.1",
|
||||||
|
"react-countup": "^6.1.0",
|
||||||
|
"react-cropper": "^2.1.8",
|
||||||
"react-datepicker": "^2.14.1",
|
"react-datepicker": "^2.14.1",
|
||||||
"react-dev-utils": "^9.2.0-next.80",
|
"react-dev-utils": "^9.2.0-next.80",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.1",
|
||||||
|
@ -119,11 +121,12 @@
|
||||||
"webpack-manifest-plugin": "^2.2.0",
|
"webpack-manifest-plugin": "^2.2.0",
|
||||||
"whatwg-fetch": "2.0.3",
|
"whatwg-fetch": "2.0.3",
|
||||||
"wrap-md-editor": "^0.2.20",
|
"wrap-md-editor": "^0.2.20",
|
||||||
|
"xss": "^1.0.14",
|
||||||
"xterm": "4.8.1",
|
"xterm": "4.8.1",
|
||||||
"xterm-addon-fit": "0.4.0"
|
"xterm-addon-fit": "0.4.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --max_old_space_size=15360 scripts/start.js",
|
"start": "cross-env node --max_old_space_size=15360 scripts/start.js",
|
||||||
"build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js",
|
"build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js",
|
||||||
"test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js",
|
"test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js",
|
||||||
"pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js",
|
"pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js",
|
||||||
|
@ -187,7 +190,7 @@
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": "react-app"
|
"extends": "react-app"
|
||||||
},
|
},
|
||||||
"proxy": "http://localhost:3000",
|
"proxy": "http://localhost:3007",
|
||||||
"port": "3007",
|
"port": "3007",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/runtime": "7.0.0-beta.51",
|
"@babel/runtime": "7.0.0-beta.51",
|
||||||
|
|
|
@ -25,9 +25,6 @@ html {
|
||||||
min-width: 1200px
|
min-width: 1200px
|
||||||
}
|
}
|
||||||
|
|
||||||
.newFooter {
|
|
||||||
max-height: 110px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.newFooter {
|
.newFooter {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
|
@ -1268,11 +1268,17 @@ a.shixun-task-btn {
|
||||||
|
|
||||||
|
|
||||||
/*-----------实训配置、评测脚本-------------*/
|
/*-----------实训配置、评测脚本-------------*/
|
||||||
|
@font-face {
|
||||||
|
font-family: "iconfont"; /* Project id 2340181 */
|
||||||
|
src: url('iconfont.woff2?t=1631773579834') format('woff2'),
|
||||||
|
url('iconfont.woff?t=1631773579834') format('woff'),
|
||||||
|
url('iconfont.ttf?t=1631773579834') format('truetype');
|
||||||
|
}
|
||||||
html body {
|
html body {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 2.0;
|
line-height: 2.0;
|
||||||
background: #fafafa;
|
background: #fafafa;
|
||||||
font-family: "Microsoft YaHei", "SimSun";
|
font-family: "iconfont";
|
||||||
color: #05101a;
|
color: #05101a;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -3604,7 +3610,6 @@ a.user_bluebg_btn {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***** loading ******/
|
/***** loading ******/
|
||||||
/*****载入中******/
|
/*****载入中******/
|
||||||
#ajax-indicator {
|
#ajax-indicator {
|
||||||
|
@ -3939,9 +3944,13 @@ html>body #ajax-indicator {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
color: #2FC25B;
|
color: #2FC25B;
|
||||||
}
|
}
|
||||||
|
.privateTag.red{
|
||||||
|
color: #FF6832;
|
||||||
|
border:1px solid #FF6832;
|
||||||
|
}
|
||||||
.head-nav {
|
.head-nav {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 70px;
|
height: 72px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
@ -3953,40 +3962,74 @@ html>body #ajax-indicator {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
height: 70px;
|
height: 72px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.head-nav ul#header-nav li {
|
.head-nav ul#header-nav li {
|
||||||
float: left;
|
float: left;
|
||||||
height: 70px;
|
height: 72px;
|
||||||
line-height: 70px;
|
line-height: 72px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding-right:40px;
|
padding-right:30px;
|
||||||
|
}
|
||||||
|
.downMenus{
|
||||||
|
background: #ffffff;
|
||||||
|
box-shadow: 0px 10px 16px 0px #cecece;
|
||||||
|
border-radius: 6px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 999;
|
||||||
|
left: -20px;
|
||||||
|
top: -15px;
|
||||||
|
padding: 20px;
|
||||||
|
line-height: 1.5;
|
||||||
|
min-width: 105px;
|
||||||
|
}
|
||||||
|
.downMenus li{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.downMenus li:hover aside{
|
||||||
|
color: #165dff!important;
|
||||||
|
}
|
||||||
|
.namediv{
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.head-nav ul#header-nav li a {
|
.head-nav ul#header-nav li a {
|
||||||
display: block;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: #333;
|
color: #fff;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
.head-nav ul#header-nav li a:hover{
|
||||||
.head-nav ul#header-nav li a:hover,.head-nav ul#header-nav li.active a {
|
color: #c5c5c5!important;
|
||||||
color: #5091FF;
|
}
|
||||||
|
#header-nav li .namediv i{
|
||||||
|
font-size: 14px!important;
|
||||||
|
display: inline-block;
|
||||||
|
color: #979797;
|
||||||
|
margin:0px 3.58px 0px 3px;
|
||||||
|
transform: translateY(0.5px);
|
||||||
|
}
|
||||||
|
#header-nav li.active a::before{
|
||||||
|
content: '';
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
background: #c5c5c5;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 17px;
|
||||||
|
left: 0;
|
||||||
|
border-radius: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.head-nav ul#header-nav li:last-child {
|
.head-nav ul#header-nav li:last-child {
|
||||||
margin-right: 0px
|
margin-right: 0px
|
||||||
}
|
}
|
||||||
|
|
||||||
.head-nav ul#header-nav li.active{
|
|
||||||
/* background-color: #3B3B3B; */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.head-nav ul#header-nav li p:hover {
|
.head-nav ul#header-nav li p:hover {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "iconfont"; /* Project id 2340181 */
|
font-family: "iconfont"; /* Project id 2340181 */
|
||||||
src: url('iconfont.woff2?t=1634881729644') format('woff2'),
|
src: url('iconfont.woff2?t=1653550272457') format('woff2'),
|
||||||
url('iconfont.woff?t=1634881729644') format('woff'),
|
url('iconfont.woff?t=1653550272457') format('woff'),
|
||||||
url('iconfont.ttf?t=1634881729644') format('truetype');
|
url('iconfont.ttf?t=1653550272457') format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconfont {
|
.iconfont {
|
||||||
|
@ -13,6 +13,338 @@
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-tuichuicon:before {
|
||||||
|
content: "\e936";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bangzhuzhongxinicon1:before {
|
||||||
|
content: "\e935";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-ketixiangqingicon:before {
|
||||||
|
content: "\e92b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bianjiicon:before {
|
||||||
|
content: "\e92c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-baomingxiangqingicon:before {
|
||||||
|
content: "\e92d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sousuo4:before {
|
||||||
|
content: "\e92e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-quxiaoshenqingicon:before {
|
||||||
|
content: "\e92f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-xiala3:before {
|
||||||
|
content: "\e930";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tianjia_tianchong:before {
|
||||||
|
content: "\e931";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-shanchu2:before {
|
||||||
|
content: "\e932";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shanchuicon3:before {
|
||||||
|
content: "\e933";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shenqingketiicon:before {
|
||||||
|
content: "\e934";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-weixin:before {
|
||||||
|
content: "\e92a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zanwushuju:before {
|
||||||
|
content: "\e928";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-fuwuicon:before {
|
||||||
|
content: "\e929";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-personal-center:before {
|
||||||
|
content: "\e927";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bangzhuzhongxinicon:before {
|
||||||
|
content: "\e926";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-kaiyuanxiangmu:before {
|
||||||
|
content: "\e91d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-luntanjiaoliu:before {
|
||||||
|
content: "\e91e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-wangzhanpeizhi:before {
|
||||||
|
content: "\e91f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-weixuanze-chuangkekongjian:before {
|
||||||
|
content: "\e920";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tubiao:before {
|
||||||
|
content: "\e921";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-gonggaofabu:before {
|
||||||
|
content: "\e922";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-jingsaihuodong:before {
|
||||||
|
content: "\e923";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-yonghuguanli:before {
|
||||||
|
content: "\e924";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shenpi:before {
|
||||||
|
content: "\e925";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhuanli1:before {
|
||||||
|
content: "\e918";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-daimaicon:before {
|
||||||
|
content: "\e91c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-jiangxiangicon:before {
|
||||||
|
content: "\e916";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shuju:before {
|
||||||
|
content: "\e917";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-wendang:before {
|
||||||
|
content: "\e919";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-lunwen:before {
|
||||||
|
content: "\e91a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhuanli:before {
|
||||||
|
content: "\e91b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-gailan1:before {
|
||||||
|
content: "\e914";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tuandui:before {
|
||||||
|
content: "\e915";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-icon2:before {
|
||||||
|
content: "\e912";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-21:before {
|
||||||
|
content: "\e913";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-2:before {
|
||||||
|
content: "\e90f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-3:before {
|
||||||
|
content: "\e910";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-icon1:before {
|
||||||
|
content: "\e911";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-ioon:before {
|
||||||
|
content: "\e90e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shanchu_tc_icon1:before {
|
||||||
|
content: "\e90c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhuanjiaicon:before {
|
||||||
|
content: "\e90d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shengming:before {
|
||||||
|
content: "\e90b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-chenggong1:before {
|
||||||
|
content: "\e907";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-bitian2x1:before {
|
||||||
|
content: "\e908";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-xiala1:before {
|
||||||
|
content: "\e909";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-xiala2:before {
|
||||||
|
content: "\e90a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-jiantou1:before {
|
||||||
|
content: "\e905";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhangjieicon:before {
|
||||||
|
content: "\e8fe";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-chengyuan1:before {
|
||||||
|
content: "\e903";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-shangchuan2x:before {
|
||||||
|
content: "\e8f9";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shanchu7:before {
|
||||||
|
content: "\e8fa";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zuohuabeifen:before {
|
||||||
|
content: "\e8fb";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-bianji11:before {
|
||||||
|
content: "\e8f4";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-bitian2x:before {
|
||||||
|
content: "\e8f5";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-zuohua2x:before {
|
||||||
|
content: "\e8f7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-lianjie3:before {
|
||||||
|
content: "\e8f8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhishitupu:before {
|
||||||
|
content: "\e8fc";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-jisuanji1:before {
|
||||||
|
content: "\e8fd";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-dianzi1:before {
|
||||||
|
content: "\e8ff";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-junshililun1:before {
|
||||||
|
content: "\e900";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-ruanjiangongcheng1:before {
|
||||||
|
content: "\e901";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-yixue1:before {
|
||||||
|
content: "\e902";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tongxin1:before {
|
||||||
|
content: "\e904";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhengcefagui1:before {
|
||||||
|
content: "\e906";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-dashuju:before {
|
||||||
|
content: "\e8f3";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-rengongzhineng:before {
|
||||||
|
content: "\e8f6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-a-shuangyinhao12x:before {
|
||||||
|
content: "\e8f2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-dingbu:before {
|
||||||
|
content: "\e8ee";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bangzhu1:before {
|
||||||
|
content: "\e8ef";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-yijianfankui2:before {
|
||||||
|
content: "\e8f0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-fenxiang:before {
|
||||||
|
content: "\e8f1";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-dizhi:before {
|
||||||
|
content: "\e8eb";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-youxiang1:before {
|
||||||
|
content: "\e8ec";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-dianhuaicon:before {
|
||||||
|
content: "\e8ed";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-tianjiaicon:before {
|
||||||
|
content: "\e8e8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-lingshengicon:before {
|
||||||
|
content: "\e8ea";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-gengduoicon:before {
|
||||||
|
content: "\e8e5";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shijianicon:before {
|
||||||
|
content: "\e8e7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-mimaicon:before {
|
||||||
|
content: "\e8e1";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-gouicon:before {
|
||||||
|
content: "\e8e2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-zhankaiicon:before {
|
||||||
|
content: "\e8e3";
|
||||||
|
}
|
||||||
|
|
||||||
.icon-wenjian7:before {
|
.icon-wenjian7:before {
|
||||||
content: "\e8e0";
|
content: "\e8e0";
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,587 @@
|
||||||
"css_prefix_text": "icon-",
|
"css_prefix_text": "icon-",
|
||||||
"description": "",
|
"description": "",
|
||||||
"glyphs": [
|
"glyphs": [
|
||||||
|
{
|
||||||
|
"icon_id": "29934961",
|
||||||
|
"name": "退出icon",
|
||||||
|
"font_class": "tuichuicon",
|
||||||
|
"unicode": "e936",
|
||||||
|
"unicode_decimal": 59702
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29811507",
|
||||||
|
"name": "帮助中心icon",
|
||||||
|
"font_class": "bangzhuzhongxinicon1",
|
||||||
|
"unicode": "e935",
|
||||||
|
"unicode_decimal": 59701
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701613",
|
||||||
|
"name": "课题详情icon",
|
||||||
|
"font_class": "ketixiangqingicon",
|
||||||
|
"unicode": "e92b",
|
||||||
|
"unicode_decimal": 59691
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701614",
|
||||||
|
"name": "编辑icon",
|
||||||
|
"font_class": "bianjiicon",
|
||||||
|
"unicode": "e92c",
|
||||||
|
"unicode_decimal": 59692
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701615",
|
||||||
|
"name": "报名详情icon",
|
||||||
|
"font_class": "baomingxiangqingicon",
|
||||||
|
"unicode": "e92d",
|
||||||
|
"unicode_decimal": 59693
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701616",
|
||||||
|
"name": "搜索",
|
||||||
|
"font_class": "sousuo4",
|
||||||
|
"unicode": "e92e",
|
||||||
|
"unicode_decimal": 59694
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701617",
|
||||||
|
"name": "取消申请icon",
|
||||||
|
"font_class": "quxiaoshenqingicon",
|
||||||
|
"unicode": "e92f",
|
||||||
|
"unicode_decimal": 59695
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701618",
|
||||||
|
"name": "下拉",
|
||||||
|
"font_class": "xiala3",
|
||||||
|
"unicode": "e930",
|
||||||
|
"unicode_decimal": 59696
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701619",
|
||||||
|
"name": "添加_填充",
|
||||||
|
"font_class": "tianjia_tianchong",
|
||||||
|
"unicode": "e931",
|
||||||
|
"unicode_decimal": 59697
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701620",
|
||||||
|
"name": "删除 (2)",
|
||||||
|
"font_class": "a-shanchu2",
|
||||||
|
"unicode": "e932",
|
||||||
|
"unicode_decimal": 59698
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701621",
|
||||||
|
"name": "删除icon",
|
||||||
|
"font_class": "shanchuicon3",
|
||||||
|
"unicode": "e933",
|
||||||
|
"unicode_decimal": 59699
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29701622",
|
||||||
|
"name": "申请课题icon",
|
||||||
|
"font_class": "shenqingketiicon",
|
||||||
|
"unicode": "e934",
|
||||||
|
"unicode_decimal": 59700
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29665762",
|
||||||
|
"name": "微信",
|
||||||
|
"font_class": "weixin",
|
||||||
|
"unicode": "e92a",
|
||||||
|
"unicode_decimal": 59690
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29467269",
|
||||||
|
"name": "暂无数据",
|
||||||
|
"font_class": "zanwushuju",
|
||||||
|
"unicode": "e928",
|
||||||
|
"unicode_decimal": 59688
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29467272",
|
||||||
|
"name": "服务icon",
|
||||||
|
"font_class": "fuwuicon",
|
||||||
|
"unicode": "e929",
|
||||||
|
"unicode_decimal": 59689
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "29206429",
|
||||||
|
"name": "personal-center",
|
||||||
|
"font_class": "personal-center",
|
||||||
|
"unicode": "e927",
|
||||||
|
"unicode_decimal": 59687
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28888753",
|
||||||
|
"name": "帮助中心icon",
|
||||||
|
"font_class": "bangzhuzhongxinicon",
|
||||||
|
"unicode": "e926",
|
||||||
|
"unicode_decimal": 59686
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163416",
|
||||||
|
"name": "开源项目",
|
||||||
|
"font_class": "kaiyuanxiangmu",
|
||||||
|
"unicode": "e91d",
|
||||||
|
"unicode_decimal": 59677
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163417",
|
||||||
|
"name": "论坛交流",
|
||||||
|
"font_class": "luntanjiaoliu",
|
||||||
|
"unicode": "e91e",
|
||||||
|
"unicode_decimal": 59678
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163418",
|
||||||
|
"name": "网站配置",
|
||||||
|
"font_class": "wangzhanpeizhi",
|
||||||
|
"unicode": "e91f",
|
||||||
|
"unicode_decimal": 59679
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163419",
|
||||||
|
"name": "未选择-创客空间",
|
||||||
|
"font_class": "weixuanze-chuangkekongjian",
|
||||||
|
"unicode": "e920",
|
||||||
|
"unicode_decimal": 59680
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163420",
|
||||||
|
"name": "图标",
|
||||||
|
"font_class": "tubiao",
|
||||||
|
"unicode": "e921",
|
||||||
|
"unicode_decimal": 59681
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163421",
|
||||||
|
"name": "公告发布",
|
||||||
|
"font_class": "gonggaofabu",
|
||||||
|
"unicode": "e922",
|
||||||
|
"unicode_decimal": 59682
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163422",
|
||||||
|
"name": "竞赛活动",
|
||||||
|
"font_class": "jingsaihuodong",
|
||||||
|
"unicode": "e923",
|
||||||
|
"unicode_decimal": 59683
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163423",
|
||||||
|
"name": "用户管理",
|
||||||
|
"font_class": "yonghuguanli",
|
||||||
|
"unicode": "e924",
|
||||||
|
"unicode_decimal": 59684
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "28163424",
|
||||||
|
"name": "审批",
|
||||||
|
"font_class": "shenpi",
|
||||||
|
"unicode": "e925",
|
||||||
|
"unicode_decimal": 59685
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22773568",
|
||||||
|
"name": "专利",
|
||||||
|
"font_class": "zhuanli1",
|
||||||
|
"unicode": "e918",
|
||||||
|
"unicode_decimal": 59672
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27680124",
|
||||||
|
"name": "代码icon",
|
||||||
|
"font_class": "daimaicon",
|
||||||
|
"unicode": "e91c",
|
||||||
|
"unicode_decimal": 59676
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664463",
|
||||||
|
"name": "奖项icon",
|
||||||
|
"font_class": "jiangxiangicon",
|
||||||
|
"unicode": "e916",
|
||||||
|
"unicode_decimal": 59670
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664464",
|
||||||
|
"name": "数据",
|
||||||
|
"font_class": "shuju",
|
||||||
|
"unicode": "e917",
|
||||||
|
"unicode_decimal": 59671
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664466",
|
||||||
|
"name": "文档",
|
||||||
|
"font_class": "wendang",
|
||||||
|
"unicode": "e919",
|
||||||
|
"unicode_decimal": 59673
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664467",
|
||||||
|
"name": "论文",
|
||||||
|
"font_class": "lunwen",
|
||||||
|
"unicode": "e91a",
|
||||||
|
"unicode_decimal": 59674
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664468",
|
||||||
|
"name": "专利",
|
||||||
|
"font_class": "zhuanli",
|
||||||
|
"unicode": "e91b",
|
||||||
|
"unicode_decimal": 59675
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664392",
|
||||||
|
"name": "概览",
|
||||||
|
"font_class": "gailan1",
|
||||||
|
"unicode": "e914",
|
||||||
|
"unicode_decimal": 59668
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27664393",
|
||||||
|
"name": "团队",
|
||||||
|
"font_class": "tuandui",
|
||||||
|
"unicode": "e915",
|
||||||
|
"unicode_decimal": 59669
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27299393",
|
||||||
|
"name": "icon",
|
||||||
|
"font_class": "icon2",
|
||||||
|
"unicode": "e912",
|
||||||
|
"unicode_decimal": 59666
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27299394",
|
||||||
|
"name": "2",
|
||||||
|
"font_class": "a-21",
|
||||||
|
"unicode": "e913",
|
||||||
|
"unicode_decimal": 59667
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27200759",
|
||||||
|
"name": "2",
|
||||||
|
"font_class": "a-2",
|
||||||
|
"unicode": "e90f",
|
||||||
|
"unicode_decimal": 59663
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27200760",
|
||||||
|
"name": "3",
|
||||||
|
"font_class": "a-3",
|
||||||
|
"unicode": "e910",
|
||||||
|
"unicode_decimal": 59664
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27200761",
|
||||||
|
"name": "icon",
|
||||||
|
"font_class": "icon1",
|
||||||
|
"unicode": "e911",
|
||||||
|
"unicode_decimal": 59665
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "27041503",
|
||||||
|
"name": "ioon",
|
||||||
|
"font_class": "ioon",
|
||||||
|
"unicode": "e90e",
|
||||||
|
"unicode_decimal": 59662
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470602",
|
||||||
|
"name": "shanchu_tc_icon",
|
||||||
|
"font_class": "shanchu_tc_icon1",
|
||||||
|
"unicode": "e90c",
|
||||||
|
"unicode_decimal": 59660
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470603",
|
||||||
|
"name": "专家icon",
|
||||||
|
"font_class": "zhuanjiaicon",
|
||||||
|
"unicode": "e90d",
|
||||||
|
"unicode_decimal": 59661
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "12505154",
|
||||||
|
"name": "声明",
|
||||||
|
"font_class": "shengming",
|
||||||
|
"unicode": "e90b",
|
||||||
|
"unicode_decimal": 59659
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470597",
|
||||||
|
"name": "成功",
|
||||||
|
"font_class": "chenggong1",
|
||||||
|
"unicode": "e907",
|
||||||
|
"unicode_decimal": 59655
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470599",
|
||||||
|
"name": "必填@2x",
|
||||||
|
"font_class": "a-bitian2x1",
|
||||||
|
"unicode": "e908",
|
||||||
|
"unicode_decimal": 59656
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470600",
|
||||||
|
"name": "下拉",
|
||||||
|
"font_class": "xiala1",
|
||||||
|
"unicode": "e909",
|
||||||
|
"unicode_decimal": 59657
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26470601",
|
||||||
|
"name": "下拉2",
|
||||||
|
"font_class": "xiala2",
|
||||||
|
"unicode": "e90a",
|
||||||
|
"unicode_decimal": 59658
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26363219",
|
||||||
|
"name": "箭头",
|
||||||
|
"font_class": "jiantou1",
|
||||||
|
"unicode": "e905",
|
||||||
|
"unicode_decimal": 59653
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26359564",
|
||||||
|
"name": "章节icon ",
|
||||||
|
"font_class": "zhangjieicon",
|
||||||
|
"unicode": "e8fe",
|
||||||
|
"unicode_decimal": 59646
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26359565",
|
||||||
|
"name": "成员",
|
||||||
|
"font_class": "chengyuan1",
|
||||||
|
"unicode": "e903",
|
||||||
|
"unicode_decimal": 59651
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325702",
|
||||||
|
"name": "上传@2x",
|
||||||
|
"font_class": "a-shangchuan2x",
|
||||||
|
"unicode": "e8f9",
|
||||||
|
"unicode_decimal": 59641
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325703",
|
||||||
|
"name": "删除 ",
|
||||||
|
"font_class": "shanchu7",
|
||||||
|
"unicode": "e8fa",
|
||||||
|
"unicode_decimal": 59642
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325704",
|
||||||
|
"name": "左滑备份",
|
||||||
|
"font_class": "zuohuabeifen",
|
||||||
|
"unicode": "e8fb",
|
||||||
|
"unicode_decimal": 59643
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325698",
|
||||||
|
"name": "编辑 (1)",
|
||||||
|
"font_class": "a-bianji11",
|
||||||
|
"unicode": "e8f4",
|
||||||
|
"unicode_decimal": 59636
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325699",
|
||||||
|
"name": "必填@2x",
|
||||||
|
"font_class": "a-bitian2x",
|
||||||
|
"unicode": "e8f5",
|
||||||
|
"unicode_decimal": 59637
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325700",
|
||||||
|
"name": "左滑@2x",
|
||||||
|
"font_class": "a-zuohua2x",
|
||||||
|
"unicode": "e8f7",
|
||||||
|
"unicode_decimal": 59639
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "26325701",
|
||||||
|
"name": "链接",
|
||||||
|
"font_class": "lianjie3",
|
||||||
|
"unicode": "e8f8",
|
||||||
|
"unicode_decimal": 59640
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748537",
|
||||||
|
"name": "知识图谱",
|
||||||
|
"font_class": "zhishitupu",
|
||||||
|
"unicode": "e8fc",
|
||||||
|
"unicode_decimal": 59644
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748551",
|
||||||
|
"name": "计算机",
|
||||||
|
"font_class": "jisuanji1",
|
||||||
|
"unicode": "e8fd",
|
||||||
|
"unicode_decimal": 59645
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748553",
|
||||||
|
"name": "电子",
|
||||||
|
"font_class": "dianzi1",
|
||||||
|
"unicode": "e8ff",
|
||||||
|
"unicode_decimal": 59647
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748554",
|
||||||
|
"name": "军事理论",
|
||||||
|
"font_class": "junshililun1",
|
||||||
|
"unicode": "e900",
|
||||||
|
"unicode_decimal": 59648
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748555",
|
||||||
|
"name": "软件工程",
|
||||||
|
"font_class": "ruanjiangongcheng1",
|
||||||
|
"unicode": "e901",
|
||||||
|
"unicode_decimal": 59649
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748556",
|
||||||
|
"name": "医学",
|
||||||
|
"font_class": "yixue1",
|
||||||
|
"unicode": "e902",
|
||||||
|
"unicode_decimal": 59650
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748558",
|
||||||
|
"name": "通信",
|
||||||
|
"font_class": "tongxin1",
|
||||||
|
"unicode": "e904",
|
||||||
|
"unicode_decimal": 59652
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748560",
|
||||||
|
"name": "政策法规",
|
||||||
|
"font_class": "zhengcefagui1",
|
||||||
|
"unicode": "e906",
|
||||||
|
"unicode_decimal": 59654
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748528",
|
||||||
|
"name": "大数据",
|
||||||
|
"font_class": "dashuju",
|
||||||
|
"unicode": "e8f3",
|
||||||
|
"unicode_decimal": 59635
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25748531",
|
||||||
|
"name": "人工智能",
|
||||||
|
"font_class": "rengongzhineng",
|
||||||
|
"unicode": "e8f6",
|
||||||
|
"unicode_decimal": 59638
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25733167",
|
||||||
|
"name": "双引号(1)@2x",
|
||||||
|
"font_class": "a-shuangyinhao12x",
|
||||||
|
"unicode": "e8f2",
|
||||||
|
"unicode_decimal": 59634
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25701947",
|
||||||
|
"name": "顶部",
|
||||||
|
"font_class": "dingbu",
|
||||||
|
"unicode": "e8ee",
|
||||||
|
"unicode_decimal": 59630
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25701948",
|
||||||
|
"name": "帮助",
|
||||||
|
"font_class": "bangzhu1",
|
||||||
|
"unicode": "e8ef",
|
||||||
|
"unicode_decimal": 59631
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25701949",
|
||||||
|
"name": "意见反馈",
|
||||||
|
"font_class": "yijianfankui2",
|
||||||
|
"unicode": "e8f0",
|
||||||
|
"unicode_decimal": 59632
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25701950",
|
||||||
|
"name": "分享",
|
||||||
|
"font_class": "fenxiang",
|
||||||
|
"unicode": "e8f1",
|
||||||
|
"unicode_decimal": 59633
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25580217",
|
||||||
|
"name": "地址",
|
||||||
|
"font_class": "dizhi",
|
||||||
|
"unicode": "e8eb",
|
||||||
|
"unicode_decimal": 59627
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25580218",
|
||||||
|
"name": "邮箱",
|
||||||
|
"font_class": "youxiang1",
|
||||||
|
"unicode": "e8ec",
|
||||||
|
"unicode_decimal": 59628
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25580219",
|
||||||
|
"name": "电话icon",
|
||||||
|
"font_class": "dianhuaicon",
|
||||||
|
"unicode": "e8ed",
|
||||||
|
"unicode_decimal": 59629
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25284174",
|
||||||
|
"name": "添加icon",
|
||||||
|
"font_class": "tianjiaicon",
|
||||||
|
"unicode": "e8e8",
|
||||||
|
"unicode_decimal": 59624
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25284175",
|
||||||
|
"name": "铃声icon",
|
||||||
|
"font_class": "lingshengicon",
|
||||||
|
"unicode": "e8ea",
|
||||||
|
"unicode_decimal": 59626
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25204490",
|
||||||
|
"name": "更多icon",
|
||||||
|
"font_class": "gengduoicon",
|
||||||
|
"unicode": "e8e5",
|
||||||
|
"unicode_decimal": 59621
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25204491",
|
||||||
|
"name": "时间icon",
|
||||||
|
"font_class": "shijianicon",
|
||||||
|
"unicode": "e8e7",
|
||||||
|
"unicode_decimal": 59623
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25188228",
|
||||||
|
"name": "密码icon",
|
||||||
|
"font_class": "mimaicon",
|
||||||
|
"unicode": "e8e1",
|
||||||
|
"unicode_decimal": 59617
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25188229",
|
||||||
|
"name": "钩icon",
|
||||||
|
"font_class": "gouicon",
|
||||||
|
"unicode": "e8e2",
|
||||||
|
"unicode_decimal": 59618
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "25188230",
|
||||||
|
"name": "展开icon",
|
||||||
|
"font_class": "zhankaiicon",
|
||||||
|
"unicode": "e8e3",
|
||||||
|
"unicode_decimal": 59619
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"icon_id": "24656750",
|
"icon_id": "24656750",
|
||||||
"name": "文件",
|
"name": "文件",
|
||||||
|
|
After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 9.4 KiB |
|
@ -7,6 +7,7 @@
|
||||||
<meta name=”Keywords” Content=”issue,bug,tracker,软件工程,课程实践″>
|
<meta name=”Keywords” Content=”issue,bug,tracker,软件工程,课程实践″>
|
||||||
<meta name=”Description” Content=”持续构建协同、共享、可信的软件创建生态开源创作与软件生产相结合,支持大规模群体开展软件协同创新活动”>
|
<meta name=”Description” Content=”持续构建协同、共享、可信的软件创建生态开源创作与软件生产相结合,支持大规模群体开展软件协同创新活动”>
|
||||||
<meta name="theme-color" content="#000000">
|
<meta name="theme-color" content="#000000">
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="%PUBLIC_URL%css/iconfont.css">
|
<link rel="stylesheet" type="text/css" href="%PUBLIC_URL%css/iconfont.css">
|
||||||
|
|
|
@ -93,6 +93,9 @@ body {
|
||||||
.editormd-preview .markdown-body{
|
.editormd-preview .markdown-body{
|
||||||
padding:0px !important;
|
padding:0px !important;
|
||||||
}
|
}
|
||||||
|
.editormd-preview{
|
||||||
|
width: 50%!important;
|
||||||
|
}
|
||||||
|
|
||||||
/* 图片点击放大的场景,隐藏图片链接 */
|
/* 图片点击放大的场景,隐藏图片链接 */
|
||||||
.editormd-image-click-expand .editormd-image-dialog {
|
.editormd-image-click-expand .editormd-image-dialog {
|
||||||
|
|
887
src/App.js
|
@ -3,21 +3,21 @@ import './App.css';
|
||||||
import { ConfigProvider } from 'antd'
|
import { ConfigProvider } from 'antd'
|
||||||
import zhCN from 'antd/lib/locale-provider/zh_CN';
|
import zhCN from 'antd/lib/locale-provider/zh_CN';
|
||||||
import {
|
import {
|
||||||
// BrowserRouter as Router,
|
Route,
|
||||||
Route,
|
Switch
|
||||||
Switch
|
|
||||||
} from 'react-router-dom';
|
} from 'react-router-dom';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import LoginDialog from './modules/login/LoginDialog';
|
import LoginDialog from './modules/login/LoginDialog';
|
||||||
import 'babel-polyfill';
|
import 'babel-polyfill';
|
||||||
import Loading from './Loading'
|
import Loading from './Loading';
|
||||||
|
|
||||||
import Loadable from 'react-loadable';
|
import Loadable from 'react-loadable';
|
||||||
import marked from './common/marked';
|
import marked from './common/marked';
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
|
|
||||||
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
|
||||||
import SiderBar from './forge/Component/SiderBar'
|
import SiderBar from './forge/Component/SiderBar';
|
||||||
|
import SiderBarHelp from './glcc/siderBarHelp';
|
||||||
|
|
||||||
import { SnackbarHOC } from 'educoder';
|
import { SnackbarHOC } from 'educoder';
|
||||||
import { initAxiosInterceptors } from './AppConfig'
|
import { initAxiosInterceptors } from './AppConfig'
|
||||||
|
@ -26,18 +26,18 @@ import configureStore from './redux/stores/configureStore';
|
||||||
const store = configureStore();
|
const store = configureStore();
|
||||||
window.marked = marked;
|
window.marked = marked;
|
||||||
const theme = createMuiTheme({
|
const theme = createMuiTheme({
|
||||||
palette: {
|
palette: {
|
||||||
primary: {
|
primary: {
|
||||||
main: '#4CACFF',
|
main: '#4CACFF',
|
||||||
contrastText: 'rgba(255, 255, 255, 0.87)'
|
contrastText: 'rgba(255, 255, 255, 0.87)'
|
||||||
},
|
},
|
||||||
secondary: { main: '#4CACFF' }, // #11cb5f This is just green.A700 as hex.
|
secondary: { main: '#4CACFF' }, // #11cb5f This is just green.A700 as hex.
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
//forge项目
|
//forge项目
|
||||||
const Projects = Loadable({
|
const Projects = Loadable({
|
||||||
loader: () => import('./forge/Index'),
|
loader: () => import('./forge/Index'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
// forge项目详情
|
// forge项目详情
|
||||||
const ProjectDetail = Loadable({
|
const ProjectDetail = Loadable({
|
||||||
|
@ -46,56 +46,79 @@ const ProjectDetail = Loadable({
|
||||||
});
|
});
|
||||||
//forge安全设置
|
//forge安全设置
|
||||||
const Security = Loadable({
|
const Security = Loadable({
|
||||||
loader: () => import('./forge/SecuritySetting/Index'),
|
loader: () => import('./forge/SecuritySetting/Index'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
//forge项目-devOps详情
|
//forge项目-devOps详情
|
||||||
const OpsDetail = Loadable({
|
const OpsDetail = Loadable({
|
||||||
loader: () => import('./forge/DevOps/opsDetail'),
|
loader: () => import('./forge/DevOps/opsDetail'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
//403页面
|
//403页面
|
||||||
const Shixunauthority = Loadable({
|
const Shixunauthority = Loadable({
|
||||||
loader: () => import('./modules/403/Shixunauthority'),
|
loader: () => import('./modules/403/Shixunauthority'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
//404页面
|
//404页面
|
||||||
const Shixunnopage = Loadable({
|
const Shixunnopage = Loadable({
|
||||||
loader: () => import('./modules/404/Shixunnopage'),
|
loader: () => import('./modules/404/Shixunnopage'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
|
|
||||||
//500页面
|
//500页面
|
||||||
const http500 = Loadable({
|
const http500 = Loadable({
|
||||||
loader: () => import('./modules/500/http500'),
|
loader: () => import('./modules/500/http500'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
const InfosIndex = Loadable({
|
const InfosIndex = Loadable({
|
||||||
loader: () => import('./forge/users/Index'),
|
loader: () => import('./forge/users/Index'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
// 组织
|
// 组织
|
||||||
const OrganizeIndex = Loadable({
|
const OrganizeIndex = Loadable({
|
||||||
loader: () => import('./forge/Team/Index'),
|
loader: () => import('./forge/Team/Index'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
|
||||||
const EducoderLogin = Loadable({
|
|
||||||
loader: () => import('./modules/login/EducoderLogin'),
|
|
||||||
loading: Loading,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const Search = Loadable({
|
const Search = Loadable({
|
||||||
loader: () => import('./modules/search/'),
|
loader: () => import('./modules/search/'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
const WikiPreview = Loadable({
|
const WikiPreview = Loadable({
|
||||||
loader: () => import('./forge/Wiki/Preview'),
|
loader: () => import('./forge/Wiki/Preview'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const ProjectIndex = Loadable({
|
||||||
|
loader: () => import("./forge/Index"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
const Home = Loadable({
|
||||||
|
loader: () => import('./home/Index'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
|
||||||
|
const LoginRegisterPage = Loadable({
|
||||||
|
loader: () => import("./modules/loginRegister/LoginRegisterPage"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
const AboutUs = Loadable({
|
||||||
|
loader: () => import("./forge/AboutUs/AboutUs"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
|
|
||||||
const ProjectIndex = Loadable({
|
const Teaching = Loadable({
|
||||||
loader: () => import("./forge/Index"),
|
loader : () => import("./forge/TeachingPractice/Teaching"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
});
|
})
|
||||||
|
|
||||||
|
const Glcc = Loadable({
|
||||||
|
loader : () => import("./glcc"),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
|
|
||||||
// const CreateMerge = Loadable({
|
// const CreateMerge = Loadable({
|
||||||
// loader: () => import('./forge/Merge/NewMerge'),
|
// loader: () => import('./forge/Merge/NewMerge'),
|
||||||
|
@ -103,413 +126,443 @@ const ProjectIndex = Loadable({
|
||||||
// })
|
// })
|
||||||
|
|
||||||
// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。
|
// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。
|
||||||
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize"];
|
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder", "glcc"];
|
||||||
|
|
||||||
class App extends Component {
|
class App extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
Addcoursestype: false,
|
Addcoursestype: false,
|
||||||
Addcoursestypes: false,
|
Addcoursestypes: false,
|
||||||
mydisplay: false,
|
mydisplay: false,
|
||||||
occupation: 0,
|
occupation: 0,
|
||||||
mygetHelmetapi: null,
|
mygetHelmetapi: null,
|
||||||
pathType: null,
|
pathType: null,
|
||||||
pathName: null,
|
pathName: null,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UNSAFE_componentWillMount() {
|
UNSAFE_componentWillMount() {
|
||||||
initAxiosInterceptors(this.props);
|
initAxiosInterceptors(this.props);
|
||||||
let pathname = window.location.pathname ? window.location.pathname.split('/')[1] : '';
|
let pathname = window.location.pathname ? window.location.pathname.split('/')[1] : '';
|
||||||
pathname && this.getPathnameType(pathname);
|
pathname && this.getPathnameType(pathname);
|
||||||
|
|
||||||
// 添加路由监听,决定组织还是个人
|
// 添加路由监听,决定组织还是个人
|
||||||
this.unlisten = this.props.history.listen((location) => {
|
this.unlisten = this.props.history.listen((location,history) => {
|
||||||
let newPathname = location.pathname.split('/')[1];
|
let newPathname = location.pathname.split('/')[1];
|
||||||
if (this.state.pathName !== newPathname) {
|
if (this.state.pathName !== newPathname) {
|
||||||
// this.setState({ pathType: '' });
|
// this.setState({ pathType: '' });
|
||||||
newPathname && this.getPathnameType(newPathname);
|
newPathname && this.getPathnameType(newPathname);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps, nextState) {
|
shouldComponentUpdate(nextProps, nextState) {
|
||||||
// (!keyWord.includes(this.props.location.pathname.split('/')[1])) &&
|
if(!nextProps.location.pathname==='/'){
|
||||||
if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) {
|
return true;
|
||||||
return false;
|
}
|
||||||
} else {
|
// 阻止个人与组织切换时(组件渲染)请求导致的404
|
||||||
return true;
|
if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) {
|
||||||
}
|
return false;
|
||||||
}
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getPathnameType = (pathname) => {
|
getPathnameType = (pathname) => {
|
||||||
if (!keyWord.includes(pathname)) {
|
if (!keyWord.includes(pathname)) {
|
||||||
let url = `/owners/${pathname}.json`;
|
let url = `/owners/${pathname}.json`;
|
||||||
axios.get(url).then((response) => {
|
axios.get(url).then((response) => {
|
||||||
if (response && response.status === 200) {
|
if (response && response.status === 200) {
|
||||||
this.setState({
|
this.setState({
|
||||||
pathType: response.data.type || '404',
|
pathType: response.data.type || '404',
|
||||||
pathName: pathname,
|
pathName: pathname,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
this.setState({
|
this.setState({
|
||||||
pathType: pathname,
|
pathType: pathname,
|
||||||
pathName: pathname,
|
pathName: pathname,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HideAddcoursestypess = (i) => {
|
HideAddcoursestypess = (i) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
Addcoursestype: false,
|
Addcoursestype: false,
|
||||||
Addcoursestypes: false,
|
Addcoursestypes: false,
|
||||||
mydisplay: true,
|
mydisplay: true,
|
||||||
occupation: i,
|
occupation: i,
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
hideAddcoursestypes = () => {
|
hideAddcoursestypes = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
Addcoursestypes: false
|
Addcoursestypes: false
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.title = "loading...";
|
document.title = "loading...";
|
||||||
|
|
||||||
this.getAppdata();
|
this.getAppdata();
|
||||||
|
|
||||||
window.addEventListener('error', (event) => {
|
window.addEventListener('error', (event) => {
|
||||||
const msg = `${event.type}: ${event.message}`;
|
const msg = `${event.type}: ${event.message}`;
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
this.unlisten && this.unlisten(); // 执行解绑
|
this.unlisten && this.unlisten(); // 执行解绑
|
||||||
}
|
}
|
||||||
|
|
||||||
//修改登录方法
|
//修改登录方法
|
||||||
Modifyloginvalue = () => {
|
Modifyloginvalue = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isRender: false,
|
isRender: false,
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
//获取数据为空的时候
|
//获取数据为空的时候
|
||||||
gettablogourlnull = () => {
|
gettablogourlnull = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
mygetHelmetapi: undefined
|
mygetHelmetapi: undefined
|
||||||
});
|
});
|
||||||
document.title = "Forge";
|
document.title = "Forge";
|
||||||
var link = document.createElement('link'),
|
var link = document.createElement('link'),
|
||||||
oldLink = document.getElementById('dynamic-favicon');
|
oldLink = document.getElementById('dynamic-favicon');
|
||||||
link.id = 'dynamic-favicon';
|
link.id = 'dynamic-favicon';
|
||||||
link.rel = 'shortcut icon';
|
link.rel = 'shortcut icon';
|
||||||
link.href = "/react/build/./favicon.ico";
|
link.href = "/react/build/./favicon.ico";
|
||||||
if (oldLink) {
|
if (oldLink) {
|
||||||
document.head.removeChild(oldLink);
|
document.head.removeChild(oldLink);
|
||||||
}
|
}
|
||||||
document.head.appendChild(link);
|
document.head.appendChild(link);
|
||||||
};
|
};
|
||||||
|
|
||||||
//获取数据的时候
|
//获取数据的时候
|
||||||
gettablogourldata = (response) => {
|
gettablogourldata = (response) => {
|
||||||
document.title = response.data.setting.name;
|
document.title = response.data.setting.name;
|
||||||
var link = document.createElement('link'),
|
var link = document.createElement('link'),
|
||||||
oldLink = document.getElementById('dynamic-favicon');
|
oldLink = document.getElementById('dynamic-favicon');
|
||||||
link.id = 'dynamic-favicon';
|
link.id = 'dynamic-favicon';
|
||||||
link.rel = 'shortcut icon';
|
link.rel = 'shortcut icon';
|
||||||
link.href = '/' + response.data.setting.tab_logo_url;
|
link.href = '/' + response.data.setting.tab_logo_url;
|
||||||
if (oldLink) {
|
if (oldLink) {
|
||||||
document.head.removeChild(oldLink);
|
document.head.removeChild(oldLink);
|
||||||
}
|
}
|
||||||
document.head.appendChild(link);
|
document.head.appendChild(link);
|
||||||
}
|
}
|
||||||
//获取当前定制信息
|
//获取当前定制信息
|
||||||
getAppdata = () => {
|
getAppdata = () => {
|
||||||
let url = "/setting.json";
|
let url = "/setting.json";
|
||||||
axios.get(url).then((response) => {
|
axios.get(url).then((response) => {
|
||||||
if (response) {
|
if (response) {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.setState({
|
this.setState({
|
||||||
mygetHelmetapi: response.data.setting
|
mygetHelmetapi: response.data.setting
|
||||||
});
|
});
|
||||||
//存储配置到游览器
|
//存储配置到游览器
|
||||||
localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
|
localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
|
||||||
localStorage.setItem('chromesettingresponse', JSON.stringify(response));
|
localStorage.setItem('chromesettingresponse', JSON.stringify(response));
|
||||||
try {
|
try {
|
||||||
if (response.data.setting.tab_logo_url) {
|
if (response.data.setting.tab_logo_url) {
|
||||||
this.gettablogourldata(response);
|
this.gettablogourldata(response);
|
||||||
} else {
|
} else {
|
||||||
this.gettablogourlnull();
|
this.gettablogourlnull();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.gettablogourlnull();
|
this.gettablogourlnull();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.gettablogourlnull();
|
this.gettablogourlnull();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.gettablogourlnull();
|
this.gettablogourlnull();
|
||||||
}
|
}
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
this.gettablogourlnull();
|
this.gettablogourlnull();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
render() {
|
||||||
|
const { pathType, pathName } = this.state;
|
||||||
|
return (
|
||||||
|
<Provider store={store}>
|
||||||
|
<ConfigProvider locale={zhCN}>
|
||||||
|
<MuiThemeProvider theme={theme}>
|
||||||
|
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
|
||||||
|
{!pathName || (pathName && pathName.indexOf("glcc") === -1) ? <SiderBar /> : <SiderBarHelp/>}
|
||||||
|
{/* <Router> */}
|
||||||
|
<Switch>
|
||||||
|
{/* wiki预览 */}
|
||||||
|
<Route path="/:owner/:projectsId/wiki/preview/:projectName/:projectId" render={
|
||||||
|
(props) => {
|
||||||
|
return (<WikiPreview {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
} />
|
||||||
|
|
||||||
render() {
|
{/* 项目PR */}
|
||||||
const { mygetHelmetapi, pathType} = this.state;
|
<Route path="/:owner/:projectsId/compare"
|
||||||
let personal = mygetHelmetapi && mygetHelmetapi.personal;
|
render={
|
||||||
return (
|
(props) => (<ProjectDetail {...this.props} {...props} {...this.state} />)
|
||||||
<Provider store={store}>
|
}
|
||||||
<ConfigProvider locale={zhCN}>
|
></Route>
|
||||||
<MuiThemeProvider theme={theme}>
|
|
||||||
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
|
|
||||||
<SiderBar />
|
|
||||||
{/* <Router> */}
|
|
||||||
<Switch>
|
|
||||||
{/* wiki预览 */}
|
|
||||||
<Route path="/:owner/:projectsId/wiki/preview/:projectName/:projectId" render={
|
|
||||||
(props) => {
|
|
||||||
return (<WikiPreview {...this.props} {...props} {...this.state} />)
|
|
||||||
}
|
|
||||||
} />
|
|
||||||
|
|
||||||
{/* 项目PR */}
|
{/*项目*/}
|
||||||
<Route path="/:owner/:projectsId/compare"
|
<Route
|
||||||
render={
|
path={"/:owner/:projectId/devops/:opsId/detail"}
|
||||||
(props) => (<ProjectDetail {...this.props} {...props} {...this.state} />)
|
render={
|
||||||
}
|
(props) => {
|
||||||
></Route>
|
return (<OpsDetail {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
|
<Route
|
||||||
|
path={"/settings"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<Security {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
|
|
||||||
|
{/*403*/}
|
||||||
|
<Route path="/403" component={Shixunauthority} />
|
||||||
|
|
||||||
{/*项目*/}
|
<Route path="/500" component={http500} />
|
||||||
<Route
|
|
||||||
path={"/:owner/:projectId/devops/:opsId/detail"}
|
|
||||||
render={
|
|
||||||
(props) => {
|
|
||||||
return (<OpsDetail {...this.props} {...props} {...this.state} />)
|
|
||||||
}
|
|
||||||
}>
|
|
||||||
</Route>
|
|
||||||
<Route
|
|
||||||
path={"/settings"}
|
|
||||||
render={
|
|
||||||
(props) => {
|
|
||||||
return (<Security {...this.props} {...props} {...this.state} />)
|
|
||||||
}
|
|
||||||
}>
|
|
||||||
</Route>
|
|
||||||
|
|
||||||
<Route
|
{/*404*/}
|
||||||
path="/register"
|
<Route path="/nopage" component={Shixunnopage} />
|
||||||
render={
|
|
||||||
(props) => {
|
|
||||||
return (<EducoderLogin {...this.props} {...props} {...this.state} />)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
{/*403*/}
|
|
||||||
<Route path="/403" component={Shixunauthority} />
|
|
||||||
|
|
||||||
<Route path="/500" component={http500} />
|
{/* 查询 */}
|
||||||
|
<Route path="/search" component={Search} />
|
||||||
|
|
||||||
{/*404*/}
|
<Route exact path="/explore/all"
|
||||||
<Route path="/nopage" component={Shixunnopage} />
|
render={
|
||||||
|
(props) => (
|
||||||
|
<ProjectIndex {...this.props} {...props} />
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<Route exact path="/explore"
|
||||||
|
render={
|
||||||
|
(props) => (
|
||||||
|
<ProjectIndex {...this.props} {...props} />
|
||||||
|
)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
{/* 查询 */}
|
{/* 登录 */}
|
||||||
<Route path="/search" component={Search} />
|
<Route
|
||||||
|
path="/login"
|
||||||
<Route exact path="/explore"
|
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
|
||||||
render={
|
></Route>
|
||||||
(props) => (
|
|
||||||
<ProjectIndex {...this.props} {...props} />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
|
|
||||||
|
|
||||||
{/* 组织 */}
|
|
||||||
<Route path={"/organize"}
|
|
||||||
render={
|
|
||||||
(props) => {
|
|
||||||
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
|
||||||
}
|
|
||||||
}>
|
|
||||||
</Route>
|
|
||||||
|
|
||||||
{/*新建项目等*/}
|
{/* 注册 */}
|
||||||
<Route
|
<Route
|
||||||
path={"/projects"}
|
path="/register"
|
||||||
render={
|
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
|
||||||
(props) => {
|
></Route>
|
||||||
return (<Projects {...this.props} {...props} {...this.state} />)
|
|
||||||
}
|
|
||||||
}>
|
|
||||||
</Route>
|
|
||||||
|
|
||||||
{/* 判断为用户/组织,并进入对应页面 */}
|
{/* 忘记密码 */}
|
||||||
{
|
<Route
|
||||||
pathType === 'User' ?
|
path="/resetPassword"
|
||||||
<Route exact path="/:username"
|
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
|
||||||
render={
|
></Route>
|
||||||
(props) => {
|
|
||||||
return (<InfosIndex {...this.props} {...this.state} />)
|
{/* 关于我们 */}
|
||||||
}
|
<Route
|
||||||
}
|
path = "/aboutus"
|
||||||
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
render = {(props)=><AboutUs {...this.props} {...props}/>}
|
||||||
render={
|
></Route>
|
||||||
(props) => {
|
|
||||||
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
{/* 教学实践 */}
|
||||||
}
|
<Route
|
||||||
}>
|
path="/educoder"
|
||||||
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
render={(props) => <Teaching {...this.props} {...props} />}
|
||||||
<Route exact path="/"
|
></Route>
|
||||||
render={
|
|
||||||
(props) => (
|
{/*glcc */}
|
||||||
personal && personal.length > 0 ?
|
<Route
|
||||||
<InfosIndex {...this.props} {...props} />
|
path="/glcc"
|
||||||
:
|
render={(props) => <Glcc {...this.props} {...props} />}
|
||||||
<ProjectIndex {...this.props} {...props} />
|
></Route>
|
||||||
)
|
|
||||||
}
|
{/* 组织 */}
|
||||||
/>
|
<Route path={"/organize"}
|
||||||
// <Route path="/" component={Loading} />
|
render={
|
||||||
// <Route path="/" component={Shixunnopage} />
|
(props) => {
|
||||||
}
|
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
|
|
||||||
|
{/*新建项目等*/}
|
||||||
|
<Route
|
||||||
|
path={"/projects"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<Projects {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
|
{/* <Route
|
||||||
|
path={"/"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<Projects {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route> */}
|
||||||
|
|
||||||
|
{/* 判断为用户/组织,并进入对应页面 */}
|
||||||
|
{
|
||||||
|
pathType === 'User' ?
|
||||||
|
<Route exact path="/:username"
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<InfosIndex {...this.props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/> : pathType === 'Organization' ? <Route path={"/:OIdentifier"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<OrganizeIndex {...props} {...this.props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route> : pathType === '404' ? <Route component={Shixunnopage} />:
|
||||||
|
""
|
||||||
|
}
|
||||||
|
|
||||||
|
{/* 个人主页 */}
|
||||||
|
<Route path="/:username"
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<InfosIndex {...this.props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}></Route>
|
||||||
|
|
||||||
|
|
||||||
|
<Route component={Shixunnopage} />
|
||||||
{/* 个人主页 */}
|
</Switch>
|
||||||
<Route path="/:username"
|
</MuiThemeProvider>
|
||||||
render={
|
</ConfigProvider>
|
||||||
(props) => {
|
</Provider>
|
||||||
return (<InfosIndex {...this.props} {...this.state} />)
|
);
|
||||||
}
|
}
|
||||||
}></Route>
|
|
||||||
|
|
||||||
|
|
||||||
<Route component={Shixunnopage} />
|
|
||||||
</Switch>
|
|
||||||
{/* </Router> */}
|
|
||||||
</MuiThemeProvider>
|
|
||||||
</ConfigProvider>
|
|
||||||
</Provider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// moment国际化,设置为中文
|
// moment国际化,设置为中文
|
||||||
moment.defineLocale('zh-cn', {
|
moment.defineLocale('zh-cn', {
|
||||||
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
||||||
monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||||||
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
||||||
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
|
weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
|
||||||
weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
|
weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
|
||||||
longDateFormat: {
|
longDateFormat: {
|
||||||
LT: 'Ah点mm分',
|
LT: 'Ah点mm分',
|
||||||
LTS: 'Ah点m分s秒',
|
LTS: 'Ah点m分s秒',
|
||||||
L: 'YYYY-MM-DD',
|
L: 'YYYY-MM-DD',
|
||||||
LL: 'YYYY年MMMD日',
|
LL: 'YYYY年MMMD日',
|
||||||
LLL: 'YYYY年MMMD日Ah点mm分',
|
LLL: 'YYYY年MMMD日Ah点mm分',
|
||||||
LLLL: 'YYYY年MMMD日ddddAh点mm分',
|
LLLL: 'YYYY年MMMD日ddddAh点mm分',
|
||||||
l: 'YYYY-MM-DD',
|
l: 'YYYY-MM-DD',
|
||||||
ll: 'YYYY年MMMD日',
|
ll: 'YYYY年MMMD日',
|
||||||
lll: 'YYYY年MMMD日Ah点mm分',
|
lll: 'YYYY年MMMD日Ah点mm分',
|
||||||
llll: 'YYYY年MMMD日ddddAh点mm分'
|
llll: 'YYYY年MMMD日ddddAh点mm分'
|
||||||
},
|
},
|
||||||
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
||||||
meridiemHour: function (hour, meridiem) {
|
meridiemHour: function (hour, meridiem) {
|
||||||
if (hour === 12) {
|
if (hour === 12) {
|
||||||
hour = 0;
|
hour = 0;
|
||||||
}
|
}
|
||||||
if (meridiem === '凌晨' || meridiem === '早上' ||
|
if (meridiem === '凌晨' || meridiem === '早上' ||
|
||||||
meridiem === '上午') {
|
meridiem === '上午') {
|
||||||
return hour;
|
return hour;
|
||||||
} else if (meridiem === '下午' || meridiem === '晚上') {
|
} else if (meridiem === '下午' || meridiem === '晚上') {
|
||||||
return hour + 12;
|
return hour + 12;
|
||||||
} else {
|
} else {
|
||||||
// '中午'
|
// '中午'
|
||||||
return hour >= 11 ? hour : hour + 12;
|
return hour >= 11 ? hour : hour + 12;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
meridiem: function (hour, minute, isLower) {
|
meridiem: function (hour, minute, isLower) {
|
||||||
var hm = hour * 100 + minute;
|
var hm = hour * 100 + minute;
|
||||||
if (hm < 600) {
|
if (hm < 600) {
|
||||||
return '凌晨';
|
return '凌晨';
|
||||||
} else if (hm < 900) {
|
} else if (hm < 900) {
|
||||||
return '早上';
|
return '早上';
|
||||||
} else if (hm < 1130) {
|
} else if (hm < 1130) {
|
||||||
return '上午';
|
return '上午';
|
||||||
} else if (hm < 1230) {
|
} else if (hm < 1230) {
|
||||||
return '中午';
|
return '中午';
|
||||||
} else if (hm < 1800) {
|
} else if (hm < 1800) {
|
||||||
return '下午';
|
return '下午';
|
||||||
} else {
|
} else {
|
||||||
return '晚上';
|
return '晚上';
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
calendar: {
|
calendar: {
|
||||||
sameDay: function () {
|
sameDay: function () {
|
||||||
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
|
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
|
||||||
},
|
},
|
||||||
nextDay: function () {
|
nextDay: function () {
|
||||||
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
|
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
|
||||||
},
|
},
|
||||||
lastDay: function () {
|
lastDay: function () {
|
||||||
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
|
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
|
||||||
},
|
},
|
||||||
nextWeek: function () {
|
nextWeek: function () {
|
||||||
var startOfWeek, prefix;
|
var startOfWeek, prefix;
|
||||||
startOfWeek = moment().startOf('week');
|
startOfWeek = moment().startOf('week');
|
||||||
prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
|
prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
|
||||||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||||||
},
|
},
|
||||||
lastWeek: function () {
|
lastWeek: function () {
|
||||||
var startOfWeek, prefix;
|
var startOfWeek, prefix;
|
||||||
startOfWeek = moment().startOf('week');
|
startOfWeek = moment().startOf('week');
|
||||||
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
|
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
|
||||||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||||||
},
|
},
|
||||||
sameElse: 'LL'
|
sameElse: 'LL'
|
||||||
},
|
},
|
||||||
ordinalParse: /\d{1,2}(日|月|周)/,
|
ordinalParse: /\d{1,2}(日|月|周)/,
|
||||||
ordinal: function (number, period) {
|
ordinal: function (number, period) {
|
||||||
switch (period) {
|
switch (period) {
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'D':
|
case 'D':
|
||||||
case 'DDD':
|
case 'DDD':
|
||||||
return number + '日';
|
return number + '日';
|
||||||
case 'M':
|
case 'M':
|
||||||
return number + '月';
|
return number + '月';
|
||||||
case 'w':
|
case 'w':
|
||||||
case 'W':
|
case 'W':
|
||||||
return number + '周';
|
return number + '周';
|
||||||
default:
|
default:
|
||||||
return number;
|
return number;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
relativeTime: {
|
relativeTime: {
|
||||||
future: '%s内',
|
future: '%s内',
|
||||||
past: '%s前',
|
past: '%s前',
|
||||||
s: '几秒',
|
s: '几秒',
|
||||||
m: '1分钟',
|
m: '1分钟',
|
||||||
mm: '%d分钟',
|
mm: '%d分钟',
|
||||||
h: '1小时',
|
h: '1小时',
|
||||||
hh: '%d小时',
|
hh: '%d小时',
|
||||||
d: '1天',
|
d: '1天',
|
||||||
dd: '%d天',
|
dd: '%d天',
|
||||||
M: '1个月',
|
M: '1个月',
|
||||||
MM: '%d个月',
|
MM: '%d个月',
|
||||||
y: '1年',
|
y: '1年',
|
||||||
yy: '%d年'
|
yy: '%d年'
|
||||||
},
|
},
|
||||||
week: {
|
week: {
|
||||||
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
||||||
dow: 1, // Monday is the first day of the week.
|
dow: 1, // Monday is the first day of the week.
|
||||||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
export default SnackbarHOC()(App);
|
export default SnackbarHOC()(App);
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ broadcastChannelOnmessage('refreshPage', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
function locationurl(list) {
|
function locationurl(list) {
|
||||||
if (window.location.port !== "3007") {
|
// if (window.location.port !== "3007") {
|
||||||
window.location.href = list
|
window.location.href = list
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
// TODO 开发期多个身份切换
|
// TODO 开发期多个身份切换
|
||||||
let debugType = ""
|
let debugType = ""
|
||||||
|
@ -32,11 +32,11 @@ export function initAxiosInterceptors(props) {
|
||||||
// 判断网络是否连接
|
// 判断网络是否连接
|
||||||
initOnlineOfflineListener();
|
initOnlineOfflineListener();
|
||||||
|
|
||||||
var proxy = "https://testforgeplus.trustie.net";
|
var proxy = "https://code.educoder.net";
|
||||||
//响应前的设置
|
//响应前的设置
|
||||||
axios.interceptors.request.use(
|
axios.interceptors.request.use(
|
||||||
config => {
|
config => {
|
||||||
if(config.url.indexOf("http") !== -1) {
|
if(config.url.substr(0, 4) === "http") {
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
requestProxy(config);
|
requestProxy(config);
|
||||||
|
@ -47,8 +47,12 @@ export function initAxiosInterceptors(props) {
|
||||||
config.url = `${proxy}${url}`;
|
config.url = `${proxy}${url}`;
|
||||||
if (config.url.indexOf('?') === -1) {
|
if (config.url.indexOf('?') === -1) {
|
||||||
config.url = `${config.url}?debug=${debugType}`;
|
config.url = `${config.url}?debug=${debugType}`;
|
||||||
|
// config.url = `${config.url}`;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
config.url = `${config.url}&debug=${debugType}`;
|
config.url = `${config.url}&debug=${debugType}`;
|
||||||
|
// config.url = `${config.url}`;
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
config.url = url;
|
config.url = url;
|
||||||
|
@ -68,6 +72,8 @@ export function initAxiosInterceptors(props) {
|
||||||
if (response.data.status === -1) {
|
if (response.data.status === -1) {
|
||||||
if (window.location.pathname.startsWith('/tasks/')) {
|
if (window.location.pathname.startsWith('/tasks/')) {
|
||||||
props.showSnackbar(response.data.message || '服务器异常,请联系管理员。')
|
props.showSnackbar(response.data.message || '服务器异常,请联系管理员。')
|
||||||
|
} else if(window.location.pathname.startsWith('/login') || window.location.pathname.startsWith('/register') || window.location.pathname.startsWith('/resetPassword')) {
|
||||||
|
return response;
|
||||||
} else {
|
} else {
|
||||||
notification.open({
|
notification.open({
|
||||||
message: "提示",
|
message: "提示",
|
||||||
|
@ -86,7 +92,10 @@ export function initAxiosInterceptors(props) {
|
||||||
|
|
||||||
if (response.data.status === 404) {
|
if (response.data.status === 404) {
|
||||||
let responseURL = response.request ? response.request.responseURL:'';
|
let responseURL = response.request ? response.request.responseURL:'';
|
||||||
if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 ) {
|
if(responseURL.indexOf("/hovercard.json") > -1){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((responseURL.indexOf('/api/users/') === -1) || responseURL.indexOf('/api/organizations/') === -1 || responseURL.indexOf('/api/owners/') === -1) {
|
||||||
locationurl('/nopage');
|
locationurl('/nopage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,19 +5,38 @@ const { Search } = Input;
|
||||||
|
|
||||||
const $ = window.$;
|
const $ = window.$;
|
||||||
const isDev = window.location.port == 3007;
|
const isDev = window.location.port == 3007;
|
||||||
const isdev2= window.location.hostname ==='www.educoder.net'
|
const isdev2= window.location.hostname ==='www.educoder.net';
|
||||||
export const TEST_HOST = "https://testforgeplus.trustie.net/"
|
export const TEST_HOST = window.location.hostname ==="testforgeplus.educoder.net";
|
||||||
|
|
||||||
export function getImageUrl(path) {
|
export function getImageUrl(path) {
|
||||||
// https://www.educoder.net
|
const local = 'https://testforgeplus.educoder.net';
|
||||||
// https://testbdweb.trustie.net
|
const normal = TEST_HOST ? "https://new-testali-cdn.educoder.net/images" : 'https://ali-cdn.educoder.net/images';
|
||||||
// const local = 'http://localhost:3000'
|
const normalend = TEST_HOST ? 'https://new-testali-cdn.educoder.net' :'https://ali-cdn.educoder.net';
|
||||||
const local = 'https://testforgeplus.trustie.net';
|
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return `${local}/${path}`
|
return `${local}/${path}`;
|
||||||
|
}
|
||||||
|
if(path.substr(0, 7) !== "/system"){
|
||||||
|
if(path.substr(0, 7) !== "/images"){
|
||||||
|
return `${normal}${path}`;
|
||||||
|
}else{
|
||||||
|
return `${normalend}${path}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return `${path}`;
|
return `${path}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function openNewWindow(url) {
|
||||||
|
let link = document.createElement('a')
|
||||||
|
link.target = "_blank"
|
||||||
|
document.body.appendChild(link)
|
||||||
|
link.href = url
|
||||||
|
let evt = document.createEvent("MouseEvents")
|
||||||
|
evt.initEvent("click", false, false)
|
||||||
|
link.dispatchEvent(evt)
|
||||||
|
document.body.removeChild(link);
|
||||||
|
}
|
||||||
|
|
||||||
export function numFormat(num, digits){
|
export function numFormat(num, digits){
|
||||||
let d = digits || 1;
|
let d = digits || 1;
|
||||||
var si = [
|
var si = [
|
||||||
|
@ -36,9 +55,6 @@ export function numFormat(num, digits){
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getImage(path) {
|
export function getImage(path) {
|
||||||
// https://www.educoder.net
|
|
||||||
// https://testbdweb.trustie.net
|
|
||||||
// const local = 'http://localhost:3000'
|
|
||||||
const local = 'https://testforgeplus.trustie.net/';
|
const local = 'https://testforgeplus.trustie.net/';
|
||||||
if(path.indexOf("http://")===-1){
|
if(path.indexOf("http://")===-1){
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
|
@ -51,9 +67,6 @@ export function getImage(path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getcdnImageUrl(path) {
|
export function getcdnImageUrl(path) {
|
||||||
// https://www.educoder.net
|
|
||||||
// https://testbdweb.trustie.net
|
|
||||||
// const local = 'http://localhost:3000'
|
|
||||||
const testlocal = 'https://testali-cdn.educoder.net'
|
const testlocal = 'https://testali-cdn.educoder.net'
|
||||||
const local='https://ali-cdn.educoder.net'
|
const local='https://ali-cdn.educoder.net'
|
||||||
let firstStr=path.substr(0,1);
|
let firstStr=path.substr(0,1);
|
||||||
|
@ -66,11 +79,9 @@ export function getcdnImageUrl(path) {
|
||||||
return `/${path}`
|
return `/${path}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// return `${local}/${path}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setcndImagesUrl(path){
|
export function setcndImagesUrl(path){
|
||||||
const testlocal = 'https://testali-cdn.educoder.net'
|
|
||||||
const local='https://ali-cdn.educoder.net'
|
const local='https://ali-cdn.educoder.net'
|
||||||
let firstStr=path.substr(0,1);
|
let firstStr=path.substr(0,1);
|
||||||
if(firstStr=="/"){
|
if(firstStr=="/"){
|
||||||
|
@ -78,13 +89,11 @@ export function setcndImagesUrl(path){
|
||||||
return `${path}`
|
return `${path}`
|
||||||
}
|
}
|
||||||
return `${local}${path}`;
|
return `${local}${path}`;
|
||||||
//return isDev?`${testlocal}${path}`:`${local}${path}`;
|
|
||||||
}else{
|
}else{
|
||||||
if (!isdev2) {
|
if (!isdev2) {
|
||||||
return `/${path}`
|
return `/${path}`
|
||||||
}
|
}
|
||||||
return `${local}/${path}`;
|
return `${local}/${path}`;
|
||||||
// return isDev?`${testlocal}/${path}`:`${local}/${path}`;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,28 +127,13 @@ export function getUrl(path, goTest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUrlmys(path, goTest) {
|
export function getUrlmys(path, goTest) {
|
||||||
// https://www.educoder.net
|
|
||||||
// https://testbdweb.trustie.net
|
|
||||||
|
|
||||||
// 如果想所有url定位到测试版,可以反注释掉下面这行
|
|
||||||
//goTest = true
|
|
||||||
// testbdweb.educoder.net testbdweb.trustie.net
|
|
||||||
// const local = goTest ? 'https://testeduplus2.educoder.net' : 'http://localhost:3000'
|
|
||||||
// const local = 'https://testeduplus2.educoder.net'
|
|
||||||
const local = 'https://test-jupyterweb.educoder.net'
|
const local = 'https://test-jupyterweb.educoder.net'
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return `${local}${path?path:''}`
|
return `${local}${path?path:''}`
|
||||||
}
|
}
|
||||||
return `${path ? path: ''}`;
|
return `${path ? path: ''}`;
|
||||||
}
|
}
|
||||||
export function getStaticUrl() {
|
|
||||||
const local = TEST_HOST;
|
|
||||||
if (isDev) {
|
|
||||||
return local
|
|
||||||
}
|
|
||||||
// todo cdn
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
export function getUrl2(path, goTest) {
|
export function getUrl2(path, goTest) {
|
||||||
const local = 'http://localhost:3000'
|
const local = 'http://localhost:3000'
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
|
@ -149,37 +143,15 @@ export function getUrl2(path, goTest) {
|
||||||
}
|
}
|
||||||
const newopens ="79e33abd4b6588941ab7622aed1e67e8";
|
const newopens ="79e33abd4b6588941ab7622aed1e67e8";
|
||||||
let newtimestamp;
|
let newtimestamp;
|
||||||
let checkSubmitFlgs = false;
|
|
||||||
function railsgettimess(proxy) {
|
|
||||||
if(checkSubmitFlgs===false){
|
|
||||||
$.ajax({url:proxy,
|
|
||||||
async:false,success:function(data){
|
|
||||||
if(data.status===0){
|
|
||||||
newtimestamp=data.message;
|
|
||||||
checkSubmitFlgs = true;
|
|
||||||
}
|
|
||||||
}})
|
|
||||||
|
|
||||||
window.setTimeout(function () {
|
|
||||||
checkSubmitFlgs=false;
|
|
||||||
}, 2500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export function Railsgettimes() {
|
|
||||||
// railsgettimess(`${getUrl()}/api/main/first_stamp.json`);
|
|
||||||
// railsgettimess(`https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`);
|
|
||||||
}
|
|
||||||
export function getmyUrl(geturl) {
|
export function getmyUrl(geturl) {
|
||||||
|
|
||||||
return `${getUrl()}${geturl}`;
|
return `${getUrl()}${geturl}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUploadActionUrl(path, goTest) {
|
export function getUploadActionUrl(path, goTest) {
|
||||||
return `${getUrl()}/api/attachments.json${isDev ?`${isDev ?`?debug=${window._debugType || 'admin'}` : ""}` : ""}`;
|
return `${getUrl()}/api/attachments.json`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUploadLogoActionUrl() {
|
export function getUploadLogoActionUrl() {
|
||||||
|
@ -250,3 +222,36 @@ export function publicSearchs(Placeholder,onSearch,onInputs,onChanges,loadings)
|
||||||
allowClear={true}
|
allowClear={true}
|
||||||
></Search>)
|
></Search>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function turnbar(str){
|
||||||
|
let s = str;
|
||||||
|
if(s && s.length>0){
|
||||||
|
if(s.indexOf("%")>-1){
|
||||||
|
s = s.replaceAll('%','_25');
|
||||||
|
}
|
||||||
|
if(s.indexOf("#")>-1){
|
||||||
|
s = s.replaceAll('#','%23');
|
||||||
|
}
|
||||||
|
if(s.indexOf("/")>-1){
|
||||||
|
s = s.replaceAll('/','%2F');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
export function returnbar(str){
|
||||||
|
let s = str;
|
||||||
|
if(s && s.length>0){
|
||||||
|
if(str.indexOf("_25")>-1){
|
||||||
|
s = s.replaceAll('_25','%');
|
||||||
|
}
|
||||||
|
if(s.indexOf("%23")>-1){
|
||||||
|
s = s.replaceAll('%23','#');
|
||||||
|
}
|
||||||
|
if(s.indexOf("%2F")>-1){
|
||||||
|
s = s.replaceAll('%2F','/');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
|
@ -6,7 +6,8 @@ export {
|
||||||
getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat,
|
getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat,
|
||||||
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
|
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
|
, 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
|
, getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl,
|
||||||
|
turnbar,returnbar, openNewWindow as openNewWindow
|
||||||
} from './UrlTool';
|
} from './UrlTool';
|
||||||
|
|
||||||
export { setmiyah as setmiyah } from './Component';
|
export { setmiyah as setmiyah } from './Component';
|
||||||
|
|
|
@ -30,7 +30,7 @@ export default ({
|
||||||
cleanToc()
|
cleanToc()
|
||||||
}
|
}
|
||||||
rs = rs.replace(/(__special_katext_id_\d+__)/g, (_match, capture) => {
|
rs = rs.replace(/(__special_katext_id_\d+__)/g, (_match, capture) => {
|
||||||
const { type, expression } = math_expressions[capture]
|
const { type, expression } = math_expressions[capture];
|
||||||
return renderToString(_unescape(expression) || '', { displayMode: type === 'block', throwOnError: false, output: 'html' })
|
return renderToString(_unescape(expression) || '', { displayMode: type === 'block', throwOnError: false, output: 'html' })
|
||||||
})
|
})
|
||||||
rs = rs.replace(/▁/g, "▁▁▁")
|
rs = rs.replace(/▁/g, "▁▁▁")
|
||||||
|
|
|
@ -0,0 +1,280 @@
|
||||||
|
import React , { useEffect , useState } from 'react';
|
||||||
|
import { TPMIndexHOC} from '../../modules/tpm/TPMIndexHOC';
|
||||||
|
import { Timeline, Carousel } from 'antd';
|
||||||
|
import { getImageUrl } from 'educoder';
|
||||||
|
import CountUp from 'react-countup';
|
||||||
|
import axios from 'axios';
|
||||||
|
import './AboutUs.scss';
|
||||||
|
import subititle from './image/subtitle.png';
|
||||||
|
import achievements from './image/achievements.png';
|
||||||
|
import earth from './image/earth.png';
|
||||||
|
import computer from './image/computer.png';
|
||||||
|
import position from './image/position.png';
|
||||||
|
import quan1 from './image/quan1.png';
|
||||||
|
import quan2 from './image/quan2.png';
|
||||||
|
import fun1 from './image/fun1.png';
|
||||||
|
import fun2 from './image/fun2.png';
|
||||||
|
import fun3 from './image/fun3.png';
|
||||||
|
import fun4 from './image/fun4.png';
|
||||||
|
import fun5 from './image/fun5.png';
|
||||||
|
|
||||||
|
function AboutUs(){
|
||||||
|
const countUpProps = {
|
||||||
|
redraw: true,
|
||||||
|
start: 0,
|
||||||
|
duration: 2,
|
||||||
|
suffix: "+"
|
||||||
|
};
|
||||||
|
const [selectTitle, setSelectTitle] = useState(1);
|
||||||
|
//用于刷新组件
|
||||||
|
const [flush, setFlush] = useState(false);
|
||||||
|
//合作单位
|
||||||
|
const [units, setUnits] = useState([]);
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
//添加浏览器滚动监听事件
|
||||||
|
window.addEventListener('scroll', scrollListener);
|
||||||
|
//请求topics.json接口获取合作单位信息
|
||||||
|
axios.get(`/topics.json`, { params: { topic_type: "cooperator", limit: 20, group_size: 5}}).then(response=>{
|
||||||
|
response && setUnits(response.data.topics);
|
||||||
|
});
|
||||||
|
return ()=>window.removeEventListener('scroll', scrollListener);
|
||||||
|
},[])
|
||||||
|
|
||||||
|
function scrollListener(e){
|
||||||
|
const top = e.srcElement.scrollingElement.scrollTop;
|
||||||
|
//回到顶部时导航栏选中【关于我们】
|
||||||
|
top < 555 && setSelectTitle(1);
|
||||||
|
if (top > 2800 && top< 4000){
|
||||||
|
setFlush(true);
|
||||||
|
}else{
|
||||||
|
setFlush(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div className="aboutUs_body">
|
||||||
|
<div className="aboutUs_head df">
|
||||||
|
<p className="head_title">GitLink 确实开源</p>
|
||||||
|
<p className="head_cont font-20 mt36">新一代开源创新服务平台,让您的创意在这里释放</p>
|
||||||
|
</div>
|
||||||
|
<div className="aboutUs_title df">
|
||||||
|
<a className={selectTitle === 1 ? "active" : ""} href="#value1" onClick={() => setSelectTitle(1)}>关于我们</a>
|
||||||
|
<a className={selectTitle === 2 ? "active" : ""} href="#value2" onClick={() => setSelectTitle(2)}>平台统计</a>
|
||||||
|
<a className={selectTitle === 3 ? "active" : ""} href="#value3" onClick={() => setSelectTitle(3)}>加入我们</a>
|
||||||
|
<a className={selectTitle === 4 ? "active" : ""} href="#value4" onClick={() => setSelectTitle(4)}>合作单位</a>
|
||||||
|
</div>
|
||||||
|
<div className="aboutUs">
|
||||||
|
<a id="value1" className="mao"></a>
|
||||||
|
{/* 关于我们 */}
|
||||||
|
<div className="about_us">
|
||||||
|
<div className="au_bg">
|
||||||
|
<div className="au_title">关于我们</div>
|
||||||
|
{/* 简介 */}
|
||||||
|
<div className="au_cont subt df">
|
||||||
|
<div className="cont1_introduction">
|
||||||
|
<p className="subtitle">简介</p>
|
||||||
|
<div className="font-16">GitLink(确实开源)是CCF官方指定的开源创新服务平台,旨在以“为开源创新服务”为使命,以“成为开源创新的汇聚地”为愿景,秉承“创新、开放、协作、共享”的价值观,致力于为大规模开源开放协同创新助力赋能,打造创新成果孵化和新工科人才培养的开源创新生态!</div>
|
||||||
|
</div>
|
||||||
|
<img src={subititle} className="subtitleImg"></img>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/* 确实开源 一脉传承 */}
|
||||||
|
<div className="au_cont inherit pl30">
|
||||||
|
<p className="subtitle">确实开源 一脉传承</p>
|
||||||
|
<div>本世纪以来,随着软件创新需求和应用规模的飞速增长,软件开发队伍、开发资源、可信评估呈现出规模化、开放化、持续化的新特点,软件开发活动面临协同难、复用难、评估难的制约,经典的工程化软件开发方法面临严峻挑战,严重影响了软件开发效率和质量的提升。在此背景下,国防科技大学联合国内多所知名高校、科研机构和软件企业,围绕开源创新开展了持续性探索,构建形成了以Trustie(确实)为代表的一系列开源创新服务基础设施。自2006年以来,Trustie经过三个阶段的演化发展,于2021年迎来全面升级:在中国计算机学会(CCF)的带领指导下,共同推进产学研用深度融合,共筑新一代开源创新服务平台GitLink!</div>
|
||||||
|
<div className="inherit_items">
|
||||||
|
<img src={quan1} className="quan1Img"/>
|
||||||
|
<img src={quan2} className="quan2Img"/>
|
||||||
|
<Timeline>
|
||||||
|
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x font-20"></i>}>
|
||||||
|
<div className="timeline_cont">
|
||||||
|
<p>Trustie 1.0阶段(2006年-2014年)</p>
|
||||||
|
<div>国防科技大学、北京大学、北京航空航天大学、中国科学院软件研究所等单位合作开展了基于网络的软件开发群体化方法与技术研究,揭示了以大众化协同开发、开放式资源共享、持续性可信评估为核心的互联网大规模协同机理,与软件开发工程化方法相结合,系统地提出了基于网络的软件开发群体化方法,并于2008年发布了可信的国家软件资源共享与协同生产环境(简称“Trustie v1.0”,中文简称“确实”),重点解决大规模软件协同开发、可信评估、运行监控和持续演化等问题。</div>
|
||||||
|
</div>
|
||||||
|
</Timeline.Item>
|
||||||
|
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x"></i>}>
|
||||||
|
<div className="timeline_cont">
|
||||||
|
<p>Trustie 2.0阶段(2014年-2020年)</p>
|
||||||
|
<div>在科技部项目的持续资助下,国防科技大学联合国内多所知名高校、科研机构和软件企业,致力于系统研究新型软件开发方法,为开源生态建设提供方法指导和实践指南,支撑科教领域原始创新成果的开源孵化和开源人才培养,并于2014年发布了面向软件创新和教育的开源社区Trustie v2.0,重点探索协作开发社区、知识分享社区、应用服务社区等“大外围”软件涉众的联接,以及基于开源大数据的智能化开发等技术。</div>
|
||||||
|
</div>
|
||||||
|
</Timeline.Item>
|
||||||
|
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x"></i>}>
|
||||||
|
<div className="timeline_cont">
|
||||||
|
<p>Trustie 3.0阶段 (2020年至今)</p>
|
||||||
|
<div>Trustie在已有的技术积累基础上,进一步联合国内高等院校、科研机构、产业企业和开源组织等,在中国计算机学会(CCF)的带领指导下,共同推进产学研用深度融合,致力于联接互联网海量群智资源,探索开源创新成果开放与共享、开源生态协作与共建的新模式和新方法,升级形成了新一代开源创新服务平台GitLink,力图破解软件开发群智范式背后的本质机理,建立面向“大外围”开放创新的群智激发与汇聚关键机制,实现面向大规模软件涉众的稳态群智激发与汇聚。</div>
|
||||||
|
</div>
|
||||||
|
</Timeline.Item>
|
||||||
|
</Timeline>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 特色功能 确实给力 */}
|
||||||
|
<div className="feature_function_bg">
|
||||||
|
<div className="au_cont">
|
||||||
|
<p className="au_title">特色功能 确实给力</p>
|
||||||
|
<table><tr>
|
||||||
|
<td>
|
||||||
|
<div className="feat_func_cont">
|
||||||
|
<div className="feat_fun_img"><img src={fun1} /></div>
|
||||||
|
<div>
|
||||||
|
<p>分布式协作开发</p>
|
||||||
|
<div>支持在线文件编辑、 <br />分支管理、贡献统计、<br />仓库复刻、合并请求 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div className="feat_func_cont">
|
||||||
|
<div className="feat_fun_img"><img src={fun2} /></div>
|
||||||
|
<div>
|
||||||
|
<p>一站式过程管理</p>
|
||||||
|
<div>支持疑修、里程碑、 <br />通知提醒、标签归档、Wiki文档、组织管理 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div className="feat_func_cont">
|
||||||
|
<div className="feat_fun_img"><img src={fun3} /></div>
|
||||||
|
<div>
|
||||||
|
<p>高效流水线运维</p>
|
||||||
|
<div>提供轻量级工作流引擎<br />并支持自定义配置、 <br/>静态扫描、制品构建 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div className="feat_func_cont">
|
||||||
|
<div className="feat_fun_img"><img src={fun4} /></div>
|
||||||
|
<div>
|
||||||
|
<p>多层次代码分析</p>
|
||||||
|
<div>支持代码溯源分析、 <br />许可证风险分析、开源漏洞检测和加固建议 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div className="feat_func_cont">
|
||||||
|
<div className="feat_fun_img"><img src={fun5} /></div>
|
||||||
|
<div>
|
||||||
|
<p>多维度用户画像</p>
|
||||||
|
<div>支持开发活动统计、 <br />贡献日历、能力建模、<br />角色与专业定位分析 </div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 成果作用,确实有效 */}
|
||||||
|
<div className="au_cont df pl30">
|
||||||
|
<img src={achievements} className="achievementsImg"></img>
|
||||||
|
<div className="cont1_achievements">
|
||||||
|
<p className="subtitle ml0">成果作用 确实有效</p>
|
||||||
|
<div>GitLink(确实开源)为我国创新型软件产业发展提供了关键技术支撑和实践指南,为各类开源创新活动以及我国军地开源社区建设提供了有效支撑,为推动开源创新发展和创新人才培养发挥了重要作用。<br/>通过10多年的发展,GitLink平台显著提升了大型软件企业软件生产能力,支持了我国航空、航天、国防等多个关键领域的可信软件生产,为包括新一代人工智能启智社区、ARM绿色计算社区、科技部云计算与大数据木兰社区、科技委可控开源创造行动红山社区等的建设提供关键技术支撑,为我国关键领域开源社区生态建设发挥了重要作用!</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 平台统计 */}
|
||||||
|
<div className="about_us statistics">
|
||||||
|
<a id="value2" className="mao"></a>
|
||||||
|
<div className="au_title">平台统计</div>
|
||||||
|
<p>联接海量群智资源,汇聚优秀开源组织,孵化优质创新成果</p>
|
||||||
|
<img src={earth} className="earthImg"/>
|
||||||
|
<div className="statistics_cont df">
|
||||||
|
<div>
|
||||||
|
<CountUp {...countUpProps} start={0} end={50000} />
|
||||||
|
<p>开发者</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<CountUp {...countUpProps} end={1000} />
|
||||||
|
<p>组织</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<CountUp {...countUpProps} end={1400000} />
|
||||||
|
<p>仓库</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 加入我们 */}
|
||||||
|
<div className="join_us_bg">
|
||||||
|
<a id="value3" className="mao"></a>
|
||||||
|
<div className="au_cont">
|
||||||
|
<div className="au_title">加入我们</div>
|
||||||
|
<p className="subtitle">探索你的未来</p>
|
||||||
|
<p>GitLink团队在寻找新的小伙伴,期待着您的加入,让我们一起为开源创新贡献力量!</p>
|
||||||
|
<img src={computer} className="joinUsImg"/>
|
||||||
|
{/* 轮播图 */}
|
||||||
|
<Carousel autoplay easing="none">
|
||||||
|
<div className="df">
|
||||||
|
<div className="position">
|
||||||
|
<p className="df"><img src={position} /><span className="ml10">前端开发工程师</span></p>
|
||||||
|
<div>
|
||||||
|
1、全日制本科及以上学历,5年以上Web前端开发经验,熟练使用Gulp、Webpack等构建工具;<br />
|
||||||
|
2、熟练掌握VUE或React编程;有前端模块化、组件化、自动化开发经验者优先;<br />
|
||||||
|
3、精通jQuery、Ajax、Json等技术,对VUE,NodeJs等技术有所涉及;<br />
|
||||||
|
4、熟悉前端开发技术(HTML5、JS、JSON、XHTML、CSS3、ES6),了解各项技术的相关标准,并严格按照标准进行开发。<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="position right">
|
||||||
|
<p className="df"><img src={position} /><span className="ml10">后端开发工程师</span></p>
|
||||||
|
<div>
|
||||||
|
1、全日制本科及以上学历,计算机、软件工程相关专业者优先;<br />
|
||||||
|
2、3年以上Java开发相关经验,扎实的Java编程基础,参与过1个以上大/中型高并发、高性能系统架构设计、开发和调优;<br />
|
||||||
|
3、熟练掌握Spring、SpringBoot、Spring MVC、MyBatis等开源框架,掌握MVC框架模式及BS架构;<br />
|
||||||
|
4、精通SQL,熟练使用MySQL、Oracle等数据库,并具有一定的SQL优化能力;熟悉Redis、MongoDB等常用NoSQL解决方案,了解各自的优缺点以及使用场景者优先。<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="df">
|
||||||
|
<div className="position">
|
||||||
|
<p className="df"><img src={position} /><span className="ml10">软件测试工程师</span></p>
|
||||||
|
<div>
|
||||||
|
1、熟悉主流开发技术框架,具备软件工程的基本知识;<br />
|
||||||
|
2、熟练掌握各种测试理论和测试技术,精通测试过程设计和用例设计方法;<br />
|
||||||
|
3、熟悉性能测试、自动化测试、安全测试其中一种或多种测试工具;(LoadRunner、Jmeter、Selenium、QTP、Robot、Firebug、AppScan,PyCharm等),熟练运用工具从事过相关测试工作;<br />
|
||||||
|
4、熟悉掌握一种编程语言(Java/Python/C++等);<br />
|
||||||
|
5、熟悉Oracle/MySQL数据库,并能熟练编写SQL语句,熟练常用Linux命令;<br />
|
||||||
|
6、有整体质量意识,测试管理经验。<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="position right">
|
||||||
|
<p className="df"><img src={position} /><span className="ml10">产品经理</span></p>
|
||||||
|
<div>
|
||||||
|
1、计算机或相关专业本科以上学历;3年以上工作经验;<br />
|
||||||
|
2、熟悉开源软件项目的管理流程,了解软件需求的调研方法,具备需求分析能力;<br />
|
||||||
|
3、能以专业的方式向客户提供技术咨询,良好的方案设计能力和文字功底;<br />
|
||||||
|
4、具备良好的交流、沟通和表达能力,良好的方案演示和介绍技巧;<br />
|
||||||
|
5、了解互联网产品的基本思路及基础方法论,能够基于数据提出产品优化策略;<br />
|
||||||
|
6、承受较强的工作压力,强烈的团队合作意识与工作责任心;<br />
|
||||||
|
7、有良好人际交往能力,工作积极主动,自信心强,有较强的学习能力。<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Carousel>
|
||||||
|
<p className="delivery">简历投递邮箱:zengyt#csxjy.com.cn 曾先生 (用@符号替换#)</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 合作单位 */}
|
||||||
|
<div className="unit">
|
||||||
|
<a id="value4" className="mao"></a>
|
||||||
|
<div className="au_title">合作单位</div>
|
||||||
|
<table>
|
||||||
|
{units && units.map(group =>{
|
||||||
|
return (
|
||||||
|
<tr>
|
||||||
|
{group.map(item =>{
|
||||||
|
return(
|
||||||
|
<td><a href={item.url} target="_blank"><img src={getImageUrl(item.image)}></img></a></td>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default TPMIndexHOC(AboutUs);
|
|
@ -0,0 +1,338 @@
|
||||||
|
.aboutUs_body{
|
||||||
|
font-size: 16px;
|
||||||
|
color: #182332;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
& table{
|
||||||
|
text-align: center;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
& .df{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
& .join_us_bg, .feature_function_bg, .feat_fun_img, .aboutUs_head{
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
& .mao{
|
||||||
|
position: relative;
|
||||||
|
top: -70px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aboutUs_head.df{
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
height: 500px;
|
||||||
|
line-height: 500px;
|
||||||
|
background-image: url('./image/banner.png');
|
||||||
|
& p{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
& .head_title{
|
||||||
|
line-height: 50px;
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: 600;
|
||||||
|
background-image: -webkit-linear-gradient(bottom,#4CDBF5,#5AACFF);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
& .head_cont{
|
||||||
|
line-height: 39px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aboutUs_title{
|
||||||
|
width: 800px;
|
||||||
|
height: 62px;
|
||||||
|
margin: 0 auto;
|
||||||
|
&>table{
|
||||||
|
width: 800px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
& a.active{
|
||||||
|
color: #466AFF;
|
||||||
|
height: 62px;
|
||||||
|
line-height: 62px;
|
||||||
|
border-bottom: 2px solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.aboutUs{
|
||||||
|
& .au_title{
|
||||||
|
font-size: 38px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #1E1E1E;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 50px;
|
||||||
|
// line-height: 53px;
|
||||||
|
}
|
||||||
|
& .subtitle{
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 23px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.about_us{
|
||||||
|
// 关于我们
|
||||||
|
& .au_cont.df{
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
& .au_bg{ background: linear-gradient(180deg, #F3F9FF 0%, rgba(255, 255, 255, 0) 100%);}
|
||||||
|
& .cont1_introduction{
|
||||||
|
width: 472px;
|
||||||
|
&>div{
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& .cont1_achievements{
|
||||||
|
width: 581px;
|
||||||
|
& .subtitle.ml0{margin-left: 0;}
|
||||||
|
&>div{
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& .subtitleImg{
|
||||||
|
width: 650px;
|
||||||
|
height: 330px;
|
||||||
|
}
|
||||||
|
& .achievementsImg{
|
||||||
|
width: 507px;
|
||||||
|
height: 384px;
|
||||||
|
}
|
||||||
|
//时间轴
|
||||||
|
& .inherit_items{
|
||||||
|
position: relative;
|
||||||
|
& .quan1Img{
|
||||||
|
width: 140px;
|
||||||
|
height: 167px;
|
||||||
|
position: absolute;
|
||||||
|
left: -290px;
|
||||||
|
top: 90px;
|
||||||
|
}
|
||||||
|
& .quan2Img{
|
||||||
|
width: 100px;
|
||||||
|
height: 120px;
|
||||||
|
position: absolute;
|
||||||
|
right: -170px;
|
||||||
|
bottom: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.inherit{
|
||||||
|
& .icon-a-yuanquan2x{
|
||||||
|
color: #466aff;
|
||||||
|
}
|
||||||
|
& .ant-timeline-item-tail{
|
||||||
|
border-left: 2px solid rgba(108, 134, 172, 0.42);
|
||||||
|
height: calc(100% - -30px);
|
||||||
|
}
|
||||||
|
& .ant-timeline-item:last-child .ant-timeline-item-tail{
|
||||||
|
display: block;
|
||||||
|
height: calc(100% - 18px);
|
||||||
|
}
|
||||||
|
& .ant-timeline-item-content{
|
||||||
|
margin: 0 0 -15px 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.timeline_cont{
|
||||||
|
margin-left: 35px;
|
||||||
|
&>p{
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #466AFF;
|
||||||
|
margin: 45px 0 30px !important;
|
||||||
|
}
|
||||||
|
&>div{
|
||||||
|
width: 980px;
|
||||||
|
padding: 20px 35px;
|
||||||
|
background: #F5F7FA;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #182332;
|
||||||
|
line-height: 33px;
|
||||||
|
&:after,&:before{
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: 21px;
|
||||||
|
top: 100px;
|
||||||
|
border-top: 10px solid transparent;
|
||||||
|
border-bottom: 10px solid transparent;
|
||||||
|
border-right: 14px solid #F5F7FA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//特色功能 确实给力
|
||||||
|
& .feature_function_bg{
|
||||||
|
position: relative;
|
||||||
|
height: 630px;
|
||||||
|
background-image: url(./image/funBg.png);
|
||||||
|
& .au_cont p.au_title{
|
||||||
|
font-size: 30px;
|
||||||
|
padding: 50px 0 70px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
& table{
|
||||||
|
position: relative;
|
||||||
|
background: none;
|
||||||
|
width: 1200px;}
|
||||||
|
& .funBg2 {
|
||||||
|
width: 1600px;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -800px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: -15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& .feat_func_cont{
|
||||||
|
width: 200px;
|
||||||
|
& .feat_fun_img{
|
||||||
|
height: 205px;
|
||||||
|
line-height: 205px;
|
||||||
|
background-image: url('./image/funBg3.png');
|
||||||
|
&:hover{background-image: url('./image/funBg4.png');}
|
||||||
|
}
|
||||||
|
& img{ width: 175px;}
|
||||||
|
& p{
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 28px;
|
||||||
|
background-image: -webkit-linear-gradient(bottom,#4FFDFF,#0183FF);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
& div>div{
|
||||||
|
margin: 10px auto;
|
||||||
|
width: 142px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 28px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
opacity: 0.76;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 平台统计
|
||||||
|
&.statistics{
|
||||||
|
text-align: center;
|
||||||
|
background: linear-gradient(180deg, #ECF3FF 0%, #FFFFFF 100%);
|
||||||
|
height: 640px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
& .statistics_cont{
|
||||||
|
width: 1014px;
|
||||||
|
height: 203px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
opacity: 0.83;
|
||||||
|
position: absolute;
|
||||||
|
top: 230px;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -500px;
|
||||||
|
& span{
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1338D1;
|
||||||
|
}
|
||||||
|
& p{
|
||||||
|
width: 111px;
|
||||||
|
height: 38px;
|
||||||
|
line-height: 38px;
|
||||||
|
border: 1px solid #182332;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: 22px;
|
||||||
|
color: #1E1E1E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& .earthImg{
|
||||||
|
width: 1500px;
|
||||||
|
margin-top: -120px;
|
||||||
|
animation: moving 60s linear infinite;
|
||||||
|
}
|
||||||
|
@keyframes moving {
|
||||||
|
0% { transform: rotate(0deg);}
|
||||||
|
50% { transform: rotate(180deg);}
|
||||||
|
100% { transform: rotate(360deg);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 加入我们
|
||||||
|
.join_us_bg{
|
||||||
|
height: 710px;
|
||||||
|
margin-top: 40px;
|
||||||
|
background-image: url(./image/joinUs.png);
|
||||||
|
& .au_cont{position: relative;}
|
||||||
|
& .joinUsImg{
|
||||||
|
width: 260px;
|
||||||
|
height: 265px;
|
||||||
|
position: absolute;
|
||||||
|
top: 27px;
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
& .df{
|
||||||
|
display: flex !important;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
& .position{
|
||||||
|
width: 540px;
|
||||||
|
&.right{ margin-right: -30px;}
|
||||||
|
& p{
|
||||||
|
justify-content: flex-start;
|
||||||
|
height: 60px;
|
||||||
|
background: #253DA0;
|
||||||
|
line-height: 60px;
|
||||||
|
padding-left: 20px;
|
||||||
|
& img{width: 30px;}
|
||||||
|
& span{
|
||||||
|
font-weight: 500;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
& div{
|
||||||
|
min-height: 306px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 34px;
|
||||||
|
padding: 20px;
|
||||||
|
background: #FFFFFF;}
|
||||||
|
}
|
||||||
|
& .ant-carousel .slick-dots-bottom{bottom: -30px;}
|
||||||
|
& .ant-carousel .slick-dots li button{
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: #466AFF;
|
||||||
|
}
|
||||||
|
& .delivery{
|
||||||
|
height: 60px;
|
||||||
|
line-height: 60px;
|
||||||
|
margin-left: 35px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//合作单位
|
||||||
|
.unit{
|
||||||
|
margin-bottom: 60px;
|
||||||
|
& table{
|
||||||
|
width: 1200px;
|
||||||
|
height: 550px;
|
||||||
|
margin-top: 15px;
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 10px 10px;
|
||||||
|
& td{
|
||||||
|
width: 224px;
|
||||||
|
height: 122px;
|
||||||
|
box-shadow: 0px 1px 8px 1px rgba(0, 0, 0, 0.06);
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 2px solid #FFFFFF;
|
||||||
|
&:hover{ border: 1px solid #466AFF;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.au_cont{
|
||||||
|
width: 1200px;
|
||||||
|
margin: 50px auto;
|
||||||
|
&.pl30 .subtitle{ margin-left: -30px;}
|
||||||
|
}
|
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 1.7 MiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 454 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 859 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 172 KiB |
|
@ -124,7 +124,9 @@ class Activity extends Component{
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
render(){
|
render(){
|
||||||
const { time , data , page , project_trends , isSpin , pr_count , new_pr_count , close_issues_count , open_issues_count , pr_all_count ,issues_count } = this.state;
|
const { time , data , page , project_trends , isSpin ,
|
||||||
|
pr_count , new_pr_count , close_issues_count , open_issues_count , pr_all_count ,issues_count,
|
||||||
|
type,status } = this.state;
|
||||||
let name = time ? ARRAY.filter(item=>item.id === parseInt(time)) :[{name:"全部"}];
|
let name = time ? ARRAY.filter(item=>item.id === parseInt(time)) :[{name:"全部"}];
|
||||||
|
|
||||||
const first_per = pr_all_count > 0 ? `${parseFloat(pr_count/pr_all_count).toFixed(2)*100}%` :"50%";
|
const first_per = pr_all_count > 0 ? `${parseFloat(pr_count/pr_all_count).toFixed(2)*100}%` :"50%";
|
||||||
|
@ -150,25 +152,25 @@ class Activity extends Component{
|
||||||
<p className="percent_red" style={{width:`${third_per}`}}></p>
|
<p className="percent_red" style={{width:`${third_per}`}}></p>
|
||||||
<p className="percent_green" style={{width:`${fourth_per}`}}></p>
|
<p className="percent_green" style={{width:`${fourth_per}`}}></p>
|
||||||
</div>
|
</div>
|
||||||
<span>{data && data.issues_count}易修</span>
|
<span>{data && data.issues_count}疑修</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul className="percentBox">
|
<ul className="percentBox">
|
||||||
<li>
|
<li>
|
||||||
<span className="purple">{data && data.pr_count}</span>
|
<span className="purple">{data && data.pr_count}</span>
|
||||||
<span className="change" onClick={()=>this.changeTrends("PullRequest","delay")}>已处理的合并请求</span>
|
<span className={type==="PullRequest" && status==="delay" ?`change active`:"change"} onClick={()=>this.changeTrends("PullRequest","delay")}>已处理的合并请求</span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<span className="green">{data && data.new_pr_count}</span>
|
<span className="green">{data && data.new_pr_count}</span>
|
||||||
<span className="change" onClick={()=>this.changeTrends("PullRequest","not_delay")}>未处理的合并请求</span>
|
<span className={type==="PullRequest"&& status==="not_delay" ?`change active`:"change"} onClick={()=>this.changeTrends("PullRequest","not_delay")}>未处理的合并请求</span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<span className="red">{data && data.close_issues_count}</span>
|
<span className="red">{data && data.close_issues_count}</span>
|
||||||
<span className="change" onClick={()=>this.changeTrends("Issue","delay")}>已关闭的易修</span>
|
<span className={type==="Issue"&& status==="delay" ?`change active`:"change"} onClick={()=>this.changeTrends("Issue","delay")}>已关闭的疑修</span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<span className="green">{data && data.open_issues_count}</span>
|
<span className="green">{data && data.open_issues_count}</span>
|
||||||
<span className="change" onClick={()=>this.changeTrends("Issue","not_delay")}>未处理的易修</span>
|
<span className={type==="Issue"&& status==="not_delay" ?`change active`:"change"} onClick={()=>this.changeTrends("Issue","not_delay")}>未处理的疑修</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -14,20 +14,20 @@ class ActivityItem extends Component {
|
||||||
{/* 如果是版本发布 */}
|
{/* 如果是版本发布 */}
|
||||||
{item.trend_type === "VersionRelease" ?
|
{item.trend_type === "VersionRelease" ?
|
||||||
<p className="itemLine">
|
<p className="itemLine">
|
||||||
<Link to={`/${owner}/${projectsId}/releases`} className="color-blue font-16">{item.name}</Link>
|
<Link to={`/${owner}/${projectsId}/releases`} className="font-16">{item.name}</Link>
|
||||||
<span className="activity_type">{item.trend_type}</span>
|
<span className="activity_type">{item.trend_type}</span>
|
||||||
</p >
|
</p >
|
||||||
:
|
:
|
||||||
// 如果是任务
|
// 如果是任务
|
||||||
item.trend_type === "Issue" ?
|
item.trend_type === "Issue" ?
|
||||||
<p className="itemLine">
|
<p className="itemLine">
|
||||||
<Link to={`/${owner}/${projectsId}/issues/${item.trend_id}`} className="color-blue font-16">{item.name}</Link>
|
<Link to={`/${owner}/${projectsId}/issues/${item.trend_id}`} className="font-16">{item.name}</Link>
|
||||||
<span className="activity_type">{item.trend_type}</span>
|
<span className="activity_type">{item.trend_type}</span>
|
||||||
</p >
|
</p >
|
||||||
:
|
:
|
||||||
// 如果是合并请求
|
// 如果是合并请求
|
||||||
<p className="itemLine">
|
<p className="itemLine">
|
||||||
<Link to={`/${owner}/${projectsId}/pulls/${item.trend_id}`} className="color-blue font-16">{item.name}</Link>
|
<Link to={`/${owner}/${projectsId}/pulls/${item.trend_id}`} className="font-16">{item.name}</Link>
|
||||||
<span className="activity_type">{item.trend_type}</span>
|
<span className="activity_type">{item.trend_type}</span>
|
||||||
</p >
|
</p >
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +107,10 @@
|
||||||
color: black;
|
color: black;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
.change.active{
|
||||||
|
color: #466AFF !important;
|
||||||
|
}
|
||||||
|
|
||||||
.change:hover{
|
.change:hover{
|
||||||
color: #4183c4;
|
color: #466AFF;
|
||||||
}
|
}
|
|
@ -7,10 +7,10 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
|
||||||
const [ key , setKey ] = useState("HTTP");
|
const [ key , setKey ] = useState("HTTP");
|
||||||
return (
|
return (
|
||||||
<div className="downMenu">
|
<div className="downMenu">
|
||||||
<div style={{borderBottom:"1px solid #eee"}}>
|
<div>
|
||||||
<Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}>
|
<Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}>
|
||||||
<Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item>
|
<Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item>
|
||||||
<Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item>
|
{ssh_url && <Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item>}
|
||||||
</Menu>
|
</Menu>
|
||||||
<div className="gitAddressClone">
|
<div className="gitAddressClone">
|
||||||
<input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} />
|
<input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} />
|
||||||
|
@ -18,8 +18,8 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Menu className="edu-txt-center">
|
<Menu className="edu-txt-center">
|
||||||
<Menu.Item><a href={zip_url}>下载 ZIP</a></Menu.Item>
|
{zip_url && <Menu.Item style={{borderTop:"1px solid #eee"}}><a href={zip_url}>下载 ZIP</a></Menu.Item>}
|
||||||
<Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>
|
{tar_url && <Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>}
|
||||||
</Menu>
|
</Menu>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { Dropdown} from 'antd';
|
||||||
import './branch.scss';
|
import './branch.scss';
|
||||||
import SelectOverlay from './SelectOverlay';
|
import SelectOverlay from './SelectOverlay';
|
||||||
import { findDOMNode } from 'react-dom';
|
import { findDOMNode } from 'react-dom';
|
||||||
|
import { turnbar } from 'educoder';
|
||||||
|
|
||||||
export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{
|
export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{
|
||||||
const [ showValue , setShowValue ] = useState(branch);
|
const [ showValue , setShowValue ] = useState(branch);
|
||||||
|
@ -35,7 +36,8 @@ export default (({ projectsId , branch , owner , changeBranch , branchList , tag
|
||||||
|
|
||||||
function ChangeB(params) {
|
function ChangeB(params) {
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
changeBranch(params);
|
let en = turnbar(params);
|
||||||
|
changeBranch(en);
|
||||||
}
|
}
|
||||||
|
|
||||||
const menu = (
|
const menu = (
|
||||||
|
|
|
@ -66,9 +66,10 @@ function AddMember({getID,login,showNotification}){
|
||||||
};
|
};
|
||||||
|
|
||||||
function addCollaborator(){
|
function addCollaborator(){
|
||||||
if(source && source.length>0){
|
if(source && source.length>0&&searchKey){
|
||||||
getID && getID(id);
|
getID && getID(id);
|
||||||
setSearchKey(undefined);
|
setSearchKey(undefined);
|
||||||
|
setID(undefined)
|
||||||
}else{
|
}else{
|
||||||
showNotification("请选择存在的用户!");
|
showNotification("请选择存在的用户!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,36 +276,36 @@ li.ant-menu-item{
|
||||||
.-task-sidebar {
|
.-task-sidebar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 40px;
|
width: 40px;
|
||||||
right: 0;
|
right: 30px;
|
||||||
bottom: 80px;
|
bottom: 80px;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 1920px){
|
// @media screen and (max-width: 1920px){
|
||||||
.-task-sidebar{
|
// .-task-sidebar{
|
||||||
right:220px;
|
// right:220px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@media screen and (max-width: 1750px){
|
// @media screen and (max-width: 1750px){
|
||||||
.-task-sidebar{
|
// .-task-sidebar{
|
||||||
right:160px;
|
// right:160px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@media screen and (max-width: 1650px){
|
// @media screen and (max-width: 1650px){
|
||||||
.-task-sidebar{
|
// .-task-sidebar{
|
||||||
right:115px;
|
// right:115px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@media screen and (max-width: 1550px){
|
// @media screen and (max-width: 1550px){
|
||||||
.-task-sidebar{
|
// .-task-sidebar{
|
||||||
right:90px;
|
// right:90px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@media screen and (max-width: 1450px){
|
// @media screen and (max-width: 1450px){
|
||||||
.-task-sidebar{
|
// .-task-sidebar{
|
||||||
right:45px;
|
// right:45px;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
@media screen and (max-width: 1200px){
|
@media screen and (max-width: 1200px){
|
||||||
.-task-sidebar{
|
.-task-sidebar{
|
||||||
right:0px;
|
right:0px;
|
||||||
|
@ -313,17 +313,17 @@ li.ant-menu-item{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.-task-sidebar>div {
|
.-task-sidebar>div {
|
||||||
height: 40px;
|
height: 48px;
|
||||||
line-height: 40px;
|
line-height: 48px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 40px;
|
width: 48px;
|
||||||
color: #999;
|
color: #999;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
box-shadow: 0px 0px 10px 1px #F1F1F1;
|
box-shadow: 0px 0px 12px 5px rgba(208, 208, 208, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.-task-sidebar>div i {
|
.-task-sidebar>div i {
|
||||||
|
@ -334,36 +334,40 @@ li.ant-menu-item{
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
.-task-sidebar>div:hover{
|
.-task-sidebar>div:hover{
|
||||||
background: #1890FF;
|
background: #466AFF;
|
||||||
box-shadow: 0px 0px 10px 2px #B6D0FC;
|
box-shadow: 0px 0px 10px 2px #B6D0FC;
|
||||||
}
|
}
|
||||||
.helpBox{
|
.helpBox{
|
||||||
width: 260px;
|
width: 260px;
|
||||||
z-index: 103;
|
z-index: 103;
|
||||||
&.shareContent{
|
&.shareContent{
|
||||||
width: 200px;
|
width: 160px;
|
||||||
|
}
|
||||||
|
.ant-popover-title{
|
||||||
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
.ant-popover-inner-content{
|
.ant-popover-inner-content{
|
||||||
padding:0px;
|
padding:0px;
|
||||||
}
|
}
|
||||||
p.titlecontent{
|
p.titlecontent{
|
||||||
font-size: 18px;
|
font-size: 16px;
|
||||||
color: #333;
|
color: #333;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
padding:15px 20px;
|
padding:15px 20px;
|
||||||
}
|
}
|
||||||
.faqUl{
|
.faqUl{
|
||||||
padding:0px 20px 10px;
|
padding:10px 15px;
|
||||||
max-height: 230px;
|
max-height: 230px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
font-size: 13px;
|
||||||
li{
|
li{
|
||||||
background: #F5F5F5;
|
background: #F5F5F5;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
padding:0px 20px;
|
padding:0px 15px;
|
||||||
color: #333;
|
color: #333;
|
||||||
height: 34px;
|
height: 30px;
|
||||||
line-height: 34px;
|
line-height: 30px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 3px !important;
|
||||||
a{
|
a{
|
||||||
display: block;
|
display: block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -379,19 +383,18 @@ li.ant-menu-item{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.shareUl{
|
.shareUl{
|
||||||
padding:10px 0px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
.titlecontent{
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
li > i{
|
li > i{
|
||||||
font-size: 32px!important;
|
font-size: 32px!important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// tooltip样式
|
||||||
|
.tooltipBox .ant-tooltip-inner{
|
||||||
|
padding: 8px 12px;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
.-task-desc {
|
.-task-desc {
|
||||||
background: #494949;
|
background: #494949;
|
||||||
|
@ -439,3 +442,21 @@ li.ant-menu-item{
|
||||||
border-left: 5px solid #494949;
|
border-left: 5px solid #494949;
|
||||||
border-bottom: 6px solid transparent
|
border-bottom: 6px solid transparent
|
||||||
}
|
}
|
||||||
|
//头部输入框样式
|
||||||
|
.headSerach{
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding-left: 20px;
|
||||||
|
//修改antd输入框默认样式
|
||||||
|
.ant-input,.ant-input:focus{
|
||||||
|
border: none !important;
|
||||||
|
background-color: rgba(255, 255, 255, 0) !important;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
padding: 2px 20px 2px 20px;
|
||||||
|
background: #FFF;
|
||||||
|
& i{
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import './Component.scss';
|
||||||
import { getUser } from '../GetData/getData';
|
import { getUser } from '../GetData/getData';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
function Contributors({contributors,owner,projectsId,currentLogin}){
|
function Contributors({owner,projectsId,currentLogin}){
|
||||||
const [ menuList ,setMenuList ]= useState([]);
|
const [ menuList ,setMenuList ]= useState([]);
|
||||||
const [ list , setList ]= useState(undefined);
|
const [ list , setList ]= useState(undefined);
|
||||||
const [ total , setTotal ]= useState(0);
|
const [ total , setTotal ]= useState(0);
|
||||||
|
@ -16,11 +16,18 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
|
||||||
const [ isSpin , setIsSpin ] = useState(false);
|
const [ isSpin , setIsSpin ] = useState(false);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(contributors && contributors.total_count>0){
|
getData();
|
||||||
setTotal(contributors.total_count);
|
},[])
|
||||||
setList(contributors.list);
|
|
||||||
}
|
function getData(){
|
||||||
},[contributors])
|
const url = `/${owner}/${projectsId}/contributors.json`;
|
||||||
|
axios.get(url).then(result=>{
|
||||||
|
if(result){
|
||||||
|
setTotal(result.data.total_count);
|
||||||
|
setList(result.data.list);
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(login){
|
if(login){
|
||||||
|
@ -35,11 +42,13 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
|
||||||
let a = menuList && menuList.filter(i=>i.login === login);
|
let a = menuList && menuList.filter(i=>i.login === login);
|
||||||
if(a.length === 0){
|
if(a.length === 0){
|
||||||
let result = await getUser(login);
|
let result = await getUser(login);
|
||||||
let arr = menuList;
|
if(result){
|
||||||
arr.push({...result});
|
let arr = menuList;
|
||||||
setMenuList(arr);
|
arr.push({...result});
|
||||||
setMenusFunc(result);
|
setMenuList(arr);
|
||||||
setIsSpin(false);
|
setMenusFunc(result);
|
||||||
|
setIsSpin(false);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
setMenusFunc(a[0]);
|
setMenusFunc(a[0]);
|
||||||
setIsSpin(false);
|
setIsSpin(false);
|
||||||
|
@ -148,27 +157,26 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
|
||||||
}
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
|
total > 0 ?
|
||||||
<div className="halfs">
|
<div className="halfs">
|
||||||
<Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA">
|
<Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA">
|
||||||
<span>贡献者</span>
|
<span>贡献者</span>
|
||||||
{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>}
|
{ total > 0 && <span className="infoCount">{total}</span>}
|
||||||
</Link>
|
</Link>
|
||||||
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
|
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
|
||||||
{
|
{
|
||||||
total > 0 ?
|
list && list.length>0 && list.map((item,key)=>{
|
||||||
list.map((item,key)=>{
|
|
||||||
return(
|
return(
|
||||||
<Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top">
|
<Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top">
|
||||||
<Link key={key} to={`/${item.login}`}>
|
<a key={key} href={item.login ? `/${item.login}` : `mailto:${item.email}`}>
|
||||||
<img src={getImageUrl(`/${item.image_url}`)} alt="" onMouseOver={()=>setVisibleFunc(true,item.login,key)}/>
|
<img src={getImageUrl(`/${item.image_url}`)} alt="" onMouseOver={()=>setVisibleFunc(true,item.login,key)}/>
|
||||||
</Link>
|
</a>
|
||||||
</Popover>
|
</Popover>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
:""
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>:""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
export default Contributors;
|
export default Contributors;
|
|
@ -25,7 +25,7 @@ function DeleteBox({
|
||||||
>
|
>
|
||||||
<div className="desc">
|
<div className="desc">
|
||||||
<AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter>
|
<AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter>
|
||||||
<p>{subTitle}</p>
|
<p className="task-hide-2" style={{WebkitLineClamp:5}}>删除后未来事件将不会推送至此Webhook地址:<span title={subTitle}>{subTitle}</span></p>
|
||||||
</div>
|
</div>
|
||||||
</Modals>
|
</Modals>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,15 +1,10 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Drawer , Tree , Spin } from 'antd';
|
import { Drawer , Tree , Spin } from 'antd';
|
||||||
|
import { turnbar} from 'educoder';
|
||||||
import './Component.scss';
|
import './Component.scss';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
const { TreeNode , DirectoryTree } = Tree;
|
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}){
|
function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , list}){
|
||||||
const [ treeData , setTreeData ] = useState(undefined);
|
const [ treeData , setTreeData ] = useState(undefined);
|
||||||
const [ isSpin , setIsSpin ] = useState(true);
|
const [ isSpin , setIsSpin ] = useState(true);
|
||||||
|
|
|
@ -3,4 +3,9 @@
|
||||||
}
|
}
|
||||||
.ant-modal-wrap{
|
.ant-modal-wrap{
|
||||||
z-index: 1032;
|
z-index: 1032;
|
||||||
|
}
|
||||||
|
.ant-modal-wrap{
|
||||||
|
.ant-form-explain{
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,20 +1,42 @@
|
||||||
import React , {forwardRef, useEffect} from 'react';
|
import React , {forwardRef, useEffect} from 'react';
|
||||||
import { Modal , Form , Input , Button } from 'antd';
|
import { Modal , Form , Input , Button , message} from 'antd';
|
||||||
import './EAccount.scss';
|
import './EAccount.scss';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
function EducoderAccount({form , visible , onOk , email}){
|
function EducoderAccount({form , visible , current_user , onCancel,isCancel,showNotification}){
|
||||||
const { getFieldDecorator, validateFields , setFieldsValue } = form;
|
const { getFieldDecorator, validateFields , setFieldsValue } = form;
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(email){
|
if(current_user && current_user.email){
|
||||||
setFieldsValue({email})
|
setFieldsValue({email:current_user.email})
|
||||||
}
|
}
|
||||||
},[email])
|
},[current_user])
|
||||||
|
|
||||||
|
function onOk(values){
|
||||||
|
let url = `/accounts/gitea_register.json`;
|
||||||
|
// const { email , is_sync_pwd} = current_user;
|
||||||
|
// if(email && !is_sync_pwd){
|
||||||
|
// url = `/users/change_password.json`;
|
||||||
|
// }
|
||||||
|
axios.post(url,{
|
||||||
|
login:current_user && current_user.login,
|
||||||
|
...values
|
||||||
|
}).then(result=>{
|
||||||
|
if(result && result.data && result.data.status === 0){
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
function onSure(){
|
function onSure(){
|
||||||
validateFields((error,values)=>{
|
validateFields((error,values)=>{
|
||||||
if(!error){
|
if(!error){
|
||||||
onOk(values);
|
let reg = /^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
|
||||||
|
if (reg.test(values.email)) {
|
||||||
|
onOk(values);
|
||||||
|
}else{
|
||||||
|
showNotification && showNotification("请输入正确的邮箱账号!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -27,7 +49,8 @@ function EducoderAccount({form , visible , onOk , email}){
|
||||||
visible={visible}
|
visible={visible}
|
||||||
title="提示"
|
title="提示"
|
||||||
width="500px"
|
width="500px"
|
||||||
closable={false}
|
maskClosable={isCancel}
|
||||||
|
onCancel={onCancel}
|
||||||
footer={
|
footer={
|
||||||
<Button type="primary" onClick={onSure}>确定</Button>
|
<Button type="primary" onClick={onSure}>确定</Button>
|
||||||
}
|
}
|
||||||
|
@ -35,21 +58,28 @@ function EducoderAccount({form , visible , onOk , email}){
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<p className="mb15 edu-txt-center" style={{maxWidth:"350px",margin:"0px auto"}}>
|
<p className="mb15 edu-txt-center" style={{maxWidth:"350px",margin:"0px auto"}}>
|
||||||
为确保您能正常使用平台功能,请确认以下信息:
|
{
|
||||||
|
current_user && current_user.email ?
|
||||||
|
`平台已检测到您已绑定邮箱${current_user.email},请您确认如下操作`
|
||||||
|
:
|
||||||
|
"平台已检测到您未绑定邮箱,为了不影响协同开发部分功能的使用,建议先绑定邮箱"
|
||||||
|
}
|
||||||
</p>
|
</p>
|
||||||
<Form {...layout}>
|
<Form {...layout}>
|
||||||
<Form.Item label="邮箱">
|
<Form.Item label="邮箱">
|
||||||
{getFieldDecorator("email",{
|
{getFieldDecorator("email",{
|
||||||
rules:[{required:true,message:"请输入邮箱账号"}]
|
rules:[
|
||||||
|
{required:true,message:"请输入邮箱账号"}
|
||||||
|
]
|
||||||
})(
|
})(
|
||||||
<Input placeholder="请输入您的邮箱账号" width="220px"/>
|
<Input placeholder="请输入您的邮箱账号" width="220px" disabled={current_user && current_user.email}/>
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="密码">
|
<Form.Item label="密码">
|
||||||
{getFieldDecorator("password",{
|
{getFieldDecorator("password",{
|
||||||
rules:[{required:true,message:"请输入邮箱密码"}]
|
rules:[{required:true,message:"请输入您的平台密码"}]
|
||||||
})(
|
})(
|
||||||
<Input.Password placeholder="请输入您的邮箱密码" width="220px"/>
|
<Input.Password placeholder="请输入您的平台密码" width="220px"/>
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React, { useState } from "react";
|
||||||
import { Input ,notification} from "antd";
|
import { Input ,notification} from "antd";
|
||||||
|
|
||||||
const { Search } = Input;
|
const { Search } = Input;
|
||||||
export default ({history}) => {
|
export default ({history,searchUrl}) => {
|
||||||
const [openSearch, setOpenSearch] = useState(false);
|
const [openSearch, setOpenSearch] = useState(false);
|
||||||
|
|
||||||
function onGlobalSearch(value) {
|
function onGlobalSearch(value) {
|
||||||
|
@ -32,9 +32,7 @@ export default ({history}) => {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
<i className="iconfont icon-sousuo font-18 color-grey-6 ml30" onClick={() => {
|
<a href={`${searchUrl}?value=`}><i className="iconfont icon-sousuo font-18 ml15 mr15 color-white" /></a>
|
||||||
setOpenSearch(true)
|
|
||||||
}} />
|
|
||||||
}
|
}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,18 +1,41 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { FlexAJ } from '../Component/layout';
|
import { FlexAJ } from '../Component/layout';
|
||||||
|
import { Divider } from 'antd';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
function LanguagePower({languages}){
|
function LanguagePower({owner,projectsId}){
|
||||||
const [ array , setArray ] = useState(undefined);
|
const [ array , setArray ] = useState(undefined);
|
||||||
|
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(languages){
|
getData();
|
||||||
let arr = [];
|
},[])
|
||||||
Object.keys(languages).map((item,key)=>{
|
|
||||||
arr.push({name:item,percent:languages[item],color:getColor()});
|
function getData(){
|
||||||
})
|
const url = `/${owner}/${projectsId}/languages.json`;
|
||||||
setArray(arr);
|
axios.get(url).then(result=>{
|
||||||
}
|
if(result){
|
||||||
},[languages])
|
let languages = result.data;
|
||||||
|
if(languages){
|
||||||
|
let arr = [];
|
||||||
|
Object.keys(languages).map((item,key)=>{
|
||||||
|
arr.push({name:item,percent:languages[item],color:getColor()});
|
||||||
|
})
|
||||||
|
setArray(arr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// useEffect(()=>{
|
||||||
|
// if(languages){
|
||||||
|
// let arr = [];
|
||||||
|
// Object.keys(languages).map((item,key)=>{
|
||||||
|
// arr.push({name:item,percent:languages[item],color:getColor()});
|
||||||
|
// })
|
||||||
|
// setArray(arr);
|
||||||
|
// }
|
||||||
|
// },[languages])
|
||||||
|
|
||||||
function getColor(){
|
function getColor(){
|
||||||
let str = "#";
|
let str = "#";
|
||||||
|
@ -24,7 +47,9 @@ function LanguagePower({languages}){
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
return(
|
return(
|
||||||
|
(array && array.length > 0) ?
|
||||||
<div>
|
<div>
|
||||||
|
<Divider />
|
||||||
<p className="font-16 color-ooo aboutSubTitle">开发语言</p>
|
<p className="font-16 color-ooo aboutSubTitle">开发语言</p>
|
||||||
<div className="progress">
|
<div className="progress">
|
||||||
{
|
{
|
||||||
|
@ -47,8 +72,7 @@ function LanguagePower({languages}){
|
||||||
}
|
}
|
||||||
</FlexAJ>
|
</FlexAJ>
|
||||||
}
|
}
|
||||||
|
</div>:""
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
export default LanguagePower;
|
export default LanguagePower;
|
|
@ -29,12 +29,12 @@
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
padding-left: 20px;
|
|
||||||
}
|
}
|
||||||
.markdown-body{
|
.markdown-body{
|
||||||
box-shadow: 0px 0px 17px rgba(0,0,0,0.2);
|
box-shadow: 0px 0px 17px rgba(0,0,0,0.2);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin-top: 17px!important;
|
margin-top: 17px!important;
|
||||||
|
color: white;
|
||||||
}
|
}
|
||||||
.nContent{
|
.nContent{
|
||||||
padding:20px 34px;
|
padding:20px 34px;
|
||||||
|
|
|
@ -3,25 +3,42 @@ import { Modal , Button } from 'antd';
|
||||||
import './Index.scss';
|
import './Index.scss';
|
||||||
import '../../css/index.scss';
|
import '../../css/index.scss';
|
||||||
import RenderHtml from '../../../components/render-html';
|
import RenderHtml from '../../../components/render-html';
|
||||||
import cookie from 'react-cookies';
|
// import cookie from 'react-cookies';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
function SystemNotice({system_notification,history}){
|
function SystemNotice({showNotice,system_notification,history,login,hideSystemNotice}){
|
||||||
const [ visible , setVisible ] = useState(false);
|
const [ visible , setVisible ] = useState(false);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(system_notification && !cookie.load('notice_stage')){
|
|
||||||
|
if((system_notification && !system_notification.is_read) && showNotice && login){
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
},[system_notification,history.location])
|
},[system_notification,login])
|
||||||
|
|
||||||
function sureContinue() {
|
function sureContinue() {
|
||||||
cookie.remove('notice_stage');
|
if(login && ( system_notification && system_notification.id )){
|
||||||
|
const url = `/users/${login}/system_notification_histories.json`;
|
||||||
|
axios.post(url,{
|
||||||
|
system_notification_id:system_notification.id
|
||||||
|
}).then(result=>{
|
||||||
|
setVisible(false);
|
||||||
|
hideSystemNotice();
|
||||||
|
}).catch(error=>{
|
||||||
|
setVisible(false);
|
||||||
|
hideSystemNotice();
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
setVisible(false);
|
||||||
|
hideSystemNotice();
|
||||||
|
}
|
||||||
|
// cookie.remove('notice_stage');
|
||||||
|
|
||||||
let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);//一天
|
// let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);//一天
|
||||||
// let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);//一分钟
|
// // let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);//一分钟
|
||||||
cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" });
|
// cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" });
|
||||||
|
|
||||||
setVisible(false);
|
// setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,17 +1,38 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import EducoderAccount from '../EducoderAccount';
|
||||||
|
|
||||||
function Profile({children,sureFunc,showCompeleteDialog , completeProfile, className}) {
|
function Profile({
|
||||||
|
children,
|
||||||
function checkProfile() {
|
sureFunc,
|
||||||
if(!completeProfile){
|
showCompeleteDialog ,
|
||||||
showCompeleteDialog && showCompeleteDialog();
|
completeProfile,
|
||||||
|
className ,
|
||||||
|
current_user,checkIfLogin,showLoginDialog,showNotification
|
||||||
|
}) {
|
||||||
|
const [ giteaVisible , setGiteaVisible ] = useState(false);
|
||||||
|
|
||||||
|
function checkProfile() {
|
||||||
|
if(checkIfLogin()){
|
||||||
|
if(!current_user.has_gitea_user || (current_user.has_gitea_user && !current_user.is_sync_pwd)){
|
||||||
|
setGiteaVisible(true);
|
||||||
|
}else{
|
||||||
|
if(!completeProfile){
|
||||||
|
showCompeleteDialog && showCompeleteDialog();
|
||||||
|
}else{
|
||||||
|
sureFunc();
|
||||||
|
}
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
sureFunc();
|
showLoginDialog();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<a className={className} onClick={checkProfile}>{children}</a>
|
<React.Fragment>
|
||||||
|
<EducoderAccount showNotification={showNotification} visible={giteaVisible} onCancel={()=>setGiteaVisible(false)} current_user={current_user}/>
|
||||||
|
<a className={className} onClick={checkProfile}>{children}</a>
|
||||||
|
</React.Fragment>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
export default Profile;
|
export default Profile;
|
|
@ -23,9 +23,13 @@ $(window).scroll(function () {
|
||||||
function SiderBar() {
|
function SiderBar() {
|
||||||
const [ data , setData ] = useState([]);
|
const [ data , setData ] = useState([]);
|
||||||
const [ visible , setVisible ] = useState(false);
|
const [ visible , setVisible ] = useState(false);
|
||||||
|
const [ login , setLogin ]= useState(false);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
getFAQ();
|
getFAQ();
|
||||||
|
getCurrentUser();
|
||||||
|
//页面加载完成之后隐藏回到顶点
|
||||||
|
$(".-task-sidebar .gotop").hide();
|
||||||
},[])
|
},[])
|
||||||
|
|
||||||
function getFAQ(){
|
function getFAQ(){
|
||||||
|
@ -36,9 +40,19 @@ function SiderBar() {
|
||||||
}
|
}
|
||||||
}).catch(error=>{})
|
}).catch(error=>{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取当前登录账号信息->用于建议反馈
|
||||||
|
function getCurrentUser(){
|
||||||
|
let url = `/users/get_user_info.json`;
|
||||||
|
axios.get(url).then((response) => {
|
||||||
|
if (response && response.data && response.data.login) {
|
||||||
|
setLogin(response.data.login);
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
function content(list){
|
function content(list){
|
||||||
return <div>
|
return <div>
|
||||||
<p className="titlecontent">帮助</p>
|
|
||||||
<ul className="faqUl">
|
<ul className="faqUl">
|
||||||
{
|
{
|
||||||
list && list.map((i,k)=>{
|
list && list.map((i,k)=>{
|
||||||
|
@ -59,31 +73,46 @@ function SiderBar() {
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={"-task-sidebar"} >
|
<div className={"-task-sidebar"} >
|
||||||
<ShareModal visible={visible} urlValue={window.location.href} onCancel={()=>setVisible(false)}/>
|
{/* 平台反馈 */}
|
||||||
|
<Tooltip title="意见反馈" placement={"left"} overlayClassName="tooltipBox">
|
||||||
|
<div className="consult">
|
||||||
|
<a href={login ? `/Gitlink/forgeplus/issues/new?type=feedback`:`/login?go_page=/Gitlink/forgeplus/issues/new?type=feedback`}>
|
||||||
|
<i className="iconfont icon-yijianfankui2"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
|
{/* 帮助 */}
|
||||||
{
|
{
|
||||||
data && data.length > 0 && (data[0] && data[0].question) ?
|
data && data.length > 0 && (data[0] && data[0].question) ?
|
||||||
<Popover content={content(data)} overlayClassName="helpBox" placement={"left"}>
|
<Popover title="帮助" content={content(data)} overlayClassName="helpBox" placement={"left"}>
|
||||||
<div className="feedback">
|
<div className="feedback">
|
||||||
<i className="iconfont icon-bangzhu font-22"></i>
|
<i className="iconfont icon-bangzhu1 font-22"></i>
|
||||||
</div>
|
</div>
|
||||||
</Popover>
|
</Popover>
|
||||||
:""
|
:""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{/* 分享 */}
|
||||||
{/* <div className="scan pr" title="微信扫一扫">
|
{/* <div className="scan pr" title="微信扫一扫">
|
||||||
<span className="inline erweima"><i className="iconfont icon-erweima color-white font-22 fl"></i></span>
|
<span className="inline erweima"><i className="iconfont icon-erweima color-white font-22 fl"></i></span>
|
||||||
</div>*/}
|
</div>*/}
|
||||||
|
<ShareModal visible={visible} urlValue={window.location.href} onCancel={()=>setVisible(false)}/>
|
||||||
<Popover content={shareContent()} overlayClassName="helpBox shareContent" placement={"left"}>
|
<Popover content={shareContent()} overlayClassName="helpBox shareContent" placement={"left"}>
|
||||||
<div className="consult">
|
<div className="consult">
|
||||||
<i className="iconfont icon-fenxiang1"></i>
|
<i className="iconfont icon-fenxiang"></i>
|
||||||
</div>
|
</div>
|
||||||
</Popover>
|
</Popover>
|
||||||
<div className="gotop">
|
|
||||||
<Tooltip title="返回顶部" placement={"right"}>
|
{/* 返回顶部 */}
|
||||||
|
<Tooltip title="返回顶部" placement={"left"} overlayClassName="tooltipBox">
|
||||||
|
<div className="gotop">
|
||||||
<a><i className="iconfont icon-huidaodingbu1"></i></a>
|
<a><i className="iconfont icon-huidaodingbu1"></i></a>
|
||||||
</Tooltip>
|
</div>
|
||||||
</div>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,9 +17,9 @@ function SiderBarShareModal({visible,urlValue,onCancel}) {
|
||||||
value={urlValue}
|
value={urlValue}
|
||||||
size={200}
|
size={200}
|
||||||
fgColor="#000000"
|
fgColor="#000000"
|
||||||
style={{margin:"20px"}}
|
style={{margin:"0 20px 20px"}}
|
||||||
/>}
|
/>}
|
||||||
<p>打开微信“扫一扫”,点击右上角菜单,即可将网页分享至朋友圈</p>
|
<p>打开微信“扫一扫”,点击右上角菜单,即可将网页分享至朋友圈</p>
|
||||||
</div>
|
</div>
|
||||||
</Modal>
|
</Modal>
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,7 +5,7 @@ const Nav = styled.div`{
|
||||||
background-color:#fff;
|
background-color:#fff;
|
||||||
padding:20px 30px;
|
padding:20px 30px;
|
||||||
border-bottom:1px solid #eee;
|
border-bottom:1px solid #eee;
|
||||||
font-size:16px;
|
font-size:18px;
|
||||||
color:#333;
|
color:#333;
|
||||||
display:flex;
|
display:flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
|
@ -7,6 +7,8 @@ export const Banner = styled.div`{
|
||||||
border-bottom:1px solid #eee;
|
border-bottom:1px solid #eee;
|
||||||
background-color:#fff;
|
background-color:#fff;
|
||||||
border-radius:5px 5px 0px 0px;
|
border-radius:5px 5px 0px 0px;
|
||||||
|
justify-content: space-between;
|
||||||
|
display: flex;
|
||||||
}`
|
}`
|
||||||
export const AlignCenterBetween = styled.div`{
|
export const AlignCenterBetween = styled.div`{
|
||||||
display:flex;
|
display:flex;
|
||||||
|
|
|
@ -36,15 +36,15 @@ function About(props, ref) {
|
||||||
const [ disabled, setDisabled ] = useState(false);
|
const [ disabled, setDisabled ] = useState(false);
|
||||||
const [ typeFlag, setTypeFlag] = useState(false);
|
const [ typeFlag, setTypeFlag] = useState(false);
|
||||||
|
|
||||||
const AuthorLogin = props.projectDetail && props.projectDetail.author && props.projectDetail.author.login;
|
const isPermission = props.projectDetail && props.projectDetail.permission && props.projectDetail.permission!=="Reporter";
|
||||||
const CurrentLogin = props.current_user && props.current_user.login;
|
const CurrentLogin = props.current_user && props.current_user.login;
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(CurrentLogin === AuthorLogin){
|
if(isPermission){
|
||||||
auth('get');
|
auth('get');
|
||||||
}else{
|
}else{
|
||||||
setIsSpining(false);
|
setIsSpining(false);
|
||||||
}
|
}
|
||||||
},[AuthorLogin,CurrentLogin])
|
},[isPermission,CurrentLogin])
|
||||||
|
|
||||||
function auth(type){
|
function auth(type){
|
||||||
const url = `/${owner}/${projectsId}/ci_authorize.json`;
|
const url = `/${owner}/${projectsId}/ci_authorize.json`;
|
||||||
|
@ -136,7 +136,7 @@ function About(props, ref) {
|
||||||
params:{password:authorityVal}
|
params:{password:authorityVal}
|
||||||
}).then(result=>{
|
}).then(result=>{
|
||||||
setIsSpining(false);
|
setIsSpining(false);
|
||||||
if(result){
|
if(result && result.data.status === 0){
|
||||||
setStep(result.data.step);
|
setStep(result.data.step);
|
||||||
}
|
}
|
||||||
}).catch(error=>{setIsSpining(false)});
|
}).catch(error=>{setIsSpining(false)});
|
||||||
|
@ -149,7 +149,10 @@ function About(props, ref) {
|
||||||
axios.post(url).then(result=>{
|
axios.post(url).then(result=>{
|
||||||
setIsSpining(false);
|
setIsSpining(false);
|
||||||
if(result && result.data.status === 0){
|
if(result && result.data.status === 0){
|
||||||
props.history.push(`/${owner}/${projectsId}/devops`);
|
props.history.push({
|
||||||
|
pathname: `/${owner}/${projectsId}/devops`,
|
||||||
|
state:{open_devops:true}
|
||||||
|
});
|
||||||
// 需要将顶部的open_devops修改
|
// 需要将顶部的open_devops修改
|
||||||
let { changeOpenDevops } = props;
|
let { changeOpenDevops } = props;
|
||||||
changeOpenDevops && changeOpenDevops(true);
|
changeOpenDevops && changeOpenDevops(true);
|
||||||
|
@ -167,17 +170,17 @@ function About(props, ref) {
|
||||||
<img src={activate} alt="" width="250px" />
|
<img src={activate} alt="" width="250px" />
|
||||||
<P>定义DevOps工作流,帮助您检测bug、发布代码…</P>
|
<P>定义DevOps工作流,帮助您检测bug、发布代码…</P>
|
||||||
{
|
{
|
||||||
CurrentLogin !== AuthorLogin ?
|
!isPermission ?
|
||||||
<div className="noOperation">DevOps开启功能暂未对项目创建者以外的角色开放,可以联系项目创建者进行开启,开启后便可查看构建信息。</div>:""
|
<div className="noOperation">DevOps开启功能暂未对项目创建者以外的角色开放,可以联系项目创建者进行开启,开启后便可查看构建信息。</div>:""
|
||||||
}
|
}
|
||||||
<a href={"https://forum.trustie.net/forums/3110/detail"} target="_blank" style={{ color: "#5091FF"}}>
|
<a href={"https://forum.trustie.net/forums/3110/detail"} target="_blank" style={{ color: "#5091FF"}}>
|
||||||
了解什么是DevOps?
|
了解什么是DevOps?
|
||||||
</a>
|
</a>
|
||||||
<a href={"https://forum.trustie.net/forums/3080/detail"} target="_blank" style={{ color: "#5091FF"}}>
|
<a href={"https://forum.trustie.net/forums/3080/detail"} target="_blank" style={{ color: "#5091FF"}}>
|
||||||
如何使用DevOps?
|
如何使用引擎(Engine)功能?
|
||||||
</a>
|
</a>
|
||||||
{
|
{
|
||||||
AuthorLogin === CurrentLogin ?
|
isPermission ?
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{
|
{
|
||||||
step === 0 && !typeFlag ?
|
step === 0 && !typeFlag ?
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Table , Popconfirm } from 'antd';
|
import { Table , Popconfirm } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
|
import { turnbar } from "educoder";
|
||||||
|
|
||||||
// const STATUS = {
|
// const STATUS = {
|
||||||
// running:"运行中",
|
// running:"运行中",
|
||||||
|
@ -10,12 +11,6 @@ import { Link } from 'react-router-dom';
|
||||||
// killed:"已撤销",
|
// killed:"已撤销",
|
||||||
// pending:"准备中"
|
// pending:"准备中"
|
||||||
// }
|
// }
|
||||||
function turnbar(str){
|
|
||||||
if(str && str.length>0 && str.indexOf("/")>-1){
|
|
||||||
return str.replaceAll('/','%2F');
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
function renderTableStatus(status) {
|
function renderTableStatus(status) {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case "running":
|
case "running":
|
||||||
|
|
|
@ -17,7 +17,7 @@ function Sure({datas , name , saveFunc , sureSubmit , loading}){
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<div style={{padding:"0px 15px 15px 15px"}}>
|
<div style={{padding:"0px 15px 15px 15px"}}>
|
||||||
工作流名称:{name}
|
流水线名称:{name}
|
||||||
</div>
|
</div>
|
||||||
<div className="editorBody" style={{marginTop:"0px"}}>
|
<div className="editorBody" style={{marginTop:"0px"}}>
|
||||||
<Editors value={value} theme={"vs-grey"} height={"600px"} visible/>
|
<Editors value={value} theme={"vs-grey"} height={"600px"} visible/>
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { AlignCenterBetween , Blueline , FlexAJ } from '../../Component/layout';
|
||||||
function head({manager , parameter}){
|
function head({manager , parameter}){
|
||||||
return(
|
return(
|
||||||
<AlignCenterBetween>
|
<AlignCenterBetween>
|
||||||
<span className="font-20">工作流配置</span>
|
<span className="font-20">引擎配置</span>
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
{
|
{
|
||||||
parameter && <Blueline onClick={parameter}>参数管理</Blueline>
|
parameter && <Blueline onClick={parameter}>参数管理</Blueline>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React , { useEffect } from 'react';
|
import React from 'react';
|
||||||
import { WhiteBack } from '../Component/layout';
|
import { WhiteBack } from '../Component/layout';
|
||||||
import './ops.scss';
|
import './ops.scss';
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ const Params = Loadable({
|
||||||
})
|
})
|
||||||
|
|
||||||
export default ((props)=>{
|
export default ((props)=>{
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<WhiteBack className="opsPanel">
|
<WhiteBack className="opsPanel">
|
||||||
<Switch {...props}>
|
<Switch {...props}>
|
||||||
|
@ -66,7 +65,11 @@ export default ((props)=>{
|
||||||
{/* 原本的两种合为一个 */}
|
{/* 原本的两种合为一个 */}
|
||||||
<Route path="/:owner/:projectsId/devops"
|
<Route path="/:owner/:projectsId/devops"
|
||||||
render={
|
render={
|
||||||
(p) =>{return( p.location.state.open_devops?<Dispose {...props} {...p}/>:<About {...props} {...p}/>)}
|
(p) =>{
|
||||||
|
return( (props && props.project && props.project.open_devops) ?
|
||||||
|
<Dispose {...props} {...p}/>
|
||||||
|
:
|
||||||
|
<About {...props} {...p}/>)}
|
||||||
}
|
}
|
||||||
></Route>
|
></Route>
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|
|
@ -103,8 +103,8 @@ function Params(props){
|
||||||
<New visble={visible} successFunc={successFunc} CancelFunc={CancelFunc} editList={editList}/>
|
<New visble={visible} successFunc={successFunc} CancelFunc={CancelFunc} editList={editList}/>
|
||||||
<Banner>
|
<Banner>
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
<span className="font-18">工作流 - 参数管理</span>
|
<span className="font-18">引擎 - 参数管理</span>
|
||||||
<Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9 ml20">返回</Link>
|
<Link to={{pathname:`/${owner}/${projectsId}/devops`,state:{open_devops:true}}} className="font-14 color-grey-9 ml20">返回</Link>
|
||||||
</FlexAJ>
|
</FlexAJ>
|
||||||
</Banner>
|
</Banner>
|
||||||
<Div className="disposeList">
|
<Div className="disposeList">
|
||||||
|
|
|
@ -126,7 +126,7 @@ function Mould(props){
|
||||||
<div>
|
<div>
|
||||||
<New wrappedComponentRef={(f) => childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}></New>
|
<New wrappedComponentRef={(f) => childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}></New>
|
||||||
<Banner>
|
<Banner>
|
||||||
<FlexAJ><span>工作流 - 模板管理</span><Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9">返回</Link></FlexAJ>
|
<FlexAJ><span>引擎 - 模板管理</span><Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9">返回</Link></FlexAJ>
|
||||||
</Banner>
|
</Banner>
|
||||||
<Div className="disposeList">
|
<Div className="disposeList">
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { Menu, Popconfirm } from "antd";
|
||||||
import { TagsLine } from "../Component/OpsStatus";
|
import { TagsLine } from "../Component/OpsStatus";
|
||||||
import { Time } from "../Utils/Time";
|
import { Time } from "../Utils/Time";
|
||||||
import { truncateCommitId } from "../common/util";
|
import { truncateCommitId } from "../common/util";
|
||||||
import { getUrl } from 'educoder';
|
import { getImageUrl } from 'educoder';
|
||||||
|
|
||||||
const SubMenu = Menu.SubMenu;
|
const SubMenu = Menu.SubMenu;
|
||||||
const Img = styled.img`
|
const Img = styled.img`
|
||||||
|
@ -70,7 +70,7 @@ export default ({ data, repeatSet , chooseSteps }) => {
|
||||||
<div>
|
<div>
|
||||||
<FlexAJ className="leftheader">
|
<FlexAJ className="leftheader">
|
||||||
<AlignCenter>
|
<AlignCenter>
|
||||||
<Img src={getUrl(`/images/${data && data.author && data.author.image_url}`)} />
|
<Img src={getImageUrl(`/${data && data.author && data.author.image_url}`)} />
|
||||||
{data && data.started &&
|
{data && data.started &&
|
||||||
<span className="nest">
|
<span className="nest">
|
||||||
开始时间:<span> {data.started}</span>
|
开始时间:<span> {data.started}</span>
|
||||||
|
|
|
@ -12,7 +12,7 @@ function ServiceModal({sureModal}){
|
||||||
<div className="mt30" style={{textAlign:"center"}}>
|
<div className="mt30" style={{textAlign:"center"}}>
|
||||||
<Radio.Group value={type} onChange={changeType}>
|
<Radio.Group value={type} onChange={changeType}>
|
||||||
<Radio value={1}>自有服务器</Radio>
|
<Radio value={1}>自有服务器</Radio>
|
||||||
<Radio value={2}>Trustie服务器</Radio>
|
<Radio value={2}>EduCoder服务器</Radio>
|
||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
<p className="mt30"><Button type="primary" onClick={()=>sureModal(type)}>下一步</Button></p>
|
<p className="mt30"><Button type="primary" onClick={()=>sureModal(type)}>下一步</Button></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -290,7 +290,7 @@ function Structure(props,ref){
|
||||||
<Banner>
|
<Banner>
|
||||||
<FlexAJ>
|
<FlexAJ>
|
||||||
<span>构建列表</span>
|
<span>构建列表</span>
|
||||||
<Link to={`/${owner}/${projectsId}/devops`} className="font-15 color-grey-9">返回</Link>
|
<Link to={{pathname:`/${owner}/${projectsId}/devops`,state:{open_devops:true}}} className="font-15 color-grey-9">返回</Link>
|
||||||
</FlexAJ>
|
</FlexAJ>
|
||||||
</Banner>
|
</Banner>
|
||||||
<Div>
|
<Div>
|
||||||
|
|
|
@ -275,7 +275,10 @@ function disposePipeline(props){
|
||||||
...params
|
...params
|
||||||
}).then(result=>{
|
}).then(result=>{
|
||||||
if(result){
|
if(result){
|
||||||
props.history.push(`/${owner}/${projectsId}/devops`);
|
props.history.push({
|
||||||
|
pathname:`/${owner}/${projectsId}/devops`,
|
||||||
|
state:{open_devops:true}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}).catch(error=>{
|
}).catch(error=>{
|
||||||
|
|
|
@ -20,13 +20,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
||||||
if(owner && repo && visible===true){
|
if(owner && repo && visible===true){
|
||||||
getTeam();
|
getTeam();
|
||||||
}
|
}
|
||||||
if(!visible){
|
|
||||||
setFieldsValue({
|
|
||||||
owner_name:undefined,
|
|
||||||
identifier:undefined
|
|
||||||
})
|
|
||||||
setValue(undefined)
|
|
||||||
}
|
|
||||||
},[repo,owner,visible])
|
},[repo,owner,visible])
|
||||||
|
|
||||||
function getTeam(){
|
function getTeam(){
|
||||||
|
@ -127,7 +120,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
||||||
{getFieldDecorator("owner_name",{
|
{getFieldDecorator("owner_name",{
|
||||||
rules:[{required:true,message:"请输入目标用户名"}]
|
rules:[{required:true,message:"请输入目标用户名"}]
|
||||||
})(
|
})(
|
||||||
// <Input placeholder="请输入目标用户" autoComplete={"off"}/>
|
|
||||||
<SearchUser getUser={getUser} width={"100%"} placeholder="请输入目标用户" value={value}/>
|
<SearchUser getUser={getUser} width={"100%"} placeholder="请输入目标用户" value={value}/>
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
@ -153,11 +145,11 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
}
|
}
|
||||||
|
|
||||||
<Form.Item label="仓库标识:" style={{marginBottom:"0px"}}>
|
<Form.Item label="仓库标识:">
|
||||||
{getFieldDecorator("identifier",
|
{getFieldDecorator("identifier",
|
||||||
{
|
{
|
||||||
rules:[
|
rules:[
|
||||||
{required:true,message:"请输入仓库标识!"},
|
{required:true,message:"请输入仓库标识"},
|
||||||
{
|
{
|
||||||
validator:checkIdentifier
|
validator:checkIdentifier
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,5 +17,6 @@ export const getSubEntries = async (owner,projectsId,params)=>{
|
||||||
}
|
}
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
export const getUser = async (login)=>{
|
export const getUser = async (login)=>{
|
||||||
return (await axios.get(`/users/${login}/hovercard.json`)).data;
|
let response = await axios.get(`/users/${login}/hovercard.json`)
|
||||||
|
return response ? response.data : "";
|
||||||
}
|
}
|
|
@ -2,84 +2,84 @@ import React, { useState , forwardRef, useEffect } from 'react';
|
||||||
import { Form , Modal , Input , Radio } from 'antd';
|
import { Form , Modal , Input , Radio } from 'antd';
|
||||||
import Axios from 'axios';
|
import Axios from 'axios';
|
||||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||||
|
function AddProjectModal(props){
|
||||||
|
const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form;
|
||||||
|
const [ visible , setVisible ] = useState(false);
|
||||||
|
|
||||||
export default Form.create()(
|
useEffect(()=>{
|
||||||
forwardRef((props)=>{
|
if(!visible){
|
||||||
const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form;
|
setFieldsValue({
|
||||||
const [ visible , setVisible ] = useState(false);
|
code:undefined,
|
||||||
|
role:"developer"
|
||||||
useEffect(()=>{
|
|
||||||
if(!visible){
|
|
||||||
setFieldsValue({
|
|
||||||
code:undefined,
|
|
||||||
role:"developer"
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},[visible])
|
|
||||||
|
|
||||||
function onOk() {
|
|
||||||
validateFields((error,values)=>{
|
|
||||||
if(!error){
|
|
||||||
const url = `/applied_projects.json`;
|
|
||||||
Axios.post(url,{
|
|
||||||
applied_project:{
|
|
||||||
...values
|
|
||||||
}
|
|
||||||
}).then(result=>{
|
|
||||||
if(result && result.data){
|
|
||||||
setVisible(false);
|
|
||||||
props.showNotification("申请加入项目成功,等待审核!");
|
|
||||||
}
|
|
||||||
}).catch(error=>{})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
function checkValue(rule, value, callback){
|
},[visible])
|
||||||
if(!value){
|
|
||||||
callback();
|
function onOk() {
|
||||||
|
validateFields((error,values)=>{
|
||||||
|
console.log(error)
|
||||||
|
if(!error){
|
||||||
|
const url = `/applied_projects.json`;
|
||||||
|
Axios.post(url,{
|
||||||
|
applied_project:{
|
||||||
|
...values
|
||||||
|
}
|
||||||
|
}).then(result=>{
|
||||||
|
if(result && result.data){
|
||||||
|
setVisible(false);
|
||||||
|
props.showNotification("申请加入项目成功,等待审核!");
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function checkValue(rule, value, callback){
|
||||||
|
if(!value){
|
||||||
|
callback("请输入6位数的邀请码");
|
||||||
|
}else{
|
||||||
if(value.length < 6 || value.length > 6){
|
if(value.length < 6 || value.length > 6){
|
||||||
callback("请输入6位数的邀请码");
|
callback("请输入6位数的邀请码");
|
||||||
}
|
}
|
||||||
callback();
|
}
|
||||||
}
|
callback();
|
||||||
|
}
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Modal
|
<Modal
|
||||||
title="加入项目"
|
title="加入项目"
|
||||||
width="480px"
|
width="480px"
|
||||||
visible={visible}
|
visible={visible}
|
||||||
centered={true}
|
centered={true}
|
||||||
onOk={onOk}
|
onOk={onOk}
|
||||||
onCancel={()=>setVisible(false)}
|
onCancel={()=>setVisible(false)}
|
||||||
>
|
>
|
||||||
<Form layout={'inline'} className="inviteForm">
|
<Form layout={'inline'} className="inviteForm">
|
||||||
<Form.Item label="项目邀请码">
|
<Form.Item label="项目邀请码">
|
||||||
{getFieldDecorator("code",{
|
{getFieldDecorator("code",{
|
||||||
rules:[
|
rules:[
|
||||||
{required:true,message:"请输入6位项目邀请码"},
|
{required:true,message:" "},
|
||||||
{validator:checkValue}
|
{validator:checkValue}
|
||||||
]
|
]
|
||||||
})(
|
})(
|
||||||
<Input placeholder="请输入6位项目邀请码" autoComplete={"off"} maxLength="6" style={{width:"300px"}}/>
|
<Input placeholder="请输入6位项目邀请码" autoComplete={"off"} maxLength={6} style={{width:"300px"}}/>
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="选择角色">
|
<Form.Item label="选择角色">
|
||||||
{getFieldDecorator("role",{
|
{getFieldDecorator("role",{
|
||||||
rules:[{required:true,message:"请选择角色"}]
|
rules:[{required:true,message:"请选择角色"}]
|
||||||
})(
|
})(
|
||||||
<Radio.Group defaultValue={"developer"}>
|
<Radio.Group>
|
||||||
<Radio value="manager">管理员</Radio>
|
<Radio value="manager">管理员</Radio>
|
||||||
<Radio value="developer">开发者</Radio>
|
<Radio value="developer">开发者</Radio>
|
||||||
<Radio value="reporter">报告者</Radio>
|
<Radio value="reporter">报告者</Radio>
|
||||||
</Radio.Group>
|
</Radio.Group>
|
||||||
)}
|
)}
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
<CheckProfile {...props} sureFunc={()=>setVisible(true)}>加入项目</CheckProfile>
|
<CheckProfile {...props} sureFunc={()=>setVisible(true)}>加入项目</CheckProfile>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
)
|
)
|
||||||
})
|
}
|
||||||
)
|
export default Form.create()(forwardRef(AddProjectModal));
|
|
@ -0,0 +1,30 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Modal } from 'antd';
|
||||||
|
import { openNewWindow } from 'educoder';
|
||||||
|
|
||||||
|
function Engineer({QQVisible,setQQVisible}) {
|
||||||
|
|
||||||
|
return(
|
||||||
|
<Modal
|
||||||
|
centered
|
||||||
|
destroyOnClose={true}
|
||||||
|
visible={QQVisible}
|
||||||
|
title="提示"
|
||||||
|
width="500px"
|
||||||
|
// footer={null}ee
|
||||||
|
okText="立即联系"
|
||||||
|
cancelText="取消"
|
||||||
|
onOk={() => {
|
||||||
|
openNewWindow("https://qm.qq.com/cgi-bin/qm/qr?k=DWdqQHAbbfw7_rqm0d-Q_vDn5H6bMp91&jump_from=webapi")
|
||||||
|
}}
|
||||||
|
onCancel={() => setQQVisible(false)}
|
||||||
|
>
|
||||||
|
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
|
||||||
|
<p>您可以在QQ服务群向管理员申请,获得继续操作的权限</p >
|
||||||
|
< img src={require("./teacherQQ.png")} width={200} height={200} alt=""/>
|
||||||
|
<p>群号:693542422 </p >
|
||||||
|
</div>
|
||||||
|
</Modal >
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default Engineer
|
|
@ -19,7 +19,7 @@ function Footer(){
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<div style={{height:"543px"}}></div>
|
<div style={{height:"810px"}}></div>
|
||||||
<div className="newFooter edu-txt-center">
|
<div className="newFooter edu-txt-center">
|
||||||
{value && showhtml(value)}
|
{value && showhtml(value)}
|
||||||
{/* <div className="footerInfos">
|
{/* <div className="footerInfos">
|
||||||
|
@ -61,6 +61,42 @@ function Footer(){
|
||||||
<p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477号</a></p> */}
|
<p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477号</a></p> */}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
// {/* <div className="footEdition">
|
||||||
|
// <div className="footContent">
|
||||||
|
// <ul className="center">
|
||||||
|
// <img src={""} alt="Gitlink(确实开源)" height="29px"/>
|
||||||
|
// <p>(确实开源)</p>
|
||||||
|
// </ul>
|
||||||
|
// <ul>
|
||||||
|
// <li className="thehead">社区</li>
|
||||||
|
// <li><a href="/">网站首页</a></li>
|
||||||
|
// <li><a href="https://forum.trustie.net/forums/1168/detail">帮助中心</a></li>
|
||||||
|
// <li><a href="https://forum.trustie.net/">论坛交流</a></li>
|
||||||
|
// <li><a href="https://www.trustie.net/cooperation">合作伙伴</a></li>
|
||||||
|
// </ul>
|
||||||
|
// <ul>
|
||||||
|
// <li className="thehead">支持与服务</li>
|
||||||
|
// <li><a href="https://forgeplus.trustie.net/docs/api">API文档</a></li>
|
||||||
|
// <li><a href="https://git-scm.com">Git常用命令</a></li>
|
||||||
|
// <li><a href="https://forum.trustie.net/forums/3080/detail">DevOps使用文档</a></li>
|
||||||
|
// <li><a href='https://www.trustie.net/agreement'>服务协议</a></li>
|
||||||
|
// </ul>
|
||||||
|
// <ul>
|
||||||
|
// <li className="thehead">加入我们</li>
|
||||||
|
// <li className="theline">
|
||||||
|
// <div className="mr50">
|
||||||
|
// <li>公众号</li>
|
||||||
|
// <img src={"Img"} alt="公众号"/>
|
||||||
|
// </div>
|
||||||
|
// <div>
|
||||||
|
// <li>QQ群</li>
|
||||||
|
// <img src={"qqImg"} alt="QQ群"/>
|
||||||
|
// </div>
|
||||||
|
// </li>
|
||||||
|
// </ul>
|
||||||
|
// </div>
|
||||||
|
// <p className="copyrightDesc">©Copyright 2007~2021 国防科技大学Gitlink团队 & IntelliDE <br/>湘ICP备 17009477号</p>
|
||||||
|
// </div> */}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
export default Footer;
|
export default Footer;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import AccountProfile from "../../modules/user/AccountProfile";
|
import AccountProfile from "../../modules/user/AccountProfile";
|
||||||
import { getImageUrl } from 'educoder'
|
import { getImageUrl , openNewWindow } from 'educoder';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Input , notification , Dropdown ,Popover, Menu,Badge, Button } from 'antd';
|
import cookie from 'react-cookies';
|
||||||
|
import { notification , Dropdown ,Popover, Menu,Badge, Input, Divider } from 'antd';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
import LoginDialog from '../../modules/login/LoginDialog';
|
import LoginDialog from '../../modules/login/LoginDialog';
|
||||||
|
@ -13,14 +14,13 @@ import '../../modules/tpm/TPMIndex.css';
|
||||||
import CheckProfile from '../Component/ProfileModal/Profile';
|
import CheckProfile from '../Component/ProfileModal/Profile';
|
||||||
|
|
||||||
import './header.scss';
|
import './header.scss';
|
||||||
import NoticeContent from './NoticeContent';
|
import Engineer from './Engineer';
|
||||||
const $ = window.$
|
const $ = window.$
|
||||||
// TODO 这部分脚本从公共脚本中直接调用
|
// TODO 这部分脚本从公共脚本中直接调用
|
||||||
const { Search } = Input;
|
const { Search } = Input;
|
||||||
let old_url;
|
|
||||||
|
|
||||||
window._header_componentHandler = null;
|
window._header_componentHandler = null;
|
||||||
// 非trustie链接则新开页跳转
|
// 非trustie链接则新开页跳转
|
||||||
|
const isPath= window.location.hostname ==='code.educoder.net' || window.location.hostname==='testforgeplus.educoder.net';
|
||||||
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
|
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
|
||||||
class NewHeader extends Component {
|
class NewHeader extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -43,45 +43,66 @@ class NewHeader extends Component {
|
||||||
setevaluatinghides: false,
|
setevaluatinghides: false,
|
||||||
occupation: 0,
|
occupation: 0,
|
||||||
mydisplay: false,
|
mydisplay: false,
|
||||||
headtypesonClickbool: false,
|
// headtypesonClickbool: false,
|
||||||
headtypess: "/",
|
// headtypess: "/",
|
||||||
settings: null,
|
settings: null,
|
||||||
visiblemyss: false,
|
visiblemyss: false,
|
||||||
openSearch:false,
|
openSearch:false,
|
||||||
visible:false, //浮动消息框展示控制
|
visible:false, //浮动消息框展示控制
|
||||||
|
QQVisible:false,
|
||||||
|
educoderBanner:undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.geturlsdata();
|
this.geturlsdata();
|
||||||
window._header_componentHandler = this;
|
window._header_componentHandler = this;
|
||||||
|
this.getEducoderSetting();
|
||||||
//下拉框的显示隐藏
|
|
||||||
var hoverTimeout;
|
|
||||||
var hoveredPanel;
|
|
||||||
$(".edu-menu-panel").hover(function () {
|
|
||||||
if (hoverTimeout) { // 一次只显示一个panel
|
|
||||||
if (hoveredPanel && hoveredPanel !== this) {
|
|
||||||
$(hoveredPanel).find(".edu-menu-list").hide()
|
|
||||||
}
|
|
||||||
clearTimeout(hoverTimeout);
|
|
||||||
hoverTimeout = null;
|
|
||||||
}
|
|
||||||
hoveredPanel = this;
|
|
||||||
$(this).find(".edu-menu-list").show();
|
|
||||||
}, function () {
|
|
||||||
var that = this;
|
|
||||||
// 延迟hide
|
|
||||||
hoverTimeout = setTimeout(function () {
|
|
||||||
$(that).find(".edu-menu-list").hide();
|
|
||||||
}, 800)
|
|
||||||
|
|
||||||
});
|
|
||||||
//获取游览器地址
|
|
||||||
try {
|
try {
|
||||||
window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href))
|
window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href))
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEducoderSetting=()=>{
|
||||||
|
const url = `https://data.educoder.net/api/setting.json`;
|
||||||
|
axios.get(url).then(result=>{
|
||||||
|
if(result && result.data){
|
||||||
|
this.setState({
|
||||||
|
educoderBanner:result.data.setting && result.data.setting.navbar
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
|
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-white ml30" onClick={() => {
|
||||||
|
this.setState({openSearch:true})
|
||||||
|
}} />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onGlobalSearch=(value,item)=>{
|
||||||
|
window.location.href=`${item}?value=` + value;
|
||||||
|
}
|
||||||
|
|
||||||
openNotification = (messge) => {
|
openNotification = (messge) => {
|
||||||
notification.open({
|
notification.open({
|
||||||
message: "提示",
|
message: "提示",
|
||||||
|
@ -96,6 +117,26 @@ class NewHeader extends Component {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
submitsubmitapplications = () => {
|
||||||
|
let {
|
||||||
|
submitapplicationssum,
|
||||||
|
submitapplicationsvaluedata
|
||||||
|
} = this.state;
|
||||||
|
this.setState({
|
||||||
|
submitapplications: false,
|
||||||
|
RadioGroupvalue: undefined
|
||||||
|
})
|
||||||
|
if (submitapplicationssum === 0) {
|
||||||
|
if (submitapplicationsvaluedata !== undefined) {
|
||||||
|
window.location.href = "/courses/" + submitapplicationsvaluedata;
|
||||||
|
}
|
||||||
|
} else if (submitapplicationssum === 1) {
|
||||||
|
if (submitapplicationsvaluedata !== undefined) {
|
||||||
|
window.location.href = "/projects/" + submitapplicationsvaluedata;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
educoderlogin = () => {
|
educoderlogin = () => {
|
||||||
//登录账号
|
//登录账号
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -103,6 +144,8 @@ class NewHeader extends Component {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
educoderloginysl = () => {
|
educoderloginysl = () => {
|
||||||
|
//退出账号时清除登录页面的下次自动登录(用户再次打开登录页面时下次自动登录框不勾选)
|
||||||
|
cookie.remove("autologin");
|
||||||
//退出账号
|
//退出账号
|
||||||
var url = `/accounts/logout.json`;
|
var url = `/accounts/logout.json`;
|
||||||
axios.get((url)).then((result) => {
|
axios.get((url)).then((result) => {
|
||||||
|
@ -132,6 +175,24 @@ class NewHeader extends Component {
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
hidetojoinclass = () => {
|
||||||
|
this.setState({
|
||||||
|
tojoinclasstype: false,
|
||||||
|
tojoinitemtype: false,
|
||||||
|
tojoinclasstitle: undefined,
|
||||||
|
rolearr: ["", ""],
|
||||||
|
Checkboxteacherchecked: false,
|
||||||
|
Checkboxstudentchecked: false,
|
||||||
|
Checkboxteachingchecked: false,
|
||||||
|
Checkboxteachertype: false,
|
||||||
|
Checkboxteachingtype: false,
|
||||||
|
code_notice: false,
|
||||||
|
checked_notice: false,
|
||||||
|
RadioGroupvalue: undefined
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 关闭
|
// 关闭
|
||||||
cancelModulationModels = () => {
|
cancelModulationModels = () => {
|
||||||
this.setState({ isRenders: false })
|
this.setState({ isRenders: false })
|
||||||
|
@ -154,12 +215,12 @@ class NewHeader extends Component {
|
||||||
AccountProfiletype: false
|
AccountProfiletype: false
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
headtypesonClick = (url, bool) => {
|
// headtypesonClick = (url, bool) => {
|
||||||
this.setState({
|
// this.setState({
|
||||||
headtypess: url,
|
// headtypess: url,
|
||||||
headtypesonClickbool: bool,
|
// headtypesonClickbool: bool,
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
//获取数据为空的时候
|
//获取数据为空的时候
|
||||||
gettablogourlnull = () => {
|
gettablogourlnull = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -213,12 +274,18 @@ class NewHeader extends Component {
|
||||||
|
|
||||||
matchpaths = (url) => {
|
matchpaths = (url) => {
|
||||||
const { match } = this.props;
|
const { match } = this.props;
|
||||||
if(url){
|
const isDev = window.location.port == 3007;
|
||||||
if (match.path.indexOf(url) > -1) {
|
const isdev2= isDev ?'https://testforgeplus.trustie.net':`https://${window.location.hostname}`;
|
||||||
return true
|
let str = "";
|
||||||
}else {
|
if(url.indexOf("http")>-1){
|
||||||
return false
|
str = isdev2+match.url;
|
||||||
}
|
}else{
|
||||||
|
str = match.path;
|
||||||
|
}
|
||||||
|
if (url && (str === url || (str === url+'/'))) {
|
||||||
|
return true;
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,7 +306,19 @@ class NewHeader extends Component {
|
||||||
{
|
{
|
||||||
list.map((item,key)=>{
|
list.map((item,key)=>{
|
||||||
return(
|
return(
|
||||||
(item.name !=="加入课堂" && item.name !=="加入开发项目") &&
|
(item.name !=="加入课堂" && item.name !=="加入开发项目" && item.name !=="新建开发项目") &&
|
||||||
|
<Menu.Item key={item.name+key}>
|
||||||
|
<CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
|
||||||
|
</Menu.Item>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</Menu>
|
||||||
|
<Menu>
|
||||||
|
{
|
||||||
|
list.map((item,key)=>{
|
||||||
|
return(
|
||||||
|
(item.name ==="新建开发项目") &&
|
||||||
<Menu.Item key={item.name+key}>
|
<Menu.Item key={item.name+key}>
|
||||||
<CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
|
<CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
|
@ -278,97 +357,68 @@ class NewHeader extends Component {
|
||||||
this.setState({ visible });
|
this.setState({ visible });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
turntoEngineer=(url)=>{
|
||||||
|
const { current_user } = this.props;
|
||||||
|
if(current_user && current_user.login){
|
||||||
|
if(url){
|
||||||
|
window.location.href=url;
|
||||||
|
}else{
|
||||||
|
this.setState({
|
||||||
|
QQVisible:true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
this.educoderlogin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setQQVisible=()=>{
|
||||||
|
this.setState({
|
||||||
|
QQVisible:false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
menus=(item)=>{
|
||||||
|
return(
|
||||||
|
<div className="downMenus">
|
||||||
|
{
|
||||||
|
item.map((i,k)=>{
|
||||||
|
return(
|
||||||
|
!i.hidden && <li onClick={()=>{window.location.href=this.checkLink(i.link)}}>
|
||||||
|
{k!==0 &&<Divider />}
|
||||||
|
<aside className="font-16 color-ooo">{i.name}</aside>
|
||||||
|
<div className="font-14" style={{color:"rgb(159, 167, 179)",whiteSpace:'nowrap'}}>{i.content}</div>
|
||||||
|
</li>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
checkLink=(link)=>{
|
||||||
|
if(link.indexOf("http")>-1){
|
||||||
|
return link;
|
||||||
|
}else{
|
||||||
|
return `https://www.educoder.net${link}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { match ,resetUserInfo ,showNotification} = this.props;
|
|
||||||
let current_user = this.props.user;
|
let current_user = this.props.user;
|
||||||
let {
|
let {
|
||||||
|
QQVisible,
|
||||||
AccountProfiletype,
|
AccountProfiletype,
|
||||||
user,
|
user,
|
||||||
isRender,
|
isRender,
|
||||||
headtypesonClickbool,
|
|
||||||
headtypess,
|
|
||||||
settings,
|
settings,
|
||||||
visible,
|
visible,
|
||||||
|
educoderBanner
|
||||||
} = this.state;
|
} = this.state;
|
||||||
/*用户名称 用户头像url*/
|
|
||||||
let activeIndex = false;
|
|
||||||
let activeForums = false;
|
|
||||||
let activeShixuns = false;
|
|
||||||
let activePaths = false;
|
|
||||||
let coursestype = false;
|
|
||||||
let activePackages = false;
|
|
||||||
let activeMoopCases = false;
|
|
||||||
let activeCompetitions = false;
|
|
||||||
|
|
||||||
if (match.path === '/forums') {
|
|
||||||
activeForums = true;
|
|
||||||
} else if (match.path.startsWith('/shixuns')) {
|
|
||||||
activeShixuns = true;
|
|
||||||
} else if (match.path.startsWith('/paths')) {
|
|
||||||
activePaths = true;
|
|
||||||
} else if (match.path.startsWith('/courses')) {
|
|
||||||
coursestype = true;
|
|
||||||
} else if (match.path.startsWith('/crowdsourcing')) {
|
|
||||||
activePackages = true;
|
|
||||||
} else if (match.path.startsWith('/moop_cases')) {
|
|
||||||
activeMoopCases = true;
|
|
||||||
} else if (match.path.startsWith('/competitions')) {
|
|
||||||
activeCompetitions = true;
|
|
||||||
} else {
|
|
||||||
activeIndex = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let headtypes = '/';
|
|
||||||
if (settings) {
|
|
||||||
if (settings.navbar) {
|
|
||||||
if (settings.navbar.length > 0) {
|
|
||||||
if (match.path === '/') {
|
|
||||||
if (headtypesonClickbool === false) {
|
|
||||||
headtypes = undefined;
|
|
||||||
} else {
|
|
||||||
headtypes = headtypess;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (var i = 0; i < settings.navbar.length; i++) {
|
|
||||||
if (match.path === settings.navbar[i].link) {
|
|
||||||
headtypes = settings.navbar[i].link;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let shixuntype = false;
|
|
||||||
let pathstype = false;
|
|
||||||
let coursestypes = false;
|
|
||||||
if (this.props && this.props.mygetHelmetapi != null) {
|
|
||||||
let shixun = "/shixuns";
|
|
||||||
let paths = "/paths";
|
|
||||||
let courses = "/courses";
|
|
||||||
this.props.mygetHelmetapi && this.props.mygetHelmetapi.navbar && this.props.mygetHelmetapi.navbar.map((item, key) => {
|
|
||||||
var reg = RegExp(item.link);
|
|
||||||
if (shixun.match(reg)) {
|
|
||||||
if (item.hidden === true) {
|
|
||||||
shixuntype = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (paths.match(reg)) {
|
|
||||||
if (item.hidden === true) {
|
|
||||||
pathstype = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (courses.match(reg)) {
|
|
||||||
if (item.hidden === true) {
|
|
||||||
coursestypes = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
let search_url = settings && settings.common && settings.common.search;
|
let search_url = settings && settings.common && settings.common.search;
|
||||||
return (
|
return (
|
||||||
<div className="newHeaders" id="nHeader">
|
<div className={`newHeaders`} id="nHeader">
|
||||||
|
<Engineer QQVisible={QQVisible} setQQVisible={this.setQQVisible}/>
|
||||||
<div className="headerContent">
|
<div className="headerContent">
|
||||||
{isRender === true ?
|
{isRender === true ?
|
||||||
<LoginDialog
|
<LoginDialog
|
||||||
|
@ -383,91 +433,92 @@ class NewHeader extends Component {
|
||||||
{...this.props}
|
{...this.props}
|
||||||
{...this.state}
|
{...this.state}
|
||||||
/> : ""}
|
/> : ""}
|
||||||
{
|
{/* <div style={{width:"78px"}}>
|
||||||
|
{
|
||||||
|
publicNav &&
|
||||||
|
<a href={'https://www.ccf.org.cn/'} className={"fl"}>
|
||||||
|
<img src={MainLogo} alt="ccf" width="63px"/>
|
||||||
|
</a>
|
||||||
|
}
|
||||||
|
</div> */}
|
||||||
|
{/* {
|
||||||
settings && settings.nav_logo_url ?
|
settings && settings.nav_logo_url ?
|
||||||
<a href={settings && settings.new_course.default_url} className={"fl mr50"} style={{minWidth:"45px"}}>
|
<a href={settings && settings.new_course.default_url} className={"fl mr50"}>
|
||||||
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(`/${settings.nav_logo_url}`)}></img>
|
<img alt="可控开源社区" className="logoimg" src={getImageUrl(`/${settings.nav_logo_url}`)}></img>
|
||||||
</a>
|
</a>
|
||||||
:
|
:
|
||||||
""
|
""
|
||||||
}
|
} */}
|
||||||
<div className="head-nav pr" id={"head-navpre1"}>
|
<div className="head-nav pr" id={"head-navpre1"}>
|
||||||
{
|
{
|
||||||
settings && settings.navbar && settings.navbar.length > 0 ?
|
educoderBanner && educoderBanner.length > 0 ?
|
||||||
<ul id="header-nav">
|
<ul id="header-nav">
|
||||||
{
|
{
|
||||||
settings.navbar && settings.navbar.map((item, key) => {
|
educoderBanner.map((item, key) => {
|
||||||
var new_link = item.link;
|
var new_link = item.link;
|
||||||
var user_login = current_user && current_user.login;
|
var is_hidden = item.hidden;
|
||||||
var is_hidden = item.hidden
|
|
||||||
if (new_link && (new_link.indexOf("courses") > -1 || new_link.indexOf("contests") > -1)) {
|
|
||||||
if (user_login) {
|
|
||||||
if (new_link.indexOf("courses") > -1) {
|
|
||||||
new_link = new_link.replace(/courses/g, user_login + "/courses")
|
|
||||||
} else if (new_link.indexOf("contests") > -1) {
|
|
||||||
new_link = new_link.replace(/contests/g, user_login + "/contests")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
is_hidden = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (user_login && (new_link && new_link.indexOf("homes") > -1)) {
|
|
||||||
new_link = new_link.replace(/homes/g, user_login + "/user_activities")
|
|
||||||
}
|
|
||||||
|
|
||||||
var waiLian = (new_link && str.filter(item=>new_link.indexOf(item)>-1) );
|
|
||||||
var wl = waiLian && waiLian.length>0;
|
|
||||||
return (
|
return (
|
||||||
<li key={key} onClick={() => this.headtypesonClick(item.link, true)} className={`${this.matchpaths(item.link) === true ? 'pr active' : 'pr'}`} style={!is_hidden ? { display: 'flex' } : { display: 'none' }}>
|
<li key={key} onClick={() => this.headtypesonClick(item.link, true)} className={`${((isPath && item.name === "大学开源") || this.matchpaths(item.link) === true) ? 'pr active' : 'pr'}`} style={!is_hidden ? { display: 'block' } : { display: 'none' }}>
|
||||||
<a href={new_link} target={wl ? "_self":"_blank"}>{item.name}</a>
|
{
|
||||||
|
item.subitem && item.subitem.length>0 ?
|
||||||
|
<Dropdown overlay={this.menus(item.subitem)}>
|
||||||
|
<div className="namediv">
|
||||||
|
<a href={this.checkLink(new_link)} ><div dangerouslySetInnerHTML={{ __html: item.name }}></div> </a>
|
||||||
|
<i className="iconfont icon-xiala1"></i>
|
||||||
|
</div>
|
||||||
|
</Dropdown>
|
||||||
|
:
|
||||||
|
<a href={this.checkLink(new_link)} ><div dangerouslySetInnerHTML={{ __html: item.name }}></div></a>
|
||||||
|
}
|
||||||
</li>
|
</li>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
{/* {
|
||||||
|
settings && settings.engineer_url !== undefined ?
|
||||||
|
<li>
|
||||||
|
<a onClick={()=>this.turntoEngineer(settings.engineer_url)}>工程认证</a>
|
||||||
|
</li>
|
||||||
|
:""
|
||||||
|
} */}
|
||||||
</ul>
|
</ul>
|
||||||
: ""
|
: ""
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div className="head-right">
|
<div className="head-right">
|
||||||
{ search_url && <HeadSearch {...this.props}/>}
|
{ search_url && <HeadSearch {...this.props} searchUrl={settings && settings.common && settings.common.search}/>}
|
||||||
{
|
{
|
||||||
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
|
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
|
||||||
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
|
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
|
||||||
<i className="iconfont icon-tianjiafangda color-grey-6 ml30 mr15"></i>
|
<i className="iconfont icon-tianjiafangda color-white font-18 mr15 ml15" style={{marginBottom:"3px"}}/>
|
||||||
</Dropdown>:""
|
</Dropdown>:""
|
||||||
}
|
}
|
||||||
|
|
||||||
{ (settings && settings.common && settings.common.notice) && (current_user && current_user.login)?
|
{ (settings && settings.common && settings.common.notice) && (current_user && current_user.login)?
|
||||||
<Popover
|
<a href={settings.common.notice} className="message-icon">
|
||||||
overlayClassName="notice-popover"
|
{current_user &&
|
||||||
placement={`bottomRight`}
|
<i className="iconfont icon-xiaoxilingdang color-white ml15 mr15"></i>
|
||||||
content={<NoticeContent visible={visible} current_user={current_user} showNotification={showNotification} resetUserInfo={resetUserInfo}/>}
|
}
|
||||||
visible={visible}
|
</a>
|
||||||
onVisibleChange={this.handleVisibleChange}
|
|
||||||
destroyTooltipOnHide
|
|
||||||
>
|
|
||||||
<Link to={"/settings/notice"} className="message-icon">
|
|
||||||
{current_user && <Badge count={current_user.message_unread_total}>
|
|
||||||
<i className="iconfont icon-xiaoxilingdang color-grey-6 ml15 mr15"></i>
|
|
||||||
</Badge>}
|
|
||||||
</Link>
|
|
||||||
</Popover>
|
|
||||||
: ""
|
: ""
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
{!user || (user && !user.login) ?
|
{!user || (user && !user.login) ?
|
||||||
<span className="font-15 ml30">
|
<span className="font-15 ml30">
|
||||||
<a onClick={() => this.educoderlogin()} className="mr5 color-grey-6">登录</a>
|
<a onClick={() => this.educoderlogin()} className="mr5 color-white">登录</a>
|
||||||
{
|
{
|
||||||
settings && settings.common && settings.common.register &&
|
settings && settings.common && settings.common.register &&
|
||||||
<span><em className="vertical-line"></em><a className="ml5 color-grey-6" href={`${settings.common.register}`} target="_blank">注册</a></span>
|
<span><em className="vertical-line"></em><a className="ml5 color-white" href={`${settings.common.register}`} target="_blank">注册</a></span>
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
:
|
:
|
||||||
<Dropdown placement={`bottomRight`} overlay={this.renderMenu(settings && settings.personal)}>
|
<Dropdown placement={`bottomRight`} overlay={this.renderMenu(settings && settings.personal)}>
|
||||||
<a href={`/${this.props.current_user && this.props.current_user.login}`}>
|
<div className="ml15" style={{display:"flex"}}>
|
||||||
<img alt="头像" src={getImageUrl(`/${user.image_url}`)} className="currentImg"></img>
|
<a href={`/${this.props.current_user && this.props.current_user.login}`}>
|
||||||
</a>
|
<img alt="头像" src={getImageUrl(`/${user.image_url}`)} className="currentImg"></img>
|
||||||
|
</a>
|
||||||
|
<i className="iconfont icon-xiala1 font-14 ml3 mt5 mr3" style={{color:"#979797"}}></i>
|
||||||
|
</div>
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -23,6 +23,9 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
|
||||||
const [atPage, setAtPage] = useState(0);
|
const [atPage, setAtPage] = useState(0);
|
||||||
const [atUnreadList, setAtUnreadList] = useState([]);//未读@我列表
|
const [atUnreadList, setAtUnreadList] = useState([]);//未读@我列表
|
||||||
|
|
||||||
|
//记录用户点击的消息
|
||||||
|
const [clickItem, setClickItem] = useState(undefined);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
resetUserInfo();
|
resetUserInfo();
|
||||||
}, [noticeUnreadCount,atUnreadCount]);
|
}, [noticeUnreadCount,atUnreadCount]);
|
||||||
|
@ -150,23 +153,26 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
|
||||||
|
|
||||||
|
|
||||||
function changeReadMark(item) {
|
function changeReadMark(item) {
|
||||||
if (item.type === "notification") {
|
if (!clickItem || clickItem.id !== item.id){
|
||||||
let list = noticeUnreadList.slice();
|
if (item.type === "notification") {
|
||||||
let index = noticeUnreadList.indexOf(item);
|
let list = noticeUnreadList.slice();
|
||||||
list[index].status = 2;
|
let index = noticeUnreadList.indexOf(item);
|
||||||
setNoticeUnreadList(list);
|
if (list[index].status === 1 && noticeUnreadCount > 0) {
|
||||||
if (noticeUnreadCount > 0) {
|
setNoticeUnreadCount(noticeUnreadCount - 1);
|
||||||
setNoticeUnreadCount(noticeUnreadCount - 1);
|
}
|
||||||
}
|
list[index].status = 2;
|
||||||
} else if (item.type === "atme") {
|
setNoticeUnreadList(list);
|
||||||
let list = atUnreadList.slice();
|
} else if (item.type === "atme") {
|
||||||
let index = atUnreadList.indexOf(item);
|
let list = atUnreadList.slice();
|
||||||
list[index].status = 2;
|
let index = atUnreadList.indexOf(item);
|
||||||
setAtUnreadList(list);
|
if (list[index].status === 1 && atUnreadCount > 0) {
|
||||||
if (atUnreadCount > 0) {
|
setAtUnreadCount(atUnreadCount - 1);
|
||||||
setAtUnreadCount(atUnreadCount - 1);
|
}
|
||||||
|
list[index].status = 2;
|
||||||
|
setAtUnreadList(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setClickItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -184,11 +190,11 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
|
||||||
className='hoverNotice-body' // 外部添加className加以区分
|
className='hoverNotice-body' // 外部添加className加以区分
|
||||||
onPullRefresh={() => { setNoticePage(noticePage + 1); }} //触发加载ajax的function
|
onPullRefresh={() => { setNoticePage(noticePage + 1); }} //触发加载ajax的function
|
||||||
// type={2} // 传送加载组件的状态
|
// type={2} // 传送加载组件的状态
|
||||||
count={noticeUnreadList.length} // 数据当前的总数量
|
count={noticeUnreadList && noticeUnreadList.length} // 数据当前的总数量
|
||||||
pageSize={10} //
|
pageSize={10} //
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
noticeUnreadList.map(item => {
|
noticeUnreadList && noticeUnreadList.length>0 && noticeUnreadList.map(item => {
|
||||||
return (
|
return (
|
||||||
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
|
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
|
||||||
<div className={`noticeCont ${item.notification_url?'pointer':''}`}>
|
<div className={`noticeCont ${item.notification_url?'pointer':''}`}>
|
||||||
|
@ -219,12 +225,12 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
|
||||||
{atUnreadList.map(item => {
|
{atUnreadList.map(item => {
|
||||||
return (
|
return (
|
||||||
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
|
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
|
||||||
<div className="noticeCont">
|
<div className={`noticeCont ${item.notification_url ? 'pointer' : ''}`}>
|
||||||
<span style={{ visibility: item.status === 1 ? 'visible' : 'hidden' }}>
|
<span style={{ visibility: item.status === 1 ? 'visible' : 'hidden' }}>
|
||||||
<Badge color="#FA2020" />
|
<Badge color="#FA2020" />
|
||||||
</span>
|
</span>
|
||||||
<div className="noticeCont-text">
|
<div className="noticeCont-text">
|
||||||
<span className="content-span atme-cont-span" dangerouslySetInnerHTML={{ __html: "<b>" + (item.sender ? item.sender.name : '') + "</b> " + item.content + " 中@我" }}></span>
|
<span className="content-span atme-cont-span" dangerouslySetInnerHTML={{ __html: item.content }}></span>
|
||||||
<span className="timeSpan">{item.time_ago}</span>
|
<span className="timeSpan">{item.time_ago}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,8 +1,28 @@
|
||||||
|
|
||||||
.dropdownFlex{
|
.dropdownFlex{
|
||||||
display:flex;
|
display:flex;
|
||||||
background:#fff;
|
background-color: #fff;
|
||||||
border-radius: 3px;
|
background-clip: padding-box;
|
||||||
|
border-radius: 2px;
|
||||||
|
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
|
||||||
|
padding:5px 0px;
|
||||||
|
>.ant-menu:first-child{
|
||||||
|
border-right: 2px solid #eee!important;
|
||||||
|
}
|
||||||
|
>.ant-menu{
|
||||||
|
margin:0px 1px;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
li{
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
li:hover{
|
||||||
|
background-color: #0152d9;
|
||||||
|
a{
|
||||||
|
color: #fff!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
.ant-menu-vertical > .ant-menu-item{
|
.ant-menu-vertical > .ant-menu-item{
|
||||||
border:none;
|
border:none;
|
||||||
height: 35px;
|
height: 35px;
|
||||||
|
@ -12,9 +32,6 @@
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
a{color: rgba(0, 0, 0, 0.65)!important;}
|
a{color: rgba(0, 0, 0, 0.65)!important;}
|
||||||
}
|
}
|
||||||
&.ant-menu-item-active{
|
|
||||||
a{color: #4cacff!important;}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.ant-menu-vertical{
|
.ant-menu-vertical{
|
||||||
border:none;
|
border:none;
|
||||||
|
@ -24,7 +41,6 @@
|
||||||
width: 34px;
|
width: 34px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
margin-left: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.currentMenu{
|
.currentMenu{
|
||||||
|
@ -127,6 +143,9 @@
|
||||||
width: 110px;
|
width: 110px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
.ant-form-explain{
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 右上角小铃铛单独样式
|
// 右上角小铃铛单独样式
|
||||||
|
@ -262,4 +281,101 @@
|
||||||
|
|
||||||
.text-center{
|
.text-center{
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footEdition{
|
||||||
|
background-color: #171B23;
|
||||||
|
.footContent{
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding:86px 0px;
|
||||||
|
justify-content: space-around;
|
||||||
|
width: 1200px;
|
||||||
|
margin:0px auto;
|
||||||
|
ul{
|
||||||
|
min-width: 120px;
|
||||||
|
text-align: left;
|
||||||
|
margin-right: 80px;
|
||||||
|
&.center{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
&>p{
|
||||||
|
height: 22px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
&>img{
|
||||||
|
width: 100px;
|
||||||
|
height: 100%;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-top: 25px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
li{
|
||||||
|
height: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 20px;
|
||||||
|
color: #BDC2D1;
|
||||||
|
margin-bottom: 15px!important;
|
||||||
|
a{
|
||||||
|
color: #BDC2D1!important;
|
||||||
|
&:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.thehead{
|
||||||
|
height: 25px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #FFFFFF;
|
||||||
|
line-height: 25px;
|
||||||
|
margin-bottom: 20px!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.theline{
|
||||||
|
.imgCon{
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
padding:5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #fff;
|
||||||
|
img{
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.copyrightDesc{
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #BDC2D1;
|
||||||
|
line-height: 28px;
|
||||||
|
padding:15px 0px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #1B212C;
|
||||||
|
a{
|
||||||
|
color: #BDC2D1!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.regBtn{
|
||||||
|
height: 40px;
|
||||||
|
background: #466AFF;
|
||||||
|
border-radius: 2px;
|
||||||
|
display: inline-block;
|
||||||
|
padding:0px 18px;
|
||||||
|
margin-left: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FFFFFF!important;
|
||||||
|
line-height: 40px;
|
||||||
|
&:hover{
|
||||||
|
color: #FFFFFF!important;
|
||||||
|
background-color: #355CFF;
|
||||||
|
}
|
||||||
}
|
}
|
After Width: | Height: | Size: 749 B |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 615 B |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 212 KiB |
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
|
||||||
|
<title>bug-red</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="质量分析" transform="translate(-424.000000, -445.000000)" fill="#F54128" fill-rule="nonzero">
|
||||||
|
<g id="bug1" transform="translate(408.000000, 387.000000)">
|
||||||
|
<g id="编组-4" transform="translate(0.000000, 44.000000)">
|
||||||
|
<g id="编组-3">
|
||||||
|
<g id="bug-red" transform="translate(16.000000, 14.000000)">
|
||||||
|
<path d="M11.8899083,6.2156806 L9.85321101,6.2156806 L9.85321101,4.91378562 C10.9100917,4.91378562 11.766055,4.10400694 11.766055,3.1041516 C11.766055,3.04686822 11.7165138,3 11.6559633,3 L10.8302752,3 C10.7697248,3 10.7201835,3.04686822 10.7201835,3.1041516 C10.7201835,3.55721105 10.3321101,3.92434544 9.85321101,3.92434544 L2.14678899,3.92434544 C1.66788991,3.92434544 1.27981651,3.55721105 1.27981651,3.1041516 C1.27981651,3.04686822 1.23027523,3 1.16972477,3 L0.344036697,3 C0.283486239,3 0.233944954,3.04686822 0.233944954,3.1041516 C0.233944954,4.10400694 1.08990826,4.91378562 2.14678899,4.91378562 L2.14678899,6.2156806 L0.110091743,6.2156806 C0.0495412844,6.2156806 0,6.26254882 0,6.3198322 L0,7.04889339 C0,7.10617677 0.0495412844,7.15304499 0.110091743,7.15304499 L2.14678899,7.15304499 L2.14678899,8.40286417 C2.14678899,8.48748734 2.14954128,8.57211052 2.15642202,8.6541299 C1.21238532,9.03558513 0.550458716,9.92217561 0.550458716,10.9545783 C0.550458716,11.0118617 0.6,11.0587299 0.660550459,11.0587299 L1.43119266,11.0587299 C1.49174312,11.0587299 1.5412844,11.0118617 1.5412844,10.9545783 C1.5412844,10.3791407 1.87018349,9.87530739 2.36146789,9.60451324 C2.4440367,9.82843917 2.54862385,10.0419499 2.67385321,10.2424418 C3.00825688,10.7827282 3.48577982,11.2344858 4.05688073,11.5508462 C4.45458716,11.7708665 4.89633028,11.925792 5.36834862,12 C5.42889908,12 5.47844037,11.9531318 5.47844037,11.8958484 L5.47844037,5.85115001 C5.47844037,5.79386663 5.52798165,5.74699841 5.58853211,5.74699841 L6.41422018,5.74699841 C6.47477064,5.74699841 6.52431193,5.79386663 6.52431193,5.85115001 L6.52431193,11.8945465 C6.52431193,11.9518299 6.57385321,11.9986981 6.63440367,11.9986981 C7.10642202,11.9244901 7.54816514,11.7695646 7.94587156,11.5495443 C8.51697248,11.2331839 8.99449541,10.7814263 9.32889908,10.2411399 C9.45412844,10.0393462 9.5587156,9.82583538 9.6412844,9.60321134 C10.1298165,9.87530739 10.4587156,10.3791407 10.4587156,10.9545783 C10.4587156,11.0118617 10.5082569,11.0587299 10.5688073,11.0587299 L11.3394495,11.0587299 C11.4,11.0587299 11.4495413,11.0118617 11.4495413,10.9545783 C11.4495413,9.92217561 10.7876147,9.03558513 9.84357798,8.6541299 C9.84908257,8.57080862 9.85321101,8.48748734 9.85321101,8.40286417 L9.85321101,7.15304499 L11.8899083,7.15304499 C11.9504587,7.15304499 12,7.10617677 12,7.04889339 L12,6.3198322 C12,6.26254882 11.9504587,6.2156806 11.8899083,6.2156806 Z" id="路径"></path>
|
||||||
|
<path d="M3.11111111,3 L8.88888889,3 C8.95,3 9,2.95 9,2.88888889 C9,2.33333333 8.87777778,1.82361111 8.64027778,1.3875 C8.40138889,0.95 8.05,0.598611111 7.6125,0.359722222 C7.17638889,0.122222222 6.66666667,0 6.11111111,0 L5.88888889,0 C5.33333333,0 4.82361111,0.122222222 4.3875,0.359722222 C3.95,0.598611111 3.59861111,0.95 3.35972222,1.3875 C3.12222222,1.82361111 3,2.33333333 3,2.88888889 C3,2.95 3.05,3 3.11111111,3 Z" id="路径"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
|
||||||
|
<title>bug-fill</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="质量分析" transform="translate(-421.000000, -224.000000)" fill="#434D6C" fill-rule="nonzero">
|
||||||
|
<g id="编组-5" transform="translate(420.000000, 215.000000)">
|
||||||
|
<g id="bug-fill" transform="translate(1.000000, 9.000000)">
|
||||||
|
<path d="M11.8899083,6.2156806 L9.85321101,6.2156806 L9.85321101,4.91378562 C10.9100917,4.91378562 11.766055,4.10400694 11.766055,3.1041516 C11.766055,3.04686822 11.7165138,3 11.6559633,3 L10.8302752,3 C10.7697248,3 10.7201835,3.04686822 10.7201835,3.1041516 C10.7201835,3.55721105 10.3321101,3.92434544 9.85321101,3.92434544 L2.14678899,3.92434544 C1.66788991,3.92434544 1.27981651,3.55721105 1.27981651,3.1041516 C1.27981651,3.04686822 1.23027523,3 1.16972477,3 L0.344036697,3 C0.283486239,3 0.233944954,3.04686822 0.233944954,3.1041516 C0.233944954,4.10400694 1.08990826,4.91378562 2.14678899,4.91378562 L2.14678899,6.2156806 L0.110091743,6.2156806 C0.0495412844,6.2156806 0,6.26254882 0,6.3198322 L0,7.04889339 C0,7.10617677 0.0495412844,7.15304499 0.110091743,7.15304499 L2.14678899,7.15304499 L2.14678899,8.40286417 C2.14678899,8.48748734 2.14954128,8.57211052 2.15642202,8.6541299 C1.21238532,9.03558513 0.550458716,9.92217561 0.550458716,10.9545783 C0.550458716,11.0118617 0.6,11.0587299 0.660550459,11.0587299 L1.43119266,11.0587299 C1.49174312,11.0587299 1.5412844,11.0118617 1.5412844,10.9545783 C1.5412844,10.3791407 1.87018349,9.87530739 2.36146789,9.60451324 C2.4440367,9.82843917 2.54862385,10.0419499 2.67385321,10.2424418 C3.00825688,10.7827282 3.48577982,11.2344858 4.05688073,11.5508462 C4.45458716,11.7708665 4.89633028,11.925792 5.36834862,12 C5.42889908,12 5.47844037,11.9531318 5.47844037,11.8958484 L5.47844037,5.85115001 C5.47844037,5.79386663 5.52798165,5.74699841 5.58853211,5.74699841 L6.41422018,5.74699841 C6.47477064,5.74699841 6.52431193,5.79386663 6.52431193,5.85115001 L6.52431193,11.8945465 C6.52431193,11.9518299 6.57385321,11.9986981 6.63440367,11.9986981 C7.10642202,11.9244901 7.54816514,11.7695646 7.94587156,11.5495443 C8.51697248,11.2331839 8.99449541,10.7814263 9.32889908,10.2411399 C9.45412844,10.0393462 9.5587156,9.82583538 9.6412844,9.60321134 C10.1298165,9.87530739 10.4587156,10.3791407 10.4587156,10.9545783 C10.4587156,11.0118617 10.5082569,11.0587299 10.5688073,11.0587299 L11.3394495,11.0587299 C11.4,11.0587299 11.4495413,11.0118617 11.4495413,10.9545783 C11.4495413,9.92217561 10.7876147,9.03558513 9.84357798,8.6541299 C9.84908257,8.57080862 9.85321101,8.48748734 9.85321101,8.40286417 L9.85321101,7.15304499 L11.8899083,7.15304499 C11.9504587,7.15304499 12,7.10617677 12,7.04889339 L12,6.3198322 C12,6.26254882 11.9504587,6.2156806 11.8899083,6.2156806 Z" id="路径"></path>
|
||||||
|
<path d="M3.11111111,3 L8.88888889,3 C8.95,3 9,2.95 9,2.88888889 C9,2.33333333 8.87777778,1.82361111 8.64027778,1.3875 C8.40138889,0.95 8.05,0.598611111 7.6125,0.359722222 C7.17638889,0.122222222 6.66666667,0 6.11111111,0 L5.88888889,0 C5.33333333,0 4.82361111,0.122222222 4.3875,0.359722222 C3.95,0.598611111 3.59861111,0.95 3.35972222,1.3875 C3.12222222,1.82361111 3,2.33333333 3,2.88888889 C3,2.95 3.05,3 3.11111111,3 Z" id="路径"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.6 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="11px" height="11px" viewBox="0 0 11 11" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
|
||||||
|
<title>辐射</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="质量分析" transform="translate(-653.000000, -225.000000)" fill="#434D6C" fill-rule="nonzero">
|
||||||
|
<g id="编组-5" transform="translate(420.000000, 215.000000)">
|
||||||
|
<g id="辐射" transform="translate(233.000000, 10.000000)">
|
||||||
|
<path d="M11,5.5 C11,7.01863839 10.4637746,8.31629464 9.39009392,9.38928571 C8.31641324,10.4622768 7.01889535,11 5.50122987,11 C3.9835644,11 2.68604651,10.4622768 1.61236583,9.38928571 C0.536225403,8.31629464 0,7.01863839 0,5.5 C0,3.98136161 0.536225403,2.68370536 1.60990608,1.61071429 C2.68481664,0.537723214 3.98110465,0 5.49877013,0 C7.0164356,0 8.31395349,0.537723214 9.38763417,1.61071429 C10.4637746,2.68370536 11,3.98136161 11,5.5 Z M4.74608676,4.20234375 L3.37723614,1.82924107 C2.73647138,2.19631696 2.22730322,2.6984375 1.84973166,3.33805804 C1.47216011,3.97767857 1.28398927,4.68359375 1.28398927,5.45948661 L4.0130814,5.45948661 C4.0130814,4.88370536 4.25782648,4.46506696 4.74608676,4.20234375 L4.74608676,4.20234375 Z M7.57110912,9.15111607 L6.21701699,6.77064732 C6.09033989,6.84799107 5.96612254,6.90200893 5.84559481,6.93024554 C5.72506708,6.95848214 5.58978086,6.97444196 5.44342576,6.97444196 C5.19007156,6.97444196 4.95762522,6.90691964 4.74731664,6.771875 L3.35140877,9.14866071 C4.00201252,9.51573661 4.70919052,9.69866071 5.47663238,9.69866071 C6.23300537,9.69866071 6.93034436,9.51573661 7.57110912,9.15111607 L7.57110912,9.15111607 Z M6.29449911,5.50982143 C6.29449911,5.28024554 6.21701699,5.0875 6.0608229,4.93158482 C5.90585868,4.77566964 5.71399821,4.69709821 5.48647138,4.69709821 C5.26878354,4.69709821 5.07815295,4.77566964 4.91211986,4.93158482 C4.74731664,5.0875 4.66368515,5.28147321 4.66368515,5.50982143 C4.66368515,5.73816964 4.74116726,5.93214286 4.89736136,6.08805804 C5.05232558,6.24397321 5.24910555,6.32254464 5.48647138,6.32254464 C5.70415921,6.32254464 5.89233005,6.24274554 6.05221377,6.08069196 C6.21455725,5.91986607 6.29449911,5.72834821 6.29449911,5.50982143 L6.29449911,5.50982143 Z M9.71601073,5.45948661 C9.71601073,4.71551339 9.52906977,4.021875 9.15641771,3.37734375 C8.78499553,2.73404018 8.26106887,2.21841518 7.58832737,1.82924107 L6.23300537,4.18638393 C6.70896691,4.49084821 6.94633274,4.91439732 6.94633274,5.45948661 L9.71601073,5.45948661 Z" id="形状"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="18px" height="16px" viewBox="0 0 18 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
|
||||||
|
<title>质量分析</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="质量分析" transform="translate(-1174.000000, -153.000000)" fill="#666666" fill-rule="nonzero">
|
||||||
|
<g transform="translate(1174.000000, 153.000000)" id="路径">
|
||||||
|
<path d="M5.49732895,6.59297368 L4.52690789,8.21097368 C4.51069737,8.20928947 4.49132895,8.20928947 4.47522368,8.20928947 C4.38153947,8.20928947 4.29269737,8.22392105 4.20880263,8.24971053 L3.54185526,7.58276316 C3.56862283,7.49648789 3.58224922,7.4066744 3.58227632,7.31634211 C3.58227632,6.82381579 3.18175,6.42339474 2.68922368,6.42339474 C2.19669737,6.42339474 1.79638158,6.82392105 1.79638158,7.31634211 C1.79638158,7.48760526 1.84480263,7.64581579 1.92722368,7.7815 L0.955118421,9.39939474 C0.938907895,9.39781579 0.919539474,9.39781579 0.903434211,9.39781579 C0.410907895,9.39781579 0.0104868421,9.79823684 0.0104868421,10.2907632 C0.0104868421,10.7832895 0.411013158,11.1837105 0.903434211,11.1837105 C1.39585526,11.1837105 1.79638158,10.7831842 1.79638158,10.2907632 C1.79637494,10.1266758 1.75113933,9.96576525 1.66564474,9.82571053 L2.63764474,8.20592105 C2.74513486,8.21210792 2.85286526,8.19902484 2.95575,8.16728947 L3.62269737,8.83423684 C3.59592303,8.92047445 3.58229637,9.01025429 3.58227632,9.10055263 C3.58227632,9.59318421 3.98280263,9.9935 4.47522368,9.9935 C4.96764474,9.9935 5.36659211,9.59307895 5.36659211,9.10055263 C5.36659211,8.92939474 5.31817105,8.77118421 5.23585526,8.63560526 C5.23585526,8.63560526 6.24332895,7.01918421 6.25964474,7.01918421 L5.49732895,6.59297368 L5.49732895,6.59297368 Z"></path>
|
||||||
|
<path d="M5.54522368,8.17255263 L6.51732895,6.55276316 C6.62478421,6.55894194 6.73247863,6.5458589 6.83532895,6.51413158 L9.54227632,9.22107895 C9.51556014,9.30736601 9.50193494,9.39717168 9.50185526,9.4875 C9.50185526,9.98002632 9.90238158,10.3804474 10.3948026,10.3804474 C10.8874342,10.3804474 11.2862763,9.97992105 11.2862763,9.4875 C11.286347,9.32338758 11.2410666,9.16244729 11.1554342,9.02244737 L12.1275395,7.40434211 C12.1436447,7.40602632 12.1630132,7.40602632 12.1792237,7.40602632 C12.67175,7.40602632 13.0721711,7.0055 13.0721711,6.51307895 C13.0721711,6.02065789 12.6716447,5.62171053 12.1792237,5.62171053 C11.6866974,5.62171053 11.2862763,6.02223684 11.2862763,6.51465789 C11.2862763,6.68581579 11.3346974,6.84413158 11.4170132,6.97971053 L10.4464868,8.59781579 C10.4303816,8.59613158 10.4109079,8.59613158 10.3948026,8.59613158 C10.3011184,8.59613158 10.2123816,8.61065789 10.1284868,8.63644737 L7.42164474,5.92960526 C7.44832524,5.84331276 7.46191494,5.7535072 7.46196053,5.66318421 C7.46196053,5.17065789 7.06143421,4.77023684 6.56901316,4.77023684 C6.07659211,4.77023684 5.67606579,5.17076316 5.67606579,5.66318421 C5.67608478,5.82731735 5.72135774,5.98826764 5.80690789,6.12834211 C5.80690789,6.12834211 4.79922368,7.74455263 4.78301316,7.74455263 L5.54522368,8.17255263 L5.54522368,8.17255263 Z"></path>
|
||||||
|
<path d="M14.1078553,11.9339211 L16.9774342,14.8130789 C17.2421711,15.0639211 17.2421711,15.4901316 16.9865921,15.7457105 C16.7312237,16.0110789 16.3051184,16.0202368 16.0490132,15.7549737 L13.1604868,12.8711842 C12.6018553,13.3352895 11.9768026,13.7190789 11.2948026,13.9982368 C10.4114359,14.3682316 9.4631566,14.5583599 8.50543421,14.5575 C6.37901316,14.5575 4.35227632,13.6146579 2.96932895,11.9807632 C2.27311842,11.1666579 3.32943421,10.4042368 4.12490789,11.2803421 C5.25227632,12.5163421 6.83406579,13.2169737 8.50543421,13.2169737 C9.31522368,13.2169737 10.0823816,13.0561316 10.7782763,12.7672895 C11.4973368,12.4722803 12.1508287,12.03774 12.7010132,11.4887632 L12.7106974,11.4790789 C13.2553289,10.9297105 13.7005921,10.2766579 14.0035395,9.54707895 C14.2876447,8.86044737 14.4489079,8.08865789 14.4489079,7.27865789 C14.4486837,6.51090865 14.3005825,5.75038895 14.0126974,5.03865789 L14.0034342,5.01023684 C13.7109514,4.30133595 13.2830765,3.65625198 12.74375,3.11107895 L12.7105921,3.07823684 C12.1563816,2.53360526 11.5028026,2.08865789 10.7782763,1.79444737 C10.0873289,1.49644737 9.31543421,1.34044737 8.50543421,1.34044737 C6.08575,1.34044737 4.00217105,2.81771053 3.08301316,4.88686842 C2.96932895,5.13339474 2.74206579,5.28013158 2.47185526,5.28013158 L2.46753947,5.28013158 C2.23069737,5.28013158 2.03659211,5.16623684 1.90848684,4.97728947 C1.78080263,4.78276316 1.76638158,4.5555 1.86132895,4.33739474 C3.00732895,1.76644737 5.62153947,0.00465789474 8.50532895,0.00465789474 C9.48532895,0.00465789474 10.4281711,0.203605263 11.2948026,0.563289474 C12.1851184,0.928236842 12.9898553,1.47297368 13.6529079,2.13560526 L13.6903816,2.16918421 C14.3442763,2.83655263 14.8652237,3.62286842 15.22975,4.49444737 L15.2438553,4.53192105 C15.5942763,5.38476316 15.7839605,6.30286842 15.7839605,7.27855263 C15.7844779,8.2311106 15.5961086,9.17431671 15.22975,10.0536053 C14.951938,10.7329631 14.5737631,11.366791 14.1078553,11.9339211 L14.1078553,11.9339211 Z"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="10px" height="12px" viewBox="0 0 10 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
|
||||||
|
<title>安全</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="质量分析" transform="translate(-522.000000, -224.000000)" fill="#434D6C" fill-rule="nonzero">
|
||||||
|
<g id="编组-5" transform="translate(420.000000, 215.000000)">
|
||||||
|
<g id="安全" transform="translate(102.000000, 9.000000)">
|
||||||
|
<path d="M10,1.01217391 C10,1.01217391 10,7.12747826 10,7.12747826 C10,7.49426087 9.9165,7.85895653 9.75000001,8.22156521 C9.583,8.58521739 9.36500001,8.93634783 9.095,9.27756521 C8.825,9.61826087 8.5165,9.94121739 8.17,10.2453913 C7.823,10.550087 7.47150001,10.8213913 7.11500001,11.0593043 C6.758,11.2977391 6.41150001,11.496 6.075,11.6535652 C5.7385,11.8111304 5.4435,11.9191304 5.19,11.978087 C5.19,11.978087 5.06999999,12 5.06999999,12 C5.06999999,12 4.96,11.978087 4.96,11.978087 C4.70000001,11.9191304 4.3985,11.8111304 4.055,11.6535652 C3.7115,11.496 3.355,11.2977391 2.985,11.0593043 C2.61499999,10.8213913 2.252,10.550087 1.895,10.2453913 C1.5385,9.94121739 1.22,9.61826087 0.939999994,9.27756521 C0.659999993,8.93634783 0.433500002,8.58521739 0.260499999,8.22156521 C0.0865000015,7.85895653 0,7.49426087 0,7.12747826 C0,7.12747826 0,1.01217391 0,1.01217391 C0,1.01217391 0.409999999,0.945913043 0.409999999,0.945913043 C0.409999999,0.945913043 5.01,0 5.01,0 C5.01,0 9.70000001,0.945913043 9.70000001,0.945913043 C9.70000001,0.945913043 10,1.01217391 10,1.01217391 C10,1.01217391 10,1.01217391 10,1.01217391 Z M5.0115,0.885391301 C5.0115,0.885391301 4.956,0.873391301 4.956,0.873391301 C4.956,0.873391301 1.008,1.61165217 1.008,1.61165217 C1.008,1.61165217 1.008,5.46991304 1.008,5.46991304 C1.008,5.46991304 5.0115,5.46991304 5.0115,5.46991304 C5.0115,5.46991304 5.0115,0.885391301 5.0115,0.885391301 C5.0115,0.885391301 5.0115,0.885391301 5.0115,0.885391301 Z M8.992,5.46991304 C8.992,5.46991304 5.0115,5.46991304 5.0115,5.46991304 C5.0115,5.46991304 5.0115,10.9617391 5.0115,10.9617391 C5.2675,10.8970435 5.546,10.7984348 5.847,10.6653913 C6.1475,10.5323478 6.4445,10.3753043 6.7375,10.1937391 C7.031,10.0121739 7.313,9.81078261 7.58450001,9.58904347 C7.856,9.36730434 8.0955,9.12886957 8.30500001,8.87478261 C8.51400001,8.62121739 8.68050001,8.35721739 8.80500001,8.08278261 C8.93000001,7.80886957 8.992,7.53026087 8.992,7.248 C8.992,7.248 8.992,5.46991304 8.992,5.46991304 C8.992,5.46991304 8.992,5.46991304 8.992,5.46991304 Z" id="形状"></path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 52 KiB |
|
@ -22,11 +22,10 @@ const ProjectIndex = Loadable({
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 项目详情放在用户和组织下作为二级菜单存在
|
const ProjectHome = Loadable({
|
||||||
// const ProjectDetail = Loadable({
|
loader: () => import("./Main/projecthome/Index"),
|
||||||
// loader: () => import("./Main/Detail"),
|
loading: Loading,
|
||||||
// loading: Loading,
|
});
|
||||||
// });
|
|
||||||
|
|
||||||
class Index extends Component {
|
class Index extends Component {
|
||||||
|
|
||||||
|
@ -60,19 +59,12 @@ class Index extends Component {
|
||||||
<ProjectNew {...this.props} {...props} />
|
<ProjectNew {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
{/* <Route
|
|
||||||
path="/:owner/:projectsId"
|
|
||||||
render={(props) => (
|
|
||||||
<ProjectDetail {...this.props} {...props} />
|
|
||||||
)}
|
|
||||||
></Route> */}
|
|
||||||
<Route
|
<Route
|
||||||
path="/explore"
|
path="/explore"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
<ProjectIndex {...this.props} {...props} />
|
<ProjectIndex {...this.props} {...props} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
|
|
||||||
<Route
|
<Route
|
||||||
path="/"
|
path="/"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
@ -90,10 +82,3 @@ export default withRouter(
|
||||||
parentSelector: ".newMain",
|
parentSelector: ".newMain",
|
||||||
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
||||||
);
|
);
|
||||||
|
|
||||||
// export default withRouter(
|
|
||||||
// ImageLayerOfCommentHOC({
|
|
||||||
// imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
|
|
||||||
// parentSelector: ".newMain",
|
|
||||||
// })(Index)
|
|
||||||
// );
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React , { useEffect , useState } from 'react';
|
import React , { useEffect , useState } from 'react';
|
||||||
import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ } from '../Component/layout';
|
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 , Typography } from 'antd';
|
||||||
import { getImageUrl } from "educoder";
|
import { getImageUrl , turnbar , returnbar } from "educoder";
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { truncateCommitId } from "../common/util";
|
import { truncateCommitId } from "../common/util";
|
||||||
import CloneAddress from '../Branch/CloneAddress';
|
import CloneAddress from '../Branch/CloneAddress';
|
||||||
|
@ -26,20 +26,6 @@ import RenderHtml from '../../components/render-html';
|
||||||
/**
|
/**
|
||||||
* projectDetail.type:0是托管项目,1是镜像项目,2是同步镜像项目(为2时不支持在线创建、在线上传、在线修改、在线删除、创建合并请求等功能)
|
* 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){
|
function CoderDepot(props){
|
||||||
const [ projectDetail , setProjectDetail ]= useState(undefined);
|
const [ projectDetail , setProjectDetail ]= useState(undefined);
|
||||||
const [ inviteCode , setInviteCode ] = useState(undefined);
|
const [ inviteCode , setInviteCode ] = useState(undefined);
|
||||||
|
@ -89,6 +75,8 @@ function CoderDepot(props){
|
||||||
}
|
}
|
||||||
if(i && i.length === 0){
|
if(i && i.length === 0){
|
||||||
setIssuesFlag(false);
|
setIssuesFlag(false);
|
||||||
|
console.log(bannerList);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},[bannerList])
|
},[bannerList])
|
||||||
|
@ -107,7 +95,7 @@ function CoderDepot(props){
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(treeValue){
|
if(treeValue){
|
||||||
setTreeValuePath(treeValue.split('/'));
|
setTreeValuePath(returnbar(treeValue).split('/'));
|
||||||
}else{
|
}else{
|
||||||
setTreeValuePath(undefined);
|
setTreeValuePath(undefined);
|
||||||
}
|
}
|
||||||
|
@ -122,13 +110,10 @@ function CoderDepot(props){
|
||||||
setTreeValue(url);
|
setTreeValue(url);
|
||||||
getFileInfo(url,branchName);
|
getFileInfo(url,branchName);
|
||||||
setType("file");
|
setType("file");
|
||||||
// getReadmeInfo(url,branchName);
|
|
||||||
// setReadme(undefined);
|
|
||||||
}else{
|
}else{
|
||||||
setTreeValue(undefined);
|
setTreeValue(undefined);
|
||||||
getDirInfo(branchName || defaultBranch);
|
getDirInfo(branchName || defaultBranch);
|
||||||
setType("dir");
|
setType("dir");
|
||||||
// getReadmeInfo('', branchName || defaultBranch);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},[projectsId,owner,pathname,defaultBranch])
|
},[projectsId,owner,pathname,defaultBranch])
|
||||||
|
@ -138,7 +123,7 @@ function CoderDepot(props){
|
||||||
if(result && result.data){
|
if(result && result.data){
|
||||||
const release = {
|
const release = {
|
||||||
"list":result.data.releases,
|
"list":result.data.releases,
|
||||||
"total_count":result.data.releases.length
|
"total_count":result.data.releases && result.data.releases.length
|
||||||
}
|
}
|
||||||
setReleaseVersions(release);
|
setReleaseVersions(release);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +154,7 @@ function CoderDepot(props){
|
||||||
const url = `/${owner}/${projectsId}/entries.json`;
|
const url = `/${owner}/${projectsId}/entries.json`;
|
||||||
|
|
||||||
axios.get(url, {
|
axios.get(url, {
|
||||||
params: { ref: branch }
|
params: { ref:branch}
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
setCommitCount(result.data.commits_count);
|
setCommitCount(result.data.commits_count);
|
||||||
|
@ -197,7 +182,7 @@ function CoderDepot(props){
|
||||||
let ele = document.getElementById("ptxt");
|
let ele = document.getElementById("ptxt");
|
||||||
if(ele){
|
if(ele){
|
||||||
let h = ele.offsetHeight;
|
let h = ele.offsetHeight;
|
||||||
if( h > 35 ) setHideBtn(true);
|
if( h > 36 ) setHideBtn(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},[projectDetail,lastCommit])
|
},[projectDetail,lastCommit])
|
||||||
|
@ -207,7 +192,7 @@ function CoderDepot(props){
|
||||||
const url = `/${owner}/${projectsId}/sub_entries.json`;
|
const url = `/${owner}/${projectsId}/sub_entries.json`;
|
||||||
axios.get(url, {
|
axios.get(url, {
|
||||||
params:{
|
params:{
|
||||||
filepath:path,
|
filepath:returnbar(path),
|
||||||
ref:ref || branchName,
|
ref:ref || branchName,
|
||||||
type
|
type
|
||||||
}
|
}
|
||||||
|
@ -239,9 +224,9 @@ function CoderDepot(props){
|
||||||
|
|
||||||
// 切换分支或者标签
|
// 切换分支或者标签
|
||||||
function changeBranch(value){
|
function changeBranch(value){
|
||||||
let checkvalue = turnbar(value);
|
let checkvalue = value;
|
||||||
let url = `/${owner}/${projectsId}${value && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`;
|
let u = `/${owner}/${projectsId}${checkvalue && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`;
|
||||||
props.history.push(url);
|
props.history.push(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 文件相关的下拉项
|
// 文件相关的下拉项
|
||||||
|
@ -279,6 +264,7 @@ function CoderDepot(props){
|
||||||
// 子目录路径返回链接
|
// 子目录路径返回链接
|
||||||
function returnUlr(url){
|
function returnUlr(url){
|
||||||
let enBranch = turnbar(branchName);
|
let enBranch = turnbar(branchName);
|
||||||
|
setType('dir');
|
||||||
props.history.push(`/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`);
|
props.history.push(`/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`);
|
||||||
}
|
}
|
||||||
// 点击跳转到子目录
|
// 点击跳转到子目录
|
||||||
|
@ -286,8 +272,9 @@ function CoderDepot(props){
|
||||||
if(type!=="submodule"){
|
if(type!=="submodule"){
|
||||||
let enBranch = branchName || defaultBranch;
|
let enBranch = branchName || defaultBranch;
|
||||||
let checkvalue = turnbar(enBranch);
|
let checkvalue = turnbar(enBranch);
|
||||||
|
let enPath = turnbar(path);
|
||||||
setType(type);
|
setType(type);
|
||||||
props.history.push(`/${owner}/${projectsId}${`/tree/${checkvalue}`}${path?`/${path}`:""}`);
|
props.history.push(`/${owner}/${projectsId}${`/tree/${checkvalue}`}${enPath?`/${enPath}`:""}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,16 +306,16 @@ function CoderDepot(props){
|
||||||
const downloadMenu = (
|
const downloadMenu = (
|
||||||
<CloneAddress
|
<CloneAddress
|
||||||
http_url={projectDetail && projectDetail.clone_url}
|
http_url={projectDetail && projectDetail.clone_url}
|
||||||
ssh_url = {projectDetail && projectDetail.ssh_url}
|
ssh_url = {(projectDetail && props && props.platform) && projectDetail.ssh_url}
|
||||||
zip_url={zip_url}
|
zip_url={(props && props.platform) && zip_url}
|
||||||
tar_url={tar_url}
|
tar_url={(props && props.platform) && tar_url}
|
||||||
showNotification={props.showNotification}/>
|
showNotification={props.showNotification}/>
|
||||||
)
|
)
|
||||||
// 确认修改简介、website、实践课程链接
|
// 确认修改简介、website、实践课程链接
|
||||||
function okUpdate(d,w,l){
|
function okUpdate(d,w,l){
|
||||||
const url = `/${owner}/${projectsId}.json`;
|
const url = `/${owner}/${projectsId}.json`;
|
||||||
axios.put(url,{
|
axios.put(url,{
|
||||||
description:d,website:w,lesson_url:l
|
description:d,website:w || "",lesson_url:l||""
|
||||||
}).then(result=>{
|
}).then(result=>{
|
||||||
if(result && result.data && result.data.id){
|
if(result && result.data && result.data.id){
|
||||||
setDesc(result.data.description);
|
setDesc(result.data.description);
|
||||||
|
@ -337,12 +324,21 @@ function CoderDepot(props){
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createIssue(){
|
||||||
|
if(baseOper){
|
||||||
|
props.history.push(`/${owner}/${projectsId}/issues/new`);
|
||||||
|
}else{
|
||||||
|
props.showLoginDialog(`/${owner}/${projectsId}/issues/new`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let n = fileInfo && fileInfo.name;
|
let n = fileInfo && fileInfo.name;
|
||||||
const mdFlag = n && n.substring(n.length-3,n.length) === ".md";
|
const mdFlag = n && n.substring(n.length-3,n.length) === ".md";
|
||||||
|
|
||||||
const { current_user } = props;
|
const { current_user } = props;
|
||||||
const baseOper = current_user && current_user.login && issuesFlag;
|
const baseOper = current_user && current_user.login && issuesFlag;
|
||||||
const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter" && projectDetail.type !== 2 && pullsFlag;
|
const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter" && projectDetail.type !== 2 && pullsFlag && props.platform;
|
||||||
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 && projectDetail.permission !=="Reporter") || (current_user && current_user.admin));
|
||||||
|
|
||||||
return(
|
return(
|
||||||
|
@ -392,7 +388,7 @@ function CoderDepot(props){
|
||||||
<span>分支:<span className="color-grey-6">{branchName || defaultBranch}</span></span>
|
<span>分支:<span className="color-grey-6">{branchName || defaultBranch}</span></span>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
treeValuePath && treeValuePath.length > 0 ?
|
treeValuePath && treeValuePath.length > 0 ?
|
||||||
<Path
|
<Path
|
||||||
identifier={projectDetail && projectDetail.identifier}
|
identifier={projectDetail && projectDetail.identifier}
|
||||||
|
@ -404,36 +400,50 @@ function CoderDepot(props){
|
||||||
:
|
:
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<AlignCenter className="mr20">
|
<AlignCenter className="mr20">
|
||||||
<Link to={`/${owner}/${projectsId}/branches`} className="iconBtn">
|
{
|
||||||
<i className="iconfont icon-master_icon font-16"></i>
|
props.platform ?
|
||||||
<span>分支</span>
|
<Link to={`/${owner}/${projectsId}/branches`} className="iconBtn">
|
||||||
<span>{projectDetail && projectDetail.branches_count}</span>
|
<i className="iconfont icon-master_icon font-16"></i>
|
||||||
</Link>
|
<span>分支</span>
|
||||||
|
<span>{projectDetail && projectDetail.branches_count}</span>
|
||||||
|
</Link>
|
||||||
|
:
|
||||||
|
<span>
|
||||||
|
<i className="iconfont icon-master_icon font-16 color-grey-6"></i>
|
||||||
|
<span className="ml3 color-grey-6">分支</span>
|
||||||
|
<span className="ml3">{projectDetail && projectDetail.branches_count}</span>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
</AlignCenter>
|
</AlignCenter>
|
||||||
<AlignCenter className="mr20">
|
<AlignCenter className="mr20">
|
||||||
|
{
|
||||||
|
props.platform ?
|
||||||
<Link to={`/${owner}/${projectsId}/tags`} className="iconBtn">
|
<Link to={`/${owner}/${projectsId}/tags`} className="iconBtn">
|
||||||
<i className="iconfont icon-biaoqianicon font-16"></i>
|
<i className="iconfont icon-biaoqianicon font-16"></i>
|
||||||
<span>标签</span>
|
<span>标签</span>
|
||||||
<span>{projectDetail && projectDetail.tags_count}</span>
|
<span>{projectDetail && projectDetail.tags_count}</span>
|
||||||
</Link>
|
</Link>:
|
||||||
|
<span>
|
||||||
|
<i className="iconfont icon-biaoqianicon font-16 color-grey-6"></i>
|
||||||
|
<span className="ml3 color-grey-6">标签</span>
|
||||||
|
<span className="ml3">{projectDetail && projectDetail.tags_count}</span>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
</AlignCenter>
|
</AlignCenter>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
}
|
}
|
||||||
</AlignCenter>
|
</AlignCenter>
|
||||||
<AlignCenter className="depotBtn">
|
<AlignCenter className="depotBtn">
|
||||||
{
|
<div className="addOptionBtn">
|
||||||
(baseOperate || baseOper) &&
|
{
|
||||||
<div className="addOptionBtn">
|
baseOperate &&
|
||||||
{
|
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/compare/${turnbar(branchName || defaultBranch)}...${turnbar(branchName || defaultBranch)}`)} >+ 合并请求</CheckProfile>
|
||||||
baseOperate &&
|
}
|
||||||
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/compare/master...${branchName || defaultBranch}`)} >+ 合并请求</CheckProfile>
|
{
|
||||||
}
|
issuesFlag &&
|
||||||
{
|
<a onClick={createIssue}>+ 疑修</a>
|
||||||
baseOper &&
|
}
|
||||||
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/issues/new`)} >+ 易修</CheckProfile>
|
</div>
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
{ fileOperate &&
|
{ fileOperate &&
|
||||||
<Dropdown
|
<Dropdown
|
||||||
overlay={fileMenu()}
|
overlay={fileMenu()}
|
||||||
|
@ -454,15 +464,21 @@ function CoderDepot(props){
|
||||||
(dirInfo && dirInfo.length>0) || fileInfo ?
|
(dirInfo && dirInfo.length>0) || fileInfo ?
|
||||||
<div className="listtable">
|
<div className="listtable">
|
||||||
{
|
{
|
||||||
lastCommit &&
|
((lastCommit && lastCommit.message) || lastCommitAuthor) &&
|
||||||
<div className="listtablehead">
|
<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"}>
|
lastCommitAuthor &&
|
||||||
<pre id="ptxt"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(lastCommit.sha)}`}><RenderHtml value={lastCommit.message}/></Link></pre>
|
<User url={getImageUrl(`/${lastCommitAuthor.image_url}`)} name={lastCommitAuthor.name} id={lastCommitAuthor.id} login={lastCommitAuthor.login}/>
|
||||||
</div>
|
}
|
||||||
|
{
|
||||||
|
lastCommit && lastCommit.message &&
|
||||||
|
<div className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}>
|
||||||
|
<pre id="ptxt"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(lastCommit.sha)}`}><RenderHtml value={lastCommit && lastCommit.message}/></Link></pre>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
{ hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> }
|
{ hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> }
|
||||||
|
|
||||||
<span className="ml20 color-grey-6 font-12 mt3">{lastCommit.time_from_now}</span>
|
<span className="ml20 color-grey-6 font-12 mt3">{lastCommit && lastCommit.time_from_now}</span>
|
||||||
{
|
{
|
||||||
commitCount ?
|
commitCount ?
|
||||||
<Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-3"style={{height:"28px",lineHeight:"28px"}}>
|
<Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-3"style={{height:"28px",lineHeight:"28px"}}>
|
||||||
|
@ -481,6 +497,7 @@ function CoderDepot(props){
|
||||||
item={item}
|
item={item}
|
||||||
projectsId={projectsId}
|
projectsId={projectsId}
|
||||||
goToSubRoot={goToSubRoot}
|
goToSubRoot={goToSubRoot}
|
||||||
|
platform={props.platform}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -505,7 +522,7 @@ function CoderDepot(props){
|
||||||
(dirInfo && dirInfo.length === 0) && !fileInfo ? <Nodata _html="暂未发现文件"/> :""
|
(dirInfo && dirInfo.length === 0) && !fileInfo ? <Nodata _html="暂未发现文件"/> :""
|
||||||
}
|
}
|
||||||
{/* readme文件显示(显示文件详情时不显示readme文件) */}
|
{/* readme文件显示(显示文件详情时不显示readme文件) */}
|
||||||
{ (readme && readme.content) ? <ReadMe ChangeFile={ChangeFile} readme={readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" }
|
{ (readme && readme.replace_content) ? <ReadMe ChangeFile={ChangeFile} readme={readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" }
|
||||||
</div>
|
</div>
|
||||||
</LongWidth>
|
</LongWidth>
|
||||||
{
|
{
|
||||||
|
@ -516,10 +533,10 @@ function CoderDepot(props){
|
||||||
<FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于
|
<FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于
|
||||||
{
|
{
|
||||||
projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") &&
|
projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") &&
|
||||||
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15"></i>
|
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15 pointer"></i>
|
||||||
}
|
}
|
||||||
</FlexAJ>
|
</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-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}} title={desc}>{desc}</p>}
|
||||||
{
|
{
|
||||||
website &&
|
website &&
|
||||||
<div className="color-grey-6 df pinfos mb5">
|
<div className="color-grey-6 df pinfos mb5">
|
||||||
|
@ -539,7 +556,7 @@ function CoderDepot(props){
|
||||||
projectDetail && projectDetail.license_name &&
|
projectDetail && projectDetail.license_name &&
|
||||||
<div className="pinfos">
|
<div className="pinfos">
|
||||||
<i className="iconfont icon-xieyiicon font-16 mr10"></i>
|
<i className="iconfont icon-xieyiicon font-16 mr10"></i>
|
||||||
<Link to={`/${owner}/${projectsId}/tree/${branchName || defaultBranch}/LICENSE`} className="color-grey-6">{projectDetail.license_name}</Link>
|
<Link to={`/${owner}/${projectsId}/tree/${turnbar(branchName || defaultBranch)}/LICENSE`} className="color-grey-6">{projectDetail.license_name}</Link>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -560,7 +577,7 @@ function CoderDepot(props){
|
||||||
}
|
}
|
||||||
{/* 发布 */}
|
{/* 发布 */}
|
||||||
{
|
{
|
||||||
releaseVersions &&
|
releaseVersions && props.platform &&
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Releases
|
<Releases
|
||||||
|
@ -573,17 +590,9 @@ function CoderDepot(props){
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
}
|
}
|
||||||
{/* 贡献者 */}
|
{/* 贡献者 */}
|
||||||
{
|
<Contributors owner={owner} projectsId={projectsId} />
|
||||||
projectDetail && projectDetail.contributors && projectDetail.contributors.total_count >0 &&
|
|
||||||
<Contributors contributors={projectDetail.contributors} owner={owner} projectsId={projectsId} />
|
|
||||||
}
|
|
||||||
{/* 语言 */}
|
{/* 语言 */}
|
||||||
{ projectDetail && projectDetail.languages &&
|
<LanguagePower owner={owner} projectsId={projectsId}/>
|
||||||
<React.Fragment>
|
|
||||||
<Divider />
|
|
||||||
<LanguagePower languages={projectDetail.languages}/>
|
|
||||||
</React.Fragment>
|
|
||||||
}
|
|
||||||
</Gap>
|
</Gap>
|
||||||
</ShortWidth>
|
</ShortWidth>
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,17 +8,27 @@ const typeIco = {
|
||||||
"dir":"icon-wenjianjia4 font-15 color-blue_4C"
|
"dir":"icon-wenjianjia4 font-15 color-blue_4C"
|
||||||
}
|
}
|
||||||
|
|
||||||
function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){
|
function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId , platform }){
|
||||||
|
// 只显示第一个换行符前的内容
|
||||||
|
function getMessage(value){
|
||||||
|
let str = value.indexOf('\n') > 0 && value.split('\n');
|
||||||
|
return str[0];
|
||||||
|
}
|
||||||
return(
|
return(
|
||||||
<li>
|
<li>
|
||||||
<span>
|
<span>
|
||||||
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}>
|
{
|
||||||
<i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}
|
(!platform && item.image_type) ?
|
||||||
</a>
|
<span><i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}</span>
|
||||||
|
:
|
||||||
|
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}>
|
||||||
|
<i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}
|
||||||
|
</a>
|
||||||
|
}
|
||||||
</span>
|
</span>
|
||||||
<span title="init project">
|
<span title="init project">
|
||||||
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.commit && item.commit.sha}`)}`} title={item.commit && item.commit.message}>
|
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.commit && item.commit.sha}`)}`} title={item.commit && item.commit.message}>
|
||||||
{item.commit && item.commit.message}
|
{getMessage(item.commit && item.commit.message)}
|
||||||
</Link>
|
</Link>
|
||||||
</span>
|
</span>
|
||||||
<span title={item.commit && item.commit.created_at}>{item.commit && item.commit.time_from_now}</span>
|
<span title={item.commit && item.commit.created_at}>{item.commit && item.commit.time_from_now}</span>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { result } from 'lodash';
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { returnbar } from 'educoder';
|
||||||
|
|
||||||
|
|
||||||
function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , identifier}){
|
function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , identifier}){
|
||||||
|
@ -17,9 +17,9 @@ function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , i
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{
|
{
|
||||||
key === treeValuePath.length-1 ?
|
key === treeValuePath.length-1 ?
|
||||||
<span className="color-grey-6 subFileName" key={key}>{item}</span>
|
<span className="color-grey-6 subFileName" key={key}>{returnbar(item)}</span>
|
||||||
:
|
:
|
||||||
<a onClick={()=>returnUlr(`${getPathUrl(treeValuePath,key+1)}`)} className="color-blue subFileName">{item}</a>
|
<a onClick={()=>returnUlr(`${getPathUrl(treeValuePath,key+1)}`)} className="color-blue subFileName">{returnbar(item)}</a>
|
||||||
}
|
}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,8 +11,8 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
|
||||||
const [ content ,setContent ] = useState(undefined);
|
const [ content ,setContent ] = useState(undefined);
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
if(readme && readme.content){
|
if(readme && readme.replace_content){
|
||||||
setContent(readme.content);
|
setContent(readme.replace_content);
|
||||||
}else{
|
}else{
|
||||||
setContent(undefined);
|
setContent(undefined);
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<div className="commonBox readBox" id="readme">
|
<div className="commonBox readBox" id="readme">
|
||||||
<Anchor offsetTop={70} targetOffset={160}>
|
<Anchor offsetTop={58}>
|
||||||
<div className="commonBox-title boxTitle">
|
<div className="commonBox-title boxTitle">
|
||||||
<AlignCenter>
|
<AlignCenter>
|
||||||
<Dropdown overlay={menu()} trigger={['hover']} overlayClassName="menuslist">
|
<Dropdown overlay={menu()} trigger={['hover']} overlayClassName="menuslist">
|
||||||
|
|
|
@ -3,15 +3,10 @@ import { Link } from "react-router-dom";
|
||||||
import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd';
|
import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd';
|
||||||
import { truncateCommitId } from '../common/util';
|
import { truncateCommitId } from '../common/util';
|
||||||
import { getBranch } from '../GetData/getData';
|
import { getBranch } from '../GetData/getData';
|
||||||
|
import { turnbar } from "educoder";
|
||||||
import Nodata from '../Nodata';
|
import Nodata from '../Nodata';
|
||||||
import './list.scss';
|
import './list.scss';
|
||||||
|
|
||||||
function turnbar(str){
|
|
||||||
if(str && str.length>0 && str.indexOf("/")>-1){
|
|
||||||
return str.replaceAll('/','%2F');
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
export default ((props)=>{
|
export default ((props)=>{
|
||||||
const [ data , setData ] =useState(undefined);
|
const [ data , setData ] =useState(undefined);
|
||||||
const [ isSpin , setIsSpin ] =useState(true);
|
const [ isSpin , setIsSpin ] =useState(true);
|
||||||
|
@ -73,7 +68,6 @@ export default ((props)=>{
|
||||||
<Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
|
<Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
|
|
||||||
return(
|
return(
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<div className="main">
|
<div className="main">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React , { Component } from 'react';
|
import React , { Component } from 'react';
|
||||||
import { Spin , Pagination, Timeline } from 'antd';
|
import { Spin , Pagination, Timeline } from 'antd';
|
||||||
import { getImageUrl } from 'educoder';
|
import { getImageUrl , returnbar } from 'educoder';
|
||||||
import { truncateCommitId ,timeFormat } from '../common/util';
|
import { truncateCommitId ,timeFormat } from '../common/util';
|
||||||
import { AlignTop } from '../Component/layout';
|
import { AlignTop } from '../Component/layout';
|
||||||
import SelectBranch from '../Branch/Select';
|
import SelectBranch from '../Branch/Select';
|
||||||
|
@ -15,12 +15,6 @@ import CopyTool from '../Component/CopyTool';
|
||||||
|
|
||||||
import './tree/Index.scss'
|
import './tree/Index.scss'
|
||||||
|
|
||||||
function returnbar(str){
|
|
||||||
if(str && str.length>0 && str.indexOf("%2F")>-1){
|
|
||||||
return str.replaceAll('%2F','/');
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
//代码库--提交页面
|
//代码库--提交页面
|
||||||
class CoderRootCommit extends Component{
|
class CoderRootCommit extends Component{
|
||||||
|
@ -79,7 +73,7 @@ class CoderRootCommit extends Component{
|
||||||
isSpining:true,
|
isSpining:true,
|
||||||
page:realPage
|
page:realPage
|
||||||
})
|
})
|
||||||
this.getCommitList( branchName , realPage , limit );
|
this.getCommitList( returnbar(branchName) , realPage , limit );
|
||||||
}
|
}
|
||||||
|
|
||||||
getCommitList=(branch , page , limit)=>{
|
getCommitList=(branch , page , limit)=>{
|
||||||
|
@ -133,7 +127,7 @@ class CoderRootCommit extends Component{
|
||||||
|
|
||||||
render(){
|
render(){
|
||||||
const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state;
|
const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state;
|
||||||
const { projectDetail, commit_class , defaultBranch } = this.props;
|
const { projectDetail, commit_class , defaultBranch , platform } = this.props;
|
||||||
const { projectsId , owner , branchName } = this.props.match.params;
|
const { projectsId , owner , branchName } = this.props.match.params;
|
||||||
let branch = returnbar(branchName || defaultBranch);
|
let branch = returnbar(branchName || defaultBranch);
|
||||||
return(
|
return(
|
||||||
|
@ -159,7 +153,16 @@ class CoderRootCommit extends Component{
|
||||||
<div className="commitList-item f-wrap-between">
|
<div className="commitList-item f-wrap-between">
|
||||||
<div>
|
<div>
|
||||||
<AlignTop>
|
<AlignTop>
|
||||||
<div className="commitDesc"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd"><RenderHtml value={item.message}/></Link></div>
|
<div className="commitDesc">
|
||||||
|
{
|
||||||
|
platform ?
|
||||||
|
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd">
|
||||||
|
<RenderHtml value={item.message}/>
|
||||||
|
</Link>
|
||||||
|
:
|
||||||
|
<RenderHtml value={item.message}/>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</AlignTop>
|
</AlignTop>
|
||||||
<p className="f-wrap-alignCenter mt15 pb5">
|
<p className="f-wrap-alignCenter mt15 pb5">
|
||||||
<User
|
<User
|
||||||
|
@ -176,7 +179,12 @@ class CoderRootCommit extends Component{
|
||||||
<div>
|
<div>
|
||||||
<span className="treecopy-cont shadow">
|
<span className="treecopy-cont shadow">
|
||||||
<img src={Tree} alt="sha" width={"16px"}/>
|
<img src={Tree} alt="sha" width={"16px"}/>
|
||||||
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link>
|
{
|
||||||
|
platform ?
|
||||||
|
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link>
|
||||||
|
:
|
||||||
|
<span style={{color:"#466AFF",cursor:"default"}}>{truncateCommitId(`${item.sha}`)}</span>
|
||||||
|
}
|
||||||
<input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/>
|
<input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/>
|
||||||
</span>
|
</span>
|
||||||
<CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/>
|
<CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/>
|
||||||
|
|
|
@ -21,7 +21,7 @@ class CoderRootFileDetail extends Component {
|
||||||
value: undefined,
|
value: undefined,
|
||||||
language: undefined,
|
language: undefined,
|
||||||
languages: undefined,
|
languages: undefined,
|
||||||
description: props.detail.content,
|
description: props.detail.replace_content,
|
||||||
menuList:undefined
|
menuList:undefined
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -36,12 +36,12 @@ class CoderRootFileDetail extends Component {
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidUpdate=(prevProps)=>{
|
componentDidUpdate=(prevProps)=>{
|
||||||
const { content } = this.props && this.props.detail;
|
const { replace_content } = this.props && this.props.detail;
|
||||||
const prevcontent = prevProps.detail && prevProps.detail.content;
|
const prevcontent = prevProps.detail && prevProps.detail.replace_content;
|
||||||
if (content && prevcontent) {
|
if (replace_content && prevcontent) {
|
||||||
if (prevcontent !== content){
|
if (prevcontent !== replace_content){
|
||||||
this.setState({
|
this.setState({
|
||||||
description: content
|
description: replace_content
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ class CoderRootFileDetail extends Component {
|
||||||
const Option = Select.Option;
|
const Option = Select.Option;
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Anchor className="griditemAnchor" offsetTop={70}>
|
<Anchor className="griditemAnchor" offsetTop={58}>
|
||||||
<div className="griditemCate">
|
<div className="griditemCate">
|
||||||
{
|
{
|
||||||
md && readOnly &&
|
md && readOnly &&
|
||||||
|
@ -319,7 +319,7 @@ class CoderRootFileDetail extends Component {
|
||||||
{...this.state}
|
{...this.state}
|
||||||
language={language ? language : "javascript"}
|
language={language ? language : "javascript"}
|
||||||
filepath={`/${detail.path}`}
|
filepath={`/${detail.path}`}
|
||||||
content={description}
|
content={detail.content}
|
||||||
readOnly={readOnly}
|
readOnly={readOnly}
|
||||||
editorType="update"
|
editorType="update"
|
||||||
currentBranch={currentBranch}
|
currentBranch={currentBranch}
|
||||||
|
|