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:
@@ -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
@@ -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');
|
||||
|
||||
@@ -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
@@ -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)">
|
||||
|
||||
Reference in New Issue
Block a user