Commit 1c8ced77 authored by gxx's avatar gxx

团队 转让团队

parent b052b96e
...@@ -13,10 +13,12 @@ interface GroupServiceContract ...@@ -13,10 +13,12 @@ interface GroupServiceContract
{ {
public function add($creator_id,$name,$brief,$logo,$status); public function add($creator_id,$name,$brief,$logo,$status);
public function delete($id); public function delete($id);
public function update($group_id,$owner_id,$name,$logo,$brief,$status); public function update($group_id,$name,$logo,$brief,$status);
public function transfer($group_id,$owner_id); public function transfer($group_id,$owner_id);
public function get($group_id); public function get($group_id);
public function getAll(); public function getAll($page);
public function ajax($name);
} }
\ No newline at end of file
<?php
namespace App\Http\Controllers;
use App\Contracts\GroupServiceContract;
use App\Util\Message;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class GroupController extends Controller
{
public $mGroup;
public function __construct(GroupServiceContract $group)
{
$this->mGroup = $group;
}
public function getAll()
{
$groups= $this->mGroup->getAll(2);
if (count($groups) > 0){
return view('admin/group/grouptables',compact('groups'));
}
return Message::makeError('查找失败');
}
public function get(Request $request)
{
$id = $request->id;
$groups = $this->mGroup->get($id);
if (count($groups) > 0){
return view('admin/group/groupinformation',compact('groups'));
}
return Message::makeError('查找失败');
}
public function updatePage(Request $request)
{
$id = $request->id;
$group = $this->mGroup->get($id);
if (count($group) > 0){
return view('admin/group/update',compact('group'));
}
return Message::makeError('查找失败');
}
public function update(Request $request)
{
$rules = [
'name'=>'required',
];
$validator = Validator::make($request->all(),$rules);
if($validator->fails()){
return Message::makeError("invalid param",$validator->messages()->messages());
}else{
$id = $request->id;
$name = $request->name;
$brief = $request->brief;
$logo = $request->file('logo');
$status = 0;
if ($logo == null){
$logo = null;
}
$result = $this->mGroup->update($id,$name,$logo,$brief,$status);
if ($result){
return redirect(route('group.getAll'));
}else{
return Message::makeError('修改失败');
}
}
}
public function transferPage(Request $request)
{
$id = $request->id;
$group = $this->mGroup->get($id);
if (count($group) > 0){
return view('admin/group/transfer',compact('group'));
}
return Message::makeError('获取失败请重试!');
}
public function transfer(Request $request)
{
$result = $this->mGroup->transfer();
}
public function ajax($name)
{
$result = $this->mGroup->ajax($name);
if ($result != null){
return $result['id'];
}
return null;
}
}
<?php
namespace App\Http\Controllers;
use App\Models\Group;
use App\Models\Project;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
class StatisticsController extends Controller
{
// 今日新增用户
public function newUser()
{
// 获取当天 00:00:00 开始时间
$startData = Carbon::today();
// 查询 今日新增用户
$newUserCount =count(User::where('created_at','>',$startData)->get());
// 查询今日新增项目
$newProject = count(Project::where('created_at','>',$startData)->get());
// 查询所有用户
$users = count(User::all());
// 查询所有项目
$projects = count(Project::all());
return view('admin/index',compact('newUserCount','newProject','users','projects'));
}
}
...@@ -7,6 +7,7 @@ use App\Models\User; ...@@ -7,6 +7,7 @@ use App\Models\User;
use App\Util\Message; use App\Util\Message;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller class UserController extends Controller
{ {
...@@ -36,24 +37,39 @@ class UserController extends Controller ...@@ -36,24 +37,39 @@ class UserController extends Controller
public function update(Request $request) public function update(Request $request)
{ {
$id = $request->id;
$user_name = $request->user_name; $rules = [
$real_name = $request->real_name; 'user_name'=>'required',
$phone = $request->phone; ];
$gender = $request->gender;
$email = $request->email; $validator = Validator::make($request->all(),$rules);
$head_icon = $request->file('head_icon'); if($validator->fails()){
if ($head_icon == null){
$head_icon = null; return Message::makeError("invalid param",$validator->messages()->messages());
$result = $this->mUser->update($id,$phone,$user_name,$real_name,$gender,$email,$head_icon);
}else{ }else{
$id = $request->id;
$user_name = $request->user_name;
$real_name = $request->real_name;
$phone = $request->phone;
$gender = $request->gender;
$email = $request->email;
$head_icon = $request->file('head_icon');
if ($head_icon == null){
$head_icon = null;
}
$result = $this->mUser->update($id,$phone,$user_name,$real_name,$gender,$email,$head_icon); $result = $this->mUser->update($id,$phone,$user_name,$real_name,$gender,$email,$head_icon);
if ($result){
return redirect(route('user.getAll'));
}else{
return Message::makeError('修改失败');
}
} }
if ($result){
return redirect(route('user.getAll'));
}else{
return Message::makeError('修改失败');
}
} }
......
...@@ -10,4 +10,13 @@ class Group extends Model ...@@ -10,4 +10,13 @@ class Group extends Model
use SoftDeletes; use SoftDeletes;
protected $dates = ['delete_at']; protected $dates = ['delete_at'];
public function creator(){
return $this->belongsTo('App\Models\User','creator_id');
}
public function owner(){
return $this->belongsTo('App\Models\User','owner_id');
}
} }
...@@ -4,36 +4,28 @@ namespace App\Models; ...@@ -4,36 +4,28 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Scout\Searchable;
class User extends Model class User extends Model
{ {
use SoftDeletes,Searchable; use SoftDeletes;
protected $dates = ['delete_at']; protected $dates = ['delete_at'];
protected $hidden =['password']; protected $hidden =['password'];
protected $table = 'users';
protected $fillable=["user_name","phone","password"]; protected $fillable=["user_name","phone","password"];
public function groups() public function groupsCreated()
{ {
return $this->hasMany('App\Models\Group','creator_id');
} }
public function groupsOwned(){
public function toSearchableArray() return $this->hasMany('App\Models\Group','owner_id');
{
return [
'user_name' => $this->user_name,
'real_name' => $this->real_name,
];
} }
public function EmailCheck() public function EmailCheck()
{ {
return $this->hasOne('App\EmailCheck'); return $this->hasOne('App\Models\EmailCheck');
} }
} }
...@@ -108,4 +108,5 @@ class AuthService implements AuthServiceContract ...@@ -108,4 +108,5 @@ class AuthService implements AuthServiceContract
\session(["user"=>$user]); \session(["user"=>$user]);
} }
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ namespace App\Services; ...@@ -11,6 +11,7 @@ namespace App\Services;
use App\Contracts\GroupServiceContract; use App\Contracts\GroupServiceContract;
use App\Models\Group; use App\Models\Group;
use App\Models\User;
class GroupService implements GroupServiceContract class GroupService implements GroupServiceContract
{ {
...@@ -47,13 +48,12 @@ class GroupService implements GroupServiceContract ...@@ -47,13 +48,12 @@ class GroupService implements GroupServiceContract
} }
public function update($group_id,$owner_id,$name,$logo,$brief,$status) public function update($group_id,$name,$logo,$brief,$status)
{ {
$group = Group::find($group_id); $group = Group::find($group_id);
if ($group == null){ if ($group == null){
return false; return false;
} }
$group->owner_id = $owner_id;
$group->name = $name; $group->name = $name;
$group->logo = $logo; $group->logo = $logo;
$group->brief = $brief; $group->brief = $brief;
...@@ -100,9 +100,10 @@ class GroupService implements GroupServiceContract ...@@ -100,9 +100,10 @@ class GroupService implements GroupServiceContract
} }
public function getAll() public function getAll($page)
{ {
$groups = Group::all(); $groups = Group::paginate($page);
if(count($groups) < 0){ if(count($groups) < 0){
return null; return null;
}else{ }else{
...@@ -111,4 +112,12 @@ class GroupService implements GroupServiceContract ...@@ -111,4 +112,12 @@ class GroupService implements GroupServiceContract
} }
public function ajax($name)
{
$result = User::where('real_name','=',$name)->first();
if ($result != null ){
return $result;
}
return null;
}
} }
\ No newline at end of file
...@@ -65,7 +65,7 @@ return [ ...@@ -65,7 +65,7 @@ return [
| |
*/ */
'timezone' => 'UTC', 'timezone' => 'PRC',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
......
This diff is collapsed.
@extends('admin/dashboard')
@section('content')
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
User Tables
<small>advanced tables</small>
</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>
<li><a href="#">Tables</a></li>
<li class="active">Data tables</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<div class="row">
<div class="col-xs-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">Hover Data Table</h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<form action="{{url('user/search')}}">
<div class="row">
<div class="col-lg-6">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search for..." name="search">
<span class="input-group-btn">
<button class="btn btn-default" > 搜索 </button>
</span>
</div><!-- /input-group -->
</div><!-- /.col-lg-6 -->
</div><!-- /.row -->
</form>
<br>
<table id="example2" class="table table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>创建人</th>
<th>拥有人</th>
<th>团队名</th>
<th>简介</th>
<th>logo</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
@if($groups == null)
<tbody>
<tr>
<td colspan="8" style="text-align: center;color: red"> 数据暂无 </td>
</tr>
</tbody>
</table>
@else
@foreach($groups as $group)
<tbody>
<tr>
<td>{{$group->id}}</td>
<td><a href="{{route('user.get',$group->owner_id)}}">{{$group->owner->user_name}}</a></td>
<td>{{$group->creator->user_name}} </td>
<td>{{$group->name}}</td>
<td>{{$group->brief}}</td>
<td>{{$group->logo ==''?'暂无':$group->logo}}</td>
<td>{{$group->status}}</td>
<td>
<a href="{{route('group.get',['id' => $group->id])}}" class="btn btn-info" > 查看详情 </a>
<a href="{{route('group.updatePage',['id' => $group->id])}}" class="btn btn-info"> 编辑 </a>
<a href="{{route('group.transferPage',['id'=>$group->id])}}" class="btn bg-orange"> 转让 </a>
</td>
</tr>
</tbody>
@endforeach
</table>
{{ $groups->links() }}
</div>
<!-- /.box-body -->
</div>
<!-- /.box -->
</div>
<!-- /.col -->
</div>
<!-- /.row -->
</section>
@endif
@endsection
\ No newline at end of file
@extends('admin/dashboard')
@section('content')
<!-- general form elements -->
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">Modify the information</h3>
</div>
<!-- /.box-header -->
<!-- form start -->
<form role="form" action="{{route('group.update')}}" method="post" enctype="multipart/form-data">
{{csrf_field()}}
<div class="box-body">
<div class="form-group">
<label for="exampleInputEmail1">拥有者</label>
<input type="text" class="form-control" id="exampleInputEmail1" placeholder="name" name="name" value="{{$group->owner->user_name}}">
<input type="hidden" name="id" value="{{$group['id']}}">
</div>
<div class="form-group">
<label for="exampleInputPassword1">转让</label>
<input type="text" class="form-control" id="exampleInputPassword1" placeholder="name" value="" >
<input type="hidden" id="owner_id" value="" name="a">
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<button type="submit" class="btn btn-primary" >保存</button>
</div>
</form>
</div>
<script src="{{url('js/jquery-3.2.1.min.js')}}"> </script>
<script>
$('#exampleInputPassword1').blur(function(){
var real_name = $('#exampleInputPassword1').val();
$.ajax({
type:'get',
url:'{{url('group/ajax')}}/' + real_name ,
success:function(data){
if (data){
// 设置 新的拥有者的ID
$('#owner_id').val(data);
}else {
alert('无此用户')
}
},
error:function(data){
console.log('错误');
}
})
});
function base64_uploading(base64Data,fileName){
$.ajax({
type: 'post',
url: "{{url('user/update')}}",
data: {
'base64':base64Data,
'name':fileName
},
dataType:"json",
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
},
success:function(data){
console.log(data);
if (data ==1 ){
alert('上传成功')
}else {
alert('上传失败')
}
},
error:function (data) {
alert(1);
console.log(data);
}
})
}
</script>
@endsection
\ No newline at end of file
@extends('admin/dashboard')
@section('content')
<!-- general form elements -->
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">Modify the information</h3>
</div>
<!-- /.box-header -->
<!-- form start -->
<form role="form" action="{{route('group.update')}}" method="post" enctype="multipart/form-data">
{{csrf_field()}}
<div class="box-body">
<div class="form-group">
<label for="exampleInputFile">团队Logo</label>
<p>
<img src="{{asset($group['logo']==''?url('storage/1.jpg'):$groups['logo'])}}" alt="" width="100px" height="110px" style="border-radius: 80%">
</p>
</div>
<div class="form-group">
<label for="exampleInputEmail1">团队名称</label>
<input type="text" class="form-control" id="exampleInputEmail1" placeholder="name" name="name" value="{{$group['name']}}">
<input type="hidden" name="id" value="{{$group['id']}}">
</div>
<div class="form-group">
<label for="exampleInputPassword1">团队简介</label>
<input type="text" class="form-control" id="exampleInputPassword1" placeholder="brief" name="brief" value="{{$group['brief']}}">
</div>
<div class="form-group">
<label for="exampleInputPassword1">拥有者</label>
<input type="text" class="form-control" id="exampleInputPassword1" placeholder="owner" name="owner_id" value="{{$group->owner->user_name}}">
</div>
<div class="form-group">
<label for="exampleInputFile">更换Logo</label>
<input type="file" id="exampleInputFile" name="logo" >
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<button type="submit" class="btn btn-primary">保存</button>
</div>
</form>
</div>
<script src="{{url('js/jquery-3.2.1.min.js')}}"> </script>
{{--<script>--}}
{{--$("#exampleInputFile").change(function(){--}}
{{--var file = this.files[0];--}}
{{--// 判断文件大小--}}
{{--if(file.size > 5*1024*1024){--}}
{{--alert('文件过大!');--}}
{{--}--}}
{{--// 使用FileReader 接口--}}
{{--var reader = new FileReader();--}}
{{--// 成功读取--}}
{{--reader.onload = function(){--}}
{{--// 通过reader.result 属性 来访问生成的 base 64 DataURL--}}
{{--var fileInfo = reader.result;--}}
{{--$('#Preview').attr('src',fileInfo).css({width:100,height:90});--}}
{{--//console.log(fileInfo);--}}
{{--var name = $('#exampleInputFile').val();--}}
{{--// 分割字符串--}}
{{--var arr = name.split('\\');--}}
{{--var fileName = arr[arr.length-1];--}}
{{--base64_uploading(fileInfo,fileName);--}}
{{--}--}}
{{--reader.readAsDataURL(file);--}}
{{--})--}}
{{--//AJAX 上传base 64--}}
{{--function base64_uploading(base64Data,fileName){--}}
{{--$.ajax({--}}
{{--type: 'post',--}}
{{--url: "{{url('user/update')}}",--}}
{{--data: {--}}
{{--'base64':base64Data,--}}
{{--'name':fileName--}}
{{--},--}}
{{--dataType:"json",--}}
{{--headers: {--}}
{{--'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')--}}
{{--},--}}
{{--success:function(data){--}}
{{--console.log(data);--}}
{{--if (data ==1 ){--}}
{{--alert('上传成功')--}}
{{--}else {--}}
{{--alert('上传失败')--}}
{{--}--}}
{{--},--}}
{{--error:function (data) {--}}
{{--alert(1);--}}
{{--console.log(data);--}}
{{--}--}}
{{--})--}}
{{--}--}}
{{--</script>--}}
@endsection
\ No newline at end of file
@extends('admin/dashboard')
@section('content')
<div class="row">
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3> {{$newUserCount}} </h3>
<p>今日新增用户</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-aqua">
<div class="inner">
<h3>{{$newProject}}</h3>
<p>今日新增项目</p>
</div>
<div class="icon">
<i class="ion ion-bag"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>{{$users}}<sup style="font-size: 20px"></sup></h3>
<p> 所有用户 </p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>{{$projects}}</h3>
<p>所有项目</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
</div>
@endsection
\ No newline at end of file
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
<ul class="sidebar-menu"> <ul class="sidebar-menu">
<li class="header">HEADER</li> <li class="header">HEADER</li>
<!-- Optionally, you can add icons to the links --> <!-- Optionally, you can add icons to the links -->
<li class="active"><a href="#"><i class="fa fa-link"></i> <span>admin-index</span></a></li> <li class="active"><a href="{{url('statistics')}}"><i class="fa fa-link"></i> <span>首页</span></a></li>
<li class="treeview"> <li class="treeview">
<a href="#"><i class="fa fa-link"></i> <span>用户管理</span> <a href="#"><i class="fa fa-link"></i> <span>用户管理</span>
...@@ -46,6 +46,21 @@ ...@@ -46,6 +46,21 @@
<li><a href="{{url('user/getAll')}}">用户列表</a></li> <li><a href="{{url('user/getAll')}}">用户列表</a></li>
<li><a href="#">Link in level 2</a></li> <li><a href="#">Link in level 2</a></li>
</ul> </ul>
</li>
<li class="treeview">
<a href="#"><i class="fa fa-link"></i> <span>团队管理</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="{{url('group/getAll')}}">团队列表</a></li>
<li><a href="#">Link in level 2</a></li>
</ul>
</li> </li>
</ul> </ul>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
......
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
<td>{{$value['phone']}}</td> <td>{{$value['phone']}}</td>
<td>{{$value['user_name']}}</td> <td>{{$value['user_name']}}</td>
<td>{{$value['real_name']}}</td> <td>{{$value['real_name']}}</td>
<td><img src="{{asset($value['head_icon'] ==''?'':$value['head_icon'])}}" alt="" width="120px" height="50px" > </td> <td><img src="{{asset($value['head_icon'] ==''?'':$value['head_icon'])}}" alt="" width="50px" height="40px" > </td>
<td> {{$value['gender'] == 0 ?'男':'女'}}</td> <td> {{$value['gender'] == 0 ?'男':'女'}}</td>
<td>{{$value['email']}}</td> <td>{{$value['email']}}</td>
<td>{{$value['status']}}</td> <td>{{$value['status']}}</td>
......
...@@ -44,11 +44,33 @@ Route::group(['prefix'=> 'user'],function (){ ...@@ -44,11 +44,33 @@ Route::group(['prefix'=> 'user'],function (){
Route::get('updatePage/{id}','UserController@updatePage')->name('user.updatePage'); Route::get('updatePage/{id}','UserController@updatePage')->name('user.updatePage');
Route::post('update','UserController@update')->name('user.update'); Route::post('update','UserController@update')->name('user.update');
Route::get('search','UserController@simpleSearch')->name('user.search'); Route::get('search','UserController@simpleSearch')->name('user.search');
}); });
// 团队
Route::group(['prefix'=> 'group'],function (){
Route::get('getAll','GroupController@getAll')->name('group.getAll');
Route::get('get','GroupController@get')->name('group.get');
Route::get('updatePage','GroupController@updatePage')->name('group.updatePage');
Route::post('update','GroupController@update')->name('group.update');
Route::get('transferPage','GroupController@transferPage')->name('group.transferPage');
Route::get('ajax/{name}','GroupController@ajax')->name('group.ajax');
Route::post('transfer','GroupController@transfer')->name('group.transfer');
Route::get('search','UserController@simpleSearch')->name('group.search');
});
// 统计
Route::get('statistics','StatisticsController@newUser');
Route::get('table',function (){ Route::get('table',function (){
return view('admin/usertables'); return view('admin/usertables');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment