@@ -307,7 +325,7 @@ class Infos extends Component {
-
this.sponsor_management_link()}>
赞助管理
@@ -341,6 +359,12 @@ class Infos extends Component {
return ;
}}
>
+ {
+ return ;
+ }}
+ >
{
diff --git a/src/forge/users/sponsor/SponsorManagement.js b/src/forge/users/sponsor/SponsorManagement.js
new file mode 100644
index 000000000..5e43605d4
--- /dev/null
+++ b/src/forge/users/sponsor/SponsorManagement.js
@@ -0,0 +1,190 @@
+import React, { Component } from "react";
+import { Link } from "react-router-dom";
+import { Menu, Input, Spin, Pagination, Popover, Button, Divider } from "antd";
+
+import axios from "axios";
+import CoinChangeItem from "./CoinChangeItem";
+import Nodata from "../../Nodata";
+import img_array from "../../Images/array.png";
+import SponsorList from "./sponsor_list";
+const Search = Input.Search;
+
+const tempData = [
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+];
+
+
+class SponsorManagement extends Component{
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ page: 1,
+ limit: 15,
+ sort_by: undefined,
+ totalCount: undefined,
+ isSpin: false,
+ coinChangeList: undefined,
+ total: undefined,
+ category: undefined,
+ is_public: undefined,
+ sponsors: undefined,
+ };
+ }
+
+ changeCategory = (cate) => {
+ // let resultList = this.state.coinChangeList;
+ // switch (cate.target.value){
+ // case "income":
+ // resultList = resultList.filter(function(item,index,array){
+ // return item.amount > 0;
+ // });
+ // break;
+ // case "outcome":
+ // resultList = resultList.filter(function(item,index,array){
+ // return item.amount < 0;
+ // });
+ // break;
+
+ // }
+ // this.setState({
+ // displayList: resultList,
+ // });
+ };
+
+ componentDidMount = () => {
+ this.get_sponsors();
+ }
+
+ get_sponsors = ()=>{
+ this.setState({
+ sponsors: tempData,
+ })
+ }
+
+ //切换页数
+ changePage = (page) => {
+ this.state.page = page;
+ // this.get_coin_changes();
+ };
+
+ // 排序
+ ChangeSoryBy = (e) => {
+ // this.state.sort_by = e.key;
+ // this.get_coin_changes();
+ console.log(e.key)
+ };
+
+ changeSearchValue = (e) => {
+ this.setState({
+ search: e.target.value,
+ });
+ };
+
+ menu =()=> (
+
+ );
+
+ category_button=(category)=>{
+ const { current_user, user } = this.props;
+ const button_lists =
+ user && current_user && user.login === current_user.login
+ ? [
+ { type: "sponsoring", name: "赞助中" },
+ { type: "stopped", name: "已终止" },
+ ]
+ :
+ [];
+
+ let list = button_lists.map((item, key) => {
+ return (
+
+
+
+ );
+ })
+ return list;
+ }
+
+
+ render() {
+ const { current_user, user } = this.props;
+ const { category , is_public, sponsors } = this.state;
+ const { coinChangeList, isSpin, total, search, limit, page } = this.state;
+ return (
+
+
+
+
{this.category_button(category)}
+
+
+ {sponsors && sponsors.length > 0 ?
+
+ :
+
+ }
+ {
+ total && total > limit ?
+
+ :
+ ""
+ }
+
+ );
+ }
+};
+
+export default SponsorManagement;
\ No newline at end of file
diff --git a/src/forge/users/sponsor/sponsor_list.js b/src/forge/users/sponsor/sponsor_list.js
new file mode 100644
index 000000000..04cdf893e
--- /dev/null
+++ b/src/forge/users/sponsor/sponsor_list.js
@@ -0,0 +1,62 @@
+import React, { Component } from "react";
+import { getImageUrl } from "educoder";
+import FocusButton from "../../UsersList/focus_button";
+import { Button } from "antd";
+import "../../UsersList/list.css";
+class SponsorList extends Component {
+
+ renderList = (users, userClass, current_user) => {
+
+ if (users && users.length > 0) {
+ return users.map((item, key) => {
+ return (
+
+
+
+
+
+
+
+ 加入时间:{item.format_time}
+
+ {
+ current_user && current_user.login === item.login ?
+
+ :
+
+ }
+
+
+
+ );
+ });
+ }
+ }
+ render() {
+ const { users, userClass, current_user } = this.props;
+ console.log(users);
+ return (
+ this.renderList(users, userClass, current_user)
+ );
+ }
+}
+
+export default SponsorList;
--
2.34.1
From c69692452314c3a2b628b85e4477e0d80927ace9 Mon Sep 17 00:00:00 2001
From: qyzh
Date: Thu, 10 Sep 2020 15:55:52 +0800
Subject: [PATCH 05/13] =?UTF-8?q?=E8=B5=9E=E5=8A=A9=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/forge/sponsor/sponsor.css | 4 +-
src/forge/users/sponsor/SponsorManagement.js | 39 +++++++---
src/forge/users/sponsor/sponsor_list.js | 77 +++++++++++++-------
3 files changed, 83 insertions(+), 37 deletions(-)
diff --git a/src/forge/sponsor/sponsor.css b/src/forge/sponsor/sponsor.css
index 707819e8a..5493e6c48 100644
--- a/src/forge/sponsor/sponsor.css
+++ b/src/forge/sponsor/sponsor.css
@@ -33,6 +33,6 @@
margin-bottom: 20px;
}
-.sponsor-confirmation-inline{
- display: inline-block;
+.sponsor-inline{
+ display: inline;
}
\ No newline at end of file
diff --git a/src/forge/users/sponsor/SponsorManagement.js b/src/forge/users/sponsor/SponsorManagement.js
index 5e43605d4..a9fbbf64f 100644
--- a/src/forge/users/sponsor/SponsorManagement.js
+++ b/src/forge/users/sponsor/SponsorManagement.js
@@ -10,12 +10,12 @@ import SponsorList from "./sponsor_list";
const Search = Input.Search;
const tempData = [
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
- {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01"},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
+ {image_url: "avatars/User/b", username: "万山川", user_id: 1369, login:"alpc104", format_time: "2020-08-01", amount: 100},
];
@@ -32,7 +32,7 @@ class SponsorManagement extends Component{
coinChangeList: undefined,
total: undefined,
category: undefined,
- is_public: undefined,
+ is_sponsor: undefined,
sponsors: undefined,
};
}
@@ -127,11 +127,20 @@ class SponsorManagement extends Component{
return list;
}
-
+ changeStatus=(check_is_sponsor, e)=>{
+ // const {is_sponsor} = this.state
+ // const new_is_sponsor = is_sponsor === check_is_sponsor ? undefined : check_is_sponsor
+ // this.state.is_sponsor = check_is_sponsor;
+ this.setState({
+ is_sponsor: check_is_sponsor,
+ })
+ }
+
render() {
const { current_user, user } = this.props;
- const { category , is_public, sponsors } = this.state;
+ const { category , is_sponsor, sponsors } = this.state;
const { coinChangeList, isSpin, total, search, limit, page } = this.state;
+
return (
@@ -157,7 +166,17 @@ class SponsorManagement extends Component{
{this.category_button(category)}
-
+ {
+ user && current_user && user.login === current_user.login ?
+
+
this.changeStatus(true, e)}>我赞助的
+ {
+ !is_sponsor ? (
):""
+ }
+
this.changeStatus(false, e)}>赞助我的
+
+ :""
+ }
{sponsors && sponsors.length > 0 ?
{
@@ -10,12 +11,48 @@ class SponsorList extends Component {
if (users && users.length > 0) {
return users.map((item, key) => {
return (
-
-
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ // 赞助时间:{item.format_time}
+ //
+ // {
+ // current_user && current_user.login === item.login ?
+ //
+ // :
+ // //
+ //
+ // }
+ //
+ //
+ //
+
-
-
-
-
- 加入时间:{item.format_time}
-
- {
- current_user && current_user.login === item.login ?
-
- :
-
- }
+
{item && item.username}
+
+
金额:{item.amount}硬币
+
{item.format_time}
+
+
+ {/* {item.amount>0 ? {item.to_user}: {item.to_user}} */}
+
+
);
});
@@ -52,7 +79,7 @@ class SponsorList extends Component {
}
render() {
const { users, userClass, current_user } = this.props;
- console.log(users);
+ // console.log(users);
return (
this.renderList(users, userClass, current_user)
);
--
2.34.1
From 236a8f127a83034530cf775104f79b3b376b0efc Mon Sep 17 00:00:00 2001
From: qyzh
Date: Sat, 19 Sep 2020 10:00:30 +0800
Subject: [PATCH 06/13] =?UTF-8?q?sponsor=20tiers=E5=A2=9E=E5=88=A0?=
=?UTF-8?q?=E6=94=B9=E6=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/AppConfig.js | 2 +-
src/forge/sponsor/Sponsor.js | 81 +++++---
src/forge/sponsor/sponsor.css | 2 +-
src/forge/sponsor/sponsor_tier_item.js | 199 ++++++++++++++-----
src/forge/users/Infos.js | 20 +-
src/forge/users/sponsor/SponsorManagement.js | 70 ++++---
src/forge/users/sponsor/sponsor_list.js | 53 +----
src/forge/users/sponsor/wallet.js | 9 +-
8 files changed, 275 insertions(+), 161 deletions(-)
diff --git a/src/AppConfig.js b/src/AppConfig.js
index dadadc5f3..f80e96efa 100644
--- a/src/AppConfig.js
+++ b/src/AppConfig.js
@@ -65,7 +65,7 @@ export function initAxiosInterceptors(props) {
// TODO 避免重复的请求 https://github.com/axios/axios#cancellation
var
proxy = "http://localhost:3000"
- proxy = "https://testforgeplus.trustie.net"
+ // proxy = "https://testforgeplus.trustie.net"
const requestMap = {};
window.setfalseInRequestMap = function (keyName) {
diff --git a/src/forge/sponsor/Sponsor.js b/src/forge/sponsor/Sponsor.js
index 5beba6967..627f076e5 100644
--- a/src/forge/sponsor/Sponsor.js
+++ b/src/forge/sponsor/Sponsor.js
@@ -1,6 +1,6 @@
import React, { Component } from "react";
import { Link } from "react-router-dom";
-import { Avatar, Tag, Button, Spin, Input, Form} from "antd";
+import { Avatar, Tag, Button, Spin, Input, Form, message} from "antd";
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
@@ -23,13 +23,13 @@ import '../users/Index.scss';
import "./sponsor.css";
const tempData = [
- {id:1, amount: 5, description: "这能让我感到很开心"},
- {id:2, amount: 10, description: "如果您更加慷慨的话就选择这个"},
- {id:3, amount: 150, description: "这能为我带来相当多的额外收入"},
- {id:4, amount: 250, description: "这能为我带来相当多的额外收入"},
- {id:5, amount: 500, description: "这能为我带来相当多的额外收入"},
- {id:6, amount: 1000, description: "这能为我带来相当多的额外收入"},
- {id:7, amount: 5000, description: "这能为我带来相当多的额外收入"},
+ {id:1, tier: 5, description: "这能让我感到很开心"},
+ {id:2, tier: 10, description: "如果您更加慷慨的话就选择这个"},
+ {id:3, tier: 150, description: "这能为我带来相当多的额外收入"},
+ {id:4, tier: 250, description: "这能为我带来相当多的额外收入"},
+ {id:5, tier: 500, description: "这能为我带来相当多的额外收入"},
+ {id:6, tier: 1000, description: "这能为我带来相当多的额外收入"},
+ {id:7, tier: 5000, description: "这能为我带来相当多的额外收入"},
];
const tempDesc = "我长期从事开源社区相关工作...目前已经开发了多个项目,如xxx, xxxx, ...\n我希望通过资助机制成为全职开源开发者,如果您对我的项目感兴趣,请资助我!"
@@ -98,15 +98,17 @@ class Sponsor extends Component {
description: undefined,
sponsors: undefined,
edit: false,
+ tiers: [],
};
}
componentDidMount = () => {
this.fetchUser();
this.fetchSponsors();
+ this.fetchData();
};
- fetchUser = () => {
+ fetchUser = async () => {
this.setState({
isSpin: true,
});
@@ -114,15 +116,17 @@ class Sponsor extends Component {
const { username } = this.props.match.params;
let url = `/users/${username || (current_user && current_user.login)}.json`;
- axios
+ await axios
.get(url)
.then((result) => {
// TODO: 在这里添加了对用户自我介绍的处理,前后端交互实现后需要删掉
- result.data.description = tempDesc;
+ // result.data.description = tempDesc;
+ console.log(result.data);
this.setState({
- user: result.data,
+ user: result.data,
isSpin: false,
});
+ // console.log(result.data);
})
.catch((error) => {
console.log(error);
@@ -138,6 +142,23 @@ class Sponsor extends Component {
});
}
+ fetchData = () => {
+ let url = `/sponsor_tiers.json`;
+ const user_login = this.props.match.params.username;
+ axios
+ .get(url, {params:{login: user_login}})
+ .then((result) => {
+ // console.log(result.data);
+ // console.log(tempData)
+ this.setState({
+ tiers: result.data
+ })
+ })
+ .catch((error) => {
+ console.log(error);
+ })
+ }
+
editDescription = () => {
this.setState({
edit: true,
@@ -155,13 +176,29 @@ class Sponsor extends Component {
let value = this.formRef.getItemsValue().description;
// console.log(value);
let user = this.state.user;
- if (user){
- user.description = value;
- }
- this.setState({
- user: user,
- edit: false,
- });
+ let url = `/users/${user.user_id}/update_description.json`
+ axios.put(url, {description: value})
+ .then((result) => {
+ user.description = value;
+ this.setState({
+ user: user,
+ edit: false
+ })
+ message.success("修改成功")
+ })
+ .catch(error => {
+ console.log(error);
+ message.error("修改失败")
+ })
+
+
+ // if (user){
+ // user.description = value;
+ // }
+ // this.setState({
+ // user: user,
+ // edit: false,
+ // });
}
visitorTemplate = () => {
@@ -217,10 +254,8 @@ class Sponsor extends Component {
render(){
const { current_user} = this.props;
- const { user, isSpin } = this.state;
+ const { user, isSpin, tiers} = this.state;
const sponsorList = this.sponsorList();
- // console.log("current", current_user)
- // console.log("user", user)
var content = "";
if (current_user && user && user.login !== current_user.login){
@@ -268,7 +303,7 @@ class Sponsor extends Component {
+ tiers={tiers}>
diff --git a/src/forge/sponsor/sponsor.css b/src/forge/sponsor/sponsor.css
index 5493e6c48..1ca79791a 100644
--- a/src/forge/sponsor/sponsor.css
+++ b/src/forge/sponsor/sponsor.css
@@ -34,5 +34,5 @@
}
.sponsor-inline{
- display: inline;
+ display: inline-block;
}
\ No newline at end of file
diff --git a/src/forge/sponsor/sponsor_tier_item.js b/src/forge/sponsor/sponsor_tier_item.js
index c3f15ea12..96e767233 100644
--- a/src/forge/sponsor/sponsor_tier_item.js
+++ b/src/forge/sponsor/sponsor_tier_item.js
@@ -1,6 +1,6 @@
import React, { Component } from "react";
import { Link } from "react-router-dom";
-import { Avatar, Tag, Button, Spin, Icon, Modal, Input, Form, message, Popconfirm, Divider} from "antd";
+import { Avatar, Tag, Button, Spin, Icon, Modal, Input, Form, message, Popconfirm, Divider, InputNumber} from "antd";
import { Route, Switch } from "react-router-dom";
import { withRouter } from "react-router";
// import { EditOutlined } from "@ant-design/icons";
@@ -37,15 +37,15 @@ class extends Component{
return(