my.vue 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466
  1. <template>
  2. <view>
  3. <!-- 公共组件-每个页面必须引入 -->
  4. <public-module></public-module>
  5. <!-- 头部信息Start -->
  6. <view class="headers " :style="headerStyle">
  7. <view class="dis a-c j-c">
  8. <text>我的</text>
  9. <view class="headers-right">
  10. <view style="margin-left:15px">
  11. <image @tap="tool" src="/static/image/my/Frame.png" mode=""></image>
  12. <text>设置</text>
  13. </view>
  14. <!-- <view style="margin-left:15px">
  15. <image @tap="logout" src="/static/image/my/tichu.png" mode="">
  16. </image>
  17. <text>退出</text>
  18. </view> -->
  19. </view>
  20. </view>
  21. </view>
  22. <image :src="backImage" mode="" style="width: 100%;height: 771rpx;position: absolute;"></image>
  23. <view class="Personnel">
  24. <view class="dis a-c Personnel-info">
  25. <view class="Personnel-img" @click="updateAvatar">
  26. <image :src="avatar" class="avatar" mode=""></image>
  27. <image src="/static/image/my/updateAvatar.png" mode=""></image>
  28. </view>
  29. <view class="dis f-c ml-3">
  30. <view class="full-name">
  31. <text>{{ userInfo.sysUser.userName }}</text>
  32. </view>
  33. <view class=" dis f-c digit">
  34. <text>手机号:{{userInfo.sysUser.userId}}</text>
  35. <text>工号:{{ userInfo.sysUser.mobile }}</text>
  36. </view>
  37. </view>
  38. </view>
  39. <!-- 角色选项卡切换 -->
  40. <view class="customTab dis a-c j-s" :style="{ backgroundImage: `url(${superiorIdentityData.tabline})` }">
  41. <view class="tab-item" :class="index==customTabIndex?'tab-item-active':''"
  42. v-for="(item,index) in roleIdentityList" :key="index" @click="customTabChange(item,index)">
  43. {{item.gradeName}}
  44. </view>
  45. </view>
  46. <!-- 角色名片 -->
  47. <view class="characterCard mt-3 dis a-c j-s"
  48. :style="{ backgroundImage: `url(${superiorIdentityData.roleCard})` }">
  49. <!-- 角色状态标签 -->
  50. <view class="statusTag" :style="{background:superiorIdentityData.statusTagbackColor}">
  51. {{superiorIdentityData.lockingState==0?'未解锁':superiorIdentityData.lockingState==1?'已解锁':'已过期'}}
  52. </view>
  53. <!-- icon -->
  54. <image class="gradeIcon" :src="gradeIconstyle" mode=""></image>
  55. <view class="dis f-c content">
  56. <!-- name -->
  57. <view class="title dis mb-1" :style="{color:superiorIdentityData.titleColor}">
  58. <text class="font-weight">{{superiorIdentityData.gradeName}}会员</text>
  59. <u-icon name="arrow-right" :color="superiorIdentityData.titleColor" size="36"></u-icon>
  60. <text class="expiryTime" :style="{color:superiorIdentityData.textColor}">2025.10.23过期</text>
  61. </view>
  62. <!-- 进度条 -->
  63. <view class="progressBar">
  64. <text
  65. :style="{color:superiorIdentityData.textColor}">{{superiorIdentityData.proportional}}/100</text>
  66. <view class="line" :style="{background:superiorIdentityData.progressBarlineColor}">
  67. <view class="jindu"
  68. :style="{width: `${ Number(superiorIdentityData.proportional)}%`,background:superiorIdentityData.progressBarColor}">
  69. </view>
  70. </view>
  71. </view>
  72. <!-- 提示信息 -->
  73. <view class="comment mt-2 dis a-c ">
  74. <image class="commenticon" src="/static/image/my/grade/crown.png" mode=""></image>
  75. <text class="ml-1" :style="{color:superiorIdentityData.textColor}">
  76. {{superiorIdentityData.lockingState==0?'完成任务即可升级为该会员等级':superiorIdentityData.lockingState==1?'在期限内完成任务,可继续保持该会员等级身份':`截止2025.02.28完成任务,可重新成为改为该会员等级`}}
  77. </text>
  78. </view>
  79. </view>
  80. <view class="btn" :style="{color:superiorIdentityData.textColor}">
  81. {{superiorIdentityData.lockingState==1?'去保级':'去升级'}}
  82. </view>
  83. </view>
  84. <!-- 权益 -->
  85. <!-- <view class="benefits mt-3 dis f-c">
  86. <view class="dis j-s a-c header">
  87. <view class="dis title">
  88. <image :src="backLogo" mode=""></image>
  89. <text class="ml-1"
  90. v-if="superiorIdentityData.lockingState==0 && !superiorIdentityData.upgrade || superiorIdentityData.lockingState==2">解锁成为“{{superiorIdentityData.gradeName}}”获取更多权益</text>
  91. <text class="ml-1"
  92. v-if="superiorIdentityData.lockingState==0 && superiorIdentityData.upgrade">恭喜您已达成升级为{{superiorIdentityData.gradeName}}的条件</text>
  93. <text class="ml-1"
  94. v-if="superiorIdentityData.lockingState==1">恭喜您成为{{superiorIdentityData.gradeName}}</text>
  95. </view>
  96. <view
  97. v-if="superiorIdentityData.lockingState==0 && !superiorIdentityData.upgrade || superiorIdentityData.lockingState==2 && !superiorIdentityData.upgrade"
  98. class="tag" @click="upgradeTask">完成任务</view>
  99. <view
  100. v-if="superiorIdentityData.lockingState==0 && superiorIdentityData.upgrade && !superiorIdentityData.upgradeStatus || superiorIdentityData.lockingState==2 && superiorIdentityData.upgrade && !superiorIdentityData.upgradeStatus"
  101. class="tag" @click="requestUnlock">申请解锁</view>
  102. <view v-if="superiorIdentityData.upgradeStatus" class="tag">申请中</view>
  103. <view v-if="superiorIdentityData.lockingState==1" class="tag" @click="benefitsNavigate">查看权益</view>
  104. </view>
  105. <view class="content">
  106. <view class="item dis f-c ">
  107. <view class="dis a-c">
  108. <text>发展{{superiorIdentityData.gradeName}}团队</text>
  109. <u-icon name="arrow-right" color="#333" size="26"></u-icon>
  110. </view>
  111. <text>横向扩展团队,为收益添薪</text>
  112. </view>
  113. <view class="item dis f-c ml-3">
  114. <view class="dis a-c ">
  115. <text
  116. v-if="superiorIdentityData.lockingState==2">{{superiorIdentityData.lockCommission || 0}}元佣金</text>
  117. <text v-else>{{superiorIdentityData.ratio}}%</text>
  118. <u-icon name="arrow-right" color="#333" size="26"></u-icon>
  119. </view>
  120. <text v-if="superiorIdentityData.lockingState==2">{{superiorIdentityData.zeroDays}}天后清0</text>
  121. <text v-else>每单保费的佣金比例</text>
  122. </view>
  123. </view>
  124. </view> -->
  125. <!-- 身份解锁进度条 -->
  126. <!-- <view class="multiIdentityUnlockProgress dis ">
  127. <view class="step dis f-c" v-for="(item,index) in filteredBackLogoList" :key="index"
  128. v-if="item.grade!=1">
  129. <view class="dis a-c">
  130. <view class="progressBar">
  131. <view class="sche-bg-jindu"
  132. :style="{width:progressBarClass(item),borderRadius:borderRadiusClass(item)}">
  133. </view>
  134. </view>
  135. <view class=" dis a-c j-c " :class="roleStatusClass(item)">
  136. <image class="rolelogo" :src="getRoleImage(item)" mode="">
  137. </image>
  138. </view>
  139. </view>
  140. <text class="title dis j-end">{{item.gradeName}}</text>
  141. </view>
  142. </view> -->
  143. <!-- 身份解锁进度条 -->
  144. <view class="withdrawal-box">
  145. <view class="dis a-c j-c withdrawal-title">
  146. <text>可提现总金额</text>
  147. <text @tap="accountTool('/pages/wallet/bankCard')">银行卡</text>
  148. </view>
  149. <view class="dis a-s j-c withdrawal-sum">
  150. <text>¥</text>
  151. <text>{{ getApplication.cashFee || 0 }} </text>
  152. </view>
  153. <view class="withdrawal-income dis f-wrap">
  154. <view class="dis f-c a-c">
  155. <view class="dis">
  156. <text @click="incomeClick">佣金总收入</text>
  157. <u-icon name="arrow-right" color="#666" size="18"></u-icon>
  158. </view>
  159. <text class="sum">¥{{ getApplication.extractFee || 0 }} </text>
  160. </view>
  161. <view class="dis f-c a-c">
  162. <view class="dis ">
  163. <text>已经提现</text>
  164. <u-icon name="arrow-right" color="#666" size="18"></u-icon>
  165. </view>
  166. <text class="sum">¥{{ getApplication.historyFee || 0 }}</text>
  167. </view>
  168. <view class="dis f-c a-c">
  169. <view class="dis ">
  170. <text>已冻结</text>
  171. <u-icon name="arrow-right" color="#666" size="18"></u-icon>
  172. </view>
  173. <text class="sum">¥{{ getApplication.historyFee || 0 }}</text>
  174. </view>
  175. <view class="dis f-c a-c">
  176. <view class="dis ">
  177. <text>已过期</text>
  178. <u-icon name="arrow-right" color="#666" size="18"></u-icon>
  179. </view>
  180. <text class="sum">¥{{ getApplication.historyFee || 0 }}</text>
  181. </view>
  182. </view>
  183. <view class="withdrawal-fun" @click="toWithdraw">提现</view>
  184. </view>
  185. <view class="cell-item mt-2">
  186. <view class="item">
  187. </view>
  188. </view>
  189. </view>
  190. <my-date-picker ref="datePicker" @confirmPickDate="confirmPickDate" />
  191. <u-popup v-model="ShowModalCode" mode="center" border-radius="15">
  192. <view style="width: 323px;" id="pdfContentsDiv">
  193. <view class="ShowModalCode-style">
  194. <text>推广码</text>
  195. <text @tap="ShowModalCode = false">×</text>
  196. </view>
  197. <view class="ShowModalCode-con">
  198. <text v-if="userInfo.sysUser.grade==4">请扫码下载掌柜科技APP</text>
  199. <text v-else>请扫码下载掌柜合伙人APP</text>
  200. <image :src="workImg" mode="widthFix" lazy-load style="width: 150px;"></image>
  201. </view>
  202. <view class="dis" style="justify-content: space-around;padding:0 60px 20px 60px;">
  203. <view class="share-style" @click="sendPayCode">
  204. <image src="/static/image/my/weixin.png" mode="">
  205. <text>微信好友</text>
  206. </view>
  207. <view class="share-style" @tap="saveImage()">
  208. <image src="/static/image/my/baocun.png" mode="">
  209. <text>保存图片</text>
  210. </view>
  211. <view class="share-style" @click="duplicate">
  212. <image src="/static/image/my/fenxiang.png" mode="">
  213. <text>链接分享</text>
  214. </view>
  215. </view>
  216. </view>
  217. </u-popup>
  218. <!-- <view class="Personnel-title" @click="promotionCode">
  219. <image src="/static/icon/code.png" mode="">
  220. </image>
  221. 推广码
  222. </view> -->
  223. <u-action-sheet :list="Avatarlist" v-model="updateAvatarShow" border-radius="20"></u-action-sheet>
  224. </view>
  225. </template>
  226. <script>
  227. import myDatePicker from '../components/date-picker.vue';
  228. import QR from "@/common/wxqrcode.js"
  229. import html2canvas from 'html2canvas'
  230. import store from '@/store';
  231. import {
  232. mapState,
  233. mapMutations
  234. } from "vuex"
  235. export default {
  236. components: {
  237. myDatePicker
  238. },
  239. data() {
  240. return {
  241. customTabIndex: 0,
  242. updateAvatarShow: false, //头像工具
  243. Avatarlist: [{
  244. text: '点赞',
  245. color: 'blue',
  246. fontSize: 28,
  247. subText: '感谢您的点赞'
  248. }, {
  249. text: '分享'
  250. }, ],
  251. supportStaffUrl: '',
  252. ShowModalCode: false,
  253. info: ["", ""],
  254. current: 0,
  255. mode: 'default',
  256. headerStyle: {
  257. backgroundColor: 'transparent',
  258. backgroundImage: '',
  259. backgroundSize: '',
  260. backgroundPosition: '',
  261. boxShadow: ''
  262. // 其他样式属性...
  263. },
  264. showBackground: false,
  265. prevScrollTop: 0,
  266. avatar: "/static/image/my/wuxingb.png",
  267. getApplication: {},
  268. withdrawalData: [],
  269. backImage: '',
  270. backLogo: '',
  271. workImg: '',
  272. pathUrl: '',
  273. type: uni.getStorageSync('type'),
  274. roleIdentityList: [], //角色身份列表
  275. //身份图片list
  276. gradeimageList: [{
  277. grade: 1,
  278. backImageurl: "/static/image/my/grade/gradeback1.png", //身份背景图
  279. logourl: "/static/image/my/benefits/active1.png", //身份logo
  280. lockedUrl: '/static/image/my/grade/locked1.png', //已解锁
  281. tabline: "/static/image/my/grade/tabline1.png", //tab切换图
  282. roleCard: "/static/image/my/grade/roleCard1.png", //card卡片图
  283. statusTagbackColor: "linear-gradient( 80deg, #FFC525 0%, #FFE16D 100%)", //状态背景色
  284. titleColor: "#FF6D20", //标题颜色
  285. progressBarColor: "#FFD032", //进度条颜色
  286. progressBarlineColor: "#FFD032", //进度条背景色
  287. textColor: "#FF790C", //其他文字颜色
  288. },
  289. {
  290. grade: 2,
  291. backImageurl: "/static/image/my/grade/gradeback2.png",
  292. logourl: "/static/image/my/benefits/active2.png",
  293. unlockedUrl: '/static/image/my/grade/unlocked.png', //未解锁
  294. lockedUrl: '/static/image/my/grade/locked2.png', //已解锁
  295. expiredUrl: '/static/image/my/grade/expired2.png', //已锁定
  296. tabline: "/static/image/my/grade/tabline2.png", //tab切换图
  297. roleCard: "/static/image/my/grade/roleCard2.png",
  298. statusTagbackColor: "linear-gradient( 80deg, #A87CFF 0%, #CCBFFF 100%)", //状态背景色
  299. titleColor: "#632FFE", //标题颜色
  300. progressBarColor: "#9A83FF", //进度条颜色
  301. progressBarlineColor: "linear-gradient( 90deg, #FFFFFF 0%, #F2EBFF 100%)", //进度条背景色
  302. textColor: "#6B41F1", //其他文字颜色
  303. },
  304. {
  305. grade: 3,
  306. backImageurl: "/static/image/my/grade/gradeback3.png",
  307. logourl: "/static/image/my/benefits/active3.png",
  308. unlockedUrl: '/static/image/my/grade/unlocked.png', //未解锁
  309. lockedUrl: '/static/image/my/grade/locked3.png', //已解锁
  310. expiredUrl: '/static/image/my/grade/expired3.png', //已锁定
  311. tabline: "/static/image/my/grade/tabline3.png", //tab切换图
  312. roleCard: "/static/image/my/grade/roleCard3.png",
  313. statusTagbackColor: "linear-gradient( 80deg, #3AB4FF 0%, #7DCCFF 100%)", //状态背景色
  314. titleColor: "#0963D9", //标题颜色
  315. progressBarColor: "#2B99FF", //进度条颜色
  316. progressBarlineColor: "linear-gradient( 90deg, #FFFFFF 0%, #D1F6FF 100%)", //进度条背景色
  317. textColor: "#1766E4", //其他文字颜色
  318. },
  319. {
  320. grade: 4,
  321. backImageurl: "/static/image/my/grade/gradeback4.png",
  322. logourl: "/static/image/my/benefits/active4.png",
  323. unlockedUrl: '/static/image/my/grade/unlocked.png', //未解锁
  324. lockedUrl: '/static/image/my/grade/locked4.png', //已解锁
  325. expiredUrl: '/static/image/my/grade/expired4.png', //已锁定
  326. tabline: "/static/image/my/grade/tabline4.png", //tab切换图
  327. roleCard: "/static/image/my/grade/roleCard4.png",
  328. statusTagbackColor: "linear-gradient( 80deg, #5FCAFC 0%, #84D0FF 100%)", //状态背景色
  329. titleColor: "#004385", //标题颜色
  330. progressBarColor: "#70CEFF", //进度条颜色
  331. progressBarlineColor: "linear-gradient( 90deg, #FFFFFF 0%, #D1F6FF 100%)", //进度条背景色
  332. textColor: "#0066AA", //其他文字颜色
  333. }
  334. ],
  335. superiorIdentityData: {},
  336. }
  337. },
  338. computed: {
  339. ...mapState(['userInfo', "userCheckInfo", ]),
  340. gradeText() {
  341. const gradeMap = {
  342. 1: '创始人',
  343. 2: '管理人',
  344. 3: '合伙人',
  345. 4: '工作室'
  346. }
  347. return gradeMap[this.userInfo.sysUser.grade] || ''
  348. },
  349. //过滤数组
  350. filteredBackLogoList() {
  351. return this.roleIdentityList.filter(item => item.grade != 1)
  352. },
  353. gradeIconstyle() {
  354. return this.superiorIdentityData.lockingState == 0 ? this.superiorIdentityData.unlockedUrl :
  355. this.superiorIdentityData.lockingState == 1 ?
  356. this.superiorIdentityData.lockedUrl : this.superiorIdentityData.expiredUrl
  357. }
  358. },
  359. async onLoad() {
  360. await this.queryIdentityInformation(); //获取身份列表
  361. this.backImage = this.roleIdentityList.find(val => val.grade == this.userInfo.sysUser.grade)
  362. .backImageurl; //获取背景图
  363. this.backLogo = this.roleIdentityList.find(val => val.grade == this.userInfo.sysUser.grade)
  364. .logourl; //获取logo
  365. },
  366. async onShow() {
  367. let userInfoRes = await this.$http.get('/newAppPartner/getUserInfo', {
  368. type: uni.getStorageSync('type')
  369. });
  370. if (userInfoRes) {
  371. store.commit('setUserModules', {
  372. title: 'userInfo',
  373. data: {
  374. sysUser: {
  375. ...userInfoRes.data
  376. }
  377. }
  378. })
  379. }
  380. this.queryIdentityInformation();
  381. let res = await this.$http.get('/newAppPartner/newGetFee'); //获取账户金额
  382. if (res.code == 200) {
  383. this.getApplication = res.data || [];
  384. }
  385. if (this.userInfo.sysUser.sex == 'F') {
  386. this.avatar = "/static/image/my/nv.png"
  387. }
  388. if (this.userInfo.sysUser.sex == 'M') {
  389. this.avatar = "/static/image/my/nan.png"
  390. }
  391. if (this.userInfo.sysUser.insUploadFiles && this.userInfo.sysUser.insUploadFiles.url) {
  392. this.avatar = this.$base.baseUrl + this.userInfo.sysUser.insUploadFiles.url;
  393. }
  394. // this.WithdrawalqueryData()
  395. },
  396. onPageScroll(e) {
  397. this.handleScroll(e);
  398. },
  399. mounted() {
  400. this.getWechatData()
  401. uni.pageScrollTo({
  402. scrollTop: 0,
  403. duration: 0
  404. });
  405. uni.$on('scroll', this.handleScroll);
  406. },
  407. destroyed() {
  408. uni.$off('scroll', this.handleScroll);
  409. },
  410. methods: {
  411. ...mapMutations(['emptyUserInfo']),
  412. //角色tab切换
  413. customTabChange(item, index) {
  414. this.superiorIdentityData = item;
  415. this.backImage = this.superiorIdentityData.backImageurl; //切换背景
  416. this.customTabIndex = index;
  417. },
  418. //获取角色列表
  419. async queryIdentityInformation() {
  420. let res = await this.$http.get('/newAppPartner/queryIdentityInformation'); //获取各级身份
  421. if (res.code == 200) {
  422. const merged = res.data.map(itemA => {
  423. const gradeimageinfo = this.gradeimageList.find(itemB => itemB.grade === itemA.grade);
  424. return {
  425. ...itemA,
  426. ...gradeimageinfo
  427. }; // 合并两个对象
  428. });
  429. this.roleIdentityList = merged;
  430. this.superiorIdentityData = this.roleIdentityList.find(item => item.grade == this.userInfo.sysUser
  431. .grade)
  432. } else {
  433. uni.showToast({
  434. title: res.msg,
  435. icon: 'none'
  436. })
  437. }
  438. },
  439. //申请解锁
  440. async requestUnlock() {
  441. console.log(this.superiorIdentityData);
  442. let res = await this.$http.post('/partner/submitLiftingRecord', {
  443. grade: this.superiorIdentityData.grade,
  444. upgradeType: this.superiorIdentityData.lockingState == 2 ? '1' : '0'
  445. });
  446. if (res.code == '200') {
  447. uni.showToast({
  448. title: res.msg,
  449. icon: 'none',
  450. });
  451. this.queryIdentityInformation() //申请解锁后更新身份
  452. } else {
  453. uni.showToast({
  454. title: res.msg,
  455. icon: 'none',
  456. });
  457. }
  458. },
  459. // 获取角色状态类名
  460. roleStatusClass(item) {
  461. return item.lockingState == 0 ? 'role-unlocked' : 'role-isUnlocked'
  462. },
  463. // 获取角色图片
  464. getRoleImage(item) {
  465. if (item.lockingState == 0) {
  466. return item.upgrade ? item.waitingToUnlockurl : item.isUnlockedurl
  467. } else if (item.lockingState == 1) {
  468. return item.logourl
  469. }
  470. return item.isLockedurl
  471. },
  472. //控制进度条占比
  473. progressBarClass(item) {
  474. if (item.progressBar == 0) {
  475. return '0%'
  476. } else if (item.progressBar == 1) {
  477. return '50%'
  478. } else {
  479. return '100%'
  480. }
  481. },
  482. //控制进度条圆角
  483. borderRadiusClass(item) {
  484. const {
  485. grade,
  486. progressBar
  487. } = item;
  488. if (grade == 4) {
  489. return progressBar == 1 ? '100px' : '100px 0 0 100px';
  490. }
  491. return progressBar == 1 ? '0 100px 100px 0' : '0';
  492. },
  493. // 权益跳转
  494. benefitsNavigate() {
  495. uni.navigateTo({
  496. url: "/pages/my/benefits?grade=" + this.userInfo.sysUser.grade,
  497. })
  498. },
  499. //完成任务
  500. upgradeTask() {
  501. uni.navigateTo({
  502. url: "/pages/my/upgradeTask?info=" + JSON.stringify(this.superiorIdentityData),
  503. })
  504. },
  505. //修改头像
  506. async updateAvatar() {
  507. let [chooseImageErr, chooseImageRes] = await uni.chooseImage({
  508. count: 1,
  509. sizeType: ['compressed']
  510. });
  511. if (chooseImageRes) {
  512. console.log(chooseImageRes);
  513. this.chooseAvatar(chooseImageRes.tempFilePaths[0]);
  514. } else {}
  515. },
  516. chooseAvatar(src) {
  517. uni.navigateTo({
  518. url: '/pages/my/avatarCropper?src=' + src,
  519. })
  520. },
  521. searchPopup() {
  522. this.$refs.datePicker.open()
  523. },
  524. sendPayCode() {
  525. if (this.pathUrl) {
  526. uni.share({
  527. provider: "weixin",
  528. scene: "WXSceneSession",
  529. type: 2,
  530. imageUrl: this.pathUrl
  531. })
  532. }
  533. },
  534. showLoading() {
  535. uni.showLoading({
  536. title: '正在生成图片'
  537. });
  538. },
  539. hideLoading() {
  540. uni.hideLoading();
  541. this.loading = false;
  542. },
  543. //页面截图转路径
  544. receiveRenderData(val) {
  545. uni.downloadFile({
  546. url: val,
  547. success(res) {
  548. // 这时会产生一个临时路径,在应用本次启动期间可以正常使用。
  549. if (res.statusCode == 200) {
  550. // 需要将图片保存到相册
  551. uni.saveImageToPhotosAlbum({
  552. filePath: res
  553. .tempFilePath, // 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径
  554. success(res) {
  555. uni.showToast({
  556. title: '保存成功',
  557. icon: 'none'
  558. })
  559. // 如果保存成功需要打开查看,请使用以下方法,同时也支持打开文件
  560. uni.openDocument({
  561. filePath: res.savedFilePath,
  562. success(res) {},
  563. fail(err) {
  564. uni.showToast({
  565. title: '手机不支持该文件类型,请安装wps或office应用',
  566. icon: 'none'
  567. })
  568. }
  569. })
  570. },
  571. fail(err) {
  572. uni.showToast({
  573. title: '图片保存失败',
  574. icon: 'none'
  575. })
  576. }
  577. })
  578. } else {
  579. uni.showToast({
  580. title: '下载失败,请稍后再试',
  581. icon: 'none'
  582. })
  583. }
  584. },
  585. fail(err) {
  586. uni.showToast({
  587. title: '下载失败,请稍后再试',
  588. icon: 'none'
  589. })
  590. }
  591. })
  592. },
  593. saveImage() {
  594. setTimeout(() => {
  595. this.$ownerInstance.callMethod('showLoading')
  596. const dom = document.getElementById('pdfContentsDiv') // 需要生成图片内容的 dom 节点
  597. html2canvas(dom, {
  598. width: dom.clientWidth, //dom 原始宽度
  599. height: dom.clientHeight,
  600. scrollY: 0, // html2canvas默认绘制视图内的页面,需要把scrollY,scrollX设置为0
  601. scrollX: 0,
  602. useCORS: true, //支持跨域
  603. // allowTaint: false,
  604. scale: 2, // 设置生成图片的像素比例,默认是1,如果生成的图片模糊的话可以开启该配置项
  605. }).then((canvas) => {
  606. // 生成成功
  607. this.$ownerInstance.callMethod('hideLoading')
  608. this.$ownerInstance.callMethod('receiveRenderData', canvas.toDataURL(
  609. 'image/png'))
  610. console.log()
  611. }).catch(err => {
  612. // 生成失败 弹出提示弹窗
  613. this.$ownerInstance.callMethod('_errAlert', `【生成图片失败,请重试】${err}`)
  614. })
  615. }, 300)
  616. },
  617. // 链接分享
  618. duplicate() {
  619. uni.setClipboardData({
  620. data: this.pathUrl,
  621. success: function() {
  622. console.log('复制成功');
  623. uni.showToast({
  624. title: '链接已复制成功',
  625. icon: 'success',
  626. duration: 2000
  627. });
  628. },
  629. fail: function() {
  630. console.log('复制失败');
  631. // 可以添加错误处理或用户友好的提示
  632. }
  633. });
  634. },
  635. async promotionCode() {
  636. this.ShowModalCode = true
  637. let pageRequest = {
  638. pageNum: 1,
  639. pageSize: 50,
  640. columnFilters: {
  641. apptype: {
  642. name: "apptype",
  643. value: "apk",
  644. },
  645. appid: {
  646. name: "appid",
  647. value: this.userInfo.sysUser.grade == 4 ? "__UNI__D4FE29A" : '__UNI__2041321',
  648. }
  649. }
  650. }
  651. let res = await this.$http.post('/sysVersion/findPage', pageRequest);
  652. if (res.code == 200) {
  653. this.ShowModalCode = true
  654. this.pathUrl = res.data.content[0].path
  655. this.workImg = QR.createQrCodeImg(res.data.content[0].path, {
  656. size: parseInt(200) //二维码大小
  657. })
  658. }
  659. },
  660. confirmPickDate(dateStr, dateStr1) {
  661. console.log(dateStr, dateStr1);
  662. if (dateStr) {
  663. dateStr += ' 00:00:01'
  664. }
  665. if (dateStr1) {
  666. dateStr1 += ' 23:59:59'
  667. }
  668. this.WithdrawalqueryData(dateStr, dateStr1)
  669. },
  670. viewWithdrawal(item) {
  671. uni.navigateTo({
  672. url: "/pages/my/withdrawalDetail?key=" + encodeURIComponent(JSON.stringify(item))
  673. })
  674. },
  675. async toWithdraw() {
  676. let res = await this.$http.post('/userBank/getUserBankList', {
  677. auditStatus: "1",
  678. delFlag: '0'
  679. });
  680. if (res.data.length) {
  681. this.navigate({
  682. url: `/pages/wallet/withdraw?amount=${this.getApplication.cashFee}`,
  683. }, "navigateTo", true)
  684. } else {
  685. uni.showToast({
  686. title: '暂无审核通过的银行卡,不可提现',
  687. duration: 3000,
  688. icon: "none"
  689. });
  690. }
  691. },
  692. async accountTool(path) {
  693. if (path) {
  694. if (path == '/pages/wallet/bankCard') {
  695. let res = await this.$http.post('/userBank/getUserBankList', {
  696. auditStatus: '',
  697. });
  698. if (!res.data.length) {
  699. this.navigate({
  700. url: '/pages/wallet/bindBank',
  701. complete: () => {
  702. setTimeout(() => {
  703. uni.showToast({
  704. title: '请先绑定银行卡',
  705. duration: 3000,
  706. icon: "none"
  707. });
  708. }, 500);
  709. }
  710. }, "navigateTo", true)
  711. } else {
  712. this.navigate({
  713. url: path,
  714. }, "navigateTo", true)
  715. }
  716. } else {
  717. this.navigate({
  718. url: path,
  719. }, "navigateTo", true)
  720. }
  721. } else {
  722. uni.showToast({
  723. title: '功能待开发...',
  724. icon: "none"
  725. });
  726. }
  727. },
  728. async WithdrawalqueryData(beginTime, endTime) {
  729. let params = {
  730. "endTime": endTime || '',
  731. "beginTime": beginTime || '',
  732. }
  733. let res = await this.$http.post('/sysAgencyFeeApproval/queryOperateInfo', params);
  734. if (res.code == '200') {
  735. this.withdrawalData = res.data
  736. }
  737. },
  738. handleScroll(e) {
  739. const scrollTop = e.scrollTop;
  740. if (scrollTop > this.prevScrollTop) {
  741. // 向下滚动
  742. this.showBackground = true; // 显示背景图
  743. } else if (scrollTop < 50) {
  744. // 在顶部附近,隐藏背景图
  745. this.showBackground = false;
  746. } else {
  747. // 向上滚动
  748. this.showBackground = true; // 显示背景图
  749. }
  750. this.headerStyle.backgroundColor = this.showBackground ? '#fff' : 'transparent';
  751. this.headerStyle.backgroundImage = this.showBackground ?
  752. 'url("/static/image/my/beijing.png")' : '';
  753. this.headerStyle.backgroundSize = this.showBackground ? 'cover' : '';
  754. // this.headerStyle.backgroundPosition = this.showBackground ? 'center' : '';
  755. this.prevScrollTop = scrollTop;
  756. },
  757. //跳转设置
  758. tool() {
  759. uni.navigateTo({
  760. url: "/pages/set/set"
  761. })
  762. },
  763. logout() {
  764. this.emptyUserInfo();
  765. uni.clearStorage({
  766. success: function() {}
  767. });
  768. setTimeout(() => {
  769. uni.reLaunch({
  770. url: "/pages/login/login"
  771. })
  772. return true;
  773. }, 500);
  774. },
  775. incomeClick() {
  776. let info = this.roleIdentityList.find(item => item.grade == this.userInfo.sysUser.grade)
  777. uni.navigateTo({
  778. url: '/pages/institutional/myEarnings?info=' + JSON.stringify(info)
  779. })
  780. // uni.navigateTo({
  781. // url: "/pages/my/commission"
  782. // })
  783. },
  784. // 去账单明细
  785. toBillDetails(type) {
  786. this.navigate({
  787. url: `/pages/wallet/billDetails${type}`,
  788. }, "navigateTo", true)
  789. },
  790. // 去账单明细
  791. toWallet(type) {
  792. this.navigate({
  793. url: "/pages/wallet/wallet"
  794. }, "navigateTo", true)
  795. },
  796. //获取企业微信客服地址,是否展示
  797. getWechatData() {
  798. this.$http.get('/sys/qy/wechat/find/picture').then(res => {
  799. this.supportStaffUrl = res.data.supportStaffUrl
  800. })
  801. },
  802. //点击跳转企业微信客服
  803. weChatService() {
  804. uni.share({
  805. provider: "weixin",
  806. openCustomerServiceChat: true,
  807. customerUrl: this.supportStaffUrl, //企业微信地址
  808. corpid: 'wwfe67d19509d43ec5', //企业id
  809. success: (res) => {},
  810. fail: (err) => {}
  811. });
  812. },
  813. }
  814. }
  815. </script>
  816. <style lang="scss" scoped>
  817. * {
  818. // outline: 1px solid red !important;
  819. }
  820. .headers {
  821. position: fixed;
  822. top: 0;
  823. left: 0;
  824. height: auto;
  825. width: 100%;
  826. z-index: 999999;
  827. padding: 16px;
  828. padding-top: 40px;
  829. text {
  830. font-size: 18px;
  831. font-weight: 700;
  832. color: #333333;
  833. }
  834. .headers-right {
  835. // width: 100%;
  836. // height: 100%;
  837. // position: relative;
  838. position: absolute;
  839. right: 15px;
  840. // width: 70px;
  841. display: flex;
  842. justify-content: space-between;
  843. view {
  844. line-height: 8px;
  845. }
  846. text {
  847. font-size: 9px;
  848. color: #666666;
  849. }
  850. image {
  851. // position: absolute;
  852. // right: 0;
  853. width: 16px;
  854. height: 16px;
  855. }
  856. }
  857. }
  858. .Personnel {
  859. height: auto;
  860. width: 100%;
  861. background: transparent;
  862. background-size: 100% 100%;
  863. padding: 90px 30rpx 20rpx 30rpx;
  864. position: relative;
  865. }
  866. .Personnel-title {
  867. position: absolute;
  868. right: 0;
  869. top: 135px;
  870. background: linear-gradient(132deg, #2DD9FF 0%, #2D6DFF 100%);
  871. border-radius: 16px 0px 0px 16px;
  872. color: #fff;
  873. padding: 2px 6px 2px 10px;
  874. image {
  875. display: inline-block;
  876. width: 15px;
  877. height: 15px;
  878. vertical-align: -2px;
  879. margin-right: 3px;
  880. }
  881. }
  882. .Personnel-img {
  883. position: relative;
  884. .avatar {
  885. width: 60px;
  886. height: 60px;
  887. border-radius: 50%;
  888. }
  889. image:last-child {
  890. display: inline-block;
  891. width: 40rpx;
  892. height: 40rpx;
  893. position: absolute;
  894. bottom: 0;
  895. right: 0;
  896. }
  897. }
  898. /* 我的钱包Start */
  899. .my-wallet {
  900. .wallet-body {
  901. width: 100%;
  902. height: auto;
  903. padding: 8px 16px;
  904. background: #FFFFFF;
  905. box-shadow: 0px 4px 10px 0px #DAE3F4;
  906. border-radius: 6px;
  907. margin-top: 10px;
  908. .route {
  909. text {
  910. font-size: 12px;
  911. color: #333;
  912. font-weight: 400;
  913. }
  914. image {
  915. width: 45px;
  916. height: 40px;
  917. }
  918. }
  919. .money {
  920. padding: 8px 0;
  921. background-color: #F9F8FD;
  922. border-radius: 4px;
  923. margin-top: 8px;
  924. text {
  925. font-size: 12px;
  926. color: #333;
  927. font-weight: 400;
  928. }
  929. }
  930. }
  931. }
  932. .Personnel-info {
  933. font-size: 14px;
  934. color: #152F63;
  935. }
  936. .full-name {
  937. margin-top: 10rpx;
  938. color: #152F63;
  939. font-weight: bold;
  940. font-size: 36rpx;
  941. line-height: 1;
  942. }
  943. .digit {
  944. box-sizing: border-box;
  945. width: 100%;
  946. font-size: 24rpx;
  947. color: #152F63;
  948. margin-top: 26rpx;
  949. line-height: 1;
  950. text:first-child {
  951. margin-bottom: 20rpx;
  952. }
  953. }
  954. .withdrawal-box {
  955. margin-top: 13px;
  956. background: #FFFFFF;
  957. border-radius: 5px 5px 5px 5px;
  958. padding: 18px 16px;
  959. .withdrawal-title {
  960. width: 100%;
  961. height: 100%;
  962. position: relative;
  963. text:first-child {
  964. font-weight: 400;
  965. font-size: 12px;
  966. color: #999999;
  967. }
  968. text:last-child {
  969. position: absolute;
  970. right: 0;
  971. font-size: 10px;
  972. color: #2D6DFF;
  973. line-height: 12px;
  974. }
  975. }
  976. .withdrawal-sum {
  977. color: #333333;
  978. font-weight: bold;
  979. line-height: 32px;
  980. text:first-child {
  981. font-size: 17px;
  982. line-height: 38px;
  983. }
  984. text:last-child {
  985. font-size: 26px;
  986. }
  987. }
  988. .withdrawal-income {
  989. margin: 10px 0;
  990. background: rgba(240, 248, 255, 0.5);
  991. border-radius: 2px 2px 2px 2px;
  992. padding: 20rpx 20rpx 0;
  993. >view {
  994. width: 50%;
  995. margin-bottom: 20rpx;
  996. text {
  997. font-weight: 400;
  998. font-size: 10px;
  999. color: #666666;
  1000. display: block;
  1001. }
  1002. .sum {
  1003. margin-top: 3px;
  1004. font-weight: 700;
  1005. font-size: 17px;
  1006. color: #333333;
  1007. line-height: 20px;
  1008. display: block;
  1009. }
  1010. }
  1011. }
  1012. .withdrawal-fun {
  1013. background: linear-gradient(132deg, #2DD9FF 0%, #2D6DFF 100%);
  1014. border-radius: 5px 5px 5px 5px;
  1015. color: #fff;
  1016. font-size: 16px;
  1017. text-align: center;
  1018. line-height: 42px;
  1019. }
  1020. }
  1021. .cell-item {
  1022. height: 270rpx;
  1023. background: #FFFFFF;
  1024. border-radius: 10rpx 10rpx 10rpx 10rpx;
  1025. padding: 0 30rpx;
  1026. box-sizing: border-box;
  1027. }
  1028. .withdrawal-record {
  1029. font-weight: 700;
  1030. font-size: 16px;
  1031. color: #333333;
  1032. i {
  1033. display: inline-block;
  1034. margin-right: 5px;
  1035. width: 2px;
  1036. height: 20px;
  1037. background: linear-gradient(132deg, #2DD9FF 0%, #2D6DFF 100%);
  1038. }
  1039. }
  1040. .withdrawal-flow {
  1041. margin: 8px 16px;
  1042. overflow: hidden;
  1043. background: #FFFFFF;
  1044. border-radius: 5px 5px 5px 5px;
  1045. font-size: 16px;
  1046. color: #333333;
  1047. .withdrawal-card {
  1048. border-bottom: 1px solid #EEEEEE;
  1049. padding: 15px 0;
  1050. margin: 0 15px;
  1051. image {
  1052. display: inline-block;
  1053. width: 11px;
  1054. height: 11px;
  1055. margin-left: 5px;
  1056. }
  1057. .withdrawal-status {
  1058. padding: 2px 5px;
  1059. font-size: 10px;
  1060. border-radius: 1px 1px 1px 1px;
  1061. }
  1062. }
  1063. }
  1064. .search {
  1065. text {
  1066. font-size: 14px;
  1067. color: #666666;
  1068. }
  1069. i {
  1070. margin-left: 2px;
  1071. display: inline-block;
  1072. width: 0;
  1073. height: 0;
  1074. border: 4px solid;
  1075. border-color: #666666;
  1076. border-bottom: 4px solid transparent;
  1077. border-right: 4px solid transparent;
  1078. border-left: 4px solid transparent;
  1079. }
  1080. }
  1081. .ShowModalCode-style {
  1082. // display: block;
  1083. font-weight: 600;
  1084. font-size: 16px;
  1085. color: #333333;
  1086. border-bottom: 1px solid #EEEEEE;
  1087. padding: 15px;
  1088. text-align: center;
  1089. position: relative;
  1090. text:last-child {
  1091. position: absolute;
  1092. right: 20px;
  1093. color: #999999;
  1094. font-size: 24px;
  1095. line-height: 26px;
  1096. }
  1097. }
  1098. .ShowModalCode-con {
  1099. padding: 20px;
  1100. text-align: center;
  1101. font-size: 16px;
  1102. color: #333333;
  1103. image {
  1104. margin: 0 auto;
  1105. margin-top: 15px;
  1106. }
  1107. }
  1108. .share-style {
  1109. image {
  1110. width: 45px;
  1111. height: 45px
  1112. }
  1113. text {
  1114. font-size: 12px;
  1115. }
  1116. }
  1117. // 权益
  1118. .benefits {
  1119. background: #FFFFFF;
  1120. border-radius: 10rpx 10rpx 10rpx 10rpx;
  1121. padding: 20rpx 0 0;
  1122. box-sizing: border-box;
  1123. .header {
  1124. padding: 0 30rpx;
  1125. box-sizing: border-box;
  1126. image {
  1127. width: 37rpx;
  1128. height: 42rpx;
  1129. }
  1130. .tag {
  1131. padding: 3rpx 17rpx;
  1132. box-sizing: border-box;
  1133. background: linear-gradient(132deg, #2DD9FF 0%, #2D6DFF 100%);
  1134. border-radius: 4rpx 4rpx 4rpx 4rpx;
  1135. font-size: 24rpx;
  1136. color: #FFFFFF;
  1137. }
  1138. .title {
  1139. font-size: 28rpx;
  1140. color: #333;
  1141. }
  1142. }
  1143. .content {
  1144. width: 100%;
  1145. padding: 20rpx 30rpx 30rpx;
  1146. box-sizing: border-box;
  1147. background: linear-gradient(180deg, #F0F8FF 0%, rgba(240, 248, 255, 0) 100%);
  1148. border-radius: 0rpx 0rpx 10rpx 10rpx;
  1149. margin-top: 16rpx;
  1150. display: grid;
  1151. grid-template-columns: repeat(2, 1fr);
  1152. grid-template-rows: auto;
  1153. .item {
  1154. text:first-child {
  1155. font-size: 30rpx;
  1156. color: #333;
  1157. font-weight: bold;
  1158. }
  1159. text:last-child {
  1160. font-size: 24rpx;
  1161. color: #666;
  1162. }
  1163. }
  1164. .item:first-child {
  1165. border-right: 1rpx solid #E0F2FF;
  1166. }
  1167. }
  1168. }
  1169. ///////
  1170. .multiIdentityUnlockProgress {
  1171. background-color: #fff;
  1172. padding: 20rpx 46rpx 20rpx 30rpx;
  1173. box-sizing: border-box;
  1174. border-radius: 10rpx;
  1175. margin: 10px 0;
  1176. .step {
  1177. width: 38%;
  1178. height: auto;
  1179. .progressBar {
  1180. position: relative;
  1181. background-color: #F0F0F0;
  1182. height: 14rpx;
  1183. flex: 1;
  1184. .sche-bg-jindu {
  1185. position: absolute;
  1186. left: 0;
  1187. top: 0;
  1188. height: 14rpx;
  1189. background: #2DD9FF;
  1190. }
  1191. }
  1192. //已解锁
  1193. .role-isUnlocked {
  1194. width: 66rpx;
  1195. height: 66rpx;
  1196. border-radius: 50%;
  1197. background: #F0F7FF;
  1198. border: 4rpx solid #2DD9FF;
  1199. padding: 7rpx 10rpx;
  1200. box-sizing: border-box;
  1201. }
  1202. //未解锁
  1203. .role-unlocked {
  1204. width: 66rpx;
  1205. height: 66rpx;
  1206. border-radius: 50%;
  1207. background: #F0F0F0;
  1208. padding: 7rpx 10rpx;
  1209. box-sizing: border-box;
  1210. }
  1211. .rolelogo {
  1212. width: 38rpx;
  1213. height: 43rpx;
  1214. }
  1215. .title {
  1216. font-size: 30rpx;
  1217. color: #333;
  1218. margin-top: 20rpx;
  1219. margin-right: -12rpx;
  1220. }
  1221. }
  1222. .step:first-child {
  1223. width: 24%;
  1224. .progressBar {
  1225. border-radius: 100px 0 0 100px;
  1226. .sche-bg-jindu {
  1227. border-radius: 100px 0 0 100px;
  1228. }
  1229. }
  1230. }
  1231. .step:last-child {
  1232. .role-isUnlocked {}
  1233. }
  1234. }
  1235. //tab切换
  1236. .customTab {
  1237. width: 100%;
  1238. height: 85rpx;
  1239. margin-top: 30rpx;
  1240. background-size: 100% 100%;
  1241. padding: 0 40rpx;
  1242. box-sizing: border-box;
  1243. .tab-item {
  1244. padding: 23rpx 0;
  1245. box-sizing: border-box;
  1246. font-size: 28rpx;
  1247. color: #999;
  1248. }
  1249. .tab-item-active {
  1250. font-size: 32rpx;
  1251. color: #333;
  1252. font-weight: bold;
  1253. }
  1254. }
  1255. // 角色名片
  1256. .characterCard {
  1257. position: relative;
  1258. background-size: 100% 100%;
  1259. padding: 58rpx 48rpx 25rpx 30rpx;
  1260. box-sizing: border-box;
  1261. border-radius: 20rpx;
  1262. .statusTag {
  1263. position: absolute;
  1264. top: 0;
  1265. left: 0;
  1266. padding: 5rpx 20rpx;
  1267. box-sizing: border-box;
  1268. border-radius: 20rpx 0rpx 20rpx 0rpx;
  1269. font-size: 20rpx;
  1270. color: #fff;
  1271. font-weight: bold;
  1272. }
  1273. .gradeIcon {
  1274. width: 140rpx;
  1275. height: 168rpx;
  1276. position: absolute;
  1277. top: 0;
  1278. right: 40rpx;
  1279. }
  1280. .content {
  1281. flex: 1;
  1282. .title {
  1283. font-size: 36rpx;
  1284. .font-weight {
  1285. line-height: 1.5;
  1286. }
  1287. .expiryTime {
  1288. font-size: 20rpx;
  1289. margin-left: auto;
  1290. margin-top: 16rpx;
  1291. }
  1292. }
  1293. .progressBar {
  1294. text {
  1295. font-size: 26rpx;
  1296. }
  1297. .line {
  1298. position: relative;
  1299. width: 100%;
  1300. height: 8rpx;
  1301. background: linear-gradient(90deg, #FFFFFF 0%, #D1F6FF 100%);
  1302. border-radius: 100px;
  1303. overflow: hidden;
  1304. .jindu {
  1305. position: absolute;
  1306. left: 0;
  1307. top: 0;
  1308. height: 8rpx;
  1309. background: #70CEFF;
  1310. border-radius: 100px;
  1311. }
  1312. }
  1313. }
  1314. .comment {
  1315. .commenticon {
  1316. width: 60rpx;
  1317. height: 60rpx;
  1318. }
  1319. text {
  1320. font-size: 24rpx;
  1321. line-height: 1.4;
  1322. flex: 1;
  1323. }
  1324. }
  1325. }
  1326. .btn {
  1327. align-self: flex-end;
  1328. background: rgba(255, 255, 255, 0.8);
  1329. border-radius: 50rpx 50rpx 50rpx 50rpx;
  1330. margin-left: 45rpx;
  1331. font-size: 28rpx;
  1332. padding: 3rpx 20rpx;
  1333. box-sizing: border-box;
  1334. }
  1335. }
  1336. </style>