CourseManage.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <div class="course-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="课程名称:">
  7. <el-input
  8. style="width: 142px;"
  9. v-model.trim="filter.courseName"
  10. placeholder="请输入内容"
  11. clearable
  12. ></el-input>
  13. </el-form-item>
  14. <el-form-item label="创建时间:">
  15. <el-date-picker
  16. v-model="createTime"
  17. type="datetimerange"
  18. :picker-options="pickerOptions"
  19. range-separator="至"
  20. start-placeholder="开始时间"
  21. end-placeholder="结束时间"
  22. value-format="timestamp"
  23. align="right"
  24. unlink-panels
  25. >
  26. </el-date-picker>
  27. </el-form-item>
  28. <!-- <el-form-item label="所属教研室:">
  29. <teaching-room-select
  30. style="width: 142px;"
  31. v-model.trim="filter.staffRoomId"
  32. clearable
  33. ></teaching-room-select>
  34. </el-form-item> -->
  35. </template>
  36. <el-form-item>
  37. <el-button
  38. v-if="checkPrivilege('button', 'select')"
  39. type="primary"
  40. @click="toPage(1)"
  41. >查询</el-button
  42. >
  43. </el-form-item>
  44. </el-form>
  45. <div class="part-box-action">
  46. <el-button
  47. v-if="checkPrivilege('button', 'add')"
  48. type="primary"
  49. icon="el-icon-circle-plus-outline"
  50. @click="toAdd"
  51. >新增课程</el-button
  52. >
  53. <el-button v-if="checkPrivilege('button', 'TempleteDownload')"
  54. ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
  55. >
  56. <upload-button
  57. v-if="checkPrivilege('button', 'Import')"
  58. btn-icon="el-icon-upload"
  59. btn-content="批量导入"
  60. btn-type="primary"
  61. :upload-url="uploadUrl"
  62. :format="['xls', 'xlsx']"
  63. @upload-error="uplaodError"
  64. @upload-success="uploadSuccess"
  65. >
  66. </upload-button>
  67. </div>
  68. </div>
  69. <div class="part-box part-box-pad">
  70. <el-table ref="TableList" :data="courses">
  71. <el-table-column prop="courseName" label="课程名称"></el-table-column>
  72. <el-table-column prop="courseCode" label="课程编码"></el-table-column>
  73. <el-table-column
  74. prop="teachingRoomName"
  75. label="所属教研室"
  76. ></el-table-column>
  77. <el-table-column prop="clazz" label="授课班级"></el-table-column>
  78. <el-table-column prop="createTime" label="创建日期">
  79. <span slot-scope="scope">{{
  80. scope.row.createTime | timestampFilter
  81. }}</span>
  82. </el-table-column>
  83. <el-table-column label="操作" width="120px">
  84. <template slot-scope="scope">
  85. <el-button
  86. v-if="checkPrivilege('link', 'edit')"
  87. class="btn-primary"
  88. type="text"
  89. @click="toEdit(scope.row)"
  90. >编辑</el-button
  91. >
  92. <el-button
  93. v-if="checkPrivilege('link', 'delete')"
  94. class="btn-danger"
  95. type="text"
  96. @click="toDelete(scope.row)"
  97. >删除</el-button
  98. >
  99. </template>
  100. </el-table-column>
  101. </el-table>
  102. <div class="part-page">
  103. <el-pagination
  104. background
  105. layout="total,prev, pager, next"
  106. :current-page="current"
  107. :total="total"
  108. :page-size="size"
  109. @current-change="toPage"
  110. >
  111. </el-pagination>
  112. </div>
  113. </div>
  114. <modify-course
  115. :instance="curCourse"
  116. @modified="getList"
  117. ref="ModifyCourse"
  118. ></modify-course>
  119. </div>
  120. </template>
  121. <script>
  122. import { courseListPage, deleteCourse } from "../api";
  123. import pickerOptions from "@/constants/datePickerOptions";
  124. import ModifyCourse from "../components/ModifyCourse";
  125. import UploadButton from "../../../components/UploadButton";
  126. export default {
  127. name: "course-manage",
  128. components: { ModifyCourse, UploadButton },
  129. data() {
  130. return {
  131. filter: {
  132. courseName: "",
  133. startCreateTime: "",
  134. endCreateTime: ""
  135. },
  136. pickerOptions,
  137. current: 1,
  138. size: this.GLOBAL.pageSize,
  139. total: 0,
  140. courses: [],
  141. // import
  142. uploadUrl: "/api/admin/basic/course/data_import",
  143. downloadUrl: "/temps/课程导入模板.xlsx",
  144. dfilename: "课程导入模板.xlsx",
  145. // date-picker
  146. createTime: [],
  147. curCourse: {}
  148. };
  149. },
  150. mounted() {
  151. this.getList();
  152. },
  153. methods: {
  154. async getList() {
  155. if (!this.checkPrivilege("list", "list")) return;
  156. const datas = {
  157. ...this.filter,
  158. pageNumber: this.current,
  159. pageSize: this.size
  160. };
  161. if (this.createTime) {
  162. datas.startCreateTime = this.createTime[0];
  163. datas.endCreateTime = this.createTime[1];
  164. }
  165. const data = await courseListPage(datas);
  166. this.courses = data.records;
  167. this.total = data.total;
  168. },
  169. toPage(page) {
  170. this.current = page;
  171. this.getList();
  172. },
  173. toAdd() {
  174. this.curCourse = {};
  175. this.$refs.ModifyCourse.open();
  176. },
  177. toEdit(row) {
  178. this.curCourse = row;
  179. this.$refs.ModifyCourse.open();
  180. },
  181. toDelete(row) {
  182. this.$confirm(`确定要删除课程【${row.courseName}】吗?`, "提示", {
  183. cancelButtonClass: "el-button--danger is-plain",
  184. confirmButtonClass: "el-button--primary",
  185. type: "warning"
  186. })
  187. .then(async () => {
  188. await deleteCourse([row.id]);
  189. this.$message.success("删除成功!");
  190. this.deletePageLastItem();
  191. })
  192. .catch(() => {});
  193. },
  194. // import
  195. uplaodError(errorData) {
  196. this.$notify.error({ title: "错误提示", message: errorData.message });
  197. },
  198. uploadSuccess() {
  199. this.$message.success("文件上传成功,后台正在导入!");
  200. this.getList();
  201. }
  202. }
  203. };
  204. </script>