Txmoney.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753
  1. <template>
  2. <view class="content" v-if="XCXIsSelect != '否'">
  3. <view class="part_one">
  4. <view class="one_title">可提现金额</view>
  5. <view class="one_price">¥{{ mayMoney }}</view>
  6. </view>
  7. <view class="part_two">
  8. <view class="two_title">
  9. 提现金额
  10. <text>提现最低额度{{ minMoney }}元</text>
  11. </view>
  12. <view class="two_box">
  13. ¥
  14. <u-input v-model="money" type="number" :clearable="false" :border="border" placeholder="请输入提现金额" />
  15. </view>
  16. <view class="beizhu">*注单笔限制提现最低额度{{ minMoney }}元,最大提现额度为{{ manMoney }}元,单笔提现手续费{{ shouxufei * 100 }}%</view>
  17. </view>
  18. <view class="part_three">
  19. <view class="three_name">兑换方式</view>
  20. <view class="btn">
  21. <view class="btn_left" :class="current == 2 ? 'btna' : ''" @click="bindToindex(2)">
  22. <image src="../../../../static/my/weixin.png"></image>
  23. <text>微信</text>
  24. </view>
  25. <view class="btn_right" :class="current == 1 ? 'btna' : ''" @click="bindToindex(1)">
  26. <image src="../../../../static/my/zhifubao.png"></image>
  27. <text>支付宝</text>
  28. </view>
  29. </view>
  30. </view>
  31. <view style="margin-top: 59upx" class="padding-lr margin-lr-sm">
  32. <view class="yinghang">提现银行卡信息</view>
  33. <view style="color: #333333; text-align: left">
  34. 银行卡号:
  35. <text class="yinghang2">{{ yingNo }}</text>
  36. </view>
  37. <view style="color: #333333; text-align: left">
  38. 开户行:
  39. <text class="yinghang2">{{ yingName }}</text>
  40. </view>
  41. <view style="color: #333333; text-align: left">
  42. 开户人姓名:
  43. <text class="yinghang2">{{ yingPeople }}</text>
  44. </view>
  45. <!-- <view class="flex justify-between margin-bottom-xl" v-for="(item,index) in openLists" :key="index">
  46. <view class="flex align-center">
  47. <image :src="item.image" style="width:23px;height:20px"></image>
  48. <text class="text-lg margin-left-sm" style="color:#333333;font-weight:700;">{{item.text}}</text>
  49. </view>
  50. <view>
  51. <radio-group name="openWay" style="margin-left: 20upx;" @tap='selectWay(item)'>
  52. <label class="tui-radio">
  53. <radio color="#FF7F00" :checked="openWay === item.id ? true : false" />
  54. </label>
  55. </radio-group>
  56. </view>
  57. </view> -->
  58. </view>
  59. <view class="part_four">
  60. <view class="submit" @click="getOut()">立即提现</view>
  61. <view class="four_box">
  62. <view class="box_left" @click="goZhifuBao">提现账户</view>
  63. <view class="box_right" @click="list">提现记录</view>
  64. <view class="box_right" @click="isShow">微信收款码</view>
  65. </view>
  66. </view>
  67. <!-- 微信收款码弹框 -->
  68. <u-popup v-model="show" mode="center">
  69. <view class="padding">
  70. <view class="text-center text-lg text-bold flex justify-between">
  71. <view></view>
  72. <view>添加微信收款码</view>
  73. <view @click="show = false">X</view>
  74. </view>
  75. <!-- <view class="text-center padding-top-sm padding-bottom-lg" style="color: #999999;">请提交微信号和微信二维码
  76. </view> -->
  77. <view style="width: 80%; margin: 0 auto">
  78. <view class="margin-top" @click.stop="weixin" style="border: 4rpx solid #010101; border-radius: 16rpx; overflow: hidden">
  79. <image v-if="!wximg" src="../../../../static/image/erweima.png"></image>
  80. <image v-else :src="wximg" mode=""></image>
  81. </view>
  82. </view>
  83. <!-- <view class="text-center margin-top-sm " @click="submit"
  84. style="border-radius: 10rpx;background-color: #7E59FF;color: #fff;height: 80rpx;line-height: 80rpx;">保存</view> -->
  85. </view>
  86. </u-popup>
  87. <!-- 用于图片压缩的canvas画布 -->
  88. <canvas
  89. :style="{
  90. width: cw + 'px',
  91. height: cw + 'px',
  92. position: 'absolute',
  93. zIndex: -1,
  94. left: '-10000rpx',
  95. top: '-10000rpx'
  96. }"
  97. canvas-id="zipCanvas"
  98. ></canvas>
  99. <!--画布结束-->
  100. </view>
  101. </template>
  102. <script>
  103. import { showToast } from '../../../../common/queue'
  104. import configdata from '../../../../common/config.js'
  105. import getLessLimitSizeImage from '@/utils/imageCompress.js'
  106. export default {
  107. data() {
  108. return {
  109. show: false,
  110. current: '1',
  111. // value: 10,
  112. money: '',
  113. zhifubaoName: '',
  114. zhifubao: '',
  115. shouxufei: 0.01,
  116. minMoney: '10',
  117. manMoney: '200',
  118. mayMoney: '',
  119. XCXIsSelect: '否',
  120. wximg: '',
  121. values: '',
  122. // 银行卡号
  123. yingNo: '',
  124. // 开户行
  125. yingName: '',
  126. // 开户人姓名
  127. yingPeople: '',
  128. //画板边长默认是屏幕宽度,正方形画布
  129. cw: uni.getSystemInfoSync().windowWidth
  130. }
  131. },
  132. onLoad() {
  133. this.XCXIsSelect = this.$queue.getData('XCXIsSelect')
  134. if (this.XCXIsSelect == '否') {
  135. uni.setNavigationBarTitle({
  136. title: '隐私政策'
  137. })
  138. } else {
  139. uni.setNavigationBarTitle({
  140. title: '余额提现'
  141. })
  142. }
  143. },
  144. onShow() {
  145. this.getMoney()
  146. //最低可提现金额度
  147. this.$Request.getT('/app/common/type/112').then((res) => {
  148. if (res.code === 0) {
  149. this.minMoney = res.data.value
  150. }
  151. })
  152. //最高可提现金额度
  153. this.$Request.getT('/app/common/type/153').then((res) => {
  154. if (res.code === 0) {
  155. this.manMoney = res.data.value
  156. }
  157. })
  158. //手续费
  159. this.$Request.getT('/app/common/type/114').then((res) => {
  160. if (res.code === 0) {
  161. this.shouxufei = res.data.value
  162. }
  163. })
  164. //判断微信提现方式
  165. this.$Request.getT('/app/common/type/290').then((res) => {
  166. if (res.code == 0) {
  167. if (res.data && res.data.value) {
  168. this.values = res.data.value
  169. }
  170. }
  171. })
  172. // 银行卡信息
  173. let data = {
  174. userId: uni.getStorageSync('userId')
  175. }
  176. this.$Request.getT('/app/rider/bank/getUserId', data).then((res) => {
  177. if (res.code == 0) {
  178. this.yingNo = res.data.cardNo
  179. this.yingName = res.data.openBank
  180. this.yingPeople = res.data.realName
  181. }
  182. })
  183. },
  184. methods: {
  185. //用户收款码弹框
  186. isShow() {
  187. this.getMoney()
  188. this.show = true
  189. },
  190. //微信 支付宝提现选择
  191. bindToindex(e) {
  192. this.current = e
  193. console.log(e, this.current)
  194. },
  195. list() {
  196. uni.navigateTo({
  197. url: '/pages/riderMy/myAccount/AcontMoney/cashList'
  198. })
  199. },
  200. goZhifuBao() {
  201. uni.navigateTo({
  202. url: '/pages/riderMy/myAccount/AcontMoney/zhifubao'
  203. })
  204. },
  205. getMoney() {
  206. let that = this
  207. let token = this.$queue.getData('token')
  208. let userId = this.$queue.getData('userId')
  209. if (token) {
  210. //this.$queue.showLoading("加载中...");
  211. //可以提现金额查询预估收入查询
  212. that.$Request.getT('/app/userinfo/findUserInfoById').then((res) => {
  213. console.log(res, '111')
  214. if (res.code === 0 && res.data) {
  215. that.mayMoney = res.data.balance
  216. this.zhifubao = res.data.zhiFuBao
  217. this.zhifubaoName = res.data.zhiFuBaoName
  218. that.wximg = res.data.cashQrCode
  219. } else if (res.code === -102) {
  220. that.$queue.showToast(res.msg)
  221. that.$queue.logout()
  222. // uni.navigateTo({
  223. // url: '/pages/public/login'
  224. // });
  225. } else {
  226. that.mayMoney = '0'
  227. //this.$queue.showToast(res.msg);
  228. }
  229. })
  230. }
  231. },
  232. getOut() {
  233. let that = this
  234. let token = that.$queue.getData('token')
  235. let userId = that.$queue.getData('userId')
  236. if (token) {
  237. if (that.current == 1) {
  238. // if (!this.zhifubao || !this.zhifubaoName) {
  239. // uni.navigateTo({
  240. // url: '/pages/riderMy/myAccount/AcontMoney/zhifubao'
  241. // })
  242. // return
  243. // }
  244. if (!/^\d+$/.test(that.money)) {
  245. // uni.showToast({
  246. // icon: 'none',
  247. // title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
  248. // });
  249. that.$queue.showToast('请输入正确金额,不能包含中文,英文,特殊字符和小数')
  250. return
  251. }
  252. if (Number(that.money) < Number(that.minMoney)) {
  253. uni.showToast({
  254. icon: 'none',
  255. title: '提现金额不能小于' + that.minMoney + '元'
  256. })
  257. return
  258. }
  259. if (Number(that.money) > Number(that.manMoney)) {
  260. uni.showToast({
  261. icon: 'none',
  262. title: '提现金额不能大于' + that.manMoney + '元'
  263. })
  264. return
  265. }
  266. uni.showModal({
  267. title: '提现申请提示',
  268. content:
  269. '请仔细确认收款人信息\r\n姓名:' +
  270. that.yingPeople +
  271. `\r\n提现金额:` +
  272. that.money +
  273. '元' +
  274. '\r\n提现手续费:' +
  275. parseFloat(that.money * that.shouxufei).toFixed(2) +
  276. '元' +
  277. '\r\n收款账号:' +
  278. that.yingNo +
  279. '',
  280. success: (e) => {
  281. if (e.confirm) {
  282. let data = {
  283. classify: that.current,
  284. money: that.money
  285. }
  286. that.$queue.showLoading('提现中...')
  287. that.$Request.getT('/app/cash/cashMoney', data).then((res) => {
  288. if (res.code === 0) {
  289. that.$queue.showToast('提现申请成功,预计三个工作日到账')
  290. that.getMoney()
  291. that.mayMoney = ''
  292. } else {
  293. uni.showModal({
  294. title: '温馨提示',
  295. content: res.msg,
  296. showCancel: false,
  297. cancelText: '取消',
  298. confirmText: '确认'
  299. })
  300. }
  301. uni.hideLoading()
  302. })
  303. }
  304. }
  305. })
  306. } else if (that.current == 2) {
  307. if (!/^\d+$/.test(that.money)) {
  308. // uni.showToast({
  309. // icon: 'none',
  310. // title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
  311. // });
  312. that.$queue.showToast('请输入正确金额,不能包含中文,英文,特殊字符和小数')
  313. return
  314. }
  315. if (Number(that.money) < Number(that.minMoney)) {
  316. uni.showToast({
  317. icon: 'none',
  318. title: '提现金额不能小于' + that.minMoney + '元'
  319. })
  320. return
  321. }
  322. if (Number(that.money) > Number(that.manMoney)) {
  323. uni.showToast({
  324. icon: 'none',
  325. title: '提现金额不能大于' + that.manMoney + '元'
  326. })
  327. return
  328. }
  329. if (that.values == 2) {
  330. that.$Request.getT('/app/userinfo/findUserInfoById').then((res) => {
  331. if (res.code === 0) {
  332. let wxImg = res.data.cashQrCode
  333. if (!wxImg) {
  334. uni.showModal({
  335. title: '提现提示',
  336. content: '请上传微信收款码',
  337. showCancel: true,
  338. cancelText: '取消',
  339. confirmText: '上传',
  340. success: (res) => {
  341. if (res.confirm) {
  342. that.show = true
  343. }
  344. },
  345. fail: () => {},
  346. complete: () => {}
  347. })
  348. return
  349. }
  350. if (that.money * 1 >= that.minMoney * 1) {
  351. uni.showModal({
  352. title: '提现申请提示',
  353. content:
  354. '请仔细确认收款人信息\r\n姓名:' +
  355. that.yingPeople +
  356. '\r\n提现金额:' +
  357. that.money +
  358. '元' +
  359. '\r\n提现手续费:' +
  360. parseFloat(that.money * that.shouxufei).toFixed(2) +
  361. '元' +
  362. '\r\n收款账号:' +
  363. that.yingNo +
  364. '',
  365. success: (e) => {
  366. if (e.confirm) {
  367. that.$queue.showLoading('提现中...')
  368. let data = {
  369. money: that.money,
  370. classify: 2
  371. }
  372. that.$Request.getT('/app/cash/cashMoney', data).then((res) => {
  373. if (res.code === 0) {
  374. setTimeout(function () {
  375. that.$queue.showToast('提现申请成功,预计三个工作日到账')
  376. }, 1000)
  377. that.getMoney()
  378. that.money = ''
  379. } else {
  380. uni.showModal({
  381. title: '温馨提示',
  382. content: res.msg,
  383. showCancel: false,
  384. cancelText: '取消',
  385. confirmText: '确认'
  386. })
  387. }
  388. uni.hideLoading()
  389. })
  390. }
  391. }
  392. })
  393. } else {
  394. setTimeout(function () {
  395. that.$queue.showToast('提现金额必须大于或等于' + that.minMoney + '元才可提现')
  396. }, 1000)
  397. }
  398. } else {
  399. that.$queue.showToast('网络状态不好,请刷新后重试!')
  400. }
  401. })
  402. } else {
  403. if (!/^\d+$/.test(that.money)) {
  404. // uni.showToast({
  405. // icon: 'none',
  406. // title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
  407. // });
  408. that.$queue.showToast('请输入正确金额,不能包含中文,英文,特殊字符和小数')
  409. return
  410. }
  411. if (parseFloat(that.money).toFixed(1) >= that.minMoney) {
  412. uni.showModal({
  413. title: '提现申请提示',
  414. content:
  415. '请仔细确认收款人信息\r\n姓名:' +
  416. that.yingPeople +
  417. '\r\n提现金额:' +
  418. that.money +
  419. '元' +
  420. '\r\n提现手续费:' +
  421. parseFloat(that.money * that.shouxufei).toFixed(2) +
  422. '元' +
  423. '\r\n收款账号:' +
  424. that.yingNo +
  425. '',
  426. success: (e) => {
  427. if (e.confirm) {
  428. that.$queue.showLoading('提现中...')
  429. let data = {
  430. money: that.money,
  431. classify: 2,
  432. type: 3
  433. }
  434. that.$Request.getT('/shop/shopmoney/shopCashMoney', data).then((res) => {
  435. if (res.code === 0) {
  436. setTimeout(function () {
  437. that.$queue.showToast('提现申请成功,预计三个工作日到账')
  438. }, 1000)
  439. that.getMoney()
  440. that.money = ''
  441. } else {
  442. uni.showModal({
  443. title: '温馨提示',
  444. content: res.msg,
  445. showCancel: false,
  446. cancelText: '取消',
  447. confirmText: '确认'
  448. })
  449. that.getMoney()
  450. }
  451. uni.hideLoading()
  452. })
  453. }
  454. }
  455. })
  456. } else {
  457. that.$queue.showToast('提现金额必须大于或等于' + that.minMoney + '元才可提现')
  458. }
  459. }
  460. }
  461. } else {
  462. uni.showToast({
  463. title: '提现失败'
  464. })
  465. }
  466. },
  467. config: function (name) {
  468. var info = null
  469. if (name) {
  470. var name2 = name.split('.') //字符分割
  471. if (name2.length > 1) {
  472. info = configdata[name2[0]][name2[1]] || null
  473. } else {
  474. info = configdata[name] || null
  475. }
  476. if (info == null) {
  477. // let web_config = cache.get("web_config");
  478. // if (web_config) {
  479. // if (name2.length > 1) {
  480. // info = web_config[name2[0]][name2[1]] || null;
  481. // } else {
  482. // info = web_config[name] || null;
  483. // }
  484. // }
  485. }
  486. }
  487. return info
  488. },
  489. weixin() {
  490. let that = this
  491. uni.chooseImage({
  492. count: 1,
  493. sourceType: ['album', 'camera'],
  494. success: (res) => {
  495. for (let i = 0; i < 1; i++) {
  496. //这里的id和页面中写的html代码的canvas的id要一致
  497. let canvasId = 'zipCanvas'
  498. //原图的路径
  499. let imagePath = res.tempFiles[i].path
  500. //大小限制
  501. let limitSize = 1024 * 2
  502. //初始绘画区域是画布自身的宽度也就是屏幕宽度
  503. let drawWidth = uni.getSystemInfoSync().windowWidth
  504. let that = this
  505. getLessLimitSizeImage(canvasId, imagePath, limitSize, drawWidth, that, (resPath) => {
  506. uni.showLoading({
  507. title: '上传中'
  508. })
  509. uni.uploadFile({
  510. url: that.config('APIHOST1') + '/alioss/upload',
  511. filePath: resPath,
  512. name: 'file',
  513. success: (uploadFileRes) => {
  514. let img = JSON.parse(uploadFileRes.data).data
  515. let userId = that.$queue.getData('userId')
  516. let data = {
  517. cashQrCode: img
  518. }
  519. that.$Request.postJson('/app/user/updateUser', data).then((res) => {
  520. if (res.code == 0) {
  521. that.getMoney()
  522. setTimeout(function () {
  523. that.$queue.showToast('上传成功')
  524. }, 1000)
  525. }
  526. })
  527. uni.hideLoading()
  528. },
  529. fail: () => {
  530. uni.showToast({
  531. title: '上传失败',
  532. icon: 'error'
  533. })
  534. }
  535. })
  536. })
  537. }
  538. }
  539. })
  540. }
  541. }
  542. }
  543. </script>
  544. <style>
  545. body {
  546. background: #f5f5f5;
  547. }
  548. .content {
  549. width: 100%;
  550. }
  551. .part_one {
  552. width: 90%;
  553. margin: 0 auto;
  554. background: #ffffff;
  555. margin-top: 20rpx;
  556. border-radius: 20rpx;
  557. height: 170rpx;
  558. }
  559. .one_title {
  560. width: 90%;
  561. margin: 0 auto;
  562. font-size: 32rpx;
  563. letter-spacing: 1rpx;
  564. padding-top: 30rpx;
  565. }
  566. .one_price {
  567. width: 90%;
  568. margin: 0 auto;
  569. margin-top: 20rpx;
  570. font-size: 47rpx;
  571. font-weight: bold;
  572. }
  573. .part_two {
  574. width: 90%;
  575. margin: 0 auto;
  576. background: #ffffff;
  577. margin-top: 20rpx;
  578. border-radius: 20rpx;
  579. }
  580. .two_title {
  581. width: 90%;
  582. margin: 0 auto;
  583. line-height: 95rpx;
  584. font-size: 34rpx;
  585. }
  586. .two_title text {
  587. font-size: 27rpx;
  588. margin-left: 34rpx;
  589. }
  590. .two_box {
  591. width: 90%;
  592. margin: 0 auto;
  593. display: flex;
  594. align-items: center;
  595. font-size: 32rpx;
  596. font-weight: bold;
  597. }
  598. .u-input__input {
  599. font-size: 50rpx !important;
  600. color: #747474 !important;
  601. border-bottom: 1rpx solid #cccccc;
  602. }
  603. .tit {
  604. width: 90%;
  605. margin: 0 auto;
  606. font-size: 31rpx;
  607. margin-top: 10rpx;
  608. color: black;
  609. }
  610. .beizhu {
  611. width: 90%;
  612. margin: 0 auto;
  613. line-height: 55rpx;
  614. color: red;
  615. letter-spacing: 1rpx;
  616. }
  617. .part_three {
  618. width: 90%;
  619. margin: 0 auto;
  620. background: #ffffff;
  621. margin-top: 20rpx;
  622. border-radius: 20rpx;
  623. }
  624. .three_name {
  625. width: 90%;
  626. margin: 0 auto;
  627. font-size: 33rpx;
  628. color: black;
  629. line-height: 80rpx;
  630. }
  631. .btn {
  632. width: 96%;
  633. margin: 0 auto;
  634. display: flex;
  635. padding-bottom: 30rpx;
  636. }
  637. .btn_left {
  638. flex: 1;
  639. height: 90rpx;
  640. border: 1rpx solid #ccc;
  641. border-radius: 20rpx;
  642. margin-right: 10rpx;
  643. display: flex;
  644. justify-content: center;
  645. align-items: center;
  646. }
  647. .btn_right {
  648. flex: 1;
  649. /* width: 240rpx; */
  650. height: 90rpx;
  651. border: 1rpx solid #ccc;
  652. border-radius: 20rpx;
  653. margin-left: 10rpx;
  654. display: flex;
  655. justify-content: center;
  656. align-items: center;
  657. }
  658. .btna {
  659. border: 1rpx solid #e34b21 !important;
  660. }
  661. .btn_left image {
  662. width: 50rpx;
  663. height: 50rpx;
  664. margin-right: 12rpx;
  665. }
  666. .btn_right image {
  667. width: 50rpx;
  668. height: 50rpx;
  669. margin-right: 12rpx;
  670. }
  671. .part_four {
  672. width: 90%;
  673. margin: 0 auto;
  674. /* background: #FFFFFF; */
  675. margin-top: 20rpx;
  676. border-radius: 20rpx;
  677. }
  678. .submit {
  679. width: 100%;
  680. height: 90rpx;
  681. background: #f8501f;
  682. color: #f8ebd2;
  683. text-align: center;
  684. line-height: 90rpx;
  685. font-size: 37rpx;
  686. border-radius: 12rpx;
  687. }
  688. .four_box {
  689. width: 90%;
  690. margin: 0 auto;
  691. height: 125rpx;
  692. display: flex;
  693. color: #838383;
  694. }
  695. .box_left {
  696. flex: 1;
  697. display: flex;
  698. justify-content: center;
  699. align-items: center;
  700. }
  701. .box_right {
  702. flex: 1;
  703. display: flex;
  704. justify-content: center;
  705. align-items: center;
  706. }
  707. /* // 提现银行卡信息 */
  708. .yinghang {
  709. height: 80rpx;
  710. line-height: 80rpx;
  711. font-size: 36rpx;
  712. font-weight: 700;
  713. text-align: left;
  714. }
  715. .yinghang2 {
  716. height: 80rpx;
  717. line-height: 80rpx;
  718. font-size: 36rpx;
  719. font-weight: 700;
  720. }
  721. </style>