index.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索 -->
  4. <el-form inline label-width="100px" size="mini">
  5. <el-form-item label="消息类型:">
  6. <el-select v-model="form.messageType" placeholder="请选择消息类型" clearable>
  7. <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item label="推送状态:">
  11. <el-select v-model="form.status" placeholder="请选择推送状态" clearable>
  12. <el-option v-for="item in statusOptions" :key="item.value" :label="item.label"
  13. :value="item.value" />
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="推送平台:">
  17. <el-select v-model="form.systemType" placeholder="请选择推送平台" clearable>
  18. <el-option v-for="item in systemOptions" :key="item.value" :label="item.label"
  19. :value="item.value" />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="推送内容:">
  23. <el-input v-model="form.content" placeholder="请输入推送内容" clearable />
  24. </el-form-item>
  25. <el-form-item>
  26. <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
  27. <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
  28. <el-button type="primary" icon="el-icon-plus" plain @click="getDialog()">新增</el-button>
  29. </el-form-item>
  30. </el-form>
  31. <!-- 列表 -->
  32. <el-table :data="tableData">
  33. <el-table-column label="消息类型" prop="messageType" align="center" :formatter="typeFormatter" />
  34. <el-table-column label="推送标题" prop="title" align="center" />
  35. <el-table-column label="推送内容" prop="content" align="center" />
  36. <el-table-column label="推送日期" prop="pushTime" align="center" />
  37. <el-table-column label="推送状态" prop="status" align="center" :formatter="statusFormatter" />
  38. <el-table-column label="推送平台" prop="systemType" align="center" :formatter="systemFormatter" />
  39. <el-table-column label="操作" align="center">
  40. <template slot-scope="scope">
  41. <el-button type="text" @click="getDialog(scope.row.id)">详情</el-button>
  42. </template>
  43. </el-table-column>
  44. </el-table>
  45. <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
  46. @pagination="getList" />
  47. <!-- 弹窗 -->
  48. <el-dialog :visible.sync="dialogVisible" title="新增推送" width="500px" :before-close="cancel">
  49. <el-form label-width="100px">
  50. <el-form-item label="推送类型:">
  51. <el-select v-model="dialogForm.messageType" placeholder="请选择推送类型">
  52. <el-option v-for="item in typeOptions" :key="item.value" :label="item.label"
  53. :value="item.value" />
  54. </el-select>
  55. </el-form-item>
  56. <el-form-item label="推送标题:">
  57. <el-input v-model="dialogForm.title" placeholder="请输入推送标题" />
  58. </el-form-item>
  59. <el-form-item label="推送内容:">
  60. <el-input v-model="dialogForm.content" type="textarea" rows="4" placeholder="请输入推送内容" />
  61. </el-form-item>
  62. <el-form-item v-if="dialogForm.id" label="打开方式:">
  63. <el-select v-model="dialogForm.jumpType" placeholder="请选择打开方式">
  64. <el-option v-for="item in jumpOptions" :key="item.value" :label="item.label"
  65. :value="item.value" />
  66. </el-select>
  67. </el-form-item>
  68. <el-form-item v-if="dialogForm.id" label="参数:">
  69. <el-input v-model="dialogForm.jumpContent" placeholder="请输入URL或App参数" />
  70. </el-form-item>
  71. <el-form-item label="推送日期:">
  72. <el-date-picker v-model="dialogForm.pushTime" type="datetime" placeholder="选择推送日期"
  73. value-format="yyyy-MM-dd HH:mm:ss" />
  74. </el-form-item>
  75. <el-form-item label="推送平台:">
  76. <el-select v-model="dialogForm.systemType" placeholder="请选择推送平台">
  77. <el-option v-for="item in systemOptions" :key="item.value" :label="item.label"
  78. :value="item.value" />
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item v-if="dialogForm.id">
  82. <el-button type="danger" @click="dialogForm.status = 4, getSubmit()">强制过期</el-button>
  83. </el-form-item>
  84. </el-form>
  85. <div slot="footer">
  86. <el-button @click="cancel">取消</el-button>
  87. <el-button type="primary" @click="getSubmit">确定</el-button>
  88. </div>
  89. </el-dialog>
  90. </div>
  91. </template>
  92. <script>
  93. import { list, create, detail, edit } from '@/api/push/message'
  94. export default {
  95. data() {
  96. return {
  97. form: {
  98. pageNum: 1,
  99. pageSize: 10
  100. },
  101. // 列表
  102. tableData: [],
  103. total: 0,
  104. // 弹窗
  105. dialogVisible: false,
  106. // 推送类型
  107. typeOptions: [{
  108. value: 1,
  109. label: '通知/活动'
  110. }, {
  111. value: 2,
  112. label: '通知/内容'
  113. }, {
  114. value: 3,
  115. label: '通知/系统'
  116. }, {
  117. value: 4,
  118. label: 'push'
  119. }],
  120. // 推送平台
  121. systemOptions: [{
  122. value: 1,
  123. label: '全部'
  124. }, {
  125. value: 2,
  126. label: 'Android'
  127. }, {
  128. value: 3,
  129. label: 'iOS'
  130. }],
  131. // 打开方式
  132. jumpOptions: [{
  133. value: 1,
  134. label: '指定页面'
  135. }, {
  136. value: 2,
  137. label: 'URL'
  138. }],
  139. // 推送状态
  140. statusOptions: [{
  141. value: 1,
  142. label: '未开始'
  143. }, {
  144. value: 2,
  145. label: '已推送'
  146. }, {
  147. value: 4,
  148. label: '已过期'
  149. }],
  150. // 表单
  151. title: '',
  152. dialogForm: {}
  153. }
  154. },
  155. mounted() {
  156. this.getList()
  157. },
  158. methods: {
  159. // 列表
  160. getList() {
  161. list(this.form).then(res => {
  162. if (res.code === 0) {
  163. this.tableData = res.data.records
  164. this.total = res.data.total
  165. }
  166. })
  167. },
  168. // 搜索
  169. getSearch() {
  170. this.form.pageNum = 1
  171. this.getList()
  172. },
  173. // 重置
  174. getRefresh() {
  175. this.form = {
  176. pageNum: 1,
  177. pageSize: 10
  178. }
  179. this.getList()
  180. },
  181. // 详情
  182. getDialog(id) {
  183. this.dialogVisible = true
  184. if (id) {
  185. detail(id).then(res => {
  186. if (res.code === 0) {
  187. this.dialogForm = res.data
  188. }
  189. })
  190. }
  191. },
  192. // 推送
  193. getSubmit() {
  194. if (this.dialogForm.id) {
  195. edit(this.dialogForm).then(res => {
  196. if (res.code === 0) {
  197. this.$message.success('新增成功!')
  198. this.dialogVisible = false
  199. this.getList()
  200. }
  201. })
  202. } else {
  203. create(this.dialogForm).then(res => {
  204. if (res.code === 0) {
  205. this.$message.success('新增成功!')
  206. this.dialogVisible = false
  207. this.getList()
  208. }
  209. })
  210. }
  211. },
  212. // 取消
  213. cancel() {
  214. this.dialogVisible = false
  215. this.dialogForm = {}
  216. },
  217. // 字典翻译
  218. statusFormatter(row) {
  219. return this.selectDictLabel(this.statusOptions, row.status)
  220. },
  221. systemFormatter(row) {
  222. return this.selectDictLabel(this.systemOptions, row.systemType)
  223. },
  224. typeFormatter(row) {
  225. return this.selectDictLabel(this.typeOptions, row.messageType)
  226. }
  227. }
  228. }
  229. </script>
  230. <style lang="scss" scoped>
  231. </style>