redPacket.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. created() {
  88. if(this.activeTab == "company"){
  89. this.getCompanyList();
  90. }
  91. },
  92. watch: {
  93. activeTab(val) {
  94. this.activeTab = val;
  95. if (val == "company") {
  96. this.getCompanyList();
  97. }
  98. },
  99. companyDialogVisible(val) {
  100. if (!val) {
  101. this.$emit('update:visible', false);
  102. }
  103. }
  104. },
  105. methods: {
  106. // 获取公司列表
  107. getCompanyList() {
  108. getPeriodCompanyList({
  109. periodId: this.periodId
  110. }).then(response => {
  111. this.companyList = response.data || [];
  112. });
  113. },
  114. // 点击录入金额
  115. handleInputAmount(row) {
  116. this.currentCompany = row;
  117. this.courseDialogVisible = true;
  118. this.getCourseList();
  119. },
  120. // 获取课程列表
  121. getCourseList() {
  122. getPeriodRedPacketList({
  123. periodId: this.periodId,
  124. companyId: this.currentCompany.companyId
  125. }).then(response => {
  126. this.redPacketList = (response.data || []).map(item => ({
  127. ...item,
  128. amount: item.amount || 0
  129. }));
  130. });
  131. },
  132. // 保存红包金额
  133. handleSave() {
  134. const saveData = this.redPacketList
  135. .filter(item => item.amount > 0)
  136. .map(item => ({
  137. companyId: this.currentCompany.companyId,
  138. redPacketMoney: item.amount,
  139. videoId: item.videoId,
  140. periodId: this.periodId,
  141. dataType: 2
  142. }));
  143. if (saveData.length === 0) {
  144. this.$message.warning('请至少设置一个红包金额');
  145. return;
  146. }
  147. batchSaveRedPacket(saveData).then(response => {
  148. if (response.code === 200) {
  149. this.$message.success('保存成功');
  150. this.courseDialogVisible = false;
  151. this.$emit('success');
  152. } else {
  153. this.$message.error(response.msg || "保存失败");
  154. }
  155. }).catch(error => {
  156. this.$message.error("保存失败:" + error.message);
  157. });
  158. }
  159. }
  160. };
  161. </script>
  162. <style scoped>
  163. .el-input-number {
  164. width: 100%;
  165. }
  166. </style>