diff --git a/app/assets/javascripts/trustie_hacks.js b/app/assets/javascripts/trustie_hacks.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/trustie_hacks.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/trustie_hacks.scss b/app/assets/stylesheets/trustie_hacks.scss new file mode 100644 index 000000000..78786cfb3 --- /dev/null +++ b/app/assets/stylesheets/trustie_hacks.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the trustie_hacks controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/competitions/certificates_controller.rb b/app/controllers/competitions/certificates_controller.rb index 68dad41c1..7572d8bbb 100644 --- a/app/controllers/competitions/certificates_controller.rb +++ b/app/controllers/competitions/certificates_controller.rb @@ -1,6 +1,11 @@ class Competitions::CertificatesController < Competitions::BaseController def personal - prize_user = CompetitionPrizeUser.find_by!(user: current_user, id: params[:id]) + prize_user = + if current_user.admin_or_business? + CompetitionPrizeUser.find(params[:id]) + else + CompetitionPrizeUser.find_by!(user: current_user, id: params[:id]) + end return render_not_found unless prize_user.certificate_exist? team = prize_user.competition_team @@ -12,7 +17,7 @@ class Competitions::CertificatesController < Competitions::BaseController def team team = CompetitionTeam.find(params[:id]) - return render_forbidden unless team.team_members.exists?(user_id: current_user.id) + return render_forbidden unless current_user.admin_or_business? || team.team_members.exists?(user_id: current_user.id) return render_not_found unless team.certificate_exists? prize = team.competition_prize_users.first.competition_prize diff --git a/app/controllers/competitions/prizes_controller.rb b/app/controllers/competitions/prizes_controller.rb index e8119a67f..c87026042 100644 --- a/app/controllers/competitions/prizes_controller.rb +++ b/app/controllers/competitions/prizes_controller.rb @@ -1,8 +1,10 @@ class Competitions::PrizesController < Competitions::BaseController before_action :require_prize_user! + helper_method :current_prize_user + def show - self_prizes = current_competition.competition_prize_users.where(user_id: current_user.id).includes(:competition_team).order(:competition_prize_id) + self_prizes = current_competition.competition_prize_users.where(user_id: current_prize_user.id).includes(:competition_team).order(:competition_prize_id) @leader = self_prizes.any?{ |prize_user| prize_user.leader? && prize_user.competition_prize.category == 'bonus' } # 是否为队长并且有奖金奖励 if @leader @@ -22,8 +24,13 @@ class Competitions::PrizesController < Competitions::BaseController private def require_prize_user! - return if current_competition.competition_prize_users.exists?(user: current_user) + return if current_competition.competition_prize_users.exists?(user: current_prize_user) + return if current_user.admin_or_business? || current_user.id == current_prize_user.id render_forbidden end + + def current_prize_user + @_current_prize_user ||= User.find(params[:user_id]) + end end \ No newline at end of file diff --git a/app/controllers/trustie_hacks_controller.rb b/app/controllers/trustie_hacks_controller.rb new file mode 100644 index 000000000..f427caf72 --- /dev/null +++ b/app/controllers/trustie_hacks_controller.rb @@ -0,0 +1,48 @@ +class TrustieHacksController < ApplicationController + before_action :require_admin, :except => [:index] + before_action :require_login, :except => [:index] + before_action :find_hackathon + before_action :find_hack, :except => [:create, :index] + + def index + ## 分页参数 + page = params[:page] || 1 + limit = params[:limit] || 16 + + hacks = @hackathon.trustie_hacks + @hackathon_users_count = hacks ? 0 : hacks.sum(:hack_users_count) + + @hacks = hacks.page(page).per(limit) + + end + + def edit ;end + + def create + @hackathon.trustie_hacks.create!(name: params[:name], description: params[:description]) + render_ok + end + + def update + @hack.update_attributes(name: params[:name], description: params[:description]) + end + + def edit_hackathon ;end + + def update_hackathon + @hackathon.update_attributes(name: params[:name], description: params[:description]) + end + + + private + + def find_hackathon + @hackathon = TrustieHackathon.first || + TrustieHackathon.create(name: params[:name], description: params[:description]) + end + + def find_hack + @hack = TrustieHack.find params[:id] + end + +end diff --git a/app/helpers/trustie_hacks_helper.rb b/app/helpers/trustie_hacks_helper.rb new file mode 100644 index 000000000..3ebe3a9cc --- /dev/null +++ b/app/helpers/trustie_hacks_helper.rb @@ -0,0 +1,2 @@ +module TrustieHacksHelper +end diff --git a/app/models/hack_user.rb b/app/models/hack_user.rb new file mode 100644 index 000000000..7b8030841 --- /dev/null +++ b/app/models/hack_user.rb @@ -0,0 +1,3 @@ +class HackUser < ApplicationRecord + belongs_to :trustie_hack, counter_cache: true +end diff --git a/app/models/trustie_hack.rb b/app/models/trustie_hack.rb new file mode 100644 index 000000000..898bf2195 --- /dev/null +++ b/app/models/trustie_hack.rb @@ -0,0 +1,4 @@ +class TrustieHack < ApplicationRecord + has_many :hack_users, :dependent => :destroy + belongs_to :trustie_hackathon, counter_cache: true +end diff --git a/app/models/trustie_hackathon.rb b/app/models/trustie_hackathon.rb new file mode 100644 index 000000000..7269e7856 --- /dev/null +++ b/app/models/trustie_hackathon.rb @@ -0,0 +1,5 @@ +class TrustieHackathon < ApplicationRecord + + has_many :trustie_hacks, :dependent => :destroy + +end diff --git a/app/views/competitions/prizes/show.json.jbuilder b/app/views/competitions/prizes/show.json.jbuilder index 9bb6b8256..18113a7ed 100644 --- a/app/views/competitions/prizes/show.json.jbuilder +++ b/app/views/competitions/prizes/show.json.jbuilder @@ -5,7 +5,7 @@ if @leader json.bank_account_editable @bank_account_editable end -json.all_certified current_user.all_certified? +json.all_certified current_prize_user.all_certified? json.personal_certifications do json.array! @self_prizes do |prize_user| json.url personal_competition_certificate_path(current_competition.identifier, prize_user) diff --git a/app/views/trustie_hacks/edit.json.jbuilder b/app/views/trustie_hacks/edit.json.jbuilder new file mode 100644 index 000000000..9ee35736f --- /dev/null +++ b/app/views/trustie_hacks/edit.json.jbuilder @@ -0,0 +1 @@ +json.(@hack, :id, :name, :description) \ No newline at end of file diff --git a/app/views/trustie_hacks/edit_hackathon.json.jbuilder b/app/views/trustie_hacks/edit_hackathon.json.jbuilder new file mode 100644 index 000000000..52eda0fb8 --- /dev/null +++ b/app/views/trustie_hacks/edit_hackathon.json.jbuilder @@ -0,0 +1,2 @@ +json.name @hackathon&.name +json.description @hackathon&.description \ No newline at end of file diff --git a/app/views/trustie_hacks/index.json.jbuilder b/app/views/trustie_hacks/index.json.jbuilder new file mode 100644 index 000000000..05e3fd7c7 --- /dev/null +++ b/app/views/trustie_hacks/index.json.jbuilder @@ -0,0 +1,9 @@ +json.hackathon do + json.(@hackathon, :id, :name, :description) + json.hackathon_users_count @hackathon_users_count +end + +json.hacks @hacks do |hack| + json.(hack, :id, :name, :description, :hack_users_count) +end + diff --git a/config/routes.rb b/config/routes.rb index e886d1a42..c0231a701 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -513,7 +513,6 @@ Rails.application.routes.draw do post :join_exercise_banks # 加入习题集 post :publish # 立即发布 post :end_exercise # 立即截止 -`` end end @@ -875,6 +874,14 @@ Rails.application.routes.draw do resources :searchs, only: [:index] end + + resources :trustie_hacks, path: :osshackathon do + collection do + get :edit_hackathon + post :update_hackathon + end + + end end namespace :admins do diff --git a/db/migrate/20191105093740_create_trustie_hackathons.rb b/db/migrate/20191105093740_create_trustie_hackathons.rb new file mode 100644 index 000000000..4e806d346 --- /dev/null +++ b/db/migrate/20191105093740_create_trustie_hackathons.rb @@ -0,0 +1,10 @@ +class CreateTrustieHackathons < ActiveRecord::Migration[5.2] + def change + create_table :trustie_hackathons do |t| + t.string :name + t.string :description + t.integer :trustie_hacks_count, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20191105093919_create_trustie_hacks.rb b/db/migrate/20191105093919_create_trustie_hacks.rb new file mode 100644 index 000000000..d4f65516e --- /dev/null +++ b/db/migrate/20191105093919_create_trustie_hacks.rb @@ -0,0 +1,11 @@ +class CreateTrustieHacks < ActiveRecord::Migration[5.2] + def change + create_table :trustie_hacks do |t| + t.string :name + t.string :description + t.references :user + t.integer :hack_users_count, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20191105094146_create_hack_users.rb b/db/migrate/20191105094146_create_hack_users.rb new file mode 100644 index 000000000..2ef654b5b --- /dev/null +++ b/db/migrate/20191105094146_create_hack_users.rb @@ -0,0 +1,9 @@ +class CreateHackUsers < ActiveRecord::Migration[5.2] + def change + create_table :hack_users do |t| + t.references :user + t.references :trustie_hack + t.timestamps + end + end +end diff --git a/public/react/src/App.js b/public/react/src/App.js index 84b5c0ae4..6b4ba7399 100644 --- a/public/react/src/App.js +++ b/public/react/src/App.js @@ -268,6 +268,12 @@ const NewCompetitions=Loadable({ loading: Loading, }) +//黑客松定制竞赛 +const Osshackathon=Loadable({ + loader: () => import('./modules/osshackathon/Osshackathon'), + loading: Loading, +}) + const Messagerouting= Loadable({ loader: () => import('./modules/message/js/Messagerouting'), loading: Loading, @@ -497,6 +503,18 @@ class App extends Component { } }> + {/*黑客松定制竞赛*/} + { + return( + + ) + } + } + /> + {/*认证*/} diff --git a/public/react/src/modules/courses/Resource/index.js b/public/react/src/modules/courses/Resource/index.js index d5b3b5ad2..c63348c83 100644 --- a/public/react/src/modules/courses/Resource/index.js +++ b/public/react/src/modules/courses/Resource/index.js @@ -1002,15 +1002,14 @@ class Fileslists extends Component{ } > - {this.props.isAdmin()||this.props.isStudent() ? 0?:""} + />:"":""} { diff --git a/public/react/src/modules/courses/coursesPublic/SelectResource.js b/public/react/src/modules/courses/coursesPublic/SelectResource.js index a49319eca..edc1fc81b 100644 --- a/public/react/src/modules/courses/coursesPublic/SelectResource.js +++ b/public/react/src/modules/courses/coursesPublic/SelectResource.js @@ -1,5 +1,5 @@ import React,{ Component } from "react"; -import { Modal,Checkbox,Select,Input,Spin,Icon,Radio,DatePicker} from "antd"; +import { Modal,Checkbox,Select,Input,Spin,Icon,Radio,DatePicker,Tooltip} from "antd"; import locale from 'antd/lib/date-picker/locale/zh_CN'; import axios from'axios'; import {handleDateString} from 'educoder'; @@ -421,8 +421,9 @@ class Selectresource extends Component{ 立即发布 + - 延迟发布 + 延期发布 + (按照设置的时间定时发布) diff --git a/public/react/src/modules/courses/coursesPublic/SelectSetting.js b/public/react/src/modules/courses/coursesPublic/SelectSetting.js index c557fe8df..929a19ffa 100644 --- a/public/react/src/modules/courses/coursesPublic/SelectSetting.js +++ b/public/react/src/modules/courses/coursesPublic/SelectSetting.js @@ -529,25 +529,28 @@ class Selectsetting extends Component{ 立即发布 - - 延迟发布 - - + + + 延期发布 + + + + (按照设置的时间定时发布) diff --git a/public/react/src/modules/courses/coursesPublic/sendResource.js b/public/react/src/modules/courses/coursesPublic/sendResource.js index 2904d42e1..ba4526c82 100644 --- a/public/react/src/modules/courses/coursesPublic/sendResource.js +++ b/public/react/src/modules/courses/coursesPublic/sendResource.js @@ -398,8 +398,9 @@ class Sendresource extends Component{ 立即发布 + - 延迟发布 + 延期发布 + (按照设置的时间定时发布) diff --git a/public/react/src/modules/courses/exercise/new/SingleEditor.js b/public/react/src/modules/courses/exercise/new/SingleEditor.js index 08ab4fd90..0b1b7599a 100644 --- a/public/react/src/modules/courses/exercise/new/SingleEditor.js +++ b/public/react/src/modules/courses/exercise/new/SingleEditor.js @@ -304,7 +304,7 @@ class SingleEditor extends Component{ 标准答案: : - 请点击正确选项 + "" } diff --git a/public/react/src/modules/osshackathon/Osshackathon.css b/public/react/src/modules/osshackathon/Osshackathon.css new file mode 100644 index 000000000..54287ccae --- /dev/null +++ b/public/react/src/modules/osshackathon/Osshackathon.css @@ -0,0 +1,40 @@ +.registrationback{ + height: 368px; + width: 1200px; + -ms-flex-direction: column; + flex-direction: column; +} +.textright{ + text-align: right; +} + +.Osshackathonfont{ + width: 80px; + height: 28px; + font-size: 20px; + font-weight:600; + color: rgba(5,16,26,1); + line-height: 28px; +} + +.Osshackathonfontlist{ + width:1188px; + font-size:14px; + font-weight:400; + color:rgba(102,102,102,1); + line-height:24px; +} +.OsshackathonCard{ + width:1200px; + height:150px; + background:rgba(248,248,248,1); + border:1px solid rgba(235,235,235,1); +} + +.OsshackathonCardtitle{ + height:24px; + font-size:24px; + font-weight:400; + color:rgba(5,16,26,1); + line-height:24px; +} \ No newline at end of file diff --git a/public/react/src/modules/osshackathon/Osshackathon.js b/public/react/src/modules/osshackathon/Osshackathon.js new file mode 100644 index 000000000..f2bf71e32 --- /dev/null +++ b/public/react/src/modules/osshackathon/Osshackathon.js @@ -0,0 +1,128 @@ +import React, {Component} from 'react'; +import axios from 'axios'; +import {SnackbarHOC, WordsBtn,getImageUrl} from 'educoder'; +import {Row, Col,Input,Divider,Card,Button} from 'antd'; +import { TPMIndexHOC } from '../tpm/TPMIndexHOC'; +import { CNotificationHOC } from '../courses/common/CNotificationHOC'; +import './Osshackathon.css'; +const { Search } = Input; +class Osshackathon extends Component { + + constructor(props) { + super(props) + this.state = { + + } + } + + componentDidMount() { + + } + + componentDidUpdate = (prevProps) => { + + + } + + render() { + // let {} = this.state; + + return ( +
+ +
+ +
+ + + + console.log(value)} + /> + + +
+ 报名整数:280个 +
+ +
+ + + + 大赛介绍 + + + + + + + + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nonne merninisti licere mihi ista + probare, quae sunt a te dicta? Refert tamen, quo modo. +

+ + {/*学生身份*/} + + + + + 大赛介绍 + + + + + + + +

Card content

+

Card content

+
+ + {/*教师身份*/} + + + + + 大赛介绍 + + + + + + +

Card content

+

Card content

+
+ + +
+ +
+ ) + } + +} + + + +export default CNotificationHOC() (TPMIndexHOC (Osshackathon)) ; \ No newline at end of file diff --git a/public/react/src/modules/paths/PathDetail/Modifytext.js b/public/react/src/modules/paths/PathDetail/Modifytext.js index ca12659a9..c7d95cd1a 100644 --- a/public/react/src/modules/paths/PathDetail/Modifytext.js +++ b/public/react/src/modules/paths/PathDetail/Modifytext.js @@ -54,6 +54,12 @@ class Modifytext extends Component { } + //取消 + hideUpdating = () => { + this.props.modifysy(3); + + } + render() { const {getFieldDecorator} = this.props.form; @@ -96,7 +102,7 @@ class Modifytext extends Component { } .settingFormsy input { - width: 275px; + width: 200px; height: 32px; } .settingFormsy input.validateInput { @@ -147,9 +153,18 @@ class Modifytext extends Component {

-
- {/*
this.yhBanksfalse()}>

取消

*/} - +
+ +
diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index b393d1bb6..d23cf5634 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -3,7 +3,7 @@ import {getImageUrl,markdownToHTML, configShareForCustom} from 'educoder'; import DetailTop from './DetailTop.js'; import DetailCards from './DetailCards.js' import AddCollaborators from "./addCollaborators.js"; -import {Icon,Tooltip} from 'antd'; +import {Icon, Tooltip, Popover} from 'antd'; import { BrowserRouter as Router, Route, Link } from "react-router-dom"; import { DragDropContext , Draggable, Droppable} from 'react-beautiful-dnd'; import '../../paths/ShixunPaths.css'; @@ -498,6 +498,10 @@ class PathDetailIndex extends Component{ }).catch((error) => { console.log(error); }) + } else if (i === 3) { + this.setState({ + modify: false + }) } } @@ -506,6 +510,12 @@ class PathDetailIndex extends Component{ team_title: name }) } + + maincontent = () => { + return (
+
this.modifysy(1)}>重命名
+
) + } render(){ this.updatamakedown("shixuns_propaedeutics"); @@ -664,17 +674,28 @@ class PathDetailIndex extends Component{ members ===undefined ?"":members === null ?"":
{ - detailInfoList === undefined ? "" : detailInfoList.allow_add_member === true ? + detailInfoList === undefined ? +

{team_title}

: detailInfoList.allow_add_member === true ? ( modify === false ? -

this.modifysy(1)}>{team_title}

+ +
+

this.modifysy(1)}>{team_title}

+ + + +
: this.modifysy(i)} setteam_title={(name) => this.setteam_title(name)}> ) - : "" + :

