index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. <template>
  2. <div id="knowledgeManagement">
  3. <search-box-new
  4. ref="searchBox"
  5. :formData="formData"
  6. :formList="formList"
  7. @search="search"
  8. @init="init"
  9. />
  10. <table-list
  11. :tableSets="tableSet"
  12. :tableData="tableData"
  13. :navText="navText"
  14. @addClick="addClick"
  15. :loading="loading"
  16. @editInfo="editInfo"
  17. >
  18. <template slot="btn" slot-scope="props">
  19. <el-button type="text" @click="addClick(props.scope.row, 0)"
  20. >修改</el-button
  21. >
  22. <el-button type="text" @click="del(props.scope.row)">删除</el-button>
  23. </template>
  24. </table-list>
  25. <pagination
  26. :total="total"
  27. :pageSize="formData.pageSize"
  28. :currentPage="formData.pageNum"
  29. @handleSizeChange="handleSizeChange"
  30. @handleCurrentChange="handleCurrentChange"
  31. />
  32. <el-dialog
  33. :visible.sync="dialogVisible"
  34. width="790px"
  35. :show-close="false"
  36. :close-on-click-modal="false"
  37. >
  38. <div slot="title" class="hearders">
  39. <div class="leftTitle">
  40. {{ statusPop === 1 ? "添加" : statusPop === 0 ? "修改" : "详情" }}
  41. </div>
  42. <div class="rightBoxs">
  43. <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
  44. </div>
  45. </div>
  46. <div>
  47. <el-form
  48. label-position="right"
  49. label-width="110px"
  50. :model="listData"
  51. ref="listData"
  52. >
  53. <el-form-item
  54. v-for="(items, indexs) in listitem"
  55. :key="indexs"
  56. :label="items.label"
  57. :prop="items.prop"
  58. :required="true"
  59. >
  60. <div v-if="items.scope === 'buss'">
  61. <el-select
  62. v-model="eduType"
  63. placeholder="请选择教育类型"
  64. @change="changeEduType"
  65. >
  66. <el-option
  67. v-for="(item, index) in eduTypeOptions"
  68. :key="index"
  69. :label="item.educationName"
  70. :value="item.id"
  71. >
  72. </el-option>
  73. </el-select>
  74. <el-select
  75. v-model="courType"
  76. placeholder="请选择业务层次"
  77. @change="changecourseType"
  78. >
  79. <el-option
  80. v-for="(item, index) in newCourTypeOptions"
  81. :key="index"
  82. :label="item.projectName + '-' + item.businessName"
  83. :value="item.id"
  84. >
  85. </el-option>
  86. </el-select>
  87. <el-popover
  88. ref="popovers"
  89. placement="bottom"
  90. trigger="click"
  91. @show="showHandle"
  92. @hide="hideHandle"
  93. :disabled="courType ? false : true"
  94. >
  95. <el-checkbox
  96. v-model="checkAll"
  97. @change="handleCheckAllChange"
  98. :indeterminate="isIndeterminate"
  99. >全选</el-checkbox
  100. >
  101. <el-checkbox-group v-model="sujectArray" class="checkboxSty"
  102. @change="handleCheckedCitiesChange">
  103. <el-checkbox
  104. v-for="(item, index) in newSujectOption"
  105. :label="item.newId"
  106. :key="index"
  107. >{{ item.subjectName }}</el-checkbox
  108. >
  109. </el-checkbox-group>
  110. <div
  111. style="display: block; text-align: center; margin-top: 10px"
  112. >
  113. <el-button
  114. size="mini"
  115. type="primary"
  116. @click="submitSujectArray"
  117. >确定</el-button
  118. >
  119. </div>
  120. <el-button
  121. slot="reference"
  122. style="margin-left: 12px"
  123. @click="getMessage"
  124. >请选择科目</el-button
  125. >
  126. </el-popover>
  127. <span style="margin-left: 10px">注:可多选</span>
  128. </div>
  129. <div v-else-if="items.scope === 'activeBox'">
  130. <div :class="changeHeight ? 'ach' : 'clh'">
  131. <div
  132. v-for="(item, index) in newSujectApis"
  133. :key="index"
  134. class="listBoxStys"
  135. >
  136. {{
  137. item.educationName +
  138. " - " +
  139. item.projectName +
  140. " - " +
  141. item.businessName +
  142. " - " +
  143. item.subjectName
  144. }}
  145. <i
  146. class="el-icon-error closeIcons"
  147. @click="closeType(index)"
  148. ></i>
  149. </div>
  150. </div>
  151. <el-button
  152. size="mini"
  153. v-if="newSujectApis.length > 1"
  154. @click="changeType"
  155. >{{ changeHeight ? "展开" : "关闭" }}</el-button
  156. >
  157. <!-- <span v-if="newSujectApis.length === 0">未选项目类型</span> -->
  158. </div>
  159. <div v-else>
  160. <div v-if="statusPop === 0">
  161. <el-input v-model="listData.knowledgeName"></el-input>
  162. </div>
  163. <div v-else>
  164. <el-input
  165. style="width: 40%; margin-right: 10px"
  166. v-model="BusName"
  167. ></el-input
  168. ><el-button @click="addBusName">添加</el-button>
  169. <!-- <div v-if="!BusNameList.length">请在下面输入框添加知识点</div> -->
  170. <ul class="BusBoxs">
  171. <li
  172. class="fot_Le"
  173. v-for="(item, index) in BusNameList"
  174. :key="index"
  175. >
  176. {{ item }}
  177. <i
  178. class="el-icon-error icon_clear"
  179. @click="clearBusName(index)"
  180. ></i>
  181. </li>
  182. <div style="clear: both"></div>
  183. </ul>
  184. </div>
  185. </div>
  186. </el-form-item>
  187. </el-form>
  188. </div>
  189. <span slot="footer" class="dialog-footer">
  190. <el-button @click="close">取 消</el-button>
  191. <el-button type="primary" @click="submit">确 定</el-button>
  192. </span>
  193. </el-dialog>
  194. </div>
  195. </template>
  196. <script>
  197. import searchBoxNew from "@/components/searchBoxNew";
  198. import tableList from "@/components/tableList";
  199. import pagination from "@/components/pagination";
  200. export default {
  201. name: "KnowledgeManagement",
  202. components: { searchBoxNew, tableList, pagination },
  203. data() {
  204. return {
  205. isIndeterminate: false,
  206. checkAll: false,
  207. loading: false, //当前表单加载是否加载动画
  208. navText: {
  209. title: "知识点",
  210. index: 0,
  211. ch: "条",
  212. num: false,
  213. border:true,
  214. choice: true,
  215. addHide: false,
  216. backFatherBtn: {
  217. status: false,
  218. title: "未定义",
  219. },
  220. },
  221. //搜索
  222. formList: [
  223. {
  224. prop: "educationId",
  225. placeholder: "教育类型",
  226. scope: "educationType",
  227. },
  228. {
  229. prop: "businessId",
  230. placeholder: "业务层次",
  231. scope: "businessLevel",
  232. edu: "educationId",
  233. },
  234. {
  235. prop: "subjectId",
  236. placeholder: "科目",
  237. scope: "sujectType",
  238. edu: "educationId",
  239. },
  240. {
  241. prop: "knowledgeName",
  242. placeholder: "请输入知识点名称",
  243. },
  244. ],
  245. formData: {
  246. status: "0,1",
  247. pageSize: 10,
  248. pageNum: 1,
  249. },
  250. // 表单
  251. tableSet: [
  252. {
  253. label: "知识点编码",
  254. prop: "encoder",
  255. hidden: true,
  256. width:"140px"
  257. },
  258. {
  259. label: "知识点标题",
  260. prop: "knowledgeName",
  261. scope: "editInfo",
  262. hidden: true,
  263. width:"240px"
  264. },
  265. {
  266. label: "适用业务层级",
  267. prop: "courseBusinessList",
  268. hidden: true,
  269. scope: "mapTypesMores",
  270. },
  271. ],
  272. eduTypeOptions: [], //教育类型数据
  273. projectTypeOptions: [], //项目类型数据
  274. courTypeOptions: [], //业务层次数据
  275. newCourTypeOptions: [], //当前业务层次数据
  276. sujectOption: [], //科目数据
  277. newSujectOption: [], //当前科目数据数据
  278. eduType: "", //当前选中教育类型
  279. courType: "", //当前选中业务层次
  280. sujectApis: [], //当前存在的科目
  281. newSujectApis: [],
  282. sujectArray: [], //选中的科目
  283. BusName: "", //标签名称
  284. BusNameList: [], //标签列表
  285. tableData: [], //表单数据
  286. total: 0, //一共多少条
  287. changeHeight: false,
  288. listData: {},
  289. listitem: [
  290. {
  291. label: "适用业务层级",
  292. scope: "buss",
  293. },
  294. {
  295. label: "",
  296. scope: "activeBox",
  297. },
  298. {
  299. label: "知识点",
  300. },
  301. ],
  302. statusPop: 1,
  303. dialogVisible: false,
  304. };
  305. },
  306. watch: {
  307. sujectApis: {
  308. immediate: true,
  309. handler(newName, oldName) {
  310. this.changeTypes();
  311. },
  312. },
  313. },
  314. mounted() {
  315. this.getDict();
  316. this.search();
  317. },
  318. activated() {
  319. this.getDict();
  320. this.search();
  321. },
  322. methods: {
  323. handleCheckedCitiesChange() {
  324. let nid = this.newSujectOption.map((item) => {
  325. return item.newId;
  326. });
  327. this.checkAll = this.sujectArray.length === nid.length;
  328. this.isIndeterminate =
  329. this.sujectArray.length > 0 && this.sujectArray.length < nid.length;
  330. },
  331. setFunc(arr) {
  332. var arrays = [];
  333. for (let i = 0; i < arr.length; i++) {
  334. if (!arrays.includes(arr[i])) {
  335. arrays.push(arr[i]);
  336. }
  337. }
  338. return arrays;
  339. },
  340. handleCheckAllChange(val) {
  341. if (val) {
  342. let nid = this.newSujectOption.map((item) => {
  343. return item.newId;
  344. });
  345. let arrays = this.sujectArray.concat(nid);
  346. this.sujectArray = this.setFunc(arrays);
  347. this.isIndeterminate = false;
  348. } else {
  349. let nid = this.newSujectOption.map((item) => {
  350. return item.newId;
  351. });
  352. let newArr = [];
  353. this.sujectArray.forEach((item) => {
  354. if (!nid.includes(item)) {
  355. newArr.push(item);
  356. }
  357. });
  358. this.sujectArray = newArr;
  359. this.isIndeterminate = false;
  360. }
  361. },
  362. getMessage() {
  363. if (!this.courType) {
  364. this.$message.warning("请先选择业务层级");
  365. }
  366. },
  367. addBusName() {
  368. if (this.BusName.trim()) {
  369. this.BusNameList.push(this.BusName);
  370. this.BusName = "";
  371. } else {
  372. this.$message({
  373. message: "请输入知识点内容",
  374. type: "warning",
  375. duration: 1200,
  376. });
  377. this.BusName = "";
  378. }
  379. },
  380. changeTypes() {
  381. var self = this;
  382. var arrays = [];
  383. this.sujectApis.map((item, index) => {
  384. this.courTypeOptions.map((items) => {
  385. if (items.id === item.split("-").map(Number)[0]) {
  386. var obj = {
  387. educationTypeId: items.educationId,
  388. educationName: items.educationName,
  389. projectId: items.projectId,
  390. projectName: items.projectName,
  391. businessId: items.id,
  392. businessName: items.businessName,
  393. };
  394. self.sujectOption.map((i) => {
  395. if (
  396. i.id === item.split("-").map(Number)[1] &&
  397. i.courseArrays.indexOf(items.projectId) !== -1
  398. ) {
  399. obj.subjectName = i.subjectName;
  400. obj.subjectId = i.id;
  401. }
  402. });
  403. arrays.push(obj);
  404. }
  405. });
  406. });
  407. this.newSujectApis = arrays;
  408. },
  409. getDict() {
  410. this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
  411. this.eduTypeOptions = res.rows;
  412. });
  413. this.$api.inquireCourseProjectType({ status: 1 }).then((res) => {
  414. this.projectTypeOptions = res.rows;
  415. });
  416. this.$api.inquirebusinessList({ status: 1 }).then((res) => {
  417. this.courTypeOptions = res.rows;
  418. this.newCourTypeOptions = res.rows;
  419. });
  420. this.$api.inquireCourseSubject({ status: 1 }).then((res) => {
  421. res.rows.map((item, index) => {
  422. var array = [];
  423. item.courseProjectTypes.map((items, indexs) => {
  424. array.push(items.id);
  425. });
  426. item.courseArrays = array;
  427. });
  428. this.sujectOption = res.rows;
  429. });
  430. },
  431. editInfo(v) {
  432. this.addClick(v, 0);
  433. },
  434. //int === 1搜索 页码归1 int === 2重置 条件初始化
  435. search(int) {
  436. this.loading = true;
  437. if (int === 1) {
  438. this.formData.pageNum = 1;
  439. }
  440. if (int === 2) {
  441. this.formData = {
  442. status: "0,1",
  443. pageSize: 10,
  444. pageNum: 1,
  445. };
  446. }
  447. this.$api
  448. .inquireKnowledgeExamListS(this.formData)
  449. .then((res) => {
  450. this.tableData = res.rows;
  451. this.total = res.total;
  452. this.navText.index = res.total;
  453. })
  454. .finally(() => {
  455. this.loading = false;
  456. });
  457. },
  458. init() {
  459. this.search(2);
  460. },
  461. changeType() {
  462. this.changeHeight = !this.changeHeight;
  463. },
  464. changeEduType() {
  465. if (!(this.courType === undefined || this.courType === "")) {
  466. this.courType = "";
  467. }
  468. var arrays = [];
  469. this.courTypeOptions.map((item) => {
  470. if (item.educationId === this.eduType) {
  471. arrays.push(item);
  472. }
  473. });
  474. this.newCourTypeOptions = arrays;
  475. },
  476. changecourseType() {
  477. this.newCourTypeOptions.map((item, index) => {
  478. if (item.id === this.courType) {
  479. this.eduType = item.educationId;
  480. var array = [];
  481. this.sujectOption.map((items, indexs) => {
  482. if (items.courseArrays.indexOf(item.projectId) !== -1) {
  483. array.push(items);
  484. }
  485. });
  486. this.newSujectOption = array;
  487. }
  488. });
  489. var arrays = [];
  490. this.courTypeOptions.map((item) => {
  491. if (item.educationId === this.eduType) {
  492. arrays.push(item);
  493. }
  494. });
  495. this.newCourTypeOptions = arrays;
  496. this.$refs.popovers[0].doClose();
  497. },
  498. submitSujectArray() {
  499. var self = this;
  500. this.sujectApis = this.sujectApis.filter((item, index) => {
  501. return item.split("-").map(Number)[0] !== Number(self.courType);
  502. });
  503. for (let i = 0; i < this.sujectArray.length; i++) {
  504. this.sujectApis.push(this.sujectArray[i]);
  505. }
  506. this.$refs.popovers[0].doClose();
  507. },
  508. submit() {
  509. if (!this.newSujectApis.length) {
  510. this.$message.warning("请添加业务层级");
  511. return;
  512. }
  513. if (this.statusPop === 1) {
  514. if (!this.BusNameList.length) {
  515. this.$message.warning("请添加知识点");
  516. return;
  517. }
  518. var dataInfos = {
  519. status: 1,
  520. examKnowledgeBusinessAddBoList: this.newSujectApis,
  521. knowledgeName: this.BusNameList,
  522. };
  523. this.$api.addKnowledgeExam(dataInfos).then((res) => {
  524. this.$message.success("添加成功");
  525. this.dialogVisible = false;
  526. this.search();
  527. });
  528. } else {
  529. if (!this.listData.knowledgeName) {
  530. this.$message.warning("请输入知识点名称");
  531. return;
  532. }
  533. var dataInfos = {
  534. knowledgeName: this.listData.knowledgeName,
  535. status: this.listData.status,
  536. knowledgeId: this.listData.knowledgeId,
  537. examKnowledgeBusinessAddBoList: this.newSujectApis,
  538. };
  539. this.$api.editKnowledgeExam(dataInfos).then((res) => {
  540. this.$message.success("修改成功");
  541. this.dialogVisible = false;
  542. this.search();
  543. });
  544. }
  545. },
  546. del(v) {
  547. this.$alert(
  548. "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
  549. "提示",
  550. {
  551. dangerouslyUseHTMLString: true,
  552. }
  553. )
  554. .then(() => {
  555. var data = {
  556. knowledgeId: v.knowledgeId,
  557. status: -1,
  558. };
  559. this.$api.editKnowledgeExam(data).then((res) => {
  560. this.$message.success("删除成功");
  561. this.search();
  562. });
  563. })
  564. .catch(() => {
  565. this.$message({
  566. type: "info",
  567. message: "已取消删除",
  568. });
  569. });
  570. },
  571. hideHandle() {},
  572. showHandle() {
  573. var array = [];
  574. for (let i = 0; i < this.sujectApis.length; i++) {
  575. if (
  576. this.sujectApis[i].split("-").map(Number)[0] === Number(this.courType)
  577. ) {
  578. array.push(this.sujectApis[i]);
  579. }
  580. }
  581. this.sujectArray = array;
  582. if (!this.newSujectOption.length) {
  583. this.$message.warning("该业务层次暂无关联科目");
  584. this.$refs.popovers[0].doClose();
  585. return;
  586. }
  587. this.newSujectOption.map((item) => {
  588. item.newId = this.courType + "-" + item.id;
  589. });
  590. this.handleCheckedCitiesChange();
  591. },
  592. addClick(v, int) {
  593. if (v === undefined) {
  594. this.statusPop = 1;
  595. this.listData = {};
  596. this.eduType = ""; //当前选中教育类型
  597. this.courType = ""; //当前选中业务层次
  598. this.sujectApis = []; //当前存在的科目
  599. this.newSujectApis = [];
  600. this.sujectArray = []; //选中的科目
  601. this.BusName = "";
  602. this.BusNameList = [];
  603. } else {
  604. this.statusPop = int;
  605. this.eduType = ""; //当前选中教育类型
  606. this.courType = ""; //当前选中业务层次
  607. this.BusName = "";
  608. this.BusNameList = [];
  609. var arrays = [];
  610. this.listData = v;
  611. v.courseBusinessList.map((item) => {
  612. arrays.push(item.businessId + "-" + item.subjectId);
  613. });
  614. this.sujectApis = arrays;
  615. }
  616. this.$nextTick(() => {
  617. this.changeHeight = true;
  618. });
  619. this.dialogVisible = true;
  620. },
  621. close() {
  622. this.dialogVisible = false;
  623. },
  624. closeType(index) {
  625. this.sujectApis.splice(index, 1);
  626. },
  627. clearBusName(index) {
  628. this.BusNameList.splice(index, 1);
  629. },
  630. handleSizeChange(v) {
  631. this.formData.pageSize = v;
  632. this.formData.pageNum = 1;
  633. this.search();
  634. },
  635. handleCurrentChange(v) {
  636. this.formData.pageNum = v;
  637. this.search();
  638. },
  639. },
  640. };
  641. </script>
  642. <style lang="less" scoped>
  643. .checkboxSty {
  644. display: flex;
  645. flex-direction: column;
  646. }
  647. /deep/.el-button {
  648. border-radius: 8px;
  649. }
  650. /deep/.el-dialog {
  651. border-radius: 8px;
  652. .el-dialog__header {
  653. padding: 0;
  654. .hearders {
  655. height: 40px;
  656. display: flex;
  657. align-items: center;
  658. justify-content: space-between;
  659. padding: 0px 18px 0px 20px;
  660. border-bottom: 1px solid #e2e2e2;
  661. .leftTitle {
  662. font-size: 14px;
  663. font-weight: bold;
  664. color: #2f4378;
  665. }
  666. .rightBoxs {
  667. display: flex;
  668. align-items: center;
  669. img {
  670. width: 14px;
  671. height: 14px;
  672. margin-left: 13px;
  673. cursor: pointer;
  674. }
  675. }
  676. }
  677. }
  678. .el-dialog__footer {
  679. padding: 0;
  680. .dialog-footer {
  681. padding: 0px 40px;
  682. height: 70px;
  683. border-top: 1px solid #e2e2e2;
  684. display: flex;
  685. align-items: center;
  686. justify-content: flex-end;
  687. }
  688. }
  689. }
  690. .imgBox {
  691. width: 100%;
  692. // height: 210px;
  693. border: 1px solid #e2e2e2;
  694. border-radius: 8px;
  695. padding: 8px 8px 3px;
  696. display: flex;
  697. flex-direction: column;
  698. align-items: center;
  699. .imgLabel {
  700. flex: 1;
  701. width: 100%;
  702. border: 1px dotted #e2e2e2;
  703. color: #999;
  704. font-size: 14px;
  705. cursor: pointer;
  706. border-radius: 8px;
  707. .msPhoto {
  708. display: flex;
  709. justify-content: center;
  710. align-items: center;
  711. max-width: 100%;
  712. max-height: 270px;
  713. img {
  714. max-width: 100%;
  715. max-height: 270px;
  716. }
  717. }
  718. .imgbbx {
  719. display: flex;
  720. flex-direction: column;
  721. align-items: center;
  722. justify-content: center;
  723. width: 100%;
  724. height: 100%;
  725. i {
  726. font-weight: bold;
  727. margin: 14px 0;
  728. font-size: 24px;
  729. }
  730. }
  731. }
  732. p {
  733. margin: 5px 0px;
  734. }
  735. }
  736. .listBoxStys {
  737. flex-shrink: 0;
  738. padding: 0px 10px;
  739. border-radius: 8px;
  740. border: 1px solid #eee;
  741. margin-right: 10px;
  742. margin-bottom: 6px;
  743. }
  744. .closeIcons {
  745. color: red;
  746. cursor: pointer;
  747. margin-left: 6px;
  748. }
  749. .ach {
  750. display: flex;
  751. align-items: center;
  752. overflow: hidden;
  753. }
  754. .clh {
  755. display: flex;
  756. align-items: center;
  757. flex-wrap: wrap;
  758. }
  759. .BusBoxs {
  760. min-height: 100px;
  761. border: 1px solid #a4a4a4;
  762. margin-bottom: 10px;
  763. border-radius: 8px;
  764. max-height: 280px;
  765. padding: 10px;
  766. overflow-y: auto;
  767. .fot_Le {
  768. border-radius: 12px;
  769. border: 1px solid yellowgreen;
  770. padding: 0px 10px;
  771. height: 30px;
  772. line-height: 30px;
  773. text-align: center;
  774. float: left;
  775. margin-right: 6px;
  776. margin-bottom: 6px;
  777. .icon_clear {
  778. margin-left: 2px;
  779. font-size: 15px;
  780. color: #f56c6c;
  781. cursor: pointer;
  782. }
  783. }
  784. }
  785. </style>