scourse.vue 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079
  1. <template>
  2. <div class="pb_content" style="height: auto">
  3. <div class="pb_head top">
  4. <div>
  5. <span>项目管理</span>
  6. <span class="subClick" @click="
  7. goTo('/works?userid=' + userid + '&oid=' + oid + '&org=' + org)
  8. ">评价管理</span>
  9. </div>
  10. <div class="student_button">
  11. <!-- <el-button type="primary" class="bgColor" @click="openCourse">协同编辑</el-button> -->
  12. <el-button type="primary" class="bgColor" @click="goToCourse()">添加项目</el-button>
  13. </div>
  14. </div>
  15. <div class="pb_content_body" style="height: 100%">
  16. <div class="student_head">
  17. <div class="choose">
  18. <!-- <div class="student_search">
  19. <span>项目筛选</span>
  20. <el-select v-model="groupA" @change="search">
  21. <el-option value="0" label="我的项目"></el-option>
  22. <el-option value="1" label="他人项目"></el-option>
  23. </el-select>
  24. </div> -->
  25. <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
  26. <span>{{ item.name }}</span>
  27. <el-select v-model="courseTypeId[item.id]" placeholder="请选择" @change="getTypeName">
  28. <el-option label="全部" value="1">全部</el-option>
  29. <el-option v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.name" :value="item1.id">
  30. </el-option>
  31. </el-select>
  32. </div>
  33. <div @click="clear" class="clear">重置</div>
  34. </div>
  35. <div class="student_right">
  36. <div class="head_left">
  37. <el-input v-model="courseName" class="student_input" placeholder="请输入项目名称"></el-input>
  38. <el-button class="course_button" @click="searchCourse">查询</el-button>
  39. </div>
  40. </div>
  41. </div>
  42. <div class="student_table">
  43. <div class="course_box">
  44. <div class="out_box" v-for="(item, index) in course" :key="index">
  45. <!-- <div class="myCourse" v-if="item.isCourseType == 1 && groupA == 0">
  46. 我的项目
  47. </div>
  48. <div class="myCourse" v-else-if="groupA == 1">
  49. 他人项目
  50. </div>
  51. <div class="xtCourse" v-else>协同项目</div> -->
  52. <div class="tup">
  53. <img :src="
  54. item.cover != null && item.cover != ''
  55. ? JSON.parse(item.cover).length > 0
  56. ? JSON.parse(item.cover)[0].url
  57. : mr
  58. : mr
  59. " alt />
  60. </div>
  61. <!-- <div class="bottom_box">
  62. <div>{{ item.title }}</div>
  63. <div class="kc_t" v-if="groupA == '1'">
  64. 创建老师:{{ item.uname }}
  65. </div>
  66. <div class="kc_time">{{ item.time }}</div>
  67. </div> -->
  68. <div class="bottom_box">
  69. <div>{{ item.title }}</div>
  70. <div class="kc_t">
  71. 创建学生:{{ item.uname }}
  72. </div>
  73. <div class="kc_time">
  74. <span style="color: #4b4b4b">创建日期:</span>{{ item.time }}
  75. </div>
  76. <div class="kc_time">
  77. <span style="color: #4b4b4b">修改日期:</span>{{ item.utime }}
  78. </div>
  79. </div>
  80. <div class="three_bottom">
  81. <!-- <div @click="jump(item.courseId)">评课</div> -->
  82. <div @click="get(item.courseId)">查看内容</div>
  83. <div @click="goToCourse(item.courseId)">
  84. 修改
  85. </div>
  86. <!-- <div v-if="groupA == '0'" @click="
  87. goTo(
  88. '/works?cid=' +
  89. item.courseId +
  90. '&userid=' +
  91. userid +
  92. '&oid=' +
  93. oid +
  94. '&org=' +
  95. org
  96. )
  97. ">
  98. 报告
  99. </div> -->
  100. <!-- <div v-if="(item.isCourseType == 1)" @click="deleteCourse(item.courseId)">
  101. 删除
  102. </div> -->
  103. <!-- <div class="more">
  104. <span style="font-size:18px;font-weight:700">...</span>
  105. <div>
  106. <span @click="copyCourse(item.courseId)">复制</span>
  107. <span @click="get(item.courseId)">查看</span>
  108. </div>
  109. </div> -->
  110. </div>
  111. </div>
  112. <div class="course_empty" v-if="course.length == 0">暂无数据</div>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="student_page">
  117. <el-pagination background layout="prev, pager, next" :page-size="10" :total="total" v-if="page && course.length"
  118. style="padding-bottom: 20px" @current-change="handleCurrentChange"></el-pagination>
  119. </div>
  120. <el-dialog :visible.sync="dialogVisible1" size="tiny">
  121. <img width="100%" :src="dialogImageUrl" alt />
  122. </el-dialog>
  123. <el-dialog title="查看提问" :visible.sync="dialogVisible" :append-to-body="true" width="750px"
  124. :before-close="handleClose" class="dialog_diy">
  125. <div>
  126. <div class="a_addBox">
  127. <CourseProblem :problemCourse="problemCourse"></CourseProblem>
  128. </div>
  129. </div>
  130. <span slot="footer" class="dialog-footer">
  131. <el-button @click="dialogVisible = false">关 闭</el-button>
  132. </span>
  133. </el-dialog>
  134. <el-dialog title="查看协同项目" :visible.sync="dialogVisibleCourse" :append-to-body="true" width="850px"
  135. :before-close="handleClose" class="dialog_diy">
  136. <div class="ct_box">
  137. <div class="out_box" v-for="(item, index) in courseTeam" :key="index" style="margin-left: 15px">
  138. <div class="tup">
  139. <img :src="
  140. item.cover != null && item.cover != ''
  141. ? JSON.parse(item.cover).length > 0
  142. ? JSON.parse(item.cover)[0].url
  143. : mr
  144. : mr
  145. " alt />
  146. </div>
  147. <div class="bottom_box">
  148. <div>{{ item.title }}</div>
  149. <div class="kc_t">创建老师:{{ item.uname }}</div>
  150. <div class="kc_time">{{ item.time }}</div>
  151. </div>
  152. <div class="three_bottom">
  153. <div @click="jump(item.courseId)">查看内容</div>
  154. <div @click="
  155. goTo(
  156. '/studentAddCourse?cid=' +
  157. item.courseId +
  158. '&userid=' +
  159. userid +
  160. '&oid=' +
  161. oid +
  162. '&org=' +
  163. org
  164. )
  165. ">
  166. 编辑
  167. </div>
  168. </div>
  169. </div>
  170. <div class="course_empty" v-if="courseTeam.length == 0">暂无数据</div>
  171. </div>
  172. <span slot="footer" class="dialog-footer">
  173. <el-button @click="dialogVisibleCourse = false">关 闭</el-button>
  174. </span>
  175. </el-dialog>
  176. </div>
  177. </template>
  178. <script>
  179. import "../../common/aws-sdk-2.235.1.min";
  180. import EditorBar from "../../components/tools/wangEnduit";
  181. import CourseProblem from "./components/courseProblem";
  182. export default {
  183. components: { EditorBar, CourseProblem },
  184. data() {
  185. return {
  186. itemCount: 1,
  187. courseTitle: "",
  188. courseText: "",
  189. courseTime: "",
  190. isLoading: false,
  191. fileList: [],
  192. fileList1: [],
  193. homeworkList: [{ name: "" }],
  194. formLabelWidth: "100px",
  195. dialogVisible: false,
  196. dialogVisible1: false,
  197. dialogVisibleCourse: false,
  198. dialogImageUrl: "",
  199. group: "",
  200. userid: this.$route.query.userid,
  201. oid: this.$route.query.oid,
  202. org: this.$route.query.org,
  203. Juri: "",
  204. groupList: [],
  205. JuriList: [],
  206. page: 1,
  207. total: 0,
  208. tableData: [],
  209. now: "",
  210. courseDetail: {},
  211. addCourse: {},
  212. groupA: "1",
  213. classX: "",
  214. course: [],
  215. courseName: "",
  216. mr: require("../../assets/icon/kc1.png"),
  217. CourseType: [],
  218. CourseTypeJson: {},
  219. courseTypeId: {},
  220. courseTypeSon: [],
  221. isChoose: 0,
  222. problemCourse: null, //查看提问的项目
  223. courseTeam: [],
  224. };
  225. },
  226. methods: {
  227. change(val) {
  228. console.log(val);
  229. },
  230. time() {
  231. if (!this.now) {
  232. this.now = new Date().getTime();
  233. return true;
  234. } else {
  235. let time = new Date().getTime();
  236. if (time - this.now > 3000) {
  237. this.now = time;
  238. return true;
  239. } else {
  240. return false;
  241. }
  242. }
  243. },
  244. addHomeworkBox() {
  245. this.homeworkList.push({ name: "" });
  246. this.itemCount++;
  247. },
  248. reduceHomeworkBox() {
  249. var a = this.homeworkList;
  250. a.splice(a.length - 1);
  251. this.itemCount--;
  252. },
  253. goTo(path) {
  254. this.$router.push(path);
  255. },
  256. goToCourse(courseId) {
  257. if (courseId) {
  258. this.$router.push(
  259. "/studentAddCourse?cid=" +
  260. courseId +
  261. "&userid=" +
  262. this.userid +
  263. "&oid=" +
  264. this.oid +
  265. "&org=" +
  266. this.org
  267. );
  268. } else {
  269. this.$router.push(
  270. "/studentAddCourse?userid=" +
  271. this.userid +
  272. "&oid=" +
  273. this.oid +
  274. "&org=" +
  275. this.org
  276. );
  277. }
  278. // this.$router.push(path);
  279. },
  280. tableRowClassName({ row, rowIndex }) {
  281. if ((rowIndex + 1) % 2 === 0) {
  282. return "even_row";
  283. } else {
  284. return "";
  285. }
  286. },
  287. jump(cid) {
  288. // window.open(
  289. // "//pbl.cocorobo.cn/pbl-student-table/dist/#/courseDetail?courseId=" +
  290. // cid +
  291. // "&userid=" +
  292. // this.userid
  293. // );
  294. window.parent.postMessage({ cid: cid, screenType: "2" }, "*");
  295. },
  296. get(cid){
  297. window.parent.postMessage({ cid: cid, screenType: "3" }, "*");
  298. },
  299. handle_remove(file, fileList) {
  300. var _tmp = this.fileList;
  301. for (var i = 0, len = _tmp.length; i < len; i++) {
  302. if (_tmp[i].uid == file.uid) {
  303. _tmp.splice(i, 1);
  304. break;
  305. }
  306. this.fileList = _tmp;
  307. }
  308. },
  309. handle_remove1(file, fileList) {
  310. var _tmp = this.fileList1;
  311. for (var i = 0, len = _tmp.length; i < len; i++) {
  312. if (_tmp[i].uid == file.uid) {
  313. _tmp.splice(i, 1);
  314. break;
  315. }
  316. this.fileList1 = _tmp;
  317. }
  318. },
  319. handleCurrentChange(val) {
  320. // console.log(`当前页: ${val}`);
  321. this.page = val;
  322. this.getCourse();
  323. },
  324. init() { },
  325. handleClose(done) {
  326. done();
  327. },
  328. handleRemove(file, fileList) {
  329. console.log(file, fileList);
  330. },
  331. handlePictureCardPreview(file) {
  332. this.dialogImageUrl = file.url;
  333. this.dialogVisible1 = true;
  334. },
  335. onExceed() {
  336. this.$message.error("项目海报仅支持上传一张,请删除后再进行上传");
  337. },
  338. //uuid生成
  339. guid() {
  340. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  341. /[xy]/g,
  342. function (c) {
  343. var r = (Math.random() * 16) | 0,
  344. v = c == "x" ? r : (r & 0x3) | 0x8;
  345. return v.toString(16);
  346. }
  347. );
  348. },
  349. time() {
  350. if (!this.now) {
  351. this.now = new Date().getTime();
  352. return true;
  353. } else {
  354. let time = new Date().getTime();
  355. if (time - this.now > 3000) {
  356. this.now = time;
  357. return true;
  358. } else {
  359. return false;
  360. }
  361. }
  362. },
  363. searchCourse() {
  364. this.page = 1;
  365. this.getCourse();
  366. },
  367. clear() {
  368. for (var i = 0; i < this.CourseType[0].length; i++) {
  369. this.courseTypeId[this.CourseType[0][i].id] = "";
  370. }
  371. this.getCourse();
  372. },
  373. getCourse() {
  374. if (!this.loading) {
  375. this.loading = this.openLoading(
  376. document.querySelector(".student_table")
  377. );
  378. }
  379. var typeE = [];
  380. var typea, typeb, typec, typed;
  381. if (this.isChoose == 1) {
  382. for (var i = 0; i < this.CourseType[0].length; i++) {
  383. if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
  384. typeE.push(this.CourseType[0][i].id);
  385. } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
  386. if (this.CourseType[0][i].name == "年级") {
  387. typea = this.courseTypeId[this.CourseType[0][i].id];
  388. } else if (this.CourseType[0][i].name == "专栏") {
  389. typeb = this.courseTypeId[this.CourseType[0][i].id];
  390. } else if (this.CourseType[0][i].name == "栏目") {
  391. typeb = this.courseTypeId[this.CourseType[0][i].id];
  392. } else if (this.CourseType[0][i].name == "学院") {
  393. typeb = this.courseTypeId[this.CourseType[0][i].id];
  394. } else if (this.CourseType[0][i].name == "新技能") {
  395. typec = this.courseTypeId[this.CourseType[0][i].id];
  396. } else if (this.CourseType[0][i].name == "学科") {
  397. typed = this.courseTypeId[this.CourseType[0][i].id];
  398. }
  399. this.courseTypeSon.push(
  400. this.courseTypeId[this.CourseType[0][i].id]
  401. );
  402. }
  403. }
  404. }
  405. this.isLoading = true;
  406. let params = {
  407. type: this.groupA,
  408. uid: this.userid,
  409. oid: this.oid,
  410. typea: typea != undefined ? typea : "",
  411. typeb: typeb != undefined ? typeb : "",
  412. typec: typec != undefined ? typec : "",
  413. typed: typed != undefined ? typed : "",
  414. typeE: typeE.join(","),
  415. cu: "",
  416. cn: this.courseName,
  417. page: this.page,
  418. };
  419. this.ajax
  420. .get(this.$store.state.api + "selectStudentCourseNew2", params)
  421. .then((res) => {
  422. this.loading.close();
  423. this.loading = "";
  424. this.isLoading = false;
  425. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  426. this.course = res.data[0];
  427. })
  428. .catch((err) => {
  429. console.error(err);
  430. });
  431. },
  432. getTypeName() {
  433. this.$forceUpdate();
  434. this.page = 1;
  435. this.isChoose = 1;
  436. this.getCourse();
  437. },
  438. // searchCourse() {
  439. // this.isLoading = true;
  440. // let params = {
  441. // cu: "",
  442. // cn: this.courseName,
  443. // page: this.page,
  444. // };
  445. // this.ajax
  446. // .get(this.$store.state.api + "searchCourse", params)
  447. // .then((res) => {
  448. // this.isLoading = false;
  449. // this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  450. // this.course = res.data[0];
  451. // })
  452. // .catch((err) => {
  453. // this.isLoading = false;
  454. // console.error(err);
  455. // });
  456. // },
  457. deleteCourse(cid) {
  458. // if (this.time()) {
  459. this.$confirm("确定删除此项目吗?", "提示", {
  460. confirmButtonText: "确定",
  461. cancelButtonText: "取消",
  462. type: "warning",
  463. })
  464. .then(() => {
  465. const loading = this.openLoading(
  466. document.querySelector(".student_table")
  467. );
  468. this.isLoading = true;
  469. let params = {
  470. cid: cid,
  471. };
  472. this.ajax
  473. .get(this.$store.state.api + "deleteCourse", params)
  474. .then((res) => {
  475. loading.close();
  476. this.isLoading = false;
  477. this.$message.success("删除成功");
  478. this.getCourse();
  479. })
  480. .catch((err) => {
  481. console.error(err);
  482. });
  483. })
  484. .catch(() => {
  485. loading.close();
  486. this.isLoading = false;
  487. return;
  488. });
  489. // }
  490. },
  491. selectType() {
  492. this.ajax
  493. .get(this.$store.state.api + "selectType")
  494. .then((res) => {
  495. this.CourseType = res.data;
  496. for (var i = 0; i < res.data[0].length; i++) {
  497. if (!this.cid) {
  498. this.courseTypeId[res.data[0][i].id] = "";
  499. }
  500. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  501. if (res.data[0][i].name == "栏目") {
  502. this.CourseType[0][i].name = "主题";
  503. }
  504. }
  505. for (var j = 0; j < res.data[1].length; j++) {
  506. if (res.data[0][i].id == res.data[1][j].pid) {
  507. if (!this.CourseTypeJson[res.data[0][i].id]) {
  508. this.CourseTypeJson[res.data[0][i].id] = [];
  509. }
  510. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); //去除公共分类
  511. }
  512. }
  513. }
  514. this.selectTypeByOid();
  515. this.selectTypeByOrg();
  516. })
  517. .catch((err) => {
  518. console.error(err);
  519. });
  520. },
  521. selectTypeByOid() {
  522. let params = {
  523. oid: this.oid,
  524. };
  525. this.ajax
  526. .get(this.$store.state.api + "selectTypeByOid", params)
  527. .then((res) => {
  528. for (var i = 0; i < res.data[0].length; i++) {
  529. for (var j = 0; j < res.data[1].length; j++) {
  530. if (res.data[0][i].id == res.data[1][j].pid) {
  531. if (!this.CourseTypeJson[res.data[0][i].id]) {
  532. this.CourseTypeJson[res.data[0][i].id] = [];
  533. }
  534. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  535. }
  536. }
  537. }
  538. this.$forceUpdate();
  539. })
  540. .catch((err) => {
  541. console.error(err);
  542. });
  543. },
  544. selectTypeByOrg() {
  545. let params = {
  546. oid: this.org,
  547. };
  548. this.ajax
  549. .get(this.$store.state.api + "selectTypeByOrg", params)
  550. .then((res) => {
  551. for (var i = 0; i < res.data[0].length; i++) {
  552. for (var j = 0; j < res.data[1].length; j++) {
  553. if (res.data[0][i].id == res.data[1][j].pid) {
  554. if (!this.CourseTypeJson[res.data[0][i].id]) {
  555. this.CourseTypeJson[res.data[0][i].id] = [];
  556. }
  557. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  558. }
  559. }
  560. }
  561. this.$forceUpdate();
  562. })
  563. .catch((err) => {
  564. console.error(err);
  565. });
  566. },
  567. openCourse() {
  568. this.dialogVisibleCourse = true;
  569. this.getTeamCourse();
  570. },
  571. getTeamCourse() {
  572. let params = {
  573. uid: this.userid,
  574. oid: this.oid,
  575. };
  576. this.ajax
  577. .get(this.$store.state.api + "selectCourseTeam", params)
  578. .then((res) => {
  579. this.courseTeam = res.data[0];
  580. })
  581. .catch((err) => {
  582. console.error(err);
  583. });
  584. },
  585. search() {
  586. this.page = 1;
  587. this.getCourse();
  588. },
  589. checkProblem(res) {
  590. this.problemCourse = res;
  591. this.dialogVisible = true;
  592. },
  593. copyCourse(cid) {
  594. let params = [{
  595. cid: cid,
  596. uid: this.userid
  597. }]
  598. this.ajax
  599. .post(this.$store.state.api + "copyCourse", params)
  600. .then((res) => {
  601. this.page = 1
  602. this.groupA = '0'
  603. this.clear()
  604. })
  605. .catch((err) => {
  606. console.error(err);
  607. });
  608. }
  609. },
  610. created() {
  611. this.page = 1;
  612. this.selectType();
  613. this.getCourse();
  614. },
  615. };
  616. </script>
  617. <style scoped>
  618. .dialog_diy>>>.el-dialog__header {
  619. background: #3d67bc !important;
  620. padding: 15px 20px;
  621. }
  622. .dialog_diy>>>.el-dialog__title {
  623. color: #fff;
  624. }
  625. .dialog_diy>>>.el-dialog__headerbtn {
  626. top: 19px;
  627. }
  628. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  629. color: #fff;
  630. }
  631. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  632. color: #fff;
  633. }
  634. .student_head>>>.el-button--primary {
  635. background-color: #2268bc;
  636. }
  637. .xls_button {
  638. font-size: 14px;
  639. cursor: pointer;
  640. text-decoration: underline;
  641. color: rgb(34, 104, 188);
  642. }
  643. .student_head {
  644. display: flex;
  645. justify-content: space-between;
  646. align-items: baseline;
  647. flex-direction: row;
  648. flex-wrap: wrap;
  649. }
  650. .top {
  651. display: flex;
  652. justify-content: space-between;
  653. }
  654. .bgColor {
  655. background: #466b99;
  656. }
  657. .student_search {
  658. display: flex;
  659. align-items: center;
  660. width: calc(100% / 3);
  661. }
  662. .student_search span {
  663. margin: 0 10px 0 0;
  664. min-width: 65px;
  665. }
  666. .student_button {
  667. display: flex;
  668. overflow: hidden;
  669. height: 40px;
  670. }
  671. .upload-demo {
  672. display: flex;
  673. flex-direction: column;
  674. align-items: end;
  675. /* position: relative; */
  676. width: 100px;
  677. overflow: hidden;
  678. }
  679. .student_table {
  680. padding: 20px 0;
  681. height: 100%;
  682. overflow: auto;
  683. min-height: 360px;
  684. }
  685. .student_empty {
  686. display: flex;
  687. justify-content: center;
  688. align-items: center;
  689. }
  690. .el-table>>>.even_row {
  691. background-color: #f1f1f1;
  692. }
  693. .time {
  694. font-size: 13px;
  695. color: #999;
  696. }
  697. .course_button {
  698. padding: 10px 20px;
  699. }
  700. .course_button_box {
  701. display: flex;
  702. margin-top: 5px;
  703. justify-content: space-between;
  704. }
  705. .course_rate {
  706. margin-top: 5px;
  707. }
  708. .course_view {
  709. display: flex;
  710. align-items: center;
  711. margin: 5px 0 0 0;
  712. }
  713. .course_view i {
  714. background-image: url("../../assets/liulan.png");
  715. width: 25px;
  716. height: 25px;
  717. background-size: 100% 100%;
  718. /* margin-top: 1px; */
  719. line-height: 25px;
  720. vertical-align: text-top;
  721. background-repeat: no-repeat;
  722. }
  723. .image {
  724. width: 100%;
  725. height: 150px;
  726. display: block;
  727. }
  728. .course_box {
  729. display: flex;
  730. flex-wrap: wrap;
  731. }
  732. .student_page {
  733. width: 95%;
  734. margin: 0 auto;
  735. }
  736. .course_create_box {
  737. font-size: 18px;
  738. }
  739. .course_name {
  740. margin-top: 10px;
  741. }
  742. .course_name span {
  743. margin-bottom: 10px;
  744. display: block;
  745. }
  746. .homework_box {
  747. display: flex;
  748. align-items: center;
  749. flex-wrap: wrap;
  750. }
  751. .course_homework {
  752. width: 130px;
  753. display: flex;
  754. justify-content: center;
  755. flex-direction: column;
  756. align-items: center;
  757. margin: 0 10px 10px 0;
  758. }
  759. .course_type {
  760. margin-top: 10px;
  761. display: flex;
  762. }
  763. .course_type1 span {
  764. margin-bottom: 10px;
  765. display: block;
  766. }
  767. .course_type2 {
  768. margin-left: 20px;
  769. }
  770. .course_type2 span {
  771. margin-bottom: 10px;
  772. display: block;
  773. }
  774. .course_empty {
  775. color: rgb(110, 110, 110);
  776. width: 100%;
  777. height: 100%;
  778. display: flex;
  779. align-items: center;
  780. justify-content: center;
  781. }
  782. .el_cards>>>.el-card__body {
  783. height: 100%;
  784. }
  785. .courseBtnBox {
  786. display: flex;
  787. flex-direction: column;
  788. justify-content: space-between;
  789. height: calc(100% - 170px);
  790. padding: 10px;
  791. }
  792. .wordUpload {
  793. display: flex;
  794. }
  795. .wordUpload>.buttonUp {
  796. margin-right: 5px;
  797. }
  798. .out_box {
  799. display: flex;
  800. flex-direction: column;
  801. flex-wrap: nowrap;
  802. width: 250px;
  803. background: #fff;
  804. margin-right: 25px;
  805. border: 1px solid #ccc;
  806. height: fit-content;
  807. box-sizing: border-box;
  808. border-radius: 0px 0px 5px 5px;
  809. /* overflow: hidden; */
  810. margin-bottom: 15px;
  811. position: relative;
  812. }
  813. .bottom_box {
  814. display: flex;
  815. padding: 10px 0 10px 10px;
  816. flex-direction: column;
  817. box-sizing: border-box;
  818. height: 121px;
  819. flex-wrap: nowrap;
  820. justify-content: space-evenly;
  821. }
  822. .bottom_box>div:nth-child(1) {
  823. width: 230px;
  824. overflow: hidden;
  825. text-overflow: ellipsis;
  826. white-space: nowrap;
  827. }
  828. .tup {
  829. width: 100%;
  830. height: 141.06px;
  831. margin: 0 auto;
  832. overflow: hidden;
  833. display: flex;
  834. align-items: center;
  835. }
  836. .tup>img {
  837. width: 100%;
  838. height: 100%;
  839. object-fit: contain;
  840. }
  841. .kc_time {
  842. margin-top: 8px;
  843. font-size: 14px;
  844. color: #999;
  845. }
  846. .kc_t {
  847. margin-top: 5px;
  848. }
  849. .three_bottom {
  850. display: flex;
  851. flex-direction: row;
  852. justify-content: space-around;
  853. height: 40px;
  854. align-items: center;
  855. background: #f5f4f4;
  856. font-size: 14px;
  857. }
  858. .three_bottom>div {
  859. cursor: pointer;
  860. }
  861. .three_bottom>div:hover {
  862. color: #79a2ff;
  863. }
  864. .head_left {
  865. display: flex;
  866. }
  867. .student_input>>>.el-input__inner {
  868. height: 40px;
  869. width: 190px;
  870. font-size: 13px;
  871. padding: 0 10px;
  872. }
  873. .course_button {
  874. color: #fff;
  875. background: #2268bc;
  876. width: 75px;
  877. height: 40px;
  878. padding: 0 !important;
  879. font-size: 12px;
  880. line-height: 40px;
  881. }
  882. .all_choose {
  883. margin: 15px 0 10px;
  884. height: 20%;
  885. display: flex;
  886. flex-direction: row;
  887. align-items: center;
  888. width: calc(100% / 3 - 50px);
  889. }
  890. .all_choose>span {
  891. width: 50px;
  892. display: block;
  893. }
  894. .choose {
  895. display: flex;
  896. flex-direction: row;
  897. flex-wrap: wrap;
  898. align-content: space-between;
  899. height: 100%;
  900. justify-content: flex-start;
  901. width: 60%;
  902. min-width: 868px;
  903. align-items: center;
  904. }
  905. .choose>div:nth-child(2) {
  906. margin-left: 1%;
  907. width: 32.33333%;
  908. }
  909. /* .choose>div:nth-child(4) {
  910. margin-right: 1%;
  911. width: 32.33333%;
  912. } */
  913. .choose>div:nth-child(5) {
  914. margin: 5px 0 0 1%;
  915. }
  916. .choose>div:nth-child(4)>span {
  917. width: 74px !important;
  918. min-width: 74px;
  919. }
  920. .choose>div:nth-child(4)>>>.el-select {
  921. width: 217.5px;
  922. min-width: 215.06px;
  923. }
  924. .clear {
  925. width: 70px;
  926. height: 35px;
  927. background: #2268bc;
  928. color: #fff;
  929. text-align: center;
  930. border-radius: 5px;
  931. line-height: 35px;
  932. cursor: pointer;
  933. margin-left: 20px;
  934. }
  935. .ct_box {
  936. height: 500px;
  937. overflow: auto;
  938. display: flex;
  939. flex-wrap: wrap;
  940. }
  941. .myCourse {
  942. position: absolute;
  943. background: #3c3c3c;
  944. width: 70px;
  945. height: 30px;
  946. border-radius: 30px;
  947. color: #fff;
  948. font-size: 14px;
  949. text-align: center;
  950. line-height: 30px;
  951. top: 5px;
  952. left: 5px;
  953. }
  954. .xtCourse {
  955. position: absolute;
  956. background: #41a5f0;
  957. width: 70px;
  958. height: 30px;
  959. border-radius: 30px;
  960. color: #fff;
  961. font-size: 14px;
  962. text-align: center;
  963. line-height: 30px;
  964. top: 5px;
  965. left: 5px;
  966. }
  967. .subClick {
  968. font-size: 16px;
  969. cursor: pointer;
  970. margin-left: 10px;
  971. /* color: #ab582f; */
  972. color: #409eff;
  973. }
  974. .more {
  975. position: relative;
  976. }
  977. .more:hover div {
  978. display: block;
  979. color: #000;
  980. }
  981. .more div {
  982. position: absolute;
  983. bottom: 0px;
  984. transform: translate(-50%,100%);
  985. background: #f5f4f4;
  986. padding: 10px 20px;
  987. z-index: 99;
  988. width: 40px;
  989. border-radius: 5px;
  990. box-shadow: 0 0 3px 3px #80808020;
  991. display: none;
  992. }
  993. .more div>span+span {
  994. margin-top: 10px;
  995. }
  996. .more div>span {
  997. display: block;
  998. width: 100%;
  999. text-align: center;
  1000. }
  1001. .more div>span:hover {
  1002. color: #79a2ff;
  1003. }
  1004. </style>