From f0eae6d4db50e46f0f672317b1df354172b43be0 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Thu, 9 Mar 2023 13:48:11 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=A1=AE=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Issues/Component/addTagsBox.jsx | 61 ++++----- src/forge/Issues/Component/chooseMenu.jsx | 151 +++++++++++++--------- src/forge/Issues/Pages/details.jsx | 50 +++++-- src/forge/Issues/Pages/new.jsx | 35 ++++- src/forge/Issues/index.scss | 36 ++++-- src/forge/Merge/MergeItem.js | 13 +- src/forge/Merge/MessageCount.js | 16 ++- src/forge/Merge/merge.js | 4 + src/forge/Merge/merge_form.js | 21 +-- src/forge/Order/order.scss | 9 ++ 10 files changed, 264 insertions(+), 132 deletions(-) diff --git a/src/forge/Issues/Component/addTagsBox.jsx b/src/forge/Issues/Component/addTagsBox.jsx index be09540a..562b70dd 100644 --- a/src/forge/Issues/Component/addTagsBox.jsx +++ b/src/forge/Issues/Component/addTagsBox.jsx @@ -3,7 +3,7 @@ import { Form , Modal , Input, Button } from 'antd'; import ColorCard from './colorCard'; import axios from 'axios'; -function AddTagsBox({visible,onCancel, onSuccess , form ,owner , projectsId}){ +function AddTagsBox({onSuccess , form ,owner , projectsId,onCancel}){ const { getFieldDecorator , getFieldsValue } = form; const [ colors , setColors ] = useState(undefined); const [ defaultColor , setDefaultColor ]= useState("#F17013"); @@ -23,38 +23,33 @@ function AddTagsBox({visible,onCancel, onSuccess , form ,owner , projectsId}){ } return( - -
- - {getFieldDecorator('name',{ - rules:[ - { - required:true, - message:"请输入标记名称" - } - ], - validateTrigger:"onInput", - })()} - - - {getFieldDecorator('desc',{rules:[], - validateTrigger:"onInput", - })()} - - - - - -
-
+
+

标记管理

+ + {getFieldDecorator('name',{ + rules:[ + { + required:true, + message:"请输入标记名称" + } + ], + validateTrigger:"onInput", + })()} + + + {getFieldDecorator('desc',{rules:[], + validateTrigger:"onInput", + })()} + + + + +
+ + +
+ ) } export default Form.create({ name: 'Bind' })(AddTagsBox); \ No newline at end of file diff --git a/src/forge/Issues/Component/chooseMenu.jsx b/src/forge/Issues/Component/chooseMenu.jsx index a05a5772..e0016c90 100644 --- a/src/forge/Issues/Component/chooseMenu.jsx +++ b/src/forge/Issues/Component/chooseMenu.jsx @@ -2,6 +2,7 @@ import React ,{ useState , useEffect , useRef } from 'react'; import { findDOMNode } from 'react-dom'; import { Dropdown , Menu , Input , message, Button} from 'antd'; import { getImageUrl } from 'educoder'; +import AddTagsBox from './addTagsBox'; const { Search } = Input; /** @@ -30,12 +31,13 @@ function ChooseMenu({ onAdd, headImg, menus, - chooseFunc,double,colorFlag,mustFlag,removeFlag + chooseFunc,double,colorFlag,mustFlag,removeFlag,owner,projectsId }){ const [ visible , setVisible ] = useState(false); const [ searchValue , setSearchValue ]= useState(undefined); const [ valuesId , setValuesId ] = useState([]); const [ count , setCount ] = useState(double); + const [ content , setContent ] = useState(false); const [ saveList , setSaveList ] = useState(undefined); @@ -43,7 +45,9 @@ function ChooseMenu({ const refBox = useRef(null); useEffect(() => { - document.addEventListener('click', clickMe , false); + if(saveList && saveList.length>0){ + document.addEventListener('click', clickMe , false); + } }, []) const clickMe = ({ target }) => { @@ -53,10 +57,12 @@ function ChooseMenu({ if (faComponent && boxComponent) { const isChild = faComponent.contains(target); const isBox = boxComponent.contains(target); - console.log(target); - const pointer = !target || (target && target.className && (target.className.indexOf("removeicon")===-1 && target.className.indexOf("icon-guanbi")===-1)); - if(!isChild && !isBox && pointer){ + const arr = ["removeicon","iconfont icon-guanbi font-12 color-white","iconfont icon-guanbi font-12 color-blue","icon-a-bianji12","color-blue font-15 tagManage"]; + console.log(target.className); + const pointer = arr.includes(target.className); + if(!isChild && !isBox && !pointer){ setVisible(false); + setContent(false); } } } @@ -154,6 +160,7 @@ function ChooseMenu({ setCount(relist ? relist.length :0); if(!double){ setVisible(false); + setContent(false); chooseFunc(relist); } } @@ -161,6 +168,7 @@ function ChooseMenu({ // 确认按钮 function onSureFunc(){ setVisible(false); + setContent(false); chooseFunc(saveList); } // 移除选择的项 @@ -181,6 +189,10 @@ function ChooseMenu({ setCount(filter ? filter.length :0); chooseFunc(filter); } + + function onSuccess(){ + + } return(
  • @@ -193,71 +205,82 @@ function ChooseMenu({ overlay={
    { - double && saveList && saveList.length>0? -
      - { - saveList.map((i,k)=>{ - console.log(i) - return( -
    • - {i.name} - removeSaveFunc(i.id)}> -
    • - ) - }) - } -
    - :"" - } - { searchFunc && -
    - -
    - } - { - menus && menus.length >0? - - { - menus.map((i,k)=>{ - return( - chooseMenu(i)}> - {i.name} - - ) - }) - } - - : -
    -

    {searchValue ? 暂无{placeholder}“{searchValue}”: `暂无${placeholder}`}

    -
    - } -
    + !content ?
    - { onAdd && - {setVisible(false);onAdd()}}> - 标记管理 + { + double && saveList && saveList.length>0? +
      + { + saveList.map((i,k)=>{ + return( +
    • + {i.name} + removeSaveFunc(i.id)}> +
    • + ) + }) + } +
    + :"" + } + { searchFunc && +
    + +
    + } + { + menus && menus.length >0? + + { + menus.map((i,k)=>{ + return( + chooseMenu(i)}> + {i.name} + + ) + }) + } + + : +
    +

    {searchValue ? 暂无{placeholder}“{searchValue}”: `暂无${placeholder}`}

    +
    + } +
    + + { + double && (count<0 ? +

    最多添加{double}个{placeholder}!

    + : +

    还可添加{double - count}个{placeholder}!

    + ) }
    { - double && (count<0 ? -

    最多添加{double}个{placeholder}!

    - : -

    还可添加{double - count}个{placeholder}!

    - ) + double && +
    + + +
    } -
    - { - double && -
    - -
    + : + setContent(false)} + onSuccess={onSuccess} /> }
    }> diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx index f8322dcb..0bcf7890 100644 --- a/src/forge/Issues/Pages/details.jsx +++ b/src/forge/Issues/Pages/details.jsx @@ -1,5 +1,5 @@ -import React , { useEffect , useState , forwardRef } from 'react'; -import { Spin , Form } from 'antd'; +import React , { useEffect , useState , forwardRef , useRef } from 'react'; +import { Spin , Form , InputNumber } from 'antd'; import { getImageUrl } from 'educoder'; import { Link } from 'react-router-dom'; import { Box , LongWidth } from '../../Component/layout'; @@ -7,7 +7,6 @@ import RenderHtml from "../../../components/render-html"; import DropMenu from '../Component/dropMenu'; import NewPanel from '../Component/newPanel'; import Attachments from "../../Upload/attachment"; -import AddTagsBox from '../Component/addTagsBox'; import DelBox from '../Component/delBox'; import Date from '../Component/date'; import moment from 'moment'; @@ -51,11 +50,14 @@ function Details(props){ const [ tag_choose , setTag_choose ] = useState([]); const [ millstone_choose , setMillstone_choose ] = useState([]); const [ branch_choose , setBranch_choose ] = useState([]); + const [ rewardAmount , setRewardAmount ] = useState(undefined); + const [ rewardFlag , setRewardFlag ] = useState(false); const pathname = props.history.location.pathname; const permission = props && props.projectDetail && props.projectDetail.permission; let colors = ["#1abcb1","#28be6c","#e67e22","#db3d1d"]; + const ref = useRef(null); - const {projectDetail} = props; + const {projectDetail , open_blockchain} = props; useEffect(()=>{ if(pathname === `/${owner}/${projectsId}/issues/${index}/copy`){ setEdit(true); @@ -96,6 +98,7 @@ function Details(props){ setTag_choose(data.tags); setMillstone_choose(data.milestone && data.milestone.id ? [data.milestone]:[]); setBranch_choose(data.branch_name ? [{name:data.branch_name}] : []); + setRewardAmount(data.blockchain_token_num); data.start_date && setStartDate(moment(data.start_date).format('YYYY-MM-DD')); data.due_date && setDueDate(moment(data.due_date).format('YYYY-MM-DD')); @@ -220,7 +223,7 @@ function Details(props){ } // 可单个编辑保存右侧的项(!copy:非复制状态下) - function saveForeach(c,s,p,t,m,b,sDate,eDate){ + function saveForeach(c,s,p,t,m,b,sDate,eDate,rewardAmount){ if(!copy){ const url = `/v1/${owner}/${projectsId}/issues/${index}`; axios.patch(url,{ @@ -231,7 +234,8 @@ function Details(props){ issue_tag_ids: t?t:undefined, assigner_ids: c?c:undefined, start_date:sDate, - due_date:eDate + due_date:eDate, + blockchain_token_num:rewardAmount }).then(result=>{ if(result){ Init(); @@ -315,6 +319,22 @@ function Details(props){ // 更新操作日志 setCommentReload(Math.random()); } + + function editReward(){ + setRewardFlag(true); + setTimeout(() => { + ref.current && ref.current.focus(); + }, 100); + } + + // 悬赏金额 失去焦点保存数据 + function amountBlur(e){ + setRewardFlag(false); + const value = e.target.value; + if(value && value >= 0){ + saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,value); + } + } return( details ? @@ -325,12 +345,6 @@ function Details(props){ onSuccess={deleteFunc} content={

    您确定要删除当前疑修?

    } /> - setVisible(false)} onSuccess={onSuccess} - /> { edit ?
    @@ -435,6 +449,8 @@ function Details(props){ removeFlag editFlag={details && !details.user_permission} onAdd={permission && permission !== "Reporter" ? ()=>setVisible(true) :false} + owner + projectsId /> {setBranch_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(undefined,undefined,undefined,undefined,undefined,l);}} /> + { + open_blockchain && +
  • + + 悬赏金额 + {!(details && !details.user_permission) && } + + setRewardAmount(value)} className="borderNo mt5" disabled={!rewardFlag}/> +
  • + } {setStartDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={details && !details.user_permission}/> {setDueDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={details && !details.user_permission}/> diff --git a/src/forge/Issues/Pages/new.jsx b/src/forge/Issues/Pages/new.jsx index a93c889c..10ce3796 100644 --- a/src/forge/Issues/Pages/new.jsx +++ b/src/forge/Issues/Pages/new.jsx @@ -1,5 +1,5 @@ -import React , { useEffect , useState , forwardRef } from 'react'; -import { Form } from 'antd'; +import React , { useEffect , useState , forwardRef , useRef } from 'react'; +import { Form , InputNumber } from 'antd'; import { Box , LongWidth } from '../../Component/layout'; import DropMenu from '../Component/dropMenu'; import ChooseMenu from '../Component/chooseMenu'; @@ -39,10 +39,14 @@ function New(props){ const [ start_date, setStartDate ] = useState("");//moment().format('YYYY-MM-DD') const [ due_date, setDueDate ] = useState(""); + const [ rewardAmount , setRewardAmount ] = useState(undefined); + const [ rewardFlag , setRewardFlag ] = useState(false); const owner = props.match.params.owner; const projectsId = props.match.params.projectsId; const permission = props && props.projectDetail && props.projectDetail.permission; + const { open_blockchain } = props; + const ref = useRef(null); useEffect(()=>{ if(projectDetail){ @@ -197,7 +201,8 @@ function New(props){ issue_tag_ids:t, assigner_ids:a, attachment_ids:fileList, - start_date,due_date,receivers_login + start_date,due_date,receivers_login, + blockchain_token_num:rewardAmount }).then(result=>{ if(result && result.data && result.data.project_issues_index){ props.showNotification("任务创建成功!"); @@ -207,6 +212,19 @@ function New(props){ } + function editReward(){ + setRewardFlag(true); + setTimeout(() => { + ref.current && ref.current.focus(); + }, 100); + } + + // 悬赏金额 失去焦点保存数据 + function amountBlur(e){ + setRewardFlag(false); + const value = e.target.value; + value && value>=0 && setRewardAmount(value); + } return(
    {setTag_choose(list);}} double={3} colorFlag="2" + removeFlag onAdd={permission && permission !== "Reporter" ? ()=>setVisible(true) :false} /> {setBranch_choose(list);}} /> + { + open_blockchain && +
  • + + 悬赏金额 + {!(milepostId ? true : false) && } + + setRewardAmount(value)} className="borderNo mt5" disabled={!rewardFlag}/> +
  • + } setStartDate(date)}/> setDueDate(date)}/>
    diff --git a/src/forge/Issues/index.scss b/src/forge/Issues/index.scss index b30794e9..6952cd97 100644 --- a/src/forge/Issues/index.scss +++ b/src/forge/Issues/index.scss @@ -1,3 +1,17 @@ +.borderNo.ant-input,.borderNo .ant-input-number-input,.borderNo,.borderNo.ant-input-number-focused{ + border:none!important; + padding:4px 0px!important; + background-color: transparent!important; + box-shadow: none!important; + .ant-input-number-handler-wrap{ + display: none; + } + &:focus{ + border:none!important; + box-shadow: none!important; + } +} + .pagebox{ width: 1200px; margin:0px auto; @@ -504,6 +518,19 @@ } } } +.addTags_form{ + .ant-row.ant-form-item{ + margin-bottom: 12px; + } + .manageTitle{ + margin-bottom: 20px!important; + padding-bottom: 15px; + line-height: 22px; + color:#5f6872; + font-size:16px; + border-bottom:1px solid #e1e3e8; + } +} .addTagsModal{ .ant-modal-content{ background-image:linear-gradient(359.37deg,#ebf3ff 0%,#f8fbff 55.01%,#f1f5ff 100%); @@ -525,15 +552,6 @@ .ant-modal-close{ top:0px !important; } - .addTags_form{ - .ant-row.ant-form-item{ - margin-bottom: 12px; - } - .ant-col.ant-form-item-label{ - height: 28px; - line-height: 28px; - } - } .popover{ left: 94px; top:0px; diff --git a/src/forge/Merge/MergeItem.js b/src/forge/Merge/MergeItem.js index 23ad1a14..ece07f35 100644 --- a/src/forge/Merge/MergeItem.js +++ b/src/forge/Merge/MergeItem.js @@ -42,7 +42,7 @@ class MergeItem extends Component { }; render() { - const { issues, project_name, project_author_name , user_admin_or_developer} = this.props; + const { issues, project_name, project_author_name , user_admin_or_developer , open_blockchain} = this.props; const { projectsId , owner } = this.props.match.params; const { current_user } = this.props; const renderList = () => { @@ -143,6 +143,17 @@ class MergeItem extends Component { onMouseMove={() => this.onMouseMove(item.id)} onMouseOut={() => this.onMouseOut()} > + {item.attached_issues && item.attached_issues.length>0 && open_blockchain && +
  • + { + item.attached_issues.map((i,k)=>{ + return( + #{i.project_issues_index} + ) + }) + } +
  • + }
  • {item.priority}
  • {this.set_issue_tags(item.issue_tags)}
  • diff --git a/src/forge/Merge/MessageCount.js b/src/forge/Merge/MessageCount.js index 012cbacc..cc23d637 100644 --- a/src/forge/Merge/MessageCount.js +++ b/src/forge/Merge/MessageCount.js @@ -350,7 +350,7 @@ class MessageCount extends Component { pull_request, conflict_files } = this.state; - const { current_user, projectDetail } = this.props; + const { current_user, projectDetail ,project } = this.props; const menu = ( this.getOption(e)}> @@ -370,6 +370,7 @@ class MessageCount extends Component { const permission = projectDetail && (projectDetail.permission === "Admin" || projectDetail.permission === "Owner" || projectDetail.permission === "Manager"); const userLogin = current_user && current_user.login; const operate = userLogin && projectDetail && pr_status === 0 && permission; + const open_blockchain = project && project.open_blockchain; return (
    {data ? ( @@ -444,6 +445,19 @@ class MessageCount extends Component { : "更新于"} {data.pr_time} + { + open_blockchain && data.attached_issues && data.attached_issues.length>0 ? + 关联issue: + { + data.attached_issues.map((i,k)=>{ + return( + #{i.project_issues_index} + ) + }) + } + + :"" + } 审查人员: {data.issue.assign_user_name ? ( diff --git a/src/forge/Merge/merge.js b/src/forge/Merge/merge.js index e7a6c7de..e901e628 100644 --- a/src/forge/Merge/merge.js +++ b/src/forge/Merge/merge.js @@ -236,6 +236,8 @@ class merge extends Component { } render() { const { projectsId , owner } = this.props.match.params; + const { project } = this.props; + const open_blockchain = project && project.open_blockchain; const { issue_chosen, issues, @@ -318,6 +320,7 @@ class merge extends Component {
      + { open_blockchain &&
    • 关联疑修
    • }
    • ):""} diff --git a/src/forge/Merge/merge_form.js b/src/forge/Merge/merge_form.js index 0b6f4114..0fc0d595 100644 --- a/src/forge/Merge/merge_form.js +++ b/src/forge/Merge/merge_form.js @@ -91,24 +91,25 @@ class MergeForm extends Component { set_defatul = () => { const { data, merge_type } = this.props; if (data && merge_type === "edit") { + console.log("dddddddd",data); this.setState({ desc: data.body, issue_tag_ids: data.issue_tag_ids ? data.issue_tag_ids[0] : undefined, fixed_version_id: data.fixed_version_id ? String(data.fixed_version_id) : undefined, assigned_to_id: data.assigned_to_id ? String(data.assigned_to_id) : undefined, priority_id: data.priority_id ? String(data.priority_id) :undefined, - issue_id:data.attached_issue_ids ? data.attached_issue_ids :undefined, + issue_id:data.attached_issues && data.attached_issues.length>0 ? String(data.attached_issues[0].id) :undefined, title: data.title, + },()=>{ + this.InitData(); }); } - this.InitData(); }; InitData = () => { - setTimeout(() => { - this.props.form.setFieldsValue({ - ...this.state, - }); - }, 100); + console.log(this.state.issue_id); + this.props.form.setFieldsValue({ + ...this.state, + }); }; onPanelChange = (time, mode) => { @@ -212,6 +213,7 @@ class MergeForm extends Component { head: pull, base: merge, receivers_login:atWhoLoginList, + attached_issue_ids:values.issue_id ? [values.issue_id] :undefined }) .then((result) => { if (result) { @@ -255,7 +257,8 @@ class MergeForm extends Component { }; render() { - const { merge_type } = this.props; + const { merge_type , project } = this.props; + const open_blockchain = project && project.open_blockchain; const { getFieldDecorator } = this.props.form; const { projectsId, mergeId ,owner } = this.props.match.params; const { @@ -404,7 +407,7 @@ class MergeForm extends Component { )} - + {getFieldDecorator("issue_id", { initialValue: issue_id, })( diff --git a/src/forge/Order/order.scss b/src/forge/Order/order.scss index d0e64df2..912ce6e8 100644 --- a/src/forge/Order/order.scss +++ b/src/forge/Order/order.scss @@ -224,6 +224,15 @@ border-bottom: 1px solid #eee; padding: 16px 0px 16px 20px; } +.issueIndex{ + display: inline-block; + height:19px; + line-height:19px; + background-color:rgba(213, 220, 246, 0.36); + border-radius:4px; + padding:0px 8px; + color: #666!important; +} .issueItem:last-child{ border-bottom: none; } From 95c1d6a4f847a835f39a70cc9817d482215f3190 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Thu, 9 Mar 2023 14:31:12 +0800 Subject: [PATCH 2/5] save --- src/forge/Issues/Component/addTagsBox.jsx | 53 +++++++++++++---------- src/forge/Issues/Component/chooseMenu.jsx | 9 ++-- src/forge/Issues/Pages/details.jsx | 2 +- src/forge/Issues/Pages/new.jsx | 8 ++-- src/forge/Issues/index.scss | 4 ++ 5 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/forge/Issues/Component/addTagsBox.jsx b/src/forge/Issues/Component/addTagsBox.jsx index 562b70dd..7d916e6f 100644 --- a/src/forge/Issues/Component/addTagsBox.jsx +++ b/src/forge/Issues/Component/addTagsBox.jsx @@ -1,21 +1,25 @@ import React , { useState } from 'react'; -import { Form , Modal , Input, Button } from 'antd'; +import { Form , Input, Button } from 'antd'; import ColorCard from './colorCard'; import axios from 'axios'; function AddTagsBox({onSuccess , form ,owner , projectsId,onCancel}){ - const { getFieldDecorator , getFieldsValue } = form; + const { getFieldDecorator , getFieldsValue , validateFields } = form; const [ colors , setColors ] = useState(undefined); const [ defaultColor , setDefaultColor ]= useState("#F17013"); function saveFunc(){ - const { desc , name } = getFieldsValue(); - const url = `/v1/${owner}/${projectsId}/issue_tags`; - axios.post(url,{ - name,description:desc,color:colors || defaultColor - }).then(result=>{ - result && onSuccess(); - }).catch(error=>{}) + validateFields((error,values)=>{ + if(!error){ + const { desc , name } = getFieldsValue(); + const url = `/v1/${owner}/${projectsId}/issue_tags`; + axios.post(url,{ + name,description:desc,color:colors || defaultColor + }).then(result=>{ + result && onSuccess(); + }).catch(error=>{}) + } + }) } function getColor(colors){ @@ -25,26 +29,27 @@ function AddTagsBox({onSuccess , form ,owner , projectsId,onCancel}){ return(

      标记管理

      - - {getFieldDecorator('name',{ - rules:[ - { - required:true, - message:"请输入标记名称" - } - ], - validateTrigger:"onInput", - })()} - +
      + + {getFieldDecorator('name',{ + rules:[ + { + required:true, + message:"请输入标记名称" + } + ], + validateTrigger:"onInput", + })()} + + + + +
      {getFieldDecorator('desc',{rules:[], validateTrigger:"onInput", })()} - - -
      diff --git a/src/forge/Issues/Component/chooseMenu.jsx b/src/forge/Issues/Component/chooseMenu.jsx index e0016c90..ac512d9e 100644 --- a/src/forge/Issues/Component/chooseMenu.jsx +++ b/src/forge/Issues/Component/chooseMenu.jsx @@ -1,6 +1,6 @@ -import React ,{ useState , useEffect , useRef } from 'react'; +import React ,{ useState , useEffect , useRef , forwardRef } from 'react'; import { findDOMNode } from 'react-dom'; -import { Dropdown , Menu , Input , message, Button} from 'antd'; +import { Dropdown , Menu , Input , message, Button, Form } from 'antd'; import { getImageUrl } from 'educoder'; import AddTagsBox from './addTagsBox'; @@ -191,7 +191,8 @@ function ChooseMenu({ } function onSuccess(){ - + setContent(false); + onAdd(); } return(
    • @@ -295,4 +296,4 @@ function ChooseMenu({
    • ) } -export default ChooseMenu; \ No newline at end of file +export default Form.create()(forwardRef(ChooseMenu)); \ No newline at end of file diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx index 0bcf7890..b9f4498d 100644 --- a/src/forge/Issues/Pages/details.jsx +++ b/src/forge/Issues/Pages/details.jsx @@ -448,7 +448,7 @@ function Details(props){ colorFlag="2" removeFlag editFlag={details && !details.user_permission} - onAdd={permission && permission !== "Reporter" ? ()=>setVisible(true) :false} + onAdd={permission && permission !== "Reporter" ? ()=>{setVisible(true);getSign();} :false} owner projectsId /> diff --git a/src/forge/Issues/Pages/new.jsx b/src/forge/Issues/Pages/new.jsx index 10ce3796..42b8edf4 100644 --- a/src/forge/Issues/Pages/new.jsx +++ b/src/forge/Issues/Pages/new.jsx @@ -227,12 +227,12 @@ function New(props){ } return(
      - setVisible(false)} onSuccess={onSuccess} - /> + /> */}

      新建疑修

      @@ -275,7 +275,9 @@ function New(props){ double={3} colorFlag="2" removeFlag - onAdd={permission && permission !== "Reporter" ? ()=>setVisible(true) :false} + onAdd={permission && permission !== "Reporter" ? ()=>{setVisible(true);getSign();} :false} + owner={owner} + projectsId={projectsId} /> Date: Thu, 9 Mar 2023 14:53:19 +0800 Subject: [PATCH 3/5] update --- src/forge/Issues/Component/chooseMenu.jsx | 2 +- src/forge/Issues/Pages/details.jsx | 8 +------- src/forge/Issues/Pages/new.jsx | 16 +--------------- src/forge/Issues/index.scss | 3 ++- 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/forge/Issues/Component/chooseMenu.jsx b/src/forge/Issues/Component/chooseMenu.jsx index ac512d9e..f8dc6682 100644 --- a/src/forge/Issues/Component/chooseMenu.jsx +++ b/src/forge/Issues/Component/chooseMenu.jsx @@ -1,6 +1,6 @@ import React ,{ useState , useEffect , useRef , forwardRef } from 'react'; import { findDOMNode } from 'react-dom'; -import { Dropdown , Menu , Input , message, Button, Form } from 'antd'; +import { Dropdown , Menu , Input , Button, Form } from 'antd'; import { getImageUrl } from 'educoder'; import AddTagsBox from './addTagsBox'; diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx index 9b3b4f08..1419e30c 100644 --- a/src/forge/Issues/Pages/details.jsx +++ b/src/forge/Issues/Pages/details.jsx @@ -35,7 +35,6 @@ function Details(props){ const [ orderId , setOrderId ] = useState(undefined); - const [ visible , setVisible ] = useState(false); const [ delVisible , setDelVisible] = useState(false); const [ edit , setEdit] = useState(false); const [ copy , setCopy] = useState(false); @@ -218,11 +217,6 @@ function Details(props){ }) } - function onSuccess(){ - getSign(); - setVisible(false); - } - // 可单个编辑保存右侧的项(!copy:非复制状态下) function saveForeach(c,s,p,t,m,b,sDate,eDate,rewardAmount){ if(!copy){ @@ -449,7 +443,7 @@ function Details(props){ colorFlag="2" removeFlag editFlag={details && !details.user_permission} - onAdd={permission && permission !== "Reporter" ? ()=>{setVisible(true);getSign();} :false} + onAdd={permission && permission !== "Reporter" ? ()=>{getSign();} :false} owner projectsId /> diff --git a/src/forge/Issues/Pages/new.jsx b/src/forge/Issues/Pages/new.jsx index 42b8edf4..859144cd 100644 --- a/src/forge/Issues/Pages/new.jsx +++ b/src/forge/Issues/Pages/new.jsx @@ -14,7 +14,6 @@ function New(props){ const feedBack = search && search.indexOf('type=feedback') !== -1; // 里程碑id const milepostId = props.match.params.milepostId; - const [ visible , setVisible ] = useState(false); const [ statusList , setStatusList ] = useState([]); @@ -175,13 +174,6 @@ function New(props){ } - // 标记管理弹框 - function onSuccess(){ - // 添加标记成功后需更新标记的数据数组 - getSign(); - setVisible(false); - } - // 创建 function createFunc(values,fileList,receivers_login,description){ const { subject } = values; @@ -227,12 +219,6 @@ function New(props){ } return(
      - {/* setVisible(false)} onSuccess={onSuccess} - /> */}

      新建疑修

      @@ -275,7 +261,7 @@ function New(props){ double={3} colorFlag="2" removeFlag - onAdd={permission && permission !== "Reporter" ? ()=>{setVisible(true);getSign();} :false} + onAdd={permission && permission !== "Reporter" ? ()=>{getSign();} :false} owner={owner} projectsId={projectsId} /> diff --git a/src/forge/Issues/index.scss b/src/forge/Issues/index.scss index b399f934..77bf035d 100644 --- a/src/forge/Issues/index.scss +++ b/src/forge/Issues/index.scss @@ -150,6 +150,7 @@ &.statusul{ li{ width: 106px; + font-size: 15px; &>span{ height:19px; line-height: 17px; @@ -312,7 +313,7 @@ margin-right: 10px; line-height: 20px; width: 45px; - font-size: 15px; + font-size: 14px; border:1px solid #fff; &.normals{ border-color:#28be6c; From 7caa5172635b3b1a3eb712a3cf311fc3d71f0cc6 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Thu, 9 Mar 2023 15:54:51 +0800 Subject: [PATCH 4/5] =?UTF-8?q?dropdown=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Issues/Component/addTagsBox.jsx | 2 +- src/forge/Issues/Component/chooseMenu.jsx | 16 ++++++------ src/forge/Issues/Pages/details.jsx | 30 +++++++++++++---------- src/forge/Issues/index.jsx | 3 +-- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/forge/Issues/Component/addTagsBox.jsx b/src/forge/Issues/Component/addTagsBox.jsx index 7d916e6f..f128c8c5 100644 --- a/src/forge/Issues/Component/addTagsBox.jsx +++ b/src/forge/Issues/Component/addTagsBox.jsx @@ -28,7 +28,7 @@ function AddTagsBox({onSuccess , form ,owner , projectsId,onCancel}){ return( -

      标记管理

      +

      标记管理

      {getFieldDecorator('name',{ diff --git a/src/forge/Issues/Component/chooseMenu.jsx b/src/forge/Issues/Component/chooseMenu.jsx index f8dc6682..97dd91cd 100644 --- a/src/forge/Issues/Component/chooseMenu.jsx +++ b/src/forge/Issues/Component/chooseMenu.jsx @@ -45,9 +45,7 @@ function ChooseMenu({ const refBox = useRef(null); useEffect(() => { - if(saveList && saveList.length>0){ - document.addEventListener('click', clickMe , false); - } + document.addEventListener('click', clickMe , false); }, []) const clickMe = ({ target }) => { @@ -57,8 +55,7 @@ function ChooseMenu({ if (faComponent && boxComponent) { const isChild = faComponent.contains(target); const isBox = boxComponent.contains(target); - const arr = ["removeicon","iconfont icon-guanbi font-12 color-white","iconfont icon-guanbi font-12 color-blue","icon-a-bianji12","color-blue font-15 tagManage"]; - console.log(target.className); + const arr = ["removeicon","iconfont icon-guanbi font-12 color-white","iconfont icon-guanbi font-12 color-blue","icon-a-bianji12","color-blue font-15 tagManage","iconfont icon-xiangzuojiantou font-15 color-grey mr5 cursor","cover"]; const pointer = arr.includes(target.className); if(!isChild && !isBox && !pointer){ setVisible(false); @@ -198,7 +195,9 @@ function ChooseMenu({
    • {placeholder} - }> - {!editFlag && setVisible(visible ? false : true)}> - } - + + }
      0 ? "operatevalue color-grey-3":"operatevalue"} style={{display:colorFlag?"flex":"block"}}>{renderNames(selectValueList)}
    • diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx index 1419e30c..fd54bc47 100644 --- a/src/forge/Issues/Pages/details.jsx +++ b/src/forge/Issues/Pages/details.jsx @@ -17,11 +17,11 @@ import Claims from '../../claims/claims'; import ChooseMenu from '../Component/chooseMenu'; function Details(props){ - const [ details , setDetails ] = useState(undefined); const owner = props.match.params.owner; const projectsId = props.match.params.projectsId; const index = props.match.params.index; + const [ details , setDetails ] = useState(undefined); const [ statusList , setStatusList ] = useState([]); const [ prioritiesList , setPrioritiesList ] = useState([]); const [ chargeList , setChargeList ] = useState([]); @@ -42,6 +42,7 @@ function Details(props){ const [ start_date, setStartDate ] = useState(""); const [ due_date, setDueDate ] = useState(""); const [ commentReload, setCommentReload] = useState(undefined); + const [ editFlag , setEditFlag ] = useState(false); const [ assigner_choose , setAssigner_choose ] = useState([]); const [ prioritie_choose , setPrioritie_choose ] = useState([]); @@ -84,10 +85,11 @@ function Details(props){ const url = `/v1/${owner}/${projectsId}/issues/${index}`; axios.get(url).then(result=>{ if(result && result.data){ - console.log('result', result); let data = result.data; setDetails(data); - + let per = data && !data.user_permission; + console.log(per); + setEditFlag(per); setAssigner_choose(data.assigners); if(data.priority && data.priority.id){ setPrioritie_choose([{...data.priority,color:colors[data.priority.id-1]}]); @@ -105,7 +107,9 @@ function Details(props){ setOrderId(data.id); } - }).catch(error=>{}) + }).catch(error=>{ + console.log(error); + }) } @@ -411,7 +415,7 @@ function Details(props){ searchFunc={(value)=>{setCharge(value)}} headImg selectValueList={assigner_choose} - editFlag={details && !details.user_permission} + editFlag={editFlag} chooseFunc={(list)=>{setAssigner_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(l);}} double={5} removeFlag @@ -421,7 +425,7 @@ function Details(props){ menus={statusList} selectValueList={status_choose} mustFlag - editFlag={details && !details.user_permission} + editFlag={editFlag} chooseFunc={(list)=>{setStatus_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(undefined,l);}} /> {setPrioritie_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(undefined,undefined,l);}} /> {getSign();} :false} owner projectsId @@ -452,7 +456,7 @@ function Details(props){ menus={millstoneList} searchFunc={(value)=>{setMillstone(value)}} selectValueList={millstone_choose} - editFlag={details && !details.user_permission} + editFlag={editFlag} chooseFunc={(list)=>{setMillstone_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(undefined,undefined,undefined,undefined,l);}} /> {setBranch(value)}} selectValueList={branch_choose} - editFlag={details && !details.user_permission} + editFlag={editFlag} chooseFunc={(list)=>{setBranch_choose(list);let l = list && list.length>0 ?list.map(i=>{return i.id || i.name}):[];saveForeach(undefined,undefined,undefined,undefined,undefined,l);}} /> { @@ -468,13 +472,13 @@ function Details(props){
    • 悬赏金额 - {!(details && !details.user_permission) && } + {!(editFlag) && } setRewardAmount(value)} className="borderNo mt5" disabled={!rewardFlag}/>
    • } - {setStartDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={details && !details.user_permission}/> - {setDueDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={details && !details.user_permission}/> + {setStartDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={editFlag}/> + {setDueDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={editFlag}/>
      : diff --git a/src/forge/Issues/index.jsx b/src/forge/Issues/index.jsx index 6590f987..a3bb5dfd 100644 --- a/src/forge/Issues/index.jsx +++ b/src/forge/Issues/index.jsx @@ -23,9 +23,8 @@ const New = Loadable({ function Index(props){ const pathname = props.history.location.pathname; - const {project } = props; + const { project } = props; const open_blockchain = project && project.open_blockchain; - console.log("是否开启了确权:",open_blockchain); useEffect(() => { if (document) { // 可以排除不需要置顶的页面 From 7fa8cca2252cce3785d36649e207eb1b9200fb41 Mon Sep 17 00:00:00 2001 From: caishi <1149225589@qq.com> Date: Thu, 9 Mar 2023 16:23:04 +0800 Subject: [PATCH 5/5] update --- src/forge/Issues/Component/datas.jsx | 2 +- src/forge/Issues/Pages/details.jsx | 35 ++++++++++++++++++---------- src/forge/Issues/Pages/list.jsx | 1 + src/forge/Issues/Pages/new.jsx | 27 +++++++++++---------- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/forge/Issues/Component/datas.jsx b/src/forge/Issues/Component/datas.jsx index d86839f5..db872bb6 100644 --- a/src/forge/Issues/Component/datas.jsx +++ b/src/forge/Issues/Component/datas.jsx @@ -58,7 +58,7 @@ function Datas({checkbox ,item , projectsId,owner}){ {item.created_at} 发布 {item.updated_at}更新 {item.blockchain_token_num && {item.blockchain_token_num}} - {item.milestone_name && {item.milestone_name} } + {/* {item.milestone_name && {item.milestone_name} } */}
      diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx index fd54bc47..06beed05 100644 --- a/src/forge/Issues/Pages/details.jsx +++ b/src/forge/Issues/Pages/details.jsx @@ -319,19 +319,22 @@ function Details(props){ setCommentReload(Math.random()); } - function editReward(){ - setRewardFlag(true); - setTimeout(() => { - ref.current && ref.current.focus(); - }, 100); - } // 悬赏金额 失去焦点保存数据 function amountBlur(e){ - setRewardFlag(false); - const value = e.target.value; - if(value && value >= 0){ - saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,value); + if(!editFlag){ + setRewardFlag(false); + const value = e.target.value; + if(value && value >= 0){ + saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,value); + }else{ + setRewardAmount(rewardAmount); + } + } + } + function changeAmount(value){ + if(editFlag && value > 0){ + setRewardAmount(value); } } return( @@ -472,9 +475,17 @@ function Details(props){
    • 悬赏金额 - {!(editFlag) && } + {/* {!editFlag && } */} - setRewardAmount(value)} className="borderNo mt5" disabled={!rewardFlag}/> +
    • } {setStartDate(date);saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,date)}} editFlag={editFlag}/> diff --git a/src/forge/Issues/Pages/list.jsx b/src/forge/Issues/Pages/list.jsx index 52373463..6ed26f04 100644 --- a/src/forge/Issues/Pages/list.jsx +++ b/src/forge/Issues/Pages/list.jsx @@ -185,6 +185,7 @@ function List(props){ setAllValue([]); setValue(undefined); setNames(undefined); + setValue(undefined); Init(); // 清除下拉选项 menuRef.current && menuRef.current.clearChoose(); diff --git a/src/forge/Issues/Pages/new.jsx b/src/forge/Issues/Pages/new.jsx index 859144cd..3f567487 100644 --- a/src/forge/Issues/Pages/new.jsx +++ b/src/forge/Issues/Pages/new.jsx @@ -204,18 +204,12 @@ function New(props){ } - function editReward(){ - setRewardFlag(true); - setTimeout(() => { - ref.current && ref.current.focus(); - }, 100); - } - - // 悬赏金额 失去焦点保存数据 - function amountBlur(e){ - setRewardFlag(false); - const value = e.target.value; - value && value>=0 && setRewardAmount(value); + function changeAmount(value){ + if(value > 0){ + setRewardAmount(value); + }else{ + setRewardAmount(rewardAmount); + } } return(
      @@ -285,9 +279,14 @@ function New(props){
    • 悬赏金额 - {!(milepostId ? true : false) && } + {/* {!(milepostId ? true : false) && } */} - setRewardAmount(value)} className="borderNo mt5" disabled={!rewardFlag}/> +
    • } setStartDate(date)}/>