addTean,deleteTeam控制完成

lirongchuan
LRC 2 years ago
parent a2a04d7a56
commit bce690e0b3

@ -69,22 +69,31 @@ class NetWorkController {
return false;
}
}
//--------------------------------------------------
Future<List<Team>> getTeamList(int userid) async {
Future<List<Team>> getTeamList(int leaderId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team_list'),
Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'leaderId': leaderId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<dynamic> jsonResponse = json.decode(response.body);
List<Team> teamList = jsonResponse.map((team) => Team.fromJson(team)).toList();
return teamList;
final Map<String, dynamic> jsonResponse = json.decode(response.body);
if (jsonResponse != null && jsonResponse['data'] != null) {
List<Team> teamList = (jsonResponse['data'] as List)
.map((team) => Team.fromJson(team as Map<String, dynamic>))
.toList();
print(teamList);
return teamList;
} else {
print('JSON数据解析错误');
return [];
}
} else {
return [];
}
@ -145,7 +154,7 @@ class NetWorkController {
}
//--------------------------------------------------
Future<List<User>?> getTeamUserList(int teamid) async {
Future<List<User>> getTeamUserList(int teamid) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team_user_list'),
headers: <String, String>{
@ -159,11 +168,11 @@ class NetWorkController {
List<User> userList = jsonResponse.map((user) => User.fromJson(user)).toList();
return userList;
} else {
return null;
return [];
}
}
Future<bool> insertTeamUser(int teamid, int userid) async {
Future<bool> insertTeamUser(int teamid, String membername) async {
final response = await http.post(
Uri.parse(baseUrl+'insert_team_user'),
headers: <String, String>{
@ -171,7 +180,7 @@ class NetWorkController {
},
body: JsonEncoder().convert({
'teamId': teamid,
'userId': userid,
'membername': membername,
}),
);
@ -183,7 +192,7 @@ class NetWorkController {
}
}
Future<bool> deleteTeamUser(int teamid, int userid) async {
Future<bool> deleteTeamUser(int teamid, String membername) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_team_user'),
headers: <String, String>{
@ -191,7 +200,7 @@ class NetWorkController {
},
body: JsonEncoder().convert({
'teamId': teamid,
'userId': userid,
'membername': membername,
}),
);
@ -280,7 +289,7 @@ class NetWorkController {
//--------------------------------------------------
Future<List<Course>?> getCourseList(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team_user_list'),
Uri.parse(baseUrl + 'get_all_course'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},

@ -1,4 +1,5 @@
import 'package:timemanagerapp/controller/NetWorkController.dart';
import 'package:timemanagerapp/entity/User.dart';
import '../entity/Team.dart';
import '../entity/Work.dart';
@ -6,12 +7,14 @@ import 'package:timemanagerapp/database/dao/TeamDao.dart';
import 'package:timemanagerapp/database/dao/WorkDao.dart';
import '../setting/Setting.dart';
import '../util/dataUtil.dart';
class TeamController {
late int leaderid;
List<Team> teamList = []; //teamList
Map<int, List<Work>> Wordmaplist = {};
NetWorkController netWorkController = NetWorkController();
IdGenerator idGenerator = IdGenerator();
TeamController() { //leaderidid
@ -24,14 +27,17 @@ class TeamController {
}
}
//Team
// Future<void> deleteAllTeams() async {
// await netWorkController.deleteAllTeams();
// }
Future<List<Team>> getTeamList() async {
return await netWorkController.getTeamList(Setting.user!.getId!);
}
Future<bool> createTeam(Team team) async {
return await netWorkController.insertTeam(team);
}
Future<void> insertTeamList(List<Team> teamList) async {
for (Team team in teamList) {
@ -39,19 +45,34 @@ class TeamController {
}
}
// Future<void> deleteAllTeams() async {
// await netWorkController.deleteAllTeams();
// }
Future<bool> deleteTeam(int teamid) async {
return await netWorkController.deleteTeam(teamid);
}
Future<bool> insertTeam(Team team) async {
team.id = await idGenerator.generateId();
return await netWorkController.insertTeam(team);
}
Future<bool> updateTeam(Team team) async {
return await netWorkController.updateTeam(team);
}
//TeamUser
Future<List<User>> getTeamUserList(int teamid) async {
return await netWorkController.getTeamUserList(teamid);
}
Future<bool> insertTeamUser(int teamid, String membername) async {
return await netWorkController.insertTeamUser(teamid, membername);
}
Future<bool> deleteTeamUser(int teamid, String membername) async {
return await netWorkController.deleteTeamUser(teamid, membername);
}
//Work
Future<bool> insertWork(Work work) async {
return await netWorkController.insertTeamWork(work);
}

@ -42,6 +42,69 @@ class MyDatabase {
}
static Future<void> _createAllTableBySql(Database db) async{
await db.execute('''
CREATE TABLE IF NOT EXISTS users(
id BIGINT PRIMARY KEY,
username TEXT NOT NULL,
password TEXT NOT NULL,
role BIGINT NOT NULL
);
CREATE TABLE IF NOT EXISTS works (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
workId BIGINT NOT NULL,
teamId BIGINT NOT NULL,
name TEXT NOT NULL,
content TEXT,
status TEXT,
endTime TEXT NOT NULL,
startTime TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS clocks (
id BIGINT PRIMARY KEY,
clockId BIGINT NOT NULL,
userId BIGINT NOT NULL,
text TEXT,
img TEXT,
music TEXT
);
CREATE TABLE IF NOT EXISTS tasks (
id BIGINT PRIMARY KEY,
taskId BIGINT NOT NULL,
userId BIGINT NOT NULL,
content TEXT,
name TEXT NOT NULL,
startTime TEXT NOT NULL,
endTime TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS course(
id BIGINT PRIMARY KEY,
userId BIGINT,
courseId BIGINT NOT NULL,
name TEXT NOT NULL,
credit REAL,
teacher TEXT,
location TEXT,
remark TEXT,
start TEXT NOT NULL,
end TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS teams (
id BIGINT PRIMARY KEY,
leaderId BIGINT NOT NULL,
teamName TEXT NOT NULL,
maxNumber BIGINT,
introduce TEXT
);
CREATE TABLE IF NOT EXISTS userteams (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
teamId BIGINT NOT NULL
);
''');
}
static Future<void> _createUserTable(Database db, int version) async {
// User
await db.execute('''
@ -147,15 +210,16 @@ class MyDatabase {
//
static Future<void> _dropAllTables(Database database) async {
// SQL
await database.transaction((txn) async {
// 'table1''table2''table3'
await txn.execute('DROP TABLE IF EXISTS users');
await txn.execute('DROP TABLE IF EXISTS clocks');
await txn.execute('DROP TABLE IF EXISTS tasks');
await txn.execute('DROP TABLE IF EXISTS works');
await txn.execute('DROP TABLE IF EXISTS course');
await txn.execute('DROP TABLE IF EXISTS teams');
await txn.execute('DROP TABLE IF EXISTS userteams');
});
await _createAllTableBySql(database);
// await database.transaction((txn) async {
// // 'table1''table2''table3'
// await txn.execute('DROP TABLE IF EXISTS users');
// await txn.execute('DROP TABLE IF EXISTS clocks');
// await txn.execute('DROP TABLE IF EXISTS tasks');
// await txn.execute('DROP TABLE IF EXISTS works');
// await txn.execute('DROP TABLE IF EXISTS course');
// await txn.execute('DROP TABLE IF EXISTS teams');
// await txn.execute('DROP TABLE IF EXISTS userteams');
// });
}
}

@ -3,12 +3,14 @@ class Team {
int leaderId;
String teamName;
int maxNumber;
String? introduce;
Team({
this.id,
required this.leaderId,
required this.teamName,
required this.maxNumber,
this.introduce
});
Map<String, dynamic> toMap() {
@ -17,18 +19,17 @@ class Team {
'leaderId': leaderId,
'teamName': "$teamName",
'maxNumber': maxNumber,
'introduce': "$introduce"
};
}
factory Team.fromJson(Map<String, dynamic> json) {
final data = json['data'];
final team = data['team'][0];
return Team(
id: team['id'],
leaderId: team['leaderId'],
teamName: team['teamName'],
maxNumber: team['maxNumber'],
id: json['id'],
leaderId: json['leaderId'],
teamName: json['teamName'],
maxNumber: json['maxNumber'],
introduce: json['introduce'],
);
}
@ -41,6 +42,8 @@ class Team {
int get getMaxNumber => maxNumber;
String? get getIntroduce => introduce;
// Setter methods
set setId(int newId) {
id = newId;
@ -58,9 +61,13 @@ class Team {
maxNumber = newMaxNumber;
}
set setIntroduce(String newIntroduce) {
introduce = newIntroduce;
}
// toString method
@override
String toString() {
return 'Team(id: $id, leaderId:$leaderId, teamName:$teamName, maxNumber: $maxNumber)';
return 'Team{id: $id, leaderId: $leaderId, teamName: $teamName, maxNumber: $maxNumber, introduce: $introduce}';
}
}

@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/provider/TeamProvider.dart';
import 'package:timemanagerapp/provider/TeamUserProvider.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/widgets/HomeWidget.dart';
import 'package:timemanagerapp/provider/TimeProvider.dart';
@ -23,6 +25,8 @@ class MyApp extends StatelessWidget {
return MultiProvider( //Timetable
providers: [
ChangeNotifierProvider(create: (ctx) => TimeProvider()),
ChangeNotifierProvider(create: (ctx) => TeamProvider()),
ChangeNotifierProvider(create: (ctx) => TeamUserProvider()),
],
child: MaterialApp(
home: Scaffold(

@ -0,0 +1,20 @@
import 'package:flutter/cupertino.dart';
class TeamProvider extends ChangeNotifier {
int _updatTeamCount = 0;
int get updatTeamCount => _updatTeamCount;
set updatTeamCount(int value) {
print("provider手动更新Team表");
_updatTeamCount = value;
notifyListeners();
}
void updatTeame() {
print("provider手动更新Team表");
_updatTeamCount = ~_updatTeamCount;
notifyListeners();
}
}

@ -0,0 +1,20 @@
import 'package:flutter/cupertino.dart';
class TeamUserProvider extends ChangeNotifier {
int _updatTeamUserCount = 0;
int get updatTeameCount => _updatTeamUserCount;
set updatTeameUserCount(int value) {
print("provider手动更新TeamUser表");
_updatTeamUserCount = value;
notifyListeners();
}
void updatTeameUser() {
print("provider手动更新TeamUser表");
_updatTeamUserCount = ~_updatTeamUserCount;
notifyListeners();
}
}

@ -11,7 +11,7 @@ class ManageUserTeamRoute extends StatelessWidget {
appBar: AppBar(
title: Text('团队成员管理'),
),
body: ManageUserTeamWidget(),
// body: ManageUserTeamWidget(),
);
}
}

@ -1,4 +1,8 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import 'package:timemanagerapp/entity/Team.dart';
import '../setting/Setting.dart';
class AddTeamWidget extends StatefulWidget {
@override
@ -6,6 +10,8 @@ class AddTeamWidget extends StatefulWidget {
}
class _AddTeamWidgetState extends State<AddTeamWidget> {
TeamController teamController = TeamController();
TextEditingController teamNameController = TextEditingController();
TextEditingController teamDescriptionController = TextEditingController();
@ -37,12 +43,14 @@ class _AddTeamWidgetState extends State<AddTeamWidget> {
onPressed: () {
String teamName = teamNameController.text;
String teamDescription = teamDescriptionController.text;
teamController.insertTeam(Team(leaderId: Setting.user!.getId!, teamName: teamName,introduce: teamDescription, maxNumber: 1000));
//
//todo
setState(() {
teamNameController.text = teamName;
teamDescriptionController.text = teamDescription;
});
// setState(() {
// teamNameController.text = teamName;
// teamDescriptionController.text = teamDescription;
// });
Navigator.pop(context);
},
child: Text('确定'),

@ -1,26 +1,61 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import 'package:timemanagerapp/provider/TeamProvider.dart';
import '../entity/Team.dart';
class ManageUserTeamWidget extends StatefulWidget {
const ManageUserTeamWidget({Key? key}) : super(key: key);
const ManageUserTeamWidget({Key? key,required this.team}) : super(key: key);
final Team team;
@override
_AddTeamWidgetState createState() => _AddTeamWidgetState();
_ManageUserTeamWidgetState createState() => _ManageUserTeamWidgetState(team: team);
}
class _AddTeamWidgetState extends State<ManageUserTeamWidget> {
TextEditingController memberIdController = TextEditingController();
class _ManageUserTeamWidgetState extends State<ManageUserTeamWidget> {
_ManageUserTeamWidgetState({required this.team});
final Team team;
TeamController teamController = TeamController();
int firstInit = 0;
List<String> memberList = [
'成员1',
'成员2',
'成员3',
];
Future<void> futureDo() async {
//
// memberList = await teamController.getTeamList();
}
dataInitAfterFutherDo() {
//
}
updateAfterFutherDo() {
//
}
void handleInviteButton() {
String memberId = memberIdController.text;
String memberName = memberIdController.text;
//
teamController.insertTeamUser(team.id!, memberName);
//
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('成功发送邀请'),
content: Text('已成功发送邀请给成员ID: $memberId'),
content: Text('已成功发送邀请给成员: $memberName'),
actions: [
TextButton(
child: Text('确定'),
@ -34,28 +69,111 @@ class _AddTeamWidgetState extends State<ManageUserTeamWidget> {
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加团队成员'),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: memberIdController,
decoration: InputDecoration(labelText: '成员ID'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: handleInviteButton,
child: Text('邀请'),
void removeMember(String membername) {
//
teamController.deleteTeamUser(team.id!, membername);
//
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('成功移除成员'),
content: Text('已成功移除成员: $membername'),
actions: [
TextButton(
child: Text('确定'),
onPressed: () {
Navigator.of(context).pop(); //
},
),
],
),
),
);
},
);
}
final memberIdController = TextEditingController();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Consumer<TeamProvider>(builder: (ctx, teamPro, child) {
print('Rebuild teamPro');
return FutureBuilder<void>(
future: futureDo(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
//
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text('Error: ${snapshot.error}'),
);
} else {
if (firstInit == 0) {
//
dataInitAfterFutherDo();
firstInit = 1;
} else {
//
updateAfterFutherDo();
}
return Scaffold(
appBar: AppBar(
title: Text('添加团队成员'),
),
body: RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return futureDo().then((value) => setState(() {}));
},
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: memberIdController,
decoration: InputDecoration(labelText: '成员ID'),
),
SizedBox(height: 20),
ElevatedButton( //
onPressed: handleInviteButton,
child: Text('邀请'),
),
SizedBox(height: 20),
Expanded( // 使Expanded使ListView
child: ListView.builder(
itemCount: memberList.length,
itemBuilder: (BuildContext context, int index) {
String member = memberList[index];
return ListTile( //
title: Text(member),
trailing: IconButton(
icon: Icon(Icons.remove),
onPressed: () {
removeMember(member);
},
),
);
},
),
),
],
),
),
),
);
}
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
});
}
}

@ -1,12 +1,8 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import 'package:timemanagerapp/provider/TeamUserProvider.dart';
import 'package:timemanagerapp/ruters/AddScheduleRoute.dart';
import 'package:timemanagerapp/ruters/AddTeamRoute.dart';
import 'package:timemanagerapp/widgets/AddScheduleFormWidget.dart';
import 'package:timemanagerapp/widgets/AddTeamWidget.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddTeamWidget.dart';
import 'package:timemanagerapp/widgets/ManageUserTeamWidget.dart';
import '../entity/Team.dart';
@ -19,11 +15,15 @@ class TeamWidget extends StatefulWidget {
}
class _TeamWidgetState extends State<TeamWidget> {
List<Team> teamList = [
// Team(id:1, teamName: 'Team 1', leaderId: 1, maxNumber: 10),
// Team(id:2, teamName: 'Team 2', leaderId: 1, maxNumber: 10),
// Team(id:3, teamName: 'Team 3', leaderId: 1, maxNumber: 10)
];
int firstInit = 0;
List<Team> teamList = [];
// [
// Team(id:1, teamName: 'Team 1', leaderId: 1, maxNumber: 10),
// Team(id:2, teamName: 'Team 2', leaderId: 1, maxNumber: 10),
// Team(id:3, teamName: 'Team 3', leaderId: 1, maxNumber: 10)
// ];
TeamController teamController = TeamController();
@ -35,6 +35,14 @@ class _TeamWidgetState extends State<TeamWidget> {
teamList = await teamController.getTeamList();
}
dataInitAfterFutherDo() {
}
updateAfterFutherDo() {
}
@override
initState(){
super.initState();
@ -43,55 +51,91 @@ class _TeamWidgetState extends State<TeamWidget> {
@override
Widget build(BuildContext context) {
return Center(
child: ListView.builder(
itemCount: teamList.length,
itemBuilder: (BuildContext context, int index) {
Team team = teamList[index];
return Column(
children: [
ListTile(
leading: Icon(Icons.group), // icon
title: Text(team.teamName), //
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.person_add), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ManageUserTeamWidget();
},
),
);
},
),
IconButton(
icon: Icon(Icons.assignment), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddScheduleRoute(
scheduleType: "work",
teamId: 1,
);
},
return Consumer<TeamUserProvider>(builder: (ctx, teamUserPro, child) {
print('Rebuild teamUserPro');
return FutureBuilder<void>(
future: futureDo(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
//
if (snapshot.connectionState == ConnectionState.done) {
if (firstInit == 0) {
//
dataInitAfterFutherDo();
firstInit = 1;
} else {
//
updateAfterFutherDo();
}
return RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return futureDo().then((value) => setState(() {}));
},
child: Center(
child: ListView.builder(
itemCount: teamList.length,
itemBuilder: (BuildContext context, int index) {
Team team = teamList[index];
return Column(
children: [
ListTile(
leading: Icon(Icons.group), // icon
title: Text(team.teamName), //
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.person_add), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ManageUserTeamWidget(team: team);
},
),
);
},
),
IconButton(
icon: Icon(Icons.assignment), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddScheduleRoute(
scheduleType: "work",
teamId: 1,
);
},
),
);
},
),
IconButton(
icon: Icon(Icons.remove),
onPressed: () {
setState(() {
teamController.deleteTeam(team.id!);
});
},
),
],
),
),
);
},
),
],
],
);
},
),
),
),
],
);
},
),
);
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
});
}
}

@ -25,6 +25,7 @@ import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:timemanagerapp/controller/CourseController.dart';
import 'package:timemanagerapp/controller/NetWorkController.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import 'package:timemanagerapp/controller/UserController.dart';
import 'package:timemanagerapp/database/dao/WorkDao.dart';
import 'package:timemanagerapp/entity/Course.dart';
@ -203,7 +204,7 @@ class _TestWidgetState extends State<TestWidget> {
ElevatedButton(
onPressed: () {
UserController()
.login(User(username: 'test', password: '123', role: 1))
.login(User(username: 'root', password: 'root', role: 1))
.then((resUser) {
showDialog(
context: context,
@ -222,7 +223,7 @@ class _TestWidgetState extends State<TestWidget> {
ElevatedButton(
onPressed: () {
NetWorkController()
.register(User(id: 3, username:'testReg' , password: '123', role: 0))
.register(User(id: Setting.user!.getId!, username:'testReg' , password: '123', role: 0))
.then((res) {
showDialog(
context: context,
@ -259,8 +260,34 @@ class _TestWidgetState extends State<TestWidget> {
),
ElevatedButton(
onPressed: () {
NetWorkController()
.insertTeam(Team(id:2, leaderId: 1, teamName: "test", maxNumber: 5))
TeamController().getTeamList().then((teamList) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('团队列表'),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: teamList
.map((team) => ListTile(
title: Text(team.getTeamName),
subtitle: Text(team.toString()),
))
.toList(),
),
),
);
},
);
});
},
child: Text('显示团队列表'),
),
ElevatedButton(
onPressed: () {
TeamController()
.insertTeam(Team(leaderId: Setting.user!.getId!, teamName: "test3", maxNumber: 5))
.then((resTeam) {
showDialog(
context: context,

Loading…
Cancel
Save