You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

368 lines
12 KiB

  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="聊天会话ID,格式:farmer_vet_时间戳" prop="chatId">
  5. <el-input
  6. v-model="queryParams.chatId"
  7. placeholder="请输入聊天会话ID,格式:farmer_vet_时间戳"
  8. clearable
  9. @keyup.enter.native="handleQuery"
  10. />
  11. </el-form-item>
  12. <el-form-item label="发送者用户ID" prop="senderId">
  13. <el-input
  14. v-model="queryParams.senderId"
  15. placeholder="请输入发送者用户ID"
  16. clearable
  17. @keyup.enter.native="handleQuery"
  18. />
  19. </el-form-item>
  20. <el-form-item label="接收者用户ID" prop="receiverId">
  21. <el-input
  22. v-model="queryParams.receiverId"
  23. placeholder="请输入接收者用户ID"
  24. clearable
  25. @keyup.enter.native="handleQuery"
  26. />
  27. </el-form-item>
  28. <el-form-item label="是否已读" prop="isRead">
  29. <el-input
  30. v-model="queryParams.isRead"
  31. placeholder="请输入是否已读"
  32. clearable
  33. @keyup.enter.native="handleQuery"
  34. />
  35. </el-form-item>
  36. <el-form-item label="阅读时间" prop="readTime">
  37. <el-date-picker clearable
  38. v-model="queryParams.readTime"
  39. type="date"
  40. value-format="yyyy-MM-dd"
  41. placeholder="请选择阅读时间">
  42. </el-date-picker>
  43. </el-form-item>
  44. <el-form-item label="是否含敏感词" prop="isSensitive">
  45. <el-input
  46. v-model="queryParams.isSensitive"
  47. placeholder="请输入是否含敏感词"
  48. clearable
  49. @keyup.enter.native="handleQuery"
  50. />
  51. </el-form-item>
  52. <el-form-item label="发送时间" prop="createdAt">
  53. <el-date-picker clearable
  54. v-model="queryParams.createdAt"
  55. type="date"
  56. value-format="yyyy-MM-dd"
  57. placeholder="请选择发送时间">
  58. </el-date-picker>
  59. </el-form-item>
  60. <el-form-item>
  61. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  62. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  63. </el-form-item>
  64. </el-form>
  65. <el-row :gutter="10" class="mb8">
  66. <el-col :span="1.5">
  67. <el-button
  68. type="primary"
  69. plain
  70. icon="el-icon-plus"
  71. size="mini"
  72. @click="handleAdd"
  73. v-hasPermi="['system:messages:add']"
  74. >新增</el-button>
  75. </el-col>
  76. <el-col :span="1.5">
  77. <el-button
  78. type="success"
  79. plain
  80. icon="el-icon-edit"
  81. size="mini"
  82. :disabled="single"
  83. @click="handleUpdate"
  84. v-hasPermi="['system:messages:edit']"
  85. >修改</el-button>
  86. </el-col>
  87. <el-col :span="1.5">
  88. <el-button
  89. type="danger"
  90. plain
  91. icon="el-icon-delete"
  92. size="mini"
  93. :disabled="multiple"
  94. @click="handleDelete"
  95. v-hasPermi="['system:messages:remove']"
  96. >删除</el-button>
  97. </el-col>
  98. <el-col :span="1.5">
  99. <el-button
  100. type="warning"
  101. plain
  102. icon="el-icon-download"
  103. size="mini"
  104. @click="handleExport"
  105. v-hasPermi="['system:messages:export']"
  106. >导出</el-button>
  107. </el-col>
  108. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  109. </el-row>
  110. <el-table v-loading="loading" :data="messagesList" @selection-change="handleSelectionChange">
  111. <el-table-column type="selection" width="55" align="center" />
  112. <el-table-column label="消息ID" align="center" prop="messageId" />
  113. <el-table-column label="聊天会话ID,格式:farmer_vet_时间戳" align="center" prop="chatId" />
  114. <el-table-column label="发送者用户ID" align="center" prop="senderId" />
  115. <el-table-column label="接收者用户ID" align="center" prop="receiverId" />
  116. <el-table-column label="消息内容" align="center" prop="content" />
  117. <el-table-column label="是否已读" align="center" prop="isRead" />
  118. <el-table-column label="阅读时间" align="center" prop="readTime" width="180">
  119. <template slot-scope="scope">
  120. <span>{{ parseTime(scope.row.readTime, '{y}-{m}-{d}') }}</span>
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="是否含敏感词" align="center" prop="isSensitive" />
  124. <el-table-column label="敏感词列表,逗号分隔" align="center" prop="sensitiveWords" />
  125. <el-table-column label="发送时间" align="center" prop="createdAt" width="180">
  126. <template slot-scope="scope">
  127. <span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
  128. </template>
  129. </el-table-column>
  130. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  131. <template slot-scope="scope">
  132. <el-button
  133. size="mini"
  134. type="text"
  135. icon="el-icon-edit"
  136. @click="handleUpdate(scope.row)"
  137. v-hasPermi="['system:messages:edit']"
  138. >修改</el-button>
  139. <el-button
  140. size="mini"
  141. type="text"
  142. icon="el-icon-delete"
  143. @click="handleDelete(scope.row)"
  144. v-hasPermi="['system:messages:remove']"
  145. >删除</el-button>
  146. </template>
  147. </el-table-column>
  148. </el-table>
  149. <pagination
  150. v-show="total>0"
  151. :total="total"
  152. :page.sync="queryParams.pageNum"
  153. :limit.sync="queryParams.pageSize"
  154. @pagination="getList"
  155. />
  156. <!-- 添加或修改专家一对一聊天消息对话框 -->
  157. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  158. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  159. <el-form-item label="聊天会话ID,格式:farmer_vet_时间戳" prop="chatId">
  160. <el-input v-model="form.chatId" placeholder="请输入聊天会话ID,格式:farmer_vet_时间戳" />
  161. </el-form-item>
  162. <el-form-item label="发送者用户ID" prop="senderId">
  163. <el-input v-model="form.senderId" placeholder="请输入发送者用户ID" />
  164. </el-form-item>
  165. <el-form-item label="接收者用户ID" prop="receiverId">
  166. <el-input v-model="form.receiverId" placeholder="请输入接收者用户ID" />
  167. </el-form-item>
  168. <el-form-item label="消息内容">
  169. <editor v-model="form.content" :min-height="192"/>
  170. </el-form-item>
  171. <el-form-item label="是否已读" prop="isRead">
  172. <el-input v-model="form.isRead" placeholder="请输入是否已读" />
  173. </el-form-item>
  174. <el-form-item label="阅读时间" prop="readTime">
  175. <el-date-picker clearable
  176. v-model="form.readTime"
  177. type="date"
  178. value-format="yyyy-MM-dd"
  179. placeholder="请选择阅读时间">
  180. </el-date-picker>
  181. </el-form-item>
  182. <el-form-item label="是否含敏感词" prop="isSensitive">
  183. <el-input v-model="form.isSensitive" placeholder="请输入是否含敏感词" />
  184. </el-form-item>
  185. <el-form-item label="敏感词列表,逗号分隔" prop="sensitiveWords">
  186. <el-input v-model="form.sensitiveWords" type="textarea" placeholder="请输入内容" />
  187. </el-form-item>
  188. <el-form-item label="发送时间" prop="createdAt">
  189. <el-date-picker clearable
  190. v-model="form.createdAt"
  191. type="date"
  192. value-format="yyyy-MM-dd"
  193. placeholder="请选择发送时间">
  194. </el-date-picker>
  195. </el-form-item>
  196. </el-form>
  197. <div slot="footer" class="dialog-footer">
  198. <el-button type="primary" @click="submitForm"> </el-button>
  199. <el-button @click="cancel"> </el-button>
  200. </div>
  201. </el-dialog>
  202. </div>
  203. </template>
  204. <script>
  205. import { listMessages, getMessages, delMessages, addMessages, updateMessages } from "@/api/system/messages"
  206. export default {
  207. name: "Messages",
  208. data() {
  209. return {
  210. // 遮罩层
  211. loading: true,
  212. // 选中数组
  213. ids: [],
  214. // 非单个禁用
  215. single: true,
  216. // 非多个禁用
  217. multiple: true,
  218. // 显示搜索条件
  219. showSearch: true,
  220. // 总条数
  221. total: 0,
  222. // 专家一对一聊天消息表格数据
  223. messagesList: [],
  224. // 弹出层标题
  225. title: "",
  226. // 是否显示弹出层
  227. open: false,
  228. // 查询参数
  229. queryParams: {
  230. pageNum: 1,
  231. pageSize: 10,
  232. chatId: null,
  233. senderId: null,
  234. receiverId: null,
  235. content: null,
  236. isRead: null,
  237. readTime: null,
  238. isSensitive: null,
  239. sensitiveWords: null,
  240. createdAt: null
  241. },
  242. // 表单参数
  243. form: {},
  244. // 表单校验
  245. rules: {
  246. chatId: [
  247. { required: true, message: "聊天会话ID,格式:farmer_vet_时间戳不能为空", trigger: "blur" }
  248. ],
  249. senderId: [
  250. { required: true, message: "发送者用户ID不能为空", trigger: "blur" }
  251. ],
  252. receiverId: [
  253. { required: true, message: "接收者用户ID不能为空", trigger: "blur" }
  254. ],
  255. }
  256. }
  257. },
  258. created() {
  259. this.getList()
  260. },
  261. methods: {
  262. /** 查询专家一对一聊天消息列表 */
  263. getList() {
  264. this.loading = true
  265. listMessages(this.queryParams).then(response => {
  266. this.messagesList = response.rows
  267. this.total = response.total
  268. this.loading = false
  269. })
  270. },
  271. // 取消按钮
  272. cancel() {
  273. this.open = false
  274. this.reset()
  275. },
  276. // 表单重置
  277. reset() {
  278. this.form = {
  279. messageId: null,
  280. chatId: null,
  281. senderId: null,
  282. receiverId: null,
  283. content: null,
  284. isRead: null,
  285. readTime: null,
  286. isSensitive: null,
  287. sensitiveWords: null,
  288. createdAt: null
  289. }
  290. this.resetForm("form")
  291. },
  292. /** 搜索按钮操作 */
  293. handleQuery() {
  294. this.queryParams.pageNum = 1
  295. this.getList()
  296. },
  297. /** 重置按钮操作 */
  298. resetQuery() {
  299. this.resetForm("queryForm")
  300. this.handleQuery()
  301. },
  302. // 多选框选中数据
  303. handleSelectionChange(selection) {
  304. this.ids = selection.map(item => item.messageId)
  305. this.single = selection.length!==1
  306. this.multiple = !selection.length
  307. },
  308. /** 新增按钮操作 */
  309. handleAdd() {
  310. this.reset()
  311. this.open = true
  312. this.title = "添加专家一对一聊天消息"
  313. },
  314. /** 修改按钮操作 */
  315. handleUpdate(row) {
  316. this.reset()
  317. const messageId = row.messageId || this.ids
  318. getMessages(messageId).then(response => {
  319. this.form = response.data
  320. this.open = true
  321. this.title = "修改专家一对一聊天消息"
  322. })
  323. },
  324. /** 提交按钮 */
  325. submitForm() {
  326. this.$refs["form"].validate(valid => {
  327. if (valid) {
  328. if (this.form.messageId != null) {
  329. updateMessages(this.form).then(response => {
  330. this.$modal.msgSuccess("修改成功")
  331. this.open = false
  332. this.getList()
  333. })
  334. } else {
  335. addMessages(this.form).then(response => {
  336. this.$modal.msgSuccess("新增成功")
  337. this.open = false
  338. this.getList()
  339. })
  340. }
  341. }
  342. })
  343. },
  344. /** 删除按钮操作 */
  345. handleDelete(row) {
  346. const messageIds = row.messageId || this.ids
  347. this.$modal.confirm('是否确认删除专家一对一聊天消息编号为"' + messageIds + '"的数据项?').then(function() {
  348. return delMessages(messageIds)
  349. }).then(() => {
  350. this.getList()
  351. this.$modal.msgSuccess("删除成功")
  352. }).catch(() => {})
  353. },
  354. /** 导出按钮操作 */
  355. handleExport() {
  356. this.download('system/messages/export', {
  357. ...this.queryParams
  358. }, `messages_${new Date().getTime()}.xlsx`)
  359. }
  360. }
  361. }
  362. </script>