BaseForm.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <a-card :bordered="false" v-show="visible" class="card" :title="modalTitle">
  3. <a-row :gutter="48" slot="extra">
  4. <a-col :md="48" :sm="48">
  5. <span class="table-page-search-submitButtons" style="float: right">
  6. <a-button :loading="confirmLoading" type="primary" @click="save()">保存</a-button>
  7. <a-button style="margin-left: 8px" type="default" @click="handleCancel()">返回</a-button>
  8. </span>
  9. </a-col>
  10. </a-row>
  11. <a-form :form="form">
  12. <a-form-item v-show="false">
  13. <a-input v-decorator="['id']" type="hidden" />
  14. </a-form-item>
  15. <row-list :col="2">
  16. <row-item>
  17. <a-form-item label="菜单名称" :labelCol="BaseTool.Constant.labelCol" :wrapperCol="BaseTool.Constant.wrapperCol">
  18. <a-input v-decorator="['name', {rules: [{required: true, message: '菜单名称不能为空'}]}]" />
  19. </a-form-item>
  20. </row-item>
  21. <row-item>
  22. <a-form-item label="路由地址" :labelCol="BaseTool.Constant.labelCol" :wrapperCol="BaseTool.Constant.wrapperCol">
  23. <a-input v-decorator="['routerUrl', {rules: [{required: true, message: '路由地址不能为空'}]}]" />
  24. </a-form-item>
  25. </row-item>
  26. <row-item>
  27. <a-form-item label="图标地址" :labelCol="BaseTool.Constant.labelCol" :wrapperCol="BaseTool.Constant.wrapperCol">
  28. <Upload v-decorator="['iconPath']" />
  29. </a-form-item>
  30. </row-item>
  31. <row-item>
  32. <a-form-item label="备注" :labelCol="BaseTool.Constant.labelCol" :wrapperCol="BaseTool.Constant.wrapperCol">
  33. <a-input v-decorator="['remark']" />
  34. </a-form-item>
  35. </row-item>
  36. </row-list>
  37. </a-form>
  38. </a-card>
  39. </template>
  40. <script>
  41. import Upload from '@/components/Upload/CUploadImg.vue'
  42. import pick from 'lodash.pick'
  43. import { addCommonMenu, updateCommonMenu } from '@/api/common/menu'
  44. export default {
  45. name: 'BaseCommonMenu',
  46. components: {
  47. Upload,
  48. },
  49. data() {
  50. return {
  51. confirmLoading: false,
  52. modalTitle: null,
  53. form: this.$form.createForm(this),
  54. visible: false,
  55. files: [],
  56. // 下拉框map
  57. }
  58. },
  59. props: {},
  60. created() {
  61. // 下拉框map
  62. },
  63. methods: {
  64. base(record) {
  65. this.visible = true
  66. // 如果是空标识添加
  67. if (this.BaseTool.Object.isBlank(record)) {
  68. this.modalTitle = '添加'
  69. return
  70. }
  71. this.modalTitle = '编辑'
  72. record.iconPath = [
  73. {
  74. uid: -1,
  75. name: 'icon',
  76. status: 'done',
  77. url: record.iconPath,
  78. },
  79. ]
  80. const {
  81. form: { setFieldsValue },
  82. } = this
  83. // 日期处理
  84. this.$nextTick(() => {
  85. setFieldsValue(Object.assign(pick(record, ['id', 'name', 'routerUrl', 'iconPath', 'remark'])))
  86. })
  87. },
  88. save() {
  89. const {
  90. form: { validateFieldsAndScroll },
  91. } = this
  92. this.confirmLoading = true
  93. validateFieldsAndScroll((errors, values) => {
  94. if (errors) {
  95. this.confirmLoading = false
  96. return
  97. }
  98. // 日期处理
  99. values.iconPath = values.iconPath[0].url
  100. if (this.BaseTool.String.isBlank(values.id)) {
  101. addCommonMenu(values)
  102. .then(() => {
  103. this.handleCancel(values)
  104. })
  105. .catch(() => {
  106. this.confirmLoading = false
  107. })
  108. } else {
  109. updateCommonMenu(values)
  110. .then(() => {
  111. this.handleCancel(values)
  112. })
  113. .catch(() => {
  114. this.confirmLoading = false
  115. })
  116. }
  117. })
  118. },
  119. handleCancel(values) {
  120. this.visible = false
  121. this.confirmLoading = false
  122. this.form.resetFields()
  123. if (this.BaseTool.Object.isNotBlank(values)) {
  124. this.$emit('ok', values)
  125. } else {
  126. this.$emit('ok')
  127. }
  128. },
  129. },
  130. }
  131. </script>