detail.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="form" ref="form" :rules="rules" label-width="auto" :disabled="disabled">
  4. <el-form-item label="活动名称:" prop="name">
  5. <el-input v-model="form.name" placeholder="请输入活动名称" maxlength="20" show-word-limit />
  6. </el-form-item>
  7. <el-form-item label="活动时间:" prop="startTime">
  8. <el-date-picker v-model="date" type="datetimerange" range-separator="至" start-placeholder="开始日期"
  9. end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="handleChange">
  10. </el-date-picker>
  11. </el-form-item>
  12. <el-form-item label="抽奖积分:" prop="lotteryConsumePoint">
  13. <el-input-number v-model="form.lotteryConsumePoint" :min="1" :max="999" :controls="false"
  14. placeholder="请输入抽奖积分" />
  15. <span class="input-number">积分</span>
  16. </el-form-item>
  17. <el-form-item label="每日限抽次数:" prop="lotteryLimitCount">
  18. <el-input-number v-model="form.lotteryLimitCount" :min="1" :max="999" :controls="false"
  19. placeholder="请输入每日限抽次数" />
  20. <span class="input-number">次</span>
  21. </el-form-item>
  22. <el-form-item label="活动规则:" prop="rule">
  23. <el-input v-model="form.rule" type="textarea" :autosize="{ minRows: 5, maxRows: 10}" :maxlength="150"
  24. show-word-limit placeholder="请输入活动规则" />
  25. </el-form-item>
  26. <el-form-item label="转盘数量:" prop="goodNum">
  27. <el-select v-model.number="form.goodNum" placeholder="请选择转盘数量" :disabled="form.id ? true : false"
  28. @change="getChange">
  29. <el-option v-for="item in numOptions" :key="item.value" :value="item.value" :label="item.label" />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item style="width: 100%">
  33. <el-table :data="form.lotteryConfigGoodList">
  34. <el-table-column label="顺序" type="index" align="center" />
  35. <el-table-column label="奖品类型" align="center">
  36. <template slot-scope="scope">
  37. <el-select v-model="scope.row.type" :disabled="form.id ? true : false">
  38. <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
  39. :label="item.label" />
  40. </el-select>
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="奖品" align="center">
  44. <template slot-scope="scope">
  45. <el-input v-if="scope.row.type === 4" v-model="scope.row.rewardPoint"
  46. :disabled="form.id ? true : false">
  47. <span slot="suffix" style="line-height: 36px">积分</span>
  48. </el-input>
  49. <el-input v-else v-model="scope.row.name" :disabled="form.id ? true : false" />
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="奖品数量" align="center">
  53. <template slot-scope="scope">
  54. <el-input v-model="scope.row.totalNum" />
  55. </template>
  56. </el-table-column>
  57. <el-table-column label="已发放数量" prop="useNum" align="center" />
  58. <el-table-column label="奖品图片" align="center">
  59. <template slot-scope="scope">
  60. <Upload listType="picture-card" :url="scope.row.pic" @upload="upload($event, scope.$index)"
  61. :disabled="disabled" />
  62. </template>
  63. </el-table-column>
  64. <el-table-column label="中奖概率 / %" align="center">
  65. <template slot-scope="scope">
  66. <el-input-number style="width: 120px" v-model="scope.row.rate" :controls="false" />
  67. </template>
  68. </el-table-column>
  69. </el-table>
  70. </el-form-item>
  71. </el-form>
  72. <div class="form-btn">
  73. <el-button @click="cancel">取消</el-button>
  74. <el-button type="primary" @click="getSubmit">确定</el-button>
  75. </div>
  76. </div>
  77. </template>
  78. <script>
  79. import { detail, create, checkTime, edit } from '@/api/registration/lottery'
  80. export default {
  81. data() {
  82. return {
  83. // 表单
  84. form: {
  85. lotteryConfigGoodList: [],
  86. status: 0
  87. },
  88. // 活动时间
  89. date: [],
  90. // 只读
  91. disabled: false,
  92. // 转盘数量
  93. numOptions: [{
  94. value: 6,
  95. label: '6'
  96. }, {
  97. value: 8,
  98. label: '8'
  99. }],
  100. // 奖品类型
  101. rewardOptions: [{
  102. value: 3,
  103. label: '音响实物'
  104. }, {
  105. value: 4,
  106. label: '积分'
  107. }, {
  108. value: 5,
  109. label: '谢谢参与'
  110. }],
  111. // 校验
  112. rules: {
  113. name: [{
  114. required: true, message: '请输入活动名称', trigger: 'blur'
  115. }],
  116. startTime: [{
  117. required: true, message: '请选择活动时间', trigger: 'change'
  118. }],
  119. lotteryConsumePoint: [{
  120. required: true, message: '请输入抽奖积分', trigger: 'blur'
  121. }],
  122. lotteryLimitCount: [{
  123. required: true, message: '请输入每日限抽次数', trigger: 'blur'
  124. }],
  125. rule: [{
  126. required: true, message: '请输入活动规则', trigger: 'blur'
  127. }],
  128. goodNum: [{
  129. required: true, message: '请选择转盘数量', trigger: 'change'
  130. }]
  131. }
  132. }
  133. },
  134. watch: {
  135. date(val) {
  136. this.form.startTime = val ? val[0] : ''
  137. this.form.endTime = val ? val[1] : ''
  138. }
  139. },
  140. mounted() {
  141. if (this.$route.query.id) {
  142. this.form.id = this.$route.query.id
  143. this.disabled = Boolean(this.$route.query.disabled)
  144. this.getList()
  145. }
  146. },
  147. methods: {
  148. // 详情
  149. getList() {
  150. detail({
  151. id: this.form.id
  152. }).then(res => {
  153. if (res.code === 0) {
  154. this.form = res.data
  155. this.date = [res.data.startTime, res.data.endTime]
  156. }
  157. })
  158. },
  159. // 校验时间
  160. handleChange(e) {
  161. checkTime({
  162. startTime: e[0],
  163. endTime: e[1]
  164. }).then(res => {
  165. if (res.code === 0) {
  166. if (!res.data) {
  167. this.$message.error('已有其他活动在此活动时间内!')
  168. this.form.date = []
  169. }
  170. }
  171. })
  172. },
  173. // 更改转盘数量
  174. getChange() {
  175. this.form.lotteryConfigGoodList = []
  176. for (let i = 0; i < this.form.goodNum; i++) {
  177. this.form.lotteryConfigGoodList.push({})
  178. }
  179. },
  180. // 上传
  181. upload(e, index) {
  182. this.form.lotteryConfigGoodList[index].pic = e.file
  183. },
  184. // 取消
  185. cancel() {
  186. this.$tab.closeOpenPage('/registration/lotteryConfig')
  187. },
  188. // 确定
  189. getSubmit() {
  190. let rate = 0
  191. this.form.lotteryConfigGoodList.map(i => {
  192. rate += i.rate
  193. })
  194. this.$refs.form.validate((valid) => {
  195. if (valid) {
  196. if (rate !== 100) {
  197. this.$message.error('中奖概率总和要满足100%')
  198. } else {
  199. if (this.form.id) {
  200. edit(this.form).then(res => {
  201. if (res.code === 0) {
  202. this.$message.success('编辑成功!')
  203. this.getList()
  204. }
  205. })
  206. } else {
  207. create(this.form).then(res => {
  208. if (res.code === 0) {
  209. this.$message.success('新增成功!')
  210. this.cancel()
  211. }
  212. })
  213. }
  214. }
  215. } else {
  216. return false
  217. }
  218. })
  219. }
  220. }
  221. }
  222. </script>
  223. <style lang="scss" scoped>
  224. .el-form-item {
  225. width: 500px;
  226. }
  227. ::v-deep .upload {
  228. .el-upload {
  229. width: 100px;
  230. height: 100px;
  231. line-height: 110px;
  232. }
  233. .upload-image {
  234. width: 100px;
  235. height: 100px;
  236. }
  237. }
  238. .form-btn {
  239. margin-left: 120px;
  240. }
  241. .input-number {
  242. margin-left: 10px;
  243. }
  244. </style>