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.

693 lines
22 KiB

4 months ago
2 months ago
2 months ago
3 months ago
2 months ago
4 months ago
4 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
2 months ago
2 months ago
2 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
4 months ago
  1. <template>
  2. <el-card class="card1" style="margin-bottom: 0.5vh;">
  3. <el-col style="margin-bottom: 1vh">
  4. <div class="select">
  5. <div class="selectRow">
  6. <el-text class="text" size="large">精网号</el-text>
  7. <el-input class="selectContent" v-model="searchForm.jwcode" placeholder="请输入精网号"
  8. style="width: 12vw;margin-right:1vw" clearable />
  9. </div>
  10. <div class="selectRow">
  11. <el-text class="text" size="large">所属地区</el-text>
  12. <el-cascader v-model="selectedMarkets" :options="marketOptions" placeholder="请选择所属地区" clearable
  13. style="width: 12vw" @change="handleMarketChange" />
  14. </div>
  15. </div>
  16. </el-col>
  17. <el-col>
  18. <div class="select">
  19. <div class="selectRow" style="width: 36vw;">
  20. <el-text class="text" size="large" v-show="checkTab === 'pending'">提交时间</el-text>
  21. <el-text class="text" size="large" v-show="checkTab === 'reject' || checkTab === 'pass'">审核时间</el-text>
  22. <el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间"
  23. end-placeholder="结束时间" class="selectContent" style="width: 25vw;margin-right:1vw"
  24. @change="handleDatePickerChange" :default-time="defaultTime" />
  25. <!-- <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>-->
  26. <!-- <el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"></el-button>-->
  27. <!-- <el-button @click="get7Days()" :type="activeTimeRange === '7days' ? 'primary' : ''">近7天</el-button>-->
  28. </div>
  29. <div class="selectRow" style="justify-content: flex-start;">
  30. <el-button type="primary" @click="handleSearch">查询</el-button>
  31. <el-button type="success" @click="resetSearch">重置</el-button>
  32. </div>
  33. </div>
  34. </el-col>
  35. </el-card>
  36. <el-card class="card2">
  37. <!-- 将el-tabs替换为按钮组 -->
  38. <div class="custom-button-group">
  39. <el-button v-if="hasbeanWait && hasbeanWaitShow" :type="checkTab === 'pending' ? 'primary' : 'default'"
  40. class="custom-tab-button" @click="adminWait">
  41. 待审核
  42. </el-button>
  43. <el-button v-if="hasbeanThrough" :type="checkTab === 'pass' ? 'primary' : 'default'" class="custom-tab-button"
  44. @click="adminPass">
  45. 已通过
  46. </el-button>
  47. <el-button v-if="hasbeanReject" :type="checkTab === 'reject' ? 'primary' : 'default'" class="custom-tab-button"
  48. @click="adminReject">
  49. 已驳回
  50. </el-button>
  51. </div>
  52. <div class="goldStatistics">
  53. 总条数{{ format3(stats.num) }}&nbsp;&nbsp;&nbsp;&nbsp;
  54. 总金豆数{{ format3(stats.beanNum) }}金豆&nbsp;&nbsp;&nbsp;&nbsp;
  55. 付费金豆{{ format3(stats.permanentBean) }}金豆&nbsp;&nbsp;&nbsp;&nbsp;
  56. 免费金豆{{ format3(stats.freeBean) }}金豆
  57. </div>
  58. <el-table :data="tableData" height="55vh" @sort-change="handleSortChange" :row-style="{ height: '50px' }">
  59. <el-table-column type="index" label="序号" width="80">
  60. <template #default="scope">
  61. {{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}
  62. </template>
  63. </el-table-column>
  64. <el-table-column prop="name" label="姓名" width="120" show-overflow-tooltip />
  65. <el-table-column prop="jwcode" label="精网号" width="120" />
  66. <el-table-column prop="market" label="所属地区" width="120" />
  67. <el-table-column prop="permanentBean" label="付费金豆" width="120" sortable="custom" />
  68. <el-table-column prop="freeBean" label="免费金豆" width="120" sortable="custom" />
  69. <el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip />
  70. <el-table-column prop="submitName" label="提交人" width="120" />
  71. <el-table-column v-if="checkTab === 'reject'" prop="reason" label="驳回理由" width="120" show-overflow-tooltip />
  72. <el-table-column v-if="checkTab !== 'pending'" prop="auditName" label="审核人" width="120" />
  73. <el-table-column prop="createTime" label="提交时间" width="180" sortable="custom">
  74. <template #default="{ row }">
  75. {{ moment(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  76. </template>
  77. </el-table-column>
  78. <el-table-column v-if="checkTab !== 'pending'" prop="auditTime" label="审核时间" width="240" sortable="custom">
  79. <template #default="{ row }">
  80. {{ row.auditTime ? moment(row.auditTime).format('YYYY-MM-DD HH:mm:ss') : '--' }}
  81. </template>
  82. </el-table-column>
  83. <el-table-column v-if="checkTab === 'pending' && (hasbeanWaitThough || hasbeanWaitReject)" fixed="right"
  84. prop="operation" label="操作" width="200px">
  85. <template #default="scope">
  86. <div class="operation">
  87. <el-link :underline="false" class="pass-btn" v-if="hasbeanWaitThough" :disabled="clicked || cancelClicked"
  88. type="primary" @click="showApproveDialog(scope.row)">
  89. 通过
  90. </el-link>
  91. <el-link :underline="false" class="reject-btn" v-if="hasbeanWaitReject" :disabled="clicked || cancelClicked"
  92. type="primary" @click="showRejectDialog(scope.row)">
  93. 驳回
  94. </el-link>
  95. </div>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. <div class="pagination">
  100. <el-pagination background v-model:current-page="pagination.pageNum" v-model:page-size="pagination.pageSize"
  101. layout="total, sizes, prev, pager, next, jumper" :total="stats.num" @size-change="handlePageSizeChange"
  102. @current-change="handleCurrentChange"></el-pagination>
  103. </div>
  104. </el-card>
  105. <!-- 驳回理由对话框 -->
  106. <el-dialog v-model="rejectReasonDialogVisible" title="驳回理由" width="500px">
  107. <el-form>
  108. <el-form-item label="驳回理由" required>
  109. <el-input v-model="reason" type="textarea" :rows="4" placeholder="请输入驳回理由" maxlength="200" show-word-limit />
  110. </el-form-item>
  111. </el-form>
  112. <template #footer>
  113. <span class="dialog-footer">
  114. <el-button @click="rejectReasonDialogVisible = false">取消</el-button>
  115. <el-button type="primary" @click="handleReject()">确定</el-button>
  116. </span>
  117. </template>
  118. </el-dialog>
  119. <ConfirmDialog
  120. v-model="rejectDialogVisible"
  121. message="驳回该记录!"
  122. @confirm="showRejectReasonInput"
  123. @cancel="handleRejectCancel"
  124. @close="handleRejectClose"
  125. />
  126. <ConfirmDialog
  127. v-model="approveDialogVisible"
  128. message="通过该记录!"
  129. @confirm="handleApproveConfirm"
  130. @cancel="handleApproveCancel"
  131. @close="handleApproveClose"
  132. />
  133. </template>
  134. <script setup>
  135. import { onMounted, ref } from 'vue'
  136. import { ElMessage } from 'element-plus'
  137. import API from '@/util/http.js'
  138. import moment from 'moment'
  139. import { useAdminStore } from "@/store/index.js";
  140. import { storeToRefs } from "pinia";
  141. import _ from 'lodash'
  142. import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js"
  143. import ConfirmDialog from '@/components/dialogs/ConfirmDialog.vue';
  144. const defaultTime = [
  145. new Date(2000, 1, 1, 0, 0, 0),
  146. new Date(2000, 2, 1, 23, 59, 59),
  147. ]
  148. const adminStore = useAdminStore();
  149. const { adminData, menuTree } = storeToRefs(adminStore);
  150. import dayjs from "dayjs";
  151. const tableData = ref([])
  152. const marketOptions = ref("")
  153. const dateRange = ref([])
  154. const activeTimeRange = ref('')
  155. const sortField = ref('')
  156. const sortOrder = ref('')
  157. const checkTab = ref('pending')
  158. const rejectDialogVisible = ref(false)
  159. const rejectReasonDialogVisible = ref(false) // 驳回理由输入框显示状态
  160. const reason = ref('')
  161. const rejectRow = ref({
  162. id: null
  163. })// 驳回行数据
  164. const popconfirmRef = ref(null)
  165. // 操作权限(金豆审核相关,与充值权限格式对齐)
  166. const hasbeanWait = ref(false) // 金豆审核待审核(对应beanWait:42)
  167. const hasbeanThrough = ref(false) // 金豆审核已通过(对应beanThrough:43)
  168. const hasbeanReject = ref(false) // 金豆审核已驳回(对应beanReject:44)
  169. const hasbeanWaitShow = ref(false) // 金豆审核待审核查看(对应beanWaitShow:45)
  170. const hasbeanWaitThough = ref(false) // 金豆审核通过(对应beanWaitThough:46)
  171. const hasbeanWaitReject = ref(false) // 金豆审核驳回(对应beanWaitReject:47)
  172. // 初始化权限状态(补充金豆审核权限,与充值权限初始化逻辑并列)
  173. const initPermissions = async () => {
  174. if (!menuTree.value || !menuTree.value.length) return;
  175. hasbeanWait.value = hasMenuPermission(menuTree.value, permissionMapping.beanWait);
  176. hasbeanThrough.value = hasMenuPermission(menuTree.value, permissionMapping.beanThrough);
  177. hasbeanReject.value = hasMenuPermission(menuTree.value, permissionMapping.beanReject);
  178. hasbeanWaitShow.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitShow);
  179. hasbeanWaitThough.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitThough);
  180. hasbeanWaitReject.value = hasMenuPermission(menuTree.value, permissionMapping.beanWaitReject);
  181. };
  182. // 设置对话框可见性
  183. const approveDialogVisible = ref(false)
  184. const clicked = ref(false)
  185. // 状态常量
  186. const STATUS = {
  187. PENDING: 0, // 待审核
  188. APPROVED: 1, // 通过
  189. REJECTED: 2 // 驳回
  190. }
  191. const cancelClicked = ref(false)
  192. // 存储地区选择变化
  193. const selectedMarkets = ref("")
  194. const searchForm = ref({
  195. jwcode: '',
  196. market: '',
  197. createStartTime: '',
  198. createEndTime: '',
  199. status: STATUS.PENDING,
  200. auditStartTime: '',
  201. auditEndTime: ''
  202. })
  203. const pagination = ref({
  204. pageNum: 1,
  205. pageSize: 50
  206. })
  207. // 合计数
  208. const stats = ref({
  209. num: 0,
  210. beanNum: 0,
  211. permanentBean: 0,
  212. freeBean: 0
  213. })
  214. const handleSortChange = (column) => {
  215. if (column.prop === 'permanentBean') {
  216. sortField.value = 'permanentBean'
  217. } else if (column.prop === 'freeBean') {
  218. sortField.value = 'freeBean'
  219. } else if (column.prop === 'createTime') {
  220. sortField.value = 'createTime'
  221. } else if (column.prop === 'auditTime') {
  222. sortField.value = 'auditTime'
  223. } else {
  224. sortField.value = ''
  225. }
  226. sortOrder.value = column.order === 'ascending' ? 'ASC' : 'DESC'
  227. console.log('排序字段:', sortField.value)
  228. console.log('排序方式:', sortOrder.value)
  229. get()
  230. }
  231. const handleSearch = async function () {
  232. trimJwCode()
  233. if (searchForm.value.jwcode) {
  234. const numRef = /^\d{1,9}$/;
  235. if (!numRef.test(searchForm.value.jwcode)) {
  236. ElMessage.error('请检查精网号格式')
  237. return
  238. }
  239. }
  240. await get()
  241. await getStats()
  242. }
  243. const get = async function () {
  244. if (!hasbeanWaitShow) {
  245. ElMessage.error('暂无权限')
  246. return
  247. }
  248. try {
  249. if (dateRange.value && dateRange.value.length === 2) {
  250. if (checkTab.value === 'pending') {
  251. searchForm.value.createStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss')
  252. searchForm.value.createEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss')
  253. } else {
  254. searchForm.value.auditStartTime = moment(dateRange.value[0]).format('YYYY-MM-DD HH:mm:ss')
  255. searchForm.value.auditEndTime = moment(dateRange.value[1]).format('YYYY-MM-DD HH:mm:ss')
  256. }
  257. } else {
  258. searchForm.value.createStartTime = ''
  259. searchForm.value.createEndTime = ''
  260. }
  261. if (checkTab.value === 'pending') {
  262. sortField.value = 'createTime'
  263. sortOrder.value = 'desc'
  264. } else {
  265. sortField.value = 'auditTime'
  266. sortOrder.value = 'desc'
  267. }
  268. const params = {
  269. pageNum: pagination.value.pageNum,//页码
  270. pageSize: pagination.value.pageSize,//页面大小
  271. beanAuditInfo: {
  272. jwcode: searchForm.value.jwcode,
  273. status: searchForm.value.status,
  274. market: searchForm.value.market,
  275. createStartTime: searchForm.value.createStartTime,
  276. createEndTime: searchForm.value.createEndTime,
  277. auditStartTime: searchForm.value.auditStartTime,
  278. auditEndTime: searchForm.value.auditEndTime,
  279. sortField: sortField.value,
  280. sortOrder: sortOrder.value
  281. }
  282. }
  283. console.log('看看传给后端的参数:', params)
  284. const res = await API({ url: '/beanAudit/selectBy', data: params })
  285. tableData.value = res.data.list || []
  286. } catch (error) {
  287. console.error('获取数据失败', error)
  288. }
  289. }
  290. const getStats = async () => {
  291. if (!hasbeanWaitShow) {
  292. ElMessage.error('暂无权限')
  293. return
  294. }
  295. try {
  296. const params = {
  297. jwcode: searchForm.value.jwcode,
  298. status: searchForm.value.status,
  299. market: searchForm.value.market,
  300. createStartTime: searchForm.value.createStartTime,
  301. createEndTime: searchForm.value.createEndTime,
  302. auditStartTime: searchForm.value.auditStartTime,
  303. auditEndTime: searchForm.value.auditEndTime
  304. }
  305. const res = await API({
  306. url: '/beanAudit/statsBean',
  307. data: params
  308. })
  309. stats.value.num = res.data.num
  310. stats.value.permanentBean = res.data.permanentBean
  311. stats.value.freeBean = res.data.freeBean
  312. stats.value.beanNum = res.data.beanNum
  313. console.log('see see stats和搜索对象', stats.value, params)
  314. } catch (error) {
  315. console.log('请求失败', error)
  316. }
  317. }
  318. // 显示通过对话框
  319. const showApproveDialog = (row) => {
  320. if (!hasbeanWaitThough) {
  321. ElMessage.error('暂无权限')
  322. return
  323. }
  324. approveDialogVisible.value = true
  325. }
  326. // 处理通过操作
  327. // 为什么使用handleApproveConfirm页面就加载不出来,使用handleApprove就可以,
  328. // (发现问题:加了防抖,名称为handleApprove,修改名称一致即可)
  329. const handleApproveConfirm = async (row) => {
  330. if (!hasbeanWaitThough) {
  331. ElMessage.error('暂无权限')
  332. return
  333. }
  334. clicked.value = true
  335. try {
  336. const params = {
  337. id: row.id,
  338. auditName: adminData.value.adminName
  339. }
  340. await API({ url: '/beanAudit/status1', data: params })
  341. ElMessage.success('审核通过成功')
  342. approveDialogVisible.value = false
  343. await get()
  344. clicked.value = false
  345. await getStats()
  346. } catch (error) {
  347. console.error('审核通过失败', error)
  348. ElMessage.error('操作失败')
  349. }
  350. }
  351. // 处理通过取消操作
  352. const handleApproveCancel = () => {
  353. approveDialogVisible.value = false
  354. }
  355. // 处理通过关闭操作
  356. const handleApproveClose = () => {
  357. approveDialogVisible.value = false
  358. }
  359. // 处理驳回操作
  360. const handleReject = async () => {
  361. if (!hasbeanWaitReject) {
  362. ElMessage.error('暂无权限')
  363. return
  364. }
  365. cancelClicked.value = true
  366. if (!reason.value.trim()) {
  367. ElMessage.warning('请输入驳回理由')
  368. return
  369. }
  370. try {
  371. const params = {
  372. id: rejectRow.value.id,
  373. auditName: adminData.value.adminName,
  374. reason: reason.value
  375. }
  376. await API({ url: '/beanAudit/status2', data: params })
  377. ElMessage.success('驳回成功')
  378. rejectReasonDialogVisible.value = false
  379. await get()
  380. cancelClicked.value = false
  381. await getStats()
  382. } catch (error) {
  383. console.error('驳回失败', error)
  384. ElMessage.error('操作失败')
  385. }
  386. }
  387. // 确认驳回后显示理由输入框
  388. const showRejectReasonInput = () => {
  389. rejectDialogVisible.value = false // 关闭确认对话框
  390. rejectReasonDialogVisible.value = true // 打开驳回理由输入框
  391. }
  392. // 处理驳回取消操作
  393. const handleRejectCancel = () => {
  394. rejectDialogVisible.value = false
  395. }
  396. // 处理驳回关闭操作
  397. const handleRejectClose = () => {
  398. rejectDialogVisible.value = false
  399. }
  400. // 这个防抖好像还不能放在定义之前(handleApproveConfirm)
  401. const throttledHandleApprove = _.throttle(handleApproveConfirm, 5000, {
  402. trailing: false
  403. })
  404. // 显示驳回对话框
  405. const showRejectDialog = (row) => {
  406. if (!hasbeanWaitReject) {
  407. ElMessage.error('暂无权限')
  408. return
  409. }
  410. rejectRow.value.id = row.id
  411. reason.value = ''
  412. rejectDialogVisible.value = true
  413. }
  414. const getToday = async function () {
  415. const today = dayjs()
  416. const startTime = today.startOf('day').format('YYYY-MM-DD HH:mm:ss')
  417. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  418. dateRange.value = [startTime, endTime]
  419. console.log('dateRange', dateRange.value)
  420. activeTimeRange.value = 'today'
  421. await get()
  422. await getStats()
  423. }
  424. const getYesterday = async function () {
  425. const today = dayjs()
  426. const startTime = today.subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  427. const endTime = today.subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:ss')
  428. dateRange.value = [startTime, endTime]
  429. console.log('dateRange', dateRange.value)
  430. activeTimeRange.value = 'yesterday'
  431. await get()
  432. await getStats()
  433. }
  434. const get7Days = async function () {
  435. const today = dayjs()
  436. const startTime = today.subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss')
  437. const endTime = today.endOf('day').format('YYYY-MM-DD HH:mm:ss')
  438. dateRange.value = [startTime, endTime]
  439. console.log('dateRange', dateRange.value)
  440. activeTimeRange.value = '7days'
  441. await get()
  442. await getStats()
  443. }
  444. const resetSearch = async function () {
  445. const status = searchForm.value.status;
  446. searchForm.value = {
  447. jwcode: '',
  448. market: '',
  449. createStartTime: '',
  450. createEndTime: '',
  451. status: status,
  452. auditStartTime: '',
  453. auditEndTime: ''
  454. }
  455. selectedMarkets.value = []
  456. dateRange.value = []
  457. activeTimeRange.value = ''
  458. await get()
  459. await getStats()
  460. }
  461. const handleClick = async function (tab) {
  462. checkTab.value = tab.props.name
  463. if (tab.props.name === 'pending') {
  464. if (!hasbeanWait) {
  465. ElMessage.error('暂无权限')
  466. return
  467. }
  468. adminWait()
  469. } else if (tab.props.name === 'pass') {
  470. if (!hasbeanThrough) {
  471. ElMessage.error('暂无权限')
  472. return
  473. }
  474. adminPass()
  475. } else if (tab.props.name === 'reject') {
  476. if (!hasbeanReject) {
  477. ElMessage.error('暂无权限')
  478. return
  479. }
  480. adminReject()
  481. }
  482. }
  483. // 待审核
  484. const adminWait = async function () {
  485. checkTab.value = 'pending'
  486. searchForm.value.status = STATUS.PENDING
  487. await get()
  488. await getStats()
  489. console.log('切换页面后:', checkTab.value, sortField.value, sortOrder.value)
  490. }
  491. // 已通过
  492. const adminPass = async function () {
  493. checkTab.value = 'pass'
  494. searchForm.value.status = STATUS.APPROVED
  495. await get()
  496. await getStats()
  497. console.log('切换页面后:', checkTab.value, sortField.value, sortOrder.value)
  498. }
  499. // 已驳回
  500. const adminReject = async function () {
  501. checkTab.value = 'reject'
  502. searchForm.value.status = STATUS.REJECTED
  503. await get()
  504. await getStats()
  505. console.log('切换页面后:', checkTab.value, sortField.value, sortOrder.value)
  506. }
  507. const handleMarketChange = (value) => {
  508. if (value && value.length > 0) {
  509. searchForm.value.market = value[value.length - 1]
  510. } else {
  511. searchForm.value.market = ''
  512. }
  513. }
  514. const handleDatePickerChange = () => {
  515. activeTimeRange.value = ''
  516. }
  517. const handlePageSizeChange = function (val) {
  518. pagination.value.pageSize = val
  519. get()
  520. }
  521. const handleCurrentChange = function (val) {
  522. pagination.value.pageNum = val
  523. get()
  524. }
  525. const format3 = (num) => {
  526. // 每三位添加逗号
  527. return num.toLocaleString('en-US')
  528. }
  529. // 获取地区,修改为级联下拉框
  530. const getmarkets = async function () {
  531. try {
  532. const result = await API({
  533. url: '/market/selectMarket',
  534. });
  535. console.log('请求成功', result)
  536. // 递归转换树形结构为级联选择器需要的格式(跳过第一级节点)
  537. const transformTree = (nodes) => {
  538. // 直接处理第一级节点的子节点
  539. const allChildren = nodes.flatMap(node => node.children || []);
  540. return allChildren.map(child => {
  541. const grandchildren = child.children && child.children.length
  542. ? transformTree([child]) // 递归处理子节点
  543. : null;
  544. return {
  545. value: child.name,
  546. label: child.name,
  547. children: grandchildren
  548. }
  549. })
  550. }
  551. marketOptions.value = transformTree(result.data)
  552. console.log('转换后的地区树==============', marketOptions.value)
  553. } catch (error) {
  554. console.log('请求失败', error)
  555. }
  556. }
  557. const trimJwCode = () => {
  558. if (searchForm.value.jwcode) {
  559. searchForm.value.jwcode = searchForm.value.jwcode.replace(/\s/g, '');
  560. }
  561. }
  562. onMounted(async () => {
  563. await initPermissions()
  564. if (hasbeanWaitShow.value) {
  565. searchForm.value.status = 0
  566. } else if (hasbeanThrough.value) {
  567. searchForm.value.status = 1
  568. } else if (hasbeanReject) {
  569. searchForm.value.status = 2
  570. }
  571. getmarkets()
  572. await get()
  573. await getStats()
  574. console.log("看看通信来的用户身份", adminData.value)
  575. })
  576. </script>
  577. <style scoped lang="scss">
  578. .pagination {
  579. display: flex;
  580. margin-top: 1vh;
  581. }
  582. /* 搜索的卡片样式 */
  583. .card1 {
  584. background: #F3FAFE;
  585. }
  586. /* 表单的卡片样式 */
  587. .card2 {
  588. background: #E7F4FD;
  589. }
  590. /* 自定义按钮组布局 */
  591. .custom-button-group {
  592. display: flex;
  593. margin-bottom: 16px;
  594. }
  595. /* 自定义按钮样式 */
  596. :deep(.el-button.custom-tab-button) {
  597. border-radius: 4px;
  598. transition: all 0.3s ease;
  599. }
  600. /* 激活状态的按钮样式 */
  601. :deep(.el-button.custom-tab-button.el-button--primary) {
  602. background-color: #2741DE !important;
  603. border-color: #2741DE !important;
  604. color: #F3FAFE !important;
  605. }
  606. /* 悬停效果 */
  607. :deep(.el-button.custom-tab-button:hover:not(.is-disabled)) {
  608. opacity: 0.8;
  609. }
  610. /* 充值新币总数等等 */
  611. .goldStatistics {
  612. margin-left: 1vw;
  613. margin-bottom: 1vh;
  614. color: #000000;
  615. font-family: "PingFang SC";
  616. font-size: 16px;
  617. font-style: normal;
  618. font-weight: 700;
  619. line-height: 20px;
  620. }
  621. /* 表头/表体 wrapper 与 table body 单元格 */
  622. :deep(.el-table__header-wrapper),
  623. :deep(.el-table__body-wrapper),
  624. :deep(.el-table__cell),
  625. /* 表格 */
  626. :deep(.el-table__body td) {
  627. background-color: #F3FAFE !important;
  628. }
  629. /* 表头 */
  630. :deep(.el-table__header th) {
  631. background-color: #F3FAFE !important;
  632. }
  633. /* 鼠标悬停 */
  634. :deep(.el-table__row:hover > .el-table__cell) {
  635. background-color: #E5EBFE !important;
  636. }
  637. .select {
  638. display: flex;
  639. .selectRow {
  640. width: 17vw;
  641. display: flex;
  642. align-items: center;
  643. justify-content: center;
  644. padding: 0 0.5vw;
  645. .text {
  646. width: 5vw;
  647. font-size: 15px;
  648. }
  649. .selectContent {
  650. flex: 1;
  651. }
  652. }
  653. }
  654. </style>