addClassForm.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <template>
  2. <view class="content">
  3. <u-form :model="form" ref="form" label-width="140">
  4. <u-form-item label="班级名称" prop="name" required>
  5. <u-input v-model="form.name" placeholder="请输入班级名称" />
  6. </u-form-item>
  7. <u-form-item label="上课时间" prop="timeReqList" required label-position="top"></u-form-item>
  8. <u-swipe-action :index="index" v-for="(item, index) in form.timeReqList" :key="item.id" @click="deleteDate" :options="options">
  9. <u-form-item label=" " right-icon="arrow-right" @click.native="toSetDate(index)" label-width="0px">
  10. <text :style="{color: item.week ? '' :'#999999'}">{{item.week ? item.week + '&nbsp;&nbsp;' +item.startTime + '&nbsp;&nbsp;' +item.endTime : '请选择上课时间'}}</text>
  11. </u-form-item>
  12. </u-swipe-action>
  13. <u-form-item label=" " label-width="0px">
  14. <view style="display: flex; justify-content: space-around;">
  15. <u-button type="success" :ripple="true" size="medium" :custom-style="{backgroundColor: '#ff6e3e'}" @click="addDate">新增</u-button>
  16. </view>
  17. </u-form-item>
  18. <u-form-item label="归属场馆" prop="venueName" right-icon="arrow-right" required @click.native="venueShow = true">
  19. <u-input v-model="form.venueName" placeholder="请选择归属场馆" disabled @click="venueShow = true" />
  20. </u-form-item>
  21. <u-form-item label="地址" prop="address" required>
  22. <u-input v-model="form.address" disabled placeholder="请输入地址" />
  23. </u-form-item>
  24. <u-form-item label="学生数量" prop="maxStudentCount" required>
  25. <u-input v-model="form.maxStudentCount" type="number" placeholder="请输入学生数量" />
  26. </u-form-item>
  27. </u-form>
  28. <u-popup v-model="classDate" mode="bottom" border-radius="30">
  29. <view class="dateForm">
  30. <u-form :model="selectForm" ref="selectForm" label-width="140">
  31. <u-form-item label="上课时间" prop="week" required>
  32. <u-radio-group v-model="selectForm.week">
  33. <u-radio v-for="(item, index) in weekList" :key="index" :name="item.name">
  34. {{ item.name }}
  35. </u-radio>
  36. </u-radio-group>
  37. </u-form-item>
  38. <u-form-item label="上课时间" prop="startTime" right-icon="arrow-right" required @click.native="()=>{startTimeShow = true;timeType = 1}">
  39. <u-input v-model="selectForm.startTime" placeholder="请选择上课时间" disabled @click="()=>{startTimeShow = true;timeType = 1}" />
  40. </u-form-item>
  41. <u-form-item label="下课时间" prop="endTime" right-icon="arrow-right" required @click.native="()=>{startTimeShow = true;timeType = 2}">
  42. <u-input v-model="selectForm.endTime" placeholder="请选择下课时间" disabled @click="()=>{startTimeShow = true;timeType = 2}" />
  43. </u-form-item>
  44. </u-form>
  45. <u-button type="warning" :ripple="true" :custom-style="{...customStyle, marginTop: '15px'}" @click="setDate()">确定</u-button>
  46. </view>
  47. </u-popup>
  48. <u-picker mode="time" v-model="startTimeShow" :params="startTimeParams" @confirm="setStartTime"></u-picker>
  49. <u-picker mode="selector" v-model="venueShow" :range="venueList" range-key="name" @confirm="setVenue"></u-picker>
  50. <view class="handle-fix-box">
  51. <u-button type="warning" shape="circle" :ripple="true" :custom-style="customStyle" @click="submitForm()">保存</u-button>
  52. </view>
  53. <u-top-tips ref="uTips"></u-top-tips>
  54. </view>
  55. </template>
  56. <script>
  57. import {
  58. mapGetters
  59. } from 'vuex'
  60. const NET = require('@/utils/request')
  61. const API = require('@/config/api')
  62. export default {
  63. computed: {
  64. ...mapGetters([
  65. 'mainColor',
  66. 'customStyle',
  67. ])
  68. },
  69. data() {
  70. return {
  71. form: {
  72. name: '',
  73. startTime: '',
  74. address: '',
  75. venueId: '',
  76. venueName: '',
  77. address: '',
  78. maxStudentCount: '',
  79. timeReqList: [{
  80. week: '',
  81. startTime: '',
  82. endTime: '',
  83. }],
  84. },
  85. rules: {
  86. name: [{
  87. required: true,
  88. message: '请输入班级名称',
  89. trigger: 'change'
  90. }],
  91. timeReqList: [{
  92. type: 'array',
  93. required: true,
  94. message: '请选择上课时间',
  95. trigger: 'change'
  96. }],
  97. venueName: [{
  98. required: true,
  99. message: '请选择归属场馆',
  100. trigger: 'change'
  101. }],
  102. address: [{
  103. required: true,
  104. message: '请输入地址',
  105. trigger: 'change'
  106. }],
  107. maxStudentCount: [{
  108. required: true,
  109. message: '请输入学生数量',
  110. trigger: 'change'
  111. }],
  112. },
  113. selectIndex: 0,
  114. selectForm: {
  115. week: '',
  116. startTime: '',
  117. endTime: '',
  118. },
  119. classDate: false,
  120. weekList: [{
  121. name: '周一'
  122. },
  123. {
  124. name: '周二'
  125. },
  126. {
  127. name: '周三'
  128. },
  129. {
  130. name: '周四'
  131. },
  132. {
  133. name: '周五'
  134. },
  135. {
  136. name: '周六'
  137. },
  138. {
  139. name: '周日'
  140. },
  141. ],
  142. startTimeShow: false,
  143. startTimeParams: {
  144. year: false,
  145. month: false,
  146. day: false,
  147. hour: true,
  148. minute: true,
  149. second: true
  150. },
  151. venueShow: false,
  152. venueList: [{name:'删除删除删除删除'},{name:'删除删除删除删除'},{name:'删除删除删除删除'},{name:'删除删除删除删除'},{name:'删除删除删除删除'},],
  153. options: [{
  154. text: '删除',
  155. style: {
  156. color: '#fa3534'
  157. }
  158. }]
  159. }
  160. },
  161. onLoad() {
  162. NET.request(API.getVenueList, {
  163. page: 1,
  164. size: 10000,
  165. }, 'POST').then(res => {
  166. this.venueList = this.res.data.row
  167. }).catch(error => {
  168. this.$refs.uTips.show({
  169. title: error.data.msg,
  170. type: 'warning',
  171. })
  172. })
  173. },
  174. onReady() {
  175. this.$refs.form.setRules(this.rules);
  176. },
  177. onShow() {},
  178. methods: {
  179. // 弹出设置时间
  180. toSetDate(index) {
  181. this.selectIndex = index
  182. this.selectForm = {
  183. week: this.form.timeReqList[index].week,
  184. startTime: this.form.timeReqList[index].startTime,
  185. endTime: this.form.timeReqList[index].endTime,
  186. }
  187. this.classDate = true
  188. },
  189. // 删除时间
  190. deleteDate(index, index1) {
  191. if (index1 == 0) {
  192. this.form.timeReqList.splice(index, 1);
  193. }
  194. },
  195. // 新增时间
  196. addDate() {
  197. this.form.timeReqList.push({
  198. week: '',
  199. startTime: '',
  200. endTime: '',
  201. })
  202. },
  203. // 设置上课时间
  204. setStartTime(date) {
  205. if (this.timeType == 1) {
  206. this.selectForm.startTime = date.hour + ':' + date.minute + ':' + date.second
  207. } else {
  208. this.selectForm.endTime = date.hour + ':' + date.minute + ':' + date.second
  209. }
  210. },
  211. // 设置上课时间
  212. setDate() {
  213. this.form.timeReqList[this.selectIndex] = {
  214. week: this.selectForm.week,
  215. startTime: this.selectForm.startTime,
  216. endTime: this.selectForm.endTime,
  217. }
  218. this.classDate = false
  219. },
  220. // 设置场馆
  221. setVenue(data) {
  222. this.form.venueId = this.venueList[data[0]].id
  223. this.form.venueName = this.venueList[data[0]].name
  224. this.form.address = this.venueList[data[0]].address
  225. },
  226. // 提交表单
  227. submitForm() {
  228. this.$refs.form.validate(valid => {
  229. if (valid) {
  230. NET.request(API.submitClassForm, {
  231. ...this.form,
  232. }, 'POST').then(res => {
  233. uni.removeStorageSync({
  234. key: 'extraLessonsUserList'
  235. })
  236. this.$refs.uTips.show({
  237. title: '提交成功',
  238. type: 'success',
  239. })
  240. setTimeout(() => {
  241. uni.navigateBack()
  242. }, 1000)
  243. }).catch(error => {
  244. this.$refs.uTips.show({
  245. title: '提交失败',
  246. type: 'warning',
  247. })
  248. })
  249. }
  250. });
  251. },
  252. },
  253. }
  254. </script>
  255. <style>
  256. page {
  257. width: 100%;
  258. height: 100%;
  259. position: relative;
  260. }
  261. </style>
  262. <style lang="scss" scoped>
  263. @import "@/static/css/themes.scss";
  264. .content {
  265. width: 100%;
  266. float: left;
  267. padding: 0 15px 60px 15px;
  268. box-sizing: border-box;
  269. .dateForm {
  270. padding: 20px;
  271. }
  272. }
  273. </style>