redPacket.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <div>
  3. <!-- 公司列表弹窗 -->
  4. <!-- <el-dialog title="设置红包" :visible.sync="companyDialogVisible" width="800px" append-to-body>-->
  5. <el-table :data="companyList" border>
  6. <el-table-column type="index" label="序号" width="60" align="center" />
  7. <el-table-column label="公司名称" prop="companyName" align="center" />
  8. <el-table-column label="操作" align="center" width="120">
  9. <template slot-scope="scope">
  10. <el-button
  11. size="mini"
  12. type="text"
  13. @click="handleInputAmount(scope.row)"
  14. >录入金额</el-button>
  15. </template>
  16. </el-table-column>
  17. </el-table>
  18. <!-- <div slot="footer" class="dialog-footer">-->
  19. <!-- </div>-->
  20. <!-- </el-dialog>-->
  21. <!-- 课程红包设置弹窗 -->
  22. <el-dialog title="设置红包金额" :visible.sync="courseDialogVisible" width="1200px" append-to-body>
  23. <el-table :data="redPacketList" border>
  24. <el-table-column type="index" label="序号" width="60" align="center" />
  25. <el-table-column label="课程" prop="courseName" align="center" />
  26. <el-table-column label="小节" prop="videoName" align="center" />
  27. <el-table-column label="红包金额" width="200px" align="center">
  28. <template slot-scope="scope">
  29. <el-input-number
  30. v-model="scope.row.amount"
  31. :min="0"
  32. :precision="2"
  33. :step="0.01"
  34. size="small"
  35. style="width: 150px"
  36. >
  37. <template slot="append">元</template>
  38. </el-input-number>
  39. </template>
  40. </el-table-column>
  41. </el-table>
  42. <div slot="footer" class="dialog-footer">
  43. <el-button @click="courseDialogVisible = false">取 消</el-button>
  44. <el-button type="primary" @click="handleSave">保 存</el-button>
  45. </div>
  46. </el-dialog>
  47. </div>
  48. </template>
  49. <script>
  50. import { getPeriodCompanyList, getDays, batchSaveRedPacket, getPeriodRedPacketList } from "@/api/course/userCoursePeriod";
  51. import redPacket from "@/views/course/userCoursePeriod/redPacket.vue";
  52. export default {
  53. name: "RedPacket",
  54. computed: {
  55. // redPacket() {
  56. // return redPacket
  57. // }
  58. },
  59. props: {
  60. visible: {
  61. type: Boolean,
  62. default: false
  63. },
  64. activeTab: {
  65. type: String,
  66. default: ''
  67. },
  68. periodId: {
  69. type: [String, Number],
  70. default: ''
  71. },
  72. // videoId: {
  73. // type: [String, Number],
  74. // default: ''
  75. // }
  76. },
  77. data() {
  78. return {
  79. // companyDialogVisible: false,
  80. activeTab: '',
  81. courseDialogVisible: false,
  82. companyList: [],
  83. redPacketList: [],
  84. currentCompany: null
  85. };
  86. },
  87. watch: {
  88. activeTab(val) {
  89. this.activeTab = val;
  90. if (val) {
  91. this.getCompanyList();
  92. }
  93. },
  94. companyDialogVisible(val) {
  95. if (!val) {
  96. this.$emit('update:visible', false);
  97. }
  98. }
  99. },
  100. methods: {
  101. // 获取公司列表
  102. getCompanyList() {
  103. getPeriodCompanyList({
  104. periodId: this.periodId
  105. }).then(response => {
  106. this.companyList = response.data || [];
  107. });
  108. },
  109. // 点击录入金额
  110. handleInputAmount(row) {
  111. this.currentCompany = row;
  112. this.courseDialogVisible = true;
  113. this.getCourseList();
  114. },
  115. // 获取课程列表
  116. getCourseList() {
  117. getPeriodRedPacketList({
  118. periodId: this.periodId,
  119. companyId: this.currentCompany.companyId
  120. }).then(response => {
  121. this.redPacketList = (response.data || []).map(item => ({
  122. ...item,
  123. amount: item.amount || 0
  124. }));
  125. });
  126. },
  127. // 保存红包金额
  128. handleSave() {
  129. const saveData = this.redPacketList
  130. .filter(item => item.amount > 0)
  131. .map(item => ({
  132. companyId: this.currentCompany.companyId,
  133. redPacketMoney: item.amount,
  134. videoId: item.videoId,
  135. periodId: this.periodId,
  136. dataType: 2
  137. }));
  138. if (saveData.length === 0) {
  139. this.$message.warning('请至少设置一个红包金额');
  140. return;
  141. }
  142. batchSaveRedPacket(saveData).then(response => {
  143. if (response.code === 200) {
  144. this.$message.success('保存成功');
  145. this.courseDialogVisible = false;
  146. this.$emit('success');
  147. } else {
  148. this.$message.error(response.msg || "保存失败");
  149. }
  150. }).catch(error => {
  151. this.$message.error("保存失败:" + error.message);
  152. });
  153. }
  154. }
  155. };
  156. </script>
  157. <style scoped>
  158. .el-input-number {
  159. width: 100%;
  160. }
  161. </style>