index.vue 8.9 KB

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