index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844
  1. <template>
  2. <div id="">
  3. <table-list
  4. :tableSets="tableSet"
  5. :tableData="tableData"
  6. :navText="navText"
  7. :loading="loading"
  8. >
  9. <template slot="btn" slot-scope="props">
  10. <el-button type="text" @click="msgInfo(props.scope.row)"
  11. >课程内容详情</el-button
  12. ><el-button
  13. type="text"
  14. @click="exportBtn(props.scope.row)"
  15. style="margin-left: 0px"
  16. >导出课程结构</el-button
  17. >
  18. </template>
  19. </table-list>
  20. <pagination
  21. :total="total"
  22. :pageSize="formData.pageSize"
  23. :currentPage="formData.pageNum"
  24. @handleSizeChange="handleSizeChange"
  25. @handleCurrentChange="handleCurrentChange"
  26. />
  27. <el-dialog
  28. :visible.sync="dialogVisible"
  29. width="1300px"
  30. :show-close="false"
  31. :close-on-click-modal="false"
  32. >
  33. <div slot="title" class="hearders">
  34. <div class="leftTitle">{{ goodsBoxName }}</div>
  35. <div class="rightBoxs">
  36. <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
  37. </div>
  38. </div>
  39. <div class="dis_flexs">
  40. <div class="leftBoxs">
  41. <span v-if="!activeId" style="font-size: 30px"
  42. >请打开目录详情,点击播放您需要观看的视频内容。</span
  43. >
  44. <div v-show="vid" id="player"></div>
  45. <div v-show="vidzb" id="playerzb"></div>
  46. </div>
  47. <div class="rightBoxslist">
  48. <div v-for="(item, index) in courseList" :key="index" class="bg_ls">
  49. <div
  50. class="jus_sty"
  51. :style="
  52. item.checked
  53. ? 'border-bottom: 1px dotted #666;margin-bottom:6px;'
  54. : ''
  55. "
  56. >
  57. <div style="font-size: 12px">{{ item.courseName }}</div>
  58. <div class="line_h" @click="getCourseInfos(item, index)">
  59. {{ item.checked ? "—" : "+" }}
  60. </div>
  61. </div>
  62. <template v-if="item.checked">
  63. <div v-for="(items, indexs) in item.children" :key="indexs">
  64. <div
  65. class="firstSty"
  66. @click="getSecouredInfos(items, index, indexs)"
  67. >
  68. <div class="typeIcon" v-if="items.type === 3">
  69. {{ getTypeName(items.sectionType) }}
  70. </div>
  71. <i
  72. v-if="items.type !== 3"
  73. :class="
  74. items.checked
  75. ? 'el-icon-caret-bottom'
  76. : 'el-icon-caret-right'
  77. "
  78. ></i>
  79. <span :style="activeId === items.onlyId ? 'color:red;' : ''">
  80. {{ items.menuName }}
  81. </span>
  82. <span v-if="items.type === 3" class="itemsty">{{
  83. $methodsTools.secondToDate(items.durationTime, false)
  84. }}</span>
  85. </div>
  86. <template v-if="items.checked">
  87. <div
  88. v-for="(its, ids) in items.children"
  89. :key="ids"
  90. style="padding-left: 14px"
  91. >
  92. <div
  93. class="firstSty"
  94. @click="getTemsInfo(its, index, indexs, ids)"
  95. >
  96. <div class="typeIcon" v-if="its.type === 3">
  97. {{ getTypeName(its.sectionType) }}
  98. </div>
  99. <i
  100. v-if="its.type !== 3"
  101. :class="
  102. its.checked
  103. ? 'el-icon-caret-bottom'
  104. : 'el-icon-caret-right'
  105. "
  106. ></i>
  107. <span
  108. :style="activeId === its.onlyId ? 'color:red;' : ''"
  109. >
  110. {{ its.menuName }}
  111. </span>
  112. <span v-if="its.type === 3" class="itemsty">{{
  113. $methodsTools.secondToDate(its.durationTime, false)
  114. }}</span>
  115. </div>
  116. <template v-if="its.checked">
  117. <div
  118. v-for="(itschild, ids) in its.children"
  119. :key="ids"
  120. style="padding-left: 14px"
  121. @click="getTemsInfo(itschild)"
  122. >
  123. <div class="firstSty">
  124. <div class="typeIcon">
  125. {{ getTypeName(itschild.sectionType) }}
  126. </div>
  127. <span
  128. :style="
  129. activeId === itschild.onlyId ? 'color:red;' : ''
  130. "
  131. >
  132. {{ itschild.menuName }}
  133. </span>
  134. <span class="itemsty">{{
  135. $methodsTools.secondToDate(
  136. itschild.durationTime,
  137. false
  138. )
  139. }}</span>
  140. </div>
  141. </div>
  142. </template>
  143. </div>
  144. </template>
  145. </div>
  146. </template>
  147. </div>
  148. </div>
  149. </div>
  150. <span slot="footer" class="dialog-footer">
  151. <el-button @click="close">取 消</el-button>
  152. </span>
  153. </el-dialog>
  154. </div>
  155. </template>
  156. <script>
  157. import tableList from "@/components/tableList";
  158. import pagination from "@/components/pagination";
  159. export default {
  160. name: "",
  161. components: { tableList, pagination },
  162. data() {
  163. return {
  164. loading: false, //当前表单加载是否加载动画
  165. navText: {
  166. title: "课程列表",
  167. index: 0,
  168. ch: "条",
  169. num: false,
  170. changeWidth: "150px",
  171. border: true,
  172. choice: true,
  173. addHide: true,
  174. backFatherBtn: {
  175. status: false,
  176. title: "未定义",
  177. },
  178. },
  179. formData: {
  180. status: 1,
  181. pageSize: 10,
  182. pageNum: 1,
  183. commitPeriodStatus: 1,
  184. },
  185. // 表单
  186. tableSet: [
  187. {
  188. label: "教育类型",
  189. prop: "educationName",
  190. hidden: true,
  191. },
  192. {
  193. label: "业务层次",
  194. prop: "projectName",
  195. hidden: true,
  196. },
  197. {
  198. label: "商品编码",
  199. prop: "code",
  200. hidden: false,
  201. },
  202. {
  203. label: "商品名称",
  204. prop: "goodsName",
  205. hidden: true,
  206. },
  207. {
  208. label: "商品状态",
  209. prop: "status",
  210. hidden: false,
  211. scope: "hasTime",
  212. },
  213. {
  214. label: "学时",
  215. prop: "classHours",
  216. hidden: true,
  217. },
  218. {
  219. label: "官方审核备注说明",
  220. prop: "commitPeriodRemark",
  221. hidden: true,
  222. },
  223. {
  224. label: "学习服务期",
  225. prop1: "serviceTimeType",
  226. prop2: "serviceTimeNum",
  227. prop3: "studyStartTime",
  228. prop4: "studyEndTime",
  229. scope: "studentServicePeriod",
  230. hidden: false,
  231. },
  232. ],
  233. tableData: [], //表单数据
  234. total: 0, //一共多少条
  235. dialogVisible: false,
  236. courseList: [], //详情列表
  237. activeId: "", //当前选中ID
  238. vodPlayerJs: "https://player.polyv.net/script/player.js",
  239. vid: "",
  240. playerJs:
  241. "https://player.polyv.net/resp/live-h5-player/latest/liveplayer.min.js",
  242. uidzb: "egsxlptzdq",
  243. vidzb: "",
  244. goodsId: "",
  245. goodsBoxName: "",
  246. };
  247. },
  248. mounted() {
  249. this.$api
  250. .inquireCourseEducationType({
  251. educationName: "继续教育",
  252. status: 1,
  253. })
  254. .then((res) => {
  255. this.tableData = res.rows;
  256. if (res.rows && res.rows.length > 0) {
  257. this.$api
  258. .inquireCourseProjectType({
  259. educationId: res.rows[0].id,
  260. projectName: "施工现场专业人员",
  261. status: 1,
  262. })
  263. .then((result) => {
  264. if (result.rows && result.rows.length > 0) {
  265. this.formData.educationId = result.rows[0].educationId;
  266. this.formData.projectId = result.rows[0].id;
  267. this.search();
  268. } else {
  269. this.$message.error("项目类型未查询到施工现场专业人员");
  270. return;
  271. }
  272. });
  273. } else {
  274. this.$message.error("教育类型未查询到继续教育");
  275. return;
  276. }
  277. });
  278. },
  279. methods: {
  280. getTypeName(type) {
  281. let ast = "";
  282. switch (type) {
  283. case 1:
  284. ast = "录播";
  285. break;
  286. case 2:
  287. ast = "直播";
  288. break;
  289. case 3:
  290. ast = "回放";
  291. break;
  292. default:
  293. break;
  294. }
  295. return ast;
  296. },
  297. /**
  298. * 导出商品的课程结构
  299. */
  300. exportBtn(item) {
  301. this.$api
  302. .inquireGradegradeexportGoodsMenuExcel({ goodsId: item.goodsId })
  303. .then((res) => {
  304. this.$methodsTools.exportData(res.msg);
  305. });
  306. },
  307. /**
  308. * 关闭详情触发事件
  309. */
  310. close() {
  311. this.dialogVisible = false;
  312. this.clears();
  313. },
  314. search(int) {
  315. this.loading = true;
  316. if (int === 1) {
  317. this.formData.pageNum = 1;
  318. }
  319. var data = JSON.parse(JSON.stringify(this.formData));
  320. data.chapterNum = 1;
  321. this.$api
  322. .commonfreegoodslist(data)
  323. .then((res) => {
  324. this.tableData = res.rows;
  325. this.total = res.total;
  326. this.navText.index = res.total;
  327. })
  328. .finally(() => {
  329. this.loading = false;
  330. });
  331. },
  332. /**
  333. * 点击详情
  334. */
  335. msgInfo(option) {
  336. this.goodsBoxName = option.goodsName;
  337. this.$api.obtainCourseSgoodsId(option.goodsId).then(async (res) => {
  338. // if (res.rows.length) {
  339. if (!res.rows.length) {
  340. this.dialogVisible = true;
  341. } else {
  342. res.rows.forEach((item, index) => {
  343. item.checked = false;
  344. });
  345. this.courseList = res.rows;
  346. await this.autoGetCourseInfos(res.rows[0], 0);
  347. this.dialogVisible = true;
  348. }
  349. // } else {
  350. // this.$message.warning("该商品暂无课程");
  351. // return;
  352. // }
  353. });
  354. },
  355. /**
  356. * 自动播放第一个视频
  357. */
  358. autoGetCourseInfos(option, int) {
  359. return new Promise((resolve, reject) => {
  360. this.$api
  361. .inquireCoursemenuListS({ courseId: option.courseId })
  362. .then((res) => {
  363. res.rows.forEach((item) => {
  364. if (item.type !== 3) {
  365. item.checked = false;
  366. }
  367. if (item.type === 3) {
  368. item.onlyId = `${option.courseId}-0-0-${item.menuId}`;
  369. }
  370. });
  371. this.$set(this.courseList[int], "children", res.rows);
  372. this.$set(this.courseList[int], "checked", true);
  373. if (this.courseList[0].children.length) {
  374. switch (this.courseList[0].children[0].type) {
  375. case 1:
  376. this.$api
  377. .inquireCourseListmodulechapter(
  378. this.courseList[0].children[0].menuId
  379. )
  380. .then((resz) => {
  381. resz.data.forEach((item) => {
  382. if (item.type !== 3) {
  383. item.checked = false;
  384. item.type = 2;
  385. item.courseId =
  386. this.courseList[0].children[0].courseId;
  387. item.menuName = item.name;
  388. }
  389. });
  390. this.$set(
  391. this.courseList[int].children[0],
  392. "children",
  393. resz.data
  394. );
  395. this.$set(
  396. this.courseList[int].children[0],
  397. "checked",
  398. true
  399. );
  400. if (this.courseList[int].children[0].children.length) {
  401. this.$api
  402. .inquireCoursechaptersectionlist(
  403. this.courseList[0].children[0].children[0].chapterId
  404. )
  405. .then((result) => {
  406. result.data.forEach((item) => {
  407. item.type = 3;
  408. item.menuName = item.name;
  409. item.onlyId = `${this.courseList[0].children[0].children[0].courseId}-${this.courseList[0].children[0].children[0].moduleId}-${this.courseList[0].children[0].children[0].chapterId}-${item.sectionId}`;
  410. });
  411. this.$set(
  412. this.courseList[int].children[0].children[0],
  413. "children",
  414. result.data
  415. );
  416. this.$set(
  417. this.courseList[int].children[0].children[0],
  418. "checked",
  419. true
  420. );
  421. if (
  422. this.courseList[int].children[0].children[0]
  423. .children.length
  424. ) {
  425. this.activeId =
  426. this.courseList[0].children[0].children[0].children[0].onlyId;
  427. this.initVideo(
  428. this.courseList[0].children[0].children[0]
  429. .children[0]
  430. );
  431. }
  432. });
  433. }
  434. });
  435. break;
  436. case 2:
  437. this.$api
  438. .inquireCoursechaptersectionlist(
  439. this.courseList[0].children[0].menuId
  440. )
  441. .then((result) => {
  442. result.data.forEach((item) => {
  443. item.type = 3;
  444. item.menuName = item.name;
  445. item.onlyId = `${this.courseList[0].children[0].courseId}-0-${this.courseList[0].children[0].menuId}-${item.sectionId}`;
  446. });
  447. this.$set(
  448. this.courseList[int].children[0],
  449. "children",
  450. result.data
  451. );
  452. this.$set(
  453. this.courseList[int].children[0],
  454. "checked",
  455. true
  456. );
  457. if (this.courseList[0].children[0].children.length) {
  458. this.activeId =
  459. this.courseList[0].children[0].children[0].onlyId;
  460. this.initVideo(
  461. this.courseList[0].children[0].children[0]
  462. );
  463. }
  464. });
  465. break;
  466. case 3:
  467. this.activeId = this.courseList[0].children[0].onlyId;
  468. this.initVideo(this.courseList[0].children[0]);
  469. break;
  470. default:
  471. break;
  472. }
  473. }
  474. resolve();
  475. });
  476. });
  477. },
  478. /**
  479. * 点击课程
  480. */
  481. getCourseInfos(option, int) {
  482. if (option.checked) {
  483. this.$set(this.courseList[int], "checked", false);
  484. } else {
  485. if (option.children) {
  486. this.$set(this.courseList[int], "checked", true);
  487. return;
  488. }
  489. this.$api
  490. .inquireCoursemenuListS({ courseId: option.courseId })
  491. .then((res) => {
  492. res.rows.forEach((item) => {
  493. if (item.type !== 3) {
  494. item.checked = false;
  495. }
  496. if (item.type === 3) {
  497. item.onlyId = `${option.courseId}-0-0-${item.menuId}`;
  498. }
  499. });
  500. this.$set(this.courseList[int], "children", res.rows);
  501. this.$set(this.courseList[int], "checked", true);
  502. });
  503. }
  504. },
  505. getSecouredInfos(option, int, ints) {
  506. if (option.type === 3) {
  507. //触发节函数
  508. this.activeId = option.onlyId;
  509. this.initVideo(option);
  510. } else {
  511. if (option.checked) {
  512. this.$set(this.courseList[int].children[ints], "checked", false);
  513. } else {
  514. if (option.children) {
  515. this.$set(this.courseList[int].children[ints], "checked", true);
  516. return;
  517. }
  518. if (option.type === 1) {
  519. this.$api
  520. .inquireCourseListmodulechapter(option.menuId)
  521. .then((res) => {
  522. res.data.forEach((item) => {
  523. if (item.type !== 3) {
  524. item.checked = false;
  525. item.type = 2;
  526. item.courseId = option.courseId;
  527. item.menuName = item.name;
  528. }
  529. });
  530. this.$set(
  531. this.courseList[int].children[ints],
  532. "children",
  533. res.data
  534. );
  535. this.$set(this.courseList[int].children[ints], "checked", true);
  536. });
  537. }
  538. if (option.type === 2) {
  539. this.$api
  540. .inquireCoursechaptersectionlist(option.menuId)
  541. .then((res) => {
  542. res.data.forEach((item) => {
  543. item.type = 3;
  544. item.menuName = item.name;
  545. item.onlyId = `${option.courseId}-0-${option.menuId}-${item.sectionId}`;
  546. });
  547. this.$set(
  548. this.courseList[int].children[ints],
  549. "children",
  550. res.data
  551. );
  552. this.$set(this.courseList[int].children[ints], "checked", true);
  553. });
  554. }
  555. }
  556. }
  557. },
  558. getTemsInfo(option, int, ints, ids) {
  559. if (option.type === 3) {
  560. //触发节函数
  561. this.initVideo(option);
  562. } else {
  563. if (option.checked) {
  564. this.$set(
  565. this.courseList[int].children[ints].children[ids],
  566. "checked",
  567. false
  568. );
  569. } else {
  570. if (option.children) {
  571. this.$set(
  572. this.courseList[int].children[ints].children[ids],
  573. "checked",
  574. true
  575. );
  576. return;
  577. }
  578. if (option.type === 2) {
  579. this.$api
  580. .inquireCoursechaptersectionlist(option.chapterId)
  581. .then((res) => {
  582. res.data.forEach((item) => {
  583. item.type = 3;
  584. item.menuName = item.name;
  585. item.onlyId = `${option.courseId}-${option.moduleId}-${option.chapterId}-${item.sectionId}`;
  586. });
  587. this.$set(
  588. this.courseList[int].children[ints].children[ids],
  589. "children",
  590. res.data
  591. );
  592. this.$set(
  593. this.courseList[int].children[ints].children[ids],
  594. "checked",
  595. true
  596. );
  597. });
  598. }
  599. }
  600. }
  601. },
  602. handleSizeChange(v) {
  603. this.formData.pageSize = v;
  604. this.formData.pageNum = 1;
  605. this.search();
  606. },
  607. handleCurrentChange(v) {
  608. this.formData.pageNum = v;
  609. this.search();
  610. },
  611. async initVideo(option) {
  612. await this.clears();
  613. this.activeId = option.onlyId;
  614. if (option.sectionType === 2) {
  615. this.vidzb = option.liveUrl;
  616. this.loadPlayerScriptzb(this.loadPlayerzb);
  617. } else {
  618. this.vid = option.recordingUrl;
  619. this.loadPlayerScript(this.loadPlayer);
  620. }
  621. },
  622. loadPlayerScript(callback) {
  623. if (!window.polyvPlayer) {
  624. const myScript = document.createElement("script");
  625. myScript.setAttribute("src", this.vodPlayerJs);
  626. myScript.onload = callback;
  627. document.body.appendChild(myScript);
  628. } else {
  629. callback();
  630. }
  631. },
  632. loadPlayer() {
  633. var self = this;
  634. const polyvPlayer = window.polyvPlayer;
  635. self.player = polyvPlayer({
  636. wrap: "#player",
  637. width: 932,
  638. height: 627,
  639. vid: self.vid,
  640. teaser_show: 0,
  641. playsafe: function (vid, next) {
  642. self.$api.obtainpolyvvideosign(vid).then((res) => {
  643. next(res.data);
  644. });
  645. },
  646. });
  647. },
  648. /**
  649. * @param {String} 关闭视频窗口-销毁实例
  650. */
  651. clears() {
  652. return new Promise((resolve, reject) => {
  653. this.activeId = "";
  654. this.vid = "";
  655. this.vidzb = "";
  656. if (this.player) {
  657. this.player.destroy();
  658. }
  659. if (this.playerzb) {
  660. this.playerzb.destroy();
  661. }
  662. resolve();
  663. });
  664. },
  665. /**
  666. * @param {String} 直播预览
  667. */
  668. loadPlayerScriptzb(callback) {
  669. if (!window.polyvLivePlayer) {
  670. const myScript = document.createElement("script");
  671. myScript.setAttribute("src", this.playerJs);
  672. myScript.onload = callback;
  673. document.body.appendChild(myScript);
  674. } else {
  675. callback();
  676. }
  677. },
  678. loadPlayerzb() {
  679. const polyvLivePlayer = window.polyvLivePlayer;
  680. this.playerzb = polyvLivePlayer({
  681. wrap: "#playerzb",
  682. width: 932,
  683. height: 627,
  684. uid: this.uidzb,
  685. vid: this.vidzb,
  686. });
  687. },
  688. },
  689. };
  690. </script>
  691. <style lang="less" scoped>
  692. /deep/.el-button {
  693. border-radius: 8px;
  694. }
  695. /deep/.el-dialog {
  696. border-radius: 8px;
  697. .el-dialog__header {
  698. padding: 0;
  699. .hearders {
  700. height: 40px;
  701. display: flex;
  702. align-items: center;
  703. justify-content: space-between;
  704. padding: 0px 18px 0px 20px;
  705. border-bottom: 1px solid #e2e2e2;
  706. .leftTitle {
  707. font-size: 14px;
  708. font-weight: bold;
  709. color: #2f4378;
  710. }
  711. .rightBoxs {
  712. display: flex;
  713. align-items: center;
  714. img {
  715. width: 14px;
  716. height: 14px;
  717. margin-left: 13px;
  718. cursor: pointer;
  719. }
  720. }
  721. }
  722. }
  723. .el-dialog__footer {
  724. padding: 0;
  725. .dialog-footer {
  726. padding: 0px 40px;
  727. height: 70px;
  728. border-top: 1px solid #e2e2e2;
  729. display: flex;
  730. align-items: center;
  731. justify-content: flex-end;
  732. }
  733. }
  734. }
  735. .imgBox {
  736. width: 100%;
  737. // height: 210px;
  738. border: 1px solid #e2e2e2;
  739. border-radius: 8px;
  740. padding: 8px 8px 3px;
  741. display: flex;
  742. flex-direction: column;
  743. align-items: center;
  744. .imgLabel {
  745. flex: 1;
  746. width: 100%;
  747. border: 1px dotted #e2e2e2;
  748. color: #999;
  749. font-size: 14px;
  750. cursor: pointer;
  751. border-radius: 8px;
  752. .msPhoto {
  753. display: flex;
  754. justify-content: center;
  755. align-items: center;
  756. max-width: 100%;
  757. max-height: 270px;
  758. img {
  759. max-width: 100%;
  760. max-height: 270px;
  761. }
  762. }
  763. .imgbbx {
  764. display: flex;
  765. flex-direction: column;
  766. align-items: center;
  767. justify-content: center;
  768. width: 100%;
  769. height: 100%;
  770. i {
  771. font-weight: bold;
  772. margin: 14px 0;
  773. font-size: 24px;
  774. }
  775. }
  776. }
  777. p {
  778. margin: 5px 0px;
  779. }
  780. }
  781. .dis_flexs {
  782. display: flex;
  783. }
  784. .leftBoxs {
  785. width: 932px;
  786. height: 627px;
  787. border: 1px solid #eee;
  788. display: flex;
  789. align-items: center;
  790. justify-content: center;
  791. }
  792. .rightBoxslist {
  793. flex: 1;
  794. max-height: 627px;
  795. overflow-y: auto;
  796. margin-left: 10px;
  797. }
  798. .bg_ls {
  799. background-color: #eee;
  800. padding: 8px;
  801. margin-bottom: 10px;
  802. }
  803. .jus_sty {
  804. display: flex;
  805. justify-content: space-between;
  806. padding: 6px 0px;
  807. }
  808. .line_h {
  809. font-size: 14px;
  810. height: 18px;
  811. width: 18px;
  812. font-weight: bold;
  813. color: #000;
  814. background-color: rgb(153, 153, 153);
  815. line-height: 18px;
  816. text-align: center;
  817. cursor: pointer;
  818. }
  819. .firstSty {
  820. font-size: 13px;
  821. margin-bottom: 6px;
  822. cursor: pointer;
  823. &:hover {
  824. color: red;
  825. }
  826. }
  827. .typeIcon {
  828. display: inline-block;
  829. border-radius: 8px;
  830. border: 1px solid #000;
  831. padding: 0px 4px;
  832. color: #000 !important;
  833. font-size: 12px;
  834. }
  835. .itemsty {
  836. font-size: 13px;
  837. color: purple;
  838. margin-left: 14px;
  839. }
  840. </style>