EditModal.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <el-dialog
  3. :visible.sync="visible"
  4. v-bind="modalOptions"
  5. >
  6. <el-form
  7. ref="formData"
  8. :model="formData"
  9. :rules="formRules"
  10. size="mini"
  11. label-suffix=":"
  12. label-width="150px"
  13. >
  14. <el-form-item label="方案名称" prop="programmeName">
  15. <el-input v-model="formData.programmeName" placeholder="请输入方案名称" maxlength="30" show-word-limit />
  16. </el-form-item>
  17. <el-form-item label="优惠定价系数" prop="preferentialPrice">
  18. <el-input v-model="formData.preferentialPrice" placeholder="请输入优惠定价系数" />
  19. </el-form-item>
  20. <el-form-item label="市场价定价系数" prop="marketPrice">
  21. <el-input v-model="formData.marketPrice" placeholder="请输入市场价定价系数" />
  22. </el-form-item>
  23. <el-form-item label="供货价定价系数" prop="supplyPrice">
  24. <el-input v-model="formData.supplyPrice" placeholder="请输入供货价定价系数" />
  25. </el-form-item>
  26. <el-form-item label="渠道价定价系数" prop="channelPrice">
  27. <el-input v-model="formData.channelPrice" placeholder="请输入渠道价定价系数" />
  28. </el-form-item>
  29. <el-form-item label="活动开始时间" prop="startTime">
  30. <el-date-picker
  31. v-model="formData.startTime"
  32. size="medium"
  33. type="date"
  34. placeholder="选择活动开始时间"
  35. value-format="yyyy-MM-dd HH:mm:ss"
  36. ></el-date-picker>
  37. </el-form-item>
  38. <el-form-item label="活动结束时间" prop="endTime">
  39. <el-date-picker
  40. v-model="formData.endTime"
  41. size="medium"
  42. type="date"
  43. placeholder="选择活动结束时间"
  44. value-format="yyyy-MM-dd HH:mm:ss"
  45. ></el-date-picker>
  46. </el-form-item>
  47. </el-form>
  48. <span slot="footer" class="dialog-footer">
  49. <el-button size="mini" @click="handleClose">取 消</el-button>
  50. <el-button type="primary" size="mini" @click="handleSubmit">确 定</el-button>
  51. </span>
  52. </el-dialog>
  53. </template>
  54. <script>
  55. import { getShopId } from '@/utils/auth'
  56. import { priceControlGetById, priceControlSavePlan, priceControlUpdatePlan } from '@/api/selectionCenter/selectionCenter'
  57. export default {
  58. name: 'EditModal',
  59. components: {
  60. },
  61. data() {
  62. return {
  63. modalOptions: {
  64. closeOnClickModal: false,
  65. width: '820px',
  66. title: ''
  67. },
  68. visible: false,
  69. formData: {
  70. priceId: '',
  71. shopId: getShopId(),
  72. programmeName: '',
  73. preferentialPrice: '',
  74. marketPrice: '',
  75. supplyPrice: '',
  76. channelPrice: '',
  77. startTime: '',
  78. endTime: '',
  79. status: '',
  80. type: '',
  81. isDefault: '',
  82. createTime: '',
  83. updateTime: ''
  84. },
  85. formRules: {
  86. shopId: [
  87. { required: true, message: '缺少店铺ID' }
  88. ],
  89. programmeName: [
  90. { required: true, message: '请输入方案名称' }
  91. ],
  92. preferentialPrice: [
  93. { required: false, message: '请输入优惠定价系数' },
  94. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' } // >0的数字, 最多2位小数正则
  95. ],
  96. marketPrice: [
  97. { required: false, message: '请输入市场价定价系数' },
  98. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  99. ],
  100. supplyPrice: [
  101. { required: false, message: '请输入供货价定价系数' },
  102. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  103. ],
  104. channelPrice: [
  105. { required: false, message: '请输入渠道价定价系数' },
  106. { pattern: /^0\.\d{0,2}$|^[1-9]\d*\.\d{0,2}$|^[1-9]\d*$/, message: '数值有误' }
  107. ],
  108. startTime: [
  109. { required: false, message: '请选择活动开始时间' }
  110. ],
  111. endTime: [
  112. { required: false, message: '请选择活动结束时间' }
  113. ]
  114. }
  115. }
  116. },
  117. methods: {
  118. handleClose() {
  119. this.visible = false
  120. },
  121. initList() {
  122. },
  123. handleOpen(params = {}) {
  124. this.modalOptions.title = params.priceId ? '编辑定时任务' : '添加定时任务'
  125. this.visible = true
  126. this.initList()
  127. if (params.priceId) {
  128. this.getInfo(params.priceId)
  129. } else {
  130. this.$refs.formData && this.$refs.formData.resetFields()
  131. }
  132. },
  133. async getInfo(id) {
  134. const loading = this.$loading({ text: '加载中' })
  135. try {
  136. const res = await priceControlGetById({ id })
  137. this.formData = Object.assign(this.$options.data().formData, res.data, {
  138. priceId: res.data.priceId || '',
  139. shopId: res.data.shopId || getShopId(),
  140. programmeName: res.data.programmeName || '',
  141. preferentialPrice: res.data.preferentialPrice || '',
  142. marketPrice: res.data.marketPrice || '',
  143. supplyPrice: res.data.supplyPrice || '',
  144. channelPrice: res.data.channelPrice || '',
  145. startTime: res.data.startTime || '',
  146. endTime: res.data.endTime || '',
  147. status: res.data.status,
  148. type: res.data.type,
  149. isDefault: res.data.isDefault,
  150. createTime: res.data.createTime || '',
  151. updateTime: res.data.updateTime || ''
  152. })
  153. this.$nextTick(() => {
  154. this.$refs.formData && this.$refs.formData.validate()
  155. })
  156. } finally {
  157. loading.close()
  158. }
  159. },
  160. handleSubmit() {
  161. this.$refs.formData.validate(async (valid) => {
  162. if (valid) {
  163. await this.$validatorForm('formData')
  164. const loading = this.$loading({ text: '提交中,请稍候……' })
  165. try {
  166. const { ...otps } = this.formData
  167. const params = {
  168. ...otps
  169. }
  170. this.formData.priceId ? await priceControlUpdatePlan(params) : await priceControlSavePlan(params)
  171. loading.close()
  172. this.$message({ message: `${this.formData.priceId ? '编辑' : '添加'}成功!`, type: 'success' })
  173. this.$emit('success')
  174. this.visible = false
  175. } catch (e) {
  176. loading.close()
  177. } finally {
  178. loading.close()
  179. }
  180. } else {
  181. this.$message({ message: '请输入相关信息', type: 'warning' })
  182. return false
  183. }
  184. })
  185. }
  186. }
  187. }
  188. </script>