myMessage.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <section>
  3. <!--工具条-->
  4. <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  5. <el-form :inline="true" @submit.native.prevent>
  6. <el-form-item>
  7. <el-input v-model.trim="messageContent" placeholder="请输入消息内容" clearable size="small" style="width: 80vw"></el-input>
  8. </el-form-item>
  9. <el-form-item>
  10. <el-button type="primary" @click="sendMessage" size="small" :disabled="!messageContent.length">发送消息</el-button>
  11. </el-form-item>
  12. </el-form>
  13. </el-col>
  14. <!--列表-->
  15. <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="handleSelectionChange">
  16. <el-table-column type="selection" width="55" align="center"></el-table-column>
  17. <el-table-column prop="content" label="历史消息" min-width="300" align="center"></el-table-column>
  18. <el-table-column prop="createTime" label="时间" width="180" align="center"></el-table-column>
  19. <el-table-column label="操作" width="240" class-name="btns" header-align="center" fixed="right">
  20. <template slot-scope="scope">
  21. <el-button v-if="scope.row.status == 1" size="small">已发送</el-button>
  22. <el-button v-if="scope.row.status == 0" size="small" type="success" @click="resendMessage(scope.row)">发送</el-button>
  23. <el-button v-if="scope.row.status == 0" size="small" type="primary" @click="showEditDialog(scope.row)">编辑</el-button>
  24. <el-button size="small" type="danger" @click="deleteMessage(scope.row)">删除</el-button>
  25. </template>
  26. </el-table-column>
  27. </el-table>
  28. <!--工具条-->
  29. <el-col :span="24" class="toolbar">
  30. <el-button type="danger" @click="batchDelete" :disabled="selectedIds.length===0" size="small">批量删除</el-button>
  31. <el-pagination
  32. @size-change="handleSizeChange"
  33. @current-change="handleCurrentChange"
  34. :page-sizes="[10, 20, 50, 100]"
  35. :page-size="size"
  36. layout="total, sizes, prev, pager, next, jumper"
  37. :total="total"
  38. style="float:right;"
  39. ></el-pagination>
  40. </el-col>
  41. <!--编辑弹窗-->
  42. <el-dialog title="编辑消息" :visible.sync="editDialogVisible" width="50%">
  43. <el-form :model="editForm" label-width="80px">
  44. <el-form-item label="消息内容">
  45. <el-input type="textarea" v-model="editForm.content" :rows="5"></el-input>
  46. </el-form-item>
  47. </el-form>
  48. <span slot="footer" class="dialog-footer">
  49. <el-button @click="editDialogVisible = false">取 消</el-button>
  50. <el-button type="primary" @click="saveEdit">确 定</el-button>
  51. </span>
  52. </el-dialog>
  53. </section>
  54. </template>
  55. <script>
  56. export default {
  57. data() {
  58. return {
  59. // 消息内容
  60. messageContent: '',
  61. // 表格相关
  62. tableHeight: 0,
  63. listLoading: false,
  64. total: 0,
  65. page: 1,
  66. size: 20,
  67. list: [],
  68. selectedIds: [],
  69. // 编辑相关
  70. editDialogVisible: false,
  71. editForm: {
  72. id: '',
  73. content: ''
  74. },
  75. }
  76. },
  77. methods: {
  78. // 显示编辑弹窗
  79. showEditDialog(row) {
  80. this.editForm = {
  81. id: row.id,
  82. content: row.content
  83. };
  84. this.editDialogVisible = true;
  85. },
  86. // 发送/更新消息
  87. sendMessage() {
  88. if (!this.messageContent) {
  89. this.$message.warning('请输入消息内容');
  90. return;
  91. }
  92. this.listLoading = true;
  93. this.http.post('/information-manage/saveOrUpdate', {
  94. content: this.messageContent
  95. }, res => {
  96. if (res.code === 'ok') {
  97. this.$message.success('发送成功');
  98. this.messageContent = '';
  99. this.getList();
  100. } else {
  101. this.$message.error(res.msg || '发送失败');
  102. }
  103. this.listLoading = false;
  104. }, () => {
  105. this.listLoading = false;
  106. })
  107. },
  108. // 保存编辑
  109. saveEdit() {
  110. this.listLoading = true;
  111. this.http.post('/information-manage/saveOrUpdate', this.editForm, res => {
  112. if (res.code === 'ok') {
  113. this.$message.success('修改成功');
  114. this.editDialogVisible = false;
  115. this.getList();
  116. } else {
  117. this.$message.error(res.msg || '修改失败');
  118. }
  119. this.listLoading = false;
  120. }, () => {
  121. this.listLoading = false;
  122. })
  123. },
  124. // 重新发送消息
  125. resendMessage(row) {
  126. this.$confirm('确认发送该消息?', '提示', {
  127. confirmButtonText: '确定',
  128. cancelButtonText: '取消',
  129. type: 'warning'
  130. }).then(() => {
  131. this.http.post('/information-manage/sendMsgByManager', { id: row.id }, res => {
  132. if (res.code === 'ok') {
  133. this.$message.success('发送成功');
  134. this.getList()
  135. } else {
  136. this.$message.error(res.msg || '发送失败');
  137. }
  138. })
  139. })
  140. },
  141. // 获取消息列表
  142. getList() {
  143. this.listLoading = true;
  144. this.http.post('/information-manage/pageList', {
  145. page: this.page,
  146. size: this.size
  147. }, res => {
  148. this.list = res.data.records;
  149. this.total = res.data.total;
  150. this.listLoading = false;
  151. }, () => {
  152. this.listLoading = false;
  153. })
  154. },
  155. // 分页相关
  156. handleCurrentChange(val) {
  157. this.page = val;
  158. this.getList();
  159. },
  160. handleSizeChange(val) {
  161. this.page = 1;
  162. this.size = val;
  163. this.getList();
  164. },
  165. // 选择变化
  166. handleSelectionChange(val) {
  167. this.selectedIds = val.map(item => item.id);
  168. },
  169. // 删除消息
  170. deleteMessage(row) {
  171. this.$confirm('确认删除该消息?', '提示', {
  172. confirmButtonText: '确定',
  173. cancelButtonText: '取消',
  174. type: 'warning'
  175. }).then(() => {
  176. this.http.post('/information-manage/delete', { ids: row.id }, res => {
  177. if (res.code === 'ok') {
  178. this.$message.success('删除成功');
  179. this.getList();
  180. } else {
  181. this.$message.error(res.msg || '删除失败');
  182. }
  183. })
  184. })
  185. },
  186. // 批量删除
  187. batchDelete() {
  188. if (this.selectedIds.length === 0) {
  189. this.$message.warning('请选择要删除的消息');
  190. return;
  191. }
  192. this.$confirm(`确认删除选中的${this.selectedIds.length}条消息?`, '提示', {
  193. confirmButtonText: '确定',
  194. cancelButtonText: '取消',
  195. type: 'warning'
  196. }).then(() => {
  197. this.http.post('/information-manage/delete', { ids: this.selectedIds.join(',') }, res => {
  198. if (res.code === 'ok') {
  199. this.$message.success('批量删除成功');
  200. this.getList();
  201. this.selectedIds = [];
  202. } else {
  203. this.$message.error(res.msg || '删除失败');
  204. }
  205. })
  206. })
  207. }
  208. },
  209. created() {
  210. let height = window.innerHeight;
  211. this.tableHeight = height - 195;
  212. const that = this;
  213. window.onresize = function temp() {
  214. that.tableHeight = window.innerHeight - 195;
  215. };
  216. },
  217. mounted() {
  218. this.getList();
  219. }
  220. }
  221. </script>
  222. <style lang="scss" scoped>
  223. .toolbar {
  224. padding-bottom: 10px;
  225. }
  226. .btns .el-button {
  227. margin-left: 10px;
  228. margin-bottom: 5px;
  229. }
  230. </style>