From fd53c682cdabba7d11e7a10fc5adf86f5b154b28 Mon Sep 17 00:00:00 2001
From: caishi <1149225589@qq.com>
Date: Wed, 6 Sep 2023 15:09:09 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/AppConfig.js | 2 +-
src/Loading.js | 7 +-
src/forge/Component/ProfileModal/Profile.jsx | 2 +-
src/forge/Head/Header.js | 2 +-
src/forge/Issues/Component/allMenus.jsx | 40 +++++++++++-
src/forge/Issues/Component/caseDrop.jsx | 67 ++++++++++++++++++++
src/forge/Issues/Component/datas.jsx | 1 +
src/forge/Issues/Component/delayAuto.jsx | 54 ++++++++++++++++
src/forge/Issues/Pages/details.jsx | 9 ++-
src/forge/Issues/Pages/new.jsx | 7 +-
src/forge/Issues/index.scss | 16 +++++
src/modules/tpm/TPMIndexHOC.js | 1 -
12 files changed, 192 insertions(+), 16 deletions(-)
create mode 100644 src/forge/Issues/Component/caseDrop.jsx
create mode 100644 src/forge/Issues/Component/delayAuto.jsx
diff --git a/src/AppConfig.js b/src/AppConfig.js
index 1a241cead..7a8272a7a 100644
--- a/src/AppConfig.js
+++ b/src/AppConfig.js
@@ -32,7 +32,7 @@ export function initAxiosInterceptors(props) {
// 判断网络是否连接
initOnlineOfflineListener();
- var proxy = "https://testforgeplus.trustie.net";
+ var proxy = "https://testforgeplus.educoder.net";
//响应前的设置
axios.interceptors.request.use(
config => {
diff --git a/src/Loading.js b/src/Loading.js
index 8175b7df8..fa9b2d155 100644
--- a/src/Loading.js
+++ b/src/Loading.js
@@ -2,14 +2,9 @@ import React, { Component } from 'react';
import { Spin } from 'antd';
class Loading extends Component {
- componentDidUpdate(prevProps, prevState) {
- if (!prevProps.error && this.props.error) {
- console.log(this.props.error)
- }
- }
render() {
- return ""
+ return
}
}
diff --git a/src/forge/Component/ProfileModal/Profile.jsx b/src/forge/Component/ProfileModal/Profile.jsx
index 2ae769ebe..5df2b39de 100644
--- a/src/forge/Component/ProfileModal/Profile.jsx
+++ b/src/forge/Component/ProfileModal/Profile.jsx
@@ -14,7 +14,7 @@ function Profile({
function checkProfile() {
if(checkIfLogin()){
- if(!current_user.has_gitea_user || (current_user.has_gitea_user && !current_user.is_sync_pwd)){
+ if(!current_user.has_gitea_user){
setGiteaVisible(true);
}else{
if(!completeProfile){
diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js
index d09cad7d4..814c7b4b3 100644
--- a/src/forge/Head/Header.js
+++ b/src/forge/Head/Header.js
@@ -63,7 +63,7 @@ class NewHeader extends Component {
}
getEducoderSetting=()=>{
- const url = `https://data.educoder.net/api/setting.json`;
+ const url = `/setting.json`;
axios.get(url).then(result=>{
if(result && result.data){
this.setState({
diff --git a/src/forge/Issues/Component/allMenus.jsx b/src/forge/Issues/Component/allMenus.jsx
index 90afca543..3a80aebb6 100644
--- a/src/forge/Issues/Component/allMenus.jsx
+++ b/src/forge/Issues/Component/allMenus.jsx
@@ -27,14 +27,16 @@ function AllMenus({owner,projectsId,chooseFunc,update,defaultNames,defaultIds,op
const [ author , setAuthor ] = useState(undefined);
const [ tagList , setTagList ] = useState(undefined);
const [ tag , setTag ] = useState(undefined);
+ const [ cases , setCases ] = useState(undefined);
const [ millstoneList , setMillstoneList ] = useState(undefined);
const [ millstone , setMillstone ] = useState(undefined);
const [ chargeList , setChargeList ] = useState(undefined);
+ const [ caseList , setCaseList ] = useState(undefined);
const [ charge , setCharge ] = useState(undefined);
const [ statusList , setStatusList ] = useState(undefined);
const [ prioritiesList , setPrioritiesList ] = useState(undefined);
- const [ ids , setIds ] = useState({author_id:undefined,issue_priorities_id:undefined,issue_tag_ids:undefined,milestone_id:undefined,sort_by:undefined,status_id:undefined,assigner_id:undefined});
- const [ names , setNames ] = useState({author_name:undefined,issue_priorities_name:undefined,issue_tag_name:undefined,milestone_name:undefined,sortby_name:undefined,status_name:undefined,assigner_name:undefined});
+ const [ ids , setIds ] = useState({author_id:undefined,issue_priorities_id:undefined,issue_tag_ids:undefined,milestone_id:undefined,sort_by:undefined,status_id:undefined,assigner_id:undefined,test_case:undefined});
+ const [ names , setNames ] = useState({author_name:undefined,issue_priorities_name:undefined,issue_tag_name:undefined,milestone_name:undefined,sortby_name:undefined,status_name:undefined,assigner_name:undefined,test_case:undefined});
useEffect(()=>{
if(defaultNames){
@@ -80,6 +82,31 @@ function AllMenus({owner,projectsId,chooseFunc,update,defaultNames,defaultIds,op
}
})
}
+ // 获取测试用例
+ useEffect(()=>{
+ getCase();
+ },[cases])
+
+ function getCase(){
+ const url = `/v1/${owner}/${projectsId}/issues/test_cases`;
+ axios.get(url,{
+ params:{
+ keyword:cases
+ }
+ }).then(result=>{
+ if(result && result.data){
+ let menu = result.data.data;
+ if(menu && menu.length>0){
+ const l = menu.map(i=>{
+ return {name:i.test_case,id:i.test_case}
+ })
+ setCaseList(l);
+ }else{
+ setCaseList([]);
+ }
+ }
+ })
+ }
// 获取里程碑列表
useEffect(()=>{
getMillstone();
@@ -187,6 +214,15 @@ function AllMenus({owner,projectsId,chooseFunc,update,defaultNames,defaultIds,op
lists={millstoneList} searchFunc={(value)=>setMillstone(value)}
chooseFunc={(id,name)=>{let copy = {...ids,milestone_id:id && id.length>0 ? id.join(","):undefined};let copyname = { ...names,milestone_name:name};setNames(copyname);setIds(copy);chooseFunc(copy,copyname)}}
/>
+ setCases(value)}
+ double={false}
+ chooseFunc={(id,name)=>{let copy = {...ids,test_case:name};let copyname = { ...names,test_case:name};setNames(copyname);setIds(copy);chooseFunc(copy,copyname)}}
+ />
{
+ getCaseList(value);
+ },[])
+
+ useEffect(()=>{
+ setV(value);
+ },[value])
+
+ useEffect(()=>{
+ changeValue(v);
+ getCaseList(v);
+ },[v])
+
+ async function getCaseList(value){
+ setV(value);
+ const url = `/v1/${owner}/${projectsId}/issues/test_cases`;
+ await axios.get(url,{
+ params:{
+ keyword:value
+ }
+ }).then(response=>{
+ if(response && response.data){
+ setFilterUnitList(response.data.data);
+ }
+ }).catch(error=>{})
+ }
+
+ return(
+
+ {name}
+ ({ value: item.test_case,label:item.test_case }))}
+ className={"boxStyles"}
+ bordered={false}
+ onBlur={()=>{if(onBlur){onBlur(v)}}}
+ maxLength={100}
+ >
+ {
+ filterUnitList && filterUnitList.length > 0 &&
+ filterUnitList.map(i=>{
+ return(
+
+ )
+ })
+ }
+
+
+ )
+}
+export default CaseDrop;
\ No newline at end of file
diff --git a/src/forge/Issues/Component/datas.jsx b/src/forge/Issues/Component/datas.jsx
index dba2ab56e..239a95e3e 100644
--- a/src/forge/Issues/Component/datas.jsx
+++ b/src/forge/Issues/Component/datas.jsx
@@ -64,6 +64,7 @@ function Datas({checkbox ,item , projectsId,owner}){
{item.milestone_name}
}
+ {item.test_case}
diff --git a/src/forge/Issues/Component/delayAuto.jsx b/src/forge/Issues/Component/delayAuto.jsx
new file mode 100644
index 000000000..dc411a471
--- /dev/null
+++ b/src/forge/Issues/Component/delayAuto.jsx
@@ -0,0 +1,54 @@
+import React , { useState , useEffect , useRef,useMemo} from 'react';
+import { Select , Spin } from 'antd';
+import debounce from 'lodash/debounce';
+
+function DebounceSelect({ fetchOptions, debounceTimeout = 600, ...props }) {
+ const [fetching, setFetching] = useState(false);
+ const [options, setOptions] = useState([]);
+ const fetchRef = useRef(0);
+
+ useEffect(()=>{
+ fetchOptions("").then((newOptions) => {
+ setOptions(newOptions);
+ });
+ },[])
+
+ const debounceFetcher = useMemo(() => {
+ const loadOptions = (value) => {
+ fetchRef.current += 1;
+ const fetchId = fetchRef.current;
+ setOptions([]);
+ setFetching(true);
+ fetchOptions(value).then((newOptions) => {
+ if (fetchId !== fetchRef.current) {
+ // for fetch callback order
+ return;
+ }
+ setOptions(newOptions);
+ setFetching(false);
+ });
+ };
+ return debounce(loadOptions, debounceTimeout);
+ }, [fetchOptions, debounceTimeout]);
+
+ return (
+ : null}
+ {...props}
+ defaultActiveFirstOption={false}
+ >
+ {
+ options && options.length >0 &&
+ options.map((i)=>{
+ return(
+ {i.value}
+ )
+ })
+ }
+
+ );
+}
+export default DebounceSelect
\ No newline at end of file
diff --git a/src/forge/Issues/Pages/details.jsx b/src/forge/Issues/Pages/details.jsx
index 1bf881440..61f423bd9 100644
--- a/src/forge/Issues/Pages/details.jsx
+++ b/src/forge/Issues/Pages/details.jsx
@@ -15,6 +15,7 @@ import axios from 'axios';
import CommentList from '../Component/comments/list';
import Claims from '../../claims/claims';
import ChooseMenu from '../Component/chooseMenu';
+import CaseDrop from '../Component/caseDrop';
function Details(props){
const owner = props.match.params.owner;
@@ -54,6 +55,7 @@ function Details(props){
const [ branch_choose , setBranch_choose ] = useState([]);
const [ rewardAmount , setRewardAmount ] = useState(undefined);
const [ rewardFlag , setRewardFlag ] = useState(false);
+ const [ caseValue, setCaseValue ] = useState(undefined);
const pathname = props.history.location.pathname;
const permission = props && props.projectDetail && props.projectDetail.permission;
@@ -109,6 +111,7 @@ function Details(props){
setMillstone_choose(data.milestone && data.milestone.id ? [data.milestone]:[]);
setBranch_choose(data.branch_name ? [{name:data.branch_name}] : []);
setRewardAmount(data.blockchain_token_num);
+ setCaseValue(data.test_case);
data.start_date && setStartDate(moment(data.start_date).format('YYYY-MM-DD'));
data.due_date && setDueDate(moment(data.due_date).format('YYYY-MM-DD'));
@@ -230,7 +233,7 @@ function Details(props){
}
// 可单个编辑保存右侧的项(!copy:非复制状态下)
- function saveForeach(c,s,p,t,m,b,sDate,eDate,rewardAmount){
+ function saveForeach(c,s,p,t,m,b,sDate,eDate,rewardAmount,caseValue){
if(!copy){
const url = `/v1/${owner}/${projectsId}/issues/${index}`;
axios.patch(url,{
@@ -242,7 +245,8 @@ function Details(props){
assigner_ids: c?c:undefined,
start_date:sDate,
due_date:eDate,
- blockchain_token_num:rewardAmount
+ blockchain_token_num:rewardAmount,
+ test_case:caseValue
}).then(result=>{
if(result){
Init();
@@ -509,6 +513,7 @@ function Details(props){
/>
}
+ setCaseValue(v)} onBlur={(v)=>saveForeach(undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined,v)}/>
{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/Pages/new.jsx b/src/forge/Issues/Pages/new.jsx
index ce09cc6be..b40307380 100644
--- a/src/forge/Issues/Pages/new.jsx
+++ b/src/forge/Issues/Pages/new.jsx
@@ -7,6 +7,7 @@ import AddTagsBox from '../Component/addTagsBox';
import Date from '../Component/date';
import NewPanel from '../Component/newPanel';
import axios from 'axios';
+import CaseDrop from '../Component/caseDrop';
function New(props){
// history search 是否含有意见反馈标识
@@ -34,12 +35,12 @@ function New(props){
const [ tag_choose , setTag_choose ] = useState([]);
const [ millstone_choose , setMillstone_choose ] = useState([]);
const [ branch_choose , setBranch_choose ] = useState([]);
+ const [ caseValue, setCaseValue ] = useState(undefined);
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;
@@ -194,7 +195,8 @@ function New(props){
assigner_ids:a,
attachment_ids:fileList,
start_date,due_date,receivers_login,
- blockchain_token_num:rewardAmount
+ blockchain_token_num:rewardAmount,
+ test_case:caseValue
}).then(result=>{
if(result && result.data && result.data.project_issues_index){
window.scrollTo(0,0);
@@ -293,6 +295,7 @@ function New(props){
className="borderNo mt5" disabled={milepostId ? true : false}/>
}
+ {console.log("case:",v);setCaseValue(v)}}/>
setStartDate(date)}/>
setDueDate(date)}/>
diff --git a/src/forge/Issues/index.scss b/src/forge/Issues/index.scss
index 1283e3a8e..7a5541822 100644
--- a/src/forge/Issues/index.scss
+++ b/src/forge/Issues/index.scss
@@ -851,4 +851,20 @@
}
}
}
+}
+
+.boxStyles{
+ margin-top: 10px!important;
+ width: 100%;
+ input,input[class~="ant-input"]:focus{
+ border:none!important;
+ padding:0px;
+ }
+ div[class~='ant-select-selection__placeholder']{
+ margin-left: 0px!important;
+ margin-right: 0px!important;
+ }
+ span[class~='ant-select-arrow']{
+ opacity: 0;
+ }
}
\ No newline at end of file
diff --git a/src/modules/tpm/TPMIndexHOC.js b/src/modules/tpm/TPMIndexHOC.js
index 696c7ec67..cf43cff33 100644
--- a/src/modules/tpm/TPMIndexHOC.js
+++ b/src/modules/tpm/TPMIndexHOC.js
@@ -166,7 +166,6 @@ export function TPMIndexHOC(WrappedComponent) {
tpmLoading: false,
completeProfile:response.data.profile_completed
})
- console.log("11:",response.data);
if(response.data && response.data.login){
if(!response.data.has_gitea_user){
this.setState({