iam-source-target-form.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. <template>
  2. <span>
  3. <audit-form-top-banner
  4. :handel-save-form="saveForm"
  5. :form-data="mode"
  6. @handelSaveForm="saveForm"
  7. @handelPublish="handelPublish"
  8. >
  9. <div class="ant-card ant-card-small">
  10. <div :class="$style.antCardBody">
  11. <sd-detail-form
  12. ref="docform"
  13. page-id="audit/auditsource/target/iamTarget"
  14. form-id="iamTarget"
  15. :record-id="this.$route.query.id ? parseInt(this.$route.query.id) : null"
  16. :class="[$style.form]"
  17. @close="close(true)"
  18. @saved="saved"
  19. @sdFormReady="sdFormReady"
  20. >
  21. <template v-slot="{ model, fields }">
  22. <table
  23. ><tr
  24. ><td>
  25. <audit-advanced-group
  26. :expand="basicExpand"
  27. :expand-str="'basicExpand'"
  28. :group-label="'基本信息'"
  29. tablestyle="''"
  30. @changedClick="changedClick"
  31. ></audit-advanced-group> </td></tr
  32. ></table>
  33. <table v-show="basicExpand" :class="$style.table">
  34. <colgroup>
  35. <col :class="$style.label" />
  36. <col :class="$style.input" />
  37. <col :class="$style.label" />
  38. <col :class="$style.input" />
  39. </colgroup>
  40. <tr>
  41. <sd-form-item-td name="orgId">
  42. {{ model.orgId }}
  43. </sd-form-item-td>
  44. <sd-form-item-td
  45. name="targetDeptMember"
  46. @change="targetDeptMemberChange(model)"
  47. />
  48. <!-- <sd-form-item-td name="targetDeptMember" @change="getOrgId(model)">
  49. <AuditGroupPicker
  50. ref="targetDeptMember"
  51. v-model="model.targetDeptMember"
  52. :single="true"
  53. :read-only="false"
  54. :root-node="rootNode"
  55. />
  56. </sd-form-item-td> -->
  57. </tr>
  58. <tr>
  59. <sd-form-item-td name="address" />
  60. <sd-form-item-td name="directorOperator"> </sd-form-item-td>
  61. </tr>
  62. <tr>
  63. <sd-form-item-td name="contractOperator" />
  64. <sd-form-item-td name="contract"> </sd-form-item-td>
  65. </tr>
  66. <!-- <tr class="iamtargetform">
  67. <sd-form-item-td
  68. name="whetherLeave"
  69. :colspan="3"
  70. @change="targetChange(model.whetherLeave, 'whetherLeave')"
  71. />
  72. </tr> -->
  73. <tr class="bklabeloverflow">
  74. <sd-form-item-td
  75. name="whetherFinance"
  76. @change="targetChange(model.whetherFinance, 'whetherFinance')"
  77. />
  78. <sd-form-item-td
  79. name="whetherInclude"
  80. @change="targetChange(model.whetherInclude, 'whetherInclude')"
  81. />
  82. <!-- <sd-form-item-td
  83. name="whetherOverseas"
  84. @change="targetChange(model.whetherOverseas, 'whetherOverseas')"
  85. /> -->
  86. </tr>
  87. <tr>
  88. <sd-form-item-td name="companyStatus" />
  89. </tr>
  90. <tr>
  91. <!-- 经责审计规则 -->
  92. <!-- <sd-form-item-td name="iamRule" readonly /> -->
  93. <sd-form-item-td name="iamRule" label="经责审计规则">
  94. <span>{{ getFormSelectFieldValue(model.iamRule) }}</span>
  95. </sd-form-item-td>
  96. <!-- <sd-form-item-td name="planIamYear" /> -->
  97. </tr>
  98. <tr>
  99. <sd-form-item-td name="description" :colspan="3">
  100. <a-textarea
  101. v-model="model.description"
  102. placeholder="请输入"
  103. :auto-size="{ minRows: 3, maxRows: 5 }"
  104. />
  105. </sd-form-item-td>
  106. </tr>
  107. <tr>
  108. <sd-form-item-td name="country" />
  109. <sd-form-item-td name="region" />
  110. </tr>
  111. <tr>
  112. <sd-form-item-td name="registerAddress" :colspan="3" />
  113. <sd-form-item-td name="simple" :hidden="true" />
  114. </tr>
  115. <tr>
  116. <!-- 作者 -->
  117. <sd-form-item-td name="creatorName" />
  118. <!-- 创建时间 -->
  119. <sd-form-item-td name="creationTime" />
  120. </tr>
  121. <tr>
  122. <!-- 维护人员所在单位 -->
  123. <sd-form-item-td name="upholdDeptName" />
  124. </tr>
  125. <tr>
  126. <!-- 附件 -->
  127. <sd-form-item-td name="attachment" :colspan="3" />
  128. </tr>
  129. </table>
  130. <table>
  131. <tr
  132. ><td :colspan="4">
  133. <sd-form-item name="iamAuditedYearEntities" :label="null">
  134. <template v-slot:read-and-edit="{ editable }">
  135. <audit-advanced-group
  136. :expand="projectExpand"
  137. :expand-str="'projectExpand'"
  138. :group-label="'全覆盖审计项目'"
  139. @changedClick="changedClick"
  140. >
  141. <template>
  142. <sd-child-table
  143. ref="auditeYear"
  144. v-model="model.iamAuditedYearEntities"
  145. :class="$style.deptPlanChild"
  146. label=""
  147. :read-only="!editable"
  148. :fields="
  149. [
  150. {
  151. caption: '序号',
  152. name: 'sortNum',
  153. dataType: 'number',
  154. attr: {},
  155. },
  156. ].concat(Array.from(fields.iamAuditedYearEntities.attr.dync))
  157. "
  158. :columns="auditeYearChildColumns"
  159. :flagpage="true"
  160. @change="changeNum"
  161. >
  162. <!-- input-form 表示这部分是子表组件的form插槽 -->
  163. <template v-if="projectAdmin" v-slot:form="{ model }">
  164. <table style="width: 90%">
  165. <tr>
  166. <!-- 已审计年份 -->
  167. <sd-form-item-td name="auditedYear" />
  168. </tr>
  169. <tr>
  170. <sd-form-item-td name="projectName" :colspan="3" />
  171. </tr>
  172. </table>
  173. </template>
  174. </sd-child-table>
  175. </template>
  176. </audit-advanced-group>
  177. </template> </sd-form-item
  178. ></td>
  179. </tr>
  180. </table>
  181. <table>
  182. <tr
  183. ><td :colspan="4">
  184. <sd-form-item name="iamTargetProjectEntities" :label="null">
  185. <template v-slot:read-and-edit="{ editable }">
  186. <audit-advanced-group
  187. :expand="projectExpand"
  188. :expand-str="'projectExpand'"
  189. :group-label="'历史被审项目'"
  190. @changedClick="changedClick"
  191. >
  192. <template>
  193. <sd-child-table
  194. ref="tabaData"
  195. v-model="model.iamTargetProjectEntities"
  196. :class="$style.deptPlanChild"
  197. label=""
  198. :read-only="!editable"
  199. :fields="
  200. [
  201. {
  202. caption: '序号',
  203. name: 'sortNum',
  204. dataType: 'number',
  205. attr: {},
  206. },
  207. ].concat(Array.from(fields.iamTargetProjectEntities.attr.dync))
  208. "
  209. :columns="projectChildColumns"
  210. :flagpage="true"
  211. @change="changeNum"
  212. >
  213. <!-- input-form 表示这部分是子表组件的form插槽 -->
  214. <template v-slot:form="{ model }">
  215. <table style="width: 90%">
  216. <tr>
  217. <!-- 项目名称 -->
  218. <sd-form-item-td name="projectName" />
  219. <!-- 项目编号 -->
  220. <sd-form-item-td name="projectNo" />
  221. </tr>
  222. <tr>
  223. <!-- 审计机构 -->
  224. <sd-form-item-td name="auditOrg" />
  225. <!-- 被审计单位 -->
  226. <sd-form-item-td name="auditedUnit" />
  227. </tr>
  228. <tr>
  229. <!-- 项目组长 -->
  230. <sd-form-item-td name="projectHeadman" />
  231. </tr>
  232. <tr>
  233. <!-- 项目开始日期 -->
  234. <!-- 项目结束日期 -->
  235. <sd-form-item-td
  236. label="项目起止日期"
  237. :colspan="3"
  238. :name="['projectStartTime', 'projectEndTime']"
  239. />
  240. </tr>
  241. <tr>
  242. <!-- 审计期间开始时间 -->
  243. <!-- 审计期间结束时间 -->
  244. <sd-form-item-td
  245. label="审计期间"
  246. :colspan="3"
  247. :name="['auditStartTime', 'auditEndTime']"
  248. />
  249. </tr>
  250. <tr>
  251. <!-- 项目内容 -->
  252. <sd-form-item-td name="auditCondition" :colspan="3">
  253. <a-textarea v-model="model.auditCondition" :rows="4" />
  254. </sd-form-item-td>
  255. </tr>
  256. <tr>
  257. <!-- 维护人员 -->
  258. <sd-form-item-td name="creatorName" />
  259. <!-- 维护日期 -->
  260. <sd-form-item-td name="creationTime" />
  261. </tr>
  262. <tr>
  263. <!-- 附件 -->
  264. <sd-form-item-td name="attachment" :colspan="3" />
  265. </tr>
  266. </table>
  267. </template>
  268. </sd-child-table>
  269. </template>
  270. </audit-advanced-group>
  271. </template> </sd-form-item
  272. ></td>
  273. </tr>
  274. </table>
  275. </template>
  276. </sd-detail-form>
  277. </div>
  278. </div>
  279. </audit-form-top-banner>
  280. <iam-audit-modal
  281. :single="false"
  282. :check-type="'radio'"
  283. select-type="table"
  284. :visible="visible"
  285. :treeparams="{
  286. configId: '11',
  287. }"
  288. :columns="columns"
  289. @listSelected="listSelected"
  290. @getCheckNode="getCheckNode"
  291. ></iam-audit-modal>
  292. </span>
  293. </template>
  294. <script>
  295. import { Message, Modal } from 'ant-design-vue'
  296. import axios from '@/common/services/axios-instance'
  297. import { getUserInfo } from '@/common/store-mixin'
  298. import crossWindowWatcher from '@/common/services/cross-window-watcher'
  299. import sdDateFormat from '@/common/filters/sd-date-format'
  300. import auditFormTopBanner from '../../../components/audit-form-top-banner'
  301. import iamAuditModal from '../../../components/iam-audit-modal.vue'
  302. import auditAdvancedGroup from '../../../components/audit-advanced-group.vue'
  303. // import AuditGroupPicker from '../../../components/picker/audit-group-picker.vue'
  304. import auditAdvancedGroupMixins from '../../../components/audit-advanced-group-mixins'
  305. import components from './_import-components/iam-source-target-form-import'
  306. export default {
  307. name: 'IamSourceTargetForm',
  308. metaInfo() {
  309. return {
  310. title: '审计对象',
  311. }
  312. },
  313. components: {
  314. auditFormTopBanner,
  315. ...components,
  316. auditAdvancedGroup,
  317. iamAuditModal,
  318. // AuditGroupPicker,
  319. },
  320. mixins: [auditAdvancedGroupMixins],
  321. data() {
  322. return {
  323. projectAdmin: false,
  324. secUnitflag: null,
  325. rootNode: {},
  326. defaultCategory: '',
  327. labelArray: [],
  328. publishFlag: false,
  329. basicExpand: true,
  330. projectExpand: true,
  331. CheckExpand: true,
  332. visible: false,
  333. checkChildColumns: [
  334. { dataIndex: 'lawsLibraryId', sdHidden: true },
  335. { dataIndex: 'lawsType', sdHidden: true },
  336. {
  337. title: '序号',
  338. dataIndex: 'sortNum',
  339. width: '70px',
  340. customRender: (text, record, index) => `${index + 1}`,
  341. },
  342. ],
  343. projectChildColumns: [
  344. {
  345. title: '序号',
  346. dataIndex: 'sortNum',
  347. width: '80px',
  348. customRender: (text, record, index) => `${index + 1}`,
  349. },
  350. { dataIndex: 'projectName', sdHidden: false },
  351. { dataIndex: 'projectNo', sdHidden: false, width: '150px' },
  352. { dataIndex: 'auditOrg', sdHidden: false, width: '180px' },
  353. { dataIndex: 'auditedUnit', sdHidden: true },
  354. { dataIndex: 'projectHeadman', sdHidden: false, width: '120px' },
  355. {
  356. dataIndex: 'projectStartEndTime',
  357. sdHidden: false,
  358. customRender: (text, record, index) => {
  359. var startTime = sdDateFormat(record.projectStartTime, 'yyyy-MM-DD')
  360. var endTime = sdDateFormat(record.projectEndTime, 'yyyy-MM-DD')
  361. return startTime + '~' + endTime
  362. },
  363. },
  364. { dataIndex: 'projectStartTime', sdHidden: true },
  365. { dataIndex: 'projectEndTime', sdHidden: true },
  366. { dataIndex: 'auditStartTime', sdHidden: true },
  367. { dataIndex: 'auditEndTime', sdHidden: true, title: '审计结束日期', width: '150px' },
  368. { dataIndex: 'auditCondition', sdHidden: false, width: '25%' },
  369. { dataIndex: 'creatorName', sdHidden: true },
  370. { dataIndex: 'creationTime', sdHidden: true },
  371. { dataIndex: 'attachment', sdHidden: true },
  372. ],
  373. auditeYearChildColumns: [
  374. {
  375. title: '序号',
  376. dataIndex: 'sortNum',
  377. width: '80px',
  378. customRender: (text, record, index) => `${index + 1}`,
  379. },
  380. { dataIndex: 'auditedYear', width: '120px', sdHidden: false },
  381. { dataIndex: 'projectName', sdHidden: false },
  382. ],
  383. expressions: [],
  384. columns: [
  385. {
  386. title: '机构名称',
  387. dataIndex: 'orgName',
  388. width: '15%',
  389. },
  390. {
  391. title: '机构编码',
  392. dataIndex: 'orgId',
  393. width: '10%',
  394. },
  395. ],
  396. mode: null,
  397. iamRuleOptions: [],
  398. }
  399. },
  400. created() {
  401. let userInfo = getUserInfo()
  402. const params = {
  403. orgId: userInfo.deptId,
  404. }
  405. axios({
  406. url: 'api/xcoa-mobile/v1/iamorg/getCurrentUserGroup',
  407. method: 'get',
  408. }).then((res) => {
  409. userInfo = res.data
  410. params.orgId = res.data.id
  411. axios({
  412. url: 'api/xcoa-mobile/v1/iamorg/findIamOrgId',
  413. method: 'post',
  414. params,
  415. }).then((res) => {
  416. this.id = res.data
  417. const deptCode = userInfo.id.toString()
  418. const deptName = userInfo.name
  419. this.rootNode = { code: deptCode, name: deptName, id: this.id }
  420. })
  421. })
  422. },
  423. mounted() {
  424. axios({
  425. url: 'api/xcoa-mobile/v1/iam-law/dictionary?key=IAM_RULE',
  426. method: 'get',
  427. }).then((res) => {
  428. if (res.status === 200) {
  429. this.iamRuleOptions = res.data
  430. }
  431. })
  432. this.projectAdmin = getUserInfo().roles.find((item) => {
  433. return item.code === 'G-1_TARGET_PROJECT'
  434. })
  435. },
  436. methods: {
  437. // 页面加载完成后
  438. // url: 'api/xcoa-mobile/v1/iamorg/getCurrentUserGroup',
  439. // url: 'api/xcoa-mobile/v1/iamtarget/getCreatorGroup',
  440. sdFormReady() {
  441. this.mode = this.$refs.docform.formData.mode
  442. debugger
  443. axios({
  444. url: 'api/xcoa-mobile/v1/iamtarget/getCreatorGroup',
  445. method: 'post',
  446. }).then((res) => {
  447. this.$refs.docform.setFieldValue('upholdDeptName', res.data.name)
  448. this.$refs.docform.setFieldValue('upholdDeptId', res.data.id)
  449. this.$refs.docform.setFieldValue('upholdDeptCode', res.data.code)
  450. })
  451. },
  452. targetChange(val, e) {
  453. debugger
  454. let iamRule = ''
  455. var targetDeptMember = this.$refs.docform.getFieldValue('targetDeptMember')
  456. const whetherFinance = this.$refs.docform.getFieldValue('whetherFinance')
  457. // const whetherOverseas = this.$refs.docform.getFieldValue('whetherOverseas')
  458. const whetherInclude = this.$refs.docform.getFieldValue('whetherInclude')
  459. if (whetherFinance === '1' || whetherInclude === '1') {
  460. iamRule = '0'
  461. } else {
  462. if (this.secUnitflag != null && !this.secUnitflag) {
  463. iamRule = '1'
  464. }
  465. if (this.secUnitflag) {
  466. iamRule = '2'
  467. }
  468. }
  469. this.$refs.docform.setFieldValue('iamRule', iamRule)
  470. },
  471. auditRule() {
  472. let iamRule = ''
  473. const whetherInclude = this.$refs.docform.getFieldValue('whetherInclude')
  474. const whetherFinance = this.$refs.docform.getFieldValue('whetherFinance')
  475. const whetherLeave = this.$refs.docform.getFieldValue('whetherLeave')
  476. // if (whetherLeave === '1') {
  477. // iamRule = '3'
  478. // }
  479. // if (whetherFinance === '1' || whetherInclude === '1') {
  480. // iamRule = '0'
  481. // }
  482. if (whetherFinance === '1' || whetherInclude === '1') {
  483. iamRule = '0'
  484. } else {
  485. if (this.secUnitflag != null && !this.secUnitflag) {
  486. iamRule = '1'
  487. }
  488. }
  489. // if (whetherLeave === '1') {
  490. // iamRule = '3'
  491. // } else
  492. if (whetherFinance === '1' || whetherInclude === '1') {
  493. iamRule = '0'
  494. } else {
  495. if (this.secUnitflag) {
  496. iamRule = '2'
  497. }
  498. }
  499. this.$refs.docform.setFieldValue('iamRule', iamRule)
  500. },
  501. getOrgId(model) {
  502. var targetDeptMember = model.targetDeptMember
  503. var code = targetDeptMember[0].code
  504. this.$refs.docform.setFieldValue('orgId', code)
  505. },
  506. targetDeptMemberChange1(targetDeptMember) {
  507. var code = targetDeptMember[0].code
  508. if (code !== null && code !== '') {
  509. axios({
  510. url: 'api/xcoa-mobile/v1/iamtarget/checkGroup?code=' + code,
  511. method: 'get',
  512. }).then((res) => {
  513. this.secUnitflag = res.data
  514. this.auditRule()
  515. })
  516. } else {
  517. this.secUnitflag = null
  518. this.auditRule()
  519. }
  520. },
  521. targetDeptMemberChange(model) {
  522. debugger
  523. var targetDeptMember = model.targetDeptMember
  524. if (targetDeptMember.length > 0) {
  525. var code = targetDeptMember[0].code
  526. axios({
  527. url: 'api/xcoa-mobile/v1/iamtarget/analysisRegisterAddress?code=' + code,
  528. method: 'get',
  529. }).then((res) => {
  530. this.$refs.docform.setFieldValue('country', res.data.country)
  531. this.$refs.docform.setFieldValue('region', res.data.region)
  532. this.$refs.docform.setFieldValue('registerAddress', res.data.registerAddress)
  533. this.$refs.docform.setFieldValue('simple', res.data.abbreviation)
  534. })
  535. this.$refs.docform.setFieldValue('orgId', code)
  536. axios({
  537. url: 'api/xcoa-mobile/v1/iamtarget/checkGroup?code=' + code,
  538. method: 'get',
  539. }).then((res) => {
  540. this.secUnitflag = res.data
  541. this.auditRule()
  542. })
  543. } else {
  544. this.secUnitflag = null
  545. this.auditRule()
  546. }
  547. },
  548. showModal() {
  549. this.visible = true
  550. },
  551. Selected(keys, keyinfos) {
  552. this.visible = false
  553. if (keyinfos?.length > 0) {
  554. this.$refs.docform.setFieldValue('orgName', keyinfos[0].orgName)
  555. this.$refs.docform.setFieldValue('orgId', keyinfos[0].orgId)
  556. }
  557. },
  558. getCheckNode(checkNode) {
  559. this.visible = false
  560. },
  561. changeNum(data) {
  562. data.forEach((item, index) => {
  563. item.sortNum = index + 1
  564. })
  565. },
  566. handleChange(model, event) {
  567. model.label = event.join('、')
  568. this.labelArray = [...event]
  569. },
  570. handelPublish() {},
  571. saveForm() {
  572. var orgId = this.$refs.docform.getFieldValue('orgId')
  573. var id = this.$route.query.id ? this.$route.query.id : null
  574. if (orgId) {
  575. axios({
  576. url: 'api/xcoa-mobile/v1/iamtarget/validate?id=' + id + '&orgId=' + orgId,
  577. method: 'get',
  578. }).then((res) => {
  579. if (res.status === 200) {
  580. if (res.data) {
  581. this.$refs.docform.saveBtnClick()
  582. } else {
  583. Message.error('该机构已存在', 1)
  584. }
  585. }
  586. })
  587. }
  588. },
  589. saved() {
  590. Message.success({ content: '保存成功!' }).then(() => {
  591. this.close(true)
  592. })
  593. },
  594. initParam(val) {
  595. setTimeout(() => {
  596. var flow = this.$refs.docform
  597. if (
  598. flow.getFieldValue('parentId') === null ||
  599. flow.getFieldValue('parentId') === undefined ||
  600. flow.getFieldValue('parentId') === ''
  601. ) {
  602. if (this.$route.query?.typeId) {
  603. this.$refs.docform.setFieldValue('parentId', this.$route.query.typeId)
  604. }
  605. }
  606. }, 0)
  607. return true
  608. },
  609. close(flag) {
  610. crossWindowWatcher.notifyChange(this.$route.path, flag)
  611. window.close()
  612. },
  613. validForm() {
  614. return new Promise((resolve, reject) => {
  615. resolve(true)
  616. })
  617. },
  618. getFormSelectFieldValue(value) {
  619. let result = ''
  620. if (value !== undefined) {
  621. const resultArry = this.iamRuleOptions.filter((e) => {
  622. return e.id === value
  623. })
  624. if (resultArry.length > 0) {
  625. result = resultArry[0].name
  626. }
  627. }
  628. return result
  629. },
  630. },
  631. }
  632. </script>
  633. <style module lang="scss">
  634. @import '@/webflow/sd-flow-form.scss';
  635. .ant-card-body {
  636. padding: 12px;
  637. :global(.buttons_sd-detail-form_common) {
  638. :global(.ant-form-item-control-wrapper) {
  639. padding-top: 4%;
  640. padding-left: 24%;
  641. }
  642. }
  643. .tr_border {
  644. box-sizing: border-box;
  645. border-right: 1px solid #e8e8e8;
  646. border-left: 1px solid #e8e8e8;
  647. }
  648. :global(.title_sd-detail-form_common) {
  649. font-size: 1.5em;
  650. text-align: center;
  651. }
  652. }
  653. .form {
  654. :global .iamtargetform > td.ant-form-item-label > label {
  655. width: 160px;
  656. white-space: break-spaces !important;
  657. }
  658. }
  659. </style>