Compare commits

...

645 Commits

Author SHA1 Message Date
caishi 4cb46f4d53 change 注释 2023-08-07 14:12:32 +08:00
caishi 666693f332 贡献者-无login则mailto 2023-07-20 15:12:12 +08:00
caishi f542446177 hovercard.json 404 2023-07-17 15:52:03 +08:00
caishi 4183c95af3 同步弹框显示问题 2023-07-12 12:26:05 +08:00
caishi 91ea90546e 设置-修改邮箱 2023-07-03 14:00:31 +08:00
caishi c7d92a2f59 webhook数量上限 2023-06-29 14:38:02 +08:00
caishi 0bfd5c18a2 webhooks数量上限 2023-06-28 10:30:13 +08:00
caishi 2afcbe5424 build 2023-05-24 10:33:28 +08:00
caishi 67bba9ebdc 邮箱验证 2023-04-19 10:19:26 +08:00
caishi a2e3617036 build 2023-04-18 16:58:23 +08:00
caishi a0a83f63f6 xss 以及弹框文案提示 2023-04-18 15:56:53 +08:00
caishi 3806a5dd8d 合并请求-分支需转换 2023-04-13 15:58:20 +08:00
caishi d318546687 link 2023-04-07 15:14:59 +08:00
caishi 74337f6eb1 style 2023-04-07 14:40:52 +08:00
caishi ebe3d1df2c 细节 2023-04-07 14:36:14 +08:00
caishi b3639e4052 the same for last one 2023-04-07 11:58:55 +08:00
caishi ceab8a80d1 头部同步样式 2023-04-07 11:15:21 +08:00
caishi f4ad819bea 头部更新 2023-04-07 11:11:15 +08:00
caishi cc093b6ddf 同步密码弹窗问题 2023-03-14 11:39:02 +08:00
caishi 0552ac4b9a sub_entries 接口返回的last_commit对象为空,前端需做出对应措施 2023-02-13 11:48:40 +08:00
caishi 75a0abe11a jiami 2022-12-08 16:52:16 +08:00
caishi ad60c52e5c 同步 gitlink 2022-12-08 16:01:42 +08:00
caishi 2f9db85ccc 新建文件-加密content 2022-12-08 15:08:43 +08:00
dingyongkang cf6be69846 修改 2022-09-02 11:27:52 +08:00
dingyongkang d9e27cf0d8 bug修复 2022-08-31 10:25:28 +08:00
dingyongkang 4e666a8a6d bug修复 2022-08-31 10:02:23 +08:00
dingyongkang e04d17fd50 bug修复 2022-08-30 18:46:21 +08:00
herman94 3d2e91dafd feat: 离开当前页面清除定时器 2022-07-21 09:30:08 +08:00
herman94 5dfe4b2350 feat: 定时任务的处理 2022-07-20 18:10:25 +08:00
herman94 44edd530fc feat: 更改清除定时任务位置 2022-07-20 15:56:59 +08:00
herman94 9086593bf8 feat: 定时任务增加文本提示 2022-07-20 15:00:24 +08:00
herman94 29592bc423 feat: 更改增加定时请求任务 2022-07-20 14:42:56 +08:00
herman94 bfc51c04aa Merge branch 'dev_educoder_new' of https://gitlink.org.cn/Gitlink/forgeplus-react into dev_educoder_new 2022-07-20 10:55:40 +08:00
linlu 080e0f6d4e fix 2022-07-14 14:54:03 +08:00
herman94 ba4ad19402 Merge branch 'dev_educoder_new' of https://gitlink.org.cn/Gitlink/forgeplus-react into dev_educoder_new 2022-07-14 11:25:04 +08:00
linlu 554ff5b175 fix 2022-07-14 11:13:09 +08:00
herman94 940a1b33e6 fixed: 重要行添加样式处理 2022-07-13 10:47:58 +08:00
herman94 470de8e973 Merge branch 'dev_educoder_new' of https://gitlink.org.cn/Gitlink/forgeplus-react into dev_educoder_new 2022-07-12 16:45:34 +08:00
herman94 afdb688cd8 fixed: 增加对应行字段 2022-07-12 16:45:25 +08:00
xiaoxiaoqiong 3dbc2cfb42 fix 2022-07-12 15:25:38 +08:00
herman94 5dc6e827c2 feat: 取值字段调整 2022-07-12 15:18:49 +08:00
herman94 f4103c5516 feat: 修改展示的为代码形式 2022-07-12 14:05:46 +08:00
herman94 0ba4c28f21 feat: 祛除打印以及放开动态文件 2022-07-12 09:19:33 +08:00
herman94 a39c1ee1e1 feat: 代码质量分析的开发联调 2022-07-11 20:39:07 +08:00
herman94 429a8db84b Merge branch 'dev_educoder_new' of https://gitlink.org.cn/Gitlink/forgeplus-react into dev_educoder_new 2022-07-11 13:48:03 +08:00
herman94 dfabc4a36b feat: 代码暂存 2022-07-11 13:45:30 +08:00
herman94 4e5a851484 代码质量分析 2022-07-11 11:45:44 +08:00
linlu f5e1342a03 fix 2022-07-11 11:44:29 +08:00
caishi f47fdbb1e8 上传头像透明背景变成了黑色背景 2022-05-30 10:02:18 +08:00
何童崇 191a37b97d 修改赞助商 2022-05-30 10:02:04 +08:00
何童崇 dbdd707613 调整glcc样式 2022-05-30 10:01:52 +08:00
caishi 34dc16cac0 devops返回到引擎配置页面需要加state 2022-05-30 10:01:40 +08:00
caishi 13636d74be 合并代码---修改glcc首页50fa57188fcdb8 2022-05-27 14:25:19 +08:00
何童崇 40bc385715 修改glcc首页 2022-05-27 14:24:21 +08:00
何童崇 d81cab7f19 修改赞助商logo 2022-05-27 14:24:03 +08:00
何童崇 30711408a2 修改赞助商链接 2022-05-27 14:23:52 +08:00
何童崇 de0337dfb6 适配logo 2022-05-27 14:23:41 +08:00
何童崇 467e7b8582 修改登录框样式 2022-05-27 14:23:25 +08:00
何童崇 8d4154af1f 修改glcc2期 2022-05-27 14:23:17 +08:00
何童崇 2ce686aae2 修改项目及课题路由 2022-05-27 14:23:07 +08:00
何童崇 4efb81b587 glcc赞助商 2022-05-27 14:22:56 +08:00
谢思 943bb18edf issue 2022-05-27 14:22:37 +08:00
谢思 2638b0b4c9 issue 2022-05-27 14:22:25 +08:00
谢思 895cf78521 issue 2022-05-27 14:22:14 +08:00
谢思 b93f387ca3 glcc二期 新增课题详情页 2022-05-27 14:22:01 +08:00
caishi bbe65c9442 merge 退出仓库 2022-05-27 14:21:44 +08:00
caishi 2c6eb30012 服务新建成功提示语+激 活devops后未跳转到引擎配置 2022-05-27 14:20:16 +08:00
caishi 0f6603bee7 文件列表message只显示第一行的内容 2022-05-25 17:33:44 +08:00
caishi a8b5a9c18d 判断是否显示readme gitlink也要改 2022-05-25 17:33:20 +08:00
caishi 4a659beda1 合并gitlink修改的相关代码-(文件夹、文件名字含有特殊字符) 2022-05-25 17:26:05 +08:00
caishi b396f08176 文件夹、文件名字含有特殊字符 2022-05-25 17:24:28 +08:00
何童崇 a604cfe1b7 修改文案 2022-05-25 17:24:11 +08:00
caishi 753cefe8b2 个人主页-头部 2022-05-25 17:23:59 +08:00
何童崇 554cec7e98 上传时间修改 2022-05-25 17:23:44 +08:00
谢思 7b52b4676d merge 学生报名通道关闭 2022-05-25 17:22:55 +08:00
谢思 95c4bed0cb merge 50d92c2bdd 2022-05-25 17:22:26 +08:00
何童崇 6b79378cc6 修改报名时间及报名样式控制 2022-05-25 17:21:53 +08:00
何童崇 5aae3d9b61 修改issue 2022-05-25 17:21:42 +08:00
谢思 e6bc87a74f 开源夏令营二期issue 2022-05-25 17:21:32 +08:00
谢思 b30bf617d9 开源夏令营二期issue 2022-05-25 17:21:22 +08:00
谢思 5605d1638e merge 2022-05-25 17:21:11 +08:00
caishi 9a32e37a0c readme 接口返回编辑、显示数据的字段不一致 2022-05-25 17:20:34 +08:00
caishi 0a6c000d4f 暂时隐藏服务入口 2022-05-25 17:20:07 +08:00
谢思 421ece9506 样式优化 2022-05-25 17:19:35 +08:00
谢思 6eed5a165d merge 开源夏令营2期issue 2022-05-25 17:19:23 +08:00
何童崇 222c231f76 merge 修改glcc issue 2022-05-25 17:18:49 +08:00
何童崇 5a4ee03587 修改glcc issue 2022-05-25 17:18:22 +08:00
caishi 9c0c9dfc03 update issue 2022-05-25 17:18:09 +08:00
何童崇 f2836b5b7c 优化样式 2022-05-25 17:17:53 +08:00
谢思 0206ff6681 项目及课题列表优化 2022-05-25 17:17:43 +08:00
谢思 29b7d82929 完整流程联调 2022-05-25 17:17:32 +08:00
何童崇 519737bf2e 修改取消所有报名后的问题 2022-05-25 17:17:19 +08:00
何童崇 576fd8b2c3 merge 修改文件服务地址 2022-05-25 17:17:07 +08:00
谢思 5689bf439c merge 课题项目列表 2022-05-25 17:16:22 +08:00
何童崇 b3398bf0d3 新增学生报名静态页面 2022-05-25 17:15:18 +08:00
caishi cdb7746e5e update 2022-05-25 17:15:06 +08:00
谢思 3fb1b9496e 开源夏令营报名跳转到另一个链接 2022-05-25 17:14:45 +08:00
caishi 281e1b27f8 服务‘ 2022-05-25 17:14:32 +08:00
caishi 31ac62a72d merge 服务-save 2022-05-25 17:14:17 +08:00
谢思 17295a4f6d 报名页面展示报名时间错误 2022-05-25 17:13:11 +08:00
谢思 e9439cf965 glcc优化 2022-05-25 17:13:00 +08:00
caishi 934157349d 新建合并请求-提交部分增加分页功能 2022-05-25 17:12:50 +08:00
caishi cb811990f1 新建合并请求-底部提交没有显示isFirstLoading控制 2022-05-25 17:12:37 +08:00
caishi 3d2da98542 合并请求需请求两次获取分支的接口 2022-05-25 17:12:24 +08:00
caishi 87ca9a89ef markdown 左右宽度 2022-05-25 17:12:11 +08:00
谢思 08ca118dd2 开源夏令营帮助中心图片限制最大宽度 2022-05-25 17:11:48 +08:00
caishi 3c2df14e86 新建issue时报错不清空issue内容 2022-05-25 17:11:35 +08:00
何童崇 56f06f0a34 修改Wiki校验样式 2022-05-25 17:10:30 +08:00
谢思 b825b982e2 修改开源夏令营帮助中心wiki仓库 2022-05-25 17:10:13 +08:00
何童崇 33dec2dae5 修改Wiki高度及视频等路径 2022-05-25 17:10:01 +08:00
caishi 81c0f5481b merge 合并请求分支下拉接口以及搜索 2022-05-25 17:09:45 +08:00
caishi 0b54a6f2cc 新建合并请求-分支下拉搜索 2022-05-25 17:08:35 +08:00
caishi 7535b4b29c issue/pr各下拉列表增加搜索功能 2022-05-25 17:08:24 +08:00
caishi 90acbe8f61 从各新建合并请求点击时跳转的链接要是默认分支 2022-05-25 17:08:09 +08:00
caishi 71a69502e0 上传文件 2022-05-25 17:07:47 +08:00
caishi fdad2eee72 拖拽上传文件夹 2022-05-25 17:07:36 +08:00
谢思 513eb0fc52 merge 修改开源夏令营文件上传服务以及banner图压缩以及新闻公告代码优化 2022-05-25 17:07:14 +08:00
谢思 b659df1960 更新正式环境帮助中心wiki仓库 2022-05-25 17:06:37 +08:00
谢思 d1f4bcc3c4 参与高校更新 2022-05-25 17:03:55 +08:00
谢思 9a93d7920d 提交报名信息二级确认框 2022-05-25 17:03:33 +08:00
谢思 538c388af0 修改文案 2022-05-25 17:03:20 +08:00
谢思 d8646a237c merge 开源夏令营优化 2022-05-25 16:54:55 +08:00
谢思 2cb833be1e 报名提交确认框 2022-05-25 16:54:22 +08:00
谢思 b85bd30217 报名截至时间 2022-05-25 16:53:59 +08:00
谢思 a9d3bd68a9 merge 限制开源夏令营报名时间 2022-05-25 16:53:47 +08:00
何童崇 46231868aa 样式bug 2022-05-25 16:53:15 +08:00
谢思 4f57935633 mrege 开源xia夏令营issue 2022-05-25 16:52:53 +08:00
谢思 977e6afbc0 merge 开源夏令营issue 1 2022-05-25 16:52:16 +08:00
谢思 72ec7103d0 开源夏令营issue 2022-05-25 16:51:36 +08:00
谢思 43be508702 引入组件 2022-05-25 16:51:23 +08:00
何童崇 d4740c84a9 merge 修改glcc首页 2022-05-25 16:44:52 +08:00
谢思 e4f544fe75 merge 开源夏令营报名页+帮助页+首页-组织方、联系我们 2022-05-25 16:44:10 +08:00
谢思 7aa238f10d merge 首页-合作伙伴 2022-05-25 16:43:22 +08:00
何童崇 06afdae21b 首页静态页面完成75% 2022-05-25 16:41:37 +08:00
谢思 169c51d69d 帮助中心 2022-05-25 16:41:11 +08:00
谢思 27c55e8a48 开源夏令营报名页面 2022-05-25 16:40:54 +08:00
何童崇 0355d9c80c 初始化glcc 2022-05-25 16:40:39 +08:00
caishi d3f3a673b9 update-加入项目按钮icon 2022-04-25 10:30:18 +08:00
caishi da58b17ca2 判断是否登录-checkiflogin 2022-04-24 15:39:29 +08:00
caishi 794cf1f283 route 2022-04-18 10:14:45 +08:00
caishi 422b916be1 route 2022-04-18 10:13:50 +08:00
caishi ee5bddaa75 update 2022-04-18 09:22:29 +08:00
caishi 1fd7a21e9f update 2022-04-14 17:56:11 +08:00
caishi 6218fe83ed 加入项目、新建项目要判断是否登录 2022-04-14 17:26:57 +08:00
caishi fe8494ec17 image + style 2022-04-14 15:31:30 +08:00
caishi 1d3128b1eb 主页banner内容定制 2022-04-14 14:26:35 +08:00
caishi c414677441 头部链接在当前页打开 2022-04-14 10:51:48 +08:00
caishi 2f2344fe55 merge-update 2022-04-13 14:32:28 +08:00
caishi 3e98988f83 merge后稍微修改样式 2022-04-12 17:06:28 +08:00
caishi 3a717d818a mergegitlink date:2022-04-12 2022-04-12 14:32:57 +08:00
caishi e8b1dcb037 merge to 7bee6f 2022-04-12 14:30:57 +08:00
caishi eae91a7f4f merge to 712fe6679 2022-04-12 14:29:07 +08:00
caishi 600cef8826 merge to d1effecd13 2022-04-12 14:26:21 +08:00
caishi f75b4b73da merge to c801666b 2022-04-12 14:24:35 +08:00
caishi 5e64ce0d40 merge to bd7e1b 2022-04-12 14:19:51 +08:00
caishi fbaf19855a 分支无数据提示 2022-04-12 14:15:43 +08:00
caishi 8634c330c4 merge bbca3d51 2022-04-12 14:15:04 +08:00
caishi 5b8cf2e441 Merge branch 'gitlink_server' into dev_educoder_new
# Conflicts:
#	package-lock.json
#	src/App.js
#	src/forge/DevOps/ServiceModal.jsx
#	src/forge/Head/Footer.jsx
#	src/forge/Head/Header.js
#	src/forge/Main/Index.js
#	src/forge/Main/sub/DetailBanner.jsx
#	src/forge/Settings/Setting.js
#	src/forge/Wiki/fetch.js
#	src/forge/users/Infos.js
#	src/modules/login/EducoderLogin.js
#	src/modules/login/LoginDialog.js
#	src/modules/tpm/TPMIndex.css
#	src/modules/tpm/TPMIndexHOC.js
2022-04-12 09:16:58 +08:00
caishi 5daada4b98 issue按钮显示 2022-04-08 16:37:35 +08:00
caishi 4c0f3497a9 新建发行版 2022-04-07 18:10:00 +08:00
caishi d4a59e9a94 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2022-04-07 17:58:34 +08:00
xxq250 87f26db26d Merge pull request '登录后如果打开首页,第一次默认进入个人详情页' (#355) from tongChong/forgeplus-react:hotfix_gitlink into gitlink_server 2022-04-06 14:36:49 +08:00
何童崇 4a4d767710 登录后如果打开首页,第一次默认进入个人详情页 2022-04-06 14:28:55 +08:00
caishi 4f71cd1c0a ignore 2022-04-03 13:21:27 +08:00
caishi 1f7dda2526 仓库设置 2022-04-01 19:19:15 +08:00
yystopf e8a74dc780 Merge pull request '合并最新代码' (#354) from gitlink_server into pre_gitlink_server 2022-04-01 19:18:33 +08:00
caishi fc3a1e4088 issue详情-word 2022-03-31 14:51:10 +08:00
caishi 335e484167 style 2022-03-30 16:13:42 +08:00
caishi 4d613fd07f 同上 2022-03-29 09:51:20 +08:00
caishi cb87a9d075 403,404 2022-03-29 09:47:38 +08:00
caishi 25a3e10c27 issues 2022-03-23 16:14:00 +08:00
xxq250 60327188eb Merge pull request '关于我们职位招聘显示不全' (#349) from gitlink_server into pre_gitlink_server 2022-03-17 17:13:09 +08:00
xxq250 4b3e62b907 Merge pull request '修复issue' (#348) from durian/forgeplus-react:gitlink_server into gitlink_server 2022-03-17 17:11:10 +08:00
谢思 714b90581b 关于我们职位招聘显示不全 2022-03-16 16:29:16 +08:00
xxq250 ff1e063979 Merge pull request '数据统计->专业定位不显示数据问题修复' (#344) from durian/forgeplus-react:gitlink_server into gitlink_server 2022-03-03 11:43:53 +08:00
unknown 4264c127d9 数据统计->专业定位不显示数据问题修复 2022-03-03 09:53:27 +08:00
xxq250 400bd28801 Merge pull request '0304-issue代码修改' (#343) from tongChong/forgeplus-react:gitlink_server into gitlink_server 2022-03-02 15:57:06 +08:00
何童崇 15b2ce6ea9 修改组织图片issue 2022-03-02 15:10:18 +08:00
何童崇 3ae9284494 0304-issue 2022-03-02 14:10:23 +08:00
caishi fb63377996 login页面logo更新 2022-03-02 10:27:22 +08:00
caishi 9527f69486 组织成员-每页条数 2022-02-24 14:22:09 +08:00
caishi b82e7d9d69 组织成员-接口参数page、limit 2022-02-22 11:39:53 +08:00
caishi 9db4f1b18c 0216-issue 2022-02-16 10:37:24 +08:00
caishi c13c7025dd webhook-新建 2022-02-11 09:56:06 +08:00
caishi d8384ab4bd 引擎-权限-非报告者即可 2022-02-10 16:00:54 +08:00
xxq250 882f0760e8 Merge pull request 'issue列表筛选bug以及新增按钮' (#337) from caishi/forgeplus-react:gitlink_server into gitlink_server 2022-01-26 13:47:05 +08:00
caishi 5e337cb94f issue列表排序时其它筛选条件不起作用 2022-01-26 11:35:36 +08:00
caishi 569bc39e1e cursor 2022-01-24 15:57:11 +08:00
caishi 0e643287f9 issue列表:筛选清除按钮、切换时清除分页 2022-01-21 15:29:14 +08:00
xxq250 3d9b43a784 Merge pull request 'issue列表筛选保存、项目名含http报错等问题' (#336) from caishi/forgeplus-react:gitlink_server into gitlink_server 2022-01-14 17:37:28 +08:00
caishi ed2c16661a issue-筛选保存 2022-01-14 17:33:25 +08:00
xxq250 8e4819217c Merge pull request '贡献者返回字段改为list' (#334) from caishi/forgeplus-react:gitlink_server into gitlink_server 2022-01-10 18:03:00 +08:00
caishi d03182cbd4 贡献者返回字段改为list 2022-01-10 18:00:01 +08:00
xxq250 7416d9bcb6 Merge pull request '修改头像、组织添加成员等功能' (#333) from caishi/forgeplus-react:gitlink_server into gitlink_server 2022-01-07 16:57:21 +08:00
caishi 3bfbba2303 同上-update 2022-01-07 16:32:01 +08:00
caishi fa47ae9b5e 设置页面增加修改功能 2022-01-07 11:00:52 +08:00
caishi ac93cfbc8a 截取头像-正方形 2022-01-06 14:03:41 +08:00
caishi bb7732c666 修改后更新 2022-01-06 09:31:59 +08:00
caishi 81d8a866f0 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2022-01-05 11:48:37 +08:00
caishi 0a334abede 修改头像组件 2022-01-05 11:48:31 +08:00
xxq250 1ada91917e Merge pull request 'issue-项目首页和个人主页、点击新开页' (#332) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-31 16:52:36 +08:00
caishi 25f193a1d3 点击新开页 2021-12-30 17:21:18 +08:00
caishi e8bcebbf71 notice-show 2021-12-29 11:41:34 +08:00
xxq250 afaef5f0d0 Merge pull request 'issue-以及分支含特殊字符的处理' (#330) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-28 15:52:54 +08:00
caishi e096e1aa50 branch 转义 2021-12-28 15:50:25 +08:00
caishi ec2d51e0d3 基本资料-性别、单位非必填 2021-12-24 14:35:07 +08:00
xxq250 4ab36af1a9 Merge pull request 'fix issue' (#329) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-24 09:47:40 +08:00
caishi b0088a24ae 分支-特殊字符 2021-12-23 14:07:12 +08:00
caishi 2f25643fcc issue-2021-12-22 2021-12-22 18:29:23 +08:00
caishi 91338c863c explore/all 筛选 2021-12-21 14:17:14 +08:00
xxq250 9786aaa4fe Merge pull request '密码管理+issue' (#327) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-20 17:50:23 +08:00
caishi 34f108118b 文案更新’ 2021-12-20 17:37:02 +08:00
caishi 61abecde53 密码管理 2021-12-20 17:25:25 +08:00
xxq250 326aede507 Merge pull request 'issue' (#324) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-17 16:24:06 +08:00
caishi c3cc105468 易修改为疑修 2021-12-17 15:49:52 +08:00
caishi 80e20a9cca 热门开发者-无项目情况 2021-12-17 10:13:00 +08:00
xxq250 bb8e671c20 Merge pull request 'issue' (#322) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-16 16:11:43 +08:00
caishi 1954a4f8d3 个人主页-组织-sort 2021-12-16 16:08:13 +08:00
caishi b3dec1ee8e Merge branches 'gitlink_server' and 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-15 09:46:44 +08:00
caishi 278cdba352 commit clear 2021-12-15 09:46:39 +08:00
caishi e25de315f8 clear 2021-12-15 09:31:43 +08:00
xxq250 6bbdb3d7a8 Merge pull request '教学实践页面' (#318) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-12-14 14:11:27 +08:00
谢思 eb254de9fd 教学实践页面顶部增加跳转 2021-12-14 13:52:27 +08:00
xxq250 c9279b274e Merge pull request '修改issue详情路由及websocket定时请求' (#316) from tongChong/forgeplus-react:gitlink_server into gitlink_server 2021-12-13 16:58:29 +08:00
何童崇 ce477020de Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-13 16:18:34 +08:00
xxq250 21078af26f Merge pull request 'issue修改' (#314) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-12-13 16:08:30 +08:00
何童崇 bc5ec6103e 兼容特定情况下的报错 2021-12-13 16:04:36 +08:00
何童崇 fcc53f5278 上传websocket修改 2021-12-13 15:48:31 +08:00
谢思 da69213b8e Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-13 15:34:26 +08:00
xxq250 365ff99785 Merge pull request '教学实践' (#315) from durian/forgeplus-react:feature_teaching into gitlink_server 2021-12-13 15:25:02 +08:00
谢思 e206de9f1f Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into feature_teaching 2021-12-13 15:09:17 +08:00
何童崇 358880bfd2 修改issue详情路由 2021-12-13 15:01:03 +08:00
谢思 63971edc44 教学实践优化 2021-12-13 13:19:26 +08:00
谢思 020a976135 易修修改 2021-12-13 11:04:17 +08:00
谢思 29d74526d1 教学实践页面 2021-12-10 15:42:50 +08:00
xxq250 2e1cf5ad82 Merge pull request '针对educoder项目做限制' (#313) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-09 18:23:02 +08:00
caishi 56c8f7fa82 educoder项目添加只读标识 2021-12-09 17:31:34 +08:00
caishi 4db125545f educoder项目-图片不能点击 2021-12-09 14:04:54 +08:00
caishi ecd1a8444e Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-09 11:03:57 +08:00
caishi 0a0705d42c educoder项目无提交记录信息 2021-12-09 11:03:52 +08:00
xxq250 be0e0134f3 Merge pull request 'issue' (#312) from hc1913847458/forgeplus-react:gitlink_server into gitlink_server 2021-12-09 10:43:40 +08:00
hucong 6904116a3a Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-09 10:15:35 +08:00
hucong 421218ef77 issue 2021-12-09 10:15:30 +08:00
xxq250 5f89356679 Merge pull request 'issue以及需求更改' (#311) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-09 09:54:14 +08:00
hucong cab540b812 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-09 09:50:35 +08:00
caishi 2ffa835b84 代码库-贡献者和语言使用单独接口,detail.json接口不返回这两个数组 2021-12-09 09:48:47 +08:00
caishi e93778b004 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-08 15:21:25 +08:00
caishi 232e09c04f clear 2021-12-08 15:20:55 +08:00
xxq250 459e05f465 Merge pull request '易修声明功能' (#310) from starlee/forgeplus-react:lzx-claim-2.0 into gitlink_server 2021-12-08 15:15:36 +08:00
caishi 5ee3519c21 项目首页增加搜索功能 2021-12-08 10:11:13 +08:00
caishi 4270d1d8eb @我列表头像链接错误 2021-12-07 17:28:25 +08:00
hucong dd298380a7 相关文案修改 2021-12-07 16:31:51 +08:00
caishi 255ae11012 项目首页-educoder平台头像处理 2021-12-07 16:03:37 +08:00
caishi ec4e70d7f0 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-12-06 16:20:09 +08:00
caishi 758600e4d0 搜索页翻页距离底部的距离 2021-12-03 10:47:47 +08:00
xxq250 7d4def6056 Merge pull request '项目首页-精选项目-固定八个组织的logo信息' (#307) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-02 17:30:42 +08:00
caishi a1cc59e89b 项目首页-精选项目-固定八个组织 2021-12-02 16:27:11 +08:00
xxq250 9e4ca503df Merge pull request 'issue-优化' (#306) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-02 14:16:09 +08:00
caishi 472ea69e29 上线后-update 2021-12-01 18:04:49 +08:00
xxq250 3c5e10fa58 Merge pull request '新建文件不能包含特殊字符:!@\/:"<>|?%' (#305) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-12-01 11:10:48 +08:00
caishi 915bf69e6f 文件名特殊字符判断 2021-12-01 11:06:10 +08:00
xxq250 a00452b960 Merge pull request 'issue' (#304) from hc1913847458/forgeplus-react:gitlink_server into gitlink_server 2021-12-01 09:01:48 +08:00
hucong 3eeed4620c issue 2021-12-01 08:51:17 +08:00
xxq250 54858bcd39 Merge pull request 'issue' (#303) from hc1913847458/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 18:37:23 +08:00
hucong 6820fed5b5 issue 2021-11-30 18:34:41 +08:00
xxq250 82ac32d84f Merge pull request 'issue修改-merge 解决冲突' (#302) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 18:07:33 +08:00
xxq250 fe6f8a9349 Merge pull request 'issue' (#301) from hc1913847458/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 18:04:42 +08:00
caishi d4f0d21608 添加成员-删了后不能重复添加成员 2021-11-30 17:55:29 +08:00
hucong 56c867a4a3 issue 2021-11-30 17:51:50 +08:00
hucong bd219c0b41 issue 2021-11-30 17:11:56 +08:00
caishi 1292019aac merge-conflicts 2021-11-30 17:00:58 +08:00
caishi 33e1b7e400 合并请求-权限 2021-11-30 16:58:48 +08:00
xxq250 9af269061d Merge pull request '优化复制issue' (#300) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 16:58:18 +08:00
谢思 2557b36cea Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-30 16:54:09 +08:00
谢思 f6c84e4fad 复制issue 2021-11-30 16:52:12 +08:00
xxq250 161866aaaf Merge pull request 'issue' (#299) from hc1913847458/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 16:52:02 +08:00
hucong 3151314529 易修 2021-11-30 16:27:13 +08:00
hucong 775434d856 易修 2021-11-30 15:44:43 +08:00
caishi b802fd2fbd merge+update 2021-11-30 15:37:28 +08:00
caishi cee82314da merge 2021-11-30 15:29:32 +08:00
caishi 7295a71bc5 标记显示宽度 2021-11-30 15:27:11 +08:00
xxq250 4971dc0a3d Merge pull request 'issue' (#298) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 15:26:36 +08:00
caishi e591de00fd 加入项目申请按钮 2021-11-30 15:22:23 +08:00
谢思 c331dbb445 优化复制issue@列表 2021-11-30 15:05:40 +08:00
caishi 36a58c0fe3 合并请求-字段 2021-11-30 14:16:42 +08:00
caishi 0e949110fd 后端新增字段-非成员不能修改编辑易修 2021-11-30 14:07:22 +08:00
caishi 4ffb2acc9c 编辑标记-长度 2021-11-30 13:57:05 +08:00
xxq250 0991ba4698 Merge pull request 'issue修改' (#297) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 11:37:41 +08:00
caishi f82a51fd83 merge 2021-11-30 11:28:43 +08:00
caishi 98ed1794cf 代码库 2021-11-30 11:28:02 +08:00
baladiwei 6e756826f7 Merge pull request 'issue' (#296) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-30 11:27:09 +08:00
谢思 684f9dbfe1 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-30 11:20:20 +08:00
谢思 9577478e97 issue 2021-11-30 11:19:55 +08:00
caishi ff9beb0949 issue-修改‘ 2021-11-30 11:11:25 +08:00
caishi f4055e50e2 个人中心devops-立即激活跳转报错 2021-11-30 09:48:35 +08:00
caishi af8a5058b8 devops 2021-11-30 09:15:33 +08:00
xxq250 efb918e21d Merge pull request 'issue-优化' (#295) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-29 17:42:15 +08:00
caishi a9a3f9c977 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-29 16:26:35 +08:00
caishi d6b0eee067 update 2021-11-29 16:25:55 +08:00
xxq250 ca409857bb Merge pull request '修改wiki调用' (#294) from tongChong/forgeplus-react:gitlink_server into gitlink_server 2021-11-29 16:20:39 +08:00
何童崇 219590a0cd 修改wiki调用 2021-11-29 16:07:51 +08:00
caishi 2f88227388 devops-name update 2021-11-29 14:35:05 +08:00
caishi a3b943f744 同上-代码编辑器选中高亮 2021-11-29 14:17:33 +08:00
caishi 8b4fc88b1d merge 编辑器滚动问题‘
2021-11-29 14:16:58 +08:00
caishi 131d8fa81c 加入项目错误提示 2021-11-29 14:01:23 +08:00
xxq250 3c2e899a20 Merge pull request 'issue-优化' (#291) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-29 11:02:21 +08:00
caishi 07511efbd6 issue-优化 2021-11-29 10:55:50 +08:00
caishi 3eaf1dc214 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-29 09:56:05 +08:00
caishi 9608f204e8 优化 2021-11-29 09:54:54 +08:00
xxq250 534a6bdeab Merge pull request '优化' (#290) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-29 09:52:58 +08:00
谢思 ca5c279ac0 修改意见反馈的指派成员 2021-11-29 09:34:45 +08:00
谢思 ce3b460717 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-29 09:03:29 +08:00
xxq250 1c87cf6b98 Merge pull request '解决冲突以及issue' (#289) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-26 15:17:00 +08:00
caishi 614f0ea436 add aboutus-update 2021-11-26 14:29:36 +08:00
xiaoxiaoqiong a3ae80aa22 Merge branch 'feature_aboutus' into gitlink_server 2021-11-26 14:27:34 +08:00
baladiwei 70f9cd0997 Merge pull request '优化代码' (#288) from durian/forgeplus-react:about_us into feature_aboutus 2021-11-26 14:15:08 +08:00
谢思 fa247e39bf 优化代码 2021-11-26 14:11:09 +08:00
caishi 97a81572a9 package 2021-11-26 14:09:15 +08:00
caishi e084b015cf Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2021-11-26 14:08:11 +08:00
xiaoxiaoqiong cbe427a114 解决merge关于我们冲突 2021-11-26 14:02:47 +08:00
xiaoxiaoqiong f842f75065 mrege develop 2021-11-26 13:40:27 +08:00
caishi c8eed99f5d 个人主页-贡献度无数据时只显示x/y轴的内容 2021-11-26 10:59:33 +08:00
xxq250 fbd4273603 Merge pull request '列表样式,合并请求路由值根据接口改为number或者id' (#286) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-26 10:19:02 +08:00
caishi 9299a1667e gitlink首页style 2021-11-26 10:15:53 +08:00
baladiwei 10c9891b7b Merge pull request '关于我们' (#285) from durian/forgeplus-react:about_us into feature_aboutus 2021-11-25 16:53:39 +08:00
谢思 e5f8eac497 【关于我们】页面 2021-11-25 16:50:05 +08:00
caishi 633dee9655 合并请求列表跳转链接改为number或者id 2021-11-25 15:29:52 +08:00
starlee e7b7d20f94 add claim mechanism 2021-11-25 14:05:13 +08:00
xxq250 801c544f65 Merge pull request '前端页面优化' (#282) from hc1913847458/forgeplus-react:testdev into develop 2021-11-25 09:43:19 +08:00
hucong 5a1fcb1443 403,404登录验证 2021-11-24 18:31:46 +08:00
谢思 cf1d2dd5ba 修改招聘岗位要求 2021-11-24 17:43:42 +08:00
谢思 121b1aaab1 关于我们0.8版 2021-11-24 17:16:59 +08:00
谢思 3e42a620d9 关于我们0.5版 2021-11-23 21:47:52 +08:00
hucong 33297226ea 页面优化 2021-11-23 18:00:05 +08:00
谢思 982536b547 关于我们0.1版 2021-11-23 17:30:05 +08:00
hucong fd4046af04 issue 2021-11-23 15:04:34 +08:00
hucong 36683ad69b 团队介绍根据不同团队权限显示不同内容 2021-11-23 15:00:06 +08:00
hucong 2262508777 前端403,404,500页面优化 2021-11-23 14:39:44 +08:00
谢思 4f64b840b0 修改 fork项目失败原因为已经复刻过则跳转到复刻仓库,合并请求【仓库:分支】显示统一样式 2021-11-23 14:39:23 +08:00
谢思 a04b8de39e 刷新合并请求页面之后新建合并请求报错(恢复2.0版) 2021-11-23 10:13:11 +08:00
谢思 4d99c97370 刷新新建合并请求页面之后新建合并请求报错3.0 2021-11-23 09:48:36 +08:00
谢思 58f7c984a2 处理页面刷新之后创建合并请求报错2.0 2021-11-22 17:12:20 +08:00
hucong 9db8455de8 项目导航菜单悬停优化 2021-11-22 15:40:59 +08:00
谢思 4b1bccd1cd 处理页面刷新之后创建合并请求报错问题 2021-11-22 15:25:24 +08:00
jasder eff12234fa Merge pull request '意见反馈' (#277) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-22 11:03:47 +08:00
谢思 77fdafd58b 解决css文件冲突 2021-11-22 10:15:41 +08:00
谢思 5fea412ca8 解决css文件冲突 2021-11-22 09:36:54 +08:00
yystopf 5f15b03462 Merge pull request 'merge issue上线' (#273) from caishi/forgeplus-react:gitservers into gitlink_server 2021-11-19 14:34:13 +08:00
caishi a2f63732cf build 2021-11-19 14:26:41 +08:00
caishi abf9b25651 iconfont 2021-11-19 14:21:39 +08:00
谢思 bf4ef7023d 意见反馈仓库信息更换成/Gitlink/forgeplus,issue指派成员更换成36480 2021-11-19 14:18:45 +08:00
谢思 f463b20de7 Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-19 11:13:57 +08:00
谢思 7934f07cea 代码库、易修页面未登录状态创建修改跳登录框代码层面优化,之后可实现复用 2021-11-19 11:11:14 +08:00
caishi f19a9f6ceb clear 2021-11-19 09:19:48 +08:00
caishi 8b5e159cac Merge branch 'develop' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-19 09:18:50 +08:00
caishi 16dff252c0 issue 2021-11-18 17:36:03 +08:00
谢思 fe0fab7b61 顶部导航栏搜索框还原 2021-11-18 17:08:03 +08:00
谢思 4e18d13b6b 注册和找回密码优化 2021-11-18 15:37:06 +08:00
谢思 d81d456d76 顶部搜索优化 2021-11-18 10:55:10 +08:00
jasder 8c66d817b5 Merge pull request 'fix 合并主干开发分支' (#267) from develop into gitlink_server 2021-11-18 10:53:15 +08:00
jasder 7579dc8a59 Merge pull request 'ADD @功能' (#266) from feature_notification_v2 into develop 2021-11-18 10:51:43 +08:00
谢思 3087e5471a 顶部搜索栏为空处理 2021-11-18 10:40:53 +08:00
谢思 4e8f304262 顶部输入框样式调整 2021-11-18 10:28:15 +08:00
谢思 48e9ca6706 意见反馈跳转调试 2021-11-17 15:06:55 +08:00
谢思 fc8a476aa3 修改意见反馈新建issue仓库和指派成员 2021-11-17 14:41:17 +08:00
jasder 89773b5036 Merge pull request '文案调整' (#264) from hc1913847458/forgeplus-react:testdev into develop 2021-11-17 14:31:12 +08:00
谢思 387387108a 意见反馈功能+未登录状态显示创建issue按钮 2021-11-17 14:03:10 +08:00
hucong 2617831a9f 文案调整 2021-11-16 18:29:55 +08:00
hucong f0747eab05 文案调整 2021-11-16 18:28:30 +08:00
caishi 789e84211c 小屏内容宽度调整 2021-11-16 15:54:45 +08:00
谢思 12ce0aa4f5 意见反馈功能 2021-11-16 13:18:03 +08:00
jasder 4a322d1e2e Merge pull request '登陆注册功能' (#262) from durian/forgeplus-react:gitlink_server into gitlink_server 2021-11-16 10:16:59 +08:00
谢思 a38b4af8bc 意见反馈功能 2021-11-16 09:21:13 +08:00
jasder d1743b350d Merge pull request '项目tab栏wiki添加中文' (#258) from hc1913847458/forgeplus-react:testdev into develop 2021-11-15 11:01:37 +08:00
baladiwei 7fd790fe7d Merge pull request '@我功能' (#261) from durian/forgeplus-react:feature_notification_v2 into feature_notification_v2 2021-11-12 14:21:39 +08:00
谢思 c48e3584c3 删除之前atwo.js的引入 2021-11-12 14:17:06 +08:00
谢思 d0ca09e780 Merge branch 'feature_notification_v2' of https://git.trustie.net/Gitlink/forgeplus-react into feature_notification_v2 2021-11-12 14:08:56 +08:00
baladiwei ed3bf55f90 Merge pull request 'merge old version' (#260) from feature_noti_v2 into feature_notification_v2 2021-11-12 14:07:07 +08:00
谢思 7ff29fec70 未及时更新评论内容 2021-11-12 13:50:35 +08:00
谢思 79331db271 登陆注册bug修复 2021-11-12 12:33:46 +08:00
hucong fbfd5f175d 项目tab栏合并请求增加英文 2021-11-12 10:34:56 +08:00
hucong 07101f5770 项目tab栏wiki增加中文 2021-11-12 10:29:53 +08:00
yystopf 652de9b441 Merge pull request '查看源代码的浏览器logo以及页面添加的监听事件的移除' (#257) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-11 16:38:14 +08:00
caishi f2a660d595 ico + 移除滚动事件 2021-11-11 16:35:37 +08:00
jasder 711c2e57da Merge pull request '首页相关需求、issues修改' (#256) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-11 13:44:38 +08:00
caishi 6fc441d7c5 issues 2021-11-11 13:41:55 +08:00
谢思 a94d02bb8a atwo markdown渲染 2021-11-11 11:31:42 +08:00
谢思 cc2dd35ff4 编辑合并请求最后一行@弹框被遮挡 2021-11-10 20:45:23 +08:00
谢思 f003a99779 @我功能。 2021-11-10 16:47:22 +08:00
caishi b4e2c6148a logo and issues 2021-11-10 15:07:39 +08:00
谢思 b1ead191a6 Merge branch 'pre_develop' of https://git.trustie.net/Gitlink/forgeplus-react into feature_notification_v2 2021-11-10 10:28:23 +08:00
caishi 0735968e73 图片压缩替换 2021-11-10 10:21:01 +08:00
caishi 37f5bce087 pr/Anchor等问题 2021-11-09 16:38:53 +08:00
caishi 951792dc11 style update 2021-11-09 11:20:36 +08:00
caishi 7d7f265ffb Merge branch 'gitlink_server' of https://git.trustie.net/Gitlink/forgeplus-react into gitlink_server 2021-11-09 09:49:54 +08:00
jasder 7495c54f8d Merge pull request 'fix 发布gitlink server 版本' (#252) from jasder/forgeplus-react:gitlink_server into gitlink_server 2021-11-09 09:49:30 +08:00
jasder 631f8ceeea FIX 合并登陆注册功能分支代码 2021-11-09 09:45:36 +08:00
jasder d70ddfb2f7 Merge remote-tracking branch 'gitlink/gitlink_server' into gitlink_server 2021-11-09 09:31:23 +08:00
jasder 54741a6d8a Merge branch 'develop' into gitlink_server 2021-11-09 09:31:05 +08:00
jasder 116c3e531f Merge pull request '登陆注册功能' (#250) from durian/forgeplus-react:featrue_login_and_register into featrue_login_and_register 2021-11-09 09:19:36 +08:00
谢思 990cfe2781 代码优化 2021-11-08 16:44:38 +08:00
谢思 66e1235c3b 找回密码次数上限+找回密码确认密码优化 2021-11-08 16:39:37 +08:00
谢思 76fdff6737 背景图片过大加载慢 2021-11-08 16:15:04 +08:00
谢思 55a6f93fe3 atwho 2021-11-08 16:04:19 +08:00
谢思 4bc79b5153 添加第三方登录 2021-11-08 15:43:55 +08:00
谢思 ac4488a907 atwho 2021-11-08 15:14:04 +08:00
caishi 3085e40426 hide 2021-11-08 15:12:12 +08:00
jasder ea979b78ee Merge pull request '目录跳转问题' (#248) from hc1913847458/forgeplus-react:testdev into develop 2021-11-08 14:34:11 +08:00
hucong b1775e5158 目录跳转问题 2021-11-08 14:05:39 +08:00
hucong 3678b8eb72 issue 2021-11-08 13:58:46 +08:00
谢思 12d8f5bf5d 登陆注册功能 2021-11-08 13:29:12 +08:00
hucong e04fb11194 目录跳转问题 2021-11-05 19:03:24 +08:00
hucong 010edf3cb2 目录跳转问题 2021-11-05 18:31:14 +08:00
jasder ab26a528b6 Merge pull request 'gitlink首页数据绑定以及需求更改、文案修改等' (#246) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-11-04 14:18:37 +08:00
jasder 6d39e25667 Merge pull request 'pr中的用户名称显示问题' (#244) from hc1913847458/forgeplus-react:testdev into develop 2021-11-03 18:46:12 +08:00
caishi a2ea832208 gitlink首页-数据绑定 2021-11-03 18:43:41 +08:00
caishi d1bc3680b9 gitlink首页 2021-11-02 14:15:19 +08:00
caishi 08416390e5 update 2021-11-02 10:23:04 +08:00
hucong 190200d1e6 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into testdev 2021-11-01 14:41:27 +08:00
hucong b124364203 pr中用户名称显示问题 2021-11-01 14:40:41 +08:00
谢思 2078a044b6 at我列表 2021-11-01 09:31:08 +08:00
caishi 35c2f63c55 update 2021-10-29 18:22:45 +08:00
caishi 30c61f0a7d 上线update 2021-10-29 17:01:55 +08:00
caishi 743dabd553 需求+设计+bug修改 2021-10-29 14:18:30 +08:00
caishi 015296e065 merge gitlink首页、项目首页,update 2021-10-29 09:39:59 +08:00
jasder 48c21ac245 Merge pull request 'merge' (#241) from caishi/forgeplus-react:gitlink_server into gitlink_server 2021-10-28 18:26:10 +08:00
caishi a93b8a08c9 register 2021-10-28 18:23:22 +08:00
jasder 1c48ffb130 合并平台首页、项目首页功能分支,并处理代码冲突 2021-10-28 18:11:07 +08:00
jasder 0ee9280bb1 Merge pull request 'fix 开发主干分支并入gitlink服务分支' (#239) from develop into gitlink_server 2021-10-28 17:54:22 +08:00
jasder e785e9a358 Merge pull request 'ADD 项目首页功能并入开发分支' (#238) from featrue_project_homepage into develop 2021-10-28 17:53:05 +08:00
jasder b3b95e9856 Merge pull request 'merge' (#237) from caishi/forgeplus-react:featrue_project_homepage into featrue_project_homepage 2021-10-28 17:51:56 +08:00
caishi 5be8ead356 Merge branch 'develop' of https://git.trustie.net/Gitlink/forgeplus-react into featrue_project_homepage 2021-10-28 17:48:56 +08:00
jasder 7d78919c4a Merge pull request 'FIX 解决冲突' (#236) from pre_develop into develop 2021-10-28 17:48:45 +08:00
jasder d5b4c5425f Merge pull request 'wip' (#235) from pre_develop_dev into pre_develop 2021-10-28 17:48:03 +08:00
caishi f259f05cdc Merge branch 'develop' of https://git.trustie.net/Gitlink/forgeplus-react into featrue_project_homepage 2021-10-28 17:46:55 +08:00
jasder 95cd289373 Merge pull request '项目首页改版更新' (#232) from caishi/forgeplus-react:featrue_project_homepage into featrue_project_homepage 2021-10-28 17:43:43 +08:00
jasder e739f5b786 Merge pull request 'fix 更改注册页面备案号等相关信息' (#231) from jasder/forgeplus-react:gitlink_server into gitlink_server 2021-10-28 17:43:16 +08:00
caishi c79be9a597 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into featrue_project_homepage 2021-10-28 17:41:54 +08:00
jasder fb03565a25 Merge pull request '并入开发分支' (#230) from pre_develop_dev into develop 2021-10-28 17:39:40 +08:00
jasder 7ec53a246c Merge pull request 'logo 从接口获取 nav_logo_url' (#226) from caishi/forgeplus-react:feature_homepage into feature_homepage 2021-10-28 17:30:39 +08:00
jasder 56946f94e8 更改域名相关信息 2021-10-28 17:29:35 +08:00
caishi 61ee3fe36f 注册页面相关信息修改 2021-10-28 17:25:50 +08:00
caishi d5f989bbe2 update 2021-10-28 17:08:36 +08:00
caishi f5817e5150 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-10-28 09:31:35 +08:00
caishi 1c24baf3b9 数据绑定 2021-10-28 09:31:08 +08:00
caishi 3d3ef19d4a 项目首页 banner 2021-10-26 09:40:35 +08:00
jasder 7b77c46915 Merge pull request '导入仓库链接和项目issue优化更改' (#228) from hc1913847458/forgeplus-react:testdev into pre_develop_dev 2021-10-25 17:33:48 +08:00
hucong 746f552a21 issue 2021-10-25 16:37:50 +08:00
hucong 7872d5ecab 导入链接优化 2021-10-25 15:56:06 +08:00
hucong 60da6bd110 导入链接优化 2021-10-25 15:46:57 +08:00
caishi a3bbf6b1c1 头部logo 2021-10-25 11:29:21 +08:00
caishi d37709b1a5 首页文件夹 2021-10-25 11:24:21 +08:00
hucong aeff357660 项目页icon更改 2021-10-25 11:09:41 +08:00
hucong 0e6cb3954a 项目页icon更改 2021-10-25 11:09:13 +08:00
hucong ae12618c0c 导入链接显示优化 2021-10-25 10:45:40 +08:00
谢思 1c46617144 Merge branch 'pre_develop' of https://git.trustie.net/Gitlink/forgeplus-react into feature_notification_v2 2021-10-23 19:52:58 +08:00
谢思 ec133a6880 添加todo 2021-10-23 19:50:17 +08:00
谢思 bcdb631c20 删除引入的js文件 2021-10-23 19:43:58 +08:00
谢思 8021d96cd8 atwho列表 2021-10-23 19:39:54 +08:00
caishi 9ae3c0e786 Merge branch 'pre_develop_dev' into dev_educoder
# Conflicts:
#	public/css/iconfont.js
#	src/AppConfig.js
#	src/forge/Head/Footer.jsx
#	src/forge/Head/Header.js
#	src/forge/Head/header.scss
#	src/forge/Main/CoderDepot.jsx
#	src/forge/Main/CoderRootCommit.js
#	src/forge/Main/sub/DetailBanner.jsx
#	src/forge/New/Index.js
#	src/forge/Source/Index.jsx
#	src/modules/tpm/TPMIndexHOC.js
2021-10-23 15:41:21 +08:00
caishi 914966bd39 detail 2021-10-22 16:42:43 +08:00
caishi f89f4b6628 Merge branch 'standalone_develop' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-10-22 14:33:40 +08:00
jasder 7407545d1f Merge pull request '冲突引起iconfont丢失' (#215) from caishi/forgeplus-react:standalone into standalone 2021-10-22 14:05:27 +08:00
caishi f0ffc9a29c iconfont + style 2021-10-22 13:56:34 +08:00
jasder 987eb39681 Merge pull request 'standalone merge problem' (#214) from caishi/forgeplus-react:standalone into standalone 2021-10-22 11:44:51 +08:00
caishi 848109afe8 settings 2021-10-22 11:40:41 +08:00
caishi d7bdb35bb7 merge bug 2021-10-22 11:28:22 +08:00
caishi 254b3173d1 merge 2021-10-22 11:25:44 +08:00
caishi 44f06b7305 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage
# Conflicts:
#	public/css/iconfont.css
#	public/css/iconfont.js
#	public/css/iconfont.json
#	public/css/iconfont.ttf
#	public/css/iconfont.woff
#	public/css/iconfont.woff2
#	src/App.js
#	src/forge/Head/Footer.jsx
#	src/modules/tpm/TPMIndexHOC.js
2021-10-22 10:33:18 +08:00
jasder b16e95923a Merge pull request 'FIX bug' (#211) from jasder/forgeplus-react:standalone into standalone 2021-10-22 10:11:03 +08:00
jasder 98a7f73c04 Merge branch 'master' into standalone 2021-10-22 10:09:53 +08:00
jasder b6a450a482 FIX 项目路由改造的bug 2021-10-22 10:04:39 +08:00
jasder 66c495d6b5 Merge pull request '合并代码后,变量重复引发错误' (#203) from caishi/forgeplus-react:standalone into standalone 2021-10-21 18:32:37 +08:00
caishi 42139ef998 settings多次声明 2021-10-21 18:30:28 +08:00
jasder 925d5ea356 Merge pull request '并入独立版本' (#202) from jasder/forgeplus-react:standalone into standalone 2021-10-21 18:28:15 +08:00
jasder ad1f0e29e7 FIX 合并主干分支代码并解决冲突 2021-10-21 18:24:06 +08:00
谢思 3498390974 at 2021-10-21 14:12:15 +08:00
谢思 4f3e385f78 at谁列表(缺弹框的上下,enter键监听) 2021-10-21 10:51:40 +08:00
谢思 18b289b84c @who(缺优化) 2021-10-21 09:41:17 +08:00
谢思 e3f49db5c0 at谁列表 2021-10-18 14:19:32 +08:00
谢思 4add266047 at谁列表 2021-10-15 11:36:51 +08:00
谢思 4a6012bfa9 at谁列表 2021-10-14 15:04:17 +08:00
谢思 7fe88aa4d9 at列表 2021-10-14 09:11:37 +08:00
谢思 bc6ef583fb atwho 2021-10-13 16:01:38 +08:00
谢思 b268b540d8 @我列表 2021-10-13 14:53:13 +08:00
谢思 7e69c64c9c @who列表 2021-10-13 11:52:54 +08:00
谢思 85ef26f70e @who 2021-10-13 10:07:38 +08:00
谢思 8c7865d2c1 Merge branch 'pre_develop' of https://git.trustie.net/Gitlink/forgeplus-react into feature_notification_v2 2021-10-13 09:54:04 +08:00
谢思 999a15761d md@谁列表 2021-10-12 14:24:18 +08:00
谢思 5c2330512e @我:在markdown编辑器中输入@我弹出列表需要引入的js 2021-10-11 13:48:50 +08:00
caishi 3da9306ed6 style 2021-09-30 15:42:37 +08:00
caishi 568a632d65 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage
# Conflicts:
#	src/forge/Head/header.scss
2021-09-29 19:34:03 +08:00
caishi 5982c0df96 首页需求更改 2021-09-29 19:31:55 +08:00
jasder 21046bbcb7 Merge pull request 'gitlink首页需求更新' (#86) from caishi/forgeplus-react:feature_homepage into feature_homepage 2021-09-29 08:24:44 +08:00
caishi 0c816805fb gitlink 首页:合作单位的image以及需求更新 2021-09-28 16:08:25 +08:00
caishi 28f8b6b54c Merge branch 'feature_homepage' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-09-24 18:19:27 +08:00
caishi 7d087ec1f2 gitlink首页-第一版 2021-09-24 18:18:55 +08:00
jasder beba8975ca Merge pull request 'fix merge pro develop dev' (#73) from pre_develop_dev into feature_homepage 2021-09-24 18:18:42 +08:00
caishi d4690cc8b5 拉取测试版分支代码,且更新gitlink首页 2021-09-22 09:23:20 +08:00
caishi 38021c2e4b Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-09-17 09:50:03 +08:00
caishi 4233811ae3 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-09-16 17:26:00 +08:00
caishi 8273acd195 Merge branch 'pre_develop_dev' of https://git.trustie.net/Gitlink/forgeplus-react into feature_homepage 2021-09-16 15:57:24 +08:00
caishi 3158953571 update 2021-09-08 17:47:40 +08:00
caishi 5eb542cfbf 同步账号密码 2021-09-08 16:50:16 +08:00
caishi 146e51c182 列表头部 2021-09-08 14:57:16 +08:00
caishi 58691ec2ea style 2021-09-08 14:23:01 +08:00
caishi 2f5d9d225c 路由 2021-09-08 11:29:55 +08:00
caishi d88179a486 转移项目-状态变化 2021-09-06 15:32:59 +08:00
caishi 58613bf4c1 merge 报错 2021-09-06 14:41:53 +08:00
caishi be379d39e3 merge-pre_develop_dev 2021-09-06 14:21:43 +08:00
caishi 3f918b53d9 merge 转移仓库完成 2021-09-06 11:36:15 +08:00
caishi c4bc8fc9c5 merge 93a53e2c7f 2021-09-06 11:36:15 +08:00
caishi a1b82d833b merge 4e48b0b363 2021-09-06 11:36:15 +08:00
caishi 350769d3d7 搜索用户 2021-09-06 11:35:32 +08:00
caishi af31c381f9 merge 09065383c1 2021-09-06 11:35:32 +08:00
caishi e7f997d3f6 hide 2021-09-06 11:34:44 +08:00
caishi a968287331 项目列表头部button需要更新样式 2021-09-06 11:33:55 +08:00
何童崇 7dd59f7711 merge 52e08e77e5 2021-09-06 11:33:01 +08:00
何童崇 c3b43bb5c7 merge ff75065a0a 2021-09-06 11:32:43 +08:00
caishi 159bc0c893 新建项目跳转地址login 2021-09-06 11:22:21 +08:00
caishi ca84851f0b banner 2021-09-06 11:22:21 +08:00
caishi 4dc0f974df 列表页:描述内容样式 2021-09-06 11:22:21 +08:00
caishi 5b60d92063 /默认跳转地址 2021-09-06 11:21:25 +08:00
caishi f2be69f4e3 新建:拥有者默认选中当前登录用户,默认路由 2021-09-06 11:19:53 +08:00
caishi aa93eade71 同上 update 2021-09-06 11:19:03 +08:00
caishi 02b48e8648 项目列表:banner部分样式版本更新 2021-09-06 11:17:58 +08:00
caishi f50c550816 update issue 2021-09-06 11:17:34 +08:00
caishi 16397c8743 头部的nav字符串内容中有标签要渲染 2021-09-06 11:15:36 +08:00
caishi 5ef79007e2 current fix update 2021-09-06 11:15:21 +08:00
caishi e3321fd676 项目邀请码-第一版测试版上线 2021-09-06 11:14:53 +08:00
caishi 80c559895a bug 2021-09-06 11:12:44 +08:00
caishi e804698d70 修改资料+密码管理 2021-09-06 11:12:19 +08:00
caishi dd20d02477 同上=issue修改 2021-09-06 11:11:20 +08:00
caishi 28d3b5bedd git cherry-pick 1432afebfd 2021-09-06 11:10:05 +08:00
caishi e1b73f582a git cherry-pick a9285f37e7 2021-09-06 11:08:28 +08:00
caishi f94edf90a5 git cherry-pick d41dce26b1 2021-09-06 11:07:55 +08:00
caishi c9a9da6de9 git cherry-pick 975d49 2021-09-06 11:07:55 +08:00
caishi 7d0abfb764 cherry-pick develop 个人中心第一版 2021-09-06 11:05:28 +08:00
caishi f25db9ccf1 eudocderforge头像url 2021-09-06 10:57:31 +08:00
caishi 2d79d144a0 邮箱弹框点击事件 2021-09-06 10:57:31 +08:00
caishi a209b29100 2021-05-28同步develop分支 2021-09-06 10:57:17 +08:00
caishi 7666efe1df git merge a1bd41795a 2021-09-06 10:56:04 +08:00
caishi a14eddda52 git merge 70af7dae5f 2021-09-06 10:54:57 +08:00
caishi c54433728b merge d029840874 2021-09-06 10:43:44 +08:00
caishi ee994458a9 导航-字体颜色 2021-09-06 10:42:09 +08:00
caishi ea57432cb4 merge 2021-09-06 10:40:02 +08:00
caishi 831ff66ebe merge develop 2021-09-06 10:34:54 +08:00
caishi bc0d60fea9 imageurl接口统一返回带iamges的字段 2021-09-06 10:32:48 +08:00
caishi 53c92383d2 去掉右侧悬浮手册按钮 2021-09-06 10:27:56 +08:00
caishi 7697449f05 账号同步框提示文字错误 2021-09-06 10:27:14 +08:00
caishi 2e66904f81 合并资源库 2021-09-06 10:27:14 +08:00
caishi 21f7a2530a 冲突 2021-09-06 10:26:44 +08:00
caishi d76416bf1a 构建列表 2021-09-06 10:25:57 +08:00
caishi a05d06bc1f tips(易修、复刻) 2021-09-06 10:25:16 +08:00
caishi 5f7eaa24c6 通知、消息的地址,trustie改为educoder 2021-09-06 10:24:09 +08:00
caishi e4e419beb2 冲突 2021-09-06 10:20:37 +08:00
caishi 14a68f9241 color 2021-09-06 10:20:17 +08:00
caishi dd0a9e50e5 合并 2021-09-06 10:20:17 +08:00
caishi 3148397343 头部 active 2021-09-06 10:15:53 +08:00
caishi 7f7a1021df toubu 2021-09-06 10:15:53 +08:00
caishi 882d8aef75 代码冲突 2021-09-06 10:15:22 +08:00
caishi 987688bcc9 新建项目 2021-09-06 10:14:34 +08:00
caishi 3bebbdc44d readme 2021-09-06 10:13:51 +08:00
caishi 7b4723b111 header 2021-09-06 10:13:24 +08:00
caishi 3a8d9698db condition 2021-09-06 10:12:59 +08:00
caishi 6b441fc919 delete 2021-09-06 10:12:12 +08:00
caishi b1725a00ee style 2021-09-06 10:11:26 +08:00
caishi 0294439f18 未登录不弹框 2021-09-06 10:11:26 +08:00
caishi e7acb2f142 导航栏和底部 2021-09-06 10:11:26 +08:00
caishi 21ab03f3da update 2021-09-06 10:07:35 +08:00
caishi 102b21f255 隐藏操作手册 2021-09-06 10:07:34 +08:00
caishi 76ed232f6a educoder和forge用户的密码是否一致 2021-09-06 10:06:31 +08:00
caishi f14443a6e8 弹框修改接口 2021-09-06 10:05:33 +08:00
caishi 146d4c9baa 邮箱绑定 2021-09-06 10:05:33 +08:00
caishi cacb8c84ae 合并develop分支的个人中心改版-全部 2021-06-10 09:36:03 +08:00
caishi fb8ae3fcdf 小修 2021-06-09 18:08:49 +08:00
caishi a257d832cb issue 2021-06-09 18:08:01 +08:00
caishi ff7d191011 merge 2021-06-09 18:07:39 +08:00
caishi 9a2c3f1754 merge 2021-06-09 18:06:54 +08:00
caishi bcdf506e6c 数据统计三个时间筛选参数值必须是时间戳 2021-06-09 18:06:14 +08:00
caishi ccc6cb5d26 merge 2021-06-09 18:03:52 +08:00
caishi 0661c6b932 添加成员后要清除选中的成员 2021-06-09 18:03:24 +08:00
caishi 99947c0c87 merge 2021-06-09 17:56:51 +08:00
caishi 03cff6ec2e merge 2021-06-09 17:56:02 +08:00
caishi f86acfebdf merge冲突 2021-06-09 17:55:12 +08:00
caishi 9a62d7806e 同上-修改细节 2021-06-09 17:54:06 +08:00
caishi a7df6da5f0 merge 个人中心部分 冲突 2021-06-09 17:53:57 +08:00
caishi eab68ac270 概览页数据绑定完成,只差数据统计页 2021-06-09 17:52:43 +08:00
caishi a9e3513706 year 2021-06-09 17:52:31 +08:00
caishi 6b20391c72 merge 个人中心改版 2021-06-09 17:40:05 +08:00
caishi 3135300fe6 merge d029840874 2021-05-14 11:32:01 +08:00
caishi ecc6387113 no message 2021-05-08 17:22:44 +08:00
caishi 990c4e22b0 编辑合并请求-url地址错误 2021-05-08 14:35:51 +08:00
caishi 7eea9316dd detail+同步镜像type=2的才不需要合并请求 2021-05-07 17:41:01 +08:00
caishi 6a546c79e4 merge 2021-05-07 16:36:22 +08:00
caishi 4c48b6c77a merge 2021-05-07 16:35:17 +08:00
caishi 4d5430c3ed 统一项目简介、项目概览 2021-05-07 16:33:57 +08:00
caishi d49af735f1 merge 2021-05-06 17:21:19 +08:00
caishi 03370e8a07 merge 2021-05-06 17:19:09 +08:00
caishi 0b43fa8952 merge develop 2021-05-06 17:18:30 +08:00
caishi 465c4cc8c7 04-28休假期修改issue --需合并至其它分支(合并请求相关) 2021-04-28 20:23:57 +08:00
caishi 37668ddcd4 组织团队-无数据显示错误 2021-04-27 09:47:10 +08:00
caishi 7102594444 代码库编辑文件-切换到其它目录后要重新将编辑状态改为显示状态 2021-04-25 17:48:58 +08:00
caishi b2f2df65bb 样式覆盖 2021-04-23 18:07:15 +08:00
caishi 8a577fb263 资源库 2021-04-23 17:16:50 +08:00
caishi 5c491071b6 +上 关注后不需要提示 2021-04-23 16:37:16 +08:00
caishi c554237076 +上 贡献者悬浮框里增加的跳转链接不要新开页 2021-04-23 16:37:06 +08:00
caishi d22a741bf7 贡献者-悬浮内容增加跳转链接 2021-04-23 16:36:56 +08:00
caishi 383b3f5d74 imageUrl + / 2021-04-23 16:36:41 +08:00
caishi 63da7adcf9 个人中心关注-关注或者取消关注未更新状态 2021-04-23 16:36:31 +08:00
caishi 3243aeebc6 贡献者-悬浮卡片-测试版1 2021-04-23 16:36:22 +08:00
caishi 1a86a75345 发布评论者头像路径错误 2021-04-23 16:36:11 +08:00
caishi 3b6cc99d49 merge 2021-04-23 16:35:49 +08:00
caishi d872ffc606 merge 2021-04-23 16:31:15 +08:00
caishi 3b69c01ead merge 2021-04-23 16:30:45 +08:00
caishi 1e0608aa14 合并请求-提出申请者头像显示问题 2021-04-23 16:30:07 +08:00
caishi 9b6816e346 团队项目-团队项目管理-显示的name和跳转的login 2021-04-23 16:29:57 +08:00
caishi 6ee257231d 切换左侧目录,选择不同的文件时,文件详情没有更新 2021-04-23 16:29:46 +08:00
caishi 70edb73f6c all-默认头像(首字母加背景颜色) 2021-04-23 16:29:35 +08:00
caishi 5c7553d4aa merge 2021-04-23 16:29:16 +08:00
caishi 278701f24b 上线后的getImageURL也不用在前面加/ + 一些小样式修改 2021-04-23 16:27:56 +08:00
caishi 97ab819bf9 merge 2021-04-23 16:27:37 +08:00
caishi d870f17b85 readme-文件增加一个目录下拉icon 2021-04-23 16:26:02 +08:00
caishi 91ac6c2357 组织团队-新增一个团队标识 2021-04-23 16:25:47 +08:00
caishi 3702d1c1a5 merge 2021-04-23 16:25:35 +08:00
caishi 93d48c359e merge 2021-04-23 16:25:03 +08:00
caishi 80dace18e9 资源库不需要按引用次数排序 2021-04-23 16:24:23 +08:00
caishi 375cbb37df merge 2021-04-23 16:24:02 +08:00
caishi 10d933e037 merge develop 2021-04-23 16:23:29 +08:00
caishi 4fdd3f6f80 组织-团队列表的头像login为undefined 2021-04-23 16:22:36 +08:00
caishi 458b56e33b 去掉悬浮手册按钮 2021-04-23 16:22:22 +08:00
caishi c256887132 注册成功后跳转到首页 2021-03-31 15:13:32 +08:00
caishi 6a588db7f6 清理代码 2021-03-31 15:03:16 +08:00
caishi 6c4e1c6665 Merge branch 'standalone' into dev_local 2021-03-31 14:42:24 +08:00
caishi c554d2c00d 重置settings为undefined 2021-03-31 14:35:23 +08:00
caishi b69bf5974a remove 2021-03-31 14:28:22 +08:00
caishi ecb1691b4d Trustie 2021-03-31 14:17:48 +08:00
caishi 6a9f2b31a6 注册页面logo和底部信息 2021-03-31 14:04:09 +08:00
caishi 4947cd8456 浏览器ico要用trustie的logo 2021-03-31 12:07:11 +08:00
caishi 8429effe16 没logo时会将setting重置为空 2021-03-31 12:02:38 +08:00
caishi 49ebe450be 合并测试版分支 2021-03-31 11:21:07 +08:00
caishi e3c926da77 注册 2021-03-29 17:37:16 +08:00
caishi af48da2eb3 href 2021-03-29 17:14:56 +08:00
caishi 6630309466 Merge branch 'develop' into dev_local 2021-03-29 16:58:48 +08:00
caishi a7c3dee7e3 2020-11-26 10:55:03 +08:00
520 changed files with 20448 additions and 5501 deletions

2
.gitignore vendored
View File

@ -37,7 +37,7 @@ bower_components
# Compiled binary addons (https://nodejs.org/api/addons.html) # Compiled binary addons (https://nodejs.org/api/addons.html)
build/ build/
src/.umi/
# Dependency directories # Dependency directories
node_modules/ node_modules/
jspm_packages/ jspm_packages/

788
.idea/workspace.xml Normal file
View File

@ -0,0 +1,788 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Quality/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Quality/index.js" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="DatabaseView">
<option name="SHOW_INTERMEDIATE" value="true" />
<option name="GROUP_DATA_SOURCES" value="true" />
<option name="GROUP_SCHEMA" value="true" />
<option name="GROUP_CONTENTS" value="false" />
<option name="SORT_POSITIONED" value="false" />
<option name="SHOW_EMPTY_GROUPS" value="false" />
<option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
<option name="HIDDEN_KINDS">
<set />
</option>
<expand />
<select />
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>high</find>
<find>markdown</find>
<find>markdown-body</find>
<find>readme</find>
<find>SSH</find>
<find>clone</find>
<find>edu_pu</find>
<find>edu_</find>
<find>.str</find>
<find>ssh</find>
<find>/projects</find>
<find>全部项目数</find>
<find>未选择标签</find>
<find>未选择里程碑</find>
<find>.issueItem</find>
<find>未选择</find>
<find>issueItem</find>
<find>detailContent</find>
<find>df mt20</find>
<find>.detailHeader-wrapper</find>
<find>headerMenu-wrapper</find>
<find>对话</find>
<find>issueNo</find>
<find>f-wrap-between</find>
<find>user_img</find>
<find>getCommitList</find>
<find>login</find>
<find>点击开启</find>
<find>build</find>
<find>HEAD</find>
</findStrings>
<replaceStrings>
<replace>任务</replace>
</replaceStrings>
<dirStrings>
<dir>$PROJECT_DIR$/src/forge/Merge</dir>
<dir>$PROJECT_DIR$</dir>
<dir>$PROJECT_DIR$/public</dir>
<dir>$PROJECT_DIR$/src/modules/user/usersInfo</dir>
<dir>$PROJECT_DIR$/src/modules/user</dir>
<dir>$PROJECT_DIR$/src/forge</dir>
<dir>$PROJECT_DIR$/src</dir>
<dir>$PROJECT_DIR$/</dir>
</dirStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="GitSEFilterConfiguration">
<file-type-list>
<filtered-out-file-type name="LOCAL_BRANCH" />
<filtered-out-file-type name="REMOTE_BRANCH" />
<filtered-out-file-type name="TAG" />
<filtered-out-file-type name="COMMIT_BY_MESSAGE" />
</file-type-list>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/forge/Order/newMilepost.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/Index.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Tags.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/new_tags.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
<option value="$PROJECT_DIR$/src/forge/Main/Index.js" />
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.css" />
<option value="$PROJECT_DIR$/src/forge/New/Index.js" />
<option value="$PROJECT_DIR$/src/modules/tpm/NewFooter.js" />
<option value="$PROJECT_DIR$/src/forge/Version/version.css" />
<option value="$PROJECT_DIR$/src/forge/Index.js" />
<option value="$PROJECT_DIR$/src/modules/user/Projects.js" />
<option value="$PROJECT_DIR$/src/App.js" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/Infos.js" />
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/usersInfo.css" />
<option value="$PROJECT_DIR$/src/modules/tpm/NewHeader.js" />
<option value="$PROJECT_DIR$/src/modules/login/LoginDialog.js" />
<option value="$PROJECT_DIR$/src/modules/login/EducoderLogin.js" />
<option value="$PROJECT_DIR$/src/modules/user/LoginRegisterComponent.js" />
<option value="$PROJECT_DIR$/src/modules/login/EducoderInteresse.js" />
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/Projects.js" />
<option value="$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js" />
<option value="$PROJECT_DIR$/src/AppConfig.js" />
<option value="$PROJECT_DIR$/src/forge/quillForEditor/index.js" />
<option value="$PROJECT_DIR$/src/forge/Main/IndexItem.js" />
<option value="$PROJECT_DIR$/src/forge/Main/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Main/CoderRootCommit.js" />
<option value="$PROJECT_DIR$/src/forge/Activity/ActivityItem.js" />
<option value="$PROJECT_DIR$/src/forge/Branch/CloneAddress.js" />
<option value="$PROJECT_DIR$/src/forge/Version/version.js" />
<option value="$PROJECT_DIR$/public/css/css_min_all.css" />
<option value="$PROJECT_DIR$/public/index.html" />
<option value="$PROJECT_DIR$/src/modules/user/usersInfo/InfosBanner.js" />
<option value="$PROJECT_DIR$/src/forge/Order/CopyDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/UpdateMerge.js" />
<option value="$PROJECT_DIR$/src/forge/Order/order.js" />
<option value="$PROJECT_DIR$/src/forge/Order/OrderItem.js" />
<option value="$PROJECT_DIR$/src/forge/Main/list.css" />
<option value="$PROJECT_DIR$/src/forge/Order/order.css" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeItem.js" />
<option value="$PROJECT_DIR$/src/forge/Order/New.js" />
<option value="$PROJECT_DIR$/src/forge/Order/UpdateDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/NewMerge.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
</list>
</option>
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectFrameBounds" fullScreen="true">
<option name="width" value="1440" />
<option name="height" value="900" />
</component>
<component name="ProjectId" id="27mV8lt7EW3FNNbkNliC8c3gmhR" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="build" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.detected.package.tslint" value="true" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" />
<property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="ts.external.directory.path" value="$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$" />
<recent name="$PROJECT_DIR$/src/modules/user/usersInfo" />
<recent name="$PROJECT_DIR$/build" />
<recent name="$PROJECT_DIR$/src/forge/Images" />
</key>
</component>
<component name="RubyModuleManagerSettings">
<option name="blackListedRootsPaths">
<list>
<option value="$PROJECT_DIR$" />
</list>
</option>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" />
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="" />
<created>1584692398144</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1584692398144</updated>
<workItem from="1584692401543" duration="6228000" />
<workItem from="1585015135223" duration="21118000" />
<workItem from="1585194891947" duration="1630000" />
<workItem from="1585210651078" duration="1600000" />
<workItem from="1585217705353" duration="104000" />
<workItem from="1585217834609" duration="4000" />
<workItem from="1585217980103" duration="3406000" />
<workItem from="1585288258489" duration="17495000" />
<workItem from="1585732642767" duration="11458000" />
<workItem from="1585817691582" duration="2125000" />
<workItem from="1585900267463" duration="136000" />
<workItem from="1585902299727" duration="2113000" />
<workItem from="1586153685130" duration="10062000" />
<workItem from="1586245827209" duration="1692000" />
<workItem from="1586330226261" duration="658000" />
<workItem from="1586400014081" duration="18358000" />
<workItem from="1586517058808" duration="1607000" />
<workItem from="1586741565210" duration="25216000" />
<workItem from="1586946208505" duration="2914000" />
<workItem from="1587004932342" duration="7698000" />
<workItem from="1587020811560" duration="543000" />
<workItem from="1587021467416" duration="8000" />
<workItem from="1587022017639" duration="2902000" />
<workItem from="1587047814589" duration="8239000" />
<workItem from="1587117033332" duration="611000" />
<workItem from="1587362728834" duration="185000" />
<workItem from="1587374749323" duration="458000" />
<workItem from="1587375511570" duration="1067000" />
<workItem from="1587376696494" duration="11000" />
<workItem from="1587376745950" duration="14824000" />
<workItem from="1587452961769" duration="4499000" />
<workItem from="1587534020999" duration="19518000" />
<workItem from="1587863258736" duration="1097000" />
<workItem from="1587864581358" duration="777000" />
<workItem from="1587870344748" duration="138000" />
<workItem from="1587882941476" duration="4365000" />
<workItem from="1587891008299" duration="390000" />
<workItem from="1649925095579" duration="944000" />
<workItem from="1651904006915" duration="1267000" />
<workItem from="1657591336142" duration="1972000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="206113000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
<layout>
<window_info content_ui="combo" id="Project" order="0" weight="0.20243205" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" order="8" />
<window_info anchor="bottom" id="Version Control" order="9" sideWeight="0.49928468" weight="0.5638554" />
<window_info active="true" anchor="bottom" id="Terminal" order="10" sideWeight="0.49928468" visible="true" weight="0.44457832" />
<window_info anchor="bottom" id="Event Log" order="11" sideWeight="0.5007153" side_tool="true" weight="0.713253" />
<window_info anchor="bottom" id="TypeScript" order="12" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Database" order="3" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.History.Properties">
<option name="COLUMN_ORDER">
<list>
<option value="0" />
<option value="2" />
<option value="3" />
<option value="1" />
</list>
</option>
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
<option name="RECENT_FILTERS">
<map>
<entry key="Branch">
<value>
<list />
</value>
</entry>
<entry key="User">
<value>
<list />
</value>
</entry>
</map>
</option>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/usersInfo.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7973">
<caret line="469" column="1" selection-start-line="469" selection-start-column="1" selection-end-line="469" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/publicCreatNew.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="714">
<caret line="42" column="22" selection-start-line="42" selection-start-column="22" selection-end-line="42" selection-end-column="22" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/NullData.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="443">
<caret line="63" column="23" selection-start-line="63" selection-start-column="15" selection-end-line="63" selection-end-column="23" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="194">
<caret line="216" column="38" selection-start-line="216" selection-start-column="33" selection-end-line="216" selection-end-column="38" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="311">
<caret line="58" column="38" selection-start-line="58" selection-start-column="38" selection-end-line="58" selection-end-column="38" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/login/Trialapplication.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="251">
<caret line="118" lean-forward="true" selection-start-line="118" selection-end-line="118" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderInteresse.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1190">
<caret line="78" column="28" selection-start-line="78" selection-start-column="28" selection-end-line="78" selection-end-column="28" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/login/LoginDialog.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="12104">
<caret line="727" column="131" selection-start-line="727" selection-start-column="30" selection-end-line="727" selection-end-column="131" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderLogin.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2584">
<caret line="162" selection-start-line="162" selection-end-line="162" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/login/EducoderReg.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="289">
<caret line="17" column="12" selection-start-line="17" selection-start-column="12" selection-end-line="17" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/user/LoginRegisterComponent.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="161">
<caret line="28" column="49" selection-start-line="28" selection-start-column="49" selection-end-line="28" selection-end-column="49" />
<folding>
<element signature="e#0#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build/css/edu-all.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="221">
<caret line="12" column="10" selection-start-line="12" selection-start-column="10" selection-end-line="12" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/courses/busyWork/ConnectProject.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="335">
<caret line="61" column="24" selection-start-line="61" selection-start-column="24" selection-end-line="61" selection-end-column="24" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/node_modules/@types/react/index.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="446" column="8" selection-start-line="446" selection-start-column="8" selection-end-line="446" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/tpm/NewHeader.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="1181" column="72" lean-forward="true" selection-start-line="1181" selection-start-column="40" selection-end-line="1181" selection-end-column="72" />
<folding>
<element signature="e#0#41#0" expanded="true" />
<element signature="e#433#515#0" expanded="true" />
<element signature="e#1358#2042#0" />
<element signature="n#!!block;n#componentDidMount#0;n#NewHeader#0" />
<element signature="e#2353#2665#0" />
<element signature="e#2760#2816#0" />
<element signature="e#2954#2960#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="133">
<caret line="43" column="50" selection-start-line="43" selection-start-column="50" selection-end-line="43" selection-end-column="50" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="86">
<caret line="65" column="17" selection-start-line="65" selection-start-column="17" selection-end-line="65" selection-end-column="17" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/quillForEditor/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="287">
<caret line="45" column="10" lean-forward="true" selection-start-line="45" selection-start-column="10" selection-end-line="45" selection-end-column="10" />
<folding>
<element signature="n#!!doc" expanded="true" />
<element signature="e#166#188#0" expanded="true" />
<element signature="e#373#392#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/Projects.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="680">
<caret line="40" column="16" selection-start-line="40" selection-start-column="16" selection-end-line="40" selection-end-column="16" />
<folding>
<element signature="e#0#41#0" expanded="true" />
<element signature="e#4148#5191#0" />
<element signature="e#5202#6120#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/IndexItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
<caret line="25" column="12" selection-start-line="25" selection-start-column="12" selection-end-line="28" selection-end-column="19" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Activity/ActivityItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="217">
<caret line="42" column="18" lean-forward="true" selection-start-line="42" selection-start-column="18" selection-end-line="42" selection-end-column="18" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/js/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="188">
<caret line="2068" column="17" selection-start-line="2068" selection-start-column="17" selection-end-line="2068" selection-end-column="17" />
<folding>
<element signature="n#style#0;n#div#0;n#!!top" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/UpdateMerge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="282">
<caret line="204" column="12" selection-start-line="204" selection-start-column="12" selection-end-line="206" selection-end-column="19" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#8046#8546#0" />
<element signature="e#8575#9036#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-984">
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/react.d.ts">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret line="927" column="16" lean-forward="true" selection-start-line="927" selection-start-column="16" selection-end-line="927" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="170">
<caret line="10" column="26" lean-forward="true" selection-start-line="10" selection-start-column="26" selection-end-line="10" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/App.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1050">
<caret line="12" column="16" lean-forward="true" selection-start-line="12" selection-start-column="16" selection-end-line="12" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Branch/CloneAddress.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="130">
<caret line="16" column="39" selection-start-line="16" selection-start-column="39" selection-end-line="16" selection-end-column="39" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="505">
<caret line="110" column="75" selection-start-line="110" selection-start-column="75" selection-end-line="110" selection-end-column="75" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/common/TextUtil.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="39" selection-start-line="12" selection-start-column="39" selection-end-line="12" selection-end-column="39" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/css/edu-all.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="171">
<caret line="3481" column="26" selection-start-line="3481" selection-start-column="26" selection-end-line="3481" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="72">
<caret line="38" column="38" selection-start-line="38" selection-start-column="38" selection-end-line="38" selection-end-column="38" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/css/css_min_all.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="43928">
<caret line="1673" column="27300" selection-start-line="1673" selection-start-column="27300" selection-end-line="1673" selection-end-column="27300" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/user/usersInfo/InfosBanner.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="192">
<caret line="85" column="23" lean-forward="true" selection-start-line="85" selection-start-column="23" selection-end-line="85" selection-end-column="23" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1670">
<caret line="60" selection-start-line="60" selection-end-line="60" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/list.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="326">
<caret line="375" column="28" selection-start-line="375" selection-start-column="28" selection-end-line="375" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="187">
<caret line="59" column="93" selection-start-line="59" selection-start-column="26" selection-end-line="59" selection-end-column="93" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3400">
<caret line="200" column="35" selection-start-line="200" selection-start-column="35" selection-end-line="200" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
<caret line="51" column="38" selection-start-line="51" selection-start-column="38" selection-end-line="51" selection-end-column="38" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/UpdateDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="301">
<caret line="337" column="28" lean-forward="true" selection-start-line="337" selection-start-column="28" selection-end-line="337" selection-end-column="28" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#6358#8304#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootCommit.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="229">
<caret line="86" column="18" lean-forward="true" selection-start-line="86" selection-start-column="18" selection-end-line="86" selection-end-column="18" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/App.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="12376">
<caret line="760" column="37" selection-start-line="760" selection-start-column="37" selection-end-line="760" selection-end-column="37" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/AppConfig.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1989">
<caret line="125" column="13" selection-start-line="125" selection-start-column="13" selection-end-line="125" selection-end-column="13" />
<folding>
<element signature="e#0#26#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeSubmit.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1564">
<caret line="98" column="20" selection-start-line="98" selection-start-column="20" selection-end-line="98" selection-end-column="20" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/NewMerge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4097">
<caret line="248" column="18" selection-start-line="248" selection-start-column="18" selection-end-line="248" selection-end-column="18" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/New.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2431">
<caret line="155" column="14" selection-start-line="155" selection-start-column="14" selection-end-line="157" selection-end-column="21" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="765">
<caret line="45" column="8" selection-start-line="45" selection-start-column="8" selection-end-line="45" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4726">
<caret line="286" column="34" selection-start-line="286" selection-start-column="34" selection-end-line="286" selection-end-column="34" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="14127">
<caret line="820" lean-forward="true" selection-start-line="820" selection-end-line="820" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="306">
<caret line="18" lean-forward="true" selection-start-line="18" selection-end-line="18" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

15
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}

4879
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
"antd": "^3.26.15", "antd": "^3.26.15",
"array-flatten": "^2.1.2", "array-flatten": "^2.1.2",
"autoprefixer": "7.1.6", "autoprefixer": "7.1.6",
"axios": "^0.18.1", "axios": "^0.24.0",
"babel-eslint": "7.2.3", "babel-eslint": "7.2.3",
"babel-jest": "20.0.3", "babel-jest": "20.0.3",
"babel-loader": "7.1.2", "babel-loader": "7.1.2",
@ -24,11 +24,11 @@
"classnames": "^2.2.5", "classnames": "^2.2.5",
"clipboard": "^2.0.8", "clipboard": "^2.0.8",
"code-prettify": "^0.1.0", "code-prettify": "^0.1.0",
"codemirror": "^5.53.0", "codemirror": "^5.64.0",
"connected-react-router": "4.4.1", "connected-react-router": "4.4.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"css-loader": "^3.5.2", "css-loader": "^3.5.2",
"dompurify": "^2.0.15", "dompurify": "^2.3.3",
"dotenv": "4.0.0", "dotenv": "4.0.0",
"dotenv-expand": "4.2.0", "dotenv-expand": "4.2.0",
"echarts": "^4.9.0", "echarts": "^4.9.0",
@ -51,7 +51,7 @@
"js-base64": "^2.5.2", "js-base64": "^2.5.2",
"js2wordcloud": "^1.1.12", "js2wordcloud": "^1.1.12",
"katex": "^0.11.1", "katex": "^0.11.1",
"lodash": "^4.17.15", "lodash": "^4.17.21",
"loglevel": "^1.6.8", "loglevel": "^1.6.8",
"marked": "^1.0.0", "marked": "^1.0.0",
"material-ui": "^1.0.0-beta.40", "material-ui": "^1.0.0-beta.40",
@ -84,6 +84,8 @@
"react-color": "^2.18.0", "react-color": "^2.18.0",
"react-content-loader": "^3.1.1", "react-content-loader": "^3.1.1",
"react-cookies": "^0.1.1", "react-cookies": "^0.1.1",
"react-countup": "^6.1.0",
"react-cropper": "^2.1.8",
"react-datepicker": "^2.14.1", "react-datepicker": "^2.14.1",
"react-dev-utils": "^9.2.0-next.80", "react-dev-utils": "^9.2.0-next.80",
"react-dom": "^16.13.1", "react-dom": "^16.13.1",
@ -119,11 +121,12 @@
"webpack-manifest-plugin": "^2.2.0", "webpack-manifest-plugin": "^2.2.0",
"whatwg-fetch": "2.0.3", "whatwg-fetch": "2.0.3",
"wrap-md-editor": "^0.2.20", "wrap-md-editor": "^0.2.20",
"xss": "^1.0.14",
"xterm": "4.8.1", "xterm": "4.8.1",
"xterm-addon-fit": "0.4.0" "xterm-addon-fit": "0.4.0"
}, },
"scripts": { "scripts": {
"start": "node --max_old_space_size=15360 scripts/start.js", "start": "cross-env node --max_old_space_size=15360 scripts/start.js",
"build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js", "build": "cross-env NODE_ENV=production node --max_old_space_size=15360 scripts/build.js",
"test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js", "test-build": "cross-env NODE_ENV=testBuild node --max_old_space_size=15360 scripts/build.js",
"pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js", "pre-build": "NODE_ENV=preBuild node --max_old_space_size=15360 scripts/build.js",
@ -187,7 +190,7 @@
"eslintConfig": { "eslintConfig": {
"extends": "react-app" "extends": "react-app"
}, },
"proxy": "http://localhost:3000", "proxy": "http://localhost:3007",
"port": "3007", "port": "3007",
"devDependencies": { "devDependencies": {
"@babel/runtime": "7.0.0-beta.51", "@babel/runtime": "7.0.0-beta.51",

View File

@ -25,9 +25,6 @@ html {
min-width: 1200px min-width: 1200px
} }
.newFooter {
max-height: 110px;
}
.newFooter { .newFooter {
position: absolute; position: absolute;

View File

@ -1268,11 +1268,17 @@ a.shixun-task-btn {
/*-----------实训配置、评测脚本-------------*/ /*-----------实训配置、评测脚本-------------*/
@font-face {
font-family: "iconfont"; /* Project id 2340181 */
src: url('iconfont.woff2?t=1631773579834') format('woff2'),
url('iconfont.woff?t=1631773579834') format('woff'),
url('iconfont.ttf?t=1631773579834') format('truetype');
}
html body { html body {
font-size: 14px; font-size: 14px;
line-height: 2.0; line-height: 2.0;
background: #fafafa; background: #fafafa;
font-family: "Microsoft YaHei", "SimSun"; font-family: "iconfont";
color: #05101a; color: #05101a;
height: 100%; height: 100%;
position: relative; position: relative;
@ -3604,7 +3610,6 @@ a.user_bluebg_btn {
margin-right: 5px; margin-right: 5px;
} }
/***** loading ******/ /***** loading ******/
/*****载入中******/ /*****载入中******/
#ajax-indicator { #ajax-indicator {
@ -3939,9 +3944,13 @@ html>body #ajax-indicator {
margin-left: 10px; margin-left: 10px;
color: #2FC25B; color: #2FC25B;
} }
.privateTag.red{
color: #FF6832;
border:1px solid #FF6832;
}
.head-nav { .head-nav {
text-align: center; text-align: center;
height: 70px; height: 72px;
box-sizing: border-box; box-sizing: border-box;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -3953,40 +3962,74 @@ html>body #ajax-indicator {
position: absolute; position: absolute;
top: 0px; top: 0px;
z-index: 3; z-index: 3;
height: 70px; height: 72px;
box-sizing: border-box; box-sizing: border-box;
} }
.head-nav ul#header-nav li { .head-nav ul#header-nav li {
float: left; float: left;
height: 70px; height: 72px;
line-height: 70px; line-height: 72px;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
font-size: 16px; font-size: 16px;
padding-right:40px; padding-right:30px;
}
.downMenus{
background: #ffffff;
box-shadow: 0px 10px 16px 0px #cecece;
border-radius: 6px;
position: absolute;
z-index: 999;
left: -20px;
top: -15px;
padding: 20px;
line-height: 1.5;
min-width: 105px;
}
.downMenus li{
cursor: pointer;
}
.downMenus li:hover aside{
color: #165dff!important;
}
.namediv{
display: flex;
} }
.head-nav ul#header-nav li a { .head-nav ul#header-nav li a {
display: block; display: flex;
align-items: center;
height: 100%; height: 100%;
width: 100%; width: 100%;
color: #333; color: #fff;
font-size: 16px; font-size: 16px;
position: relative;
} }
.head-nav ul#header-nav li a:hover{
.head-nav ul#header-nav li a:hover,.head-nav ul#header-nav li.active a { color: #c5c5c5!important;
color: #5091FF; }
#header-nav li .namediv i{
font-size: 14px!important;
display: inline-block;
color: #979797;
margin:0px 3.58px 0px 3px;
transform: translateY(0.5px);
}
#header-nav li.active a::before{
content: '';
width: 100%;
height: 2px;
background: #c5c5c5;
position: absolute;
bottom: 17px;
left: 0;
border-radius: 1px;
} }
.head-nav ul#header-nav li:last-child { .head-nav ul#header-nav li:last-child {
margin-right: 0px margin-right: 0px
} }
.head-nav ul#header-nav li.active{
/* background-color: #3B3B3B; */
}
.head-nav ul#header-nav li p:hover { .head-nav ul#header-nav li p:hover {
color: #cccccc; color: #cccccc;

View File

@ -1,8 +1,8 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 2340181 */ font-family: "iconfont"; /* Project id 2340181 */
src: url('iconfont.woff2?t=1634881729644') format('woff2'), src: url('iconfont.woff2?t=1653550272457') format('woff2'),
url('iconfont.woff?t=1634881729644') format('woff'), url('iconfont.woff?t=1653550272457') format('woff'),
url('iconfont.ttf?t=1634881729644') format('truetype'); url('iconfont.ttf?t=1653550272457') format('truetype');
} }
.iconfont { .iconfont {
@ -13,6 +13,338 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-tuichuicon:before {
content: "\e936";
}
.icon-bangzhuzhongxinicon1:before {
content: "\e935";
}
.icon-ketixiangqingicon:before {
content: "\e92b";
}
.icon-bianjiicon:before {
content: "\e92c";
}
.icon-baomingxiangqingicon:before {
content: "\e92d";
}
.icon-sousuo4:before {
content: "\e92e";
}
.icon-quxiaoshenqingicon:before {
content: "\e92f";
}
.icon-xiala3:before {
content: "\e930";
}
.icon-tianjia_tianchong:before {
content: "\e931";
}
.icon-a-shanchu2:before {
content: "\e932";
}
.icon-shanchuicon3:before {
content: "\e933";
}
.icon-shenqingketiicon:before {
content: "\e934";
}
.icon-weixin:before {
content: "\e92a";
}
.icon-zanwushuju:before {
content: "\e928";
}
.icon-fuwuicon:before {
content: "\e929";
}
.icon-personal-center:before {
content: "\e927";
}
.icon-bangzhuzhongxinicon:before {
content: "\e926";
}
.icon-kaiyuanxiangmu:before {
content: "\e91d";
}
.icon-luntanjiaoliu:before {
content: "\e91e";
}
.icon-wangzhanpeizhi:before {
content: "\e91f";
}
.icon-weixuanze-chuangkekongjian:before {
content: "\e920";
}
.icon-tubiao:before {
content: "\e921";
}
.icon-gonggaofabu:before {
content: "\e922";
}
.icon-jingsaihuodong:before {
content: "\e923";
}
.icon-yonghuguanli:before {
content: "\e924";
}
.icon-shenpi:before {
content: "\e925";
}
.icon-zhuanli1:before {
content: "\e918";
}
.icon-daimaicon:before {
content: "\e91c";
}
.icon-jiangxiangicon:before {
content: "\e916";
}
.icon-shuju:before {
content: "\e917";
}
.icon-wendang:before {
content: "\e919";
}
.icon-lunwen:before {
content: "\e91a";
}
.icon-zhuanli:before {
content: "\e91b";
}
.icon-gailan1:before {
content: "\e914";
}
.icon-tuandui:before {
content: "\e915";
}
.icon-icon2:before {
content: "\e912";
}
.icon-a-21:before {
content: "\e913";
}
.icon-a-2:before {
content: "\e90f";
}
.icon-a-3:before {
content: "\e910";
}
.icon-icon1:before {
content: "\e911";
}
.icon-ioon:before {
content: "\e90e";
}
.icon-shanchu_tc_icon1:before {
content: "\e90c";
}
.icon-zhuanjiaicon:before {
content: "\e90d";
}
.icon-shengming:before {
content: "\e90b";
}
.icon-chenggong1:before {
content: "\e907";
}
.icon-a-bitian2x1:before {
content: "\e908";
}
.icon-xiala1:before {
content: "\e909";
}
.icon-xiala2:before {
content: "\e90a";
}
.icon-jiantou1:before {
content: "\e905";
}
.icon-zhangjieicon:before {
content: "\e8fe";
}
.icon-chengyuan1:before {
content: "\e903";
}
.icon-a-shangchuan2x:before {
content: "\e8f9";
}
.icon-shanchu7:before {
content: "\e8fa";
}
.icon-zuohuabeifen:before {
content: "\e8fb";
}
.icon-a-bianji11:before {
content: "\e8f4";
}
.icon-a-bitian2x:before {
content: "\e8f5";
}
.icon-a-zuohua2x:before {
content: "\e8f7";
}
.icon-lianjie3:before {
content: "\e8f8";
}
.icon-zhishitupu:before {
content: "\e8fc";
}
.icon-jisuanji1:before {
content: "\e8fd";
}
.icon-dianzi1:before {
content: "\e8ff";
}
.icon-junshililun1:before {
content: "\e900";
}
.icon-ruanjiangongcheng1:before {
content: "\e901";
}
.icon-yixue1:before {
content: "\e902";
}
.icon-tongxin1:before {
content: "\e904";
}
.icon-zhengcefagui1:before {
content: "\e906";
}
.icon-dashuju:before {
content: "\e8f3";
}
.icon-rengongzhineng:before {
content: "\e8f6";
}
.icon-a-shuangyinhao12x:before {
content: "\e8f2";
}
.icon-dingbu:before {
content: "\e8ee";
}
.icon-bangzhu1:before {
content: "\e8ef";
}
.icon-yijianfankui2:before {
content: "\e8f0";
}
.icon-fenxiang:before {
content: "\e8f1";
}
.icon-dizhi:before {
content: "\e8eb";
}
.icon-youxiang1:before {
content: "\e8ec";
}
.icon-dianhuaicon:before {
content: "\e8ed";
}
.icon-tianjiaicon:before {
content: "\e8e8";
}
.icon-lingshengicon:before {
content: "\e8ea";
}
.icon-gengduoicon:before {
content: "\e8e5";
}
.icon-shijianicon:before {
content: "\e8e7";
}
.icon-mimaicon:before {
content: "\e8e1";
}
.icon-gouicon:before {
content: "\e8e2";
}
.icon-zhankaiicon:before {
content: "\e8e3";
}
.icon-wenjian7:before { .icon-wenjian7:before {
content: "\e8e0"; content: "\e8e0";
} }

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,587 @@
"css_prefix_text": "icon-", "css_prefix_text": "icon-",
"description": "", "description": "",
"glyphs": [ "glyphs": [
{
"icon_id": "29934961",
"name": "退出icon",
"font_class": "tuichuicon",
"unicode": "e936",
"unicode_decimal": 59702
},
{
"icon_id": "29811507",
"name": "帮助中心icon",
"font_class": "bangzhuzhongxinicon1",
"unicode": "e935",
"unicode_decimal": 59701
},
{
"icon_id": "29701613",
"name": "课题详情icon",
"font_class": "ketixiangqingicon",
"unicode": "e92b",
"unicode_decimal": 59691
},
{
"icon_id": "29701614",
"name": "编辑icon",
"font_class": "bianjiicon",
"unicode": "e92c",
"unicode_decimal": 59692
},
{
"icon_id": "29701615",
"name": "报名详情icon",
"font_class": "baomingxiangqingicon",
"unicode": "e92d",
"unicode_decimal": 59693
},
{
"icon_id": "29701616",
"name": "搜索",
"font_class": "sousuo4",
"unicode": "e92e",
"unicode_decimal": 59694
},
{
"icon_id": "29701617",
"name": "取消申请icon",
"font_class": "quxiaoshenqingicon",
"unicode": "e92f",
"unicode_decimal": 59695
},
{
"icon_id": "29701618",
"name": "下拉",
"font_class": "xiala3",
"unicode": "e930",
"unicode_decimal": 59696
},
{
"icon_id": "29701619",
"name": "添加_填充",
"font_class": "tianjia_tianchong",
"unicode": "e931",
"unicode_decimal": 59697
},
{
"icon_id": "29701620",
"name": "删除 (2)",
"font_class": "a-shanchu2",
"unicode": "e932",
"unicode_decimal": 59698
},
{
"icon_id": "29701621",
"name": "删除icon",
"font_class": "shanchuicon3",
"unicode": "e933",
"unicode_decimal": 59699
},
{
"icon_id": "29701622",
"name": "申请课题icon",
"font_class": "shenqingketiicon",
"unicode": "e934",
"unicode_decimal": 59700
},
{
"icon_id": "29665762",
"name": "微信",
"font_class": "weixin",
"unicode": "e92a",
"unicode_decimal": 59690
},
{
"icon_id": "29467269",
"name": "暂无数据",
"font_class": "zanwushuju",
"unicode": "e928",
"unicode_decimal": 59688
},
{
"icon_id": "29467272",
"name": "服务icon",
"font_class": "fuwuicon",
"unicode": "e929",
"unicode_decimal": 59689
},
{
"icon_id": "29206429",
"name": "personal-center",
"font_class": "personal-center",
"unicode": "e927",
"unicode_decimal": 59687
},
{
"icon_id": "28888753",
"name": "帮助中心icon",
"font_class": "bangzhuzhongxinicon",
"unicode": "e926",
"unicode_decimal": 59686
},
{
"icon_id": "28163416",
"name": "开源项目",
"font_class": "kaiyuanxiangmu",
"unicode": "e91d",
"unicode_decimal": 59677
},
{
"icon_id": "28163417",
"name": "论坛交流",
"font_class": "luntanjiaoliu",
"unicode": "e91e",
"unicode_decimal": 59678
},
{
"icon_id": "28163418",
"name": "网站配置",
"font_class": "wangzhanpeizhi",
"unicode": "e91f",
"unicode_decimal": 59679
},
{
"icon_id": "28163419",
"name": "未选择-创客空间",
"font_class": "weixuanze-chuangkekongjian",
"unicode": "e920",
"unicode_decimal": 59680
},
{
"icon_id": "28163420",
"name": "图标",
"font_class": "tubiao",
"unicode": "e921",
"unicode_decimal": 59681
},
{
"icon_id": "28163421",
"name": "公告发布",
"font_class": "gonggaofabu",
"unicode": "e922",
"unicode_decimal": 59682
},
{
"icon_id": "28163422",
"name": "竞赛活动",
"font_class": "jingsaihuodong",
"unicode": "e923",
"unicode_decimal": 59683
},
{
"icon_id": "28163423",
"name": "用户管理",
"font_class": "yonghuguanli",
"unicode": "e924",
"unicode_decimal": 59684
},
{
"icon_id": "28163424",
"name": "审批",
"font_class": "shenpi",
"unicode": "e925",
"unicode_decimal": 59685
},
{
"icon_id": "22773568",
"name": "专利",
"font_class": "zhuanli1",
"unicode": "e918",
"unicode_decimal": 59672
},
{
"icon_id": "27680124",
"name": "代码icon",
"font_class": "daimaicon",
"unicode": "e91c",
"unicode_decimal": 59676
},
{
"icon_id": "27664463",
"name": "奖项icon",
"font_class": "jiangxiangicon",
"unicode": "e916",
"unicode_decimal": 59670
},
{
"icon_id": "27664464",
"name": "数据",
"font_class": "shuju",
"unicode": "e917",
"unicode_decimal": 59671
},
{
"icon_id": "27664466",
"name": "文档",
"font_class": "wendang",
"unicode": "e919",
"unicode_decimal": 59673
},
{
"icon_id": "27664467",
"name": "论文",
"font_class": "lunwen",
"unicode": "e91a",
"unicode_decimal": 59674
},
{
"icon_id": "27664468",
"name": "专利",
"font_class": "zhuanli",
"unicode": "e91b",
"unicode_decimal": 59675
},
{
"icon_id": "27664392",
"name": "概览",
"font_class": "gailan1",
"unicode": "e914",
"unicode_decimal": 59668
},
{
"icon_id": "27664393",
"name": "团队",
"font_class": "tuandui",
"unicode": "e915",
"unicode_decimal": 59669
},
{
"icon_id": "27299393",
"name": "icon",
"font_class": "icon2",
"unicode": "e912",
"unicode_decimal": 59666
},
{
"icon_id": "27299394",
"name": "2",
"font_class": "a-21",
"unicode": "e913",
"unicode_decimal": 59667
},
{
"icon_id": "27200759",
"name": "2",
"font_class": "a-2",
"unicode": "e90f",
"unicode_decimal": 59663
},
{
"icon_id": "27200760",
"name": "3",
"font_class": "a-3",
"unicode": "e910",
"unicode_decimal": 59664
},
{
"icon_id": "27200761",
"name": "icon",
"font_class": "icon1",
"unicode": "e911",
"unicode_decimal": 59665
},
{
"icon_id": "27041503",
"name": "ioon",
"font_class": "ioon",
"unicode": "e90e",
"unicode_decimal": 59662
},
{
"icon_id": "26470602",
"name": "shanchu_tc_icon",
"font_class": "shanchu_tc_icon1",
"unicode": "e90c",
"unicode_decimal": 59660
},
{
"icon_id": "26470603",
"name": "专家icon",
"font_class": "zhuanjiaicon",
"unicode": "e90d",
"unicode_decimal": 59661
},
{
"icon_id": "12505154",
"name": "声明",
"font_class": "shengming",
"unicode": "e90b",
"unicode_decimal": 59659
},
{
"icon_id": "26470597",
"name": "成功",
"font_class": "chenggong1",
"unicode": "e907",
"unicode_decimal": 59655
},
{
"icon_id": "26470599",
"name": "必填@2x",
"font_class": "a-bitian2x1",
"unicode": "e908",
"unicode_decimal": 59656
},
{
"icon_id": "26470600",
"name": "下拉",
"font_class": "xiala1",
"unicode": "e909",
"unicode_decimal": 59657
},
{
"icon_id": "26470601",
"name": "下拉2",
"font_class": "xiala2",
"unicode": "e90a",
"unicode_decimal": 59658
},
{
"icon_id": "26363219",
"name": "箭头",
"font_class": "jiantou1",
"unicode": "e905",
"unicode_decimal": 59653
},
{
"icon_id": "26359564",
"name": "章节icon ",
"font_class": "zhangjieicon",
"unicode": "e8fe",
"unicode_decimal": 59646
},
{
"icon_id": "26359565",
"name": "成员",
"font_class": "chengyuan1",
"unicode": "e903",
"unicode_decimal": 59651
},
{
"icon_id": "26325702",
"name": "上传@2x",
"font_class": "a-shangchuan2x",
"unicode": "e8f9",
"unicode_decimal": 59641
},
{
"icon_id": "26325703",
"name": "删除 ",
"font_class": "shanchu7",
"unicode": "e8fa",
"unicode_decimal": 59642
},
{
"icon_id": "26325704",
"name": "左滑备份",
"font_class": "zuohuabeifen",
"unicode": "e8fb",
"unicode_decimal": 59643
},
{
"icon_id": "26325698",
"name": "编辑 (1)",
"font_class": "a-bianji11",
"unicode": "e8f4",
"unicode_decimal": 59636
},
{
"icon_id": "26325699",
"name": "必填@2x",
"font_class": "a-bitian2x",
"unicode": "e8f5",
"unicode_decimal": 59637
},
{
"icon_id": "26325700",
"name": "左滑@2x",
"font_class": "a-zuohua2x",
"unicode": "e8f7",
"unicode_decimal": 59639
},
{
"icon_id": "26325701",
"name": "链接",
"font_class": "lianjie3",
"unicode": "e8f8",
"unicode_decimal": 59640
},
{
"icon_id": "25748537",
"name": "知识图谱",
"font_class": "zhishitupu",
"unicode": "e8fc",
"unicode_decimal": 59644
},
{
"icon_id": "25748551",
"name": "计算机",
"font_class": "jisuanji1",
"unicode": "e8fd",
"unicode_decimal": 59645
},
{
"icon_id": "25748553",
"name": "电子",
"font_class": "dianzi1",
"unicode": "e8ff",
"unicode_decimal": 59647
},
{
"icon_id": "25748554",
"name": "军事理论",
"font_class": "junshililun1",
"unicode": "e900",
"unicode_decimal": 59648
},
{
"icon_id": "25748555",
"name": "软件工程",
"font_class": "ruanjiangongcheng1",
"unicode": "e901",
"unicode_decimal": 59649
},
{
"icon_id": "25748556",
"name": "医学",
"font_class": "yixue1",
"unicode": "e902",
"unicode_decimal": 59650
},
{
"icon_id": "25748558",
"name": "通信",
"font_class": "tongxin1",
"unicode": "e904",
"unicode_decimal": 59652
},
{
"icon_id": "25748560",
"name": "政策法规",
"font_class": "zhengcefagui1",
"unicode": "e906",
"unicode_decimal": 59654
},
{
"icon_id": "25748528",
"name": "大数据",
"font_class": "dashuju",
"unicode": "e8f3",
"unicode_decimal": 59635
},
{
"icon_id": "25748531",
"name": "人工智能",
"font_class": "rengongzhineng",
"unicode": "e8f6",
"unicode_decimal": 59638
},
{
"icon_id": "25733167",
"name": "双引号(1)@2x",
"font_class": "a-shuangyinhao12x",
"unicode": "e8f2",
"unicode_decimal": 59634
},
{
"icon_id": "25701947",
"name": "顶部",
"font_class": "dingbu",
"unicode": "e8ee",
"unicode_decimal": 59630
},
{
"icon_id": "25701948",
"name": "帮助",
"font_class": "bangzhu1",
"unicode": "e8ef",
"unicode_decimal": 59631
},
{
"icon_id": "25701949",
"name": "意见反馈",
"font_class": "yijianfankui2",
"unicode": "e8f0",
"unicode_decimal": 59632
},
{
"icon_id": "25701950",
"name": "分享",
"font_class": "fenxiang",
"unicode": "e8f1",
"unicode_decimal": 59633
},
{
"icon_id": "25580217",
"name": "地址",
"font_class": "dizhi",
"unicode": "e8eb",
"unicode_decimal": 59627
},
{
"icon_id": "25580218",
"name": "邮箱",
"font_class": "youxiang1",
"unicode": "e8ec",
"unicode_decimal": 59628
},
{
"icon_id": "25580219",
"name": "电话icon",
"font_class": "dianhuaicon",
"unicode": "e8ed",
"unicode_decimal": 59629
},
{
"icon_id": "25284174",
"name": "添加icon",
"font_class": "tianjiaicon",
"unicode": "e8e8",
"unicode_decimal": 59624
},
{
"icon_id": "25284175",
"name": "铃声icon",
"font_class": "lingshengicon",
"unicode": "e8ea",
"unicode_decimal": 59626
},
{
"icon_id": "25204490",
"name": "更多icon",
"font_class": "gengduoicon",
"unicode": "e8e5",
"unicode_decimal": 59621
},
{
"icon_id": "25204491",
"name": "时间icon",
"font_class": "shijianicon",
"unicode": "e8e7",
"unicode_decimal": 59623
},
{
"icon_id": "25188228",
"name": "密码icon",
"font_class": "mimaicon",
"unicode": "e8e1",
"unicode_decimal": 59617
},
{
"icon_id": "25188229",
"name": "钩icon",
"font_class": "gouicon",
"unicode": "e8e2",
"unicode_decimal": 59618
},
{
"icon_id": "25188230",
"name": "展开icon",
"font_class": "zhankaiicon",
"unicode": "e8e3",
"unicode_decimal": 59619
},
{ {
"icon_id": "24656750", "icon_id": "24656750",
"name": "文件", "name": "文件",

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/favicon-.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -7,6 +7,7 @@
<meta name=”Keywords” Content=”issue,bug,tracker,软件工程,课程实践″> <meta name=”Keywords” Content=”issue,bug,tracker,软件工程,课程实践″>
<meta name=”Description” Content=”持续构建协同、共享、可信的软件创建生态开源创作与软件生产相结合,支持大规模群体开展软件协同创新活动”> <meta name=”Description” Content=”持续构建协同、共享、可信的软件创建生态开源创作与软件生产相结合,支持大规模群体开展软件协同创新活动”>
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json"> <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="stylesheet" type="text/css" href="%PUBLIC_URL%css/iconfont.css"> <link rel="stylesheet" type="text/css" href="%PUBLIC_URL%css/iconfont.css">

View File

@ -93,6 +93,9 @@ body {
.editormd-preview .markdown-body{ .editormd-preview .markdown-body{
padding:0px !important; padding:0px !important;
} }
.editormd-preview{
width: 50%!important;
}
/* 图片点击放大的场景,隐藏图片链接 */ /* 图片点击放大的场景,隐藏图片链接 */
.editormd-image-click-expand .editormd-image-dialog { .editormd-image-click-expand .editormd-image-dialog {

View File

@ -3,21 +3,21 @@ import './App.css';
import { ConfigProvider } from 'antd' import { ConfigProvider } from 'antd'
import zhCN from 'antd/lib/locale-provider/zh_CN'; import zhCN from 'antd/lib/locale-provider/zh_CN';
import { import {
// BrowserRouter as Router,
Route, Route,
Switch Switch
} from 'react-router-dom'; } from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
import LoginDialog from './modules/login/LoginDialog'; import LoginDialog from './modules/login/LoginDialog';
import 'babel-polyfill'; import 'babel-polyfill';
import Loading from './Loading' import Loading from './Loading';
import Loadable from 'react-loadable'; import Loadable from 'react-loadable';
import marked from './common/marked'; import marked from './common/marked';
import moment from 'moment' import moment from 'moment'
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles'; import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
import SiderBar from './forge/Component/SiderBar' import SiderBar from './forge/Component/SiderBar';
import SiderBarHelp from './glcc/siderBarHelp';
import { SnackbarHOC } from 'educoder'; import { SnackbarHOC } from 'educoder';
import { initAxiosInterceptors } from './AppConfig' import { initAxiosInterceptors } from './AppConfig'
@ -79,10 +79,7 @@ const OrganizeIndex = Loadable({
loader: () => import('./forge/Team/Index'), loader: () => import('./forge/Team/Index'),
loading: Loading, loading: Loading,
}) })
const EducoderLogin = Loadable({
loader: () => import('./modules/login/EducoderLogin'),
loading: Loading,
})
const Search = Loadable({ const Search = Loadable({
loader: () => import('./modules/search/'), loader: () => import('./modules/search/'),
loading: Loading, loading: Loading,
@ -92,18 +89,44 @@ const WikiPreview = Loadable({
loading: Loading, loading: Loading,
}) })
const ProjectIndex = Loadable({ const ProjectIndex = Loadable({
loader: () => import("./forge/Index"), loader: () => import("./forge/Index"),
loading: Loading, loading: Loading,
}); });
const Home = Loadable({
loader: () => import('./home/Index'),
loading: Loading,
})
const LoginRegisterPage = Loadable({
loader: () => import("./modules/loginRegister/LoginRegisterPage"),
loading: Loading,
});
const AboutUs = Loadable({
loader: () => import("./forge/AboutUs/AboutUs"),
loading: Loading,
})
const Teaching = Loadable({
loader : () => import("./forge/TeachingPractice/Teaching"),
loading: Loading,
})
const Glcc = Loadable({
loader : () => import("./glcc"),
loading: Loading,
})
// const CreateMerge = Loadable({ // const CreateMerge = Loadable({
// loader: () => import('./forge/Merge/NewMerge'), // loader: () => import('./forge/Merge/NewMerge'),
// loading: Loading, // loading: Loading,
// }) // })
// 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。 // 此处仅维护前端可能的一级路由,不用进行项目或者组织判断的字段。
const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize"]; const keyWord = ["explore", "settings", "setting", "mulan", "wiki", "issues", "setting", "trending", "code", "projects", "pulls", "mine", "login", "register", "email", "export", "nopage", "404", "403", "500", "501", "search", "organize", "login", "register", "resetPassword", "aboutus","educoder", "glcc"];
class App extends Component { class App extends Component {
constructor(props) { constructor(props) {
@ -125,7 +148,7 @@ class App extends Component {
pathname && this.getPathnameType(pathname); pathname && this.getPathnameType(pathname);
// 添加路由监听,决定组织还是个人 // 添加路由监听,决定组织还是个人
this.unlisten = this.props.history.listen((location) => { this.unlisten = this.props.history.listen((location,history) => {
let newPathname = location.pathname.split('/')[1]; let newPathname = location.pathname.split('/')[1];
if (this.state.pathName !== newPathname) { if (this.state.pathName !== newPathname) {
// this.setState({ pathType: '' }); // this.setState({ pathType: '' });
@ -135,7 +158,10 @@ class App extends Component {
} }
shouldComponentUpdate(nextProps, nextState) { shouldComponentUpdate(nextProps, nextState) {
// (!keyWord.includes(this.props.location.pathname.split('/')[1])) && if(!nextProps.location.pathname==='/'){
return true;
}
// 阻止个人与组织切换时组件渲染请求导致的404
if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) { if (nextProps.location.pathname.split('/')[1] !== this.props.location.pathname.split('/')[1] && nextState.pathType === this.state.pathType) {
return false; return false;
} else { } else {
@ -259,16 +285,14 @@ class App extends Component {
this.gettablogourlnull(); this.gettablogourlnull();
}); });
}; };
render() { render() {
const { mygetHelmetapi, pathType} = this.state; const { pathType, pathName } = this.state;
let personal = mygetHelmetapi && mygetHelmetapi.personal;
return ( return (
<Provider store={store}> <Provider store={store}>
<ConfigProvider locale={zhCN}> <ConfigProvider locale={zhCN}>
<MuiThemeProvider theme={theme}> <MuiThemeProvider theme={theme}>
<LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog> <LoginDialog {...this.props} {...this.state} Modifyloginvalue={() => this.Modifyloginvalue()}></LoginDialog>
<SiderBar /> {!pathName || (pathName && pathName.indexOf("glcc") === -1) ? <SiderBar /> : <SiderBarHelp/>}
{/* <Router> */} {/* <Router> */}
<Switch> <Switch>
{/* wiki预览 */} {/* wiki预览 */}
@ -303,14 +327,6 @@ class App extends Component {
}> }>
</Route> </Route>
<Route
path="/register"
render={
(props) => {
return (<EducoderLogin {...this.props} {...props} {...this.state} />)
}
}
/>
{/*403*/} {/*403*/}
<Route path="/403" component={Shixunauthority} /> <Route path="/403" component={Shixunauthority} />
@ -322,6 +338,13 @@ class App extends Component {
{/* 查询 */} {/* 查询 */}
<Route path="/search" component={Search} /> <Route path="/search" component={Search} />
<Route exact path="/explore/all"
render={
(props) => (
<ProjectIndex {...this.props} {...props} />
)
}
/>
<Route exact path="/explore" <Route exact path="/explore"
render={ render={
(props) => ( (props) => (
@ -330,6 +353,41 @@ class App extends Component {
} }
/> />
{/* 登录 */}
<Route
path="/login"
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
></Route>
{/* 注册 */}
<Route
path="/register"
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
></Route>
{/* 忘记密码 */}
<Route
path="/resetPassword"
render={(props) =><LoginRegisterPage {...this.props} {...props}/>}
></Route>
{/* 关于我们 */}
<Route
path = "/aboutus"
render = {(props)=><AboutUs {...this.props} {...props}/>}
></Route>
{/* 教学实践 */}
<Route
path="/educoder"
render={(props) => <Teaching {...this.props} {...props} />}
></Route>
{/*glcc */}
<Route
path="/glcc"
render={(props) => <Glcc {...this.props} {...props} />}
></Route>
{/* 组织 */} {/* 组织 */}
<Route path={"/organize"} <Route path={"/organize"}
@ -349,6 +407,14 @@ class App extends Component {
} }
}> }>
</Route> </Route>
{/* <Route
path={"/"}
render={
(props) => {
return (<Projects {...this.props} {...props} {...this.state} />)
}
}>
</Route> */}
{/* 判断为用户/组织,并进入对应页面 */} {/* 判断为用户/组织,并进入对应页面 */}
{ {
@ -366,21 +432,8 @@ class App extends Component {
} }
}> }>
</Route> : pathType === '404' ? <Route component={Shixunnopage} />: </Route> : pathType === '404' ? <Route component={Shixunnopage} />:
<Route exact path="/" ""
render={
(props) => (
personal && personal.length > 0 ?
<InfosIndex {...this.props} {...props} />
:
<ProjectIndex {...this.props} {...props} />
)
} }
/>
// <Route path="/" component={Loading} />
// <Route path="/" component={Shixunnopage} />
}
{/* 个人主页 */} {/* 个人主页 */}
<Route path="/:username" <Route path="/:username"
@ -393,7 +446,6 @@ class App extends Component {
<Route component={Shixunnopage} /> <Route component={Shixunnopage} />
</Switch> </Switch>
{/* </Router> */}
</MuiThemeProvider> </MuiThemeProvider>
</ConfigProvider> </ConfigProvider>
</Provider> </Provider>
@ -513,3 +565,4 @@ moment.defineLocale('zh-cn', {
} }
}); });
export default SnackbarHOC()(App); export default SnackbarHOC()(App);

View File

@ -11,9 +11,9 @@ broadcastChannelOnmessage('refreshPage', () => {
}) })
function locationurl(list) { function locationurl(list) {
if (window.location.port !== "3007") { // if (window.location.port !== "3007") {
window.location.href = list window.location.href = list
} // }
} }
// TODO 开发期多个身份切换 // TODO 开发期多个身份切换
let debugType = "" let debugType = ""
@ -32,11 +32,11 @@ export function initAxiosInterceptors(props) {
// 判断网络是否连接 // 判断网络是否连接
initOnlineOfflineListener(); initOnlineOfflineListener();
var proxy = "https://testforgeplus.trustie.net"; var proxy = "https://code.educoder.net";
//响应前的设置 //响应前的设置
axios.interceptors.request.use( axios.interceptors.request.use(
config => { config => {
if(config.url.indexOf("http") !== -1) { if(config.url.substr(0, 4) === "http") {
return config return config
} }
requestProxy(config); requestProxy(config);
@ -47,8 +47,12 @@ export function initAxiosInterceptors(props) {
config.url = `${proxy}${url}`; config.url = `${proxy}${url}`;
if (config.url.indexOf('?') === -1) { if (config.url.indexOf('?') === -1) {
config.url = `${config.url}?debug=${debugType}`; config.url = `${config.url}?debug=${debugType}`;
// config.url = `${config.url}`;
} else { } else {
config.url = `${config.url}&debug=${debugType}`; config.url = `${config.url}&debug=${debugType}`;
// config.url = `${config.url}`;
} }
} else { } else {
config.url = url; config.url = url;
@ -68,6 +72,8 @@ export function initAxiosInterceptors(props) {
if (response.data.status === -1) { if (response.data.status === -1) {
if (window.location.pathname.startsWith('/tasks/')) { if (window.location.pathname.startsWith('/tasks/')) {
props.showSnackbar(response.data.message || '服务器异常,请联系管理员。') props.showSnackbar(response.data.message || '服务器异常,请联系管理员。')
} else if(window.location.pathname.startsWith('/login') || window.location.pathname.startsWith('/register') || window.location.pathname.startsWith('/resetPassword')) {
return response;
} else { } else {
notification.open({ notification.open({
message: "提示", message: "提示",
@ -86,7 +92,10 @@ export function initAxiosInterceptors(props) {
if (response.data.status === 404) { if (response.data.status === 404) {
let responseURL = response.request ? response.request.responseURL:''; let responseURL = response.request ? response.request.responseURL:'';
if (responseURL.indexOf('/api/users/') === -1 && responseURL.indexOf('/api/organizations/') === -1 ) { if(responseURL.indexOf("/hovercard.json") > -1){
return;
}
if ((responseURL.indexOf('/api/users/') === -1) || responseURL.indexOf('/api/organizations/') === -1 || responseURL.indexOf('/api/owners/') === -1) {
locationurl('/nopage'); locationurl('/nopage');
} }
} }

View File

@ -5,19 +5,38 @@ const { Search } = Input;
const $ = window.$; const $ = window.$;
const isDev = window.location.port == 3007; const isDev = window.location.port == 3007;
const isdev2= window.location.hostname ==='www.educoder.net' const isdev2= window.location.hostname ==='www.educoder.net';
export const TEST_HOST = "https://testforgeplus.trustie.net/" export const TEST_HOST = window.location.hostname ==="testforgeplus.educoder.net";
export function getImageUrl(path) { export function getImageUrl(path) {
// https://www.educoder.net const local = 'https://testforgeplus.educoder.net';
// https://testbdweb.trustie.net const normal = TEST_HOST ? "https://new-testali-cdn.educoder.net/images" : 'https://ali-cdn.educoder.net/images';
// const local = 'http://localhost:3000' const normalend = TEST_HOST ? 'https://new-testali-cdn.educoder.net' :'https://ali-cdn.educoder.net';
const local = 'https://testforgeplus.trustie.net';
if (isDev) { if (isDev) {
return `${local}/${path}` return `${local}/${path}`;
}
if(path.substr(0, 7) !== "/system"){
if(path.substr(0, 7) !== "/images"){
return `${normal}${path}`;
}else{
return `${normalend}${path}`;
}
} }
return `${path}`; return `${path}`;
} }
export function openNewWindow(url) {
let link = document.createElement('a')
link.target = "_blank"
document.body.appendChild(link)
link.href = url
let evt = document.createEvent("MouseEvents")
evt.initEvent("click", false, false)
link.dispatchEvent(evt)
document.body.removeChild(link);
}
export function numFormat(num, digits){ export function numFormat(num, digits){
let d = digits || 1; let d = digits || 1;
var si = [ var si = [
@ -36,9 +55,6 @@ export function numFormat(num, digits){
} }
export function getImage(path) { export function getImage(path) {
// https://www.educoder.net
// https://testbdweb.trustie.net
// const local = 'http://localhost:3000'
const local = 'https://testforgeplus.trustie.net/'; const local = 'https://testforgeplus.trustie.net/';
if(path.indexOf("http://")===-1){ if(path.indexOf("http://")===-1){
if (isDev) { if (isDev) {
@ -51,9 +67,6 @@ export function getImage(path) {
} }
export function getcdnImageUrl(path) { export function getcdnImageUrl(path) {
// https://www.educoder.net
// https://testbdweb.trustie.net
// const local = 'http://localhost:3000'
const testlocal = 'https://testali-cdn.educoder.net' const testlocal = 'https://testali-cdn.educoder.net'
const local='https://ali-cdn.educoder.net' const local='https://ali-cdn.educoder.net'
let firstStr=path.substr(0,1); let firstStr=path.substr(0,1);
@ -66,11 +79,9 @@ export function getcdnImageUrl(path) {
return `/${path}` return `/${path}`
} }
} }
// return `${local}/${path}`;
} }
export function setcndImagesUrl(path){ export function setcndImagesUrl(path){
const testlocal = 'https://testali-cdn.educoder.net'
const local='https://ali-cdn.educoder.net' const local='https://ali-cdn.educoder.net'
let firstStr=path.substr(0,1); let firstStr=path.substr(0,1);
if(firstStr=="/"){ if(firstStr=="/"){
@ -78,13 +89,11 @@ export function setcndImagesUrl(path){
return `${path}` return `${path}`
} }
return `${local}${path}`; return `${local}${path}`;
//return isDev?`${testlocal}${path}`:`${local}${path}`;
}else{ }else{
if (!isdev2) { if (!isdev2) {
return `/${path}` return `/${path}`
} }
return `${local}/${path}`; return `${local}/${path}`;
// return isDev?`${testlocal}/${path}`:`${local}/${path}`;
} }
} }
@ -118,28 +127,13 @@ export function getUrl(path, goTest) {
} }
export function getUrlmys(path, goTest) { export function getUrlmys(path, goTest) {
// https://www.educoder.net
// https://testbdweb.trustie.net
// 如果想所有url定位到测试版可以反注释掉下面这行
//goTest = true
// testbdweb.educoder.net testbdweb.trustie.net
// const local = goTest ? 'https://testeduplus2.educoder.net' : 'http://localhost:3000'
// const local = 'https://testeduplus2.educoder.net'
const local = 'https://test-jupyterweb.educoder.net' const local = 'https://test-jupyterweb.educoder.net'
if (isDev) { if (isDev) {
return `${local}${path?path:''}` return `${local}${path?path:''}`
} }
return `${path ? path: ''}`; return `${path ? path: ''}`;
} }
export function getStaticUrl() {
const local = TEST_HOST;
if (isDev) {
return local
}
// todo cdn
return ''
}
export function getUrl2(path, goTest) { export function getUrl2(path, goTest) {
const local = 'http://localhost:3000' const local = 'http://localhost:3000'
if (isDev) { if (isDev) {
@ -149,37 +143,15 @@ export function getUrl2(path, goTest) {
} }
const newopens ="79e33abd4b6588941ab7622aed1e67e8"; const newopens ="79e33abd4b6588941ab7622aed1e67e8";
let newtimestamp; let newtimestamp;
let checkSubmitFlgs = false;
function railsgettimess(proxy) {
if(checkSubmitFlgs===false){
$.ajax({url:proxy,
async:false,success:function(data){
if(data.status===0){
newtimestamp=data.message;
checkSubmitFlgs = true;
}
}})
window.setTimeout(function () {
checkSubmitFlgs=false;
}, 2500);
}
}
export function Railsgettimes() {
// railsgettimess(`${getUrl()}/api/main/first_stamp.json`);
// railsgettimess(`https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`);
}
export function getmyUrl(geturl) { export function getmyUrl(geturl) {
return `${getUrl()}${geturl}`; return `${getUrl()}${geturl}`;
} }
export function getUploadActionUrl(path, goTest) { export function getUploadActionUrl(path, goTest) {
return `${getUrl()}/api/attachments.json${isDev ?`${isDev ?`?debug=${window._debugType || 'admin'}` : ""}` : ""}`; return `${getUrl()}/api/attachments.json`;
} }
export function getUploadLogoActionUrl() { export function getUploadLogoActionUrl() {
@ -250,3 +222,36 @@ export function publicSearchs(Placeholder,onSearch,onInputs,onChanges,loadings)
allowClear={true} allowClear={true}
></Search>) ></Search>)
} }
export function turnbar(str){
let s = str;
if(s && s.length>0){
if(s.indexOf("%")>-1){
s = s.replaceAll('%','_25');
}
if(s.indexOf("#")>-1){
s = s.replaceAll('#','%23');
}
if(s.indexOf("/")>-1){
s = s.replaceAll('/','%2F');
}
}
return s;
}
export function returnbar(str){
let s = str;
if(s && s.length>0){
if(str.indexOf("_25")>-1){
s = s.replaceAll('_25','%');
}
if(s.indexOf("%23")>-1){
s = s.replaceAll('%23','#');
}
if(s.indexOf("%2F")>-1){
s = s.replaceAll('%2F','/');
}
}
return s;
}

View File

@ -6,7 +6,8 @@ export {
getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat, getUploadLogoActionUrl as getUploadLogoActionUrl,numFormat as numFormat,
getImageUrl as getImageUrl,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl getImageUrl as getImageUrl,getImage as getImage, getmyUrl as getmyUrl, getRandomNumber as getRandomNumber, getUrl as getUrl, publicSearchs as publicSearchs, getRandomcode as getRandomcode, getUrlmys as getUrlmys, getUrl2 as getUrl2, setImagesUrl as setImagesUrl
, getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth , getUploadActionUrl as getUploadActionUrl, getUploadActionUrltwo as getUploadActionUrltwo, getUploadActionUrlthree as getUploadActionUrlthree, getUploadActionUrlOfAuth as getUploadActionUrlOfAuth
, getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl , getTaskUrlById as getTaskUrlById, TEST_HOST, htmlEncode as htmlEncode, getupload_git_file as getupload_git_file, getcdnImageUrl as getcdnImageUrl,
turnbar,returnbar, openNewWindow as openNewWindow
} from './UrlTool'; } from './UrlTool';
export { setmiyah as setmiyah } from './Component'; export { setmiyah as setmiyah } from './Component';

View File

@ -30,7 +30,7 @@ export default ({
cleanToc() cleanToc()
} }
rs = rs.replace(/(__special_katext_id_\d+__)/g, (_match, capture) => { rs = rs.replace(/(__special_katext_id_\d+__)/g, (_match, capture) => {
const { type, expression } = math_expressions[capture] const { type, expression } = math_expressions[capture];
return renderToString(_unescape(expression) || '', { displayMode: type === 'block', throwOnError: false, output: 'html' }) return renderToString(_unescape(expression) || '', { displayMode: type === 'block', throwOnError: false, output: 'html' })
}) })
rs = rs.replace(/▁/g, "▁▁▁") rs = rs.replace(/▁/g, "▁▁▁")

View File

@ -0,0 +1,280 @@
import React , { useEffect , useState } from 'react';
import { TPMIndexHOC} from '../../modules/tpm/TPMIndexHOC';
import { Timeline, Carousel } from 'antd';
import { getImageUrl } from 'educoder';
import CountUp from 'react-countup';
import axios from 'axios';
import './AboutUs.scss';
import subititle from './image/subtitle.png';
import achievements from './image/achievements.png';
import earth from './image/earth.png';
import computer from './image/computer.png';
import position from './image/position.png';
import quan1 from './image/quan1.png';
import quan2 from './image/quan2.png';
import fun1 from './image/fun1.png';
import fun2 from './image/fun2.png';
import fun3 from './image/fun3.png';
import fun4 from './image/fun4.png';
import fun5 from './image/fun5.png';
function AboutUs(){
const countUpProps = {
redraw: true,
start: 0,
duration: 2,
suffix: "+"
};
const [selectTitle, setSelectTitle] = useState(1);
//
const [flush, setFlush] = useState(false);
//
const [units, setUnits] = useState([]);
useEffect(()=>{
//
window.addEventListener('scroll', scrollListener);
//topics.json
axios.get(`/topics.json`, { params: { topic_type: "cooperator", limit: 20, group_size: 5}}).then(response=>{
response && setUnits(response.data.topics);
});
return ()=>window.removeEventListener('scroll', scrollListener);
},[])
function scrollListener(e){
const top = e.srcElement.scrollingElement.scrollTop;
//
top < 555 && setSelectTitle(1);
if (top > 2800 && top< 4000){
setFlush(true);
}else{
setFlush(false);
}
}
return(
<div className="aboutUs_body">
<div className="aboutUs_head df">
<p className="head_title">GitLink 确实开源</p>
<p className="head_cont font-20 mt36">新一代开源创新服务平台让您的创意在这里释放</p>
</div>
<div className="aboutUs_title df">
<a className={selectTitle === 1 ? "active" : ""} href="#value1" onClick={() => setSelectTitle(1)}>关于我们</a>
<a className={selectTitle === 2 ? "active" : ""} href="#value2" onClick={() => setSelectTitle(2)}>平台统计</a>
<a className={selectTitle === 3 ? "active" : ""} href="#value3" onClick={() => setSelectTitle(3)}>加入我们</a>
<a className={selectTitle === 4 ? "active" : ""} href="#value4" onClick={() => setSelectTitle(4)}>合作单位</a>
</div>
<div className="aboutUs">
<a id="value1" className="mao"></a>
{/* 关于我们 */}
<div className="about_us">
<div className="au_bg">
<div className="au_title">关于我们</div>
{/* 简介 */}
<div className="au_cont subt df">
<div className="cont1_introduction">
<p className="subtitle">简介</p>
<div className="font-16">GitLink确实开源是CCF官方指定的开源创新服务平台旨在以为开源创新服务为使命成为开源创新的汇聚地为愿景秉承创新开放协作共享的价值观致力于为大规模开源开放协同创新助力赋能打造创新成果孵化和新工科人才培养的开源创新生态</div>
</div>
<img src={subititle} className="subtitleImg"></img>
</div>
</div>
{/* 确实开源 一脉传承 */}
<div className="au_cont inherit pl30">
<p className="subtitle">确实开源&nbsp;&nbsp;一脉传承</p>
<div>本世纪以来随着软件创新需求和应用规模的飞速增长软件开发队伍开发资源可信评估呈现出规模化开放化持续化的新特点软件开发活动面临协同难复用难评估难的制约经典的工程化软件开发方法面临严峻挑战严重影响了软件开发效率和质量的提升在此背景下国防科技大学联合国内多所知名高校科研机构和软件企业围绕开源创新开展了持续性探索构建形成了以Trustie确实为代表的一系列开源创新服务基础设施自2006年以来Trustie经过三个阶段的演化发展于2021年迎来全面升级在中国计算机学会CCF的带领指导下共同推进产学研用深度融合共筑新一代开源创新服务平台GitLink</div>
<div className="inherit_items">
<img src={quan1} className="quan1Img"/>
<img src={quan2} className="quan2Img"/>
<Timeline>
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x font-20"></i>}>
<div className="timeline_cont">
<p>Trustie 1.0阶段2006-2014</p>
<div>国防科技大学北京大学北京航空航天大学中国科学院软件研究所等单位合作开展了基于网络的软件开发群体化方法与技术研究揭示了以大众化协同开发开放式资源共享持续性可信评估为核心的互联网大规模协同机理与软件开发工程化方法相结合系统地提出了基于网络的软件开发群体化方法并于2008年发布了可信的国家软件资源共享与协同生产环境简称Trustie v1.0中文简称确实重点解决大规模软件协同开发可信评估运行监控和持续演化等问题</div>
</div>
</Timeline.Item>
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x"></i>}>
<div className="timeline_cont">
<p>Trustie 2.0阶段2014-2020</p>
<div>在科技部项目的持续资助下国防科技大学联合国内多所知名高校科研机构和软件企业致力于系统研究新型软件开发方法为开源生态建设提供方法指导和实践指南支撑科教领域原始创新成果的开源孵化和开源人才培养并于2014年发布了面向软件创新和教育的开源社区Trustie v2.0重点探索协作开发社区知识分享社区应用服务社区等大外围软件涉众的联接以及基于开源大数据的智能化开发等技术</div>
</div>
</Timeline.Item>
<Timeline.Item dot={<i className="iconfont icon-a-yuanquan2x"></i>}>
<div className="timeline_cont">
<p>Trustie 3.0阶段 (2020年至今)</p>
<div>Trustie在已有的技术积累基础上进一步联合国内高等院校科研机构产业企业和开源组织等在中国计算机学会CCF的带领指导下共同推进产学研用深度融合致力于联接互联网海量群智资源探索开源创新成果开放与共享开源生态协作与共建的新模式和新方法升级形成了新一代开源创新服务平台GitLink力图破解软件开发群智范式背后的本质机理建立面向大外围开放创新的群智激发与汇聚关键机制实现面向大规模软件涉众的稳态群智激发与汇聚</div>
</div>
</Timeline.Item>
</Timeline>
</div>
</div>
{/* 特色功能 确实给力 */}
<div className="feature_function_bg">
<div className="au_cont">
<p className="au_title">特色功能&nbsp;&nbsp;确实给力</p>
<table><tr>
<td>
<div className="feat_func_cont">
<div className="feat_fun_img"><img src={fun1} /></div>
<div>
<p>分布式协作开发</p>
<div>支持在线文件编辑&nbsp;&nbsp;<br />分支管理贡献统计<br />仓库复刻合并请求&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
</td>
<td>
<div className="feat_func_cont">
<div className="feat_fun_img"><img src={fun2} /></div>
<div>
<p>一站式过程管理</p>
<div>支持疑修里程碑&nbsp;&nbsp;&nbsp;<br />通知提醒标签归档Wiki文档组织管理&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
</td>
<td>
<div className="feat_func_cont">
<div className="feat_fun_img"><img src={fun3} /></div>
<div>
<p>高效流水线运维</p>
<div>提供轻量级工作流引擎<br />并支持自定义配置&nbsp;&nbsp;&nbsp;<br/>静态扫描制品构建&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
</td>
<td>
<div className="feat_func_cont">
<div className="feat_fun_img"><img src={fun4} /></div>
<div>
<p>多层次代码分析</p>
<div>支持代码溯源分析&nbsp;&nbsp;&nbsp;<br />许可证风险分析开源漏洞检测和加固建议&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
</td>
<td>
<div className="feat_func_cont">
<div className="feat_fun_img"><img src={fun5} /></div>
<div>
<p>多维度用户画像</p>
<div>支持开发活动统计&nbsp;&nbsp;&nbsp;<br />贡献日历能力建模<br />角色与专业定位分析&nbsp;&nbsp;&nbsp;</div>
</div>
</div>
</td>
</tr></table>
</div>
</div>
{/* 成果作用,确实有效 */}
<div className="au_cont df pl30">
<img src={achievements} className="achievementsImg"></img>
<div className="cont1_achievements">
<p className="subtitle ml0">成果作用&nbsp;&nbsp;确实有效</p>
<div>GitLink确实开源为我国创新型软件产业发展提供了关键技术支撑和实践指南为各类开源创新活动以及我国军地开源社区建设提供了有效支撑为推动开源创新发展和创新人才培养发挥了重要作用<br/>通过10多年的发展GitLink平台显著提升了大型软件企业软件生产能力支持了我国航空航天国防等多个关键领域的可信软件生产为包括新一代人工智能启智社区ARM绿色计算社区科技部云计算与大数据木兰社区科技委可控开源创造行动红山社区等的建设提供关键技术支撑为我国关键领域开源社区生态建设发挥了重要作用</div>
</div>
</div>
</div>
{/* 平台统计 */}
<div className="about_us statistics">
<a id="value2" className="mao"></a>
<div className="au_title">平台统计</div>
<p>联接海量群智资源汇聚优秀开源组织孵化优质创新成果</p>
<img src={earth} className="earthImg"/>
<div className="statistics_cont df">
<div>
<CountUp {...countUpProps} start={0} end={50000} />
<p>开发者</p>
</div>
<div>
<CountUp {...countUpProps} end={1000} />
<p>组织</p>
</div>
<div>
<CountUp {...countUpProps} end={1400000} />
<p>仓库</p>
</div>
</div>
</div>
{/* 加入我们 */}
<div className="join_us_bg">
<a id="value3" className="mao"></a>
<div className="au_cont">
<div className="au_title">加入我们</div>
<p className="subtitle">探索你的未来</p>
<p>GitLink团队在寻找新的小伙伴期待着您的加入让我们一起为开源创新贡献力量</p>
<img src={computer} className="joinUsImg"/>
{/* 轮播图 */}
<Carousel autoplay easing="none">
<div className="df">
<div className="position">
<p className="df"><img src={position} /><span className="ml10">前端开发工程师</span></p>
<div>
1全日制本科及以上学历5年以上Web前端开发经验熟练使用GulpWebpack等构建工具<br />
2熟练掌握VUE或React编程有前端模块化组件化自动化开发经验者优先<br />
3精通jQueryAjaxJson等技术对VUENodeJs等技术有所涉及<br />
4熟悉前端开发技术(HTML5JSJSONXHTMLCSS3ES6)了解各项技术的相关标准并严格按照标准进行开发<br />
</div>
</div>
<div className="position right">
<p className="df"><img src={position} /><span className="ml10">后端开发工程师</span></p>
<div>
1全日制本科及以上学历计算机软件工程相关专业者优先<br />
23年以上Java开发相关经验扎实的Java编程基础参与过1个以上大/中型高并发高性能系统架构设计开发和调优<br />
3熟练掌握SpringSpringBootSpring MVCMyBatis等开源框架掌握MVC框架模式及BS架构<br />
4精通SQL熟练使用MySQLOracle等数据库并具有一定的SQL优化能力熟悉RedisMongoDB等常用NoSQL解决方案了解各自的优缺点以及使用场景者优先<br />
</div>
</div>
</div>
<div className="df">
<div className="position">
<p className="df"><img src={position} /><span className="ml10">软件测试工程师</span></p>
<div>
1熟悉主流开发技术框架具备软件工程的基本知识<br />
2熟练掌握各种测试理论和测试技术精通测试过程设计和用例设计方法<br />
3熟悉性能测试自动化测试安全测试其中一种或多种测试工具LoadRunnerJmeterSeleniumQTPRobotFirebugAppScanPyCharm等熟练运用工具从事过相关测试工作<br />
4熟悉掌握一种编程语言Java/Python/C++<br />
5熟悉Oracle/MySQL数据库并能熟练编写SQL语句熟练常用Linux命令<br />
6有整体质量意识测试管理经验<br />
</div>
</div>
<div className="position right">
<p className="df"><img src={position} /><span className="ml10">产品经理</span></p>
<div>
1计算机或相关专业本科以上学历3年以上工作经验<br />
2熟悉开源软件项目的管理流程了解软件需求的调研方法具备需求分析能力<br />
3能以专业的方式向客户提供技术咨询良好的方案设计能力和文字功底<br />
4具备良好的交流沟通和表达能力良好的方案演示和介绍技巧<br />
5了解互联网产品的基本思路及基础方法论能够基于数据提出产品优化策略<br />
6承受较强的工作压力强烈的团队合作意识与工作责任心<br />
7有良好人际交往能力工作积极主动自信心强有较强的学习能力<br />
</div>
</div>
</div>
</Carousel>
<p className="delivery">简历投递邮箱zengyt#csxjy.com.cn 曾先生 (@符号替换#)</p>
</div>
</div>
{/* 合作单位 */}
<div className="unit">
<a id="value4" className="mao"></a>
<div className="au_title">合作单位</div>
<table>
{units && units.map(group =>{
return (
<tr>
{group.map(item =>{
return(
<td><a href={item.url} target="_blank"><img src={getImageUrl(item.image)}></img></a></td>
)
})}
</tr>
)
})}
</table>
</div>
</div>
</div>
)
}
export default TPMIndexHOC(AboutUs);

View File

@ -0,0 +1,338 @@
.aboutUs_body{
font-size: 16px;
color: #182332;
font-family: PingFangSC-Regular, PingFang SC;
& table{
text-align: center;
margin: 0 auto;
}
& .df{
display: flex;
justify-content: space-around;
align-items: center;
}
& .join_us_bg, .feature_function_bg, .feat_fun_img, .aboutUs_head{
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
& .mao{
position: relative;
top: -70px;
}
}
.aboutUs_head.df{
flex-direction: column;
justify-content: center;
height: 500px;
line-height: 500px;
background-image: url('./image/banner.png');
& p{
text-align: center;
}
& .head_title{
line-height: 50px;
font-size: 48px;
font-weight: 600;
background-image: -webkit-linear-gradient(bottom,#4CDBF5,#5AACFF);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
& .head_cont{
line-height: 39px;
color: #FFFFFF;
opacity: 0.9;
}
}
.aboutUs_title{
width: 800px;
height: 62px;
margin: 0 auto;
&>table{
width: 800px;
font-weight: 400;
}
& a.active{
color: #466AFF;
height: 62px;
line-height: 62px;
border-bottom: 2px solid;
}
}
.aboutUs{
& .au_title{
font-size: 38px;
font-weight: 500;
color: #1E1E1E;
text-align: center;
padding-top: 50px;
// line-height: 53px;
}
& .subtitle{
font-size: 20px;
font-weight: bold;
color: #000000;
margin-bottom: 23px !important;
}
}
.about_us{
// 关于我们
& .au_cont.df{
justify-content: space-between;
}
& .au_bg{ background: linear-gradient(180deg, #F3F9FF 0%, rgba(255, 255, 255, 0) 100%);}
& .cont1_introduction{
width: 472px;
&>div{
line-height: 34px;
}
}
& .cont1_achievements{
width: 581px;
& .subtitle.ml0{margin-left: 0;}
&>div{
font-size: 15px;
line-height: 36px;
}
}
& .subtitleImg{
width: 650px;
height: 330px;
}
& .achievementsImg{
width: 507px;
height: 384px;
}
//时间轴
& .inherit_items{
position: relative;
& .quan1Img{
width: 140px;
height: 167px;
position: absolute;
left: -290px;
top: 90px;
}
& .quan2Img{
width: 100px;
height: 120px;
position: absolute;
right: -170px;
bottom: 80px;
}
}
.inherit{
& .icon-a-yuanquan2x{
color: #466aff;
}
& .ant-timeline-item-tail{
border-left: 2px solid rgba(108, 134, 172, 0.42);
height: calc(100% - -30px);
}
& .ant-timeline-item:last-child .ant-timeline-item-tail{
display: block;
height: calc(100% - 18px);
}
& .ant-timeline-item-content{
margin: 0 0 -15px 18px;
}
}
.timeline_cont{
margin-left: 35px;
&>p{
font-size: 20px;
font-weight: 500;
color: #466AFF;
margin: 45px 0 30px !important;
}
&>div{
width: 980px;
padding: 20px 35px;
background: #F5F7FA;
font-size: 15px;
font-weight: 400;
color: #182332;
line-height: 33px;
&:after,&:before{
content: "";
position: absolute;
left: 21px;
top: 100px;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-right: 14px solid #F5F7FA;
}
}
}
//特色功能 确实给力
& .feature_function_bg{
position: relative;
height: 630px;
background-image: url(./image/funBg.png);
& .au_cont p.au_title{
font-size: 30px;
padding: 50px 0 70px;
color: #FFFFFF;
opacity: 0.9;
}
& table{
position: relative;
background: none;
width: 1200px;}
& .funBg2 {
width: 1600px;
left: 50%;
margin-left: -800px;
position: absolute;
bottom: -15px;
}
}
& .feat_func_cont{
width: 200px;
& .feat_fun_img{
height: 205px;
line-height: 205px;
background-image: url('./image/funBg3.png');
&:hover{background-image: url('./image/funBg4.png');}
}
& img{ width: 175px;}
& p{
font-size: 18px;
font-weight: 500;
color: #FFFFFF;
line-height: 28px;
background-image: -webkit-linear-gradient(bottom,#4FFDFF,#0183FF);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
& div>div{
margin: 10px auto;
width: 142px;
font-size: 14px;
line-height: 28px;
color: #FFFFFF;
opacity: 0.76;
}
}
// 平台统计
&.statistics{
text-align: center;
background: linear-gradient(180deg, #ECF3FF 0%, #FFFFFF 100%);
height: 640px;
overflow: hidden;
position: relative;
& .statistics_cont{
width: 1014px;
height: 203px;
background: #FFFFFF;
opacity: 0.83;
position: absolute;
top: 230px;
left: 50%;
margin-left: -500px;
& span{
font-size: 48px;
font-weight: bold;
color: #1338D1;
}
& p{
width: 111px;
height: 38px;
line-height: 38px;
border: 1px solid #182332;
margin: 0 auto;
font-size: 22px;
color: #1E1E1E;
}
}
& .earthImg{
width: 1500px;
margin-top: -120px;
animation: moving 60s linear infinite;
}
@keyframes moving {
0% { transform: rotate(0deg);}
50% { transform: rotate(180deg);}
100% { transform: rotate(360deg);}
}
}
}
// 加入我们
.join_us_bg{
height: 710px;
margin-top: 40px;
background-image: url(./image/joinUs.png);
& .au_cont{position: relative;}
& .joinUsImg{
width: 260px;
height: 265px;
position: absolute;
top: 27px;
right: 10px;
}
& .df{
display: flex !important;
margin-top: 30px;
}
& .position{
width: 540px;
&.right{ margin-right: -30px;}
& p{
justify-content: flex-start;
height: 60px;
background: #253DA0;
line-height: 60px;
padding-left: 20px;
& img{width: 30px;}
& span{
font-weight: 500;
color: #FFFFFF;
line-height: 22px;
}
}
& div{
min-height: 306px;
font-size: 14px;
line-height: 34px;
padding: 20px;
background: #FFFFFF;}
}
& .ant-carousel .slick-dots-bottom{bottom: -30px;}
& .ant-carousel .slick-dots li button{
width: 12px;
height: 12px;
border-radius: 10px;
background: #466AFF;
}
& .delivery{
height: 60px;
line-height: 60px;
margin-left: 35px;
}
}
//合作单位
.unit{
margin-bottom: 60px;
& table{
width: 1200px;
height: 550px;
margin-top: 15px;
border-collapse: separate;
border-spacing: 10px 10px;
& td{
width: 224px;
height: 122px;
box-shadow: 0px 1px 8px 1px rgba(0, 0, 0, 0.06);
border-radius: 6px;
border: 2px solid #FFFFFF;
&:hover{ border: 1px solid #466AFF;}
}
}
}
.au_cont{
width: 1200px;
margin: 50px auto;
&.pl30 .subtitle{ margin-left: -30px;}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

View File

@ -124,7 +124,9 @@ class Activity extends Component{
</Menu> </Menu>
) )
render(){ render(){
const { time , data , page , project_trends , isSpin , pr_count , new_pr_count , close_issues_count , open_issues_count , pr_all_count ,issues_count } = this.state; const { time , data , page , project_trends , isSpin ,
pr_count , new_pr_count , close_issues_count , open_issues_count , pr_all_count ,issues_count,
type,status } = this.state;
let name = time ? ARRAY.filter(item=>item.id === parseInt(time)) :[{name:"全部"}]; let name = time ? ARRAY.filter(item=>item.id === parseInt(time)) :[{name:"全部"}];
const first_per = pr_all_count > 0 ? `${parseFloat(pr_count/pr_all_count).toFixed(2)*100}%` :"50%"; const first_per = pr_all_count > 0 ? `${parseFloat(pr_count/pr_all_count).toFixed(2)*100}%` :"50%";
@ -150,25 +152,25 @@ class Activity extends Component{
<p className="percent_red" style={{width:`${third_per}`}}></p> <p className="percent_red" style={{width:`${third_per}`}}></p>
<p className="percent_green" style={{width:`${fourth_per}`}}></p> <p className="percent_green" style={{width:`${fourth_per}`}}></p>
</div> </div>
<span>{data && data.issues_count}</span> <span>{data && data.issues_count}</span>
</div> </div>
</div> </div>
<ul className="percentBox"> <ul className="percentBox">
<li> <li>
<span className="purple">{data && data.pr_count}</span> <span className="purple">{data && data.pr_count}</span>
<span className="change" onClick={()=>this.changeTrends("PullRequest","delay")}>已处理的合并请求</span> <span className={type==="PullRequest" && status==="delay" ?`change active`:"change"} onClick={()=>this.changeTrends("PullRequest","delay")}>已处理的合并请求</span>
</li> </li>
<li> <li>
<span className="green">{data && data.new_pr_count}</span> <span className="green">{data && data.new_pr_count}</span>
<span className="change" onClick={()=>this.changeTrends("PullRequest","not_delay")}>未处理的合并请求</span> <span className={type==="PullRequest"&& status==="not_delay" ?`change active`:"change"} onClick={()=>this.changeTrends("PullRequest","not_delay")}>未处理的合并请求</span>
</li> </li>
<li> <li>
<span className="red">{data && data.close_issues_count}</span> <span className="red">{data && data.close_issues_count}</span>
<span className="change" onClick={()=>this.changeTrends("Issue","delay")}>已关闭的</span> <span className={type==="Issue"&& status==="delay" ?`change active`:"change"} onClick={()=>this.changeTrends("Issue","delay")}>已关闭的</span>
</li> </li>
<li> <li>
<span className="green">{data && data.open_issues_count}</span> <span className="green">{data && data.open_issues_count}</span>
<span className="change" onClick={()=>this.changeTrends("Issue","not_delay")}>未处理的</span> <span className={type==="Issue"&& status==="not_delay" ?`change active`:"change"} onClick={()=>this.changeTrends("Issue","not_delay")}>未处理的</span>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -14,20 +14,20 @@ class ActivityItem extends Component {
{/* 如果是版本发布 */} {/* 如果是版本发布 */}
{item.trend_type === "VersionRelease" ? {item.trend_type === "VersionRelease" ?
<p className="itemLine"> <p className="itemLine">
<Link to={`/${owner}/${projectsId}/releases`} className="color-blue font-16">{item.name}</Link> <Link to={`/${owner}/${projectsId}/releases`} className="font-16">{item.name}</Link>
<span className="activity_type">{item.trend_type}</span> <span className="activity_type">{item.trend_type}</span>
</p > </p >
: :
// 如果是任务 // 如果是任务
item.trend_type === "Issue" ? item.trend_type === "Issue" ?
<p className="itemLine"> <p className="itemLine">
<Link to={`/${owner}/${projectsId}/issues/${item.trend_id}`} className="color-blue font-16">{item.name}</Link> <Link to={`/${owner}/${projectsId}/issues/${item.trend_id}`} className="font-16">{item.name}</Link>
<span className="activity_type">{item.trend_type}</span> <span className="activity_type">{item.trend_type}</span>
</p > </p >
: :
// 如果是合并请求 // 如果是合并请求
<p className="itemLine"> <p className="itemLine">
<Link to={`/${owner}/${projectsId}/pulls/${item.trend_id}`} className="color-blue font-16">{item.name}</Link> <Link to={`/${owner}/${projectsId}/pulls/${item.trend_id}`} className="font-16">{item.name}</Link>
<span className="activity_type">{item.trend_type}</span> <span className="activity_type">{item.trend_type}</span>
</p > </p >
} }

View File

@ -107,6 +107,10 @@
color: black; color: black;
cursor: pointer; cursor: pointer;
} }
.change:hover{ .change.active{
color: #4183c4; color: #466AFF !important;
}
.change:hover{
color: #466AFF;
} }

View File

@ -7,10 +7,10 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
const [ key , setKey ] = useState("HTTP"); const [ key , setKey ] = useState("HTTP");
return ( return (
<div className="downMenu"> <div className="downMenu">
<div style={{borderBottom:"1px solid #eee"}}> <div>
<Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}> <Menu className="urlMenu" selectedKeys={[key]} mode={"horizontal"}>
<Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item> <Menu.Item key="HTTP" onClick={(e)=>{setKey(e.key)}}>HTTP</Menu.Item>
<Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item> {ssh_url && <Menu.Item key="SSH" onClick={(e)=>{setKey(e.key)}}>SSH</Menu.Item>}
</Menu> </Menu>
<div className="gitAddressClone"> <div className="gitAddressClone">
<input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} /> <input type="text" id="copy_rep_content" value={key==="HTTP" ? http_url:ssh_url} />
@ -18,8 +18,8 @@ function CloneAddress({http_url , ssh_url , zip_url , tar_url}) {
</div> </div>
</div> </div>
<Menu className="edu-txt-center"> <Menu className="edu-txt-center">
<Menu.Item><a href={zip_url}>下载 ZIP</a></Menu.Item> {zip_url && <Menu.Item style={{borderTop:"1px solid #eee"}}><a href={zip_url}>下载 ZIP</a></Menu.Item>}
<Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item> {tar_url && <Menu.Item><a href={tar_url}>下载 TAR.GZ</a></Menu.Item>}
</Menu> </Menu>
</div> </div>
) )

View File

@ -3,6 +3,7 @@ import { Dropdown} from 'antd';
import './branch.scss'; import './branch.scss';
import SelectOverlay from './SelectOverlay'; import SelectOverlay from './SelectOverlay';
import { findDOMNode } from 'react-dom'; import { findDOMNode } from 'react-dom';
import { turnbar } from 'educoder';
export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{ export default (({ projectsId , branch , owner , changeBranch , branchList , tagflag = true })=>{
const [ showValue , setShowValue ] = useState(branch); const [ showValue , setShowValue ] = useState(branch);
@ -35,7 +36,8 @@ export default (({ projectsId , branch , owner , changeBranch , branchList , tag
function ChangeB(params) { function ChangeB(params) {
setVisible(false); setVisible(false);
changeBranch(params); let en = turnbar(params);
changeBranch(en);
} }
const menu = ( const menu = (

View File

@ -66,9 +66,10 @@ function AddMember({getID,login,showNotification}){
}; };
function addCollaborator(){ function addCollaborator(){
if(source && source.length>0){ if(source && source.length>0&&searchKey){
getID && getID(id); getID && getID(id);
setSearchKey(undefined); setSearchKey(undefined);
setID(undefined)
}else{ }else{
showNotification("请选择存在的用户!"); showNotification("请选择存在的用户!");
} }

View File

@ -276,36 +276,36 @@ li.ant-menu-item{
.-task-sidebar { .-task-sidebar {
position: fixed; position: fixed;
width: 40px; width: 40px;
right: 0; right: 30px;
bottom: 80px; bottom: 80px;
z-index: 10; z-index: 10;
} }
@media screen and (max-width: 1920px){ // @media screen and (max-width: 1920px){
.-task-sidebar{ // .-task-sidebar{
right:220px; // right:220px;
} // }
} // }
@media screen and (max-width: 1750px){ // @media screen and (max-width: 1750px){
.-task-sidebar{ // .-task-sidebar{
right:160px; // right:160px;
} // }
} // }
@media screen and (max-width: 1650px){ // @media screen and (max-width: 1650px){
.-task-sidebar{ // .-task-sidebar{
right:115px; // right:115px;
} // }
} // }
@media screen and (max-width: 1550px){ // @media screen and (max-width: 1550px){
.-task-sidebar{ // .-task-sidebar{
right:90px; // right:90px;
} // }
} // }
@media screen and (max-width: 1450px){ // @media screen and (max-width: 1450px){
.-task-sidebar{ // .-task-sidebar{
right:45px; // right:45px;
} // }
} // }
@media screen and (max-width: 1200px){ @media screen and (max-width: 1200px){
.-task-sidebar{ .-task-sidebar{
right:0px; right:0px;
@ -313,17 +313,17 @@ li.ant-menu-item{
} }
} }
.-task-sidebar>div { .-task-sidebar>div {
height: 40px; height: 48px;
line-height: 40px; line-height: 48px;
box-sizing: border-box; box-sizing: border-box;
width: 40px; width: 48px;
color: #999; color: #999;
font-size: 20px; font-size: 20px;
text-align: center; text-align: center;
margin-bottom: 20px; margin-bottom: 20px;
border-radius: 50%; border-radius: 50%;
background: #FFFFFF; background: #FFFFFF;
box-shadow: 0px 0px 10px 1px #F1F1F1; box-shadow: 0px 0px 12px 5px rgba(208, 208, 208, 0.2);
} }
.-task-sidebar>div i { .-task-sidebar>div i {
@ -334,36 +334,40 @@ li.ant-menu-item{
color: #fff !important; color: #fff !important;
} }
.-task-sidebar>div:hover{ .-task-sidebar>div:hover{
background: #1890FF; background: #466AFF;
box-shadow: 0px 0px 10px 2px #B6D0FC; box-shadow: 0px 0px 10px 2px #B6D0FC;
} }
.helpBox{ .helpBox{
width: 260px; width: 260px;
z-index: 103; z-index: 103;
&.shareContent{ &.shareContent{
width: 200px; width: 160px;
}
.ant-popover-title{
font-size: 16px;
} }
.ant-popover-inner-content{ .ant-popover-inner-content{
padding:0px; padding:0px;
} }
p.titlecontent{ p.titlecontent{
font-size: 18px; font-size: 16px;
color: #333; color: #333;
line-height: 20px; line-height: 20px;
padding:15px 20px; padding:15px 20px;
} }
.faqUl{ .faqUl{
padding:0px 20px 10px; padding:10px 15px;
max-height: 230px; max-height: 230px;
overflow-y: auto; overflow-y: auto;
font-size: 13px;
li{ li{
background: #F5F5F5; background: #F5F5F5;
border-radius: 20px; border-radius: 20px;
padding:0px 20px; padding:0px 15px;
color: #333; color: #333;
height: 34px; height: 30px;
line-height: 34px; line-height: 30px;
margin-bottom: 10px; margin-bottom: 3px !important;
a{ a{
display: block; display: block;
overflow: hidden; overflow: hidden;
@ -379,19 +383,18 @@ li.ant-menu-item{
} }
} }
.shareUl{ .shareUl{
padding:10px 0px;
display: flex; display: flex;
align-items: center; align-items: center;
.titlecontent{
margin-right: 20px;
}
li > i{ li > i{
font-size: 32px!important; font-size: 32px!important;
} }
} }
} }
// tooltip样式
.tooltipBox .ant-tooltip-inner{
padding: 8px 12px;
font-size: 15px;
}
.-task-desc { .-task-desc {
background: #494949; background: #494949;
@ -439,3 +442,21 @@ li.ant-menu-item{
border-left: 5px solid #494949; border-left: 5px solid #494949;
border-bottom: 6px solid transparent border-bottom: 6px solid transparent
} }
//头部输入框样式
.headSerach{
background: rgba(255, 255, 255, 0.1);
border-radius: 4px;
padding-left: 20px;
//修改antd输入框默认样式
.ant-input,.ant-input:focus{
border: none !important;
background-color: rgba(255, 255, 255, 0) !important;
}
&:hover{
padding: 2px 20px 2px 20px;
background: #FFF;
& i{
color: #333;
}
}
}

View File

@ -7,7 +7,7 @@ import './Component.scss';
import { getUser } from '../GetData/getData'; import { getUser } from '../GetData/getData';
import axios from 'axios'; import axios from 'axios';
function Contributors({contributors,owner,projectsId,currentLogin}){ function Contributors({owner,projectsId,currentLogin}){
const [ menuList ,setMenuList ]= useState([]); const [ menuList ,setMenuList ]= useState([]);
const [ list , setList ]= useState(undefined); const [ list , setList ]= useState(undefined);
const [ total , setTotal ]= useState(0); const [ total , setTotal ]= useState(0);
@ -16,11 +16,18 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
const [ isSpin , setIsSpin ] = useState(false); const [ isSpin , setIsSpin ] = useState(false);
useEffect(()=>{ useEffect(()=>{
if(contributors && contributors.total_count>0){ getData();
setTotal(contributors.total_count); },[])
setList(contributors.list);
function getData(){
const url = `/${owner}/${projectsId}/contributors.json`;
axios.get(url).then(result=>{
if(result){
setTotal(result.data.total_count);
setList(result.data.list);
}
}).catch(error=>{})
} }
},[contributors])
useEffect(()=>{ useEffect(()=>{
if(login){ if(login){
@ -35,11 +42,13 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
let a = menuList && menuList.filter(i=>i.login === login); let a = menuList && menuList.filter(i=>i.login === login);
if(a.length === 0){ if(a.length === 0){
let result = await getUser(login); let result = await getUser(login);
if(result){
let arr = menuList; let arr = menuList;
arr.push({...result}); arr.push({...result});
setMenuList(arr); setMenuList(arr);
setMenusFunc(result); setMenusFunc(result);
setIsSpin(false); setIsSpin(false);
}
}else{ }else{
setMenusFunc(a[0]); setMenusFunc(a[0]);
setIsSpin(false); setIsSpin(false);
@ -148,27 +157,26 @@ function Contributors({contributors,owner,projectsId,currentLogin}){
} }
return( return(
total > 0 ?
<div className="halfs"> <div className="halfs">
<Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA"> <Link to={`/${owner}/${projectsId}/contribute`} className="font-16 color-ooo hoverA">
<span>贡献者</span> <span>贡献者</span>
{ contributors && contributors.total_count > 0 && <span className="infoCount">{contributors.total_count}</span>} { total > 0 && <span className="infoCount">{total}</span>}
</Link> </Link>
<div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}> <div className="attrPerson" onMouseLeave={()=>setVisibleFunc(false)}>
{ {
total > 0 ? list && list.length>0 && list.map((item,key)=>{
list.map((item,key)=>{
return( return(
<Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top"> <Popover content={menu} visible={item.visible} overlayClassName="menuPanels" placement="top">
<Link key={key} to={`/${item.login}`}> <a key={key} href={item.login ? `/${item.login}` : `mailto:${item.email}`}>
<img src={getImageUrl(`/${item.image_url}`)} alt="" onMouseOver={()=>setVisibleFunc(true,item.login,key)}/> <img src={getImageUrl(`/${item.image_url}`)} alt="" onMouseOver={()=>setVisibleFunc(true,item.login,key)}/>
</Link> </a>
</Popover> </Popover>
) )
}) })
:""
} }
</div> </div>
</div> </div>:""
) )
} }
export default Contributors; export default Contributors;

View File

@ -25,7 +25,7 @@ function DeleteBox({
> >
<div className="desc"> <div className="desc">
<AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter> <AlignCenter className="descMain"><i className="iconfont icon-shanchu_tc_icon mr10"></i>{content}</AlignCenter>
<p>{subTitle}</p> <p className="task-hide-2" style={{WebkitLineClamp:5}}>删除后未来事件将不会推送至此Webhook地址<span title={subTitle}>{subTitle}</span></p>
</div> </div>
</Modals> </Modals>
) )

View File

@ -1,15 +1,10 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { Drawer , Tree , Spin } from 'antd'; import { Drawer , Tree , Spin } from 'antd';
import { turnbar} from 'educoder';
import './Component.scss'; import './Component.scss';
import axios from 'axios'; import axios from 'axios';
const { TreeNode , DirectoryTree } = Tree; const { TreeNode , DirectoryTree } = Tree;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , list}){ function DrawerPanel({visible,onClose,branch,owner,projectsId,history, name , list}){
const [ treeData , setTreeData ] = useState(undefined); const [ treeData , setTreeData ] = useState(undefined);
const [ isSpin , setIsSpin ] = useState(true); const [ isSpin , setIsSpin ] = useState(true);

View File

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

View File

@ -1,20 +1,42 @@
import React , {forwardRef, useEffect} from 'react'; import React , {forwardRef, useEffect} from 'react';
import { Modal , Form , Input , Button } from 'antd'; import { Modal , Form , Input , Button , message} from 'antd';
import './EAccount.scss'; import './EAccount.scss';
import axios from 'axios';
function EducoderAccount({form , visible , onOk , email}){ function EducoderAccount({form , visible , current_user , onCancel,isCancel,showNotification}){
const { getFieldDecorator, validateFields , setFieldsValue } = form; const { getFieldDecorator, validateFields , setFieldsValue } = form;
useEffect(()=>{ useEffect(()=>{
if(email){ if(current_user && current_user.email){
setFieldsValue({email}) setFieldsValue({email:current_user.email})
}
},[current_user])
function onOk(values){
let url = `/accounts/gitea_register.json`;
// const { email , is_sync_pwd} = current_user;
// if(email && !is_sync_pwd){
// url = `/users/change_password.json`;
// }
axios.post(url,{
login:current_user && current_user.login,
...values
}).then(result=>{
if(result && result.data && result.data.status === 0){
window.location.reload();
}
}).catch(error=>{})
} }
},[email])
function onSure(){ function onSure(){
validateFields((error,values)=>{ validateFields((error,values)=>{
if(!error){ if(!error){
let reg = /^[a-zA-Z0-9]+([.\-_\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
if (reg.test(values.email)) {
onOk(values); onOk(values);
}else{
showNotification && showNotification("请输入正确的邮箱账号!");
}
} }
}) })
} }
@ -27,7 +49,8 @@ function EducoderAccount({form , visible , onOk , email}){
visible={visible} visible={visible}
title="提示" title="提示"
width="500px" width="500px"
closable={false} maskClosable={isCancel}
onCancel={onCancel}
footer={ footer={
<Button type="primary" onClick={onSure}>确定</Button> <Button type="primary" onClick={onSure}>确定</Button>
} }
@ -35,21 +58,28 @@ function EducoderAccount({form , visible , onOk , email}){
> >
<div> <div>
<p className="mb15 edu-txt-center" style={{maxWidth:"350px",margin:"0px auto"}}> <p className="mb15 edu-txt-center" style={{maxWidth:"350px",margin:"0px auto"}}>
为确保您能正常使用平台功能请确认以下信息: {
current_user && current_user.email ?
`平台已检测到您已绑定邮箱${current_user.email},请您确认如下操作`
:
"平台已检测到您未绑定邮箱,为了不影响协同开发部分功能的使用,建议先绑定邮箱"
}
</p> </p>
<Form {...layout}> <Form {...layout}>
<Form.Item label="邮箱"> <Form.Item label="邮箱">
{getFieldDecorator("email",{ {getFieldDecorator("email",{
rules:[{required:true,message:"请输入邮箱账号"}] rules:[
{required:true,message:"请输入邮箱账号"}
]
})( })(
<Input placeholder="请输入您的邮箱账号" width="220px"/> <Input placeholder="请输入您的邮箱账号" width="220px" disabled={current_user && current_user.email}/>
)} )}
</Form.Item> </Form.Item>
<Form.Item label="密码"> <Form.Item label="密码">
{getFieldDecorator("password",{ {getFieldDecorator("password",{
rules:[{required:true,message:"请输入邮箱密码"}] rules:[{required:true,message:"请输入您的平台密码"}]
})( })(
<Input.Password placeholder="请输入您的邮箱密码" width="220px"/> <Input.Password placeholder="请输入您的平台密码" width="220px"/>
)} )}
</Form.Item> </Form.Item>
</Form> </Form>

View File

@ -2,7 +2,7 @@ import React, { useState } from "react";
import { Input ,notification} from "antd"; import { Input ,notification} from "antd";
const { Search } = Input; const { Search } = Input;
export default ({history}) => { export default ({history,searchUrl}) => {
const [openSearch, setOpenSearch] = useState(false); const [openSearch, setOpenSearch] = useState(false);
function onGlobalSearch(value) { function onGlobalSearch(value) {
@ -32,9 +32,7 @@ export default ({history}) => {
/> />
</div> </div>
: :
<i className="iconfont icon-sousuo font-18 color-grey-6 ml30" onClick={() => { <a href={`${searchUrl}?value=`}><i className="iconfont icon-sousuo font-18 ml15 mr15 color-white" /></a>
setOpenSearch(true)
}} />
} }
</React.Fragment> </React.Fragment>
) )

View File

@ -1,10 +1,21 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { FlexAJ } from '../Component/layout'; import { FlexAJ } from '../Component/layout';
import { Divider } from 'antd';
import axios from 'axios';
function LanguagePower({languages}){ function LanguagePower({owner,projectsId}){
const [ array , setArray ] = useState(undefined); const [ array , setArray ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
getData();
},[])
function getData(){
const url = `/${owner}/${projectsId}/languages.json`;
axios.get(url).then(result=>{
if(result){
let languages = result.data;
if(languages){ if(languages){
let arr = []; let arr = [];
Object.keys(languages).map((item,key)=>{ Object.keys(languages).map((item,key)=>{
@ -12,7 +23,19 @@ function LanguagePower({languages}){
}) })
setArray(arr); setArray(arr);
} }
},[languages]) }
}).catch(error=>{})
}
// useEffect(()=>{
// if(languages){
// let arr = [];
// Object.keys(languages).map((item,key)=>{
// arr.push({name:item,percent:languages[item],color:getColor()});
// })
// setArray(arr);
// }
// },[languages])
 function getColor(){  function getColor(){
let str = "#"; let str = "#";
@ -24,7 +47,9 @@ function LanguagePower({languages}){
return str; return str;
} }
return( return(
(array && array.length > 0) ?
<div> <div>
<Divider />
<p className="font-16 color-ooo aboutSubTitle">开发语言</p> <p className="font-16 color-ooo aboutSubTitle">开发语言</p>
<div className="progress"> <div className="progress">
{ {
@ -47,8 +72,7 @@ function LanguagePower({languages}){
} }
</FlexAJ> </FlexAJ>
} }
</div>:""
</div>
) )
} }
export default LanguagePower; export default LanguagePower;

View File

@ -29,12 +29,12 @@
font-weight: 500; font-weight: 500;
color: #FFFFFF; color: #FFFFFF;
margin-top: 60px; margin-top: 60px;
padding-left: 20px;
} }
.markdown-body{ .markdown-body{
box-shadow: 0px 0px 17px rgba(0,0,0,0.2); box-shadow: 0px 0px 17px rgba(0,0,0,0.2);
border-radius: 4px; border-radius: 4px;
margin-top: 17px!important; margin-top: 17px!important;
color: white;
} }
.nContent{ .nContent{
padding:20px 34px; padding:20px 34px;

View File

@ -3,25 +3,42 @@ import { Modal , Button } from 'antd';
import './Index.scss'; import './Index.scss';
import '../../css/index.scss'; import '../../css/index.scss';
import RenderHtml from '../../../components/render-html'; import RenderHtml from '../../../components/render-html';
import cookie from 'react-cookies'; // import cookie from 'react-cookies';
import axios from 'axios';
function SystemNotice({system_notification,history}){ function SystemNotice({showNotice,system_notification,history,login,hideSystemNotice}){
const [ visible , setVisible ] = useState(false); const [ visible , setVisible ] = useState(false);
useEffect(()=>{ useEffect(()=>{
if(system_notification && !cookie.load('notice_stage')){
if((system_notification && !system_notification.is_read) && showNotice && login){
setVisible(true); setVisible(true);
} }
},[system_notification,history.location]) },[system_notification,login])
function sureContinue() { function sureContinue() {
cookie.remove('notice_stage'); if(login && ( system_notification && system_notification.id )){
const url = `/users/${login}/system_notification_histories.json`;
let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);// axios.post(url,{
// let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);// system_notification_id:system_notification.id
cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" }); }).then(result=>{
setVisible(false); setVisible(false);
hideSystemNotice();
}).catch(error=>{
setVisible(false);
hideSystemNotice();
})
}else{
setVisible(false);
hideSystemNotice();
}
// cookie.remove('notice_stage');
// let inFifteenMinutes = new Date(new Date().getTime() + 24 * 3600 * 1000);//
// // let inFifteenMinutes = new Date(new Date().getTime() + 60 * 1000);//
// cookie.save('notice_stage', true,{ expires: inFifteenMinutes,path:"/" });
// setVisible(false);
} }
return ( return (

View File

@ -1,17 +1,38 @@
import React from 'react'; import React from 'react';
import { useState } from 'react';
import EducoderAccount from '../EducoderAccount';
function Profile({children,sureFunc,showCompeleteDialog , completeProfile, className}) { function Profile({
children,
sureFunc,
showCompeleteDialog ,
completeProfile,
className ,
current_user,checkIfLogin,showLoginDialog,showNotification
}) {
const [ giteaVisible , setGiteaVisible ] = useState(false);
function checkProfile() { function checkProfile() {
if(checkIfLogin()){
if(!current_user.has_gitea_user || (current_user.has_gitea_user && !current_user.is_sync_pwd)){
setGiteaVisible(true);
}else{
if(!completeProfile){ if(!completeProfile){
showCompeleteDialog && showCompeleteDialog(); showCompeleteDialog && showCompeleteDialog();
}else{ }else{
sureFunc(); sureFunc();
} }
} }
}else{
showLoginDialog();
}
}
return( return(
<React.Fragment>
<EducoderAccount showNotification={showNotification} visible={giteaVisible} onCancel={()=>setGiteaVisible(false)} current_user={current_user}/>
<a className={className} onClick={checkProfile}>{children}</a> <a className={className} onClick={checkProfile}>{children}</a>
</React.Fragment>
) )
} }
export default Profile; export default Profile;

View File

@ -23,9 +23,13 @@ $(window).scroll(function () {
function SiderBar() { function SiderBar() {
const [ data , setData ] = useState([]); const [ data , setData ] = useState([]);
const [ visible , setVisible ] = useState(false); const [ visible , setVisible ] = useState(false);
const [ login , setLogin ]= useState(false);
useEffect(()=>{ useEffect(()=>{
getFAQ(); getFAQ();
getCurrentUser();
//页面加载完成之后隐藏回到顶点
$(".-task-sidebar .gotop").hide();
},[]) },[])
function getFAQ(){ function getFAQ(){
@ -36,9 +40,19 @@ function SiderBar() {
} }
}).catch(error=>{}) }).catch(error=>{})
} }
//获取当前登录账号信息->用于建议反馈
function getCurrentUser(){
let url = `/users/get_user_info.json`;
axios.get(url).then((response) => {
if (response && response.data && response.data.login) {
setLogin(response.data.login);
}
}).catch(error=>{})
}
function content(list){ function content(list){
return <div> return <div>
<p className="titlecontent">帮助</p>
<ul className="faqUl"> <ul className="faqUl">
{ {
list && list.map((i,k)=>{ list && list.map((i,k)=>{
@ -59,31 +73,46 @@ function SiderBar() {
</ul> </ul>
</div> </div>
} }
return ( return (
<div className={"-task-sidebar"} > <div className={"-task-sidebar"} >
<ShareModal visible={visible} urlValue={window.location.href} onCancel={()=>setVisible(false)}/> {/* 平台反馈 */}
<Tooltip title="意见反馈" placement={"left"} overlayClassName="tooltipBox">
<div className="consult">
<a href={login ? `/Gitlink/forgeplus/issues/new?type=feedback`:`/login?go_page=/Gitlink/forgeplus/issues/new?type=feedback`}>
<i className="iconfont icon-yijianfankui2"></i>
</a>
</div>
</Tooltip>
{/* 帮助 */}
{ {
data && data.length > 0 && (data[0] && data[0].question) ? data && data.length > 0 && (data[0] && data[0].question) ?
<Popover content={content(data)} overlayClassName="helpBox" placement={"left"}> <Popover title="帮助" content={content(data)} overlayClassName="helpBox" placement={"left"}>
<div className="feedback"> <div className="feedback">
<i className="iconfont icon-bangzhu font-22"></i> <i className="iconfont icon-bangzhu1 font-22"></i>
</div> </div>
</Popover> </Popover>
:"" :""
} }
{/* 分享 */}
{/* <div className="scan pr" title=""> {/* <div className="scan pr" title="">
<span className="inline erweima"><i className="iconfont icon-erweima color-white font-22 fl"></i></span> <span className="inline erweima"><i className="iconfont icon-erweima color-white font-22 fl"></i></span>
</div>*/} </div>*/}
<ShareModal visible={visible} urlValue={window.location.href} onCancel={()=>setVisible(false)}/>
<Popover content={shareContent()} overlayClassName="helpBox shareContent" placement={"left"}> <Popover content={shareContent()} overlayClassName="helpBox shareContent" placement={"left"}>
<div className="consult"> <div className="consult">
<i className="iconfont icon-fenxiang1"></i> <i className="iconfont icon-fenxiang"></i>
</div> </div>
</Popover> </Popover>
{/* 返回顶部 */}
<Tooltip title="返回顶部" placement={"left"} overlayClassName="tooltipBox">
<div className="gotop"> <div className="gotop">
<Tooltip title="返回顶部" placement={"right"}>
<a><i className="iconfont icon-huidaodingbu1"></i></a> <a><i className="iconfont icon-huidaodingbu1"></i></a>
</Tooltip>
</div> </div>
</Tooltip>
</div> </div>
) )
} }

View File

@ -17,9 +17,9 @@ function SiderBarShareModal({visible,urlValue,onCancel}) {
value={urlValue} value={urlValue}
size={200} size={200}
fgColor="#000000" fgColor="#000000"
style={{margin:"20px"}} style={{margin:"0 20px 20px"}}
/>} />}
<p>打开微信扫一扫,点击右上角菜单即可将网页分享至朋友圈</p> <p>打开微信扫一扫点击右上角菜单即可将网页分享至朋友圈</p>
</div> </div>
</Modal> </Modal>
) )

View File

@ -5,7 +5,7 @@ const Nav = styled.div`{
background-color:#fff; background-color:#fff;
padding:20px 30px; padding:20px 30px;
border-bottom:1px solid #eee; border-bottom:1px solid #eee;
font-size:16px; font-size:18px;
color:#333; color:#333;
display:flex; display:flex;
justify-content: space-between; justify-content: space-between;

View File

@ -7,6 +7,8 @@ export const Banner = styled.div`{
border-bottom:1px solid #eee; border-bottom:1px solid #eee;
background-color:#fff; background-color:#fff;
border-radius:5px 5px 0px 0px; border-radius:5px 5px 0px 0px;
justify-content: space-between;
display: flex;
}` }`
export const AlignCenterBetween = styled.div`{ export const AlignCenterBetween = styled.div`{
display:flex; display:flex;

View File

@ -36,15 +36,15 @@ function About(props, ref) {
const [ disabled, setDisabled ] = useState(false); const [ disabled, setDisabled ] = useState(false);
const [ typeFlag, setTypeFlag] = useState(false); const [ typeFlag, setTypeFlag] = useState(false);
const AuthorLogin = props.projectDetail && props.projectDetail.author && props.projectDetail.author.login; const isPermission = props.projectDetail && props.projectDetail.permission && props.projectDetail.permission!=="Reporter";
const CurrentLogin = props.current_user && props.current_user.login; const CurrentLogin = props.current_user && props.current_user.login;
useEffect(()=>{ useEffect(()=>{
if(CurrentLogin === AuthorLogin){ if(isPermission){
auth('get'); auth('get');
}else{ }else{
setIsSpining(false); setIsSpining(false);
} }
},[AuthorLogin,CurrentLogin]) },[isPermission,CurrentLogin])
function auth(type){ function auth(type){
const url = `/${owner}/${projectsId}/ci_authorize.json`; const url = `/${owner}/${projectsId}/ci_authorize.json`;
@ -136,7 +136,7 @@ function About(props, ref) {
params:{password:authorityVal} params:{password:authorityVal}
}).then(result=>{ }).then(result=>{
setIsSpining(false); setIsSpining(false);
if(result){ if(result && result.data.status === 0){
setStep(result.data.step); setStep(result.data.step);
} }
}).catch(error=>{setIsSpining(false)}); }).catch(error=>{setIsSpining(false)});
@ -149,7 +149,10 @@ function About(props, ref) {
axios.post(url).then(result=>{ axios.post(url).then(result=>{
setIsSpining(false); setIsSpining(false);
if(result && result.data.status === 0){ if(result && result.data.status === 0){
props.history.push(`/${owner}/${projectsId}/devops`); props.history.push({
pathname: `/${owner}/${projectsId}/devops`,
state:{open_devops:true}
});
// open_devops // open_devops
let { changeOpenDevops } = props; let { changeOpenDevops } = props;
changeOpenDevops && changeOpenDevops(true); changeOpenDevops && changeOpenDevops(true);
@ -167,17 +170,17 @@ function About(props, ref) {
<img src={activate} alt="" width="250px" /> <img src={activate} alt="" width="250px" />
<P>定义DevOps工作流帮助您检测bug发布代码</P> <P>定义DevOps工作流帮助您检测bug发布代码</P>
{ {
CurrentLogin !== AuthorLogin ? !isPermission ?
<div className="noOperation">DevOps开启功能暂未对项目创建者以外的角色开放可以联系项目创建者进行开启开启后便可查看构建信息</div>:"" <div className="noOperation">DevOps开启功能暂未对项目创建者以外的角色开放可以联系项目创建者进行开启开启后便可查看构建信息</div>:""
} }
<a href={"https://forum.trustie.net/forums/3110/detail"} target="_blank" style={{ color: "#5091FF"}}> <a href={"https://forum.trustie.net/forums/3110/detail"} target="_blank" style={{ color: "#5091FF"}}>
了解什么是DevOps 了解什么是DevOps
</a> </a>
<a href={"https://forum.trustie.net/forums/3080/detail"} target="_blank" style={{ color: "#5091FF"}}> <a href={"https://forum.trustie.net/forums/3080/detail"} target="_blank" style={{ color: "#5091FF"}}>
如何使用DevOps 如何使用引擎Engine功能
</a> </a>
{ {
AuthorLogin === CurrentLogin ? isPermission ?
<React.Fragment> <React.Fragment>
{ {
step === 0 && !typeFlag ? step === 0 && !typeFlag ?

View File

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import { Table , Popconfirm } from 'antd'; import { Table , Popconfirm } from 'antd';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { turnbar } from "educoder";
// const STATUS = { // const STATUS = {
// running:"", // running:"",
@ -10,12 +11,6 @@ import { Link } from 'react-router-dom';
// killed:"", // killed:"",
// pending:"" // pending:""
// } // }
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function renderTableStatus(status) { function renderTableStatus(status) {
switch (status) { switch (status) {
case "running": case "running":

View File

@ -17,7 +17,7 @@ function Sure({datas , name , saveFunc , sureSubmit , loading}){
return( return(
<div> <div>
<div style={{padding:"0px 15px 15px 15px"}}> <div style={{padding:"0px 15px 15px 15px"}}>
工作流名称{name} 水线名称{name}
</div> </div>
<div className="editorBody" style={{marginTop:"0px"}}> <div className="editorBody" style={{marginTop:"0px"}}>
<Editors value={value} theme={"vs-grey"} height={"600px"} visible/> <Editors value={value} theme={"vs-grey"} height={"600px"} visible/>

View File

@ -5,7 +5,7 @@ import { AlignCenterBetween , Blueline , FlexAJ } from '../../Component/layout';
function head({manager , parameter}){ function head({manager , parameter}){
return( return(
<AlignCenterBetween> <AlignCenterBetween>
<span className="font-20">工作流配置</span> <span className="font-20">引擎配置</span>
<FlexAJ> <FlexAJ>
{ {
parameter && <Blueline onClick={parameter}>参数管理</Blueline> parameter && <Blueline onClick={parameter}>参数管理</Blueline>

View File

@ -1,4 +1,4 @@
import React , { useEffect } from 'react'; import React from 'react';
import { WhiteBack } from '../Component/layout'; import { WhiteBack } from '../Component/layout';
import './ops.scss'; import './ops.scss';
@ -32,7 +32,6 @@ const Params = Loadable({
}) })
export default ((props)=>{ export default ((props)=>{
return( return(
<WhiteBack className="opsPanel"> <WhiteBack className="opsPanel">
<Switch {...props}> <Switch {...props}>
@ -66,7 +65,11 @@ export default ((props)=>{
{/* 原本的两种合为一个 */} {/* 原本的两种合为一个 */}
<Route path="/:owner/:projectsId/devops" <Route path="/:owner/:projectsId/devops"
render={ render={
(p) =>{return( p.location.state.open_devops?<Dispose {...props} {...p}/>:<About {...props} {...p}/>)} (p) =>{
return( (props && props.project && props.project.open_devops) ?
<Dispose {...props} {...p}/>
:
<About {...props} {...p}/>)}
} }
></Route> ></Route>
</Switch> </Switch>

View File

@ -103,8 +103,8 @@ function Params(props){
<New visble={visible} successFunc={successFunc} CancelFunc={CancelFunc} editList={editList}/> <New visble={visible} successFunc={successFunc} CancelFunc={CancelFunc} editList={editList}/>
<Banner> <Banner>
<FlexAJ> <FlexAJ>
<span className="font-18">工作流 - 参数管理</span> <span className="font-18">引擎 - 参数管理</span>
<Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9 ml20">返回</Link> <Link to={{pathname:`/${owner}/${projectsId}/devops`,state:{open_devops:true}}} className="font-14 color-grey-9 ml20">返回</Link>
</FlexAJ> </FlexAJ>
</Banner> </Banner>
<Div className="disposeList"> <Div className="disposeList">

View File

@ -126,7 +126,7 @@ function Mould(props){
<div> <div>
<New wrappedComponentRef={(f) => childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}></New> <New wrappedComponentRef={(f) => childRef.current = f} ref={childRef} visible={visible} onCancel={()=>setVisible(false)} onOk={onOk}></New>
<Banner> <Banner>
<FlexAJ><span>工作流 - 模板管理</span><Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9">返回</Link></FlexAJ> <FlexAJ><span>引擎 - 模板管理</span><Link to={`/${owner}/${projectsId}/devops`} className="font-14 color-grey-9">返回</Link></FlexAJ>
</Banner> </Banner>
<Div className="disposeList"> <Div className="disposeList">
<FlexAJ> <FlexAJ>

View File

@ -5,7 +5,7 @@ import { Menu, Popconfirm } from "antd";
import { TagsLine } from "../Component/OpsStatus"; import { TagsLine } from "../Component/OpsStatus";
import { Time } from "../Utils/Time"; import { Time } from "../Utils/Time";
import { truncateCommitId } from "../common/util"; import { truncateCommitId } from "../common/util";
import { getUrl } from 'educoder'; import { getImageUrl } from 'educoder';
const SubMenu = Menu.SubMenu; const SubMenu = Menu.SubMenu;
const Img = styled.img` const Img = styled.img`
@ -70,7 +70,7 @@ export default ({ data, repeatSet , chooseSteps }) => {
<div> <div>
<FlexAJ className="leftheader"> <FlexAJ className="leftheader">
<AlignCenter> <AlignCenter>
<Img src={getUrl(`/images/${data && data.author && data.author.image_url}`)} /> <Img src={getImageUrl(`/${data && data.author && data.author.image_url}`)} />
{data && data.started && {data && data.started &&
<span className="nest"> <span className="nest">
开始时间<span> {data.started}</span> 开始时间<span> {data.started}</span>

View File

@ -12,7 +12,7 @@ function ServiceModal({sureModal}){
<div className="mt30" style={{textAlign:"center"}}> <div className="mt30" style={{textAlign:"center"}}>
<Radio.Group value={type} onChange={changeType}> <Radio.Group value={type} onChange={changeType}>
<Radio value={1}>自有服务器</Radio> <Radio value={1}>自有服务器</Radio>
<Radio value={2}>Trustie服务器</Radio> <Radio value={2}>EduCoder服务器</Radio>
</Radio.Group> </Radio.Group>
<p className="mt30"><Button type="primary" onClick={()=>sureModal(type)}>下一步</Button></p> <p className="mt30"><Button type="primary" onClick={()=>sureModal(type)}>下一步</Button></p>
</div> </div>

View File

@ -290,7 +290,7 @@ function Structure(props,ref){
<Banner> <Banner>
<FlexAJ> <FlexAJ>
<span>构建列表</span> <span>构建列表</span>
<Link to={`/${owner}/${projectsId}/devops`} className="font-15 color-grey-9">返回</Link> <Link to={{pathname:`/${owner}/${projectsId}/devops`,state:{open_devops:true}}} className="font-15 color-grey-9">返回</Link>
</FlexAJ> </FlexAJ>
</Banner> </Banner>
<Div> <Div>

View File

@ -275,7 +275,10 @@ function disposePipeline(props){
...params ...params
}).then(result=>{ }).then(result=>{
if(result){ if(result){
props.history.push(`/${owner}/${projectsId}/devops`); props.history.push({
pathname:`/${owner}/${projectsId}/devops`,
state:{open_devops:true}
});
} }
setLoading(false); setLoading(false);
}).catch(error=>{ }).catch(error=>{

View File

@ -20,13 +20,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
if(owner && repo && visible===true){ if(owner && repo && visible===true){
getTeam(); getTeam();
} }
if(!visible){
setFieldsValue({
owner_name:undefined,
identifier:undefined
})
setValue(undefined)
}
},[repo,owner,visible]) },[repo,owner,visible])
function getTeam(){ function getTeam(){
@ -127,7 +120,6 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
{getFieldDecorator("owner_name",{ {getFieldDecorator("owner_name",{
rules:[{required:true,message:"请输入目标用户名"}] rules:[{required:true,message:"请输入目标用户名"}]
})( })(
// <Input placeholder="" autoComplete={"off"}/>
<SearchUser getUser={getUser} width={"100%"} placeholder="请输入目标用户" value={value}/> <SearchUser getUser={getUser} width={"100%"} placeholder="请输入目标用户" value={value}/>
)} )}
</Form.Item> </Form.Item>
@ -153,11 +145,11 @@ function DivertModal({form , visible , onSuccess , onCancel,owner,repo}){
</Form.Item> </Form.Item>
} }
<Form.Item label="仓库标识:" style={{marginBottom:"0px"}}> <Form.Item label="仓库标识:">
{getFieldDecorator("identifier", {getFieldDecorator("identifier",
{ {
rules:[ rules:[
{required:true,message:"请输入仓库标识"}, {required:true,message:"请输入仓库标识"},
{ {
validator:checkIdentifier validator:checkIdentifier
} }

View File

@ -17,5 +17,6 @@ export const getSubEntries = async (owner,projectsId,params)=>{
} }
// //
export const getUser = async (login)=>{ export const getUser = async (login)=>{
return (await axios.get(`/users/${login}/hovercard.json`)).data; let response = await axios.get(`/users/${login}/hovercard.json`)
return response ? response.data : "";
} }

View File

@ -2,9 +2,7 @@ import React, { useState , forwardRef, useEffect } from 'react';
import { Form , Modal , Input , Radio } from 'antd'; import { Form , Modal , Input , Radio } from 'antd';
import Axios from 'axios'; import Axios from 'axios';
import CheckProfile from '../Component/ProfileModal/Profile'; import CheckProfile from '../Component/ProfileModal/Profile';
function AddProjectModal(props){
export default Form.create()(
forwardRef((props)=>{
const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form; const { getFieldDecorator, validateFields , setFieldsValue } = props && props.form;
const [ visible , setVisible ] = useState(false); const [ visible , setVisible ] = useState(false);
@ -19,6 +17,7 @@ export default Form.create()(
function onOk() { function onOk() {
validateFields((error,values)=>{ validateFields((error,values)=>{
console.log(error)
if(!error){ if(!error){
const url = `/applied_projects.json`; const url = `/applied_projects.json`;
Axios.post(url,{ Axios.post(url,{
@ -36,11 +35,12 @@ export default Form.create()(
} }
function checkValue(rule, value, callback){ function checkValue(rule, value, callback){
if(!value){ if(!value){
callback(); callback("请输入6位数的邀请码");
} }else{
if(value.length < 6 || value.length > 6){ if(value.length < 6 || value.length > 6){
callback("请输入6位数的邀请码"); callback("请输入6位数的邀请码");
} }
}
callback(); callback();
} }
@ -58,18 +58,18 @@ export default Form.create()(
<Form.Item label="项目邀请码"> <Form.Item label="项目邀请码">
{getFieldDecorator("code",{ {getFieldDecorator("code",{
rules:[ rules:[
{required:true,message:"请输入6位项目邀请码"}, {required:true,message:" "},
{validator:checkValue} {validator:checkValue}
] ]
})( })(
<Input placeholder="请输入6位项目邀请码" autoComplete={"off"} maxLength="6" style={{width:"300px"}}/> <Input placeholder="请输入6位项目邀请码" autoComplete={"off"} maxLength={6} style={{width:"300px"}}/>
)} )}
</Form.Item> </Form.Item>
<Form.Item label="选择角色"> <Form.Item label="选择角色">
{getFieldDecorator("role",{ {getFieldDecorator("role",{
rules:[{required:true,message:"请选择角色"}] rules:[{required:true,message:"请选择角色"}]
})( })(
<Radio.Group defaultValue={"developer"}> <Radio.Group>
<Radio value="manager">管理员</Radio> <Radio value="manager">管理员</Radio>
<Radio value="developer">开发者</Radio> <Radio value="developer">开发者</Radio>
<Radio value="reporter">报告者</Radio> <Radio value="reporter">报告者</Radio>
@ -81,5 +81,5 @@ export default Form.create()(
<CheckProfile {...props} sureFunc={()=>setVisible(true)}>加入项目</CheckProfile> <CheckProfile {...props} sureFunc={()=>setVisible(true)}>加入项目</CheckProfile>
</React.Fragment> </React.Fragment>
) )
}) }
) export default Form.create()(forwardRef(AddProjectModal));

View File

@ -0,0 +1,30 @@
import React from 'react';
import { Modal } from 'antd';
import { openNewWindow } from 'educoder';
function Engineer({QQVisible,setQQVisible}) {
return(
<Modal
centered
destroyOnClose={true}
visible={QQVisible}
title="提示"
width="500px"
// footer={null}ee
okText="立即联系"
cancelText="取消"
onOk={() => {
openNewWindow("https://qm.qq.com/cgi-bin/qm/qr?k=DWdqQHAbbfw7_rqm0d-Q_vDn5H6bMp91&jump_from=webapi")
}}
onCancel={() => setQQVisible(false)}
>
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
<p>您可以在QQ服务群向管理员申请获得继续操作的权限</p >
< img src={require("./teacherQQ.png")} width={200} height={200} alt=""/>
<p>群号693542422 </p >
</div>
</Modal >
)
}
export default Engineer

View File

@ -19,7 +19,7 @@ function Footer(){
return( return(
<div> <div>
<div style={{height:"543px"}}></div> <div style={{height:"810px"}}></div>
<div className="newFooter edu-txt-center"> <div className="newFooter edu-txt-center">
{value && showhtml(value)} {value && showhtml(value)}
{/* <div className="footerInfos"> {/* <div className="footerInfos">
@ -61,6 +61,42 @@ function Footer(){
<p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477</a></p> */} <p className="footerCopy">© Copyright 2007~2021 国防科技大学Trustie团队 & IntelliDE <a href="https://beian.miit.gov.cn">湘ICP备 17009477</a></p> */}
</div> </div>
</div> </div>
// {/* <div className="footEdition">
// <div className="footContent">
// <ul className="center">
// <img src={""} alt="Gitlink" height="29px"/>
// <p></p>
// </ul>
// <ul>
// <li className="thehead"></li>
// <li><a href="/"></a></li>
// <li><a href="https://forum.trustie.net/forums/1168/detail"></a></li>
// <li><a href="https://forum.trustie.net/"></a></li>
// <li><a href="https://www.trustie.net/cooperation"></a></li>
// </ul>
// <ul>
// <li className="thehead"></li>
// <li><a href="https://forgeplus.trustie.net/docs/api">API</a></li>
// <li><a href="https://git-scm.com">Git</a></li>
// <li><a href="https://forum.trustie.net/forums/3080/detail">DevOps使</a></li>
// <li><a href='https://www.trustie.net/agreement'></a></li>
// </ul>
// <ul>
// <li className="thehead"></li>
// <li className="theline">
// <div className="mr50">
// <li></li>
// <img src={"Img"} alt=""/>
// </div>
// <div>
// <li>QQ</li>
// <img src={"qqImg"} alt="QQ"/>
// </div>
// </li>
// </ul>
// </div>
// <p className="copyrightDesc">©Copyright 20072021 Gitlink & IntelliDE <br/>ICP 17009477</p>
// </div> */}
) )
} }
export default Footer; export default Footer;

View File

@ -1,8 +1,9 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import AccountProfile from "../../modules/user/AccountProfile"; import AccountProfile from "../../modules/user/AccountProfile";
import { getImageUrl } from 'educoder' import { getImageUrl , openNewWindow } from 'educoder';
import axios from 'axios'; import axios from 'axios';
import { Input , notification , Dropdown ,Popover, Menu,Badge, Button } from 'antd'; import cookie from 'react-cookies';
import { notification , Dropdown ,Popover, Menu,Badge, Input, Divider } from 'antd';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import LoginDialog from '../../modules/login/LoginDialog'; import LoginDialog from '../../modules/login/LoginDialog';
@ -13,14 +14,13 @@ import '../../modules/tpm/TPMIndex.css';
import CheckProfile from '../Component/ProfileModal/Profile'; import CheckProfile from '../Component/ProfileModal/Profile';
import './header.scss'; import './header.scss';
import NoticeContent from './NoticeContent'; import Engineer from './Engineer';
const $ = window.$ const $ = window.$
// TODO 这部分脚本从公共脚本中直接调用 // TODO 这部分脚本从公共脚本中直接调用
const { Search } = Input; const { Search } = Input;
let old_url;
window._header_componentHandler = null; window._header_componentHandler = null;
// 非trustie链接则新开页跳转 // 非trustie链接则新开页跳转
const isPath= window.location.hostname ==='code.educoder.net' || window.location.hostname==='testforgeplus.educoder.net';
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net'] const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
class NewHeader extends Component { class NewHeader extends Component {
constructor(props) { constructor(props) {
@ -43,45 +43,66 @@ class NewHeader extends Component {
setevaluatinghides: false, setevaluatinghides: false,
occupation: 0, occupation: 0,
mydisplay: false, mydisplay: false,
headtypesonClickbool: false, // headtypesonClickbool: false,
headtypess: "/", // headtypess: "/",
settings: null, settings: null,
visiblemyss: false, visiblemyss: false,
openSearch:false, openSearch:false,
visible:false, //浮动消息框展示控制 visible:false, //浮动消息框展示控制
QQVisible:false,
educoderBanner:undefined
} }
} }
componentDidMount() { componentDidMount() {
this.geturlsdata(); this.geturlsdata();
window._header_componentHandler = this; window._header_componentHandler = this;
this.getEducoderSetting();
//下拉框的显示隐藏
var hoverTimeout;
var hoveredPanel;
$(".edu-menu-panel").hover(function () {
if (hoverTimeout) { // 一次只显示一个panel
if (hoveredPanel && hoveredPanel !== this) {
$(hoveredPanel).find(".edu-menu-list").hide()
}
clearTimeout(hoverTimeout);
hoverTimeout = null;
}
hoveredPanel = this;
$(this).find(".edu-menu-list").show();
}, function () {
var that = this;
// 延迟hide
hoverTimeout = setTimeout(function () {
$(that).find(".edu-menu-list").hide();
}, 800)
});
//获取游览器地址
try { try {
window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href)) window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href))
} catch (e) {} } catch (e) {}
} }
getEducoderSetting=()=>{
const url = `https://data.educoder.net/api/setting.json`;
axios.get(url).then(result=>{
if(result && result.data){
this.setState({
educoderBanner:result.data.setting && result.data.setting.navbar
})
}
}).catch(error=>{})
}
SearchInput = (open,item)=>{
if(open){
return(
<div
onBlur={() => {
setTimeout(() => {
this.setState({
openSearch:false
})
}, 300)
}}
>
<Search placeholder="实践课程/教学课堂/实践项目/交流问答"
className={`search-input mr20`}
onSearch={(value)=>this.onGlobalSearch(value,item)}
autoFocus={true}
/>
</div>
)
}else{
return <i className="iconfont icon-sousuo font-18 color-white ml30" onClick={() => {
this.setState({openSearch:true})
}} />
}
}
onGlobalSearch=(value,item)=>{
window.location.href=`${item}?value=` + value;
}
openNotification = (messge) => { openNotification = (messge) => {
notification.open({ notification.open({
message: "提示", message: "提示",
@ -96,6 +117,26 @@ class NewHeader extends Component {
}) })
} }
submitsubmitapplications = () => {
let {
submitapplicationssum,
submitapplicationsvaluedata
} = this.state;
this.setState({
submitapplications: false,
RadioGroupvalue: undefined
})
if (submitapplicationssum === 0) {
if (submitapplicationsvaluedata !== undefined) {
window.location.href = "/courses/" + submitapplicationsvaluedata;
}
} else if (submitapplicationssum === 1) {
if (submitapplicationsvaluedata !== undefined) {
window.location.href = "/projects/" + submitapplicationsvaluedata;
}
}
}
educoderlogin = () => { educoderlogin = () => {
//登录账号 //登录账号
this.setState({ this.setState({
@ -103,6 +144,8 @@ class NewHeader extends Component {
}) })
} }
educoderloginysl = () => { educoderloginysl = () => {
//退出账号时清除登录页面的下次自动登录(用户再次打开登录页面时下次自动登录框不勾选)
cookie.remove("autologin");
//退出账号 //退出账号
var url = `/accounts/logout.json`; var url = `/accounts/logout.json`;
axios.get((url)).then((result) => { axios.get((url)).then((result) => {
@ -132,6 +175,24 @@ class NewHeader extends Component {
}) })
}; };
hidetojoinclass = () => {
this.setState({
tojoinclasstype: false,
tojoinitemtype: false,
tojoinclasstitle: undefined,
rolearr: ["", ""],
Checkboxteacherchecked: false,
Checkboxstudentchecked: false,
Checkboxteachingchecked: false,
Checkboxteachertype: false,
Checkboxteachingtype: false,
code_notice: false,
checked_notice: false,
RadioGroupvalue: undefined
})
}
// 关闭 // 关闭
cancelModulationModels = () => { cancelModulationModels = () => {
this.setState({ isRenders: false }) this.setState({ isRenders: false })
@ -154,12 +215,12 @@ class NewHeader extends Component {
AccountProfiletype: false AccountProfiletype: false
}) })
}; };
headtypesonClick = (url, bool) => { // headtypesonClick = (url, bool) => {
this.setState({ // this.setState({
headtypess: url, // headtypess: url,
headtypesonClickbool: bool, // headtypesonClickbool: bool,
}) // })
} // }
//获取数据为空的时候 //获取数据为空的时候
gettablogourlnull = () => { gettablogourlnull = () => {
this.setState({ this.setState({
@ -213,12 +274,18 @@ class NewHeader extends Component {
matchpaths = (url) => { matchpaths = (url) => {
const { match } = this.props; const { match } = this.props;
if(url){ const isDev = window.location.port == 3007;
if (match.path.indexOf(url) > -1) { const isdev2= isDev ?'https://testforgeplus.trustie.net':`https://${window.location.hostname}`;
return true let str = "";
}else { if(url.indexOf("http")>-1){
return false str = isdev2+match.url;
}else{
str = match.path;
} }
if (url && (str === url || (str === url+'/'))) {
return true;
}else {
return false;
} }
} }
@ -239,7 +306,19 @@ class NewHeader extends Component {
{ {
list.map((item,key)=>{ list.map((item,key)=>{
return( return(
(item.name !=="加入课堂" && item.name !=="加入开发项目") && (item.name !=="加入课堂" && item.name !=="加入开发项目" && item.name !=="新建开发项目") &&
<Menu.Item key={item.name+key}>
<CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
</Menu.Item>
)
})
}
</Menu>
<Menu>
{
list.map((item,key)=>{
return(
(item.name ==="新建开发项目") &&
<Menu.Item key={item.name+key}> <Menu.Item key={item.name+key}>
<CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile> <CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
</Menu.Item> </Menu.Item>
@ -278,97 +357,68 @@ class NewHeader extends Component {
this.setState({ visible }); this.setState({ visible });
}; };
render() { turntoEngineer=(url)=>{
const { match ,resetUserInfo ,showNotification} = this.props; const { current_user } = this.props;
let current_user = this.props.user; if(current_user && current_user.login){
let { if(url){
AccountProfiletype, window.location.href=url;
user, }else{
isRender, this.setState({
headtypesonClickbool, QQVisible:true
headtypess, })
settings, }
visible, }else{
} = this.state; this.educoderlogin();
/*用户名称 用户头像url*/ }
let activeIndex = false;
let activeForums = false;
let activeShixuns = false;
let activePaths = false;
let coursestype = false;
let activePackages = false;
let activeMoopCases = false;
let activeCompetitions = false;
if (match.path === '/forums') {
activeForums = true;
} else if (match.path.startsWith('/shixuns')) {
activeShixuns = true;
} else if (match.path.startsWith('/paths')) {
activePaths = true;
} else if (match.path.startsWith('/courses')) {
coursestype = true;
} else if (match.path.startsWith('/crowdsourcing')) {
activePackages = true;
} else if (match.path.startsWith('/moop_cases')) {
activeMoopCases = true;
} else if (match.path.startsWith('/competitions')) {
activeCompetitions = true;
} else {
activeIndex = true;
} }
let headtypes = '/'; setQQVisible=()=>{
if (settings) { this.setState({
if (settings.navbar) { QQVisible:false
if (settings.navbar.length > 0) {
if (match.path === '/') {
if (headtypesonClickbool === false) {
headtypes = undefined;
} else {
headtypes = headtypess;
}
} else {
for (var i = 0; i < settings.navbar.length; i++) {
if (match.path === settings.navbar[i].link) {
headtypes = settings.navbar[i].link;
break;
}
}
}
}
}
}
let shixuntype = false;
let pathstype = false;
let coursestypes = false;
if (this.props && this.props.mygetHelmetapi != null) {
let shixun = "/shixuns";
let paths = "/paths";
let courses = "/courses";
this.props.mygetHelmetapi && this.props.mygetHelmetapi.navbar && this.props.mygetHelmetapi.navbar.map((item, key) => {
var reg = RegExp(item.link);
if (shixun.match(reg)) {
if (item.hidden === true) {
shixuntype = true
}
}
if (paths.match(reg)) {
if (item.hidden === true) {
pathstype = true
}
}
if (courses.match(reg)) {
if (item.hidden === true) {
coursestypes = true
}
}
}) })
} }
menus=(item)=>{
return(
<div className="downMenus">
{
item.map((i,k)=>{
return(
!i.hidden && <li onClick={()=>{window.location.href=this.checkLink(i.link)}}>
{k!==0 &&<Divider />}
<aside className="font-16 color-ooo">{i.name}</aside>
<div className="font-14" style={{color:"rgb(159, 167, 179)",whiteSpace:'nowrap'}}>{i.content}</div>
</li>
)
})
}
</div>
)
}
checkLink=(link)=>{
if(link.indexOf("http")>-1){
return link;
}else{
return `https://www.educoder.net${link}`;
}
}
render() {
let current_user = this.props.user;
let {
QQVisible,
AccountProfiletype,
user,
isRender,
settings,
visible,
educoderBanner
} = this.state;
let search_url = settings && settings.common && settings.common.search; let search_url = settings && settings.common && settings.common.search;
return ( return (
<div className="newHeaders" id="nHeader"> <div className={`newHeaders`} id="nHeader">
<Engineer QQVisible={QQVisible} setQQVisible={this.setQQVisible}/>
<div className="headerContent"> <div className="headerContent">
{isRender === true ? {isRender === true ?
<LoginDialog <LoginDialog
@ -383,91 +433,92 @@ class NewHeader extends Component {
{...this.props} {...this.props}
{...this.state} {...this.state}
/> : ""} /> : ""}
{/* <div style={{width:"78px"}}>
{ {
publicNav &&
<a href={'https://www.ccf.org.cn/'} className={"fl"}>
<img src={MainLogo} alt="ccf" width="63px"/>
</a>
}
</div> */}
{/* {
settings && settings.nav_logo_url ? settings && settings.nav_logo_url ?
<a href={settings && settings.new_course.default_url} className={"fl mr50"} style={{minWidth:"45px"}}> <a href={settings && settings.new_course.default_url} className={"fl mr50"}>
<img alt="可控开源社区" className="logoimg" style={{ heigth: "40px" }} src={getImageUrl(`/${settings.nav_logo_url}`)}></img> <img alt="可控开源社区" className="logoimg" src={getImageUrl(`/${settings.nav_logo_url}`)}></img>
</a> </a>
: :
"" ""
} } */}
<div className="head-nav pr" id={"head-navpre1"}> <div className="head-nav pr" id={"head-navpre1"}>
{ {
settings && settings.navbar && settings.navbar.length > 0 ? educoderBanner && educoderBanner.length > 0 ?
<ul id="header-nav"> <ul id="header-nav">
{ {
settings.navbar && settings.navbar.map((item, key) => { educoderBanner.map((item, key) => {
var new_link = item.link; var new_link = item.link;
var user_login = current_user && current_user.login; var is_hidden = item.hidden;
var is_hidden = item.hidden
if (new_link && (new_link.indexOf("courses") > -1 || new_link.indexOf("contests") > -1)) {
if (user_login) {
if (new_link.indexOf("courses") > -1) {
new_link = new_link.replace(/courses/g, user_login + "/courses")
} else if (new_link.indexOf("contests") > -1) {
new_link = new_link.replace(/contests/g, user_login + "/contests")
}
} else {
is_hidden = true
}
}
if (user_login && (new_link && new_link.indexOf("homes") > -1)) {
new_link = new_link.replace(/homes/g, user_login + "/user_activities")
}
var waiLian = (new_link && str.filter(item=>new_link.indexOf(item)>-1) );
var wl = waiLian && waiLian.length>0;
return ( return (
<li key={key} onClick={() => this.headtypesonClick(item.link, true)} className={`${this.matchpaths(item.link) === true ? 'pr active' : 'pr'}`} style={!is_hidden ? { display: 'flex' } : { display: 'none' }}> <li key={key} onClick={() => this.headtypesonClick(item.link, true)} className={`${((isPath && item.name === "大学开源") || this.matchpaths(item.link) === true) ? 'pr active' : 'pr'}`} style={!is_hidden ? { display: 'block' } : { display: 'none' }}>
<a href={new_link} target={wl ? "_self":"_blank"}>{item.name}</a> {
item.subitem && item.subitem.length>0 ?
<Dropdown overlay={this.menus(item.subitem)}>
<div className="namediv">
<a href={this.checkLink(new_link)} ><div dangerouslySetInnerHTML={{ __html: item.name }}></div> </a>
<i className="iconfont icon-xiala1"></i>
</div>
</Dropdown>
:
<a href={this.checkLink(new_link)} ><div dangerouslySetInnerHTML={{ __html: item.name }}></div></a>
}
</li> </li>
) )
}) })
} }
{/* {
settings && settings.engineer_url !== undefined ?
<li>
<a onClick={()=>this.turntoEngineer(settings.engineer_url)}>工程认证</a>
</li>
:""
} */}
</ul> </ul>
: "" : ""
} }
</div> </div>
<div className="head-right"> <div className="head-right">
{ search_url && <HeadSearch {...this.props}/>} { search_url && <HeadSearch {...this.props} searchUrl={settings && settings.common && settings.common.search}/>}
{ {
current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)? current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
<Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight"> <Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
<i className="iconfont icon-tianjiafangda color-grey-6 ml30 mr15"></i> <i className="iconfont icon-tianjiafangda color-white font-18 mr15 ml15" style={{marginBottom:"3px"}}/>
</Dropdown>:"" </Dropdown>:""
} }
{ (settings && settings.common && settings.common.notice) && (current_user && current_user.login)? { (settings && settings.common && settings.common.notice) && (current_user && current_user.login)?
<Popover <a href={settings.common.notice} className="message-icon">
overlayClassName="notice-popover" {current_user &&
placement={`bottomRight`} <i className="iconfont icon-xiaoxilingdang color-white ml15 mr15"></i>
content={<NoticeContent visible={visible} current_user={current_user} showNotification={showNotification} resetUserInfo={resetUserInfo}/>} }
visible={visible} </a>
onVisibleChange={this.handleVisibleChange}
destroyTooltipOnHide
>
<Link to={"/settings/notice"} className="message-icon">
{current_user && <Badge count={current_user.message_unread_total}>
<i className="iconfont icon-xiaoxilingdang color-grey-6 ml15 mr15"></i>
</Badge>}
</Link>
</Popover>
: "" : ""
} }
</div> </div>
{!user || (user && !user.login) ? {!user || (user && !user.login) ?
<span className="font-15 ml30"> <span className="font-15 ml30">
<a onClick={() => this.educoderlogin()} className="mr5 color-grey-6">登录</a> <a onClick={() => this.educoderlogin()} className="mr5 color-white">登录</a>
{ {
settings && settings.common && settings.common.register && settings && settings.common && settings.common.register &&
<span><em className="vertical-line"></em><a className="ml5 color-grey-6" href={`${settings.common.register}`} target="_blank"></a></span> <span><em className="vertical-line"></em><a className="ml5 color-white" href={`${settings.common.register}`} target="_blank"></a></span>
} }
</span> </span>
: :
<Dropdown placement={`bottomRight`} overlay={this.renderMenu(settings && settings.personal)}> <Dropdown placement={`bottomRight`} overlay={this.renderMenu(settings && settings.personal)}>
<div className="ml15" style={{display:"flex"}}>
<a href={`/${this.props.current_user && this.props.current_user.login}`}> <a href={`/${this.props.current_user && this.props.current_user.login}`}>
<img alt="头像" src={getImageUrl(`/${user.image_url}`)} className="currentImg"></img> <img alt="头像" src={getImageUrl(`/${user.image_url}`)} className="currentImg"></img>
</a> </a>
<i className="iconfont icon-xiala1 font-14 ml3 mt5 mr3" style={{color:"#979797"}}></i>
</div>
</Dropdown> </Dropdown>
} }
</div> </div>

View File

@ -23,6 +23,9 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
const [atPage, setAtPage] = useState(0); const [atPage, setAtPage] = useState(0);
const [atUnreadList, setAtUnreadList] = useState([]);//@ const [atUnreadList, setAtUnreadList] = useState([]);//@
//
const [clickItem, setClickItem] = useState(undefined);
useEffect(() => { useEffect(() => {
resetUserInfo(); resetUserInfo();
}, [noticeUnreadCount,atUnreadCount]); }, [noticeUnreadCount,atUnreadCount]);
@ -150,24 +153,27 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
function changeReadMark(item) { function changeReadMark(item) {
if (!clickItem || clickItem.id !== item.id){
if (item.type === "notification") { if (item.type === "notification") {
let list = noticeUnreadList.slice(); let list = noticeUnreadList.slice();
let index = noticeUnreadList.indexOf(item); let index = noticeUnreadList.indexOf(item);
list[index].status = 2; if (list[index].status === 1 && noticeUnreadCount > 0) {
setNoticeUnreadList(list);
if (noticeUnreadCount > 0) {
setNoticeUnreadCount(noticeUnreadCount - 1); setNoticeUnreadCount(noticeUnreadCount - 1);
} }
list[index].status = 2;
setNoticeUnreadList(list);
} else if (item.type === "atme") { } else if (item.type === "atme") {
let list = atUnreadList.slice(); let list = atUnreadList.slice();
let index = atUnreadList.indexOf(item); let index = atUnreadList.indexOf(item);
list[index].status = 2; if (list[index].status === 1 && atUnreadCount > 0) {
setAtUnreadList(list);
if (atUnreadCount > 0) {
setAtUnreadCount(atUnreadCount - 1); setAtUnreadCount(atUnreadCount - 1);
} }
list[index].status = 2;
setAtUnreadList(list);
} }
} }
setClickItem(item);
}
return ( return (
<div className="messageHoverDiv notice01"> <div className="messageHoverDiv notice01">
@ -184,11 +190,11 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
className='hoverNotice-body' // className className='hoverNotice-body' // className
onPullRefresh={() => { setNoticePage(noticePage + 1); }} //ajaxfunction onPullRefresh={() => { setNoticePage(noticePage + 1); }} //ajaxfunction
// type={2} // // type={2} //
count={noticeUnreadList.length} // count={noticeUnreadList && noticeUnreadList.length} //
pageSize={10} // pageSize={10} //
> >
{ {
noticeUnreadList.map(item => { noticeUnreadList && noticeUnreadList.length>0 && noticeUnreadList.map(item => {
return ( return (
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}> <div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
<div className={`noticeCont ${item.notification_url?'pointer':''}`}> <div className={`noticeCont ${item.notification_url?'pointer':''}`}>
@ -219,12 +225,12 @@ function NoticeContent({ visible, showNotification, resetUserInfo, current_user:
{atUnreadList.map(item => { {atUnreadList.map(item => {
return ( return (
<div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}> <div key={item.id + Math.random()} className="noticeCont-back" onClick={() => { readItem(item) }}>
<div className="noticeCont"> <div className={`noticeCont ${item.notification_url ? 'pointer' : ''}`}>
<span style={{ visibility: item.status === 1 ? 'visible' : 'hidden' }}> <span style={{ visibility: item.status === 1 ? 'visible' : 'hidden' }}>
<Badge color="#FA2020" /> <Badge color="#FA2020" />
</span> </span>
<div className="noticeCont-text"> <div className="noticeCont-text">
<span className="content-span atme-cont-span" dangerouslySetInnerHTML={{ __html: "<b>" + (item.sender ? item.sender.name : '') + "</b>&nbsp;&nbsp;&nbsp;" + item.content + " 中@我" }}></span> <span className="content-span atme-cont-span" dangerouslySetInnerHTML={{ __html: item.content }}></span>
<span className="timeSpan">{item.time_ago}</span> <span className="timeSpan">{item.time_ago}</span>
</div> </div>
</div> </div>

View File

@ -1,8 +1,28 @@
.dropdownFlex{ .dropdownFlex{
display:flex; display:flex;
background:#fff; background-color: #fff;
border-radius: 3px; background-clip: padding-box;
border-radius: 2px;
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
padding:5px 0px;
>.ant-menu:first-child{
border-right: 2px solid #eee!important;
}
>.ant-menu{
margin:0px 1px;
}
&:hover{
li{
background-color: #f5f5f5;
}
}
li:hover{
background-color: #0152d9;
a{
color: #fff!important;
}
}
.ant-menu-vertical > .ant-menu-item{ .ant-menu-vertical > .ant-menu-item{
border:none; border:none;
height: 35px; height: 35px;
@ -12,9 +32,6 @@
background-color: #fff; background-color: #fff;
a{color: rgba(0, 0, 0, 0.65)!important;} a{color: rgba(0, 0, 0, 0.65)!important;}
} }
&.ant-menu-item-active{
a{color: #4cacff!important;}
}
} }
.ant-menu-vertical{ .ant-menu-vertical{
border:none; border:none;
@ -24,7 +41,6 @@
width: 34px; width: 34px;
height: 34px; height: 34px;
border-radius: 50%; border-radius: 50%;
margin-left: 15px;
} }
.currentMenu{ .currentMenu{
@ -127,6 +143,9 @@
width: 110px; width: 110px;
text-align: right; text-align: right;
} }
.ant-form-explain{
position: absolute;
}
} }
// 右上角小铃铛单独样式 // 右上角小铃铛单独样式
@ -263,3 +282,100 @@
.text-center{ .text-center{
text-align: center; text-align: center;
} }
.footEdition{
background-color: #171B23;
.footContent{
display: flex;
align-items: flex-start;
padding:86px 0px;
justify-content: space-around;
width: 1200px;
margin:0px auto;
ul{
min-width: 120px;
text-align: left;
margin-right: 80px;
&.center{
text-align: center;
}
&>p{
height: 22px;
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
line-height: 22px;
}
&>img{
width: 100px;
height: 100%;
margin-bottom: 30px;
margin-top: 25px;
border-radius: 10px;
}
li{
height: 20px;
font-size: 14px;
font-weight: 400;
line-height: 20px;
color: #BDC2D1;
margin-bottom: 15px!important;
a{
color: #BDC2D1!important;
&:hover{
text-decoration: underline;
}
}
&.thehead{
height: 25px;
font-size: 18px;
font-weight: 600;
color: #FFFFFF;
line-height: 25px;
margin-bottom: 20px!important;
}
}
.theline{
.imgCon{
width: 90px;
height: 90px;
padding:5px;
border-radius: 4px;
background-color: #fff;
img{
width: 100%;
border-radius: 3px;
}
}
}
}
}
}
.copyrightDesc{
font-size: 12px;
font-weight: 400;
color: #BDC2D1;
line-height: 28px;
padding:15px 0px;
text-align: center;
background-color: #1B212C;
a{
color: #BDC2D1!important;
}
}
.regBtn{
height: 40px;
background: #466AFF;
border-radius: 2px;
display: inline-block;
padding:0px 18px;
margin-left: 20px;
font-size: 14px;
font-weight: 400;
color: #FFFFFF!important;
line-height: 40px;
&:hover{
color: #FFFFFF!important;
background-color: #355CFF;
}
}

BIN
src/forge/Head/img/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

BIN
src/forge/Head/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
src/forge/Head/img/ring.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/forge/Images/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
<title>bug-red</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="质量分析" transform="translate(-424.000000, -445.000000)" fill="#F54128" fill-rule="nonzero">
<g id="bug1" transform="translate(408.000000, 387.000000)">
<g id="编组-4" transform="translate(0.000000, 44.000000)">
<g id="编组-3">
<g id="bug-red" transform="translate(16.000000, 14.000000)">
<path d="M11.8899083,6.2156806 L9.85321101,6.2156806 L9.85321101,4.91378562 C10.9100917,4.91378562 11.766055,4.10400694 11.766055,3.1041516 C11.766055,3.04686822 11.7165138,3 11.6559633,3 L10.8302752,3 C10.7697248,3 10.7201835,3.04686822 10.7201835,3.1041516 C10.7201835,3.55721105 10.3321101,3.92434544 9.85321101,3.92434544 L2.14678899,3.92434544 C1.66788991,3.92434544 1.27981651,3.55721105 1.27981651,3.1041516 C1.27981651,3.04686822 1.23027523,3 1.16972477,3 L0.344036697,3 C0.283486239,3 0.233944954,3.04686822 0.233944954,3.1041516 C0.233944954,4.10400694 1.08990826,4.91378562 2.14678899,4.91378562 L2.14678899,6.2156806 L0.110091743,6.2156806 C0.0495412844,6.2156806 0,6.26254882 0,6.3198322 L0,7.04889339 C0,7.10617677 0.0495412844,7.15304499 0.110091743,7.15304499 L2.14678899,7.15304499 L2.14678899,8.40286417 C2.14678899,8.48748734 2.14954128,8.57211052 2.15642202,8.6541299 C1.21238532,9.03558513 0.550458716,9.92217561 0.550458716,10.9545783 C0.550458716,11.0118617 0.6,11.0587299 0.660550459,11.0587299 L1.43119266,11.0587299 C1.49174312,11.0587299 1.5412844,11.0118617 1.5412844,10.9545783 C1.5412844,10.3791407 1.87018349,9.87530739 2.36146789,9.60451324 C2.4440367,9.82843917 2.54862385,10.0419499 2.67385321,10.2424418 C3.00825688,10.7827282 3.48577982,11.2344858 4.05688073,11.5508462 C4.45458716,11.7708665 4.89633028,11.925792 5.36834862,12 C5.42889908,12 5.47844037,11.9531318 5.47844037,11.8958484 L5.47844037,5.85115001 C5.47844037,5.79386663 5.52798165,5.74699841 5.58853211,5.74699841 L6.41422018,5.74699841 C6.47477064,5.74699841 6.52431193,5.79386663 6.52431193,5.85115001 L6.52431193,11.8945465 C6.52431193,11.9518299 6.57385321,11.9986981 6.63440367,11.9986981 C7.10642202,11.9244901 7.54816514,11.7695646 7.94587156,11.5495443 C8.51697248,11.2331839 8.99449541,10.7814263 9.32889908,10.2411399 C9.45412844,10.0393462 9.5587156,9.82583538 9.6412844,9.60321134 C10.1298165,9.87530739 10.4587156,10.3791407 10.4587156,10.9545783 C10.4587156,11.0118617 10.5082569,11.0587299 10.5688073,11.0587299 L11.3394495,11.0587299 C11.4,11.0587299 11.4495413,11.0118617 11.4495413,10.9545783 C11.4495413,9.92217561 10.7876147,9.03558513 9.84357798,8.6541299 C9.84908257,8.57080862 9.85321101,8.48748734 9.85321101,8.40286417 L9.85321101,7.15304499 L11.8899083,7.15304499 C11.9504587,7.15304499 12,7.10617677 12,7.04889339 L12,6.3198322 C12,6.26254882 11.9504587,6.2156806 11.8899083,6.2156806 Z" id="路径"></path>
<path d="M3.11111111,3 L8.88888889,3 C8.95,3 9,2.95 9,2.88888889 C9,2.33333333 8.87777778,1.82361111 8.64027778,1.3875 C8.40138889,0.95 8.05,0.598611111 7.6125,0.359722222 C7.17638889,0.122222222 6.66666667,0 6.11111111,0 L5.88888889,0 C5.33333333,0 4.82361111,0.122222222 4.3875,0.359722222 C3.95,0.598611111 3.59861111,0.95 3.35972222,1.3875 C3.12222222,1.82361111 3,2.33333333 3,2.88888889 C3,2.95 3.05,3 3.11111111,3 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
<title>bug-fill</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="质量分析" transform="translate(-421.000000, -224.000000)" fill="#434D6C" fill-rule="nonzero">
<g id="编组-5" transform="translate(420.000000, 215.000000)">
<g id="bug-fill" transform="translate(1.000000, 9.000000)">
<path d="M11.8899083,6.2156806 L9.85321101,6.2156806 L9.85321101,4.91378562 C10.9100917,4.91378562 11.766055,4.10400694 11.766055,3.1041516 C11.766055,3.04686822 11.7165138,3 11.6559633,3 L10.8302752,3 C10.7697248,3 10.7201835,3.04686822 10.7201835,3.1041516 C10.7201835,3.55721105 10.3321101,3.92434544 9.85321101,3.92434544 L2.14678899,3.92434544 C1.66788991,3.92434544 1.27981651,3.55721105 1.27981651,3.1041516 C1.27981651,3.04686822 1.23027523,3 1.16972477,3 L0.344036697,3 C0.283486239,3 0.233944954,3.04686822 0.233944954,3.1041516 C0.233944954,4.10400694 1.08990826,4.91378562 2.14678899,4.91378562 L2.14678899,6.2156806 L0.110091743,6.2156806 C0.0495412844,6.2156806 0,6.26254882 0,6.3198322 L0,7.04889339 C0,7.10617677 0.0495412844,7.15304499 0.110091743,7.15304499 L2.14678899,7.15304499 L2.14678899,8.40286417 C2.14678899,8.48748734 2.14954128,8.57211052 2.15642202,8.6541299 C1.21238532,9.03558513 0.550458716,9.92217561 0.550458716,10.9545783 C0.550458716,11.0118617 0.6,11.0587299 0.660550459,11.0587299 L1.43119266,11.0587299 C1.49174312,11.0587299 1.5412844,11.0118617 1.5412844,10.9545783 C1.5412844,10.3791407 1.87018349,9.87530739 2.36146789,9.60451324 C2.4440367,9.82843917 2.54862385,10.0419499 2.67385321,10.2424418 C3.00825688,10.7827282 3.48577982,11.2344858 4.05688073,11.5508462 C4.45458716,11.7708665 4.89633028,11.925792 5.36834862,12 C5.42889908,12 5.47844037,11.9531318 5.47844037,11.8958484 L5.47844037,5.85115001 C5.47844037,5.79386663 5.52798165,5.74699841 5.58853211,5.74699841 L6.41422018,5.74699841 C6.47477064,5.74699841 6.52431193,5.79386663 6.52431193,5.85115001 L6.52431193,11.8945465 C6.52431193,11.9518299 6.57385321,11.9986981 6.63440367,11.9986981 C7.10642202,11.9244901 7.54816514,11.7695646 7.94587156,11.5495443 C8.51697248,11.2331839 8.99449541,10.7814263 9.32889908,10.2411399 C9.45412844,10.0393462 9.5587156,9.82583538 9.6412844,9.60321134 C10.1298165,9.87530739 10.4587156,10.3791407 10.4587156,10.9545783 C10.4587156,11.0118617 10.5082569,11.0587299 10.5688073,11.0587299 L11.3394495,11.0587299 C11.4,11.0587299 11.4495413,11.0118617 11.4495413,10.9545783 C11.4495413,9.92217561 10.7876147,9.03558513 9.84357798,8.6541299 C9.84908257,8.57080862 9.85321101,8.48748734 9.85321101,8.40286417 L9.85321101,7.15304499 L11.8899083,7.15304499 C11.9504587,7.15304499 12,7.10617677 12,7.04889339 L12,6.3198322 C12,6.26254882 11.9504587,6.2156806 11.8899083,6.2156806 Z" id="路径"></path>
<path d="M3.11111111,3 L8.88888889,3 C8.95,3 9,2.95 9,2.88888889 C9,2.33333333 8.87777778,1.82361111 8.64027778,1.3875 C8.40138889,0.95 8.05,0.598611111 7.6125,0.359722222 C7.17638889,0.122222222 6.66666667,0 6.11111111,0 L5.88888889,0 C5.33333333,0 4.82361111,0.122222222 4.3875,0.359722222 C3.95,0.598611111 3.59861111,0.95 3.35972222,1.3875 C3.12222222,1.82361111 3,2.33333333 3,2.88888889 C3,2.95 3.05,3 3.11111111,3 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="11px" height="11px" viewBox="0 0 11 11" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
<title>辐射</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="质量分析" transform="translate(-653.000000, -225.000000)" fill="#434D6C" fill-rule="nonzero">
<g id="编组-5" transform="translate(420.000000, 215.000000)">
<g id="辐射" transform="translate(233.000000, 10.000000)">
<path d="M11,5.5 C11,7.01863839 10.4637746,8.31629464 9.39009392,9.38928571 C8.31641324,10.4622768 7.01889535,11 5.50122987,11 C3.9835644,11 2.68604651,10.4622768 1.61236583,9.38928571 C0.536225403,8.31629464 0,7.01863839 0,5.5 C0,3.98136161 0.536225403,2.68370536 1.60990608,1.61071429 C2.68481664,0.537723214 3.98110465,0 5.49877013,0 C7.0164356,0 8.31395349,0.537723214 9.38763417,1.61071429 C10.4637746,2.68370536 11,3.98136161 11,5.5 Z M4.74608676,4.20234375 L3.37723614,1.82924107 C2.73647138,2.19631696 2.22730322,2.6984375 1.84973166,3.33805804 C1.47216011,3.97767857 1.28398927,4.68359375 1.28398927,5.45948661 L4.0130814,5.45948661 C4.0130814,4.88370536 4.25782648,4.46506696 4.74608676,4.20234375 L4.74608676,4.20234375 Z M7.57110912,9.15111607 L6.21701699,6.77064732 C6.09033989,6.84799107 5.96612254,6.90200893 5.84559481,6.93024554 C5.72506708,6.95848214 5.58978086,6.97444196 5.44342576,6.97444196 C5.19007156,6.97444196 4.95762522,6.90691964 4.74731664,6.771875 L3.35140877,9.14866071 C4.00201252,9.51573661 4.70919052,9.69866071 5.47663238,9.69866071 C6.23300537,9.69866071 6.93034436,9.51573661 7.57110912,9.15111607 L7.57110912,9.15111607 Z M6.29449911,5.50982143 C6.29449911,5.28024554 6.21701699,5.0875 6.0608229,4.93158482 C5.90585868,4.77566964 5.71399821,4.69709821 5.48647138,4.69709821 C5.26878354,4.69709821 5.07815295,4.77566964 4.91211986,4.93158482 C4.74731664,5.0875 4.66368515,5.28147321 4.66368515,5.50982143 C4.66368515,5.73816964 4.74116726,5.93214286 4.89736136,6.08805804 C5.05232558,6.24397321 5.24910555,6.32254464 5.48647138,6.32254464 C5.70415921,6.32254464 5.89233005,6.24274554 6.05221377,6.08069196 C6.21455725,5.91986607 6.29449911,5.72834821 6.29449911,5.50982143 L6.29449911,5.50982143 Z M9.71601073,5.45948661 C9.71601073,4.71551339 9.52906977,4.021875 9.15641771,3.37734375 C8.78499553,2.73404018 8.26106887,2.21841518 7.58832737,1.82924107 L6.23300537,4.18638393 C6.70896691,4.49084821 6.94633274,4.91439732 6.94633274,5.45948661 L9.71601073,5.45948661 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="16px" viewBox="0 0 18 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
<title>质量分析</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="质量分析" transform="translate(-1174.000000, -153.000000)" fill="#666666" fill-rule="nonzero">
<g transform="translate(1174.000000, 153.000000)" id="路径">
<path d="M5.49732895,6.59297368 L4.52690789,8.21097368 C4.51069737,8.20928947 4.49132895,8.20928947 4.47522368,8.20928947 C4.38153947,8.20928947 4.29269737,8.22392105 4.20880263,8.24971053 L3.54185526,7.58276316 C3.56862283,7.49648789 3.58224922,7.4066744 3.58227632,7.31634211 C3.58227632,6.82381579 3.18175,6.42339474 2.68922368,6.42339474 C2.19669737,6.42339474 1.79638158,6.82392105 1.79638158,7.31634211 C1.79638158,7.48760526 1.84480263,7.64581579 1.92722368,7.7815 L0.955118421,9.39939474 C0.938907895,9.39781579 0.919539474,9.39781579 0.903434211,9.39781579 C0.410907895,9.39781579 0.0104868421,9.79823684 0.0104868421,10.2907632 C0.0104868421,10.7832895 0.411013158,11.1837105 0.903434211,11.1837105 C1.39585526,11.1837105 1.79638158,10.7831842 1.79638158,10.2907632 C1.79637494,10.1266758 1.75113933,9.96576525 1.66564474,9.82571053 L2.63764474,8.20592105 C2.74513486,8.21210792 2.85286526,8.19902484 2.95575,8.16728947 L3.62269737,8.83423684 C3.59592303,8.92047445 3.58229637,9.01025429 3.58227632,9.10055263 C3.58227632,9.59318421 3.98280263,9.9935 4.47522368,9.9935 C4.96764474,9.9935 5.36659211,9.59307895 5.36659211,9.10055263 C5.36659211,8.92939474 5.31817105,8.77118421 5.23585526,8.63560526 C5.23585526,8.63560526 6.24332895,7.01918421 6.25964474,7.01918421 L5.49732895,6.59297368 L5.49732895,6.59297368 Z"></path>
<path d="M5.54522368,8.17255263 L6.51732895,6.55276316 C6.62478421,6.55894194 6.73247863,6.5458589 6.83532895,6.51413158 L9.54227632,9.22107895 C9.51556014,9.30736601 9.50193494,9.39717168 9.50185526,9.4875 C9.50185526,9.98002632 9.90238158,10.3804474 10.3948026,10.3804474 C10.8874342,10.3804474 11.2862763,9.97992105 11.2862763,9.4875 C11.286347,9.32338758 11.2410666,9.16244729 11.1554342,9.02244737 L12.1275395,7.40434211 C12.1436447,7.40602632 12.1630132,7.40602632 12.1792237,7.40602632 C12.67175,7.40602632 13.0721711,7.0055 13.0721711,6.51307895 C13.0721711,6.02065789 12.6716447,5.62171053 12.1792237,5.62171053 C11.6866974,5.62171053 11.2862763,6.02223684 11.2862763,6.51465789 C11.2862763,6.68581579 11.3346974,6.84413158 11.4170132,6.97971053 L10.4464868,8.59781579 C10.4303816,8.59613158 10.4109079,8.59613158 10.3948026,8.59613158 C10.3011184,8.59613158 10.2123816,8.61065789 10.1284868,8.63644737 L7.42164474,5.92960526 C7.44832524,5.84331276 7.46191494,5.7535072 7.46196053,5.66318421 C7.46196053,5.17065789 7.06143421,4.77023684 6.56901316,4.77023684 C6.07659211,4.77023684 5.67606579,5.17076316 5.67606579,5.66318421 C5.67608478,5.82731735 5.72135774,5.98826764 5.80690789,6.12834211 C5.80690789,6.12834211 4.79922368,7.74455263 4.78301316,7.74455263 L5.54522368,8.17255263 L5.54522368,8.17255263 Z"></path>
<path d="M14.1078553,11.9339211 L16.9774342,14.8130789 C17.2421711,15.0639211 17.2421711,15.4901316 16.9865921,15.7457105 C16.7312237,16.0110789 16.3051184,16.0202368 16.0490132,15.7549737 L13.1604868,12.8711842 C12.6018553,13.3352895 11.9768026,13.7190789 11.2948026,13.9982368 C10.4114359,14.3682316 9.4631566,14.5583599 8.50543421,14.5575 C6.37901316,14.5575 4.35227632,13.6146579 2.96932895,11.9807632 C2.27311842,11.1666579 3.32943421,10.4042368 4.12490789,11.2803421 C5.25227632,12.5163421 6.83406579,13.2169737 8.50543421,13.2169737 C9.31522368,13.2169737 10.0823816,13.0561316 10.7782763,12.7672895 C11.4973368,12.4722803 12.1508287,12.03774 12.7010132,11.4887632 L12.7106974,11.4790789 C13.2553289,10.9297105 13.7005921,10.2766579 14.0035395,9.54707895 C14.2876447,8.86044737 14.4489079,8.08865789 14.4489079,7.27865789 C14.4486837,6.51090865 14.3005825,5.75038895 14.0126974,5.03865789 L14.0034342,5.01023684 C13.7109514,4.30133595 13.2830765,3.65625198 12.74375,3.11107895 L12.7105921,3.07823684 C12.1563816,2.53360526 11.5028026,2.08865789 10.7782763,1.79444737 C10.0873289,1.49644737 9.31543421,1.34044737 8.50543421,1.34044737 C6.08575,1.34044737 4.00217105,2.81771053 3.08301316,4.88686842 C2.96932895,5.13339474 2.74206579,5.28013158 2.47185526,5.28013158 L2.46753947,5.28013158 C2.23069737,5.28013158 2.03659211,5.16623684 1.90848684,4.97728947 C1.78080263,4.78276316 1.76638158,4.5555 1.86132895,4.33739474 C3.00732895,1.76644737 5.62153947,0.00465789474 8.50532895,0.00465789474 C9.48532895,0.00465789474 10.4281711,0.203605263 11.2948026,0.563289474 C12.1851184,0.928236842 12.9898553,1.47297368 13.6529079,2.13560526 L13.6903816,2.16918421 C14.3442763,2.83655263 14.8652237,3.62286842 15.22975,4.49444737 L15.2438553,4.53192105 C15.5942763,5.38476316 15.7839605,6.30286842 15.7839605,7.27855263 C15.7844779,8.2311106 15.5961086,9.17431671 15.22975,10.0536053 C14.951938,10.7329631 14.5737631,11.366791 14.1078553,11.9339211 L14.1078553,11.9339211 Z"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="10px" height="12px" viewBox="0 0 10 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 61 (89581) - https://sketch.com -->
<title>安全</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="质量分析" transform="translate(-522.000000, -224.000000)" fill="#434D6C" fill-rule="nonzero">
<g id="编组-5" transform="translate(420.000000, 215.000000)">
<g id="安全" transform="translate(102.000000, 9.000000)">
<path d="M10,1.01217391 C10,1.01217391 10,7.12747826 10,7.12747826 C10,7.49426087 9.9165,7.85895653 9.75000001,8.22156521 C9.583,8.58521739 9.36500001,8.93634783 9.095,9.27756521 C8.825,9.61826087 8.5165,9.94121739 8.17,10.2453913 C7.823,10.550087 7.47150001,10.8213913 7.11500001,11.0593043 C6.758,11.2977391 6.41150001,11.496 6.075,11.6535652 C5.7385,11.8111304 5.4435,11.9191304 5.19,11.978087 C5.19,11.978087 5.06999999,12 5.06999999,12 C5.06999999,12 4.96,11.978087 4.96,11.978087 C4.70000001,11.9191304 4.3985,11.8111304 4.055,11.6535652 C3.7115,11.496 3.355,11.2977391 2.985,11.0593043 C2.61499999,10.8213913 2.252,10.550087 1.895,10.2453913 C1.5385,9.94121739 1.22,9.61826087 0.939999994,9.27756521 C0.659999993,8.93634783 0.433500002,8.58521739 0.260499999,8.22156521 C0.0865000015,7.85895653 0,7.49426087 0,7.12747826 C0,7.12747826 0,1.01217391 0,1.01217391 C0,1.01217391 0.409999999,0.945913043 0.409999999,0.945913043 C0.409999999,0.945913043 5.01,0 5.01,0 C5.01,0 9.70000001,0.945913043 9.70000001,0.945913043 C9.70000001,0.945913043 10,1.01217391 10,1.01217391 C10,1.01217391 10,1.01217391 10,1.01217391 Z M5.0115,0.885391301 C5.0115,0.885391301 4.956,0.873391301 4.956,0.873391301 C4.956,0.873391301 1.008,1.61165217 1.008,1.61165217 C1.008,1.61165217 1.008,5.46991304 1.008,5.46991304 C1.008,5.46991304 5.0115,5.46991304 5.0115,5.46991304 C5.0115,5.46991304 5.0115,0.885391301 5.0115,0.885391301 C5.0115,0.885391301 5.0115,0.885391301 5.0115,0.885391301 Z M8.992,5.46991304 C8.992,5.46991304 5.0115,5.46991304 5.0115,5.46991304 C5.0115,5.46991304 5.0115,10.9617391 5.0115,10.9617391 C5.2675,10.8970435 5.546,10.7984348 5.847,10.6653913 C6.1475,10.5323478 6.4445,10.3753043 6.7375,10.1937391 C7.031,10.0121739 7.313,9.81078261 7.58450001,9.58904347 C7.856,9.36730434 8.0955,9.12886957 8.30500001,8.87478261 C8.51400001,8.62121739 8.68050001,8.35721739 8.80500001,8.08278261 C8.93000001,7.80886957 8.992,7.53026087 8.992,7.248 C8.992,7.248 8.992,5.46991304 8.992,5.46991304 C8.992,5.46991304 8.992,5.46991304 8.992,5.46991304 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -22,11 +22,10 @@ const ProjectIndex = Loadable({
loading: Loading, loading: Loading,
}); });
// 项目详情放在用户和组织下作为二级菜单存在 const ProjectHome = Loadable({
// const ProjectDetail = Loadable({ loader: () => import("./Main/projecthome/Index"),
// loader: () => import("./Main/Detail"), loading: Loading,
// loading: Loading, });
// });
class Index extends Component { class Index extends Component {
@ -60,19 +59,12 @@ class Index extends Component {
<ProjectNew {...this.props} {...props} /> <ProjectNew {...this.props} {...props} />
)} )}
></Route> ></Route>
{/* <Route
path="/:owner/:projectsId"
render={(props) => (
<ProjectDetail {...this.props} {...props} />
)}
></Route> */}
<Route <Route
path="/explore" path="/explore"
render={(props) => ( render={(props) => (
<ProjectIndex {...this.props} {...props} /> <ProjectIndex {...this.props} {...props} />
)} )}
></Route> ></Route>
<Route <Route
path="/" path="/"
render={(props) => ( render={(props) => (
@ -90,10 +82,3 @@ export default withRouter(
parentSelector: ".newMain", parentSelector: ".newMain",
})(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index)))) })(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
); );
// export default withRouter(
// ImageLayerOfCommentHOC({
// imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
// parentSelector: ".newMain",
// })(Index)
// );

View File

@ -1,7 +1,7 @@
import React , { useEffect , useState } from 'react'; import React , { useEffect , useState } from 'react';
import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ } from '../Component/layout'; import { WhiteBack , Box , LongWidth , ShortWidth , Gap , AlignCenter , FlexAJ } from '../Component/layout';
import { Dropdown , Menu , Divider , Spin, Button , Typography } from 'antd'; import { Dropdown , Menu , Divider , Spin, Button , Typography } from 'antd';
import { getImageUrl } from "educoder"; import { getImageUrl , turnbar , returnbar } from "educoder";
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { truncateCommitId } from "../common/util"; import { truncateCommitId } from "../common/util";
import CloneAddress from '../Branch/CloneAddress'; import CloneAddress from '../Branch/CloneAddress';
@ -26,20 +26,6 @@ import RenderHtml from '../../components/render-html';
/** /**
* projectDetail.type:0是托管项目1是镜像项目2是同步镜像项目(为2时不支持在线创建在线上传在线修改在线删除创建合并请求等功能) * projectDetail.type:0是托管项目1是镜像项目2是同步镜像项目(为2时不支持在线创建在线上传在线修改在线删除创建合并请求等功能)
*/ */
const { Paragraph } = Typography;
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
function returnbar(str){
if(str && str.length>0 && str.indexOf("%2F")>-1){
return str.replaceAll('%2F','/');
}
return str;
}
function CoderDepot(props){ function CoderDepot(props){
const [ projectDetail , setProjectDetail ]= useState(undefined); const [ projectDetail , setProjectDetail ]= useState(undefined);
const [ inviteCode , setInviteCode ] = useState(undefined); const [ inviteCode , setInviteCode ] = useState(undefined);
@ -89,6 +75,8 @@ function CoderDepot(props){
} }
if(i && i.length === 0){ if(i && i.length === 0){
setIssuesFlag(false); setIssuesFlag(false);
console.log(bannerList);
} }
} }
},[bannerList]) },[bannerList])
@ -107,7 +95,7 @@ function CoderDepot(props){
useEffect(()=>{ useEffect(()=>{
if(treeValue){ if(treeValue){
setTreeValuePath(treeValue.split('/')); setTreeValuePath(returnbar(treeValue).split('/'));
}else{ }else{
setTreeValuePath(undefined); setTreeValuePath(undefined);
} }
@ -122,13 +110,10 @@ function CoderDepot(props){
setTreeValue(url); setTreeValue(url);
getFileInfo(url,branchName); getFileInfo(url,branchName);
setType("file"); setType("file");
// getReadmeInfo(url,branchName);
// setReadme(undefined);
}else{ }else{
setTreeValue(undefined); setTreeValue(undefined);
getDirInfo(branchName || defaultBranch); getDirInfo(branchName || defaultBranch);
setType("dir"); setType("dir");
// getReadmeInfo('', branchName || defaultBranch);
} }
} }
},[projectsId,owner,pathname,defaultBranch]) },[projectsId,owner,pathname,defaultBranch])
@ -138,7 +123,7 @@ function CoderDepot(props){
if(result && result.data){ if(result && result.data){
const release = { const release = {
"list":result.data.releases, "list":result.data.releases,
"total_count":result.data.releases.length "total_count":result.data.releases && result.data.releases.length
} }
setReleaseVersions(release); setReleaseVersions(release);
} }
@ -169,7 +154,7 @@ function CoderDepot(props){
const url = `/${owner}/${projectsId}/entries.json`; const url = `/${owner}/${projectsId}/entries.json`;
axios.get(url, { axios.get(url, {
params: { ref: branch } params: { ref:branch}
}).then((result) => { }).then((result) => {
if (result) { if (result) {
setCommitCount(result.data.commits_count); setCommitCount(result.data.commits_count);
@ -197,7 +182,7 @@ function CoderDepot(props){
let ele = document.getElementById("ptxt"); let ele = document.getElementById("ptxt");
if(ele){ if(ele){
let h = ele.offsetHeight; let h = ele.offsetHeight;
if( h > 35 ) setHideBtn(true); if( h > 36 ) setHideBtn(true);
} }
} }
},[projectDetail,lastCommit]) },[projectDetail,lastCommit])
@ -207,7 +192,7 @@ function CoderDepot(props){
const url = `/${owner}/${projectsId}/sub_entries.json`; const url = `/${owner}/${projectsId}/sub_entries.json`;
axios.get(url, { axios.get(url, {
params:{ params:{
filepath:path, filepath:returnbar(path),
ref:ref || branchName, ref:ref || branchName,
type type
} }
@ -239,9 +224,9 @@ function CoderDepot(props){
// //
function changeBranch(value){ function changeBranch(value){
let checkvalue = turnbar(value); let checkvalue = value;
let url = `/${owner}/${projectsId}${value && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`; let u = `/${owner}/${projectsId}${checkvalue && `/tree/${checkvalue}`}${treeValue ? `/${treeValue}`:""}`;
props.history.push(url); props.history.push(u);
} }
// //
@ -279,6 +264,7 @@ function CoderDepot(props){
// //
function returnUlr(url){ function returnUlr(url){
let enBranch = turnbar(branchName); let enBranch = turnbar(branchName);
setType('dir');
props.history.push(`/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`); props.history.push(`/${owner}/${projectsId}/tree${enBranch?`/${enBranch}`:""}/${url}`);
} }
// //
@ -286,8 +272,9 @@ function CoderDepot(props){
if(type!=="submodule"){ if(type!=="submodule"){
let enBranch = branchName || defaultBranch; let enBranch = branchName || defaultBranch;
let checkvalue = turnbar(enBranch); let checkvalue = turnbar(enBranch);
let enPath = turnbar(path);
setType(type); setType(type);
props.history.push(`/${owner}/${projectsId}${`/tree/${checkvalue}`}${path?`/${path}`:""}`); props.history.push(`/${owner}/${projectsId}${`/tree/${checkvalue}`}${enPath?`/${enPath}`:""}`);
} }
} }
@ -319,16 +306,16 @@ function CoderDepot(props){
const downloadMenu = ( const downloadMenu = (
<CloneAddress <CloneAddress
http_url={projectDetail && projectDetail.clone_url} http_url={projectDetail && projectDetail.clone_url}
ssh_url = {projectDetail && projectDetail.ssh_url} ssh_url = {(projectDetail && props && props.platform) && projectDetail.ssh_url}
zip_url={zip_url} zip_url={(props && props.platform) && zip_url}
tar_url={tar_url} tar_url={(props && props.platform) && tar_url}
showNotification={props.showNotification}/> showNotification={props.showNotification}/>
) )
// website // website
function okUpdate(d,w,l){ function okUpdate(d,w,l){
const url = `/${owner}/${projectsId}.json`; const url = `/${owner}/${projectsId}.json`;
axios.put(url,{ axios.put(url,{
description:d,website:w,lesson_url:l description:d,website:w || "",lesson_url:l||""
}).then(result=>{ }).then(result=>{
if(result && result.data && result.data.id){ if(result && result.data && result.data.id){
setDesc(result.data.description); setDesc(result.data.description);
@ -337,12 +324,21 @@ function CoderDepot(props){
} }
}) })
} }
function createIssue(){
if(baseOper){
props.history.push(`/${owner}/${projectsId}/issues/new`);
}else{
props.showLoginDialog(`/${owner}/${projectsId}/issues/new`);
}
}
let n = fileInfo && fileInfo.name; let n = fileInfo && fileInfo.name;
const mdFlag = n && n.substring(n.length-3,n.length) === ".md"; const mdFlag = n && n.substring(n.length-3,n.length) === ".md";
const { current_user } = props; const { current_user } = props;
const baseOper = current_user && current_user.login && issuesFlag; const baseOper = current_user && current_user.login && issuesFlag;
const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter" && projectDetail.type !== 2 && pullsFlag; const baseOperate = projectDetail && projectDetail.permission && projectDetail.permission !=="Reporter" && projectDetail.type !== 2 && pullsFlag && props.platform;
const fileOperate = type === "dir" && projectDetail && projectDetail.type !== 2 && ((projectDetail.permission && projectDetail.permission !=="Reporter") || (current_user && current_user.admin)); const fileOperate = type === "dir" && projectDetail && projectDetail.type !== 2 && ((projectDetail.permission && projectDetail.permission !=="Reporter") || (current_user && current_user.admin));
return( return(
@ -404,36 +400,50 @@ function CoderDepot(props){
: :
<React.Fragment> <React.Fragment>
<AlignCenter className="mr20"> <AlignCenter className="mr20">
{
props.platform ?
<Link to={`/${owner}/${projectsId}/branches`} className="iconBtn"> <Link to={`/${owner}/${projectsId}/branches`} className="iconBtn">
<i className="iconfont icon-master_icon font-16"></i> <i className="iconfont icon-master_icon font-16"></i>
<span>分支</span> <span>分支</span>
<span>{projectDetail && projectDetail.branches_count}</span> <span>{projectDetail && projectDetail.branches_count}</span>
</Link> </Link>
:
<span>
<i className="iconfont icon-master_icon font-16 color-grey-6"></i>
<span className="ml3 color-grey-6">分支</span>
<span className="ml3">{projectDetail && projectDetail.branches_count}</span>
</span>
}
</AlignCenter> </AlignCenter>
<AlignCenter className="mr20"> <AlignCenter className="mr20">
{
props.platform ?
<Link to={`/${owner}/${projectsId}/tags`} className="iconBtn"> <Link to={`/${owner}/${projectsId}/tags`} className="iconBtn">
<i className="iconfont icon-biaoqianicon font-16"></i> <i className="iconfont icon-biaoqianicon font-16"></i>
<span>标签</span> <span>标签</span>
<span>{projectDetail && projectDetail.tags_count}</span> <span>{projectDetail && projectDetail.tags_count}</span>
</Link> </Link>:
<span>
<i className="iconfont icon-biaoqianicon font-16 color-grey-6"></i>
<span className="ml3 color-grey-6">标签</span>
<span className="ml3">{projectDetail && projectDetail.tags_count}</span>
</span>
}
</AlignCenter> </AlignCenter>
</React.Fragment> </React.Fragment>
} }
</AlignCenter> </AlignCenter>
<AlignCenter className="depotBtn"> <AlignCenter className="depotBtn">
{
(baseOperate || baseOper) &&
<div className="addOptionBtn"> <div className="addOptionBtn">
{ {
baseOperate && baseOperate &&
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/compare/master...${branchName || defaultBranch}`)} >+ 合并请求</CheckProfile> <CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/compare/${turnbar(branchName || defaultBranch)}...${turnbar(branchName || defaultBranch)}`)} >+ 合并请求</CheckProfile>
} }
{ {
baseOper && issuesFlag &&
<CheckProfile {...props} sureFunc={()=>urlLink(`/${owner}/${projectsId}/issues/new`)} >+ 易修</CheckProfile> <a onClick={createIssue}>+ 疑修</a>
} }
</div> </div>
}
{ fileOperate && { fileOperate &&
<Dropdown <Dropdown
overlay={fileMenu()} overlay={fileMenu()}
@ -454,15 +464,21 @@ function CoderDepot(props){
(dirInfo && dirInfo.length>0) || fileInfo ? (dirInfo && dirInfo.length>0) || fileInfo ?
<div className="listtable"> <div className="listtable">
{ {
lastCommit && ((lastCommit && lastCommit.message) || lastCommitAuthor) &&
<div className="listtablehead"> <div className="listtablehead">
<User url={getImageUrl(`/${lastCommitAuthor && lastCommitAuthor.image_url}`)} name={lastCommitAuthor && lastCommitAuthor.name} id={lastCommitAuthor && lastCommitAuthor.id} login={lastCommitAuthor && lastCommitAuthor.login}/> {
lastCommitAuthor &&
<User url={getImageUrl(`/${lastCommitAuthor.image_url}`)} name={lastCommitAuthor.name} id={lastCommitAuthor.id} login={lastCommitAuthor.login}/>
}
{
lastCommit && lastCommit.message &&
<div className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}> <div className={hideBtn && hide ? "ellipsistxt hidetxt" :"ellipsistxt"}>
<pre id="ptxt"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(lastCommit.sha)}`}><RenderHtml value={lastCommit.message}/></Link></pre> <pre id="ptxt"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(lastCommit.sha)}`}><RenderHtml value={lastCommit && lastCommit.message}/></Link></pre>
</div> </div>
}
{ hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> } { hideBtn && <span className="ellipsis" onClick={()=>changeHide(hide)}><i className="iconfont icon-shenglvehao"></i></span> }
<span className="ml20 color-grey-6 font-12 mt3">{lastCommit.time_from_now}</span> <span className="ml20 color-grey-6 font-12 mt3">{lastCommit && lastCommit.time_from_now}</span>
{ {
commitCount ? commitCount ?
<Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-3"style={{height:"28px",lineHeight:"28px"}}> <Link to={`/${owner}/${projectsId}/commits/branch/${turnbar(branchName || defaultBranch)}`} className="ml20 color-grey-3"style={{height:"28px",lineHeight:"28px"}}>
@ -481,6 +497,7 @@ function CoderDepot(props){
item={item} item={item}
projectsId={projectsId} projectsId={projectsId}
goToSubRoot={goToSubRoot} goToSubRoot={goToSubRoot}
platform={props.platform}
/> />
) )
}) })
@ -505,7 +522,7 @@ function CoderDepot(props){
(dirInfo && dirInfo.length === 0) && !fileInfo ? <Nodata _html="暂未发现文件"/> :"" (dirInfo && dirInfo.length === 0) && !fileInfo ? <Nodata _html="暂未发现文件"/> :""
} }
{/* readme文件显示(显示文件详情时不显示readme文件) */} {/* readme文件显示(显示文件详情时不显示readme文件) */}
{ (readme && readme.content) ? <ReadMe ChangeFile={ChangeFile} readme={readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" } { (readme && readme.replace_content) ? <ReadMe ChangeFile={ChangeFile} readme={readme} operate={props && (props.isManager || props.isDeveloper) && projectDetail.type !==2 } history={props.history} /> :"" }
</div> </div>
</LongWidth> </LongWidth>
{ {
@ -516,10 +533,10 @@ function CoderDepot(props){
<FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于 <FlexAJ className="font-18 color-ooo mb20" style={{lineHeight:"28px"}}>关于
{ {
projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") && projectDetail.permission && (projectDetail.permission==="Admin" || projectDetail.permission==="Owner" || projectDetail.permission==="Manager") &&
<i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15"></i> <i onClick={()=>setOpenModal(true)} className="iconfont icon-a-shezhi color-grey-9 font-15 pointer"></i>
} }
</FlexAJ> </FlexAJ>
{desc && <p className="font-14 color-grey-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}}>{desc}</p>} {desc && <p className="font-14 color-grey-3 mb15 task-hide-2" style={{lineHeight:"24px",WebkitLineClamp:"4",textAlign:"justify",wordBreak:"break-all"}} title={desc}>{desc}</p>}
{ {
website && website &&
<div className="color-grey-6 df pinfos mb5"> <div className="color-grey-6 df pinfos mb5">
@ -539,7 +556,7 @@ function CoderDepot(props){
projectDetail && projectDetail.license_name && projectDetail && projectDetail.license_name &&
<div className="pinfos"> <div className="pinfos">
<i className="iconfont icon-xieyiicon font-16 mr10"></i> <i className="iconfont icon-xieyiicon font-16 mr10"></i>
<Link to={`/${owner}/${projectsId}/tree/${branchName || defaultBranch}/LICENSE`} className="color-grey-6">{projectDetail.license_name}</Link> <Link to={`/${owner}/${projectsId}/tree/${turnbar(branchName || defaultBranch)}/LICENSE`} className="color-grey-6">{projectDetail.license_name}</Link>
</div> </div>
} }
</div> </div>
@ -560,7 +577,7 @@ function CoderDepot(props){
} }
{/* 发布 */} {/* 发布 */}
{ {
releaseVersions && releaseVersions && props.platform &&
<React.Fragment> <React.Fragment>
<Divider /> <Divider />
<Releases <Releases
@ -573,17 +590,9 @@ function CoderDepot(props){
</React.Fragment> </React.Fragment>
} }
{/* 贡献者 */} {/* 贡献者 */}
{ <Contributors owner={owner} projectsId={projectsId} />
projectDetail && projectDetail.contributors && projectDetail.contributors.total_count >0 &&
<Contributors contributors={projectDetail.contributors} owner={owner} projectsId={projectsId} />
}
{/* 语言 */} {/* 语言 */}
{ projectDetail && projectDetail.languages && <LanguagePower owner={owner} projectsId={projectsId}/>
<React.Fragment>
<Divider />
<LanguagePower languages={projectDetail.languages}/>
</React.Fragment>
}
</Gap> </Gap>
</ShortWidth> </ShortWidth>
} }

View File

@ -8,17 +8,27 @@ const typeIco = {
"dir":"icon-wenjianjia4 font-15 color-blue_4C" "dir":"icon-wenjianjia4 font-15 color-blue_4C"
} }
function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId }){ function CoderDepotCatalogue({item , goToSubRoot , owner , projectsId , platform }){
//
function getMessage(value){
let str = value.indexOf('\n') > 0 && value.split('\n');
return str[0];
}
return( return(
<li> <li>
<span> <span>
{
(!platform && item.image_type) ?
<span><i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}</span>
:
<a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}> <a onClick={()=>goToSubRoot(item.path,item.type,item.name)} className={item.type === "submodule" && "submoduleStyle"}>
<i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name} <i className={`iconfont ${typeIco[`${item.type}`]} mr8`}></i>{item.name}
</a> </a>
}
</span> </span>
<span title="init project"> <span title="init project">
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.commit && item.commit.sha}`)}`} title={item.commit && item.commit.message}> <Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.commit && item.commit.sha}`)}`} title={item.commit && item.commit.message}>
{item.commit && item.commit.message} {getMessage(item.commit && item.commit.message)}
</Link> </Link>
</span> </span>
<span title={item.commit && item.commit.created_at}>{item.commit && item.commit.time_from_now}</span> <span title={item.commit && item.commit.created_at}>{item.commit && item.commit.time_from_now}</span>

View File

@ -1,5 +1,5 @@
import { result } from 'lodash';
import React from 'react'; import React from 'react';
import { returnbar } from 'educoder';
function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , identifier}){ function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , identifier}){
@ -17,9 +17,9 @@ function CoderDepotPath({treeValuePath , returnUlr , returnMain , getPathUrl , i
<React.Fragment> <React.Fragment>
{ {
key === treeValuePath.length-1 ? key === treeValuePath.length-1 ?
<span className="color-grey-6 subFileName" key={key}>{item}</span> <span className="color-grey-6 subFileName" key={key}>{returnbar(item)}</span>
: :
<a onClick={()=>returnUlr(`${getPathUrl(treeValuePath,key+1)}`)} className="color-blue subFileName">{item}</a> <a onClick={()=>returnUlr(`${getPathUrl(treeValuePath,key+1)}`)} className="color-blue subFileName">{returnbar(item)}</a>
} }
</React.Fragment> </React.Fragment>
); );

View File

@ -11,8 +11,8 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
const [ content ,setContent ] = useState(undefined); const [ content ,setContent ] = useState(undefined);
useEffect(()=>{ useEffect(()=>{
if(readme && readme.content){ if(readme && readme.replace_content){
setContent(readme.content); setContent(readme.replace_content);
}else{ }else{
setContent(undefined); setContent(undefined);
} }
@ -41,7 +41,7 @@ function CoderDepotReadme({ operate , history , readme , ChangeFile }){
return( return(
<div className="commonBox readBox" id="readme"> <div className="commonBox readBox" id="readme">
<Anchor offsetTop={70} targetOffset={160}> <Anchor offsetTop={58}>
<div className="commonBox-title boxTitle"> <div className="commonBox-title boxTitle">
<AlignCenter> <AlignCenter>
<Dropdown overlay={menu()} trigger={['hover']} overlayClassName="menuslist"> <Dropdown overlay={menu()} trigger={['hover']} overlayClassName="menuslist">

View File

@ -3,15 +3,10 @@ import { Link } from "react-router-dom";
import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd'; import { Dropdown , Menu , Icon , Tooltip , Spin } from 'antd';
import { truncateCommitId } from '../common/util'; import { truncateCommitId } from '../common/util';
import { getBranch } from '../GetData/getData'; import { getBranch } from '../GetData/getData';
import { turnbar } from "educoder";
import Nodata from '../Nodata'; import Nodata from '../Nodata';
import './list.scss'; import './list.scss';
function turnbar(str){
if(str && str.length>0 && str.indexOf("/")>-1){
return str.replaceAll('/','%2F');
}
return str;
}
export default ((props)=>{ export default ((props)=>{
const [ data , setData ] =useState(undefined); const [ data , setData ] =useState(undefined);
const [ isSpin , setIsSpin ] =useState(true); const [ isSpin , setIsSpin ] =useState(true);
@ -73,7 +68,6 @@ export default ((props)=>{
<Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item> <Menu.Item key={'1'}><a href={tar_url}>TAR.GZ</a></Menu.Item>
</Menu> </Menu>
) )
return( return(
<React.Fragment> <React.Fragment>
<div className="main"> <div className="main">

View File

@ -1,6 +1,6 @@
import React , { Component } from 'react'; import React , { Component } from 'react';
import { Spin , Pagination, Timeline } from 'antd'; import { Spin , Pagination, Timeline } from 'antd';
import { getImageUrl } from 'educoder'; import { getImageUrl , returnbar } from 'educoder';
import { truncateCommitId ,timeFormat } from '../common/util'; import { truncateCommitId ,timeFormat } from '../common/util';
import { AlignTop } from '../Component/layout'; import { AlignTop } from '../Component/layout';
import SelectBranch from '../Branch/Select'; import SelectBranch from '../Branch/Select';
@ -15,12 +15,6 @@ import CopyTool from '../Component/CopyTool';
import './tree/Index.scss' import './tree/Index.scss'
function returnbar(str){
if(str && str.length>0 && str.indexOf("%2F")>-1){
return str.replaceAll('%2F','/');
}
return str;
}
//代码库--提交页面 //代码库--提交页面
class CoderRootCommit extends Component{ class CoderRootCommit extends Component{
@ -79,7 +73,7 @@ class CoderRootCommit extends Component{
isSpining:true, isSpining:true,
page:realPage page:realPage
}) })
this.getCommitList( branchName , realPage , limit ); this.getCommitList( returnbar(branchName) , realPage , limit );
} }
getCommitList=(branch , page , limit)=>{ getCommitList=(branch , page , limit)=>{
@ -133,7 +127,7 @@ class CoderRootCommit extends Component{
render(){ render(){
const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state; const { commitDatas , dataCount , limit , page , isSpining , branchList } = this.state;
const { projectDetail, commit_class , defaultBranch } = this.props; const { projectDetail, commit_class , defaultBranch , platform } = this.props;
const { projectsId , owner , branchName } = this.props.match.params; const { projectsId , owner , branchName } = this.props.match.params;
let branch = returnbar(branchName || defaultBranch); let branch = returnbar(branchName || defaultBranch);
return( return(
@ -159,7 +153,16 @@ class CoderRootCommit extends Component{
<div className="commitList-item f-wrap-between"> <div className="commitList-item f-wrap-between">
<div> <div>
<AlignTop> <AlignTop>
<div className="commitDesc"><Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd"><RenderHtml value={item.message}/></Link></div> <div className="commitDesc">
{
platform ?
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`} className="font-14 color-grey-3 font-bd">
<RenderHtml value={item.message}/>
</Link>
:
<RenderHtml value={item.message}/>
}
</div>
</AlignTop> </AlignTop>
<p className="f-wrap-alignCenter mt15 pb5"> <p className="f-wrap-alignCenter mt15 pb5">
<User <User
@ -176,7 +179,12 @@ class CoderRootCommit extends Component{
<div> <div>
<span className="treecopy-cont shadow"> <span className="treecopy-cont shadow">
<img src={Tree} alt="sha" width={"16px"}/> <img src={Tree} alt="sha" width={"16px"}/>
{
platform ?
<Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link> <Link to={`/${owner}/${projectsId}/commits/${truncateCommitId(`${item.sha}`)}`}>{truncateCommitId(`${item.sha}`)}</Link>
:
<span style={{color:"#466AFF",cursor:"default"}}>{truncateCommitId(`${item.sha}`)}</span>
}
<input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/> <input type="text" id={`value${k}`} value={`${truncateCommitId(`${item.sha}`)}`}/>
</span> </span>
<CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/> <CopyTool beforeText="复制commit id" afterText="复制成功" inputId={`value${k}`}/>

View File

@ -21,7 +21,7 @@ class CoderRootFileDetail extends Component {
value: undefined, value: undefined,
language: undefined, language: undefined,
languages: undefined, languages: undefined,
description: props.detail.content, description: props.detail.replace_content,
menuList:undefined menuList:undefined
}; };
} }
@ -36,12 +36,12 @@ class CoderRootFileDetail extends Component {
}; };
componentDidUpdate=(prevProps)=>{ componentDidUpdate=(prevProps)=>{
const { content } = this.props && this.props.detail; const { replace_content } = this.props && this.props.detail;
const prevcontent = prevProps.detail && prevProps.detail.content; const prevcontent = prevProps.detail && prevProps.detail.replace_content;
if (content && prevcontent) { if (replace_content && prevcontent) {
if (prevcontent !== content){ if (prevcontent !== replace_content){
this.setState({ this.setState({
description: content description: replace_content
}); });
} }
} }
@ -215,7 +215,7 @@ class CoderRootFileDetail extends Component {
const Option = Select.Option; const Option = Select.Option;
return ( return (
<React.Fragment> <React.Fragment>
<Anchor className="griditemAnchor" offsetTop={70}> <Anchor className="griditemAnchor" offsetTop={58}>
<div className="griditemCate"> <div className="griditemCate">
{ {
md && readOnly && md && readOnly &&
@ -319,7 +319,7 @@ class CoderRootFileDetail extends Component {
{...this.state} {...this.state}
language={language ? language : "javascript"} language={language ? language : "javascript"}
filepath={`/${detail.path}`} filepath={`/${detail.path}`}
content={description} content={detail.content}
readOnly={readOnly} readOnly={readOnly}
editorType="update" editorType="update"
currentBranch={currentBranch} currentBranch={currentBranch}

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