index.vue 24 KB

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