create.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <template>
  2. <div class="app-container coupon-add">
  3. <el-row :gutter="10">
  4. <el-col :xs="{span: 22, offset: 0}" :sm=" {span: 18, offset: 0}" :lg="{span: 10, offset: 0}">
  5. <el-form ref="addItem" :model="addData" :rules="rules" label-width="100px">
  6. <el-form-item label="券包名称:" prop="title">
  7. <el-input v-model="addData.title" :readonly="readonly" placeholder="请输入券包名称" :maxlength="32" show-word-limit />
  8. </el-form-item>
  9. </el-form>
  10. </el-col>
  11. </el-row>
  12. <br>
  13. <el-button v-if="!readonly" type="primary" size="small" plain @click="couponTableVisible = true">添加优惠券</el-button>
  14. <br>
  15. <br>
  16. <span style="font-size: 14px; line-height: 40px">面值总额:¥{{ $numberFormat(totalPrice) }}</span>
  17. <span style="margin-left: 80px;font-size: 14px; line-height: 40px">优惠券数量:{{ totalCouponNum }}</span>
  18. <el-table :data="couponPkgItemList">
  19. <el-table-column label="券编号" prop="couponId" align="center" />
  20. <el-table-column label="券名称" prop="title" />
  21. <el-table-column label="券金额" min-width="85">
  22. <template slot-scope="{ row }">
  23. <div>¥{{ $numberFormat(row.discount) }}</div>
  24. </template>
  25. </el-table-column>
  26. <el-table-column label="使用场景" prop="type">
  27. <template slot-scope="{ row }">
  28. <div>{{ row.type.desc }}</div>
  29. </template>
  30. </el-table-column>
  31. <el-table-column label="数量" align="center">
  32. <template slot-scope="{ row }">
  33. <div>
  34. <el-input-number
  35. :disabled="readonly"
  36. v-model="row.couponNum"
  37. controls-position="right"
  38. :min="1"
  39. size="small"
  40. @change="changeCouponNum"
  41. ></el-input-number>
  42. </div>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="有效期限" min-width="85" align="center">
  46. <template slot-scope="{ row }">
  47. <div>领取后{{ row.dueDays }}天有效</div>
  48. </template>
  49. </el-table-column>
  50. <el-table-column v-if="!readonly" prop="date" label="操作" align="center">
  51. <template slot-scope="{ $index }">
  52. <el-button type="text" class="del" @click="couponPkgItemList.splice($index, 1);getIds();getPrice();getCouponNum()">删除</el-button>
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. <br>
  57. <el-row v-if="!readonly">
  58. <el-col :span="23" style="text-align: right">
  59. <el-button type="info" @click="$router.go(-1)">取消</el-button>
  60. <el-button :loading="addIng" type="primary" @click="update()">保存</el-button>
  61. </el-col>
  62. </el-row>
  63. <!-- 添加券 -->
  64. <coupon-add :dialog-visible="couponTableVisible" :ids="ids" @close="couponTableVisible = false" @confirmCoupon="confirmCoupon" v-if="couponTableVisible" />
  65. </div>
  66. </template>
  67. <script>
  68. import { couponPkgCreate, couponPkgDetail, couponPkgUpdate } from "@/api/business/couponPkg";
  69. import CouponAdd from "./components/CouponAdd"
  70. import { accMul } from '@/utils/util'
  71. export default {
  72. components: {
  73. CouponAdd
  74. },
  75. data() {
  76. return {
  77. id: this.$route.query.id,
  78. readonly: this.$route.name === 'CouponPkgQuery',
  79. addData: {},
  80. couponTableVisible: false,
  81. couponPkgItemList: [],
  82. totalPrice: 0,
  83. totalCouponNum: 0,
  84. ids: [],
  85. addIng: false,
  86. rules: {
  87. title: [{ required: true, message: '请输入券包名称', trigger: 'blur' }]
  88. }
  89. };
  90. },
  91. created() {
  92. if(this.id) {
  93. couponPkgDetail(this.id).then(res => {
  94. const { couponPkgItemVOList, facePrice, title, couponNum } = res.data
  95. this.addData = { title }
  96. this.totalPrice = facePrice
  97. this.totalCouponNum = couponNum
  98. this.ids = couponPkgItemVOList.map(item => item.couponId)
  99. this.couponPkgItemList = couponPkgItemVOList.map(item => {
  100. return {
  101. ... item,
  102. type: item.type && JSON.parse(item.type)
  103. }
  104. })
  105. })
  106. }
  107. },
  108. methods: {
  109. confirmCoupon(arr) {
  110. this.couponPkgItemList = this.couponPkgItemList.concat(arr)
  111. this.getIds()
  112. this.getPrice()
  113. this.getCouponNum()
  114. },
  115. changeCouponNum(e) {
  116. let rule = /^([1-9]\d*)$/;
  117. if(!rule.test(e)) {
  118. this.$message.error('优惠券数量格式错误');
  119. return
  120. }
  121. this.getPrice()
  122. this.getCouponNum()
  123. },
  124. getPrice() {
  125. let num = 0
  126. this.couponPkgItemList.forEach(item => {
  127. num = (accMul(item.discount, item.couponNum)) + num
  128. })
  129. this.totalPrice = num
  130. },
  131. getIds() {
  132. this.ids = this.couponPkgItemList.map(item => item.couponId)
  133. },
  134. getCouponNum() {
  135. let num = 0
  136. this.couponPkgItemList.forEach(item => {
  137. num = item.couponNum + num
  138. })
  139. this.totalCouponNum = num
  140. },
  141. update() {
  142. const subForm = this.$refs["addItem"];
  143. subForm.validate((valid) => {
  144. if (valid) {
  145. if(!this.couponPkgItemList.length) {
  146. this.$message.error('请添加优惠券');
  147. return
  148. }
  149. let couponIndex = this.couponPkgItemList.findIndex((item) => {
  150. let rule = /^([1-9]\d*)$/;
  151. return !rule.test(item.couponNum);
  152. });
  153. // 判断优惠券数量格式
  154. if (couponIndex != -1) {
  155. this.$message.error(
  156. `券${this.couponPkgItemList[couponIndex].title}的数量格式错误!`
  157. );
  158. return;
  159. }
  160. this.addIng = true
  161. let data = {
  162. title: this.addData.title,
  163. couponPkgItemList: this.couponPkgItemList,
  164. facePrice: this.totalPrice,
  165. couponNum: this.totalCouponNum
  166. }
  167. if(this.id){
  168. data.id = this.id
  169. }
  170. let request = this.id ? couponPkgUpdate : couponPkgCreate
  171. request(data).then(res => {
  172. this.addIng = false
  173. if (res.code === 0) {
  174. this.$message({
  175. message: this.id ? '修改成功!' : '添加成功!',
  176. type: 'success'
  177. })
  178. this.$store.dispatch('tagsView/delView', this.$route)
  179. this.$router.go(-1)
  180. }
  181. }).catch(() => {
  182. this.addIng = false
  183. })
  184. }
  185. });
  186. }
  187. },
  188. };
  189. </script>
  190. <style>
  191. </style>