Elegantilize contact list

1. Split getContact into getHistoryContact and getNewContact
2. Now contacts with new messages will go on top of the list
This commit is contained in:
Harry Zhou
2017-06-10 07:59:46 +08:00
parent 0ea4fffb46
commit 5361c151e5
6 changed files with 49 additions and 30 deletions
+21 -22
View File
@@ -31,8 +31,10 @@ class MessageController extends Controller
$user_id = $request->session()->get('user_id');
$contact_id = $request->contact_id;
Message::where('receiver_id', $user_id)->where('sender_id', $contact_id)
->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id)
->update(['is_read' => true]);
MessageContact::where('user_id', $user_id)
->where('contact_id', $contact_id)
->update(['unread_count' => 0]);
$messages = Message::where('receiver_id', $user_id)->where('sender_id', $contact_id)
->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id)
->orderBy('id', 'desc')
@@ -47,14 +49,13 @@ class MessageController extends Controller
$contact_id = $request->contact_id;
$messages = Message::where('is_read', false)
->where('receiver_id', $user_id)->where('sender_id', $contact_id)
->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id)
->where('is_read', false)
->get();
Message::where('is_read', false)
->where('receiver_id', $user_id)->where('sender_id', $contact_id)
->orWhere('receiver_id', $contact_id)->where('sender_id', $user_id)
->where('is_read', false)
->update(['is_read' => true]);
MessageContact::where('user_id', $user_id)
->where('contact_id', $contact_id)
->update(['unread_count' => 0]);
return json_encode($messages);
}
@@ -65,16 +66,6 @@ class MessageController extends Controller
return $count;
}
public function readMessage(Request $request, $id)
{
$data = Message::find($id);
if ($request->session()->get('user_id') != $data->receiver_id)
return json_encode(['result' => false, 'msg' => 'Auth Failure.']);
$data->is_read = true;
$data->save();
return json_encode(['result' => true, 'msg' => 'success']);
}
public function deleteMessage(Request $request, $id)
{
$data = Message::find($id);
@@ -110,6 +101,7 @@ class MessageController extends Controller
'contact_id' => $user_id
]);
$contact->last_contact_time = time();
$contact->unread_count += 1;
$contact->save();
return json_encode(['result' => true, 'msg' => $message]);
}
@@ -119,7 +111,7 @@ class MessageController extends Controller
return View::make('message.sendMessage');
}
public function getMessageContact(Request $request)
public function getHistoryMessageContact(Request $request)
{
$user_id = $request->session()->get('user_id');
$contacts = MessageContact::where('user_id', $user_id)
@@ -128,12 +120,19 @@ class MessageController extends Controller
$query->select('id', 'nickname');
}])
->paginate(10);
foreach ($contacts as $c) {
$c->unread_count = Message::where('receiver_id', $user_id)
->where('sender_id', $c->contact_id)
->where('is_read', false)
->count();
}
return json_encode($contacts);
}
public function getNewMessageContact(Request $request)
{
$user_id = $request->session()->get('user_id');
$contacts = MessageContact::where('user_id', $user_id)
->where('unread_count', '>', 0)
->orderBy('last_contact_time', 'desc')
->with(['contact' => function ($query) {
$query->select('id', 'nickname');
}])
->get();
return json_encode($contacts);
}
+2 -2
View File
@@ -65,7 +65,8 @@ Route::group(['middleware' => ['web']],function () {
Route::get('/user/fav/edit', "UserController@editFavlist");
Route::delete('/user/fav/del', "UserController@delFavlist");
Route::get('/message/contacts', "MessageController@getMessageContact");
Route::get('/message/getHistoryMessageContact', "MessageController@getHistoryMessageContact");
Route::get('/message/getNewMessageContact', "MessageController@getNewMessageContact");
Route::get('/message/getHistoryMessage', "MessageController@getHistoryMessage");
Route::get('/message/getNewMessage', "MessageController@getNewMessage");
});
@@ -107,7 +108,6 @@ Route::group(['middleware' => ['web']],function () {
Route::get('/test/sendmessagepage', "MessageController@sendMessagepage")->middleware('su');
Route::post('/message', "MessageController@sendMessage")->middleware('auth');
Route::get('/message/num', "MessageController@getUnreadMsgNum")->middleware('auth');
Route::put('/message/{id}', "MessageController@readMessage")->middleware('auth');
Route::delete('/message/{id}', "MessageController@deleteMessage")->middleware('auth');
Route::get('/trans/{trans_id}', "TransactionController@showTrans")->middleware('auth');
+1 -1
View File
@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
class MessageContact extends Model
{
protected $fillable = ['user_id', 'contact_id'];
protected $fillable = ['user_id', 'contact_id', 'unread_count'];
public function contact()
{
return $this->belongsTo('App\User', 'contact_id');
@@ -18,6 +18,7 @@ class CreateMessageContactsTable extends Migration
$table->integer('user_id');
$table->integer('contact_id');
$table->integer('last_contact_time');
$table->integer('unread_count')->default(0);
$table->timestamps();
});
}
+23 -5
View File
@@ -22,7 +22,7 @@ Vue.component('contact-list', {
this.$nextTick(function () {
this.$on('getContactEvent', function () {
this.clearContact();
this.getContact();
this.getHistoryContact();
})
})
},
@@ -32,9 +32,9 @@ Vue.component('contact-list', {
this.last_page = null;
this.contacts = [];
},
getContact: function () {
getHistoryContact: function () {
var vm = this;
axios.get('/message/contacts?page=' + (this.current_page + 1).toString())
axios.get('/message/getHistoryMessageContact?page=' + (this.current_page + 1).toString())
.then(function (response) {
vm.current_page = response.data.current_page;
vm.last_page = response.data.last_page;
@@ -45,6 +45,20 @@ Vue.component('contact-list', {
vm.errorMessage = error;
})
},
getNewContact: function () {
var vm = this;
axios.get('/message/getNewMessageContact')
.then(function (response) {
for (var i in response.data)
{
vm.contacts = vm.contacts.filter(t => t.contact_id !== response.data[i].contact_id);
vm.contacts.unshift(response.data[i]);
}
})
.catch(function (error) {
vm.errorMessage = error;
})
},
loadDialog: function (id, index) {
var vm = this;
this.$emit('load-dialog', id);
@@ -73,8 +87,7 @@ Vue.component('message-dialog', {
mounted: function () {
this.$nextTick(function () {
this.$on('loadDialogHandler', function (id) {
this.current_page = 0;
this.last_page = null;
this.clearMessage();
this.getHistoryMessage(id);
})
})
@@ -122,6 +135,11 @@ Vue.component('message-dialog', {
this.contact_id = contact_id;
}
},
clearMessage: function() {
this.current_page = 0;
this.last_page = null;
this.messages = [];
},
sendMessage: function () {
var vm = this;
vm.token = $('#token').val();
@@ -33,6 +33,7 @@
<script type="text/x-template" id="contact_list">
<div>
<a v-on:click="getNewContact">###</a>
<p v-if="errorMessage">@{{ errorMessage }}</p>
<ul>
<li v-for="(contact, index) in contacts" v-on:click="loadDialog(contact.contact_id, index)">