@@ -10,6 +10,7 @@ import TooltipMixin from '../../mixins/tooltip';
1010import { t } from '../../locale' ;
1111
1212import Modal , { closeStyle } from 'simple-react-modal' ;
13+ import XHR from 'xhr.js' ;
1314
1415const Snooze = {
1516 // all values in minutes
@@ -28,9 +29,13 @@ const GroupActions = React.createClass({
2829 container : 'body' ,
2930 } ) ,
3031 ] ,
32+ xhr : new XHR ( false ) ,
3133 getInitialState ( ) {
3234 return {
33- showRedmineModel : false
35+ showRedmineModel : false ,
36+ redmineProjects : [ ] ,
37+ redmineTrackers : [ ] ,
38+ redmineVersions : [ ]
3439 } ;
3540 } ,
3641 onDelete ( ) {
@@ -93,9 +98,70 @@ const GroupActions = React.createClass({
9398 } ,
9499
95100 // add by hzwangzhiwei @20160923, do redmine order.
101+ // 打开remine提单窗口
96102 onRedmineOrderClick ( evt ) {
97- this . setState ( { showRedmineModel : true } ) ;
103+ let project = this . getProject ( ) ;
104+ if ( ! project . redmineToken || ! project . redmineHost ) {
105+ alert ( '请先到项目 Setting / 设置 中配置 Redmine API线管内容!' ) ;
106+ return ;
107+ }
108+ let projects = trackers = [ ] ;
109+ // 请求redmine api,获取该项目的projects、trackers、versions
110+ this . xhr . get ( 'http://redmineapi.nie.netease.com/api/project' , {
111+ 'token' : project . redmineToken ,
112+ 'host' : project . redmineHost
113+ } , function ( r ) {
114+ r = r . json ( ) ; // get the json result.
115+ if ( r . success ) {
116+ for ( var i in r . data ) projects . push ( i ) ;
117+ }
118+ else {
119+ alert ( '拉取“项目列表”失败,检查是否 Redmine API 先关配置有误!' ) ;
120+ return ;
121+ }
122+ } ) ;
123+ // 拉取tracker
124+ this . xhr . get ( 'http://redmineapi.nie.netease.com/api/tracker' , {
125+ 'token' : project . redmineToken ,
126+ 'host' : project . redmineHost
127+ } , function ( r ) {
128+ r = r . json ( ) ; // get the json result.
129+ if ( r . success ) {
130+ trackers = r . data ;
131+ }
132+ else {
133+ alert ( '拉取“跟踪列表”失败,检查是否 Redmine API 先关配置有误!' ) ;
134+ return ;
135+ }
136+ } ) ;
137+ // 更新界面
138+ this . setState ( {
139+ showRedmineModel : true ,
140+ redmineProjects : projects ,
141+ redmineTrackers : trackers
142+ } ) ;
143+ } ,
144+ // 当选中某一个redmine项目时,更新周版本
145+ onProjectSelected ( ) {
146+ let redmineProject = this . refs . project_selector . value ;
147+ let versions = [ ] ;
148+ this . xhr . get ( 'http://redmineapi.nie.netease.com/api/version' , {
149+ 'token' : project . redmineToken ,
150+ 'host' : project . redmineHost ,
151+ 'project' : redmineProject
152+ } , function ( r ) {
153+ r = r . json ( ) ; // get the json result.
154+ if ( r . success ) {
155+ versions = r . data ;
156+ }
157+ else {
158+ alert ( '拉取项目“周版本”失败,检查是否 Redmine API 先关配置有误!' ) ;
159+ return ;
160+ }
161+ this . setState ( { redmineVersions : versions } ) ;
162+ } ) ;
98163 } ,
164+ // 关闭redmine提单弹出框
99165 closeRedmineModal ( ) {
100166 this . setState ( { showRedmineModel : false } ) ;
101167 } ,
@@ -105,6 +171,7 @@ const GroupActions = React.createClass({
105171 console . log ( this . refs . version_selector . value ) ;
106172 // do ajax, if success, then close modal, or else alert
107173 // this.setState({showRedmineModel: false});
174+ console . log ( this . getProject ( ) ) ;
108175 } ,
109176
110177 onSnooze ( duration ) {
@@ -276,26 +343,26 @@ const GroupActions = React.createClass({
276343 < div className = "box-content with-padding" >
277344 < div className = "form-group" >
278345 < label className = "control-label " > Project 项目</ label >
279- < select className = "select form-control" ref = "project_selector" tabIndex = "-1" >
280- < option value = "10" > Dante (dante) </ option >
281- < option value = "3" > EP (ep) </ option >
282- < option value = "9" > F (f) </ option >
346+ < select className = "select form-control" ref = "project_selector" onChange = { this . onProjectSelected } tabIndex = "-1" >
347+ this.state.redmineProjects.map(function(project) {
348+ return < option value = { project } > { project } < / o p t i o n >
349+ } )
283350 </ select >
284351 </ div >
285352 < div className = "form-group" >
286353 < label className = "control-label " > Tracker 跟踪</ label >
287354 < select className = "select form-control" ref = "tracker_selector" tabIndex = "-1" >
288- < option value = "10" > Dante (dante) </ option >
289- < option value = "3" > EP (ep) </ option >
290- < option value = "9" > F (f) </ option >
355+ this.state.redmineTrackers.map(function(tracker) {
356+ return < option value = { tracker } > { tracker } < / o p t i o n >
357+ } )
291358 </ select >
292359 </ div >
293360 < div className = "form-group" >
294361 < label className = "control-label " > Version 周版本</ label >
295362 < select className = "select form-control" ref = "version_selector" tabIndex = "-1" >
296- < option value = "10" > Dante (dante) </ option >
297- < option value = "3" > EP (ep) </ option >
298- < option value = "9" > F (f) </ option >
363+ this.state.redmineVersions.map(function(version) {
364+ return < option value = { version } > { version } < / o p t i o n >
365+ } )
299366 </ select >
300367 </ div >
301368 < div className = "form-actions" >
0 commit comments