my.vue 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850
  1. <template>
  2. <view class="bg-index-image">
  3. <!-- 头像模块 -->
  4. <view class="profile-section">
  5. <view class="user-login flex-items" @click="goLogin">
  6. <view class="profile-content">
  7. <view class="avatar-container">
  8. <!-- 显示头像的图片元素 -->
  9. <image class="avatar" :src="user.avatar||'../../static/images/avatar.png'" mode="aspectFill">
  10. </image>
  11. <!-- 美化后的代理徽章 -->
  12. <view v-if="isLogin && user.level > 0" class="member-badge" :class="'level-' + user.level">
  13. <view class="badge-content">
  14. <!-- S级代理 - 单颗钻石 -->
  15. <text v-if="user.level == '1'" class="member-icon diamond">💎</text>
  16. <!-- SS级代理 - 双钻石 -->
  17. <view v-else-if="user.level == '2'" class="member-icons">
  18. <text class="member-icon diamond">💎</text>
  19. <text class="member-icon diamond">💎</text>
  20. </view>
  21. <!-- SSS级代理 - 皇冠 -->
  22. <text v-else-if="user.level == '3'" class="member-icon crown">👑</text>
  23. </view>
  24. </view>
  25. </view>
  26. <view class="user-info">
  27. <view v-if="isLogin">
  28. <view class="username font44 font-def font-bold omit-text">
  29. {{user.account}}
  30. </view>
  31. <view class="member-level-container">
  32. <!-- 会员等级显示 -->
  33. <view class="member-level" :class="'level-text-' + user.level">
  34. <text v-if="user.level == '0'">普通会员</text>
  35. <text v-else-if="user.level == '1'">S级会员</text>
  36. <text v-else-if="user.level == '2'">SS级会员</text>
  37. <text v-else-if="user.level == '3'">SSS级会员</text>
  38. </view>
  39. <!-- 代理等级显示 -->
  40. <view v-if="user.agent == 2 || user.agent == 3" class="agent-level"
  41. :class="'agent-text-' + user.agent">
  42. <text v-if="user.agent == 2">荣耀代理</text>
  43. <text v-else-if="user.agent == 3">超凡代理</text>
  44. </view>
  45. <!-- 成为代理按钮 -->
  46. <view v-if="user.agent != 2 && user.agent != 3" class="upgrade-btn"
  47. @click.stop="goUpgrade">
  48. <text class="upgrade-text">成为代理</text>
  49. <uni-icons color="#FFD700" type="right" size="12"></uni-icons>
  50. </view>
  51. </view>
  52. <!-- 代理到期时间显示 -->
  53. <view v-if="user.agent == 2 || user.agent == 3" class="agent-expiration">
  54. <text
  55. class="expiration-text">代理到期:{{ formatExpirationTime(user.agentExpirationTime) }}</text>
  56. </view>
  57. </view>
  58. <view v-else>
  59. <view class="username font44 font-bold">
  60. 点击登录
  61. </view>
  62. <view class="slogan">
  63. 传承千年唐卡文化
  64. </view>
  65. </view>
  66. </view>
  67. </view>
  68. <view class="profile-arrow" v-if="isLogin">
  69. <uni-icons color="#463a26" type="gear-filled" size="30"></uni-icons>
  70. </view>
  71. </view>
  72. </view>
  73. <!-- 订单模块 -->
  74. <view class="order">
  75. <view class="flex pad-t-16" @tap="goOrder(0)">
  76. <view class="font28 font-bold font-def mar-l-25">
  77. 我的订单
  78. </view>
  79. <view class="mar-l-auto mar-r-30">
  80. <view class="font-gray flex-center">
  81. <view>
  82. 全部
  83. </view>
  84. <view>
  85. <uni-icons color="#a8a8a8" type="right" size="15"></uni-icons>
  86. </view>
  87. </view>
  88. </view>
  89. </view>
  90. <view class="flex flex-sp-between mar-t-24 mar-l-25 ">
  91. <view v-for="(item,index) in orderList" :key="index" @tap="goOrder(item.status)">
  92. <view class="flex-col-center mar-r-20">
  93. <view class="badge-container">
  94. <image class="order-avatar" :src="item.img" mode="aspectFill"></image>
  95. <view class="badge" v-if="getBadgeCount(item.status) > 0">
  96. <text>{{getBadgeCount(item.status)}}</text>
  97. </view>
  98. </view>
  99. <view class="font28 font-def">{{item.name}}</view>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. <view class="setting">
  105. <view class="menu-grid">
  106. <view v-for="(item,index) in menuList" :key="index"
  107. :class="['menu-item', {'menu-item-customer-service': item.name === '七指堂客服'}]"
  108. @click="item.name !== '七指堂客服' ? goPath(item) : null">
  109. <button v-if="item.name === '七指堂客服'" class="contact-btn menu-content" open-type="contact">
  110. <image class="menu-avatar" :src="item.img" mode="aspectFill"></image>
  111. <text class="menu-text">{{item.name}}</text>
  112. </button>
  113. <view v-else class="menu-content">
  114. <image class="menu-avatar" :src="item.img" mode="aspectFill"></image>
  115. <text class="menu-text">{{item.name}}</text>
  116. </view>
  117. </view>
  118. </view>
  119. </view>
  120. <uni-popup ref="checkLoginDialog" type="dialog">
  121. <uni-popup-dialog type="warn" cancelText="继续浏览" confirmText="确认" title="提示" content="体验更多功能,请先登录"
  122. @confirm="goLogin()"></uni-popup-dialog>
  123. </uni-popup>
  124. </view>
  125. </template>
  126. <script>
  127. import {
  128. memberDetail,
  129. memberPetList,
  130. carouselQueryAll,
  131. getOrderStatusCounts,
  132. wxLogin
  133. } from '../../config/api';
  134. import {
  135. mapMutations,
  136. mapActions,
  137. mapGetters
  138. } from 'vuex';
  139. import store from '@/store';
  140. import customNavbar from '../../components/custom-navbar/custom-navbar.vue'
  141. import {
  142. shareImg
  143. } from '@/common/config.js'
  144. export default {
  145. data() {
  146. return {
  147. statusBarHeight: 0, // 状态栏高度
  148. petList: [
  149. ],
  150. statusCounts: {
  151. pendingPayment: 0,
  152. pendingShipment: 0,
  153. pendingReceipt: 0,
  154. pendingEvaluation: 0,
  155. afterSale: 0
  156. },
  157. menuList: [{
  158. img: '../../static/images/shouye.png',
  159. name: "个人主页",
  160. path: "/packageUser/pages/user-info/index"
  161. },
  162. {
  163. img: '../../static/images/dengji.png',
  164. name: "等级中心",
  165. path: "/packageUser/pages/level/index",
  166. },
  167. {
  168. img: '../../static/images/team.png',
  169. name: "我的团队",
  170. path: "/packageUser/pages/team/index"
  171. },
  172. {
  173. img: '../../static/images/fenxiang.png',
  174. name: "邀请好友",
  175. path: "/packageUser/pages/share/index"
  176. },
  177. {
  178. img: '../../static/images/dizhi.png',
  179. name: "收货地址",
  180. path: ""
  181. },
  182. {
  183. img: '../../static/images/shoucang1.png',
  184. name: "商品收藏",
  185. path: "/packageUser/pages/collect/index",
  186. },
  187. {
  188. img: '../../static/images/cart1.png',
  189. name: "购物车",
  190. path: "/packageShop/pages/cart/index",
  191. }
  192. ],
  193. orderList: [{
  194. img: '../../static/images/dfk1.png',
  195. name: "待付款",
  196. status: 1
  197. },
  198. {
  199. img: '../../static/images/dfh1.png',
  200. name: "待发货",
  201. status: 2
  202. },
  203. {
  204. img: '../../static/images/dsh2.png',
  205. name: "待收货",
  206. status: 3
  207. },
  208. {
  209. img: '../../static/images/pj1.png',
  210. name: "待评价",
  211. status: 6
  212. },
  213. ],
  214. user: {}
  215. }
  216. },
  217. computed: {
  218. ...mapGetters(['isLogin', 'userInfo', 'access_token', 'refresh_token'])
  219. },
  220. onLoad() {
  221. console.log("121212")
  222. console.log('当前用户登陆信息')
  223. console.log(this.userInfo)
  224. // 获取状态栏高度
  225. this.getStatusBarHeight();
  226. // this.getShufflingList();
  227. // var that = this
  228. // uni.onTabBarMidButtonTap(function(e){
  229. // console.log('点击按钮')
  230. // that.$Router.push({path: '/pages/tabbar/licai'})
  231. // })
  232. },
  233. onShow() {
  234. // 不管是否登录都获取系统状态栏高度
  235. if (this.isLogin) {
  236. this.detail(),
  237. this.getOrderStatusCounts()
  238. }
  239. },
  240. // 微信小程序分享配置
  241. onShareAppMessage() {
  242. return {
  243. title: `邀请您加入宏匠唐卡`,
  244. path: `/pages/index/indexNew`,
  245. imageUrl: shareImg // 分享图片,需要添加
  246. }
  247. },
  248. onShareTimeline(res) {
  249. let that = this;
  250. let shareInfo = store.state.vuex_shareInfo;
  251. let query = shareInfo.query;
  252. //携带当前页面资源ID参数
  253. let currentPage = getCurrentPages()[getCurrentPages().length - 1];
  254. let options = currentPage.options;
  255. if (JSON.stringify(options) != '{}' && options.id) {
  256. query += `&id=${options.id}`;
  257. }
  258. return {
  259. title: shareInfo.title,
  260. query: query,
  261. imageUrl: shareImg,
  262. success(res) {
  263. uni.showToast({
  264. title: '分享成功'
  265. })
  266. },
  267. fail(res) {
  268. uni.showToast({
  269. title: '分享失败',
  270. icon: 'none'
  271. })
  272. },
  273. complete() {}
  274. }
  275. },
  276. methods: {
  277. ...mapActions(['logout', 'setToken', 'setUserInfo']),
  278. // 获取状态栏高度
  279. getStatusBarHeight() {
  280. const systemInfo = uni.getSystemInfoSync();
  281. this.statusBarHeight = systemInfo.statusBarHeight || 0;
  282. },
  283. // 成为代理
  284. goUpgrade() {
  285. uni.showModal({
  286. title: '成为代理',
  287. content: '购买代理套餐即可升为代理,立即前往?',
  288. success: (res) => {
  289. if (res.confirm) {
  290. // 这里可以跳转到代理升级页面
  291. this.$route('/packageShop/pages/search/product-list?serachKey=' + "代理")
  292. }
  293. }
  294. });
  295. },
  296. /**
  297. * 格式化代理到期时间
  298. * @param {String} timeStr - 时间字符串
  299. * @returns {String} 格式化后的时间字符串
  300. */
  301. formatExpirationTime(timeStr) {
  302. if (!timeStr) {
  303. return '永久有效';
  304. }
  305. try {
  306. const date = new Date(timeStr);
  307. if (isNaN(date.getTime())) {
  308. return '时间格式错误';
  309. }
  310. const year = date.getFullYear();
  311. const month = String(date.getMonth() + 1).padStart(2, '0');
  312. const day = String(date.getDate()).padStart(2, '0');
  313. return `${year}-${month}-${day}`;
  314. } catch (error) {
  315. console.error('格式化时间错误:', error);
  316. return '时间格式错误';
  317. }
  318. },
  319. // 获取订单状态数量
  320. getOrderStatusCounts() {
  321. getOrderStatusCounts().then(res => {
  322. if (res.code === 200) {
  323. this.statusCounts = res.data;
  324. }
  325. })
  326. },
  327. // 获取用户详情
  328. detail() {
  329. memberDetail().then(res => {
  330. this.user = res.data;
  331. uni.setStorageSync('user', this.user);
  332. if (res.data.isShielding == '1') {
  333. this.handlerLogout();
  334. }
  335. })
  336. },
  337. // 登录处理
  338. goLogin() {
  339. if (!this.isLogin) {
  340. this.$refs.checkLoginDialog.close()
  341. uni.navigateTo({
  342. url: '/packageUser/pages/login/index'
  343. });
  344. } else {
  345. this.$route('/packageUser/pages/user-info/index');
  346. }
  347. },
  348. goOrder(status) {
  349. if (!this.isLogin) {
  350. return this.$refs.checkLoginDialog.open()
  351. }
  352. if (status === 5) {
  353. this.$route('/packageOrder/pages/list/index?isAfter=1')
  354. } else if (status === 6) {
  355. this.$route('/packageOrder/pages/list/index?isEvaluate=0')
  356. } else {
  357. this.$route('/packageOrder/pages/list/index?status=' + status)
  358. }
  359. },
  360. getShufflingList() {
  361. carouselQueryAll().then(res => {
  362. this.bannerList = res.data
  363. console.log('输出结果')
  364. console.log(this.bannerList)
  365. });
  366. },
  367. handlerLogout() {
  368. this.logout()
  369. },
  370. goPath(item) {
  371. if (!this.isLogin) {
  372. return this.$refs.checkLoginDialog.open()
  373. }
  374. if (item.path) {
  375. this.$route(item.path)
  376. } else if (item.name === '收货地址') {
  377. console.log("12")
  378. uni.chooseAddress({
  379. success: (res) => {
  380. this.address = res;
  381. },
  382. fail: (err) => {
  383. console.error('获取收货地址失败:', err);
  384. if (err.errMsg.includes('auth deny')) {
  385. uni.showModal({
  386. title: '提示',
  387. content: '需要您的授权才能获取收货地址,是否前往设置?',
  388. success: (res) => {
  389. if (res.confirm) {
  390. uni.openSetting();
  391. }
  392. }
  393. });
  394. } else {}
  395. }
  396. });
  397. }
  398. },
  399. getPet() {
  400. memberPetList().then((res) => {
  401. this.petList = res.data
  402. })
  403. },
  404. getBadgeCount(status) {
  405. switch (status) {
  406. case 1: // 待付款
  407. return this.statusCounts.pendingPayment || 0;
  408. case 2: // 待发货
  409. return this.statusCounts.pendingShipment || 0;
  410. case 3: // 待收货
  411. return this.statusCounts.pendingReceipt || 0;
  412. case 6: // 待评价
  413. return this.statusCounts.pendingEvaluation || 0;
  414. case 5: // 退款/售后
  415. return this.statusCounts.afterSale || 0;
  416. default:
  417. return 0;
  418. }
  419. }
  420. },
  421. }
  422. </script>
  423. <style>
  424. .bg-index-image {
  425. min-height: 100vh;
  426. padding: 0 24rpx;
  427. background:
  428. linear-gradient(135deg, #f7f3e8 0%, #f0ebe0 30%, #ede5d8 70%, #e8dcc6 100%);
  429. position: relative;
  430. overflow: hidden;
  431. }
  432. /* 禅意背景纹理层 */
  433. .bg-index-image::before {
  434. content: '';
  435. position: fixed;
  436. top: 0;
  437. left: 0;
  438. right: 0;
  439. bottom: 0;
  440. background-image:
  441. /* 主要禅意纹理 */
  442. radial-gradient(circle at 20% 20%, rgba(139, 69, 19, 0.03) 0%, transparent 60%),
  443. radial-gradient(circle at 80% 60%, rgba(165, 42, 42, 0.02) 0%, transparent 50%),
  444. radial-gradient(circle at 40% 80%, rgba(160, 82, 45, 0.03) 0%, transparent 55%),
  445. /* 细腻纹理 */
  446. repeating-radial-gradient(circle at 60% 30%,
  447. rgba(218, 165, 32, 0.01) 0%,
  448. rgba(218, 165, 32, 0.01) 2px,
  449. transparent 2px,
  450. transparent 12px),
  451. /* 禅意波纹 */
  452. repeating-conic-gradient(from 45deg at 70% 70%,
  453. transparent 0deg,
  454. rgba(139, 69, 19, 0.005) 45deg,
  455. transparent 90deg,
  456. rgba(160, 82, 45, 0.005) 135deg,
  457. transparent 180deg);
  458. background-size:
  459. 900rpx 900rpx,
  460. 700rpx 700rpx,
  461. 800rpx 800rpx,
  462. 60rpx 60rpx,
  463. 200rpx 200rpx;
  464. z-index: -1;
  465. pointer-events: none;
  466. animation: zenBreath 25s ease-in-out infinite;
  467. }
  468. /* 禅意装饰层 */
  469. .bg-index-image::after {
  470. content: '';
  471. position: fixed;
  472. top: 0;
  473. left: 0;
  474. right: 0;
  475. bottom: 0;
  476. background-image:
  477. /* 金色微光 */
  478. radial-gradient(ellipse at 30% 20%, rgba(218, 165, 32, 0.02) 0%, transparent 70%),
  479. radial-gradient(ellipse at 70% 80%, rgba(218, 165, 32, 0.015) 0%, transparent 60%),
  480. /* 禅意圆环 */
  481. repeating-radial-gradient(circle at 85% 15%,
  482. transparent 0px,
  483. transparent 20px,
  484. rgba(218, 165, 32, 0.008) 20px,
  485. rgba(218, 165, 32, 0.008) 22px,
  486. transparent 22px,
  487. transparent 40px);
  488. background-size: 600rpx 400rpx, 500rpx 350rpx, 300rpx 300rpx;
  489. z-index: -1;
  490. pointer-events: none;
  491. animation: goldenMist 30s ease-in-out infinite reverse;
  492. }
  493. /* 禅意呼吸动效 */
  494. @keyframes zenBreath {
  495. 0%,
  496. 100% {
  497. opacity: 0.4;
  498. transform: scale(1) rotate(0deg);
  499. }
  500. 33% {
  501. opacity: 0.6;
  502. transform: scale(1.01) rotate(0.5deg);
  503. }
  504. 66% {
  505. opacity: 0.5;
  506. transform: scale(1.02) rotate(-0.3deg);
  507. }
  508. }
  509. /* 金色薄雾动效 */
  510. @keyframes goldenMist {
  511. 0%,
  512. 100% {
  513. opacity: 0.2;
  514. transform: translateX(0) translateY(0) scale(1);
  515. }
  516. 25% {
  517. opacity: 0.3;
  518. transform: translateX(10rpx) translateY(-5rpx) scale(1.01);
  519. }
  520. 50% {
  521. opacity: 0.25;
  522. transform: translateX(5rpx) translateY(10rpx) scale(1.02);
  523. }
  524. 75% {
  525. opacity: 0.35;
  526. transform: translateX(-8rpx) translateY(3rpx) scale(0.99);
  527. }
  528. }
  529. .user-login {
  530. background:
  531. linear-gradient(135deg, rgba(255, 253, 245, 0.98) 0%, rgba(252, 248, 240, 0.95) 50%, rgba(250, 245, 235, 0.97) 100%);
  532. backdrop-filter: blur(15px) saturate(1.2);
  533. box-shadow:
  534. 0 12rpx 48rpx rgba(139, 69, 19, 0.12),
  535. 0 4rpx 16rpx rgba(160, 82, 45, 0.08),
  536. 0 1rpx 4rpx rgba(218, 165, 32, 0.1),
  537. inset 0 1rpx 0 rgba(255, 255, 255, 0.9),
  538. inset 0 -1rpx 0 rgba(218, 165, 32, 0.05);
  539. padding: 52rpx 36rpx;
  540. margin: 36rpx -24rpx;
  541. border-radius: 28rpx;
  542. border: 2rpx solid rgba(218, 165, 32, 0.18);
  543. position: relative;
  544. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  545. overflow: hidden;
  546. }
  547. /* 禅意装饰边框 */
  548. .user-login::before {
  549. content: '';
  550. position: absolute;
  551. top: 12rpx;
  552. left: 12rpx;
  553. right: 12rpx;
  554. bottom: 12rpx;
  555. border: 1rpx solid rgba(218, 165, 32, 0.12);
  556. border-radius: 24rpx;
  557. background:
  558. /* 禅意纹理 */
  559. repeating-linear-gradient(45deg,
  560. transparent 0rpx,
  561. transparent 6rpx,
  562. rgba(218, 165, 32, 0.02) 6rpx,
  563. rgba(218, 165, 32, 0.02) 12rpx),
  564. repeating-linear-gradient(-45deg,
  565. transparent 0rpx,
  566. transparent 6rpx,
  567. rgba(160, 82, 45, 0.015) 6rpx,
  568. rgba(160, 82, 45, 0.015) 12rpx),
  569. /* 内部光晕 */
  570. radial-gradient(ellipse at 30% 30%, rgba(218, 165, 32, 0.03) 0%, transparent 70%),
  571. radial-gradient(ellipse at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 60%);
  572. pointer-events: none;
  573. animation: zenPattern 15s ease-in-out infinite;
  574. }
  575. /* 温润光泽效果 */
  576. .user-login::after {
  577. content: '';
  578. position: absolute;
  579. top: 0;
  580. left: -60%;
  581. width: 60%;
  582. height: 100%;
  583. background: linear-gradient(90deg,
  584. transparent,
  585. rgba(255, 255, 255, 0.08),
  586. rgba(218, 165, 32, 0.03),
  587. rgba(255, 255, 255, 0.12),
  588. transparent);
  589. transform: skewX(-20deg);
  590. animation: gentleShine 12s ease-in-out infinite;
  591. }
  592. @keyframes gentleShine {
  593. 0% {
  594. left: -60%;
  595. opacity: 0;
  596. }
  597. 10% {
  598. opacity: 1;
  599. }
  600. 90% {
  601. opacity: 1;
  602. }
  603. 100% {
  604. left: 160%;
  605. opacity: 0;
  606. }
  607. }
  608. @keyframes zenPattern {
  609. 0%,
  610. 100% {
  611. opacity: 0.6;
  612. transform: scale(1) rotate(0deg);
  613. }
  614. 50% {
  615. opacity: 0.8;
  616. transform: scale(1.002) rotate(0.2deg);
  617. }
  618. }
  619. .user-login:active {
  620. transform: scale(0.98);
  621. box-shadow:
  622. 0 4rpx 16rpx rgba(139, 69, 19, 0.12),
  623. 0 1rpx 4rpx rgba(160, 82, 45, 0.08);
  624. }
  625. .profile-content {
  626. display: flex;
  627. align-items: center;
  628. }
  629. .profile-arrow {
  630. margin-left: auto;
  631. padding: 16rpx;
  632. }
  633. .pet {
  634. border-radius: 20rpx;
  635. width: 700rpx;
  636. height: auto;
  637. padding-bottom: 30rpx;
  638. background-color: white;
  639. margin-top: 30rpx;
  640. margin-left: 25rpx;
  641. }
  642. .order {
  643. background: linear-gradient(135deg, rgba(255, 253, 245, 0.95) 0%, rgba(252, 248, 240, 0.92) 100%);
  644. backdrop-filter: blur(10px);
  645. box-shadow:
  646. 0 8rpx 32rpx rgba(139, 69, 19, 0.08),
  647. 0 2rpx 8rpx rgba(160, 82, 45, 0.04),
  648. inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
  649. padding: 40rpx 32rpx;
  650. margin: 24rpx -24rpx 32rpx;
  651. border-radius: 24rpx;
  652. border: 1rpx solid rgba(218, 165, 32, 0.15);
  653. position: relative;
  654. overflow: hidden;
  655. }
  656. /* 订单模块禅意装饰 */
  657. .order::before {
  658. content: '';
  659. position: absolute;
  660. top: 12rpx;
  661. left: 12rpx;
  662. right: 12rpx;
  663. bottom: 12rpx;
  664. border: 1rpx solid rgba(218, 165, 32, 0.08);
  665. border-radius: 20rpx;
  666. background:
  667. radial-gradient(circle at 30% 30%, rgba(218, 165, 32, 0.02) 0%, transparent 70%),
  668. radial-gradient(circle at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 70%);
  669. pointer-events: none;
  670. }
  671. .setting {
  672. background: linear-gradient(135deg, rgba(255, 253, 245, 0.95) 0%, rgba(252, 248, 240, 0.92) 100%);
  673. backdrop-filter: blur(10px);
  674. box-shadow:
  675. 0 8rpx 32rpx rgba(139, 69, 19, 0.08),
  676. 0 2rpx 8rpx rgba(160, 82, 45, 0.04),
  677. inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
  678. padding: 40rpx 32rpx;
  679. margin: 24rpx -24rpx;
  680. border-radius: 24rpx;
  681. border: 1rpx solid rgba(218, 165, 32, 0.15);
  682. position: relative;
  683. overflow: hidden;
  684. }
  685. /* 设置模块禅意装饰 */
  686. .setting::before {
  687. content: '';
  688. position: absolute;
  689. top: 16rpx;
  690. left: 16rpx;
  691. right: 16rpx;
  692. bottom: 16rpx;
  693. border: 1rpx solid rgba(218, 165, 32, 0.08);
  694. border-radius: 20rpx;
  695. background-image:
  696. radial-gradient(circle at 20% 80%, rgba(218, 165, 32, 0.03) 0%, transparent 50%),
  697. radial-gradient(circle at 80% 20%, rgba(160, 82, 45, 0.03) 0%, transparent 50%),
  698. repeating-linear-gradient(45deg,
  699. transparent 0rpx,
  700. transparent 20rpx,
  701. rgba(218, 165, 32, 0.01) 20rpx,
  702. rgba(218, 165, 32, 0.01) 40rpx);
  703. pointer-events: none;
  704. }
  705. .menu-grid {
  706. display: grid;
  707. grid-template-columns: repeat(4, 1fr);
  708. gap: 20rpx;
  709. width: 100%;
  710. }
  711. .menu-item {
  712. aspect-ratio: 1;
  713. border-radius: 20rpx;
  714. background: linear-gradient(135deg, rgba(255, 253, 245, 0.85) 0%, rgba(252, 248, 240, 0.8) 50%, rgba(250, 245, 235, 0.82) 100%);
  715. backdrop-filter: blur(8px) saturate(1.1);
  716. border: 1.5rpx solid rgba(218, 165, 32, 0.15);
  717. box-shadow:
  718. 0 6rpx 24rpx rgba(139, 69, 19, 0.06),
  719. 0 2rpx 8rpx rgba(160, 82, 45, 0.04),
  720. inset 0 1rpx 0 rgba(255, 255, 255, 0.7),
  721. inset 0 -1rpx 0 rgba(218, 165, 32, 0.03);
  722. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  723. position: relative;
  724. overflow: hidden;
  725. cursor: pointer;
  726. }
  727. /* 菜单项禅意装饰 */
  728. .menu-item::before {
  729. content: '';
  730. position: absolute;
  731. top: 6rpx;
  732. left: 6rpx;
  733. right: 6rpx;
  734. bottom: 6rpx;
  735. border: 1rpx solid rgba(218, 165, 32, 0.08);
  736. border-radius: 16rpx;
  737. background:
  738. radial-gradient(circle at 30% 30%, rgba(218, 165, 32, 0.025) 0%, transparent 70%),
  739. radial-gradient(circle at 70% 70%, rgba(160, 82, 45, 0.02) 0%, transparent 60%),
  740. repeating-radial-gradient(circle at center,
  741. transparent 0%,
  742. transparent 8px,
  743. rgba(218, 165, 32, 0.008) 8px,
  744. rgba(218, 165, 32, 0.008) 10px);
  745. pointer-events: none;
  746. transition: all 0.4s ease;
  747. opacity: 0.6;
  748. }
  749. /* 悬浮光晕效果 */
  750. .menu-item::after {
  751. content: '';
  752. position: absolute;
  753. top: 0;
  754. left: 0;
  755. right: 0;
  756. bottom: 0;
  757. border-radius: 20rpx;
  758. background:
  759. radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%),
  760. rgba(218, 165, 32, 0.08) 0%,
  761. rgba(218, 165, 32, 0.04) 30%,
  762. transparent 70%);
  763. opacity: 0;
  764. transition: all 0.3s ease;
  765. pointer-events: none;
  766. }
  767. .menu-item:hover {
  768. transform: translateY(-2rpx);
  769. box-shadow:
  770. 0 12rpx 32rpx rgba(139, 69, 19, 0.1),
  771. 0 4rpx 12rpx rgba(160, 82, 45, 0.08),
  772. inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
  773. border-color: rgba(218, 165, 32, 0.2);
  774. }
  775. .menu-item:hover::before {
  776. opacity: 1;
  777. transform: scale(1.02);
  778. }
  779. .menu-item:hover::after {
  780. opacity: 1;
  781. }
  782. .menu-item:active {
  783. transform: scale(0.96) translateY(1rpx);
  784. background: linear-gradient(135deg, rgba(252, 248, 240, 0.95) 0%, rgba(245, 240, 230, 0.9) 50%, rgba(248, 243, 233, 0.92) 100%);
  785. box-shadow:
  786. 0 3rpx 12rpx rgba(139, 69, 19, 0.12),
  787. 0 1rpx 4rpx rgba(160, 82, 45, 0.08),
  788. inset 0 2rpx 4rpx rgba(218, 165, 32, 0.06);
  789. }
  790. .menu-item:active::before {
  791. opacity: 1;
  792. transform: scale(0.98);
  793. background:
  794. radial-gradient(circle at center, rgba(218, 165, 32, 0.06) 0%, transparent 60%);
  795. }
  796. .menu-content {
  797. width: 100%;
  798. height: 100%;
  799. display: flex;
  800. flex-direction: column;
  801. align-items: center;
  802. justify-content: center;
  803. gap: 16rpx;
  804. padding: 16rpx;
  805. }
  806. .menu-text {
  807. font-size: 24rpx;
  808. color: #8b4513;
  809. font-weight: 500;
  810. text-align: center;
  811. line-height: 1.2;
  812. text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
  813. letter-spacing: 0.5rpx;
  814. }
  815. /* 客服按钮重置样式 */
  816. .contact-btn.menu-content {
  817. background: none;
  818. border: none;
  819. padding: 16rpx;
  820. margin: 0;
  821. line-height: normal;
  822. }
  823. .contact-btn.menu-content::after {
  824. display: none;
  825. }
  826. .profile-section {
  827. margin-bottom: 36rpx;
  828. width: 100%;
  829. position: relative;
  830. }
  831. /* 添加禅意装饰元素 */
  832. .profile-section::before {
  833. content: '◦';
  834. position: absolute;
  835. top: -20rpx;
  836. left: 50%;
  837. transform: translateX(-50%);
  838. font-size: 32rpx;
  839. color: rgba(218, 165, 32, 0.3);
  840. text-shadow: 0 2rpx 4rpx rgba(218, 165, 32, 0.1);
  841. animation: zenSymbol 8s ease-in-out infinite;
  842. }
  843. @keyframes zenSymbol {
  844. 0%,
  845. 100% {
  846. opacity: 0.3;
  847. transform: translateX(-50%) scale(1);
  848. }
  849. 50% {
  850. opacity: 0.6;
  851. transform: translateX(-50%) scale(1.1);
  852. }
  853. }
  854. .avatar-container {
  855. position: relative;
  856. margin-right: 40rpx;
  857. }
  858. .avatar {
  859. width: 160rpx;
  860. height: 160rpx;
  861. border-radius: 50%;
  862. border: 4rpx solid rgba(218, 165, 32, 0.25);
  863. overflow: hidden;
  864. box-shadow:
  865. 0 12rpx 32rpx rgba(139, 69, 19, 0.15),
  866. 0 4rpx 12rpx rgba(160, 82, 45, 0.12),
  867. 0 1rpx 4rpx rgba(218, 165, 32, 0.1),
  868. inset 0 0 0 3rpx rgba(255, 255, 255, 0.9),
  869. inset 0 0 0 6rpx rgba(218, 165, 32, 0.05);
  870. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  871. position: relative;
  872. }
  873. /* 头像禅意光环 */
  874. .avatar::before {
  875. content: '';
  876. position: absolute;
  877. top: -12rpx;
  878. left: -12rpx;
  879. right: -12rpx;
  880. bottom: -12rpx;
  881. border-radius: 50%;
  882. background:
  883. conic-gradient(from 0deg,
  884. transparent 0deg,
  885. rgba(218, 165, 32, 0.08) 60deg,
  886. rgba(218, 165, 32, 0.15) 120deg,
  887. rgba(218, 165, 32, 0.2) 180deg,
  888. rgba(218, 165, 32, 0.15) 240deg,
  889. rgba(218, 165, 32, 0.08) 300deg,
  890. transparent 360deg);
  891. animation: avatarHalo 12s linear infinite;
  892. z-index: -1;
  893. }
  894. /* 头像内光环 */
  895. .avatar::after {
  896. content: '';
  897. position: absolute;
  898. top: -8rpx;
  899. left: -8rpx;
  900. right: -8rpx;
  901. bottom: -8rpx;
  902. border-radius: 50%;
  903. background:
  904. conic-gradient(from 180deg,
  905. transparent 0deg,
  906. rgba(160, 82, 45, 0.06) 90deg,
  907. rgba(139, 69, 19, 0.08) 180deg,
  908. rgba(160, 82, 45, 0.06) 270deg,
  909. transparent 360deg);
  910. animation: avatarHalo 15s linear infinite reverse;
  911. z-index: -1;
  912. }
  913. @keyframes avatarHalo {
  914. 0% {
  915. transform: rotate(0deg);
  916. }
  917. 100% {
  918. transform: rotate(360deg);
  919. }
  920. }
  921. .avatar:active {
  922. transform: scale(0.98);
  923. box-shadow:
  924. 0 4rpx 12rpx rgba(139, 69, 19, 0.16),
  925. 0 1rpx 4rpx rgba(160, 82, 45, 0.12);
  926. }
  927. /* 美化后的代理徽章 */
  928. .member-badge {
  929. position: absolute;
  930. bottom: -8rpx;
  931. right: -8rpx;
  932. border-radius: 20rpx;
  933. padding: 8rpx 12rpx;
  934. display: flex;
  935. align-items: center;
  936. border: 2rpx solid rgba(255, 255, 255, 0.9);
  937. backdrop-filter: blur(10px);
  938. animation: badgeGlow 2s ease-in-out infinite alternate;
  939. }
  940. .badge-content {
  941. display: flex;
  942. align-items: center;
  943. justify-content: center;
  944. }
  945. .member-icons {
  946. display: flex;
  947. align-items: center;
  948. gap: 2rpx;
  949. }
  950. .member-icon {
  951. font-size: 24rpx;
  952. filter: drop-shadow(0 2rpx 4rpx rgba(0, 0, 0, 0.3));
  953. animation: iconFloat 2s ease-in-out infinite;
  954. }
  955. .member-icon.diamond {
  956. animation: diamondSparkle 1.5s ease-in-out infinite;
  957. }
  958. .member-icon.crown {
  959. animation: crownGlow 2s ease-in-out infinite;
  960. }
  961. /* S级代理 - 金色钻石徽章 */
  962. .level-1 {
  963. background: linear-gradient(135deg, #FFD700 0%, #FFA500 50%, #FF8C00 100%);
  964. box-shadow: 0 4rpx 16rpx rgba(255, 215, 0, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
  965. }
  966. .level-1 .member-icon {
  967. filter: drop-shadow(0 2rpx 4rpx rgba(255, 215, 0, 0.5));
  968. }
  969. /* SS级代理 - 红宝石双钻石徽章 */
  970. .level-2 {
  971. background: linear-gradient(135deg, #FF6B6B 0%, #FF8E53 50%, #FF4757 100%);
  972. box-shadow: 0 4rpx 16rpx rgba(255, 107, 107, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.3);
  973. }
  974. .level-2 .member-icon {
  975. filter: drop-shadow(0 2rpx 4rpx rgba(255, 107, 107, 0.5));
  976. }
  977. .level-2 .member-icon:nth-child(2) {
  978. animation-delay: 0.5s;
  979. }
  980. /* SSS级代理 - 紫金皇冠徽章 */
  981. .level-3 {
  982. background: linear-gradient(135deg, #9B59B6 0%, #8E44AD 50%, #6C5CE7 100%);
  983. box-shadow: 0 6rpx 20rpx rgba(155, 89, 182, 0.5), inset 0 1rpx 0 rgba(255, 255, 255, 0.4);
  984. }
  985. .level-3 .member-icon {
  986. filter: drop-shadow(0 3rpx 6rpx rgba(155, 89, 182, 0.6));
  987. }
  988. @keyframes badgeGlow {
  989. 0% {
  990. transform: scale(1);
  991. }
  992. 100% {
  993. transform: scale(1.05);
  994. }
  995. }
  996. @keyframes iconFloat {
  997. 0%,
  998. 100% {
  999. transform: translateY(0);
  1000. }
  1001. 50% {
  1002. transform: translateY(-2rpx);
  1003. }
  1004. }
  1005. @keyframes diamondSparkle {
  1006. 0%,
  1007. 100% {
  1008. opacity: 1;
  1009. transform: scale(1) rotate(0deg);
  1010. }
  1011. 25% {
  1012. opacity: 0.8;
  1013. transform: scale(1.1) rotate(5deg);
  1014. }
  1015. 50% {
  1016. opacity: 1;
  1017. transform: scale(1) rotate(0deg);
  1018. }
  1019. 75% {
  1020. opacity: 0.9;
  1021. transform: scale(1.05) rotate(-3deg);
  1022. }
  1023. }
  1024. @keyframes crownGlow {
  1025. 0%,
  1026. 100% {
  1027. opacity: 1;
  1028. transform: scale(1);
  1029. filter: drop-shadow(0 3rpx 6rpx rgba(155, 89, 182, 0.6)) brightness(1);
  1030. }
  1031. 50% {
  1032. opacity: 0.9;
  1033. transform: scale(1.1);
  1034. filter: drop-shadow(0 4rpx 8rpx rgba(155, 89, 182, 0.8)) brightness(1.2);
  1035. }
  1036. }
  1037. .user-info {
  1038. flex: 1;
  1039. }
  1040. .username {
  1041. font-size: 48rpx;
  1042. margin-bottom: 12rpx;
  1043. color: #8b4513;
  1044. font-weight: 600;
  1045. text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.1);
  1046. letter-spacing: 1rpx;
  1047. }
  1048. /* 代理等级容器 */
  1049. .member-level-container {
  1050. display: flex;
  1051. align-items: center;
  1052. gap: 20rpx;
  1053. flex-wrap: wrap;
  1054. }
  1055. .member-level {
  1056. font-size: 28rpx;
  1057. font-weight: 500;
  1058. letter-spacing: 0.5rpx;
  1059. text-shadow: 0 1rpx 2rpx rgba(139, 69, 19, 0.1);
  1060. }
  1061. .level-text-0 {
  1062. color: #a0522d;
  1063. background: linear-gradient(135deg, rgba(218, 165, 32, 0.1) 0%, rgba(160, 82, 45, 0.1) 100%);
  1064. padding: 6rpx 16rpx;
  1065. border-radius: 20rpx;
  1066. border: 1rpx solid rgba(218, 165, 32, 0.2);
  1067. }
  1068. /* S级代理标签特效 */
  1069. .level-text-1 {
  1070. position: relative;
  1071. display: inline-block;
  1072. padding: 4rpx 12rpx;
  1073. color: #FFF;
  1074. background: linear-gradient(135deg, #FFD700, #FFA500, #FFD700);
  1075. background-size: 200% 100%;
  1076. border-radius: 12rpx;
  1077. font-size: 24rpx;
  1078. font-weight: 700;
  1079. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.3);
  1080. box-shadow:
  1081. 0 4rpx 12rpx rgba(255, 215, 0, 0.4),
  1082. inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
  1083. 0 0 15rpx rgba(255, 215, 0, 0.6);
  1084. border: 1rpx solid rgba(255, 255, 255, 0.4);
  1085. animation: goldBadgeShimmer 2s ease-in-out infinite;
  1086. overflow: hidden;
  1087. }
  1088. /* S级标签闪光效果 */
  1089. .level-text-1::before {
  1090. content: '';
  1091. position: absolute;
  1092. top: 0;
  1093. left: -100%;
  1094. width: 50%;
  1095. height: 100%;
  1096. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
  1097. transform: skewX(-25deg);
  1098. animation: goldShine 2s infinite;
  1099. }
  1100. /* SS级代理标签特效 */
  1101. .level-text-2 {
  1102. position: relative;
  1103. display: inline-block;
  1104. padding: 4rpx 12rpx;
  1105. color: #FFF;
  1106. background: linear-gradient(135deg, #FF6B6B, #FF8E53, #FF4757, #FF6B6B);
  1107. background-size: 300% 100%;
  1108. border-radius: 12rpx;
  1109. font-size: 24rpx;
  1110. font-weight: 700;
  1111. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.3);
  1112. box-shadow:
  1113. 0 4rpx 12rpx rgba(255, 107, 107, 0.4),
  1114. inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
  1115. 0 0 15rpx rgba(255, 107, 107, 0.6);
  1116. border: 1rpx solid rgba(255, 255, 255, 0.4);
  1117. animation: rubyBadgeFlow 3s ease-in-out infinite;
  1118. overflow: hidden;
  1119. }
  1120. /* SS级标签流光效果 */
  1121. .level-text-2::before {
  1122. content: '';
  1123. position: absolute;
  1124. top: 0;
  1125. left: -100%;
  1126. width: 40%;
  1127. height: 100%;
  1128. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
  1129. transform: skewX(-20deg);
  1130. animation: rubyShine 3s infinite;
  1131. }
  1132. /* SSS级代理标签特效 */
  1133. .level-text-3 {
  1134. position: relative;
  1135. display: inline-block;
  1136. padding: 4rpx 12rpx;
  1137. color: #FFF;
  1138. background: linear-gradient(135deg, #9B59B6, #8E44AD, #6C5CE7, #A569BD, #9B59B6);
  1139. background-size: 400% 100%;
  1140. border-radius: 12rpx;
  1141. font-size: 24rpx;
  1142. font-weight: 700;
  1143. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.4);
  1144. box-shadow:
  1145. 0 6rpx 16rpx rgba(155, 89, 182, 0.5),
  1146. inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
  1147. 0 0 20rpx rgba(155, 89, 182, 0.8);
  1148. border: 1rpx solid rgba(255, 255, 255, 0.5);
  1149. animation: crownBadgeGlory 4s ease-in-out infinite;
  1150. overflow: hidden;
  1151. }
  1152. /* SSS级标签皇冠光效 */
  1153. .level-text-3::before {
  1154. content: '';
  1155. position: absolute;
  1156. top: 0;
  1157. left: -100%;
  1158. width: 30%;
  1159. height: 100%;
  1160. background: linear-gradient(90deg,
  1161. transparent,
  1162. rgba(255, 255, 255, 0.6),
  1163. rgba(255, 215, 0, 0.3),
  1164. rgba(255, 255, 255, 0.6),
  1165. transparent);
  1166. transform: skewX(-15deg);
  1167. animation: crownShine 4s infinite;
  1168. }
  1169. .level-text-3::after {
  1170. content: '';
  1171. position: absolute;
  1172. top: -2rpx;
  1173. left: -2rpx;
  1174. right: -2rpx;
  1175. bottom: -2rpx;
  1176. background: linear-gradient(45deg,
  1177. rgba(155, 89, 182, 0.3),
  1178. rgba(108, 92, 231, 0.3),
  1179. rgba(142, 68, 173, 0.3));
  1180. border-radius: 14rpx;
  1181. z-index: -1;
  1182. animation: crownAura 4s ease-in-out infinite;
  1183. }
  1184. /* S级徽章动画 */
  1185. @keyframes goldBadgeShimmer {
  1186. 0%,
  1187. 100% {
  1188. background-position: 0% 50%;
  1189. }
  1190. 50% {
  1191. background-position: 100% 50%;
  1192. }
  1193. }
  1194. @keyframes goldShine {
  1195. 0% {
  1196. left: -100%;
  1197. }
  1198. 20% {
  1199. left: 100%;
  1200. }
  1201. 100% {
  1202. left: 100%;
  1203. }
  1204. }
  1205. /* SS级徽章动画 */
  1206. @keyframes rubyBadgeFlow {
  1207. 0%,
  1208. 100% {
  1209. background-position: 0% 50%;
  1210. }
  1211. 33% {
  1212. background-position: 50% 50%;
  1213. }
  1214. 66% {
  1215. background-position: 100% 50%;
  1216. }
  1217. }
  1218. @keyframes rubyShine {
  1219. 0% {
  1220. left: -100%;
  1221. }
  1222. 30% {
  1223. left: 100%;
  1224. }
  1225. 100% {
  1226. left: 100%;
  1227. }
  1228. }
  1229. /* SSS级徽章动画 */
  1230. @keyframes crownBadgeGlory {
  1231. 0%,
  1232. 100% {
  1233. background-position: 0% 50%;
  1234. }
  1235. 25% {
  1236. background-position: 25% 50%;
  1237. }
  1238. 50% {
  1239. background-position: 50% 50%;
  1240. }
  1241. 75% {
  1242. background-position: 75% 50%;
  1243. }
  1244. }
  1245. @keyframes crownShine {
  1246. 0% {
  1247. left: -100%;
  1248. }
  1249. 40% {
  1250. left: 100%;
  1251. }
  1252. 100% {
  1253. left: 100%;
  1254. }
  1255. }
  1256. @keyframes crownAura {
  1257. 0%,
  1258. 100% {
  1259. opacity: 0.3;
  1260. }
  1261. 50% {
  1262. opacity: 0.6;
  1263. }
  1264. }
  1265. /* 成为代理按钮 */
  1266. .upgrade-btn {
  1267. display: flex;
  1268. align-items: center;
  1269. gap: 12rpx;
  1270. background: linear-gradient(135deg, #DAA520 0%, #FFD700 50%, #FFA500 100%);
  1271. border-radius: 32rpx;
  1272. padding: 12rpx 24rpx;
  1273. box-shadow:
  1274. 0 6rpx 20rpx rgba(218, 165, 32, 0.4),
  1275. 0 2rpx 8rpx rgba(255, 215, 0, 0.3),
  1276. inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
  1277. border: 2rpx solid rgba(255, 255, 255, 0.9);
  1278. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  1279. position: relative;
  1280. overflow: hidden;
  1281. animation: upgradePulse 3s ease-in-out infinite;
  1282. }
  1283. /* 按钮光泽效果 */
  1284. .upgrade-btn::before {
  1285. content: '';
  1286. position: absolute;
  1287. top: 0;
  1288. left: -100%;
  1289. width: 100%;
  1290. height: 100%;
  1291. background: linear-gradient(90deg,
  1292. transparent,
  1293. rgba(255, 255, 255, 0.3),
  1294. transparent);
  1295. transform: skewX(-25deg);
  1296. animation: buttonShine 4s ease-in-out infinite;
  1297. }
  1298. .upgrade-btn:active {
  1299. transform: scale(0.96);
  1300. box-shadow:
  1301. 0 3rpx 12rpx rgba(218, 165, 32, 0.5),
  1302. 0 1rpx 4rpx rgba(255, 215, 0, 0.4),
  1303. inset 0 2rpx 4rpx rgba(218, 165, 32, 0.2);
  1304. }
  1305. .upgrade-text {
  1306. color: #FFFFFF;
  1307. font-size: 26rpx;
  1308. font-weight: 700;
  1309. text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3);
  1310. letter-spacing: 0.5rpx;
  1311. position: relative;
  1312. z-index: 1;
  1313. }
  1314. @keyframes upgradePulse {
  1315. 0%,
  1316. 100% {
  1317. transform: scale(1);
  1318. box-shadow:
  1319. 0 6rpx 20rpx rgba(218, 165, 32, 0.4),
  1320. 0 2rpx 8rpx rgba(255, 215, 0, 0.3),
  1321. inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
  1322. }
  1323. 50% {
  1324. transform: scale(1.02);
  1325. box-shadow:
  1326. 0 8rpx 28rpx rgba(218, 165, 32, 0.5),
  1327. 0 3rpx 12rpx rgba(255, 215, 0, 0.4),
  1328. inset 0 1rpx 0 rgba(255, 255, 255, 0.9);
  1329. }
  1330. }
  1331. @keyframes buttonShine {
  1332. 0% {
  1333. left: -100%;
  1334. }
  1335. 50% {
  1336. left: 100%;
  1337. }
  1338. 100% {
  1339. left: 100%;
  1340. }
  1341. }
  1342. /* 代理等级样式 */
  1343. .agent-level {
  1344. font-size: 26rpx;
  1345. font-weight: 600;
  1346. letter-spacing: 0.5rpx;
  1347. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  1348. padding: 4rpx 12rpx;
  1349. border-radius: 12rpx;
  1350. position: relative;
  1351. overflow: hidden;
  1352. }
  1353. /* 荣耀代理样式 */
  1354. .agent-text-2 {
  1355. color: #FFF;
  1356. background: linear-gradient(135deg, #FF6B35 0%, #F7931E 50%, #FFD23F 100%);
  1357. box-shadow:
  1358. 0 4rpx 12rpx rgba(255, 107, 53, 0.4),
  1359. inset 0 1rpx 0 rgba(255, 255, 255, 0.3),
  1360. 0 0 15rpx rgba(255, 107, 53, 0.6);
  1361. border: 1rpx solid rgba(255, 255, 255, 0.4);
  1362. animation: gloryShimmer 3s ease-in-out infinite;
  1363. }
  1364. /* 超凡代理样式 */
  1365. .agent-text-3 {
  1366. color: #FFF;
  1367. background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
  1368. box-shadow:
  1369. 0 6rpx 16rpx rgba(102, 126, 234, 0.5),
  1370. inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
  1371. 0 0 20rpx rgba(102, 126, 234, 0.8);
  1372. border: 1rpx solid rgba(255, 255, 255, 0.5);
  1373. animation: transcendentGlow 4s ease-in-out infinite;
  1374. }
  1375. /* 代理到期时间容器 */
  1376. .agent-expiration {
  1377. margin-top: 8rpx;
  1378. padding: 6rpx 12rpx;
  1379. background: rgba(139, 69, 19, 0.05);
  1380. border-radius: 8rpx;
  1381. border: 1rpx solid rgba(218, 165, 32, 0.2);
  1382. }
  1383. .expiration-text {
  1384. font-size: 24rpx;
  1385. color: #8b4513;
  1386. font-weight: 500;
  1387. letter-spacing: 0.5rpx;
  1388. }
  1389. /* 荣耀代理动画 */
  1390. @keyframes gloryShimmer {
  1391. 0%,
  1392. 100% {
  1393. background-position: 0% 50%;
  1394. }
  1395. 50% {
  1396. background-position: 100% 50%;
  1397. }
  1398. }
  1399. /* 超凡代理动画 */
  1400. @keyframes transcendentGlow {
  1401. 0%,
  1402. 100% {
  1403. background-position: 0% 50%;
  1404. box-shadow:
  1405. 0 6rpx 16rpx rgba(102, 126, 234, 0.5),
  1406. inset 0 1rpx 0 rgba(255, 255, 255, 0.4),
  1407. 0 0 20rpx rgba(102, 126, 234, 0.8);
  1408. }
  1409. 50% {
  1410. background-position: 100% 50%;
  1411. box-shadow:
  1412. 0 8rpx 20rpx rgba(102, 126, 234, 0.6),
  1413. inset 0 1rpx 0 rgba(255, 255, 255, 0.5),
  1414. 0 0 25rpx rgba(102, 126, 234, 0.9);
  1415. }
  1416. }
  1417. .slogan {
  1418. color: #a0522d;
  1419. font-size: 26rpx;
  1420. font-style: italic;
  1421. text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
  1422. letter-spacing: 0.5rpx;
  1423. }
  1424. .font44 {
  1425. font-size: 40rpx;
  1426. color: #8b4513;
  1427. font-weight: 600;
  1428. text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.1);
  1429. }
  1430. .font-gray {
  1431. color: #a0522d;
  1432. font-size: 26rpx;
  1433. text-shadow: 0 1rpx 2rpx rgba(139, 69, 19, 0.08);
  1434. }
  1435. /* 宠物头像样式 */
  1436. .pet-avatar {
  1437. width: 80rpx;
  1438. height: 80rpx;
  1439. border-radius: 50%;
  1440. overflow: hidden;
  1441. }
  1442. /* 订单图标样式 */
  1443. .order-avatar {
  1444. width: 64rpx;
  1445. height: 64rpx;
  1446. border-radius: 16rpx;
  1447. padding: 12rpx;
  1448. background: linear-gradient(135deg, rgba(255, 253, 245, 0.9) 0%, rgba(252, 248, 240, 0.8) 100%);
  1449. border: 1rpx solid rgba(218, 165, 32, 0.15);
  1450. box-shadow:
  1451. 0 4rpx 12rpx rgba(139, 69, 19, 0.06),
  1452. inset 0 1rpx 0 rgba(255, 255, 255, 0.7);
  1453. transition: all 0.3s ease;
  1454. }
  1455. .menu-avatar {
  1456. width: 64rpx;
  1457. height: 64rpx;
  1458. border-radius: 16rpx;
  1459. padding: 12rpx;
  1460. background: linear-gradient(135deg, rgba(255, 253, 245, 0.9) 0%, rgba(252, 248, 240, 0.8) 100%);
  1461. border: 1rpx solid rgba(218, 165, 32, 0.15);
  1462. box-shadow:
  1463. 0 4rpx 12rpx rgba(139, 69, 19, 0.06),
  1464. inset 0 1rpx 0 rgba(255, 255, 255, 0.7);
  1465. transition: all 0.3s ease;
  1466. }
  1467. /* 徽标样式 */
  1468. .badge-container {
  1469. position: relative;
  1470. }
  1471. .badge {
  1472. position: absolute;
  1473. top: -8rpx;
  1474. right: -8rpx;
  1475. background: linear-gradient(135deg, #dc3545 0%, #c82333 100%);
  1476. color: #ffffff;
  1477. border-radius: 16rpx;
  1478. min-width: 28rpx;
  1479. height: 28rpx;
  1480. padding: 0 8rpx;
  1481. font-size: 20rpx;
  1482. display: flex;
  1483. align-items: center;
  1484. justify-content: center;
  1485. line-height: 1;
  1486. font-weight: 600;
  1487. box-shadow:
  1488. 0 4rpx 12rpx rgba(220, 53, 69, 0.3),
  1489. 0 2rpx 4rpx rgba(220, 53, 69, 0.2);
  1490. border: 2rpx solid rgba(255, 255, 255, 0.9);
  1491. animation: badgePulse 2s ease-in-out infinite;
  1492. }
  1493. @keyframes badgePulse {
  1494. 0%,
  1495. 100% {
  1496. transform: scale(1);
  1497. box-shadow:
  1498. 0 4rpx 12rpx rgba(220, 53, 69, 0.3),
  1499. 0 2rpx 4rpx rgba(220, 53, 69, 0.2);
  1500. }
  1501. 50% {
  1502. transform: scale(1.05);
  1503. box-shadow:
  1504. 0 6rpx 16rpx rgba(220, 53, 69, 0.4),
  1505. 0 3rpx 6rpx rgba(220, 53, 69, 0.3);
  1506. }
  1507. }
  1508. /* 客服按钮样式 */
  1509. .contact-btn {
  1510. background: none;
  1511. width: 100%;
  1512. border: none;
  1513. padding: 0;
  1514. margin: 0;
  1515. line-height: 1;
  1516. display: flex;
  1517. align-items: center;
  1518. text-align: left;
  1519. font-weight: normal;
  1520. font-size: inherit;
  1521. }
  1522. .contact-btn::after {
  1523. border: none;
  1524. }
  1525. .flex-items {
  1526. display: flex;
  1527. align-items: center;
  1528. }
  1529. /* 订单标题样式 */
  1530. .font28 {
  1531. font-size: 28rpx;
  1532. color: #8b4513;
  1533. font-weight: 500;
  1534. text-shadow: 0 1rpx 2rpx rgba(218, 165, 32, 0.08);
  1535. letter-spacing: 0.5rpx;
  1536. }
  1537. /* 订单项目容器 */
  1538. .flex-sp-between {
  1539. display: flex;
  1540. justify-content: space-between;
  1541. margin-top: 24rpx;
  1542. }
  1543. /* 订单项目美化 */
  1544. .flex-col-center {
  1545. display: flex;
  1546. flex-direction: column;
  1547. align-items: center;
  1548. margin-right: 16rpx;
  1549. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  1550. padding: 20rpx 16rpx;
  1551. border-radius: 16rpx;
  1552. position: relative;
  1553. cursor: pointer;
  1554. }
  1555. .flex-col-center:hover {
  1556. transform: translateY(-3rpx) scale(1.02);
  1557. background: rgba(218, 165, 32, 0.03);
  1558. }
  1559. .flex-col-center:active {
  1560. transform: scale(0.96) translateY(1rpx);
  1561. background: rgba(218, 165, 32, 0.08);
  1562. }
  1563. /* 订单项目悬浮效果 */
  1564. .flex-col-center::before {
  1565. content: '';
  1566. position: absolute;
  1567. top: 0;
  1568. left: 0;
  1569. right: 0;
  1570. bottom: 0;
  1571. border-radius: 16rpx;
  1572. background:
  1573. radial-gradient(circle at center, rgba(218, 165, 32, 0.04) 0%, transparent 80%);
  1574. opacity: 0;
  1575. transition: all 0.4s ease;
  1576. transform: scale(0.8);
  1577. }
  1578. .flex-col-center:hover::before {
  1579. opacity: 1;
  1580. transform: scale(1);
  1581. }
  1582. .flex-col-center:active::before {
  1583. opacity: 1;
  1584. transform: scale(0.95);
  1585. background:
  1586. radial-gradient(circle at center, rgba(218, 165, 32, 0.08) 0%, transparent 70%);
  1587. }
  1588. /* 添加订单项目呼吸动效 */
  1589. .flex-col-center::after {
  1590. content: '';
  1591. position: absolute;
  1592. top: 50%;
  1593. left: 50%;
  1594. width: 4rpx;
  1595. height: 4rpx;
  1596. background: rgba(218, 165, 32, 0.2);
  1597. border-radius: 50%;
  1598. transform: translate(-50%, -50%);
  1599. animation: orderBreath 4s ease-in-out infinite;
  1600. }
  1601. @keyframes orderBreath {
  1602. 0%,
  1603. 100% {
  1604. opacity: 0.2;
  1605. transform: translate(-50%, -50%) scale(1);
  1606. }
  1607. 50% {
  1608. opacity: 0.4;
  1609. transform: translate(-50%, -50%) scale(1.5);
  1610. }
  1611. }
  1612. /* 订单图标容器美化 */
  1613. .badge-container {
  1614. position: relative;
  1615. transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
  1616. }
  1617. .badge-container:hover {
  1618. transform: scale(1.05) rotate(2deg);
  1619. }
  1620. .badge-container:active {
  1621. transform: scale(0.95) rotate(-1deg);
  1622. }
  1623. /* 图标光环效果 */
  1624. .badge-container::before {
  1625. content: '';
  1626. position: absolute;
  1627. top: -8rpx;
  1628. left: -8rpx;
  1629. right: -8rpx;
  1630. bottom: -8rpx;
  1631. border-radius: 50%;
  1632. background:
  1633. conic-gradient(from 0deg,
  1634. transparent 0deg,
  1635. rgba(218, 165, 32, 0.1) 120deg,
  1636. transparent 240deg,
  1637. rgba(218, 165, 32, 0.05) 360deg);
  1638. opacity: 0;
  1639. animation: iconHalo 6s linear infinite;
  1640. transition: opacity 0.3s ease;
  1641. }
  1642. .badge-container:hover::before {
  1643. opacity: 1;
  1644. }
  1645. @keyframes iconHalo {
  1646. 0% {
  1647. transform: rotate(0deg);
  1648. }
  1649. 100% {
  1650. transform: rotate(360deg);
  1651. }
  1652. }
  1653. </style>