menusForm.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <div class="app-container">
  3. <el-page-header :content="isEdit ? '编辑菜单' : '添加菜单'" @back="goBack" />
  4. <el-card class="form-container" shadow="never">
  5. <el-form ref="weChatMenuFrom" :model="menu" :rules="rules" label-width="150px">
  6. <el-form-item label="上级菜单:" prop="parentId">
  7. <el-input v-model="parentTitle" readonly />
  8. <input v-model="menu.parentId" type="hidden" />
  9. </el-form-item>
  10. <el-form-item label="菜单标题:" prop="name">
  11. <el-input v-model="menu.name" />
  12. </el-form-item>
  13. <el-form-item label="响应动作类型:" prop="type">
  14. <el-select v-model="menu.type" placeholder="请选择">
  15. <el-option value="" label="请选择" />
  16. <el-option value="view" label="跳转URL" />
  17. <el-option value="miniprogram" label="跳转小程序" />
  18. <el-option value="media_id" label="下发媒体消息(图片、音频、视频)" />
  19. <el-option value="article_id" label="下发图文消息" />
  20. <el-option value="article_view_limited" label="跳转图文消息URL" />
  21. <el-option value="click" label="点击推事件" />
  22. <el-option value="scancode_push" label="扫码推事件" />
  23. <el-option value="scancode_waitmsg" label="扫码推事件且弹出“消息接收中”提示框" />
  24. <el-option value="pic_sysphoto" label="弹出系统拍照发图" />
  25. <el-option value="pic_photo_or_album" label="弹出拍照或者相册发图" />
  26. <el-option value="pic_weixin" label="弹出微信相册发图器" />
  27. <el-option value="location_select" label="弹出地理位置选择器" />
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item v-show="menu.type == 'view'" label="网页链接:" prop="url">
  31. <el-input v-model="menu.url" />
  32. </el-form-item>
  33. <el-form-item v-show="menu.type == 'miniprogram'" label="小程序APPID:" prop="appid">
  34. <el-input v-model="menu.appid" />
  35. </el-form-item>
  36. <el-form-item v-show="menu.type == 'miniprogram'" label="小程序页面链接:" prop="pagePath">
  37. <el-input v-model="menu.pagePath" />
  38. </el-form-item>
  39. <el-form-item v-show="menu.type == 'view_limited' || menu.type == 'media_id'" label="mediaId:" prop="mediaId">
  40. <el-input v-model="menu.mediaId" />
  41. </el-form-item>
  42. <el-form-item
  43. v-show="
  44. [
  45. 'click',
  46. 'scancode_push',
  47. 'scancode_waitmsg',
  48. 'pic_sysphoto',
  49. 'pic_photo_or_album',
  50. 'pic_weixin',
  51. 'location_select'
  52. ].indexOf(menu.type) >= 0
  53. "
  54. label="KEY:"
  55. prop="key"
  56. >
  57. <el-input v-model="menu.key" />
  58. </el-form-item>
  59. <el-form-item label="排序:">
  60. <el-input v-model="menu.sort" />
  61. </el-form-item>
  62. <el-form-item>
  63. <el-button type="primary" @click="onSubmit('weChatMenuFrom')">提交</el-button>
  64. <el-button v-if="!isEdit" type="info" @click="resetForm('weChatMenuFrom')">重置</el-button>
  65. <el-button @click="goBack">返回</el-button>
  66. </el-form-item>
  67. </el-form>
  68. </el-card>
  69. </div>
  70. </template>
  71. <script>
  72. import { getMenu, updateMenu, createMenu } from '@/api/wechat/menu'
  73. const defaultMenu = {
  74. id: '',
  75. name: '',
  76. type: '',
  77. url: '',
  78. key: '',
  79. mediaId: '',
  80. appid: '',
  81. pagePath: '',
  82. sort: 0,
  83. parentId: 0
  84. }
  85. export default {
  86. name: 'WeChatMenuForm',
  87. data() {
  88. return {
  89. rules: {
  90. name: [{ required: true, message: '菜单标题不能为空', trigger: 'blur' }]
  91. },
  92. parentTitle: '',
  93. menu: Object.assign({}, defaultMenu),
  94. isEdit: false
  95. }
  96. },
  97. watch: {
  98. $route(route) {
  99. this.getFormData()
  100. }
  101. },
  102. created() {
  103. this.getFormData()
  104. },
  105. methods: {
  106. goBack() {
  107. // 调用全局挂载的方法,关闭当前标签页
  108. this.$store.dispatch('tagsView/delView', this.$route)
  109. // 返回上一步路由,返回上一个标签页
  110. this.$router.go(-1)
  111. },
  112. getFormData() {
  113. if (this.$route.query.id) {
  114. this.menu.id = this.$route.query.id
  115. this.isEdit = true
  116. getMenu(this.menu.id).then((response) => {
  117. this.menu.name = response.data.name
  118. this.menu.type = response.data.type
  119. this.menu.url = response.data.url
  120. this.menu.key = response.data.key
  121. this.menu.mediaId = response.data.mediaId
  122. this.menu.appid = response.data.appid
  123. this.menu.pagePath = response.data.pagePath
  124. this.menu.sort = response.data.sort
  125. this.menu.parentId = response.data.parentId
  126. })
  127. } else {
  128. this.menu.id = ''
  129. this.isEdit = false
  130. this.menu = Object.assign({}, defaultMenu)
  131. }
  132. if (this.$route.query.parentId) {
  133. this.menu.parentId = this.$route.query.parentId
  134. this.parentTitle = this.$route.query.title
  135. } else {
  136. this.menu.parentId = 0
  137. this.parentTitle = '无'
  138. }
  139. },
  140. resetForm(formName) {
  141. this.$refs[formName].resetFields()
  142. this.menu = Object.assign({}, defaultMenu)
  143. this.getFormData()
  144. },
  145. onSubmit(formName) {
  146. this.$refs[formName].validate((valid) => {
  147. console.log(this.menu)
  148. if (valid) {
  149. this.$confirm('是否提交数据', '提示', {
  150. confirmButtonText: '确定',
  151. cancelButtonText: '取消',
  152. type: 'warning'
  153. }).then(() => {
  154. const self = this
  155. if (this.isEdit) {
  156. updateMenu(this.$route.query.id, this.menu).then((response) => {
  157. this.$message({
  158. message: '修改成功',
  159. type: 'success',
  160. duration: 1000
  161. })
  162. self.goBack()
  163. })
  164. } else {
  165. createMenu(this.menu).then((response) => {
  166. this.$refs[formName].resetFields()
  167. this.resetForm(formName)
  168. this.$message({
  169. message: '提交成功',
  170. type: 'success',
  171. duration: 1000
  172. })
  173. self.goBack()
  174. })
  175. }
  176. })
  177. } else {
  178. this.$message({
  179. message: '验证失败',
  180. type: 'error',
  181. duration: 1000
  182. })
  183. return false
  184. }
  185. })
  186. }
  187. }
  188. }
  189. </script>
  190. <style scoped></style>