CourseManage.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  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="启用/禁用:" label-width="90px">
  15. <el-select
  16. v-model="filter.enable"
  17. style="width: 120px;"
  18. placeholder="启用/禁用"
  19. clearable
  20. >
  21. <el-option
  22. v-for="(val, key) in ABLE_TYPE"
  23. :key="key"
  24. :value="key * 1"
  25. :label="val"
  26. ></el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="创建时间:">
  30. <el-date-picker
  31. v-model="createTime"
  32. type="datetimerange"
  33. :picker-options="pickerOptions"
  34. range-separator="至"
  35. start-placeholder="创建开始时间"
  36. end-placeholder="创建结束时间"
  37. value-format="timestamp"
  38. align="right"
  39. unlink-panels
  40. >
  41. </el-date-picker>
  42. </el-form-item>
  43. </template>
  44. <el-form-item>
  45. <el-button
  46. v-if="checkPrivilege('button', 'select')"
  47. type="primary"
  48. @click="toPage(1)"
  49. >查询</el-button
  50. >
  51. </el-form-item>
  52. </el-form>
  53. <div class="part-box-action">
  54. <el-button
  55. type="success"
  56. icon="el-icon-download"
  57. v-if="checkPrivilege('button', 'TempleteDownload')"
  58. ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
  59. >
  60. <upload-button
  61. v-if="checkPrivilege('button', 'Import')"
  62. btn-icon="el-icon-circle-plus-outline"
  63. btn-content="批量导入"
  64. btn-type="success"
  65. :upload-url="uploadUrl"
  66. :format="['xls', 'xlsx']"
  67. @upload-error="uplaodError"
  68. @upload-success="uploadSuccess"
  69. >
  70. </upload-button>
  71. <el-button
  72. v-if="checkPrivilege('button', 'add')"
  73. type="primary"
  74. icon="el-icon-circle-plus-outline"
  75. @click="toAdd"
  76. >新增课程</el-button
  77. >
  78. </div>
  79. </div>
  80. <div class="part-box part-box-pad">
  81. <el-table ref="TableList" :data="courses">
  82. <el-table-column
  83. type="index"
  84. label="序号"
  85. width="70"
  86. :index="indexMethod"
  87. ></el-table-column>
  88. <el-table-column prop="courseName" label="课程名称"></el-table-column>
  89. <el-table-column prop="courseCode" label="课程编码"></el-table-column>
  90. <el-table-column
  91. prop="teachingRoomName"
  92. label="所属教研室"
  93. ></el-table-column>
  94. <el-table-column prop="clazzList" label="授课班级">
  95. <span slot-scope="scope">
  96. {{ scope.row.clazzList.map(item => item.name).join(",") }}
  97. </span>
  98. </el-table-column>
  99. <el-table-column prop="createTime" label="创建时间">
  100. <span slot-scope="scope">{{
  101. scope.row.createTime | timestampFilter
  102. }}</span>
  103. </el-table-column>
  104. <el-table-column prop="enable" label="启用/禁用" width="100">
  105. <template slot-scope="scope">
  106. {{ scope.row.enable | enableFilter }}
  107. </template>
  108. </el-table-column>
  109. <el-table-column label="操作" width="120px">
  110. <template slot-scope="scope">
  111. <el-button
  112. v-if="checkPrivilege('link', 'edit')"
  113. class="btn-primary"
  114. type="text"
  115. @click="toEdit(scope.row)"
  116. >编辑</el-button
  117. >
  118. <el-button
  119. v-if="checkPrivilege('link', 'Enable')"
  120. :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
  121. type="text"
  122. @click="toEnable(scope.row)"
  123. >{{ scope.row.enable ? "禁用" : "启用" }}</el-button
  124. >
  125. <!-- <el-button
  126. class="btn-danger"
  127. type="text"
  128. @click="toDelete(scope.row)"
  129. >删除</el-button
  130. > -->
  131. </template>
  132. </el-table-column>
  133. </el-table>
  134. <div class="part-page">
  135. <el-pagination
  136. background
  137. layout="total,prev, pager, next"
  138. :current-page="current"
  139. :total="total"
  140. :page-size="size"
  141. @current-change="toPage"
  142. >
  143. </el-pagination>
  144. </div>
  145. </div>
  146. <modify-course
  147. :instance="curCourse"
  148. @modified="getList"
  149. ref="ModifyCourse"
  150. ></modify-course>
  151. </div>
  152. </template>
  153. <script>
  154. import { courseListPage, deleteCourse, ableCourse } from "../api";
  155. import pickerOptions from "@/constants/datePickerOptions";
  156. import ModifyCourse from "../components/ModifyCourse";
  157. import UploadButton from "../../../components/UploadButton";
  158. import { ABLE_TYPE } from "@/constants/enumerate";
  159. export default {
  160. name: "course-manage",
  161. components: { ModifyCourse, UploadButton },
  162. data() {
  163. return {
  164. filter: {
  165. courseName: "",
  166. startCreateTime: "",
  167. endCreateTime: "",
  168. enable: ""
  169. },
  170. ABLE_TYPE,
  171. current: 1,
  172. size: this.GLOBAL.pageSize,
  173. total: 0,
  174. courses: [],
  175. curCourse: {},
  176. // import
  177. uploadUrl: "/api/admin/basic/course/data_import",
  178. downloadUrl: "/temps/courseTemplate.xlsx",
  179. dfilename: "课程导入模板.xlsx",
  180. // date-picker
  181. createTime: [],
  182. pickerOptions
  183. };
  184. },
  185. mounted() {
  186. this.getList();
  187. },
  188. methods: {
  189. async getList() {
  190. if (!this.checkPrivilege("list", "list")) return;
  191. const datas = {
  192. ...this.filter,
  193. pageNumber: this.current,
  194. pageSize: this.size
  195. };
  196. if (this.createTime) {
  197. datas.startCreateTime = this.createTime[0];
  198. datas.endCreateTime = this.createTime[1];
  199. }
  200. if (datas.enable !== null && datas.enable !== "")
  201. datas.enable = !!datas.enable;
  202. const data = await courseListPage(datas);
  203. this.courses = data.records;
  204. this.total = data.total;
  205. },
  206. toPage(page) {
  207. this.current = page;
  208. this.getList();
  209. },
  210. toAdd() {
  211. this.curCourse = {};
  212. this.$refs.ModifyCourse.open();
  213. },
  214. toEdit(row) {
  215. this.curCourse = row;
  216. this.$refs.ModifyCourse.open();
  217. },
  218. toDelete(row) {
  219. this.$confirm(`确定要删除课程【${row.courseName}】吗?`, "提示", {
  220. type: "warning"
  221. })
  222. .then(async () => {
  223. await deleteCourse([row.id]);
  224. this.$message.success("删除成功!");
  225. this.deletePageLastItem();
  226. })
  227. .catch(() => {});
  228. },
  229. toEnable(row) {
  230. const action = row.enable ? "禁用" : "启用";
  231. this.$confirm(`确定要${action}课程【${row.courseName}】吗?`, "提示", {
  232. type: "warning"
  233. })
  234. .then(async () => {
  235. const enable = !row.enable;
  236. await ableCourse({
  237. idList: [row.id],
  238. enable
  239. });
  240. row.enable = enable;
  241. this.$message.success("操作成功!");
  242. })
  243. .catch(() => {});
  244. },
  245. // import
  246. uplaodError(errorData) {
  247. this.$notify.error({ title: "错误提示", message: errorData.message });
  248. },
  249. uploadSuccess() {
  250. this.$message.success("文件上传成功,后台正在导入!");
  251. this.getList();
  252. }
  253. }
  254. };
  255. </script>