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.

721 lines
22 KiB

6 months ago
6 months ago
6 months ago
2 months ago
6 months ago
4 months ago
6 months ago
6 months ago
6 months ago
6 months ago
2 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
6 months ago
4 months ago
6 months ago
5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
2 months ago
6 months ago
5 months ago
5 months ago
6 months ago
5 months ago
5 months ago
4 months ago
5 months ago
4 months ago
5 months ago
5 months ago
6 months ago
5 months ago
5 months ago
4 months ago
5 months ago
4 months ago
5 months ago
4 months ago
4 months ago
4 months ago
6 months ago
5 months ago
4 months ago
5 months ago
4 months ago
5 months ago
5 months ago
6 months ago
6 months ago
6 months ago
  1. <script setup>
  2. import { onMounted, ref, watch } from 'vue'
  3. import { ElMessage } from 'element-plus'
  4. import moment from 'moment'
  5. import API from '@/util/http.js'
  6. import { reverseMarketMapping } from "../../../utils/marketMap.js";
  7. import dayjs from "dayjs";
  8. import { useAdminStore } from "@/store/index.js"
  9. import { storeToRefs } from "pinia"
  10. import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js"
  11. const adminStore = useAdminStore()
  12. const { adminData, menuTree, flag } = storeToRefs(adminStore)
  13. //新增复选框员工数据
  14. // const showEmployeeData = ref(false)
  15. // 监听全局flag状态变化
  16. watch(flag, (newFlag, oldFlag) => {
  17. // 当flag状态改变时,重新发送请求
  18. if (newFlag !== oldFlag) {
  19. console.log('员工数据flag状态改变,重新加载数据', newFlag)
  20. get()
  21. }
  22. })
  23. // 标记当前激活的时间范围按钮
  24. const activeTimeRange = ref('')
  25. const defaultTime = [
  26. new Date(2000, 1, 1, 0, 0, 0),
  27. new Date(2000, 2, 1, 23, 59, 59),
  28. ]
  29. // 日期选择器变化时清除按钮激活状态
  30. const handleDatePickerChange = () => {
  31. activeTimeRange.value = ''
  32. }
  33. // 定义ref 变量来存储合计数据
  34. const totalPermanentGold = ref(0)
  35. const totalFreeGold = ref(0)
  36. const totalTaskGold = ref(0)
  37. const totalGoldTotal = ref(0)
  38. // 变量
  39. // 精网号去空格,处理 goldDetail 中的 jwcode
  40. const trimJwCode = () => {
  41. if (goldDetail.value.jwcode) {
  42. goldDetail.value.jwcode = goldDetail.value.jwcode.replace(/\s/g, '');
  43. }
  44. }
  45. //定义平台信息的加载状态
  46. const isLoadingPlatform = ref(false)
  47. // 平台信息
  48. const platform = ref([])
  49. //获取平台信息的函数
  50. const getPlatform = async () => {
  51. isLoadingPlatform.value = true;
  52. try {
  53. const result = await API({
  54. url: '/general/platform',
  55. method: 'post',
  56. })
  57. if (Array.isArray(result.data)) {
  58. platform.value = result.data.map(item => ({ value: item, label: item }));
  59. } else {
  60. console.error('平台信息格式错误', result)
  61. ElMessage.error('平台信息格式错误,请联系管理员')
  62. }
  63. } catch (error) {
  64. console.error('获取平台信息失败:', error);
  65. ElMessage.error('获取平台信息失败,请稍后重试');
  66. } finally {
  67. isLoadingPlatform.value = false
  68. }
  69. }
  70. // 数量更新类型选项
  71. const type = [
  72. {
  73. value: '0',
  74. label: '充值'
  75. },
  76. {
  77. value: '1',
  78. label: '消耗'
  79. },
  80. {
  81. value: '2',
  82. label: '退款'
  83. }
  84. ]
  85. // 定义加载状态,获取地区数据
  86. // 定义加载状态,获取地区数据
  87. const isLoadingmarket = ref(false);
  88. const markets = ref([])
  89. // 充值明细表格
  90. const tableData = ref([])
  91. // 各金币字段变量
  92. // const sumGoldTotal = ref(0)
  93. const permanentGold = ref(0)
  94. //const freeGold = ref(0)
  95. const taskGold = ref(0)
  96. // 搜索===========================================
  97. //分页总条目
  98. const total = ref(100)
  99. // 搜索对象时间
  100. const getTime = ref([])
  101. // 搜索goldDetail
  102. const goldDetail = ref({
  103. markets: [],
  104. })
  105. // 搜索对象
  106. const getObj = ref({
  107. pageNum: 1,
  108. pageSize: 50
  109. })
  110. // 开启条件筛选导出excel
  111. // const getPutEX = ref(false)
  112. // 方法
  113. // 搜索===========================================================================
  114. // 搜索方法
  115. const get = async function (val) {
  116. if (!findMenuById(menuTree.value, permissionMapping.coinCustomerDetail)) {
  117. ElMessage.error('无此权限')
  118. return
  119. }
  120. try {
  121. // 搜索参数页码赋值
  122. if (typeof val === 'number') {
  123. getObj.value.pageNum = val
  124. }
  125. if (getTime.value.length === 2) {//检查是否同时选择了开始时间和结束时间,如果不是则置空
  126. goldDetail.value.startTime = moment(getTime.value[0]).format('YYYY-MM-DD HH:mm:ss');
  127. goldDetail.value.endTime = moment(getTime.value[1]).format('YYYY-MM-DD HH:mm:ss');
  128. } else {
  129. goldDetail.value.startTime = ''
  130. goldDetail.value.endTime = ''
  131. }
  132. // 添加排序字段和排序方式到请求参数
  133. goldDetail.value.sortField = sortField.value
  134. goldDetail.value.sortOrder = sortOrder.value
  135. console.log('搜索参数', getObj.value)
  136. console.log('jwcode 类型:', typeof goldDetail.value.jwcode);
  137. console.log('jwcode 值:', goldDetail.value.jwcode);
  138. const requestData = { ...getObj.value, goldDetail: { ...goldDetail.value } };
  139. console.log('最终请求参数', JSON.stringify(requestData, null, 2)); // 打印格式化后的请求参数
  140. // 检查markets数组中是否包含'总部'或'研发部'
  141. console.log('goldDetail.value.markets:', goldDetail.value.markets)
  142. // if (goldDetail.value.markets.includes('9') || goldDetail.value.markets.includes('9999')) {
  143. // goldDetail.value.markets = [];
  144. // }
  145. if (goldDetail.value.jwcode) {
  146. // 纯数字
  147. const numberRegex = /^\d{1,9}$/;
  148. // 检查是否不是数字
  149. if (!numberRegex.test(goldDetail.value.jwcode)) {
  150. ElMessage.error('请检查精网号格式')
  151. // 上面提示过了
  152. return
  153. }
  154. }
  155. const result = await API({
  156. url: '/goldDetail/getGoldDetail',
  157. method: 'post',
  158. data: { ...getObj.value, goldDetail: { ...goldDetail.value,
  159. // flag: showEmployeeData.value ? 0 : 1
  160. flag: flag.value
  161. } }
  162. })
  163. console.log('响应数据', result)
  164. tableData.value = result.data.list
  165. total.value = result.data.total
  166. const totalResult = await API({
  167. url: '/goldDetail/getTotal',
  168. method: 'post',
  169. data: {
  170. goldDetail: { ...goldDetail.value,
  171. // flag: showEmployeeData.value ? 0 : 1
  172. flag: flag.value
  173. },
  174. /* jwcode: goldDetail.value.jwcode || '',
  175. payPlatform: goldDetail.value.payPlatform || '',
  176. type: goldDetail.value.type || '',
  177. market: goldDetail.value.market || '',
  178. startTime: goldDetail.value.startTime || '',
  179. endTime: goldDetail.value.endTime || ''*/
  180. }
  181. })
  182. if (totalResult.code === 200) {
  183. const data = totalResult.data
  184. totalPermanentGold.value = data.permanentGolds
  185. totalFreeGold.value = data.freeGolds
  186. totalTaskGold.value = data.taskGolds
  187. totalGoldTotal.value = data.sumGolds
  188. } else if (totalResult.code === 0) {
  189. // 将表格数据设置为空数组
  190. tableData.value = []
  191. totalPermanentGold.value = 0
  192. totalFreeGold.value = 0
  193. totalTaskGold.value = 0
  194. totalGoldTotal.value = 0
  195. } else {
  196. ElMessage.error('获取合计数据失败')
  197. }
  198. } catch (error) {
  199. console.log('请求失败', error)
  200. }
  201. }
  202. // 重置
  203. const reset = function () {
  204. goldDetail.value = {}
  205. goldDetail.value.markets = []
  206. selectedMarketPath.value = []
  207. delete sortField.value
  208. delete sortOrder.value
  209. getTime.value = []
  210. activeTimeRange.value = '' // 清除激活状态
  211. search()
  212. }
  213. // 搜索,点击查询按钮后触发
  214. const search = function () {
  215. trimJwCode();
  216. getObj.value.pageNum = 1
  217. get()
  218. }
  219. // 今天
  220. const getToday = function () {
  221. const today = dayjs()
  222. const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
  223. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  224. getTime.value = [startTime, endTime]
  225. activeTimeRange.value = 'today' // 标记当前激活状态
  226. search()
  227. }
  228. // 昨天
  229. const getYesterday = function () {
  230. const today = dayjs()
  231. const startTime = today.subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  232. const endTime = today.subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:ss')
  233. getTime.value = [startTime, endTime]
  234. activeTimeRange.value = 'yesterday' // 标记当前激活状态
  235. search()
  236. }
  237. // 近7天
  238. const get7Days = function () {
  239. const today = dayjs()
  240. const startTime = today.subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  241. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  242. getTime.value = [startTime, endTime]
  243. activeTimeRange.value = '7days' // 标记当前激活状态
  244. search()
  245. }
  246. // 计算每行免费金币6月+12月的方法
  247. const calculateFreeGold = (row) => {
  248. const freeJune = row.freeJune || 0;
  249. const freeDecember = row.freeDecember || 0;
  250. return (freeJune + freeDecember);
  251. }
  252. // 新增排序字段和排序方式
  253. const sortField = ref('')
  254. const sortOrder = ref('')
  255. // 处理排序事件
  256. const handleSortChange = (column) => {
  257. if (column.prop === 'sumGold') {//新增金币总数字段排序
  258. sortField.value = 'sum_gold'
  259. } else if (column.prop === 'permanentGold') {
  260. sortField.value = 'permanent_gold'
  261. } else if (column.prop === 'taskGold') {
  262. sortField.value = 'task_gold'
  263. } else if (column.prop === 'freeGold') {
  264. sortField.value = 'freeGold'
  265. } else if (column.prop === 'auditTime') {//删除了更新时间的creatTime
  266. sortField.value = 'audit_time'
  267. }
  268. sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
  269. //get()要写在handleSortChange方法里面,不然会导致排序失效
  270. get()
  271. }
  272. const exportExcel = async function () {
  273. const params = {
  274. goldDetail: {
  275. jwcode: goldDetail.value.jwcode || '',
  276. payPlatform: goldDetail.value.payPlatform || '',
  277. type: goldDetail.value.type || '',
  278. markets: goldDetail.value.markets || [],
  279. startTime: goldDetail.value.startTime || '',
  280. endTime: goldDetail.value.endTime || '',
  281. sortField: goldDetail.value.sortField || '',
  282. sortOrder: goldDetail.value.sortOrder || '',
  283. // flag: showEmployeeData.value ? 0 : 1 // 新增 flag 参数
  284. flag: flag.value
  285. },
  286. }
  287. const res = await API({ url: '/goldDetail/export', data: params })
  288. if (res.code === 200) {
  289. ElMessage.success('导出成功')
  290. }
  291. }
  292. const handlePageSizeChange = function (val) {
  293. getObj.value.pageSize = val
  294. get()
  295. }
  296. const handleCurrentChange = function (val) {
  297. getObj.value.pageNum = val
  298. get()
  299. }
  300. // 挂载
  301. onMounted(async function () {
  302. await get()
  303. await getMarket()
  304. await getPlatform() // 调用获取平台信息的函数
  305. })
  306. const exportListVisible = ref(false)
  307. // 打开导出列表弹窗
  308. const openExportList = () => {
  309. getExportList()
  310. exportListVisible.value = true
  311. }
  312. // 导出列表数据
  313. const exportList = ref([])
  314. // 导出列表加载状态
  315. const exportListLoading = ref(false)
  316. // 获取导出列表
  317. const getExportList = async () => {
  318. exportListLoading.value = true
  319. try {
  320. const result = await API({ url: '/export/export' })
  321. if (result.code === 200) {
  322. const filteredData = result.data.filter(item => {
  323. return item.type === 0; //0表示客户明细
  324. });
  325. exportList.value = filteredData
  326. } else {
  327. ElMessage.error(result.msg || '获取导出列表失败')
  328. }
  329. } catch (error) {
  330. console.error('获取导出列表出错:', error)
  331. ElMessage.error('获取导出列表失败,请稍后重试')
  332. } finally {
  333. exportListLoading.value = false
  334. }
  335. }
  336. // 下载导出文件
  337. const downloadExportFile = (item) => {
  338. if (item.state === 2) {
  339. const link = document.createElement('a')
  340. link.href = item.url
  341. link.download = item.fileName
  342. link.click()
  343. } else {
  344. ElMessage.warning('文件还在导出中,请稍后再试')
  345. }
  346. }
  347. //根据状态返回对应的标签类型
  348. const getTagType = (state) => {
  349. switch (state) {
  350. case 0:
  351. return 'info';
  352. case 1:
  353. return 'primary';
  354. case 2:
  355. return 'success';
  356. case 3:
  357. return 'danger';
  358. default:
  359. return 'info';
  360. }
  361. }
  362. //根据状态返回对应的标签文案
  363. const getTagText = (state) => {
  364. switch (state) {
  365. case 0:
  366. return '待执行';
  367. case 1:
  368. return '执行中';
  369. case 2:
  370. return '执行完成';
  371. case 3:
  372. return '执行出错';
  373. default:
  374. return '未知状态';
  375. }
  376. }
  377. // 存储地区选择变化
  378. const selectedMarketPath = ref([])
  379. const handleMarketChange = (value) => {
  380. if (value && value.length > 0) {
  381. const lastValue = value[value.length - 1];
  382. // 确保返回值是数组,如果不是则包装成数组
  383. const marketValue = reverseMarketMapping[lastValue];
  384. goldDetail.value.markets = Array.isArray(marketValue) ? marketValue : [marketValue];
  385. } else {
  386. // 保持[""]格式
  387. goldDetail.value.markets = [];
  388. }
  389. };
  390. // 获取地区,修改为级联下拉框
  391. const getMarket = async function () {
  392. try {
  393. // 发送POST请求
  394. const result = await API({
  395. url: '/market/selectMarket',
  396. });
  397. // 将响应结果存储到响应式数据中
  398. console.log('请求成功', result)
  399. // 递归转换树形结构为级联选择器需要的格式(跳过第一级节点)
  400. const transformTree = (nodes) => {
  401. // 直接处理第一级节点的子节点
  402. const allChildren = nodes.flatMap(node => node.children || []);
  403. return allChildren.map(child => {
  404. const grandchildren = child.children && child.children.length
  405. ? transformTree([child]) // 递归处理子节点
  406. : null;
  407. return {
  408. value: child.name,
  409. label: child.name,
  410. children: grandchildren
  411. };
  412. });
  413. };
  414. // 存储地区信息
  415. markets.value = transformTree(result.data)
  416. console.log('转换后的地区树==============', markets.value)
  417. } catch (error) {
  418. console.log('请求失败', error)
  419. }
  420. }
  421. const format3 = (num) => {
  422. // 每三位添加逗号
  423. return num.toLocaleString('en-US')
  424. }
  425. </script>
  426. <template>
  427. <div>
  428. <el-card class="card1" style="margin-bottom: 0.5vh;">
  429. <el-col style="margin-bottom: 1vh">
  430. <div class="select">
  431. <div class="selectRow">
  432. <el-text class="text" size="large">精网号</el-text>
  433. <el-input class="selectContent" v-model="goldDetail.jwcode" placeholder="请输入精网号" clearable />
  434. </div>
  435. <div class="selectRow">
  436. <el-text class="text" size="large">平台信息</el-text>
  437. <el-select class="selectContent" v-model="goldDetail.payPlatform" placeholder="请选择平台信息" style="width: 10vw;"
  438. clearable :loading="isLoadingPlatform">
  439. <el-option v-for="item in platform" :key="item.id" :label="item.label" :value="item.value" />
  440. </el-select>
  441. </div>
  442. <div class="selectRow">
  443. <el-text class="textB" size="large">数量更新类型</el-text>
  444. <el-select v-model="goldDetail.type" placeholder="请选择更新类型" clearable>
  445. <el-option v-for="item in type" :key="item.value" :label="item.label" :value="item.value" />
  446. </el-select>
  447. </div>
  448. <div class="selectRow">
  449. <el-text size="large">所属地区</el-text>
  450. <el-cascader class="selectContent" v-model="selectedMarketPath" :options="markets" placeholder="请选择所属地区"
  451. style="width:10vw" clearable @change="handleMarketChange" />
  452. </div>
  453. <!-- <div>
  454. <el-checkbox v-model="showEmployeeData" @change="search()">员工数据</el-checkbox>
  455. </div> -->
  456. </div>
  457. </el-col>
  458. <el-col>
  459. <div class="select">
  460. <div class="selectRow" style="width: 35vw">
  461. <el-text class="text" size="large">更新时间</el-text>
  462. <el-date-picker class="selectContent" v-model="getTime" type="datetimerange" range-separator=""
  463. start-placeholder="起始时间" end-placeholder="结束时间" style="width: 20vw" @change="handleDatePickerChange"
  464. :default-time="defaultTime" :disabled-date="disabledDate" />
  465. <el-button @click="getToday()" style="margin-left: 0.3vw"
  466. :type="activeTimeRange === 'today' ? 'primary' : ''">
  467. </el-button>
  468. <el-button @click="getYesterday()" style="margin-left: 0.3vw"
  469. :type="activeTimeRange === 'yesterday' ? 'primary' : ''">
  470. </el-button>
  471. <el-button @click="get7Days()" style="margin-left: 0.3vw"
  472. :type="activeTimeRange === '7days' ? 'primary' : ''">
  473. 近7天
  474. </el-button>
  475. </div>
  476. <div class="selectRow" style="justify-content: flex-start;">
  477. <el-button type="primary" @click="search()">查询</el-button>
  478. <el-button type="primary" @click="exportExcel">导出Excel表格</el-button>
  479. <el-button type="primary" @click="openExportList">查看导出列表</el-button>
  480. <el-button type="success" @click="reset()">重置</el-button>
  481. </div>
  482. </div>
  483. </el-col>
  484. </el-card>
  485. <el-card class="card2">
  486. <div class="goldStatistics">
  487. 金币净变化{{ format3(totalGoldTotal || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  488. 永久金币{{ format3(totalPermanentGold || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  489. 免费金币{{ format3(totalFreeGold || 0) }}&nbsp;&nbsp;&nbsp;&nbsp;
  490. 任务金币{{ format3(totalTaskGold || 0) }}&nbsp;&nbsp;
  491. <a style="color:#b1b1b1; font-size: small;">当前合计仅显示筛选范围内的金币净变化充值总额 - 消费总额 + 退款总额</a>
  492. </div>
  493. <div style="height: 58vh; ">
  494. <el-table :data="tableData" style="height: 57vh" @sort-change="handleSortChange" :row-style="{ height: '50px' }">
  495. <el-table-column type="index" label="序号" width="80px" fixed="left">
  496. <template #default="scope">
  497. <span>{{
  498. scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
  499. }}</span>
  500. </template>
  501. </el-table-column>
  502. <el-table-column fixed="left" prop="name" label="姓名" width="150" show-overflow-tooltip />
  503. <el-table-column fixed="left" prop="jwcode" label="精网号" width="120" />
  504. <el-table-column prop="market" label="所属地区" width="120" />
  505. <el-table-column prop="payPlatform" label="平台信息" width="140" />
  506. <el-table-column prop="type" label="更新类型" width="110">
  507. <template #default="scope">
  508. <span v-if="scope.row.type === 0">充值</span>
  509. <span v-if="scope.row.type === 1">消耗</span>
  510. <span v-if="scope.row.type === 2">退款</span>
  511. <span v-if="scope.row.type === 3">其他</span>
  512. </template>
  513. </el-table-column>
  514. <el-table-column prop="sumGold" sortable="custom" label="金币数量" width="110">
  515. <template #default="scope">
  516. <span>{{ (scope.row.sumGold || 0) }}</span>
  517. </template>
  518. </el-table-column>
  519. <el-table-column prop="permanentGold" sortable="custom" label="永久金币" width="110">
  520. <template #default="scope">
  521. <span>{{ (scope.row.permanentGold || 0) }}</span>
  522. </template>
  523. </el-table-column>
  524. <el-table-column prop="freeGold" sortable="custom" label="免费金币" width="110">
  525. <template #default="scope">
  526. <span>{{ (calculateFreeGold(scope.row) || 0) }}</span>
  527. </template>
  528. </el-table-column>
  529. <el-table-column prop="taskGold" sortable="custom" label="任务金币" width="110">
  530. <template #default="scope">
  531. <span>{{ (scope.row.taskGold || 0) }}</span>
  532. </template>
  533. </el-table-column>
  534. <el-table-column prop="adminName" label="提交人" width="110" />
  535. <el-table-column prop="auditTime" sortable="custom" label="更新时间" width="210" show-overflow-tooltip>
  536. <template #default="scope">
  537. <span>{{
  538. moment(scope.row.auditTime).format('YYYY-MM-DD HH:mm:ss')
  539. }}</span>
  540. </template>
  541. </el-table-column>
  542. </el-table>
  543. </div>
  544. <!-- 此处分页 -->
  545. <div class="pagination" >
  546. <el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]"
  547. layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
  548. @current-change="handleCurrentChange"></el-pagination>
  549. </div>
  550. </el-card>
  551. <!-- 导出列表弹窗 -->
  552. <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
  553. <el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
  554. <el-table-column prop="fileName" label="文件名" />
  555. <el-table-column prop="state" label="状态">
  556. <template #default="scope">
  557. <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
  558. {{ getTagText(scope.row.state) }}
  559. </el-tag>
  560. </template>
  561. </el-table-column>
  562. <el-table-column prop="createTime" label="创建时间">
  563. <template #default="scope">
  564. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  565. </template>
  566. </el-table-column>
  567. <el-table-column label="操作">
  568. <template #default="scope">
  569. <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
  570. :disabled="scope.row.state !== 2">
  571. 下载
  572. </el-button>
  573. </template>
  574. </el-table-column>
  575. </el-table>
  576. <template #footer>
  577. <div class="dialog-footer">
  578. <el-button text @click="exportListVisible = false">关闭</el-button>
  579. </div>
  580. </template>
  581. </el-dialog>
  582. </div>
  583. </template>
  584. <style scoped lang="scss">
  585. .pagination {
  586. display: flex;
  587. margin-top: 1vh;
  588. }
  589. // 搜索的卡片样式
  590. .card1 {
  591. background: #F3FAFE;
  592. }
  593. // 表单的卡片样式
  594. .card2 {
  595. background: #E7F4FD;
  596. }
  597. // 新币总数等等
  598. .goldStatistics {
  599. margin-left: 1vw;
  600. margin-bottom: 1vh;
  601. color: #000000;
  602. font-family: "PingFang SC";
  603. font-size: 16px;
  604. font-style: normal;
  605. font-weight: 700;
  606. line-height: 20px;
  607. }
  608. // 表头背景等
  609. :deep(.el-table__header-wrapper),
  610. :deep(.el-table__body-wrapper),
  611. :deep(.el-table__cell),
  612. /* 表格 */
  613. :deep(.el-table__body td) {
  614. background-color: #F3FAFE !important;
  615. }
  616. /* 表头 */
  617. :deep(.el-table__header th) {
  618. background-color: #F3FAFE !important;
  619. }
  620. /* 鼠标悬停 */
  621. :deep(.el-table__row:hover > .el-table__cell) {
  622. background-color: #E5EBFE !important;
  623. }
  624. .dialog-footer {
  625. display: flex;
  626. justify-content: flex-end;
  627. }
  628. /** 搜索的样式 */
  629. .select {
  630. display: flex;
  631. .selectRow {
  632. width: 17vw;
  633. display: flex;
  634. align-items: center;
  635. justify-content: center;
  636. padding: 0 0.5vw;
  637. .text {
  638. width: 5vw;
  639. font-size: 15px;
  640. }
  641. .textB {
  642. width: 9vw;
  643. font-size: 15px;
  644. }
  645. .selectContent {
  646. flex: 1;
  647. }
  648. }
  649. }
  650. </style>