category-edit.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <template>
  2. <div class="app-container">
  3. <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal">
  4. <el-menu-item index="1" @click="backToList">商品分类</el-menu-item>
  5. <el-menu-item index="2">编辑分类</el-menu-item>
  6. </el-menu>
  7. <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="120px" style="width:400px; margin:30px 0 0 50px;">
  8. <el-form-item label="分类名称" prop="classifyName">
  9. <el-input v-model="temp.classifyName" />
  10. </el-form-item>
  11. <!--<el-form-item label="图标" prop="classifyImage">
  12. <el-input v-model="temp.classifyImage" />
  13. </el-form-item>-->
  14. <el-form-item label="图标:" prop="classifyImage">
  15. <div class="form-el-upload">
  16. <el-upload
  17. class="avatar-uploader"
  18. :action="action"
  19. :show-file-list="false"
  20. :on-success="handleAvatarSuccess"
  21. :before-upload="beforeAvatarUpload"
  22. >
  23. <img v-if="temp.classifyImage" :src="temp.classifyImage" class="avatar">
  24. <i v-else class="el-icon-plus avatar-uploader-icon" />
  25. <div slot="tip" class="el-upload__tip">注意:请上传jpg/png格式的图片,最大不超过5M</div>
  26. </el-upload>
  27. </div>
  28. </el-form-item>
  29. <el-form-item label="排序值" prop="sort">
  30. <el-input v-model="temp.sort" type="number" />
  31. </el-form-item>
  32. <el-form-item label="邮费是否到付" prop="postageToPay">
  33. <el-select v-model="temp.postageToPay" class="filter-item" placeholder="请选择" value="">
  34. <el-option label="是" value="1" />
  35. <el-option label="否" value="2" />
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="状态" prop="status">
  39. <el-select v-model="temp.status" class="filter-item" placeholder="请选择" value="">
  40. <el-option label="启用" value="1" />
  41. <el-option label="停用" value="2" />
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item>
  45. <el-button type="primary" @click="updateData">提交</el-button>
  46. </el-form-item>
  47. </el-form>
  48. </div>
  49. </template>
  50. <script>
  51. import { getClassify, saveClassify } from '@/api/goods-classify'
  52. import { uploadFile, getBase64 } from '@/api/other'
  53. export default {
  54. data() {
  55. return {
  56. action: `${this.baseUrl}/mall/uploadFile/imageUpload`,
  57. msg: '编辑分类',
  58. activeIndex: '2',
  59. rules: {
  60. classifyName: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  61. sort: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  62. // classifyImage: [{ type: 'file', required: true, message: '请上传分类图标', trigger: 'change' }],
  63. postage: [{ required: true, message: '请选择邮费是否到付', trigger: 'change' }],
  64. status: [{ required: true, message: '请选择状态', trigger: 'change' }]
  65. },
  66. temp: {
  67. id: '',
  68. organizeID: this.$store.getters.organizeID,
  69. classifyName: '',
  70. classifyImage: '',
  71. sort: '',
  72. status: 1,
  73. postageToPay: 2,
  74. addTime: '',
  75. updateTime: '',
  76. delFlag: 0
  77. }
  78. }
  79. },
  80. computed: {
  81. classifyId: function() {
  82. return window.location.href.split('/').reverse()[0]
  83. },
  84. organizeID() {
  85. return this.$store.getters.organizeID
  86. }
  87. },
  88. created() {
  89. this.getDetail()
  90. },
  91. methods: {
  92. getDetail() {
  93. getClassify({ id: this.classifyId }).then(response => {
  94. const { data } = response
  95. this.temp = data
  96. }).catch(() => {
  97. this.$router.push({ path: this.redirect })
  98. })
  99. },
  100. updateData() {
  101. this.$refs['dataForm'].validate((valid) => {
  102. if (valid) {
  103. saveClassify(this.temp).then(response => {
  104. this.$notify({
  105. title: response.code * 1 === 1 ? 'Success' : 'Error',
  106. message: response.code * 1 === 1 ? '修改分类成功' : response.msg,
  107. type: response.code * 1 === 1 ? 'success' : 'error',
  108. duration: 2000
  109. })
  110. })
  111. }
  112. })
  113. },
  114. // 上传图标事件
  115. handleAvatarSuccess(res, file) {
  116. getBase64(file.raw).then(res => {
  117. uploadFile({ imgStr: res }).then(response => {
  118. console.log(response)
  119. if (response.code === '1') {
  120. this.temp.classifyImage = response.data
  121. } else {
  122. this.$message.error('上传图片失败')
  123. }
  124. })
  125. })
  126. },
  127. // 对上传图片的大小、格式进行限制
  128. beforeAvatarUpload(file) {
  129. const isJPG = file.type === 'image/jpeg'
  130. const isJPG2 = file.type === 'image/jpg'
  131. const isPNG = file.type === 'image/png'
  132. const isLt5M = file.size / 1024 / 1024 < 5
  133. if (!isJPG && !isJPG2 && !isPNG) {
  134. this.$message.error('只支持jpg或png格式图片')
  135. }
  136. if (!isLt5M) {
  137. this.$message.error('请上传5MB以内的图片!')
  138. }
  139. return (isJPG || isJPG2 || isPNG) && isLt5M
  140. },
  141. backToList() {
  142. this.$store.dispatch('tagsView/delView', this.$route).then(() => {
  143. this.$nextTick(() => {
  144. this.$router.replace({
  145. path: '/goods/category'
  146. })
  147. })
  148. })
  149. }
  150. }
  151. }
  152. </script>
  153. <style scoped>
  154. .avatar-uploader .el-upload {
  155. border: 1px dashed #d9d9d9;
  156. border-radius: 6px;
  157. cursor: pointer;
  158. position: relative;
  159. overflow: hidden;
  160. }
  161. .avatar-uploader .el-upload:hover {
  162. border-color: #409EFF;
  163. }
  164. .avatar-uploader-icon {
  165. font-size: 28px;
  166. color: #8c939d;
  167. width: 178px;
  168. height: 178px;
  169. line-height: 178px;
  170. text-align: center;
  171. }
  172. .avatar {
  173. width: 178px;
  174. height: 178px;
  175. display: block;
  176. }
  177. .el-form-item__label{
  178. text-align: right !important;
  179. }
  180. .form-el-upload{
  181. width: 180px;
  182. }
  183. .el-upload__tip{
  184. line-height: 20px;
  185. color: red;
  186. text-align: left;
  187. }
  188. </style>