price-edit.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible" width="1000px">
  3. <el-form ref="dataForm" :model="formData" :rules="rules" size="mini" label-width="120px">
  4. <el-form-item label="商品名称:">
  5. <div class="text" v-text="product.productName" />
  6. </el-form-item>
  7. <el-form-item label="商品图片:">
  8. <el-popover
  9. placement="top-start"
  10. title=""
  11. width="120"
  12. trigger="hover"
  13. >
  14. <img :src="product.mainImage" alt="" style="width:100px;height:100px;">
  15. <img slot="reference" :src="product.mainImage" alt="" style="width:50px;height:50px;">
  16. </el-popover>
  17. </el-form-item>
  18. <el-form-item label="供应商名称:">
  19. <div class="text" v-text="product.shopName" />
  20. </el-form-item>
  21. <el-form-item label="商品状态:" prop="validFlag">
  22. <el-select v-model="formData.validFlag" placeholder="请选择" :disabled="true" @change="handleChange($event)">
  23. <el-option :label="storeStatus(formData.validFlag)" :value="formData.validFlag" />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="商品规格:" prop="skus">
  27. <el-table row-key="title" :data="formData.skus" border height="250">
  28. <el-table-column label="商品规格" prop="title" align="center">
  29. <template slot-scope="{row}">
  30. <span>{{ row.unit }}</span>
  31. </template>
  32. </el-table-column>
  33. <el-table-column label="起订量" prop="name" align="center">
  34. <template slot-scope="{row}">
  35. <span>{{ row.minBuyNumber }}</span>
  36. </template>
  37. </el-table-column>
  38. <el-table-column label="售价" prop="name" align="center">
  39. <template slot-scope="{row}">
  40. <span> ¥{{ row.price | toThousandFloatFilter }}</span>
  41. </template>
  42. </el-table-column>
  43. </el-table>
  44. </el-form-item>
  45. </el-form>
  46. <div slot="footer" class="dialog-footer">
  47. <el-button @click="dialogFormVisible = false"> 关闭 </el-button>
  48. <el-button v-if="isDetail" type="primary" @click="handleSave"> 保存 </el-button>
  49. </div>
  50. </el-dialog>
  51. </template>
  52. <script>
  53. import { saveGoods } from '@/api/goods'
  54. import storeStatus from '@/views/mixins/storeStatus'
  55. export default {
  56. mixins: [storeStatus],
  57. props: {
  58. dialogTitle: {
  59. type: String,
  60. default: '编辑'
  61. },
  62. isVisible: {
  63. type: Boolean,
  64. default: false
  65. },
  66. product: {
  67. type: Object,
  68. default: () => {}
  69. },
  70. classify: {
  71. type: Array,
  72. default: () => []
  73. },
  74. isDetail: {
  75. type: Boolean,
  76. default: () => true
  77. }
  78. },
  79. data: function() {
  80. return {
  81. postData: null,
  82. formData: {
  83. skus: [],
  84. validFlag: ''
  85. },
  86. rules: {
  87. classifyID: [{ required: true, message: '*必填', trigger: 'change' }],
  88. ladderPriceFlag: [{ required: true, message: '*必填', trigger: 'change' }],
  89. retailPrice: [{ validator: this.checkSinglePrice, type: 'float', trigger: 'blur' }],
  90. minBuyNumber: [{ validator: this.checkSingleNumber, type: 'number', trigger: 'blur' }]
  91. }
  92. }
  93. },
  94. computed: {
  95. dialogFormVisible: {
  96. get() {
  97. return this.isVisible
  98. },
  99. set(val) {
  100. this.$emit('update:isVisible', val)
  101. }
  102. }
  103. },
  104. watch: {
  105. product: function(val) {
  106. this.postData = JSON.parse(JSON.stringify(val))
  107. this.formData.skus = this.postData.skus
  108. this.formData.validFlag = this.postData.validFlag
  109. }
  110. },
  111. methods: {
  112. handleChange(value) {
  113. console.log('value', value)
  114. },
  115. handleSave() {
  116. // 保存商品
  117. this.$refs['dataForm'].validate((valid) => {
  118. if (valid) {
  119. this.saveGoods()
  120. }
  121. })
  122. },
  123. async saveGoods() {
  124. try {
  125. await saveGoods(this.formData)
  126. this.$message.success('操作成功')
  127. this.$parent.getList()
  128. this.dialogFormVisible = false
  129. } catch (error) {
  130. console.log('error', error)
  131. }
  132. },
  133. checkedInput(event) {
  134. const pattern = /[^0-9.]/g
  135. return event.replace(pattern, '')
  136. }
  137. }
  138. }
  139. </script>
  140. <style scoped>
  141. .group label{
  142. white-space: nowrap;
  143. font-weight: normal;
  144. }
  145. .text{
  146. line-height: 20px;
  147. padding: 4px 0 0;
  148. }
  149. .line{
  150. display: flex;
  151. }
  152. .single{
  153. width:280px;
  154. }
  155. .multiple{
  156. display: flex;
  157. padding-left: 120px;
  158. justify-content: left;
  159. align-items: flex-end;
  160. }
  161. .group{
  162. white-space: nowrap;
  163. font-weight: normal;
  164. }
  165. .group button{
  166. padding:0 15px;
  167. }
  168. </style>