download.vue 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081
  1. <template>
  2. <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
  3. <view class="container">
  4. <view
  5. class="app-page-head card-header d-flex gap-3 flex-wrap align-items-center justify-content-between border-0">
  6. <view class="app-page-head mb-0">
  7. <h1 class="app-page-title" v-t="'Downloadpage.item1'"></h1>
  8. </view>
  9. </view>
  10. <view class="col-lg-12">
  11. <view class="clearfix">
  12. <view class="card">
  13. <view class="card-header">
  14. <view class="nav nav-pills nav-fill card-header-pills">
  15. <view class="nav-item">
  16. <view class="nav-link" :class="{ 'active': activeName == 'MT4' }"
  17. @click="activeName = 'MT4'">MT-4</view>
  18. </view>
  19. <view class="nav-item">
  20. <view class="nav-link" :class="{ 'active': activeName == 'MT5' }"
  21. @click="activeName = 'MT5'">MT-5</view>
  22. </view>
  23. </view>
  24. </view>
  25. <view class="card-body">
  26. <view class="tab-content">
  27. <view v-if="activeName == 'MT4'">
  28. <view class="row">
  29. <view class="col-12">
  30. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item2'" />
  31. <p class="mb-5" v-t="'Downloadpage.item3'" />
  32. </view>
  33. <view class="col-lg-4 mb-5">
  34. <view class="card card-action action-elevate action-border-primary">
  35. <view class="row g-0">
  36. <view class="col-md-4">
  37. <view
  38. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  39. <image src="/static/images/vu/windows.png" alt=""
  40. mode="widthFix" class="img-fluid rounded" />
  41. </view>
  42. </view>
  43. <view class="col-md-8 py-3 d-flex flex-column">
  44. <view class="card-body px-3 py-2">
  45. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  46. <h4>
  47. <view class="text-dark" v-t="'Downloadpage.item4'" />
  48. </h4>
  49. <p v-t="'Downloadpage.item5'" />
  50. <cwg-link type="download"
  51. :url="config.Host80 + '/mt/cwgmarketssvgltd4setup.exe'"
  52. downloadName="cwgmarketssvgltd4setup.exe">
  53. <view class="btn btn-danger waves-effect waves-light"><i
  54. class="fi fi-rr-download"></i> {{
  55. t('Downloadpage.item6-1') }}</view>
  56. </cwg-link>
  57. </view>
  58. </view>
  59. </view>
  60. </view>
  61. </view>
  62. <view class="col-lg-4 mb-5">
  63. <view class="card card-action action-elevate action-border-primary">
  64. <view class="row g-0">
  65. <view class="col-md-4">
  66. <view
  67. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  68. <image src="/static/images/vu/windows.png" alt=""
  69. mode="widthFix" class="img-fluid rounded" />
  70. </view>
  71. </view>
  72. <view class="col-md-8 py-3 d-flex flex-column">
  73. <view class="card-body px-3 py-2">
  74. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  75. <h4>
  76. <view class="text-dark" v-t="'Downloadpage.item4-1'" />
  77. </h4>
  78. <p v-t="'Downloadpage.item5'" />
  79. <cwg-link type="download" class="download-card"
  80. :url="config.Host80 + '/mt/mt4.zip'"
  81. downloadName="mt4.zip">
  82. <view class="btn btn-danger waves-effect waves-light">
  83. <i class="fi fi-rr-download"></i> {{
  84. t('Downloadpage.item6-1') }}
  85. </view>
  86. </cwg-link>
  87. </view>
  88. </view>
  89. </view>
  90. </view>
  91. </view>
  92. <view class="col-lg-4 mb-5">
  93. <view class="card card-action action-elevate action-border-primary">
  94. <view class="row g-0">
  95. <view class="col-md-4">
  96. <view
  97. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  98. <image src="/static/images/vu/ios.png" alt=""
  99. mode="widthFix" class="img-fluid rounded" />
  100. </view>
  101. </view>
  102. <view class="col-md-8 py-3 d-flex flex-column">
  103. <view class="card-body px-3 py-2">
  104. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  105. <h4>
  106. <view class="text-dark" v-t="'Downloadpage.item6'" />
  107. </h4>
  108. <p v-t="'Downloadpage.item5'" />
  109. <cwg-link type="download" class="download-card"
  110. :url="config.Host80 + '/mt/MetaTrader4.pkg'"
  111. downloadName="MetaTrader4.pkg">
  112. <view class="btn btn-danger waves-effect waves-light"><i
  113. class="fi fi-rr-download"></i> {{
  114. t('Downloadpage.item6-1') }}</view>
  115. </cwg-link>
  116. </view>
  117. </view>
  118. </view>
  119. </view>
  120. </view>
  121. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item38'" />
  122. <view class="col-lg-4 mb-5">
  123. <view class="card card-action action-elevate action-border-primary">
  124. <view class="row g-0">
  125. <view class="col-md-4">
  126. <view
  127. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  128. <image src="/static/images/vu/icon-windows-ios.png" alt=""
  129. mode="widthFix" class="img-fluid rounded" />
  130. </view>
  131. </view>
  132. <view class="col-md-8 py-3 d-flex flex-column">
  133. <view class="card-body px-3 py-2">
  134. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  135. <h4>
  136. <view class="text-dark" v-t="'Downloadpage.item40'" />
  137. </h4>
  138. <p>PC and macOS</p>
  139. <cwg-link type="html" target="_blank"
  140. :url="'https://www.' + config.host + '.com/' + locale + '/vu-mt4-web-trading/web'">
  141. <view class="btn btn-danger waves-effect waves-light"><i
  142. class="fi fi-rr-download"></i> 开始交易</view>
  143. </cwg-link>
  144. </view>
  145. </view>
  146. </view>
  147. </view>
  148. </view>
  149. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item7'" />
  150. <view class="col-lg-6 mb-5">
  151. <view class="card card-action action-elevate action-border-primary">
  152. <view class="row g-0">
  153. <view class="col-md-6">
  154. <view class="card-header border-0 p-0 m-2 position-relative ">
  155. <QrCode :text="mt42" />
  156. <!-- <image src="/static/images/vu/android.png" alt=""
  157. mode="widthFix" class="img-fluid" /> -->
  158. </view>
  159. </view>
  160. <view class="col-md-6 py-3 d-flex flex-column">
  161. <view class="card-body px-3 py-2">
  162. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  163. <h4>
  164. <view class="text-dark">Google Play (Android)</view>
  165. </h4>
  166. <p>CWG MT4</p>
  167. <cwg-link type="download" class="download-card" :url="mt41"
  168. downloadName="MetaTrader4.abb">
  169. <view class="btn btn-danger waves-effect waves-light"><i
  170. class="fi fi-rr-download"></i> {{
  171. t('Downloadpage.item6-1') }}</view>
  172. </cwg-link>
  173. </view>
  174. </view>
  175. </view>
  176. </view>
  177. </view>
  178. <view class="col-lg-6 mb-5">
  179. <view class="card card-action action-elevate action-border-primary">
  180. <view class="row g-0">
  181. <view class="col-md-6">
  182. <view
  183. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  184. <QrCode :text="mt42" />
  185. <!-- <image src="/static/images/vu/metatrade.png" alt=""
  186. mode="widthFix" class="img-fluid" /> -->
  187. </view>
  188. </view>
  189. <view class="col-md-6 py-3 d-flex flex-column">
  190. <view class="card-body px-3 py-2">
  191. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  192. <h4>
  193. <view class="text-dark">MetaTrader .Apk</view>
  194. </h4>
  195. <p>CWG MT4</p>
  196. <cwg-link type="download" class="download-card" :url="mt42"
  197. downloadName="MetaTrader4.apk">
  198. <view class="btn btn-danger waves-effect waves-light"><i
  199. class="fi fi-rr-download"></i> {{
  200. t('Downloadpage.item6-1') }}</view>
  201. </cwg-link>
  202. </view>
  203. </view>
  204. </view>
  205. </view>
  206. </view>
  207. <view class="col-lg-6 mb-5">
  208. <view class="card card-action action-elevate action-border-primary">
  209. <view class="row g-0">
  210. <view class="col-md-6">
  211. <view
  212. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  213. <QrCode :text="mt43" />
  214. <!-- <image src="/static/images/vu/ios-1.png" alt=""
  215. mode="widthFix" class="img-fluid" /> -->
  216. </view>
  217. </view>
  218. <view class="col-md-6 py-3 d-flex flex-column">
  219. <view class="card-body px-3 py-2">
  220. <view class="badge badge-sm bg-danger mb-1">MT-4</view>
  221. <h4>
  222. <view class="text-dark">App Store (IOS)</view>
  223. </h4>
  224. <p>CWG MT4</p>
  225. <cwg-link type="download" class="download-card" :url="mt43"
  226. downloadName="MetaTrader4.app">
  227. <view class="btn btn-danger waves-effect waves-light"><i
  228. class="fi fi-rr-download"></i> {{
  229. t('Downloadpage.item6-1') }}</view>
  230. </cwg-link>
  231. </view>
  232. </view>
  233. </view>
  234. </view>
  235. </view>
  236. </view>
  237. </view>
  238. <view v-if="activeName == 'MT5'">
  239. <view class="row">
  240. <view class="col-12">
  241. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item11'" />
  242. <p class="mb-5" v-t="'Downloadpage.item3'" />
  243. </view>
  244. <view class="col-lg-4 mb-5">
  245. <view class="card card-action action-elevate action-border-primary">
  246. <view class="row g-0">
  247. <view class="col-md-4">
  248. <view
  249. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  250. <image src="/static/images/vu/windows.png" alt=""
  251. mode="widthFix" class="img-fluid rounded" />
  252. </view>
  253. </view>
  254. <view class="col-md-8 py-3 d-flex flex-column">
  255. <view class="card-body px-3 py-2">
  256. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  257. <h4>
  258. <view class="text-dark" v-t="'Downloadpage.item4'" />
  259. </h4>
  260. <p v-t="'Downloadpage.item5'" />
  261. <cwg-link type="download" class="download-card"
  262. :url="config.Host80 + '/mt/cwgmarketssvg5setup.exe'"
  263. downloadName="cwgmarketssvg5setup.exe">
  264. <view class="btn btn-danger waves-effect waves-light"><i
  265. class="fi fi-rr-download"></i> {{
  266. t('Downloadpage.item6-1') }}</view>
  267. </cwg-link>
  268. </view>
  269. </view>
  270. </view>
  271. </view>
  272. </view>
  273. <view class="col-lg-4 mb-5">
  274. <view class="card card-action action-elevate action-border-primary">
  275. <view class="row g-0">
  276. <view class="col-md-4">
  277. <view
  278. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  279. <image src="/static/images/vu/windows.png" alt=""
  280. mode="widthFix" class="img-fluid rounded" />
  281. </view>
  282. </view>
  283. <view class="col-md-8 py-3 d-flex flex-column">
  284. <view class="card-body px-3 py-2">
  285. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  286. <h4>
  287. <view class="text-dark" v-t="'Downloadpage.item4-1'" />
  288. </h4>
  289. <p v-t="'Downloadpage.item5'" />
  290. <cwg-link type="download" class="download-card"
  291. :url="config.Host80 + '/mt/mt5.zip'"
  292. downloadName="mt5.zip">
  293. <view class="btn btn-danger waves-effect waves-light">
  294. <i class="fi fi-rr-download"></i> {{
  295. t('Downloadpage.item6-1') }}
  296. </view>
  297. </cwg-link>
  298. </view>
  299. </view>
  300. </view>
  301. </view>
  302. </view>
  303. <view class="col-lg-4 mb-5">
  304. <view class="card card-action action-elevate action-border-primary">
  305. <view class="row g-0">
  306. <view class="col-md-4">
  307. <view
  308. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  309. <image src="/static/images/vu/ios.png" alt=""
  310. mode="widthFix" class="img-fluid rounded" />
  311. </view>
  312. </view>
  313. <view class="col-md-8 py-3 d-flex flex-column">
  314. <view class="card-body px-3 py-2">
  315. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  316. <h4>
  317. <view class="text-dark" v-t="'Downloadpage.item6'" />
  318. </h4>
  319. <p v-t="'Downloadpage.item5'" />
  320. <cwg-link type="download" class="download-card"
  321. :url="config.Host80 + '/mt/MetaTrader5.pkg'"
  322. downloadName="MetaTrader5.pkg">
  323. <view class="btn btn-danger waves-effect waves-light"><i
  324. class="fi fi-rr-download"></i> {{
  325. t('Downloadpage.item6-1') }}</view>
  326. </cwg-link>
  327. </view>
  328. </view>
  329. </view>
  330. </view>
  331. </view>
  332. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item39'" />
  333. <view class="col-lg-4 mb-5">
  334. <view class="card card-action action-elevate action-border-primary">
  335. <view class="row g-0">
  336. <view class="col-md-4">
  337. <view
  338. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  339. <image src="/static/images/vu/icon-windows-ios.png" alt=""
  340. mode="widthFix" class="img-fluid rounded" />
  341. </view>
  342. </view>
  343. <view class="col-md-8 py-3 d-flex flex-column">
  344. <view class="card-body px-3 py-2">
  345. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  346. <h4>
  347. <view class="text-dark" v-t="'Downloadpage.item40'" />
  348. </h4>
  349. <p>PC and macOS</p>
  350. <cwg-link type="html"
  351. class="download-card download-card-web" target="_blank"
  352. :url="'https://www.' + config.host + '.com/' + locale + '/mt5/web'">
  353. <view class="btn btn-danger waves-effect waves-light"><i
  354. class="fi fi-rr-download"></i> 开始交易</view>
  355. </cwg-link>
  356. </view>
  357. </view>
  358. </view>
  359. </view>
  360. </view>
  361. <h3 class="mb-3 fw-bold" v-t="'Downloadpage.item13'" />
  362. <view class="col-lg-6 mb-5">
  363. <view class="card card-action action-elevate action-border-primary">
  364. <view class="row g-0">
  365. <view class="col-md-6">
  366. <view class="card-header border-0 p-0 m-2 position-relative ">
  367. <QrCode :text="mt52" />
  368. <!-- <image src="/static/images/vu/android.png" alt=""
  369. mode="widthFix" class="img-fluid" /> -->
  370. </view>
  371. </view>
  372. <view class="col-md-6 py-3 d-flex flex-column">
  373. <view class="card-body px-3 py-2">
  374. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  375. <h4>
  376. <view class="text-dark">Google Play (Android)</view>
  377. </h4>
  378. <p>CWG MT5</p>
  379. <cwg-link type="download" class="download-card" :url="mt51"
  380. downloadName="MetaTrader5.abb">
  381. <view class="btn btn-danger waves-effect waves-light"><i
  382. class="fi fi-rr-download"></i> {{
  383. t('Downloadpage.item6-1') }}</view>
  384. </cwg-link>
  385. </view>
  386. </view>
  387. </view>
  388. </view>
  389. </view>
  390. <view class="col-lg-6 mb-5">
  391. <view class="card card-action action-elevate action-border-primary">
  392. <view class="row g-0">
  393. <view class="col-md-6">
  394. <view
  395. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  396. <QrCode :text="mt52" />
  397. <!-- <image src="/static/images/vu/metatrade.png" alt=""
  398. mode="widthFix" class="img-fluid" /> -->
  399. </view>
  400. </view>
  401. <view class="col-md-6 py-3 d-flex flex-column">
  402. <view class="card-body px-3 py-2">
  403. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  404. <h4>
  405. <view class="text-dark">MetaTrader .Apk</view>
  406. </h4>
  407. <p>CWG MT5</p>
  408. <cwg-link type="download" class="download-card" :url="mt52"
  409. downloadName="MetaTrader5.apk">
  410. <view class="btn btn-danger waves-effect waves-light"><i
  411. class="fi fi-rr-download"></i> {{
  412. t('Downloadpage.item6-1') }}</view>
  413. </cwg-link>
  414. </view>
  415. </view>
  416. </view>
  417. </view>
  418. </view>
  419. <view class="col-lg-6 mb-5">
  420. <view class="card card-action action-elevate action-border-primary">
  421. <view class="row g-0">
  422. <view class="col-md-6">
  423. <view
  424. class="card-header border-0 p-0 m-2 position-relative overflow-hidden">
  425. <QrCode :text="mt53" />
  426. <!-- <image src="/static/images/vu/ios-1.png" alt=""
  427. mode="widthFix" class="img-fluid" /> -->
  428. </view>
  429. </view>
  430. <view class="col-md-6 py-3 d-flex flex-column">
  431. <view class="card-body px-3 py-2">
  432. <view class="badge badge-sm bg-danger mb-1">MT-5</view>
  433. <h4>
  434. <view class="text-dark">App Store (IOS)</view>
  435. </h4>
  436. <p>CWG MT5</p>
  437. <cwg-link type="download" class="download-card" :url="mt53"
  438. downloadName="MetaTrader5.app">
  439. <view class="btn btn-danger waves-effect waves-light"><i
  440. class="fi fi-rr-download"></i> {{
  441. t('Downloadpage.item6-1') }}</view>
  442. </cwg-link>
  443. </view>
  444. </view>
  445. </view>
  446. </view>
  447. </view>
  448. </view>
  449. </view>
  450. </view>
  451. </view>
  452. </view>
  453. </view>
  454. </view>
  455. </view>
  456. </cwg-page-wrapper>
  457. </template>
  458. <script setup lang="ts">
  459. import { ref, computed, onMounted, nextTick } from 'vue'
  460. import QrCode from "@/components/QRCode.vue"
  461. import { useI18n } from 'vue-i18n'
  462. import config from '@/config';
  463. const { t, locale } = useI18n()
  464. const activeName = ref('MT4')
  465. const logoImageRef = ref('') // 保持变量名 logoImage
  466. const mt41 = ref('https://www.metatrader4.com/en/download#download-block-android?server=CWGMarketsSVGLtd-Demo,CWGMarketsSVGLtd-Live')
  467. const mt42 = ref(`${config.Host80}/metatrader/metatrader4.apk`) // 稍后动态计算
  468. const mt43 = ref('https://apps.apple.com/us/app/metatrader-4/id496212596?server=CWGMarketsSVGLtd-Demo,CWGMarketsSVGLtd-Live')
  469. const mt51 = ref('https://download.metatrader.com/cdn/mobile/mt5/android?server=CWGMarketsSVG-Demo,CWGMarketsSVG-Live')
  470. const mt52 = ref(`${config.Host80}/mt/metatrader5.apk`)
  471. const mt53 = ref('https://download.metatrader.com/cdn/mobile/mt5/ios?server=CWGMarketsSVG-Demo,CWGMarketsSVG-Live')
  472. const tabsConfig = computed(() => [
  473. { text: 'MT4', value: 'MT4' },
  474. { text: 'MT5', value: 'MT5' },
  475. ])
  476. // ---------- 计算属性 ----------
  477. const isZh = computed(() => ['cn', 'zh', 'zhHant'].includes(locale.value))
  478. const showQrcode = ref(false)
  479. onMounted(async () => {
  480. await nextTick()
  481. setTimeout(() => {
  482. showQrcode.value = true
  483. }, 200)
  484. })
  485. </script>
  486. <style lang="scss" scoped>
  487. @import "@/uni.scss";
  488. /* 让 card 本身等高,但内部元素自适应 */
  489. .row {
  490. display: flex;
  491. flex-wrap: wrap;
  492. align-items: stretch;
  493. }
  494. .row > [class*="col-lg-4"] {
  495. display: flex;
  496. flex-direction: column;
  497. }
  498. .card {
  499. flex: 1;
  500. display: flex;
  501. flex-direction: column;
  502. height: 100%;
  503. }
  504. /* 关键修改:让 card-body 不强制占满,只保持默认 */
  505. .card-body {
  506. /* 移除 flex: 1,改为默认值 */
  507. flex: 0 0 auto;
  508. display: block;
  509. }
  510. /* 只有需要弹性填充的特定容器才使用 flex */
  511. .flex-column.d-flex {
  512. flex: 1;
  513. display: flex;
  514. flex-direction: column;
  515. }
  516. /* 按钮底部对齐只在需要的地方使用 */
  517. .card-body .btn {
  518. margin-top: auto;
  519. }
  520. @media screen and (max-width: 768px) {
  521. .img-fluid {
  522. max-width: px2rpx(120);
  523. }
  524. :deep(.qr-container) {
  525. justify-content: flex-start;
  526. }
  527. }
  528. #custom_Downloadpage {
  529. width: 100%;
  530. height: 100%;
  531. .main-content {
  532. width: 100%;
  533. height: calc(100% - px2rpx(50));
  534. padding: px2rpx(10);
  535. box-sizing: border-box;
  536. overflow-y: auto;
  537. }
  538. .download-section {
  539. background: transparent;
  540. border: 1px solid var(--bs-border-color);
  541. border-radius: px2rpx(12);
  542. padding: px2rpx(24) px2rpx(20);
  543. margin-bottom: px2rpx(16);
  544. box-shadow: 0 px2rpx(2) px2rpx(12) rgba(0, 0, 0, 0.06);
  545. .section-header {
  546. text-align: center;
  547. margin-bottom: px2rpx(24);
  548. }
  549. .section-title {
  550. font-size: px2rpx(20);
  551. font-weight: 600;
  552. color: var(--bs-heading-color);
  553. margin-bottom: px2rpx(8);
  554. }
  555. .section-subtitle {
  556. font-size: px2rpx(14);
  557. color: var(--bs-heading-color);
  558. line-height: 1.5;
  559. }
  560. }
  561. .download-cards {
  562. display: flex;
  563. justify-content: center;
  564. flex-wrap: wrap;
  565. gap: px2rpx(16);
  566. }
  567. .download-card {
  568. display: flex;
  569. flex-direction: column;
  570. align-items: center;
  571. padding: px2rpx(24) px2rpx(20);
  572. background: linear-gradient(135deg, #4990EF 0%, #3A7BE0 100%);
  573. color: #fff;
  574. border-radius: px2rpx(12);
  575. min-width: px2rpx(160);
  576. max-width: px2rpx(200);
  577. text-decoration: none;
  578. transition: all 0.3s ease;
  579. position: relative;
  580. overflow: hidden;
  581. &::before {
  582. content: '';
  583. position: absolute;
  584. top: 0;
  585. left: 0;
  586. right: 0;
  587. bottom: 0;
  588. background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, transparent 100%);
  589. }
  590. &:hover {
  591. transform: translateY(px2rpx(-4));
  592. box-shadow: 0 px2rpx(8) px2rpx(24) rgba(73, 144, 239, 0.35);
  593. }
  594. &:active {
  595. transform: translateY(px2rpx(-2));
  596. }
  597. .card-icon {
  598. width: px2rpx(48);
  599. height: px2rpx(48);
  600. margin-bottom: px2rpx(16);
  601. position: relative;
  602. z-index: 1;
  603. }
  604. .card-info {
  605. text-align: center;
  606. position: relative;
  607. z-index: 1;
  608. .card-title {
  609. font-size: px2rpx(15);
  610. font-weight: 500;
  611. margin-bottom: px2rpx(4);
  612. color: #fff;
  613. }
  614. .card-desc {
  615. font-size: px2rpx(12);
  616. opacity: 0.85;
  617. }
  618. }
  619. .download-badge {
  620. margin-top: px2rpx(12);
  621. padding: px2rpx(4) px2rpx(12);
  622. background: rgba(255, 255, 255, 0.2);
  623. border-radius: px2rpx(20);
  624. font-size: px2rpx(11);
  625. font-weight: 500;
  626. position: relative;
  627. z-index: 1;
  628. }
  629. .download-badge-apple {
  630. background: rgba(0, 0, 0, 0.25);
  631. }
  632. }
  633. .download-card-web {
  634. flex-direction: row;
  635. justify-content: space-between;
  636. padding: px2rpx(20) px2rpx(24);
  637. min-width: px2rpx(280);
  638. max-width: 100%;
  639. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  640. .card-info {
  641. text-align: left;
  642. }
  643. .icon-arrow {
  644. font-size: px2rpx(20);
  645. opacity: 0.9;
  646. }
  647. &:hover {
  648. .icon-arrow {
  649. transform: translateX(px2rpx(4));
  650. transition: transform 0.3s ease;
  651. }
  652. }
  653. }
  654. .mobile-section {
  655. .mobile-cards {
  656. display: flex;
  657. flex-direction: column;
  658. gap: px2rpx(20);
  659. }
  660. .mobile-card {
  661. background: transparent;
  662. border-radius: px2rpx(12);
  663. padding: px2rpx(20);
  664. border: px2rpx(1) solid var(--bs-border-color);
  665. }
  666. .mobile-card-header {
  667. display: flex;
  668. align-items: center;
  669. margin-bottom: px2rpx(20);
  670. .card-icon {
  671. width: px2rpx(40);
  672. height: px2rpx(40);
  673. margin-right: px2rpx(16);
  674. background-color: #fff;
  675. overflow: hidden;
  676. border-radius: px2rpx(10);
  677. }
  678. .card-info {
  679. text-align: left;
  680. .card-title {
  681. font-size: px2rpx(16);
  682. font-weight: 600;
  683. color: var(--bs-heading-color);
  684. margin-bottom: px2rpx(4);
  685. }
  686. .card-desc {
  687. font-size: px2rpx(13);
  688. color: var(--bs-heading-color);
  689. }
  690. }
  691. }
  692. .qr-codes {
  693. display: flex;
  694. justify-content: space-around;
  695. flex-wrap: wrap;
  696. gap: px2rpx(16);
  697. &.qr-codes-single {
  698. justify-content: center;
  699. }
  700. }
  701. .qr-item {
  702. text-align: center;
  703. .qr-label {
  704. font-weight: 600;
  705. font-size: px2rpx(13);
  706. color: var(--bs-heading-color);
  707. margin-bottom: px2rpx(10);
  708. line-height: 2;
  709. }
  710. }
  711. }
  712. .instruments-banner {
  713. width: 100%;
  714. padding: px2rpx(40) px2rpx(20);
  715. background-image: url('/static/images/tc_bg.png');
  716. background-size: cover;
  717. background-repeat: no-repeat;
  718. background-position: center;
  719. color: var(--bs-emphasis-color);
  720. text-align: center;
  721. border-radius: px2rpx(12);
  722. margin-bottom: px2rpx(16);
  723. box-sizing: border-box;
  724. .banner-content {
  725. margin-bottom: px2rpx(24);
  726. }
  727. .banner-title {
  728. font-size: px2rpx(22);
  729. font-weight: 600;
  730. margin-bottom: px2rpx(8);
  731. }
  732. .banner-subtitle {
  733. font-size: px2rpx(14);
  734. opacity: 0.9;
  735. }
  736. .banner-buttons {
  737. display: flex;
  738. justify-content: center;
  739. flex-wrap: wrap;
  740. gap: px2rpx(12);
  741. }
  742. .banner-btn {
  743. display: inline-flex;
  744. flex-direction: column;
  745. align-items: center;
  746. padding: px2rpx(14) px2rpx(25);
  747. background-color: #EB3F57;
  748. color: var(--bs-emphasis-color);
  749. font-size: px2rpx(14);
  750. text-decoration: none;
  751. border-radius: px2rpx(8);
  752. transition: all 0.3s ease;
  753. min-width: px2rpx(200);
  754. &:hover {
  755. background-color: #d6364d;
  756. transform: translateY(px2rpx(-2));
  757. box-shadow: 0 px2rpx(4) px2rpx(12) rgba(235, 63, 87, 0.4);
  758. }
  759. .btn-tag {
  760. font-size: px2rpx(12);
  761. opacity: 0.85;
  762. margin-top: px2rpx(4);
  763. }
  764. }
  765. }
  766. .features-grid {
  767. background: transparent;
  768. border: 1px solid var(--bs-border-color);
  769. border-radius: px2rpx(12);
  770. padding: px2rpx(24) px2rpx(20);
  771. margin-bottom: px2rpx(16);
  772. box-shadow: 0 px2rpx(2) px2rpx(12) rgba(0, 0, 0, 0.06);
  773. .feature-item {
  774. display: flex;
  775. align-items: center;
  776. padding: px2rpx(20) 0;
  777. border-bottom: px2rpx(1) solid #f0f0f0;
  778. &:last-child {
  779. border-bottom: none;
  780. }
  781. }
  782. .feature-icon {
  783. width: px2rpx(64);
  784. height: px2rpx(64);
  785. display: flex;
  786. align-items: center;
  787. justify-content: center;
  788. background: linear-gradient(135deg, #fef0f0 0%, #ffe8e8 100%);
  789. border-radius: px2rpx(12);
  790. margin-right: px2rpx(16);
  791. flex-shrink: 0;
  792. i {
  793. font-size: px2rpx(32);
  794. color: #EB3F57;
  795. }
  796. }
  797. .feature-content {
  798. flex: 1;
  799. }
  800. .feature-title {
  801. font-size: px2rpx(16);
  802. font-weight: 600;
  803. color: var(--bs-heading-color);
  804. margin-bottom: px2rpx(6);
  805. }
  806. .feature-desc {
  807. font-size: px2rpx(14);
  808. color: var(--bs-heading-color);
  809. line-height: 1.6;
  810. }
  811. }
  812. .info-section {
  813. background: transparent;
  814. border: 1px solid var(--bs-border-color);
  815. border-radius: px2rpx(12);
  816. padding: px2rpx(24) px2rpx(20);
  817. margin-bottom: px2rpx(16);
  818. box-shadow: 0 px2rpx(2) px2rpx(12) rgba(0, 0, 0, 0.06);
  819. .info-block {
  820. .info-title {
  821. font-size: px2rpx(20);
  822. font-weight: 600;
  823. text-align: center;
  824. margin-bottom: px2rpx(20);
  825. span {
  826. border-bottom: px2rpx(3) solid #EB3F57;
  827. padding: 0 px2rpx(8) px2rpx(8);
  828. }
  829. }
  830. .info-subtitle {
  831. font-size: px2rpx(14);
  832. color: var(--bs-heading-color);
  833. text-align: center;
  834. margin-bottom: px2rpx(24);
  835. }
  836. }
  837. .info-content {
  838. .info-item {
  839. padding: px2rpx(20) 0;
  840. border-bottom: px2rpx(1) dashed #e0e0e0;
  841. &:last-child {
  842. border-bottom: none;
  843. }
  844. &.info-item-border {
  845. border-top: px2rpx(1) dashed #e0e0e0;
  846. }
  847. }
  848. .info-label {
  849. font-size: px2rpx(15);
  850. font-weight: 600;
  851. color: var(--bs-heading-color);
  852. margin-bottom: px2rpx(8);
  853. }
  854. .info-text {
  855. font-size: px2rpx(14);
  856. color: var(--bs-heading-color);
  857. line-height: 1.6;
  858. }
  859. .info-image {
  860. display: flex;
  861. justify-content: center;
  862. padding-top: px2rpx(24);
  863. image {
  864. max-width: 100%;
  865. border-radius: px2rpx(8);
  866. }
  867. }
  868. }
  869. }
  870. @media (max-width: 768px) {
  871. .download-section {
  872. padding: px2rpx(16) px2rpx(12);
  873. border-radius: px2rpx(8);
  874. .section-title {
  875. font-size: px2rpx(18);
  876. }
  877. }
  878. .download-cards {
  879. gap: px2rpx(12);
  880. }
  881. .download-card {
  882. min-width: px2rpx(140);
  883. padding: px2rpx(16) px2rpx(12);
  884. .card-icon {
  885. width: px2rpx(40);
  886. height: px2rpx(40);
  887. }
  888. .card-info {
  889. .card-title {
  890. font-size: px2rpx(13);
  891. }
  892. .card-desc {
  893. font-size: px2rpx(11);
  894. }
  895. }
  896. }
  897. .download-card-web {
  898. width: 100%;
  899. }
  900. .mobile-section {
  901. .mobile-card {
  902. padding: px2rpx(16);
  903. }
  904. .qr-codes {
  905. gap: px2rpx(12);
  906. }
  907. }
  908. .instruments-banner {
  909. padding: px2rpx(24) px2rpx(16);
  910. border-radius: px2rpx(8);
  911. .banner-title {
  912. font-size: px2rpx(18);
  913. }
  914. .banner-btn {
  915. min-width: px2rpx(160);
  916. padding: px2rpx(12) px2rpx(20);
  917. }
  918. }
  919. .features-grid {
  920. padding: px2rpx(16) px2rpx(12);
  921. border-radius: px2rpx(8);
  922. .feature-item {
  923. flex-direction: column;
  924. text-align: center;
  925. padding: px2rpx(16) 0;
  926. }
  927. .feature-icon {
  928. margin-right: 0;
  929. margin-bottom: px2rpx(12);
  930. }
  931. }
  932. .info-section {
  933. padding: px2rpx(16) px2rpx(12);
  934. border-radius: px2rpx(8);
  935. .info-block {
  936. .info-title {
  937. font-size: px2rpx(18);
  938. }
  939. }
  940. }
  941. }
  942. :deep(.el-tabs) {
  943. .el-tabs__header {
  944. margin-bottom: px2rpx(20);
  945. }
  946. .el-tabs__nav-wrap::after {
  947. height: px2rpx(1);
  948. }
  949. .el-tabs__item {
  950. font-size: px2rpx(15);
  951. color: var(--bs-heading-color);
  952. padding: 0 px2rpx(20);
  953. height: px2rpx(44);
  954. line-height: px2rpx(44);
  955. &.is-active {
  956. color: #4990EF;
  957. font-weight: 600;
  958. }
  959. }
  960. .el-tabs__active-bar {
  961. height: px2rpx(3);
  962. border-radius: px2rpx(3);
  963. }
  964. }
  965. :deep(uni-image),
  966. :deep(img) {
  967. width: px2rpx(30);
  968. height: px2rpx(30);
  969. object-fit: cover;
  970. border-radius: px2rpx(6);
  971. }
  972. }
  973. .mt {
  974. width: px2rpx(200) !important;
  975. height: px2rpx(200) !important;
  976. }
  977. </style>