course.vue 26 KB

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