CreateTask.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  1. <template>
  2. <div class="task">
  3. <step-bar :step-number="2" />
  4. <!-- 课程基本信息 -->
  5. <div class="task-course-info">
  6. <div class="cover">
  7. <el-image fit="contain" :src="picture_url" alt="封面" />
  8. </div>
  9. <div class="info">
  10. <div class="name">
  11. {{ name }}
  12. </div>
  13. <div class="date">
  14. {{ begin_date }}<span>-</span>{{ end_date }}
  15. </div>
  16. </div>
  17. </div>
  18. <!-- 按钮 -->
  19. <div class="task-button">
  20. <el-button class="prev-step" @click="preStep">
  21. <i class="el-icon-back" />选择教材
  22. </el-button>
  23. <el-button @click="$router.push(closeLink)">
  24. 关闭
  25. </el-button>
  26. </div>
  27. <!-- 任务课节 -->
  28. <div class="task-item">
  29. <!-- 课节列表 -->
  30. <div class="task-item-list">
  31. <template v-if="cs_item_list.length > 0">
  32. <div
  33. v-for="item in cs_item_list"
  34. :key="item.id"
  35. :class="['task-item-list-title', { selected: item.id === curItemID }]"
  36. @click="curItemID = item.id"
  37. >
  38. <span class="nowrap-ellipsis task-item-name" :title="item.name">{{ item.name }}</span>
  39. <!-- 课节下拉框 -->
  40. <el-dropdown placement="bottom" trigger="click" @command="handleCSItem">
  41. <i class="el-icon-more" />
  42. <el-dropdown-menu slot="dropdown">
  43. <el-dropdown-item class="dropdown-menu" :command="{ id: item.id, type: 'edit' }">
  44. <span>编辑</span><svg-icon icon-class="edit" />
  45. </el-dropdown-item>
  46. <el-dropdown-item class="dropdown-menu" :command="{ id: item.id, type: 'delete' }">
  47. <span>删除</span><svg-icon icon-class="delete" />
  48. </el-dropdown-item>
  49. </el-dropdown-menu>
  50. </el-dropdown>
  51. </div>
  52. </template>
  53. <div v-else class="task-item-list-title">
  54. 新课节
  55. </div>
  56. <el-button class="create-item selected" type="primary" @click="dialogVisible = true">
  57. <svg-icon icon-class="create-white" /> 创建新课节
  58. </el-button>
  59. </div>
  60. <!-- 课节信息 -->
  61. <div class="task-item-container">
  62. <div class="item-info">
  63. <div class="title">
  64. 课节信息
  65. </div>
  66. <div class="item-info-name">
  67. <div>课节名称</div>
  68. <el-input v-model="itemInfoBox.name" readonly />
  69. </div>
  70. <div class="item-info-date">
  71. <div>日期</div>
  72. <el-date-picker
  73. v-model="itemInfoBox.date"
  74. readonly
  75. type="daterange"
  76. range-separator="~"
  77. />
  78. </div>
  79. </div>
  80. <div class="item-task">
  81. <div class="title">
  82. <span class="number-tag">{{ taskLength }}</span>
  83. <span>课节任务</span>
  84. </div>
  85. <div class="item-task-pre task-container">
  86. <!-- 课前任务 -->
  87. <div class="item-task-pre-title">
  88. <span class="number-tag pre">{{ itemInfoBox.pre_task_list.length }}</span>
  89. <span>课前任务</span>
  90. </div>
  91. <div class="item-task-pre-list item-task-list">
  92. <el-card v-for="(item, i) in itemInfoBox.pre_task_list" :key="item.id">
  93. <el-collapse>
  94. <el-collapse-item>
  95. <template slot="title">
  96. <div class="card-title">
  97. <div class="name">
  98. {{ i + 1 }}. {{ item.name }}
  99. </div>
  100. <div class="info">
  101. {{ item.time_space_view_txt }}
  102. <!-- 任务下拉框 -->
  103. <el-dropdown placement="bottom" @command="handleTask">
  104. <i class="el-icon-more" />
  105. <el-dropdown-menu slot="dropdown">
  106. <el-dropdown-item
  107. class="dropdown-menu"
  108. :command="{ id: item.id, type: 'edit', time_type: 0 }"
  109. >
  110. <span>编辑</span><svg-icon icon-class="edit" />
  111. </el-dropdown-item>
  112. <el-dropdown-item
  113. class="dropdown-menu"
  114. :command="{ id: item.id, type: 'delete', time_type: 0 }"
  115. >
  116. <span>删除</span><svg-icon icon-class="delete" />
  117. </el-dropdown-item>
  118. </el-dropdown-menu>
  119. </el-dropdown>
  120. </div>
  121. </div>
  122. </template>
  123. <div class="task-info">
  124. <div>
  125. <span class="label">要求</span>
  126. <div>{{ item.content }}</div>
  127. </div>
  128. <div>
  129. <span class="label">课件</span>
  130. <div>
  131. <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
  132. {{ li.courseware_name }}
  133. </el-tag>
  134. </div>
  135. </div>
  136. <div>
  137. <span class="label">其他文件</span>
  138. <div>
  139. <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
  140. <a target="_blank" :href="li.file_url">
  141. {{ li.file_name }}
  142. </a>
  143. </el-tag>
  144. </div>
  145. </div>
  146. </div>
  147. </el-collapse-item>
  148. </el-collapse>
  149. </el-card>
  150. <el-button @click="newTask(0)">
  151. <i class="el-icon-plus" /> 新建任务
  152. </el-button>
  153. </div>
  154. </div>
  155. <!-- 课中任务 -->
  156. <div class="item-task-mid task-container">
  157. <div class="item-task-mid-title">
  158. <span class="number-tag mid">{{ itemInfoBox.mid_task_list.length }}</span>
  159. <span>课中任务</span>
  160. </div>
  161. <div class="item-task-mid-list item-task-list">
  162. <el-card v-for="(item, i) in itemInfoBox.mid_task_list" :key="item.id">
  163. <el-collapse>
  164. <el-collapse-item>
  165. <template slot="title">
  166. <div class="card-title">
  167. <div class="name">
  168. {{ itemInfoBox.pre_task_list.length + i + 1 }}. {{ item.name }}
  169. </div>
  170. <div class="info">
  171. {{ item.time_space_view_txt }}
  172. <el-dropdown placement="bottom" @command="handleTask">
  173. <i class="el-icon-more" />
  174. <el-dropdown-menu slot="dropdown">
  175. <el-dropdown-item
  176. class="dropdown-menu"
  177. :command="{ id: item.id, type: 'edit', time_type: 1 }"
  178. >
  179. <span>编辑</span><svg-icon icon-class="edit" />
  180. </el-dropdown-item>
  181. <el-dropdown-item
  182. class="dropdown-menu"
  183. :command="{ id: item.id, type: 'delete', time_type: 1 }"
  184. >
  185. <span>删除</span><svg-icon icon-class="delete" />
  186. </el-dropdown-item>
  187. </el-dropdown-menu>
  188. </el-dropdown>
  189. </div>
  190. </div>
  191. </template>
  192. <div class="task-info">
  193. <div>
  194. <span class="label">要求</span>
  195. <div>{{ item.content }}</div>
  196. </div>
  197. <div>
  198. <span class="label">课件</span>
  199. <div>
  200. <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
  201. {{ li.courseware_name }}
  202. </el-tag>
  203. </div>
  204. </div>
  205. <div>
  206. <span class="label">其他文件</span>
  207. <div>
  208. <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
  209. <a target="_blank" :href="li.file_url">
  210. {{ li.file_name }}
  211. </a>
  212. </el-tag>
  213. </div>
  214. </div>
  215. </div>
  216. </el-collapse-item>
  217. </el-collapse>
  218. </el-card>
  219. <el-button @click="newTask(1)">
  220. <i class="el-icon-plus" /> 新建任务
  221. </el-button>
  222. </div>
  223. </div>
  224. <!-- 课后任务 -->
  225. <div class="item-task-after task-container">
  226. <div class="item-task-after-title">
  227. <span class="number-tag after">{{ itemInfoBox.after_task_list.length }}</span>
  228. <span>课后任务</span>
  229. </div>
  230. <div class="item-task-after-list item-task-list">
  231. <el-card v-for="(item, i) in itemInfoBox.after_task_list" :key="item.id">
  232. <el-collapse>
  233. <el-collapse-item>
  234. <template slot="title">
  235. <div class="card-title">
  236. <div class="name">
  237. {{ itemInfoBox.pre_task_list.length + itemInfoBox.mid_task_list.length + i + 1 }}.
  238. {{ item.name }}
  239. </div>
  240. <div class="info">
  241. {{ item.time_space_view_txt }}
  242. <el-dropdown placement="bottom" @command="handleTask">
  243. <i class="el-icon-more" />
  244. <el-dropdown-menu slot="dropdown">
  245. <el-dropdown-item
  246. class="dropdown-menu"
  247. :command="{ id: item.id, type: 'edit', time_type: 2 }"
  248. >
  249. <span>编辑</span><svg-icon icon-class="edit" />
  250. </el-dropdown-item>
  251. <el-dropdown-item
  252. class="dropdown-menu"
  253. :command="{ id: item.id, type: 'delete', time_type: 2 }"
  254. >
  255. <span>删除</span><svg-icon icon-class="delete" />
  256. </el-dropdown-item>
  257. </el-dropdown-menu>
  258. </el-dropdown>
  259. </div>
  260. </div>
  261. </template>
  262. <div class="task-info">
  263. <div>
  264. <span class="label">要求</span>
  265. <div>{{ item.content }}</div>
  266. </div>
  267. <div>
  268. <span class="label">课件</span>
  269. <div>
  270. <el-tag v-for="li in item.courseware_list" :key="li.courseware_id" color="#fff">
  271. {{ li.courseware_name }}
  272. </el-tag>
  273. </div>
  274. </div>
  275. <div>
  276. <span class="label">其他文件</span>
  277. <div>
  278. <el-tag v-for="li in item.accessory_list" :key="li.file_id" color="#fff">
  279. <a target="_blank" :href="li.file_url">
  280. {{ li.file_name }}
  281. </a>
  282. </el-tag>
  283. </div>
  284. </div>
  285. </div>
  286. </el-collapse-item>
  287. </el-collapse>
  288. </el-card>
  289. <el-button @click="newTask(2)">
  290. <i class="el-icon-plus" /> 新建任务
  291. </el-button>
  292. </div>
  293. </div>
  294. </div>
  295. <div class="learning-materials">
  296. <div class="title">
  297. 学习资料
  298. </div>
  299. <div>
  300. <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
  301. <el-button><svg-icon icon-class="upload" /> 上传文件</el-button>
  302. </el-upload>
  303. </div>
  304. <div class="tag-list">
  305. <el-tag
  306. v-for="(item, i) in itemInfoBox.learning_material_list"
  307. :key="item.file_id"
  308. color="#fff"
  309. closable
  310. :title="item.file_name"
  311. @close="deleteMaterialFile(i, item.file_id)"
  312. >
  313. <span>{{ item.file_name }}</span>
  314. </el-tag>
  315. </div>
  316. </div>
  317. </div>
  318. </div>
  319. <!-- 课节弹出页 -->
  320. <add-item
  321. :id="itemId"
  322. :course-id="id"
  323. :type="type"
  324. :dialog-visible="dialogVisible"
  325. @dialogClose="dialogClose"
  326. @dialogConfirm="dialogConfirm"
  327. />
  328. </div>
  329. </template>
  330. <script>
  331. import StepBar from '@/components/StepBar.vue';
  332. import AddItem from './AddItem.vue';
  333. import { fileUpload } from '@/api/app';
  334. import {
  335. GetCourseInfo_ContainCSItem,
  336. GetCSItemInfoBox,
  337. DeleteCSItem,
  338. AddLearningMaterialToCSItem,
  339. DeleteLearningMaterialFromCSItem,
  340. DeleteTask
  341. } from '@/api/course';
  342. export default {
  343. name: 'CreateTask',
  344. components: {
  345. StepBar,
  346. AddItem
  347. },
  348. data() {
  349. let is_template = 'is_template' in this.$route.query ? this.$route.query.is_template === 'true' : false;
  350. return {
  351. id: this.$route.params.id,
  352. is_template,
  353. name: '',
  354. closeLink: JSON.parse(is_template) ? '/main?tab=TemplateList' : '/create_course',
  355. picture_url: '',
  356. begin_date: '',
  357. end_date: '',
  358. cs_item_list: [],
  359. curItemID: '',
  360. dialogVisible: false,
  361. type: 'add',
  362. itemId: '',
  363. itemInfoBox: {
  364. name: '',
  365. date: [],
  366. pre_task_list: [],
  367. mid_task_list: [],
  368. after_task_list: [],
  369. learning_material_list: []
  370. }
  371. };
  372. },
  373. computed: {
  374. taskLength() {
  375. return (
  376. this.itemInfoBox.pre_task_list.length +
  377. this.itemInfoBox.mid_task_list.length +
  378. this.itemInfoBox.after_task_list.length
  379. );
  380. }
  381. },
  382. watch: {
  383. curItemID() {
  384. this.getCSItemInfoBox();
  385. }
  386. },
  387. created() {
  388. this.getCourseInfo();
  389. },
  390. methods: {
  391. getCourseInfo() {
  392. GetCourseInfo_ContainCSItem({ id: this.id }).then(({ name, picture_url, begin_date, end_date, cs_item_list }) => {
  393. this.name = name;
  394. this.picture_url = picture_url;
  395. this.begin_date = begin_date;
  396. this.end_date = end_date;
  397. this.cs_item_list = cs_item_list;
  398. if (cs_item_list.length > 0) {
  399. this.curItemID = cs_item_list[cs_item_list.length - 1].id;
  400. }
  401. });
  402. },
  403. preStep() {
  404. this.$router.push({
  405. path: `/create_course_step_table/select_book/${this.id}?is_template=${this.is_template}`
  406. });
  407. },
  408. // 课节处理
  409. handleCSItem({ id, type }) {
  410. if (type === 'delete') {
  411. this.$confirm('您确定要删除该课节吗?', '提示', {
  412. confirmButtonText: '确定',
  413. cancelButtonText: '取消',
  414. type: 'warning'
  415. }).then(() => {
  416. DeleteCSItem({ id }).then(() => {
  417. this.$message.success('删除课节成功!');
  418. this.getCourseInfo();
  419. });
  420. });
  421. }
  422. if (type === 'edit') {
  423. this.dialogVisible = true;
  424. this.itemId = id;
  425. this.type = 'edit';
  426. }
  427. },
  428. dialogConfirm(type) {
  429. this.dialogVisible = false;
  430. this.type = 'add';
  431. if (type === 'add') {
  432. this.getCourseInfo();
  433. } else {
  434. this.getCSItemInfoBox();
  435. }
  436. },
  437. dialogClose() {
  438. this.dialogVisible = false;
  439. this.type = 'add';
  440. },
  441. getCSItemInfoBox() {
  442. GetCSItemInfoBox({ id: this.curItemID }).then(
  443. ({ name, begin_time, end_time, pre_task_list, mid_task_list, after_task_list, learning_material_list }) => {
  444. this.itemInfoBox.name = name;
  445. this.itemInfoBox.date = [begin_time.split(' ')[0], end_time.split(' ')[0]];
  446. this.itemInfoBox.pre_task_list = pre_task_list;
  447. this.itemInfoBox.mid_task_list = mid_task_list;
  448. this.itemInfoBox.after_task_list = after_task_list;
  449. this.itemInfoBox.learning_material_list = learning_material_list;
  450. }
  451. );
  452. },
  453. upload(file) {
  454. fileUpload('Open', file).then(({ file_info_list }) => {
  455. if (file_info_list.length > 0) {
  456. AddLearningMaterialToCSItem({
  457. cs_item_id: this.curItemID,
  458. file_id: file_info_list[0].file_id
  459. }).then(({ file_id, file_name, file_url }) => {
  460. this.itemInfoBox.learning_material_list.push({ file_id, file_name, file_url });
  461. });
  462. }
  463. });
  464. },
  465. deleteMaterialFile(i, file_id) {
  466. this.$confirm('您确定要删除这个文件吗?', '提示', {
  467. confirmButtonText: '确定',
  468. cancelButtonText: '取消',
  469. type: 'warning'
  470. }).then(() => {
  471. DeleteLearningMaterialFromCSItem({ cs_item_id: this.curItemID, file_id }).then(() => {
  472. this.$message.success('删除文件成功');
  473. this.itemInfoBox.learning_material_list.splice(i, 1);
  474. });
  475. });
  476. },
  477. // 任务处理
  478. newTask(time_type) {
  479. if (!this.curItemID) {
  480. this.$message.warning('请先创建新课节');
  481. return;
  482. }
  483. this.$router.push({
  484. path: `/create_course_step_table/new_task/${time_type}/${this.id}/${this.curItemID}?is_template=${this.is_template}`
  485. });
  486. },
  487. handleTask({ id, type, time_type }) {
  488. if (type === 'edit') {
  489. this.$router.push({
  490. path: `/create_course_step_table/new_task/${time_type}/${this.id}/${this.curItemID}?is_template=${this.is_template}`,
  491. query: {
  492. task_id: id
  493. }
  494. });
  495. }
  496. if (type === 'delete') {
  497. DeleteTask({ id }).then(() => {
  498. this.$message.success('删除任务成功');
  499. this.getCSItemInfoBox();
  500. });
  501. }
  502. }
  503. }
  504. };
  505. </script>
  506. <style lang="scss" scoped>
  507. @import '~@/styles/mixin';
  508. .task {
  509. @include container;
  510. margin-top: $step-h;
  511. // 上部的课程信息
  512. &-course-info {
  513. display: flex;
  514. width: 100%;
  515. height: 120px;
  516. background-color: #fff;
  517. border-radius: 8px;
  518. .cover {
  519. width: 192px;
  520. height: 100%;
  521. border-right: 1px solid #e5e5e5;
  522. .el-image {
  523. width: 100%;
  524. height: 100%;
  525. }
  526. }
  527. .info {
  528. padding: 26px 32px;
  529. .name {
  530. font-size: 24px;
  531. }
  532. .date {
  533. margin-top: 16px;
  534. font-size: 14px;
  535. color: #6b6b6b;
  536. span {
  537. margin: 0 24px;
  538. }
  539. }
  540. }
  541. }
  542. // 中间的按钮
  543. &-button {
  544. display: flex;
  545. justify-content: flex-end;
  546. margin: 16px 0;
  547. .el-button + .el-button {
  548. margin-left: 16px;
  549. }
  550. .prev-step .el-icon-back {
  551. margin-right: 12px;
  552. }
  553. .preserve .svg-icon {
  554. margin-right: 8px;
  555. }
  556. }
  557. // 下部的课节
  558. &-item {
  559. display: flex;
  560. align-items: stretch;
  561. border-radius: 8px;
  562. &-list {
  563. flex: 3;
  564. background-color: #eee;
  565. &-title {
  566. display: flex;
  567. justify-content: space-between;
  568. height: 56px;
  569. padding: 16px 24px;
  570. line-height: 24px;
  571. cursor: pointer;
  572. background-color: #eee;
  573. &.selected {
  574. background-color: #fff;
  575. }
  576. > .task-item-name {
  577. width: 275px;
  578. }
  579. }
  580. .create-item {
  581. width: calc(100% - 48px);
  582. padding: 11px 20px;
  583. margin: 24px;
  584. font-size: 16px;
  585. }
  586. }
  587. &-container {
  588. flex: 7;
  589. background-color: #fff;
  590. box-shadow: 0 2px 4px rgba(0, 0, 0, 12%), 0 0 6px rgba(0, 0, 0, 4%);
  591. // 学习资料
  592. %learning-materials,
  593. .learning-materials {
  594. padding: 24px 32px;
  595. .title {
  596. margin-bottom: 24px;
  597. font: {
  598. size: 18px;
  599. weight: 700;
  600. }
  601. }
  602. .tag-list {
  603. margin-top: 6px;
  604. .el-tag {
  605. margin-top: 6px;
  606. margin-right: 8px;
  607. }
  608. }
  609. }
  610. .item-info {
  611. @extend %learning-materials;
  612. border-bottom: 1px solid #d9d9d9;
  613. &-name,
  614. &-date {
  615. display: flex;
  616. margin-top: 16px;
  617. > :first-child {
  618. width: 110px;
  619. min-width: 120px;
  620. line-height: 40px;
  621. }
  622. .el-input {
  623. width: 600px;
  624. }
  625. }
  626. }
  627. // 课节任务
  628. .item-task {
  629. @extend %learning-materials;
  630. border-bottom: 1px solid #d9d9d9;
  631. .title {
  632. margin-bottom: 24px;
  633. }
  634. .number-tag {
  635. display: inline-block;
  636. padding: 12px 9px;
  637. margin-right: 8px;
  638. font-size: 12px;
  639. line-height: 0;
  640. color: #fff;
  641. vertical-align: bottom;
  642. background-color: #000;
  643. border-radius: 50%;
  644. }
  645. .task-container {
  646. .number-tag {
  647. padding: 10px 7px;
  648. }
  649. }
  650. // 课前任务
  651. &-pre {
  652. &-title {
  653. .pre {
  654. background-color: #4a99ea;
  655. }
  656. }
  657. &-list {
  658. padding-left: 19px;
  659. margin: 16px 9px;
  660. border-left: 2px solid #4a99ea;
  661. }
  662. }
  663. // 课中任务
  664. &-mid {
  665. &-title {
  666. .mid {
  667. background-color: $basic-color;
  668. }
  669. }
  670. &-list {
  671. padding-left: 19px;
  672. margin: 16px 9px;
  673. border-left: 2px solid $basic-color;
  674. }
  675. }
  676. // 课后任务
  677. &-after {
  678. &-title {
  679. .after {
  680. background-color: #2ece5b;
  681. }
  682. }
  683. &-list {
  684. padding-left: 19px;
  685. margin: 16px 9px;
  686. border-left: 2px solid #2ece5b;
  687. }
  688. }
  689. }
  690. }
  691. }
  692. }
  693. </style>
  694. <style lang="scss">
  695. // 任务列表
  696. .item-task-list {
  697. .el-card {
  698. margin-bottom: 16px;
  699. border-radius: 8px;
  700. .card-title {
  701. display: flex;
  702. justify-content: space-between;
  703. width: 100%;
  704. .name {
  705. font-weight: 600;
  706. }
  707. .info {
  708. color: #929292;
  709. .el-dropdown {
  710. margin-left: 16px;
  711. }
  712. }
  713. }
  714. }
  715. .el-card,
  716. .el-collapse-item__wrap {
  717. background-color: #f7f7f7;
  718. .el-collapse-item__content {
  719. padding: 15px 24px 9px;
  720. color: #000;
  721. background-color: #fff;
  722. .task-info > div {
  723. display: flex;
  724. align-items: center;
  725. padding: 8px 0;
  726. span.label {
  727. width: 80px;
  728. min-width: 80px;
  729. margin-right: 16px;
  730. }
  731. .el-tag {
  732. max-width: 275px;
  733. margin-right: 16px;
  734. overflow: hidden;
  735. color: #000;
  736. text-overflow: ellipsis;
  737. white-space: nowrap;
  738. border-color: #dbdbdb;
  739. }
  740. }
  741. }
  742. }
  743. .el-card.is-always-shadow,
  744. .el-card.is-hover-shadow:focus,
  745. .el-card.is-hover-shadow:hover {
  746. box-shadow: 0 0;
  747. }
  748. .el-card__body {
  749. padding: 0;
  750. background-color: #f7f7f7;
  751. .el-collapse-item__header {
  752. height: 22px;
  753. line-height: 22px;
  754. background-color: #f9f9f9;
  755. border-bottom-width: 0;
  756. .el-collapse-item__arrow {
  757. display: none;
  758. }
  759. &.focusing:focus:not(:hover) {
  760. color: #000;
  761. }
  762. }
  763. .el-collapse-item > div:first-child {
  764. padding: 10px 20px;
  765. background-color: #f9f9f9;
  766. border-bottom: 1px solid #e7e7e7;
  767. }
  768. }
  769. }
  770. .el-dropdown-menu {
  771. padding: 1px;
  772. .dropdown-menu {
  773. display: flex;
  774. align-items: center;
  775. justify-content: space-between;
  776. width: 128px;
  777. }
  778. }
  779. </style>