{team_title}

} { members===undefined? diff --git a/spec/controllers/trustie_hacks_controller_spec.rb b/spec/controllers/trustie_hacks_controller_spec.rb new file mode 100644 index 000000000..bad650328 --- /dev/null +++ b/spec/controllers/trustie_hacks_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHacksController, type: :controller do + +end diff --git a/spec/helpers/trustie_hacks_helper_spec.rb b/spec/helpers/trustie_hacks_helper_spec.rb new file mode 100644 index 000000000..6d48a0072 --- /dev/null +++ b/spec/helpers/trustie_hacks_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the TrustieHacksHelper. For example: +# +# describe TrustieHacksHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe TrustieHacksHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/hack_user_spec.rb b/spec/models/hack_user_spec.rb new file mode 100644 index 000000000..5bd8221dc --- /dev/null +++ b/spec/models/hack_user_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe HackUser, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/trustie_hack_spec.rb b/spec/models/trustie_hack_spec.rb new file mode 100644 index 000000000..d4423cd2c --- /dev/null +++ b/spec/models/trustie_hack_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHack, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/trustie_hackathon_spec.rb b/spec/models/trustie_hackathon_spec.rb new file mode 100644 index 000000000..7334fd52c --- /dev/null +++ b/spec/models/trustie_hackathon_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHackathon, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end