index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
  3. <cwg-header :title="t('Documentary.title')" :showBack="false" />
  4. <uni-loading v-if="loading" />
  5. <uni-row v-else class="demo-uni-row uni-row1" :gutter="20">
  6. <uni-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24" class="mb-3">
  7. <cwg-combox :clearable="false" v-model:value="login"
  8. :options="loginOptions.map(item => ({
  9. text: item.platform + ' - ' + item.login + ' - ' + groupTypeName(item.type) + ' - ' + t('Custom.Deposit.AvailableBalance') + groupCurrency(item.currency) + item.balance,
  10. value: item
  11. }))" :placeholder="locale === 'es'?'Selecciona':t('placeholder.choose')" @change="handleCommand"/>
  12. </uni-col>
  13. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="uni-col-left">
  14. <uni-row :gutter="10">
  15. <uni-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" style="height: 100%">
  16. <view class="card tab-card shadow-none">
  17. <view>
  18. <image class="icon-img" src="/static/images/dollar.png" alt="dollar"/>
  19. </view>
  20. <view class="table-tit">
  21. <view class="tit mb-1">
  22. <text>{{ t('Documentary.console.item5') }}</text>
  23. </view>
  24. <view class="money">
  25. <h3>${{ numberFormat(ChartSetDate.position || '0.00') }}</h3>
  26. </view>
  27. </view>
  28. </view>
  29. </uni-col>
  30. <!-- <uni-col :xs="24" :sm="12" :md="isDealLogin ? 8 : 12" :lg="isDealLogin ? 4 : 6" :xl="isDealLogin ? 4 : 6">-->
  31. <uni-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" style="height: 100%">
  32. <view class="card tab-card shadow-none bg-danger bg-opacity-10">
  33. <view>
  34. <image class="icon-img" src="/static/images/money.png" alt="money"/>
  35. </view>
  36. <view class="table-tit">
  37. <view class="tit mb-1 text-danger">
  38. <text>{{ t('Documentary.console.item6') }}</text>
  39. </view>
  40. <view class="money d-flex">
  41. <h3>${{ numberFormat(ChartSetDate.equity || '0.00') }}</h3>
  42. </view>
  43. <view>
  44. <view class="tit-1 text-danger">
  45. <text class="yest">{{ t('Documentary.console.item9') }}</text>
  46. <text>${{ numberFormat(ChartSetDate.equityIncrement || '0.00') }}</text>
  47. </view>
  48. </view>
  49. </view>
  50. </view>
  51. </uni-col>
  52. <!-- <uni-col :xs="24" :sm="12" :md="isDealLogin ? 8 : 12" :lg="isDealLogin ? 4 : 6" :xl="isDealLogin ? 4 : 6">-->
  53. <uni-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8" style="height: 100%">
  54. <view class="card tab-card shadow-none bg-success bg-opacity-10">
  55. <view>
  56. <image class="icon-img" src="/static/images/wallet.png" alt="wallet"/>
  57. </view>
  58. <view class="table-tit">
  59. <view class="tit mb-1 text-success">
  60. <text>{{ t('Documentary.console.item7') }}</text>
  61. </view>
  62. <view class="num">
  63. <h3>${{ numberFormat(ChartSetDate.balance || '0.00') }}</h3>
  64. </view>
  65. <view class=" ">
  66. <view class="tit-1 text-success">
  67. <text class="yest">{{ t('Documentary.console.item9') }}</text>
  68. <text >${{ numberFormat(ChartSetDate.balanceIncrement || '0.00') }}</text>
  69. </view>
  70. </view>
  71. </view>
  72. </view>
  73. </uni-col>
  74. <!-- <uni-col :xs="24" :sm="12" :md="8" :lg="4" :xl="4" v-if="isDealLogin">-->
  75. <!-- <view class="custom-money">-->
  76. <!-- <view class="left">-->
  77. <!-- <view class="tit">-->
  78. <!-- <text>{{ t('Documentary.console.item8') }}</text>-->
  79. <!-- </view>-->
  80. <!-- <view class="num">-->
  81. <!-- <text>{{ numberFormat(ChartSetDate.profit || '0.00') }}</text>-->
  82. <!-- </view>-->
  83. <!-- </view>-->
  84. <!-- <view class="right">-->
  85. <!-- <view class="tit">-->
  86. <!-- <text>{{ t('Documentary.console.item9') }}</text>-->
  87. <!-- </view>-->
  88. <!-- <view class="num">-->
  89. <!-- <text>{{ numberFormat(ChartSetDate.profitIncrement || '0.00') }}</text>-->
  90. <!-- </view>-->
  91. <!-- </view>-->
  92. <!-- </view>-->
  93. <!-- </uni-col>-->
  94. </uni-row>
  95. </uni-col>
  96. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="uni-col-right">
  97. <view class="dashboard-container">
  98. <view class="account-info1" v-if="isDealLogin">
  99. <uni-row>
  100. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  101. <view class="custom-money custom-money-left">
  102. <view class="header">
  103. <view class="tit">
  104. <text class="tab h3">{{ t('Documentary.console.item23') }}</text>
  105. </view>
  106. <view class="num cursor-pointer" @click="toDocumentary1">
  107. <cwg-icon name="crm-sz" :size="18" color="#6c8595" />
  108. </view>
  109. </view>
  110. <view class="bottomCol">
  111. <uni-row>
  112. <uni-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
  113. <view class="bo-left1">
  114. <view>
  115. <text>{{ t('Documentary.console.item26') }}</text>
  116. </view>
  117. <view class="blue-font">
  118. <text>{{ numberFormat(dealDate.followNum || '0') }}</text>
  119. </view>
  120. </view>
  121. </uni-col>
  122. <uni-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
  123. <view class="bo-left1">
  124. <view>
  125. <text>{{ t('Documentary.console.item9') }}</text>
  126. </view>
  127. <view class="blue-font">
  128. <text>{{ numberFormat(dealDate.followNumIncrement || '0') }}</text>
  129. </view>
  130. </view>
  131. </uni-col>
  132. <uni-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
  133. <view class="bo-left1">
  134. <view>
  135. <text>{{ t('Documentary.console.item29') }}</text>
  136. </view>
  137. <view class="blue-font">
  138. <text>{{ numberFormat(dealDate.position || '0') }}</text>
  139. </view>
  140. </view>
  141. </uni-col>
  142. <uni-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
  143. <view class="bo-right1">
  144. <view>
  145. <text>{{ t('Documentary.console.item30') }}</text>
  146. </view>
  147. <view class="blue-font">
  148. <text>{{ numberFormat(dealDate.closed || '0') }}</text>
  149. </view>
  150. </view>
  151. </uni-col>
  152. </uni-row>
  153. </view>
  154. </view>
  155. </uni-col>
  156. </uni-row>
  157. </view>
  158. <view class="account-info1" v-else>
  159. <uni-row>
  160. <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  161. <view class="custom-money custom-money-right">
  162. <view class="header">
  163. <view class="tit">
  164. <view class="tab h3">{{ t('Documentary.console.item27') }}</view>
  165. </view>
  166. <button class="btn btn-danger btn-shadow waves-effect" @click="dialogFllowApplyOpen">
  167. <view class="d-flex align-items-center">
  168. <cwg-icon name="crm-plus" :size="14" color="#fff" />
  169. <text>{{ t('Documentary.TundManagement.item12') }}</text>
  170. </view>
  171. </button>
  172. </view>
  173. <view class="bottom">
  174. <view class="tab">
  175. <cwg-tabel :data="SubscribeProfitDate" class="crm_tab" :api="listApi" :columns="[
  176. { label: t('Documentary.console.item32'), prop: 'nickname', align: 'center', slot: 'nickname' },
  177. { label: t('Documentary.console.item33'), prop: 'nickname2', align: 'center', slot: 'nickname2' },
  178. { label: t('Documentary.console.item34'), prop: 'startTime', align: 'center', slot: 'startTime' },
  179. { label: t('Documentary.console.item35'), prop: 'endTime', align: 'center', slot: 'endTime' }
  180. ]" style="width: 100%" :show-operation="false" :showPagination="false">
  181. <template #nickname="{ row }">
  182. <text>{{ row.nickname || '--' }}</text>
  183. </template>
  184. <template #nickname2="{ row }">
  185. <text>{{ row.nickname || '--' }}</text>
  186. </template>
  187. <template #startTime="{ row }">
  188. <text>{{ row.startTime || '--' }}</text>
  189. </template>
  190. <template #endTime="{ row }">
  191. <text>{{ row.endTime || '--' }}</text>
  192. </template>
  193. </cwg-tabel>
  194. </view>
  195. </view>
  196. </view>
  197. </uni-col>
  198. </uni-row>
  199. </view>
  200. </view>
  201. </uni-col>
  202. </uni-row>
  203. <!-- 申请成为信号源弹窗 -->
  204. <applySignalDialog :visible="isApplySignalVisible" :loginOptions="loginOptions"
  205. @close="isApplySignalVisible = false" @confirm="onApplySignalConfirm" />
  206. </cwg-page-wrapper>
  207. </template>
  208. <script setup>
  209. import { ref, computed, watch, onMounted, nextTick } from 'vue'
  210. import { useI18n } from 'vue-i18n'
  211. import useRouter from '@/hooks/useRouter'
  212. import { ibApi } from '@/service/ib'
  213. import config from '@/config/index'
  214. import useUserStore from '@/stores/use-user-store'
  215. import { useStorage } from '@/hooks/useStorage'
  216. import QrCode from '@/components/QrCode.vue'
  217. import applySignalDialog from './components/applySignalDialog.vue'
  218. import { useFilters } from '@/composables/useFilters'
  219. import { isAfterJuly28 } from '@/utils/dateUtils'
  220. import { documentaryApi } from '@/service/documentary'
  221. const { t, locale } = useI18n()
  222. const loading = ref(false)
  223. const router = useRouter()
  224. const { Code } = config
  225. const { userInfo } = useUserStore()
  226. const { numberFormat } = useFilters()
  227. const listApi = ref(documentaryApi.followDailySubscribeProfit)
  228. const ibData = ref({
  229. customAmount: 0,
  230. ibAmount: 0,
  231. },
  232. )
  233. const selectedSpreadId = ref('')
  234. const spreadList = ref([])
  235. const excludeShowLoginTypes = ref([])
  236. const pammManagerValid = ref()
  237. const dialogPercent = ref(false)
  238. const dialogPercentData = ref({
  239. oldPercent: '',
  240. mamListId: '',
  241. oldOwnerId: '',
  242. oldAccountId: '',
  243. percent: '',
  244. })
  245. const getCustomLoginDown = async () => {
  246. const res = await documentaryApi.followCustomDropdown()
  247. if (res.code === Code.StatusOK) {
  248. if (res.data?.length > 0) {
  249. const options = res.data[0]
  250. login.value = res.data[0]
  251. loginOptions.value = res.data
  252. console.log(res.data)
  253. isDealLogin.value = options.isDealLogin
  254. ChartSet.value = {
  255. login: options.login,
  256. leverage: '1:' + options.leverage,
  257. platform: options.platform,
  258. groupTypeName: options.groupTypeName,
  259. type: options.type,
  260. balance: options.balance,
  261. currency: options.currency || '',
  262. }
  263. }
  264. } else {
  265. uni.showToast({ title: res.msg, icon: 'none' })
  266. }
  267. }
  268. const loginOptions = ref([])
  269. const ChartSet = ref({})
  270. const ChartSetDate = ref({})
  271. const isDealLogin = ref(false)
  272. const dealDate = ref({})
  273. const SubscribeProfitDate = ref([])
  274. const login = ref('')
  275. const groupTypeName = (type) => {
  276. if (!type) return '--'
  277. if (type == 1) return t('AccountType.ClassicAccount')
  278. if (type == 2) return t('AccountType.SeniorAccount')
  279. if (type == 5) return t('AccountType.SpeedAccount')
  280. if (type == 6) return t('AccountType.SpeedAccount')
  281. if (type == 7) return t('AccountType.StandardAccount')
  282. if (type == 8) return t('AccountType.CentAccount')
  283. return type
  284. }
  285. const groupCurrency = (type) => {
  286. console.log(type, 'usd')
  287. if (type == 'GBP') {
  288. return ': £'
  289. } else if (type == 'USD') {
  290. return ': $'
  291. } else if (type == 'EUR') {
  292. return ': €'
  293. } else if (type == 'USC') {
  294. return ': ¢'
  295. } else {
  296. return ': $'
  297. }
  298. }
  299. const handleCommand = (value) => {
  300. const data = { ...value }
  301. isDealLogin.value = data.isDealLogin
  302. ChartSet.value = {
  303. login: data.login,
  304. leverage: '1:' + data.leverage,
  305. platform: data.platform,
  306. groupTypeName: data.groupTypeName,
  307. type: data.type,
  308. balance: data.balance,
  309. currency: data.currency || '',
  310. }
  311. }
  312. const getDailyCompare = async (login) => {
  313. const res = await documentaryApi.followDailyCompare({ login })
  314. if (res.code === Code.StatusOK) {
  315. ChartSetDate.value = res.data ?? {}
  316. } else {
  317. uni.showToast({ title: res.msg, icon: 'none' })
  318. }
  319. }
  320. const getDailyDeal = async (login) => {
  321. const res = await documentaryApi.followDailyDeal({ login })
  322. if (res.code === Code.StatusOK) {
  323. dealDate.value = res.data ?? {}
  324. } else {
  325. uni.showToast({ title: res.msg, icon: 'none' })
  326. }
  327. }
  328. const getDailySubscribeProfit = async (login) => {
  329. const res = await documentaryApi.followDailySubscribeProfit({ login })
  330. if (res.code === Code.StatusOK) {
  331. SubscribeProfitDate.value = res.data?.data ?? []
  332. } else {
  333. uni.showToast({ title: res.msg, icon: 'none' })
  334. }
  335. }
  336. watch(() => ChartSet.value.login, async (login) => {
  337. await getDailyCompare(login)
  338. if (isDealLogin.value) {
  339. await getDailyDeal(login)
  340. } else {
  341. await getDailySubscribeProfit(login)
  342. }
  343. })
  344. const toDocumentary1 = () => {
  345. router.push({ path: '/pages/follow/trading-management' })
  346. }
  347. const dialogFllowApplyOpen = () => {
  348. isApplySignalVisible.value = true
  349. }
  350. const isApplySignalVisible = ref(false)
  351. const onApplySignalConfirm = () => {
  352. isApplySignalVisible.value = false
  353. }
  354. onMounted(async () => {
  355. loading.value = true
  356. await getCustomLoginDown()
  357. loading.value = false
  358. })
  359. </script>
  360. <style lang="scss" scoped>
  361. @import "@/uni.scss";
  362. .demo-uni-row {
  363. display: flex;
  364. flex-wrap: wrap;
  365. align-items: stretch;
  366. margin: 0 auto !important;
  367. }
  368. .uni-col-left {
  369. //display: flex;
  370. //flex-direction: column;
  371. }
  372. .uni-col-right {
  373. display: flex;
  374. flex-direction: column;
  375. }
  376. .dashboard-container {
  377. min-height: 10vh;
  378. box-sizing: border-box;
  379. display: flex;
  380. flex-direction: column;
  381. height: 100%;
  382. }
  383. .mam-card {
  384. flex: 1;
  385. display: flex;
  386. flex-direction: column;
  387. }
  388. /* 卡片通用样式 */
  389. .card {
  390. background: var(--color-white);
  391. color: var(--bs-heading-color);
  392. padding: px2rpx(12) px2rpx(16);
  393. border-radius: 4px;
  394. margin-bottom: px2rpx(20);
  395. box-shadow: 0 px2rpx(4) px2rpx(12) rgba(0, 0, 0, 0.2);
  396. }
  397. .custom-number,
  398. .custom-money {
  399. background: var(--bs-body-bg);
  400. border: 1px solid var(--bs-border-color);
  401. padding: 15px;
  402. border-radius: 4px;
  403. margin-bottom: 20px;
  404. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  405. min-height: px2rpx(125);
  406. }
  407. .custom-number .title,
  408. .custom-money .left .tit,
  409. .custom-money .right .tit {
  410. font-size: 14px;
  411. color: var(--bs-heading-color);
  412. margin-bottom: 10px;
  413. }
  414. .custom-number .title {
  415. display: flex;
  416. justify-content: space-between;
  417. align-items: center;
  418. }
  419. .custom-money {
  420. display: flex;
  421. flex-direction: column;
  422. }
  423. .custom-money .left,
  424. .custom-money .right {
  425. flex: 1;
  426. }
  427. .custom-money .num {
  428. font-size: 20px;
  429. font-weight: bold;
  430. color: var(--bs-heading-color);
  431. }
  432. .custom-money .num.red {
  433. color: #eb3f57;
  434. }
  435. .el-dropdown-link {
  436. display: flex;
  437. align-items: center;
  438. gap: 4px;
  439. color: #6c8595;
  440. font-size: 12px;
  441. }
  442. .account-info1 {
  443. margin-bottom: 20px;
  444. }
  445. .custom-money-left .header,
  446. .custom-money-right .header {
  447. display: flex;
  448. align-items: center;
  449. justify-content: space-between;
  450. margin-bottom: px2rpx(15);
  451. }
  452. .custom-money-left .tab,
  453. .custom-money-right .tab {
  454. font-size: px2rpx(20);
  455. font-weight: 600;
  456. color: var(--bs-heading-color);
  457. }
  458. .bottomCol {
  459. font-size: 16px;
  460. color: #868686;
  461. .bo-left1 {
  462. margin: 20px 0;
  463. padding: 20px 0;
  464. border-right: 1px dashed #989898;
  465. text-align: center;
  466. font-size: 16px;
  467. }
  468. .bo-right1 {
  469. margin: 20px 0px;
  470. padding: 20px 0;
  471. text-align: center;
  472. font-size: 16px;
  473. }
  474. }
  475. .blue-font {
  476. margin-top: px2rpx(15);
  477. color: #007aff;
  478. font-weight: 600;
  479. font-size: px2rpx(24);
  480. }
  481. .subscribe-table {
  482. width: 100%;
  483. border: 1px solid #ebeef5;
  484. border-radius: 6px;
  485. overflow: hidden;
  486. }
  487. .subscribe-row {
  488. display: grid;
  489. grid-template-columns: 1fr 1fr 1fr 1fr;
  490. border-top: 1px solid #ebeef5;
  491. }
  492. .subscribe-head {
  493. background: #f5f7fa;
  494. border-top: none;
  495. }
  496. .subscribe-cell {
  497. padding: 10px 8px;
  498. font-size: 12px;
  499. color: var(--bs-heading-color);
  500. text-align: center;
  501. overflow: hidden;
  502. text-overflow: ellipsis;
  503. white-space: nowrap;
  504. }
  505. .custom-dialog-content {
  506. padding: px2rpx(20);
  507. .info-text {
  508. color: var(--bs-heading-color);
  509. font-size: px2rpx(14);
  510. line-height: px2rpx(36);
  511. }
  512. }
  513. .card-header {
  514. display: flex;
  515. justify-content: space-between;
  516. align-items: center;
  517. margin-bottom: px2rpx(12);
  518. }
  519. .header-left {
  520. display: flex;
  521. align-items: center;
  522. gap: 12rpx;
  523. }
  524. .header-title {
  525. font-size: px2rpx(14);
  526. font-weight: 600;
  527. }
  528. .header-right {
  529. display: flex;
  530. align-items: center;
  531. }
  532. .action-btn {
  533. background: #ffde02;
  534. border: none;
  535. border-radius: 50%;
  536. width: px2rpx(32);
  537. height: px2rpx(32);
  538. display: flex;
  539. align-items: center;
  540. justify-content: center;
  541. padding: 0;
  542. margin: 0;
  543. &:after {
  544. border: none;
  545. }
  546. }
  547. /* 余额区域 */
  548. .balance-content {
  549. display: flex;
  550. flex-direction: column;
  551. align-items: center;
  552. gap: 16rpx;
  553. }
  554. .balance-main {
  555. display: flex;
  556. align-items: baseline;
  557. flex-wrap: wrap;
  558. }
  559. .balance-amount {
  560. font-size: px2rpx(20);
  561. font-weight: 700;
  562. line-height: 1;
  563. }
  564. .balance-decimal {
  565. font-size: px2rpx(16);
  566. font-weight: 500;
  567. line-height: 1;
  568. }
  569. .balance-currency {
  570. font-size: px2rpx(16);
  571. font-weight: 500;
  572. }
  573. .total-earnings {
  574. display: flex;
  575. align-items: center;
  576. gap: 5px;
  577. color: rgba(20, 29, 34, 0.6);
  578. font-size: px2rpx(12);
  579. }
  580. .total-value {
  581. align-self: flex-end;
  582. }
  583. /* 合作伙伴卡片 */
  584. .partner-content {
  585. display: flex;
  586. flex-direction: column;
  587. gap: 12px;
  588. }
  589. .link-area {
  590. display: flex;
  591. flex-wrap: wrap;
  592. justify-content: space-around;
  593. align-items: center;
  594. gap: 12px;
  595. }
  596. .link-btn {
  597. height: px2rpx(32);
  598. background-color: rgb(108, 133, 149);
  599. line-height: px2rpx(32);
  600. color: var(--color-white);
  601. border-radius: px2rpx(16);
  602. font-size: px2rpx(14);
  603. margin: 0;
  604. }
  605. .code-content {
  606. display: flex;
  607. justify-content: center;
  608. }
  609. .code-input {
  610. width: 50%;
  611. max-width: px2rpx(178);
  612. margin-right: px2rpx(20);
  613. }
  614. .custom-content {
  615. display: flex;
  616. justify-content: space-around;
  617. flex-wrap: wrap;
  618. .con {
  619. cursor: pointer;
  620. text-align: center;
  621. font-size: px2rpx(16);
  622. margin: 5px;
  623. }
  624. .num {
  625. font-weight: bold;
  626. }
  627. .des {
  628. margin-top: px2rpx(5);
  629. }
  630. }
  631. .dia-content {
  632. padding: 20rpx;
  633. }
  634. .content {
  635. display: flex;
  636. flex-direction: column;
  637. gap: 20rpx;
  638. }
  639. .label {
  640. font-weight: 500;
  641. margin-bottom: 8rpx;
  642. }
  643. .btn {
  644. margin: 0;
  645. //text-align: center;
  646. //background-color: rgb(var(--bs-danger-rgb));
  647. //font-size: px2rpx(16);
  648. //color: #fff;
  649. //padding: px2rpx(10) px2rpx(20);
  650. //border-radius: px2rpx(8);
  651. }
  652. .crm-cursor {
  653. cursor: pointer;
  654. }
  655. .link {
  656. display: flex;
  657. margin-top: 20rpx;
  658. .btn {
  659. display: flex;
  660. align-items: center;
  661. justify-content: center;
  662. height: px2rpx(35);
  663. margin: 0 px2rpx(10);
  664. }
  665. }
  666. .qrCode {
  667. display: flex;
  668. flex-direction: column;
  669. align-items: center;
  670. gap: 16rpx;
  671. }
  672. .mam-card {
  673. .add-mam-btn {
  674. display: flex;
  675. background-color: var(--color-error);
  676. align-items: center;
  677. gap: 8rpx;
  678. height: px2rpx(32);
  679. line-height: px2rpx(32);
  680. padding: 0 px2rpx(12);
  681. margin: 0;
  682. }
  683. }
  684. .mam-line {
  685. display: flex;
  686. justify-content: center;
  687. gap: 6rpx;
  688. line-height: 1.5;
  689. }
  690. .mam-ops {
  691. display: flex;
  692. flex-wrap: wrap;
  693. justify-content: center;
  694. gap: 10rpx;
  695. }
  696. .mam-op {
  697. color: #2b5aed;
  698. font-size: px2rpx(12);
  699. line-height: 1.4;
  700. }
  701. .tab-card{
  702. display: flex;
  703. flex-direction: row;
  704. align-items: center;
  705. justify-content: flex-start;
  706. gap: px2rpx(15);
  707. padding: px2rpx(20);
  708. height: 100%;
  709. min-height: px2rpx(115);
  710. .icon-img{
  711. width: px2rpx(50);
  712. height: px2rpx(50);
  713. }
  714. .table-tit{
  715. .tit{
  716. color: var(--bs-body-color);
  717. gap: px2rpx(15);
  718. }
  719. .tit-1{
  720. font-size: px2rpx(12);
  721. font-weight: 500;
  722. }
  723. .yest{
  724. margin-right: px2rpx(10);
  725. }
  726. }
  727. }
  728. </style>