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.

330 lines
10 KiB

1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
4 weeks ago
4 weeks ago
  1. <script setup>
  2. // 导航栏在这
  3. import { ref, onMounted } from 'vue'
  4. import { useRouter } from 'vue-router'
  5. import ElementPlus from 'element-plus'
  6. import { VscGlobe } from 'vue-icons-plus/vsc'
  7. import { ElMessage } from 'element-plus'
  8. import axios from 'axios'
  9. import API from '@/util/http'
  10. import dmmn from '../assets/link.png'
  11. import { useRoute } from 'vue-router'
  12. import moment from 'moment'
  13. const router = useRouter()
  14. const imgrule1 = dmmn
  15. const messageVisible = ref(false)
  16. // 这是获取用户信息的接口
  17. const adminData = ref({
  18. name: ''
  19. })
  20. const getAdminData = async function () {
  21. try {
  22. const result = await API({ url: '/admin/userinfo', data: {} })
  23. adminData.value = result
  24. console.log('请求成功', result)
  25. console.log('用户信息', adminData.value)
  26. } catch (error) {
  27. console.log('请求失败', error)
  28. }
  29. }
  30. // 获取地区
  31. const areas = ref([])
  32. const currentArea = ref('全部')
  33. const getAreas = async function () {
  34. try {
  35. const result = await API({ url: '/general/market', data: {} })
  36. areas.value = result.data
  37. console.log('请求成功', result)
  38. } catch (error) {
  39. console.log('请求失败', error)
  40. }
  41. }
  42. // 查看个人信息弹出框
  43. const openMessage = function () {
  44. messageVisible.value = true
  45. }
  46. const closeMessage = function () {
  47. messageVisible.value = false
  48. }
  49. const message = function () {
  50. openMessage()
  51. }
  52. // 导出列表数据
  53. const exportList = ref([])
  54. // 导出列表加载状态
  55. const exportListLoading = ref(false)
  56. // 获取导出列表
  57. const getExportList = async () => {
  58. exportListLoading.value = true
  59. try {
  60. const result = await API({ url: '/export/export' })
  61. if (result.code === 200) {
  62. exportList.value = result.data
  63. } else {
  64. ElMessage.error(result.msg || '获取导出列表失败')
  65. }
  66. } catch (error) {
  67. console.error('获取导出列表出错:', error)
  68. ElMessage.error('获取导出列表失败,请稍后重试')
  69. } finally {
  70. exportListLoading.value = false
  71. }
  72. }
  73. // 下载导出文件
  74. const downloadExportFile = (item) => {
  75. if (item.state === 2) {
  76. const link = document.createElement('a')
  77. link.href = item.url
  78. link.download = item.fileName
  79. link.click()
  80. } else {
  81. ElMessage.warning('文件还在导出中,请稍后再试')
  82. }
  83. }
  84. function logout() {
  85. const machineId = localStorage.getItem('machineId')
  86. localStorage.removeItem('token')
  87. router.push('/login?machineId=' + machineId)
  88. ElMessage.success('退出成功')
  89. }
  90. // 挂载
  91. onMounted(async function () {
  92. // 获取用户信息
  93. getAdminData()
  94. // 初始化获取导出列表
  95. await getExportList()
  96. })
  97. // 处理地区点击事件,直接在组件内更新当前地区,包老师改的,直接传参
  98. const changeDataByArea = (item) => {
  99. currentArea.value = item
  100. }
  101. // 控制导出列表弹窗显示状态
  102. const exportListVisible = ref(false)
  103. // 打开导出列表弹窗
  104. const openExportList = () => {
  105. getExportList()
  106. exportListVisible.value = true
  107. }
  108. </script>
  109. <template>
  110. <div class="common-layout">
  111. <el-container>
  112. <el-aside style="
  113. width: 15%;
  114. min-width: 180px;
  115. position: fixed; /* 固定位置 */
  116. top: 0;
  117. left: 0;
  118. height: 100vh; /* 高度占满视口 */
  119. z-index: 100; /* 确保侧边栏在其他元素之上 */
  120. ">
  121. <div class="logo">
  122. <img src="../assets/新logo.png" alt="logo" style="width: 80px; height: 80px" />
  123. <!-- <div style="font-size: 16px; font-weight: bold; color: black; text-align: center;" ><h1>海外金币管理系统</h1></div> -->
  124. </div>
  125. <el-card style="min-height: 90%;">
  126. <el-menu :router="true" class="el-menu-vertical-demo">
  127. <el-menu-item index="/workspace">
  128. <el-icon>
  129. <Folder />
  130. </el-icon>
  131. <span>工作台</span>
  132. </el-menu-item>
  133. <el-sub-menu index="2">
  134. <template #title>
  135. <el-icon>
  136. <Folder />
  137. </el-icon>
  138. <span>财务审核</span>
  139. </template>
  140. <el-menu-item index="/rechargeAudit">充值审核</el-menu-item>
  141. <el-menu-item index="/refundAudit">退款审核</el-menu-item>
  142. </el-sub-menu>
  143. <el-menu-item index="/rate">
  144. <el-icon>
  145. <Folder />
  146. </el-icon>
  147. <span>汇率管理</span>
  148. </el-menu-item>
  149. <el-sub-menu index="4">
  150. <template #title>
  151. <el-icon>
  152. <Folder />
  153. </el-icon>
  154. <span>充值管理</span>
  155. </template>
  156. <el-menu-item index="/coinRecharge">金币充值</el-menu-item>
  157. <!-- <el-menu-item index="/beanRecharge">金豆充值</el-menu-item> -->
  158. </el-sub-menu>
  159. <el-sub-menu index="6">
  160. <template #title>
  161. <el-icon>
  162. <Folder />
  163. </el-icon>
  164. <span>消耗管理</span>
  165. </template>
  166. <el-menu-item index="/coinConsume">金币消耗</el-menu-item>
  167. <!-- <el-menu-item index="/beanConsume">金豆消耗</el-menu-item> -->
  168. </el-sub-menu>
  169. <el-sub-menu index="8">
  170. <template #title>
  171. <el-icon>
  172. <Folder />
  173. </el-icon>
  174. <span>退款管理</span>
  175. </template>
  176. <el-menu-item index="/coinRefund">金币退款</el-menu-item>
  177. <!-- <el-menu-item index="/beanRefund">金豆退款</el-menu-item> -->
  178. </el-sub-menu>
  179. <el-menu-item index="/usergold">
  180. <el-icon>
  181. <Folder />
  182. </el-icon>
  183. <span>客户账户明细</span>
  184. </el-menu-item>
  185. <el-menu-item index="/permissions">
  186. <el-icon>
  187. <Folder />
  188. </el-icon>
  189. <span>权限管理</span>
  190. </el-menu-item>
  191. </el-menu>
  192. </el-card>
  193. </el-aside>
  194. <el-container style="margin-left: 15%; min-width: 180px">
  195. <!-- 修改 el-header 样式 -->
  196. <el-header style="
  197. position: fixed;
  198. top: 0;
  199. left: 15%;
  200. right: 0;
  201. z-index: 80;
  202. background: white;
  203. ">
  204. <el-menu class="el-menu-demo" mode="horizontal" :ellipsis="false">
  205. <el-sub-menu index="1" class="admin">
  206. <template #title>
  207. <el-image :src="imgrule1" alt="错误" style="width: 50px; height: 50px" />
  208. <span style="margin-left: 10px">{{ adminData.name }}</span>
  209. </template>
  210. <el-menu-item @click="message()">查看个人信息</el-menu-item>
  211. <el-menu-item @click="logout">退出登录</el-menu-item>
  212. </el-sub-menu>
  213. </el-menu>
  214. </el-header>
  215. <el-main style="margin-top: 60px">
  216. <!-- 60px el-header 的大致高度可根据实际情况调整 -->
  217. <router-view></router-view>
  218. </el-main>
  219. </el-container>
  220. </el-container>
  221. <!-- 查看个人信息 -->
  222. <el-dialog v-model="messageVisible" title="查看个人信息" width="500px">
  223. <el-form :model="adminData">
  224. <el-form-item label="用户姓名" label-width="100px" label-position="left">
  225. <span class="message-font">{{ adminData.adminName }}</span>
  226. </el-form-item>
  227. <el-form-item label="精网号" label-width="100px" label-position="left">
  228. <span class="message-font">{{ adminData.account }}</span>
  229. </el-form-item>
  230. <el-form-item label="地区" label-width="100px" label-position="left">
  231. <span class="message-font">{{ adminData.market }}</span>
  232. </el-form-item>
  233. <el-form-item label="注册时间" label-width="100px" label-position="left">
  234. <span class="message-font">{{ adminData.createTime }}</span>
  235. </el-form-item>
  236. </el-form>
  237. <template #footer>
  238. <div class="dialog-footer">
  239. <el-button text @click="closeMessage()">关闭</el-button>
  240. </div>
  241. </template>
  242. </el-dialog>
  243. <!-- 导出列表弹窗 -->
  244. <el-dialog v-model="exportListVisible" title="导出列表" width="80%">
  245. <el-table :data="exportList" style="width: 100%" :loading="exportListLoading">
  246. <el-table-column prop="fileName" label="文件名" />
  247. <el-table-column prop="state" label="状态">
  248. <template #default="scope">
  249. <el-tag :type="scope.row.state === 2 ? 'success' : 'warning'">
  250. {{ scope.row.state === 2 ? '已完成' : '导出失败' }}
  251. </el-tag>
  252. </template>
  253. </el-table-column>
  254. <el-table-column prop="createTime" label="创建时间">
  255. <template #default="scope">
  256. {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
  257. </template>
  258. </el-table-column>
  259. <el-table-column label="操作">
  260. <template #default="scope">
  261. <el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
  262. :disabled="scope.row.state !== 2">
  263. 下载
  264. </el-button>
  265. </template>
  266. </el-table-column>
  267. </el-table>
  268. <template #footer>
  269. <div class="dialog-footer">
  270. <el-button text @click="exportListVisible = false">关闭</el-button>
  271. </div>
  272. </template>
  273. </el-dialog>
  274. </div>
  275. </template>
  276. <style scoped>
  277. .message-font {
  278. font-size: 16px;
  279. font-weight: bold;
  280. }
  281. .admin {
  282. margin-left: auto;
  283. }
  284. .el-aside {
  285. min-height: 100vh;
  286. width: 200px;
  287. }
  288. /* background-color: #BFD8D2; */
  289. .logo {
  290. margin: 20px 0px 20px 20px;
  291. display: flex;
  292. }
  293. .el-menu-demo {
  294. border: none;
  295. /* 去除边框 */
  296. padding: 0;
  297. /* 去除内边距 */
  298. float: right;
  299. /* 将菜单向右浮动 */
  300. }
  301. .el-menu-vertical-demo:not(.el-menu--collapse) {
  302. width: 240px;
  303. min-height: 400px;
  304. border: none;
  305. /* 去除边框 */
  306. }
  307. </style>