edit.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <div class="app-container">
  3. <div class="form">
  4. <el-form ref="formRef" :model="formData" :rules="formRules" label-width="70px">
  5. <el-form-item label="标题:" prop="imageTitle">
  6. <el-input v-model="formData.imageTitle" placeholder="图片列表标题" maxlength="50" show-word-limit />
  7. </el-form-item>
  8. <el-form-item label="图片:" prop="imageList">
  9. <upload-image
  10. :image-list="imageList"
  11. :limit="8"
  12. :before-upload="beforeUpload"
  13. @success="handleUploadSuccess"
  14. @remove="handleRemove"
  15. />
  16. <el-input v-show="false" v-model="formData.imageList" />
  17. </el-form-item>
  18. </el-form>
  19. <div class="submit-btn">
  20. <el-button type="primary" @click="submit">保存</el-button>
  21. <el-button type="warning" @click="$_back()">返回</el-button>
  22. </div>
  23. </div>
  24. </div>
  25. </template>
  26. <script>
  27. import UploadImage from '@/components/UploadImage'
  28. import { mapGetters } from 'vuex'
  29. import { getImageDetail, saveImage } from '@/api/doc'
  30. export default {
  31. components: { UploadImage },
  32. data() {
  33. return {
  34. editType: 'add',
  35. imageId: '', // 图片列表id
  36. imageList: [], // 回显图片列表
  37. formData: {
  38. imageTitle: '', // 图片标题
  39. imageList: '' // 是否上传图片的标识 不为空则代表上传过图片
  40. },
  41. formRules: {
  42. imageTitle: [
  43. { required: true, message: '标题不能为空', trigger: 'blur' },
  44. { max: 50, message: '标题不能超过50个字符', trigger: 'blur' }
  45. ],
  46. imageList: [{ required: true, message: '图片列表不能为空', trigger: 'change' }]
  47. }
  48. }
  49. },
  50. computed: {
  51. ...mapGetters(['authUserId'])
  52. },
  53. created() {
  54. this.imageId = this.$route.query.imageId || ''
  55. this.editType = this.$route.query.type || 'add'
  56. this.initFormData()
  57. },
  58. methods: {
  59. submit() {
  60. // 请求参数
  61. const params = {
  62. imageId: this.imageId,
  63. authUserId: this.authUserId,
  64. imageTitle: this.formData.imageTitle
  65. }
  66. params.imageArr = this.imageList.map(image => image.response ? image.response.data : image.url)
  67. // 校验表单数据
  68. this.$refs.formRef.validate(valid => {
  69. if (!valid) return
  70. this.isLoading = true
  71. // 保存
  72. saveImage(params)
  73. .then(res => {
  74. console.log(res)
  75. if (res.code !== 0) return
  76. this.$message.success(res.data)
  77. // 如果保存文章成功就要关闭当前页面
  78. this.$store.dispatch('tagsView/delView', this.$route)
  79. this.$router.back()
  80. })
  81. .finally(() => {
  82. this.isLoading = false
  83. })
  84. })
  85. },
  86. // 初始化表单数据
  87. initFormData() {
  88. if (this.editType !== 'edit') return
  89. getImageDetail({ imageId: this.imageId }).then(res => {
  90. const { imageTitle, imageList } = res.data
  91. this.formData.imageTitle = imageTitle
  92. this.imageList = imageList.map(image => ({ url: image, name: '' }))
  93. })
  94. },
  95. // 文件上传
  96. handleUploadSuccess({ response, file, fileList }) {
  97. this.formData.imageList = fileList.length
  98. this.imageList = fileList
  99. },
  100. handleRemove({ response, file, fileList }) {
  101. this.formData.imageList = fileList.length > 0 ? fileList.length : ''
  102. this.imageList = fileList
  103. },
  104. beforeUpload(file, fileList) {
  105. const flag = file.size <= 5 * 1024 * 1204
  106. if (!flag) {
  107. this.$message.warning('文件大小不能超过5MB,请重新选择!')
  108. }
  109. return flag
  110. }
  111. }
  112. }
  113. </script>
  114. <style lang="scss" scoped>
  115. .form {
  116. width: 700px;
  117. margin: 30px auto;
  118. .submit-btn {
  119. text-align: left;
  120. padding-left: 70px;
  121. .el-button {
  122. width: 140px;
  123. }
  124. }
  125. }
  126. .hiddenInput {
  127. height: 0;
  128. display: none;
  129. }
  130. </style>