course.vue 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957
  1. <template>
  2. <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
  3. <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
  4. <div class="pb_head top">
  5. <div style="
  6. display: flex;
  7. align-items: center;
  8. ">
  9. <span>协同建构</span>
  10. </div>
  11. <div class="student_button">
  12. <el-button type="primary" class="bgColor" @click="goToCourse3()">创建协同建构</el-button>
  13. </div>
  14. </div>
  15. <div class="reBox">
  16. <div class="reTop">
  17. <!-- <div>分类筛选</div> -->
  18. <div class="reTopCh">
  19. <el-select v-model="groupA" @change="search" v-if="false">
  20. <el-option value="4" label="全部"></el-option>
  21. <el-option value="2" label="我的课程"></el-option>
  22. <el-option value="3" label="协同课程"></el-option>
  23. <el-option value="1" label="他人课程"></el-option>
  24. </el-select>
  25. <el-select v-model="groupA" @change="search" v-if="false">
  26. <el-option value="0" label="全部"></el-option>
  27. <el-option value="2" label="我的课程"></el-option>
  28. <el-option value="3" label="协同课程"></el-option>
  29. </el-select>
  30. <div class="searchI" style="margin: 0;">
  31. <div class="search">
  32. <img src="../../../assets/icon/search.png" alt="" />
  33. </div>
  34. <input class="sInput" type="text" placeholder="请输入关键字" v-model="courseName" @input="getCourse()" />
  35. </div>
  36. <el-button type="primary" class="bgColor" style="margin-left: 10px;" @click="reset">重置</el-button>
  37. </div>
  38. </div>
  39. <div class="pType_box all_choose" v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'">
  40. <span><span>类型</span></span>
  41. <el-radio-group v-model="pTypeCheckName" style="display: flex; align-items: center">
  42. <div class="all_choose" style="width: 100px" v-for="(item, index) in CourseType2" :key="index">
  43. <el-radio :label="item.name" @click.native.prevent="CourseType2Click(item.name)">{{ item.name }}</el-radio>
  44. </div>
  45. </el-radio-group>
  46. </div>
  47. <div class="choose">
  48. <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index"
  49. :style="{ margin: !CourseTypeJson[item.id].length && 0 }">
  50. <span v-if="CourseTypeJson[item.id].length &&
  51. (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
  52. ? pTypeCheck.indexOf(item.id) != -1
  53. : true)
  54. "><span>{{ item.name }}</span></span>
  55. <div class="typeCss" v-if="CourseTypeJson[item.id].length &&
  56. (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
  57. ? pTypeCheck.indexOf(item.id) != -1
  58. : true)
  59. ">
  60. <div class="cName" @click="getCourse2(item.name, '', item.id, 1)"
  61. :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
  62. 全部
  63. </div>
  64. <div v-for="(item1, index1) in CourseTypeJson[item.id]" :key="index + '-' + index1" :label="item1.id"
  65. @click="getCourse2(item.name, item.id, item1.id, 2)">
  66. <div class="cName" :class="typea == item1.id || typeb == item1.id || typed == item1.id
  67. ? 'isCType'
  68. : ''
  69. ">
  70. {{ item1.name }}
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <div class="all_choose" v-if="false">
  76. <span><span>所有者</span></span>
  77. <div class="typeCss">
  78. <div class="cName" :class="groupA == '4' ? 'isCType' : ''" @click="groupA = '4'; search();">
  79. 全部
  80. </div>
  81. <div class="cName" :class="groupA == '2' ? 'isCType' : ''" @click="groupA = '2'; search();">
  82. 我的课程
  83. </div>
  84. <div class="cName" :class="groupA == '3' ? 'isCType' : ''" @click="groupA = '3'; search();">
  85. 协同课程
  86. </div>
  87. <div class="cName" :class="groupA == '1' ? 'isCType' : ''" @click="groupA = '1'; search();">
  88. 他人课程
  89. </div>
  90. </div>
  91. </div>
  92. <div class="all_choose" v-if="false">
  93. <span><span>所有者</span></span>
  94. <div class="typeCss">
  95. <div class="cName" :class="groupA == '0' ? 'isCType' : ''" @click="groupA = '0'; search();">
  96. 全部
  97. </div>
  98. <div class="cName" :class="groupA == '2' ? 'isCType' : ''" @click="groupA = '2'; search();">
  99. 我的课程
  100. </div>
  101. <div class="cName" :class="groupA == '3' ? 'isCType' : ''" @click="groupA = '3'; search();">
  102. 协同课程
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <div class="line"></div>
  110. <div class="pb_content_body" style="height: 100%;width: 100%;background: #e6eaf0;margin: 0 auto;">
  111. <div class="student_head" v-if="false">
  112. <div class="choose">
  113. <div class="student_search">
  114. <span>课程筛选</span>
  115. <el-select v-model="groupA" @change="search">
  116. <el-option value="0" label="我的课程"></el-option>
  117. <el-option value="1" label="他人课程"></el-option>
  118. </el-select>
  119. </div>
  120. <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
  121. <span v-if="CourseTypeJson[item.id].length">{{ item.name }}</span>
  122. <el-select v-if="CourseTypeJson[item.id].length" v-model="courseTypeId[item.id]" placeholder="请选择"
  123. @change="getTypeName">
  124. <el-option label="全部" value="1">全部</el-option>
  125. <el-option v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.name" :value="item1.id">
  126. </el-option>
  127. </el-select>
  128. </div>
  129. <div @click="clear" class="clear">重置</div>
  130. </div>
  131. <div class="student_right">
  132. <div class="head_left">
  133. <el-input v-model="courseName" class="student_input" placeholder="请输入课程名称"></el-input>
  134. <el-button class="course_button" @click="searchCourse">查询</el-button>
  135. </div>
  136. </div>
  137. </div>
  138. <div class="student_table">
  139. <div class="course_box">
  140. <div class="out_box" v-for="(item, index) in course" :key="index">
  141. <div class="myCourse" v-if="item.userid == userid">我的创建</div>
  142. <div class="myCourse" style="background: #4187f0" v-else-if="!item.course_teacher ||
  143. (item.course_teacher &&
  144. item.course_teacher.indexOf(userid) == -1)
  145. ">
  146. 他人创建
  147. </div>
  148. <div class="xtCourse" v-else>协同建构</div>
  149. <div class="tup">
  150. <img :src="item.cover != null && item.cover != ''
  151. ? JSON.parse(item.cover).length > 0
  152. ? JSON.parse(item.cover)[0].url
  153. : mr
  154. : mr
  155. " alt />
  156. </div>
  157. <div class="bottom_box">
  158. <div>
  159. <el-tooltip :content="item.title" popper-class="text_tooltip" placement="top" effect="dark">
  160. <span>{{ item.title }}</span>
  161. </el-tooltip>
  162. <!-- <span>{{ item.state == 1 ? '阶段模式' : item.state == 2 ? '任务模式' : '极简模式' }}</span> -->
  163. </div>
  164. <!-- <div class="kc_t">
  165. 负责老师:{{ item.uname }}
  166. </div> -->
  167. <div class="kc_time">
  168. <!-- <span style="color: #717C8D">创建日期:</span> -->
  169. {{ item.time }}
  170. </div>
  171. <!-- <div class="kc_time">
  172. <span style="color: #717C8D">修改日期:</span>{{ item.utime }}
  173. </div> -->
  174. </div>
  175. <div class="three_bottom">
  176. <!-- v-if="role == '1'" @click="get(item)"-->
  177. <div @click="open(item.courseId, item.userid)">授课</div>
  178. <!-- <div @click="jump(item.courseId)" v-else>评课</div> -->
  179. <!-- <div v-if="((item.userid == userid) ||
  180. (item.course_teacher &&
  181. item.course_teacher.indexOf(userid) !== -1) || role == '1') &&
  182. item.state == 1
  183. " @click="goToCourse(item.courseId)">
  184. 修改
  185. </div>
  186. <div v-if="((item.userid == userid) ||
  187. (item.course_teacher &&
  188. item.course_teacher.indexOf(userid) !== -1) || role == '1') &&
  189. item.state == 2
  190. " @click="goToCourse2(item.courseId)">
  191. 修改
  192. </div> -->
  193. <!-- ||
  194. (item.course_teacher &&
  195. item.course_teacher.indexOf(userid) !== -1) || role == '1' -->
  196. <div v-if="((item.userid == userid)) &&
  197. item.state == 1
  198. " @click="goToCourse3(item.courseId)">
  199. 修改
  200. </div>
  201. <!-- <div v-if="groupA == '0'" @click="
  202. goTo(
  203. '/works?cid=' +
  204. item.courseId +
  205. '&userid=' +
  206. userid +
  207. '&oid=' +
  208. oid +
  209. '&org=' +
  210. org +
  211. '&role=' +
  212. role
  213. )
  214. ">
  215. 评价
  216. </div> -->
  217. <div v-if="((item.userid == userid))" @click="copyCourse(item.courseId)">
  218. 复制
  219. </div>
  220. <!-- v-if="item.isCourseType == 1 || role == '1'" -->
  221. <div v-if="((item.userid == userid))" @click="deleteCourse(item.courseId)">
  222. 删除
  223. </div>
  224. <!-- <div class="more">
  225. <span style="font-size: 18px; font-weight: 700">...</span>
  226. <div>
  227. <span @click="copyCourse(item.courseId)">复制</span>
  228. <span @click="jump(item.courseId)" v-if="role == '1'">评课</span>
  229. <span @click="get(item.courseId)" v-else>预览</span>
  230. <span @click="getNT(item.courseId)">无终端</span>
  231. </div>
  232. </div> -->
  233. </div>
  234. </div>
  235. <div class="course_empty" v-if="course.length == 0">暂无数据</div>
  236. </div>
  237. </div>
  238. </div>
  239. <div class="student_page">
  240. <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
  241. v-if="page && course.length" style="padding-bottom: 20px" @current-change="handleCurrentChange"></el-pagination>
  242. </div>
  243. <el-dialog :visible.sync="dialogVisible1" size="tiny">
  244. <img width="100%" :src="dialogImageUrl" alt />
  245. </el-dialog>
  246. <el-dialog title="查看协同课程" :visible.sync="dialogVisibleCourse" :append-to-body="true" width="850px"
  247. :before-close="handleClose" class="dialog_diy">
  248. <div class="ct_box">
  249. <div class="out_box" v-for="(item, index) in courseTeam" :key="index" style="margin-left: 15px">
  250. <div class="tup">
  251. <img :src="item.cover != null && item.cover != ''
  252. ? JSON.parse(item.cover).length > 0
  253. ? JSON.parse(item.cover)[0].url
  254. : mr
  255. : mr
  256. " alt />
  257. </div>
  258. <div class="bottom_box">
  259. <div>{{ item.title }}</div>
  260. <div class="kc_t">创建老师:{{ item.uname }}</div>
  261. <div class="kc_time">{{ item.time }}</div>
  262. </div>
  263. <div class="three_bottom">
  264. <div @click="jump(item.courseId)">查看内容</div>
  265. <div @click="
  266. goTo(
  267. '/course/addCourse?cid=' +
  268. item.courseId +
  269. '&userid=' +
  270. userid +
  271. '&oid=' +
  272. oid +
  273. '&org=' +
  274. org
  275. )
  276. ">
  277. 编辑
  278. </div>
  279. </div>
  280. </div>
  281. <div class="course_empty" v-if="courseTeam.length == 0">暂无数据</div>
  282. </div>
  283. <span slot="footer" class="dialog-footer">
  284. <el-button @click="dialogVisibleCourse = false">关 闭</el-button>
  285. </span>
  286. </el-dialog>
  287. </div>
  288. </template>
  289. <script>
  290. import "../../../common/aws-sdk-2.235.1.min";
  291. import EditorBar from "../../../components/tools/wangEnduit";
  292. // import CourseProblem from "./components/courseProblem";
  293. export default {
  294. components: { EditorBar },
  295. data() {
  296. return {
  297. itemCount: 1,
  298. courseTitle: "",
  299. courseText: "",
  300. courseTime: "",
  301. isLoading: false,
  302. fileList: [],
  303. fileList1: [],
  304. homeworkList: [{ name: "" }],
  305. formLabelWidth: "100px",
  306. dialogVisible: false,
  307. dialogVisible1: false,
  308. dialogVisibleCourse: false,
  309. dialogImageUrl: "",
  310. group: "",
  311. userid: this.$route.query.userid,
  312. oid: this.$route.query.oid,
  313. org: this.$route.query.org,
  314. role: this.$route.query.role,
  315. Juri: "",
  316. groupList: [],
  317. JuriList: [],
  318. page: 1,
  319. total: 0,
  320. pageSize: 20,
  321. tableData: [],
  322. now: "",
  323. courseDetail: {},
  324. addCourse: {},
  325. groupA: "0",
  326. classX: "",
  327. course: [],
  328. courseName: "",
  329. mr: require("../../../assets/icon/kc1.png"),
  330. CourseType: [],
  331. CourseType2: [],
  332. CourseTypeJson: {},
  333. courseTypeId: {},
  334. courseTypeSon: [],
  335. isChoose: 0,
  336. problemCourse: null, //查看提问的课程
  337. courseTeam: [],
  338. typeE: [],
  339. typea: "",
  340. typeb: "",
  341. typed: "",
  342. pTypeCheck: [],
  343. pTypeCheckName: [],
  344. btnDisplay: false
  345. };
  346. },
  347. methods: {
  348. change(val) {
  349. console.log(val);
  350. },
  351. time() {
  352. if (!this.now) {
  353. this.now = new Date().getTime();
  354. return true;
  355. } else {
  356. let time = new Date().getTime();
  357. if (time - this.now > 3000) {
  358. this.now = time;
  359. return true;
  360. } else {
  361. return false;
  362. }
  363. }
  364. },
  365. addHomeworkBox() {
  366. this.homeworkList.push({ name: "" });
  367. this.itemCount++;
  368. },
  369. reduceHomeworkBox() {
  370. var a = this.homeworkList;
  371. a.splice(a.length - 1);
  372. this.itemCount--;
  373. },
  374. goTo(path) {
  375. this.$router.push(path);
  376. },
  377. CourseType2Change(val) {
  378. this.pTypeCheck = [];
  379. for (var i = 0; i < this.CourseType2.length; i++) {
  380. let typeA = this.CourseType2[i];
  381. if (val.indexOf(typeA.name) != -1) {
  382. this.pTypeCheck.push(...typeA.id);
  383. }
  384. }
  385. this.typea = "";
  386. this.typeb = "";
  387. this.typed = "";
  388. this.getCourse();
  389. },
  390. CourseType2Click(val) {
  391. this.pTypeCheck = [];
  392. this.typeE = [];
  393. if (val === this.pTypeCheckName) {
  394. this.pTypeCheckName = "";
  395. } else {
  396. this.pTypeCheckName = val;
  397. for (var i = 0; i < this.CourseType2.length; i++) {
  398. let typeA = this.CourseType2[i];
  399. if (val.indexOf(typeA.name) != -1) {
  400. this.pTypeCheck.push(...typeA.id);
  401. this.typeE = [...typeA.id];
  402. }
  403. }
  404. }
  405. this.typea = "";
  406. this.typeb = "";
  407. this.typed = "";
  408. this.getCourse();
  409. },
  410. goToCourse(courseId) {
  411. if (courseId) {
  412. this.$router.push(
  413. "/course/addCourse?cid=" +
  414. courseId +
  415. "&userid=" +
  416. this.userid +
  417. "&oid=" +
  418. this.oid +
  419. "&org=" +
  420. this.org +
  421. "&role=" +
  422. this.role
  423. );
  424. } else {
  425. this.$router.push(
  426. "/course/addCourse?userid=" +
  427. this.userid +
  428. "&oid=" +
  429. this.oid +
  430. "&org=" +
  431. this.org +
  432. "&role=" +
  433. this.role
  434. );
  435. }
  436. // this.$router.push(path);
  437. },
  438. reset() {
  439. this.typeE = []
  440. this.typea = ''
  441. this.typeb = ''
  442. this.typed = ''
  443. this.courseName = ''
  444. if (this.role == "1") {
  445. this.groupA = "4";
  446. } else {
  447. this.groupA = "0";
  448. }
  449. this.getCourse();
  450. },
  451. goToCourse2(courseId) {
  452. if (courseId) {
  453. this.$router.push(
  454. "/course/addCourseT?cid=" +
  455. courseId +
  456. "&userid=" +
  457. this.userid +
  458. "&oid=" +
  459. this.oid +
  460. "&org=" +
  461. this.org +
  462. "&role=" +
  463. this.role
  464. );
  465. } else {
  466. this.$router.push(
  467. "/course/addCourseT?userid=" +
  468. this.userid +
  469. "&oid=" +
  470. this.oid +
  471. "&org=" +
  472. this.org +
  473. "&role=" +
  474. this.role
  475. );
  476. }
  477. },
  478. goToCourse3(courseId) {
  479. if (courseId) {
  480. this.$router.push(
  481. "/synergyCourse/add?cid=" +
  482. courseId +
  483. "&userid=" +
  484. this.userid +
  485. "&oid=" +
  486. this.oid +
  487. "&org=" +
  488. this.org +
  489. "&role=" +
  490. this.role
  491. );
  492. } else {
  493. this.$router.push(
  494. "/synergyCourse/add?userid=" +
  495. this.userid +
  496. "&oid=" +
  497. this.oid +
  498. "&org=" +
  499. this.org +
  500. "&role=" +
  501. this.role
  502. );
  503. }
  504. },
  505. tableRowClassName({ row, rowIndex }) {
  506. if ((rowIndex + 1) % 2 === 0) {
  507. return "even_row";
  508. } else {
  509. return "";
  510. }
  511. },
  512. open(cid, uid) {
  513. if (uid == this.userid) {
  514. window.parent.postMessage(
  515. {
  516. tools: "opencCscl",
  517. cid: cid,
  518. gid: '',
  519. },
  520. "*"
  521. );
  522. return;
  523. }
  524. let params = {
  525. cid: cid,
  526. classid: '1',
  527. };
  528. this.ajax
  529. .get(this.$store.state.api + "getCourseGroup", params)
  530. .then((res) => {
  531. if (res.data && res.data[1].length) {
  532. let groupPerson = res.data[1]
  533. let groupCid = ''
  534. for (var i = 0; i < groupPerson.length; i++) {
  535. if (groupPerson[i].userid == this.userid) {
  536. groupCid = groupPerson[i].groupCid
  537. break;
  538. }
  539. }
  540. if (groupCid) {
  541. window.parent.postMessage(
  542. {
  543. tools: "opencCscl",
  544. cid: cid,
  545. gid: groupCid,
  546. },
  547. "*"
  548. );
  549. } else {
  550. this.$message.error("没有加入分组请先加入分组");
  551. this.goToCourse3(cid)
  552. // window.parent.postMessage(
  553. // {
  554. // tools: "opencCscl",
  555. // cid: cid,
  556. // gid: '',
  557. // },
  558. // "*"
  559. // );
  560. }
  561. } else {
  562. this.$message.error("没有加入分组请先加入分组");
  563. this.goToCourse3(cid)
  564. // window.parent.postMessage(
  565. // {
  566. // tools: "opencCscl",
  567. // cid: cid,
  568. // gid: '',
  569. // },
  570. // "*"
  571. // );
  572. }
  573. })
  574. .catch((err) => {
  575. this.$message.error("网络不佳");
  576. console.error(err);
  577. });
  578. },
  579. jump(cid) {
  580. // window.open(
  581. // "//pbl.cocorobo.cn/pbl-student-table/dist/#/courseDetail?courseId=" +
  582. // cid +
  583. // "&userid=" +
  584. // this.userid
  585. // );
  586. window.parent.postMessage({ cid: cid, screenType: "2" }, "*");
  587. },
  588. get(item) {
  589. window.parent.postMessage({ cid: item.courseId, screenType: "3" }, "*");
  590. },
  591. getNT(cid) {
  592. window.parent.postMessage({ cid: cid, screenType: "3NT" }, "*");
  593. },
  594. handle_remove(file, fileList) {
  595. var _tmp = this.fileList;
  596. for (var i = 0, len = _tmp.length; i < len; i++) {
  597. if (_tmp[i].uid == file.uid) {
  598. _tmp.splice(i, 1);
  599. break;
  600. }
  601. this.fileList = _tmp;
  602. }
  603. },
  604. handle_remove1(file, fileList) {
  605. var _tmp = this.fileList1;
  606. for (var i = 0, len = _tmp.length; i < len; i++) {
  607. if (_tmp[i].uid == file.uid) {
  608. _tmp.splice(i, 1);
  609. break;
  610. }
  611. this.fileList1 = _tmp;
  612. }
  613. },
  614. handleCurrentChange(val) {
  615. // console.log(`当前页: ${val}`);
  616. this.page = val;
  617. this.getCourse();
  618. },
  619. init() { },
  620. handleClose(done) {
  621. done();
  622. },
  623. handleRemove(file, fileList) {
  624. console.log(file, fileList);
  625. },
  626. handlePictureCardPreview(file) {
  627. this.dialogImageUrl = file.url;
  628. this.dialogVisible1 = true;
  629. },
  630. onExceed() {
  631. this.$message.error("课程海报仅支持上传一张,请删除后再进行上传");
  632. },
  633. //uuid生成
  634. guid() {
  635. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
  636. /[xy]/g,
  637. function (c) {
  638. var r = (Math.random() * 16) | 0,
  639. v = c == "x" ? r : (r & 0x3) | 0x8;
  640. return v.toString(16);
  641. }
  642. );
  643. },
  644. time() {
  645. if (!this.now) {
  646. this.now = new Date().getTime();
  647. return true;
  648. } else {
  649. let time = new Date().getTime();
  650. if (time - this.now > 3000) {
  651. this.now = time;
  652. return true;
  653. } else {
  654. return false;
  655. }
  656. }
  657. },
  658. searchCourse() {
  659. this.page = 1;
  660. this.getCourse();
  661. },
  662. clear() {
  663. for (var i = 0; i < this.CourseType[0].length; i++) {
  664. this.courseTypeId[this.CourseType[0][i].id] = "";
  665. }
  666. this.getCourse();
  667. },
  668. getCourse2(typeName, ftypeId, typeid, type) {
  669. this.page = 1;
  670. if (typeid == "34628934-d02f-11ec-8c78-005056b86db5" || ftypeId == '34628934-d02f-11ec-8c78-005056b86db5' || typeid == "34628934-d02f-11ec-8c78-005056b86ac5" || ftypeId == "34628934-d02f-11ec-8c78-005056b86ac5") {
  671. if (type == 1) {
  672. if (this.typeE.indexOf(typeid) != -1) {
  673. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  674. return;
  675. } else {
  676. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  677. }
  678. } else {
  679. this.typeE.push(typeid);
  680. if (this.typea != "") {
  681. this.typea = "";
  682. }
  683. }
  684. } else {
  685. if (this.typea == typeid) {
  686. this.typea = "";
  687. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  688. this.typeE.push(ftypeId);
  689. }
  690. } else {
  691. this.typea = typeid;
  692. if (this.typeE.indexOf(ftypeId) != -1) {
  693. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  694. }
  695. }
  696. }
  697. } else if (typeName == "专栏") {
  698. if (type == 1) {
  699. if (this.typeE.indexOf(typeid) != -1) {
  700. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  701. return;
  702. } else {
  703. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  704. }
  705. } else {
  706. this.typeE.push(typeid);
  707. if (this.typeb != "") {
  708. this.typeb = "";
  709. }
  710. }
  711. } else {
  712. if (this.typeb == typeid) {
  713. this.typeb = "";
  714. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  715. this.typeE.push(ftypeId);
  716. }
  717. } else {
  718. this.typeb = typeid;
  719. if (this.typeE.indexOf(ftypeId) != -1) {
  720. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  721. }
  722. }
  723. }
  724. } else if (typeName == "栏目") {
  725. if (type == 1) {
  726. if (this.typeE.indexOf(typeid) != -1) {
  727. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  728. return;
  729. } else {
  730. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  731. }
  732. } else {
  733. this.typeE.push(typeid);
  734. if (this.typeb != "") {
  735. this.typeb = "";
  736. }
  737. }
  738. } else {
  739. if (this.typeb == typeid) {
  740. this.typeb = "";
  741. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  742. this.typeE.push(ftypeId);
  743. }
  744. } else {
  745. this.typeb = typeid;
  746. if (this.typeE.indexOf(ftypeId) != -1) {
  747. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  748. }
  749. }
  750. }
  751. } else if (typeid == "34629bcc-d02f-11ec-8c78-005056b86db5" || ftypeId == '34629bcc-d02f-11ec-8c78-005056b86db5') {
  752. if (type == 1) {
  753. if (this.typeE.indexOf(typeid) != -1) {
  754. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  755. return;
  756. } else {
  757. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  758. }
  759. } else {
  760. this.typeE.push(typeid);
  761. if (this.typeb != "") {
  762. this.typeb = "";
  763. }
  764. }
  765. } else {
  766. if (this.typeb == typeid) {
  767. this.typeb = "";
  768. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  769. this.typeE.push(ftypeId);
  770. }
  771. } else {
  772. this.typeb = typeid;
  773. if (this.typeE.indexOf(ftypeId) != -1) {
  774. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  775. }
  776. }
  777. }
  778. } else if (typeName == "学院") {
  779. if (type == 1) {
  780. if (this.typeE.indexOf(typeid) != -1) {
  781. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  782. return;
  783. } else {
  784. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  785. }
  786. } else {
  787. this.typeE.push(typeid);
  788. if (this.typeb != "") {
  789. this.typeb = "";
  790. }
  791. }
  792. } else {
  793. if (this.typeb == typeid) {
  794. this.typeb = "";
  795. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  796. this.typeE.push(ftypeId);
  797. }
  798. } else {
  799. this.typeb = typeid;
  800. if (this.typeE.indexOf(ftypeId) != -1) {
  801. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  802. }
  803. }
  804. }
  805. } else if (typeid == "34629907-d02f-11ec-8c78-005056b86db5" || ftypeId == '34629907-d02f-11ec-8c78-005056b86db5' || typeid == "34629907-d02f-11ec-8c78-005056b86ac5" || ftypeId == "34629907-d02f-11ec-8c78-005056b86ac5") {
  806. if (type == 1) {
  807. if (this.typeE.indexOf(typeid) != -1) {
  808. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  809. return;
  810. } else {
  811. this.typeE.splice(this.typeE.indexOf(typeid), 1);
  812. }
  813. } else {
  814. this.typeE.push(typeid);
  815. if (this.typed != "") {
  816. this.typed = "";
  817. }
  818. }
  819. } else {
  820. if (this.typed == typeid) {
  821. this.typed = "";
  822. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  823. this.typeE.push(ftypeId);
  824. }
  825. } else {
  826. this.typed = typeid;
  827. if (this.typeE.indexOf(ftypeId) != -1) {
  828. this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
  829. }
  830. }
  831. }
  832. }
  833. // this.loading = true;
  834. this.getCourse();
  835. },
  836. getCourse() {
  837. if (!this.loading) {
  838. this.loading = this.openLoading(
  839. document.querySelector(".student_table")
  840. );
  841. }
  842. // var typeE = [];
  843. // var typea, typeb, typec, typed;
  844. // if (this.isChoose == 1) {
  845. // for (var i = 0; i < this.CourseType[0].length; i++) {
  846. // if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
  847. // typeE.push(this.CourseType[0][i].id);
  848. // } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
  849. // if (this.CourseType[0][i].name == "年级") {
  850. // typea = this.courseTypeId[this.CourseType[0][i].id];
  851. // } else if (this.CourseType[0][i].name == "专栏") {
  852. // typeb = this.courseTypeId[this.CourseType[0][i].id];
  853. // } else if (this.CourseType[0][i].name == "栏目") {
  854. // typeb = this.courseTypeId[this.CourseType[0][i].id];
  855. // } else if (this.CourseType[0][i].name == "学院") {
  856. // typeb = this.courseTypeId[this.CourseType[0][i].id];
  857. // } else if (this.CourseType[0][i].name == "主题") {
  858. // typeb = this.courseTypeId[this.CourseType[0][i].id];
  859. // } else if (this.CourseType[0][i].name == "新技能") {
  860. // typec = this.courseTypeId[this.CourseType[0][i].id];
  861. // } else if (this.CourseType[0][i].name == "学科") {
  862. // typed = this.courseTypeId[this.CourseType[0][i].id];
  863. // }
  864. // this.courseTypeSon.push(
  865. // this.courseTypeId[this.CourseType[0][i].id]
  866. // );
  867. // }
  868. // }
  869. // }
  870. console.log("typea", this.typea);
  871. this.isLoading = true;
  872. let params = {
  873. type: this.groupA,
  874. uid: this.userid,
  875. oid: this.oid,
  876. org: this.org,
  877. typea: this.typea != undefined ? this.typea : "",
  878. typeb: this.typeb != undefined ? this.typeb : "",
  879. typec: "",
  880. typed: this.typed != undefined ? this.typed : "",
  881. typeE: this.typeE.join(","),
  882. cu: "",
  883. cn: this.courseName,
  884. page: this.page,
  885. pageSize: this.pageSize,
  886. };
  887. this.ajax
  888. .get(this.$store.state.api + "selectSynergyCourse", params)
  889. .then((res) => {
  890. if (this.loading) {
  891. this.loading.close();
  892. }
  893. this.loading = "";
  894. this.isLoading = false;
  895. this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  896. this.course = res.data[0];
  897. })
  898. .catch((err) => {
  899. console.error(err);
  900. });
  901. },
  902. getTypeName() {
  903. this.$forceUpdate();
  904. this.page = 1;
  905. this.isChoose = 1;
  906. this.getCourse();
  907. },
  908. // searchCourse() {
  909. // this.isLoading = true;
  910. // let params = {
  911. // cu: "",
  912. // cn: this.courseName,
  913. // page: this.page,
  914. // };
  915. // this.ajax
  916. // .get(this.$store.state.api + "searchCourse", params)
  917. // .then((res) => {
  918. // this.isLoading = false;
  919. // this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
  920. // this.course = res.data[0];
  921. // })
  922. // .catch((err) => {
  923. // this.isLoading = false;
  924. // console.error(err);
  925. // });
  926. // },
  927. deleteCourse(cid) {
  928. // if (this.time()) {
  929. this.$confirm("确定删除吗?", "提示", {
  930. confirmButtonText: "确定",
  931. cancelButtonText: "取消",
  932. type: "warning",
  933. })
  934. .then(() => {
  935. const loading = this.openLoading(
  936. document.querySelector(".student_table")
  937. );
  938. this.isLoading = true;
  939. let params = {
  940. cid: cid,
  941. };
  942. this.ajax
  943. .get(this.$store.state.api + "deleteSynergyCourse", params)
  944. .then((res) => {
  945. loading.close();
  946. this.isLoading = false;
  947. this.$message.success("删除成功");
  948. this.getCourse();
  949. })
  950. .catch((err) => {
  951. console.error(err);
  952. });
  953. })
  954. .catch(() => {
  955. loading.close();
  956. this.isLoading = false;
  957. return;
  958. });
  959. // }
  960. },
  961. selectAllType() {
  962. let params = {
  963. org: this.org && this.org != "" ? this.org : "",
  964. oid: this.oid && this.oid != "" ? this.oid : "",
  965. };
  966. this.ajax
  967. .get(this.$store.state.api + "selectAllType", params)
  968. .then((res) => {
  969. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  970. res.data[0] = [...res.data[0], ...res.data[4]]
  971. }
  972. this.CourseType = res.data;
  973. this.CourseType2 = [
  974. { name: "智见课程", id: [] },
  975. { name: "智行课程", id: [] },
  976. { name: "智创课程", id: [] },
  977. ];
  978. for (var cti = 0; cti < res.data[0].length; cti++) {
  979. if (
  980. res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" ||
  981. res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5"
  982. ) {
  983. this.CourseType2[0].id.push(res.data[0][cti].id);
  984. } else if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5" ||
  985. res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
  986. this.CourseType2[1].id.push(res.data[0][cti].id);
  987. } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
  988. this.CourseType2[2].id.push(res.data[0][cti].id);
  989. }
  990. if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5") {
  991. res.data[0][cti].name = "年级";
  992. } else if (res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
  993. res.data[0][cti].name = "学科";
  994. } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
  995. res.data[0][cti].name = "主题";
  996. }
  997. }
  998. for (var i = 0; i < res.data[0].length; i++) {
  999. if (!this.cid) {
  1000. this.courseTypeId[res.data[0][i].id] = [];
  1001. }
  1002. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1003. this.CourseTypeJson[res.data[0][i].id] = [];
  1004. }
  1005. if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  1006. if (res.data[0][i].name == "栏目") {
  1007. this.CourseType[0][i].name = "主题";
  1008. }
  1009. }
  1010. if (res.data[2].length == 0 && res.data[3].length == 0) {
  1011. for (var j = 0; j < res.data[1].length; j++) {
  1012. if (res.data[0][i].id == res.data[1][j].pid) {
  1013. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
  1014. }
  1015. }
  1016. } else {
  1017. if (res.data[2].length > 0) {
  1018. for (var j = 0; j < res.data[2].length; j++) {
  1019. if (res.data[0][i].id == res.data[2][j].pid) {
  1020. this.CourseTypeJson[res.data[0][i].id].push(res.data[2][j]); // 去除公共分类
  1021. }
  1022. }
  1023. }
  1024. if (res.data[3].length > 0) {
  1025. for (var j = 0; j < res.data[3].length; j++) {
  1026. if (res.data[0][i].id == res.data[3][j].pid) {
  1027. this.CourseTypeJson[res.data[0][i].id].push(res.data[3][j]); // 去除公共分类
  1028. }
  1029. }
  1030. }
  1031. }
  1032. }
  1033. })
  1034. .catch((err) => {
  1035. console.error(err);
  1036. });
  1037. },
  1038. selectType() {
  1039. this.ajax
  1040. .get(this.$store.state.api + "selectType")
  1041. .then((res) => {
  1042. this.CourseType = res.data;
  1043. for (var i = 0; i < res.data[0].length; i++) {
  1044. if (!this.cid) {
  1045. this.courseTypeId[res.data[0][i].id] = "";
  1046. }
  1047. // if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
  1048. // if (res.data[0][i].name == "栏目") {
  1049. // this.CourseType[0][i].name = "主题";
  1050. // }
  1051. // }
  1052. for (var j = 0; j < res.data[1].length; j++) {
  1053. if (res.data[0][i].id == res.data[1][j].pid) {
  1054. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1055. this.CourseTypeJson[res.data[0][i].id] = [];
  1056. }
  1057. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); //去除公共分类
  1058. }
  1059. }
  1060. }
  1061. this.selectTypeByOid();
  1062. this.selectTypeByOrg();
  1063. })
  1064. .catch((err) => {
  1065. console.error(err);
  1066. });
  1067. },
  1068. selectTypeByOid() {
  1069. let params = {
  1070. oid: this.oid,
  1071. };
  1072. this.ajax
  1073. .get(this.$store.state.api + "selectTypeByOid", params)
  1074. .then((res) => {
  1075. for (var i = 0; i < res.data[0].length; i++) {
  1076. for (var j = 0; j < res.data[1].length; j++) {
  1077. if (res.data[0][i].id == res.data[1][j].pid) {
  1078. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1079. this.CourseTypeJson[res.data[0][i].id] = [];
  1080. }
  1081. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  1082. }
  1083. }
  1084. }
  1085. this.$forceUpdate();
  1086. })
  1087. .catch((err) => {
  1088. console.error(err);
  1089. });
  1090. },
  1091. selectTypeByOrg() {
  1092. let params = {
  1093. oid: this.org,
  1094. };
  1095. this.ajax
  1096. .get(this.$store.state.api + "selectTypeByOrg", params)
  1097. .then((res) => {
  1098. for (var i = 0; i < res.data[0].length; i++) {
  1099. for (var j = 0; j < res.data[1].length; j++) {
  1100. if (res.data[0][i].id == res.data[1][j].pid) {
  1101. if (!this.CourseTypeJson[res.data[0][i].id]) {
  1102. this.CourseTypeJson[res.data[0][i].id] = [];
  1103. }
  1104. this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
  1105. }
  1106. }
  1107. }
  1108. this.$forceUpdate();
  1109. })
  1110. .catch((err) => {
  1111. console.error(err);
  1112. });
  1113. },
  1114. openCourse() {
  1115. this.dialogVisibleCourse = true;
  1116. this.getTeamCourse();
  1117. },
  1118. getTeamCourse() {
  1119. // let params = {
  1120. // uid: this.userid,
  1121. // oid: this.oid,
  1122. // };
  1123. // this.ajax
  1124. // .get(this.$store.state.api + "selectCourseTeam", params)
  1125. // .then((res) => {
  1126. // this.courseTeam = res.data[0];
  1127. // })
  1128. // .catch((err) => {
  1129. // console.error(err);
  1130. // });
  1131. },
  1132. search() {
  1133. this.page = 1;
  1134. this.getCourse();
  1135. },
  1136. checkProblem(res) {
  1137. this.problemCourse = res;
  1138. this.dialogVisible = true;
  1139. },
  1140. copyCourse(cid) {
  1141. let params = [
  1142. {
  1143. cid: cid,
  1144. uid: this.userid,
  1145. },
  1146. ];
  1147. this.ajax
  1148. .post(this.$store.state.api + "copySynergyCourse", params)
  1149. .then((res) => {
  1150. this.page = 1;
  1151. if (this.role == "1") {
  1152. this.groupA = "4";
  1153. } else {
  1154. this.groupA = "0";
  1155. }
  1156. this.$message.success("复制成功")
  1157. this.clear();
  1158. })
  1159. .catch((err) => {
  1160. console.error(err);
  1161. });
  1162. },
  1163. },
  1164. created() {
  1165. if (this.role == "1") {
  1166. this.groupA = "4";
  1167. }
  1168. this.page = 1;
  1169. // this.selectType();
  1170. this.selectAllType();
  1171. this.getCourse();
  1172. },
  1173. };
  1174. </script>
  1175. <style scoped>
  1176. @media screen and (max-width: 1380px) {
  1177. .out_box {
  1178. width: calc(100% / 4 - (15px * 3) / 4) !important;
  1179. }
  1180. .out_box:nth-child(5n) {
  1181. margin-right: 15px !important;
  1182. }
  1183. .out_box:nth-child(4n) {
  1184. margin-right: 0 !important;
  1185. }
  1186. }
  1187. @media screen and (max-width: 1080px) {
  1188. .out_box {
  1189. width: calc(100% / 3 - (15px * 2) / 3) !important;
  1190. }
  1191. .out_box:nth-child(5n) {
  1192. margin-right: 15px !important;
  1193. }
  1194. .out_box:nth-child(4n) {
  1195. margin-right: 15px !important;
  1196. }
  1197. .out_box:nth-child(3n) {
  1198. margin-right: 0 !important;
  1199. }
  1200. }
  1201. .dialog_diy>>>.el-dialog__header {
  1202. background: #3d67bc !important;
  1203. padding: 15px 20px;
  1204. }
  1205. .dialog_diy>>>.el-dialog__title {
  1206. color: #fff;
  1207. }
  1208. .dialog_diy>>>.el-dialog__headerbtn {
  1209. top: 19px;
  1210. }
  1211. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
  1212. color: #fff;
  1213. }
  1214. .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
  1215. color: #fff;
  1216. }
  1217. .student_head>>>.el-button--primary {
  1218. background-color: #2268bc;
  1219. }
  1220. .xls_button {
  1221. font-size: 14px;
  1222. cursor: pointer;
  1223. text-decoration: underline;
  1224. color: rgb(34, 104, 188);
  1225. }
  1226. .student_head {
  1227. display: flex;
  1228. justify-content: space-between;
  1229. align-items: baseline;
  1230. flex-direction: row;
  1231. flex-wrap: wrap;
  1232. }
  1233. .top {
  1234. display: flex;
  1235. justify-content: space-between;
  1236. width: 100% !important;
  1237. box-sizing: border-box;
  1238. margin: 0px auto;
  1239. padding: 10px 5px;
  1240. height: 54px;
  1241. }
  1242. .bgColor {
  1243. background: #466b99;
  1244. }
  1245. .student_search {
  1246. display: flex;
  1247. align-items: center;
  1248. width: calc(100% / 3);
  1249. }
  1250. .student_search span {
  1251. margin: 0 10px 0 0;
  1252. min-width: 65px;
  1253. }
  1254. .student_button {
  1255. display: flex;
  1256. /* overflow: hidden; */
  1257. height: 40px;
  1258. }
  1259. .upload-demo {
  1260. display: flex;
  1261. flex-direction: column;
  1262. align-items: end;
  1263. /* position: relative; */
  1264. width: 100px;
  1265. overflow: hidden;
  1266. }
  1267. .student_table {
  1268. /* padding: 20px 0; */
  1269. height: 100%;
  1270. /* overflow: auto; */
  1271. min-height: 360px;
  1272. }
  1273. .student_empty {
  1274. display: flex;
  1275. justify-content: center;
  1276. align-items: center;
  1277. }
  1278. .el-table>>>.even_row {
  1279. background-color: #f1f1f1;
  1280. }
  1281. .time {
  1282. font-size: 13px;
  1283. color: #999;
  1284. }
  1285. .course_button {
  1286. padding: 10px 20px;
  1287. }
  1288. .course_button_box {
  1289. display: flex;
  1290. margin-top: 5px;
  1291. justify-content: space-between;
  1292. }
  1293. .course_rate {
  1294. margin-top: 5px;
  1295. }
  1296. .course_view {
  1297. display: flex;
  1298. align-items: center;
  1299. margin: 5px 0 0 0;
  1300. }
  1301. .course_view i {
  1302. background-image: url("../../../assets/liulan.png");
  1303. width: 25px;
  1304. height: 25px;
  1305. background-size: 100% 100%;
  1306. /* margin-top: 1px; */
  1307. line-height: 25px;
  1308. vertical-align: text-top;
  1309. background-repeat: no-repeat;
  1310. }
  1311. .image {
  1312. width: 100%;
  1313. height: 150px;
  1314. display: block;
  1315. }
  1316. .course_box {
  1317. display: flex;
  1318. flex-wrap: wrap;
  1319. }
  1320. .student_page {
  1321. width: 100%;
  1322. margin: 0 auto;
  1323. background: #e6eaf0;
  1324. }
  1325. .course_create_box {
  1326. font-size: 18px;
  1327. }
  1328. .course_name {
  1329. margin-top: 10px;
  1330. }
  1331. .course_name span {
  1332. margin-bottom: 10px;
  1333. display: block;
  1334. }
  1335. .homework_box {
  1336. display: flex;
  1337. align-items: center;
  1338. flex-wrap: wrap;
  1339. }
  1340. .course_homework {
  1341. width: 130px;
  1342. display: flex;
  1343. justify-content: center;
  1344. flex-direction: column;
  1345. align-items: center;
  1346. margin: 0 10px 10px 0;
  1347. }
  1348. .course_type {
  1349. margin-top: 10px;
  1350. display: flex;
  1351. }
  1352. .course_type1 span {
  1353. margin-bottom: 10px;
  1354. display: block;
  1355. }
  1356. .course_type2 {
  1357. margin-left: 20px;
  1358. }
  1359. .course_type2 span {
  1360. margin-bottom: 10px;
  1361. display: block;
  1362. }
  1363. .course_empty {
  1364. color: rgb(110, 110, 110);
  1365. width: 100%;
  1366. height: 100%;
  1367. display: flex;
  1368. align-items: center;
  1369. justify-content: center;
  1370. }
  1371. .el_cards>>>.el-card__body {
  1372. height: 100%;
  1373. }
  1374. .courseBtnBox {
  1375. display: flex;
  1376. flex-direction: column;
  1377. justify-content: space-between;
  1378. height: calc(100% - 170px);
  1379. padding: 10px;
  1380. }
  1381. .wordUpload {
  1382. display: flex;
  1383. }
  1384. .wordUpload>.buttonUp {
  1385. margin-right: 5px;
  1386. }
  1387. .out_box {
  1388. display: flex;
  1389. flex-direction: column;
  1390. flex-wrap: nowrap;
  1391. width: calc(100% / 5 - (15px * 4) / 5);
  1392. /* width: 280px; */
  1393. background: #fff;
  1394. margin-right: 15px;
  1395. /* border: 1px solid #ccc; */
  1396. height: fit-content;
  1397. box-sizing: border-box;
  1398. border-radius: 0px 0px 5px 5px;
  1399. /* overflow: hidden; */
  1400. margin-bottom: 15px;
  1401. position: relative;
  1402. border-radius: 8px;
  1403. box-sizing: border-box;
  1404. overflow: hidden;
  1405. border: 1px solid #3682fc00;
  1406. }
  1407. .out_box:hover {
  1408. border: 1px solid #3681FC;
  1409. }
  1410. .out_box:nth-child(5n) {
  1411. margin-right: 0;
  1412. }
  1413. .bottom_box {
  1414. display: flex;
  1415. padding: 10px;
  1416. flex-direction: column;
  1417. box-sizing: border-box;
  1418. /* height: 121px; */
  1419. flex-wrap: nowrap;
  1420. justify-content: space-evenly;
  1421. }
  1422. .bottom_box>div:nth-child(1) {
  1423. width: 100%;
  1424. /* overflow: hidden;
  1425. text-overflow: ellipsis;
  1426. white-space: nowrap;
  1427. font-weight: bold; */
  1428. display: flex;
  1429. align-items: center;
  1430. justify-content: space-between;
  1431. }
  1432. .bottom_box>div:nth-child(1)>span:nth-child(1) {
  1433. max-width: 100%;
  1434. overflow: hidden;
  1435. text-overflow: ellipsis;
  1436. white-space: nowrap;
  1437. font-weight: bold;
  1438. font-size: 16px;
  1439. }
  1440. .bottom_box>div:nth-child(1)>span:nth-child(2) {
  1441. min-width: fit-content;
  1442. font-size: 14px;
  1443. color: #8c8c8c;
  1444. }
  1445. .tup {
  1446. width: 100%;
  1447. height: 180px;
  1448. margin: 0 auto;
  1449. overflow: hidden;
  1450. display: flex;
  1451. align-items: center;
  1452. padding: 10px 10px 0;
  1453. box-sizing: border-box;
  1454. }
  1455. .tup>img {
  1456. width: 100%;
  1457. height: 100%;
  1458. object-fit: cover;
  1459. }
  1460. .kc_time {
  1461. margin-top: 8px;
  1462. font-size: 14px;
  1463. color: #717C8D;
  1464. }
  1465. .kc_time+.kc_time {
  1466. margin-top: 0;
  1467. }
  1468. .kc_t {
  1469. margin-top: 5px;
  1470. width: 100%;
  1471. white-space: nowrap;
  1472. overflow: hidden;
  1473. text-overflow: ellipsis;
  1474. }
  1475. .three_bottom {
  1476. display: flex;
  1477. flex-direction: row;
  1478. justify-content: space-around;
  1479. height: 45px;
  1480. align-items: center;
  1481. background: #fff;
  1482. font-size: 14px;
  1483. border-top: 1px solid #ddd;
  1484. box-sizing: border-box;
  1485. }
  1486. .three_bottom>div {
  1487. cursor: pointer;
  1488. width: 100%;
  1489. text-align: center;
  1490. }
  1491. .three_bottom>div+div {
  1492. border-left: 1px solid #ddd;
  1493. }
  1494. .three_bottom>div:hover {
  1495. color: #3681FC;
  1496. font-weight: bold;
  1497. }
  1498. .three_bottom .deleteB {
  1499. color: #E96E6E;
  1500. }
  1501. .three_bottom .deleteB:hover {
  1502. color: #E96E6E;
  1503. font-weight: bold;
  1504. }
  1505. .head_left {
  1506. display: flex;
  1507. }
  1508. .student_input>>>.el-input__inner {
  1509. height: 40px;
  1510. width: 190px;
  1511. font-size: 13px;
  1512. padding: 0 10px;
  1513. }
  1514. .course_button {
  1515. color: #fff;
  1516. background: #2268bc;
  1517. width: 75px;
  1518. height: 40px;
  1519. padding: 0 !important;
  1520. font-size: 12px;
  1521. line-height: 40px;
  1522. }
  1523. /* .all_choose {
  1524. margin: 15px 0 10px;
  1525. height: 20%;
  1526. display: flex;
  1527. flex-direction: row;
  1528. align-items: center;
  1529. max-width: calc(100% / 3);
  1530. }
  1531. .all_choose > span {
  1532. width: 50px;
  1533. display: block;
  1534. }
  1535. .choose {
  1536. display: flex;
  1537. flex-direction: row;
  1538. flex-wrap: wrap;
  1539. align-content: space-between;
  1540. height: 100%;
  1541. justify-content: flex-start;
  1542. width: 60%;
  1543. min-width: 868px;
  1544. align-items: center;
  1545. } */
  1546. /* .choose > div:nth-child(2) {
  1547. margin-left: 1%;
  1548. width: 32.33333%;
  1549. }
  1550. .choose > div:nth-child(4) {
  1551. margin-right: 1%;
  1552. width: 32.33333%;
  1553. }
  1554. .choose > div:nth-child(5) {
  1555. margin: 5px 0 0 1%;
  1556. }
  1557. .choose > div:nth-child(4) > span {
  1558. width: 74px !important;
  1559. min-width: 74px;
  1560. }
  1561. .choose > div:nth-child(4) >>> .el-select {
  1562. width: 217.5px;
  1563. min-width: 215.06px;
  1564. } */
  1565. .clear {
  1566. width: 70px;
  1567. height: 35px;
  1568. background: #2268bc;
  1569. color: #fff;
  1570. text-align: center;
  1571. border-radius: 5px;
  1572. line-height: 35px;
  1573. cursor: pointer;
  1574. margin-left: 20px;
  1575. }
  1576. .ct_box {
  1577. height: 500px;
  1578. overflow: auto;
  1579. display: flex;
  1580. flex-wrap: wrap;
  1581. }
  1582. .myCourse {
  1583. position: absolute;
  1584. background: #3c3c3c;
  1585. width: 70px;
  1586. height: 30px;
  1587. border-radius: 5px;
  1588. color: #fff;
  1589. font-size: 14px;
  1590. text-align: center;
  1591. line-height: 30px;
  1592. top: 5px;
  1593. left: 5px;
  1594. }
  1595. .xtCourse {
  1596. position: absolute;
  1597. background: #466b99;
  1598. width: 70px;
  1599. height: 30px;
  1600. border-radius: 5px;
  1601. color: #fff;
  1602. font-size: 14px;
  1603. text-align: center;
  1604. line-height: 30px;
  1605. top: 5px;
  1606. left: 5px;
  1607. }
  1608. .sub_head {
  1609. position: relative;
  1610. }
  1611. .sub_head::after {
  1612. content: "";
  1613. width: 100%;
  1614. background: #5a9cea;
  1615. height: 2px;
  1616. position: absolute;
  1617. left: 0;
  1618. bottom: -10px;
  1619. }
  1620. .subClick {
  1621. /* font-size: 16px; */
  1622. font-size: 26px;
  1623. cursor: pointer;
  1624. margin-left: 17.5px;
  1625. /* color: #ab582f; */
  1626. /* color: #409eff; */
  1627. color: #999;
  1628. }
  1629. .subClick:hover {
  1630. color: #000;
  1631. }
  1632. .more {
  1633. position: relative;
  1634. }
  1635. .more:hover div {
  1636. display: block;
  1637. color: #000;
  1638. }
  1639. .more div {
  1640. position: absolute;
  1641. bottom: 0px;
  1642. transform: translate(-50%, 100%);
  1643. background: #f5f4f4;
  1644. padding: 10px 20px;
  1645. z-index: 99;
  1646. width: 50px;
  1647. border-radius: 5px;
  1648. box-shadow: 0 0 3px 3px #80808020;
  1649. display: none;
  1650. }
  1651. .more div>span+span {
  1652. margin-top: 10px;
  1653. }
  1654. .more div>span {
  1655. display: block;
  1656. width: 100%;
  1657. text-align: center;
  1658. }
  1659. .more div>span:hover {
  1660. color: #79a2ff;
  1661. }
  1662. .line {
  1663. width: 100%;
  1664. height: 15px;
  1665. background: #e6eaf0;
  1666. }
  1667. .reBox {
  1668. width: 100%;
  1669. /* padding-left: 20px; */
  1670. margin: 0 auto;
  1671. box-sizing: border-box;
  1672. overflow: hidden;
  1673. padding: 10px 15px 0;
  1674. }
  1675. .reTop {
  1676. padding: 0 0 5px;
  1677. /* padding: 20px 0 0 0; */
  1678. /* border-bottom: 1px solid #eee; */
  1679. display: flex;
  1680. flex-direction: row;
  1681. flex-wrap: nowrap;
  1682. align-items: center;
  1683. justify-content: space-between;
  1684. }
  1685. .reTop>div:nth-child(1) {
  1686. font-weight: bold;
  1687. /* width: 40px; */
  1688. /* border-bottom: 1px solid #205cc6; */
  1689. /* padding-bottom: 20px; */
  1690. color: #205cc6;
  1691. /* font-size: 20px; */
  1692. }
  1693. .reTop .reTopCh {
  1694. display: flex;
  1695. }
  1696. .reTop .searchI {
  1697. display: flex;
  1698. flex-direction: row;
  1699. align-items: center;
  1700. border: 1px solid #ccced3;
  1701. width: 250px;
  1702. border-radius: 8px;
  1703. padding: 5px 0;
  1704. /* margin-bottom: 10px; */
  1705. background: #fafafa;
  1706. margin: 0 0 0 10px;
  1707. }
  1708. .search {
  1709. width: 20px;
  1710. padding: 0 5px;
  1711. display: flex;
  1712. align-items: center;
  1713. }
  1714. .search>img {
  1715. width: 100%;
  1716. height: 100%;
  1717. }
  1718. .sInput {
  1719. border: none;
  1720. width: 85%;
  1721. background: #fafafa;
  1722. }
  1723. .sInput:focus-visible {
  1724. outline: none;
  1725. }
  1726. .typeCss {
  1727. display: flex;
  1728. flex-direction: row;
  1729. flex-wrap: wrap;
  1730. justify-content: flex-start;
  1731. align-items: center;
  1732. }
  1733. .choose {
  1734. display: flex;
  1735. flex-direction: column;
  1736. flex-wrap: nowrap;
  1737. height: 100%;
  1738. justify-content: space-evenly;
  1739. align-items: flex-start;
  1740. padding: 10px 0;
  1741. }
  1742. .all_choose {
  1743. display: flex;
  1744. flex-direction: row;
  1745. align-items: baseline;
  1746. margin: 2px 0;
  1747. width: 100%;
  1748. }
  1749. .all_choose>span {
  1750. display: flex;
  1751. margin-right: 5px;
  1752. }
  1753. .all_choose>span>span {
  1754. min-width: 65px;
  1755. max-width: 65px;
  1756. display: block;
  1757. text-align-last: justify;
  1758. }
  1759. .all_choose>span::after {
  1760. content: ':';
  1761. }
  1762. .all_choose>span:nth-child(1) {
  1763. font-weight: bold;
  1764. }
  1765. .all_choose>>>.el-checkbox-group {
  1766. display: flex;
  1767. flex-direction: row;
  1768. width: 820px;
  1769. flex-wrap: wrap;
  1770. align-content: center;
  1771. justify-content: flex-start;
  1772. align-items: center;
  1773. margin-top: 3px;
  1774. }
  1775. .all_choose>.el-checkbox-group>>>.el-checkbox {
  1776. margin-bottom: 10px;
  1777. display: flex;
  1778. flex-direction: row;
  1779. align-items: center;
  1780. }
  1781. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label {
  1782. min-width: 80px;
  1783. overflow: hidden;
  1784. width: 80px;
  1785. text-overflow: ellipsis;
  1786. white-space: nowrap;
  1787. }
  1788. .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label:hover {
  1789. width: auto;
  1790. }
  1791. .cName {
  1792. cursor: pointer;
  1793. margin: 0 10px 5px 0;
  1794. color: #b9b6b9;
  1795. min-width: 80px;
  1796. width: 80px;
  1797. white-space: nowrap;
  1798. overflow: hidden;
  1799. text-overflow: ellipsis;
  1800. }
  1801. .isCType {
  1802. color: #6282c2;
  1803. }
  1804. .pType_box {
  1805. margin-top: 0;
  1806. }
  1807. .pType_box>>>.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner {
  1808. -webkit-box-shadow: none !important;
  1809. box-shadow: none !important;
  1810. }
  1811. .buttonBox {
  1812. position: absolute;
  1813. bottom: -0;
  1814. transform: translateY(100%);
  1815. background: #fff;
  1816. border-radius: 5px;
  1817. box-shadow: 0 0 3px 1px #e3e3e3;
  1818. width: 100%;
  1819. }
  1820. .buttonBox>div {
  1821. height: 40px;
  1822. line-height: 40px;
  1823. width: 100%;
  1824. text-align: center;
  1825. color: #000;
  1826. box-sizing: border-box;
  1827. }
  1828. .buttonBox>div+div {
  1829. border-top: 1px solid #e0e0e0;
  1830. }
  1831. .buttonBox>div:hover {
  1832. background: #f6f8ff;
  1833. }
  1834. </style>