teacher_authentication_add.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. <template>
  2. <view class="auth-Container" style="background-color: #f0f0f0;">
  3. <uni-forms ref="baseForm" :modelValue="baseFormData" labelWidth="75px" :rules="rules" validateTrigger="bind">
  4. <uni-forms-item label="真实姓名" name="name" required>
  5. <uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" maxlength="6" trim="both" />
  6. </uni-forms-item>
  7. <uni-forms-item label="手机号" name="phone" required>
  8. <uni-row>
  9. <uni-col :span="14">
  10. <uni-easyinput v-model="baseFormData.phone" placeholder="请输入手机号" :disabled="disabledPhone" trim="both" />
  11. </uni-col>
  12. <uni-col :span="8" :offset="2">
  13. <view class="phoneClass">
  14. <button class="getPhone" open-type="getPhoneNumber" type="primary" size="mini"
  15. @getphonenumber="getPhoneNumber">一键获取</button>
  16. </view>
  17. </uni-col>
  18. </uni-row>
  19. </uni-forms-item>
  20. <uni-forms-item label="微信号" name="weixinId" required>
  21. <uni-easyinput v-model="baseFormData.weixinId" placeholder="微信号(不便接听电话时微信沟通)" maxlength="25"
  22. trim="both" />
  23. </uni-forms-item>
  24. <uni-forms-item label="英文名" name="englishName">
  25. <uni-easyinput v-model="baseFormData.englishName" placeholder="请输入你的英文名" maxlength="25" trim="both" />
  26. </uni-forms-item>
  27. <uni-forms-item label="身份证号" name="idCard" required>
  28. <uni-easyinput v-model="baseFormData.idCard" type="idcard" placeholder="请输入你的身份证号" />
  29. </uni-forms-item>
  30. <uni-forms-item label="性别" name="sex" required>
  31. <uni-data-checkbox v-model="baseFormData.sex" :localdata="sexs" />
  32. </uni-forms-item>
  33. <uni-forms-item label="身份" name="identify" required>
  34. <uni-data-checkbox v-model="baseFormData.identify" :localdata="identifies"/>
  35. </uni-forms-item>
  36. <uni-forms-item label="身份证照片" required>
  37. <text style="color: blue;">(说明:需要能看清楚证件号码、日期及头像)</text>
  38. <uni-file-picker fileMediatype="image" :sizeType="sizeType" :imageStyles="listStyle" v-model="idCardFrontByte" :fileExtname="fileExtname" limit="1" title="身份证正面" @select="selectPhoto('idCardFront', $event)" @delete="deletePhoto('idCardFront', $event)" />
  39. <uni-file-picker fileMediatype="image" :sizeType="sizeType" :imageStyles="listStyle" v-model="idCardBackByte" :fileExtname="fileExtname" limit="1" title="身份证背面" @select="selectPhoto('idCardBack', $event)" @delete="deletePhoto('idCardBack', $event)" />
  40. </uni-forms-item>
  41. <uni-forms-item label="学生/毕业证" required>
  42. <text style="color: blue;">(已毕业的需要上传毕业证)</text>
  43. <uni-file-picker fileMediatype="image" :sizeType="sizeType" :imageStyles="listStyle" v-model="diplomaPhotoByte" :fileExtname="fileExtname" limit="1" @select="selectPhoto('diplomaPhoto', $event)" @delete="deletePhoto('diplomaPhoto', $event)" />
  44. </uni-forms-item>
  45. <uni-forms-item label="头像" required>
  46. <text style="color: blue;">(说明:只能上传证件照,上传其他照片审核不予通过)</text>
  47. <uni-file-picker fileMediatype="image" :sizeType="sizeType" :imageStyles="listStyle" v-model="profilePhotoByte" :fileExtname="fileExtname" limit="1" @select="selectPhoto('profilePhoto', $event)" @delete="deletePhoto('profilePhoto', $event)" />
  48. </uni-forms-item>
  49. <uni-forms-item label="毕业/就读学校" name="school" required>
  50. <uni-easyinput v-model="baseFormData.school" placeholder="请输入学校全称" maxlength="30" trim="both" />
  51. </uni-forms-item>
  52. <uni-forms-item label="所学专业" name="major" required>
  53. <uni-easyinput v-model="baseFormData.major" placeholder="请输入专业名称" maxlength="20" trim="both" />
  54. </uni-forms-item>
  55. <uni-forms-item label="学历" name="education" required>
  56. <uni-data-select v-model="baseFormData.education" :localdata="educations" />
  57. </uni-forms-item>
  58. <uni-forms-item label="籍贯" name="nativePlace" required>
  59. <uni-easyinput v-model="baseFormData.nativePlace" placeholder="xx省xx市xx区" maxlength="30" trim="both" />
  60. </uni-forms-item>
  61. </uni-forms>
  62. <!-- <canvas canvas-id="idCardFront" class="idCardFrontClass" :style="{width:idCardFrontWidth, height:idCardFrontHeight}"></canvas>
  63. <canvas canvas-id="idCardBack" class="idCardBackClass" :style="{width:idCardBackWidth, height:idCardBackHeight}"></canvas>
  64. <canvas canvas-id="diplomaPhoto" class="diplomaPhotoClass" :style="{width:diplomaPhotoWidth, height:diplomaPhotoHeight}"></canvas>
  65. <canvas canvas-id="profilePhoto" class="profilePhotoClass" :style="{width:profilePhotoWidth, height:profilePhotoHeight}"></canvas> -->
  66. <view class="authenticationBtnWrapper">
  67. <button class="authenticationBtn" type="primary" @click="submit">{{buttonMessage}}</button>
  68. </view>
  69. <!-- 裁剪图片的插件 -->
  70. <ksp-cropper mode="free" :width="1024" :height="1024" :maxWidth="1024" :maxHeight="1024" :url="idCardFrontUrl" @cancel="urloncancel('idCardFront')" @ok="urlonok('idCardFront', $event)"></ksp-cropper>
  71. <ksp-cropper mode="free" :width="1024" :height="1024" :maxWidth="1024" :maxHeight="1024" :url="idCardBackUrl" @cancel="urloncancel('idCardBack')" @ok="urlonok('idCardBack', $event)"></ksp-cropper>
  72. <ksp-cropper mode="free" :width="1024" :height="1024" :maxWidth="1600" :maxHeight="1600" :url="diplomaPhotoUrl" @cancel="urloncancel('diplomaPhoto')" @ok="urlonok('diplomaPhoto', $event)"></ksp-cropper>
  73. <ksp-cropper mode="fixed" :width="160" :height="160" :maxWidth="1024" :maxHeight="1024" :url="profilePhotoUrl" @cancel="urloncancel('profilePhoto')" @ok="urlonok('profilePhoto', $event)"></ksp-cropper>
  74. </view>
  75. </template>
  76. <script>
  77. import { mapState, mapMutations } from 'vuex'
  78. export default {
  79. computed: {
  80. ...mapState('m_user', ['authentication']),
  81. },
  82. data() {
  83. return {
  84. disabledPhone: true,
  85. listStyle: {
  86. "height": 100, // 边框高度
  87. "width": 100, // 边框宽度
  88. "border":{ // 如果为 Boolean 值,可以控制边框显示与否
  89. "color":"#ccc", // 边框颜色
  90. "width":"1px", // 边框宽度
  91. "style":"solid", // 边框样式
  92. }
  93. },
  94. idCardFrontUrl: '',
  95. idCardBackUrl: '',
  96. diplomaPhotoUrl: '',
  97. profilePhotoUrl: '',
  98. // idCardFrontWidth: 0,
  99. // idCardFrontHeight: 0,
  100. // idCardBackWidth: 0,
  101. // idCardBackHeight: 0,
  102. // diplomaPhotoWidth: 0,
  103. // diplomaPhotoHeight: 0,
  104. // profilePhotoWidth: 0,
  105. // profilePhotoHeight: 0,
  106. fileExtname: 'png,jpg',
  107. sizeType: ['compressed'],
  108. idCardFrontByte: [{
  109. url: '',
  110. extname: '',
  111. name: ''
  112. }],
  113. idCardBackByte: [{
  114. url: '',
  115. extname: '',
  116. name: ''
  117. }],
  118. profilePhotoByte: [{
  119. url: '',
  120. extname: '',
  121. name: ''
  122. }],
  123. diplomaPhotoByte: [{
  124. url: '',
  125. extname: '',
  126. name: ''
  127. }],
  128. buttonMessage: '申请认证',
  129. isLoading: false, // 节流阀
  130. baseFormData: {
  131. name: '',
  132. weixinId: '',
  133. phone: '',
  134. idCard: '',
  135. sex: '男',
  136. identify: '专职老师',
  137. school: '',
  138. major: '',
  139. education: '',
  140. nativePlace: '',
  141. education: '本科在读',
  142. idCardFront: '',
  143. idCardBack: '',
  144. diplomaPhoto: '',
  145. profilePhoto: ''
  146. },
  147. sexs: [{
  148. text: '男',
  149. value: '男'
  150. }, {
  151. text: '女',
  152. value: '女'
  153. }],
  154. // 单选老师身份
  155. identifies: [{
  156. text: '专职老师',
  157. value: '专职老师'
  158. }, {
  159. text: '在校大学生',
  160. value: '在校大学生'
  161. }],
  162. educations:[ {
  163. value: '专科毕业',
  164. text: '专科毕业'
  165. }, {
  166. value: '本科毕业',
  167. text: '本科毕业'
  168. }, {
  169. value: '硕士毕业',
  170. text: '硕士毕业'
  171. }, {
  172. value: '博士毕业',
  173. text: '博士毕业'
  174. }, {
  175. value: '专科在读',
  176. text: '专科在读'
  177. }, {
  178. value: '本科在读',
  179. text: '本科在读'
  180. }, {
  181. value: '硕士在读',
  182. text: '硕士在读'
  183. }, {
  184. value: '博士在读',
  185. text: '博士在读'
  186. }],
  187. rules: {
  188. name: {
  189. rules: [{
  190. required: true,
  191. errorMessage: '请输入姓名',
  192. }]
  193. },
  194. weixinId: {
  195. rules: [{
  196. required: true,
  197. errorMessage: '请输入微信号',
  198. }, {
  199. errorMessage: '请输入正确的微信号',
  200. pattern: '^[a-zA-Z][a-zA-Z\\d_-]{5,19}$',
  201. }]
  202. },
  203. phone: {
  204. rules: [{
  205. required: true,
  206. errorMessage: '请输入手机号',
  207. }, {
  208. errorMessage: '请输入正确的手机号',
  209. pattern: '^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\\d{8}$',
  210. }]
  211. },
  212. idCard: {
  213. rules: [{
  214. required: true,
  215. errorMessage: '请输入身份证号',
  216. }, {
  217. errorMessage: '请输入正确的身份证号',
  218. pattern: '^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$',
  219. }]
  220. },
  221. school: {
  222. rules: [{
  223. required: true,
  224. errorMessage: '请输入学校全称',
  225. }]
  226. },
  227. major: {
  228. rules: [{
  229. required: true,
  230. errorMessage: '请输入专业名称',
  231. }]
  232. },
  233. nativePlace: {
  234. rules: [{
  235. required: true,
  236. errorMessage: '请输入籍贯',
  237. },
  238. {
  239. pattern: '[\\u4e00-\\u9fa5]+[\\u7701]{1}[\\u4e00-\\u9fa5]+[\\u5E02]{1}[\\u4e00-\\u9fa5]+[\\u53BF|\\u533A]{1}',
  240. errorMessage: '请输入正确的格式:xx省xx市xx区/县',
  241. }
  242. ]
  243. }
  244. }
  245. };
  246. },
  247. onLoad(option) {
  248. if (option.item) {
  249. this.baseFormData = JSON.parse(decodeURIComponent(option.item))
  250. this.buttonMessage = '修改认证'
  251. this.getPhotoes()
  252. } else {
  253. this.idCardFrontByte = [],
  254. this.idCardBackByte = [],
  255. this.profilePhotoByte = [],
  256. this.diplomaPhotoByte = [],
  257. this.buttonMessage = '申请认证'
  258. }
  259. },
  260. methods: {
  261. ...mapMutations('m_user', ['updateAuthentication']),
  262. // 获取图片
  263. async getPhotoes() {
  264. this.diplomaPhotoByte[0].url = this.baseFormData.diplomaPhoto
  265. this.diplomaPhotoByte[0].name = 'diplomaPhoto'
  266. this.idCardBackByte[0].url = this.baseFormData.idCardBack
  267. this.idCardBackByte[0].name = 'idCardBack'
  268. this.profilePhotoByte[0].url = this.baseFormData.profilePhoto
  269. this.profilePhotoByte[0].name = 'profilePhoto'
  270. this.idCardFrontByte[0].url = this.baseFormData.idCardFront
  271. this.idCardFrontByte[0].name = 'idCardFront'
  272. },
  273. // 手机号
  274. async getPhoneNumber(e) {
  275. if (e.detail.code === undefined) return uni.$showMsg('获取手机号失败!')
  276. const query = {
  277. code: e.detail.code
  278. }
  279. const {
  280. data: result
  281. } = await uni.$http.get('/ucenter/mini-program-openid-uid/wxGetPhone', query)
  282. if (result.data.phone === '' || result.data.phone === null) {
  283. this.disabledPhone = false
  284. return uni.$showMsg('手机号获取失败,请手动输入')
  285. } else {
  286. this.baseFormData.phone = result.data.phone
  287. return uni.$showMsg('获取手机成功!')
  288. }
  289. },
  290. deletePhoto(item,e) {
  291. // console.log("删除",item)
  292. this.baseFormData[item] = ''
  293. },
  294. // 上传身份证正面
  295. selectPhoto(item,e) {
  296. // console.log('上传',item)
  297. switch(item) {
  298. case 'idCardFront':
  299. this.idCardFrontByte = []
  300. this.idCardFrontUrl = e.tempFilePaths[0]
  301. break
  302. case 'idCardBack':
  303. this.idCardBackByte = []
  304. this.idCardBackUrl = e.tempFilePaths[0]
  305. break
  306. case 'diplomaPhoto':
  307. this.diplomaPhotoByte = []
  308. this.diplomaPhotoUrl = e.tempFilePaths[0]
  309. break
  310. case 'profilePhoto':
  311. this.profilePhotoByte = []
  312. this.profilePhotoUrl = e.tempFilePaths[0]
  313. break
  314. }
  315. },
  316. urlonok(item,ev) {
  317. // console.log('裁剪',item)
  318. const evPath = ev.path
  319. switch(item) {
  320. case 'idCardFront':
  321. this.idCardFrontByte = {
  322. url: evPath
  323. }
  324. this.idCardFrontUrl = ''
  325. this.upload(evPath, 'idCardFront')
  326. break
  327. case 'idCardBack':
  328. this.idCardBackByte = {
  329. url: evPath
  330. }
  331. this.idCardBackUrl = ''
  332. this.upload(evPath, 'idCardBack')
  333. break
  334. case 'diplomaPhoto':
  335. this.diplomaPhotoByte = {
  336. url: evPath
  337. }
  338. this.diplomaPhotoUrl = ''
  339. this.upload(evPath, 'diplomaPhoto')
  340. break
  341. case 'profilePhoto':
  342. this.profilePhotoByte = {
  343. url: evPath
  344. }
  345. this.profilePhotoUrl = ''
  346. this.upload(evPath, 'profilePhoto')
  347. break
  348. }
  349. },
  350. urloncancel(item) {
  351. // console.log('取消',item)
  352. switch(item) {
  353. case 'idCardFront':
  354. this.idCardFrontByte = null
  355. // url设置为空,隐藏控件
  356. this.idCardFrontUrl = "";
  357. break
  358. case 'idCardBack':
  359. this.idCardBackByte = null
  360. this.idCardBackUrl = "";
  361. break
  362. case 'diplomaPhoto':
  363. this.diplomaPhotoByte = null
  364. this.diplomaPhotoUrl = "";
  365. break
  366. case 'profilePhoto':
  367. this.profilePhotoByte = null
  368. this.profilePhotoUrl = "";
  369. break
  370. }
  371. },
  372. upload(path, item) {
  373. wx.uploadFile({
  374. url: uni.$http.baseUrl + '/file/uploading',
  375. filePath: path,
  376. name: 'file',
  377. header: {
  378. token: uni.getStorageSync('token')
  379. },
  380. success: res => {
  381. const result = JSON.parse(res.data)
  382. this.baseFormData[item] = result.data.url
  383. },
  384. fail: res => {
  385. if (res.errno === 1001) {
  386. uni.$showMsg('只能选择.jpg或者.png的图片')
  387. }
  388. }
  389. })
  390. },
  391. // getUploadPaths(e, item) {
  392. // if (e.tempFiles[0] === undefined) return false
  393. // var that = this
  394. // // 大于1M压缩
  395. // if (e.tempFiles[0].size > 1000 * 1000) {
  396. // uni.showLoading({
  397. // title: '正在压缩中…',
  398. // mask:true
  399. // })
  400. // // 获取图片信息
  401. // wx.getImageInfo({
  402. // src: e.tempFilePaths[0],
  403. // success: (imageInfo) => {
  404. // let arr = item.split('.')
  405. // let CanvasContext = wx.createCanvasContext(arr[2], that)
  406. // let ratio = 1
  407. // let canvasWidth = imageInfo.width
  408. // let canvasHeight = imageInfo.height
  409. // let quality = 0.1 // 图片质量
  410. // while(canvasWidth > 1000 || canvasHeight > 1000) {
  411. // // 比例取整
  412. // canvasWidth = Math.trunc(imageInfo.width / ratio)
  413. // canvasHeight = Math.trunc(imageInfo.height / ratio)
  414. // ratio += 0.1
  415. // }
  416. // quality = (quality + (ratio/10)).toFixed(1)
  417. // if (quality > 1) {
  418. // quality = 1
  419. // }
  420. // // 设置canvas尺寸
  421. // switch(item) {
  422. // case 'this.baseFormData.idCardFront':
  423. // that.idCardFrontWidth = canvasWidth + 'px'
  424. // that.idCardFrontHeight = canvasHeight + 'px'
  425. // break;
  426. // case 'this.baseFormData.idCardBack':
  427. // that.idCardBackWidth = canvasWidth + 'px'
  428. // that.idCardBackHeight = canvasHeight + 'px'
  429. // break;
  430. // case 'this.baseFormData.diplomaPhoto':
  431. // that.diplomaPhotoWidth = canvasWidth + 'px'
  432. // that.diplomaPhotoHeight = canvasHeight + 'px'
  433. // break;
  434. // case 'this.baseFormData.profilePhoto':
  435. // that.profilePhotoWidth = canvasWidth + 'px'
  436. // that.profilePhotoHeight = canvasHeight + 'px'
  437. // break;
  438. // }
  439. // // 将图片填充到canvas上
  440. // CanvasContext.drawImage(e.tempFilePaths[0], 0, 0, canvasWidth, canvasHeight)
  441. // CanvasContext.draw()
  442. // // 下载canvas图片
  443. // setTimeout(() => {
  444. // wx.canvasToTempFilePath({
  445. // canvasId: arr[2],
  446. // width: canvasWidth,
  447. // height: canvasHeight,
  448. // destWidth: canvasWidth,
  449. // destHeight: canvasHeight,
  450. // fileType: 'jpg,png',
  451. // quality: quality,
  452. // success: path => {
  453. // uni.hideLoading()
  454. // that.upload(path.tempFilePath, item)
  455. // },
  456. // fail: e => {
  457. // uni.hideLoading()
  458. // uni.$showMsg('上传失败')
  459. // }
  460. // }, that)
  461. // }, 1000)
  462. // }
  463. // })
  464. // } else {
  465. // that.upload(e.tempFilePaths[0], item)
  466. // }
  467. // },
  468. submit() {
  469. if (this.isLoading) {
  470. return uni.$showMsg('操作过快,请耐心等待…')
  471. }
  472. this.isLoading = true
  473. this.$refs.baseForm.validate().then(res => {
  474. if (this.baseFormData.phone === undefined || this.baseFormData.phone === '') return uni.$showMsg('手机号未获取!')
  475. if (this.baseFormData.idCardFront === undefined || this.baseFormData.idCardFront === '') return uni.$showMsg('身份证正面未上传!')
  476. if (this.baseFormData.idCardBack === undefined || this.baseFormData.idCardBack === '') return uni.$showMsg('身份证背面未上传!')
  477. if (this.baseFormData.diplomaPhoto === undefined || this.baseFormData.diplomaPhoto === '') return uni.$showMsg('学生/毕业证未上传!')
  478. if (this.baseFormData.profilePhoto === undefined || this.baseFormData.profilePhoto === '') return uni.$showMsg('头像未上传!')
  479. if (this.baseFormData.education === undefined || this.baseFormData.education === '') return uni.$showMsg('请选择学历')
  480. if (this.buttonMessage === '修改认证') {
  481. const certificationUrl = '/education/teacher-certifications/updateCertificationInfo'
  482. this.sendRequest(certificationUrl, 2)
  483. } else {
  484. const certificationUrl = '/education/teacher-certifications/saveCertificationInfo'
  485. this.sendRequest(certificationUrl, 1)
  486. }
  487. }).catch(err => {
  488. this.isLoading = false
  489. })
  490. this.isLoading = false
  491. },
  492. sendRequest(certificationUrl, count) {
  493. uni.request({
  494. url: uni.$http.baseUrl + certificationUrl,
  495. data: this.baseFormData,
  496. header: {
  497. token: uni.getStorageSync('token')
  498. },
  499. method: 'POST',
  500. success: res => {
  501. this.isLoading = false
  502. uni.$showMsg(res.data.message)
  503. this.updateAuthentication('审核中')
  504. setTimeout(() => {
  505. uni.navigateBack({
  506. delta: count
  507. })
  508. }, 1000)
  509. }
  510. })
  511. }
  512. }
  513. }
  514. </script>
  515. <!-- 设置页面背景 -->
  516. <style lang="scss">
  517. page{
  518. height: 100%;
  519. //background-color: #FFF2CC;
  520. }
  521. </style>
  522. <style lang="scss" scoped>
  523. .idCardFrontClass {
  524. position: absolute;
  525. left:-8000px;
  526. top:-8000px;
  527. }
  528. .idCardBackClass {
  529. position: absolute;
  530. left:-9000px;
  531. top:-9000px;
  532. }
  533. .diplomaPhotoClass {
  534. position: absolute;
  535. left:-7000px;
  536. top:-7000px;
  537. }
  538. .profilePhotoClass {
  539. position: absolute;
  540. left:-6000px;
  541. top:-6000px;
  542. }
  543. .auth-Container{
  544. width: 96%;
  545. height: 100%;
  546. padding-left: 20rpx;
  547. }
  548. .warning {
  549. color: red
  550. }
  551. // 获取手机号按钮背景样式
  552. .getPhone{
  553. background-color: #35b882;
  554. }
  555. // 申请认证按钮样式
  556. .authenticationBtnWrapper{
  557. height: 140rpx;
  558. }
  559. .authenticationBtn{
  560. width: 260rpx;
  561. border-radius: 50rpx;
  562. margin-bottom: 40rpx;
  563. background-color: #35b882;
  564. }
  565. .phoneClass {
  566. margin-top: 6rpx;
  567. }
  568. </style>