Add send message frontend.

1. Add send message frontend
2. Split getMessage into getHistoryMessage and getNewMessage
This commit is contained in:
Harry Zhou
2017-06-10 06:51:29 +08:00
parent 61d8e4bba4
commit 0ea4fffb46
8 changed files with 88 additions and 24 deletions
+23 -3
View File
@@ -26,14 +26,35 @@ class MessageController extends Controller
return View::make('message.message');
}
public function getMessage(Request $request)
public function getHistoryMessage(Request $request)
{
$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]);
$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')
->paginate(20);
return json_encode($messages);
}
public function getNewMessage(Request $request)
{
$user_id = $request->session()->get('user_id');
$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]);
return json_encode($messages);
}
@@ -71,7 +92,6 @@ class MessageController extends Controller
//Create Message
$message = new Message;
$user_id = $request->session()->get('user_id');
$message->title = $input['title'];
$message->content = $input['content'];
$message->sender_id = $user_id;
$message->receiver_id = $input['receiver'];
@@ -91,7 +111,7 @@ class MessageController extends Controller
]);
$contact->last_contact_time = time();
$contact->save();
return json_encode(['result' => true, 'msg' => 'success']);
return json_encode(['result' => true, 'msg' => $message]);
}
public function sendMessagepage(Request $request)
@@ -109,7 +109,6 @@ class TransactionController extends Controller
$message->sender_id = 0;
$message->receiver_id = $good->user_id;
$message->content = '您好!' . $buyer->not_null_nickname . '购买了你的' . $good->good_name . ',请及时前往确认。';
$message->title = '您有一个新的交♂易订单';
$message->save();
return json_encode(['result' => true, 'msg' => 'success']);
}
@@ -134,7 +133,6 @@ class TransactionController extends Controller
$good = $trans->good;
$message->receiver_id = $good->user_id;
$message->content = '您好!您的' . $good->good_name . '的一个订单被买家取消,你可以前往查看。';
$message->title = '您有一个订单被取消';
$message->save();
return json_encode(['result' => true, 'character' => 'buyer', 'msg' => 'success']);
break;
@@ -155,7 +153,6 @@ class TransactionController extends Controller
$good = $trans->good;
$message->receiver_id = $trans->buyer_id;
$message->content = '您好!您购买的' . $good->good_name . '的一个订单被卖家驳回,你可以前往查看。';
$message->title = '您有一个订单被驳回';
$message->save();
return json_encode(['result' => true, 'character' => 'seller', 'msg' => 'success']);
break;
@@ -187,7 +184,6 @@ class TransactionController extends Controller
$message->sender_id = 0;
$message->receiver_id = $trans->buyer_id;
$message->content = '您好!你订购的' . $good->good_name . '已被卖家确认,你们现在可以去看对方的联系方式并且交♂易啦。';
$message->title = '您有一个交♂易订单被确认';
$message->save();
return json_encode(['result' => true, 'msg' => 'success']);
}
@@ -245,7 +241,6 @@ class TransactionController extends Controller
$message->content = '您好!你订购的' . $good->good_name . '的订单已被卖家标记为交易成功,你现在可以去评价此单交易啦。';
else
$message->content = '您好!你订购的' . $good->good_name . '的订单已被卖家标记为交易失败。';
$message->title = '您有一个交♂易订单被完成';
$message->save();
return json_encode(['result' => true, 'msg' => 'success']);
}
-3
View File
@@ -24,7 +24,6 @@ class SendMessageRequest extends FormRequest
public function rules()
{
return [
'title'=>'required|max:128',
'content'=>'max:65535',
'receiver'=>'required|integer',
];
@@ -32,8 +31,6 @@ class SendMessageRequest extends FormRequest
public function messages() {
return [
'title.required' => '标题不能为空!',
'title.max' => '标题长度不能超过128个字符!',
'content.max' => '内容长度不能超过65535个字符',
'receiver.required' => '收件人不可为空',
'receiver.integer' => '收件人格式不正确!'
+2 -1
View File
@@ -66,7 +66,8 @@ Route::group(['middleware' => ['web']],function () {
Route::delete('/user/fav/del', "UserController@delFavlist");
Route::get('/message/contacts', "MessageController@getMessageContact");
Route::get('/message/getMessage', "MessageController@getMessage");
Route::get('/message/getHistoryMessage', "MessageController@getHistoryMessage");
Route::get('/message/getNewMessage', "MessageController@getNewMessage");
});
Route::get('/user/sell', "UserController@mygoods")->middleware('auth');
@@ -14,7 +14,6 @@ class CreateMessageTable extends Migration
{
Schema::create('message', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->integer('sender_id');
$table->integer('receiver_id');
$table->text('content')->nullable();
+7 -2
View File
@@ -11,13 +11,18 @@ class MessageSeeder extends Seeder
*/
public function run()
{
$faker = Faker\Factory::create();
for ($i = 0; $i < 50; $i++)
DB::table('message')->insert([
'title' => str_random(8),
'sender_id' => 1,
'receiver_id' => 1,
'content' => str_random(256),
'content' => $faker->text,
'is_read' => rand(0, 1)
]);
DB::table('message_contacts')->insert([
'user_id' => 1,
'contact_id' => 1,
'last_contact_time' => $faker->unixTime
]);
}
}
+48 -6
View File
@@ -21,11 +21,17 @@ Vue.component('contact-list', {
mounted: function () {
this.$nextTick(function () {
this.$on('getContactEvent', function () {
this.clearContact();
this.getContact();
})
})
},
methods: {
clearContact: function () {
this.current_page = 0;
this.last_page = null;
this.contacts = [];
},
getContact: function () {
var vm = this;
axios.get('/message/contacts?page=' + (this.current_page + 1).toString())
@@ -39,8 +45,12 @@ Vue.component('contact-list', {
vm.errorMessage = error;
})
},
loadDialog: function (id) {
loadDialog: function (id, index) {
var vm = this;
this.$emit('load-dialog', id);
var c = vm.contacts[index];
c.unread_count = 0;
Vue.set(vm.contacts, index, c);
}
}
});
@@ -55,7 +65,9 @@ Vue.component('message-dialog', {
current_page: 0,
last_page: null,
contact_id: null,
isHidden: true
isHidden: true,
inputMessage: '',
token: ''
}
},
mounted: function () {
@@ -63,21 +75,28 @@ Vue.component('message-dialog', {
this.$on('loadDialogHandler', function (id) {
this.current_page = 0;
this.last_page = null;
this.getMessage(id);
this.getHistoryMessage(id);
})
})
},
computed: {
hasMore: function () {
return this.current_page < this.last_page;
},
postData: function () {
return {
content: this.inputMessage,
receiver: this.contact_id,
_token: this.token
}
}
},
methods: {
getMessage: function (contact_id) {
getHistoryMessage: function (contact_id) {
var vm = this;
if (contact_id === 0 || this.contact_id === contact_id) {
contact_id = this.contact_id;
axios.get('/message/getMessage?contact_id=' + contact_id.toString() + '&page=' + (this.current_page + 1).toString())
axios.get('/message/getHistoryMessage?contact_id=' + contact_id.toString() + '&page=' + (this.current_page + 1).toString())
.then(function (response) {
vm.current_page = response.data.current_page;
vm.last_page = response.data.last_page;
@@ -90,7 +109,7 @@ Vue.component('message-dialog', {
})
}
else {
axios.get('/message/getMessage?contact_id=' + contact_id.toString())
axios.get('/message/getHistoryMessage?contact_id=' + contact_id.toString())
.then(function (response) {
vm.current_page = response.data.current_page;
vm.last_page = response.data.last_page;
@@ -102,6 +121,29 @@ Vue.component('message-dialog', {
})
this.contact_id = contact_id;
}
},
sendMessage: function () {
var vm = this;
vm.token = $('#token').val();
axios.post('/message', this.postData)
.then(function (response) {
vm.messages.push(response.data.msg);
vm.inputMessage = '';
})
.catch(function (error) {
vm.errorMessage = error;
})
},
getNewMessage: function () {
var vm = this;
axios.get('/message/getNewMessage?contact_id=' + vm.contact_id.toString())
.then(function (response) {
for (var i in response.data)
vm.messages.push(response.data[i]);
})
.catch(function (error) {
vm.errorMessage = error;
})
}
}
});
+8 -3
View File
@@ -35,7 +35,7 @@
<div>
<p v-if="errorMessage">@{{ errorMessage }}</p>
<ul>
<li v-for="contact in contacts" v-on:click="loadDialog(contact.contact_id)">
<li v-for="(contact, index) in contacts" v-on:click="loadDialog(contact.contact_id, index)">
<img :src="'/avatar/' + contact.contact_id + '/64/64'"/>
@{{ contact.contact.nickname }}&nbsp;@{{ contact.unread_count }}
</li>
@@ -46,17 +46,22 @@
<script type="text/x-template" id="message_dialog">
<div :class="{ hide: isHidden }">
<a v-if="hasMore" v-on:click="getMessage(0)">加载更多</a>
<a v-if="hasMore" v-on:click="getHistoryMessage(0)">加载更多</a>
<p v-else>没有更多了</p>
<p v-if="errorMessage">@{{ errorMessage }}</p>
<ul>
<li v-for="message in messages">
<img :src="'/avatar/' + message.sender_id + '/64/64'"/>
@{{ message.content }}
</li>
</ul>
<p v-if="errorMessage">@{{ errorMessage }}</p>
<textarea placeholder="键入要发送的内容:" v-model="inputMessage"></textarea>
<input type="button" value="发送" v-on:click="sendMessage"/>
<input id="token" type="hidden" value="{{ csrf_token() }}"/>
<a v-on:click="getNewMessage">!!!</a>
</div>
</script>
<script src="https://unpkg.com/vue@2.3.4/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="/js/message.js"></script>