category-create.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <template>
  2. <div class="app-container" style="padding-top:0;">
  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" placeholder="请输入分类名称" maxlength="5" />
  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="actionUrl"
  19. :headers="getToken"
  20. :show-file-list="false"
  21. :on-success="handleSuccess"
  22. :before-upload="beforeUpload"
  23. >
  24. <div v-loading="loadImgLoading" class="avatar">
  25. <img v-if="temp.classifyImage" :src="temp.classifyImage" @error="reloadImage" @load="loadSucess">
  26. <i v-else class="el-icon-plus avatar-uploader-icon" />
  27. </div>
  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" placeholder="请输入排序值" maxlength="3" />
  34. </el-form-item>
  35. <el-form-item label="邮费是否到付:" prop="postageToPay" style="width: 500px;">
  36. <el-select v-model="temp.postageToPay" class="filter-item filter-item-temp" placeholder="请选择" value="">
  37. <el-option label="是" value="1" />
  38. <el-option label="否" value="2" />
  39. </el-select>
  40. <span class="span_tip">注意:仪器分类请选择"是",其他分类请选择"否"</span>
  41. </el-form-item>
  42. <el-form-item label="状态:" prop="status">
  43. <el-select v-model="temp.status" class="filter-item filter-item-temp" placeholder="请选择" value="">
  44. <el-option label="启用" value="1" />
  45. <el-option label="停用" value="2" />
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item>
  49. <el-button style="margin-right:10px" @click="backToList">返回</el-button>
  50. <el-button type="primary" @click="updateData">提交</el-button>
  51. </el-form-item>
  52. </el-form>
  53. </div>
  54. </template>
  55. <script>
  56. import { saveClassify } from '@/api/goods-classify'
  57. export default {
  58. data() {
  59. return {
  60. msg: '添加分类',
  61. activeIndex: '2',
  62. rules: {
  63. classifyName: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  64. sort: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }],
  65. postageToPay: [{ required: true, message: '请选择邮费是否到付', trigger: 'blur' }],
  66. classifyImage: [{ required: true, message: '请上传分类图标', trigger: 'change' }],
  67. postage: [{ required: true, message: '请选择邮费是否到付', trigger: 'change' }],
  68. status: [{ required: true, message: '请选择状态', trigger: 'change' }]
  69. },
  70. loadImgLoading: false,
  71. temp: {
  72. id: '',
  73. organizeID: this.$store.getters.organizeId,
  74. classifyName: '',
  75. classifyImage: '',
  76. sort: '',
  77. status: '1',
  78. postageToPay: '',
  79. addTime: '',
  80. updateTime: '',
  81. delFlag: 0
  82. }
  83. }
  84. },
  85. computed: {
  86. getToken() {
  87. return {
  88. 'token': this.$store.getters.token
  89. }
  90. },
  91. classifyId: function() {
  92. return window.location.href.split('/').reverse()[0]
  93. },
  94. organizeID() {
  95. return this.$store.getters.organizeId
  96. },
  97. actionUrl() {
  98. return process.env.VUE_APP_BASE_API + '/formData/MultiPictareaddData'
  99. }
  100. },
  101. methods: {
  102. updateData() {
  103. this.$refs['dataForm'].validate((valid) => {
  104. if (valid) {
  105. saveClassify(this.temp).then(response => {
  106. this.$message({ message: response.msg, type: 'success', center: true, duration: 2000 })
  107. this.backToList()
  108. })
  109. }
  110. })
  111. },
  112. // 上传图标事件
  113. handleSuccess(response, file) {
  114. this.loadImgLoading = true
  115. this.$nextTick(() => {
  116. setTimeout(() => {
  117. this.temp.classifyImage = response.data
  118. }, 1000 * 2)
  119. })
  120. },
  121. reloadImage() {
  122. this.loadImgLoading = true
  123. setTimeout(() => {
  124. this.temp.classifyImage = this.temp.classifyImage.split('?')[0] + '?r=' + Math.floor(Math.random() * 1000)
  125. }, 1000 * 2)
  126. },
  127. loadSucess() {
  128. this.loadImgLoading = false
  129. },
  130. // 对上传图片的大小、格式进行限制
  131. beforeUpload(file) {
  132. const isJPG = file.type === 'image/jpeg'
  133. const isJPG2 = file.type === 'image/jpg'
  134. const isPNG = file.type === 'image/png'
  135. const isLt5M = file.size / 1024 / 1024 < 5
  136. if (!isJPG && !isJPG2 && !isPNG) {
  137. this.$message.error('只支持jpg或png格式图片')
  138. }
  139. if (!isLt5M) {
  140. this.$message.error('请上传5MB以内的图片!')
  141. }
  142. return (isJPG || isJPG2 || isPNG) && isLt5M
  143. },
  144. backToList() {
  145. this.$store.dispatch('tagsView/delView', this.$route).then(() => {
  146. this.$nextTick(() => {
  147. this.$router.replace({
  148. path: '/goods/category'
  149. })
  150. })
  151. })
  152. }
  153. }
  154. }
  155. </script>
  156. <style lang="scss">
  157. .form-el-upload{
  158. width: 150px;
  159. }
  160. .avatar-uploader .el-upload {
  161. border: 1px dashed #d9d9d9;
  162. border-radius: 6px;
  163. cursor: pointer;
  164. position: relative;
  165. overflow: hidden;
  166. float: left;
  167. }
  168. .avatar-uploader .el-upload:hover {
  169. border-color: #409EFF;
  170. }
  171. .avatar-uploader-icon {
  172. font-size: 28px;
  173. color: #8c939d;
  174. width: 148px;
  175. height: 148px;
  176. line-height: 148px;
  177. text-align: center;
  178. }
  179. .avatar {
  180. width: 148px;
  181. height: 148px;
  182. display: block;
  183. }
  184. .avatar img {
  185. width: 148px;
  186. height: 148px;
  187. display: block;
  188. }
  189. .el-form-item__label{
  190. text-align: right !important;
  191. }
  192. .el-upload__tip{
  193. margin-top: 0;
  194. line-height: 20px;
  195. color: red;
  196. text-align: left;
  197. position: absolute;
  198. right: -50%;
  199. bottom: 0;
  200. }
  201. .span_tip{
  202. font-size: 12px;
  203. color: red;
  204. margin-left: 5px;
  205. }
  206. .filter-item-temp{
  207. width: 100px;
  208. }
  209. </style>