index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. <template>
  2. <view class="content">
  3. <view class="header"></view>
  4. <view class="form">
  5. <view class="form_title">合作伙伴信息</view>
  6. <view class="form_item">
  7. <span class="icon">*</span>
  8. 姓名
  9. <uni-easyinput placeholder="请输入姓名" v-model="name"></uni-easyinput>
  10. </view>
  11. <view class="form_item">
  12. <span class="icon">*</span>
  13. 手机号
  14. <uni-easyinput type="number" placeholder="请输入手机号" v-model="phone"></uni-easyinput>
  15. </view>
  16. <view class="form_item">
  17. <span class="icon">*</span>
  18. 单位名称
  19. <uni-easyinput placeholder="请输入单位名称" v-model="company"></uni-easyinput>
  20. </view>
  21. <view class="form_title">项目信息登记</view>
  22. <view class="form_item">
  23. <span class="icon">*</span>
  24. 客户名称
  25. <uni-easyinput placeholder="请输入客户名称" v-model="clientName"></uni-easyinput>
  26. </view>
  27. <view class="form_item">
  28. <span class="icon">*</span>
  29. 项目名称
  30. <uni-easyinput placeholder="请输入项目名称" :maxlength="32" v-model="projectName"></uni-easyinput>
  31. </view>
  32. <view class="form_item">
  33. <span class="icon">*</span>
  34. 项目金额(万元)
  35. <uni-easyinput type="number" placeholder="请输入项目金额" v-model="projectAmount"></uni-easyinput>
  36. </view>
  37. <view class="form_item">
  38. <span class="icon">*</span>
  39. 预计投标时间
  40. <picker mode="date" fields="month" :start="getCurrentDate()" :value="biddingTime" @change="bindDateChange">
  41. <uni-easyinput disabled placeholder="请选择预计投标时间" suffixIcon="calendar-filled" v-model="biddingTime"></uni-easyinput>
  42. </picker>
  43. </view>
  44. <view class="form_item">
  45. <span class="icon">*</span>
  46. 所属行业
  47. <uni-data-select placeholder="请选择所属行业" v-model="industry" :localdata="range"></uni-data-select>
  48. </view>
  49. <view class="form_item">
  50. <span class="icon">*</span>
  51. 是否授权
  52. <uni-data-select placeholder="请选择是否授权" v-model="isAzt" :localdata="range_azt"></uni-data-select>
  53. </view>
  54. <view class="form_item">
  55. <span class="icon">*</span>
  56. 产品类型(多选)
  57. <uni-data-checkbox multiple v-model="productType" :localdata="hobby"></uni-data-checkbox>
  58. </view>
  59. <view class="form_item">
  60. 项目基本情况
  61. <uni-easyinput type="textarea" :maxlength="-1" placeholder="建议填写竞争情况 , 客户情况" v-model="projectInformation"></uni-easyinput>
  62. </view>
  63. <view class="form_item">
  64. 加入的控标参数
  65. <uni-easyinput type="textarea" :maxlength="-1" placeholder="建议填写加入的控标参数情况" v-model="projectParams"></uni-easyinput>
  66. </view>
  67. <view class="form_item">
  68. 附件材料(建议上传项目相关信息或清单图片)
  69. <uni-file-picker
  70. ref="filePicker"
  71. limit="3"
  72. title="最多上传3张图片"
  73. :value="projectImgList"
  74. fileMediatype="image"
  75. :image-styles="imageStyles"
  76. mode="grid"
  77. @select="select"
  78. @delete="handleDelete"
  79. ></uni-file-picker>
  80. </view>
  81. <button class="form_button" @click="handleSubmit">提交</button>
  82. <view class="footer">本系统由新华三江西代表处提供技术支持</view>
  83. </view>
  84. </view>
  85. <!-- 提交成功弹窗区域 -->
  86. <uni-popup ref="popup" type="center" :is-mask-click="false">
  87. <view class="popup_body">
  88. <img class="img" mode="aspectFill" src="../../static/success.png" />
  89. <view class="popup_text">提交成功</view>
  90. <view class="popup_btn" @click="handleSubscribe">我知道了</view>
  91. </view>
  92. </uni-popup>
  93. <!-- 公告弹窗区域 -->
  94. <uni-popup ref="popup_notice" type="center" :is-mask-click="false">
  95. <view class="popup_body2">
  96. 此小程序即将关闭,如有项目报备请移步至【新华三商城】服务号,微信直接搜索,如有疑问可联系新华三渠道经理黄琳
  97. <text style="color: #1e7dfb" @click="handlePhone('18979116761')">18979116761</text>
  98. <view class="btn" @click="handleClose">我知道了</view>
  99. </view>
  100. </uni-popup>
  101. <!-- 用于图片压缩的canvas画布 -->
  102. <canvas
  103. :style="{
  104. width: cw + 'px',
  105. height: cw + 'px',
  106. position: 'absolute',
  107. zIndex: -1,
  108. left: '-10000rpx',
  109. top: '-10000rpx'
  110. }"
  111. canvas-id="zipCanvas"
  112. ></canvas>
  113. <!--画布结束-->
  114. </template>
  115. <script setup>
  116. import { ref, onMounted } from 'vue'
  117. import { myRequest } from '@/util/api.js'
  118. // 图片压缩方法
  119. import getLessLimitSizeImage from '@/util/imageCompress.js'
  120. onMounted(() => {
  121. const accredit = uni.getStorageSync('accredit')
  122. if (accredit) {
  123. uni.login({
  124. //使用微信登录
  125. provider: 'weixin',
  126. success: (res) => {
  127. submit(res.code)
  128. }
  129. })
  130. }
  131. popup_notice.value.open()
  132. })
  133. //画板边长默认是屏幕宽度,正方形画布
  134. const cw = uni.getWindowInfo().windowWidth
  135. // 用户姓名绑定数据
  136. const name = ref(uni.getStorageSync('form_name') || '')
  137. // 用户手机号绑定数据
  138. const phone = ref(uni.getStorageSync('form_phone') || '')
  139. // 用户单位绑定数据
  140. const company = ref(uni.getStorageSync('form_company') || '')
  141. // 客户名称
  142. const clientName = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).clientName : '')
  143. // 项目名称
  144. const projectName = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).projectName : '')
  145. // 项目金额
  146. const projectAmount = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).projectAmount : '')
  147. // 预计投标时间
  148. const biddingTime = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).biddingTime : '')
  149. // 所属行业
  150. const industry = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).industry : '')
  151. // 是否授权
  152. const isAzt = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).isAzt : '')
  153. // 产品类型
  154. const productType = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).productType : [])
  155. // 项目基本情况
  156. const projectInformation = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).projectInformation : '')
  157. // 加入的控标参数
  158. const projectParams = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).projectParams : '')
  159. // 显示的图片数据
  160. const projectImgList = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).projectImgList : [])
  161. // 上传的图片数据
  162. const subImgList = ref(uni.getStorageSync('form_content') ? JSON.parse(uni.getStorageSync('form_content')).subImgList : [])
  163. // 微信手机号码绑定数据
  164. const wxPhone = ref(uni.getStorageSync('wxPhone') || '')
  165. // 所属行业数组数据
  166. const range = ref([
  167. {
  168. value: 0,
  169. text: '政府'
  170. },
  171. {
  172. value: 1,
  173. text: '教育'
  174. },
  175. {
  176. value: 2,
  177. text: '医疗'
  178. },
  179. {
  180. value: 3,
  181. text: '企业'
  182. },
  183. {
  184. value: 4,
  185. text: '公检法'
  186. },
  187. {
  188. value: 5,
  189. text: '交通'
  190. },
  191. {
  192. value: 6,
  193. text: '分销&SMB'
  194. },
  195. {
  196. value: 7,
  197. text: '其他'
  198. }
  199. ])
  200. const range_azt = ref([
  201. {
  202. value: 0,
  203. text: '是'
  204. },
  205. {
  206. value: 1,
  207. text: '否'
  208. }
  209. ])
  210. // 产品类型数组
  211. const hobby = ref([
  212. {
  213. text: '网络',
  214. value: 0
  215. },
  216. {
  217. text: '安全',
  218. value: 1
  219. },
  220. {
  221. text: 'IT',
  222. value: 2
  223. },
  224. {
  225. text: '云智',
  226. value: 3
  227. },
  228. {
  229. text: 'PC',
  230. value: 4
  231. },
  232. {
  233. text: 'AI视觉',
  234. value: 5
  235. }
  236. ])
  237. // 图片上传框的样式
  238. const imageStyles = {
  239. width: 75,
  240. height: 75,
  241. border: {
  242. color: '#ccc',
  243. width: 1,
  244. style: 'dashed',
  245. radius: '5px'
  246. }
  247. }
  248. // 上传组件元素
  249. const filePicker = ref(null)
  250. // 提交成功弹窗元素
  251. const popup = ref(null)
  252. const popup_notice = ref(null)
  253. // 模版id
  254. const templateOrder = ref('I3o8CRAiaaNbug3Ukkmv1o3S7l1FZlAKMUAJzIJ4zhs')
  255. // 点击弹窗 我知道了 按钮回调
  256. const handleSubscribe = () => {
  257. popup.value.close()
  258. // 订阅消息
  259. uni.getSetting({
  260. withSubscriptions: true,
  261. success: (res) => {
  262. console.log(res)
  263. if (res.subscriptionsSetting.mainSwitch) {
  264. uni.requestSubscribeMessage({
  265. tmplIds: [templateOrder.value],
  266. success: (res) => {
  267. console.log(res)
  268. if (res[templateOrder.value] !== 'reject') {
  269. console.log('成功')
  270. // uni.showToast({
  271. // title:"订阅成功",
  272. // icon:'success'
  273. // })
  274. } else {
  275. console.log('拒绝2')
  276. // uni.showToast({
  277. // title:"订阅失败",
  278. // icon:'fail'
  279. // })
  280. uni.showModal({
  281. content: '当前没有订阅,是否去设置打开?',
  282. confirmText: '确认',
  283. cancelText: '取消',
  284. success: (res) => {
  285. if (res.confirm) {
  286. uni.openSetting({
  287. success: (res) => {}
  288. })
  289. } else {
  290. }
  291. }
  292. })
  293. }
  294. },
  295. fail(err) {
  296. console.log(err)
  297. console.log('调用失败')
  298. }
  299. })
  300. } else {
  301. uni.showModal({
  302. content: '当前订阅总开关关闭,是否去设置打开?',
  303. confirmText: '确认',
  304. cancelText: '取消',
  305. success: (res) => {
  306. if (res.confirm) {
  307. uni.openSetting({
  308. success: (res) => {}
  309. })
  310. } else {
  311. }
  312. }
  313. })
  314. }
  315. }
  316. })
  317. }
  318. // 日期选择框绑定回调
  319. const bindDateChange = (e) => {
  320. const val = e.detail.value
  321. biddingTime.value = val
  322. }
  323. // 提交按钮回调
  324. const handleSubmit = () => {
  325. const flag = handleValidate()
  326. if (flag) {
  327. uni.setStorageSync('form_name', name.value)
  328. uni.setStorageSync('form_phone', phone.value)
  329. uni.setStorageSync('form_company', company.value)
  330. const formContent = {
  331. clientName: clientName.value,
  332. projectName: projectName.value,
  333. projectAmount: projectAmount.value,
  334. biddingTime: biddingTime.value,
  335. industry: industry.value,
  336. isAzt: isAzt.value,
  337. productType: productType.value,
  338. projectInformation: projectInformation.value,
  339. projectParams: projectParams.value,
  340. projectImgList: projectImgList.value,
  341. subImgList: subImgList.value
  342. }
  343. uni.setStorageSync('form_content', JSON.stringify(formContent))
  344. if (!wxPhone.value) {
  345. uni.showModal({
  346. title: '提示',
  347. content: '本次操作需要获取您的手机号码',
  348. success: (res) => {
  349. if (res.confirm) {
  350. uni.navigateTo({
  351. url: '/pages/authorization/authorization'
  352. })
  353. } else if (res.cancel) {
  354. }
  355. }
  356. })
  357. } else {
  358. uni.showModal({
  359. title: '提示',
  360. content: '确认提交吗',
  361. success: (res) => {
  362. if (res.confirm) {
  363. uni.login({
  364. //使用微信登录
  365. provider: 'weixin',
  366. success: (res) => {
  367. submit(res.code)
  368. }
  369. })
  370. } else if (res.cancel) {
  371. }
  372. }
  373. })
  374. }
  375. }
  376. }
  377. // 验证表格信息是否符合规范
  378. const handleValidate = () => {
  379. const reName = /^[\u4e00-\u9fa5]{2,4}$/
  380. const rePhone = /^1[3-9]\d{9}$/
  381. const reProjectAmount = /^[+]?([0-9]+(?:[.][0-9]*)?|\.[0-9]+)$/
  382. if (name.value == '') {
  383. uni.showToast({
  384. title: '请输入姓名',
  385. icon: 'none'
  386. })
  387. return false
  388. }
  389. if (!reName.test(name.value)) {
  390. uni.showToast({
  391. title: '姓名格式有误',
  392. icon: 'none'
  393. })
  394. return false
  395. }
  396. if (phone.value == '') {
  397. uni.showToast({
  398. title: '请输入手机号',
  399. icon: 'none'
  400. })
  401. return false
  402. }
  403. if (!rePhone.test(phone.value)) {
  404. uni.showToast({
  405. title: '手机格式有误',
  406. icon: 'none'
  407. })
  408. return false
  409. }
  410. if (company.value == '') {
  411. uni.showToast({
  412. title: '请输入单位名称',
  413. icon: 'none'
  414. })
  415. return false
  416. }
  417. if (clientName.value == '') {
  418. uni.showToast({
  419. title: '请输入客户名称',
  420. icon: 'none'
  421. })
  422. return false
  423. }
  424. if (projectName.value == '') {
  425. uni.showToast({
  426. title: '请输入项目名称',
  427. icon: 'none'
  428. })
  429. return false
  430. }
  431. if (projectAmount.value == '') {
  432. uni.showToast({
  433. title: '请输入项目金额',
  434. icon: 'none'
  435. })
  436. return false
  437. }
  438. if (!reProjectAmount.test(projectAmount.value)) {
  439. uni.showToast({
  440. title: '项目金额请输入正数',
  441. icon: 'none'
  442. })
  443. return false
  444. }
  445. if (biddingTime.value == '') {
  446. uni.showToast({
  447. title: '请选择预计投标时间',
  448. icon: 'none'
  449. })
  450. return false
  451. }
  452. if (industry.value === '') {
  453. uni.showToast({
  454. title: '请选择所属行业',
  455. icon: 'none'
  456. })
  457. return false
  458. }
  459. if (isAzt.value === '') {
  460. uni.showToast({
  461. title: '请选择是否授权',
  462. icon: 'none'
  463. })
  464. return false
  465. }
  466. if (productType.value.length == 0) {
  467. uni.showToast({
  468. title: '请选择产品类型',
  469. icon: 'none'
  470. })
  471. return false
  472. }
  473. return true
  474. }
  475. // 请求提交接口回调
  476. const submit = async (code) => {
  477. const bProduct = []
  478. productType.value.forEach((item) => {
  479. bProduct.push(hobby.value[item].text)
  480. })
  481. const res = await myRequest({
  482. url: '/informationReporting/add',
  483. method: 'post',
  484. data: {
  485. // 姓名
  486. name: name.value,
  487. // 手机号码
  488. phone: phone.value,
  489. // 单位名称
  490. company: company.value,
  491. // 客户名称
  492. customerName: clientName.value,
  493. // 项目名称
  494. entryName: projectName.value,
  495. // 项目金额
  496. projectAmount: projectAmount.value,
  497. // 预计投标时间
  498. tenderTime: biddingTime.value,
  499. // 项目基本情况
  500. content: projectInformation.value,
  501. // 所属行业
  502. trade: range.value[industry.value].text,
  503. // 产品类型
  504. bProduct,
  505. // 提交人手机号码
  506. wxPhone: wxPhone.value,
  507. // 附件材料
  508. bFile: subImgList.value,
  509. // 是否授权
  510. licensing: isAzt.value,
  511. // 加入的控标参数
  512. parameters: projectParams.value,
  513. code
  514. }
  515. })
  516. // console.log(res)
  517. if (res.success && res.code == 1) {
  518. // uni.showToast({
  519. // title: '提交成功',
  520. // duration: 3000
  521. // })
  522. popup.value.open()
  523. clientName.value = ''
  524. projectName.value = ''
  525. projectAmount.value = ''
  526. biddingTime.value = ''
  527. industry.value = ''
  528. isAzt.value = ''
  529. productType.value = []
  530. projectInformation.value = ''
  531. projectParams.value = ''
  532. subImgList.value = []
  533. projectImgList.value = []
  534. filePicker.value.clearFiles()
  535. uni.removeStorageSync('form_content')
  536. uni.setStorageSync('accredit', false)
  537. } else {
  538. uni.showToast({
  539. title: res.message,
  540. icon: 'error'
  541. })
  542. }
  543. }
  544. // 获取当前时间 YY-MM-DD
  545. const getCurrentDate = () => {
  546. const date = new Date()
  547. let year = date.getFullYear()
  548. let month = date.getMonth() + 1
  549. let day = date.getDate()
  550. month = month > 9 ? month : '0' + month
  551. day = day > 9 ? day : '0' + day
  552. return `${year}-${month}-${day}`
  553. }
  554. // 选择图片回调
  555. const select = (e) => {
  556. console.log(e)
  557. e.tempFiles.forEach((item) => {
  558. //这里的id和页面中写的html代码的canvas的id要一致
  559. let canvasId = 'zipCanvas'
  560. //原图的路径
  561. let imagePath = item.path
  562. //大小限制1024kb
  563. let limitSize = 1024
  564. //初始绘画区域是画布自身的宽度也就是屏幕宽度
  565. let drawWidth = uni.getWindowInfo().windowWidth
  566. getLessLimitSizeImage(canvasId, imagePath, limitSize, drawWidth, (resPath) => {
  567. uni.showLoading({
  568. title: '上传中'
  569. })
  570. uni.uploadFile({
  571. url: `https://jiangxih3cpartner.com/reporting/file/fileUpDown`,
  572. filePath: resPath,
  573. name: 'file',
  574. success: (uploadFileRes) => {
  575. subImgList.value.push(JSON.parse(uploadFileRes.data).data.join())
  576. projectImgList.value.push({
  577. url: item.path,
  578. name: ''
  579. })
  580. uni.hideLoading()
  581. },
  582. fail: () => {
  583. uni.showToast({
  584. title: '上传失败',
  585. icon: 'error'
  586. })
  587. }
  588. })
  589. })
  590. })
  591. }
  592. // 删除图片回调
  593. const handleDelete = (e) => {
  594. // console.log(e);
  595. const num = projectImgList.value.findIndex((v) => v.url === e.tempFilePath)
  596. subImgList.value.splice(num, 1)
  597. projectImgList.value.splice(num, 1)
  598. }
  599. // 关闭公告弹窗回调
  600. const handleClose = () => {
  601. popup_notice.value.close()
  602. }
  603. // 拨打电话回调
  604. const handlePhone = (phoneNumber) => {
  605. uni.makePhoneCall({
  606. phoneNumber
  607. })
  608. }
  609. </script>
  610. <style lang="scss" scoped>
  611. .content {
  612. width: 100vw;
  613. .header {
  614. width: 750rpx;
  615. height: 300rpx;
  616. border-radius: 0 0 10% 10%;
  617. background-color: #1e7dfb;
  618. }
  619. .form {
  620. position: absolute;
  621. top: 42rpx;
  622. left: 30rpx;
  623. right: 30rpx;
  624. padding: 0 32rpx;
  625. border-radius: 10rpx;
  626. background-color: #fff;
  627. .form_title {
  628. line-height: 105rpx;
  629. font-weight: bold;
  630. font-size: 34rpx;
  631. }
  632. .form_item {
  633. margin-bottom: 20rpx;
  634. font-size: 28rpx;
  635. .icon {
  636. color: #d43030;
  637. }
  638. :deep .uni-easyinput {
  639. margin-top: 10rpx;
  640. background-color: #f2f2f2;
  641. }
  642. :deep .uni-stat__select {
  643. margin-top: 10rpx;
  644. background-color: #f2f2f2;
  645. }
  646. :deep .uni-data-checklist {
  647. margin-top: 10rpx !important;
  648. background-color: #f2f2f2;
  649. }
  650. }
  651. .form_button {
  652. margin-top: 65rpx;
  653. background-color: #1e7dfb;
  654. color: #fff;
  655. font-size: 28rpx;
  656. }
  657. .footer {
  658. margin: 70rpx 0;
  659. text-align: center;
  660. font-size: 24rpx;
  661. color: #999999;
  662. }
  663. }
  664. }
  665. .popup_body {
  666. display: flex;
  667. flex-direction: column;
  668. align-items: center;
  669. width: 480rpx;
  670. height: 400rpx;
  671. border-radius: 22rpx;
  672. background-color: #fff;
  673. .img {
  674. margin-top: 50rpx;
  675. width: 98rpx;
  676. height: 98rpx;
  677. }
  678. .popup_text {
  679. margin-top: 20rpx;
  680. color: #0f194d;
  681. font-size: 28rpx;
  682. }
  683. .popup_btn {
  684. display: flex;
  685. justify-content: center;
  686. align-items: center;
  687. margin-top: 50rpx;
  688. width: 220rpx;
  689. height: 76rpx;
  690. color: #fff;
  691. font-size: 25rpx;
  692. border-radius: 43rpx;
  693. background: linear-gradient(90deg, #1e7dfb 0%, #1b75eb 100%);
  694. }
  695. }
  696. .popup_body2 {
  697. padding: 40rpx 20rpx 10rpx;
  698. width: 480rpx;
  699. line-height: 50rpx;
  700. border-radius: 22rpx;
  701. background-color: #fff;
  702. .btn {
  703. margin: 30rpx auto;
  704. display: flex;
  705. justify-content: center;
  706. align-items: center;
  707. width: 150rpx;
  708. height: 60rpx;
  709. font-size: 24rpx;
  710. color: #fff;
  711. border-radius: 10rpx;
  712. background-color: #1e7dfb;
  713. }
  714. }
  715. </style>