diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php
index 52d0f00f4..9582325d2 100755
--- a/app/Http/Controllers/Api/DialogController.php
+++ b/app/Http/Controllers/Api/DialogController.php
@@ -568,36 +568,6 @@ class DialogController extends AbstractController
return Base::retSuccess("success");
}
- /**
- * @api {get} api/dialog/top 14. 会话置顶
- *
- * @apiDescription 需要token身份
- * @apiVersion 1.0.0
- * @apiGroup dialog
- * @apiName top
- *
- * @apiParam {Number} dialog_id 会话ID
- *
- * @apiSuccess {Number} ret 返回状态码(1正确、0错误)
- * @apiSuccess {String} msg 返回信息(错误描述)
- * @apiSuccess {Object} data 返回数据
- */
- public function top()
- {
- $user = User::auth();
- $dialogId = intval(Request::input('dialog_id'));
- $dialogUser = WebSocketDialogUser::whereUserid($user->userid)->whereDialogId($dialogId)->first();
- if (!$dialogUser) {
- return Base::retError("会话不存在");
- }
- $dialogUser->top_at = $dialogUser->top_at ? null : Carbon::now();
- $dialogUser->save();
- return Base::retSuccess("success", [
- 'id' => $dialogUser->dialog_id,
- 'top_at' => $dialogUser->top_at?->toDateTimeString(),
- ]);
- }
-
/**
* @api {get} api/dialog/msg/mark 15. 消息标记操作
*
@@ -679,6 +649,69 @@ class DialogController extends AbstractController
return $msg->forwardMsg($userids, $user->userid);
}
+ /**
+ * @api {get} api/dialog/msg/emoji 13. emoji回复
+ *
+ * @apiDescription 需要token身份
+ * @apiVersion 1.0.0
+ * @apiGroup dialog
+ * @apiName msg__forward
+ *
+ * @apiParam {Number} msg_id 消息ID
+ * @apiParam {String} emoji 回复或取消的emoji表情
+ *
+ * @apiSuccess {Number} ret 返回状态码(1正确、0错误)
+ * @apiSuccess {String} msg 返回信息(错误描述)
+ * @apiSuccess {Object} data 返回数据
+ */
+ public function msg__emoji()
+ {
+ $user = User::auth();
+ //
+ $msg_id = intval(Request::input("msg_id"));
+ $emoji = Request::input("emoji");
+ //
+ if (!preg_match("/^[\u{d800}-\u{dbff}]|[\u{dc00}-\u{dfff}]$/", $emoji)) {
+ return Base::retError("参数错误");
+ }
+ //
+ $msg = WebSocketDialogMsg::whereId($msg_id)->whereUserid($user->userid)->first();
+ if (empty($msg)) {
+ return Base::retError("消息不存在或已被删除");
+ }
+ return $msg->emojiMsg($emoji, $user->userid);
+ }
+
+ /**
+ * @api {get} api/dialog/top 14. 会话置顶
+ *
+ * @apiDescription 需要token身份
+ * @apiVersion 1.0.0
+ * @apiGroup dialog
+ * @apiName top
+ *
+ * @apiParam {Number} dialog_id 会话ID
+ *
+ * @apiSuccess {Number} ret 返回状态码(1正确、0错误)
+ * @apiSuccess {String} msg 返回信息(错误描述)
+ * @apiSuccess {Object} data 返回数据
+ */
+ public function top()
+ {
+ $user = User::auth();
+ $dialogId = intval(Request::input('dialog_id'));
+ $dialogUser = WebSocketDialogUser::whereUserid($user->userid)->whereDialogId($dialogId)->first();
+ if (!$dialogUser) {
+ return Base::retError("会话不存在");
+ }
+ $dialogUser->top_at = $dialogUser->top_at ? null : Carbon::now();
+ $dialogUser->save();
+ return Base::retSuccess("success", [
+ 'id' => $dialogUser->dialog_id,
+ 'top_at' => $dialogUser->top_at?->toDateTimeString(),
+ ]);
+ }
+
/**
* @api {get} api/dialog/group/add 16. 新增群组
*
diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php
index 2430aa652..45d18f0bc 100644
--- a/app/Models/WebSocketDialogMsg.php
+++ b/app/Models/WebSocketDialogMsg.php
@@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @property int|null $userid 发送会员ID
* @property string|null $type 消息类型
* @property array|mixed $msg 详细消息
+ * @property array|mixed $emoji emoji回复
* @property int|null $read 已阅数量
* @property int|null $send 发送数量
* @property \Illuminate\Support\Carbon|null $created_at
@@ -34,6 +35,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereDialogType($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereEmoji($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereMsg($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialogMsg whereRead($value)
@@ -98,6 +100,19 @@ class WebSocketDialogMsg extends AbstractModel
return $value;
}
+ /**
+ * emoji回复格式化
+ * @param $value
+ * @return array|mixed
+ */
+ public function getEmojiAttribute($value)
+ {
+ if (is_array($value)) {
+ return $value;
+ }
+ return Base::json2array($value);
+ }
+
/**
* 获取占比
* @param bool|int $increment 是否新增阅读数
@@ -161,6 +176,53 @@ class WebSocketDialogMsg extends AbstractModel
return true;
}
+ /**
+ * emoji回复
+ * @param $emoji
+ * @param int $sender 发送的会员ID
+ * @return mixed
+ */
+ public function emojiMsg($emoji, $sender)
+ {
+ $exist = false;
+ $array = $this->emoji;
+ foreach ($array as $index => &$item) {
+ if ($item['symbol'] === $emoji) {
+ if (in_array($sender, $item['userids'])) {
+ // 已存在 去除
+ $item['userids'] = array_values(array_diff($item['userids'], [$sender]));
+ if (empty($item['userids'])) {
+ unset($array[$index]);
+ $array = array_values($array);
+ }
+ } else {
+ // 未存在 添加
+ array_unshift($item['userids'], $sender);
+ }
+ $exist = true;
+ break;
+ }
+ }
+ if (!$exist) {
+ array_unshift($array, [
+ 'symbol' => $emoji,
+ 'userids' => [$sender]
+ ]);
+ }
+ //
+ $this->emoji = Base::array2json($array);
+ $this->save();
+ $resData = [
+ 'id' => $this->id,
+ 'emoji' => $array,
+ ];
+ //
+ $dialog = WebSocketDialog::find($this->dialog_id);
+ $dialog?->pushMsg('update', $resData);
+ //
+ return Base::retSuccess('sucess', $resData);
+ }
+
/**
* 转发消息
* @param $userids
diff --git a/database/migrations/2022_06_04_095019_add_web_socket_dialog_msgs_emoji.php b/database/migrations/2022_06_04_095019_add_web_socket_dialog_msgs_emoji.php
new file mode 100644
index 000000000..9164d303b
--- /dev/null
+++ b/database/migrations/2022_06_04_095019_add_web_socket_dialog_msgs_emoji.php
@@ -0,0 +1,34 @@
+longText('emoji')->after('msg')->nullable()->comment('emoji回复');
+ }
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('web_socket_dialog_msgs', function (Blueprint $table) {
+ $table->dropColumn("emoji");
+ });
+ }
+}
diff --git a/resources/assets/js/pages/manage/components/DialogView.vue b/resources/assets/js/pages/manage/components/DialogView.vue
index 5d37045e0..a1c7c6b14 100644
--- a/resources/assets/js/pages/manage/components/DialogView.vue
+++ b/resources/assets/js/pages/manage/components/DialogView.vue
@@ -5,15 +5,9 @@