You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

754 lines
22 KiB

7 months ago
7 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
8 months ago
9 months ago
8 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
8 months ago
8 months ago
8 months ago
  1. <script setup>
  2. // 这是客户金币余额页面
  3. import { useAdminStore } from "@/store/index.js"
  4. import { storeToRefs } from "pinia"
  5. import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
  6. const adminStore = useAdminStore()
  7. const { adminData, menuTree, flag } = storeToRefs(adminStore)
  8. // 监听全局flag状态变化(员工数据的)
  9. watch(flag, (newFlag, oldFlag) => {
  10. // 当flag状态改变时,重新发送请求
  11. if (newFlag !== oldFlag) {
  12. console.log('员工数据flag状态改变,重新加载数据', newFlag)
  13. get()
  14. }
  15. })
  16. import { onMounted, ref, watch, nextTick } from 'vue'
  17. import { useRouter } from 'vue-router'
  18. import { ElMessage } from 'element-plus'
  19. import moment from 'moment'
  20. import API from '@/util/http.js'
  21. import { reverseMarketMapping } from "@/utils/marketMap.js";
  22. // 国际化
  23. import { useI18n } from 'vue-i18n'
  24. const { t } = useI18n()
  25. const router = useRouter()
  26. //新增员工数据复选框
  27. // const showEmployeeData = ref(false)
  28. // 变量
  29. const dialogVisible = ref(false)
  30. // 定义加载状态,获取地区数据
  31. const isLoadingmarket = ref(false);
  32. const markets = ref([])
  33. // 充值明细表格
  34. const tableData = ref([])
  35. const tableRef = ref(null)
  36. const scrollTableTop = () => {
  37. tableRef.value?.setScrollTop?.(0)
  38. }
  39. // 新增金币总数变量
  40. const goldtotal = ref(0)
  41. // 计算用户各金币总数的不分页对象
  42. const tableAllData = ref([])
  43. // 各金币字段
  44. const permanentGold = ref(0) // 修改为 currentPermanentGold 对应字段
  45. const freeJuneGold = ref(0) // 修改为 currentFreeJune 对应字段
  46. const freeDecemberGold = ref(0) // 修改为 currentFreeDecember 对应字段
  47. const taskGold = ref(0) // 修改为 currentTaskGold 对应字段
  48. const freeGold = ref(0) // 计算免费金币总数
  49. //客户消费记录
  50. const tableCountData = ref([])
  51. const userInfo = ref({})
  52. // 搜索===========================================
  53. //分页总条目
  54. const total = ref(100)
  55. // 搜索对象时间
  56. const getTime = ref([])
  57. // 搜索User
  58. const user = ref({
  59. markets: [],
  60. })
  61. // 不分页的搜索对象
  62. const getAllObj = ref({})
  63. // 搜索对象
  64. const getObj = ref({
  65. pageNum: 1,
  66. pageSize: 50
  67. })
  68. // 新增排序字段和排序方式
  69. const sortField = ref('')
  70. const sortOrder = ref('')
  71. // 获取单用户的钱包详情 (直接展示后端返回的 walletList)
  72. const getUserWalletDetail = (row) => {
  73. // 后端返回的钱包列表 (可能为空)
  74. const walletList = row.walletList || [];
  75. if (walletList.length === 0) {
  76. return [];
  77. }
  78. // 直接映射后端数据
  79. return walletList.map(item => {
  80. // 移除 "钱包" 后缀,保持简洁展示
  81. let displayName = item.walletName || '';
  82. if (displayName.endsWith('钱包')) {
  83. displayName = displayName.slice(0, -2);
  84. }
  85. return {
  86. wallet: displayName,
  87. amount: (item.permanentGold || 0).toFixed(2)
  88. };
  89. });
  90. }
  91. // 跳转到钱包详情页
  92. const goToWalletDetail = (row) => {
  93. router.push({
  94. name: 'clientCountWallet',
  95. query: { jwcode: row.jwcode }
  96. })
  97. }
  98. // 方法
  99. // 搜索===========================================================================
  100. // 搜索方法
  101. const get = async function (val) {
  102. if (!findMenuById(menuTree.value, permissionMapping.gold_coin_customer_balance)) {
  103. ElMessage.error(t('elmessage.noPermission'))
  104. return
  105. }
  106. try {
  107. // 搜索参数页码赋值
  108. if (typeof val === 'number') {
  109. getObj.value.pageNum = val
  110. }
  111. // 添加排序字段和排序方式到请求参数
  112. user.value.sortField = sortField.value
  113. user.value.sortOrder = sortOrder.value
  114. console.log('搜索参数', getObj.value)
  115. // 发送POST请求
  116. const requestData = { ...getObj.value, user: { ...user.value } };//控制台打印请求的参数
  117. console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // 打印格式化后的请求参数
  118. //console.log('请求参数', requestData);
  119. // 检查markets数组中是否包含'总部'或'研发部'
  120. // if (user.value.markets.includes('9') || user.value.markets.includes('9999')) {
  121. // user.value.markets = [];
  122. // }
  123. if (user.value.jwcode) {
  124. // 纯数字
  125. const numberRegex = /^\d{1,9}$/;
  126. // 检查是否不是数字
  127. if (!numberRegex.test(user.value.jwcode)) {
  128. ElMessage.error(t('elmessage.checkJwcodeFormat'))
  129. // 上面提示过了
  130. return
  131. }
  132. }
  133. const result = await API({
  134. url: '/goldDetail/getGold',
  135. method: 'post',
  136. data: { ...getObj.value, user: { ...user.value, flag: flag.value } }
  137. })
  138. console.log('响应数据', result)
  139. tableData.value = result.data.list
  140. total.value = result.data.total
  141. console.log('兄弟你是什么 user', user.value)
  142. // 获取合计数
  143. const resultGoldTotal = await API({
  144. url: '/goldDetail/goldTotal',
  145. data: {
  146. jwcode: user.value.jwcode,
  147. markets: user.value.markets,
  148. flag: flag.value
  149. }
  150. })
  151. // 判断精网号是否存在,假设精网号不存在时 result.data.list 为空数组
  152. if (result.data.list.length === 0) {
  153. // 将表格数据设置为空数组
  154. tableData.value = []
  155. // 将合计数设置为 0
  156. permanentGold.value = 0
  157. freeJuneGold.value = 0
  158. freeDecemberGold.value = 0
  159. taskGold.value = 0
  160. goldtotal.value = 0
  161. freeGold.value = 0
  162. // // 新增金币总数变量
  163. // const goldtotal = ref(0)
  164. // 分页总数设置为 0
  165. total.value = 0
  166. // ElMessage.warning('精网号不存在,请检查输入')
  167. }
  168. // 判断合计数是否存在,不存在时 result.data.list 为空数组
  169. else if (resultGoldTotal.data === 0) {
  170. // 将表格数据设置为空数组
  171. tableData.value = []
  172. // 将合计数设置为 0
  173. permanentGold.value = 0
  174. freeJuneGold.value = 0
  175. freeDecemberGold.value = 0
  176. taskGold.value = 0
  177. goldtotal.value = 0
  178. freeGold.value = 0
  179. }
  180. else {
  181. // 将响应结果存储到响应式数据中
  182. console.log('总数据请求成功', result)
  183. // 存储表格数据
  184. tableData.value = result.data.list
  185. await nextTick()
  186. scrollTableTop()
  187. console.log('tableData', tableData.value)
  188. // 从接口返回数据中获取各金币数值
  189. if (resultGoldTotal.data) {
  190. permanentGold.value = parseFloat(resultGoldTotal.data.permanentGold.toFixed(2))
  191. freeGold.value = parseFloat(resultGoldTotal.data.freeGold.toFixed(2))
  192. taskGold.value = parseFloat(resultGoldTotal.data.taskGold.toFixed(2))
  193. goldtotal.value = parseFloat(resultGoldTotal.data.goldtotal.toFixed(2))
  194. } else {
  195. console.error('合计数数据格式错误', resultGoldTotal)
  196. ElMessage.error(t('elmessage.getTotalFailed'))
  197. }
  198. // 存储分页总数
  199. total.value = result.data.total
  200. console.log('total', total.value)
  201. }
  202. } catch (error) {
  203. console.log('请求失败', error)
  204. // 在这里可以处理错误逻辑,比如显示错误提示等
  205. }
  206. }
  207. // 精网号去空格,同时处理 user 和 putExcel 中的 jwcode
  208. const trimJwCode = () => {
  209. if (user.value.jwcode) {
  210. user.value.jwcode = user.value.jwcode.replace(/\s/g, '');
  211. }
  212. }
  213. // 搜索
  214. const search = function () {
  215. trimJwCode();
  216. getObj.value.pageNum = 1
  217. get()
  218. }
  219. // 重置
  220. const reset = function () {
  221. user.value = {
  222. jwcode: '',
  223. markets: [],
  224. }
  225. sortField.value = ''
  226. sortOrder.value = ''
  227. selectedMarketPath.value = []
  228. // 重置页码
  229. getObj.value.pageNum = 1
  230. get()
  231. }
  232. const cellClick = function (row, column) {
  233. console.log('cellClick', column.label)
  234. if (column.label === t('common.name')) {
  235. dialogVisible.value = true
  236. userInfo.value = row
  237. }
  238. }
  239. // 处理排序事件
  240. const handleSortChange = (column) => {
  241. console.log('排序字段:', column.prop)
  242. console.log('排序方式:', column.order)
  243. if (column.prop === 'currentPermanentGold') {
  244. sortField.value = 'current_permanent_gold'
  245. } else if (column.prop === 'currentTaskGold') {
  246. sortField.value = 'current_task_gold'
  247. } else if (column.prop === 'currentFreeJune') {
  248. sortField.value = 'current_free_june'
  249. } else if (column.prop === 'currentFreeDecember') {
  250. sortField.value = 'current_free_december'
  251. }
  252. sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
  253. get()
  254. }
  255. // 挂载
  256. onMounted(async function () {
  257. await get()
  258. await getMarket()
  259. await getExportList()
  260. })
  261. const handlePageSizeChange = function (val) {
  262. getObj.value.pageSize = val
  263. get()
  264. }
  265. const handleCurrentChange = function (val) {
  266. getObj.value.pageNum = val
  267. get()
  268. }
  269. const exportExcel = async function () {
  270. const params = {
  271. user: {
  272. jwcode: user.value.jwcode || '',
  273. markets: user.value.markets || [],
  274. flag: flag.value
  275. }
  276. }
  277. const res = await API({ url: '/goldDetail/exportGold', data: params })
  278. if (res.code === 200) {
  279. ElMessage.success(t('elmessage.exportSuccess'))
  280. }
  281. }
  282. const exportListVisible = ref(false)
  283. // 打开导出列表弹窗
  284. const openExportList = () => {
  285. getExportList()
  286. exportListVisible.value = true
  287. }
  288. // 导出列表数据
  289. const exportList = ref([])
  290. // 导出列表加载状态
  291. const exportListLoading = ref(false)
  292. // 获取导出列表
  293. const getExportList = async () => {
  294. exportListLoading.value = true
  295. try {
  296. const result = await API({ url: '/export/export' })
  297. if (result.code === 200) {
  298. const filteredData = result.data.filter(item => {
  299. return item.type === 1; //返回type為0即客户金币余额的数据
  300. });
  301. exportList.value = filteredData
  302. } else {
  303. ElMessage.error(result.msg || t('elmessage.getExportListError'))
  304. }
  305. } catch (error) {
  306. console.error('获取导出列表出错:', error)
  307. ElMessage.error(t('elmessage.getExportListError'))
  308. } finally {
  309. exportListLoading.value = false
  310. }
  311. }
  312. // 下载导出文件
  313. const downloadExportFile = (item) => {
  314. if (item.state === 2) {
  315. const link = document.createElement('a')
  316. link.href = item.url
  317. link.download = item.fileName
  318. link.click()
  319. } else {
  320. ElMessage.warning(t('elmessage.exportingInProgress'))
  321. }
  322. }
  323. //根据状态返回对应的标签类型
  324. const getTagType = (state) => {
  325. switch (state) {
  326. case 0:
  327. return 'info';
  328. case 1:
  329. return 'primary';
  330. case 2:
  331. return 'success';
  332. case 3:
  333. return 'danger';
  334. default:
  335. return 'info';
  336. }
  337. }
  338. //根据状态返回对应的标签文案
  339. const getTagText = (state) => {
  340. switch (state) {
  341. case 0:
  342. return t('elmessage.pendingExecution');
  343. case 1:
  344. return t('elmessage.executing');
  345. case 2:
  346. return t('elmessage.executed');
  347. case 3:
  348. return t('elmessage.errorExecution');
  349. default:
  350. return t('elmessage.unknownStatus');
  351. }
  352. }
  353. // 存储地区选择变化
  354. const selectedMarketPath = ref([])
  355. const handleMarketChange = (value) => {
  356. if (value && value.length > 0) {
  357. const lastValue = value[value.length - 1];
  358. // 确保返回值是数组,如果不是则包装成数组
  359. const marketValue = reverseMarketMapping[lastValue];
  360. user.value.markets = Array.isArray(marketValue) ? marketValue : [marketValue];
  361. } else {
  362. // 保持[]格式
  363. user.value.markets = [];
  364. }
  365. };
  366. // 获取地区,修改为级联下拉框
  367. const getMarket = async function () {
  368. try {
  369. // 发送POST请求
  370. const result = await API({
  371. url: '/market/selectMarket',
  372. });
  373. // 将响应结果存储到响应式数据中
  374. console.log('请求成功', result)
  375. // 递归转换树形结构为级联选择器需要的格式(跳过第一级节点)
  376. const transformTree = (nodes) => {
  377. // 直接处理第一级节点的子节点
  378. const allChildren = nodes.flatMap(node => node.children || []);
  379. return allChildren.map(child => {
  380. const grandchildren = child.children && child.children.length
  381. ? transformTree([child]) // 递归处理子节点
  382. : null;
  383. return {
  384. value: child.name,
  385. label: child.name,
  386. children: grandchildren
  387. };
  388. });
  389. };
  390. // 存储地区信息
  391. markets.value = transformTree(result.data)
  392. console.log('转换后的地区树==============', markets.value)
  393. } catch (error) {
  394. console.log('请求失败', error)
  395. }
  396. }
  397. const format3 = (num) => {
  398. // 每三位添加逗号
  399. return num.toLocaleString('en-US')
  400. }
  401. // 虚拟 Popover 逻辑
  402. const popoverVisible = ref(false)
  403. const popoverData = ref(null)
  404. const virtualRef = ref(null)
  405. const handleMouseEnter = (row, e) => {
  406. popoverData.value = row
  407. popoverVisible.value = true
  408. virtualRef.value = e.currentTarget
  409. }
  410. const handleMouseLeave = () => {
  411. popoverVisible.value = false
  412. }
  413. </script>
  414. <template>
  415. <el-card class="card1" style="margin-bottom: 1vh;">
  416. <div class="head-card">
  417. <div class="head-card-element">
  418. <el-text class="mx-1" size="large">{{ $t('common.jwcode') }}</el-text>
  419. <el-input v-model="user.jwcode" style="width: 160px" :placeholder="$t('common.jwcodePlaceholder')" clearable />
  420. </div>
  421. <div class="head-card-element">
  422. <el-text class="mx-1" size="large">{{ $t('common.market') }}</el-text>
  423. <el-cascader v-model="selectedMarketPath" :options="markets" :placeholder="$t('common.marketPlaceholder')" clearable style="width:180px"
  424. @change="handleMarketChange" />
  425. </div>
  426. <div class="head-card-element">
  427. <!-- <el-checkbox v-model="showEmployeeData" @change="search()">员工数据</el-checkbox> -->
  428. </div>
  429. <el-button type="primary" @click="search()">{{ $t('common.search') }}</el-button>
  430. <el-button type="primary" @click="exportExcel()">{{ $t('common.exportExcel') }}</el-button>
  431. <el-button type="primary" @click="openExportList">{{ $t('common.viewExportList') }}</el-button>
  432. <el-button @click="reset" type="success">{{ $t('common.reset') }}</el-button>
  433. </div>
  434. <!-- </div> -->
  435. </el-card>
  436. <el-card class="card2">
  437. <div class="goldStatistics">
  438. {{ $t('common.totalGoldCoin') }}{{ format3(goldtotal || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  439. {{ $t('common.permanentGold') }}{{ format3(permanentGold || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  440. {{ $t('common.freeGold') }}{{ format3(freeGold || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  441. {{ $t('common.taskGold') }}{{ format3(taskGold || 0) }}
  442. </div>
  443. <!-- 设置表格容器的高度和滚动样式 -->
  444. <div style="height: 69vh; overflow-y: auto">
  445. <el-table ref="tableRef" :data="tableData" @cellClick="cellClick" style="width: 82vw; height:69vh"
  446. @sort-change="handleSortChange" :row-style="{ height: '50px' }">
  447. <el-table-column type="index" :label="$t('common_list.id')" width="100px" fixed="left">
  448. <template #default="scope">
  449. <span>{{
  450. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  451. }}</span>
  452. </template>
  453. </el-table-column>
  454. <el-table-column prop="name" :label="$t('common_list.name')" width="140" />
  455. <el-table-column prop="jwcode" :label="$t('common_list.jwcode')" width="160" />
  456. <el-table-column prop="market" :label="$t('common_list.market')" width="140" />
  457. <el-table-column prop="sumGold" :label="$t('common_list.sumGold')" width="180" aligh="center">
  458. <!-- <template #default="scope">
  459. <span>{{
  460. ((scope.row.currentPermanentGold || 0) +
  461. (scope.row.currentFreeJune || 0) +
  462. (scope.row.currentFreeDecember || 0) +
  463. (scope.row.currentTaskGold || 0))
  464. }}</span>
  465. </template> -->
  466. </el-table-column>
  467. <el-table-column prop="currentPermanentGold" :label="$t('common_list.permanentGold')" sortable="custom" width="210">
  468. <template #default="scope">
  469. <div
  470. class="hover-cell-wrapper"
  471. @mouseenter="handleMouseEnter(scope.row, $event)"
  472. @mouseleave="handleMouseLeave"
  473. >
  474. <span>{{ (scope.row.currentPermanentGold || 0) }}</span>
  475. </div>
  476. </template>
  477. </el-table-column>
  478. <el-table-column prop="currentFreeJune" :label="$t('common_list.freeGold6Month')" sortable="custom" width="200">
  479. <template #default="scope">
  480. <span>{{ (scope.row.currentFreeJune || 0) }}</span>
  481. </template>
  482. </el-table-column>
  483. <el-table-column prop="currentFreeDecember" :label="$t('common_list.freeGold12Month')" sortable="custom" width="200">
  484. <template #default="scope">
  485. <span>{{ (scope.row.currentFreeDecember || 0) }}</span>
  486. </template>
  487. </el-table-column>
  488. <el-table-column prop="currentTaskGold" :label="$t('common_list.taskGold')" sortable="custom" width="180">
  489. <template #default="scope">
  490. <span>{{ (scope.row.currentTaskGold || 0) }}</span>
  491. </template>
  492. </el-table-column>
  493. </el-table>
  494. </div>
  495. <!-- 分页 -->
  496. <div class="pagination" style="margin-top: 20px">
  497. <el-pagination background :current-page="getObj.pageNum" :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
  498. layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
  499. @current-change="handleCurrentChange"></el-pagination>
  500. </div>
  501. </el-card>
  502. <el-dialog v-model="exportListVisible" :title="$t('common_export.exportList')" width="80%">
  503. <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
  504. <el-table-column prop="fileName" :label="$t('common_export.fileName')" />
  505. <el-table-column prop="state" :label="$t('common_export.status')">
  506. <template #default="scope">
  507. <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
  508. {{ getTagText(scope.row.state) }}
  509. </el-tag>
  510. </template>
  511. </el-table-column>
  512. <el-table-column prop="createTime" :label="$t('common_export.createTime')">
  513. <template #default="scope">
  514. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  515. </template>
  516. </el-table-column>
  517. <el-table-column :label="$t('common_export.operation')">
  518. <template #default="scope">
  519. <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
  520. :disabled="scope.row.state !== 2">
  521. {{ $t('common_export.download') }}
  522. </el-button>
  523. </template>
  524. </el-table-column>
  525. </el-table>
  526. <template #footer>
  527. <div class="dialog-footer">
  528. <el-button text @click="exportListVisible = false">{{ $t('common_export.close') }}</el-button>
  529. </div>
  530. </template>
  531. </el-dialog>
  532. <!-- Global Virtual Popover -->
  533. <el-popover
  534. v-model:visible="popoverVisible"
  535. :virtual-ref="virtualRef"
  536. virtual-triggering
  537. placement="right"
  538. :width="200"
  539. popper-class="custom-blue-popover"
  540. :show-arrow="false"
  541. :offset="-100"
  542. :hide-after="0"
  543. >
  544. <div class="popover-content" v-if="popoverData">
  545. <div class="popover-header">
  546. <span class="header-title">永久金币</span>
  547. <span class="header-amount">{{ popoverData.currentPermanentGold || 0 }}</span>
  548. </div>
  549. <div class="popover-list">
  550. <div v-for="(item, index) in getUserWalletDetail(popoverData)" :key="index" class="popover-item">
  551. <span class="wallet-name">{{ item.wallet }}</span>
  552. <span class="wallet-amount">{{ item.amount }}</span>
  553. </div>
  554. </div>
  555. </div>
  556. </el-popover>
  557. </template>
  558. <style>
  559. /* 全局样式或非 scoped 样式用于覆盖 el-popover */
  560. .el-popover.custom-blue-popover {
  561. background-color: #E5EBFE !important;
  562. border-color: #E5EBFE !important;
  563. padding: 0 !important; /* Remove default padding to let content control it */
  564. border-radius: 8px !important;
  565. box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15) !important;
  566. color: #333 !important;
  567. }
  568. /* 隐藏箭头 */
  569. .el-popover.custom-blue-popover .el-popper__arrow {
  570. display: none !important;
  571. }
  572. </style>
  573. <style scoped lang="scss">
  574. .hover-cell-wrapper {
  575. width: 100%;
  576. height: 100%;
  577. display: flex;
  578. align-items: center;
  579. justify-content: flex-start; /* Changed to left align */
  580. cursor: pointer;
  581. /* Optional: add a subtle hover effect on the cell text itself */
  582. &:hover {
  583. color: #409EFF;
  584. font-weight: bold;
  585. }
  586. }
  587. .popover-content {
  588. padding: 16px;
  589. font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
  590. }
  591. .popover-header {
  592. display: flex;
  593. align-items: center;
  594. justify-content: space-between;
  595. margin-bottom: 12px;
  596. padding-bottom: 8px;
  597. border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  598. .header-title {
  599. font-size: 14px;
  600. font-weight: bold;
  601. color: #333;
  602. }
  603. .header-amount {
  604. font-size: 16px;
  605. font-weight: bold;
  606. color: #409EFF; /* Highlight color */
  607. margin: 0 8px;
  608. }
  609. }
  610. .popover-list {
  611. display: flex;
  612. flex-direction: column;
  613. gap: 8px;
  614. }
  615. .popover-item {
  616. display: flex;
  617. justify-content: space-between;
  618. align-items: center;
  619. font-size: 13px;
  620. color: #555;
  621. .wallet-name {
  622. color: #666;
  623. }
  624. .wallet-amount {
  625. font-weight: 500;
  626. color: #333;
  627. }
  628. }
  629. // 搜索的卡片样式
  630. .card1 {
  631. background: #F3FAFE;
  632. }
  633. // 表单的卡片样式
  634. .card2 {
  635. background: #E7F4FD;
  636. }
  637. // 新币总数等等
  638. .goldStatistics {
  639. margin-left: 1vw;
  640. margin-bottom: 1vh;
  641. color: #000000;
  642. font-family: "PingFang SC";
  643. font-size: 16px;
  644. font-style: normal;
  645. font-weight: 700;
  646. line-height: 20px;
  647. }
  648. // 表头背景等
  649. :deep(.el-table__header-wrapper),
  650. :deep(.el-table__body-wrapper),
  651. :deep(.el-table__cell),
  652. /* 表格 */
  653. :deep(.el-table__body td) {
  654. background-color: #F3FAFE !important;
  655. }
  656. /* 表头 */
  657. :deep(.el-table__header th) {
  658. background-color: #F3FAFE !important;
  659. }
  660. /* 鼠标悬停 */
  661. :deep(.el-table__row:hover > .el-table__cell) {
  662. background-color: #E5EBFE !important;
  663. }
  664. .pagination {
  665. display: flex;
  666. }
  667. .status {
  668. display: flex;
  669. }
  670. .head-card {
  671. display: flex;
  672. }
  673. .head-card-element {
  674. margin-right: 20px;
  675. }
  676. .head-card-btn {
  677. margin-left: auto;
  678. }
  679. .custom-box {
  680. display: flex;
  681. flex-wrap: wrap;
  682. row-gap: 5px;
  683. div:nth-child(1) {
  684. flex: 1 0 100%;
  685. }
  686. div {
  687. margin-right: 20px;
  688. }
  689. }
  690. </style>