course.vue 51 KB

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