userHomepage.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110
  1. <template>
  2. <view class="page">
  3. <view class="topBody">
  4. <view class="header"
  5. :style="{ backgroundImage: `url(${bgImage || '../../static/me/theme3.jpg'})`, marginBottom: labelBoxHeight < 45 ? '-80rpx' : '-40rpx' }">
  6. <view class="header-box" :style="headerBoxStyle">
  7. <view class="reserveASeat"></view>
  8. <view class="benner-box">
  9. <view class="setUp-box">
  10. <view class="my-box">
  11. <image :src="`../../static/crowdFunding/back.png`" mode="widthFix" class="level-icon" />
  12. </view>
  13. <view class="settingBtn-box">
  14. </view>
  15. </view>
  16. <view class="profilePicture-box">
  17. <CircleAvatar class="avator" @click="goPage('/pages/my/editInfo')" :src="myinfo.avator">
  18. </CircleAvatar>
  19. <view class="profilePicture-box-right" @click="goPage('/pages/my/creativeExpert')">
  20. <view class="one-omit">{{ myinfo.nickname }}</view>
  21. <image v-if="myinfo.my_level || myinfo.my_level == 0"
  22. :src="`../../static/icon/level_${myinfo.my_level}.png`" mode="widthFix"
  23. class="level-icon" />
  24. </view>
  25. </view>
  26. <view class="intro_row" @click="goPage('/pages/my/editInfo')">
  27. <block v-if="myinfo.content == ''">
  28. <text class="intro_text two-omit">添加简介</text>
  29. <image src="@/static/me/xiugai.png" mode="widthFix" class="add_icon">
  30. </image>
  31. </block>
  32. <uv-text color="#fff" v-else :text="formatText(myinfo.content)" class="intro_text two-omit">
  33. </uv-text>
  34. </view>
  35. <view class="label-box" id="labelBox">
  36. <view class="label-item sex-item">
  37. <image src="../../static/icon/wd_icon_nv.png" mode="widthFix" v-if="myinfo.sex_id == 2">
  38. </image>
  39. <image src="../../static/icon/wd_icon_nan.png" mode="widthFix" v-else></image>
  40. </view>
  41. <view class="label-item" v-for="(item, index) in aihao_tags" :key="index + item">
  42. {{ item }}
  43. </view>
  44. </view>
  45. <view class="follow_info">
  46. <view class="follow-box">
  47. <view class="num">{{ scientificCounting(myinfo.num_attention) }}</view>
  48. <view class="label">关注</view>
  49. </view>
  50. <!-- <view class="separator"></view> -->
  51. <view class="follow-box">
  52. <view class="num">{{ scientificCounting(myinfo.num_fans) }}</view>
  53. <view class="label">粉丝</view>
  54. </view>
  55. <!-- <view class="separator"></view> -->
  56. <view class="follow-box">
  57. <view class="num">{{ scientificCounting(myinfo.num_like) }}</view>
  58. <view class="label">获赞</view>
  59. </view>
  60. </view>
  61. </view>
  62. <view class="card-box" v-if="false">
  63. <view class="card-top">
  64. <view class="top-box">
  65. 1
  66. </view>
  67. <view class="userinfo-box" @click="goPage('/pages/my/editInfo')">
  68. <view class="userinfo-left">
  69. <CircleAvatar class="avator" :src="myinfo.avator"></CircleAvatar>
  70. </view>
  71. <view class="userinfo-right">
  72. <view class="nickname">
  73. <text class="one-omit">{{ myinfo.nickname }}</text>
  74. <view class="level">Lv{{ myinfo.my_level }}</view>
  75. </view>
  76. <view class="label">
  77. </view>
  78. </view>
  79. </view>
  80. <view class="line"></view>
  81. <view class="bom">
  82. <view class="points-box">
  83. <view class="points" @click="isRecharge ? goPage('/pages/vip/M_purchase') : ''">
  84. <image src="@/static/icon/wd_icon_coin.png" mode=""></image>
  85. <text>{{ myinfo.num_gmm | formatNumberToK }}</text>
  86. <image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png"
  87. mode="aspectFit"></image>
  88. </view>
  89. <view class="points"
  90. @click="isRecharge ? goPage('/pages/my/job?type=recharge') : ''">
  91. <image src="@/static/icon/coin_cd.png" mode=""></image>
  92. <text>{{ myinfo.num_gmd | formatNumberToK }}</text>
  93. <image class="money-add" v-if="isRecharge" src="/static/icon/coin_add.png"
  94. mode="aspectFit"></image>
  95. </view>
  96. </view>
  97. </view>
  98. </view>
  99. <!-- <view class="card-bom" v-if="isRecharge" @click="goPage('/pages/vip/index')"> -->
  100. </view>
  101. </view>
  102. </view>
  103. <view class="myinfo">
  104. <view class="tablist">
  105. <view class="item" :class="{ active: firstLevelNavActive === 0 }"
  106. @click="firstLevelNavActiveSwitch(0)">作品
  107. <view class="indicator-triangle"> </view>
  108. </view>
  109. <view class="item" :class="{ active: firstLevelNavActive === 1 }"
  110. @click="firstLevelNavActiveSwitch(1)">帖子
  111. <view class="indicator-triangle"> </view>
  112. </view>
  113. </view>
  114. <!-- 作品列表 -->
  115. <view class="numlist">
  116. <WorkItem v-for="(item, index) in worksList" :subtitle="true" :key="index" :item="item"
  117. @click="goWork(item)" />
  118. <view class="item" v-for="(item2, index2) in worksList0" :key="index2"
  119. style="margin-bottom: 28rpx;">
  120. <view class="num" @click="goWork(item2)">
  121. <WorkItem :item="item2" style="margin-bottom: 12rpx" />
  122. <view class="maskLayer"></view>
  123. <!-- 当activeTab为1时显示队列状态 -->
  124. <view class="name one-omit" style="
  125. font-family: 'PingFang SC-Medium';
  126. font-weight: 500;
  127. font-size: 28rpx;
  128. color: #1a4d2e;
  129. max-width: 40vw;
  130. ">
  131. {{ item2.title || item2.description || "作品" + index }}
  132. </view>
  133. </view>
  134. </view>
  135. <view v-if="isDataLoaded && worksList.length === 0" class="empty-state">
  136. <image src="@/static/icon/xx_img_zanwuxiaoxi.png" mode="aspectFit" class="empty-image">
  137. </image>
  138. <text class="empty-text">暂无作品</text>
  139. <text class="empty-subtext">他还没有开始创作作品~</text>
  140. </view>
  141. </view>
  142. </view>
  143. </view>
  144. <!-- 确认框 -->
  145. <CustomConfirm ref="customConfirm"></CustomConfirm>
  146. <!-- 提示框 -->
  147. <DialogBox ref="DialogBox"></DialogBox>
  148. <!-- SharePopup组件 -->
  149. <SharePopup :visible="showShare" :userId="userId" :share-title="shareTitle" :share-desc="shareDesc"
  150. :share-img="shareImg" view="userHomepage" @close="showShare = false" />
  151. </view>
  152. </template>
  153. <script>
  154. import tabbar from "@/mixins/tabbar";
  155. import CustomConfirm from "@/components/custome-confirm/customeConfirm.vue";
  156. import CircleAvatar from "@/components/CircleAvatar/CircleAvatar.vue";
  157. import WorkItem from "@/components/WorkItem/WorkItem.vue";
  158. import SharePopup from "@/components/SharePopup/SharePopup.vue";
  159. import DialogBox from "@/components/DialogBox/DialogBox.vue";
  160. export default {
  161. components: {
  162. CustomConfirm,
  163. CircleAvatar,
  164. WorkItem,
  165. SharePopup,
  166. DialogBox
  167. },
  168. mixins: [tabbar],
  169. data() {
  170. return {
  171. bgImage: '',
  172. title: "",
  173. sel: 1,
  174. firstLevelNavActive: 0,
  175. labelBoxHeight: 0,
  176. myinfo: {
  177. avator: "../../static/logo.png",
  178. nickname: "",
  179. content: "",
  180. sex_id: 1,
  181. my_level: 1,
  182. num_attention: 0,
  183. num_fans: 0,
  184. num_like: 0,
  185. wxkf: ""
  186. },
  187. aihao_tags: [],
  188. activeTab: 0,
  189. offset: 0,
  190. hasMore: true,
  191. isLoading: false,
  192. worksList0: [],
  193. worksList: [],
  194. showShare: false,
  195. shareTitle: "",
  196. shareDesc: "",
  197. shareImg: "",
  198. userId: 0,
  199. id: 0,
  200. isDataLoaded: false,
  201. headerBoxStyle: {
  202. background: 'linear-gradient(to bottom,transparent, rgba(0, 0, 0, .8))'
  203. },
  204. };
  205. },
  206. onLoad(e) {
  207. if (e.id) {
  208. this.id = e.id
  209. } else {
  210. this.id = 1;
  211. }
  212. },
  213. onShow() {
  214. uni.$emit("check_login", () => {});
  215. this.offset = 0;
  216. this.hasMore = true;
  217. this.worksList = [];
  218. this.loadInfo();
  219. this.loadWorksList();
  220. },
  221. onReachBottom() {
  222. if (this.hasMore && !this.isLoading) {
  223. this.loadMoreWorks();
  224. }
  225. },
  226. methods: {
  227. // 关注作者
  228. followTheAuthor(n) {
  229. uni.request({
  230. url: this.$apiHost + "/Member/attention",
  231. data: {
  232. uuid: getApp().globalData.uuid,
  233. id: this.id,
  234. },
  235. header: {
  236. "content-type": "application/json",
  237. sign: getApp().globalData.headerSign,
  238. },
  239. success: (res) => {
  240. console.log("点赞结果:", res.data);
  241. uni.showToast({
  242. title: res.data.str,
  243. icon: "none",
  244. });
  245. this.loadInfo();
  246. },
  247. fail: (e) => {
  248. console.log("关注失败:", e);
  249. uni.showToast({
  250. title: "网络请求失败",
  251. icon: "none",
  252. });
  253. },
  254. });
  255. },
  256. goBack() {
  257. uni.navigateBack({
  258. delta: 1,
  259. });
  260. },
  261. clickShare(item) {
  262. this.showShare = true;
  263. },
  264. goPage(page) {
  265. if (page == "kefu") {
  266. let that = this;
  267. // #ifdef APP-PLUS
  268. plus.share.getServices((res) => {
  269. const wechat = res.find((i) => i.id === "weixin");
  270. if (wechat) {
  271. wechat.openCustomerServiceChat({
  272. corpid: "wwbc06aa8311b6ac08",
  273. url: that.myinfo.wxkf,
  274. },
  275. (src) => {
  276. console.log("success:");
  277. },
  278. (err) => {
  279. console.log("error:");
  280. }
  281. );
  282. } else {
  283. uni.showToast({
  284. title: "没有检测到微信,请先安装",
  285. icon: "error",
  286. });
  287. }
  288. });
  289. // #endif
  290. } else if (page != "") {
  291. uni.navigateTo({
  292. url: page,
  293. });
  294. }
  295. },
  296. loadInfo() {
  297. console.log({
  298. uuid: getApp().globalData.uuid,
  299. skey: getApp().globalData.skey,
  300. });
  301. uni.request({
  302. url: this.$apiHost + "/Member/getHomeInfo",
  303. data: {
  304. uuid: getApp().globalData.uuid,
  305. skey: getApp().globalData.skey,
  306. user_id: this.id,
  307. },
  308. header: {
  309. "content-type": "application/json",
  310. sign: getApp().globalData.headerSign,
  311. },
  312. success: (res) => {
  313. console.log("----:", JSON.parse(JSON.stringify(res.data)));
  314. this.shareTitle = res.data.nickname
  315. this.shareDesc = res.data.content
  316. this.shareImg = res.data.avator
  317. this.userId = res.data.user_id
  318. if (res.data.need_login == "yes") {
  319. uni.removeStorageSync("wapptoken");
  320. uni.redirectTo({
  321. url: "/pages/login/login",
  322. });
  323. return;
  324. }
  325. if (res.data.aihao) {
  326. this.aihao_tags = res.data.aihao.split(",");
  327. }
  328. this.myinfo = res.data;
  329. if (res.data.bgimg) {
  330. this.bgImage = res.data.bgimg;
  331. }
  332. },
  333. complete: (com) => {
  334. // uni.hideLoading();
  335. },
  336. fail: (e) => {
  337. console.log("----e:", e);
  338. },
  339. });
  340. },
  341. switchTab(index) {
  342. this.activeTab = index;
  343. this.offset = 0;
  344. this.hasMore = true;
  345. this.worksList = [];
  346. this.loadWorksList();
  347. },
  348. loadWorksList() {
  349. if (this.isLoading) return;
  350. this.isLoading = true;
  351. this.isDataLoaded = false;
  352. // 根据activeTab选择不同的API
  353. let apiUrl = "";
  354. if (this.firstLevelNavActive == 0) {
  355. apiUrl = "/Work/getlist";
  356. } else if (this.firstLevelNavActive == 1) {
  357. apiUrl = "/Article/getlist";
  358. }
  359. uni.request({
  360. url: this.$apiHost + apiUrl,
  361. data: {
  362. uuid: getApp().globalData.uuid,
  363. skey: getApp().globalData.skey,
  364. type: "other", // 固定为my,表示获取自己的作品
  365. offset: this.offset,
  366. user_id: this.id
  367. },
  368. header: {
  369. "content-type": "application/json",
  370. sign: getApp().globalData.headerSign,
  371. },
  372. success: (res) => {
  373. console.log("列表数据:", JSON.parse(JSON.stringify(res.data)));
  374. if (res.data.success == "yes" && res.data.list) {
  375. if (res.data.list.length > 0) {
  376. this.worksList = [...this.worksList, ...res.data.list];
  377. this.offset += res.data.list.length;
  378. }
  379. if (res.data.list.length < 20) {
  380. this.hasMore = false;
  381. }
  382. } else {
  383. this.hasMore = false;
  384. this.worksList = [];
  385. }
  386. },
  387. complete: () => {
  388. this.isLoading = false;
  389. this.isDataLoaded = true;
  390. },
  391. fail: (e) => {
  392. console.log("请求列表失败:", e);
  393. this.isLoading = false;
  394. this.isDataLoaded = true;
  395. this.worksList = [];
  396. },
  397. });
  398. },
  399. firstLevelNavActiveSwitch(n) {
  400. this.firstLevelNavActive = n;
  401. this.offset = 0;
  402. this.hasMore = true;
  403. this.worksList = [];
  404. if (this.firstLevelNavActive == 0) {
  405. this.activeTab = 0;
  406. }
  407. this.loadWorksList();
  408. },
  409. loadMoreWorks() {
  410. if (this.hasMore && !this.isLoading) {
  411. this.loadWorksList();
  412. }
  413. },
  414. updateDataList() {
  415. this.data_list = this.worksList.map((item) => {
  416. return {
  417. url: item.images || item.img_url || item.url || "../../static/logo.png",
  418. title: item.title || item.description || "作品",
  419. id: item.id,
  420. };
  421. });
  422. },
  423. goWork(item) {
  424. uni.$emit("check_login", () => {});
  425. if (this.firstLevelNavActive == 0) {
  426. uni.navigateTo({
  427. url: "/pages/index/workDetail?id=" + item.id,
  428. });
  429. } else {
  430. uni.navigateTo({
  431. url: "/pages/index/articleDetail?id=" + item.id,
  432. });
  433. }
  434. },
  435. navigateToFollow() {
  436. uni.navigateTo({
  437. url: "/pages/my/follow",
  438. });
  439. },
  440. getLabelBoxHeight() {
  441. setTimeout(() => {
  442. const query = uni.createSelectorQuery();
  443. query.select('#labelBox').boundingClientRect(data => {
  444. if (data) {
  445. this.labelBoxHeight = data.height;
  446. console.log('label-box高度:', this.labelBoxHeight);
  447. }
  448. }).exec();
  449. }, 100);
  450. },
  451. formatText(text) {
  452. if (!text) return '';
  453. return text.length > 20 ? text.substring(0, 20) + '...' : text;
  454. },
  455. scientificCounting(num) {
  456. if (!num) {
  457. return 0;
  458. }
  459. if (num < 1000) {
  460. return num;
  461. } else if (num < 1000000) {
  462. return (num / 1000).toFixed(1) + 'k';
  463. } else if (num < 1000000000) {
  464. return (num / 1000000).toFixed(1) + 'M';
  465. } else {
  466. return (num / 1000000000).toFixed(1) + 'B';
  467. }
  468. },
  469. },
  470. };
  471. </script>
  472. <style scoped lang="scss">
  473. page {
  474. background-color: #fff;
  475. }
  476. .page {
  477. background-color: #fff;
  478. width: 100%;
  479. min-height: 100vh;
  480. }
  481. .reserveASeat {
  482. width: 100%;
  483. height: calc(var(--status-bar-height));
  484. }
  485. .topBody {
  486. width: 750rpx;
  487. background: transparent;
  488. }
  489. .header {
  490. background-position: center;
  491. background-size: auto 100%;
  492. min-height: calc(700rpx + var(--status-bar-height));
  493. // margin-bottom:-80rpx ;
  494. .header-box {
  495. width: 100%;
  496. height: 100%;
  497. min-height: calc(700rpx + var(--status-bar-height));
  498. padding: 20rpx;
  499. padding-top: 48rpx;
  500. background-position: center bottom;
  501. background-size: 100% auto;
  502. }
  503. .card-box {
  504. width: 100%;
  505. min-height: 490rpx;
  506. position: relative;
  507. left: 0;
  508. top: 0%;
  509. overflow: hidden;
  510. .card-top {
  511. height: 410rpx;
  512. width: 100%;
  513. background: url("../../static/me/my-card-bg.png") top center / 100% auto,
  514. #fff;
  515. position: absolute;
  516. top: 0%;
  517. left: 0;
  518. z-index: 5;
  519. padding: 24rpx 0;
  520. padding-top: 16rpx;
  521. box-sizing: border-box;
  522. border-radius: 25rpx;
  523. .top-box {
  524. display: flex;
  525. justify-content: space-between;
  526. align-items: center;
  527. // padding-top: 8rpx;
  528. background: url("../../static/me/car-top-bg-center.png") top center/ 146rpx 50rpx no-repeat;
  529. padding-right: 24rpx;
  530. padding-left: 24rpx;
  531. .hello-box {
  532. font-family: "CustomFont" !important;
  533. font-size: 36rpx;
  534. font-weight: 700;
  535. }
  536. .settingBtn-box {
  537. width: 148rpx;
  538. display: flex;
  539. align-items: center;
  540. justify-content: space-between;
  541. image {
  542. width: 64rpx;
  543. height: 64rpx;
  544. }
  545. }
  546. }
  547. .userinfo-box {
  548. min-height: 120rpx;
  549. width: 100%;
  550. display: flex;
  551. padding-right: 24rpx;
  552. padding-left: 24rpx;
  553. padding-top: 18rpx;
  554. .avator {
  555. width: 120rpx;
  556. height: 120rpx;
  557. margin-right: 16rpx;
  558. }
  559. .userinfo-right {
  560. .nickname {
  561. font-weight: bold;
  562. margin-bottom: 0rpx;
  563. display: flex;
  564. flex-direction: row;
  565. justify-content: flex-start;
  566. align-items: center;
  567. display: flex;
  568. padding-bottom: 12rpx;
  569. >text {
  570. max-width: 380rpx;
  571. font-family: "PingFang SC-Bold";
  572. font-weight: 400;
  573. font-size: 36rpx;
  574. }
  575. image {
  576. width: 36rpx;
  577. margin-left: 8rpx;
  578. margin-right: 10rpx;
  579. }
  580. .level {
  581. font-weight: 400;
  582. font-size: 22rpx;
  583. font-family: "PingFang SC-Bold";
  584. background: linear-gradient(360deg, #acf934 0%, #ffe439 100%);
  585. border-radius: 8rpx;
  586. padding: 2rpx 8rpx;
  587. }
  588. }
  589. .label {
  590. height: 40rpx;
  591. // height: 110rpx;
  592. overflow: hidden;
  593. >view {
  594. color: #acf934;
  595. font-family: "PingFang SC-Medium";
  596. font-weight: 400;
  597. font-size: 24rpx;
  598. background: #1f1f1f;
  599. border-radius: 6px 6px 6px 6px;
  600. display: inline-block;
  601. margin-right: 10rpx;
  602. margin-bottom: 10rpx;
  603. padding: 6rpx 16rpx;
  604. }
  605. }
  606. }
  607. }
  608. .intro_row {
  609. width: 100%;
  610. display: flex;
  611. align-items: center;
  612. padding-right: 24rpx;
  613. padding-left: 24rpx;
  614. padding-top: 12rpx;
  615. padding-bottom: 12rpx;
  616. .intro_text {
  617. color: #1f1f1f;
  618. font-size: 24rpx;
  619. font-family: "PingFang SC-Bold";
  620. font-weight: 400;
  621. padding-right: 0rpx;
  622. ::v-deep.uv-text__value {
  623. font-size: 26rpx !important;
  624. }
  625. }
  626. .add_icon {
  627. width: 28rpx;
  628. margin-left: 10rpx;
  629. }
  630. }
  631. .line {
  632. width: 100%;
  633. height: 2rpx;
  634. background-color: #f2f6f2;
  635. margin: 10rpx 0;
  636. margin-bottom: 20rpx;
  637. }
  638. .bom {
  639. display: flex;
  640. align-items: center;
  641. justify-content: space-between;
  642. padding-right: 24rpx;
  643. padding-left: 24rpx;
  644. .follow_info {
  645. display: flex;
  646. align-items: center;
  647. justify-content: space-between;
  648. max-width: 300rpx;
  649. .follow-box {
  650. display: flex;
  651. flex-direction: column;
  652. align-items: center;
  653. justify-content: center;
  654. text-align: center;
  655. }
  656. .num {
  657. width: 100%;
  658. font-size: 36rpx;
  659. font-weight: bold;
  660. color: #333;
  661. }
  662. .label {
  663. width: 100%;
  664. font-size: 24rpx;
  665. color: #999;
  666. }
  667. .separator {
  668. width: 2rpx;
  669. height: 24rpx;
  670. background-color: #e5e5e5;
  671. margin: 0 30rpx;
  672. }
  673. }
  674. .points-box {
  675. display: flex;
  676. justify-content: space-between;
  677. .points {
  678. display: flex;
  679. align-items: center;
  680. background: #f2f6f2;
  681. border-radius: 30rpx;
  682. padding: 6rpx 12rpx 6rpx 8rpx;
  683. &:first-child {
  684. margin-right: 18rpx;
  685. }
  686. image {
  687. width: 40rpx;
  688. height: 40rpx;
  689. }
  690. text {
  691. display: inline-block;
  692. padding-left: 4rpx;
  693. line-height: 0;
  694. }
  695. }
  696. }
  697. }
  698. .follow_info {
  699. // display: none;
  700. }
  701. }
  702. }
  703. .benner-box {
  704. .setUp-box {
  705. display: flex;
  706. align-items: center;
  707. justify-content: space-between;
  708. .my-box {
  709. font-family: "CustomFont" !important;
  710. font-size: 36rpx;
  711. font-weight: 700;
  712. color: #fff;
  713. image {
  714. width: 64rpx;
  715. height: 64rpx;
  716. }
  717. }
  718. .settingBtn-box {
  719. width: 148rpx;
  720. display: flex;
  721. align-items: center;
  722. justify-content: space-between;
  723. image {
  724. width: 64rpx;
  725. height: 64rpx;
  726. }
  727. }
  728. }
  729. .profilePicture-box {
  730. display: flex;
  731. align-items: center;
  732. justify-content: flex-start;
  733. padding-top: 60rpx;
  734. padding-bottom: 28rpx;
  735. .avator {
  736. width: 156rpx;
  737. height: 156rpx;
  738. margin-right: 16rpx;
  739. }
  740. .one-omit {
  741. max-width: 400rpx;
  742. font-size: 40rpx;
  743. font-family: "PingFang SC-Bold";
  744. font-weight: 400;
  745. color: #fff;
  746. }
  747. .profilePicture-box-right {
  748. image {
  749. width: 80rpx;
  750. height: 38rpx;
  751. margin-top: 10rpx;
  752. }
  753. }
  754. }
  755. .intro_row {
  756. width: 100%;
  757. display: flex;
  758. align-items: center;
  759. padding-right: 24rpx;
  760. padding-left: 24rpx;
  761. padding-top: 12rpx;
  762. padding-bottom: 12rpx;
  763. color: #fff;
  764. .intro_text {
  765. color: #fff;
  766. font-size: 24rpx;
  767. font-family: "PingFang SC-Bold";
  768. font-weight: 400;
  769. padding-right: 0rpx;
  770. ::v-deep.uv-text__value {
  771. font-size: 26rpx !important;
  772. }
  773. }
  774. .add_icon {
  775. width: 28rpx;
  776. margin-left: 10rpx;
  777. }
  778. }
  779. .label-box {
  780. display: flex;
  781. flex-wrap: wrap;
  782. align-items: center;
  783. // height: 55rpx;
  784. width: 100%;
  785. // overflow: hidden;
  786. .label-item {
  787. background: rgba(255, 255, 255, 0.1);
  788. border-radius: 12rpx;
  789. border: 2rpx solid rgba(255, 255, 255, 0.1);
  790. display: inline-block;
  791. color: #fff;
  792. font-size: 24rpx;
  793. font-family: "PingFang SC-Bold";
  794. font-weight: 400;
  795. padding: 6rpx 16rpx;
  796. margin-right: 10rpx;
  797. margin-bottom: 10rpx;
  798. image {
  799. width: 30rpx;
  800. }
  801. &.sex-item {
  802. border-radius: 50%;
  803. width: 40rpx;
  804. height: 40rpx;
  805. display: inline-flex;
  806. align-items: center;
  807. justify-content: center;
  808. padding: 0;
  809. margin-right: 0;
  810. margin-bottom: 0;
  811. margin-right: 10rpx;
  812. }
  813. }
  814. }
  815. .follow_info {
  816. display: flex;
  817. align-items: center;
  818. justify-content: space-between;
  819. max-width: 300rpx;
  820. padding-bottom: 28rpx;
  821. padding-top: 28rpx;
  822. .follow-box {
  823. display: flex;
  824. flex-direction: column;
  825. align-items: center;
  826. justify-content: center;
  827. text-align: center;
  828. }
  829. .num {
  830. width: 100%;
  831. font-size: 36rpx;
  832. font-weight: bold;
  833. color: #fff;
  834. }
  835. .label {
  836. width: 100%;
  837. font-size: 24rpx;
  838. color: rgba(255, 255, 255, 0.5);
  839. }
  840. .separator {
  841. width: 2rpx;
  842. height: 24rpx;
  843. background-color: #e5e5e5;
  844. margin: 0 30rpx;
  845. }
  846. }
  847. .bom-box {
  848. display: flex;
  849. align-items: center;
  850. justify-content: space-between;
  851. .bom-item {
  852. width: 218rpx;
  853. height: 96rpx;
  854. border-radius: 16rpx;
  855. border: 2rpx solid rgba(255, 255, 255, 0.1);
  856. padding: 10rpx 18rpx;
  857. background: url("../../static/me/box-bg-1.png") center center / 100% 100%;
  858. &.bom-item2 {
  859. background: url("../../static/me/box-bg-2.png") center center / 100% 100%;
  860. }
  861. &.bom-item3 {
  862. background: url("../../static/me/box-bg-3.png") center center / 100% 100%;
  863. }
  864. .bom-item-title {
  865. font-size: 24rpx;
  866. color: #fff;
  867. }
  868. .bom-item-subtitle {
  869. font-size: 20rpx;
  870. color: rgba(255, 255, 255, 0.5);
  871. }
  872. }
  873. }
  874. }
  875. }
  876. .thread {
  877. height: 210rpx;
  878. padding: 50rpx;
  879. font-size: 52rpx;
  880. color: #6e6a6a;
  881. padding-top: 80rpx;
  882. }
  883. .myinfo {
  884. width: 100%;
  885. display: flex;
  886. flex-direction: column;
  887. border-radius: 28rpx 28rpx 0 0;
  888. padding: 24rpx 20rpx;
  889. padding-top: 14rpx;
  890. justify-content: flex-start;
  891. box-sizing: border-box;
  892. background: #fff;
  893. overflow: hidden;
  894. .line {
  895. width: 100%;
  896. height: 2rpx;
  897. background: #f2f6f2;
  898. margin-bottom: 8rpx;
  899. margin-top: 32rpx;
  900. }
  901. .subtitle {
  902. display: flex;
  903. .item {
  904. padding: 0 43rpx;
  905. font-weight: 400;
  906. font-size: 28rpx;
  907. color: #999999;
  908. font-family: "PingFang SC-Medium";
  909. &.active {
  910. font-family: "PingFang SC-Bold";
  911. font-weight: 400;
  912. font-size: 28rpx;
  913. color: #1f1f1f;
  914. }
  915. }
  916. }
  917. .tablist {
  918. display: flex;
  919. justify-content: flex-start;
  920. box-sizing: border-box;
  921. background: #ffffff;
  922. .item {
  923. padding: 15rpx 38rpx;
  924. color: #1f1f1f;
  925. font-size: 28rpx;
  926. background: #f2f6f2;
  927. margin-right: 20rpx;
  928. border-radius: 30rpx;
  929. position: relative;
  930. left: 0;
  931. top: 0;
  932. line-height: 1;
  933. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  934. // box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
  935. &:active {
  936. transform: scale(0.95);
  937. // box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.05);
  938. }
  939. .indicator-triangle {
  940. position: absolute;
  941. bottom: -10rpx;
  942. left: 50%;
  943. transform: translateX(-50%);
  944. width: 0;
  945. height: 0;
  946. border-left: 10rpx solid transparent;
  947. border-right: 10rpx solid transparent;
  948. border-top: 10rpx solid #acf934;
  949. display: none;
  950. transition: all 0.3s ease;
  951. }
  952. &.active {
  953. background: #acf934;
  954. font-family: "CustomFont" !important;
  955. box-shadow: 0 4rpx 12rpx rgba(172, 249, 52, 0.3);
  956. .indicator-triangle {
  957. display: block;
  958. transform: translateX(-50%) scale(1.2);
  959. }
  960. }
  961. }
  962. }
  963. .numlist {
  964. display: grid;
  965. grid-template-columns: repeat(2, 1fr);
  966. margin-top: 30rpx
  967. }
  968. }
  969. .empty-state {
  970. display: flex;
  971. flex-direction: column;
  972. align-items: center;
  973. justify-content: center;
  974. padding: 60rpx 0;
  975. margin-top: 40rpx;
  976. background: #FFFFFF;
  977. border-radius: 20rpx;
  978. width: 710rpx;
  979. .empty-image {
  980. width: 240rpx;
  981. height: 240rpx;
  982. margin-bottom: 30rpx;
  983. }
  984. .empty-text {
  985. font-size: 32rpx;
  986. color: #333333;
  987. margin-bottom: 16rpx;
  988. font-weight: 500;
  989. }
  990. .empty-subtext {
  991. font-size: 28rpx;
  992. color: #999999;
  993. }
  994. }
  995. </style>