新建+issue

This commit is contained in:
caicai8 2020-03-30 19:26:39 +08:00
parent 636d2ee36b
commit bf7afa9087
3 changed files with 167 additions and 88 deletions

View File

@ -1,11 +1,12 @@
import React , { Component } from 'react';
import { Link } from 'react-router-dom';
import { Input , Form , Select , Checkbox , Button , Divider ,Spin } from 'antd';
import { Input , Form , Select , Checkbox , Button , Divider , Spin , AutoComplete } from 'antd';
import '../css/index.css';
import './new.css'
import axios from 'axios' ;
import { callbackify } from 'util';
const Option = Select.Option
class Index extends Component{
constructor(props){
@ -23,6 +24,21 @@ class Index extends Component{
GitignoreList:undefined,
LicensesList:undefined,
isSpin:false,
project_language_id:undefined,
project_category_id:undefined,
license_id:undefined,
ignore_id:undefined,
project_language_list:undefined,
project_category_list:undefined,
license_list:undefined,
ignore_list:undefined,
project_language_name:undefined,
project_category_name:undefined,
license_name:undefined,
ignore_name:undefined
}
}
getUserInfo=()=>{
@ -53,9 +69,9 @@ class Index extends Component{
const url = `/project_categories.json`
axios.get(url).then((result)=>{
if(result){
let CategoryList = this.setOptionsList(result.data.project_categories)
this.setOptionsList(result.data.project_categories,'project_category');
this.setState({
CategoryList
CategoryList:result.data.project_categories
})
}
}).catch((error)=>{})
@ -65,9 +81,9 @@ class Index extends Component{
const url = `/project_languages.json`
axios.get(url).then((result)=>{
if(result){
let LanguageList = this.setOptionsList(result.data.project_languages)
this.setOptionsList(result.data.project_languages,'project_language')
this.setState({
LanguageList
LanguageList:result.data.project_languages
})
}
}).catch((error)=>{})
@ -77,9 +93,9 @@ class Index extends Component{
const url = `/ignores.json`
axios.get(url).then((result)=>{
if(result){
let GitignoreList = this.setOptionsList(result.data.ignores)
this.setOptionsList(result.data.ignores,'ignore');
this.setState({
GitignoreList
GitignoreList:result.data.ignores
})
}
}).catch((error)=>{})
@ -89,24 +105,30 @@ class Index extends Component{
const url = `/licenses.json`
axios.get(url).then((result)=>{
if(result){
let LicensesList = this.setOptionsList(result.data.licenses)
this.setOptionsList(result.data.licenses,'license');
this.setState({
LicensesList
LicensesList:result.data.licenses
})
}
}).catch((error)=>{})
}
setOptionsList = (data) =>{
let list = undefined;
// 设置option
setOptionsList = (data,_head,name) =>{
if(data && data.length > 0){
list = data.map((item,key)=>{
return(
<Option key={item.id}>{item.name}</Option>
)
let _data = data;
if(name){
_data = data.filter(item=>item.name.indexOf(name)>-1);
}
let list = _data && _data.map((item) => (
<Option key={item.id} value={item.name}>
{item.name}
</Option>
));
this.setState({
[_head+"_list"]:list
})
}
return list;
}
subMitFrom = () =>{
@ -117,9 +139,14 @@ class Index extends Component{
if(!err){
const { current_user } = this.props;
const { projectsType } =this.props.match.params;
const { project_language_id, project_category_id, license_id, ignore_id } = this.state;
const url = projectsType === "deposit" ? "/projects.json" :"/projects/migrate.json";
axios.post(url,{
...values,
project_language_id,
project_category_id,
license_id,
ignore_id,
user_id:current_user.user_id
}).then((result)=>{
if(result){
@ -145,6 +172,39 @@ class Index extends Component{
})
}
ChangePlatform=(value,e,name,list)=>{
this.setOptionsList(list,name,value)
this.setState({
[name+"_id"]:e.key,
[name+"_name"]:value,
})
}
blurCategory=(value,list,name)=>{
// console.log(value);
let filter = list && list.filter(item=>item.name === value);
if(!filter || filter.length===0){
this.props.form.setFieldsValue({
[name]:undefined
})
this.setState({
[name+"_name"]:undefined,
[name+"_id"]:undefined
})
this.setOptionsList(list,name);
}
}
checkId=(rule, value, callback,list,title)=>{
let filter = list.filter(item=>item.name === value);
if(filter && filter.length>0){
callback();
}else{
callback('请在下拉选项中选择正确的'+title+"!");
}
callback();
}
render(){
const { getFieldDecorator } = this.props.form;
// 项目类型deposit-托管项目mirror-镜像项目
@ -161,10 +221,18 @@ class Index extends Component{
LanguageList,
GitignoreList,
LicensesList,
isSpin
}=this.state;
isSpin,
project_language_name,
project_category_name,
license_name,
ignore_name,
console.log("current_user",this.props);
project_language_list,
project_category_list,
license_list,
ignore_list,
}=this.state;
console.log("a:",project_category_list);
return(
<div className="main back-white">
<div className="newPanel">
@ -172,21 +240,8 @@ class Index extends Component{
<Spin spinning={isSpin}>
<Form>
<div className="newPanel_content">
{/* <Form.Item
label="拥有者"
>
{getFieldDecorator('user_id', {
rules: [{
required: true, message: '请选择拥有者'
}],
})(
<Select value={authorValue}>
<Option key="0">kosasa</Option>
</Select>
)}
</Form.Item> */}
{
projectsType != "deposit" &&
projectsType !== "deposit" &&
<React.Fragment>
<Form.Item
label="镜像版本库地址"
@ -239,44 +294,46 @@ class Index extends Component{
)}
</Form.Item>
<p className="formTip">好的存储库名称使用简单深刻和独特的关键字</p>
{/* <div className="newContent_inline"> */}
<Form.Item
label="项目类别"
>
{getFieldDecorator('project_category_id', {
{getFieldDecorator('project_category', {
rules: [{
required: true, message: '请选择大类别'
required: true, message: '请选择大类别',
},{
validator:(rule, value, callback)=>this.checkId(rule, value, callback,CategoryList,'项目类别')
}],
})(
<Select value={preType}>
{CategoryList}
</Select>
<AutoComplete
placeholder="请选择项目类别"
onChange={(value,e)=>this.ChangePlatform(value,e,'project_category',CategoryList)}
className="plateAutoComplete"
onBlur={(value)=>this.blurCategory(value,CategoryList,"project_category")}
>
{/* {this.setOptionsList(CategoryList,project_category_name)} */}
{project_category_list}
</AutoComplete>
)}
</Form.Item>
{/* <Form.Item>
{getFieldDecorator('project_language_id', {
rules: [{
required: true, message: '请选择子类别'
}],
})(
<Select value={subType} className="inline_Tag">
<Option key="0">HTMl</Option>
<Option key="1">HTMl111</Option>
</Select>
)}
</Form.Item> */}
{/* </div> */}
<Form.Item
label="项目语言"
>
{getFieldDecorator('project_language_id', {
{getFieldDecorator('project_language', {
rules: [{
required: true, message: '请选择项目语言'
},{
validator:(rule, value, callback)=>this.checkId(rule, value, callback,LanguageList,'项目语言')
}],
})(
<Select value={languageValue}>
{LanguageList}
</Select>
<AutoComplete
placeholder="请选择项目语言"
onChange={(value,e)=>this.ChangePlatform(value,e,'project_language',LanguageList)}
className="plateAutoComplete"
onBlur={(value)=>this.blurCategory(value,LanguageList,"project_language")}
>
{/* {this.setOptionsList(LanguageList,project_language_name)} */}
{project_language_list}
</AutoComplete>
)}
</Form.Item>
</div>
@ -288,19 +345,39 @@ class Index extends Component{
<Form.Item
label=".gitignore"
>
{getFieldDecorator('ignore_id')(
<Select value={gitignoreType} className="inline_Tag">
{GitignoreList}
</Select>
{getFieldDecorator('ignore',{
rules: [{
validator:(rule, value, callback)=>this.checkId(rule, value, callback,GitignoreList,'gitignore')
}],
})(
<AutoComplete
placeholder="请选择gitignore"
onChange={(value,e)=>this.ChangePlatform(value,e,'ignore',GitignoreList)}
className="plateAutoComplete"
onBlur={(value)=>this.blurCategory(value,GitignoreList,"ignore")}
>
{/* {this.setOptionsList(GitignoreList,ignore_name)} */}
{ignore_list}
</AutoComplete>
)}
</Form.Item>
<Form.Item
label="开源许可证"
>
{getFieldDecorator('license_id')(
<Select value={LicensesType} className="inline_Tag">
{LicensesList}
</Select>
{getFieldDecorator('license',{
rules: [{
validator:(rule, value, callback)=>this.checkId(rule, value, callback,LicensesList,'开源许可证')
}],
})(
<AutoComplete
placeholder="请选择开源许可证"
onChange={(value,e)=>this.ChangePlatform(value,e,'license',LicensesList)}
className="plateAutoComplete"
onBlur={(value)=>this.blurCategory(value,LicensesList,"license")}
>
{/* {this.setOptionsList(LicensesList,license_name)} */}
{license_list}
</AutoComplete>
)}
</Form.Item>
</React.Fragment>

View File

@ -101,7 +101,8 @@ class Detail extends Component{
issue_id:data.id,
attachment_ids:fileList
}).then(result=>{
if(result && result.journals_count > 0){
if(result){
this.props.showNotification("评论成功!");
this.props.form.setFieldsValue({
content: ""
});
@ -111,7 +112,6 @@ class Detail extends Component{
quillFlag:false
})
this.getjournalslist(page, limit);
this.props.showNotification("评论成功!");
}
}).catch(error=>{
console.log(error);
@ -178,13 +178,13 @@ class Detail extends Component{
//修改评论
updatedetail=(id)=>{
const {page, limit } = this.state;
const { page , limit , countvalue } = this.state;
const {orderId} = this.props.match.params;
const url = `/issues/${orderId}/journals/${id}.json`;
axios.put(url,{
issue_id:orderId,
id:id,
content:this.state.countvalue
content:JSON.stringify(countvalue)
}).then(result=>{
if(result){
this.setState({
@ -221,20 +221,15 @@ class Detail extends Component{
})
}
changmodelname=(e)=>{
this.setState({
countvalue:e.target.value
})
}
editdetail=(count,status)=>{
this.setState({
countvalue:count,
countvalue:this.stringJson(count),
isedit:status
})
}
renderJournalList=(list)=>{
// console.log(list);
if(list && list.length >0){
return(
list.map((item,key)=>{
@ -299,6 +294,7 @@ class Detail extends Component{
showFiles:flag
})
}
// 新建评论
onContentChange=(value)=>{
if(value){
this.setState({
@ -307,6 +303,14 @@ class Detail extends Component{
})
}
}
// 编辑评论
onEditContentChange=(value)=>{
if(value){
this.setState({
countvalue:value
})
}
}
handleShowImage=(value)=>{
// console.log("imgOnclick",value);
@ -336,14 +340,14 @@ class Detail extends Component{
<QuillForEditor
readOnly={true}
value={_ctx}
showUploadImage={this.handleShowImage}
// showUploadImage={this.handleShowImage}
/>
)
};
render(){
const { projectsId , orderId } = this.props.match.params;
const { data,journalsdata, page, limit, search_count, isSpin, isedit, showFiles , quillValue , quillFlag } = this.state;
const { data,journalsdata, page, limit, search_count, isSpin, isedit, showFiles , quillValue , quillFlag , countvalue } = this.state;
const { current_user } = this.props;
const Paginations = (
<React.Fragment>
@ -398,20 +402,19 @@ class Detail extends Component{
}
</div>
<div style={{display: (isedit && isedit === item.id) ? "block" : "none"}}>
<div className="quillContent">
<div className="quillContent mt20">
<QuillForEditor
wrapStyle={{
height: '220px',
opacity:1,
}}
autoFocus={true}
style={{ height: '150px' }}
style={{ height: '170px' }}
placeholder="添加评论..."
options={options}
value={this.stringJson(this.state.countvalue)}
onContentChange={this.onContentChange}
showUploadImage={this.handleShowImage}
// onContentChange={handleContentChange}
value={countvalue}
onContentChange={this.onEditContentChange}
// showUploadImage={this.handleShowImage}
/>
<p className="quillFlag">
{ quillFlag && <span className="">请输入评论内容</span>}
@ -538,8 +541,7 @@ class Detail extends Component{
options={options}
value={quillValue}
onContentChange={this.onContentChange}
showUploadImage={this.handleShowImage}
// onContentChange={handleContentChange}
// showUploadImage={this.handleShowImage}
/>
<p className="quillFlag">
{ quillFlag && <span className="">请输入评论内容</span>}

View File

@ -109,7 +109,7 @@ class UpdateDetail extends Component{
onContentChange=(value)=>{
this.setState({
textcount:value
textcount:JSON.stringify(value)
})
}
@ -174,12 +174,12 @@ class UpdateDetail extends Component{
project_id:projectsId,
subject:subject,
id: orderId,
description:JSON.stringify(textcount),
description:textcount,
attachment_ids:fileList,
...values
}).then(result=>{
if(result){
this.props.history.push(`/projects/${projectsId}/orders`);
this.props.history.push(`/projects/${projectsId}/orders/${orderId}/detail`);
}
}).catch(error=>{
console.log(error);