teamCourseList.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <template>
  2. <div class='m-container'>
  3. <h2>
  4. <div class="squrt"></div>课表列表
  5. </h2>
  6. <div class="m-core">
  7. <!-- 搜索类型 -->
  8. <el-form :inline="true"
  9. class="searchForm"
  10. v-model="searchForm">
  11. <el-form-item>
  12. <el-input v-model="searchForm.search"
  13. @keyup.enter.native='search'
  14. placeholder="乐团名或VIP课名" />
  15. </el-form-item>
  16. <el-form-item>
  17. <el-select v-model="searchForm.schoolId"
  18. clearable
  19. filterable
  20. placeholder="请选择教学点">
  21. <el-option v-for="(item, index) in schoolList"
  22. :key="index"
  23. :value="item.id"
  24. :label="item.name"></el-option>
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-select v-model="searchForm.teacherIdList"
  29. clearable
  30. filterable
  31. placeholder="请选择老师">
  32. <el-option v-for="(item, index) in teacherList"
  33. :key="index"
  34. :value="item.id"
  35. :label="item.realName"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-select class='multiple'
  40. v-model="searchForm.organIdList"
  41. filterable
  42. clearable
  43. placeholder="请选择分部">
  44. <el-option v-for="(item,index) in organList"
  45. :key="index"
  46. :label="item.name"
  47. :value="item.id"></el-option>
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item>
  51. <el-select v-model="searchForm.courseType"
  52. clearable
  53. filterable
  54. placeholder="课程类型">
  55. <el-option v-for="(item, index) in courseType"
  56. :key="index"
  57. :value="item.value"
  58. :label="item.label"></el-option>
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item>
  62. <el-select v-model="searchForm.courseStatus"
  63. clearable
  64. filterable
  65. placeholder="课程状态">
  66. <el-option label="未开始"
  67. value="NOT_START"></el-option>
  68. <el-option label="进行中"
  69. value="UNDERWAY"></el-option>
  70. <el-option label="已结束"
  71. value="OVER"></el-option>
  72. </el-select>
  73. </el-form-item>
  74. <el-form-item>
  75. <el-date-picker v-model="searchForm.timer"
  76. style="width:420px;"
  77. type="daterange"
  78. value-format="yyyy-MM-dd"
  79. range-separator="至"
  80. start-placeholder="开始日期"
  81. end-placeholder="结束日期">
  82. </el-date-picker>
  83. </el-form-item>
  84. <el-form-item>
  85. <div class='searchBtn'
  86. @click="search">搜索</div>
  87. </el-form-item>
  88. </el-form>
  89. <div class="btnWraps">
  90. </div>
  91. <!-- 列表 -->
  92. <div class="tableWrap">
  93. <el-table :data='tableList'
  94. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  95. <el-table-column align='center'
  96. prop="organName"
  97. label="分部名称">
  98. </el-table-column>
  99. <el-table-column align='center'
  100. prop="id"
  101. label="课程编号">
  102. </el-table-column>
  103. <el-table-column align='center'
  104. width="200px"
  105. label="时间">
  106. <template slot-scope="scope">
  107. {{ scope.row.startClassTime ? scope.row.startClassTime.substr(0, 16) : '' }}-{{ scope.row.endClassTime ? scope.row.endClassTime.substr(11,5) : ''}}
  108. </template>
  109. </el-table-column>
  110. <el-table-column align='center'
  111. prop="classGroupName"
  112. label="班级名称">
  113. </el-table-column>
  114. <el-table-column align='center'
  115. prop="name"
  116. label="课程名称">
  117. </el-table-column>
  118. <el-table-column align='center'
  119. label="课程类型">
  120. <template slot-scope="scope">
  121. <div>
  122. {{ scope.row.type | coursesType}}
  123. </div>
  124. </template>
  125. </el-table-column>
  126. <el-table-column align='center'
  127. label="教学模式">
  128. <template slot-scope="scope">
  129. <div>
  130. {{ scope.row.teachMode | teachMode}}
  131. </div>
  132. </template>
  133. </el-table-column>
  134. <el-table-column align='center'
  135. prop="schoolName"
  136. label="教学点">
  137. </el-table-column>
  138. <el-table-column align='center'
  139. prop="courseScheduleStatus"
  140. label="课程状态">
  141. <template slot-scope="scope">
  142. <div>
  143. {{ scope.row.status | coursesStatus }}
  144. </div>
  145. </template>
  146. </el-table-column>
  147. <el-table-column align='center'
  148. label="是否签到">
  149. <template slot-scope="scope">
  150. <div>
  151. {{ scope.row.isSignIn | attendanceType}}
  152. </div>
  153. </template>
  154. </el-table-column>
  155. <el-table-column align='center'
  156. label="是否签退">
  157. <template slot-scope="scope">
  158. <div>
  159. {{ scope.row.isSignOut | attendanceOutType}}
  160. </div>
  161. </template>
  162. </el-table-column>
  163. <el-table-column align='center'
  164. prop="isCallNames"
  165. label="是否点名">
  166. <template slot-scope="scope">
  167. {{ scope.row.isCallNames ? '是' : '否' }}
  168. </template>
  169. </el-table-column>
  170. <el-table-column align='center'
  171. prop="teacherName"
  172. label="指导老师">
  173. </el-table-column>
  174. <el-table-column align='center'
  175. label="详情">
  176. <template slot-scope="scope">
  177. <div>
  178. <el-button type="text"
  179. @click="lookDetail(scope.row)">详情</el-button>
  180. </div>
  181. </template>
  182. </el-table-column>
  183. </el-table>
  184. <pagination :total="rules.total"
  185. :page.sync="rules.page"
  186. :limit.sync="rules.limit"
  187. :page-sizes="rules.page_size"
  188. @pagination="getList" />
  189. </div>
  190. </div>
  191. <el-dialog title="课表详情"
  192. :visible.sync="classVisible"
  193. :before-close="closeClassVisible">
  194. <el-form :model="maskForm"
  195. :inline="true">
  196. <el-form-item label="老师姓名">
  197. <!-- <el-input v-model="maskForm.teacherName"
  198. disabled></el-input> -->
  199. <div class="inputStyle">{{maskForm.teacherName}}</div>
  200. </el-form-item>
  201. <el-form-item label="课程模式">
  202. <!-- <el-input :value="maskForm.teachMode | teachMode"
  203. disabled></el-input> -->
  204. <div class="inputStyle">{{maskForm.teachMode| teachMode}}</div>
  205. <!-- <span>{{maskForm.teachMode }}</span> -->
  206. </el-form-item>
  207. <el-form-item label="课程类型">
  208. <!-- <el-input :value="maskForm.type |classType"
  209. disabled></el-input> -->
  210. <div class="inputStyle">{{maskForm.type|coursesType}}</div>
  211. </el-form-item>
  212. <!-- courseScheduleStatus -->
  213. <el-form-item label="课程状态">
  214. <!-- <el-input :value="maskForm.type |classType"
  215. disabled></el-input> -->
  216. <div class="inputStyle">{{maskForm.status | coursesStatus}}</div>
  217. </el-form-item>
  218. <el-form-item label="签到时间">
  219. <!-- <el-input v-model=" maskForm.signInTime"
  220. disabled></el-input> -->
  221. <div class="inputStyle">{{maskForm.signInTime}}</div>
  222. </el-form-item>
  223. <el-form-item label="签退时间">
  224. <!-- <el-input v-model="maskForm.signOutTime"
  225. disabled></el-input> -->
  226. <div class="inputStyle">{{maskForm.signOutTime}}</div>
  227. </el-form-item>
  228. <el-form-item label="是否点名">
  229. <!-- <el-input :value="maskForm.isCallNames | isCall"
  230. disabled></el-input> -->
  231. <div class="inputStyle">{{maskForm.isCallNames | isCall}}</div>
  232. </el-form-item>
  233. <el-form-item label="签到状态">
  234. <!-- <el-input :value=" maskForm.isSignIn | attendanceType"
  235. disabled></el-input> -->
  236. <div class="inputStyle"
  237. :class="maskForm.isSignIn==1?'':'red'">{{ maskForm.isSignIn | attendanceType}}</div>
  238. </el-form-item>
  239. <el-form-item label="签退状态">
  240. <!-- <el-input :value=" maskForm.isSignOut | attendanceOutType"
  241. disabled></el-input> -->
  242. <div class="inputStyle"
  243. :class="maskForm.isSignIn==1?'':'red'">{{ maskForm.isSignOut | attendanceOutType}}</div>
  244. </el-form-item>
  245. <el-form-item label="备注">
  246. <!-- <el-input :value=" maskForm.isSignOut | attendanceOutType"
  247. disabled></el-input> -->
  248. <div class="inputStyle">{{ maskForm.remark}}</div>
  249. </el-form-item>
  250. </el-form>
  251. <el-tabs v-model="activeName"
  252. v-if="maskForm.status != 'NOT_START'"
  253. type="card"
  254. @tab-click="handleClick">
  255. <el-tab-pane label="点名"
  256. name="first">
  257. <div v-if="activeName == 'first'">
  258. <!-- studentRollCall -->
  259. <studentRollCall :courseScheduleId='maskForm.id'>
  260. </studentRollCall>
  261. </div>
  262. </el-tab-pane>
  263. <el-tab-pane label="GPS定位"
  264. v-if="maskForm.teachMode == 'OFFLINE'"
  265. name="second">
  266. <div v-if="activeName == 'second'">
  267. <gpsLoction :courseScheduleId='maskForm.id'></gpsLoction>
  268. </div>
  269. </el-tab-pane>
  270. <el-tab-pane label="作业"
  271. name="third">
  272. <div v-if="activeName == 'third'">
  273. <studentWork :courseScheduleId='maskForm.id'></studentWork>
  274. </div>
  275. </el-tab-pane>
  276. </el-tabs>
  277. </el-dialog>
  278. </div>
  279. </template>
  280. <script>
  281. import pagination from '@/components/Pagination/index'
  282. import { getTeacher, getMusicGroupAllClass, superFindCourseSchedules, getEmployeeOrgan } from '@/api/buildTeam'
  283. import { getSchool } from '@/api/systemManage'
  284. import { courseType } from '@/utils/searchArray'
  285. import studentRollCall from './componentCourse/studentRollCall'
  286. import gpsLoction from './componentCourse/gpsLocation'
  287. import studentWork from './componentCourse/studentWork'
  288. let nowTime = new Date()
  289. nowTime = nowTime.getFullYear() + '-' + (nowTime.getMonth() + 1) + '-' + nowTime.getDate()
  290. export default {
  291. data () {
  292. return {
  293. classVisible: false,
  294. timerVisible: false,
  295. courseVisible: false,
  296. courseType: courseType,
  297. searchForm: {
  298. organIdList: null,
  299. courseStatus: null,
  300. courseType: null,
  301. timer: [nowTime, nowTime], // 时间
  302. class: null,
  303. search: null, // 乐团名称 编号 vip课名称
  304. teacherIdList: null, // 老师编号
  305. schoolId: null // 教学点编号
  306. },
  307. tableList: [],
  308. searchLsit: [],
  309. organList: [],
  310. rules: {
  311. // 分页规则
  312. limit: 10, // 限制显示条数
  313. page: 1, // 当前页
  314. total: 0, // 总条数
  315. page_size: [10, 20, 40, 50] // 选择限制显示条数
  316. },
  317. teacherList: [],
  318. schoolList: [],
  319. maskForm: {},
  320. activeName: "first"
  321. // classList: []
  322. }
  323. },
  324. components: {
  325. pagination,
  326. studentRollCall,
  327. gpsLoction,
  328. studentWork
  329. },
  330. activated () {
  331. this.init();
  332. },
  333. mounted () {
  334. this.init();
  335. this.getList();
  336. // 获取所有老师
  337. getTeacher().then(res => {
  338. if (res.code == 200) {
  339. this.teacherList = res.data;
  340. }
  341. })
  342. // 获取教学点
  343. getSchool().then(res => {
  344. if (res.code == 200) {
  345. this.schoolList = res.data
  346. }
  347. })
  348. // 获取班级列表
  349. // getMusicGroupAllClass().then(res => {
  350. // if (res.code == 200) {
  351. // this.classList = res.data;
  352. // }
  353. // })
  354. // 获取分部
  355. getEmployeeOrgan().then(res => {
  356. if (res.code == 200) {
  357. this.organList = res.data;
  358. }
  359. })
  360. },
  361. methods: {
  362. /**
  363. * courseStatus: '', // 课程类型
  364. courseType: '', // 课程状态
  365. timer:[] // 时间
  366. *
  367. */
  368. init () {
  369. this.getList();
  370. // 获取所有老师
  371. getTeacher().then(res => {
  372. if (res.code == 200) {
  373. this.teacherList = res.data;
  374. }
  375. })
  376. // 获取班级列表
  377. // getMusicGroupAllClass().then(res => {
  378. // if (res.code == 200) {
  379. // this.classList = res.data;
  380. // }
  381. // })
  382. getEmployeeOrgan().then(res => {
  383. if (res.code == 200) {
  384. this.organList = res.data;
  385. }
  386. })
  387. },
  388. search () {
  389. this.rules.page = 1;
  390. this.getList();
  391. },
  392. getList () {
  393. let searchForm = this.searchForm
  394. if (!searchForm.timer) {
  395. searchForm.timer = []
  396. }
  397. let obj = {
  398. courseStatus: searchForm.courseStatus || null,
  399. courseType: searchForm.courseType || null,
  400. startTime: searchForm.timer[0] || null,
  401. endTime: searchForm.timer[1] || null,
  402. page: this.rules.page, rows: this.rules.limit,
  403. classGroupId: searchForm.class || null,
  404. organIdList: searchForm.organIdList || null,
  405. search: searchForm.search || null,
  406. teacherIdList: searchForm.teacherIdList || null,
  407. schoolId: searchForm.schoolId || null
  408. }
  409. superFindCourseSchedules(obj).then(res => {
  410. if (res.code == 200) {
  411. this.tableList = res.data.rows;
  412. this.rules.total = res.data.total;
  413. }
  414. })
  415. },
  416. lookDetail (row) {
  417. this.maskForm = row
  418. this.activeName = 'first'
  419. // console.log(row)
  420. this.classVisible = true;
  421. },
  422. handleClick (tab, event) {
  423. // console.log(tab, event);
  424. },
  425. closeClassVisible () {
  426. this.activeName = null
  427. this.classVisible = false;
  428. }
  429. },
  430. filters: {
  431. isCall (val) {
  432. if (val == 0) {
  433. return '未点名'
  434. } else if (val == 1) {
  435. return '已点名'
  436. }
  437. }
  438. }
  439. }
  440. </script>
  441. <style lang="scss" scoped>
  442. .visible {
  443. visibility: hidden;
  444. }
  445. .cl-container {
  446. .topFrom {
  447. margin: 20px 30px 0;
  448. .classlist {
  449. display: flex;
  450. flex-direction: row;
  451. justify-content: flex-start;
  452. align-items: center;
  453. ul {
  454. li {
  455. list-style: none;
  456. }
  457. }
  458. }
  459. }
  460. .searchForm {
  461. margin: 0 30px;
  462. }
  463. }
  464. .btnWraps {
  465. display: flex;
  466. flex-direction: row;
  467. justify-content: flex-start;
  468. div {
  469. margin-right: 20px;
  470. }
  471. }
  472. .inputStyle {
  473. width: 180px;
  474. }
  475. .red {
  476. color: red;
  477. }
  478. </style>