index.vue 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229
  1. <template>
  2. <view class="my-container">
  3. <view class="container-bg"></view>
  4. <cu-custom bgColor="#fff">
  5. <view slot="content" style="color: #FFFFFF">UU睡眠</view>
  6. </cu-custom>
  7. <view class="flex-col justify-start page">
  8. <view class="flex-col group_2 space-y-10">
  9. <view class="flex-col justify-start items-start my_device_header">
  10. <view class="flex-col section pos">
  11. <view class="flex-col my_device_profile">
  12. <view @click="handleAuth" class="flex-row space-x-19">
  13. <image v-if="userInfo.face" class="shrink-0 image_5" :src="userInfo.face"/>
  14. <image v-else class="shrink-0 image_5" src="../../static/mine/myAvatar.png"/>
  15. <view class="flex-col flex-auto self-center space-y-14">
  16. <view class="flex-row space-x-8">
  17. <text class="text_2">{{ userInfo.nickname }}</text>
  18. <view class="flex-row shrink-0 section_3 space-x-4">
  19. <image
  20. class="shrink-0 image_7"
  21. src="../../static/mine/myIconEdit.png"
  22. />
  23. <text class="font_2">编辑</text>
  24. </view>
  25. </view>
  26. <view class="flex-row items-center space-x-6">
  27. <image
  28. class="image_8"
  29. src="../../static/mine/myIconPhone.png"
  30. />
  31. <text class="font_3 text_3">{{ userInfo.mobile }}</text>
  32. </view>
  33. </view>
  34. <image
  35. class="shrink-0 self-start image_6"
  36. src="../../static/mine/myIconAlert.png"
  37. />
  38. </view>
  39. <view class="flex-row justify-between relative group_4">
  40. <view class="flex-col justify-start items-center self-center text-wrapper">
  41. <text class="font_4">重新绑定</text>
  42. </view>
  43. </view>
  44. </view>
  45. <!-- <view class="flex-col items-center text-center power-module">-->
  46. <!-- <image-->
  47. <!-- class="image_9"-->
  48. <!-- src="../../static/mine/myIconPower.png"-->
  49. <!-- />-->
  50. <!-- <text class="self-end text_4">1,548</text>-->
  51. <!-- </view>-->
  52. </view>
  53. </view>
  54. <view class="flex-col group_5 space-y-30">
  55. <view class="flex-col space-y-10 my_devices">
  56. <view class="flex-row justify-between">
  57. <text class="font_1 text_5 pos_2">我的设备</text>
  58. <view class="flex-row items-center section_4 pos_3">
  59. <text class="font_5" @click="bindShow = 'show'">添加设备</text>
  60. <image
  61. class="shrink-0 image_7"
  62. src="../../static/mine/myIconAdd.png"
  63. />
  64. </view>
  65. </view>
  66. <view v-if="deviceList.length > 0" v-for="(item, index) in deviceList" :key="index"
  67. class="flex-col my_device_default space-y-6">
  68. <view class="flex-row justify-between items-end">
  69. <view class="flex-col space-y-16">
  70. <view class="flex-row space-x-8">
  71. <text class="font_4 text_6 text_8">设备</text>
  72. <text class="font_6">睡眠床垫</text>
  73. </view>
  74. <view class="flex-row items-baseline">
  75. <text class="font_3 text_6 text_9">SN</text>
  76. <text class="font_3 text_10">{{ item.imei }}</text>
  77. <text class="font_8 text_11 text_12" @click="deleteDevice(item.id, index, item.imei)">取消绑定</text>
  78. </view>
  79. </view>
  80. <view class="flex-col group_6 space-y-6">
  81. <text class="self-center font_2 text_6 text_7">香睡指数</text>
  82. <text class="self-start font_7">{{ item.score_value }}</text>
  83. </view>
  84. </view>
  85. <text class="self-end font_9">{{ item.score_desc }}</text>
  86. <view class="flex-row items-center space-x-20">
  87. <view class="flex-row items-center flex-auto">
  88. <!-- <image-->
  89. <!-- class="shrink-0 image_10"-->
  90. <!-- src="../../static/mine/myIconDefault.png"-->
  91. <!-- />-->
  92. <!-- <text class="font_5 text_13">设为默认</text>-->
  93. <image
  94. class="shrink-0 image_10 image_11"
  95. src="../../static/mine/myIconLink.png"
  96. />
  97. <text @click="handleShareData" class="font_5 text_14">远程关爱</text>
  98. <image
  99. class="shrink-0 image_10 image_12"
  100. src="../../static/mine/myIconSetting.png"
  101. />
  102. <text class="font_5 text_15" @click="handleAlertSetting(item.imei)">报警设置</text>
  103. </view>
  104. <text class="font_10 text_16">{{ item.report_time }}</text>
  105. </view>
  106. </view>
  107. </view>
  108. <view class="flex-col space-y-8">
  109. <!-- <view class="flex-row justify-between">-->
  110. <!-- <text class="font_1">语音短信</text>-->
  111. <!-- <view class="flex-row items-center section_7">-->
  112. <!-- <text class="font_5">购买套餐</text>-->
  113. <!-- <image-->
  114. <!-- class="shrink-0 image_7"-->
  115. <!-- src="../../static/mine/myIconBuy.png"-->
  116. <!-- />-->
  117. <!-- </view>-->
  118. <!-- </view>-->
  119. <view class="flex-col space-y-30">
  120. <!-- <view class="flex-row justify-between my_record">-->
  121. <!-- <view class="flex-col self-center space-y-14">-->
  122. <!-- <view class="flex-row items-center space-x-6">-->
  123. <!-- <image-->
  124. <!-- class="shrink-0 image_10"-->
  125. <!-- src="../../static/mine/myIconMoney.png"-->
  126. <!-- />-->
  127. <!-- <text class="font_11">消费记录</text>-->
  128. <!-- </view>-->
  129. <!-- <view class="flex-row items-center space-x-6">-->
  130. <!-- <image-->
  131. <!-- class="shrink-0 image_10"-->
  132. <!-- src="../../static/mine/myIconPromt.png"-->
  133. <!-- />-->
  134. <!-- <text class="font_11">提醒记录</text>-->
  135. <!-- </view>-->
  136. <!-- </view>-->
  137. <!-- <view class="self-center section_9"></view>-->
  138. <!-- <view class="flex-col self-center space-y-6">-->
  139. <!-- <view class="flex-row space-x-4">-->
  140. <!-- <text class="self-center font_12 text_25">36</text>-->
  141. <!-- <text class="self-start font_11 text_26">次</text>-->
  142. <!-- </view>-->
  143. <!-- <text class="font_13">剩余短信</text>-->
  144. <!-- </view>-->
  145. <!-- <view class="flex-col self-start group_12 space-y-6">-->
  146. <!-- <view class="flex-row group_13">-->
  147. <!-- <text class="self-center font_12">17</text>-->
  148. <!-- <text class="self-start font_11 text_27">次</text>-->
  149. <!-- </view>-->
  150. <!-- <text class="self-start font_13">剩余语音</text>-->
  151. <!-- </view>-->
  152. <!-- </view>-->
  153. <view class="flex-col justify-start my_settings">
  154. <view class="grid">
  155. <!-- <view class="flex-col items-center relative grid-item space-y-8">-->
  156. <!-- <image-->
  157. <!-- class="image_17"-->
  158. <!-- src="../../static/mine/myWifi.png"-->
  159. <!-- />-->
  160. <!-- <text class="font_13 text_28">WIFI连接</text>-->
  161. <!-- </view>-->
  162. <view class="flex-col items-center relative grid-item space-y-8">
  163. <image
  164. class="image_17"
  165. src="../../static/mine/myAnnouncement.png"
  166. />
  167. <text class="font_13 text_28">免责声明</text>
  168. </view>
  169. <view class="flex-col items-center relative grid-item space-y-8">
  170. <image
  171. class="image_17"
  172. src="../../static/mine/myProduct.png"
  173. />
  174. <text class="font_13 text_28">产品介绍</text>
  175. </view>
  176. <view class="flex-col items-center relative grid-item space-y-8">
  177. <image
  178. class="image_17"
  179. src="../../static/mine/myHelp.png"
  180. />
  181. <text class="font_13 text_28">使用帮助</text>
  182. </view>
  183. <view class="flex-col items-center relative grid-item space-y-8">
  184. <image
  185. class="image_17"
  186. src="../../static/mine/mySecret.png"
  187. />
  188. <text class="font_13 text_28">隐私政策</text>
  189. </view>
  190. <view class="flex-col items-center relative grid-item space-y-8">
  191. <image
  192. class="image_17"
  193. src="../../static/mine/myUserAgree.png"
  194. />
  195. <text class="font_13 text_28">用户协议</text>
  196. </view>
  197. <!-- <view class="flex-col items-center relative grid-item space-y-8">-->
  198. <!-- <image-->
  199. <!-- class="image_17"-->
  200. <!-- src="../../static/mine/myState.png"-->
  201. <!-- />-->
  202. <!-- <text class="font_13 text_28">配网说明</text>-->
  203. <!-- </view>-->
  204. <!-- <view class="flex-col items-center relative grid-item space-y-8">-->
  205. <!-- <image-->
  206. <!-- class="image_17"-->
  207. <!-- src="../../static/mine/myOrder.png"-->
  208. <!-- />-->
  209. <!-- <text class="font_13 text_28">我的订单</text>-->
  210. <!-- </view>-->
  211. </view>
  212. </view>
  213. </view>
  214. </view>
  215. </view>
  216. </view>
  217. </view>
  218. <view class="cu-modal" :class="bindShow?'show':''">
  219. <view class="cu-dialog">
  220. <view class="cu-bar bg-white justify-end">
  221. <view style="color: black" class="content">设备绑定</view>
  222. <view class="action" @tap="bindShow=false">
  223. <text class="cuIcon-close text-red"></text>
  224. </view>
  225. </view>
  226. <view class="">
  227. <form>
  228. <view class="cu-form-group solid-bottom">
  229. <view class="title">扫描二维码</view>
  230. <input type="text" v-model="bindSn" class="text-left"/>
  231. <text class="cuIcon-scan text-xxl text-green" style="font-size: 50rpx;"
  232. @click="scan"></text>
  233. </view>
  234. </form>
  235. </view>
  236. <view class="cu-bar bg-white justify-end">
  237. <view class="action">
  238. <button class="cu-btn bg-green margin-left" @tap="bindDevice">确定</button>
  239. </view>
  240. </view>
  241. </view>
  242. </view>
  243. </view>
  244. </template>
  245. <script>
  246. import Storage from '@/utils/storage'
  247. import * as Foundation from '@/ui-utils/Foundation'
  248. import * as API_deviceMemberBind from '@/api/device_member_bind'
  249. import * as API_SLEEP_REPORT from '@/api/sleep_report'
  250. export default {
  251. data() {
  252. return {
  253. deviceList: [],
  254. unionId: '',
  255. memberId: '',
  256. bindSn: '',
  257. bindShow: false,
  258. userInfo: null
  259. };
  260. },
  261. mounted() {
  262. this.memberId = Storage.getItem('uid')
  263. if (this.memberId) {
  264. this.userInfo = Storage.getItem('userInfo')
  265. this.deviceList = Storage.getItem('myBindDevices')
  266. this.unionId = this.userInfo.union_id
  267. if (this.deviceList) {
  268. console.log('this.deviceList===', this.deviceList)
  269. this.API_getNewReport()
  270. }
  271. }
  272. },
  273. methods: {
  274. API_getNewReport() {
  275. const _this = this
  276. let imei = ''
  277. this.deviceList.forEach(item => {
  278. imei += item.imei + ','
  279. })
  280. imei = imei.substring(0, imei.length - 1)
  281. API_SLEEP_REPORT.getNewReportBySn({sns: imei, unionId: this.unionId}).then(res => {
  282. res.forEach(t => {
  283. _this.deviceList.forEach(tt => {
  284. if (t.sn === tt.imei) {
  285. _this.$set(tt, 'report_time', Foundation.unixToDate(t.report_time, "yyyy/MM/dd"))
  286. _this.$set(tt, 'score_value', t.score_value)
  287. _this.$set(tt, 'score_desc', t.score_desc)
  288. }
  289. })
  290. })
  291. console.log(_this.deviceList)
  292. })
  293. },
  294. API_getDeviceList() {
  295. const _this = this
  296. API_deviceMemberBind.getDeviceByDtypeAndMemberId({dtype: '睡眠床垫', memberId: this.memberId}).then(res => {
  297. if (res.length > 0) {
  298. _this.deviceList = res
  299. Storage.setItem("nowChangeDevice", res[0].imei)
  300. Storage.setItem("myBindDevices", res)
  301. _this.API_getNewReport()
  302. }
  303. })
  304. },
  305. handleAuth() {
  306. if (!this.memberId) {
  307. uni.navigateTo({
  308. url: '/pages/auth/auth'
  309. })
  310. } else {
  311. console.log('修改...')
  312. }
  313. },
  314. handleShareData() {
  315. uni.navigateTo({
  316. url: '/pages/shareUser/shareUser'
  317. })
  318. },
  319. handleAlertSetting(imei) {
  320. uni.navigateTo({
  321. url: "/pages/alertSetting/alertSetting?imei=" + imei
  322. });
  323. },
  324. // 扫描条码
  325. scan() {
  326. let _this = this
  327. uni.scanCode({
  328. success: function (res) {
  329. console.log(res, res.result.length)
  330. if (res.result.length > 20) {
  331. if (res.scanType === 'QR_CODE') {
  332. const urlStr = res.result
  333. const qs = Foundation.getQueryObject(urlStr)
  334. if (qs.mac) {
  335. _this.bindSn = qs.mac
  336. } else {
  337. uni.showToast({
  338. title: '请扫码正确的睡眠床垫二维码',
  339. icon: 'none'
  340. });
  341. }
  342. } else {
  343. _this.bindSn = res.result
  344. }
  345. } else {
  346. _this.bindSn = res.result
  347. }
  348. },
  349. fail: (err) => {
  350. console.log(err)
  351. // #ifdef MP
  352. uni.getSetting({
  353. success: (res) => {
  354. let authStatus = res.authSetting['scope.camera'];
  355. if (!authStatus) {
  356. uni.showModal({
  357. title: '授权失败',
  358. content: 'app需要使用您的相机,请在设置界面打开相关权限',
  359. success: (res) => {
  360. if (res.confirm) {
  361. uni.openSetting()
  362. }
  363. }
  364. })
  365. }
  366. }
  367. })
  368. // #endif
  369. }
  370. })
  371. },
  372. bindDevice() {
  373. const params = {
  374. imei: this.bindSn,
  375. memberId: this.memberId,
  376. dtype: '睡眠床垫'
  377. }
  378. this.bindShow = false
  379. let _this = this
  380. API_deviceMemberBind.bindDeviceByDtype(params).then(res => {
  381. if (res.success) {
  382. _this.bindSn = ''
  383. uni.showToast({
  384. title: '绑定成功',
  385. })
  386. _this.API_getDeviceList()
  387. } else {
  388. uni.showToast({
  389. title: res.message,
  390. icon: 'none'
  391. })
  392. }
  393. })
  394. },
  395. // 删除绑定的设备
  396. deleteDevice(id, index, imei){
  397. const _this = this
  398. uni.showModal({
  399. title: '提示',
  400. content: '确定要解绑吗',
  401. success: function (r) {
  402. if (r.confirm) {
  403. API_deviceMemberBind.delSleepMattress({id: id, imei: imei}).then(res=>{
  404. uni.showToast({
  405. title: '解绑成功',
  406. icon: 'none'
  407. })
  408. _this.deviceList.splice(index, 1)
  409. if (_this.deviceList.length > 0) {
  410. Storage.setItem("nowChangeDevice", _this.deviceList[0].imei)
  411. Storage.setItem("myBindDevices", _this.deviceList)
  412. } else {
  413. Storage.removeItem('nowChangeDevice')
  414. Storage.removeItem('myBindDevices')
  415. }
  416. })
  417. }
  418. }
  419. })
  420. },
  421. }
  422. };
  423. </script>
  424. <style lang="scss" scoped>
  425. .power-module {
  426. position: absolute;
  427. right: 1.63rem;
  428. top: 10rem;
  429. .image_9 {
  430. width: 22px;
  431. height: 22px;
  432. }
  433. .text_4 {
  434. font-size: 16px;
  435. font-weight: 500;
  436. letter-spacing: 0px;
  437. line-height: 16px;
  438. color: rgba(255, 255, 255, 1);
  439. vertical-align: top;
  440. text-align: center;
  441. margin-top: 0.3rem;
  442. }
  443. }
  444. .container-bg {
  445. position: fixed;
  446. left: -130px;
  447. top: -130px;
  448. width: 480px;
  449. height: 344px;
  450. opacity: 1;
  451. border-radius: 63px;
  452. -webkit-transform: rotate(-315deg);
  453. transform: rotate(-315deg);
  454. background: linear-gradient(90deg, rgba(86, 17, 247, 0.5) 0%, #4d9efa 100%);
  455. }
  456. .page {
  457. padding-bottom: 3.13rem;
  458. background-color: #000000;
  459. width: 100%;
  460. overflow-y: auto;
  461. overflow-x: hidden;
  462. height: 100%;
  463. .group_2 {
  464. padding-bottom: 1.25rem;
  465. height: 61.06rem;
  466. overflow-y: auto;
  467. .my_device_header {
  468. padding: 0.25rem 0 2.75rem;
  469. overflow-x: hidden;
  470. z-index: 100;
  471. .image {
  472. margin-left: -6.38rem;
  473. border-radius: 3.94rem;
  474. width: 32.63rem;
  475. height: 25.44rem;
  476. }
  477. .section {
  478. // background-image: url('https://codefun-proj-user-res-1256085488.cos.ap-guangzhou.myqcloud.com/649415135a7e3f0310661c1e/649415b654fe0000116ae544/16874493388853192993.png');
  479. background-size: 100% 100%;
  480. background-repeat: no-repeat;
  481. .section_2 {
  482. padding: 1.13rem 0.88rem 0.75rem;
  483. background-color: #ffffff4d;
  484. .space-x-6-reverse {
  485. & > view:not(:last-child),
  486. & > text:not(:last-child),
  487. & > image:not(:last-child) {
  488. margin-right: 0.38rem;
  489. }
  490. .image_2 {
  491. width: 1.06rem;
  492. height: 0.69rem;
  493. }
  494. .image_3 {
  495. width: 0.94rem;
  496. height: 0.69rem;
  497. }
  498. .image_4 {
  499. width: 1.5rem;
  500. height: 0.72rem;
  501. }
  502. }
  503. .text {
  504. font-size: 1.16rem;
  505. }
  506. }
  507. .space-y-32 {
  508. & > view:not(:first-child),
  509. & > text:not(:first-child),
  510. & > image:not(:first-child) {
  511. margin-top: 2rem;
  512. }
  513. }
  514. .my_device_profile {
  515. margin-top: 1.5rem;
  516. padding-left: 2.19rem;
  517. padding-right: 1.5rem;
  518. height: 6.09rem;
  519. .space-x-19 {
  520. & > view:not(:first-child),
  521. & > text:not(:first-child),
  522. & > image:not(:first-child) {
  523. margin-left: 1.19rem;
  524. }
  525. .image_5 {
  526. border-radius: 50%;
  527. width: 4.69rem;
  528. height: 4.69rem;
  529. }
  530. .image_6 {
  531. margin-top: 0.69rem;
  532. width: 1.16rem;
  533. height: 1.25rem;
  534. }
  535. }
  536. .group_4 {
  537. margin-top: -0.31rem;
  538. padding: 0 1.13rem;
  539. .text-wrapper {
  540. margin-left: 4.63rem;
  541. padding: 0.38rem 0;
  542. background-color: #ffffff66;
  543. border-radius: 6.25rem;
  544. width: 4.81rem;
  545. height: 1.5rem;
  546. }
  547. .image_9 {
  548. margin-top: 0.38rem;
  549. width: 1.31rem;
  550. height: 1.31rem;
  551. }
  552. }
  553. }
  554. }
  555. .text_5 {
  556. line-height: 1.03rem;
  557. }
  558. .pos_2 {
  559. position: absolute;
  560. left: 1.28rem;
  561. bottom: 0;
  562. }
  563. .section_4 {
  564. padding: 0.13rem 0.25rem 0.13rem 0.5rem;
  565. border-radius: 0.56rem;
  566. border: solid 0.063rem #4d9efa;
  567. }
  568. .pos_3 {
  569. position: absolute;
  570. right: 1.25rem;
  571. top: 26.28rem;
  572. }
  573. }
  574. .group_5 {
  575. padding: 0 1.25rem;
  576. .my_devices {
  577. .section_4 {
  578. padding: 0.13rem 0.25rem 0.13rem 0.5rem;
  579. border-radius: 0.56rem;
  580. border: solid 0.063rem #4d9efa;
  581. }
  582. }
  583. .space-y-8 {
  584. & > view:not(:first-child),
  585. & > text:not(:first-child),
  586. & > image:not(:first-child) {
  587. margin-top: 0.5rem;
  588. }
  589. .section_7 {
  590. padding: 0.19rem 0.25rem 0 0.5rem;
  591. border-radius: 0.56rem;
  592. height: 1.13rem;
  593. border: solid 0.063rem #4d9efa;
  594. }
  595. }
  596. }
  597. .space-y-30 {
  598. & > view:not(:first-child),
  599. & > text:not(:first-child),
  600. & > image:not(:first-child) {
  601. margin-top: 1.88rem;
  602. }
  603. z-index: 100;
  604. .my_record {
  605. padding: 1rem 1.25rem;
  606. background-color: #1241b8cc;
  607. border-radius: 1rem;
  608. .section_9 {
  609. background-color: #f2f2f2;
  610. width: 0.063rem;
  611. height: 2.5rem;
  612. }
  613. .group_12 {
  614. width: 3.78rem;
  615. .group_13 {
  616. padding: 0 0.13rem;
  617. .text_27 {
  618. margin-top: 0.5rem;
  619. }
  620. }
  621. }
  622. }
  623. .my_settings {
  624. padding: 0.63rem 0;
  625. background-color: #1241b8cc;
  626. border-radius: 1rem;
  627. .grid {
  628. padding: 0 1.06rem;
  629. height: 14.81rem;
  630. display: grid;
  631. grid-template-columns: repeat(4, 1fr);
  632. .grid-item {
  633. padding: 0.63rem 0;
  634. .image_17 {
  635. border-radius: 1.25rem;
  636. width: 2.5rem;
  637. height: 2.5rem;
  638. }
  639. .text_28 {
  640. opacity: 0.99;
  641. }
  642. }
  643. }
  644. }
  645. }
  646. .space-x-8 {
  647. & > view:not(:first-child),
  648. & > text:not(:first-child),
  649. & > image:not(:first-child) {
  650. margin-left: 0.5rem;
  651. }
  652. .text_2 {
  653. color: #ffffff;
  654. font-size: 1.25rem;
  655. font-family: PingFangSC;
  656. line-height: 1.16rem;
  657. }
  658. .section_3 {
  659. padding: 0.25rem 0.63rem;
  660. background-color: #ffffff26;
  661. border-radius: 0.63rem;
  662. height: 1.25rem;
  663. }
  664. .text_8 {
  665. line-height: 0.78rem;
  666. }
  667. .text_20 {
  668. line-height: 0.63rem;
  669. }
  670. }
  671. .font_4 {
  672. font-size: 0.88rem;
  673. font-family: PingFangSC;
  674. line-height: 0.81rem;
  675. color: #ffffff;
  676. }
  677. .font_3 {
  678. font-size: 0.88rem;
  679. font-family: PingFangSC;
  680. line-height: 0.59rem;
  681. color: #ffffff;
  682. }
  683. .text_6 {
  684. opacity: 0.5;
  685. }
  686. .font_2 {
  687. font-size: 0.63rem;
  688. font-family: PingFangSC;
  689. line-height: 0.59rem;
  690. color: #ffffff;
  691. }
  692. .font_5 {
  693. font-size: 0.75rem;
  694. font-family: PingFangSC;
  695. line-height: 0.69rem;
  696. color: #4d9efa;
  697. }
  698. .font_6 {
  699. font-size: 0.88rem;
  700. font-family: PingFangSC;
  701. line-height: 0.81rem;
  702. color: #d8d8d8;
  703. }
  704. .font_1 {
  705. font-size: 1.13rem;
  706. font-family: PingFangSC;
  707. line-height: 1.06rem;
  708. color: #ffffff;
  709. }
  710. .image_7 {
  711. width: 0.63rem;
  712. height: 0.63rem;
  713. }
  714. .space-y-14 {
  715. & > view:not(:first-child),
  716. & > text:not(:first-child),
  717. & > image:not(:first-child) {
  718. margin-top: 0.88rem;
  719. }
  720. .space-x-6 {
  721. & > view:not(:first-child),
  722. & > text:not(:first-child),
  723. & > image:not(:first-child) {
  724. margin-left: 0.38rem;
  725. }
  726. .image_8 {
  727. width: 0.88rem;
  728. height: 0.88rem;
  729. }
  730. .text_3 {
  731. line-height: 0.63rem;
  732. }
  733. }
  734. }
  735. .space-x-4 {
  736. & > view:not(:first-child),
  737. & > text:not(:first-child),
  738. & > image:not(:first-child) {
  739. margin-left: 0.25rem;
  740. }
  741. .text_25 {
  742. line-height: 1.09rem;
  743. }
  744. .text_26 {
  745. margin-top: 0.5rem;
  746. }
  747. }
  748. .font_11 {
  749. font-size: 0.75rem;
  750. font-family: PingFangSC;
  751. line-height: 0.69rem;
  752. color: #ffffff;
  753. }
  754. .font_12 {
  755. font-size: 1.5rem;
  756. font-family: PingFangSC;
  757. line-height: 1.06rem;
  758. color: #ffffff;
  759. }
  760. }
  761. .space-y-10 {
  762. & > view:not(:first-child),
  763. & > text:not(:first-child),
  764. & > image:not(:first-child) {
  765. margin-top: 0.63rem;
  766. }
  767. .my_device_default {
  768. padding: 0.63rem 0.75rem 0.63rem 1.25rem;
  769. background-color: #1241b8cc;
  770. border-radius: 1rem;
  771. .group_6 {
  772. margin-bottom: 0.25rem;
  773. width: 3.56rem;
  774. .text_7 {
  775. line-height: 0.56rem;
  776. }
  777. }
  778. }
  779. .my_device {
  780. padding-bottom: 0.63rem;
  781. background-color: #1241b8cc;
  782. border-radius: 1rem;
  783. .group_7 {
  784. width: 10.84rem;
  785. .group_8 {
  786. width: 3.09rem;
  787. .group_9 {
  788. padding-top: 1.63rem;
  789. .text_18 {
  790. line-height: 0.78rem;
  791. }
  792. .image_13 {
  793. width: 2.38rem;
  794. height: 2.38rem;
  795. }
  796. .pos_4 {
  797. position: absolute;
  798. left: 0;
  799. bottom: 0;
  800. }
  801. }
  802. .text_19 {
  803. line-height: 0.63rem;
  804. }
  805. }
  806. }
  807. .group_10 {
  808. margin-right: 1.25rem;
  809. .text_17 {
  810. line-height: 0.56rem;
  811. }
  812. }
  813. .text_21 {
  814. margin-right: 0.75rem;
  815. }
  816. .group_11 {
  817. padding-left: 1.25rem;
  818. padding-right: 1rem;
  819. .image_14 {
  820. width: 0.81rem;
  821. height: 0.81rem;
  822. }
  823. .text_22 {
  824. margin-left: 0.13rem;
  825. }
  826. .image_15 {
  827. margin-left: 0.88rem;
  828. }
  829. .text_23 {
  830. margin-left: 0.13rem;
  831. }
  832. .image_16 {
  833. margin-left: 0.88rem;
  834. }
  835. .text_24 {
  836. margin-left: 0.13rem;
  837. }
  838. }
  839. }
  840. .space-y-16 {
  841. & > view:not(:first-child),
  842. & > text:not(:first-child),
  843. & > image:not(:first-child) {
  844. margin-top: 1rem;
  845. }
  846. .text_9 {
  847. line-height: 0.63rem;
  848. }
  849. .text_10 {
  850. margin-left: 1.25rem;
  851. line-height: 0.63rem;
  852. }
  853. .font_8 {
  854. font-size: 0.63rem;
  855. font-family: PingFangSC;
  856. line-height: 0.59rem;
  857. color: #a4caf5;
  858. }
  859. .text_11 {
  860. text-decoration: underline;
  861. }
  862. .text_12 {
  863. margin-left: 0.5rem;
  864. }
  865. }
  866. .font_7 {
  867. font-size: 3rem;
  868. font-family: PingFangSC;
  869. line-height: 2.19rem;
  870. color: #ffffff;
  871. }
  872. .font_9 {
  873. font-size: 0.88rem;
  874. font-family: PingFangSC;
  875. line-height: 0.81rem;
  876. color: #4d9efa;
  877. }
  878. .space-x-20 {
  879. & > view:not(:first-child),
  880. & > text:not(:first-child),
  881. & > image:not(:first-child) {
  882. margin-left: 1.25rem;
  883. }
  884. .text_13 {
  885. margin-left: 0.13rem;
  886. }
  887. .image_11 {
  888. margin-left: 0.88rem;
  889. }
  890. .text_14 {
  891. margin-left: 0.13rem;
  892. }
  893. .image_12 {
  894. margin-left: 0.88rem;
  895. }
  896. .text_15 {
  897. margin-left: 0.13rem;
  898. }
  899. .text_16 {
  900. margin-right: 0.13rem;
  901. }
  902. }
  903. .font_10 {
  904. font-size: 0.63rem;
  905. font-family: PingFangSC;
  906. line-height: 0.5rem;
  907. color: #4d9efa;
  908. }
  909. }
  910. .image_10 {
  911. width: 0.75rem;
  912. height: 0.75rem;
  913. }
  914. .space-y-6 {
  915. & > view:not(:first-child),
  916. & > text:not(:first-child),
  917. & > image:not(:first-child) {
  918. margin-top: 0.38rem;
  919. }
  920. }
  921. .font_13 {
  922. font-size: 0.63rem;
  923. font-family: PingFangSC;
  924. line-height: 0.59rem;
  925. color: #4d9efa;
  926. }
  927. }
  928. .my-container {
  929. width: 100%;
  930. height: 100%;
  931. position: relative;
  932. background-color: #000000;
  933. .mask-container {
  934. overflow: hidden;
  935. position: absolute;
  936. height: 30%;
  937. width: 100%;
  938. background-size: cover;
  939. background-position: center;
  940. &:after {
  941. content: '';
  942. position: absolute;
  943. width: 130%;
  944. height: 130%;
  945. left: 0;
  946. top: 0;
  947. z-index: 1;
  948. filter: blur(10px);
  949. transform: translate(-3rem, -3rem);
  950. background: inherit;
  951. background-size: 100% 100%;
  952. }
  953. .cover-mask {
  954. position: absolute;
  955. height: 100%;
  956. width: 100%;
  957. z-index: 3;
  958. background-color: rgba(0, 0, 0, 0.8);
  959. }
  960. .head-img {
  961. width: 108px;
  962. height: 108px;
  963. position: absolute;
  964. top: 50%;
  965. left: 50%;
  966. transform: translate(-50%, -50%);
  967. z-index: 99;
  968. border-radius: 50%;
  969. overflow: hidden;
  970. }
  971. .username {
  972. position: absolute;
  973. left: 50%;
  974. bottom: 20px;
  975. transform: translateX(-50%);
  976. z-index: 99;
  977. color: #fff;
  978. font-size: 36 rpx;
  979. }
  980. }
  981. .recommend-main {
  982. width: 100%;
  983. position: absolute;
  984. top: 30%;
  985. bottom: 50px;
  986. .tabs {
  987. box-shadow: 0 0 0.8px rgb(0, 0, 0 / 10%);
  988. width: 100%;
  989. height: 45px;
  990. align-items: center;
  991. .tab-item {
  992. flex: 1;
  993. font-size: 32 rpx;
  994. text-align: center;
  995. color: rgba(0, 0, 0, 0.5);
  996. &.active {
  997. color: rgb(248, 78, 81);
  998. }
  999. }
  1000. }
  1001. .music-title {
  1002. padding-left: 20px;
  1003. margin: 15px 0;
  1004. box-sizing: border-box;
  1005. color: #000;
  1006. font-size: 32 rpx;
  1007. font-weight: 600;
  1008. .playIcon {
  1009. margin-right: 8px;
  1010. font-size: 40 rpx;
  1011. }
  1012. .light-text {
  1013. font-size: 24 rpx;
  1014. margin-left: 6px;
  1015. color: rgba(0, 0, 0, 0.5);
  1016. }
  1017. }
  1018. .music-item {
  1019. height: 70px;
  1020. box-sizing: border-box;
  1021. padding: 0 20px;
  1022. align-items: center;
  1023. margin-bottom: 10px;
  1024. position: relative;
  1025. &:last-of-type {
  1026. margin-bottom: 0;
  1027. }
  1028. &.active {
  1029. background-image: linear-gradient(to right, rgba(247, 73, 79, 0.1), rgba(247, 73, 79, 0.05));
  1030. .music-info {
  1031. .music-name,
  1032. .small-icon,
  1033. .music-singer {
  1034. color: #f84e51 !important;
  1035. }
  1036. &::before {
  1037. content: '';
  1038. width: 4px;
  1039. height: 65px;
  1040. background-image: linear-gradient(to bottom, rgb(253, 117, 102), rgb(247, 73, 79));
  1041. position: absolute;
  1042. left: 0px;
  1043. top: 3px;
  1044. }
  1045. }
  1046. }
  1047. .music-img {
  1048. width: 58px !important;
  1049. height: 58px !important;
  1050. border-radius: 6px;
  1051. }
  1052. .music-info {
  1053. margin-right: 15px;
  1054. margin-left: 15px;
  1055. width: calc(100vw - 135px);
  1056. text-align: left;
  1057. .music-name {
  1058. font-size: 30 rpx;
  1059. margin-bottom: 7px;
  1060. color: #000;
  1061. }
  1062. .music-singer {
  1063. color: rgba(0, 0, 0, 0.5);
  1064. font-size: 24 rpx;
  1065. align-items: center;
  1066. .small-icon {
  1067. margin-right: 6px;
  1068. transform: scale(0.9);
  1069. color: rgba(0, 0, 0, 0.5);
  1070. font-size: 12px;
  1071. padding: 1px 3px;
  1072. border: 1px solid rgba(0, 0, 0, 0.2);
  1073. border-radius: 4px;
  1074. }
  1075. }
  1076. }
  1077. }
  1078. }
  1079. }
  1080. </style>