-
{title}
-
-
{setId("")}}>全部
- {
- options.map((item) => {
- return
{setId(item.id)}} >{item.dicItemName}
- })
- }
-
+
+
{title}
+
+
{ setOption({ id: "", dicItemName: "" }) }}>全部
+ {
+ options.map((item) => {
+ return
{ setOption(item) }} >{item.dicItemName}
+ })
+ }
+
)
}
\ No newline at end of file
diff --git a/src/achieveRequirement/components/itemList/index.jsx b/src/achieveRequirement/components/itemList/index.jsx
index c61a2ec6..7159cd00 100644
--- a/src/achieveRequirement/components/itemList/index.jsx
+++ b/src/achieveRequirement/components/itemList/index.jsx
@@ -1,31 +1,40 @@
import React from 'react';
import './index.scss';
+const statusArr = ['待审核', '进行中', '成果验收中', '完成', '审核未通过', '延期', '其他', '验收未通过'];
+const classArr = ['', 'list-done', 'list-done', 'list-done', 'list-error', '', '', 'list-error'];
export default (props) => {
- const { list, itemClick, editItem, deletItem } = props;
+ const { list, itemClick, editItem, deletItem, activeByStatus } = props;
return (
list.map(item => {
return (
{ itemClick(item.id) }}>
- {item.achievementName}
+ {item.achievementName || item.title}
+ {item.status && {statusArr[item.status]}}
{
- item.achievementLabel.map(i => {
+ item.tag.map(i => {
return {i};
})
}
{item.user &&
发布者:{item.user.nickname ? item.user.nickname : item.user.login}
}
-
发布时间:{item.achievementPublishTime}
+ {item.createUser &&
发布者:{item.createUser.nickname ? item.createUser.nickname : item.createUser.login}
}
+
发布时间:{item.achievementPublishTime || item.createTime}
- {editItem &&
-
-
-
}
+ {
+ editItem &&
+ {
+ !activeByStatus || (activeByStatus && item.status == '0' || item.status == '4' || item.status == '5') &&
+
+ }
+
+
+ }
)
})
diff --git a/src/achieveRequirement/components/itemList/index.scss b/src/achieveRequirement/components/itemList/index.scss
index 9694c84e..c4739395 100644
--- a/src/achieveRequirement/components/itemList/index.scss
+++ b/src/achieveRequirement/components/itemList/index.scss
@@ -9,14 +9,12 @@
color: #000;
cursor: pointer;
}
-.list-title p {
- display: inline-block;
-}
-.list-title p:hover {
+.list-title:hover {
color: #409eff;
}
.list-title span {
padding: 3px 5px;
+ margin-left:.5em;
background: #f8c753;
font-size: 13px;
color: #fff;
@@ -25,6 +23,9 @@
span.list-done {
background: #35d77e;
}
+span.list-error {
+ background: #f56c6c;
+}
.list-tag {
display: inline-block;
diff --git a/src/achieveRequirement/index.scss b/src/achieveRequirement/index.scss
index 4525d37a..aece19b5 100644
--- a/src/achieveRequirement/index.scss
+++ b/src/achieveRequirement/index.scss
@@ -1,11 +1,11 @@
// 本模块公共样式
.centerbox {
- width: 1280px;
- margin:40px auto;
+ width: 80vw;
+ max-width: 1280px;
+ margin: 40px auto;
}
.center-content {
- width: 1280px;
margin: 20px 0;
background: #fff;
border: 1px solid #dedede;
@@ -53,7 +53,7 @@
display: flex;
align-items: center;
}
-.center-right-but>span{
+.center-right-but > span {
margin: 0 10px;
font-size: 16px;
color: #0089ff;
@@ -61,13 +61,40 @@
}
// 通用标签样式
-.list-tag{
+.list-tag {
display: inline-block;
margin-right: 10px;
background: #cfe9ff;
color: #0089ff;
font-size: 14px;
- border-radius:3px ;
+ border-radius: 3px;
padding: 2px 5px;
line-height: 25px;
}
+
+// 文件预览modal样式
+.file-modal {
+ width: 800px !important;
+ .ant-modal-body {
+ padding-top: 40px;
+ .pdf-box {
+ height: 70vh;
+ overflow-y: scroll;
+ }
+ }
+ .ant-modal-close {
+ top: 0 !important;
+ }
+ .show-img {
+ width: 100%;
+ }
+ .react-pdf__Page__canvas,
+ .react-pdf__Page__textContent {
+ margin: 0 auto;
+ max-width: 100%;
+ }
+}
+
+.edit-input {
+ max-width: 500px;
+}
diff --git a/src/achieveRequirement/requirement.js b/src/achieveRequirement/requirement.js
new file mode 100644
index 00000000..0439051c
--- /dev/null
+++ b/src/achieveRequirement/requirement.js
@@ -0,0 +1,95 @@
+import React, { Component } from "react";
+
+import { Route, Switch } from "react-router-dom";
+import { withRouter } from "react-router";
+import { SnackbarHOC } from "educoder";
+import { CNotificationHOC } from "../modules/courses/common/CNotificationHOC";
+import { TPMIndexHOC } from "../modules/tpm/TPMIndexHOC";
+import Loadable from "react-loadable";
+import Loading from "../Loading";
+import { ImageLayerOfCommentHOC } from "../modules/page/layers/ImageLayerOfCommentHOC";
+import './index.scss';
+
+const RequireList = Loadable({
+ loader: () => import("./requirement/requireList"),
+ loading: Loading,
+});
+
+const RequireDetail = Loadable({
+ loader: () => import("./requirement/requireDetail"),
+ loading: Loading,
+});
+
+const RequireMine = Loadable({
+ loader: () => import("./requirement/requireMine"),
+ loading: Loading,
+});
+const RequireAdd = Loadable({
+ loader: () => import("./requirement/requireEdit"),
+ loading: Loading,
+});
+const RequireEdit = Loadable({
+ loader: () => import("./requirement/requireEdit"),
+ loading: Loading,
+});
+
+class Index extends Component {
+ render() {
+ return (
+
+
+
+ (
+
+ )}
+ >
+ (
+
+ )}
+ >
+ (
+
+ )}
+ >
+ (
+
+ )}
+ >
+ (
+
+ )}
+ >
+
+
+
+ {/* (
+ this.props.current_user && this.props.current_user.login ?
+
+ :
+
+ )}
+ > */}
+
+
+ );
+ }
+}
+export default withRouter(
+ ImageLayerOfCommentHOC({
+ imgSelector: ".imageLayerParent img, .imageLayerParent .imageTarget",
+ parentSelector: ".newMain",
+ })(CNotificationHOC()(SnackbarHOC()(TPMIndexHOC(Index))))
+);
diff --git a/src/achieveRequirement/requirement/api.js b/src/achieveRequirement/requirement/api.js
new file mode 100644
index 00000000..1ce9368a
--- /dev/null
+++ b/src/achieveRequirement/requirement/api.js
@@ -0,0 +1,71 @@
+import fetch from '../../fetch';
+
+// 获取字典分类列表
+export function getDictionary(id) {
+ return fetch({
+ url: '/dicItem/getData?dicTypeCode=' + id,
+ method: 'get'
+ });
+}
+
+// 需求列表查询
+export async function getRequirementList(data) {
+ let res = await fetch({
+ url: '/requirement/page',
+ method: 'post',
+ data,
+ });
+ if (res && res.data && res.data.rows) {
+ for (const i of res.data.rows) {
+ // 处理分解标签
+ i.tag = i.tag.split(',');
+ }
+ }
+ return res.data;
+}
+
+//新增需求
+export function addRequirement(data) {
+ return fetch({
+ url: '/requirement/add',
+ method: 'post',
+ data: data
+ });
+}
+
+//删除需求
+export function deleteRequirement(id) {
+ return fetch({
+ url: '/requirement/delete?id=' + id,
+ method: 'DELETE',
+ });
+}
+
+//更新需求
+export function updateRequirement(data) {
+ return fetch({
+ url: '/requirement/update',
+ method: 'put',
+ data: data
+ });
+}
+
+// 需求详情查询
+export async function getRequirementDetail(id) {
+ let res = await fetch({
+ url: '/requirement/getInfo?id=' + id,
+ method: 'get',
+ });
+ if (res && res.data) {
+ res.data.tag = res.data.tag.split(',');
+ return res.data;
+ }
+}
+
+//获取用户列表
+export function getAllUsers() {
+ return fetch({
+ url: '/user/getUsers',
+ method: 'get'
+ });
+}
\ No newline at end of file
diff --git a/src/achieveRequirement/requirement/requireDetail/index.jsx b/src/achieveRequirement/requirement/requireDetail/index.jsx
new file mode 100644
index 00000000..6e25dd9f
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireDetail/index.jsx
@@ -0,0 +1,217 @@
+import React, { useEffect, useState } from 'react';
+import { Descriptions, Modal, Button } from 'antd';
+import { Document, Page, pdfjs } from 'react-pdf';
+import DelModal from '../../components/DelModal';
+import Upload from '../../components/Upload';
+import { httpUrl } from '../../../fetch';
+import { deleteRequirement, getRequirementDetail, updateRequirement } from '../api';
+import './index.scss';
+
+pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
+
+export default ({ match, history, current_user, showNotification }) => {
+ const id = match.params.requireId;
+ const [requireForm, setRequireForm] = useState({});
+ const [visible, setVisible] = useState(false);
+ const [visibleAchieve, setVisibleAchieve] = useState(false);
+ const [fileType, setFileType] = useState(4);
+ const [fileUrl, setFileUrl] = useState(4);
+ const [numPages, setNumPages] = useState(null);
+ const [fileList, setFileList] = useState(null);
+ const [edit, setEdit] = useState(false);
+
+
+ useEffect(() => {
+ getRequirementDetail(id).then(data => {
+ if (data) {
+ setRequireForm(data);
+ if (data.achievementList) {
+ for (const item of data.achievementList) {
+ item.name = item.fileName;
+ item.size = item.fileSize;
+ item.uid = "rc-upload" + item.id
+ }
+ setFileList(data.achievementList);
+ }
+ }
+ });
+ }, [id, edit]);
+
+ function editItem() {
+ history.push(`/requirement/requireEdit/${id}`);
+ }
+
+ function deletItem() {
+ DelModal(() => {
+ deleteRequirement(id).then(res => {
+ if (res.code === '1') {
+ showNotification("删除成功");
+ history.go(-1);
+ } else {
+ showNotification("删除失败");
+ }
+ })
+ });
+ }
+
+ function downFile(item) {
+ let url = httpUrl + '/busiAttachments/download/' + item.id;
+ window.open(url);
+ }
+
+ function pdfShow(e) {
+ setFileType(e.fileType);
+ if (e.fileType === 1 || e.fileType === 2 || e.fileType === 3) {
+ // pdf||video||img
+ setVisible(true);
+ setFileUrl(httpUrl + '/busiAttachments/view/' + e.id);
+ }
+ }
+
+ function onDocumentLoadSuccess({ numPages }) {
+ setNumPages(numPages);
+ }
+
+ // 上传附件后得到的文件数组
+ function UploadFunc(fileList) {
+ setFileList(fileList);
+ }
+
+ function uploadAchievement() {
+ let files = [];
+ let filestype = [];
+ for (const item of fileList) {
+ files.push(item.id || item.response.data.id);
+ filestype.push(item.fileType || item.response.data.fileType);
+ }
+ let data = {
+ id,
+ achievements: files.toString(),
+ // createUserAccount: sessionStorage.getItem('SET_Account'),//用户信息
+ // createUserName: sessionStorage.getItem('SET_NAME'),
+ status: "2"
+ }
+ updateRequirement(data).then(res => {
+ if (res.code === '1') {
+ showNotification('更新成果文件成功!');
+ setEdit(!edit);
+ setVisibleAchieve(false);
+ }
+ })
+ }
+
+ return (
+
+
+
+
{requireForm.title}
+ {
+
+ {
+ // (role||operator||needsForm.assignedUserLogin==userid||needsForm.createUserAccount==userid)&&(needsForm.status==1||needsForm.status==2||needsForm.status==7||needsForm.status==5)
+ ((current_user.admin || current_user.operator || requireForm.assignedUserLogin == current_user.login || requireForm.createUserAccount == current_user.login)
+ && (requireForm.status == 1 || requireForm.status == 2 || requireForm.status == 7 || requireForm.status == 5)) &&
+
+ }
+
+ {
+ requireForm.createUserAccount === current_user.login &&
+
+ 编辑
+ 删除
+
+ }
+
+ }
+
+
+
+
+ {requireForm.typeName}
+
+ {
+ requireForm.tag && requireForm.tag.map(itemx => {
+ return {itemx}
+ })
+ }
+
+ {requireForm.assignedUserName}
+ {requireForm.endTime}
+ {requireForm.remark}
+
+ {
+ requireForm.attachmentList && requireForm.attachmentList.map(item => {
+ return
+
{ pdfShow(item) }}>{item.fileName}
+
{ downFile(item) }}>下载
+
+ })
+ }
+
+
+
+
+
{ setVisible(false) }}
+ className="file-modal"
+ >
+ {
+ fileType === 3 &&
+

+
+ }
+ {
+ fileType === 2 &&
+
+
+ }
+ {
+ fileType === 1 &&
+ {
+
+ {new Array(numPages).fill("").map((item, index) => {
+ return (
+
+ );
+ })}
+
+ }
+
+ }
+
+
+
{ setVisibleAchieve(false) }}
+ onOk={uploadAchievement}
+ className="upload-modal"
+ >
+
+
+
+
+ )
+}
diff --git a/src/achieveRequirement/requirement/requireDetail/index.scss b/src/achieveRequirement/requirement/requireDetail/index.scss
new file mode 100644
index 00000000..d0a621e0
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireDetail/index.scss
@@ -0,0 +1,40 @@
+// 内容详情
+.item-content {
+ padding: 10px 10px 0 30px;
+}
+.ant-descriptions-item-label {
+ width: 5em;
+ margin-right: 5px;
+ color: rgba(0, 0, 0, 0.65);
+ text-align: right;
+}
+.ant-descriptions-item-content {
+ color: rgba(0, 0, 0, 1);
+}
+.file-list-item > span {
+ vertical-align: top;
+}
+.file-list-box {
+ width: 600px;
+ height: 60px;
+ display: flex;
+ justify-content: space-between;
+ p:hover {
+ cursor: pointer;
+ color: #0089ff;
+ }
+ .downP {
+ color: #0089ff;
+ cursor: pointer;
+ text-decoration: none;
+ }
+}
+
+.upload-modal{
+ width: 800px !important;
+ .commentStyle{
+ display: inline-block;
+ width: 100%;
+ }
+}
+
diff --git a/src/achieveRequirement/requirement/requireEdit/index.jsx b/src/achieveRequirement/requirement/requireEdit/index.jsx
new file mode 100644
index 00000000..2175d223
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireEdit/index.jsx
@@ -0,0 +1,247 @@
+import React, { forwardRef, useCallback, useEffect, useState } from 'react';
+import { Form, Input, Select, Button, DatePicker } from 'antd';
+import moment from 'moment';
+import Upload from '../../components/Upload';
+import { httpUrl } from '../../../fetch';
+import { getDictionary, getRequirementDetail, addRequirement, updateRequirement } from '../api';
+import './index.scss';
+
+const Option = Select.Option;
+const { TextArea } = Input;
+const format = "YYYY-MM-DD HH:mm:ss";
+
+export default Form.create()(forwardRef(({current_user, form, showNotification, match, history }, ref) => {
+
+ const [requireType, setRequireType] = useState([]);
+ const [tagType, setTagType] = useState([]);
+ const [fileList, setFileList] = useState(null);
+ const [typeCode, setTypeCode] = useState('');
+ const [typeName, setTypeName] = useState('');
+
+ const id = match.params.requireId;
+ const { getFieldDecorator, validateFields, setFieldsValue, } = form;
+
+ useEffect(() => {
+ id && getRequirementDetail(id).then(data => {
+ const formValue = {
+ title: data.title,
+ attachments: data.attachments,
+ // typeCode: data.typeCode, //为使用select labelInValue,在代码中初始化值
+ endTime: moment(data.endTime),
+ tag: data.tag,
+ remark: data.remark
+ };
+ setFieldsValue(formValue);
+ setTypeName(data.typeName);
+ setTypeCode(data.typeCode)
+ if (data.attachmentList.length) {
+ for (const item of data.attachmentList) {
+ item.name = item.fileName;
+ item.size = item.fileSize;
+ item.uid = "rc-upload" + item.id
+ }
+ setFileList(data.attachmentList);
+ }
+ })
+ }, [id]);
+
+ // 加载选项数据
+ useEffect(() => {
+ getDictionary('requirement_type').then((res) => {
+ setRequireType(res.data);
+ });
+ getDictionary("tag_type").then((res) => {
+ setTagType(res.data);
+ });
+ }, []);
+
+
+ // 上传附件后得到的文件数组
+ function UploadFunc(fileList) {
+ setFileList(fileList);
+ let files = [];
+ for (const item of fileList) {
+ files.push(item.id || item.response.data.id);
+ }
+ setFieldsValue({
+ attachments: files.join()
+ });
+ }
+
+ const helper = useCallback(
+ (label, name, rules, widget, initialValue) => (
+
+ {getFieldDecorator(name, { rules, initialValue, validateFirst: true, })(widget)}
+
+ ), []);
+
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 12 },
+ sm: { span: 4 },
+ },
+ wrapperCol: {
+ xs: { span: 12 },
+ sm: { span: 16 },
+ },
+ };
+
+ const tailFormItemLayout = {
+ wrapperCol: {
+ xs: {
+ span: 20,
+ offset: 4,
+ },
+ sm: {
+ span: 20,
+ offset: 4,
+ },
+ },
+ };
+
+ // 修改
+ function saveItem() {
+ validateFields((error, values) => {
+ if (!error) {
+ let params = {
+ ...values,
+ createUserAccount:current_user.login|| sessionStorage.getItem("SET_Account"), //用户信息
+ createUserName:current_user.username|| sessionStorage.getItem("SET_NAME"), //模拟时使用莫胜吕
+ typeName,
+ typeCode,
+ status: 0, //状态
+ };
+ params.tag = params.tag.join();
+ params.endTime = params.endTime.format(format);
+ if (id) {
+ // 编辑
+ params.id = id;
+ updateRequirement(params).then(res => {
+ if (res.code === '1') {
+ showNotification("需求更新成功!");
+ history.go(-1);
+ } else {
+ showNotification(res.message);
+ }
+ });
+ } else {
+ // 新增
+ addRequirement(params).then(res => {
+ if (res.code === '1') {
+ showNotification("需求新增成功!");
+ history.go(-1);
+ } else {
+ showNotification(res.message);
+ }
+ });
+ }
+ }
+ })
+ }
+
+ function changeTypeName(value) {
+ setTypeCode(value.key);
+ setTypeName(value.label);
+ }
+
+ return (
+
+
+
+
+
+
+
+ {/* 用一个隐藏的input实现上传文件的必填校验 */}
+ {getFieldDecorator('attachments', {
+ rules: [{ required: true, message: "请上传需求文件" }], validateFirst: true
+ })()}
+
+
+ {helper(
+ "标签:",
+ "tag",
+ [{ required: true, message: "请选择需求标签" }],
+
+ )}
+
+ {helper(
+ "需求描述:",
+ "remark",
+ [{ required: true, message: "请输入需求描述" }],
+
+ )}
+
+
+
+
+
+
+
+
+
+ )
+})
+)
diff --git a/src/achieveRequirement/requirement/requireEdit/index.scss b/src/achieveRequirement/requirement/requireEdit/index.scss
new file mode 100644
index 00000000..ad5c9622
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireEdit/index.scss
@@ -0,0 +1,4 @@
+ .achieve-form{
+ padding:24px 40px 0px 40px;
+ }
+
diff --git a/src/achieveRequirement/requirement/requireList/index.jsx b/src/achieveRequirement/requirement/requireList/index.jsx
new file mode 100644
index 00000000..ec7f7c1d
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireList/index.jsx
@@ -0,0 +1,117 @@
+import React, { useEffect, useState } from 'react';
+import { Pagination, Button } from 'antd';
+import ChooseNav from '../../components/chooseNav';
+import ItemList from '../../components/itemList';
+import { getDictionary, getRequirementList } from '../api';
+
+export default (props) => {
+ const { current_user } = props;
+ // console.log(current_user);
+
+ const [requirementType, setrequirementType] = useState([]); //需求类别选项数组
+ const [requirementStatusArr, setrequirementStatusArr] = useState([]); //需求状态选项数组
+ const [requirementTypeName, setRequirementTypeName] = useState(''); //当前需求类别
+ const [requirementStatus, setRequirementStatus] = useState(''); //当前需求状态
+ const [curPage, setCurPage] = useState(1);
+ const [total, setTotal] = useState(0);
+ const [requirementList, setRequirementList] = useState([]);
+
+ useEffect(() => {
+ getDictionary('requirement_type').then(res => {
+ if (res && res.data) setrequirementType(res.data);
+ });
+ getDictionary('requirement_status').then(res => {
+ if (res && res.data) setrequirementStatusArr(res.data);
+ });
+ }, []);
+
+ useEffect(() => {
+ const params = {
+ tag: null,
+ status: requirementStatus || null,
+ typeName: requirementTypeName || null,
+ queryType: 'all',
+ curPage,
+ pageSize: 10
+ };
+ getRequirementList(params).then(data => {
+ if (data && data.rows) {
+ setRequirementList(data.rows);
+ setTotal(data.total);
+ }
+ })
+ }, [requirementTypeName, requirementStatus, curPage]);
+
+ function changeOptionId(option, type) {
+ if (type === 'requirement_type') {
+ setRequirementTypeName(option.dicItemName);
+ setCurPage(1);
+ } else if (type === 'requirement_status') {
+ setRequirementStatus(option.dicItemCode);
+ setCurPage(1);
+ }
+ }
+
+ function goRequirementMine() {
+ props.history.push('/requirement/requireMine');
+ }
+ function goAdd() {
+ props.history.push("/requirement/requireAdd");
+ }
+
+ function achiveClick(id) {
+ props.history.push(`/requirement/requireDetail/${id}`);
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+
需求大厅
+ {
+ current_user.login &&
+
+
+
+
+ }
+
+
+
+
+
+
+
+
{ setCurPage(page) }}
+ current={curPage}
+ total={total}
+ showTotal={total => `共 ${total} 条`}
+ />
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/achieveRequirement/requirement/requireMine/allRequire.jsx b/src/achieveRequirement/requirement/requireMine/allRequire.jsx
new file mode 100644
index 00000000..ca67ad2d
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireMine/allRequire.jsx
@@ -0,0 +1,333 @@
+import React, { useEffect, forwardRef, useCallback, useState } from 'react';
+import classnames from 'classnames';
+import { Form, Radio, Input, Select, Pagination, Table, Button, Modal } from 'antd';
+import DelModal from '../../components/DelModal';
+import { deleteRequirement, getRequirementList, getAllUsers, updateRequirement } from '../api';
+
+const Option = Select.Option;
+const { TextArea } = Input;
+
+const statusArr = ['待审核', '进行中', '成果验收中', '完成', '审核未通过', '延期', '其他', '验收未通过'];
+const chooseStatusArr = ['待审核', '进行中', '成果验收中', '完成', '审核未通过', '延期', '全部'];
+const statusColor = ['#f8c753', '#67c23a', '#67c23a', '#67c23a', '#F56C6C', '#f8c753', '#f8c753', '#F56C6C'];
+
+export default Form.create()(forwardRef(({ form, showNotification, match, history }, ref) => {
+ const [requirementList, setRequirementList] = useState([]);
+ const [curPage, setCurPage] = useState(1);
+ const [total, setTotal] = useState(0);
+ const [status, setStatus] = useState(6);
+ const [checkVisible, setCheckVisible] = useState(false);
+ const [checkStatus, setCheckStatus] = useState(1);
+ const [acceptVisible, setAcceptVisible] = useState(false);
+ const [currentId, setCurrentId] = useState('');
+ const [allUsers, setAllUsers] = useState([]);
+
+
+ const { getFieldDecorator, validateFields, } = form;
+
+ useEffect(() => {
+ getRequireList();
+ }, [curPage, status]);
+
+ useEffect(() => {
+ if (checkVisible) {
+ getAllUsers().then(res => {
+ if (res.code === '1') {
+ setAllUsers(res.data);
+ } else {
+ showNotification(res.message);
+ }
+ })
+ }
+ }, [checkVisible]);
+
+ function getRequireList() {
+ let searchStaus = "";
+ if (status !== 6) {
+ searchStaus = status;
+ }
+ const params = {
+ curPage,
+ pageSize: 10,
+ status: searchStaus,
+ tag: "",
+ title: "",
+ typeName: "",
+ currentUser: "",
+ queryType: "all" //all:所有 my:我创建的 tome:指派给我的
+ };
+ getRequirementList(params).then(data => {
+ if (data) {
+ for (const item of data.rows) {
+ item.createUserName = item.createUser.nickname ? item.createUser.nickname : item.createUser.login;
+ }
+ setRequirementList(data.rows);
+ setTotal(data.total);
+ }
+ })
+ }
+
+ function detailItem(id) {
+ history.push(`/requirement/requireDetail/${id}`);
+ }
+
+ function editItem(id) {
+ history.push(`/requirement/requireEdit/${id}`);
+ }
+
+ function deletItem(id) {
+ DelModal(() => {
+ deleteRequirement(id).then(res => {
+ if (res.code === '1') {
+ showNotification("删除成功");
+ getRequireList();
+ } else {
+ showNotification("删除失败");
+ }
+ })
+ }, '此操作将删除该记录, 是否继续?');
+ }
+
+ // 审核
+ function checkItem() {
+ validateFields((error, values) => {
+ if (!error) {
+ let params = {
+ id: currentId,
+ status: checkStatus, //状态
+ assignedUserLogin: values.vertifyUserAccount ? values.vertifyUserAccount.key : '',
+ assignedUserName: values.vertifyUserAccount ? values.vertifyUserAccount.label : '',
+ vertifyUserAccount: values.vertifyUserAccount ? values.vertifyUserAccount.key : '',
+ vertifyUserName: values.vertifyUserAccount ? values.vertifyUserAccount.label : '',
+ vertifyComments: values.vertifyComments,
+ };
+ console.log(params);
+ updateRequirement(params).then(res => {
+ if (res.code === '1') {
+ showNotification("操作成功!");
+ setCheckVisible(false);
+ getRequireList();
+ } else {
+ showNotification(res.message);
+ }
+ });
+ }
+ })
+ }
+
+ // 验收
+ function acceptItem() {
+ validateFields((error, values) => {
+ if (!error) {
+ let params = {
+ status: values.status,
+ id: currentId,
+ checkComments: values.checkComments,
+ };
+ console.log(params);
+ updateRequirement(params).then(res => {
+ if (res.code === '1') {
+ showNotification("操作成功!");
+ setAcceptVisible(false);
+ getRequireList();
+ } else {
+ showNotification(res.message);
+ }
+ });
+ }
+ })
+ }
+
+ const columns = [
+ {
+ title: '需求标题',
+ dataIndex: 'title',
+ key: 'title',
+ width: '20%',
+ },
+ {
+ title: '类型',
+ dataIndex: 'typeName',
+ key: 'typeName',
+ },
+ {
+ title: '创建人',
+ dataIndex: 'createUserName',
+ key: 'createUserName',
+ },
+ {
+ title: '指派人',
+ key: 'assignedUserName',
+ dataIndex: 'assignedUserName',
+ },
+ {
+ title: '创建时间',
+ key: 'createTime',
+ dataIndex: 'createTime',
+ },
+ {
+ title: '结束时间',
+ key: 'endTime',
+ dataIndex: 'endTime',
+ },
+ {
+ title: '状态',
+ key: 'status',
+ dataIndex: 'status',
+ render: (text, record) => {
+ return
{statusArr[text]}
+ }
+ },
+ {
+ title: '操作',
+ key: 'action',
+ render: (text, record) => (
+
+
+
+
+ {record.status === '0' && }
+ {record.status === '2' && }
+
+ ),
+ },
+ ];
+
+ const helper = useCallback(
+ (label, name, rules, widget, initialValue) => (
+
+ {getFieldDecorator(name, { rules, initialValue, validateFirst: true, })(widget)}
+
+ ), []);
+
+ const formItemLayout = {
+ labelCol: {
+ xs: { span: 12 },
+ sm: { span: 6 },
+ },
+ wrapperCol: {
+ xs: { span: 12 },
+ sm: { span: 18 },
+ },
+ };
+
+ return (
+
+
+
+ {
+ chooseStatusArr.map((item, i) => {
+ return
+ })
+ }
+
+
+ row.id}
+ dataSource={requirementList}
+ columns={columns}
+ pagination={false}
+ />
+
+
+
{ setCurPage(page) }}
+ current={curPage}
+ total={total}
+ />
+
+
+ { setCheckVisible(false) }}
+ className="form-edit-modal"
+ >
+
+ {checkVisible &&
+ { setCheckStatus(e.target.value) }}>
+
+ 同意
+
+
+ 拒绝
+
+
+
+
+ {helper(
+ "指派用户:",
+ "vertifyUserAccount",
+ [{ required: checkStatus === 1, message: "请指派用户" }],
+
+ )}
+
+ {helper(
+ "审核意见:",
+ "vertifyComments",
+ [{ required: true, message: "请输入审核意见" }],
+
+ )}
+ }
+
+
+
+ { setAcceptVisible(false) }}
+ className="form-edit-modal"
+ >
+
+ {acceptVisible && }
+
+
+
+ )
+})
+)
diff --git a/src/achieveRequirement/requirement/requireMine/index.jsx b/src/achieveRequirement/requirement/requireMine/index.jsx
new file mode 100644
index 00000000..cc777ea2
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireMine/index.jsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import { Tabs } from 'antd';
+import AllRequire from './allRequire';
+import MyRequire from './myRequire';
+import './index.scss';
+
+const { TabPane } = Tabs;
+export default (props) => {
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/src/achieveRequirement/requirement/requireMine/index.scss b/src/achieveRequirement/requirement/requireMine/index.scss
new file mode 100644
index 00000000..4e8d98d4
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireMine/index.scss
@@ -0,0 +1,54 @@
+// Tabs
+.tabs-style{
+ background: #fff;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);
+ box-shadow: 0 2px 4px 0 rgba(0,0,0,.12), 0 0 6px 0 rgba(0,0,0,.04);
+ padding-bottom: 1vw;
+ .ant-tabs-tab{
+ margin: 0 !important;
+ }
+ .ant-tabs-tab{
+ border-top:0 !important;
+ border-left:0 !important;
+ border-radius:0 !important;
+ }
+ .ant-tabs-nav .ant-tabs-tab{
+ padding:19px 0px;
+ margin-right: 40px;
+ }
+ .ant-tabs-ink-bar{
+ width:25px!important;
+ bottom: 10px;
+ }
+}
+
+.choose-status{
+ padding: 1em;
+ background: #fff;
+}
+
+.ant-btn-info{
+ color: #fff;
+ background-color: #909399;
+ border-color: #909399;
+}
+
+.ant-btn-success{
+ color: #fff;
+ background-color: #67c23a;
+ border-color: #67c23a;
+}
+
+.mt10{
+ margin-top:10px;
+}
+
+.form-edit-modal{
+ .ant-col{
+ display: inline-block;
+ }
+ .edit-input{
+ width: 300px;
+ }
+}
\ No newline at end of file
diff --git a/src/achieveRequirement/requirement/requireMine/myRequire.jsx b/src/achieveRequirement/requirement/requireMine/myRequire.jsx
new file mode 100644
index 00000000..830d7822
--- /dev/null
+++ b/src/achieveRequirement/requirement/requireMine/myRequire.jsx
@@ -0,0 +1,80 @@
+import React, { useEffect, useState } from 'react';
+import classnames from 'classnames';
+import { Pagination, Button } from 'antd';
+import ItemList from '../../components/itemList';
+import DelModal from '../../components/DelModal';
+import { deleteRequirement, getRequirementList } from '../api';
+
+export default (props) => {
+ const [requirementList, setRequirementList] = useState([]);
+ const [curPage, setCurPage] = useState(1);
+ const [total, setTotal] = useState(0);
+ // const [queryType, setQueryType] = useState("my");
+ const [queryType, setQueryType] = useState("all");
+
+ useEffect(() => {
+ getRequireList();
+ }, [curPage, queryType]);
+
+ function getRequireList() {
+ const params = {
+ curPage,
+ pageSize: 10,
+ status: "",
+ tag: "",
+ title: "",
+ typeName: "",
+ currentUser: "",
+ queryType, //all:所有 my:我创建的 tome:指派给我的
+ };
+ getRequirementList(params).then(data => {
+ setRequirementList(data.rows);
+ setTotal(data.total);
+ })
+ }
+
+ function detailItem(id) {
+ props.history.push(`/requirement/requireDetail/${id}`);
+ }
+
+ function editItem(id) {
+ props.history.push(`/requirement/requireEdit/${id}`);
+ }
+
+ function deletItem(id) {
+ DelModal(() => {
+ deleteRequirement(id).then(res => {
+ if (res.code === '1') {
+ props.showNotification("删除成功");
+ getRequireList();
+ } else {
+ props.showNotification("删除失败");
+ }
+ })
+ }, '此操作将删除该记录, 是否继续?');
+ }
+
+ return (
+
+
+
+
+
+
+
+
{ setCurPage(page) }}
+ current={curPage}
+ total={total}
+ />
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/fetch.js b/src/fetch.js
index 9193635d..6c21431e 100644
--- a/src/fetch.js
+++ b/src/fetch.js
@@ -29,7 +29,6 @@ service.interceptors.request.use(config => {
});
// respone拦截器
service.interceptors.response.use(
-
response => {
/**
* 下面的注释为通过response自定义code来标示请求状态,当code返回如下情况为权限有问题,登出并返回到登录页