From e2550b9d741835e1e59eed25a17e004d62dd0919 Mon Sep 17 00:00:00 2001 From: dingyongkang <837816638@qq.com> Date: Thu, 13 Feb 2020 15:38:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BE=E9=A1=B5=E4=B8=8E=E9=87=8C?= =?UTF-8?q?=E7=A8=8B=E7=A2=91=E9=A1=B5=E9=9D=A2=E7=9A=84=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/config/webpack.config.dev.js | 2 +- public/react/package-lock.json | 87 +++--- public/react/package.json | 1 + public/react/src/AppConfig.js | 9 +- public/react/src/forge/Index.js | 13 +- .../src/forge/Main/CoderRootDirectory.js | 8 +- public/react/src/forge/Main/Detail.js | 67 ++++- public/react/src/forge/Main/Index.js | 4 +- public/react/src/forge/Main/IndexItem.js | 2 +- public/react/src/forge/Merge/MergeItem.js | 47 +++ public/react/src/forge/Merge/merge.css | 0 public/react/src/forge/Merge/merge.js | 254 ++++++++++++++++ public/react/src/forge/Order/Detail.js | 221 +++++++++++--- public/react/src/forge/Order/Milepost.js | 244 +++++++++++++++ public/react/src/forge/Order/Nav.js | 3 +- public/react/src/forge/Order/New.js | 43 ++- public/react/src/forge/Order/Tags.js | 283 +++++++++++++++++- .../react/src/forge/Order/UpdateMilepost.js | 231 ++++++++++++++ public/react/src/forge/Order/newMilepost.js | 199 ++++++++++++ public/react/src/forge/Order/order.css | 198 ++++++++++++ public/react/src/forge/Version/VersionItem.js | 14 + public/react/src/forge/Version/version.js | 187 ++++++++++++ 22 files changed, 1990 insertions(+), 127 deletions(-) create mode 100644 public/react/src/forge/Merge/MergeItem.js create mode 100644 public/react/src/forge/Merge/merge.css create mode 100644 public/react/src/forge/Merge/merge.js create mode 100644 public/react/src/forge/Order/Milepost.js create mode 100644 public/react/src/forge/Order/UpdateMilepost.js create mode 100644 public/react/src/forge/Order/newMilepost.js create mode 100644 public/react/src/forge/Version/VersionItem.js create mode 100644 public/react/src/forge/Version/version.js diff --git a/public/react/config/webpack.config.dev.js b/public/react/config/webpack.config.dev.js index 58d5abc4f..8be689595 100644 --- a/public/react/config/webpack.config.dev.js +++ b/public/react/config/webpack.config.dev.js @@ -32,7 +32,7 @@ module.exports = { // See the discussion in https://github.com/facebookincubator/create-react-app/issues/343.s // devtool: "cheap-module-eval-source-map", // 开启调试 - //devtool: "source-map", // 开启调试 + devtool: "source-map", // 开启调试 // These are the "entry points" to our application. // This means they will be the "root" imports that are included in JS bundle. // The first two entry points enable "hot" CSS and auto-refreshes for JS. diff --git a/public/react/package-lock.json b/public/react/package-lock.json index d66fbf62a..3703512a6 100644 --- a/public/react/package-lock.json +++ b/public/react/package-lock.json @@ -94,10 +94,10 @@ "react-transition-group": "^1.2.1" } }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz?cache=0&sync_timestamp=1563089138491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fanymatch%2Fdownload%2F%40types%2Fanymatch-1.3.1.tgz", - "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=" + "@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@types/jss": { "version": "9.5.8", @@ -108,11 +108,6 @@ "indefinite-observable": "^1.0.1" } }, - "@types/node": { - "version": "12.6.3", - "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.6.3.tgz", - "integrity": "sha1-RNUHxWNPhecWRwfKNruiG1IT1Ic=" - }, "@types/prop-types": { "version": "15.7.0", "resolved": "http://registry.npm.taobao.org/@types/prop-types/download/@types/prop-types-15.7.0.tgz", @@ -135,30 +130,6 @@ "@types/react": "*" } }, - "@types/tapable": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.4.tgz" - }, - "@types/uglify-js": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.0.4.tgz", - "integrity": "sha1-lr6uI99vVhhiqDC0KIpJ6GuqwII=", - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.4.35", - "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.4.35.tgz", - "integrity": "sha1-twiOstRx1WReVQPScng8r6dTWDs=", - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "source-map": "^0.6.0" - } - }, "abab": { "version": "1.0.4", "resolved": "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz", @@ -500,8 +471,7 @@ }, "async-validator": { "version": "1.12.2", - "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.12.2.tgz", - "integrity": "sha1-vq5nHnF00pOLe0tp0vt+cit/1yw=" + "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.12.2.tgz" }, "asynckit": { "version": "0.4.0", @@ -6988,6 +6958,11 @@ "object-visit": "^1.0.0" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "material-ui": { "version": "1.0.0-beta.46", "resolved": "http://registry.npm.taobao.org/material-ui/download/material-ui-1.0.0-beta.46.tgz", @@ -7260,19 +7235,6 @@ "resolved": "http://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz", "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s=" }, - "monaco-editor": { - "version": "0.15.6", - "resolved": "http://registry.npm.taobao.org/monaco-editor/download/monaco-editor-0.15.6.tgz", - "integrity": "sha1-1js7BvhvgDRk8AOyUmJ8PrSglIM=" - }, - "monaco-editor-webpack-plugin": { - "version": "1.7.0", - "resolved": "http://registry.npm.taobao.org/monaco-editor-webpack-plugin/download/monaco-editor-webpack-plugin-1.7.0.tgz", - "integrity": "sha1-kgy+7Mol8V1w1Win4RsLpNrxroM=", - "requires": { - "@types/webpack": "^4.4.19" - } - }, "ms": { "version": "2.1.1", "resolved": "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", @@ -9595,6 +9557,19 @@ "prop-types": "^15.5.4" } }, + "react-color": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.18.0.tgz", + "integrity": "sha512-FyVeU1kQiSokWc8NPz22azl1ezLpJdUyTbWL0LPUpcuuYDrZ/Y1veOk9rRK5B3pMlyDGvTk4f4KJhlkIQNRjEA==", + "requires": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.11", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, "react-content-loader": { "version": "3.4.2", "resolved": "http://registry.npm.taobao.org/react-content-loader/download/react-content-loader-3.4.2.tgz", @@ -9834,6 +9809,14 @@ "query-string": "^4.2.3" } }, + "reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "requires": { + "lodash": "^4.0.1" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", @@ -10456,7 +10439,8 @@ "reqwest": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/reqwest/-/reqwest-2.0.5.tgz", - "integrity": "sha1-APsVrEkYxBnKgrQ/JMeIguZgOaE=" + "integrity": "sha1-APsVrEkYxBnKgrQ/JMeIguZgOaE=", + "dev": true }, "resize-observer-polyfill": { "version": "1.5.1", @@ -11554,6 +11538,11 @@ "resolved": "http://registry.npm.taobao.org/tiny-warning/download/tiny-warning-1.0.2.tgz", "integrity": "sha1-Hfrnce4aBDlr394no63OvGtkiyg=" }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, "tmp": { "version": "0.0.33", "resolved": "http://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", diff --git a/public/react/package.json b/public/react/package.json index b9807f354..d5a68c0a5 100644 --- a/public/react/package.json +++ b/public/react/package.json @@ -73,6 +73,7 @@ "react-beautiful-dnd": "^10.0.4", "react-codemirror": "^1.0.0", "react-codemirror2": "^6.0.0", + "react-color": "^2.18.0", "react-content-loader": "^3.1.1", "react-dev-utils": "^5.0.0", "react-dom": "^16.9.0", diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index 0c8e8d357..6bbb78c60 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -45,15 +45,16 @@ export function initAxiosInterceptors(props) { // https://github.com/axios/axios/issues/1497 // TODO 读取到package.json中的配置? - var proxy = "http://localhost:3000" - // proxy = "http://testbdweb.trustie.net" - // proxy = "http://testbdweb.educoder.net" + var //proxy = "http://localhost:3000" + //proxy = "http://testbdweb.trustie.net" + //proxy = "http://testbdweb.educoder.net" // proxy = "https://testeduplus2.educoder.net" //proxy="http://47.96.87.25:48080" // proxy="https://pre-newweb.educoder.net" // proxy="https://test-newweb.educoder.net" //proxy="https://test-jupyterweb.educoder.net" - //proxy="http://192.168.2.63:3001" + //proxy="http://192.168.2.63:3001" + proxy="http://123.59.135.93:56666" // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 diff --git a/public/react/src/forge/Index.js b/public/react/src/forge/Index.js index 445a6b1e5..26e627b09 100644 --- a/public/react/src/forge/Index.js +++ b/public/react/src/forge/Index.js @@ -1,6 +1,6 @@ import React , { Component } from 'react'; -import {Route,Switch} from 'react-router-dom'; +import {Route,Switch,Link} from 'react-router-dom'; import { SnackbarHOC } from 'educoder'; @@ -14,6 +14,8 @@ import Loading from '../Loading'; import axios from 'axios'; + + const ProjectNew = Loadable({ loader: () => import('./New/Index'), loading: Loading, @@ -28,11 +30,12 @@ const ProjectDetail = Loadable({ loading: Loading, }) + class Index extends Component{ constructor(props){ super(props); this.state={ - current_user:undefined + current_user:undefined, } } componentDidMount=()=>{ @@ -53,8 +56,9 @@ class Index extends Component{ console.log(error) }) } + render(){ - const {current_user} = this.state; + const { current_user } = this.state; return( () } > - () } > ) + } } export default CNotificationHOC() ( SnackbarHOC() ( Index )); diff --git a/public/react/src/forge/Main/CoderRootDirectory.js b/public/react/src/forge/Main/CoderRootDirectory.js index e812d66d9..78b73d1ae 100644 --- a/public/react/src/forge/Main/CoderRootDirectory.js +++ b/public/react/src/forge/Main/CoderRootDirectory.js @@ -47,10 +47,9 @@ class CoderRootDirectory extends Component{ // 获取根目录 getProjectRoot=(branch)=>{ - const { login } = this.props.current_user; + //const { login } = this.props.current_user; const { projectsId } = this.props.match.params; - - const url = `/${login}/${projectsId}/entries.json`; + const url = `/${this.props&&this.props.current_user}/${projectsId}/entries.json`; axios.get((url),{ params:{ branch @@ -103,11 +102,12 @@ class CoderRootDirectory extends Component{ // 获取子目录 getFileDetail=(arr)=>{ const { current_user } = this.props; + const { projectsId } = this.props.match.params; const { branch } = this.state; - const url =`/${current_user.login}/${projectsId}/sub_entries.json`; + const url =`/${this.props&¤t_user.login}/${projectsId}/sub_entries.json`; axios.get(url,{ params:{ diff --git a/public/react/src/forge/Main/Detail.js b/public/react/src/forge/Main/Detail.js index 7ce0adaa8..4c3cd1b11 100644 --- a/public/react/src/forge/Main/Detail.js +++ b/public/react/src/forge/Main/Detail.js @@ -32,6 +32,21 @@ const CoderRootIndex = Loadable({ loader: () => import('./CoderRootIndex'), loading: Loading, }) +const OrderMilepost = Loadable({ + loader: () => import('../Order/Milepost'), + loading: Loading, +}) + +const OrdernewMilepost = Loadable({ + loader: () => import('../Order/newMilepost'), + loading: Loading, +}) + +const OrderupdateMilepost = Loadable({ + loader: () => import('../Order/UpdateMilepost'), + loading: Loading, +}) + /** * permission:Manager:管理员,Reporter:报告人员(只有读取权限),Developer:开发人员(除不能设置仓库信息外) */ @@ -46,12 +61,29 @@ class Detail extends Component{ project_id:undefined, watchers_count:undefined , praises_count:undefined , - forked_count:undefined + forked_count:undefined, + current_user:undefined, + } } + getUserInfo=()=>{ + const url = `/users/me.json`; + axios.get(url).then(result=>{ + if(result && result.data.login){ + this.setState({ + current_user:result.data + }) + this.getDetail(); + } + }).catch(error=>{ + console.log(error) + }) + } + + componentDidMount=()=>{ - this.getDetail(); + this.getUserInfo(); } componentDidUpdate=(provState)=>{ @@ -60,10 +92,14 @@ class Detail extends Component{ } } + + + getDetail=()=>{ - const { login } = this.props.current_user; + // const { login } = this.props.current_user; + const { current_user } = this.state; const { projectsId } = this.props.match.params; - const url = `/${login}/${projectsId}.json`; + const url = `/${current_user&¤t_user.login}/${projectsId}.json`; axios.get(url).then((result)=>{ if(result){ this.setState({ @@ -216,6 +252,26 @@ class Detail extends Component{ (props) => () } > + {/* 里程碑 */} + () + } + > + {/* 新建里程碑 */} + () + } + > + + {/*修改里程碑*/} + () + } + > + {/* 新建工单 */} @@ -225,6 +281,9 @@ class Detail extends Component{ } > + + + {/* 代码Index */} { const url = `/projects/group_type_list.json`; - axios.get(url).then((result)=>{ if(result){ this.setState({ @@ -220,7 +219,8 @@ class Index extends Component{ - + 新建 + + 新建 + diff --git a/public/react/src/forge/Main/IndexItem.js b/public/react/src/forge/Main/IndexItem.js index a79341621..f5a02b4fb 100644 --- a/public/react/src/forge/Main/IndexItem.js +++ b/public/react/src/forge/Main/IndexItem.js @@ -16,7 +16,7 @@ class IndexItem extends Component{
- {item.name} + {item.name} { item.forked_count ? { item.forked_count}:"" } { item.praises_count } diff --git a/public/react/src/forge/Merge/MergeItem.js b/public/react/src/forge/Merge/MergeItem.js new file mode 100644 index 000000000..f9f5663bb --- /dev/null +++ b/public/react/src/forge/Merge/MergeItem.js @@ -0,0 +1,47 @@ +import React , { Component } from 'react'; +import { Link } from 'react-router-dom'; + +class MergeItem extends Component{ + render(){ + const { issues , search_count , page , limit } = this.props; + const { projectsId } = this.props.match.params; + const renderList =()=>{ + if(issues && issues.length > 0){ + return( + issues.map((item,key)=>{ + return( +
+
+

+ # {search_count - (key + (page-1) * limit)} + {item.name} +

+

+ {item.created_at} + { item.journals_count ? {item.journals_count} : "" } +

+
+
    +
  • {item.issue_tags || "--"}
  • +
  • {item.issue_type || "--"}
  • +
  • {item.tracker || "--"}
  • +
  • {item.author_name || "--"}
  • +
  • {item.assign_user_name || "--"}
  • +
  • {item.priority || "--"}
  • +
  • {item.done_ratio || "--"}
  • +
+
+ ) + }) + ) + } + } + return( +
+ {renderList()} +
+ ) + } +} + +export default MergeItem; \ No newline at end of file diff --git a/public/react/src/forge/Merge/merge.css b/public/react/src/forge/Merge/merge.css new file mode 100644 index 000000000..e69de29bb diff --git a/public/react/src/forge/Merge/merge.js b/public/react/src/forge/Merge/merge.js new file mode 100644 index 000000000..bae55d60b --- /dev/null +++ b/public/react/src/forge/Merge/merge.js @@ -0,0 +1,254 @@ +import React , { Component } from "react"; +import {Link} from 'react-router-dom'; +import { Input ,Dropdown , Menu , Icon , Pagination , Spin } from 'antd'; +import NoneData from '../../modules/courses/coursesPublic/NoneData'; +import Nav from '../Order/Nav'; +import MergeItem from './MergeItem'; + + +import axios from 'axios'; + +const Search = Input.Search; +/** + * issue_chosen:下拉的筛选列表, + * data:列表接口返回的所有数据, + * issues:列表数组, + * isSpin:加载中, + * search:搜索关键字, + * author_id:发布者id, + * assigned_to_id:指派给。。。的id, + * limit:每页条数, + * page:当前页, + * search_count:列表总条数 + * issue_type:搜索条件 + */ +class merge extends Component{ + constructor(props){ + super(props); + this.state={ + issue_chosen:undefined, + data:undefined, + issues:undefined, + isSpin:false, + search:undefined, + author_id:undefined, + assigned_to_id:undefined, + limit:15, + page:1, + search_count:undefined, + issue_type:undefined + } + } + + componentDidMount=()=>{ + this.getSelectList(); + this.getIssueList(); + } + + getSelectList=()=>{ + const { projectsId } = this.props.match.params; + + const url = `/projects/${projectsId}/issues/index_chosen.json`; + axios.get(url).then((result)=>{ + if(result){ + this.setState({ + issue_chosen:result.data.issue_chosen + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + // 获取列表数据 + getIssueList=(page,limit,search,author_id,assigned_to_id,id,value)=>{ + const { projectsId } = this.props.match.params; + + const url = `/projects/${projectsId}/issues.json`; + axios.get(url,{ + params:{ + page,limit,search,author_id,assigned_to_id, + [id]:value + } + }).then((result)=>{ + if(result){ + this.setState({ + data:result.data, + issues:result.data.issues, + search_count:result.data.search_count, + isSpin:false + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + getOption=(e,id)=>{ + this.setState({ + [id]:e.key + }) + const { page,limit,search,author_id,assigned_to_id } = this.state; + this.getIssueList(page,limit,search,author_id,assigned_to_id,id,e.key); + } + + renderMenu =(array,name,id)=>{ + return( + + this.getOption(e,id)}>{name} + { + array && array.length > 0 && array.map((item,key)=>{ + return( + this.getOption(e,id)}>{item.name} + ) + }) + } + + ) + } + + // 翻页 + ChangePage=(page)=>{ + this.setState({ + page, + isSpin:true + }) + const {limit,search} = this.state; + this.getIssueList(page,limit,search); + } + + // 搜索 + searchFunc=(value)=>{ + this.setState({ + search:value, + isSpin:true + }) + const {page,limit} = this.state; + this.getIssueList(page,limit,value); + } + + // 筛选:全部、指派给我、由我创建 + ChangeAssign=(type)=>{ + const { limit, search} = this.state; + this.setState({ + isSpin:true + }) + if(type){ + const { current_user } = this.props; + if(type===1){ + this.setState({ + page:1, + author_id:current_user.user_id, + assigned_to_id:undefined + }) + this.getIssueList(1,limit,search,current_user.user_id,undefined); + }else{ + this.setState({ + page:1, + author_id:undefined, + assigned_to_id:current_user.user_id + }) + this.getIssueList(1,limit,search,undefined,current_user.user_id); + } + }else{ + this.setState({ + page:1, + author_id:undefined, + assigned_to_id:undefined + }) + this.getIssueList(1,limit,search,undefined,undefined); + } + } + + render(){ + + const { issue_chosen , issues , limit , page , search_count , data , assigned_to_id , author_id , isSpin } = this.state; + const { projectsId } = this.props.match.params; + + const Paginations = ( + + { + search_count > limit ? +
+ +
:"" + } +
+ ) + return( +
+
+
+
+

+ {data && data.open_count}个开启中 + {data && data.close_count}个已关闭 +

+
+ +
+
+ +
+
+ +
+
    +
  • + + 标签 + +
  • +
  • + + 类型 + +
  • +
  • + + 分类 + +
  • +
  • + + 发布人 + +
  • +
  • + + 指派人 + +
  • +
  • + + 优先度 + +
  • +
  • + + 完成度 + +
  • +
+
+ { + search_count === 0 ? + + : + + } + { Paginations } +
+ +
+ ) + } +} +export default merge; \ No newline at end of file diff --git a/public/react/src/forge/Order/Detail.js b/public/react/src/forge/Order/Detail.js index 08bc91cac..e0915cd49 100644 --- a/public/react/src/forge/Order/Detail.js +++ b/public/react/src/forge/Order/Detail.js @@ -3,13 +3,22 @@ import {Link} from 'react-router-dom'; import axios from 'axios'; import Nav from './Nav'; +import UploadComponent from '../Upload/Index'; + +import{ Modal,List,Form,Input,Tooltip } from 'antd' + +const TextArea = Input.TextArea; class Detail extends Component{ constructor(props){ super(props); this.state={ - data:undefined + data:undefined, + isShow:false, + imgsrc:'', + //图片区域是否显示 none 隐藏 block 显示 + display:'none' } } @@ -31,53 +40,193 @@ class Detail extends Component{ }) } + handleok=() => { + this.setState({ + isShow:false + }); +}; +handleCancel=()=>{ + this.setState({ + isShow:false + }); +} + +imgshow=()=>{ + this.setState({ + isShow:true + }); +}; + + + + render(){ const { projectsId } = this.props.match.params; const { data } = this.state; + const numbers = [1, 2, 3, 4, 5]; + const valuse = [ + { + title: 'Title 1', + }, + { + title: 'Title 2', + }, + { + title: 'Title 3', + }, + { + title: 'Title 4', + }, + { + title: 'Title 1', + }, + { + title: 'Title 2', + }, + { + title: 'Title 3', + }, + { + title: 'Title 4', + }, + { + title: 'Title 1', + }, + { + title: 'Title 2', + }, + { + title: 'Title 3', + }, + { + title: 'Title 4', + }, + ]; + + + const listTowItems = numbers.map((numbers) => +
  • +
    +
    + +

    张三 + + 于12日前评论 + + 评论 relase +

    +
    +
  • + ); + + const listItems = numbers.map((numbers) => +
  • +
    + +
    +

    张三 + + 于12日前评论 + + 评论

    创建Issue 创建Issue 创建Issue
    +

    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

    +
    +
    + ( + + + + )} + /> +
    +
    +
    +
    + {listTowItems} +
    +
  • + ); + return(
    -
    -