forked from Gitlink/forgeplus-react
Compare commits
107 Commits
master
...
pre_dev_mi
Author | SHA1 | Date |
---|---|---|
|
4d41f44100 | |
|
afa839e0b1 | |
|
83d59a2e64 | |
|
758f4267ed | |
|
38948a84cd | |
|
51d739f4a0 | |
|
706830928e | |
|
8dc08c3992 | |
|
6facc3e65f | |
|
2f538ff394 | |
![]() |
909663bc47 | |
|
9ea9da9672 | |
|
97bd7673e1 | |
![]() |
8162b8b908 | |
|
7a59d43eec | |
![]() |
008ba8d1de | |
|
98a9344b02 | |
|
b8342288dd | |
![]() |
7cf5e23cb9 | |
|
8594168d33 | |
![]() |
2d7c6cb82d | |
![]() |
c36925c136 | |
|
6cfe81aea3 | |
|
c32b333bc2 | |
|
c965da7dd5 | |
|
b44399968f | |
|
2591f28ccc | |
|
5530e8c723 | |
|
fa26dc9fa5 | |
|
4cf40f9dfc | |
|
2c034f5dff | |
|
d68d8318c1 | |
|
41ae6b1f8d | |
|
a6e2171fca | |
|
916cc293ac | |
|
5565eac601 | |
|
860b71c7c6 | |
|
f1c2841fe0 | |
|
c6d5078d42 | |
|
ebe2d625fa | |
|
b5e1a91af5 | |
|
4b8d72a6eb | |
|
f0e1858cd4 | |
|
a92468953a | |
|
fdab967b6a | |
|
7e8929f166 | |
|
0a39ed80da | |
|
5ed44f1d63 | |
|
64e639ebea | |
|
3fb9eb40f3 | |
|
efc2443bb8 | |
|
2c3d917bd4 | |
|
617f139f52 | |
|
de550d5f42 | |
|
f12230dc91 | |
|
1df2639cd5 | |
|
c746e9e634 | |
|
d8d464a332 | |
|
83e337b2e9 | |
|
5a6b7bd717 | |
|
c68a3dbd6f | |
|
350f9426ea | |
|
5bda100e32 | |
|
dde7fa730a | |
|
3f8f1b8083 | |
|
6eef4bd09e | |
|
0dcaea3db4 | |
|
033134fa83 | |
|
1bab0b01f7 | |
|
7b2f233cae | |
|
2ecdd73c7f | |
|
4e7a2fa3d7 | |
|
91662e2e3e | |
|
c2129c994a | |
|
e968ece34c | |
|
70d407963e | |
|
00ccba74a1 | |
|
0790abb6f9 | |
|
6c4c161a1b | |
|
65a2bd43cf | |
|
10f813a443 | |
|
e79ec30c81 | |
|
2a7fea3612 | |
|
cc46a3ac30 | |
|
cca5f98c9b | |
|
d4535005c8 | |
|
73d128e0c9 | |
|
f09457a0ac | |
|
78c218b12b | |
|
d9f87fdd18 | |
|
33c3395221 | |
|
74d26a40d3 | |
|
3f78ed249c | |
|
07e1525f09 | |
|
a9161b86a2 | |
|
e0e6cdcc79 | |
|
3b0c708d82 | |
|
0922df3875 | |
|
ad3fe09cfb | |
|
91f4327eb4 | |
|
f2f910b5e4 | |
|
85d924db70 | |
![]() |
f1614a4b62 | |
![]() |
2fa71241db | |
![]() |
13c6556574 | |
|
5601b71937 | |
![]() |
1a024f8011 |
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"educoder": ["./src/common/educoder.js"],
|
||||||
|
"forge":["./src/forge"],
|
||||||
|
"military":["./src/military"],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"build"
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,5 @@
|
||||||
/*头部导航条样式---2018-03-19--by-cs*/
|
/*头部导航条样式---2018-03-19--by-cs*/
|
||||||
.newHeader {
|
.newHeader {
|
||||||
background: #24292D !important;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 60px !important;
|
height: 60px !important;
|
||||||
min-width: 1200px;
|
min-width: 1200px;
|
||||||
|
|
|
@ -3971,7 +3971,9 @@ html>body #ajax-indicator {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: relative;
|
position: relative;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding:0px 20px;
|
margin-right: 40px;
|
||||||
|
}.head-nav ul#header-nav li:first-child{
|
||||||
|
margin-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.head-nav ul#header-nav li a {
|
.head-nav ul#header-nav li a {
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -5,6 +5,741 @@
|
||||||
"css_prefix_text": "icon-",
|
"css_prefix_text": "icon-",
|
||||||
"description": "",
|
"description": "",
|
||||||
"glyphs": [
|
"glyphs": [
|
||||||
|
{
|
||||||
|
"icon_id": "23791639",
|
||||||
|
"name": "项目公告",
|
||||||
|
"font_class": "xiangmugonggao",
|
||||||
|
"unicode": "e8c2",
|
||||||
|
"unicode_decimal": 59586
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23791640",
|
||||||
|
"name": "成果",
|
||||||
|
"font_class": "chengguo",
|
||||||
|
"unicode": "e8c3",
|
||||||
|
"unicode_decimal": 59587
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23791410",
|
||||||
|
"name": "成交公告",
|
||||||
|
"font_class": "chengjiaogonggao",
|
||||||
|
"unicode": "e8c0",
|
||||||
|
"unicode_decimal": 59584
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23791411",
|
||||||
|
"name": "技术资产",
|
||||||
|
"font_class": "jishuzichan",
|
||||||
|
"unicode": "e8c1",
|
||||||
|
"unicode_decimal": 59585
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23790928",
|
||||||
|
"name": "废标公告",
|
||||||
|
"font_class": "feibiaogonggao",
|
||||||
|
"unicode": "e8bc",
|
||||||
|
"unicode_decimal": 59580
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23790929",
|
||||||
|
"name": "中标公告",
|
||||||
|
"font_class": "zhongbiaogonggao",
|
||||||
|
"unicode": "e8bd",
|
||||||
|
"unicode_decimal": 59581
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23790930",
|
||||||
|
"name": "更正公告",
|
||||||
|
"font_class": "gengzhenggonggao",
|
||||||
|
"unicode": "e8be",
|
||||||
|
"unicode_decimal": 59582
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23790931",
|
||||||
|
"name": "招标公告",
|
||||||
|
"font_class": "zhaobiaogonggao",
|
||||||
|
"unicode": "e8bf",
|
||||||
|
"unicode_decimal": 59583
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23732532",
|
||||||
|
"name": "文件",
|
||||||
|
"font_class": "wenjian6",
|
||||||
|
"unicode": "e8ba",
|
||||||
|
"unicode_decimal": 59578
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23732533",
|
||||||
|
"name": "文件夹",
|
||||||
|
"font_class": "wenjianjia4",
|
||||||
|
"unicode": "e8bb",
|
||||||
|
"unicode_decimal": 59579
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23642443",
|
||||||
|
"name": "取消关注",
|
||||||
|
"font_class": "quxiaoguanzhu",
|
||||||
|
"unicode": "e89a",
|
||||||
|
"unicode_decimal": 59546
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23642444",
|
||||||
|
"name": "点赞_icon",
|
||||||
|
"font_class": "dianzan_icon",
|
||||||
|
"unicode": "e8a2",
|
||||||
|
"unicode_decimal": 59554
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23639530",
|
||||||
|
"name": "文件",
|
||||||
|
"font_class": "wenjian5",
|
||||||
|
"unicode": "e896",
|
||||||
|
"unicode_decimal": 59542
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23639533",
|
||||||
|
"name": "文件夹",
|
||||||
|
"font_class": "wenjianjia3",
|
||||||
|
"unicode": "e8a9",
|
||||||
|
"unicode_decimal": 59561
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23639440",
|
||||||
|
"name": "复制icon",
|
||||||
|
"font_class": "fuzhiicon",
|
||||||
|
"unicode": "e886",
|
||||||
|
"unicode_decimal": 59526
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23639422",
|
||||||
|
"name": "主页-fill",
|
||||||
|
"font_class": "zhuye-fill",
|
||||||
|
"unicode": "e876",
|
||||||
|
"unicode_decimal": 59510
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23639423",
|
||||||
|
"name": "代码库icon",
|
||||||
|
"font_class": "daimakuicon",
|
||||||
|
"unicode": "e884",
|
||||||
|
"unicode_decimal": 59524
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23572260",
|
||||||
|
"name": "新建",
|
||||||
|
"font_class": "xinjian2",
|
||||||
|
"unicode": "e8b0",
|
||||||
|
"unicode_decimal": 59568
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23567674",
|
||||||
|
"name": "协议icon",
|
||||||
|
"font_class": "xieyiicon",
|
||||||
|
"unicode": "e870",
|
||||||
|
"unicode_decimal": 59504
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23567675",
|
||||||
|
"name": "内存icon",
|
||||||
|
"font_class": "neicunicon",
|
||||||
|
"unicode": "e891",
|
||||||
|
"unicode_decimal": 59537
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23567676",
|
||||||
|
"name": "自述文件_icon",
|
||||||
|
"font_class": "zishuwenjian_icon",
|
||||||
|
"unicode": "e8a6",
|
||||||
|
"unicode_decimal": 59558
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472253",
|
||||||
|
"name": "标签icon",
|
||||||
|
"font_class": "biaoqianicon",
|
||||||
|
"unicode": "e882",
|
||||||
|
"unicode_decimal": 59522
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472254",
|
||||||
|
"name": "编 辑",
|
||||||
|
"font_class": "a-bianji",
|
||||||
|
"unicode": "e883",
|
||||||
|
"unicode_decimal": 59523
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472256",
|
||||||
|
"name": "仓库设置icon",
|
||||||
|
"font_class": "cangkushezhiicon",
|
||||||
|
"unicode": "e885",
|
||||||
|
"unicode_decimal": 59525
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472258",
|
||||||
|
"name": "链接icon",
|
||||||
|
"font_class": "lianjieicon",
|
||||||
|
"unicode": "e887",
|
||||||
|
"unicode_decimal": 59527
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472259",
|
||||||
|
"name": "合并请求icon",
|
||||||
|
"font_class": "hebingqingqiuicon",
|
||||||
|
"unicode": "e888",
|
||||||
|
"unicode_decimal": 59528
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472260",
|
||||||
|
"name": "里程碑icon",
|
||||||
|
"font_class": "lichengbeiicon",
|
||||||
|
"unicode": "e889",
|
||||||
|
"unicode_decimal": 59529
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472261",
|
||||||
|
"name": "工作流icon",
|
||||||
|
"font_class": "gongzuoliuicon",
|
||||||
|
"unicode": "e88a",
|
||||||
|
"unicode_decimal": 59530
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472262",
|
||||||
|
"name": "动态icon",
|
||||||
|
"font_class": "dongtaiicon",
|
||||||
|
"unicode": "e88b",
|
||||||
|
"unicode_decimal": 59531
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472263",
|
||||||
|
"name": "默认点赞_icon",
|
||||||
|
"font_class": "morendianzan_icon",
|
||||||
|
"unicode": "e88e",
|
||||||
|
"unicode_decimal": 59534
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472265",
|
||||||
|
"name": "目录icon",
|
||||||
|
"font_class": "muluicon",
|
||||||
|
"unicode": "e894",
|
||||||
|
"unicode_decimal": 59540
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472267",
|
||||||
|
"name": "设 置",
|
||||||
|
"font_class": "a-shezhi",
|
||||||
|
"unicode": "e899",
|
||||||
|
"unicode_decimal": 59545
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472269",
|
||||||
|
"name": "提交icon",
|
||||||
|
"font_class": "tijiaoicon",
|
||||||
|
"unicode": "e89e",
|
||||||
|
"unicode_decimal": 59550
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472270",
|
||||||
|
"name": "默认关注_ICON",
|
||||||
|
"font_class": "morenguanzhu_ICON",
|
||||||
|
"unicode": "e89f",
|
||||||
|
"unicode_decimal": 59551
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472272",
|
||||||
|
"name": "下拉按钮",
|
||||||
|
"font_class": "xialaanniu1",
|
||||||
|
"unicode": "e8a4",
|
||||||
|
"unicode_decimal": 59556
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472276",
|
||||||
|
"name": "左滑icon",
|
||||||
|
"font_class": "zuohuaicon",
|
||||||
|
"unicode": "e8b5",
|
||||||
|
"unicode_decimal": 59573
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472277",
|
||||||
|
"name": "master_icon",
|
||||||
|
"font_class": "master_icon",
|
||||||
|
"unicode": "e8b6",
|
||||||
|
"unicode_decimal": 59574
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472278",
|
||||||
|
"name": "默认复刻_icon",
|
||||||
|
"font_class": "morenfuke_icon",
|
||||||
|
"unicode": "e8b7",
|
||||||
|
"unicode_decimal": 59575
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472279",
|
||||||
|
"name": "wiki icon",
|
||||||
|
"font_class": "a-wikiicon",
|
||||||
|
"unicode": "e8b8",
|
||||||
|
"unicode_decimal": 59576
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23472280",
|
||||||
|
"name": "易修icon",
|
||||||
|
"font_class": "yixiuicon",
|
||||||
|
"unicode": "e8b9",
|
||||||
|
"unicode_decimal": 59577
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23436350",
|
||||||
|
"name": "缩放",
|
||||||
|
"font_class": "suofang",
|
||||||
|
"unicode": "e87f",
|
||||||
|
"unicode_decimal": 59519
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23436351",
|
||||||
|
"name": "放大icon",
|
||||||
|
"font_class": "fangdaicon",
|
||||||
|
"unicode": "e881",
|
||||||
|
"unicode_decimal": 59521
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23384231",
|
||||||
|
"name": "搜索_icon",
|
||||||
|
"font_class": "sousuo_icon1",
|
||||||
|
"unicode": "e873",
|
||||||
|
"unicode_decimal": 59507
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23384232",
|
||||||
|
"name": "欢迎_icon",
|
||||||
|
"font_class": "huanying_icon",
|
||||||
|
"unicode": "e878",
|
||||||
|
"unicode_decimal": 59512
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23384233",
|
||||||
|
"name": "文件夹",
|
||||||
|
"font_class": "wenjianjia2",
|
||||||
|
"unicode": "e879",
|
||||||
|
"unicode_decimal": 59513
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23384234",
|
||||||
|
"name": "删除icon",
|
||||||
|
"font_class": "shanchuicon1",
|
||||||
|
"unicode": "e87a",
|
||||||
|
"unicode_decimal": 59514
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23261798",
|
||||||
|
"name": "请求icon",
|
||||||
|
"font_class": "qingqiuicon",
|
||||||
|
"unicode": "e871",
|
||||||
|
"unicode_decimal": 59505
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23261799",
|
||||||
|
"name": "响应icon",
|
||||||
|
"font_class": "xiangyingicon",
|
||||||
|
"unicode": "e87c",
|
||||||
|
"unicode_decimal": 59516
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144143",
|
||||||
|
"name": "多选选中",
|
||||||
|
"font_class": "duoxuanxuanzhong",
|
||||||
|
"unicode": "e88f",
|
||||||
|
"unicode_decimal": 59535
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144144",
|
||||||
|
"name": "错误icon",
|
||||||
|
"font_class": "cuowuicon",
|
||||||
|
"unicode": "e890",
|
||||||
|
"unicode_decimal": 59536
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144146",
|
||||||
|
"name": "成功icon",
|
||||||
|
"font_class": "chenggongicon",
|
||||||
|
"unicode": "e892",
|
||||||
|
"unicode_decimal": 59538
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144147",
|
||||||
|
"name": "未选中响应icon",
|
||||||
|
"font_class": "weixuanzhongxiangyingicon",
|
||||||
|
"unicode": "e893",
|
||||||
|
"unicode_decimal": 59539
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144149",
|
||||||
|
"name": "必填icon",
|
||||||
|
"font_class": "bitianicon",
|
||||||
|
"unicode": "e895",
|
||||||
|
"unicode_decimal": 59541
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144151",
|
||||||
|
"name": "未选中项目标签icon",
|
||||||
|
"font_class": "weixuanzhongxiangmubiaoqianicon",
|
||||||
|
"unicode": "e897",
|
||||||
|
"unicode_decimal": 59543
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144152",
|
||||||
|
"name": "列表icon",
|
||||||
|
"font_class": "liebiaoicon",
|
||||||
|
"unicode": "e898",
|
||||||
|
"unicode_decimal": 59544
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144155",
|
||||||
|
"name": "未选中请求icon",
|
||||||
|
"font_class": "weixuanzhongqingqiuicon",
|
||||||
|
"unicode": "e89b",
|
||||||
|
"unicode_decimal": 59547
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144158",
|
||||||
|
"name": "协作者管理icon",
|
||||||
|
"font_class": "xiezuozheguanliicon",
|
||||||
|
"unicode": "e8a1",
|
||||||
|
"unicode_decimal": 59553
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144160",
|
||||||
|
"name": "选中分支icon",
|
||||||
|
"font_class": "xuanzhongfenzhiicon",
|
||||||
|
"unicode": "e8a3",
|
||||||
|
"unicode_decimal": 59555
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144162",
|
||||||
|
"name": "选中基本设置icon",
|
||||||
|
"font_class": "xuanzhongjibenshezhiicon",
|
||||||
|
"unicode": "e8a5",
|
||||||
|
"unicode_decimal": 59557
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144165",
|
||||||
|
"name": "选中项目标签icon",
|
||||||
|
"font_class": "xuanzhongxiangmubiaoqianicon",
|
||||||
|
"unicode": "e8aa",
|
||||||
|
"unicode_decimal": 59562
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23144167",
|
||||||
|
"name": "选中webhook icon",
|
||||||
|
"font_class": "a-xuanzhongwebhookicon",
|
||||||
|
"unicode": "e8af",
|
||||||
|
"unicode_decimal": 59567
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046290",
|
||||||
|
"name": "shanchu_tc_icon",
|
||||||
|
"font_class": "shanchu_tc_icon",
|
||||||
|
"unicode": "e88c",
|
||||||
|
"unicode_decimal": 59532
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046293",
|
||||||
|
"name": "wiki_icon",
|
||||||
|
"font_class": "wiki_icon",
|
||||||
|
"unicode": "e88d",
|
||||||
|
"unicode_decimal": 59533
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046244",
|
||||||
|
"name": "导入模版_icon",
|
||||||
|
"font_class": "daorumoban_icon",
|
||||||
|
"unicode": "e86f",
|
||||||
|
"unicode_decimal": 59503
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046252",
|
||||||
|
"name": "错误",
|
||||||
|
"font_class": "cuowu",
|
||||||
|
"unicode": "e872",
|
||||||
|
"unicode_decimal": 59506
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046255",
|
||||||
|
"name": "更多_icon",
|
||||||
|
"font_class": "gengduo_icon",
|
||||||
|
"unicode": "e874",
|
||||||
|
"unicode_decimal": 59508
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046258",
|
||||||
|
"name": "复层关闭_icon",
|
||||||
|
"font_class": "fucengguanbi_icon",
|
||||||
|
"unicode": "e875",
|
||||||
|
"unicode_decimal": 59509
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046268",
|
||||||
|
"name": "删除icon",
|
||||||
|
"font_class": "shanchuicon",
|
||||||
|
"unicode": "e877",
|
||||||
|
"unicode_decimal": 59511
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046273",
|
||||||
|
"name": "搜索_删除icon",
|
||||||
|
"font_class": "sousuo_shanchuicon",
|
||||||
|
"unicode": "e87b",
|
||||||
|
"unicode_decimal": 59515
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046275",
|
||||||
|
"name": "搜索_icon",
|
||||||
|
"font_class": "sousuo_icon",
|
||||||
|
"unicode": "e87d",
|
||||||
|
"unicode_decimal": 59517
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046276",
|
||||||
|
"name": "文档预览_icon",
|
||||||
|
"font_class": "wendangyulan_icon",
|
||||||
|
"unicode": "e87e",
|
||||||
|
"unicode_decimal": 59518
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "23046278",
|
||||||
|
"name": "下拉按钮",
|
||||||
|
"font_class": "xialaanniu",
|
||||||
|
"unicode": "e880",
|
||||||
|
"unicode_decimal": 59520
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906287",
|
||||||
|
"name": "二次确认_icon",
|
||||||
|
"font_class": "erciqueren_icon",
|
||||||
|
"unicode": "e867",
|
||||||
|
"unicode_decimal": 59495
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906288",
|
||||||
|
"name": "选中ssh_icon",
|
||||||
|
"font_class": "xuanzhongssh_icon",
|
||||||
|
"unicode": "e868",
|
||||||
|
"unicode_decimal": 59496
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906289",
|
||||||
|
"name": "未选中安全设置_icon",
|
||||||
|
"font_class": "weixuanzhonganquanshezhi_icon",
|
||||||
|
"unicode": "e869",
|
||||||
|
"unicode_decimal": 59497
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906290",
|
||||||
|
"name": "未选中ssh_icon",
|
||||||
|
"font_class": "weixuanzhongssh_icon",
|
||||||
|
"unicode": "e86a",
|
||||||
|
"unicode_decimal": 59498
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906291",
|
||||||
|
"name": "选中安全设置_icon",
|
||||||
|
"font_class": "xuanzhonganquanshezhi_icon",
|
||||||
|
"unicode": "e86b",
|
||||||
|
"unicode_decimal": 59499
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906292",
|
||||||
|
"name": "删除_icon",
|
||||||
|
"font_class": "shanchu_icon",
|
||||||
|
"unicode": "e86c",
|
||||||
|
"unicode_decimal": 59500
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "22906293",
|
||||||
|
"name": "列表ssh_icon",
|
||||||
|
"font_class": "liebiaossh_icon",
|
||||||
|
"unicode": "e86e",
|
||||||
|
"unicode_decimal": 59502
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "17575494",
|
||||||
|
"name": "file-submodule",
|
||||||
|
"font_class": "file-submodule",
|
||||||
|
"unicode": "e866",
|
||||||
|
"unicode_decimal": 59494
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "7539612",
|
||||||
|
"name": "nv",
|
||||||
|
"font_class": "nv1",
|
||||||
|
"unicode": "e864",
|
||||||
|
"unicode_decimal": 59492
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "7539613",
|
||||||
|
"name": "nan",
|
||||||
|
"font_class": "nan1",
|
||||||
|
"unicode": "e865",
|
||||||
|
"unicode_decimal": 59493
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936935",
|
||||||
|
"name": "邮箱",
|
||||||
|
"font_class": "youxiang",
|
||||||
|
"unicode": "e8b2",
|
||||||
|
"unicode_decimal": 59570
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936924",
|
||||||
|
"name": "单位",
|
||||||
|
"font_class": "danwei",
|
||||||
|
"unicode": "e8a7",
|
||||||
|
"unicode_decimal": 59559
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936925",
|
||||||
|
"name": "待办事项",
|
||||||
|
"font_class": "daibanshixiang",
|
||||||
|
"unicode": "e8a8",
|
||||||
|
"unicode_decimal": 59560
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936928",
|
||||||
|
"name": "概览",
|
||||||
|
"font_class": "gailan",
|
||||||
|
"unicode": "e8ab",
|
||||||
|
"unicode_decimal": 59563
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936929",
|
||||||
|
"name": "男",
|
||||||
|
"font_class": "nan",
|
||||||
|
"unicode": "e8ac",
|
||||||
|
"unicode_decimal": 59564
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936930",
|
||||||
|
"name": "女",
|
||||||
|
"font_class": "nv",
|
||||||
|
"unicode": "e8ad",
|
||||||
|
"unicode_decimal": 59565
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936931",
|
||||||
|
"name": "工作流",
|
||||||
|
"font_class": "gongzuoliu1",
|
||||||
|
"unicode": "e8ae",
|
||||||
|
"unicode_decimal": 59566
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936934",
|
||||||
|
"name": "数据统计",
|
||||||
|
"font_class": "shujutongji",
|
||||||
|
"unicode": "e8b1",
|
||||||
|
"unicode_decimal": 59569
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936936",
|
||||||
|
"name": "项目",
|
||||||
|
"font_class": "xiangmu",
|
||||||
|
"unicode": "e8b3",
|
||||||
|
"unicode_decimal": 59571
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21936937",
|
||||||
|
"name": "组织",
|
||||||
|
"font_class": "zuzhi",
|
||||||
|
"unicode": "e8b4",
|
||||||
|
"unicode_decimal": 59572
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "14835599",
|
||||||
|
"name": "右箭头",
|
||||||
|
"font_class": "arrowRight",
|
||||||
|
"unicode": "e863",
|
||||||
|
"unicode_decimal": 59491
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21151489",
|
||||||
|
"name": "箭头镂空-左",
|
||||||
|
"font_class": "jiantouloukong-zuo",
|
||||||
|
"unicode": "e861",
|
||||||
|
"unicode_decimal": 59489
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21151557",
|
||||||
|
"name": "箭头镂空-右",
|
||||||
|
"font_class": "jiantouloukong-you",
|
||||||
|
"unicode": "e862",
|
||||||
|
"unicode_decimal": 59490
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21568989",
|
||||||
|
"name": "分享",
|
||||||
|
"font_class": "fenxiang1",
|
||||||
|
"unicode": "e89c",
|
||||||
|
"unicode_decimal": 59548
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21568990",
|
||||||
|
"name": "回到顶部",
|
||||||
|
"font_class": "huidaodingbu1",
|
||||||
|
"unicode": "e89d",
|
||||||
|
"unicode_decimal": 59549
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "21568993",
|
||||||
|
"name": "帮助",
|
||||||
|
"font_class": "bangzhu",
|
||||||
|
"unicode": "e8a0",
|
||||||
|
"unicode_decimal": 59552
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "991344",
|
||||||
|
"name": "提交",
|
||||||
|
"font_class": "tijiao",
|
||||||
|
"unicode": "e860",
|
||||||
|
"unicode_decimal": 59488
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "1852052",
|
||||||
|
"name": "数据库",
|
||||||
|
"font_class": "dataBase",
|
||||||
|
"unicode": "e85a",
|
||||||
|
"unicode_decimal": 59482
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "4165948",
|
||||||
|
"name": "文件",
|
||||||
|
"font_class": "wenjian4",
|
||||||
|
"unicode": "e85b",
|
||||||
|
"unicode_decimal": 59483
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "17165148",
|
||||||
|
"name": "链接",
|
||||||
|
"font_class": "lianjie2",
|
||||||
|
"unicode": "e85c",
|
||||||
|
"unicode_decimal": 59484
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "17463741",
|
||||||
|
"name": "分支",
|
||||||
|
"font_class": "fenzhi2",
|
||||||
|
"unicode": "e85d",
|
||||||
|
"unicode_decimal": 59485
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "17972521",
|
||||||
|
"name": "分支-3",
|
||||||
|
"font_class": "fenzhi-3",
|
||||||
|
"unicode": "e85e",
|
||||||
|
"unicode_decimal": 59486
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "18682391",
|
||||||
|
"name": "天平",
|
||||||
|
"font_class": "tianping",
|
||||||
|
"unicode": "e85f",
|
||||||
|
"unicode_decimal": 59487
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"icon_id": "1770896",
|
"icon_id": "1770896",
|
||||||
"name": "撤销",
|
"name": "撤销",
|
||||||
|
@ -4187,7 +4922,7 @@
|
||||||
{
|
{
|
||||||
"icon_id": "1004630",
|
"icon_id": "1004630",
|
||||||
"name": "点赞2",
|
"name": "点赞2",
|
||||||
"font_class": "dianzan1",
|
"font_class": "dianzaned",
|
||||||
"unicode": "e639",
|
"unicode": "e639",
|
||||||
"unicode_decimal": 58937
|
"unicode_decimal": 58937
|
||||||
},
|
},
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 66 KiB |
|
@ -2,10 +2,11 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name=”Keywords” Content=”trustie,trustieforge,forge,确实让创建更美好,协同开发平台″>
|
<title>红山开源社区</title>
|
||||||
<meta name=”Keywords” Content=”TrustieOpenSourceProject″>
|
<meta name="keywords" content="红山开源,创客空间,群智共享">
|
||||||
<meta name=”Keywords” Content=”issue,bug,tracker,软件工程,课程实践″>
|
<meta name="keywords" content="红山开源社区,开源开放,众创,论坛">
|
||||||
<meta name=”Description” Content=”持续构建协同、共享、可信的软件创建生态开源创作与软件生产相结合,支持大规模群体开展软件协同创新活动”>
|
<meta name="keywords" content="issue,bug,tracker">
|
||||||
|
<meta name="description" content="红山开源是一个依托互联网群体智慧实现世界范围内资源深度融合、开放共享和协同创新的开源社区" />
|
||||||
<meta name="theme-color" content="#000000">
|
<meta name="theme-color" content="#000000">
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
|
||||||
|
|
||||||
|
|
14
src/App.js
14
src/App.js
|
@ -45,6 +45,11 @@ const OpsDetail = Loadable({
|
||||||
loader: () => import('./forge/DevOps/opsDetail'),
|
loader: () => import('./forge/DevOps/opsDetail'),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
})
|
})
|
||||||
|
// Notice项目公告
|
||||||
|
const Notice = Loadable({
|
||||||
|
loader: () => import('./military/notice'),
|
||||||
|
loading: Loading,
|
||||||
|
})
|
||||||
//403页面
|
//403页面
|
||||||
const Shixunauthority = Loadable({
|
const Shixunauthority = Loadable({
|
||||||
loader: () => import('./modules/403/Shixunauthority'),
|
loader: () => import('./modules/403/Shixunauthority'),
|
||||||
|
@ -240,6 +245,15 @@ class App extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
{/*公告*/}
|
||||||
|
<Route
|
||||||
|
path={"/notice"}
|
||||||
|
render={
|
||||||
|
(props) => {
|
||||||
|
return (<Notice {...this.props} {...props} {...this.state} />)
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
</Route>
|
||||||
{/*403*/}
|
{/*403*/}
|
||||||
<Route path="/403" component={Shixunauthority} />
|
<Route path="/403" component={Shixunauthority} />
|
||||||
|
|
||||||
|
|
|
@ -4,16 +4,14 @@ import { broadcastChannelOnmessage, isDev, queryString } from 'educoder';
|
||||||
import { notification } from 'antd';
|
import { notification } from 'antd';
|
||||||
import cookie from 'react-cookies';
|
import cookie from 'react-cookies';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
|
|
||||||
let message501 = false;
|
let message501 = false;
|
||||||
|
|
||||||
broadcastChannelOnmessage('refreshPage', () => {
|
broadcastChannelOnmessage('refreshPage', () => {
|
||||||
window.location.reload();
|
window.location.reload()
|
||||||
})
|
})
|
||||||
|
|
||||||
function locationurl(list) {
|
function locationurl(list) {
|
||||||
if (window.location.port === "3007") {
|
if (window.location.port !== "3007") {
|
||||||
|
|
||||||
} else {
|
|
||||||
window.location.href = list
|
window.location.href = list
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,14 +25,14 @@ if (isDev) {
|
||||||
}
|
}
|
||||||
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
debugType = window.location.search.indexOf('debug=t') !== -1 ? 'teacher' :
|
||||||
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
window.location.search.indexOf('debug=s') !== -1 ? 'student' :
|
||||||
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 'admin'
|
window.location.search.indexOf('debug=a') !== -1 ? 'admin' : parsed.debug || 's'
|
||||||
}
|
}
|
||||||
function clearAllCookie() {
|
function clearAllCookie() {
|
||||||
cookie.remove('_educoder_session', { path: '/' });
|
cookie.remove('_educoder_session', { path: '/' });
|
||||||
cookie.remove('autologin_trustie', { path: '/' });
|
cookie.remove('autologin_trustie', { path: '/' });
|
||||||
setpostcookie()
|
setpostcookie()
|
||||||
}
|
}
|
||||||
clearAllCookie();
|
// clearAllCookie();
|
||||||
function setpostcookie() {
|
function setpostcookie() {
|
||||||
const str = window.location.pathname;
|
const str = window.location.pathname;
|
||||||
if (str.indexOf("/wxcode") !== -1) {
|
if (str.indexOf("/wxcode") !== -1) {
|
||||||
|
@ -54,9 +52,11 @@ setpostcookie();
|
||||||
|
|
||||||
window._debugType = debugType;
|
window._debugType = debugType;
|
||||||
export function initAxiosInterceptors(props) {
|
export function initAxiosInterceptors(props) {
|
||||||
initOnlineOfflineListener();
|
initOnlineOfflineListener()
|
||||||
var proxy = "http://localhost:3000";
|
// TODO 避免重复的请求 https://github.com/axios/axios#cancellation
|
||||||
proxy = "https://testforgeplus.trustie.net";
|
var
|
||||||
|
proxy = "http://localhost:3000";
|
||||||
|
proxy = "https://forge.osredm.com";
|
||||||
|
|
||||||
const requestMap = {};
|
const requestMap = {};
|
||||||
window.setfalseInRequestMap = function (keyName) {
|
window.setfalseInRequestMap = function (keyName) {
|
||||||
|
@ -90,7 +90,6 @@ export function initAxiosInterceptors(props) {
|
||||||
}
|
}
|
||||||
if (config.url.indexOf('update_file') === -1) {
|
if (config.url.indexOf('update_file') === -1) {
|
||||||
requestMap[config.url] = true;
|
requestMap[config.url] = true;
|
||||||
|
|
||||||
window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900)
|
window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900)
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
|
|
|
@ -68,7 +68,7 @@ export function appendFileSizeToUploadFile(item) {
|
||||||
return `${item.title}${uploadNameSizeSeperator}${item.filesize}`
|
return `${item.title}${uploadNameSizeSeperator}${item.filesize}`
|
||||||
}
|
}
|
||||||
export function appendFileSizeToUploadFileAll(fileList) {
|
export function appendFileSizeToUploadFileAll(fileList) {
|
||||||
return fileList.map(item => {
|
return fileList && fileList.map(item => {
|
||||||
if (item.name.indexOf(uploadNameSizeSeperator) == -1) {
|
if (item.name.indexOf(uploadNameSizeSeperator) == -1) {
|
||||||
return Object.assign({}, item, { name: `${item.name}${uploadNameSizeSeperator}${bytesToSize(item.size)}` })
|
return Object.assign({}, item, { name: `${item.name}${uploadNameSizeSeperator}${bytesToSize(item.size)}` })
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,12 @@ 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 = "http://39.105.176.215:49999"
|
||||||
export function getImageUrl(path) {
|
export function getImageUrl(path) {
|
||||||
// https://www.educoder.net
|
// https://www.educoder.net
|
||||||
// https://testbdweb.trustie.net
|
// https://testbdweb.trustie.net
|
||||||
// const local = 'http://localhost:3000'
|
// const local = 'http://localhost:3000'
|
||||||
const local = 'https://testforgeplus.trustie.net';
|
const local = 'http://39.105.176.215:49999';
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return `${local}/${path}`
|
return `${local}/${path}`
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ export function getImage(path) {
|
||||||
// https://www.educoder.net
|
// https://www.educoder.net
|
||||||
// https://testbdweb.trustie.net
|
// https://testbdweb.trustie.net
|
||||||
// const local = 'http://localhost:3000'
|
// const local = 'http://localhost:3000'
|
||||||
const local = 'https://testforgeplus.trustie.net/';
|
const local = 'http://39.105.176.215:49999';
|
||||||
if(path.indexOf("http://")===-1){
|
if(path.indexOf("http://")===-1){
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return `${local}/images/${path}`
|
return `${local}/images/${path}`
|
||||||
|
@ -93,7 +93,7 @@ export function setImagesUrl(path){
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUrl(path, goTest) {
|
export function getUrl(path, goTest) {
|
||||||
const local = 'https://testforgeplus.trustie.net'
|
const local = 'http://39.105.176.215:49999'
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return `${local}${path?path:''}`
|
return `${local}${path?path:''}`
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ export function getmyUrl(geturl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUploadActionUrl(path, goTest) {
|
export function getUploadActionUrl(path, goTest) {
|
||||||
return `${getUrl()}/api/attachments.json?debug=${window._debugType || 'admin'}`;
|
return `${getUrl()}/api/attachments.json`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getUploadLogoActionUrl() {
|
export function getUploadLogoActionUrl() {
|
||||||
|
|
|
@ -14,7 +14,7 @@ class CloneAddress extends Component {
|
||||||
const { http_url, downloadUrl } = this.props;
|
const { http_url, downloadUrl } = this.props;
|
||||||
return (
|
return (
|
||||||
<div className="gitAddressClone">
|
<div className="gitAddressClone">
|
||||||
{/* <p className="addressTips"><span>版本库地址已变更,请基于新地址提交代码</span></p> */}
|
<p className="addressTips"><span>版本库地址已变更,请基于新地址提交代码</span></p>
|
||||||
{
|
{
|
||||||
http_url && <span>HTTP</span>
|
http_url && <span>HTTP</span>
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
import React , { useState , useEffect } from 'react';
|
import React , { useState , useEffect } from 'react';
|
||||||
import { Select } from 'antd';
|
import { Select } from 'antd';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
@ -57,7 +59,6 @@ const LANGUAGE = [
|
||||||
|
|
||||||
export default (({ language , select_language })=>{
|
export default (({ language , select_language })=>{
|
||||||
const [ languages , setLanguage ] = useState(undefined);
|
const [ languages , setLanguage ] = useState(undefined);
|
||||||
|
|
||||||
// useEffect(()=>{
|
// useEffect(()=>{
|
||||||
// const url = '/dev_ops/languages.json';
|
// const url = '/dev_ops/languages.json';
|
||||||
// axios.get(url).then(result=>{
|
// axios.get(url).then(result=>{
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 64 KiB |
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
After Width: | Height: | Size: 222 KiB |
|
@ -145,7 +145,7 @@ class CoderRootCommit extends Component{
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
{commitDatas && commitDatas.length > 0 && <Nodata _html="暂无数据"/>}
|
{commitDatas && commitDatas.length === 0 && <Nodata _html="暂无数据"/>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
|
|
|
@ -251,7 +251,7 @@ class CoderRootDirectory extends Component {
|
||||||
// readme文件内容
|
// readme文件内容
|
||||||
renderReadMeContent = (readMeContent, permission) => {
|
renderReadMeContent = (readMeContent, permission) => {
|
||||||
const { fileDetail, readMeFile } = this.state;
|
const { fileDetail, readMeFile } = this.state;
|
||||||
if (fileDetail) {
|
if (fileDetail && fileDetail.length !== 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (readMeContent && readMeContent.length > 0) {
|
if (readMeContent && readMeContent.length > 0) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { Link, Route, Switch } from 'react-router-dom';
|
||||||
import { Content } from '../Component/layout';
|
import { Content } from '../Component/layout';
|
||||||
import '../css/index.scss'
|
import '../css/index.scss'
|
||||||
import './list.css';
|
import './list.css';
|
||||||
|
import SpecialModal from './SpecialModal';
|
||||||
|
|
||||||
import Loadable from 'react-loadable';
|
import Loadable from 'react-loadable';
|
||||||
import Loading from '../../Loading';
|
import Loading from '../../Loading';
|
||||||
|
@ -117,19 +118,20 @@ const DevIndex = Loadable({
|
||||||
function checkPathname(projectsId,owner,pathname){
|
function checkPathname(projectsId,owner,pathname){
|
||||||
let name = "";
|
let name = "";
|
||||||
if(pathname && pathname !== `/projects/${owner}/${projectsId}`){
|
if(pathname && pathname !== `/projects/${owner}/${projectsId}`){
|
||||||
if(pathname.indexOf("/about")>-1){
|
let url = pathname.split(`/projects/${owner}/${projectsId}`)[1];
|
||||||
|
if(url.indexOf("/about")>-1){
|
||||||
name="about"
|
name="about"
|
||||||
}else if(pathname.indexOf("/issues")>-1 ||pathname.indexOf("Milepost") > 0){
|
}else if(url.indexOf("/issues")>-1 ||url.indexOf("Milepost") > 0){
|
||||||
name = "issues";
|
name = "issues";
|
||||||
}else if(pathname.indexOf("/pulls")>-1){
|
}else if(url.indexOf("/pulls")>-1){
|
||||||
name="pulls"
|
name="pulls"
|
||||||
}else if(pathname.indexOf("/milestones")>-1){
|
}else if(url.indexOf("/milestones")>-1){
|
||||||
name="milestones"
|
name="milestones"
|
||||||
}else if(pathname.indexOf("/activity")>-1){
|
}else if(url.indexOf("/activity")>-1){
|
||||||
name="activity"
|
name="activity"
|
||||||
}else if(pathname.indexOf("/setting")>-1){
|
}else if(url.indexOf("/setting")>-1){
|
||||||
name="setting"
|
name="setting"
|
||||||
}else if(pathname.indexOf(`/devops`)>-1){
|
}else if(url.indexOf(`/devops`)>-1){
|
||||||
name="devops"
|
name="devops"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,7 +163,9 @@ class Detail extends Component {
|
||||||
defaultBranch:undefined,
|
defaultBranch:undefined,
|
||||||
|
|
||||||
// 非本平台项目
|
// 非本平台项目
|
||||||
platform:false
|
platform:false,
|
||||||
|
visible:false,
|
||||||
|
user_apply_signatures:[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,6 +182,7 @@ class Detail extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
getProject = (num) => {
|
getProject = (num) => {
|
||||||
|
const {user} = this.props;
|
||||||
const { projectsId , owner } = this.props.match.params;
|
const { projectsId , owner } = this.props.match.params;
|
||||||
const url = `/${owner}/${projectsId}/simple.json`;
|
const url = `/${owner}/${projectsId}/simple.json`;
|
||||||
axios.get(url).then((result) => {
|
axios.get(url).then((result) => {
|
||||||
|
@ -187,6 +192,24 @@ class Detail extends Component {
|
||||||
open_devops:result.data.open_devops,
|
open_devops:result.data.open_devops,
|
||||||
platform:result.data.platform && result.data.platform !== 'educoder'
|
platform:result.data.platform && result.data.platform !== 'educoder'
|
||||||
})
|
})
|
||||||
|
let signa = result.data.user_apply_signatures && result.data.user_apply_signatures[0];
|
||||||
|
if(result.data.is_secret && !result.data.is_member && (!signa || (signa && signa.status !== "passed")) && user.login !== owner){
|
||||||
|
this.setState({
|
||||||
|
visible:true,
|
||||||
|
is_secret:result.data.is_secret,
|
||||||
|
user_apply_signatures:signa
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工作流:两种状态进入的链接不同
|
||||||
|
const pathname = this.props.history.location.pathname;
|
||||||
|
if(pathname===`/projects/${owner}/${projectsId}/devops`){
|
||||||
|
if(result.data.open_devops && pathname === `/projects/${owner}/${projectsId}/devops`){
|
||||||
|
this.props.history.push(`/projects/${owner}/${projectsId}/devops/list`);
|
||||||
|
}else if(result.data.open_devops===false && pathname !== `/projects/${owner}/${projectsId}/devops`){
|
||||||
|
this.props.history.push(`/projects/${owner}/${projectsId}/devops`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (result.data.type !== 0 && result.data.mirror_status === 1) {
|
if (result.data.type !== 0 && result.data.mirror_status === 1) {
|
||||||
console.log("--------start channel --------");
|
console.log("--------start channel --------");
|
||||||
|
@ -357,13 +380,24 @@ class Detail extends Component {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hideModal=()=>{
|
||||||
|
this.setState({
|
||||||
|
visible:false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
sureModal=()=>{
|
||||||
|
this.hideModal();
|
||||||
|
this.props.history.push('/projects');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { projectDetail, watchers_count, praises_count,
|
const { projectDetail, watchers_count, praises_count,
|
||||||
forked_count, firstSync , secondSync ,
|
forked_count, firstSync , secondSync ,
|
||||||
isManager, watched, praised,
|
isManager, watched, praised,
|
||||||
project , open_devops , platform , defaultBranch } = this.state;
|
project , open_devops , platform , defaultBranch , project_id , user_apply_signatures , visible } = this.state;
|
||||||
const url = this.props.history.location.pathname;
|
const url = this.props.history.location.pathname;
|
||||||
const urlArr = url.split("/");
|
const urlArr = url.split("/");
|
||||||
const urlFlag = (urlArr.length === 3);
|
const urlFlag = (urlArr.length === 3);
|
||||||
|
@ -390,18 +424,19 @@ class Detail extends Component {
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
<SpecialModal {...this.props} visible={visible} hideModal={this.sureModal} user_apply_signatures={user_apply_signatures} project_id={project_id} sureModal={this.sureModal}></SpecialModal>
|
||||||
<div className="detailHeader-wrapper">
|
<div className="detailHeader-wrapper">
|
||||||
<div className="normal">
|
<div className="normal">
|
||||||
<div className="f-wrap-between pb15" style={{ position: "relative" }}>
|
<div className="f-wrap-between pb15" style={{ position: "relative" }}>
|
||||||
<p className="font-22 df flex-1 lineH2 mt15" style={{ alignItems: "center" }}>
|
<p className="color-white font-22 df flex-1 lineH2 mt15" style={{ alignItems: "center" }}>
|
||||||
{project && project.author &&
|
{project && project.author &&
|
||||||
<Link to={`${project.author.type ==="Organization" ? "/organize":'/users'}/${project.author.login}`} className="show-user-link">
|
<Link to={`/users/${project.author.login}`} className="show-user-link color-white">
|
||||||
{project.author.name}
|
{project.author.name}
|
||||||
</Link>
|
</Link>
|
||||||
}
|
}
|
||||||
<span className="ml5 mr5">/</span>
|
<span className="ml5 mr5">/</span>
|
||||||
<span className="hide-1 flex-1 df">
|
<span className="hide-1 flex-1 df">
|
||||||
<Link to={`/projects/${owner}/${projectsId}`} className="font-22">{project && project.name}</Link>
|
<Link to={`/projects/${owner}/${projectsId}`} className="color-white font-22">{project && project.name}</Link>
|
||||||
{
|
{
|
||||||
projectDetail && projectDetail.forked_from_project_id && projectDetail.fork_info ?
|
projectDetail && projectDetail.forked_from_project_id && projectDetail.fork_info ?
|
||||||
<Tooltip placement={'right'} title={text}>
|
<Tooltip placement={'right'} title={text}>
|
||||||
|
@ -438,15 +473,14 @@ class Detail extends Component {
|
||||||
<span>{watched ? '取消关注' : '关注'}</span>
|
<span>{watched ? '取消关注' : '关注'}</span>
|
||||||
</a>
|
</a>
|
||||||
{
|
{
|
||||||
watchers_count > 0 ?
|
|
||||||
platform ?
|
platform ?
|
||||||
<Link className="detail_tag_btn_count" style={{color:`${watched?"#2878FF":"#666"}`}} to={platform?{ pathname: `/projects/${owner}/${projectsId}/watchers`, state }:""}>
|
<Link className="detail_tag_btn_count" style={{color:`${watched?"#2878FF":"#666"}`}} to={platform?{ pathname: `/projects/${owner}/${projectsId}/watchers`, state }:""}>
|
||||||
{watchers_count}
|
{watchers_count}
|
||||||
</Link>
|
</Link>
|
||||||
:
|
:
|
||||||
<span className="detail_tag_btn_count">{watchers_count}</span>
|
<span className="detail_tag_btn_count">{watchers_count}</span>
|
||||||
:""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
<span className="detail_tag_btn">
|
<span className="detail_tag_btn">
|
||||||
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.pariseFunc(praised)}>
|
<a className="detail_tag_btn_name" style={{cursor:platform?"pointer":"default"}} onClick={() => this.pariseFunc(praised)}>
|
||||||
|
@ -454,13 +488,11 @@ class Detail extends Component {
|
||||||
<span>{praised ? '取消点赞' : '点赞'}</span>
|
<span>{praised ? '取消点赞' : '点赞'}</span>
|
||||||
</a>
|
</a>
|
||||||
{
|
{
|
||||||
praises_count > 0 ?
|
|
||||||
platform ?
|
platform ?
|
||||||
<Link className="detail_tag_btn_count" style={{color:`${praised?"#2878FF":"#666"}`}} to={{ pathname: `/projects/${owner}/${projectsId}/stargazers`, state }}>
|
<Link className="detail_tag_btn_count" style={{color:`${praised?"#2878FF":"#666"}`}} to={{ pathname: `/projects/${owner}/${projectsId}/stargazers`, state }}>
|
||||||
{praises_count}
|
{praises_count}
|
||||||
</Link>:
|
</Link>:
|
||||||
<span className="detail_tag_btn_count">{praises_count}</span>
|
<span className="detail_tag_btn_count">{praises_count}</span>
|
||||||
:""
|
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
<span className="detail_tag_btn">
|
<span className="detail_tag_btn">
|
||||||
|
@ -468,14 +500,12 @@ class Detail extends Component {
|
||||||
<i className="iconfont icon-fork color-grey-9 mr3"></i>复刻 (Fork)
|
<i className="iconfont icon-fork color-grey-9 mr3"></i>复刻 (Fork)
|
||||||
</a>
|
</a>
|
||||||
{
|
{
|
||||||
forked_count > 0 ?
|
|
||||||
platform ?
|
platform ?
|
||||||
<Link className="detail_tag_btn_count" to={{ pathname: `/projects/${owner}/${projectsId}/fork_users`, state }}>
|
<Link className="detail_tag_btn_count" to={{ pathname: `/projects/${owner}/${projectsId}/fork_users`, state }}>
|
||||||
{forked_count}
|
{forked_count}
|
||||||
</Link>
|
</Link>
|
||||||
:
|
:
|
||||||
<span className="detail_tag_btn_count">{forked_count}</span>
|
<span className="detail_tag_btn_count">{praises_count}</span>
|
||||||
:""
|
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -483,23 +513,23 @@ class Detail extends Component {
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
firstSync ? "" :
|
firstSync ? "" :
|
||||||
<div className="f-wrap-between mt15">
|
<div className="f-wrap-between pb20">
|
||||||
<ul className="headerMenu-wrapper">
|
<ul className="headerMenu-wrapper">
|
||||||
<li className={pathname==="about" ? "active" : ""}>
|
<li className={pathname==="about" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/about`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/about`, state }}>
|
||||||
<i className={(pathname==="" || urlFlag) ? "iconfont icon-zhuye1 color-grey-3 mr5 font-14":"iconfont icon-zhuye1 color-grey-6 font-14 mr5"}></i>
|
<i className={ pathname === "about" ? "iconfont icon-zhuye1 color-blue mr5 font-14":"iconfont icon-zhuye1 color-white font-14 mr5"}></i>
|
||||||
<span>主页</span>
|
<span>主页</span>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className={(pathname==="" || urlFlag) ? "active" : ""}>
|
<li className={(pathname==="" || urlFlag) ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}`, state }}>
|
||||||
<i className={(pathname==="" || urlFlag) ? "iconfont icon-daimaku color-grey-3 mr5 font-14":"iconfont icon-daimaku color-grey-6 font-14 mr5"}></i>
|
<i className={(pathname==="" || urlFlag) ? "iconfont icon-daimaku color-blue mr5 font-14":"iconfont icon-daimaku color-white font-14 mr5"}></i>
|
||||||
<span>代码库</span>
|
<span>代码库</span>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className={pathname==="issues" ? "active" : ""}>
|
<li className={pathname==="issues" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/issues`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/issues`, state }}>
|
||||||
<i className={pathname==="issues" ? "iconfont icon-renwu color-grey-3 mr5 font-14":"iconfont icon-renwu color-grey-6 font-14 mr5"}></i>
|
<i className={pathname==="issues" ? "iconfont icon-renwu color-blue mr5 font-14":"iconfont icon-renwu color-white font-14 mr5"}></i>
|
||||||
<span>易修 (Issue)</span>
|
<span>易修 (Issue)</span>
|
||||||
{projectDetail && projectDetail.issues_count ? <span className="num">{projectDetail.issues_count}</span> : ""}
|
{projectDetail && projectDetail.issues_count ? <span className="num">{projectDetail.issues_count}</span> : ""}
|
||||||
</Link>
|
</Link>
|
||||||
|
@ -508,32 +538,32 @@ class Detail extends Component {
|
||||||
projectDetail && parseInt(projectDetail.type) !== 2 && platform &&
|
projectDetail && parseInt(projectDetail.type) !== 2 && platform &&
|
||||||
<li className={pathname==="pulls" ? "active" : ""}>
|
<li className={pathname==="pulls" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/pulls`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/pulls`, state }}>
|
||||||
<i className={pathname==="pulls" ? "iconfont icon-hebingqingqiu1 color-grey-3 mr5 font-14":"iconfont icon-hebingqingqiu1 color-grey-6 font-14 mr5"}></i>
|
<i className={pathname==="pulls" ? "iconfont icon-hebingqingqiu1 color-blue mr5 font-14":"iconfont icon-hebingqingqiu1 color-white font-14 mr5"}></i>
|
||||||
<span>合并请求</span>
|
<span>合并请求</span>
|
||||||
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{projectDetail.pull_requests_count}</span> : ""}
|
{projectDetail && projectDetail.pull_requests_count ? <span className="num">{projectDetail.pull_requests_count}</span> : ""}
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
{
|
{/* {
|
||||||
platform &&
|
platform &&
|
||||||
<li className={pathname==="devops" ? "active" : ""}>
|
<li className={pathname==="devops" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/devops${open_devops ? `/dispose`:""}`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/devops${open_devops ? `/list`:""}`, state }}>
|
||||||
<i className="iconfont icon-gongzuoliu font-13 mr8"></i>工作流(beta版)
|
<i className="iconfont icon-gongzuoliu font-13 mr8"></i>工作流(beta版)
|
||||||
{projectDetail && projectDetail.ops_count ? <span>{projectDetail.ops_count}</span> : ""}
|
{projectDetail && projectDetail.ops_count ? <span>{projectDetail.ops_count}</span> : ""}
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
}
|
} */}
|
||||||
|
|
||||||
<li className={pathname==="milestones" ? "active" : ""}>
|
<li className={pathname==="milestones" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/milestones`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/milestones`, state }}>
|
||||||
<i className={pathname==="milestones" ? "iconfont icon-lichengbei color-grey-3 mr5 font-14":"iconfont icon-lichengbei color-grey-6 font-14 mr5"}></i>
|
<i className={pathname==="milestones" ? "iconfont icon-lichengbei color-blue mr5 font-14":"iconfont icon-lichengbei color-white font-14 mr5"}></i>
|
||||||
<span>里程碑</span>
|
<span>里程碑</span>
|
||||||
{projectDetail && projectDetail.versions_count ? <span className="num">{projectDetail.versions_count}</span> :""}
|
{projectDetail && projectDetail.versions_count ? <span className="num">{projectDetail.versions_count}</span> :""}
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className={pathname==="activity" ? "active" : ""}>
|
<li className={pathname==="activity" ? "active" : ""}>
|
||||||
<Link to={{ pathname: `/projects/${owner}/${projectsId}/activity`, state }}>
|
<Link to={{ pathname: `/projects/${owner}/${projectsId}/activity`, state }}>
|
||||||
<i className={pathname==="activity" ? "iconfont icon-tongzhi color-grey-3 mr5 font-14":"iconfont icon-tongzhi color-grey-6 font-14 mr5"}></i>
|
<i className={pathname==="activity" ? "iconfont icon-tongzhi color-blue mr5 font-14":"iconfont icon-tongzhi color-white font-14 mr5"}></i>
|
||||||
<span>动态</span>
|
<span>动态</span>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
|
@ -541,7 +571,7 @@ class Detail extends Component {
|
||||||
isManager && platform &&
|
isManager && platform &&
|
||||||
<li className={url.indexOf("/setting") > 0 ? "active" : ""}>
|
<li className={url.indexOf("/setting") > 0 ? "active" : ""}>
|
||||||
<Link to={`/projects/${owner}/${projectsId}/setting`}>
|
<Link to={`/projects/${owner}/${projectsId}/setting`}>
|
||||||
<i className={url.indexOf("/setting") > 0 ? "iconfont icon-cangku color-grey-3 mr5 font-14":"iconfont icon-cangku color-grey-6 font-14 mr5"}></i>
|
<i className={url.indexOf("/setting") > 0 ? "iconfont icon-cangku color-blue mr5 font-14":"iconfont icon-cangku color-white font-14 mr5"}></i>
|
||||||
<span>仓库设置</span>
|
<span>仓库设置</span>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { Menu, Input , Spin, Pagination , Popover , Select } from 'antd';
|
import { Menu, Input , Spin, Pagination , Popover } from 'antd';
|
||||||
import { getUrl } from 'educoder';
|
|
||||||
import '../css/index.scss'
|
import '../css/index.scss'
|
||||||
import './list.css';
|
import './list.css';
|
||||||
import './Index.scss';
|
import './Index.scss';
|
||||||
|
@ -9,7 +8,7 @@ import ListItem from './IndexItem'
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import img_new from '../Images/new.png';
|
import img_new from '../Images/new.png';
|
||||||
import img_array from '../Images/array.png';
|
import img_array from '../Images/array.png';
|
||||||
import banner from '../Images/banner_list.jpg';
|
import banner from '../Images/banner_list.png';
|
||||||
const Search = Input.Search;
|
const Search = Input.Search;
|
||||||
|
|
||||||
class Index extends Component {
|
class Index extends Component {
|
||||||
|
@ -23,7 +22,6 @@ class Index extends Component {
|
||||||
sort: undefined,
|
sort: undefined,
|
||||||
total: 0,
|
total: 0,
|
||||||
isSpin: true,
|
isSpin: true,
|
||||||
project_type: undefined,
|
|
||||||
category_id: undefined,
|
category_id: undefined,
|
||||||
|
|
||||||
typeList: undefined,
|
typeList: undefined,
|
||||||
|
@ -37,8 +35,8 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount = () => {
|
componentDidMount = () => {
|
||||||
const { page, limit, search, sort, project_type, category_id , languageId } = this.state;
|
const { page,search, sort,category_id , languageId } = this.state;
|
||||||
this.getListData(page, limit, search, sort, project_type, category_id , languageId);
|
this.getListData(page,search, sort,category_id , languageId);
|
||||||
|
|
||||||
this.getType();
|
this.getType();
|
||||||
|
|
||||||
|
@ -73,19 +71,18 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取列表
|
// 获取列表
|
||||||
getListData = (page, limit, search, sort, project_type, category_id,languageId) => {
|
getListData = (page,search, sort,category_id,language_id) => {
|
||||||
const { current_user } = this.props;
|
const { current_user } = this.props;
|
||||||
const url = `/projects.json`;
|
const url = `/projects.json`;
|
||||||
axios.get(url, {
|
axios.get(url, {
|
||||||
params: {
|
params: {
|
||||||
user_id: current_user && current_user.user_id,
|
user_id: current_user && current_user.user_id,
|
||||||
page,
|
page,
|
||||||
limit,
|
limit:15,
|
||||||
search,
|
search,
|
||||||
sort_by: sort,
|
sort_by: sort,
|
||||||
project_type,
|
|
||||||
category_id,
|
category_id,
|
||||||
language_id:languageId
|
language_id
|
||||||
}
|
}
|
||||||
}).then((result) => {
|
}).then((result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
@ -112,7 +109,7 @@ class Index extends Component {
|
||||||
this.setState({
|
this.setState({
|
||||||
typeList: list.map((item, key) => {
|
typeList: list.map((item, key) => {
|
||||||
return (
|
return (
|
||||||
<li key={key} className={active_type && active_type === item.project_type ? 'active' : ''} onClick={() => this.changeType(`${item.project_type}`, list)}>
|
<li key={key} className={active_type && parseInt(active_type) === item.id ? 'active' : ''} onClick={() => this.changeType(`${item.id}`, list)}>
|
||||||
<p>
|
<p>
|
||||||
<span className="font-16">{item.name}</span>
|
<span className="font-16">{item.name}</span>
|
||||||
<span className="color-blue">{item.projects_count}</span>
|
<span className="color-blue">{item.projects_count}</span>
|
||||||
|
@ -124,15 +121,15 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换类型
|
// 切换类型
|
||||||
changeType = (type, list) => {
|
changeType = (id, list) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isSpin: true,
|
isSpin: true,
|
||||||
project_type: type,
|
languageId: id,
|
||||||
search: undefined
|
search: undefined
|
||||||
})
|
})
|
||||||
this.setTypeList(list, type)
|
this.setTypeList(list, id)
|
||||||
const { page, limit, sort, category_id , languageId } = this.state;
|
const { page,sort, category_id} = this.state;
|
||||||
this.getListData(page, limit, undefined, sort, type, category_id , languageId);
|
this.getListData(page,undefined, sort,category_id , id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取类型
|
// 获取类型
|
||||||
|
@ -167,8 +164,8 @@ class Index extends Component {
|
||||||
page: 1
|
page: 1
|
||||||
});
|
});
|
||||||
this.setCategoryList(list, id)
|
this.setCategoryList(list, id)
|
||||||
const { limit, sort, project_type , languageId } = this.state;
|
const { sort,languageId } = this.state;
|
||||||
this.getListData(1, limit, undefined, sort, project_type, id , languageId);
|
this.getListData(1,undefined, sort,id , languageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序
|
// 排序
|
||||||
|
@ -179,8 +176,8 @@ class Index extends Component {
|
||||||
search: undefined,
|
search: undefined,
|
||||||
isSpin: true
|
isSpin: true
|
||||||
})
|
})
|
||||||
const { limit, project_type, category_id , languageId } = this.state;
|
const {category_id , languageId } = this.state;
|
||||||
this.getListData(1, limit, undefined, e.key, project_type, category_id , languageId);
|
this.getListData(1,undefined, e.key,category_id , languageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索
|
// 搜索
|
||||||
|
@ -192,8 +189,8 @@ class Index extends Component {
|
||||||
project_type: undefined,
|
project_type: undefined,
|
||||||
sort: "updated_on"
|
sort: "updated_on"
|
||||||
})
|
})
|
||||||
const { limit, sort, category_id , languageId } = this.state;
|
const {sort, category_id , languageId } = this.state;
|
||||||
this.getListData(1, limit, value, sort, undefined, category_id , languageId);
|
this.getListData(1,value, sort,category_id , languageId);
|
||||||
}
|
}
|
||||||
changeSearchValue = (e) => {
|
changeSearchValue = (e) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
@ -205,23 +202,14 @@ class Index extends Component {
|
||||||
this.setState({
|
this.setState({
|
||||||
page
|
page
|
||||||
})
|
})
|
||||||
const { limit, search, sort, project_type, category_id , languageId } = this.state;
|
const {search, sort,category_id , languageId } = this.state;
|
||||||
this.getListData(page, limit, search, sort, project_type, category_id , languageId);
|
this.getListData(page,search, sort, category_id , languageId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getoDetail=(login,identifier)=>{
|
getoDetail=(login,identifier)=>{
|
||||||
this.props.history.push(`/projects/${login}/${identifier}`);
|
this.props.history.push(`/projects/${login}/${identifier}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择语言类别
|
|
||||||
changeLanguage=(e)=>{
|
|
||||||
this.setState({
|
|
||||||
isSpin:true,
|
|
||||||
languageId:e === 0 ?undefined:e
|
|
||||||
})
|
|
||||||
const { page, limit, sort , project_type , category_id } = this.state;
|
|
||||||
this.getListData(page, limit, undefined, sort, project_type, category_id ,e === 0 ?undefined:e);
|
|
||||||
}
|
|
||||||
|
|
||||||
menu =()=> {
|
menu =()=> {
|
||||||
return(
|
return(
|
||||||
|
@ -255,15 +243,14 @@ class Index extends Component {
|
||||||
render() {
|
render() {
|
||||||
const { current_user } = this.props;
|
const { current_user } = this.props;
|
||||||
|
|
||||||
const { projectsList , recommendList , languageList , languageId ,
|
const { projectsList , isSpin , total , search , limit , page , typeList , categoryList } = this.state;
|
||||||
isSpin, total, search, limit, page, typeList, categoryList } = this.state;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<p className="t_project_banner">
|
<p className="t_project_banner">
|
||||||
<img src={banner} width="100%" alt=""/>
|
<img src={banner} width="100%" alt=""/>
|
||||||
</p>
|
</p>
|
||||||
{
|
{/* {
|
||||||
recommendList && recommendList.length>0 &&
|
recommendList && recommendList.length>0 &&
|
||||||
<div className="recommandProjects">
|
<div className="recommandProjects">
|
||||||
{
|
{
|
||||||
|
@ -285,44 +272,23 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
*/}
|
||||||
<div className="ProjectListIndex">
|
<div className="ProjectListIndex">
|
||||||
<div className="list-left">
|
<div className="list-left">
|
||||||
<ul className="list-l-Menu">
|
<ul className="list-l-Menu">
|
||||||
<li className="MenuTitle"><i className="iconfont icon-xiangmuleixing color-grey-9 font-15 mr5"></i>项目类型</li>
|
<li className="MenuTitle"><i className="iconfont icon-bianchengyuyan color-grey-9 font-15 mr5"></i>
|
||||||
{typeList}
|
语言</li>
|
||||||
|
<div className="list-affix">{typeList}</div>
|
||||||
</ul>
|
</ul>
|
||||||
<ul className="list-l-Menu">
|
<ul className="list-l-Menu">
|
||||||
<li className="MenuTitle"><i className="iconfont icon-xiangmuleibie color-grey-9 font-15 mr5"></i>项目类别</li>
|
<li className="MenuTitle"><i className="iconfont icon-xiangmuleibie color-grey-9 font-15 mr5"></i>项目类别</li>
|
||||||
{categoryList}
|
<div className="list-affix">{categoryList}</div>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div className="list-right boxShandow radius-2" style={{padding:0}}>
|
<div className="list-right boxShandow radius-2" style={{padding:0}}>
|
||||||
<Spin spinning={isSpin}>
|
<Spin spinning={isSpin}>
|
||||||
<div className="list-r-operation">
|
<div className="list-r-operation">
|
||||||
<div>
|
<div>
|
||||||
<Select
|
|
||||||
showSearch
|
|
||||||
placeholder="请选择语言"
|
|
||||||
style={{width:"150px",marginRight:"20px"}}
|
|
||||||
size={"large"}
|
|
||||||
onChange={this.changeLanguage}
|
|
||||||
value={languageId}
|
|
||||||
allowClear={true}
|
|
||||||
optionFilterProp="children"
|
|
||||||
filterOption={(input,option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
|
|
||||||
>
|
|
||||||
<Select.Option key={0} value={0}>请选择语言</Select.Option>
|
|
||||||
{
|
|
||||||
languageList && languageList.length>0 && languageList.map((item,key)=>{
|
|
||||||
return(
|
|
||||||
<Select.Option key={item.id} value={item.id}>
|
|
||||||
{item.name}
|
|
||||||
</Select.Option>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</Select>
|
|
||||||
<Search
|
<Search
|
||||||
placeholder="输入项目名称关键字进行搜索"
|
placeholder="输入项目名称关键字进行搜索"
|
||||||
enterButton="搜索"
|
enterButton="搜索"
|
||||||
|
@ -350,7 +316,7 @@ class Index extends Component {
|
||||||
</Popover>
|
</Popover>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ListItem {...this.props} {...this.state} projects={projectsList}></ListItem>
|
<ListItem {...this.props} {...this.state} projects={projectsList} getListData={this.getListData}></ListItem>
|
||||||
{this.pagination(total,limit,page)}
|
{this.pagination(total,limit,page)}
|
||||||
</Spin>
|
</Spin>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -72,3 +72,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.singleBtn{
|
||||||
|
display: inline-block;
|
||||||
|
.ant-upload-list-item{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
width: 100%;
|
||||||
|
left: 0px;
|
||||||
|
.ant-upload-list-item-name{
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,72 +6,123 @@ import '../css/index.scss';
|
||||||
import Nodata from '../Nodata';
|
import Nodata from '../Nodata';
|
||||||
import './list.css';
|
import './list.css';
|
||||||
import img_parise from '../Images/parise.png';
|
import img_parise from '../Images/parise.png';
|
||||||
|
import SpecialModal from './SpecialModal';
|
||||||
|
|
||||||
class IndexItem extends Component {
|
class IndexItem extends Component {
|
||||||
|
constructor(props){
|
||||||
|
super(props);
|
||||||
|
this.state={
|
||||||
|
visible:false,
|
||||||
|
user_apply_signatures:[],
|
||||||
|
project_id:undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
TurnToDetail = (login, url) => {
|
TurnToDetail = (login, url) => {
|
||||||
this.props.history.push({
|
this.props.history.push({
|
||||||
pathname: url,
|
pathname: url,
|
||||||
state: login
|
state: login
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* link:跳转到详情的地址
|
||||||
|
* user_apply_signatures:是否已经发送访问特殊开源项目的文件
|
||||||
|
* project_id:项目id
|
||||||
|
* is_secret:是否是特殊开源许可证项目
|
||||||
|
* id:创建者login
|
||||||
|
* is_member:是否是项目成员(如果是项目成员可以直接进入项目)
|
||||||
|
* */
|
||||||
|
projectHref=(link , user_apply_signatures,project_id,is_secret , id,is_member)=>{
|
||||||
|
const { user , showLoginDialog } = this.props;
|
||||||
|
if(is_secret && (!user || (user && !user.login))){
|
||||||
|
showLoginDialog();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let signa = user_apply_signatures && user_apply_signatures[0];
|
||||||
|
if((is_secret && !is_member && (!signa || (signa && signa.status !== "passed"))) && user.login !== id ){
|
||||||
|
this.setState({
|
||||||
|
visible:true,
|
||||||
|
user_apply_signatures:user_apply_signatures.length>0 ? user_apply_signatures[0] : undefined,
|
||||||
|
project_id
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.props.history.push(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hideModal=()=>{
|
||||||
|
this.setState({
|
||||||
|
visible:false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
sureModal=()=>{
|
||||||
|
this.hideModal();
|
||||||
|
const { getListData } = this.props;
|
||||||
|
getListData && getListData(1);
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { projects } = this.props;
|
const { projects } = this.props;
|
||||||
return (
|
const { visible , user_apply_signatures , project_id } = this.state;
|
||||||
<div className="project-list minH-670">
|
const renderList = (
|
||||||
{ projects && projects.length > 0 ? projects.map((item, key) => {
|
projects && projects.length > 0 ? projects.map((item, key) => {
|
||||||
return (
|
return (
|
||||||
<div className="p-r-Item" key={key}>
|
<div className="p-r-Item" key={key}>
|
||||||
{
|
{
|
||||||
item.platform === "educoder" ?
|
item.platform === "educoder" ?
|
||||||
<a href="javascript:void(0)" style={{cursor:"default"}} className="show-user-link">
|
<a style={{cursor:"default"}} className="show-user-link">
|
||||||
<img className="p-r-photo" alt="" src={item.author && item.author.image_url} ></img>
|
<img className="p-r-photo" alt="" src={item.author && item.author.image_url} ></img>
|
||||||
</a>
|
</a>
|
||||||
:
|
:
|
||||||
<Link to={`/users/${item.author.login}`} className="show-user-link">
|
<Link to={`/users/${item.author.login}`} className="show-user-link">
|
||||||
<img className="p-r-photo" alt="" src={getImageUrl(`${item.author && item.author.image_url}`)} ></img>
|
<img className="p-r-photo" alt="" src={getImageUrl(`${item.author && item.author.image_url}`)} ></img>
|
||||||
</Link>
|
</Link>
|
||||||
}
|
}
|
||||||
<div className="p-r-Infos">
|
<div className="p-r-Infos">
|
||||||
<div className="p-r-name">
|
<div className="p-r-name">
|
||||||
<Link to={`/projects/${item.author.login}/${item.identifier}`} className="hide-1 color-grey-3 font-18 task-hide " style={{ whiteSpace: "wrap", display: 'flex', width: 400 }}>
|
<a onClick={()=>this.projectHref(`/projects/${item.author.login}/${item.identifier}`,item.user_apply_signatures, item.id,item.is_secret,item.author.login,item.is_member)} className="hide-1 color-grey-3 font-18 task-hide fwt-500 " style={{ whiteSpace: "wrap", display: 'flex', width: 400 }}>
|
||||||
{item.author.name}/{item.name}
|
{item.author.name}/{item.name}
|
||||||
{
|
{
|
||||||
item.forked_from_project_id ?
|
item.forked_from_project_id ?
|
||||||
<span className="ml5">
|
|
||||||
<i className="iconfont icon-fork font-18 color-orange" />
|
|
||||||
</span>
|
|
||||||
: ""
|
|
||||||
}
|
|
||||||
{
|
|
||||||
item.type && item.type !== 0 ?
|
|
||||||
item.type === 2 ?
|
|
||||||
<Tooltip title="该项目是一个镜像" className="ml5">
|
|
||||||
<i className="iconfont icon-banbenku font-18 color-green" />
|
|
||||||
</Tooltip>:
|
|
||||||
<span className="ml5">
|
<span className="ml5">
|
||||||
<i className="iconfont icon-jingxiang font-18 color-green" />
|
<i className="iconfont icon-fork font-18 color-orange" />
|
||||||
</span>:""
|
</span>
|
||||||
}
|
: ""
|
||||||
</Link>
|
}
|
||||||
<span className="p-r-tags">
|
{
|
||||||
<span className="pariseTag"><img src={img_parise} alt="" className="pariseImg" />赞 {item.praises_count}</span>
|
item.type && item.type !== 0 ?
|
||||||
<span><i className="iconfont icon-fork mr3 font-16" style={{ color: "#1B8FFF" }} />fork {item.forked_count}</span>
|
item.type === 2 ?
|
||||||
</span>
|
<Tooltip title="该项目是一个镜像" className="ml5">
|
||||||
</div>
|
<i className="iconfont icon-banbenku font-18 color-green" />
|
||||||
<p className="break_word task-hide-2 mt10" style={{ maxHeight: "44px",lineHeight:"22px" }}>{item.description}</p>
|
</Tooltip>:
|
||||||
|
<span className="ml5">
|
||||||
|
<i className="iconfont icon-jingxiang font-18 color-green" />
|
||||||
|
</span>:""
|
||||||
|
}
|
||||||
|
</a>
|
||||||
|
<span className="p-r-tags">
|
||||||
|
<span className="pariseTag"><img src={img_parise} alt="" className="pariseImg" />赞 {item.praises_count}</span>
|
||||||
|
<span><i className="iconfont icon-fork mr3 font-16" style={{ color: "#1B8FFF" }} />fork {item.forked_count}</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<p className="break_word task-hide-2 mt8 color-grey-3 " style={{ maxHeight: "44px",lineHeight:"22px" }}>{item.description}</p>
|
||||||
|
|
||||||
<div className="p-r-about">
|
<div className="p-r-about">
|
||||||
<span className="p-r-detail">
|
<span className="p-r-detail">
|
||||||
{/* <span><label>浏览量:</label>{item.visits}</span> */}
|
{/* <span><label>浏览量:</label>{item.visits}</span> */}
|
||||||
{/* {item.category && item.category.id && <span>{item.category.name}</span>} */}
|
{/* {item.category && item.category.id && <span>{item.category.name}</span>} */}
|
||||||
{item.last_update_time ? <span><label>更新于</label>{item.time_ago}</span> : ""}
|
{item.last_update_time ? <span><label>更新于</label>{item.time_ago}</span> : ""}
|
||||||
{item.language && item.language.id ? <span className="color-grey-3">{item.language.name}</span> : ""}
|
{item.language && item.language.id ? <span className="color-grey-3">{item.language.name}</span> : ""}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
</div>
|
||||||
}) : <Nodata _html="暂无数据~"></Nodata>}
|
)
|
||||||
|
}) : <Nodata _html="暂无数据~"></Nodata>
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
<div className="project-list minH-670">
|
||||||
|
<SpecialModal {...this.props} visible={visible} hideModal={this.hideModal} user_apply_signatures={user_apply_signatures} project_id={project_id} sureModal={this.sureModal}></SpecialModal>
|
||||||
|
{renderList}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
import React , { useEffect , useState } from 'react';
|
||||||
|
import { Modal } from 'antd';
|
||||||
|
import UploadSingle from '../Upload/single';
|
||||||
|
import './Index.scss';
|
||||||
|
import axios from 'axios';
|
||||||
|
import { getUrl } from 'educoder';
|
||||||
|
|
||||||
|
function SpecialModal({ visible , hideModal , sureModal , showNotification , user_apply_signatures , project_id }){
|
||||||
|
const [ id ,setId ] = useState(undefined);
|
||||||
|
|
||||||
|
|
||||||
|
function loadFunc(id){
|
||||||
|
setId(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sure(){
|
||||||
|
if(!user_apply_signatures || (user_apply_signatures && user_apply_signatures.status !== "waiting")){
|
||||||
|
if(!id || (id && id.length === 0)){
|
||||||
|
showNotification("请先提交文件进行审核!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const url = `/apply_signatures.json`;
|
||||||
|
axios.post(url,{
|
||||||
|
attachment_id:id,
|
||||||
|
project_id:project_id
|
||||||
|
}).then(result=>{
|
||||||
|
if(result && result.data.id){
|
||||||
|
showNotification("已提交文件,正在等待审核!");
|
||||||
|
sureModal();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
sureModal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(
|
||||||
|
<Modal title="提示" visible={visible} closable={false} onCancel={hideModal} onOk={sure}>
|
||||||
|
{
|
||||||
|
!user_apply_signatures || (user_apply_signatures && user_apply_signatures.status !== "waiting") ?
|
||||||
|
<div style={{width:"420px",textAlign:'center',margin:"0 auto",paddingBottom:"30px",position:"relative"}}>
|
||||||
|
<div>该项目为私有项目,请先<a href={getUrl(`/api/apply_signatures/template_file`)} className="color-blue">下载</a>开源协议,阅读并填写<br/>相关信息后,将协议<UploadSingle size={"5"} load={loadFunc} showNotification={showNotification} className={'singleBtn'}><span className="color-blue" style={{cursor:"pointer"}}>上传</span></UploadSingle>,平台审核通过后即可进入当前项目</div>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<p style={{textAlign:'center'}}>您上传的文件正在审核中,通过后才能访问当前项目</p>
|
||||||
|
}
|
||||||
|
</Modal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default SpecialModal;
|
|
@ -208,9 +208,7 @@
|
||||||
}
|
}
|
||||||
/* -----------详情------------ */
|
/* -----------详情------------ */
|
||||||
.detailHeader-wrapper{
|
.detailHeader-wrapper{
|
||||||
background-color:#FAFBFC;
|
background:linear-gradient(82deg,rgba(82,91,215,1) 0%,rgba(34,24,171,1) 100%);
|
||||||
/* background: url(../Images/forgeBanner.jpg) no-repeat center; */
|
|
||||||
/* background-size:cover; */
|
|
||||||
}
|
}
|
||||||
.headerMenu-wrapper{
|
.headerMenu-wrapper{
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -222,36 +220,42 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
margin-right: 40px;
|
border:1px solid transparent;
|
||||||
|
}
|
||||||
|
.headerMenu-wrapper{
|
||||||
|
font-size: 16px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
.headerMenu-wrapper li{
|
||||||
|
padding:0px 18px;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
.headerMenu-wrapper li a{
|
.headerMenu-wrapper li a{
|
||||||
color: #666;
|
color: #fff;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
.headerMenu-wrapper li a > img{
|
.headerMenu-wrapper li a > img{
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
.headerMenu-wrapper li a > span.num{
|
.headerMenu-wrapper li a > span{
|
||||||
height: 28px;
|
display: block;
|
||||||
line-height: 29px;
|
margin-left: 5px;
|
||||||
margin-left: 8px;
|
font-size: 16px;
|
||||||
font-size: 12px;
|
|
||||||
color: #2878FF;
|
|
||||||
float: right;
|
|
||||||
}
|
}
|
||||||
.headerMenu-wrapper li.active::after{
|
.headerMenu-wrapper li.active{
|
||||||
position: absolute;
|
border-radius: 15px;
|
||||||
bottom:0px;
|
border:1px solid #71A6FF;
|
||||||
height:2px;
|
|
||||||
background-color: #5091FF;
|
|
||||||
content:'';
|
|
||||||
left: 0px;
|
|
||||||
width:100%;
|
|
||||||
}
|
}
|
||||||
.detail_tag_btn{
|
.detail_tag_btn{
|
||||||
height:26px;
|
height:26px;
|
||||||
line-height: 26px;
|
line-height: 26px;
|
||||||
border-radius:5px;
|
border-radius:5px;
|
||||||
border:1px solid #f1f1f1;
|
border:1px solid #71A6FF;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-left: 30px
|
margin-left: 30px
|
||||||
|
@ -259,19 +263,26 @@
|
||||||
.ant-tooltip {
|
.ant-tooltip {
|
||||||
max-width: fit-content!important;
|
max-width: fit-content!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail_tag_btn_name{
|
.detail_tag_btn_name{
|
||||||
padding:0px 10px;
|
padding:0px 10px;
|
||||||
color: #666!important;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #fff;
|
||||||
}
|
}
|
||||||
.detail_tag_btn_name img{
|
.detail_tag_btn_name img{
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
.detail_tag_btn_count{
|
.detail_tag_btn_count{
|
||||||
padding:0px 10px;
|
padding:0px 10px;
|
||||||
background: #fff;
|
color: #fff !important;
|
||||||
|
background: rgba(255,255,255,0.2);
|
||||||
border-radius: 0px 4px 4px 0px;
|
border-radius: 0px 4px 4px 0px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
height:100%;
|
}
|
||||||
|
.detail_tag_btn_count:hover{
|
||||||
|
/* color: #1C91FF !important; */
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
}
|
}
|
||||||
.files-md{
|
.files-md{
|
||||||
border:1px solid #eee;
|
border:1px solid #eee;
|
||||||
|
|
|
@ -47,7 +47,7 @@ function Files({data,history,owner,projectsId}){
|
||||||
<span>{item.name}</span>
|
<span>{item.name}</span>
|
||||||
</AlignCenter>
|
</AlignCenter>
|
||||||
<span>
|
<span>
|
||||||
<Button className="mr20" onClick={()=>{history.push(`/projects/${owner}/${projectsId}${item.sha ? `/branch/${truncateCommitId(item.sha)}/`:"/"}tree/${item.name}`)}}>查看文件</Button>
|
<Button className="mr20" onClick={()=>{history.push(`/projects/${owner}/${projectsId}/tree/${truncateCommitId(item.sha)}/${item.name}`)}}>查看文件</Button>
|
||||||
<span className="color-green">+{item.addition}</span>
|
<span className="color-green">+{item.addition}</span>
|
||||||
<span className="color-red ml20">-{item.deletion}</span>
|
<span className="color-red ml20">-{item.deletion}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -43,7 +43,9 @@ class Index extends Component {
|
||||||
project_language_name: undefined,
|
project_language_name: undefined,
|
||||||
project_category_name: undefined,
|
project_category_name: undefined,
|
||||||
license_name: undefined,
|
license_name: undefined,
|
||||||
ignore_name: undefined
|
ignore_name: undefined,
|
||||||
|
|
||||||
|
licenseForDisabled:undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
componentDidMount = () => {
|
componentDidMount = () => {
|
||||||
|
@ -145,7 +147,7 @@ class Index extends Component {
|
||||||
_data = data.filter(item => item.name.toLowerCase().indexOf(name.toLowerCase()) > -1);
|
_data = data.filter(item => item.name.toLowerCase().indexOf(name.toLowerCase()) > -1);
|
||||||
}
|
}
|
||||||
let list = _data && _data.map((item) => (
|
let list = _data && _data.map((item) => (
|
||||||
<Option key={item.id} value={item.name}>
|
<Option key={item.id} value={item.name} onClick={()=>this.selectSerect(item.is_secret)}>
|
||||||
{item.name}
|
{item.name}
|
||||||
</Option>
|
</Option>
|
||||||
));
|
));
|
||||||
|
@ -155,6 +157,17 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectSerect=(flag)=>{
|
||||||
|
if(flag){
|
||||||
|
this.props.form.setFieldsValue({
|
||||||
|
private:true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.setState({
|
||||||
|
licenseForDisabled:flag
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
subMitFrom = () => {
|
subMitFrom = () => {
|
||||||
this.props.form.validateFieldsAndScroll((err, values) => {
|
this.props.form.validateFieldsAndScroll((err, values) => {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
@ -198,7 +211,8 @@ class Index extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
ChangePlatform = (value, e, name, list) => {
|
ChangePlatform = (value, e, name, list) => {
|
||||||
this.setOptionsList(list, name, value)
|
this.setOptionsList(list, name, value);
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
[name + "_id"]: e.key,
|
[name + "_id"]: e.key,
|
||||||
[name + "_name"]: value,
|
[name + "_name"]: value,
|
||||||
|
@ -272,6 +286,7 @@ class Index extends Component {
|
||||||
project_category_list,
|
project_category_list,
|
||||||
license_list,
|
license_list,
|
||||||
ignore_list,
|
ignore_list,
|
||||||
|
licenseForDisabled,
|
||||||
|
|
||||||
mirrorCheck
|
mirrorCheck
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
@ -477,8 +492,8 @@ class Index extends Component {
|
||||||
style={{ margin: "0px" }}
|
style={{ margin: "0px" }}
|
||||||
className="privatePart"
|
className="privatePart"
|
||||||
>
|
>
|
||||||
{getFieldDecorator('private')(
|
{getFieldDecorator('private',{valuePropName:"checked"})(
|
||||||
<Checkbox value="limit">将项目设为私有<span className="ml15 font-13 color-grey-9">(只有项目所有人或拥有权限的项目成员才能看到)</span></Checkbox>
|
<Checkbox value="limit" disabled={licenseForDisabled}>将项目设为私有<span className="ml15 font-13 color-grey-9">(只有项目所有人或拥有权限的项目成员才能看到)</span></Checkbox>
|
||||||
)}
|
)}
|
||||||
</Form.Item >
|
</Form.Item >
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,8 +15,8 @@ const MENU_LIST = [
|
||||||
function CollaboratorMember({projectsId,owner,project_id,author,showNotification,newId}){
|
function CollaboratorMember({projectsId,owner,project_id,author,showNotification,newId}){
|
||||||
const [ roleName , setRoleName ] = useState(undefined);
|
const [ roleName , setRoleName ] = useState(undefined);
|
||||||
const [ search , setSearch ] = useState(undefined);
|
const [ search , setSearch ] = useState(undefined);
|
||||||
const [ page , setPage ] = useState(undefined);
|
const [ page , setPage ] = useState(1);
|
||||||
const [ isSpin , setIsSpin ] = useState(false);
|
const [ isSpin , setIsSpin ] = useState(true);
|
||||||
const [ role , setRole ] = useState(undefined);
|
const [ role , setRole ] = useState(undefined);
|
||||||
const [ listData , setListData ] = useState(undefined);
|
const [ listData , setListData ] = useState(undefined);
|
||||||
const [ total , setTotal ] = useState(0);
|
const [ total , setTotal ] = useState(0);
|
||||||
|
@ -166,7 +166,11 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification
|
||||||
<label className={get_color(item.role)}>
|
<label className={get_color(item.role)}>
|
||||||
{operation && operation[0].name}
|
{operation && operation[0].name}
|
||||||
</label>
|
</label>
|
||||||
) : (
|
)
|
||||||
|
:
|
||||||
|
item.is_apply_signature ?
|
||||||
|
<label className="text-grey">外围贡献者</label>
|
||||||
|
:(
|
||||||
<Dropdown overlay={setRoles(`${item.id}`)} placement={"bottomCenter"}>
|
<Dropdown overlay={setRoles(`${item.id}`)} placement={"bottomCenter"}>
|
||||||
<span className={get_color(item.role)}>
|
<span className={get_color(item.role)}>
|
||||||
{operation && operation[0].name}
|
{operation && operation[0].name}
|
||||||
|
@ -261,14 +265,8 @@ function CollaboratorMember({projectsId,owner,project_id,author,showNotification
|
||||||
</div>
|
</div>
|
||||||
</Spin>
|
</Spin>
|
||||||
{total > LIMIT ?
|
{total > LIMIT ?
|
||||||
<div className="edu-txt-center mt20 mb20">
|
<div className="edu-txt-center mt20 pb20">
|
||||||
<Pagination
|
<Pagination simple current={page} pageSize={LIMIT} total={total} onChange={(page)=>setPage(page)}/>
|
||||||
showQuickJumper
|
|
||||||
pageSize={LIMIT}
|
|
||||||
current={page}
|
|
||||||
total={total}
|
|
||||||
onChange={()=>setPage(page)}
|
|
||||||
></Pagination>
|
|
||||||
</div>
|
</div>
|
||||||
:""}
|
:""}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
|
|
|
@ -28,6 +28,10 @@ const Tags = Loadable({
|
||||||
loader: () => import("./new_tags"),
|
loader: () => import("./new_tags"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
});
|
});
|
||||||
|
const Special = Loadable({
|
||||||
|
loader: () => import("./SpecialProject"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
const Manage = Loadable({
|
const Manage = Loadable({
|
||||||
loader: () => import("./ManageWeb"),
|
loader: () => import("./ManageWeb"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
|
@ -40,6 +44,7 @@ class Index extends Component {
|
||||||
render() {
|
render() {
|
||||||
const { projectsId , owner } = this.props.match.params;
|
const { projectsId , owner } = this.props.match.params;
|
||||||
const { pathname } = this.props.history.location;
|
const { pathname } = this.props.history.location;
|
||||||
|
const { projectDetail } = this.props;
|
||||||
|
|
||||||
const flag = pathname === `/projects/${owner}/${projectsId}/setting`;
|
const flag = pathname === `/projects/${owner}/${projectsId}/setting`;
|
||||||
return (
|
return (
|
||||||
|
@ -87,6 +92,20 @@ class Index extends Component {
|
||||||
</Link>
|
</Link>
|
||||||
</p>
|
</p>
|
||||||
</li>
|
</li>
|
||||||
|
{
|
||||||
|
projectDetail && projectDetail.permission && (projectDetail.permission === "Owner" || projectDetail.permission === "Admin") ?
|
||||||
|
<li
|
||||||
|
className={pathname.indexOf("setting/special") > -1 ? "active" : ""}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<Link to={`/projects/${owner}/${projectsId}/setting/special`} className="w-100">
|
||||||
|
<i className="iconfont icon-jingyan font-18 mr10"></i>
|
||||||
|
特殊开源许可证项目管理
|
||||||
|
</Link>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
:""
|
||||||
|
}
|
||||||
|
|
||||||
{/* <li
|
{/* <li
|
||||||
className={
|
className={
|
||||||
|
@ -112,7 +131,15 @@ class Index extends Component {
|
||||||
<Collaborator {...this.props} {...props} {...this.state} />
|
<Collaborator {...this.props} {...props} {...this.state} />
|
||||||
)}
|
)}
|
||||||
></Route>
|
></Route>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path="/projects/:owner/:projectsId/setting/special"
|
||||||
|
render={(props) => (
|
||||||
|
<Special {...this.props} {...props} {...this.state} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
{/* 修改仓库信息 */}
|
{/* 修改仓库信息 */}
|
||||||
|
|
||||||
<Route
|
<Route
|
||||||
path="/projects/:owner/:projectsId/setting/tags"
|
path="/projects/:owner/:projectsId/setting/tags"
|
||||||
render={(props) => (
|
render={(props) => (
|
||||||
|
|
|
@ -15,6 +15,7 @@ class Setting extends Component {
|
||||||
CategoryList: undefined,
|
CategoryList: undefined,
|
||||||
LanguageList: undefined,
|
LanguageList: undefined,
|
||||||
private_check: undefined,
|
private_check: undefined,
|
||||||
|
is_secret:false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,10 +53,11 @@ class Setting extends Component {
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
if (result) {
|
if (result) {
|
||||||
this.props.form.setFieldsValue({
|
this.props.form.setFieldsValue({
|
||||||
...result.data,
|
...result.data
|
||||||
});
|
});
|
||||||
this.setState({
|
this.setState({
|
||||||
private_check: result.data.private,
|
private_check: result.data.private,
|
||||||
|
is_secret:result.data.is_secret
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -152,7 +154,7 @@ class Setting extends Component {
|
||||||
render() {
|
render() {
|
||||||
const { getFieldDecorator } = this.props.form;
|
const { getFieldDecorator } = this.props.form;
|
||||||
|
|
||||||
const { CategoryList, LanguageList, private_check } = this.state;
|
const { CategoryList, LanguageList, private_check , is_secret } = this.state;
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<WhiteBack style={{paddingBottom:"20px"}}>
|
<WhiteBack style={{paddingBottom:"20px"}}>
|
||||||
|
@ -177,6 +179,7 @@ class Setting extends Component {
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={private_check}
|
checked={private_check}
|
||||||
onChange={this.changePrivate}
|
onChange={this.changePrivate}
|
||||||
|
disabled={is_secret}
|
||||||
>
|
>
|
||||||
将仓库设为私有
|
将仓库设为私有
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
|
|
|
@ -0,0 +1,186 @@
|
||||||
|
import React , { useEffect , useState} from 'react';
|
||||||
|
import { Input , Table , Pagination, Button , Dropdown , Menu } from 'antd';
|
||||||
|
import { Banner , WhiteBack , AlignCenterBetween } from '../Component/layout';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
const { Search } = Input;
|
||||||
|
|
||||||
|
const LIMIT = 15;
|
||||||
|
function SpecialProject(props){
|
||||||
|
const [ page , setPage] = useState(1);
|
||||||
|
const [ searchValue , SetSearchValue ] = useState(undefined);
|
||||||
|
const [ total , setTotal ] = useState(0);
|
||||||
|
const [ list , setList ] = useState(undefined);
|
||||||
|
const [ status , setStatus ] = useState(undefined);
|
||||||
|
const [ loading ,setLoading ] = useState(true);
|
||||||
|
|
||||||
|
const { owner , projectsId} = props.match.params;
|
||||||
|
const { project_id } = props;
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
if(project_id){
|
||||||
|
setLoading(true);
|
||||||
|
Init(searchValue, status);
|
||||||
|
}
|
||||||
|
},[page,project_id]);
|
||||||
|
|
||||||
|
function Init(search,status){
|
||||||
|
const url = `/apply_signatures.json`;
|
||||||
|
axios.get(url,{
|
||||||
|
params:{
|
||||||
|
project_id,
|
||||||
|
page,limit:LIMIT,search,status
|
||||||
|
}
|
||||||
|
}).then(result=>{
|
||||||
|
setLoading(false);
|
||||||
|
if(result){
|
||||||
|
setList(result.data.apply_signatures);
|
||||||
|
setTotal(result.data.total_count);
|
||||||
|
}
|
||||||
|
}).catch(error=>{})
|
||||||
|
}
|
||||||
|
|
||||||
|
function changePage(page){
|
||||||
|
setLoading(true);
|
||||||
|
setPage(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
const column = [
|
||||||
|
{
|
||||||
|
dataIndex:"column",
|
||||||
|
key:1,
|
||||||
|
width:"12%",
|
||||||
|
title:"序号",
|
||||||
|
render:(txt,item,index)=>{
|
||||||
|
return `${index+1}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex:"name",
|
||||||
|
key:2,
|
||||||
|
title:"申请人",
|
||||||
|
render:(text,item,m)=>{
|
||||||
|
return item.user && <span className="task-hide" style={{maxWidth:"139px",display:"block"}}>{item.user.name}</span>
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex:"email",
|
||||||
|
key:2,
|
||||||
|
title:"邮箱",
|
||||||
|
width:"22%",
|
||||||
|
render:(text,item,m)=>{
|
||||||
|
return item.user && <span>{item.user.email}</span>
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex:"attachment",
|
||||||
|
key:3,
|
||||||
|
title:"附件",
|
||||||
|
width:"28%",
|
||||||
|
render:(text,item,m)=>{
|
||||||
|
return item.attachment && <a className="task-hide" style={{maxWidth:"173px",display:"block"}} href={`${item.attachment.path}`}>{item.attachment.filename}</a>
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex:"operation",
|
||||||
|
key:4,
|
||||||
|
width:"18%",
|
||||||
|
title:"操作",
|
||||||
|
render:(text, item) =>{
|
||||||
|
return(
|
||||||
|
<React.Fragment>
|
||||||
|
{
|
||||||
|
item.status === "waiting" &&
|
||||||
|
<span>
|
||||||
|
<Button size="small" onClick={()=>operation(item.id,"unpassed")}>拒绝</Button>
|
||||||
|
<Button size="small" onClick={()=>operation(item.id,"passed")} type={"primary"} className="ml20">同意</Button>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
item.status === "unpassed" &&
|
||||||
|
<span style={{color:"#ff041c"}}>已拒绝</span>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
item.status === "passed" &&
|
||||||
|
<span style={{color:"#13b4f1"}}>已同意</span>
|
||||||
|
}
|
||||||
|
</React.Fragment>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
// 拒绝&同意
|
||||||
|
function operation(ids,s){
|
||||||
|
setLoading(true);
|
||||||
|
const url = `/apply_signatures/${ids}.json`;
|
||||||
|
axios.put(url,{
|
||||||
|
project_id:project_id,
|
||||||
|
status:s
|
||||||
|
}).then(result=>{
|
||||||
|
setLoading(false);
|
||||||
|
if(result){
|
||||||
|
props.showNotification(`${s==="passed"?"同意":"拒绝"}此申请已操作成功!`);
|
||||||
|
Init(searchValue,status);
|
||||||
|
}
|
||||||
|
}).catch(error=>{setLoading(false)})
|
||||||
|
}
|
||||||
|
|
||||||
|
function searchList(){
|
||||||
|
setLoading(true);
|
||||||
|
Init(searchValue,status);
|
||||||
|
}
|
||||||
|
|
||||||
|
const menu=(
|
||||||
|
<Menu onClick={chooseStatus}>
|
||||||
|
<Menu.Item key="all">全部</Menu.Item>
|
||||||
|
<Menu.Item key="waiting">审核中</Menu.Item>
|
||||||
|
<Menu.Item key="unpassed">已拒绝</Menu.Item>
|
||||||
|
<Menu.Item key="passed">已同意</Menu.Item>
|
||||||
|
</Menu>
|
||||||
|
)
|
||||||
|
|
||||||
|
function chooseStatus(e){
|
||||||
|
setStatus(e.key);
|
||||||
|
Init(searchValue, e.key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return(
|
||||||
|
<WhiteBack style={{minHeight:"500px"}}>
|
||||||
|
<Banner>项目管理</Banner>
|
||||||
|
<AlignCenterBetween style={{padding:"10px 20px",textAlign:"right"}}>
|
||||||
|
<Search
|
||||||
|
placeholder="请输入用户姓名或者邮箱搜索"
|
||||||
|
allowClear
|
||||||
|
enterButton="搜索"
|
||||||
|
style={{width:400}}
|
||||||
|
size="middle"
|
||||||
|
value={searchValue}
|
||||||
|
onChange={(e)=>SetSearchValue(e.target.value)}
|
||||||
|
onSearch={searchList}
|
||||||
|
/>
|
||||||
|
<Dropdown overlay={menu} placement="bottomRight">
|
||||||
|
<span>
|
||||||
|
<span style={{color:status ? "color-blue" : "color-grey-3"}}>{status ==="waiting"?"审核中":status==="unpassed"?"已拒绝":status==="passed"?"已同意":"全部"}</span>
|
||||||
|
<i className="iconfont icon-xiajiantou color-grey-9 font-14 ml8"></i>
|
||||||
|
</span>
|
||||||
|
</Dropdown>
|
||||||
|
</AlignCenterBetween>
|
||||||
|
<Table
|
||||||
|
columns={column}
|
||||||
|
rowKey={(record) => record.id}
|
||||||
|
pagination={false}
|
||||||
|
dataSource={list}
|
||||||
|
loading={loading}
|
||||||
|
></Table>
|
||||||
|
{
|
||||||
|
total > LIMIT &&
|
||||||
|
<div className="center mt20 mb20">
|
||||||
|
<Pagination simple current={page} total={total} pageSize={LIMIT} onChange={changePage}></Pagination>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
</WhiteBack>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default SpecialProject;
|
|
@ -139,6 +139,7 @@
|
||||||
.padding15-10{
|
.padding15-10{
|
||||||
padding:15px 10px;
|
padding:15px 10px;
|
||||||
}
|
}
|
||||||
|
.center{text-align: center;}
|
||||||
.w-100{width: 100%;}
|
.w-100{width: 100%;}
|
||||||
.fwb{font-weight: 600;}
|
.fwb{font-weight: 600;}
|
||||||
.text-black{color: #333;}
|
.text-black{color: #333;}
|
||||||
|
@ -151,6 +152,9 @@
|
||||||
.text-yellow{color: #FF6E21 !important;}
|
.text-yellow{color: #FF6E21 !important;}
|
||||||
.text-delete{color: #BBBBBB; }
|
.text-delete{color: #BBBBBB; }
|
||||||
.text-delete:hover{color: #db2828; }
|
.text-delete:hover{color: #db2828; }
|
||||||
|
.text-grey{
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
.new-tag-div{
|
.new-tag-div{
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
height: 75px;
|
height: 75px;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Upload, Button, Icon } from 'antd';
|
import { Upload , Icon } from 'antd';
|
||||||
import { getUploadActionUrl, appendFileSizeToUploadFileAll } from 'educoder';
|
import { getUploadActionUrl, appendFileSizeToUploadFileAll } from 'educoder';
|
||||||
|
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
@ -45,8 +45,7 @@ class Index extends Component {
|
||||||
deleteAttachment = (file) => {
|
deleteAttachment = (file) => {
|
||||||
|
|
||||||
const url = `/attachments/${file.response ? file.response.id : file.uid}.json`
|
const url = `/attachments/${file.response ? file.response.id : file.uid}.json`
|
||||||
axios.delete(url, {
|
axios.delete(url).then((response) => {
|
||||||
}).then((response) => {
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
if (response.data.status === 0) {
|
if (response.data.status === 0) {
|
||||||
this.setState((state) => {
|
this.setState((state) => {
|
||||||
|
@ -71,11 +70,26 @@ class Index extends Component {
|
||||||
handleChange = (info) => {
|
handleChange = (info) => {
|
||||||
const { changeIsComplete } = this.props;
|
const { changeIsComplete } = this.props;
|
||||||
changeIsComplete && changeIsComplete(true);
|
changeIsComplete && changeIsComplete(true);
|
||||||
|
|
||||||
if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') {
|
if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') {
|
||||||
let fileList = info.fileList;
|
let fileList = info.fileList;
|
||||||
|
|
||||||
this.setState({ fileList: appendFileSizeToUploadFileAll(fileList) });
|
this.setState({ fileList: appendFileSizeToUploadFileAll(fileList) });
|
||||||
this.fileIdList(fileList);
|
this.fileIdList(fileList);
|
||||||
|
|
||||||
|
if ( info.file.status === 'done') {
|
||||||
|
let filelist = info.fileList && info.fileList.length>0 && info.fileList[info.fileList.length-1];
|
||||||
|
if(filelist && filelist.response && filelist.response.status === -1){
|
||||||
|
this.props.showNotification(filelist.response.message)
|
||||||
|
this.setState((state) => {
|
||||||
|
state.fileList.pop()
|
||||||
|
return {
|
||||||
|
fileList: state.fileList,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this.fileIdList(this.state.fileList);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
import React, { useEffect , useState } from "react";
|
||||||
|
import { Upload } from 'antd';
|
||||||
|
import { getUploadActionUrl, appendFileSizeToUploadFileAll } from 'educoder';
|
||||||
|
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
function Single({ children , showNotification , className , load , size }) {
|
||||||
|
const [ fileList , setFileList ] = useState(undefined);
|
||||||
|
// 移除
|
||||||
|
function onAttachmentRemove(file){
|
||||||
|
if (!file.percent || file.percent === 100) {
|
||||||
|
deleteAttachment(file);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAttachment(file){
|
||||||
|
let uid = file.response ? file.response.id : file.uid;
|
||||||
|
const url = `/attachments/${uid}.json`
|
||||||
|
axios.delete(url).then((response) => {
|
||||||
|
if (response.data && response.data.status === 0) {
|
||||||
|
let list = fileList.filter(item=> item.response && item.response.id !== uid);
|
||||||
|
setFileList(list);
|
||||||
|
fileIdList(list);
|
||||||
|
}
|
||||||
|
}).catch(error=>{});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function handleChange(info){
|
||||||
|
if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') {
|
||||||
|
let fileList = [info.file];
|
||||||
|
|
||||||
|
let list = appendFileSizeToUploadFileAll(fileList);
|
||||||
|
setFileList(list);
|
||||||
|
if ( info.file.status === 'done') {
|
||||||
|
let f = info.fileList && info.fileList.length>0 && info.fileList[info.fileList.length-1];
|
||||||
|
if(f && f.response && f.response.status === -1){
|
||||||
|
showNotification(f.response.message)
|
||||||
|
setFileList(f);
|
||||||
|
}
|
||||||
|
fileIdList(fileList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fileIdList(fileList){
|
||||||
|
let l = fileList && fileList.length > 0 && fileList[0];
|
||||||
|
let array = [l && l.response && l.response.id];
|
||||||
|
load && load(array);
|
||||||
|
}
|
||||||
|
|
||||||
|
function beforeUpload(file){
|
||||||
|
if(!size) return;
|
||||||
|
const isLt100M = file.size / 1024 / 1024 < size;
|
||||||
|
if (!isLt100M) {
|
||||||
|
showNotification(`文件大小必须小于${size}MB!`);
|
||||||
|
}
|
||||||
|
return isLt100M;
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断是否已经提交,如已提交评论则上一条评论数据清除
|
||||||
|
const upload = {
|
||||||
|
name: 'file',
|
||||||
|
fileList: fileList,
|
||||||
|
action: `${getUploadActionUrl()}`,
|
||||||
|
onChange: handleChange,
|
||||||
|
onRemove: onAttachmentRemove,
|
||||||
|
beforeUpload: beforeUpload
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Upload {...upload} className={className}>
|
||||||
|
{children}
|
||||||
|
</Upload>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default Single;
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
1.请求URL: https://code.ihub.org.cn/api/v1/mirrors/create.json
|
|
||||||
|
|
||||||
2.请求方式: POST
|
|
||||||
|
|
||||||
3.参数:
|
|
||||||
|
|
||||||
{
|
|
||||||
"image_url": "xxx.git", #必填,且后缀必为.git,
|
|
||||||
"language": "Ruby", #必填,如数据库不存在,则会创建新的记录
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
4. 返回值: {
|
|
||||||
"status": 1,
|
|
||||||
"message": "同步成功,项目ID===1806"
|
|
||||||
}
|
|
||||||
|
|
||||||
5. 返回值说明: 仅有当有返回值,且返回值的status 的值为1, 才是创建成功,其余均为创建失败
|
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,9 @@
|
||||||
.text-yellow{
|
.text-yellow{
|
||||||
color: #FFA802 !important
|
color: #FFA802 !important
|
||||||
}
|
}
|
||||||
|
.text-grey{
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
.text-gray {
|
.text-gray {
|
||||||
color: #888888;
|
color: #888888;
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,12 @@ form{
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
&>li{
|
.list-affix{
|
||||||
|
min-height: 20px;
|
||||||
|
max-height: 180px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
& li{
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
padding:0px 0px 0px 20px;
|
padding:0px 0px 0px 20px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
|
@ -6,7 +6,6 @@ import { withRouter } from "react-router";
|
||||||
import { SnackbarHOC } from "educoder";
|
import { SnackbarHOC } from "educoder";
|
||||||
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
import { CNotificationHOC } from "../../modules/courses/common/CNotificationHOC";
|
||||||
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
import { TPMIndexHOC } from "../../modules/tpm/TPMIndexHOC";
|
||||||
import Handbook from '../Component/Handbook';
|
|
||||||
const Infos = Loadable({
|
const Infos = Loadable({
|
||||||
loader: () => import("./Infos"),
|
loader: () => import("./Infos"),
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
|
@ -15,7 +14,6 @@ export default withRouter(
|
||||||
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{
|
(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC((props)=>{
|
||||||
return(
|
return(
|
||||||
<div>
|
<div>
|
||||||
<Handbook />
|
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route
|
<Route
|
||||||
path="/users/:username"
|
path="/users/:username"
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import React, { Component } from "react";
|
import React, { Component } from "react";
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import { Avatar, Tag, Button, Spin } from "antd";
|
import { Avatar, Tag, Button, Spin } from "antd";
|
||||||
import FocusButton from "../UsersList/focus_button";
|
import FocusButton from "../UsersList/focus_button";
|
||||||
|
|
||||||
|
@ -52,7 +51,7 @@ class Infos extends Component {
|
||||||
isSpin: false,
|
isSpin: false,
|
||||||
user: undefined,
|
user: undefined,
|
||||||
project_type: undefined,
|
project_type: undefined,
|
||||||
route_type: undefined
|
route_type: undefined,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +137,7 @@ class Infos extends Component {
|
||||||
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { current_user, mygetHelmetapi } = this.props;
|
const { current_user, main_web_site_url } = this.props;
|
||||||
const { username } = this.props.match.params;
|
const { username } = this.props.match.params;
|
||||||
|
|
||||||
const { user, isSpin, project_type, route_type } = this.state;
|
const { user, isSpin, project_type, route_type } = this.state;
|
||||||
|
@ -147,7 +146,7 @@ class Infos extends Component {
|
||||||
<Spin spinning={isSpin}>
|
<Spin spinning={isSpin}>
|
||||||
<div className="new-content-flex">
|
<div className="new-content-flex">
|
||||||
<div className="list-left">
|
<div className="list-left">
|
||||||
<div className="bgcF">
|
<div className="bgcF mb20">
|
||||||
<div className="list-l-Menu text-center pd20 ">
|
<div className="list-l-Menu text-center pd20 ">
|
||||||
<Avatar
|
<Avatar
|
||||||
size={110}
|
size={110}
|
||||||
|
@ -168,11 +167,7 @@ class Infos extends Component {
|
||||||
<Button
|
<Button
|
||||||
block
|
block
|
||||||
className="text-button-grey"
|
className="text-button-grey"
|
||||||
href={`${
|
href={`${main_web_site_url || "https://osredm.com/"}users/${user.login}/profiles`}
|
||||||
mygetHelmetapi &&mygetHelmetapi.new_course&&
|
|
||||||
mygetHelmetapi.new_course.edit_account
|
|
||||||
}`}
|
|
||||||
target="_blank"
|
|
||||||
>
|
>
|
||||||
{" "}
|
{" "}
|
||||||
<i className="iconfont icon-shezhi4 font-15 mr5"></i>
|
<i className="iconfont icon-shezhi4 font-15 mr5"></i>
|
||||||
|
@ -193,22 +188,22 @@ class Infos extends Component {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="width100 inline-block mt20">
|
<div className="width100 inline-block mt20">
|
||||||
<Link
|
<a
|
||||||
to={`/users/${user && user.login}/watchers`}
|
href={`/users/${user && user.login}/user_watchlist`}
|
||||||
className={`with50 text-center pull-left ${route_type === "watchers" ? "text-primary" : ""}`}
|
className={`with50 text-center pull-left ${route_type === "watchers" ? "text-primary" : ""}`}
|
||||||
onClick={() =>this.route_link("watchers")}
|
onClick={() =>this.route_link("watchers")}
|
||||||
>
|
>
|
||||||
<div>{current_user && user && user.login === current_user.login ? "我关注的" : "TA关注的"}</div>
|
<div>{current_user && user && user.login === current_user.login ? "我关注的" : "TA关注的"}</div>
|
||||||
<span>{user && user.watching_count}</span>
|
<span>{user && user.watching_count}</span>
|
||||||
</Link>
|
</a>
|
||||||
<Link
|
<a
|
||||||
to={`/users/${user && user.login}/fan_users`}
|
href={`/users/${user && user.login}/user_fanslist`}
|
||||||
onClick={() =>this.route_link("fan_users")}
|
onClick={() =>this.route_link("fan_users")}
|
||||||
className={`with50 text-center pull-left ${route_type === "fan_users" ? "text-primary" : ""}`}
|
className={`with50 text-center pull-left ${route_type === "fan_users" ? "text-primary" : ""}`}
|
||||||
>
|
>
|
||||||
<div>{current_user && user && user.login === current_user.login ? "关注我的" : "关注TA的"}</div>
|
<div>{current_user && user && user.login === current_user.login ? "关注我的" : "关注TA的"}</div>
|
||||||
<span>{user && user.watched_count}</span>
|
<span>{user && user.watched_count}</span>
|
||||||
</Link>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -230,7 +225,7 @@ class Infos extends Component {
|
||||||
|
|
||||||
<div className="bgcF">
|
<div className="bgcF">
|
||||||
<ul className="list-l-Menu">
|
<ul className="list-l-Menu">
|
||||||
<li className="MenuTitle" onClick={() => this.change_project_type(undefined)}>
|
<li className="MenuTitle" onClick={() => this.change_project_type()}>
|
||||||
<i className="iconfont icon-xiangmuleixing font-15 mr5"></i>
|
<i className="iconfont icon-xiangmuleixing font-15 mr5"></i>
|
||||||
项目类型
|
项目类型
|
||||||
<i className="iconfont icon-youjiantou font-15 mr20 color-grey-9 pull-right"></i>
|
<i className="iconfont icon-youjiantou font-15 mr20 color-grey-9 pull-right"></i>
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import { Modal } from 'antd';
|
||||||
|
|
||||||
|
export default (
|
||||||
|
handleOk,
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
handleCancel) => {
|
||||||
|
return Modal.confirm({
|
||||||
|
title: title || "警告",
|
||||||
|
content: content || "确认删除?",
|
||||||
|
okText: '确定',
|
||||||
|
cancelText: '取消',
|
||||||
|
onOk() {
|
||||||
|
handleOk && handleOk();
|
||||||
|
},
|
||||||
|
onCancel() {
|
||||||
|
handleCancel && handleCancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
import { notification } from 'antd';
|
||||||
|
import axios from 'axios';
|
||||||
|
import cookie from 'react-cookies';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let actionUrl = '';
|
||||||
|
if (window.location.href.indexOf('localhost') > -1) {
|
||||||
|
actionUrl='http://117.50.100.12:8008';
|
||||||
|
}else if(window.location.href.indexOf('117.50.100.12') > -1){
|
||||||
|
actionUrl="http://117.50.100.12:8008";
|
||||||
|
}else if(window.location.href.indexOf('192.168.31.48') > -1){
|
||||||
|
actionUrl="http://117.50.100.12:8008";
|
||||||
|
}else if(window.location.href.indexOf('osredm')>-1){
|
||||||
|
actionUrl="https://info.osredm.com";
|
||||||
|
}
|
||||||
|
export const httpUrl=actionUrl;
|
||||||
|
// export const httpUrl = 'http://106.75.31.211:58088'; //可视化
|
||||||
|
// export const httpUrl = 'http://117.50.100.12:8008'; //测试环境
|
||||||
|
// export const httpUrl = 'https://info.osredm.com/'; //生产环境
|
||||||
|
|
||||||
|
const TokenKey = 'autologin_forge_military';
|
||||||
|
axios.defaults.withCredentials = true;
|
||||||
|
|
||||||
|
// 创建axios实例
|
||||||
|
const service = axios.create({
|
||||||
|
baseURL: httpUrl,
|
||||||
|
timeout: 5000 // 请求超时时间
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// request拦截器
|
||||||
|
service.interceptors.request.use(config => {
|
||||||
|
if (cookie.load(TokenKey)) {
|
||||||
|
config.headers['Authorization'] = cookie.load(TokenKey); // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}, error => {
|
||||||
|
// Do something with request error
|
||||||
|
console.log(error); // for debug
|
||||||
|
Promise.reject(error);
|
||||||
|
});
|
||||||
|
// respone拦截器
|
||||||
|
service.interceptors.response.use(
|
||||||
|
response => {
|
||||||
|
const res = response;
|
||||||
|
if (res.status === 400) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '请求错误',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (res.status === 401) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '未授权,请登录!',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (res.status === 40001) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: '账户或密码错误!',
|
||||||
|
});
|
||||||
|
return Promise.reject('error');
|
||||||
|
}
|
||||||
|
if (response.status !== 200 && res.status !== 200) {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
console.log(error);
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: error.message,
|
||||||
|
});
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
export default service;
|
|
@ -0,0 +1,187 @@
|
||||||
|
// 本模块公共样式
|
||||||
|
|
||||||
|
.centerbox {
|
||||||
|
width: 1200px;
|
||||||
|
margin: 40px auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.head-navigation{
|
||||||
|
position: absolute;
|
||||||
|
top:-2.3em;
|
||||||
|
span{
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
&:hover{
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.center-content {
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #dedede;
|
||||||
|
box-shadow: #eee 0px 1px 1px 3px;
|
||||||
|
}
|
||||||
|
.centerScreen {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 46px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 1px solid #dedede;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容标题左侧样式
|
||||||
|
.center-left-but {
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
align-items: center;
|
||||||
|
margin-left: 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.center-left-butD {
|
||||||
|
height: 24px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 24px;
|
||||||
|
color: #333;
|
||||||
|
padding: 0 10px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #dedede;
|
||||||
|
}
|
||||||
|
.center-left-butD:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #409eff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.center-left-butDACT {
|
||||||
|
background-color: #409eff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容标题右侧样式
|
||||||
|
.center-right-but {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.center-right-but > span {
|
||||||
|
margin: 0 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #0089ff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通用标签样式
|
||||||
|
.list-tag {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
background: #cfe9ff;
|
||||||
|
color: #0089ff;
|
||||||
|
font-size: 14px;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 2px 5px;
|
||||||
|
line-height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件预览modal样式
|
||||||
|
.file-modal {
|
||||||
|
width: 800px !important;
|
||||||
|
.ant-modal-body {
|
||||||
|
padding-top: 40px;
|
||||||
|
.pdf-box {
|
||||||
|
height: 70vh;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-modal-close {
|
||||||
|
top: 0 !important;
|
||||||
|
}
|
||||||
|
.show-img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.react-pdf__Page__canvas,
|
||||||
|
.react-pdf__Page__textContent {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.edit-input {
|
||||||
|
max-width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link{
|
||||||
|
color: #0089ff;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
color:#509eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-grey-a{
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.greater{
|
||||||
|
position: relative;
|
||||||
|
top:-1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.none_panels{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-flow: column nowrap;
|
||||||
|
height: 40vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.newFooter .footerInfos>ul {
|
||||||
|
padding: 0 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
max-width: 25%;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 富文本样式
|
||||||
|
.w-e-text table td, .w-e-text table th{
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
.editor-w-text {
|
||||||
|
table td, table th{
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
border-right: 1px solid #ccc;
|
||||||
|
padding: 3px 5px;
|
||||||
|
height: 30px;
|
||||||
|
min-height: 30px;
|
||||||
|
}
|
||||||
|
table th {
|
||||||
|
border-bottom: 2px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
border-left: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
display: block;
|
||||||
|
border-left: 8px solid #d0e5f2;
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
line-height: 1.4;
|
||||||
|
font-size: 100%;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
a{
|
||||||
|
color: #409eff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (max-width: 1200px){
|
||||||
|
.centerbox {
|
||||||
|
width: 98%;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
import React, { Component } from "react";
|
||||||
|
|
||||||
|
import { Route, Switch } from "react-router-dom";
|
||||||
|
import { withRouter } from "react-router";
|
||||||
|
import { SnackbarHOC } from "educoder";
|
||||||
|
import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
|
||||||
|
import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
|
||||||
|
import Loadable from "react-loadable";
|
||||||
|
import Loading from "../Loading";
|
||||||
|
import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC";
|
||||||
|
import './index.scss';
|
||||||
|
|
||||||
|
const NoticeList = Loadable({
|
||||||
|
loader: () => import("./notice/noticeList"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
const NoticeDetail = Loadable({
|
||||||
|
loader: () => import("./notice/noticeDetail"),
|
||||||
|
loading: Loading,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
class Index extends Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="newMain clearfix">
|
||||||
|
<Switch {...this.props}>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path="/notice/noticeDetail/:noticeId"
|
||||||
|
render={(props) => (
|
||||||
|
<NoticeDetail {...this.props} {...props} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path="/notice"
|
||||||
|
render={(props) => (
|
||||||
|
<NoticeList {...this.props} {...props} />
|
||||||
|
)}
|
||||||
|
></Route>
|
||||||
|
</Switch>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default withRouter(
|
||||||
|
ImageLayerOfCommentHOC({
|
||||||
|
imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
|
||||||
|
parentSelector: ".newMain",
|
||||||
|
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
|
||||||
|
);
|
|
@ -0,0 +1,39 @@
|
||||||
|
import fetch from '../fetch';
|
||||||
|
import { notification } from 'antd';
|
||||||
|
|
||||||
|
|
||||||
|
// 公告列表查询
|
||||||
|
export async function getNoticeList(params) {
|
||||||
|
let res = await fetch({
|
||||||
|
url: '/api/announcements/',
|
||||||
|
method: 'get',
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
if (res.message === 'success') {
|
||||||
|
return res.data;
|
||||||
|
} else {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message || '请求错误',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 公告详情查询
|
||||||
|
export async function getNoticeDetail(id) {
|
||||||
|
let res = await fetch({
|
||||||
|
url: '/api/announcements/' + id,
|
||||||
|
method: 'get',
|
||||||
|
params:{flag:1}
|
||||||
|
});
|
||||||
|
if (res.message === 'success') {
|
||||||
|
return res.data;
|
||||||
|
} else {
|
||||||
|
notification.open({
|
||||||
|
message: "提示",
|
||||||
|
description: res.message || '请求错误',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { NewSvg } from '../../svg';
|
||||||
|
import './index.scss';
|
||||||
|
export default (props) => {
|
||||||
|
const { list, itemClick, } = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
list.map(item => {
|
||||||
|
return (
|
||||||
|
<div className="list-box" key={item.id}>
|
||||||
|
<div className="list-title" onClick={() => { itemClick(item.id) }}>
|
||||||
|
{item.achievementName || item.title} {item.new && <NewSvg color="#ffb300"/>}
|
||||||
|
</div>
|
||||||
|
<div className="list-other">
|
||||||
|
{item.publisher && <p>发布单位:{item.publisher}</p>}
|
||||||
|
<p>发布时间:{(item.publishDate && item.publishDate.split(' ')[0]) || (item.createTime && item.createTime.split(' ')[0])}</p>
|
||||||
|
<p><i className="iconfont icon-dianjiliang mr5 font-12" />{item.visits || 0}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
.list-box {
|
||||||
|
position: relative;
|
||||||
|
padding: 17px 20px;
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 1px dashed #dedede;
|
||||||
|
}
|
||||||
|
.list-title {
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #000;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
svg {
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.list-title:hover {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
.list-title span {
|
||||||
|
padding: 3px 5px;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
background: #f8c753;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-other {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
& > p {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
p:first-child{
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
p:nth-child(2){
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
|
@ -0,0 +1,77 @@
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { Icon, } from 'antd';
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import { getNoticeDetail } from '../api';
|
||||||
|
import { noticeType } from '../static';
|
||||||
|
import './index.scss';
|
||||||
|
|
||||||
|
const noticeTypeArr = [];
|
||||||
|
for (const item of noticeType) {
|
||||||
|
noticeTypeArr[item.code]=item.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ({ match, history, showNotification }) => {
|
||||||
|
const [noticeData, setNoticeData] = useState({});
|
||||||
|
const id = match.params.noticeId;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
id && getNoticeDetail(id).then(data => {
|
||||||
|
if(data){
|
||||||
|
data.publishDate=data.publishDate.split(' ')[0];
|
||||||
|
data.createdAt=data.createdAt.split(' ')[0];
|
||||||
|
data.closingDate=data.closingDate.split(' ')[0];
|
||||||
|
}
|
||||||
|
setNoticeData(data || {});
|
||||||
|
})
|
||||||
|
}, [id]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
|
||||||
|
<div className="centerbox notice-detail">
|
||||||
|
<div className="head-navigation">
|
||||||
|
<Link to="/">首页<span className="greater"> > </span></Link>
|
||||||
|
<Link to="/notice">公告<span className="greater"> > </span></Link>
|
||||||
|
<span>公告详情</span>
|
||||||
|
</div>
|
||||||
|
<div className="center-content">
|
||||||
|
{/* <div className="notice-center-content"> */}
|
||||||
|
<div className="notice-title">
|
||||||
|
{noticeData.title}
|
||||||
|
</div>
|
||||||
|
<div className="notice-detail-content">
|
||||||
|
<div className="center-author">
|
||||||
|
<p key={0}>公告类型:{noticeTypeArr[noticeData.type]}</p>
|
||||||
|
{noticeData.publisher && <p key={1}>发布单位:{noticeData.publisher}</p>}
|
||||||
|
<p key={2}>发布时间:{noticeData.publishDate || noticeData.createdAt}</p>
|
||||||
|
<p key={3}>截止时间:{noticeData.closingDate}</p>
|
||||||
|
<p key={4}>浏览:{noticeData.visits || 0}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="content-text">
|
||||||
|
<div className="notice-content-title"><Icon type="caret-right" />公告主要内容</div>
|
||||||
|
<div className="editor-w-text" dangerouslySetInnerHTML={{ __html: noticeData.text }}>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{
|
||||||
|
noticeData.fileDownloadPath &&
|
||||||
|
<React.Fragment>
|
||||||
|
<div className="notice-content-title"><Icon type="caret-right" />公告附件</div>
|
||||||
|
<p className="notice-content-download" >
|
||||||
|
<span onClick={() => { window.open( noticeData.fileDownloadPath) }}>
|
||||||
|
<i className="iconfont icon-fujian color-green font-14 mr3"></i>{noticeData.fileName}
|
||||||
|
</span>
|
||||||
|
<span className="link" onClick={() => { window.open( noticeData.fileDownloadPath) }}>下载</span>
|
||||||
|
</p>
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</React.Fragment>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
.centerbox {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.notice-detail {
|
||||||
|
margin-top: 3.5rem;
|
||||||
|
.head-navigation {
|
||||||
|
top: -2.5rem;
|
||||||
|
}
|
||||||
|
.center-content {
|
||||||
|
overflow: auto;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-detail-content {
|
||||||
|
padding: 2rem 2.5rem 3rem;
|
||||||
|
|
||||||
|
.anticon-caret-right {
|
||||||
|
color: #1890ff;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-title {
|
||||||
|
margin: 3rem auto 0;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 1.375rem;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.375rem;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容详情
|
||||||
|
.item-content {
|
||||||
|
padding: 10px 10px 0 30px;
|
||||||
|
}
|
||||||
|
.content-notice {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-author {
|
||||||
|
display: flex;
|
||||||
|
flex-flow:row wrap-reverse;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
padding: .5rem;
|
||||||
|
background: #f9f9f9;
|
||||||
|
color: #333;
|
||||||
|
p {
|
||||||
|
padding: 0 .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-text {
|
||||||
|
margin: 1.25rem 0;
|
||||||
|
min-height: 30vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-content-title {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-content-download {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 1rem;
|
||||||
|
background: #f9f9f9;
|
||||||
|
span:hover{
|
||||||
|
cursor: pointer;
|
||||||
|
color: #1890ff;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,284 @@
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import { Menu, Pagination, Icon, Input } from 'antd';
|
||||||
|
import { Link } from "react-router-dom";
|
||||||
|
import ItemList from '../components/itemList';
|
||||||
|
import Nodata from '../../../forge/Nodata';
|
||||||
|
import Loading from "../../../Loading";
|
||||||
|
// import { AbandonSvg, AllSvg, ChangeSvg, CallSvg, CheckSvg } from '../svg';
|
||||||
|
import noticePng from '../image/banner.png';
|
||||||
|
import { getNoticeList } from '../api';
|
||||||
|
|
||||||
|
import './index.scss';
|
||||||
|
const Search = Input.Search;
|
||||||
|
// const { SubMenu } = Menu;
|
||||||
|
|
||||||
|
// const defaultColor = '#848684';
|
||||||
|
// const activeColor = '#ffffff';
|
||||||
|
// const svgColor = '#1890ff';
|
||||||
|
|
||||||
|
export default (props) => {
|
||||||
|
|
||||||
|
const [tab, setTab] = useState('0');
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const [title, setTitle] = useState(undefined);
|
||||||
|
const [orderBy, setOrderBy] = useState('publishDateDesc');
|
||||||
|
|
||||||
|
const [curPage, setCurPage] = useState(1);
|
||||||
|
const [total, setTotal] = useState(0);
|
||||||
|
const [noticeList, setNoticeList] = useState([]);
|
||||||
|
|
||||||
|
const [callList, setCallList] = useState([]);
|
||||||
|
const [changeList, setChangeList] = useState([]);
|
||||||
|
const [checkList, setCheckList] = useState([]);
|
||||||
|
const [abandonList, setAbandonList] = useState([]);
|
||||||
|
const [technologyList, setTechnologyList] = useState([]);
|
||||||
|
const [dealList, setDealList] = useState([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setLoading(true);
|
||||||
|
if (tab === '0' || tab === '7') {
|
||||||
|
const params = {
|
||||||
|
orderBy,
|
||||||
|
curPage: 1,
|
||||||
|
isChecked: 1,
|
||||||
|
pageSize: 5,
|
||||||
|
status: 1,
|
||||||
|
type: 1,
|
||||||
|
title,
|
||||||
|
flag: 1, //后台管理查询:2;前台展示:1
|
||||||
|
};
|
||||||
|
getNoticeList(params).then(data => {
|
||||||
|
setChangeList(data.rows);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 4 }).then(data => {
|
||||||
|
setCallList(data.rows);
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 2 }).then(data => {
|
||||||
|
setCheckList(data.rows);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 3 }).then(data => {
|
||||||
|
setAbandonList(data.rows);
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 5 }).then(data => {
|
||||||
|
setTechnologyList(data.rows);
|
||||||
|
});
|
||||||
|
getNoticeList({ ...params, type: 6 }).then(data => {
|
||||||
|
setDealList(data.rows);
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const params = {
|
||||||
|
orderBy,
|
||||||
|
curPage,
|
||||||
|
isChecked: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
status: 1,
|
||||||
|
title,
|
||||||
|
type: tab,
|
||||||
|
flag: 1, //后台管理查询:2;前台展示:1
|
||||||
|
};
|
||||||
|
getNoticeList(params).then(data => {
|
||||||
|
setNoticeList(data.rows);
|
||||||
|
setTotal(data.total);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [tab, title, orderBy, curPage]);
|
||||||
|
|
||||||
|
function changeSort(sortType) {
|
||||||
|
setOrderBy(sortType);
|
||||||
|
setCurPage(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function noticeClick(id) {
|
||||||
|
props.history.push(`/notice/noticeDetail/${id}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortNav() {
|
||||||
|
return <div className="notice-sort-nav">
|
||||||
|
<Search
|
||||||
|
maxLength={20}
|
||||||
|
style={{ width: "56%" }}
|
||||||
|
placeholder="输入标题关键字,不能超过20字符"
|
||||||
|
enterButton={<span><Icon type="search" className="mr5" /> 搜索</span>}
|
||||||
|
onSearch={(value) => setTitle(value)} />
|
||||||
|
<div className="center-right-but">
|
||||||
|
<div className={classNames({ sortLink: true, active: orderBy === 'publishDateDesc' })} onClick={() => { changeSort('publishDateDesc') }}>时间降序<Icon type="arrow-down" /></div>
|
||||||
|
<span className="piece">|</span>
|
||||||
|
<div className={classNames({ sortLink: true, active: orderBy === 'publishDateAsc' })} onClick={() => { changeSort('publishDateAsc') }}>时间升序<Icon type="arrow-up" /></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
// function onOpenChange(e) {
|
||||||
|
// if(e.length===2){
|
||||||
|
// if(e[1]==='sub1'){
|
||||||
|
// setTab('0');
|
||||||
|
// }else{
|
||||||
|
// setTab('7');
|
||||||
|
// }
|
||||||
|
// }else{
|
||||||
|
// if(e[0]==='sub1'){
|
||||||
|
// setTab('0');
|
||||||
|
// } else if (e[0] == 'sub2') {
|
||||||
|
// setTab('7');
|
||||||
|
// } else {
|
||||||
|
// setTab('8');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// setCurPage(1);
|
||||||
|
// setTitle('');
|
||||||
|
// setOrderBy('publishDateDesc');
|
||||||
|
// }
|
||||||
|
|
||||||
|
function handleClick(e) {
|
||||||
|
setTab(e.key);
|
||||||
|
setCurPage(1);
|
||||||
|
setTitle('');
|
||||||
|
setOrderBy('publishDateDesc');
|
||||||
|
}
|
||||||
|
|
||||||
|
function cont(param, titleStr, key,svgStr) {
|
||||||
|
return <React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<i className={svgStr}></i>
|
||||||
|
<span>{titleStr}</span>
|
||||||
|
</div>
|
||||||
|
{param.length === 5 && <span className="link" onClick={() => { handleClick({ key: key }) }}>查看更多 <Icon type="arrow-right" /></span>}
|
||||||
|
</div>
|
||||||
|
{param.length>0?<ItemList
|
||||||
|
list={param}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>:<Nodata _html="暂无数据" />}
|
||||||
|
{/* <ItemList
|
||||||
|
list={param}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/> */}
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
|
||||||
|
function content() {
|
||||||
|
if (tab === '0') {
|
||||||
|
return <React.Fragment>
|
||||||
|
{/* {callList.length <= 0 && changeList.length <= 0 && checkList.length <= 0 && abandonList.length <= 0 ? <Nodata _html="暂无数据" /> : ""} */}
|
||||||
|
{cont(callList, "招标公告", '4',"iconfont icon-zhaobiaogonggao")}
|
||||||
|
{cont(changeList, "更正公告", '1',"iconfont icon-gengzhenggonggao")}
|
||||||
|
{cont(checkList, "中标公告", '2',"iconfont icon-zhongbiaogonggao")}
|
||||||
|
{cont(abandonList, "废标公告", '3',"iconfont icon-feibiaogonggao")}
|
||||||
|
</React.Fragment>
|
||||||
|
} else if (tab === '7') {
|
||||||
|
return <React.Fragment>
|
||||||
|
{/* {technologyList.length <= 0 && dealList.length <= 0 ? <Nodata _html="暂无数据" /> : ""} */}
|
||||||
|
{/* {technologyList.length > 0 && cont(technologyList, "技术资产", '5',"iconfont icon-jishuzichan")} */}
|
||||||
|
{cont(technologyList, "技术资产", '5',"iconfont icon-jishuzichan")}
|
||||||
|
{cont(dealList, "成交公告", '6',"iconfont icon-chengjiaogonggao")}
|
||||||
|
</React.Fragment>
|
||||||
|
} else if (tab === '8') {
|
||||||
|
return <div></div>
|
||||||
|
} else {
|
||||||
|
let titleStr;
|
||||||
|
let svgStr;
|
||||||
|
switch (tab) {
|
||||||
|
case '1':
|
||||||
|
titleStr = "更正公告";
|
||||||
|
svgStr = "iconfont icon-gengzhenggonggao"
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
titleStr = "中标公告";
|
||||||
|
svgStr = "iconfont icon-zhongbiaogonggao"
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
titleStr = "废标公告";
|
||||||
|
svgStr = "iconfont icon-feibiaogonggao"
|
||||||
|
break;
|
||||||
|
case '4':
|
||||||
|
titleStr = "招标公告";
|
||||||
|
svgStr = "iconfont icon-zhaobiaogonggao"
|
||||||
|
break;
|
||||||
|
case '5':
|
||||||
|
titleStr = "技术资产";
|
||||||
|
svgStr = "iconfont icon-jishuzichan"
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
titleStr = "成交公告";
|
||||||
|
svgStr = "iconfont icon-chengjiaogonggao"
|
||||||
|
}
|
||||||
|
return <React.Fragment>
|
||||||
|
<div className="item-head-title">
|
||||||
|
<div className="item-head-title-content">
|
||||||
|
<i className={svgStr}></i>
|
||||||
|
<span>{titleStr}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ItemList
|
||||||
|
list={noticeList}
|
||||||
|
itemClick={noticeClick}
|
||||||
|
/>
|
||||||
|
{/* {noticeList.length === 10 && <div className="edu-txt-center mt30 mb30">
|
||||||
|
<Pagination
|
||||||
|
showQuickJumper
|
||||||
|
onChange={(page) => { setCurPage(page) }}
|
||||||
|
current={curPage}
|
||||||
|
total={total}
|
||||||
|
showTotal={total => `共 ${total} 条`}
|
||||||
|
/>
|
||||||
|
</div>} */}
|
||||||
|
{noticeList.length > 0 ? noticeList.length === 10 &&<div className="edu-txt-center mt30 mb30">
|
||||||
|
<Pagination
|
||||||
|
showQuickJumper
|
||||||
|
onChange={(page) => { setCurPage(page) }}
|
||||||
|
current={curPage}
|
||||||
|
total={total}
|
||||||
|
showTotal={total => `共 ${total} 条`}
|
||||||
|
/>
|
||||||
|
</div> : <Nodata _html="暂无数据" />}
|
||||||
|
</React.Fragment>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<img alt="图片加载失败" src={noticePng} width="100%"></img>
|
||||||
|
<div className="centerbox notice-list clearfix">
|
||||||
|
<div className="head-navigation">
|
||||||
|
<Link to="/">首页<span className="greater"> > </span></Link>
|
||||||
|
<span>公告</span>
|
||||||
|
</div>
|
||||||
|
<div className="body">
|
||||||
|
<div className="navigationMenu">
|
||||||
|
<Menu
|
||||||
|
onClick={handleClick}
|
||||||
|
// style={{width: 216 }}
|
||||||
|
mode="inline"
|
||||||
|
// onOpenChange={onOpenChange}
|
||||||
|
// defaultSelectedKeys={['4']}
|
||||||
|
// defaultOpenKeys={['sub1']}
|
||||||
|
>
|
||||||
|
<Menu.Item key="0" id={tab === '0' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-xiangmugonggao"></i>项目公告</span></Menu.Item>
|
||||||
|
{/* <SubMenu id={tab === '0' ? "menu-selected" : "menu"} key="sub1" title={<span className="itemClass"><i className="iconfont icon-xiangmugonggao"></i><span className="subMenuspan">项目公告</span></span>} > */}
|
||||||
|
<Menu.Item key="4" id={tab === '4' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-zhaobiaogonggao" style={{marginLeft:'1.2em'}}></i>招标公告</span></Menu.Item>
|
||||||
|
<Menu.Item key="1" id={tab === '1' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-gengzhenggonggao" style={{marginLeft:'1.2em'}}></i>更正公告</span></Menu.Item>
|
||||||
|
<Menu.Item key="2" id={tab === '2' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-zhongbiaogonggao" style={{marginLeft:'1.2em'}}></i>中标公告</span></Menu.Item>
|
||||||
|
<Menu.Item key="3" id={tab === '3' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-feibiaogonggao" style={{marginLeft:'1.2em'}}></i>废标公告</span></Menu.Item>
|
||||||
|
{/* </SubMenu> */}
|
||||||
|
<Menu.Item key="7" id={tab === '7' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-chengguo"></i>成果转化</span></Menu.Item>
|
||||||
|
{/* <SubMenu id={tab === '7' ? "menu-selected" : "menu"} key="sub2" title={<span className="itemClass"><i className="iconfont icon-chengguo"></i><span className="subMenuspan">成果转化</span></span>}> */}
|
||||||
|
<Menu.Item key="5" id={tab === '5' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-jishuzichan" style={{marginLeft:'1.2em'}}></i>技术资产</span></Menu.Item>
|
||||||
|
<Menu.Item key="6" id={tab === '6' ? "menu-selected" : "menu"}><span className="itemClass"><i className="iconfont icon-chengjiaogonggao" style={{marginLeft:'1.2em'}}></i>成交公告</span></Menu.Item>
|
||||||
|
{/* </SubMenu> */}
|
||||||
|
</Menu>
|
||||||
|
</div>
|
||||||
|
<div className="notice-center-content">
|
||||||
|
{sortNav()}
|
||||||
|
{loading ? <Loading /> : content()}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</React.Fragment>
|
||||||
|
)
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
body{
|
||||||
|
caret-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
.notice-list{
|
||||||
|
.ant-tabs {
|
||||||
|
.ant-tabs-left-bar{
|
||||||
|
border: 1px solid #E5E5E5;
|
||||||
|
.ant-tabs-nav-container{
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
.ant-tabs-nav-wrap{
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg{
|
||||||
|
margin-right:.75em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ant-tabs-tab{
|
||||||
|
display: flex;
|
||||||
|
justify-content: start;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
width: 13.5rem;
|
||||||
|
height: 2.8125rem;
|
||||||
|
background: #fff;
|
||||||
|
font-size: 1.125rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
.ant-tabs-left-content{
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.ant-tabs-tab-active{
|
||||||
|
background: #1890FF;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.ant-tabs-ink-bar{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-sort-nav{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: .625rem 1rem .5rem;
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice-center-content{
|
||||||
|
padding:1.25rem;
|
||||||
|
background: #fff;
|
||||||
|
flex: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-head-title{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 1.25rem 0 .6rem 0;
|
||||||
|
.item-head-title-content{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 1rem;
|
||||||
|
span{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
i{
|
||||||
|
margin-right: .25em;
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ant-input-group-addon{
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-head-title{
|
||||||
|
border-bottom: 1px solid #E5E5E5;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.center-right-but{
|
||||||
|
.piece{
|
||||||
|
margin:0 .8rem;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
.sortLink{
|
||||||
|
color: #333;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
&.active{
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.body{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.navigationMenu{
|
||||||
|
margin-right: 24px;
|
||||||
|
width: 15.4em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu-selected{
|
||||||
|
background-color: #1890FF;
|
||||||
|
color: #fff;
|
||||||
|
.subMenuspan{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #menu-selected>div>.itemClass>.iconfont{
|
||||||
|
// color: #fff;
|
||||||
|
// }
|
||||||
|
|
||||||
|
#menu-selected>.itemClass>.iconfont{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu-selected .ant-menu-submenu-arrow::after,#menu-selected .ant-menu-submenu-arrow::before,#menu-selected .ant-menu-submenu-arrow:after,#menu-selected .ant-menu-submenu-arrow:before{
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{
|
||||||
|
background-color: #fff;
|
||||||
|
color: #595959;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-menu-item-active{
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-menu-submenu-selected{
|
||||||
|
color: #595959;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemClass{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 18px;
|
||||||
|
.iconfont{
|
||||||
|
margin-right:.75em;
|
||||||
|
color: #1890FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ant-menu-vertical .ant-menu-item, .ant-menu-vertical-left .ant-menu-item, .ant-menu-vertical-right .ant-menu-item, .ant-menu-inline .ant-menu-item, .ant-menu-vertical .ant-menu-submenu-title, .ant-menu-vertical-left .ant-menu-submenu-title, .ant-menu-vertical-right .ant-menu-submenu-title, .ant-menu-inline .ant-menu-submenu-title{
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
// 公告开始
|
||||||
|
export const noticeStatus = [
|
||||||
|
{ code: 0, name: "关闭", dicItemName: '关闭' },
|
||||||
|
{ code: 1, name: "正常", dicItemName: '正常' },
|
||||||
|
{ code: 2, name: "草稿", dicItemName: '草稿' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const noticeType = [
|
||||||
|
{ code: 1, name: "更正公告", dicItemName: "更正" },
|
||||||
|
{ code: 2, name: "中标公告", dicItemName: "中标" },
|
||||||
|
{ code: 3, name: "废标公告", dicItemName: "废标" },
|
||||||
|
{ code: 4, name: "招标公告", dicItemName: "招标" },
|
||||||
|
{ code: 5, name: "技术资产", dicItemName: "技术" },
|
||||||
|
{ code: 6, name: "成交公告", dicItemName: "成交" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const noticeChecked = [
|
||||||
|
{ code: 0, name: "未通过", dicItemName: "未通过" },
|
||||||
|
{ code: 1, name: "通过", dicItemName: "通过" },
|
||||||
|
{ code: 2, name: "未处理", dicItemName: "未处理" },
|
||||||
|
];
|
||||||
|
//公告结束
|
|
@ -0,0 +1,73 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export function AbandonSvg({ color }) {
|
||||||
|
return <svg width="16" height="15.198" viewBox="0 0 16 15.198">
|
||||||
|
<g id="组_96" data-name="组 96" transform="translate(-54.703 -1778.755)">
|
||||||
|
<g id="组_87" data-name="组 87" transform="translate(63.014 1786.264)">
|
||||||
|
<path id="路径_334" data-name="路径 334" d="M365.033,2110.025H361.89a.591.591,0,1,1,0-1.183h3.143a.591.591,0,1,1,0,1.183Z" transform="translate(-359.618 -2105.589)" fill={color} />
|
||||||
|
<path id="路径_335" data-name="路径 335" d="M316.429,2010.462a3.844,3.844,0,1,0,1.126,2.718A3.819,3.819,0,0,0,316.429,2010.462Zm-.739,4.7a2.8,2.8,0,1,1,0-3.959A2.79,2.79,0,0,1,315.69,2015.16Z" transform="translate(-309.866 -2009.336)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<g id="组_88" data-name="组 88" transform="translate(54.703 1778.755)">
|
||||||
|
<path id="路径_336" data-name="路径 336" d="M61.441,1790.478a5.6,5.6,0,0,1,5.545-5.651,5.476,5.476,0,0,1,1.02.1v-4.368a1.808,1.808,0,0,0-1.8-1.8H56.507a1.808,1.808,0,0,0-1.8,1.8v11.02a1.808,1.808,0,0,0,1.8,1.8h5.718A5.705,5.705,0,0,1,61.441,1790.478Zm-4.155-8.229a.7.7,0,0,1,.728-.666h6.692a.7.7,0,0,1,.728.666h0a.7.7,0,0,1-.728.666H58.014a.7.7,0,0,1-.728-.666Zm3.077,7.351h-2.5a.673.673,0,0,1,0-1.332h2.5a.673.673,0,0,1,0,1.332Zm-2.349-3.44a.7.7,0,0,1-.728-.666h0a.7.7,0,0,1,.728-.666h3.18a.7.7,0,0,1,.728.666h0a.7.7,0,0,1-.728.666Z" transform="translate(-54.703 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function AllSvg({ color }) {
|
||||||
|
return <svg width="16" height="15.198" viewBox="0 0 16 15.198">
|
||||||
|
<g id="组_93" data-name="组 93" transform="translate(696.223 -1778.755)">
|
||||||
|
<path id="路径_337" data-name="路径 337" d="M-365.778,2071.537l-1.4.948h-.467a.313.313,0,0,0-.311.315v1.263a.314.314,0,0,0,.311.316h.467l1.4.947a.315.315,0,0,0,.221-.094.314.314,0,0,0,.09-.222v-3.157A.314.314,0,0,0-365.778,2071.537Z" transform="translate(-317.611 -283.396)" fill={color} />
|
||||||
|
<g id="组_90" data-name="组 90" transform="translate(-688.125 1786.051)">
|
||||||
|
<path id="路径_338" data-name="路径 338" d="M-434.315,2010.493a3.925,3.925,0,0,0-2.794-1.157,3.925,3.925,0,0,0-2.794,1.157,3.925,3.925,0,0,0-1.157,2.794,3.925,3.925,0,0,0,1.157,2.794,3.926,3.926,0,0,0,2.794,1.157,3.926,3.926,0,0,0,2.794-1.157,3.925,3.925,0,0,0,1.157-2.794A3.925,3.925,0,0,0-434.315,2010.493Zm-.76,4.828a2.867,2.867,0,0,1-2.034.841,2.868,2.868,0,0,1-2.034-.841,2.858,2.858,0,0,1-.843-2.034,2.858,2.858,0,0,1,.843-2.034,2.858,2.858,0,0,1,2.034-.843,2.858,2.858,0,0,1,2.034.843A2.88,2.88,0,0,1-435.075,2015.321Z" transform="translate(441.06 -2009.336)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<g id="组_91" data-name="组 91" transform="translate(-696.223 1778.755)">
|
||||||
|
<path id="路径_339" data-name="路径 339" d="M-689.3,1790.466a5.672,5.672,0,0,1,5.7-5.645,5.79,5.79,0,0,1,1.048.1v-4.363a1.832,1.832,0,0,0-1.854-1.8h-9.964a1.832,1.832,0,0,0-1.854,1.8v11.008a1.833,1.833,0,0,0,1.854,1.8h5.877A5.577,5.577,0,0,1-689.3,1790.466Zm-4.27-8.22a.712.712,0,0,1,.748-.665h6.878a.713.713,0,0,1,.748.665h0a.713.713,0,0,1-.748.665h-6.878a.713.713,0,0,1-.748-.665Zm3.163,7.343h-2.573a.633.633,0,0,1-.589-.665.633.633,0,0,1,.589-.665h2.573a.633.633,0,0,1,.589.665A.632.632,0,0,1-690.406,1789.588Zm-2.414-3.437a.713.713,0,0,1-.748-.665h0a.713.713,0,0,1,.748-.665h3.268a.713.713,0,0,1,.748.665h0a.713.713,0,0,1-.748.665Z" transform="translate(696.223 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ChangeSvg({ color }) {
|
||||||
|
return <svg width="16" height="15.176" viewBox="0 0 16 15.176">
|
||||||
|
<g id="组_94" data-name="组 94" transform="translate(-703.372 -1778.755)">
|
||||||
|
<path id="路径_331" data-name="路径 331" d="M1034.307,2069.547a1.2,1.2,0,0,0-1.2.934,1.17,1.17,0,0,0,.707,1.326c.044.219.063.475-.073.573a1.129,1.129,0,0,0-.885.486v.422h2.865v-.393a1.414,1.414,0,0,0-.949-.523.751.751,0,0,1-.032-.554,1.172,1.172,0,0,0,.739-1.309,1.2,1.2,0,0,0-1.175-.961Z" transform="translate(-318.75 -281.318)" fill={color} />
|
||||||
|
<path id="路径_332" data-name="路径 332" d="M965.772,2010.458a3.832,3.832,0,1,0,1.122,2.709A3.807,3.807,0,0,0,965.772,2010.458Zm-.737,4.682a2.79,2.79,0,1,1,0-3.946A2.781,2.781,0,0,1,965.035,2015.141Z" transform="translate(-247.522 -223.068)" fill={color} />
|
||||||
|
<g id="组_85" data-name="组 85" transform="translate(703.372 1778.755)">
|
||||||
|
<path id="路径_333" data-name="路径 333" d="M710.088,1790.463a5.586,5.586,0,0,1,5.527-5.643,5.441,5.441,0,0,1,1.017.1v-4.362a1.8,1.8,0,0,0-1.8-1.8H705.17a1.8,1.8,0,0,0-1.8,1.8v11.005a1.8,1.8,0,0,0,1.8,1.8h5.7A5.705,5.705,0,0,1,710.088,1790.463Zm-4.141-8.218a.7.7,0,0,1,.726-.665h6.67a.7.7,0,0,1,.726.665h0a.7.7,0,0,1-.726.665h-6.67a.7.7,0,0,1-.726-.665Zm3.067,7.341h-2.5a.673.673,0,0,1,0-1.33h2.5a.673.673,0,0,1,0,1.33Zm-2.341-3.436a.7.7,0,0,1-.726-.665h0a.7.7,0,0,1,.726-.665h3.169a.7.7,0,0,1,.726.665h0a.7.7,0,0,1-.726.665Z" transform="translate(-703.372 -1778.755)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function CheckSvg({ color }) {
|
||||||
|
return <svg width="16" height="14.548" viewBox="0 0 16 14.548">
|
||||||
|
<g id="组_95" data-name="组 95" transform="translate(-1325.073 -1778.755)">
|
||||||
|
<path id="路径_325" data-name="路径 325" d="M1655.311,1844.214" transform="translate(-319.943 -63.419)" fill={color} />
|
||||||
|
<path id="路径_326" data-name="路径 326" d="M1680.948,2109.083a.659.659,0,1,0-.407.609.659.659,0,0,0,.407-.609Z" transform="translate(-343.504 -319.392)" fill={color} />
|
||||||
|
<g id="组_82" data-name="组 82" transform="translate(1333.053 1785.974)">
|
||||||
|
<path id="路径_327" data-name="路径 327" d="M1587.227,2013.456a2.664,2.664,0,1,1-1.177-1.812l.058-.378.585-.39a3.665,3.665,0,1,0,1.565,3,3.7,3.7,0,0,0-.064-.686l-.541.361Z" transform="translate(-1580.931 -2010.216)" fill={color} />
|
||||||
|
<path id="路径_328" data-name="路径 328" d="M1645.528,2074.812a1.261,1.261,0,1,1-.58-2.115l.479-.319a1.734,1.734,0,1,0,.941,1.542c0-.008,0-.016,0-.023l-.514.349A1.254,1.254,0,0,1,1645.528,2074.812Z" transform="translate(-1640.971 -2070.255)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<g id="组_83" data-name="组 83" transform="translate(1337.198 1786.341)">
|
||||||
|
<path id="路径_329" data-name="路径 329" d="M1717.735,2023.462h-.009l-.741-.124h0a.373.373,0,0,1-.271-.406v0l.186-.693,0-.01a.092.092,0,0,0-.05-.125l-.01,0-.009-.006a.132.132,0,0,0-.074-.023.134.134,0,0,0-.075.023l-1.335.89-.133.628-1.246.831.005,0a1.024,1.024,0,0,1,.608.916l1.238-.84.628.121,1.34-.893.005,0c.04-.02.049-.053.05-.148C1717.805,2023.516,1717.773,2023.462,1717.735,2023.462Z" transform="translate(-1713.97 -2022.066)" fill={color} />
|
||||||
|
</g>
|
||||||
|
<path id="路径_330" data-name="路径 330" d="M1331.495,1789.957a5.343,5.343,0,0,1,5.285-5.4,5.206,5.206,0,0,1,.972.091v-4.174a1.725,1.725,0,0,0-1.719-1.72h-9.24a1.725,1.725,0,0,0-1.719,1.72v10.53a1.725,1.725,0,0,0,1.719,1.72h5.45A5.462,5.462,0,0,1,1331.495,1789.957Zm-3.96-7.863a.669.669,0,0,1,.694-.636h6.378a.669.669,0,0,1,.694.636h0a.669.669,0,0,1-.694.636h-6.378a.669.669,0,0,1-.694-.636Zm2.933,7.024h-2.386a.644.644,0,0,1,0-1.272h2.386a.644.644,0,0,1,0,1.272Zm-2.239-3.287a.669.669,0,0,1-.694-.636h0a.669.669,0,0,1,.694-.636h3.031a.669.669,0,0,1,.694.636h0a.669.669,0,0,1-.694.636Z" transform="translate(0 0)" fill={color} />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function NewSvg({ color }) {
|
||||||
|
return <svg width="33.091" height="14" viewBox="0 0 33.091 14">
|
||||||
|
<g id="组_137" data-name="组 137" transform="translate(-294 -259)">
|
||||||
|
<path id="路径_346" data-name="路径 346" d="M324.546,259h-28A2.553,2.553,0,0,0,294,261.545v8.909A2.553,2.553,0,0,0,296.545,273h28a2.553,2.553,0,0,0,2.545-2.545v-8.909A2.553,2.553,0,0,0,324.546,259ZM302.9,269.818a.642.642,0,0,1-.445.611.983.983,0,0,1-.191.025.664.664,0,0,1-.535-.28l-3.907-5.893v5.524a.636.636,0,1,1-1.273.013v-7.636a.632.632,0,0,1,1.158-.356l3.92,5.88v-5.524a.636.636,0,1,1,1.273,0Zm8.285-4.455a.636.636,0,1,1,0,1.273h-4.455v2.546h4.455a.636.636,0,1,1,0,1.273h-5.091a.63.63,0,0,1-.636-.636v-7.636a.63.63,0,0,1,.636-.636h5.091a.636.636,0,0,1,0,1.273h-4.455v2.545Zm13.211-3.029-2.52,7.522a.63.63,0,0,1-1.2,0l-1.922-5.74-1.922,5.74a.659.659,0,0,1-1.2,0l-2.52-7.522a.636.636,0,0,1,1.209-.395l1.922,5.74,1.922-5.74a.659.659,0,0,1,1.2,0l1.922,5.74,1.922-5.74a.624.624,0,1,1,1.184.395Zm0,0" fill={color} />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function CallSvg({ color }) {
|
||||||
|
return <svg width="13.925" height="16" viewBox="0 0 13.925 16">
|
||||||
|
<path id="路径_350" data-name="路径 350" d="M1822.1,2425.528h-1.478a1.674,1.674,0,0,1-1.68,1.68h-5.371a1.674,1.674,0,0,1-1.68-1.68h-1.461a1.122,1.122,0,0,0-1.117,1.117v12.485a1.122,1.122,0,0,0,1.117,1.117h11.691a1.122,1.122,0,0,0,1.117-1.117v-12.481A1.155,1.155,0,0,0,1822.1,2425.528Zm-10.052,4.009h4.306a.77.77,0,1,1,0,1.539h-4.306a.77.77,0,1,1,0-1.539Zm0,3.463h4.306a.77.77,0,1,1,0,1.54h-4.306a.77.77,0,0,1,0-1.54Zm5.358,4.781h-5.382a.77.77,0,0,1,0-1.54h5.382a.77.77,0,0,1,0,1.54Zm2.92.052a.822.822,0,1,1,.822-.822A.822.822,0,0,1,1820.33,2437.833Zm.028-4.967-1.245.953v-3.9a.362.362,0,0,1,.331-.382h1.816a.362.362,0,0,1,.331.382l.01,3.9Zm-1.673-6.569h-4.871a1.034,1.034,0,0,1-1.025-1.025,1.045,1.045,0,0,1,1.025-1.025h4.871a1.025,1.025,0,0,1,0,2.049Zm0,0" transform="translate(-1809.317 -2424.247)" fill={color} />
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
}
|
|
@ -580,9 +580,9 @@ class LoginDialog extends Component {
|
||||||
<label htmlFor="p_autolog" style={{ top: '0px' }}>下次自动登录</label>
|
<label htmlFor="p_autolog" style={{ top: '0px' }}>下次自动登录</label>
|
||||||
</span>
|
</span>
|
||||||
<span className="fr">
|
<span className="fr">
|
||||||
<a onClick={(url) => this.getloginurl("https://www.trustie.net/account/lost_password")}
|
<a onClick={(url) => this.getloginurl("https://osredm.com/account/lost_password")}
|
||||||
className="mr3 color-grey-9">找回密码</a><em className="vertical-line"></em>
|
className="mr3 color-grey-9">找回密码</a><em className="vertical-line"></em>
|
||||||
<a onClick={(url) => this.getloginurl("https://www.trustie.net/login?login=false")} className="color-grey-9">注册</a>
|
<a onClick={(url) => this.getloginurl("https://osredm.com/user_join")} className="color-grey-9">注册</a>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
@ -108,3 +108,4 @@ class Header extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default withStyles(styles)(Header);
|
export default withStyles(styles)(Header);
|
||||||
|
// /images/avatars/LaboratorySetting/1tab?t=1625195016
|
|
@ -12,6 +12,7 @@ import 'antd/lib/checkbox/style/index.css';
|
||||||
import 'antd/lib/radio/style/index.css';
|
import 'antd/lib/radio/style/index.css';
|
||||||
import 'antd/lib/input/style/index.css';
|
import 'antd/lib/input/style/index.css';
|
||||||
import './TPMIndex.css';
|
import './TPMIndex.css';
|
||||||
|
import './css/headerExcess.css';
|
||||||
import logo from './images/logo.png';
|
import logo from './images/logo.png';
|
||||||
|
|
||||||
const $ = window.$
|
const $ = window.$
|
||||||
|
@ -277,7 +278,6 @@ class NewHeader extends Component {
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
HideAddcoursestypess = (i) => {
|
HideAddcoursestypess = (i) => {
|
||||||
console.log("调用了");
|
|
||||||
this.setState({
|
this.setState({
|
||||||
Addcoursestypes: false,
|
Addcoursestypes: false,
|
||||||
mydisplay: true,
|
mydisplay: true,
|
||||||
|
@ -496,9 +496,9 @@ class NewHeader extends Component {
|
||||||
}
|
}
|
||||||
//获取数据为空的时候
|
//获取数据为空的时候
|
||||||
gettablogourlnull = () => {
|
gettablogourlnull = () => {
|
||||||
this.setState({
|
// this.setState({
|
||||||
mygetHelmetapi2: undefined
|
// mygetHelmetapi2: undefined
|
||||||
});
|
// });
|
||||||
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';
|
||||||
|
@ -521,6 +521,7 @@ class NewHeader extends Component {
|
||||||
if (oldLink) {
|
if (oldLink) {
|
||||||
document.head.removeChild(oldLink);
|
document.head.removeChild(oldLink);
|
||||||
}
|
}
|
||||||
|
console.log("ac12111:",response.data.setting.tab_logo_url);
|
||||||
document.head.appendChild(link);
|
document.head.appendChild(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -573,11 +574,14 @@ class NewHeader extends Component {
|
||||||
|
|
||||||
matchpaths = (url) => {
|
matchpaths = (url) => {
|
||||||
const { match } = this.props;
|
const { match } = this.props;
|
||||||
|
|
||||||
if(url){
|
if(url){
|
||||||
if (url.indexOf('forums') > -1 && match.path.indexOf('forums') > -1) {
|
if (url.indexOf('forums') > -1 && match.path.indexOf('forums') > -1) {
|
||||||
return true
|
return true
|
||||||
} else if (url.indexOf('projects') > -1 && match.path.indexOf('projects') > -1) {
|
} else if (url.indexOf('projects') > -1 && match.path.indexOf('projects') > -1) {
|
||||||
return true
|
return true
|
||||||
|
} else if (url.indexOf('notice') > -1 && match.path.indexOf('notice') > -1) {
|
||||||
|
return true
|
||||||
} else if (url.indexOf('users') > -1 && match.path.indexOf('users') > -1) {
|
} else if (url.indexOf('users') > -1 && match.path.indexOf('users') > -1) {
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
|
@ -713,7 +717,7 @@ class NewHeader extends Component {
|
||||||
mygetHelmetapi2 && mygetHelmetapi2.nav_logo_url ?
|
mygetHelmetapi2 && mygetHelmetapi2.nav_logo_url ?
|
||||||
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(mygetHelmetapi2.nav_logo_url)}></img>
|
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(mygetHelmetapi2.nav_logo_url)}></img>
|
||||||
:
|
:
|
||||||
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={logo}></img>
|
""
|
||||||
}
|
}
|
||||||
</a>
|
</a>
|
||||||
<div className="head-nav pr" id={"head-navpre1"}>
|
<div className="head-nav pr" id={"head-navpre1"}>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -33,7 +33,8 @@ body>.-task-title {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
}
|
}
|
||||||
.headerContent{
|
.headerContent{
|
||||||
width:1200px;
|
width:100%;
|
||||||
|
padding:0px 70px;
|
||||||
margin:0px auto;
|
margin:0px auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -130,11 +131,6 @@ body>.-task-title {
|
||||||
color: #000 !important;
|
color: #000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.newHeader {
|
|
||||||
background: #24292D !important;
|
|
||||||
height: 60px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------个人主页:右侧提示区域--------------------------*/
|
/*-------------------个人主页:右侧提示区域--------------------------*/
|
||||||
.-task-sidebar {
|
.-task-sidebar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
|
||||||
|
.headerRight{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.head-navnew{
|
||||||
|
width:97%;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.iconSearch{
|
||||||
|
color: #666 !important;
|
||||||
|
margin-top: -13px !important;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.headerLeft{
|
||||||
|
flex:1;
|
||||||
|
}
|
||||||
|
.headerRight{
|
||||||
|
flex:0.8;
|
||||||
|
width:200px;
|
||||||
|
}
|
||||||
|
.headerRightbox{
|
||||||
|
width:100%;
|
||||||
|
display:flex;
|
||||||
|
}
|
||||||
|
.radius{border-radius: 50%;}
|
||||||
|
.posi-search{
|
||||||
|
flex:8;
|
||||||
|
margin-top:15px;
|
||||||
|
}
|
||||||
|
.headRightbox{
|
||||||
|
display:flex;
|
||||||
|
flex:4;
|
||||||
|
}
|
||||||
|
.headRightboxuse{
|
||||||
|
display:flex;
|
||||||
|
flex:2;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
.headRightpan,.headRightwrite,.headRighthint{
|
||||||
|
width: 48px;
|
||||||
|
height: 70px;
|
||||||
|
line-height: 70px;
|
||||||
|
}
|
||||||
|
.headRighthint-font{
|
||||||
|
color:#666 !important;
|
||||||
|
}
|
||||||
|
.searchBox{
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
.newslight{
|
||||||
|
left: 25px !important;
|
||||||
|
top: 14px !important;
|
||||||
|
color:#fff;
|
||||||
|
min-height:18px;
|
||||||
|
min-width: 18px;
|
||||||
|
line-height:18px;
|
||||||
|
padding:0px 3px;
|
||||||
|
border-radius:50%;
|
||||||
|
background:red;
|
||||||
|
position:absolute;
|
||||||
|
font-size:12px
|
||||||
|
}
|
||||||
|
.isLogin{
|
||||||
|
line-height:46px
|
||||||
|
}
|
||||||
|
.isLoginImg{
|
||||||
|
margin-top: 7px !important;
|
||||||
|
}
|
||||||
|
.headerRight a {
|
||||||
|
color: #1A3F5F;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.headerRight a:hover{
|
||||||
|
color: #21B351 !important;
|
||||||
|
}
|
||||||
|
.headerRight i{
|
||||||
|
font-size: 18px !important;
|
||||||
|
margin-top: 17px;
|
||||||
|
vertical-align: -4px;
|
||||||
|
}
|
||||||
|
.headIcon, #header_keyword_search {
|
||||||
|
padding-top: 0px !important;
|
||||||
|
}
|
||||||
|
.search-all {
|
||||||
|
width: 300px !important;
|
||||||
|
height: 28px !important;
|
||||||
|
}
|
||||||
|
.edu-menu-list li{
|
||||||
|
text-align:left;
|
||||||
|
}
|
||||||
|
.eduSearch{
|
||||||
|
width:50px !important;
|
||||||
|
height:26px;
|
||||||
|
line-height: 26px;
|
||||||
|
}
|
||||||
|
.eduSearch:after {
|
||||||
|
position: absolute;
|
||||||
|
height: 10px;
|
||||||
|
width: 1px;
|
||||||
|
background-color: #EBEBEB;
|
||||||
|
right: 0px;
|
||||||
|
top: 9px;
|
||||||
|
content: '';
|
||||||
|
}
|
||||||
|
.searchLabel{
|
||||||
|
margin: 0px !important;
|
||||||
|
vertical-align: 0px !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
.search-input{
|
||||||
|
width: 73% !important;
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
|
.newHeader .search-all .search-input {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.border-Tgrey-eb{
|
||||||
|
border-top: 1px solid #ebebeb;
|
||||||
|
}
|
|
@ -0,0 +1,150 @@
|
||||||
|
.newHeader {
|
||||||
|
background: #fff;
|
||||||
|
width: 100%;
|
||||||
|
height: 70px;
|
||||||
|
min-width: 1200px;
|
||||||
|
position: fixed;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
z-index: 99;
|
||||||
|
-moz-box-shadow: 0px 0px 12px rgba(0,0,0,0.1);
|
||||||
|
box-shadow: 0px 0px 12px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
.educontent {
|
||||||
|
width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.head-nav {
|
||||||
|
text-align: center;
|
||||||
|
height: 60px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width:100%;
|
||||||
|
padding:0px 70px
|
||||||
|
}
|
||||||
|
.newHeader .logoimg {
|
||||||
|
margin-top: 12px;
|
||||||
|
float: left;
|
||||||
|
width: 48px;
|
||||||
|
}
|
||||||
|
.headerLeft {
|
||||||
|
-ms-flex: 1 1;
|
||||||
|
flex: 1 1;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav {
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
z-index: 3;
|
||||||
|
height: 70px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav li {
|
||||||
|
float: left;
|
||||||
|
height: 70px;
|
||||||
|
line-height: 70px;
|
||||||
|
padding: 0px 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav li a {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
color: #333;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav li:hover a, .head-nav ul#header-nav li.active a{
|
||||||
|
color: #1484EF;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav li.active a::after{
|
||||||
|
content: "";
|
||||||
|
width: 100%;
|
||||||
|
height:2px;
|
||||||
|
background-color: #1484EF;
|
||||||
|
left:0px;
|
||||||
|
bottom: 12px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.headRightboxuse {
|
||||||
|
-ms-flex: 2 1;
|
||||||
|
flex: 2 1;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
.headRightbox, .headRightboxuse {
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.edu-menu-panel {
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.edu-menu-panel:hover .edu-menu-list{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
ul.edu-menu-list li:hover{
|
||||||
|
background: #fafafa !important;
|
||||||
|
/* color: #1484EF !important */
|
||||||
|
}
|
||||||
|
ul.edu-menu-list li:hover > a{color: #1484EF !important;}
|
||||||
|
|
||||||
|
.headRighthint, .headRightpan, .headRightwrite {
|
||||||
|
width: 48px;
|
||||||
|
height: 60px;
|
||||||
|
line-height: 60px;
|
||||||
|
}
|
||||||
|
.color-white {
|
||||||
|
color: #ffffff!important;
|
||||||
|
}
|
||||||
|
em.vertical-line {
|
||||||
|
display: inline-block;
|
||||||
|
width: 2px;
|
||||||
|
background: #999;
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
.edu-menu-list {
|
||||||
|
position: absolute;
|
||||||
|
padding: 5px 0px;
|
||||||
|
box-shadow: 0 2px 8px 0 rgba(0,0,0,.2);
|
||||||
|
display: none;
|
||||||
|
width: 120px;
|
||||||
|
background: #FFFFff;
|
||||||
|
right: -5px;
|
||||||
|
border-radius: 0px 0px 4px 4px;
|
||||||
|
color: #05101a;
|
||||||
|
font-size: 14px;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
.edu-menu-list li {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0px 15px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 35px;
|
||||||
|
line-height: 35px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.edu-menu-list li a, .edu-menuSmall-list li a {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
color: #323232;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.currentName {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0px 15px;
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-size: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
cursor: default;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.border-Bgrey-eb {
|
||||||
|
border-bottom: 1px solid #ebebeb;
|
||||||
|
}
|
||||||
|
.task-hide {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
.head-nav ul#header-nav li:hover a, .head-nav ul#header-nav li.active a{
|
||||||
|
color: #1484EF;
|
||||||
|
}
|
||||||
|
.head-nav ul#header-nav li.active a::after{
|
||||||
|
content: "";
|
||||||
|
width: 100%;
|
||||||
|
height:2px;
|
||||||
|
background-color: #1484EF;
|
||||||
|
left:0px;
|
||||||
|
bottom: 12px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
Loading…
Reference in New Issue