forgeplus-react/src/forge/Order/Detail.js

376 lines
11 KiB
JavaScript
Raw Normal View History

2020-05-28 11:37:17 +08:00
import React, { Component } from "react";
import { Link } from "react-router-dom";
import axios from "axios";
import { getImageUrl } from "educoder";
2020-08-17 18:44:02 +08:00
import { Form, Popconfirm, Tag, Spin } from "antd";
2020-05-28 11:37:17 +08:00
import Attachments from "../Upload/attachment";
import RenderHtml from "../../components/render-html";
2020-06-05 16:24:37 +08:00
import Comments from "../comments/comments";
2020-05-28 11:37:17 +08:00
import "./order.css";
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
class Detail extends Component {
constructor(props) {
2020-03-16 14:12:11 +08:00
super(props);
2020-05-07 10:10:13 +08:00
this.state = {
data: undefined,
isShow: false,
2020-05-28 11:37:17 +08:00
imgsrc: "",
2020-05-07 10:10:13 +08:00
journalsdata: undefined,
2020-03-16 14:12:11 +08:00
//图片区域是否显示 none 隐藏 block 显示
2020-05-28 11:37:17 +08:00
display: "none",
titledisplay: "none",
countvalue: "",
2020-03-16 14:12:11 +08:00
//是否需要编辑
2020-05-07 10:10:13 +08:00
isedit: undefined,
fileList: undefined,
limit: 10,
page: 1,
search_count: undefined,
2020-07-16 09:54:40 +08:00
isSpins: true,
showFiles: true,
2020-05-28 11:37:17 +08:00
quillValue: "",
2020-05-07 10:10:13 +08:00
quillFlag: false,
2020-04-26 16:07:51 +08:00
// 点击放大的图片路径
2020-05-07 10:10:13 +08:00
imageUrl: undefined,
visible: false,
2020-04-30 10:34:06 +08:00
journal_spin: false,
2020-05-28 11:37:17 +08:00
edit_spin: false,
};
2020-03-16 14:12:11 +08:00
}
2020-05-07 10:10:13 +08:00
componentDidMount = () => {
2020-03-16 14:12:11 +08:00
this.getDetail();
2020-05-28 11:37:17 +08:00
};
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
getDetail = () => {
2020-08-17 18:44:02 +08:00
const { projectsId, orderId, owner } = this.props.match.params;
2020-08-12 18:13:18 +08:00
const url = `/${owner}/${projectsId}/issues/${orderId}.json`;
2020-05-28 11:37:17 +08:00
axios
.get(url)
.then((result) => {
if (result) {
this.setState({
data: result.data,
2020-08-17 18:44:02 +08:00
isSpins: false
2020-05-28 11:37:17 +08:00
});
}
})
.catch((error) => {
console.log(error);
});
};
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
handleok = () => {
this.setState({
2020-05-28 11:37:17 +08:00
isShow: false,
2020-05-07 10:10:13 +08:00
});
};
handleCancel = () => {
this.setState({
2020-05-28 11:37:17 +08:00
isShow: false,
2020-05-07 10:10:13 +08:00
});
2020-05-28 11:37:17 +08:00
};
2020-03-16 14:12:11 +08:00
2020-04-09 18:13:26 +08:00
//删除任务信息
2020-05-07 10:10:13 +08:00
deletedetail = (id) => {
2020-08-17 18:44:02 +08:00
const { projectsId, orderId, owner } = this.props.match.params;
2020-08-12 18:13:18 +08:00
const url = `/${owner}/${projectsId}/issues/${orderId}.json`;
2020-05-28 11:37:17 +08:00
axios
.delete(url, {
data: {
project_id: projectsId,
id: id,
},
})
.then((result) => {
if (result) {
2021-09-01 09:33:22 +08:00
this.props.history.push(`/${owner}/${projectsId}/issues`);
2020-05-28 11:37:17 +08:00
}
})
.catch((error) => {
console.log(error);
});
};
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
//关闭任务
closedetail = (id) => {
2020-08-17 18:44:02 +08:00
const { projectsId, orderId, owner } = this.props.match.params;
2020-08-12 18:13:18 +08:00
const url = `/${owner}/${projectsId}/issues/${orderId}/close_issue.json`;
2020-05-28 11:37:17 +08:00
axios
.post(url, {
project_id: projectsId,
id: orderId,
status_id: id,
})
.then((result) => {
if (result) {
this.getDetail();
}
})
.catch((error) => {
console.log(error);
});
};
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
editdetail = (count, status) => {
this.setState({
countvalue: this.stringJson(count),
2020-05-28 11:37:17 +08:00
isedit: status,
});
};
2020-05-07 10:10:13 +08:00
//复制
copydetail = () => {
2020-08-17 18:44:02 +08:00
const { projectsId, orderId, owner } = this.props.match.params;
2020-08-12 18:13:18 +08:00
const url = `/${owner}/${projectsId}/issues/${orderId}/copy.json`;
2020-05-28 11:37:17 +08:00
axios
.post(url, {
project_id: projectsId,
id: orderId,
})
.then((result) => {
if (result) {
this.props.history.push(
2021-09-01 09:33:22 +08:00
`/${owner}/${projectsId}/issues/${result.data.issue_id}/copyetail`
2020-05-28 11:37:17 +08:00
);
}
})
.catch((error) => {
console.log(error);
});
};
2020-03-16 14:12:11 +08:00
// 翻页
2020-05-07 10:10:13 +08:00
ChangePage = (page) => {
2020-03-16 14:12:11 +08:00
this.setState({
page,
2020-07-16 09:54:40 +08:00
isSpins: true,
2020-05-28 11:37:17 +08:00
});
2020-05-07 10:10:13 +08:00
const { limit } = this.state;
this.getjournalslist(page, limit);
2020-05-28 11:37:17 +08:00
};
2020-03-16 14:12:11 +08:00
// 判断是否重新上传文件
2020-05-07 10:10:13 +08:00
changeIsComplete = (flag) => {
2020-03-16 14:12:11 +08:00
this.setState({
2020-05-28 11:37:17 +08:00
showFiles: flag,
});
};
2020-03-16 14:12:11 +08:00
2020-05-07 10:10:13 +08:00
handleShowImage = (value) => {
2020-04-26 16:07:51 +08:00
this.setState({
2020-05-07 10:10:13 +08:00
imageUrl: value,
2020-05-28 11:37:17 +08:00
visible: true,
});
};
2020-05-07 10:10:13 +08:00
setVisible = (flag) => {
2020-04-26 16:07:51 +08:00
this.setState({
2020-05-28 11:37:17 +08:00
visible: flag,
});
};
2020-03-24 16:00:57 +08:00
2020-05-07 10:10:13 +08:00
stringJson = (value) => {
2020-03-24 16:00:57 +08:00
let _value = null;
try {
_value = JSON.parse(value);
} catch (e) {
_value = value;
}
2020-05-28 11:37:17 +08:00
return _value;
};
2020-03-19 16:10:42 +08:00
2020-04-28 17:23:34 +08:00
commentCtx = (v) => {
2020-12-15 18:01:16 +08:00
return <RenderHtml className="break_word_comments imageLayerParent" value={v} url={this.props.history.location} />;
2020-03-19 16:10:42 +08:00
};
2020-05-07 10:10:13 +08:00
render() {
2020-08-17 18:44:02 +08:00
const { projectsId, orderId, owner } = this.props.match.params;
const { data, isSpins } = this.state;
2020-05-28 11:37:17 +08:00
const get_color = (type) => {
if (type === "高") {
return "#e67e22";
} else if (type === "正常") {
return "#28be6c";
} else if (type === "低") {
return "#1abc9c";
} else {
return "#e74c3c";
}
};
2020-05-07 10:10:13 +08:00
return (
2020-07-16 09:54:40 +08:00
<Spin spinning={isSpins}>
<div className="ProjectListIndex">
<div className="item-list-right">
<div className="background-f boder-4">
<div className="grid-item border-1f pd20 ">
<Link
2021-08-30 10:31:51 +08:00
to={`/${data && data.author_login}`}
2020-07-16 09:54:40 +08:00
className="show-user-link"
>
<img
className="user_img"
src={getImageUrl(`/${data && data.author_picture}`)}
2020-07-16 09:54:40 +08:00
alt=""
width="50"
height="50"
/>
</Link>
<div className="ml10">
<div className="ver-middle">
<span className="mr10 ver-middle">
<span className="font-16">
{data && data.issue_classify === "issue"
2020-06-09 14:13:53 +08:00
? data.tracker
2020-07-16 09:54:40 +08:00
? data.tracker
: "缺陷"
: "合并请求"}
</span>
<span className="font-16 fwb">{data && data.subject}</span>
2020-06-09 14:13:53 +08:00
</span>
2020-04-24 11:30:28 +08:00
2020-07-16 09:54:40 +08:00
{data && data.priority && (
<Tag color={get_color(data.priority)}>{data.priority}</Tag>
)}
</div>
<div className="mt10">
<span className="color-grey-9 mr5"></span>
<Link
2021-08-30 10:31:51 +08:00
to={`/${data && data.author_login}`}
2020-07-16 09:54:40 +08:00
className="show-user-link color-blue"
>
{data && data.author_name}
</Link>
<span className="color-grey-9 ml5">
添加于 {data && data.created_at}
</span>
{data && data.user_permission ? (
<span className="pull-right 123123">
2020-07-16 09:54:40 +08:00
<a className="color-blue fr" onClick={this.copydetail}>
复制
2020-06-09 14:13:53 +08:00
</a>
2020-07-16 09:54:40 +08:00
<Popconfirm
placement="bottom"
title={"您确定要删除吗"}
okText="是"
cancelText="否"
onConfirm={() => this.deletedetail(orderId)}
>
<a
className="color-blue fr"
style={{ marginLeft: 20, marginRight: 20 }}
>
删除
</a>
</Popconfirm>
2020-04-26 16:07:51 +08:00
2020-07-16 09:54:40 +08:00
<Link
2021-09-01 09:33:22 +08:00
to={`/${owner}/${projectsId}/issues/${orderId}/updatedetail`}
2020-07-16 09:54:40 +08:00
className="color-blue fr"
>
编辑
</Link>
</span>
) : (
2020-08-17 18:44:02 +08:00
""
)}
2020-07-16 09:54:40 +08:00
</div>
</div>
</div>
<div className="pd20">
<div className="detail_p">
{data && data.description && data.description.length > 0 ? (
this.commentCtx(data.description)
2020-06-09 14:13:53 +08:00
) : (
2020-08-17 18:44:02 +08:00
<span className="color-grey-9 ml3 mr3">暂无描述</span>
)}
2020-06-09 14:13:53 +08:00
</div>
2020-07-16 09:54:40 +08:00
{data && data.attachments && data.attachments.length > 0 ? (
<Attachments
attachments={data.attachments}
showNotification={this.props.showNotification}
/>
2020-05-28 11:37:17 +08:00
) : (
2020-08-17 18:44:02 +08:00
""
)}
2020-04-24 11:30:28 +08:00
</div>
2020-04-26 16:07:51 +08:00
</div>
2020-06-09 14:13:53 +08:00
2020-07-16 09:54:40 +08:00
<Comments
order_id={orderId}
showNotification={this.props.showNotification}
{...this.props}
/>
</div>
<div className="list-left list-left-padding">
2020-08-17 18:44:02 +08:00
<div className="list-right-item-padding background-f boder-4">
<p className="grid-item-left pb15">
2020-10-29 15:40:30 +08:00
<span className="issue_detail_info">负责人:</span>
<span>
{data && data.assign_user_name ? data.assign_user_name : "--"}
</span>
2020-08-17 18:44:02 +08:00
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">标签:</span>
<span>
{data && data.issue_tags ? (
<span className="grid-item">
<span
className="tagColor"
style={{ background: data.issue_tags[0].color }}
></span>
{data.issue_tags[0].name}
</span>
) : (
"--"
)}
</span>
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">里程碑:</span>
<span className="title_overflow">
{data && data.version ? data.version : "--"}
</span>
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">状态:</span>
<span>
{data && data.issue_status ? data.issue_status : "--"}
</span>
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">分类:</span>
<span>{data && data.tracker ? data.tracker : "--"}</span>
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">开始日期:</span>
<span>{data && data.start_date ? data.start_date : "--"}</span>
</p>
<p className="grid-item-left pb15">
<span className="issue_detail_info">结束日期:</span>
<span>{data && data.due_date ? data.due_date : "--"}</span>
</p>
2020-06-01 18:28:42 +08:00
2020-08-17 18:44:02 +08:00
<p className="grid-item-left pb15">
<span className="issue_detail_info">完成度:</span>
<span>{data && data.done_ratio ? data.done_ratio : "--"}</span>
</p>
2020-10-29 15:40:30 +08:00
<p className="grid-item-left pb15">
<span className="issue_detail_info">分支:</span>
<span>{data && data.branch_name ? data.branch_name : "--"}</span>
</p>
2020-08-17 18:44:02 +08:00
</div>
2020-03-16 14:12:11 +08:00
</div>
</div>
2020-08-17 18:44:02 +08:00
</Spin>
2020-05-28 11:37:17 +08:00
);
2020-03-16 14:12:11 +08:00
}
}
2020-05-28 11:37:17 +08:00
const WrappedDetailForm = Form.create({ name: "DetailOrderForm" })(Detail);
export default WrappedDetailForm;