classroom-setting-item.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <div>
  3. <!-- <el-form-item
  4. label="排课次数"
  5. prop="courseTimes"
  6. >
  7. <el-input v-model="form.courseTimes" placeholder="请输入排课次数"/>
  8. </el-form-item> -->
  9. <el-form-item
  10. label="排课起始时间"
  11. :prop="'classs.' + type + '.courseTime'"
  12. :rules="[{ required: true, message: '请选择排课起始时间' }]"
  13. >
  14. <el-date-picker v-model.trim="form.courseTime"
  15. :picker-options="pickerOptions"
  16. style="width:100%!important;"
  17. type="date"
  18. value-format="yyyy-MM-dd"
  19. placeholder="选择日期">
  20. </el-date-picker>
  21. </el-form-item>
  22. <el-form-item
  23. label="跳过节假日"
  24. :prop="'classs.' + type + '.holiday'"
  25. :rules="[{ required: true, message: '否跳过节假日' }]"
  26. >
  27. <el-radio-group v-model="form.holiday">
  28. <el-radio :label="true">是</el-radio>
  29. <el-radio :label="false">否</el-radio>
  30. </el-radio-group>
  31. </el-form-item>
  32. <el-table
  33. v-if="form && form.cycle"
  34. :data="form.cycle"
  35. >
  36. <el-table-column
  37. prop="dayOfWeek"
  38. label="循环周期"
  39. width="180">
  40. <template slot-scope="scope">
  41. <el-form-item
  42. inline-message
  43. :rules="[{ required: true, message: '请选择循环周期' }]"
  44. :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'"
  45. >
  46. <el-select v-model.trim="scope.row.dayOfWeek"
  47. style="width:100%!important"
  48. placeholder="请选择循环周期"
  49. clearable
  50. filterable>
  51. <el-option v-for="(item,index) in weekDateList"
  52. :key="index"
  53. :label="item.label"
  54. :value="item.value">
  55. </el-option>
  56. </el-select>
  57. </el-form-item>
  58. </template>
  59. </el-table-column>
  60. <el-table-column
  61. prop="time"
  62. label="课程时长(分)"
  63. width="180">
  64. <template slot-scope="scope">
  65. <el-form-item
  66. :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'"
  67. inline-message>
  68. <el-input disabled v-model="scope.row.time" placeholder="请输入课程时长"/>
  69. </el-form-item>
  70. </template>
  71. </el-table-column>
  72. <el-table-column
  73. prop="startClassTime"
  74. label="开始时间"
  75. width="180">
  76. <template slot-scope="scope">
  77. <el-form-item
  78. :prop="'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'"
  79. :rules="[{ required: true, message: '请选择开始时间' }]"
  80. inline-message>
  81. <el-time-picker style="width: 100%!important;"
  82. v-model.trim="scope.row.startClassTime"
  83. format='HH:mm'
  84. value-format='HH:mm'
  85. placeholder="请选择时间"
  86. @change="val => startTimeChange(val, scope.row)"
  87. :picker-options="{
  88. selectableRange: ['04:30:00 - 23:59:59']
  89. }">
  90. </el-time-picker>
  91. </el-form-item>
  92. </template>
  93. </el-table-column>
  94. <el-table-column
  95. prop="endClassTime"
  96. label="结束时间"
  97. width="180">
  98. <template slot-scope="scope">
  99. <el-form-item
  100. :prop="'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'"
  101. inline-message>
  102. <el-time-picker style="width: 100%!important;"
  103. v-model.trim="scope.row.endClassTime"
  104. format='HH:mm'
  105. disabled
  106. value-format='HH:mm'
  107. placeholder="请选择时间"
  108. :picker-options="{
  109. selectableRange: [scope.row.startClassTime + ':00 - 23:59:59']
  110. }">
  111. </el-time-picker>
  112. </el-form-item>
  113. </template>
  114. </el-table-column>
  115. <el-table-column
  116. prop="date"
  117. label=""
  118. width="180">
  119. <template slot-scope="scope">
  120. <i @click="remove(scope.$index)" v-if="form.cycle.length > 1" class="close-icon el-icon-circle-close"></i>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. <el-button
  125. icon="el-icon-circle-plus-outline"
  126. type="info"
  127. size="small"
  128. plain
  129. :disabled="surplustime < classTimeListByType[type]"
  130. @click="create"
  131. style="margin-top: 10px;width: 100%;"
  132. >添加循环</el-button>
  133. </div>
  134. </template>
  135. <script>
  136. import { diffTimerFormMinute, addTimerFormMinute } from '@/utils/date'
  137. import { classTimeList } from '@/utils/searchArray'
  138. import dayjs from 'dayjs'
  139. const classTimeListByType = {}
  140. for (const item of classTimeList) {
  141. classTimeListByType[item.value] = item.label
  142. }
  143. export default {
  144. props: ['form', 'type', 'surplustime'],
  145. data() {
  146. return {
  147. classTimeListByType,
  148. }
  149. },
  150. computed: {
  151. pickerOptions() {
  152. return {
  153. firstDayOfWeek: 1,
  154. disabledDate (time) {
  155. return time.getTime() + 86400000 <= new Date().getTime();
  156. }
  157. }
  158. },
  159. weekDateList() {
  160. return [
  161. { value: "1", label: "星期一" },
  162. { value: "2", label: "星期二" },
  163. { value: "3", label: "星期三" },
  164. { value: "4", label: "星期四" },
  165. { value: "5", label: "星期五" },
  166. { value: "6", label: "星期六" },
  167. { value: "7", label: "星期日" }
  168. ]
  169. }
  170. },
  171. methods: {
  172. create() {
  173. this.form.cycle.push({
  174. time: classTimeListByType[this.type]
  175. })
  176. },
  177. remove(index) {
  178. this.form.cycle.splice(index, 1)
  179. },
  180. startTimeChange(val, item) {
  181. if (val) {
  182. let str = dayjs(new Date()).format('YYYY-MM-DD')
  183. this.$set(item, 'endClassTime', addTimerFormMinute(str, val, item.time))
  184. } else {
  185. this.$set(item, 'endClassTime', '')
  186. }
  187. }
  188. },
  189. }
  190. </script>
  191. <style lang="less" scoped>
  192. /deep/ .close-icon{
  193. cursor: pointer;
  194. font-size: 16px;
  195. }
  196. </style>