roomRules.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <!-- -->
  2. <template>
  3. <div class="m-core" style="margin-bottom: 18px;overflow: hidden;">
  4. <el-alert
  5. title="云教室规则"
  6. type="info"
  7. :closable="false"
  8. style="margin-bottom: 20px"
  9. ></el-alert>
  10. <el-form ref="form" label-position="top" :model="form" label-width="200px" :inline="true">
  11. <el-form-item label="云教室人数上限(含老师)" prop="cloud_room_up_limit"
  12. :rules="[{ required: true, message: '请输入云教室人数上限', trigger: 'blur' },
  13. { type: 'number', message: '云教室人数上限必须为数字值', trigger: 'blur' }]">
  14. <el-input
  15. placeholder="请输入云教室人数上限"
  16. v-model.number="form.cloud_room_up_limit"
  17. :disabled="isDisabled"
  18. @blur="onUpLimitChange"
  19. type="number"
  20. >
  21. <div slot="append">人</div>
  22. </el-input>
  23. </el-form-item>
  24. </el-form>
  25. <el-col :lg="12" :md="18" :sm="18" :xs="24">
  26. <el-table :data="form.roomConfig"
  27. style="width:100% !important;"
  28. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  29. <el-table-column prop="num" label="人数">
  30. </el-table-column>
  31. <el-table-column prop="price" label="每分钟扣费标准">
  32. <template slot-scope="scope">
  33. <el-input-number v-model.number="scope.row.price" :disabled="isDisabled" :min="0" :controls="false" placeholder="请输入合同价" ></el-input-number>
  34. </template>
  35. </el-table-column>
  36. </el-table>
  37. </el-col>
  38. </div>
  39. </template>
  40. <script>
  41. export default {
  42. props: ['type', 'data'],
  43. data () {
  44. return {
  45. form: {
  46. cloud_room_up_limit: null,
  47. roomConfig: []
  48. // cloud_room_config: {}
  49. },
  50. };
  51. },
  52. mounted () {
  53. this.setValues()
  54. },
  55. computed: {
  56. isDisabled() {
  57. return this.type == 'setting' ? true : false
  58. }
  59. },
  60. methods: {
  61. onUpLimitChange() {
  62. const form = this.form
  63. if(form.cloud_room_up_limit > 0) {
  64. const count = form.cloud_room_up_limit || 0
  65. const roomLength = form.roomConfig.length || 0
  66. if(count - roomLength > 0) {
  67. const diff = count - roomLength
  68. for(let i = 1; i < diff; i++) {
  69. form.roomConfig.push({
  70. num: roomLength + 1 + i,
  71. price: undefined
  72. })
  73. }
  74. } else {
  75. const diff = roomLength - count + 1
  76. console.log(roomLength, diff, 'diff')
  77. form.roomConfig.splice(roomLength - diff, diff)
  78. this.$forceUpdate()
  79. }
  80. } else {
  81. form.roomConfig = []
  82. }
  83. form.roomConfig.forEach(room => {
  84. console.log(typeof room.price)
  85. });
  86. },
  87. onSubmit() {
  88. let status = false
  89. this.$refs.form.validate(_ => {
  90. status = _
  91. })
  92. return status
  93. },
  94. setValues() {
  95. if(this.data) {
  96. const { config } = this.data
  97. const tempC = config ? JSON.parse(config) : {}
  98. const { cloud_room_rule } = tempC
  99. console.log(cloud_room_rule)
  100. this.form.cloud_room_up_limit = cloud_room_rule.cloud_room_up_limit
  101. const roomCloud = cloud_room_rule.cloud_room_config
  102. if(!roomCloud) return
  103. let tempConfig = []
  104. for(let item in roomCloud) {
  105. tempConfig.push({
  106. num: item,
  107. price: roomCloud[item]
  108. })
  109. }
  110. this.form.roomConfig = tempConfig
  111. }
  112. },
  113. getValues() {
  114. const { roomConfig, cloud_room_up_limit } = this.form
  115. let cloud_room_config = {}
  116. roomConfig.forEach(room => {
  117. cloud_room_config[room.num] = room.price
  118. });
  119. return {
  120. cloud_room_rule: {
  121. cloud_room_up_limit,
  122. cloud_room_config
  123. }
  124. }
  125. },
  126. },
  127. };
  128. </script>
  129. <style lang='scss' scoped>
  130. /deep/.el-input-number .el-input__inner {
  131. text-align: left;
  132. }
  133. .el-input, .el-select, .el-input-number {
  134. width: 300px !important;
  135. }
  136. </style>