form.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <template>
  2. <div class="app-container">
  3. <el-page-header :content="isEdit?'修改用户':'添加用户'" />
  4. <el-card class="form-container" shadow="never">
  5. <el-form ref="menuFrom" :model="menu" :rules="rules" label-width="150px">
  6. <el-form-item label="上级菜单:" prop="parentId">
  7. <span>{{ parentTitle }}</span>
  8. <el-input v-model="menu.parentId" hidden />
  9. </el-form-item>
  10. <el-form-item label="菜单名称:" prop="title">
  11. <el-input v-model="menu.title" />
  12. </el-form-item>
  13. <el-form-item label="前端名称:" prop="name">
  14. <el-input v-model="menu.name" />
  15. </el-form-item>
  16. <el-form-item label="前端图标:" prop="icon">
  17. <el-input v-model="menu.icon" style="width: 80%" />
  18. <svg-icon style="margin-left: 8px" :icon-class="menu.icon" />
  19. </el-form-item>
  20. <el-form-item label="状态:">
  21. <el-radio-group v-model="menu.status">
  22. <el-radio :label="0">启用</el-radio>
  23. <el-radio :label="1">停用</el-radio>
  24. </el-radio-group>
  25. </el-form-item>
  26. <el-form-item label="排序:">
  27. <el-input v-model="menu.sort" />
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" @click="onSubmit('menuFrom')">提交</el-button>
  31. <el-button v-if="!isEdit" @click="resetForm('menuFrom')">重置</el-button>
  32. </el-form-item>
  33. </el-form>
  34. </el-card>
  35. </div>
  36. </template>
  37. <script>
  38. import { getMenu, updateMenu, createMenu } from '@/api/menu'
  39. const defaultMenu = {
  40. id: '',
  41. title: '',
  42. name: '',
  43. icon: '',
  44. status: 0,
  45. sort: 0,
  46. parentId: ''
  47. }
  48. export default {
  49. name: 'MenuForm',
  50. data() {
  51. return {
  52. parentTitle: '',
  53. menu: Object.assign({}, defaultMenu),
  54. isEdit: false
  55. }
  56. },
  57. watch: {
  58. $route(route) {
  59. this.resetParentId()
  60. this.getFormData()
  61. }
  62. },
  63. created() {
  64. this.resetParentId()
  65. this.getFormData()
  66. },
  67. methods: {
  68. resetParentId() {
  69. if (this.$route.query.parentId != null) {
  70. this.menu.parentId = this.$route.query.parentId
  71. this.parentTitle = this.$route.query.title
  72. } else {
  73. this.menu.parentId = ''
  74. this.parentTitle = ''
  75. }
  76. },
  77. getFormData() {
  78. if (this.$route.query.id != null) {
  79. this.menu.id = this.$route.query.id
  80. this.isEdit = true
  81. getMenu(this.menu.id).then(response => {
  82. this.menu.title = response.data.title
  83. this.menu.name = response.data.name
  84. this.menu.icon = response.data.icon
  85. this.menu.status = response.data.status
  86. this.menu.sort = response.data.sort
  87. this.menu.parentId = response.data.parentId
  88. })
  89. } else {
  90. this.menu.id = ''
  91. this.isEdit = false
  92. this.menu = Object.assign({}, defaultMenu)
  93. }
  94. },
  95. resetForm(formName) {
  96. this.$refs[formName].resetFields()
  97. this.menu = Object.assign({}, defaultMenu)
  98. this.getFormData()
  99. },
  100. onSubmit(formName) {
  101. this.$refs[formName].validate(valid => {
  102. if (valid) {
  103. this.$confirm('是否提交数据', '提示', {
  104. confirmButtonText: '确定',
  105. cancelButtonText: '取消',
  106. type: 'warning'
  107. }).then(() => {
  108. if (this.isEdit) {
  109. updateMenu(this.$route.query.id, this.menu).then(response => {
  110. this.$message({
  111. message: '修改成功',
  112. type: 'success',
  113. duration: 1000
  114. })
  115. this.$router.back()
  116. })
  117. } else {
  118. createMenu(this.menu).then(response => {
  119. this.$refs[formName].resetFields()
  120. this.resetForm(formName)
  121. this.$message({
  122. message: '提交成功',
  123. type: 'success',
  124. duration: 1000
  125. })
  126. this.$router.back()
  127. })
  128. }
  129. })
  130. } else {
  131. this.$message({
  132. message: '验证失败',
  133. type: 'error',
  134. duration: 1000
  135. })
  136. return false
  137. }
  138. })
  139. }
  140. }
  141. }
  142. </script>
  143. <style scoped>
  144. </style>