category-create.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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"><router-link to="/goods/category">商品分类</router-link></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. accept="image/jpeg,image/gif,image/png"
  19. action="https://www-b.caimei365.com/register/imageUpload.action"
  20. :show-file-list="false"
  21. :on-success="handleAvatarSuccess"
  22. :before-upload="beforeAvatarUpload"
  23. :multiple="false"
  24. :limit="1"
  25. >
  26. <img v-if="temp.classifyImage" :src="temp.classifyImage" class="avatar">
  27. <i v-else class="el-icon-plus avatar-uploader-icon" />
  28. <div slot="tip" class="el-upload__tip">注意:请上传jpg/png格式的图片,最大不超过5M</div>
  29. </el-upload>
  30. </div>
  31. </el-form-item>
  32. <el-form-item label="排序值" prop="sort">
  33. <el-input v-model="temp.sort" type="number" />
  34. </el-form-item>
  35. <el-form-item label="邮费是否到付" prop="postageToPay">
  36. <el-select v-model="temp.postageToPay" class="filter-item" placeholder="请选择" value="">
  37. <el-option label="是" value="1" />
  38. <el-option label="否" value="2" />
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="状态" prop="status">
  42. <el-select v-model="temp.status" class="filter-item" placeholder="请选择" value="">
  43. <el-option label="启用" value="1" />
  44. <el-option label="停用" value="2" />
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item>
  48. <el-button type="primary" @click="updateData">提交</el-button>
  49. </el-form-item>
  50. </el-form>
  51. </div>
  52. </template>
  53. <script>
  54. import { getClassify, saveClassify } from '@/api/goods'
  55. export default {
  56. data() {
  57. return {
  58. msg: '编辑分类',
  59. activeIndex: '2',
  60. rules: {
  61. classifyName: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  62. sort: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  63. // classifyImage: [{ type: 'file', required: true, message: '请上传分类图标', trigger: 'change' }],
  64. postage: [{ required: true, message: '请选择邮费是否到付', trigger: 'change' }],
  65. status: [{ required: true, message: '请选择状态', trigger: 'change' }]
  66. },
  67. temp: {
  68. id: '',
  69. organizeID: this.organizeID,
  70. classifyName: '',
  71. classifyImage: '',
  72. sort: '',
  73. status: '',
  74. postageToPay: '',
  75. addTime: '',
  76. updateTime: '',
  77. delFlag: 0
  78. }
  79. }
  80. },
  81. computed: {
  82. classifyId: function() {
  83. return window.location.href.split('/').reverse()[0]
  84. }
  85. },
  86. created() {
  87. this.getDetail()
  88. },
  89. methods: {
  90. getDetail() {
  91. getClassify({ id: this.classifyId }).then(response => {
  92. const { data } = response
  93. this.temp = data
  94. }).catch(() => {
  95. this.$router.push({ path: this.redirect })
  96. })
  97. },
  98. updateData() {
  99. this.$refs['dataForm'].validate((valid) => {
  100. if (valid) {
  101. saveClassify(this.temp).then(response => {
  102. this.$notify({
  103. title: response.code * 1 === 1 ? 'Success' : 'Error',
  104. message: response.code * 1 === 1 ? '添加分类成功' : response.msg,
  105. type: response.code * 1 === 1 ? 'success' : 'error',
  106. duration: 2000
  107. })
  108. })
  109. }
  110. })
  111. },
  112. handleAvatarSuccess(res, file) {
  113. this.getBase64(file.raw).then(res => {
  114. console.log(res)
  115. })
  116. const fileName = file.name
  117. const regex = /(.jpg|.jpeg|.gif|.png|.bmp)$/
  118. if (regex.test(fileName.toLowerCase())) {
  119. this.form.imageUrl = URL.createObjectURL(file.raw)
  120. } else {
  121. this.$message.error('请选择图片文件')
  122. }
  123. },
  124. beforeAvatarUpload(file) {
  125. const isLt5M = file.size / 1024 / 1024 < 5
  126. if (!isLt5M) {
  127. this.$message.error('上传头像图片大小不能超过 5MB!')
  128. }
  129. return isLt5M
  130. },
  131. getBase64(file) {
  132. return new Promise(function(resolve, reject) {
  133. const reader = new FileReader()
  134. let imgResult = ''
  135. reader.readAsDataURL(file)
  136. reader.onload = function() {
  137. imgResult = reader.result
  138. }
  139. reader.onerror = function(error) {
  140. reject(error)
  141. }
  142. reader.onloadend = function() {
  143. resolve(imgResult)
  144. }
  145. })
  146. }
  147. }
  148. }
  149. </script>
  150. <style scoped>
  151. .avatar-uploader .el-upload {
  152. border: 1px dashed #d9d9d9;
  153. border-radius: 6px;
  154. cursor: pointer;
  155. position: relative;
  156. overflow: hidden;
  157. }
  158. .avatar-uploader .el-upload:hover {
  159. border-color: #409EFF;
  160. }
  161. .avatar-uploader-icon {
  162. font-size: 28px;
  163. color: #8c939d;
  164. width: 178px;
  165. height: 178px;
  166. line-height: 178px;
  167. text-align: center;
  168. }
  169. .avatar {
  170. width: 178px;
  171. height: 178px;
  172. display: block;
  173. }
  174. .el-form-item__label{
  175. text-align: right !important;
  176. }
  177. .form-el-upload{
  178. width: 180px;
  179. }
  180. .el-upload__tip{
  181. line-height: 20px;
  182. color: red;
  183. text-align: left;
  184. }
  185. </style>